From f448bd7b318f7696c97b392a263bc364700bc8a0 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 09 六月 2020 15:54:45 +0800 Subject: [PATCH] 2020-06-09 --- src/templates/sharecomponent/settingcomponent/index.jsx | 5 src/templates/zshare/modalform/index.jsx | 8 src/tabviews/zshare/actionList/excelin/index.jsx | 0 src/templates/formtabconfig/index.jsx | 9 src/tabviews/managetable/index.jsx | 1 src/tabviews/zshare/actionList/printbutton/index.jsx | 2719 ++++++++++++++++++++++++++++++++++++++ src/templates/sharecomponent/chartcomponent/index.jsx | 2 src/utils/devutils.js | 459 ++++++ src/tabviews/zshare/mutilform/index.jsx | 153 + src/tabviews/zshare/actionList/index.jsx | 92 src/templates/sharecomponent/actioncomponent/index.jsx | 17 src/templates/zshare/createinterface/index.jsx | 4 src/tabviews/subtable/index.jsx | 2 src/tabviews/subtabtable/index.jsx | 2 src/tabviews/zshare/actionList/excelin/index.scss | 0 src/tabviews/zshare/actionList/printbutton/index.scss | 228 +++ src/tabviews/commontable/index.jsx | 2 src/templates/sharecomponent/treesettingcomponent/index.jsx | 5 src/utils/utils.js | 458 ------ src/views/login/index.jsx | 1 20 files changed, 3,595 insertions(+), 572 deletions(-) diff --git a/src/tabviews/commontable/index.jsx b/src/tabviews/commontable/index.jsx index e159a73..37488e6 100644 --- a/src/tabviews/commontable/index.jsx +++ b/src/tabviews/commontable/index.jsx @@ -1357,8 +1357,6 @@ triggerBtn={triggerBtn} dict={this.state.dict} MenuID={this.props.MenuID} - permRoles={this.props.permRoles} - dataManager={this.props.dataManager} logcolumns={this.state.logcolumns} ContainerId={this.state.ContainerId} refreshdata={this.refreshbyaction} diff --git a/src/tabviews/managetable/index.jsx b/src/tabviews/managetable/index.jsx index 991c009..f45fec6 100644 --- a/src/tabviews/managetable/index.jsx +++ b/src/tabviews/managetable/index.jsx @@ -920,7 +920,6 @@ dict={this.state.dict} triggerBtn={triggerBtn} MenuID={this.props.MenuID} - dataManager={this.props.dataManager} logcolumns={this.state.logcolumns} ContainerId={this.state.ContainerId} refreshdata={this.refreshbyaction} diff --git a/src/tabviews/subtable/index.jsx b/src/tabviews/subtable/index.jsx index a5c0f11..539c284 100644 --- a/src/tabviews/subtable/index.jsx +++ b/src/tabviews/subtable/index.jsx @@ -982,8 +982,6 @@ BData={this.props.BData} dict={this.state.dict} MenuID={this.props.MenuID} - dataManager={this.props.dataManager} - permRoles={this.props.permRoles} logcolumns={this.state.logcolumns} refreshdata={this.refreshbyaction} ContainerId={this.props.ContainerId} diff --git a/src/tabviews/subtabtable/index.jsx b/src/tabviews/subtabtable/index.jsx index 948d2e6..e059907 100644 --- a/src/tabviews/subtabtable/index.jsx +++ b/src/tabviews/subtabtable/index.jsx @@ -756,8 +756,6 @@ dict={this.state.dict} BData={this.props.BData} MenuID={this.props.SupMenuID} - permRoles={this.props.permRoles} - dataManager={this.props.dataManager} logcolumns={this.state.logcolumns} refreshdata={this.refreshbyaction} ContainerId={this.props.ContainerId} diff --git a/src/tabviews/zshare/excelin/index.jsx b/src/tabviews/zshare/actionList/excelin/index.jsx similarity index 100% rename from src/tabviews/zshare/excelin/index.jsx rename to src/tabviews/zshare/actionList/excelin/index.jsx diff --git a/src/tabviews/zshare/excelin/index.scss b/src/tabviews/zshare/actionList/excelin/index.scss similarity index 100% rename from src/tabviews/zshare/excelin/index.scss rename to src/tabviews/zshare/actionList/excelin/index.scss diff --git a/src/tabviews/zshare/actionList/index.jsx b/src/tabviews/zshare/actionList/index.jsx index b64d801..3db42cd 100644 --- a/src/tabviews/zshare/actionList/index.jsx +++ b/src/tabviews/zshare/actionList/index.jsx @@ -1,16 +1,18 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import moment from 'moment' +import {connect} from 'react-redux' import { is, fromJS } from 'immutable' import { Button, Affix, Modal, notification, Spin, message } from 'antd' import * as XLSX from 'xlsx' -import MutilForm from '@/tabviews/zshare/mutilform' -import ExcelIn from '../excelin' +import ExcelIn from './excelin' +import asyncSpinComponent from '@/utils/asyncSpinComponent' import Utils from '@/utils/utils.js' import options from '@/store/options.js' import Api from '@/api' import './index.scss' +const MutilForm = asyncSpinComponent(() => import('@/tabviews/zshare/mutilform')) const { confirm } = Modal let socket = null @@ -31,9 +33,7 @@ triggerPopview: PropTypes.func, // 寮圭獥鏍囩椤佃Е鍙� getexceloutparam: PropTypes.func, // 鑾峰彇excel瀵煎嚭鏁版嵁 gettableselected: PropTypes.func, // 鑾峰彇琛ㄦ牸涓暟鎹� - permRoles: PropTypes.any, // 鐢ㄦ埛鏉冮檺鍒楄〃 triggerBtn: PropTypes.any, - dataManager: PropTypes.any // 鏁版嵁鏉冮檺 } state = { @@ -2612,7 +2612,7 @@ getModels = () => { const { execAction } = this.state - if (!execAction || !this.state.visible) return + if (!execAction || !this.state.visible) return null let title = '' let width = '62vw' @@ -2668,38 +2668,70 @@ let fixed = this.props.setting.actionfixed && this.props.type === 'main' // 鎸夐挳鏄惁鍥哄畾鍦ㄥご閮� - let actionlist = <div className="button-list toolbar-button" id={fixed ? this.props.MenuID + 'mainaction' : ''}> - {this.props.actions.map((item, index) => { - let label = item.label - if (loadingUuid === item.uuid && loadingNumber !== '') { - label = label + '(' + loadingNumber + ')' - } - - return ( - <Button - className={'mk-btn mk-' + item.class} - icon={item.icon} - key={'action' + index} - onClick={() => {this.actionTrigger(item)}} - loading={loadingUuid === item.uuid} - >{label}</Button> - ) - })} - {this.getModels()} - {btnloading && <Spin size="large" />} - <ExcelIn MenuID={this.props.MenuID} returndata={this.getexceldata} ref="excelIn" /> - </div> - if (fixed) { return ( <Affix offsetTop={48}> - {actionlist} + <div className="button-list toolbar-button" id={fixed ? this.props.MenuID + 'mainaction' : ''}> + {this.props.actions.map((item, index) => { + let label = item.label + if (loadingUuid === item.uuid && loadingNumber !== '') { + label = label + '(' + loadingNumber + ')' + } + + return ( + <Button + className={'mk-btn mk-' + item.class} + icon={item.icon} + key={'action' + index} + onClick={() => {this.actionTrigger(item)}} + loading={loadingUuid === item.uuid} + >{label}</Button> + ) + })} + {this.getModels()} + {btnloading && <Spin size="large" />} + <ExcelIn MenuID={this.props.MenuID} returndata={this.getexceldata} ref="excelIn" /> + </div> </Affix> ) } else { - return actionlist + return ( + <div className="button-list toolbar-button" id={fixed ? this.props.MenuID + 'mainaction' : ''}> + {this.props.actions.map((item, index) => { + let label = item.label + if (loadingUuid === item.uuid && loadingNumber !== '') { + label = label + '(' + loadingNumber + ')' + } + + return ( + <Button + className={'mk-btn mk-' + item.class} + icon={item.icon} + key={'action' + index} + onClick={() => {this.actionTrigger(item)}} + loading={loadingUuid === item.uuid} + >{label}</Button> + ) + })} + {this.getModels()} + {btnloading && <Spin size="large" />} + <ExcelIn MenuID={this.props.MenuID} returndata={this.getexceldata} ref="excelIn" /> + </div> + ) } } } -export default MainAction \ No newline at end of file +const mapStateToProps = (state) => { + return { + tabviews: state.tabviews, + permRoles: state.permRoles, + dataManager: state.dataManager + } +} + +const mapDispatchToProps = () => { + return {} +} + +export default connect(mapStateToProps, mapDispatchToProps)(MainAction) \ No newline at end of file diff --git a/src/tabviews/zshare/actionList/printbutton/index.jsx b/src/tabviews/zshare/actionList/printbutton/index.jsx new file mode 100644 index 0000000..c6d4324 --- /dev/null +++ b/src/tabviews/zshare/actionList/printbutton/index.jsx @@ -0,0 +1,2719 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import moment from 'moment' +import { is, fromJS } from 'immutable' +import { Button, Affix, Modal, notification, Spin, message } from 'antd' +import Utils from '@/utils/utils.js' +import options from '@/store/options.js' +import Api from '@/api' +import './index.scss' + +let socket = null + +class PrintButton extends Component { + static propTpyes = { + menuType: PropTypes.any, // 鑿滃崟绫诲瀷锛屾櫘閫氳彍鍗曟垨HS + BID: PropTypes.string, // 涓昏〃ID + BData: PropTypes.any, // 涓昏〃鏁版嵁 + Tab: PropTypes.any, // 濡傛灉褰撳墠鍏冪礌涓烘爣绛炬椂锛宼ab涓烘爣绛句俊鎭� + type: PropTypes.string, // 鍒ゆ柇褰撳墠涓轰富琛紙main锛夈�佸瓙琛紙sub锛夈�佸瓙琛ㄦ爣绛撅紙subtab锛� + MenuID: PropTypes.string, // 鑿滃崟ID + actions: PropTypes.array, // 鎸夐挳缁� + logcolumns: PropTypes.array, // 鏄剧ず鍒� + dict: PropTypes.object, // 瀛楀吀椤� + setting: PropTypes.any, // 椤甸潰閫氱敤璁剧疆 + ContainerId: PropTypes.any, // tab椤甸潰ID锛岀敤浜庡脊绐楁帶鍒� + refreshdata: PropTypes.func, // 鎵ц瀹屾垚鍚庢暟鎹埛鏂� + triggerPopview: PropTypes.func, // 寮圭獥鏍囩椤佃Е鍙� + getexceloutparam: PropTypes.func, // 鑾峰彇excel瀵煎嚭鏁版嵁 + gettableselected: PropTypes.func, // 鑾峰彇琛ㄦ牸涓暟鎹� + triggerBtn: PropTypes.any, + } + + state = { + visible: false, + formdata: null, + tabledata: null, + confirmLoading: false, + execAction: null, + loadingUuid: '', + btnloading: false, + configMap: {}, + running: false, + loadingNumber: '' + } + + /** + * @description 涓婄骇鑿滃崟id鍙樺寲鏃讹紝鍒锋柊鏁版嵁 + */ + UNSAFE_componentWillReceiveProps(nextProps) { + if (nextProps.triggerBtn && !is(fromJS(this.props.triggerBtn), fromJS(nextProps.triggerBtn)) && nextProps.triggerBtn.parentId === this.props.MenuID) { + if (!this.state.loadingUuid && !this.state.visible && !this.state.running) { + let _btn = nextProps.triggerBtn.button + if (!_btn.OpenType) { + _btn = this.props.actions.filter(item => item.uuid === _btn.uuid)[0] + } + if (_btn) { + this.actionTrigger(_btn, nextProps.triggerBtn.data) + } + } + } + } + + refreshdata = (item, type) => { + this.props.refreshdata(item, type) + } + + /** + * @description 瑙﹀彂鎸夐挳鎿嶄綔 + */ + actionTrigger = (item, record) => { + const { setting, type, Tab, BID } = this.props + + if (this.state.loadingUuid || this.state.visible || this.state.running) { + notification.warning({ + top: 92, + message: '浠诲姟鎵ц涓紝璇风◢鍚庯紒', + duration: 5 + }) + return + } + + if (type === 'sub' && Tab && Tab.supMenu && !BID) { + notification.warning({ + top: 92, + message: '闇�瑕佷笂绾т富閿�硷紒', + duration: 5 + }) + return + } + + let _this = this + let data = this.props.gettableselected() || [] + + if (record) { // 琛ㄦ牸涓Е鍙戞寜閽� + data = [record] + } + + if (item.Ot !== 'notRequired' && data.length === 0) { + // 闇�瑕侀�夋嫨琛屾椂锛屾牎楠屾暟鎹� + notification.warning({ + top: 92, + message: this.props.dict['main.action.confirm.selectline'], + duration: 5 + }) + return + } else if (item.Ot === 'requiredSgl' && data.length !== 1) { + // 闇�瑕侀�夋嫨鍗曡鏃讹紝鏍¢獙鏁版嵁 + notification.warning({ + top: 92, + message: this.props.dict['main.action.confirm.selectSingleLine'], + duration: 5 + }) + return + } else if (item.Ot !== 'notRequired' && !setting.primaryKey) { + // 闇�瑕侀�夋嫨琛屾椂锛屾牎楠屾槸鍚﹁缃富閿� + notification.warning({ + top: 92, + message: '鏈缃富閿紒', + duration: 5 + }) + return + } + + if (item.OpenType === 'prompt') { + this.setState({ + running: true + }) + confirm({ + title: this.props.dict['main.action.confirm.tip'], + onOk() { + _this.setState({ + loadingUuid: item.uuid + }) + + return new Promise(resolve => { + _this.execSubmit(item, data, resolve) + }) + }, + onCancel() { + _this.setState({ + running: false + }) + } + }) + } else if (item.OpenType === 'exec') { + this.setState({loadingUuid: item.uuid}) + this.execSubmit(item, data, () => { + this.setState({loadingUuid: ''}) + }) + } else if (item.OpenType === 'pop') { + this.setState({ + execAction: item, + tabledata: data, + btnloading: true + }, () => { + this.improveAction(item) + }) + } else if (item.OpenType === 'excelOut') { + if ( + item.intertype === 'inner' && !item.innerFunc && + ((setting.interType === 'inner' && setting.innerFunc) || setting.interType === 'outer') + ) { + notification.warning({ + top: 92, + message: '瀵煎嚭鎸夐挳閰嶇疆閿欒锛�', + duration: 5 + }) + return + } + + this.triggerExcelout(item) + + } else if (item.OpenType === 'excelIn') { + if (item.verify && item.verify.sheet && item.verify.columns && item.verify.columns.length > 0) { + let primaryId = '' // 瀵煎叆鏃惰Id + if (item.Ot === 'requiredSgl') { + primaryId = data[0][setting.primaryKey] || '' + } + + this.refs.excelIn.exceltrigger(item, primaryId) + } else { + notification.warning({ + top: 92, + message: 'excel瀵煎叆楠岃瘉淇℃伅鏈缃紒', + duration: 5 + }) + } + } else if (item.OpenType === 'popview' && this.props.type !== 'subtab') { + // 寮圭獥鏍囩璁剧疆涓轰笉閫夊垯琛屾椂锛屼笉浼犻�掓暟鎹� + this.props.triggerPopview(item, item.Ot === 'notRequired' ? [] : data) + } else if (item.OpenType === 'popview' && this.props.type === 'subtab') { + notification.warning({ + top: 92, + message: '寮圭獥椤甸潰涓嶆敮鎸佹璁剧疆锛�', + duration: 5 + }) + } else if (item.OpenType === 'innerpage') { + let Id = data[0][setting.primaryKey] + + if (item.pageTemplate === 'print') { + let cloudmsg = '&cuid=' + (sessionStorage.getItem('CloudUserID') || '') + '&csid=' + (sessionStorage.getItem('CloudSessionUid') || '') + '&clid=' + (sessionStorage.getItem('CloudLoginUID') || '') + '&cun=' + (sessionStorage.getItem('CloudUserName') || '') + let msg = '&uid=' + sessionStorage.getItem('UserID') + '&sid=' + sessionStorage.getItem('SessionUid') + '&lid=' + sessionStorage.getItem('LoginUID') + '&un=' + sessionStorage.getItem('User_Name') + let src = '#/print/' + window.btoa('ID=' + Id + msg + cloudmsg) + window.open(src) + } else { + notification.warning({ + top: 92, + message: '椤甸潰绫诲瀷璁剧疆閿欒锛�', + duration: 5 + }) + } + } else if (item.OpenType === 'outerpage') { + let url = item.url + if (item.Ot === 'requiredSgl' && setting.primaryKey) { + url = url + '?ID=' + data[0][setting.primaryKey] + } else if (item.Ot !== 'notRequired' && !setting.primaryKey) { + let ids = data.map(_data => _data[setting.primaryKey]).join(',') + url = url + '?ID=' + ids + } + window.open(url) + } else if (item.OpenType === 'tab' || item.OpenType === 'blank') { + this.props.triggerPopview(item, data) + } else if (item.OpenType === 'funcbutton') { + if (item.funcType === 'changeuser') { + this.changeUser(item, data) + } else if (item.funcType === 'print') { + if (item.execMode === 'pop') { + this.setState({ + execAction: item, + tabledata: data, + btnloading: true + }, () => { + this.improveAction(item) + }) + } else if (item.execMode === 'prompt') { + this.setState({ + running: true + }) + confirm({ + title: this.props.dict['main.action.confirm.tip'], + onOk() { + _this.triggerPrint(item, data) + }, + onCancel() { + _this.setState({ + running: false + }) + } + }) + } else { + this.triggerPrint(item, data) + } + } + } else { + notification.warning({ + top: 92, + message: '瀹屽杽涓�傘�傘��', + duration: 5 + }) + } + } + + /** + * @description 瑙﹀彂鎵撳嵃 + */ + triggerPrint = (btn, data, formlist = []) => { + let formdata = {} + formlist.forEach(_data => { + formdata[_data.key] = _data.value + }) + + if ( + !btn.verify || + (btn.verify.printMode === 'normal' && (!btn.verify.Template || !btn.verify.linkUrl)) || + (btn.verify.printMode === 'custom' && (!btn.verify.printFunc || !btn.verify.linkUrl)) + ) { + notification.warning({ + top: 92, + message: '璇峰畬鍠勬墦鍗伴獙璇佷俊鎭紒', + duration: 5 + }) + return + } + + let printlist = [] + let templates = [] + let printCount = 1 + + if (formdata.printCount && typeof(formdata.printCount) === 'number' && formdata.printCount >= 1) { + printCount = formdata.printCount + } + + this.setState({loadingUuid: btn.uuid}) + + new Promise(resolve => { + if (btn.intertype === 'inner' && !btn.innerFunc) { + let printcell = {} + + printcell.printType = formdata.printType || '' + printcell.printCount = printCount + printcell.templateID = btn.verify.Template || '' + + if (btn.Ot === 'notRequired') { + printcell.data = [formdata] + } else { + printcell.data = data.map(cell => { + return {...cell, ...formdata} + }) + } + + templates.push(printcell.templateID) + + printlist.push(printcell) + + resolve(true) + } else { + this.getprintdata(btn, data, formdata, formlist).then(result => { + if (result.next) { + printlist = result.list.map(cell => { + cell.templateID = cell.templateID || btn.verify.Template + cell.printType = cell.printType || formdata.printType || '' + + let _printCount = printCount + if (cell.printCount && typeof(cell.printCount) === 'number' && cell.printCount >= 1) { + _printCount = cell.printCount + } + + cell.printCount = _printCount + + templates.push(cell.templateID) + + return cell + }) + } + + resolve(result.next) + }) + } + }).then(res => { + // 鑾峰彇鎵撳嵃妯℃澘 getTemp + if (!res) return false + + if (btn.verify.printMode === 'custom') { + this.execCustomPrint(btn, printlist, formdata) + + return false + } + + templates = Array.from(new Set(templates)) // 鍘婚噸 + + let deffers = templates.map(tempId => { + return new Promise(resolve => { + let param = { + func: 's_PrintTemplateMGetData', + Type: 'Y', + // ID: tempId, // 娣诲姞妯℃澘鏃讹紝淇濆瓨鍙婃煡璇娇鐢ㄦā鏉垮弬鏁� + PrintTempNO: tempId + } + + if (window.GLOB.mainSystemApi) { // 浠庡崟鐐圭櫥褰曟湇鍔″櫒鍙栨墦鍗伴厤缃俊鎭� + param.rduri = window.GLOB.mainSystemApi + } + + Api.getLocalConfig(param).then(result => { + result.tempId = tempId + resolve(result) + }) + }) + }) + + return Promise.all(deffers) + }).then(result => { + if (!result) return + + let errorMsg = '' + let _temps = {} + + result.forEach(res => { + if (res.status && !errorMsg) { + let _temp = this.getPrintConfigParam(res) + + if (_temp.error) { + errorMsg = { + ErrCode: 'N', + message: _temp.error, + ErrMesg: _temp.error, + status: false + } + } else { + _temps[res.tempId] = _temp + } + } else if (!errorMsg) { + errorMsg = res + } + }) + + if (!errorMsg) { + this.execPrint(btn, printlist, _temps, formdata) + } else { + this.execError(errorMsg, btn) + } + }) + } + + execCustomPrint = (item, printlist, formdata) => { + this.setState({loadingUuid: ''}) + this.execSuccess(item, { + ErrCode: '-1', + message: '', + ErrMesg: '', + status: true + }) + + try { + // eslint-disable-next-line + let func = new Function('data', 'form', 'printer', 'notification', item.verify.printFunc) + func(printlist, formdata, item.verify, notification) + } catch (e) { + console.warn(e) + + try { + // eslint-disable-next-line + let evalfunc = eval('(true && function (data, form, printer, notification) {' + item.verify.printFunc + '})') + evalfunc(printlist, formdata, item.verify, notification) + } catch (error) { + console.warn(error) + notification.warning({ + top: 92, + message: '鑷畾涔夊嚱鏁版墽琛岄敊璇紒', + duration: 5 + }) + } + } + } + + /** + * @description 鑾峰彇鎵撳嵃鏁版嵁 + */ + getprintdata = (btn, data, formdata, formlist) => { + const { setting } = this.props + + let _list = [] + return new Promise(resolve => { + let params = [] + let param = {} + + if (this.props.BID) { + param.BID = this.props.BID + } + + if (btn.Ot === 'notRequired') { + let _param = { ...param, ...formdata } + params.push(_param) + } else if (btn.Ot === 'requiredSgl') { + param[setting.primaryKey] = data[0][setting.primaryKey] + + let _param = { ...param, ...formdata } + + params.push(_param) + } else if (btn.Ot === 'requiredOnce') { + let ids = data.map(d => { return d[setting.primaryKey]}) + ids = ids.filter(Boolean) + ids = ids.join(',') + + param[setting.primaryKey] = ids + + let _param = { ...param, ...formdata } + + params.push(_param) + } else if (btn.Ot === 'required') { + params = data.map((cell, index) => { + let _param = { ...param } + _param[setting.primaryKey] = cell[setting.primaryKey] + + formlist.forEach(_data => { + if (index !== 0 && _data.readin && cell.hasOwnProperty(_data.key)) { + _param[_data.key] = cell[_data.key] + } else { + _param[_data.key] = _data.value + } + }) + return _param + }) + } + + if (btn.intertype === 'inner') { + params = params.map(_param => { + _param.func = btn.innerFunc + + return _param + }) + + if (params.length <= 20) { + let deffers = params.map(par => { + return new Promise(resolve => { + Api.genericInterface(par).then(res => { + resolve(res) + }) + }) + }) + Promise.all(deffers).then(result => { + let errorMsg = '' + result.forEach(res => { + if (!res.status) { + errorMsg = res + } + }) + if (!errorMsg) { + resolve({next: true, list: result}) + } else { + this.execError(errorMsg, btn) + resolve({next: false, list: []}) + } + }) + } else { + this.printInnerLoopRequest(params, btn, _list, resolve) + } + } else { + this.printOuterLoopRequest(params, btn, _list, resolve) + } + }) + } + + /** + * @description 澶栭儴璇锋眰寰幆鎵ц + */ + printOuterLoopRequest = (params, btn, _list, _resolve) => { + let param = params.shift() + let _outParam = null + + new Promise(resolve => { + // 鍐呴儴璇锋眰 + if (btn.innerFunc) { + param.func = btn.innerFunc + // 瀛樺湪鍐呴儴鍑芥暟鏃讹紝鏁版嵁棰勫鐞� + Api.genericInterface(param).then(res => { + if (res.status) { + delete res.ErrCode + delete res.ErrMesg + delete res.message + delete res.status + + // 浣跨敤澶勭悊鍚庣殑鏁版嵁璋冪敤澶栭儴鎺ュ彛 + let keys = Object.keys(res) // 鎻愪氦澶栭儴鎺ュ彛鍓嶏紝娣诲姞BID + if (this.props.BID && keys.filter(key => key.toLowerCase() === 'bid').length === 0) { + res.BID = this.props.BID + } + + resolve(res) + } else { + this.execError(res, btn) + resolve(false) + _resolve({next: false, list: []}) + } + }) + } else { + resolve(param) + } + }).then(res => { + if (!res) return + // 澶栭儴璇锋眰 + _outParam = JSON.parse(JSON.stringify(res)) + + if (this.props.menuType === 'HS') { + if (btn.sysInterface === 'true' && options.cloudServiceApi) { + res.rduri = options.cloudServiceApi + } else if (btn.sysInterface !== 'true') { + res.rduri = btn.interface + } + } else { + if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) { + res.rduri = window.GLOB.mainSystemApi + } else if (btn.sysInterface !== 'true') { + res.rduri = btn.interface + } + } + + if (btn.outerFunc) { + res.func = btn.outerFunc + } + + return Api.genericInterface(res) + }).then(response => { + if (!response) return + + if (btn.callbackFunc) { + // 瀛樺湪鍥炶皟鍑芥暟鏃讹紝璋冪敤 + delete response.message + delete response.status + + response.func = btn.callbackFunc + + let _callbackparam = {..._outParam, ...response} + + return Api.genericInterface(_callbackparam) + } else if (response.status) { + + _list.push(response) + + // 涓�娆¤姹傛垚鍔燂紝杩涜涓嬩竴椤硅姹� + if (params.length === 0) { + _resolve({next: true, list: _list}) + } else { + this.printOuterLoopRequest(params, btn, _list, _resolve) + } + } else { + this.execError(response, btn) + _resolve({next: false, list: []}) + } + }).then(response => { + if (!response) return + + if (response.status) { + _list.push(response) + + // 涓�娆¤姹傛垚鍔燂紝杩涜涓嬩竴椤硅姹� + if (params.length === 0) { + _resolve({next: true, list: _list}) + } else { + this.printOuterLoopRequest(params, btn, _list, _resolve) + } + } else { + this.execError(response, btn) + _resolve({next: false, list: []}) + } + }) + } + + /** + * @description 鍐呴儴璇锋眰寰幆鎵ц + */ + printInnerLoopRequest = (params, btn, _list, _resolve) => { + let param = params.shift() + + Api.genericInterface(param).then(res => { + if (res.status) { + _list.push(res) + + if (params.length === 0) { + _resolve({next: true, list: _list}) + } else { + this.printInnerLoopRequest(params, btn, _list, _resolve) + } + } else { + this.execError(res, btn) + _resolve({next: false, list: []}) + } + }) + } + + getPrintConfigParam = (res) => { + let error = '' // 閿欒淇℃伅 + let configParam = '' // 妯℃澘閰嶇疆淇℃伅 + let _configparam = '' // 鎵撳嵃閰嶇疆淇℃伅 + let fields = [] // 妯℃澘涓墍闇�瀛楁 + let nonEFields = [] // 闈炵┖瀛楁 + + if (!res.ConfigParam) { + error = '鏈幏鍙栧埌鎵撳嵃妯℃澘淇℃伅锛�' + } else { + try { + configParam = JSON.parse(window.decodeURIComponent(window.atob(res.ConfigParam))) + } catch (e) { + configParam = '' + } + + if (!configParam) { + error = '鎵撳嵃妯℃澘瑙f瀽閿欒锛�' + } else { + + let control = configParam.elements.map(element => { + let _field = element.field + + if (_field === 'other_field') { + _field = element.cusfield || '' + } + + let item = { + Name: element.name || '', + Type: element.type, + Value: element.value || '', + Field: _field, + Left: element.left, + Top: element.top, + Width: element.width, + Height: element.height, + Rotate: element.rotate, + BorderSize: element.borderSize / 10, + BorderColor: element.borderColor, + Align: element.align, + VerticalAlign: element.vertialAlign, + BackColor: element.background, + ForeColor: 'black' + } + + if (!item.Width || !item.Height) { + item.Type = 'line' + item.Value = '' + item.Field = '' + item.FontFamily = element.fontFamily || '' + item.FontSize = element.fontSize || '' + item.FontStyle = (!element.fontWeight || element.fontWeight === 'normal') ? 'regular' : element.fontWeight + item.Padding = 0 + item.Trimming = '' + } else if (item.Type === 'image') { + item.ImageWidth = element.imgWidth + item.ImageHeight = element.imgHeight + item.Trimming = '' + } else if (item.Type === 'text') { + item.FontFamily = element.fontFamily + item.FontSize = element.fontSize + item.FontStyle = element.fontWeight === 'normal' ? 'regular' : element.fontWeight + item.Padding = element.padding / 2 + item.Trimming = '' + } else if (item.Type === 'barcode') { + item.BarcodeType = element.barcodeType + item.BarcodeWidth = element.barcodeWidth + item.BarcodeHeight = element.barcodeHeight + item.BarcodeLabel = element.barcodeLabel + item.LabelSize = element.fontSize + } else if (item.Type === 'qrcode') { + item.Type = 'barcode' + item.BarcodeType = element.barcodeType + item.BarcodeWidth = element.qrcodeWidth + item.BarcodeHeight = element.qrcodeWidth + item.BarcodeLabel = false + } + + if (item.Field) { + fields.push(item.Field) + // 鏉$爜浜岀淮鐮佸瓧娈典笉鍙负绌� + if (item.Type === 'qrcode' || item.Type === 'barcode') { + nonEFields.push(item.Field) + } + } + + return item + }) + + _configparam = { + Version: '', + Title: configParam.name, + Author: sessionStorage.getItem('UserID'), + Description: configParam.remark, + PrintTempNO: configParam.PrintTempNO, + PageSetting: { + Width: configParam.width, + Height: configParam.height, + Left: '0', + Right: '0', + Top: '0', + Bottom: '0', + Landscape: false + }, + PageHeader: [], + ReportHeader: { + Control: control + }, + ReportFooter: [], + PageFooter: [] + } + } + } + + return { + error: error, + config: _configparam, + fields: fields, + nonEFields: nonEFields + } + } + + execPrint = (item, list, template, formdata) => { + let _errors = [] + + let defaultPrinter = item.verify.defaultPrinter || 'lackprinter' + let printers = {} + if (item.verify.printerTypeList && item.verify.printerTypeList.length > 0) { + item.verify.printerTypeList.forEach(cell => { + if (cell.printer) { + printers[cell.Value] = cell.printer + } + }) + } + + let printdata = {} + + list.forEach(res => { + let _printer = defaultPrinter + + if (res.printType && printers[res.printType]) { + _printer = printers[res.printType] + } + + printdata[_printer] = printdata[_printer] || [] + + printdata[_printer].push(res) + }) + + let printerList = [] + + Object.keys(printdata).forEach(printer => { + let _documents = [] + Object.keys(template).forEach(key => { + let _datalist = printdata[printer].filter(cell => cell.templateID === key) + + if (_datalist.length > 0) { + let _data = [] + _datalist.forEach(res => { + res.data.forEach(_cell => { + for (let i = 0; i < res.printCount; i++) { + _data.push({...formdata, ..._cell}) + } + }) + }) + + let _fields = Array.from(new Set(template[key].fields)) + let _nonEFields = Array.from(new Set(template[key].nonEFields)) + let lacks = [] + let emptys = [] + + _data.forEach(d => { + _fields.forEach(f => { + if (!d.hasOwnProperty(f)) { + lacks.push(f) + } else if (_nonEFields.includes(f) && !d[f] && d[f] !== 0) { + emptys.push(f) + } + }) + }) + + let _cell = { + documentID: Utils.getuuid(), + contents: [ + { + data: _data, + templateURL: JSON.stringify(template[key].config) + } + ] + } + + if (lacks.length > 0 || emptys.length > 0) { + lacks = Array.from(new Set(lacks)) + emptys = Array.from(new Set(emptys)) + + _errors.push({ + title: template[key].config.Title, + lacks: lacks, + emptys: emptys + }) + } + + _documents.push(_cell) + } + }) + + if (_documents.length > 0) { + printerList.push({ + cmd: 'print', + requestID: Utils.getuuid(), + version: Utils.getuuid(), + task: { + taskID: Utils.getuuid(), + preview: false, + printer: printer, + documents: _documents + } + }) + } + }) + + if (list.length === 0) { + this.setState({loadingUuid: ''}) + this.execError({ + ErrCode: 'N', + message: '鏈幏鍙栧埌鎵撳嵃淇℃伅锛�', + ErrMesg: '', + status: false + }, item) + return + } else if (_errors.length > 0) { + let lackerror = [] + let emptyerror = [] + + _errors.forEach(err => { + if (err.lacks.length > 0) { + lackerror.push(`鏁版嵁涓湭鑾峰彇鍒版ā鏉匡紙${err.title}锛�${err.lacks.join('銆�')} 瀛楁`) + } + if (err.emptys.length > 0) { + emptyerror.push(`鏁版嵁涓ā鏉匡紙${err.title}锛� ${err.emptys.join('銆�')} 瀛楁涓嶅彲涓虹┖`) + } + }) + + let msg = [] + if (lackerror.length > 0) { + msg.push(lackerror.join(' ; ')) + } + + if (emptyerror.length > 0) { + msg.push(emptyerror.join(' ; ')) + } + + this.setState({loadingUuid: ''}) + this.execError({ + ErrCode: 'N', + message: msg.join(' ; ') + ' !', + ErrMesg: '', + status: false + }, item) + return + } + + let lackItems = printerList.filter(cell => cell.task.printer === 'lackprinter')[0] + + if (!socket || socket.readyState !== 1 || socket.url !== 'ws://' + item.verify.linkUrl) { + socket = new WebSocket('ws://' + item.verify.linkUrl) + } else { + if (lackItems) { + let request = { + requestID: '', + version: '', + cmd: 'getPrinters' + } + socket.send(JSON.stringify(request)) + } else { + printerList.forEach(cell => { + socket.send(JSON.stringify(cell)) + }) + + this.setState({loadingUuid: ''}) + this.execSuccess(item, { + ErrCode: 'S', + message: '', + ErrMesg: '鎵撳嵃璇锋眰宸插彂鍑恒��', + status: true + }) + } + } + // 鎵撳紑Socket + socket.onopen = () =>{ + if (lackItems) { + let request = { + requestID: '', + version: '', + cmd: 'getPrinters' + } + socket.send(JSON.stringify(request)) + } else { + printerList.forEach(cell => { + socket.send(JSON.stringify(cell)) + }) + + this.setState({loadingUuid: ''}) + this.execSuccess(item, { + ErrCode: 'S', + message: '', + ErrMesg: '鎵撳嵃璇锋眰宸插彂鍑恒��', + status: true + }) + } + } + // 鐩戝惉娑堟伅 + socket.onmessage = (event) => { + let data = '' + + if (event.data) { + try { + data = JSON.parse(event.data) + } catch { + this.setState({loadingUuid: ''}) + this.execError({ + ErrCode: 'N', + message: event.data, + ErrMesg: '', + status: false + }, item) + + data = '' + } + } + + if (data && data.cmd === 'getPrinters' && data.status) { + printerList.forEach(cell => { + if (cell.task.printer === 'lackprinter') { + cell.task.printer = data.defaultPrinter + } + socket.send(JSON.stringify(cell)) + }) + + this.setState({loadingUuid: ''}) + this.execSuccess(item, { + ErrCode: 'S', + message: '', + ErrMesg: '鎵撳嵃璇锋眰宸插彂鍑恒��', + status: true + }) + } else if (data && data.message && !data.status) { + this.setState({loadingUuid: ''}) + this.execError({ + ErrCode: 'N', + message: data.message, + ErrMesg: '', + status: false + }, item) + } + } + + socket.onerror = () => { + this.setState({loadingUuid: ''}) + this.execError({ + ErrCode: 'N', + message: '鏃犳硶杩炴帴鍒�:' + item.verify.linkUrl, + ErrMesg: '', + status: false + }, item) + } + } + + /** + * @description 鍒囨崲鐢ㄦ埛 + */ + changeUser = (btn, data) => { + const { setting } = this.props + let _this = this + + let param = { + func: 'webapi_ChangeUser' + } + + if (this.props.BID) { + param.BID = this.props.BID + } + + if (window.GLOB.mainSystemApi) { + param.rduri = window.GLOB.mainSystemApi + } + + param[setting.primaryKey] = data[0][setting.primaryKey] + + this.setState({ + running: true + }) + confirm({ + title: this.props.dict['main.action.confirm.tip'], + onOk() { + return new Promise(resolve => { + Api.genericInterface(param).then(res => { + resolve() + if (res.status) { + sessionStorage.setItem('avatar', res.icon || '') + sessionStorage.setItem('UserID', res.UserID) + sessionStorage.setItem('SessionUid', Utils.getuuid()) + sessionStorage.setItem('LoginUID', res.LoginUID) + sessionStorage.setItem('User_Name', res.UserName) + sessionStorage.setItem('Full_Name', res.FullName) + + window.location.reload() + } else { + notification.error({ + top: 92, + message: res.message || res.ErrMesg, + duration: btn.verify && btn.verify.ntime ? btn.verify.ntime : 10 + }) + } + }) + }) + }, + onCancel() { + _this.setState({ + running: false + }) + } + }) + } + + /** + * @description 鎸夐挳鎻愪氦鎵ц + */ + execSubmit = (btn, data, _resolve, formdata) => { + const { setting, logcolumns } = this.props + + if (btn.OpenType === 'funcbutton' && btn.funcType === 'print' && btn.execMode === 'pop') { + this.setState({ + confirmLoading: false, + visible: false + }) + this.triggerPrint(btn, data, formdata) + return + } + if (btn.intertype === 'inner') { + // 浣跨敤鍐呴儴鎺ュ彛鏃讹紝鍐呴儴鍑芥暟鍜屾暟鎹簮涓嶅彲鍚屾椂涓虹┖, 浣跨敤绯荤粺鍑芥暟鏃讹紝绫诲瀷涓嶅彲涓虹┖ + if (!btn.innerFunc && (!btn.sql || (btn.sql && !btn.sqlType))) { + this.actionSettingError() + _resolve() + return + } + + // 鎵ц鏂瑰紡涓哄琛屾嫾鎺ワ紝涓旀墦寮�鏂瑰紡涓鸿〃鍗曟椂锛屼細杞负寰幆鍙戦�佽姹� + // 鎵撳紑鏂瑰紡涓烘ā鎬佹锛屼娇鐢ㄥ唴閮ㄥ嚱鏁版坊鍔�(鏈夋壒閲忔坊鍔犲満鏅紝宸插幓闄�) + if ( + btn.Ot === 'notRequired' || + btn.Ot === 'requiredSgl' || + btn.Ot === 'requiredOnce' + ) { + + // 鍒涘缓鍑瘉鏃讹紝闇�瑕侀�夋嫨琛屾椂 + if (data.length === 0 && !btn.innerFunc && btn.verify && btn.verify.voucher && btn.verify.voucher.enabled) { + notification.warning({ + top: 92, + message: '浣跨敤鍒涘缓鍑瘉鍑芥暟锛岄渶瑕侀�夋嫨琛岋紒', + duration: 5 + }) + return + } + + let param = { // 绯荤粺瀛樺偍杩囩▼ + func: 'sPC_TableData_InUpDe' + } + + if (this.props.BID) { + param.BID = this.props.BID + } + + let primaryId = '' + + if (btn.Ot === 'requiredSgl' || btn.Ot === 'requiredOnce') { + let ids = data.map(d => { return d[setting.primaryKey] || ''}) + ids = ids.filter(Boolean) + primaryId = ids.join(',') + } + + if (btn.OpenType === 'prompt' || btn.OpenType === 'exec') { // 鏄惁寮规鎴栫洿鎺ユ墽琛� + if (btn.innerFunc) { // 浣跨敤鑷畾涔夊嚱鏁� + param.func = btn.innerFunc + if (setting.primaryKey) { // 涓婚敭瀛樺湪鏃讹紝璁剧疆涓婚敭鍙傛暟 + param[setting.primaryKey] = primaryId + } + } else if (btn.sql) { + param.ID = primaryId + param.LText = Utils.getSysDefaultSql(btn, setting, '', param, data[0], logcolumns, this.props.Tab) // 鏁版嵁婧� + + if (this.props.dataManager) { // 鏁版嵁鏉冮檺 + param.LText = param.LText.replace(/\$@/ig, '/*') + param.LText = param.LText.replace(/@\$/ig, '*/') + } else { + param.LText = param.LText.replace(/@\$|\$@/ig, '') + } + + param.LText = Utils.formatOptions(param.LText) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + } + } else if (btn.OpenType === 'pop') { // 琛ㄥ崟 + if (btn.innerFunc) { + param.func = btn.innerFunc + + if (setting.primaryKey) { // 涓婚敭瀛樺湪鏃讹紝璁剧疆涓婚敭鍙傛暟 + param[setting.primaryKey] = primaryId + } + + formdata.forEach(_data => { + param[_data.key] = _data.value + }) + + } else if (btn.sql && btn.sqlType === 'insert') { // 绯荤粺鍑芥暟娣诲姞鏃讹紝鐢熸垚uuid + primaryId = '' + + if (formdata && setting.primaryKey) { // 琛ㄥ崟涓瓨鍦ㄤ富閿瓧娈碉紝涓婚敭鍊间互琛ㄥ崟涓殑鍊间负鍑� + let _form = formdata.filter(_form => _form.key === setting.primaryKey)[0] + if (_form) { + primaryId = _form.value + } + } + + param.ID = primaryId || Utils.getguid() + param.LText = Utils.getSysDefaultSql(btn, setting, formdata, param, data[0], logcolumns, this.props.Tab) // 鏁版嵁婧� + + if (this.props.dataManager) { // 鏁版嵁鏉冮檺 + param.LText = param.LText.replace(/\$@/ig, '/*') + param.LText = param.LText.replace(/@\$/ig, '*/') + } else { + param.LText = param.LText.replace(/@\$|\$@/ig, '') + } + + param.LText = Utils.formatOptions(param.LText) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + } else if (btn.sql) { + param.ID = primaryId + param.LText = Utils.getSysDefaultSql(btn, setting, formdata, param, data[0], logcolumns, this.props.Tab) // 鏁版嵁婧� + + if (this.props.dataManager) { // 鏁版嵁鏉冮檺 + param.LText = param.LText.replace(/\$@/ig, '/*') + param.LText = param.LText.replace(/@\$/ig, '*/') + } else { + param.LText = param.LText.replace(/@\$|\$@/ig, '') + } + + param.LText = Utils.formatOptions(param.LText) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + } + } + + Api.genericInterface(param).then((res) => { + if (res.status) { + this.execSuccess(btn, res) + } else { + this.execError(res, btn) + } + _resolve() + }) + } else if (btn.Ot === 'required') { + let _formPrimaryId = '' + if (formdata && setting.primaryKey) { // 琛ㄥ崟涓瓨鍦ㄤ富閿瓧娈碉紝涓婚敭鍊间互琛ㄥ崟涓殑鍊间负鍑� + let _form = formdata.filter(_form => _form.key === setting.primaryKey)[0] + if (_form) { + _formPrimaryId = _form.value + } + } + + let _params = data.map((cell, index) => { + let param = { + func: 'sPC_TableData_InUpDe' + } + + if (this.props.BID) { + param.BID = this.props.BID + } + + let primaryId = setting.primaryKey ? cell[setting.primaryKey] || '' : '' + + if (btn.OpenType === 'prompt' || btn.OpenType === 'exec') { // 鏄惁寮规鎴栫洿鎺ユ墽琛� + + if (btn.innerFunc) { + param.func = btn.innerFunc + if (setting.primaryKey) { + param[setting.primaryKey] = primaryId + } + } else if (btn.sql) { + param.ID = primaryId + param.LText = Utils.getSysDefaultSql(btn, setting, '', param, cell, logcolumns, this.props.Tab) // 鏁版嵁婧� + + if (this.props.dataManager) { // 鏁版嵁鏉冮檺 + param.LText = param.LText.replace(/\$@/ig, '/*') + param.LText = param.LText.replace(/@\$/ig, '*/') + } else { + param.LText = param.LText.replace(/@\$|\$@/ig, '') + } + + param.LText = Utils.formatOptions(param.LText) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + } + } else if (btn.OpenType === 'pop') { // 琛ㄥ崟 + if (index !== 0) { + formdata = formdata.map(_data => { + if (_data.readin && cell.hasOwnProperty(_data.key)) { + _data.value = cell[_data.key] + } + return _data + }) + } + + if (btn.innerFunc) { + param.func = btn.innerFunc + + formdata.forEach(_data => { + param[_data.key] = _data.value + }) + + if (setting.primaryKey) { + param[setting.primaryKey] = primaryId + } + } else if (btn.sql && btn.sqlType === 'insert') { // 绯荤粺鍑芥暟娣诲姞鏃讹紝鐢熸垚uuid + param.ID = _formPrimaryId || Utils.getguid() + param.LText = Utils.getSysDefaultSql(btn, setting, formdata, param, cell, logcolumns, this.props.Tab) // 鏁版嵁婧� + + if (this.props.dataManager) { // 鏁版嵁鏉冮檺 + param.LText = param.LText.replace(/\$@/ig, '/*') + param.LText = param.LText.replace(/@\$/ig, '*/') + } else { + param.LText = param.LText.replace(/@\$|\$@/ig, '') + } + + param.LText = Utils.formatOptions(param.LText) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + } else if (btn.sql) { + param.ID = primaryId + param.LText = Utils.getSysDefaultSql(btn, setting, formdata, param, cell, logcolumns, this.props.Tab) // 鏁版嵁婧� + + if (this.props.dataManager) { // 鏁版嵁鏉冮檺 + param.LText = param.LText.replace(/\$@/ig, '/*') + param.LText = param.LText.replace(/@\$/ig, '*/') + } else { + param.LText = param.LText.replace(/@\$|\$@/ig, '') + } + + param.LText = Utils.formatOptions(param.LText) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + } + } + + return param + }) + + if (_params.length <= 20) { + let deffers = _params.map(param => { + return new Promise(resolve => { + Api.genericInterface(param).then(res => { + resolve(res) + }) + }) + }) + Promise.all(deffers).then(result => { + let iserror = false + let errorMsg = '' + result.forEach(res => { + if (res.status) { + errorMsg = res + } else { + iserror = true + errorMsg = res + } + }) + if (!iserror) { + this.execSuccess(btn, errorMsg) + } else { + this.execError(errorMsg, btn) + } + _resolve() + }) + } else { // 瓒呭嚭20涓姹傛椂寰幆鎵ц + this.innerLoopRequest(_params, btn, _resolve) + } + } else { + this.actionSettingError() + _resolve() + return + } + } else if (btn.intertype === 'outer') { + /** *********************璋冪敤澶栭儴鎺ュ彛************************* */ + if (!btn.interface) { // 鎺ュ彛鍦板潃涓嶅瓨鍦ㄦ椂鎶ラ敊 + this.actionSettingError() + _resolve() + return + } + + let _params = [] // 璇锋眰鍙傛暟鏁扮粍 + + if (btn.Ot === 'notRequired' || btn.Ot === 'requiredSgl' || btn.Ot === 'requiredOnce') { + let param = {} + + if (this.props.BID) { + param.BID = this.props.BID + } + + if (btn.OpenType === 'pop' && formdata) { // 琛ㄥ崟 + formdata.forEach(_data => { + param[_data.key] = _data.value + }) + } + + // 鑾峰彇id + if (btn.Ot === 'notRequired') { + + } else if (btn.Ot === 'requiredSgl' && setting.primaryKey) { + param[setting.primaryKey] = data[0][setting.primaryKey] + } else if (btn.Ot === 'requiredOnce' && setting.primaryKey) { + let ids = data.map(d => { return d[setting.primaryKey]}) + param[setting.primaryKey] = ids.join(',') + } + + _params.push(param) + } else if (btn.Ot === 'required') { + // 閫夋嫨澶氳锛屽惊鐜皟鐢� + _params = data.map((cell, index) => { + let _cell = {} + + if (this.props.BID) { + _cell.BID = this.props.BID + } + + let _formparam = {} + if (btn.OpenType === 'pop' && formdata) { // 琛ㄥ崟 + formdata.forEach(_data => { + if (index !== 0 && _data.readin && cell.hasOwnProperty(_data.key)) { + _formparam[_data.key] = cell[_data.key] + } else { + _formparam[_data.key] = _data.value + } + }) + } + + if (setting.primaryKey) { + _cell[setting.primaryKey] = cell[setting.primaryKey] + } + + _cell = {..._formparam, ..._cell} + + return _cell + }) + } else { + this.actionSettingError() + _resolve() + return + } + + // 寰幆璋冪敤澶栭儴鎺ュ彛锛堝寘鎷唴閮ㄥ強鍥炶皟鍑芥暟锛� + this.outerLoopRequest(_params, btn, _resolve, _params.length > 20) + + } else { + this.actionSettingError() + _resolve() + return + } + } + + /** + * @description 鍐呴儴璇锋眰寰幆鎵ц + */ + innerLoopRequest = (params, btn, _resolve) => { + if (!params && params.length === 0) return + + let param = params.shift() + + this.setState({ + loadingNumber: params.length || '' + }) + + Api.genericInterface(param).then(res => { + if (res.status) { + if (params.length === 0) { + this.execSuccess(btn, res) + _resolve() + } else { + this.innerLoopRequest(params, btn, _resolve) + } + } else { + this.execError(res, btn) + _resolve() + } + }) + } + + /** + * @description 澶栭儴璇锋眰寰幆鎵ц + */ + outerLoopRequest = (params, btn, _resolve, widthNumber) => { + if (!params && params.length === 0) return + + let param = params.shift() + let _outParam = null + + if (widthNumber) { + this.setState({ + loadingNumber: params.length || '' + }) + } + + new Promise(resolve => { + // 鍐呴儴璇锋眰 + if (btn.innerFunc) { + param.func = btn.innerFunc + // 瀛樺湪鍐呴儴鍑芥暟鏃讹紝鏁版嵁棰勫鐞� + Api.genericInterface(param).then(res => { + if (res.status) { + delete res.ErrCode + delete res.ErrMesg + delete res.message + delete res.status + + // 浣跨敤澶勭悊鍚庣殑鏁版嵁璋冪敤澶栭儴鎺ュ彛 + let keys = Object.keys(res) // 鎻愪氦澶栭儴鎺ュ彛鍓嶏紝娣诲姞BID + if (this.props.BID && keys.filter(key => key.toLowerCase() === 'bid').length === 0) { + res.BID = this.props.BID + } + + resolve(res) + } else { + this.execError(res, btn) + resolve(false) + _resolve() + } + }) + } else { + resolve(param) + } + }).then(res => { + if (!res) return + // 澶栭儴璇锋眰 + _outParam = JSON.parse(JSON.stringify(res)) + + if (this.props.menuType === 'HS') { + if (btn.sysInterface === 'true' && options.cloudServiceApi) { + res.rduri = options.cloudServiceApi + } else if (btn.sysInterface !== 'true') { + res.rduri = btn.interface + } + } else { + if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) { + res.rduri = window.GLOB.mainSystemApi + } else if (btn.sysInterface !== 'true') { + res.rduri = btn.interface + } + } + + if (btn.outerFunc) { + res.func = btn.outerFunc + } + + return Api.genericInterface(res) + }).then(response => { + if (!response) return + // 鍥炶皟璇锋眰 + if (btn.callbackFunc) { + // 瀛樺湪鍥炶皟鍑芥暟鏃讹紝璋冪敤 + delete response.message + delete response.status + + response.func = btn.callbackFunc + + let _callbackparam = {..._outParam, ...response} + return Api.genericInterface(_callbackparam) + } else { + if (response.status) { + // 涓�娆¤姹傛垚鍔燂紝杩涜涓嬩竴椤硅姹� + + if (params.length === 0) { + this.execSuccess(btn, response) + _resolve() + } else { + this.outerLoopRequest(params, btn, _resolve, widthNumber) + } + } else { + this.execError(response, btn) + _resolve() + } + } + }).then(res => { + if (!res) return + + if (res.status) { + if (params.length === 0) { + this.execSuccess(btn, res) + _resolve() + } else { + this.outerLoopRequest(params, btn, _resolve, widthNumber) + } + } else { + this.execError(res, btn) + _resolve() + } + }) + } + + /** + * @description 鎿嶄綔鎴愬姛鍚庡鐞� + * 1銆乪xcel瀵煎嚭锛屾垚鍔熷悗鍙栨秷瀵煎嚭鎸夐挳鍔犺浇涓姸鎬� + * 2銆佺姸鎬佺爜涓� S 鏃讹紝鏄剧ず鎴愬姛淇℃伅鍚庣郴缁熼粯璁や俊鎭� + * 3銆佺姸鎬佺爜涓� -1 鏃讹紝涓嶆樉绀轰换浣曚俊鎭� + * 4銆佹ā鎬佹鎵ц鎴愬姛鍚庢槸鍚﹀叧闂� + * 5銆侀�氱煡涓诲垪琛ㄥ埛鏂� + */ + execSuccess = (btn, res) => { + if (res && res.ErrCode === 'S') { // 鎵ц鎴愬姛 + notification.success({ + top: 92, + message: res.ErrMesg || this.props.dict['main.action.confirm.success'], + duration: btn.verify && btn.verify.stime ? btn.verify.stime : 2 + }) + } else if (res && res.ErrCode === 'Y') { // 鎵ц鎴愬姛 + Modal.success({ + title: res.ErrMesg || this.props.dict['main.action.confirm.success'] + }) + } else if (res && res.ErrCode === '-1') { // 瀹屾垚鍚庝笉鎻愮ず + + } + + if (btn.OpenType === 'pop' && btn.setting && btn.setting.finish !== 'unclose') { + this.setState({ + visible: false + }) + } + + this.setState({ + loadingUuid: '', + running: false, + loadingNumber: '' + }) + + this.refreshdata(btn, 'success') + } + + /** + * @description 鎿嶄綔澶辫触鍚庡鐞� + * 1銆佺姸鎬佺爜涓� E銆丯銆丗銆丯M 鏃讹紝鏄剧ず鐩稿簲鎻愮ず淇℃伅 + * 2銆乪xcel瀵煎嚭锛屽け璐ュ悗鍙栨秷瀵煎嚭鎸夐挳鍔犺浇涓姸鎬� + * 3銆侀�氱煡涓诲垪琛ㄥ埛鏂� + */ + execError = (res, btn) => { + if (res.ErrCode === 'E') { + Modal.error({ + title: res.message || res.ErrMesg, + }) + } else if (res.ErrCode === 'N') { + notification.error({ + top: 92, + message: res.message || res.ErrMesg, + duration: btn.verify && btn.verify.ntime ? btn.verify.ntime : 10 + }) + } else if (res.ErrCode === 'F') { + notification.error({ + className: 'notification-custom-error', + top: 92, + message: res.message || res.ErrMesg, + duration: btn.verify && btn.verify.ftime ? btn.verify.ftime : 10 + }) + } else if (res.ErrCode === 'NM') { + message.error(res.message || res.ErrMesg) + } + + this.setState({ + loadingUuid: '', + running: false, + loadingNumber: '' + }) + + this.refreshdata(btn, 'error') + } + + /** + * @description 鎸夐挳閰嶇疆淇℃伅閿欒鎻愮ず + */ + actionSettingError = () => { + this.setState({ + running: false + }) + notification.warning({ + top: 92, + message: this.props.dict['main.action.settingerror'], + duration: 5 + }) + } + + /** + * @description 鑾峰彇鎸夐挳閰嶇疆淇℃伅 + */ + improveAction = (action) => { + const { configMap, execAction } = this.state + + let _config = configMap[action.uuid] + + if (_config) { + this.setState({ + execAction: {..._config, ...execAction} + }, () => { + this.improveActionForm() + }) + } else { + Api.getSystemCacheConfig({ + func: 'sPC_Get_LongParam', + MenuID: action.uuid + }).then(res => { + let _LongParam = '' + + if (res.status && res.LongParam) { + try { + _LongParam = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam))) + } catch (e) { + console.warn('Parse Failure') + _LongParam = '' + } + } + + if (!res.status) { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + this.setState({ + execAction: null, + tabledata: null, + btnloading: false + }) + } else if (!_LongParam || (action.OpenType === 'pop' && _LongParam.type !== 'Modal')) { + notification.warning({ + top: 92, + message: '鏈幏鍙栧埌鎸夐挳閰嶇疆淇℃伅锛�', + duration: 5 + }) + this.setState({ + execAction: null, + tabledata: null, + btnloading: false + }) + } else { + if (_LongParam.groups.length > 0) { + _LongParam.groups.forEach(group => { + group.sublist = group.sublist.filter(cell => { + if (!cell.blacklist || cell.blacklist.length === 0) return true + + let _black = cell.blacklist.filter(v => { + return this.props.permRoles.indexOf(v) !== -1 + }) + + if (_black.length > 0) { + return false + } else { + return true + } + }) + }) + } else { + _LongParam.fields = _LongParam.fields.filter(cell => { + if (!cell.blacklist || cell.blacklist.length === 0) return true + + let _black = cell.blacklist.filter(v => { + return this.props.permRoles.indexOf(v) !== -1 + }) + + if (_black.length > 0) { + return false + } else { + return true + } + }) + } + + this.setState({ + configMap: {...configMap, [action.uuid]: _LongParam}, + execAction: {..._LongParam, ...execAction} + }, () => { + this.improveActionForm() + }) + } + }) + } + } + + /** + * @description 鑾峰彇涓嬫媺琛ㄥ崟閫夐」淇℃伅 + */ + improveActionForm = () => { + const { configMap, execAction } = this.state + let subfields = [] + + if (execAction.setting.display === 'prompt') { // 濡傛灉琛ㄥ崟浠ユ槸鍚︽灞曠ず锛屼笉璇锋眰涓嬫媺鑿滃崟淇℃伅 + this.setState({ + btnloading: false + }) + this.modelconfirm() + return + } + + if (execAction.groups.length > 0) { + execAction.groups.forEach(group => { + group.sublist.forEach(field => { + if ((field.type === 'select' || field.type === 'link' || field.type === 'multiselect') && field.resourceType === '1' && field.dataSource) { + subfields.push(field) + } + }) + }) + } else { + execAction.fields.forEach(field => { + if ((field.type === 'select' || field.type === 'link' || field.type === 'multiselect') && field.resourceType === '1' && field.dataSource) { + subfields.push(field) + } + }) + } + + if (subfields.length === 0) { + this.setState({ + visible: true, + btnloading: false + }) + return + } + + let deffers = subfields.map(item => { + let _option = Utils.getSelectQueryOptions(item) + let _sql = Utils.formatOptions(_option.sql) + let isSSO = item.database === 'sso' + + let param = { + func: 'sPC_Get_SelectedList', + LText: _sql, + obj_name: 'data', + arr_field: _option.field + } + + if (this.props.BID) { + param.BID = this.props.BID + } + if (this.props.dataManager) { // 鏁版嵁鏉冮檺 + param.LText = param.LText.replace(/\$@/ig, '/*') + param.LText = param.LText.replace(/@\$/ig, '*/') + } else { + param.LText = param.LText.replace(/@\$|\$@/ig, '') + } + + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + + return new Promise(resolve => { + Api.getSystemCacheConfig(param, isSSO).then(res => { + res.search = item + resolve(res) + }) + }) + }) + + let _field = {} + let error = '' + Promise.all(deffers).then(result => { + result.forEach(res => { + if (res.status) { + let options = res.data.map(cell => { + let item = { + key: Utils.getuuid(), + Value: cell[res.search.valueField], + Text: cell[res.search.valueText] + } + + if (res.search.type === 'link') { + item.parentId = cell[res.search.linkField] + } else if (res.search.type === 'select' && res.search.linkSubField && res.search.linkSubField.length > 0) { + res.search.linkSubField.forEach(_field => { + item[_field] = (cell[_field] || cell[_field] === 0) ? cell[_field] : '' + }) + } + + return item + }) + + _field[res.search.uuid] = options + } else { + error = res + } + }) + + if (error) { + notification.warning({ + top: 92, + message: error.message, + duration: 5 + }) + } + + this.setState({ + configMap: {...configMap, ..._field} + }, () => { + this.setState({ + visible: true, + btnloading: false + }) + }) + }) + } + + /** + * @description Excel 瀵煎叆 + */ + getexceldata = (data, btn, errors, primaryId) => { + if (errors) { + if (errors === 'notexit') { + notification.warning({ + top: 92, + message: '宸ヤ綔琛ㄣ��' + btn.verify.sheet + '銆嬩笉瀛樺湪锛�', + duration: 5 + }) + } else if (errors === 'empty') { + notification.warning({ + top: 92, + message: '宸ヤ綔琛ㄣ��' + btn.verify.sheet + '銆嬩负绌猴紒', + duration: 5 + }) + } else if (errors === 'headerError') { + notification.warning({ + top: 92, + message: '宸ヤ綔琛ㄣ��' + btn.verify.sheet + '銆嬭〃澶磋缃敊璇紒', + duration: 5 + }) + } + + return + } + + if (!data || data.length === 0) { + notification.warning({ + top: 92, + message: '鏈幏鍙栧埌宸ヤ綔琛ㄣ��' + btn.verify.sheet + '銆嬫暟鎹紒', + duration: 5 + }) + return + } + + let result = Utils.getExcelInSql(btn, data, this.props.dict) + if (result.errors) { + notification.warning({ + top: 92, + message: result.errors, + duration: 5 + }) + return + } + + let param = { + ID: primaryId + } + + if (this.props.BID) { + param.BID = this.props.BID + } + + if (this.props.dataManager) { // 鏁版嵁鏉冮檺 + result.sql = result.sql.replace(/\$@/ig, '/*') + result.sql = result.sql.replace(/@\$/ig, '*/') + } else { + result.sql = result.sql.replace(/@\$|\$@/ig, '') + } + + param.LText = Utils.formatOptions(result.sql) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + + this.setState({loadingUuid: btn.uuid}) + + if (btn.intertype === 'inner' && !btn.innerFunc) { // 绯荤粺瀛樺偍杩囩▼ + param.func = 'sPC_TableData_InUpDe' + + Api.genericInterface(param).then((res) => { + if (res.status) { + this.execSuccess(btn, res) + } else { + this.execError(res, btn) + } + }) + } else if (btn.intertype === 'inner' && btn.innerFunc) { // 鑷畾涔夊瓨鍌ㄨ繃绋� + param.func = btn.innerFunc + + Api.genericInterface(param).then((res) => { + if (res.status) { + this.execSuccess(btn, res) + } else { + this.execError(res, btn) + } + }) + } else if (btn.intertype === 'outer') { // 澶栭儴鎺ュ彛 + let _outParam = null + + new Promise(resolve => { + // 鍐呴儴璇锋眰 + if (btn.innerFunc) { + param.func = btn.innerFunc + // 瀛樺湪鍐呴儴鍑芥暟鏃讹紝鏁版嵁棰勫鐞� + Api.genericInterface(param).then(res => { + if (res.status) { + delete res.ErrCode + delete res.ErrMesg + delete res.message + delete res.status + + // 浣跨敤澶勭悊鍚庣殑鏁版嵁璋冪敤澶栭儴鎺ュ彛 + let keys = Object.keys(res) // 鎻愪氦澶栭儴鎺ュ彛鍓嶏紝娣诲姞BID + if (this.props.BID && keys.filter(key => key.toLowerCase() === 'bid').length === 0) { + res.BID = this.props.BID + } + resolve(res) + } else { + this.execError(res, btn) + resolve(false) + } + }) + } else { + resolve(param) + } + }).then(res => { + if (!res) return + // 澶栭儴璇锋眰 + _outParam = JSON.parse(JSON.stringify(res)) + + if (this.props.menuType === 'HS') { + if (btn.sysInterface === 'true' && options.cloudServiceApi) { + param.rduri = options.cloudServiceApi + } else if (btn.sysInterface !== 'true') { + param.rduri = btn.interface + } + } else { + if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) { + param.rduri = window.GLOB.mainSystemApi + } else if (btn.sysInterface !== 'true') { + param.rduri = btn.interface + } + } + + if (btn.outerFunc) { + res.func = btn.outerFunc + } + + return Api.genericInterface(res) + }).then(response => { + if (!response) return + // 鍥炶皟璇锋眰 + if (btn.callbackFunc) { + // 瀛樺湪鍥炶皟鍑芥暟鏃讹紝璋冪敤 + delete response.message + delete response.status + + response.func = btn.callbackFunc + + let _callbackparam = {..._outParam, ...response} + return Api.genericInterface(_callbackparam) + } else { + if (response.status) { + this.execSuccess(btn, response) + } else { + this.execError(response, btn) + } + } + }).then(res => { + if (!res) return + + if (res.status) { + this.execSuccess(btn, res) + } else { + this.execError(res, btn) + } + }) + } + } + + /** + * @description Excel 瀵煎嚭 + */ + triggerExcelout = (btn) => { + let viewParam = this.props.getexceloutparam() + let name = `${viewParam.menuName}${moment().format('YYYYMMDDHHmmss')}.xlsx` + let pageSize = 1000 + + if (btn.search === 'true' && viewParam.search && viewParam.search.length > 0) { + let valid = false + viewParam.search.forEach(item => { + if (Array.isArray(item.value)) { + if (item.value.length > 0) { + valid = true + } + } else if (item.value || item.value === 0) { + valid = true + } + }) + + if (!valid) { + notification.warning({ + top: 92, + message: '鎼滅储鏉′欢涓嶅彲涓虹┖锛�', + duration: 5 + }) + return + } + } + + this.setState({loadingUuid: btn.uuid}) + + if (btn.pagination !== 'true') { + if (btn.intertype === 'inner' && !btn.innerFunc) { // 浣跨敤绯荤粺鍑芥暟 + if (!viewParam.arr_field) { + this.execError({ErrCode: 'N', message: '鏈缃樉绀哄垪锛�'}, btn) + return + } + + let param = this.getExcelDefaultParam(viewParam.arr_field, viewParam.orderBy, viewParam.search) + + Api.genericInterface(param).then(result => { + if (result.status) { + this.exportExcel(result.data, btn, name) + } else { + this.execError(result, btn) + } + }) + } else if (btn.intertype === 'inner' && btn.innerFunc) { // 浣跨敤鍐呴儴鍑芥暟 + let param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search) + param.func = btn.innerFunc + + Api.genericInterface(param).then(result => { + if (result.status) { + this.exportExcel(result.data, btn, name) + } else { + this.execError(result, btn) + } + }) + } else if (btn.intertype === 'outer' && !btn.innerFunc) { // 浣跨敤澶栭儴鍑芥暟 + let param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search) + + if (this.props.menuType === 'HS') { + if (btn.sysInterface === 'true' && options.cloudServiceApi) { + param.rduri = options.cloudServiceApi + } else if (btn.sysInterface !== 'true') { + param.rduri = btn.interface + } + } else { + if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) { + param.rduri = window.GLOB.mainSystemApi + } else if (btn.sysInterface !== 'true') { + param.rduri = btn.interface + } + } + + if (btn.outerFunc) { + param.func = btn.outerFunc + } + + Api.genericInterface(param).then(result => { + if (result.status) { + this.exportExcel(result.data, btn, name) + } else { + this.execError(result, btn) + } + }) + } else if (btn.intertype === 'outer' && btn.innerFunc) { + let param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search) + param.func = btn.innerFunc + + Api.genericInterface(param).then(res => { + if (res.status) { + delete res.ErrCode + delete res.ErrMesg + delete res.message + delete res.status + + if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) { + res.rduri = window.GLOB.mainSystemApi + } else if (btn.sysInterface !== 'true') { + res.rduri = btn.interface + } + + if (btn.outerFunc) { + res.func = btn.outerFunc + } + + Api.genericInterface(res).then(result => { + if (result.status) { + this.exportExcel(result.data, btn, name) + } else { + this.execError(result, btn) + } + }) + } else { + this.execError(res, btn) + } + }) + } else { + this.execError({ErrCode: 'N', message: '瀵煎嚭鎸夐挳璁剧疆閿欒锛�'}, btn) + } + } else if (btn.intertype === 'outer' && btn.innerFunc) { // 鍒嗛〉锛屼笖涓ゆ璇锋眰 + this.getExcelOutDoubleData(btn, viewParam, 1, pageSize, [], name) + } else { // 鍒嗛〉锛屼竴姝ヨ姹� + this.getExcelOutData(btn, viewParam, 1, pageSize, [], name) + } + } + + /** + * @description 涓ゆ鍒嗛〉璇锋眰 + */ + getExcelOutDoubleData = (btn, viewParam, pageIndex, pageSize, data, name) => { + let param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search, true, pageIndex, pageSize) + param.func = btn.innerFunc + + Api.genericInterface(param).then(res => { + if (res.status) { + delete res.ErrCode + delete res.ErrMesg + delete res.message + delete res.status + + if (this.props.menuType === 'HS') { + if (btn.sysInterface === 'true' && options.cloudServiceApi) { + param.rduri = options.cloudServiceApi + } else if (btn.sysInterface !== 'true') { + param.rduri = btn.interface + } + } else { + if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) { + param.rduri = window.GLOB.mainSystemApi + } else if (btn.sysInterface !== 'true') { + param.rduri = btn.interface + } + } + + if (btn.outerFunc) { + res.func = btn.outerFunc + } + + Api.genericInterface(res).then(result => { + if (result.status) { + if (!result.data) { + this.execError({ErrCode: 'N', message: '鏈幏鍙栧埌鏁版嵁淇℃伅锛�'}, btn) + } else if (result.data.length >= pageSize) { + data = data.concat(result.data) + pageIndex++ + this.getExcelOutDoubleData(btn, viewParam, pageIndex, pageSize, data, name) + } else { + data = data.concat(result.data) + this.exportExcel(data, btn, name) + } + } else { + this.execError(result, btn) + } + }) + } else { + this.execError(res, btn) + } + }) + } + + /** + * @description 涓�姝ュ垎椤佃姹� + */ + getExcelOutData = (btn, viewParam, pageIndex, pageSize, data, name) => { + let param = null + if (btn.intertype === 'inner' && !btn.innerFunc) { // 浣跨敤绯荤粺鍑芥暟 + if (!viewParam.arr_field) { + this.execError({ErrCode: 'N', message: '鏈缃樉绀哄垪锛�'}, btn) + return + } + + param = this.getExcelDefaultParam(viewParam.arr_field, viewParam.orderBy, viewParam.search, true, pageIndex, pageSize) + + + } else if (btn.intertype === 'inner' && btn.innerFunc) { // 浣跨敤鍐呴儴鍑芥暟 + param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search, true, pageIndex, pageSize) + param.func = btn.innerFunc + + } else if (btn.intertype === 'outer' && !btn.innerFunc) { // 浣跨敤澶栭儴鍑芥暟 + param = this.getExcelCustomParam(viewParam.orderBy, viewParam.search, true, pageIndex, pageSize) + + if (this.props.menuType === 'HS') { + if (btn.sysInterface === 'true' && options.cloudServiceApi) { + param.rduri = options.cloudServiceApi + } else if (btn.sysInterface !== 'true') { + param.rduri = btn.interface + } + } else { + if (btn.sysInterface === 'true' && window.GLOB.mainSystemApi) { + param.rduri = window.GLOB.mainSystemApi + } else if (btn.sysInterface !== 'true') { + param.rduri = btn.interface + } + } + + if (btn.outerFunc) { + param.func = btn.outerFunc + } + } + + Api.genericInterface(param).then(result => { + if (result.status) { + if (!result.data) { + this.execError({ErrCode: 'N', message: '鏈幏鍙栧埌鏁版嵁淇℃伅锛�'}, btn) + } else if (result.data.length >= pageSize) { + data = data.concat(result.data) + pageIndex++ + this.getExcelOutData(btn, viewParam, pageIndex, pageSize, data, name) + } else { + data = data.concat(result.data) + this.exportExcel(data, btn, name) + } + } else { + this.execError(result, btn) + } + }) + } + + /** + * @description Excel 鐢熸垚 + */ + exportExcel = (data, btn, name) => { + const { logcolumns } = this.props + if (data && data.length > 0) { + try { + let _header = [] + let _topRow = {} + let colwidth = [] + + let hidecolumns = [] + + let verifyColumn = {} // 璁板綍楠岃瘉淇℃伅涓殑Excel鍒楅厤缃� + if (btn.verify && btn.verify.columns && btn.verify.columns.length > 0) { + btn.verify.columns.forEach(col => { + verifyColumn[col.Column] = col + }) + } + + logcolumns.forEach(col => { + if (col.Hide === 'true') { + hidecolumns.push(col.field) + return + } + if (!data[0].hasOwnProperty(col.field)) return + if (_topRow[col.field]) return + + if (verifyColumn[col.field]) { // 浼樺厛浣跨敤楠岃瘉淇℃伅涓殑鍒楄缃� + _header.push(col.field) + _topRow[col.field] = verifyColumn[col.field].Text + + colwidth.push({width: verifyColumn[col.field].Width}) + } else { + _header.push(col.field) + _topRow[col.field] = col.label + + let _colwidth = Math.floor(col.Width / 6) + + if (!_colwidth || _colwidth < 5) { + _colwidth = 5 + } + + colwidth.push({width: _colwidth}) + } + }) + + if (btn.verify && btn.verify.columns && btn.verify.columns.length > 0) { + btn.verify.columns.forEach(col => { + if (hidecolumns.includes(col.Column)) return + if (!data[0].hasOwnProperty(col.Column)) return + if (_topRow[col.Column]) return + + _header.push(col.Column) + _topRow[col.Column] = col.Text + + colwidth.push({width: col.Width}) + }) + } + + Object.keys(data[0]).forEach(key => { + if (hidecolumns.includes(key)) return + if (_topRow[key]) return + + _header.push(key) + _topRow[key] = key + + colwidth.push({width: 12}) + }) + + let table = [] + + table.push(_topRow) + + data.forEach(item => { + let _row = {} + _header.forEach(field => { + _row[field] = item[field] + }) + + table.push(_row) + }) + + const ws = XLSX.utils.json_to_sheet(table, {header: _header, skipHeader: true}) + + ws['!cols'] = colwidth + + const wb = XLSX.utils.book_new() + XLSX.utils.book_append_sheet(wb, ws, 'Sheet1') + + XLSX.writeFile(wb, name) + + this.execSuccess(btn, {ErrCode: 'S', ErrMesg: '瀵煎嚭鎴愬姛锛�'}) + } catch { + this.execError({ErrCode: 'N', message: 'Excel鐢熸垚澶辫触锛�'}, btn) + } + + } else { + this.execError({ErrCode: 'N', message: '鏈煡璇㈠埌瀵煎嚭鏁版嵁锛�'}, btn) + } + } + + /** + * @description 鑾峰彇鐢ㄦ埛鑷畾涔夊瓨鍌ㄨ繃绋嬩紶鍙� + */ + getExcelCustomParam = (orderBy, search, pagination = false, pageIndex = 1, pageSize = 100) => { + let _search = Utils.formatCustomMainSearch(search) + + let param = { + OrderCol: orderBy, + ..._search + } + + if (this.props.BID) { + param.BID = this.props.BID + } + + if (pagination) { + param.PageIndex = pageIndex + param.PageSize = pageSize + } + + return param + } + + /** + * @description 鑾峰彇榛樿瀛樺偍杩囩▼璇锋眰鍙傛暟 + */ + getExcelDefaultParam = (arr_field, orderBy, search, pagination = false, pageIndex = 1, pageSize = 100) => { + const { setting } = this.props + + let _search = Utils.joinMainSearchkey(search) + + _search = _search ? 'where ' + _search : '' + + let param = { + func: 'sPC_Get_TableData', + obj_name: 'data', + arr_field: arr_field, + custom_script: setting.customScript || '', + default_sql: setting.default || 'true', + dataM: this.props.dataManager ? 'Y' : '' + } + + if (this.props.BID) { + param.BID = this.props.BID + } + + let _dataresource = setting.dataresource + + if (/\s/.test(_dataresource)) { + _dataresource = '(' + _dataresource + ') tb' + } + + if (this.props.dataManager) { // 鏁版嵁鏉冮檺 + _dataresource = _dataresource.replace(/\$@/ig, '/*') + _dataresource = _dataresource.replace(/@\$/ig, '*/') + param.custom_script = param.custom_script.replace(/\$@/ig, '/*') + param.custom_script = param.custom_script.replace(/@\$/ig, '*/') + } else { + _dataresource = _dataresource.replace(/@\$|\$@/ig, '') + param.custom_script = param.custom_script.replace(/@\$|\$@/ig, '') + } + + let regoptions = null + if (setting.queryType === 'statistics' || param.custom_script) { + let allSearch = Utils.getAllSearchOptions(search) + + regoptions = allSearch.map(item => { + return { + reg: new RegExp('@' + item.key + '@', 'ig'), + value: `'${item.value}'` + } + }) + + regoptions.push({ + reg: new RegExp('@orderBy@', 'ig'), + value: orderBy + }, { + reg: new RegExp('@pageSize@', 'ig'), + value: pageSize + }, { + reg: new RegExp('@pageIndex@', 'ig'), + value: pageIndex + }) + } + + if (setting.queryType === 'statistics') { // 缁熻鏁版嵁婧愶紝鍐呭鏇挎崲 + regoptions.forEach(item => { + _dataresource = _dataresource.replace(item.reg, item.value) + }) + _search = '' + } + + let LText = `select ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${orderBy}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows` + + if (pagination) { + LText = `select top ${pageSize} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${orderBy}) as rows from ${_dataresource} ${_search}) tmptable where rows > ${pageSize * (pageIndex - 1)} order by tmptable.rows` + } + + if (param.custom_script) { + regoptions.forEach(item => { + param.custom_script = param.custom_script.replace(item.reg, item.value) + }) + + if (this.props.dataManager) { // 鏁版嵁鏉冮檺 + param.custom_script = param.custom_script.replace(/\$@/ig, '/*') + param.custom_script = param.custom_script.replace(/@\$/ig, '*/') + } else { + param.custom_script = param.custom_script.replace(/@\$|\$@/ig, '') + } + + param.custom_script = Utils.formatOptions(param.custom_script) + } + + if (this.props.dataManager) { // 鏁版嵁鏉冮檺 + LText = LText.replace(/\$@/ig, '/*') + LText = LText.replace(/@\$/ig, '*/') + } else { + LText = LText.replace(/@\$|\$@/ig, '') + } + + param.LText = Utils.formatOptions(LText) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + param.DateCount = '' + + return param + } + + /** + * @description 妯℃�佹锛堣〃鍗曪級锛岀‘璁� + */ + handleOk = () => { + this.formRef.handleConfirm().then(res => { + this.setState({ + confirmLoading: true + }) + + this.execSubmit(this.state.execAction, this.state.tabledata, () => { + this.setState({ + confirmLoading: false + }) + }, res) + }, () => {}) + } + + /** + * @description 妯℃�佹锛堣〃鍗曪級锛屽彇娑� + */ + handleCancel = () => { + this.setState({ + visible: false, + confirmLoading: false + }) + } + + modelconfirm = () => { + const { BData } = this.props + const { execAction, tabledata } = this.state + let _this = this + let _fields = [] + + if (execAction.groups.length > 0) { + execAction.groups.forEach(group => { + _fields = [..._fields, ...group.sublist] + }) + } else { + _fields = execAction.fields + } + + let result = _fields.map(item => { + let _readin = item.readin !== 'false' + let _initval = item.initval + + if (item.type === 'linkMain' || item.type === 'funcvar') { + _readin = false + } + + if (item.type === 'linkMain' && BData && BData.hasOwnProperty(item.field)) { + _initval = BData[item.field] + } else if (_readin && tabledata[0] && tabledata[0].hasOwnProperty(item.field)) { + _initval = tabledata[0][item.field] + } + + let _fieldlen = item.fieldlength || 50 + if (item.type === 'textarea' || item.type === 'fileupload' || item.type === 'multiselect') { + _fieldlen = item.fieldlength || 512 + } else if (item.type === 'number') { + _fieldlen = item.decimal ? item.decimal : 0 + } + + return { + key: item.field, + readonly: item.readonly === 'true', + readin: _readin, + fieldlen: _fieldlen, + type: item.type, + value: _initval + } + }) + + _this.setState({ + running: true + }) + + confirm({ + title: this.props.dict['main.action.confirm.tip'], + onOk() { + _this.setState({ + loadingUuid: execAction.uuid + }) + + return new Promise(resolve => { + _this.execSubmit(execAction, tabledata, resolve, result) + }) + }, + onCancel() { + _this.setState({ + loadingUuid: '', + running: false + }) + } + }) + } + + /** + * @description 鏄剧ず妯℃�佹 + */ + getModels = () => { + const { execAction } = this.state + + if (!execAction || !this.state.visible) return null + + let title = '' + let width = '62vw' + let clickouter = false + let container = document.body + + if (execAction && execAction.setting) { + title = execAction.setting.title + width = execAction.setting.width + 'vw' + + if (this.props.type === 'main' && execAction.setting.container === 'tab' && this.props.ContainerId) { + width = execAction.setting.width + '%' + container = () => document.getElementById(this.props.ContainerId) + } + + if (execAction.setting.clickouter === 'close') { + clickouter = true + } + } + + if (this.props.type === 'subtab') { + container = document.body + } + + return ( + <Modal + title={title} + maskClosable={clickouter} + getContainer={container} + wrapClassName='action-modal' + visible={this.state.visible} + width={width} + onOk={this.handleOk} + confirmLoading={this.state.confirmLoading} + onCancel={this.handleCancel} + destroyOnClose + > + <MutilForm + dict={this.props.dict} + action={execAction} + inputSubmit={this.handleOk} + configMap={this.state.configMap} + data={this.state.tabledata[0]} + BData={this.props.BData} + wrappedComponentRef={(inst) => this.formRef = inst} + /> + </Modal> + ) + } + + render() { + const { loadingUuid, btnloading, loadingNumber } = this.state + + let fixed = this.props.setting.actionfixed && this.props.type === 'main' // 鎸夐挳鏄惁鍥哄畾鍦ㄥご閮� + + if (fixed) { + return ( + <Affix offsetTop={48}> + <div className="button-list toolbar-button" id={fixed ? this.props.MenuID + 'mainaction' : ''}> + {this.props.actions.map((item, index) => { + let label = item.label + if (loadingUuid === item.uuid && loadingNumber !== '') { + label = label + '(' + loadingNumber + ')' + } + + return ( + <Button + className={'mk-btn mk-' + item.class} + icon={item.icon} + key={'action' + index} + onClick={() => {this.actionTrigger(item)}} + loading={loadingUuid === item.uuid} + >{label}</Button> + ) + })} + {this.getModels()} + {btnloading && <Spin size="large" />} + <ExcelIn MenuID={this.props.MenuID} returndata={this.getexceldata} ref="excelIn" /> + </div> + </Affix> + ) + } else { + return ( + <div className="button-list toolbar-button" id={fixed ? this.props.MenuID + 'mainaction' : ''}> + {this.props.actions.map((item, index) => { + let label = item.label + if (loadingUuid === item.uuid && loadingNumber !== '') { + label = label + '(' + loadingNumber + ')' + } + + return ( + <Button + className={'mk-btn mk-' + item.class} + icon={item.icon} + key={'action' + index} + onClick={() => {this.actionTrigger(item)}} + loading={loadingUuid === item.uuid} + >{label}</Button> + ) + })} + {this.getModels()} + {btnloading && <Spin size="large" />} + <ExcelIn MenuID={this.props.MenuID} returndata={this.getexceldata} ref="excelIn" /> + </div> + ) + } + } +} + +export default PrintButton \ No newline at end of file diff --git a/src/tabviews/zshare/actionList/printbutton/index.scss b/src/tabviews/zshare/actionList/printbutton/index.scss new file mode 100644 index 0000000..4f63e95 --- /dev/null +++ b/src/tabviews/zshare/actionList/printbutton/index.scss @@ -0,0 +1,228 @@ +.card-row-box { + min-height: 50px; + padding: 0px 10px; + margin-bottom: 15px; + + .chart-card-box { + padding: 0 10px; + .anticon { + margin-right: 0px; + } + } + > .chart-card-box { + margin-bottom: 20px; + } + + .chart-card-box:not(.ant-col) { + display: inline-block; + margin-bottom: 20px; + } + + >.ant-tabs { + .ant-tabs-bar { + border: 0; + margin: 0; + .ant-tabs-nav-scroll { + .ant-tabs-tab { + margin: 0; + padding: 12px 5px; + cursor: default; + + .chart-card-box:not(.ant-col) { + margin-bottom: 0px; + } + } + } + } + } + + .ant-empty { + .ant-empty-image { + height: 60px; + } + } + + .loading-mask { + position: absolute; + left: 20px; + top: 0; + right: 20px; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; + text-align: justify; + z-index: 1; + + .ant-spin-blur { + position: absolute; + width: 100%; + height: 100%; + opacity: 0.5; + background: #ffffff; + } + } + + .ant-card.chart-card { + transition: all 0.3s; + + .ant-card-head { + min-height: 40px; + line-height: 2; + .ant-card-head-title { + font-weight: 500; + } + .ant-card-extra { + color: #1890ff; + .action-cell { + cursor: pointer; + } + } + } + .ant-card-actions { + height: 48px; + } + } + + .ant-card.chart-card:not(.ant-card-bordered) { + .ant-card-head { + border-bottom: 0; + } + .ant-card-actions { + border-top: 0; + } + } + + .ant-card.chart-card.chart-card-selected { + border: 1px solid #1890ff; + box-shadow: 0px 0px 8px #c4ebfd; + } + + .ant-card.chart-card .ant-card-body { + padding: 0px; + zoom: 1; + + .ant-card-meta.switch { + cursor: pointer; + } + + .ant-card-meta { + margin: 0px; + padding: 20px; + position: relative; + white-space: normal; + + .ant-card-meta-avatar { + padding-top: 0px; + padding-left: 0px; + } + + .ant-avatar-image { + box-sizing: border-box; + margin: 0; + padding: 0; + font-variant: tabular-nums; + line-height: 1.5; + list-style: none; + font-feature-settings: 'tnum'; + position: relative; + display: inline-block; + overflow: hidden; + color: #fff; + white-space: nowrap; + text-align: center; + vertical-align: middle; + border-radius: 50%; + + img { + width: 100%; + } + .font { + background: transparent; + } + } + .ant-card-meta-title { + font-size: 14px; + } + .ant-card-meta-detail > div { + height: 23px; + vertical-align: top; + } + .ant-card-meta-detail > div:not(:last-child) { + margin-bottom: 2px; + } + .helf { + display: inline-block; + width: 50%; + } + .third { + display: inline-block; + width: 33.3%; + } + .align-center { + text-align: center; + } + .align-right { + text-align: right; + } + } + } + + .chart-title { + margin-bottom: 10px; + margin-left: 0px; + margin-right: 0px; + } + + .ant-card.chart-card { + .ant-card-actions { + li { + color: rgba(0, 0, 0, 0.45); + span { + overflow: hidden; + word-break: break-word; + white-space: nowrap; + text-overflow: ellipsis; + } + .anticon { + width: unset; + margin-right: 3px; + color: rgba(0, 0, 0, 0.45); + } + } + li:hover { + color: #1890ff; + .anticon { + color: #1890ff; + } + } + } + } + .ant-card.chart-card.background { + .ant-card-meta-title { + color: unset; + } + .ant-card-meta-description { + color: unset; + } + .ant-card-head { + color: unset; + .ant-card-head-title { + color: unset; + } + } + .ant-card-actions { + background: transparent; + li { + white-space: nowrap; + color: unset; + .anticon { + color: unset; + } + } + } + } + .clear { + clear: both; + } +} diff --git a/src/tabviews/zshare/mutilform/index.jsx b/src/tabviews/zshare/mutilform/index.jsx index 5e8fa89..bf40107 100644 --- a/src/tabviews/zshare/mutilform/index.jsx +++ b/src/tabviews/zshare/mutilform/index.jsx @@ -21,15 +21,15 @@ } state = { - cols: 2, - datatype: null, - readtype: null, - readin: null, - fieldlen: null, - formlist: [], + cols: 2, // 鏄剧ず涓哄灏戝垪 + datatype: null, // 鏁版嵁绫诲瀷 + readtype: null, // 鏄惁鍙 + readin: null, // 琛屾暟鎹槸鍚﹀啓鍏� + fieldlen: null, // 瀛楁闀垮害 + formlist: [], // 琛ㄥ崟椤� encrypts: [], // 鍔犲瘑瀛楁 intercepts: [], // 鎴彇瀛楁 - record: {} + record: {} // 璁板綍涓嬫媺琛ㄥ崟鍏宠仈瀛楁锛岀敤浜庢暟鎹啓鍏� } UNSAFE_componentWillMount () { @@ -81,19 +81,24 @@ formlist = formlist.map(item => { if (item.type === 'title') return item + // 鍔犲瘑瀛楁 if (item.type === 'textarea' && item.encryption === 'true') { encrypts.push(item.field) } + + // 瀛楃鎴彇瀛楁 if (item.interception === 'true') { intercepts.push(item.field) } + // 鏁版嵁鍐欏叆 let _readin = item.readin !== 'false' if (item.type === 'linkMain' || item.type === 'funcvar') { _readin = false } - item.initVal = typeof(item.initval) === 'object' ? JSON.parse(JSON.stringify(item.initval)) : item.initval // 鐢ㄤ簬鍙楁帶鍊肩殑琛ㄥ崟锛岄殣钘忔椂浼犻粯璁ゅ�� + // 鐢ㄤ簬鍙楁帶鍊肩殑琛ㄥ崟锛岄殣钘忔椂浼犻粯璁ゅ��(鏈娇鐢紵) + item.initVal = typeof(item.initval) === 'object' ? JSON.parse(JSON.stringify(item.initval)) : item.initval let _fieldlen = item.fieldlength || 50 if (item.type === 'textarea' || item.type === 'fileupload' || item.type === 'multiselect') { @@ -120,22 +125,65 @@ item.options = [...item.options, ...this.props.configMap[item.uuid]] } + // 淇濆瓨鍒濆鍒楄〃锛岀敤浜庡叧鑱旇彍鍗曟帶鍒� item.oriOptions = JSON.parse(JSON.stringify(item.options)) + // 涓嬬骇琛ㄥ崟鎺у埗-瀛楁鍐欏叆 if (item.linkSubField && item.linkSubField.length > 0) { let _fields = _inputfields.map(_item => _item.field) item.linkSubField = item.linkSubField.filter(_item => _fields.includes(_item)) } } - let newval = '$$initval$$' + let newval = '' + if (item.type === 'linkMain' && BData && BData.hasOwnProperty(item.field)) { newval = BData[item.field] } else if (item.type !== 'linkMain' && _readin && !/^date/.test(item.type) && this.props.data && this.props.data.hasOwnProperty(item.field)) { newval = this.props.data[item.field] + } else if (item.type === 'date') { // 鏃堕棿鎼滅储 + if (_readin && this.props.data && this.props.data.hasOwnProperty(item.field)) { + newval = this.props.data[item.field] + } + if (newval) { + newval = moment(newval, 'YYYY-MM-DD') + newval = newval.format('YYYY-MM-DD') === 'Invalid date' ? '' : newval + } + if (!newval && item.initval) { + newval = moment().subtract(item.initval, 'days') + } else if (!newval) { + newval = null + } + } else if (item.type === 'datemonth') { + if (_readin && this.props.data && this.props.data.hasOwnProperty(item.field)) { + newval = this.props.data[item.field] + } + if (newval) { + newval = moment(newval, 'YYYY-MM') + newval = newval.format('YYYY-MM') === 'Invalid date' ? '' : newval + } + if (!newval && item.initval) { + newval = moment().subtract(item.initval, 'month') + } else if (!newval) { + newval = null + } + } else if (item.type === 'datetime') { + if (_readin && this.props.data && this.props.data.hasOwnProperty(item.field)) { + newval = this.props.data[item.field] + } + if (newval) { + newval = moment(newval, 'YYYY-MM-DD HH:mm:ss') + newval = newval.format('YYYY-MM-DD HH:mm:ss') === 'Invalid date' ? '' : newval + } + if (!newval && item.initval) { + newval = moment().subtract(item.initval, 'days') + } else if (!newval) { + newval = null + } } - if (encrypts.includes(item.field) && newval !== '$$initval$$') { + // 鍔犲瘑瀛楁锛岃В瀵嗗鐞� + if (item.type === 'textarea' && item.encryption === 'true' && newval !== '') { try { newval = window.decodeURIComponent(window.atob(newval)) } catch (e) { @@ -143,10 +191,10 @@ } } - if (newval !== '$$initval$$') { - item.initval = newval - } + // 璇诲彇琛ㄦ牸鏁版嵁鎴栬鏈夋椂闂寸殑鍒濆鍊� + item.initval = newval !== '' ? newval : item.initval + // 涓嬫媺琛ㄥ崟锛屽瓨鍦ㄤ笂绾ц彍鍗曟椂锛岀敓鎴愭樉绀哄�煎垪琛紝浼樺厛浠ユ暟瀛楀垽鏂� if (item.supvalue) { let supvals = [] item.supvalue.split(',').forEach(val => { @@ -317,9 +365,6 @@ const fields = [] formlist.forEach((item, index) => { - // if ((!item.field && item.type !== 'title') || item.hidden === 'true') return - // if (item.supField && !item.supvalue.includes(this.props.form.getFieldValue(item.supField))) return - if (item.type === 'title') { fields.push( <Col span={24} key={index}> @@ -459,17 +504,11 @@ </Col> ) } else if (item.type === 'date') { // 鏃堕棿鎼滅储 - let _initval = this.props.data ? this.props.data[item.field] : '' - if (_initval && this.state.readin[item.field]) { - _initval = moment(_initval, 'YYYY-MM-DD') - } else { - _initval = item.initval ? moment().subtract(item.initval, 'days') : null - } fields.push( <Col span={24 / cols} key={index}> <Form.Item label={item.label}> {getFieldDecorator(item.field, { - initialValue: _initval, + initialValue: item.initval, rules: [ { required: item.required === 'true', @@ -483,17 +522,11 @@ </Col> ) } else if (item.type === 'datemonth') { - let _initval = this.props.data ? this.props.data[item.field] : '' - if (_initval && this.state.readin[item.field]) { - _initval = moment(_initval, 'YYYY-MM') - } else { - _initval = item.initval ? moment().subtract(item.initval, 'month') : null - } fields.push( <Col span={24 / cols} key={index}> <Form.Item label={item.label}> {getFieldDecorator(item.field, { - initialValue: _initval, + initialValue: item.initval, rules: [ { required: item.required === 'true', @@ -507,17 +540,11 @@ </Col> ) } else if (item.type === 'datetime') { - let _initval = this.props.data ? this.props.data[item.field] : '' - if (_initval && this.state.readin[item.field]) { - _initval = moment(_initval, 'YYYY-MM-DD HH:mm:ss') - } else { - _initval = item.initval ? moment().subtract(item.initval, 'days') : null - } fields.push( <Col span={24 / cols} key={index}> <Form.Item label={item.label}> {getFieldDecorator(item.field, { - initialValue: _initval, + initialValue: item.initval, rules: [ { required: item.required === 'true', @@ -525,7 +552,6 @@ } ] })( - // <DatePicker showTime getCalendarContainer={() => document.getElementById('form-box')} /> <DatePicker showTime disabled={item.readonly === 'true'} /> )} </Form.Item> @@ -620,9 +646,14 @@ } handleConfirm = () => { - const { record, encrypts, intercepts } = this.state + const { record, intercepts } = this.state + let _encrypts = JSON.parse(JSON.stringify(this.state.encrypts)) + let _format = { + date: 'YYYY-MM-DD', + datemonth: 'YYYY-MM', + datetime: 'YYYY-MM-DD HH:mm:ss' + } - let _encrypts = JSON.parse(JSON.stringify(encrypts)) // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� return new Promise((resolve, reject) => { this.props.form.validateFieldsAndScroll((err, values) => { @@ -632,56 +663,63 @@ this.state.formlist.forEach(item => { if (!item.field) return + let _item = null if (item.type === 'funcvar') { - search.push({ + _item = { type: 'funcvar', readonly: 'true', readin: false, fieldlen: this.state.fieldlen[item.field], key: item.field, value: '' - }) + } } else if (item.hidden === 'true') { let _val = item.initval if (record.hasOwnProperty(item.field)) { _val = record[item.field] - _encrypts = _encrypts.filter(_field => _field !== item.field) + _encrypts = _encrypts.filter(_field => _field !== item.field) // 闅愯棌瀛楁锛屼笉鍙備笌鍔犲瘑澶勭悊 } - search.push({ + _item = { type: this.state.datatype[item.field], readonly: this.state.readtype[item.field], readin: this.state.readin[item.field], fieldlen: this.state.fieldlen[item.field], key: item.field, value: _val - }) + } } else if (item.supField && !item.supvalue.includes(this.props.form.getFieldValue(item.supField))) { - search.push({ + _item = { type: this.state.datatype[item.field], readonly: this.state.readtype[item.field], readin: this.state.readin[item.field], fieldlen: this.state.fieldlen[item.field], key: item.field, value: item.initval - }) + } } + + if (!_item) return + + if (item.type === 'date' || item.type === 'datemonth' || item.type === 'datetime') { + if (_item.value && _item.value.format) { + _item.value = _item.value.format(_format[item.type]) + } else if (!_item.value) { + _item.value = '' + } + } + + search.push(_item) }) Object.keys(values).forEach(key => { let _value = '' if (this.state.datatype[key] === 'datetime') { - if (values[key]) { - _value = moment(values[key]).format('YYYY-MM-DD HH:mm:ss') - } + _value = values[key] ? moment(values[key]).format('YYYY-MM-DD HH:mm:ss') : '' } else if (this.state.datatype[key] === 'datemonth') { - if (values[key]) { - _value = moment(values[key]).format('YYYY-MM') - } + _value = values[key] ? moment(values[key]).format('YYYY-MM') : '' } else if (this.state.datatype[key] === 'date') { - if (values[key]) { - _value = moment(values[key]).format('YYYY-MM-DD') - } + _value = values[key] ? moment(values[key]).format('YYYY-MM-DD') : '' } else if (this.state.datatype[key] === 'number') { _value = values[key] @@ -723,6 +761,7 @@ }) }) + // 鍚湁鍔犲瘑瀛楁鏃讹紝瀵硅〃鍗曞�艰繘琛屽姞瀵� if (_encrypts && _encrypts.length > 0) { search = search.map(item => { let _value = item.value @@ -769,6 +808,7 @@ let rowIndex = 0 let colIndex = 0 + // 琛ㄥ崟鍒嗚锛岄伩鍏嶆帓鍒椾笉鏁撮綈 formlist.forEach(item => { if ((!item.field && item.type !== 'title') || item.hidden === 'true' || item.type === 'funcvar') return @@ -796,7 +836,6 @@ return ( <Form {...formItemLayout} className="ant-advanced-search-form main-form-field" id="main-form-box"> - {/* <Row gutter={24}>{this.getFields(formlist)}</Row> */} {_formlist.map((formrow, index) => <Row key={index} gutter={24}>{this.getFields(formrow)}</Row>)} </Form> ) diff --git a/src/templates/formtabconfig/index.jsx b/src/templates/formtabconfig/index.jsx index c726398..01149c4 100644 --- a/src/templates/formtabconfig/index.jsx +++ b/src/templates/formtabconfig/index.jsx @@ -11,6 +11,7 @@ import zhCN from '@/locales/zh-CN/model.js' import enUS from '@/locales/en-US/model.js' import Utils from '@/utils/utils.js' +import DevUtils from '@/utils/devutils.js' import { getModalForm, getActionForm } from '@/templates/zshare/formconfig' import { queryTableSql } from '@/utils/option.js' @@ -754,8 +755,8 @@ menuNo: menu.MenuNo } - newLText = Utils.formatOptions(Utils.getfunc(_param, btn, menu, _config)) - DelText = Utils.formatOptions(Utils.dropfunc(_param.funcName)) + newLText = Utils.formatOptions(DevUtils.getfunc(_param, btn, menu, _config)) + DelText = Utils.formatOptions(DevUtils.dropfunc(_param.funcName)) this.refs.btnCreatFunc.exec(btn.innerFunc, newLText, DelText).then(result => { if (result !== 'success') return @@ -814,8 +815,8 @@ } let _config = {...config, setting: setting} - let newLText = Utils.formatOptions(Utils.getTableFunc(setting, menu, _config)) // 鍒涘缓瀛樺偍杩囩▼sql - let DelText = Utils.formatOptions(Utils.dropfunc(setting.innerFunc)) // 鍒犻櫎瀛樺偍杩囩▼sql + let newLText = Utils.formatOptions(DevUtils.getTableFunc(setting, menu, _config)) // 鍒涘缓瀛樺偍杩囩▼sql + let DelText = Utils.formatOptions(DevUtils.dropfunc(setting.innerFunc)) // 鍒犻櫎瀛樺偍杩囩▼sql this.refs.tableCreatFunc.exec(setting.innerFunc, newLText, DelText).then(result => { if (result === 'success') { diff --git a/src/templates/sharecomponent/actioncomponent/index.jsx b/src/templates/sharecomponent/actioncomponent/index.jsx index ca28bf8..1f96bd0 100644 --- a/src/templates/sharecomponent/actioncomponent/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/index.jsx @@ -6,6 +6,7 @@ import Api from '@/api' import Utils from '@/utils/utils.js' +import DevUtils from '@/utils/devutils.js' import zhCN from '@/locales/zh-CN/model.js' import enUS from '@/locales/en-US/model.js' import { getActionForm } from '@/templates/zshare/formconfig' @@ -712,8 +713,8 @@ fields: fields, menuNo: menu.MenuNo } - newLText = Utils.formatOptions(Utils.getfunc(_param, btn, menu, _config)) - DelText = Utils.formatOptions(Utils.dropfunc(btn.innerFunc)) + newLText = Utils.formatOptions(DevUtils.getfunc(_param, btn, menu, _config)) + DelText = Utils.formatOptions(DevUtils.dropfunc(btn.innerFunc)) resolve(true) } else { notification.warning({ @@ -730,8 +731,8 @@ funcName: btn.innerFunc, menuNo: menu.MenuNo } - newLText = Utils.formatOptions(Utils.getexcelInfunc(_param, btn, menu)) - DelText = Utils.formatOptions(Utils.dropfunc(btn.innerFunc)) + newLText = Utils.formatOptions(DevUtils.getexcelInfunc(_param, btn, menu)) + DelText = Utils.formatOptions(DevUtils.dropfunc(btn.innerFunc)) resolve(true) } else { notification.warning({ @@ -746,8 +747,8 @@ innerFunc: btn.innerFunc } - newLText = Utils.formatOptions(Utils.getTableFunc(_param, menu, _config)) // 鍒涘缓瀛樺偍杩囩▼sql - DelText = Utils.formatOptions(Utils.dropfunc(btn.innerFunc)) + newLText = Utils.formatOptions(DevUtils.getTableFunc(_param, menu, _config)) // 鍒涘缓瀛樺偍杩囩▼sql + DelText = Utils.formatOptions(DevUtils.dropfunc(btn.innerFunc)) resolve(true) } else { @@ -757,8 +758,8 @@ fields: '', menuNo: menu.MenuNo } - newLText = Utils.formatOptions(Utils.getfunc(_param, btn, menu, _config)) - DelText = Utils.formatOptions(Utils.dropfunc(btn.innerFunc)) + newLText = Utils.formatOptions(DevUtils.getfunc(_param, btn, menu, _config)) + DelText = Utils.formatOptions(DevUtils.dropfunc(btn.innerFunc)) resolve(true) } }).then(res => { diff --git a/src/templates/sharecomponent/chartcomponent/index.jsx b/src/templates/sharecomponent/chartcomponent/index.jsx index 6b2faac..df17181 100644 --- a/src/templates/sharecomponent/chartcomponent/index.jsx +++ b/src/templates/sharecomponent/chartcomponent/index.jsx @@ -607,7 +607,7 @@ render() { const { plot } = this.props - console.log(plot) + return ( <div className="line-chart-edit-box" style={{minHeight: plot.height ? plot.height + 50 : 450}}> {plot.title ? <p className="chart-title">{plot.title}</p> : null} diff --git a/src/templates/sharecomponent/settingcomponent/index.jsx b/src/templates/sharecomponent/settingcomponent/index.jsx index f20ae5e..cd90ce6 100644 --- a/src/templates/sharecomponent/settingcomponent/index.jsx +++ b/src/templates/sharecomponent/settingcomponent/index.jsx @@ -4,6 +4,7 @@ import { Icon, Modal, Button, notification } from 'antd' import Utils from '@/utils/utils.js' +import DevUtils from '@/utils/devutils.js' import zhCN from '@/locales/zh-CN/model.js' import enUS from '@/locales/en-US/model.js' import { getSettingForm } from '@/templates/zshare/formconfig' @@ -120,8 +121,8 @@ } let _config = {...config, setting: setting} - let newLText = Utils.formatOptions(Utils.getTableFunc(setting, menu, _config)) // 鍒涘缓瀛樺偍杩囩▼sql - let DelText = Utils.formatOptions(Utils.dropfunc(setting.innerFunc)) // 鍒犻櫎瀛樺偍杩囩▼sql + let newLText = Utils.formatOptions(DevUtils.getTableFunc(setting, menu, _config)) // 鍒涘缓瀛樺偍杩囩▼sql + let DelText = Utils.formatOptions(DevUtils.dropfunc(setting.innerFunc)) // 鍒犻櫎瀛樺偍杩囩▼sql this.refs.funcCreatComponent.exec(setting.innerFunc, newLText, DelText).then(result => { if (result === 'success') { diff --git a/src/templates/sharecomponent/treesettingcomponent/index.jsx b/src/templates/sharecomponent/treesettingcomponent/index.jsx index a45f4f5..5ef6025 100644 --- a/src/templates/sharecomponent/treesettingcomponent/index.jsx +++ b/src/templates/sharecomponent/treesettingcomponent/index.jsx @@ -4,6 +4,7 @@ import { Icon, Modal, Button, notification } from 'antd' import Utils from '@/utils/utils.js' +import DevUtils from '@/utils/devutils.js' import zhCN from '@/locales/zh-CN/model.js' import enUS from '@/locales/en-US/model.js' import { getTreeSettingForm } from '@/templates/zshare/formconfig' @@ -93,8 +94,8 @@ } let _config = {...config, setting: setting} - let newLText = Utils.formatOptions(Utils.getTableFunc(setting, menu, _config)) // 鍒涘缓瀛樺偍杩囩▼sql - let DelText = Utils.formatOptions(Utils.dropfunc(setting.innerFunc)) // 鍒犻櫎瀛樺偍杩囩▼sql + let newLText = Utils.formatOptions(DevUtils.getTableFunc(setting, menu, _config)) // 鍒涘缓瀛樺偍杩囩▼sql + let DelText = Utils.formatOptions(DevUtils.dropfunc(setting.innerFunc)) // 鍒犻櫎瀛樺偍杩囩▼sql this.refs.funcCreatComponent.exec(setting.innerFunc, newLText, DelText).then(result => { if (result === 'success') { diff --git a/src/templates/zshare/createinterface/index.jsx b/src/templates/zshare/createinterface/index.jsx index 9af5ba5..172050a 100644 --- a/src/templates/zshare/createinterface/index.jsx +++ b/src/templates/zshare/createinterface/index.jsx @@ -528,7 +528,7 @@ param.Ltextgridparam = Utils.formatOptions(param.Ltextgridparam) param.Ltexttableparam = Utils.formatOptions(param.Ltexttableparam) - param.Ltext = this.getSysDefaultSql(btn, config, formlist, receipt, BID) + param.Ltext = this.getInterfaceSysDefaultSql(btn, config, formlist, receipt, BID) param.Ltext = Utils.formatOptions(param.Ltext) param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' param.secretkey = Utils.encrypt(param.Ltext, param.timestamp) @@ -588,7 +588,7 @@ }) } - getSysDefaultSql = (btn, config, formlist, receipt, BID) => { + getInterfaceSysDefaultSql = (btn, config, formlist, receipt, BID) => { let setting = config.setting let primaryKey = setting.primaryKey || 'id' let columns = config.columns.filter(col => !!col.field) diff --git a/src/templates/zshare/modalform/index.jsx b/src/templates/zshare/modalform/index.jsx index 9efb4c7..aeb4ea4 100644 --- a/src/templates/zshare/modalform/index.jsx +++ b/src/templates/zshare/modalform/index.jsx @@ -250,6 +250,14 @@ _options = [..._options, 'dataSource', 'valueField', 'valueText', 'orderBy', 'orderType', 'database'] } + if (openType !== 'funcvar' && openType !== 'linkMain') { + if (this.state.supField) { + _options.push('supField', 'supvalue') + } else { + _options.push('supField') + } + } + this.setState({ resourceType: value, formlist: this.state.formlist.map(form => { diff --git a/src/utils/devutils.js b/src/utils/devutils.js new file mode 100644 index 0000000..b314e29 --- /dev/null +++ b/src/utils/devutils.js @@ -0,0 +1,459 @@ +export default class Utils { + /** + * @description 鍒犻櫎瀛樺偍杩囩▼sql + * @return {String} name 瀛樺偍杩囩▼鍚嶇О + */ + static dropfunc (name) { + return `IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID('${name}') AND type in (N'P', N'PC')) mdrpk PROCEDURE ${name}` + } + + /** + * @description 鍒涘缓椤甸潰瀛樺偍杩囩▼ + * @return {String} + */ + static getTableFunc (param, menu, config) { + let form = '' + let formParam = '' + let _vars = ['bid', 'pageindex', 'pagesize', 'ordercol', 'ordertype', 'exceltype', 'septmenuno', 'lang', 'debug', 'loginuid', 'sessionuid', 'userid', 'errorcode', 'retmsg'] + let _columns = [] + let primaryKey = config.setting.primaryKey || 'ID' + + if (!_vars.includes(primaryKey.toLowerCase())) { + _vars.push(primaryKey.toLowerCase()) + formParam = `mchr13k@${primaryKey} nvarchar(50)='',` + } + + if (config.search && config.search.length > 0) { + let _fields = new Map() + config.search.forEach(item => { + if (item.field) { + let type = '' + + if (item.type.match(/date/ig)) { + type = 'datetime=null' + } else { + type = 'nvarchar(50)=\'\'' + } + + item.field.split(',').forEach(cell => { + let _f = cell + if (_fields.has(cell)) { + _f = _f + '1' + } + + _fields.set(cell, true) + + if (!_vars.includes(_f.toLowerCase())) { + _vars.push(_f.toLowerCase()) + formParam = formParam + `mchr13k@${_f} ${type},` + } + }) + } + }) + } + + if (config.columns && config.columns.length > 0) { + config.columns.forEach(item => { + if (item.field) { + _columns.push(`${item.field} as ${item.label}`) + } + }) + + form = ` + declare @dc table (${_columns.join(',')}) + + @tableid ='${menu.MenuID}' + ` + } + + let Ltext = `create proc ${param.innerFunc} + ( /*${menu.MenuName}*/ + @appkey nvarchar(50)='', + @BID nvarchar(50)='',${formParam} + @PageIndex nvarchar(50)='', + @PageSize nvarchar(50)='', + @OrderCol nvarchar(50)='', + @OrderType nvarchar(50)='', + @exceltype nvarchar(50)='', + @sEPTMenuNo nvarchar(50)='${menu.MenuNo}', + @lang nvarchar(50)='', + @debug nvarchar(50)='', + @LoginUID nvarchar(50)='', + @SessionUid nvarchar(50)='', + @UserID nvarchar(50), + @ErrorCode nvarchar(50) out, + @retmsg nvarchar(4000) out + ) + as + begin + declare @BegindateTest datetime,@EnddateTest datetime + select @BegindateTest=getdate() + set @ErrorCode='' + set @retmsg='' + BEGIN TRY + /*浜嬪姟鎿嶄綔*/ + BEGIN TRAN + /*鍏蜂綋涓氬姟鎿嶄綔*/ + + /* + select top 10 * from sProcExcep order by id desc + + declare @UserName nvarchar(50),@FullName nvarchar(50) + + select @UserName=UserName,@FullName=FullName from SUsers where UID=@UserID + ${form} + if 1=2 + begin + set @ErrorCode='E' + set @retmsg='鍦ㄦ鍐欐姤閿�' + goto GOTO_RETURN + end + + insert into sNote (remark,createuserid,CreateUser,CreateStaff) + select '鍦ㄦ鍐欐棩蹇�',@UserID,@UserName,@FullName + */ + + COMMIT TRAN + SET NOCOUNT ON + RETURN + END TRY + BEGIN CATCH + /*閿欒澶勭悊*/ + ROLLBACK TRAN + DECLARE @ErrorMessage NVARCHAR(4000); + DECLARE @ErrorSeverity INT; + DECLARE @ErrorState INT; + + /*鎶婅嚜瀹氫箟鐨勫弸濂界殑閿欒淇℃伅鎻愮ず鍔犱笂*/ + set @ErrorCode=cast(ERROR_NUMBER() as nvarchar(50)) + SET @retmsg=ERROR_MESSAGE(); + SELECT @ErrorMessage=ERROR_MESSAGE(), + @ErrorSeverity=ERROR_SEVERITY(), + @ErrorState=ERROR_STATE(); + + RAISERROR(@ErrorMessage, /*-- Message text.*/ + @ErrorSeverity, /*-- Severity.*/ + @ErrorState /*-- State.*/ + ); + END CATCH + + GOTO_RETURN: + ROLLBACK TRAN + + END` + + Ltext = Ltext.replace(/\n\s{4}/ig, 'mchr13k') + + return Ltext + } + + /** + * @description 鍒涘缓瀛樺偍杩囩▼ + * @return {String} + */ + static getfunc (param, btn, menu, config) { + let form = '' + let formParam = '' + let _vars = ['bid', 'septmenuno', 'lang', 'debug', 'loginuid', 'sessionuid', 'userid', 'errorcode', 'retmsg'] + let columns = config.columns + let primaryKey = config.setting.primaryKey || 'ID' + + if (!_vars.includes(primaryKey.toLowerCase())) { + _vars.push(primaryKey.toLowerCase()) + let _type = '50' + if (btn.Ot === 'requiredOnce') { // 澶氳鎷兼帴鏃讹紝涓婚敭璁句负max + _type = 'max' + } + formParam = `mchr13k@${primaryKey} nvarchar(${_type})='',` + } + + if (param.fields && param.fields.length > 0) { + let _fields = [] + param.fields.forEach(item => { + if (item.field) { + let type = '' + if (item.type.match(/date/ig)) { + type = 'datetime=null' + } else if (item.type === 'number') { + type = `decimal(18,${item.decimal})=0` + } else { + type = 'nvarchar(50)=\'\'' + } + + if (!_vars.includes(item.field.toLowerCase())) { + _vars.push(item.field.toLowerCase()) + formParam = formParam + `mchr13k@${item.field} ${type},` + } + + _fields.push(item.field) + } + }) + + let field1 = _fields.join(',') + let field2 = _fields.join(',@') + let field3 = _fields.map(cell => { + return cell + '=@' + cell + }) + + field2 = field2 ? '@' + field2 : '' + field3 = field3.join(',') + + form = ` + insert into ${param.name} (${field1},createuserid) select ${field2},@UserID + + update ${param.name} set ${field3},modifydate=getdate(),modifyuserid=@UserID + ` + } else if (btn.OpenType === 'prompt' || btn.OpenType === 'exec') { + form = ` + update ${param.name} set ModifyDate=getdate(),ModifyUserID=@UserID where ${primaryKey}=@${primaryKey} + ` + } + + if (columns) { + let _col = [] + let _field = [] + columns.forEach(col => { + if (col.field) { + if (col.type === 'number') { + _col.push(col.field + ' decimal(18,2)') + } else { + _col.push(col.field + ' nvarchar(50)') + } + _field.push(col.field) + } + }) + _col = _col.join(',') + _field = _field.join(',') + + form = form + ` + declare @dc table (${_col}) + + insert into @dc (${_field}) + + @tableid ='${menu.MenuID}' + ` + } + + // 鎵撳嵃鑷畾涔夋ā鏉垮瓧娈垫彁绀� + let _printRemark = '' + if (btn.funcType === 'print') { + _printRemark = '/* 鑷畾涔夋暟鎹墦鍗版ā鏉挎椂锛岃浣跨敤TemplateID瀛楁 */' + } + + let Ltext = `create proc ${param.funcName} + ( /*${menu.MenuName} ${btn.label}*/ + @appkey nvarchar(50)='', + @BID nvarchar(50)='',${formParam} + @sEPTMenuNo nvarchar(50)='${param.menuNo}', + @lang nvarchar(50)='', + @debug nvarchar(50)='', + @LoginUID nvarchar(50)='', + @SessionUid nvarchar(50)='', + @UserID nvarchar(50), + @ErrorCode nvarchar(50) out, + @retmsg nvarchar(4000) out + ) + as + begin + declare @BegindateTest datetime,@EnddateTest datetime + select @BegindateTest=getdate() + set @ErrorCode='' + set @retmsg='' + BEGIN TRY + /*浜嬪姟鎿嶄綔*/ + BEGIN TRAN + /*鍏蜂綋涓氬姟鎿嶄綔*/ + ${_printRemark} + /* + select top 10 * from sProcExcep order by id desc + + declare @UserName nvarchar(50),@FullName nvarchar(50) + + select @UserName=UserName,@FullName=FullName from SUsers where UID=@UserID + ${form} + if 1=2 + begin + set @ErrorCode='E' + set @retmsg='鍦ㄦ鍐欐姤閿�' + goto GOTO_RETURN + end + + insert into sNote (remark,createuserid,CreateUser,CreateStaff) + select '鍦ㄦ鍐欐棩蹇�',@UserID,@UserName,@FullName + */ + + COMMIT TRAN + SET NOCOUNT ON + RETURN + END TRY + BEGIN CATCH + /*閿欒澶勭悊*/ + ROLLBACK TRAN + DECLARE @ErrorMessage NVARCHAR(4000); + DECLARE @ErrorSeverity INT; + DECLARE @ErrorState INT; + + /*鎶婅嚜瀹氫箟鐨勫弸濂界殑閿欒淇℃伅鎻愮ず鍔犱笂*/ + set @ErrorCode=cast(ERROR_NUMBER() as nvarchar(50)) + SET @retmsg=ERROR_MESSAGE(); + SELECT @ErrorMessage=ERROR_MESSAGE(), + @ErrorSeverity=ERROR_SEVERITY(), + @ErrorState=ERROR_STATE(); + + RAISERROR(@ErrorMessage, /*-- Message text.*/ + @ErrorSeverity, /*-- Severity.*/ + @ErrorState /*-- State.*/ + ); + END CATCH + + GOTO_RETURN: + ROLLBACK TRAN + + END` + + Ltext = Ltext.replace(/\n\s{4}/ig, 'mchr13k') + + return Ltext + } + + /** + * @description 鍒涘缓瀵煎叆瀛樺偍杩囩▼ + * @return {String} + */ + static getexcelInfunc (param, btn, menu) { + let _verify = btn.verify + + let _uniquesql = '' + if (_verify.uniques && _verify.uniques.length > 0) { + _verify.uniques.forEach(unique => { + if (unique.status === 'false') return + + let _fields = unique.field.split(',') + let _fields_ = _fields.map(_field => { + return `a.${_field}=b.${_field}` + }) + _fields_ = _fields_.join(' and ') + + if (unique.verifyType !== 'physical') { + _fields_ += ' and b.deleted=0' + } + + _uniquesql += ` + Set @tbid='' + Select top 1 @tbid=${_fields.join('+\' \'+')} from (select 1 as n,${unique.field} from @${btn.sheet} ) a group by ${unique.field} having sum(n)>1 + + If @tbid!='' + Begin + select @ErrorCode='${unique.errorCode}',@retmsg=@tbid+' 閲嶅' + goto aaa + end + + Set @tbid='' + Select top 1 @tbid=${_fields.join('+\' \'+')} from @${btn.sheet} a + Inner join ${btn.sheet} b on ${_fields_} + + If @tbid!='' + Begin + select @ErrorCode='${unique.errorCode}',@retmsg=@tbid+' 涓庡凡鏈夋暟鎹噸澶�' + goto aaa + end + ` + }) + + if (_uniquesql) { + _uniquesql = ` + Declare @tbid Nvarchar(512) + ${_uniquesql}` + } + } + + let declarefields = [] + let fields = [] + + _verify.columns.forEach(col => { + declarefields.push(`${col.Column} ${col.type}`) + fields.push(col.Column) + }) + + fields = fields.join(',') + + let _sql = `declare @${btn.sheet} table (${declarefields.join(',')},jskey nvarchar(50)) + Declare @UserName nvarchar(50),@FullName nvarchar(50) + + select @UserName=UserName,@FullName=FullName from SUsers where UID=@UserID + + Insert into @${btn.sheet} (${fields},jskey) + + exec s_KeyWords_Replace + @LText=@LText, @BID=@BID,@LoginUID=@LoginUID,@SessionUid=@SessionUid,@UserID=@UserID,@ID=@ID + ${_uniquesql} + Insert into ${btn.sheet} (${fields},createuserid,createuser,createstaff,bid) + Select ${fields},@userid,@username,@fullname,@BID From @${btn.sheet} + + Delete @${btn.sheet}` + + let Ltext = `create proc ${param.funcName} + ( /*${menu.MenuName} ${btn.label}*/ + @appkey nvarchar(50)='', + @ID nvarchar(50)='', + @BID nvarchar(50)='', + @Ltext nvarchar(max)='', + @sEPTMenuNo nvarchar(50)='${param.menuNo}', + @secretkey nvarchar(50)='', + @timestamp nvarchar(50)='', + @lang nvarchar(50)='', + @LoginUID nvarchar(50)='', + @SessionUid nvarchar(50)='', + @UserID nvarchar(50), + @ErrorCode nvarchar(50) out, + @retmsg nvarchar(4000) out + ) + as + begin + declare @BegindateTest datetime,@EnddateTest datetime + select @BegindateTest=getdate() + set @ErrorCode='' + set @retmsg='' + BEGIN TRY + /*浜嬪姟鎿嶄綔*/ + BEGIN TRAN + /*鍏蜂綋涓氬姟鎿嶄綔*/ + + /* + ${_sql} + */ + + COMMIT TRAN + SET NOCOUNT ON + RETURN + END TRY + BEGIN CATCH + /*閿欒澶勭悊*/ + ROLLBACK TRAN + DECLARE @ErrorMessage NVARCHAR(4000); + DECLARE @ErrorSeverity INT; + DECLARE @ErrorState INT; + + /*鎶婅嚜瀹氫箟鐨勫弸濂界殑閿欒淇℃伅鎻愮ず鍔犱笂*/ + set @ErrorCode=cast(ERROR_NUMBER() as nvarchar(50)) + SET @retmsg=ERROR_MESSAGE(); + SELECT @ErrorMessage=ERROR_MESSAGE(), + @ErrorSeverity=ERROR_SEVERITY(), + @ErrorState=ERROR_STATE(); + + RAISERROR(@ErrorMessage, /*-- Message text.*/ + @ErrorSeverity, /*-- Severity.*/ + @ErrorState /*-- State.*/ + ); + END CATCH + + GOTO_RETURN: + ROLLBACK TRAN + + END` + + Ltext = Ltext.replace(/\n\s{4}/ig, 'mchr13k') + + return Ltext + } +} \ No newline at end of file diff --git a/src/utils/utils.js b/src/utils/utils.js index 10f3a4a..771b170 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -1424,462 +1424,4 @@ console.log(_sql) return _sql } - - /** - * @description 鍒犻櫎瀛樺偍杩囩▼sql - * @return {String} name 瀛樺偍杩囩▼鍚嶇О - */ - static dropfunc (name) { - return `IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID('${name}') AND type in (N'P', N'PC')) mdrpk PROCEDURE ${name}` - } - - /** - * @description 鍒涘缓椤甸潰瀛樺偍杩囩▼ - * @return {String} - */ - static getTableFunc (param, menu, config) { - let form = '' - let formParam = '' - let _vars = ['bid', 'pageindex', 'pagesize', 'ordercol', 'ordertype', 'exceltype', 'septmenuno', 'lang', 'debug', 'loginuid', 'sessionuid', 'userid', 'errorcode', 'retmsg'] - let _columns = [] - let primaryKey = config.setting.primaryKey || 'ID' - - if (!_vars.includes(primaryKey.toLowerCase())) { - _vars.push(primaryKey.toLowerCase()) - formParam = `mchr13k@${primaryKey} nvarchar(50)='',` - } - - if (config.search && config.search.length > 0) { - let _fields = new Map() - config.search.forEach(item => { - if (item.field) { - let type = '' - - if (item.type.match(/date/ig)) { - type = 'datetime=null' - } else { - type = 'nvarchar(50)=\'\'' - } - - item.field.split(',').forEach(cell => { - let _f = cell - if (_fields.has(cell)) { - _f = _f + '1' - } - - _fields.set(cell, true) - - if (!_vars.includes(_f.toLowerCase())) { - _vars.push(_f.toLowerCase()) - formParam = formParam + `mchr13k@${_f} ${type},` - } - }) - } - }) - } - - if (config.columns && config.columns.length > 0) { - config.columns.forEach(item => { - if (item.field) { - _columns.push(`${item.field} as ${item.label}`) - } - }) - - form = ` - declare @dc table (${_columns.join(',')}) - - @tableid ='${menu.MenuID}' - ` - } - - let Ltext = `create proc ${param.innerFunc} - ( /*${menu.MenuName}*/ - @appkey nvarchar(50)='', - @BID nvarchar(50)='',${formParam} - @PageIndex nvarchar(50)='', - @PageSize nvarchar(50)='', - @OrderCol nvarchar(50)='', - @OrderType nvarchar(50)='', - @exceltype nvarchar(50)='', - @sEPTMenuNo nvarchar(50)='${menu.MenuNo}', - @lang nvarchar(50)='', - @debug nvarchar(50)='', - @LoginUID nvarchar(50)='', - @SessionUid nvarchar(50)='', - @UserID nvarchar(50), - @ErrorCode nvarchar(50) out, - @retmsg nvarchar(4000) out - ) - as - begin - declare @BegindateTest datetime,@EnddateTest datetime - select @BegindateTest=getdate() - set @ErrorCode='' - set @retmsg='' - BEGIN TRY - /*浜嬪姟鎿嶄綔*/ - BEGIN TRAN - /*鍏蜂綋涓氬姟鎿嶄綔*/ - - /* - select top 10 * from sProcExcep order by id desc - - declare @UserName nvarchar(50),@FullName nvarchar(50) - - select @UserName=UserName,@FullName=FullName from SUsers where UID=@UserID - ${form} - if 1=2 - begin - set @ErrorCode='E' - set @retmsg='鍦ㄦ鍐欐姤閿�' - goto GOTO_RETURN - end - - insert into sNote (remark,createuserid,CreateUser,CreateStaff) - select '鍦ㄦ鍐欐棩蹇�',@UserID,@UserName,@FullName - */ - - COMMIT TRAN - SET NOCOUNT ON - RETURN - END TRY - BEGIN CATCH - /*閿欒澶勭悊*/ - ROLLBACK TRAN - DECLARE @ErrorMessage NVARCHAR(4000); - DECLARE @ErrorSeverity INT; - DECLARE @ErrorState INT; - - /*鎶婅嚜瀹氫箟鐨勫弸濂界殑閿欒淇℃伅鎻愮ず鍔犱笂*/ - set @ErrorCode=cast(ERROR_NUMBER() as nvarchar(50)) - SET @retmsg=ERROR_MESSAGE(); - SELECT @ErrorMessage=ERROR_MESSAGE(), - @ErrorSeverity=ERROR_SEVERITY(), - @ErrorState=ERROR_STATE(); - - RAISERROR(@ErrorMessage, /*-- Message text.*/ - @ErrorSeverity, /*-- Severity.*/ - @ErrorState /*-- State.*/ - ); - END CATCH - - GOTO_RETURN: - ROLLBACK TRAN - - END` - - Ltext = Ltext.replace(/\n\s{4}/ig, 'mchr13k') - - return Ltext - } - - /** - * @description 鍒涘缓瀛樺偍杩囩▼ - * @return {String} - */ - static getfunc (param, btn, menu, config) { - let form = '' - let formParam = '' - let _vars = ['bid', 'septmenuno', 'lang', 'debug', 'loginuid', 'sessionuid', 'userid', 'errorcode', 'retmsg'] - let columns = config.columns - let primaryKey = config.setting.primaryKey || 'ID' - - if (!_vars.includes(primaryKey.toLowerCase())) { - _vars.push(primaryKey.toLowerCase()) - let _type = '50' - if (btn.Ot === 'requiredOnce') { // 澶氳鎷兼帴鏃讹紝涓婚敭璁句负max - _type = 'max' - } - formParam = `mchr13k@${primaryKey} nvarchar(${_type})='',` - } - - if (param.fields && param.fields.length > 0) { - let _fields = [] - param.fields.forEach(item => { - if (item.field) { - let type = '' - if (item.type.match(/date/ig)) { - type = 'datetime=null' - } else if (item.type === 'number') { - type = `decimal(18,${item.decimal})=0` - } else { - type = 'nvarchar(50)=\'\'' - } - - if (!_vars.includes(item.field.toLowerCase())) { - _vars.push(item.field.toLowerCase()) - formParam = formParam + `mchr13k@${item.field} ${type},` - } - - _fields.push(item.field) - } - }) - - let field1 = _fields.join(',') - let field2 = _fields.join(',@') - let field3 = _fields.map(cell => { - return cell + '=@' + cell - }) - - field2 = field2 ? '@' + field2 : '' - field3 = field3.join(',') - - form = ` - insert into ${param.name} (${field1},createuserid) select ${field2},@UserID - - update ${param.name} set ${field3},modifydate=getdate(),modifyuserid=@UserID - ` - } else if (btn.OpenType === 'prompt' || btn.OpenType === 'exec') { - form = ` - update ${param.name} set ModifyDate=getdate(),ModifyUserID=@UserID where ${primaryKey}=@${primaryKey} - ` - } - - if (columns) { - let _col = [] - let _field = [] - columns.forEach(col => { - if (col.field) { - if (col.type === 'number') { - _col.push(col.field + ' decimal(18,2)') - } else { - _col.push(col.field + ' nvarchar(50)') - } - _field.push(col.field) - } - }) - _col = _col.join(',') - _field = _field.join(',') - - form = form + ` - declare @dc table (${_col}) - - insert into @dc (${_field}) - - @tableid ='${menu.MenuID}' - ` - } - - // 鎵撳嵃鑷畾涔夋ā鏉垮瓧娈垫彁绀� - let _printRemark = '' - if (btn.funcType === 'print') { - _printRemark = '/* 鑷畾涔夋暟鎹墦鍗版ā鏉挎椂锛岃浣跨敤TemplateID瀛楁 */' - } - - let Ltext = `create proc ${param.funcName} - ( /*${menu.MenuName} ${btn.label}*/ - @appkey nvarchar(50)='', - @BID nvarchar(50)='',${formParam} - @sEPTMenuNo nvarchar(50)='${param.menuNo}', - @lang nvarchar(50)='', - @debug nvarchar(50)='', - @LoginUID nvarchar(50)='', - @SessionUid nvarchar(50)='', - @UserID nvarchar(50), - @ErrorCode nvarchar(50) out, - @retmsg nvarchar(4000) out - ) - as - begin - declare @BegindateTest datetime,@EnddateTest datetime - select @BegindateTest=getdate() - set @ErrorCode='' - set @retmsg='' - BEGIN TRY - /*浜嬪姟鎿嶄綔*/ - BEGIN TRAN - /*鍏蜂綋涓氬姟鎿嶄綔*/ - ${_printRemark} - /* - select top 10 * from sProcExcep order by id desc - - declare @UserName nvarchar(50),@FullName nvarchar(50) - - select @UserName=UserName,@FullName=FullName from SUsers where UID=@UserID - ${form} - if 1=2 - begin - set @ErrorCode='E' - set @retmsg='鍦ㄦ鍐欐姤閿�' - goto GOTO_RETURN - end - - insert into sNote (remark,createuserid,CreateUser,CreateStaff) - select '鍦ㄦ鍐欐棩蹇�',@UserID,@UserName,@FullName - */ - - COMMIT TRAN - SET NOCOUNT ON - RETURN - END TRY - BEGIN CATCH - /*閿欒澶勭悊*/ - ROLLBACK TRAN - DECLARE @ErrorMessage NVARCHAR(4000); - DECLARE @ErrorSeverity INT; - DECLARE @ErrorState INT; - - /*鎶婅嚜瀹氫箟鐨勫弸濂界殑閿欒淇℃伅鎻愮ず鍔犱笂*/ - set @ErrorCode=cast(ERROR_NUMBER() as nvarchar(50)) - SET @retmsg=ERROR_MESSAGE(); - SELECT @ErrorMessage=ERROR_MESSAGE(), - @ErrorSeverity=ERROR_SEVERITY(), - @ErrorState=ERROR_STATE(); - - RAISERROR(@ErrorMessage, /*-- Message text.*/ - @ErrorSeverity, /*-- Severity.*/ - @ErrorState /*-- State.*/ - ); - END CATCH - - GOTO_RETURN: - ROLLBACK TRAN - - END` - - Ltext = Ltext.replace(/\n\s{4}/ig, 'mchr13k') - - return Ltext - } - - /** - * @description 鍒涘缓瀵煎叆瀛樺偍杩囩▼ - * @return {String} - */ - static getexcelInfunc (param, btn, menu) { - let _verify = btn.verify - - let _uniquesql = '' - if (_verify.uniques && _verify.uniques.length > 0) { - _verify.uniques.forEach(unique => { - if (unique.status === 'false') return - - let _fields = unique.field.split(',') - let _fields_ = _fields.map(_field => { - return `a.${_field}=b.${_field}` - }) - _fields_ = _fields_.join(' and ') - - if (unique.verifyType !== 'physical') { - _fields_ += ' and b.deleted=0' - } - - _uniquesql += ` - Set @tbid='' - Select top 1 @tbid=${_fields.join('+\' \'+')} from (select 1 as n,${unique.field} from @${btn.sheet} ) a group by ${unique.field} having sum(n)>1 - - If @tbid!='' - Begin - select @ErrorCode='${unique.errorCode}',@retmsg=@tbid+' 閲嶅' - goto aaa - end - - Set @tbid='' - Select top 1 @tbid=${_fields.join('+\' \'+')} from @${btn.sheet} a - Inner join ${btn.sheet} b on ${_fields_} - - If @tbid!='' - Begin - select @ErrorCode='${unique.errorCode}',@retmsg=@tbid+' 涓庡凡鏈夋暟鎹噸澶�' - goto aaa - end - ` - }) - - if (_uniquesql) { - _uniquesql = ` - Declare @tbid Nvarchar(512) - ${_uniquesql}` - } - } - - let declarefields = [] - let fields = [] - - _verify.columns.forEach(col => { - declarefields.push(`${col.Column} ${col.type}`) - fields.push(col.Column) - }) - - fields = fields.join(',') - - let _sql = `declare @${btn.sheet} table (${declarefields.join(',')},jskey nvarchar(50)) - Declare @UserName nvarchar(50),@FullName nvarchar(50) - - select @UserName=UserName,@FullName=FullName from SUsers where UID=@UserID - - Insert into @${btn.sheet} (${fields},jskey) - - exec s_KeyWords_Replace - @LText=@LText, @BID=@BID,@LoginUID=@LoginUID,@SessionUid=@SessionUid,@UserID=@UserID,@ID=@ID - ${_uniquesql} - Insert into ${btn.sheet} (${fields},createuserid,createuser,createstaff,bid) - Select ${fields},@userid,@username,@fullname,@BID From @${btn.sheet} - - Delete @${btn.sheet}` - - let Ltext = `create proc ${param.funcName} - ( /*${menu.MenuName} ${btn.label}*/ - @appkey nvarchar(50)='', - @ID nvarchar(50)='', - @BID nvarchar(50)='', - @Ltext nvarchar(max)='', - @sEPTMenuNo nvarchar(50)='${param.menuNo}', - @secretkey nvarchar(50)='', - @timestamp nvarchar(50)='', - @lang nvarchar(50)='', - @LoginUID nvarchar(50)='', - @SessionUid nvarchar(50)='', - @UserID nvarchar(50), - @ErrorCode nvarchar(50) out, - @retmsg nvarchar(4000) out - ) - as - begin - declare @BegindateTest datetime,@EnddateTest datetime - select @BegindateTest=getdate() - set @ErrorCode='' - set @retmsg='' - BEGIN TRY - /*浜嬪姟鎿嶄綔*/ - BEGIN TRAN - /*鍏蜂綋涓氬姟鎿嶄綔*/ - - /* - ${_sql} - */ - - COMMIT TRAN - SET NOCOUNT ON - RETURN - END TRY - BEGIN CATCH - /*閿欒澶勭悊*/ - ROLLBACK TRAN - DECLARE @ErrorMessage NVARCHAR(4000); - DECLARE @ErrorSeverity INT; - DECLARE @ErrorState INT; - - /*鎶婅嚜瀹氫箟鐨勫弸濂界殑閿欒淇℃伅鎻愮ず鍔犱笂*/ - set @ErrorCode=cast(ERROR_NUMBER() as nvarchar(50)) - SET @retmsg=ERROR_MESSAGE(); - SELECT @ErrorMessage=ERROR_MESSAGE(), - @ErrorSeverity=ERROR_SEVERITY(), - @ErrorState=ERROR_STATE(); - - RAISERROR(@ErrorMessage, /*-- Message text.*/ - @ErrorSeverity, /*-- Severity.*/ - @ErrorState /*-- State.*/ - ); - END CATCH - - GOTO_RETURN: - ROLLBACK TRAN - - END` - - Ltext = Ltext.replace(/\n\s{4}/ig, 'mchr13k') - - return Ltext - } } \ No newline at end of file diff --git a/src/views/login/index.jsx b/src/views/login/index.jsx index 5b0d9b9..add45cc 100644 --- a/src/views/login/index.jsx +++ b/src/views/login/index.jsx @@ -353,7 +353,6 @@ triggerBtn={{}} dict={{}} MenuID="" - permRoles={{}} logcolumns={[]} ContainerId="" refreshdata={() => {}} -- Gitblit v1.8.0