From a29d9d644a2a30e9ef4afcc6d728c20c218dc359 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期四, 15 六月 2023 14:25:28 +0800 Subject: [PATCH] 2023-06-15 --- src/templates/subtableconfig/index.jsx | 408 +++++++++++++++++++++++++--------------------------------- 1 files changed, 175 insertions(+), 233 deletions(-) diff --git a/src/templates/subtableconfig/index.jsx b/src/templates/subtableconfig/index.jsx index beed453..19bfb12 100644 --- a/src/templates/subtableconfig/index.jsx +++ b/src/templates/subtableconfig/index.jsx @@ -1,16 +1,13 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' -import {connect} from 'react-redux' import { is, fromJS } from 'immutable' import { DndProvider } from 'react-dnd' import HTML5Backend from 'react-dnd-html5-backend' import { Button, Card, Modal, Collapse, notification, Spin, Switch, Tooltip, Col } from 'antd' import { QuestionCircleOutlined, RedoOutlined } from '@ant-design/icons' -import moment from 'moment' +// import moment from 'moment' import Api from '@/api' -import zhCN from '@/locales/zh-CN/model.js' -import enUS from '@/locales/en-US/model.js' import Utils from '@/utils/utils.js' import { updateSubTable } from '@/utils/utils-update.js' @@ -28,7 +25,7 @@ const { confirm } = Modal const Versions = asyncComponent(() => import('@/menu/versions')) -const ReplaceField = asyncComponent(() => import('@/menu/replaceField')) +// const ReplaceField = asyncComponent(() => import('@/menu/replaceField')) const EditComponent = asyncComponent(() => import('@/templates/zshare/editcomponent')) const SettingComponent = asyncComponent(() => import('@/templates/sharecomponent/settingcomponent')) const TableComponent = asyncComponent(() => import('@/templates/sharecomponent/tablecomponent')) @@ -50,7 +47,6 @@ } state = { - dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, // 瀛楀吀 config: null, // 椤甸潰閰嶇疆 visible: false, // 鎼滅储鏉′欢銆佹寜閽�佹樉绀哄垪锛屾ā鎬佹鏄剧ず鎺у埗 menuloading: false, // 鑿滃崟淇濆瓨涓� @@ -62,10 +58,9 @@ delActions: [], // 鍒犻櫎鎸夐挳鍒楄〃 copyActions: [], // 澶嶅埗鎸夐挳缁� tabviews: [], // 鎵�鏈夋爣绛鹃〉 - thawButtons: [], // 宸查�夋嫨瑕佽В鍐荤殑鎸夐挳 activeKey: '0', // 榛樿灞曞紑鍩烘湰淇℃伅 chartview: null, // 褰撳墠瑙嗗浘 - openEdition: '' // 缂栬緫鐗堟湰鏍囪锛岄槻姝㈠浜烘搷浣� + openEdition: '', // 缂栬緫鐗堟湰鏍囪锛岄槻姝㈠浜烘搷浣� } /** @@ -117,7 +112,7 @@ this.setState({ openEdition: editSubTab ? (editSubTab.open_edition || '') : (editTab.open_edition || ''), - chartview: _config.charts[0].uuid, + chartview: _config.charts ? _config.charts[0].uuid : '', originActions: _oriActions, config: _config, activeKey: _activeKey || '0', @@ -132,6 +127,54 @@ */ componentDidMount () { this.reloadTab(false) + document.onkeydown = (event) => { + let e = event || window.event + let keyCode = e.keyCode || e.which || e.charCode + let preKey = '' + + if (e.ctrlKey) { + preKey = 'ctrl' + } + if (e.shiftKey) { + preKey = 'shift' + } else if (e.altKey) { + preKey = 'alt' + } + + if (!preKey || !keyCode) return + + let _shortcut = `${preKey}+${keyCode}` + + if (_shortcut === 'ctrl+83') { + let modals = document.querySelectorAll('.mk-pop-modal') + let msg = null + for (let i = 0; i < modals.length; i++) { + if (msg) { + break + } + + let node = modals[i].querySelector('.mk-com-name') + + if (node) { + msg = node.innerText + } + } + if (msg) { + notification.warning({ + top: 92, + message: '璇蜂繚瀛�' + msg, + duration: 5 + }) + return false + } + + let node = document.getElementById('save-config') + if (node && node.click) { + node.click() + } + return false + } + } } /** @@ -191,6 +234,7 @@ this.setState = () => { return } + document.onkeydown = () => {} } // 椤甸潰杩斿洖 @@ -239,7 +283,7 @@ * @description 鏍囩椤典繚瀛� */ submitConfig = () => { - const { delActions, thawButtons, openEdition } = this.state + const { delActions, openEdition } = this.state let _config = fromJS(this.state.config).toJS() let copyreg = /\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}$/ig @@ -247,7 +291,7 @@ if (!_config.tabName || !_config.tabNo) { notification.warning({ top: 92, - message: this.state.dict['model.menu.basemsg'], + message: '璇峰畬鍠勮彍鍗曞熀鏈俊鎭紒', duration: 5 }) this.setState({activeKey: '0'}) @@ -275,6 +319,10 @@ } } + if (_config.setting.doubleClick && _config.action.findIndex((item) => item.uuid === _config.setting.doubleClick) === -1) { + _config.setting.doubleClick = '' + } + // 鏈缃暟鎹簮鎴栦富閿椂锛屽惎鐢ㄧ姸鎬佷负false let result = this.verifyconfig(_config) @@ -292,11 +340,11 @@ }) } + let _LongParam = '' + // 淇濆瓨鏃跺垹闄ら厤缃被鍨嬶紝system 銆乽ser delete _config.type delete _config.isAdd - - let _LongParam = '' try { _LongParam = window.btoa(window.encodeURIComponent(JSON.stringify(_config))) @@ -314,40 +362,41 @@ return } - let btnParam = { - func: 'sPC_Button_AddUpt', - Type: 40, - ParentID: _config.uuid, - MenuNo: _config.tabNo, - Template: 'SubTable', - PageParam: '', - LongParam: '', - LText: [] - } + // let btnParam = { + // func: 'sPC_Button_AddUpt', + // Type: 40, + // ParentID: _config.uuid, + // MenuNo: _config.tabNo, + // Template: 'SubTable', + // PageParam: '', + // LongParam: '', + // LText: [] + // } - let btntabs = [] + // let btntabs = [] - _config.action.forEach((item, index) => { - if (item.OpenType === 'popview') { - btntabs.push(`select '${item.uuid}' as MenuID ,'${item.linkTab}' as Tabid,'${item.label}' as TabName ,'${(index + 1) * 10}' as Sort`) - } - btnParam.LText.push(`select '${item.uuid}' as menuid, '${item.label}' as menuname, '${(index + 1) * 10}' as Sort`) - }) + // _config.action.forEach((item, index) => { + // if (item.hidden === 'true') return + // if (item.OpenType === 'popview') { + // btntabs.push(`select '${item.uuid}' as MenuID ,'${item.linkTab}' as Tabid,'${item.label}' as TabName ,'${(index + 1) * 10}' as Sort`) + // } + // btnParam.LText.push(`select '${item.uuid}' as menuid, '${item.label}' as menuname, '${(index + 1) * 10}' as Sort`) + // }) - btnParam.LText = btnParam.LText.join(' union all ') - btnParam.LText = Utils.formatOptions(btnParam.LText) - btnParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') - btnParam.secretkey = Utils.encrypt(btnParam.LText, btnParam.timestamp) + // btnParam.LText = btnParam.LText.join(' union all ') + // btnParam.LText = Utils.formatOptions(btnParam.LText) + // btnParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + // btnParam.secretkey = Utils.encrypt(btnParam.LText, btnParam.timestamp) - let tabParam = { // 娣诲姞鏍囩鎸夐挳tab椤� - func: 'sPC_sMenusTab_AddUpt', - MenuID: _config.uuid, - LText: btntabs.join(' union all ') - } + // let tabParam = { // 娣诲姞鏍囩鎸夐挳tab椤� + // func: 'sPC_sMenusTab_AddUpt', + // MenuID: _config.uuid, + // LText: btntabs.join(' union all ') + // } - tabParam.LText = Utils.formatOptions(tabParam.LText) - tabParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') - tabParam.secretkey = Utils.encrypt(tabParam.LText, tabParam.timestamp) + // tabParam.LText = Utils.formatOptions(tabParam.LText) + // tabParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + // tabParam.secretkey = Utils.encrypt(tabParam.LText, tabParam.timestamp) let param = { func: 'sPC_Tab_AddUpt', @@ -426,26 +475,7 @@ }).then(resp => { if (resp === false) return - if (thawButtons.length > 0) { - let defers = thawButtons.map(item => { - return new Promise((resolve) => { - Api.getSystemConfig({ - func: 'sPC_MainMenu_ReDel', - MenuID: item - }).then(res => { - if (res.status) { - resolve('') - } else { - resolve(res.message) - } - }) - }) - }) - - return Promise.all(defers) - } else { - return true - } + return true }).then(res => { if (res === true || res === false) return res @@ -458,9 +488,6 @@ }) return false } else { - this.setState({ - thawButtons: [] - }) return true } }).then(resp => { @@ -477,8 +504,16 @@ menuloading: false, menucloseloading: false }) - this.submitAction(btnParam, tabParam) + notification.success({ + top: 92, + message: '淇濆瓨鎴愬姛', + duration: 2 + }) + if (this.state.closeVisible) { + this.handleViewBack() + } }) + this.submitAction() } else { this.setState({ menuloading: false, @@ -497,131 +532,56 @@ /** * @description 淇濆瓨鎴栦慨鏀硅彍鍗曟寜閽� */ - submitAction = (btnParam, tabParam) => { + submitAction = () => { const { config } = this.state - new Promise(resolve => { - let deffers = [] + let oriActions = [] + this.state.originActions.forEach(item => { + let curBtn = config.action.filter(cell => item.curuuid === cell.uuid)[0] // 鏌ョ湅鍒濆鍖栨寜閽槸鍚﹀瓨鍦� + if (!curBtn) return + if (curBtn.OpenType !== item.prebtn.OpenType) return + if (curBtn.OpenType === 'funcbutton' && curBtn.execMode !== 'pop') return - if (tabParam.LText) { - let defer = new Promise(resolve => { - Api.getSystemConfig(tabParam).then(result => { - resolve(result) - }) - }) - deffers.push(defer) - } - - if (btnParam.LText) { - let defer = new Promise(resolve => { - Api.getSystemConfig(btnParam).then(result => { - if (result.status) { - this.setState({ // 淇濆瓨鎴愬姛鍚庢竻绌哄鍒跺垪琛� - copyActions: [] - }) - } - resolve(result) - }) - }) - deffers.push(defer) - } - - if (deffers.length === 0) { - resolve(true) - } else { - Promise.all(deffers).then(result => { - let error = false - result.forEach(res => { - if (!res.status) { - error = res - } - }) - - if (error) { - notification.warning({ - top: 92, - message: error.message, - duration: 5 - }) - resolve(false) - } else { - resolve(true) - } - }) - } - }).then(response => { - if (response === false) return response - - let oriActions = [] - this.state.originActions.forEach(item => { - let curBtn = config.action.filter(cell => item.curuuid === cell.uuid)[0] // 鏌ョ湅鍒濆鍖栨寜閽槸鍚﹀瓨鍦� - if (!curBtn) return - if (curBtn.OpenType !== item.prebtn.OpenType) return - if (curBtn.OpenType === 'funcbutton' && curBtn.execMode !== 'pop') return - - oriActions.push({ - prebtn: item.prebtn, - curBtn: curBtn - }) + oriActions.push({ + prebtn: item.prebtn, + curBtn: curBtn }) + }) - if (oriActions.length === 0) return 'true' + if (oriActions.length === 0) return - oriActions.forEach(action => { - Api.getSystemConfig({ - func: 'sPC_Get_LongParam', - MenuID: action.prebtn ? action.prebtn.uuid : '' - }).then(result => { - if (result.status && result.LongParam) { - let _LongParam = '' - - if (result.LongParam) { - try { - _LongParam = JSON.parse(window.decodeURIComponent(window.atob(result.LongParam))) - } catch (e) { - console.warn('Parse Failure') - _LongParam = '' - } - } + oriActions.forEach(action => { + Api.getSystemConfig({ + func: 'sPC_Get_LongParam', + MenuID: action.prebtn ? action.prebtn.uuid : '' + }).then(result => { + if (result.status && result.LongParam) { + let _LongParam = '' - if (_LongParam) { - let param = { - func: 'sPC_ButtonParam_AddUpt', - ParentID: config.uuid, - MenuID: action.curBtn.uuid, - MenuNo: config.tabNo, - Template: _LongParam.type, - MenuName: action.curBtn.label, - PageParam: JSON.stringify({Template: _LongParam.type}), - LongParam: result.LongParam - } - Api.getSystemConfig(param).then(() => {}) + if (result.LongParam) { + try { + _LongParam = JSON.parse(window.decodeURIComponent(window.atob(result.LongParam))) + } catch (e) { + console.warn('Parse Failure') + _LongParam = '' } } - }) - }) - return 'true' - }).then(response => { - if (response === 'true') { - notification.success({ - top: 92, - message: '淇濆瓨鎴愬姛', - duration: 2 - }) - if (this.state.closeVisible) { - this.handleViewBack() - } else { - this.setState({ - menuloading: false, - menucloseloading: false - }) + + if (_LongParam) { + let param = { + func: 'sPC_ButtonParam_AddUpt', + ParentID: config.uuid, + MenuID: action.curBtn.uuid, + MenuNo: config.tabNo, + Template: _LongParam.type, + MenuName: action.curBtn.label, + PageParam: JSON.stringify({Template: _LongParam.type}), + LongParam: result.LongParam + } + Api.getSystemConfig(param).then(() => {}) + } } - } else { - this.setState({ - menuloading: false, - menucloseloading: false - }) - } + }) }) } @@ -824,27 +784,7 @@ } }) - config.action && config.action.forEach((btn) => { - if (['prompt', 'exec', 'pop'].includes(btn.OpenType) && btn.Ot === 'required' && btn.verify && btn.verify.scripts && btn.verify.scripts.length > 0) { - let hascheck = false - btn.verify.scripts.forEach(item => { - if (item.status === 'false') return - - if (/\$check@|@check\$/ig.test(item.sql)) { - hascheck = true - } - }) - if (hascheck) { - notification.warning({ - top: 92, - message: `鍙�夋嫨澶氳鐨勬寜閽��${btn.label}銆嬩腑 $check@ 鎴� @check$ 灏嗕笉浼氱敓鏁堬紒`, - duration: 5 - }) - } - } - }) - - if ((config.setting.interType === 'system' || config.setting.requestMode === 'system') && config.setting.default === 'false' && config.setting.scripts && config.setting.scripts.filter(item => item.status !== 'false').length === 0) { + if (config.setting.interType === 'system' && config.setting.default === 'false' && config.setting.scripts && config.setting.scripts.filter(item => item.status !== 'false').length === 0) { return '鏁版嵁婧愪腑涓嶆墽琛岄粯璁ql锛屼笖鏈坊鍔犺嚜瀹氫箟鑴氭湰锛屼笉鍙惎鐢紒' } else if (config.setting.interType === 'custom' && config.setting.procMode !== 'inner' && config.setting.preScripts && config.setting.preScripts.filter(item => item.status !== 'false').length === 0) { return '鏁版嵁婧愭湭璁剧疆鍓嶇疆鑴氭湰锛屼笉鍙惎鐢紒' @@ -868,7 +808,6 @@ */ updateConfig = (res) => { this.setState({ - thawButtons: res.thawButtons, config: res.config }) } @@ -952,7 +891,7 @@ config: null }, () => { this.setState({ - chartview: _config.charts[0].uuid, + chartview: _config.charts ? _config.charts[0].uuid : '', config: _config, openEdition: res.open_edition || '', activeKey: '0', @@ -987,7 +926,6 @@ <Panel forceRender={true} header={'鏍囩鍩烘湰淇℃伅'} key="0" id="subtable-basedata"> {/* 鑿滃崟淇℃伅 */} <MenuForm - dict={this.state.dict} config={config} updatemenu={this.updateconfig} /> @@ -999,7 +937,7 @@ /> </Panel> {/* 鎼滅储鏉′欢娣诲姞 */} - <Panel header={this.state.dict['header.menu.search']} key="1"> + <Panel header="鎼滅储" key="1"> <div className="search-element"> {Source.searchItems.map((item, index) => { return (<SourceElement key={index} content={item}/>) @@ -1008,7 +946,7 @@ <FieldsComponent config={config} type="search" /> </Panel> {/* 鎸夐挳娣诲姞 */} - <Panel header={this.state.dict['header.menu.action']} key="2"> + <Panel header="鎸夐挳" key="2"> <div className="search-element"> {Source.actionItems.map((item, index) => { return (<SourceElement key={index} content={item}/>) @@ -1020,7 +958,7 @@ <Tooltip placement="topLeft" title="鐐瑰嚮鎸夐挳锛屽彲瀹屾垚鎴栨煡鐪嬫寜閽厤缃俊鎭��"> <QuestionCircleOutlined className="mk-form-tip" /> </Tooltip> - {this.state.dict['header.menu.action.configurable']} + 鎸夐挳閰嶇疆 </p> : null } </div> @@ -1038,7 +976,7 @@ })} </Panel> {/* 娣诲姞鏄剧ず鍒� */} - <Panel header={this.state.dict['header.menu.column']} key="3"> + <Panel header="鏄剧ず鍒�" key="3"> <div className="search-element"> {Source.columnItems.map((item, index) => { return (<SourceElement key={index} content={item}/>) @@ -1057,11 +995,11 @@ } bordered={false} extra={ <div> <Versions MenuId={config.uuid} open_edition={openEdition} updateConfig={this.refreshConfig}/> - <ReplaceField type="table" config={config} updateConfig={this.updateconfig}/> - <EditComponent dict={this.state.dict} type="table" options={['search', 'form', 'action', 'columns']} config={config} MenuID={config.uuid} thawButtons={this.state.thawButtons} refresh={this.updateConfig}/> + {/* <ReplaceField type="table" config={config} updateConfig={this.updateconfig}/> */} + <EditComponent type="table" options={['search', 'form', 'action', 'columns']} config={config} refresh={this.updateConfig}/> <Switch className="big" checkedChildren="鍚�" unCheckedChildren="鍋�" checked={config.enabled} onChange={this.onEnabledChange} /> - <Button type="primary" onClick={this.submitConfig} loading={this.state.menuloading}>{this.state.dict['model.save']}</Button> - <Button onClick={this.cancelConfig}>{this.state.dict['model.back']}</Button> + <Button type="primary" id="save-config" onClick={this.submitConfig} loading={this.state.menuloading}>淇濆瓨</Button> + <Button onClick={this.cancelConfig}>杩斿洖</Button> </div> } style={{ width: '100%' }}> <SettingComponent @@ -1074,12 +1012,12 @@ config={config} updatesearch={this.updatesearch} /> - <div className="chart-view" style={{position: 'relative'}}> - {/* 瑙嗗浘缁� 鏉冮檺 浼氬憳绛夌骇20+ */} - {this.props.memberLevel >= 20 ? <ChartGroupComponent + {config.charts ? <div className="chart-view" style={{position: 'relative'}}> + {/* 瑙嗗浘缁� 宸插純鐢� */} + <ChartGroupComponent config={config} updatechartgroup={this.updatechartgroup} - /> : null} + /> {config.charts.map(item => { if (!config.expand && chartview !== item.uuid) return '' @@ -1124,7 +1062,21 @@ ) } })} - </div> + </div> : <> + <ActionComponent + type="subtable" + menu={{MenuID: config.uuid, MenuName: config.tabName, MenuNo: config.tabNo, fstMenuList: this.props.menu.fstMenuList}} + config={config} + tabs={this.state.tabviews} + setSubConfig={this.setSubConfig} + updateaction={this.updateaction} + /> + <ColumnComponent + config={config} + menu={this.props.menu} + updatecolumn={this.updateconfig} + /> + </>} </Card> </div> </DndProvider> @@ -1135,13 +1087,13 @@ visible={this.state.closeVisible} onCancel={() => { this.setState({closeVisible: false}) }} footer={[ - <Button key="save" className="mk-btn mk-green" loading={this.state.menucloseloading} onClick={this.submitConfig}>{this.state.dict['model.save']}</Button>, - <Button key="confirm" className="mk-btn mk-yellow" onClick={this.handleViewBack}>{this.state.dict['model.notsave']}</Button>, - <Button key="cancel" onClick={() => { this.setState({closeVisible: false}) }}>{this.state.dict['model.cancel']}</Button> + <Button key="save" className="mk-btn mk-green" loading={this.state.menucloseloading} onClick={this.submitConfig}>淇濆瓨</Button>, + <Button key="confirm" className="mk-btn mk-yellow" onClick={this.handleViewBack}>涓嶄繚瀛�</Button>, + <Button key="cancel" onClick={() => { this.setState({closeVisible: false}) }}>鍙栨秷</Button> ]} destroyOnClose > - {this.state.dict['header.menu.config.placeholder']} + 閰嶇疆宸蹭慨鏀癸紝鏄惁淇濆瓨閰嶇疆淇℃伅锛� </Modal> {this.state.loading && <Spin size="large" />} </div> @@ -1149,14 +1101,4 @@ } } -const mapStateToProps = (state) => { - return { - memberLevel: state.memberLevel - } -} - -const mapDispatchToProps = () => { - return {} -} - -export default connect(mapStateToProps, mapDispatchToProps)(SubTableConfig) +export default SubTableConfig -- Gitblit v1.8.0