From fec6c24bc3fd902f8ced64bc2600c0b0836f7e52 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期五, 10 一月 2025 11:34:58 +0800 Subject: [PATCH] 2025-01-10 --- src/views/billprint/index.jsx | 881 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 674 insertions(+), 207 deletions(-) diff --git a/src/views/billprint/index.jsx b/src/views/billprint/index.jsx index a7be0ab..bb22cfb 100644 --- a/src/views/billprint/index.jsx +++ b/src/views/billprint/index.jsx @@ -1,13 +1,12 @@ import React, { Component } from 'react' import { is, fromJS } from 'immutable' -import { Col, Row, Spin, notification, Button } from 'antd' +import { Col, Row, Spin, notification, Button, Modal } from 'antd' import moment from 'moment' +import md5 from 'md5' import Api from '@/api' import Utils from '@/utils/utils.js' -import options, { styles } from '@/store/options.js' -import zhCN from '@/locales/zh-CN/main.js' -import enUS from '@/locales/en-US/main.js' +import { styles } from '@/store/options.js' import UtilsDM from '@/utils/utils-datamanage.js' import NotFount from '@/components/404' import asyncComponent from '@/utils/asyncComponent' @@ -34,18 +33,23 @@ class BillPrint extends Component { state = { - dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, loadingview: true, printing: false, pages: null, BID: '', data: '', tempId: '', + pageId: '', config: null, urlParam: null, visible: false, - auto: true + rePos: false, + loading: false, + auto: true, + ismob: /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i.test(navigator.userAgent) } + + reloading = false UNSAFE_componentWillMount() { const { params } = this.props.match @@ -62,10 +66,12 @@ let param = JSON.parse(window.decodeURIComponent(window.atob(params.param))) sessionStorage.setItem('dataM', param.dataM || '') + this.setState({ BID: param.id || '', tempId: param.tempId, - urlParam: param + urlParam: param, + pageId: param.pageId || '' }, () => { setTimeout(() => { this.getMenuParam() @@ -86,24 +92,50 @@ } componentDidMount() { - const _this = this + const that = this - Object.defineProperty(window, 'debug', { - configurable: true, - enumerable: true, - set(value) { - if (value + '' === 'false') { - window.debugger = false - window.GLOB.breakpoint = false - sessionStorage.removeItem('breakpoint') - } else { - window.debugger = true - window.GLOB.breakpoint = value + '' - sessionStorage.setItem('breakpoint', value) + if (window.GLOB.sysType !== 'cloud') { + Object.defineProperty(window, 'debugger', { + configurable: true, + enumerable: true, + set(value) { + if (value === true) { + window.GLOB.debugger = true + } else if (value === 0) { + if (window.backend) { + sessionStorage.setItem('systemRun', 'front') + window.location.reload() + } else { + window.mkInfo('绯荤粺褰撳墠鏈娇鐢ㄥ悗绔剼鏈紒') + } + } else if (value === false) { + if (sessionStorage.getItem('systemRun') === 'front') { + sessionStorage.removeItem('systemRun') + window.location.reload() + } else { + window.GLOB.debugger = false + } + } } - _this.debugChange() - } - }) + }) + + Object.defineProperty(window, 'debug', { + configurable: true, + enumerable: true, + set(value) { + if (value + '' === 'false') { + window.GLOB.debugger = false + window.GLOB.breakpoint = false + sessionStorage.removeItem('breakpoint') + } else { + window.GLOB.debugger = true + window.GLOB.breakpoint = value + '' + sessionStorage.setItem('breakpoint', value) + } + that.debugChange() + } + }) + } document.onkeydown = (event) => { let e = event || window.event @@ -123,11 +155,10 @@ let _shortcut = `${preKey}+${keyCode}` if (window.GLOB.breakpoint && _shortcut === 'ctrl+67') { - window.debugger = false window.GLOB.breakpoint = false sessionStorage.removeItem('breakpoint') - _this.debugChange() + that.debugChange() } } } @@ -152,13 +183,15 @@ sessionStorage.setItem('LoginUID', result.LoginUID || '') sessionStorage.setItem('dataM', 'false') - this.getMenuParam() - // 鑾峰彇绯荤粺淇℃伅 let _param = { func: 's_Get_style', TypeCharOne: 'PC', LText: `select '${window.GLOB.appkey}'`, + } + + if (window.GLOB.style_appkey) { + _param.style_appkey = window.GLOB.style_appkey } _param.userid = result.UserID @@ -170,6 +203,7 @@ if (res.status) { window.GLOB.style = res.CSS document.title = res.titleName + sessionStorage.setItem('appname', res.appname || '') if (window.GLOB.style && styles[window.GLOB.style]) { document.body.className = styles[window.GLOB.style] + ' ' + (res.split_line_show === 'false' ? 'hidden-split-line' : '') @@ -183,6 +217,8 @@ document.getElementsByTagName('head')[0].appendChild(link) } } + + this.getMenuParam() }) } else { notification.warning({ @@ -231,9 +267,13 @@ this.setState({ viewlost: true, loadingview: false, - lostmsg: this.state.dict['main.view.unenabled'] + lostmsg: '鎶辨瓑锛屾偍璁块棶鐨勯〉闈㈡湭鍚敤锛岃鑱旂郴绠$悊鍛樸��' }) return + } + + if (config.webTitle) { + document.title = config.webTitle } config.style = config.style || {} @@ -281,13 +321,24 @@ config.components = config.components.filter(item => !['tabs', 'search'].includes(item.type)) + if (window.backend && config.allSqls) { + let urlparam = urlParam || {} + let keys = Object.keys(urlparam) + config.allSqls.forEach(item => { + item.id = md5(window.GLOB.appkey + item.v_id) + if (item.type === 'datasource' || item.type === 'excelOut') { + item.urlkeys = keys + item.urlparam = urlparam + if (config.flow_code) { + item.works_flow_code = config.flow_code + } + } + window.GLOB.CacheData.set('sql_' + item.uuid, item) + }) + } + let userName = sessionStorage.getItem('User_Name') || '' let fullName = sessionStorage.getItem('Full_Name') || '' - - if (sessionStorage.getItem('isEditState') === 'true') { - userName = sessionStorage.getItem('CloudUserName') || '' - fullName = sessionStorage.getItem('CloudFullName') || '' - } let regs = [ { reg: /@userName@/ig, value: `'${userName}'` }, @@ -313,10 +364,26 @@ window.GLOB.CacheData.set(tempId, {$BID: BID}) + let initInters = [] + + this.formatInterSetting(config.interfaces, regs, initInters, params, BID, config.MenuName) + config.components = config.components.map(component => { - if (component.action) component.action = [] - if (component.search) component.search = [] + if (component.action) { + component.action = component.action.filter(cell => { + cell = this.resetButton(component, cell) + cell.$toolbtn = true + + return !cell.hidden + }) + } + if (component.search) { + component.search = [] + component.$searches = [] + } component.data = [] // 鍒濆鍖栨暟鎹负绌� + + component.$menuname = (config.MenuName || '') + '-' + (component.name || '') if (component.subtype === 'tablecard') { // 鍏煎 component.type = 'card' @@ -335,23 +402,47 @@ if (component.type === 'table') { let getColumns = (cols) => { return cols.filter(item => { - if (item.type === 'colspan') { + if (item.Hide === 'true') return false + + item.IsSort = 'false' + + if (item.type === 'number') { + if (typeof(item.decimal) === 'number') { + item.round = Math.pow(10, item.decimal) + if (item.format === 'percent') { + item.decimal = item.decimal > 2 ? item.decimal - 2 : 0 + } + } + } else if (item.type === 'formula') { + if (typeof(item.decimal) === 'number') { + item.round = Math.pow(10, item.decimal) + } + } else if (item.type === 'colspan') { item.subcols = getColumns(item.subcols) if (item.subcols.length === 0) { return false } } else if (item.type === 'custom') { item.elements = item.elements.filter(cell => { - if (cell.eleType === 'button') return false + if (cell.eleType === 'button') { + cell = this.resetButton(component, cell) + + return !cell.hidden + } cell = this.resetElement(cell) - return cell + + return true }) if (item.elements.length === 0) { return false } } else { item.IsSort = 'false' + } + + if (item.marks && item.marks.length === 0) { + item.marks = null } return true @@ -369,18 +460,26 @@ } card.elements = card.elements.filter(cell => { - if (cell.eleType === 'button') return false - + if (cell.eleType === 'button') { + cell = this.resetButton(component, cell) + + return !cell.hidden + } + cell = this.resetElement(cell) - + return true }) if (!card.backElements || card.backElements.length === 0) return card.backElements = card.backElements.filter(cell => { - if (cell.eleType === 'button') return false - + if (cell.eleType === 'button') { + cell = this.resetButton(component, cell) + + return !cell.hidden + } + cell = this.resetElement(cell) return true @@ -388,8 +487,12 @@ }) } else if (component.type === 'balcony') { component.elements = component.elements.filter(cell => { - if (cell.eleType === 'button') return false - + if (cell.eleType === 'button') { + cell = this.resetButton(component, cell) + + return !cell.hidden + } + cell = this.resetElement(cell) return true @@ -398,19 +501,39 @@ if (component.wrap && component.wrap.datatype === 'static') { component.format = '' + } else if (component.wrap && component.wrap.datatype === 'public') { + component.componentId = component.wrap.publicId + component.format = '' } if (!component.setting) return component // 涓嶄娇鐢ㄧ郴缁熷嚱鏁版椂 if (!component.format) return component // 娌℃湁鍔ㄦ�佹暟鎹� 鏁版嵁鏍煎紡 array 鎴� object + + component.setting.arr_field = component.columns ? component.columns.map(col => col.field).join(',') : '' + component.setting.laypage = false // 鏄惁鍒嗛〉锛岃浆涓篵oolean 缁熶竴鏍煎紡 + component.setting.$name = component.$menuname + + if (component.format === 'object') { + component.setting.$top = true + } + if (component.setting.interType !== 'system') { // 涓嶄娇鐢ㄧ郴缁熷嚱鏁版椂 component.setting.sync = 'false' return component } + + component.setting.uuid = component.uuid let _customScript = '' + let _tailScript = '' component.scripts && component.scripts.forEach(script => { - if (script.status !== 'false') { + if (script.status === 'false') return + if (script.position !== 'back') { _customScript += ` + ${script.sql} + ` + } else { + _tailScript += ` ${script.sql} ` } @@ -418,7 +541,6 @@ delete component.scripts component.setting.execute = component.setting.execute !== 'false' // 榛樿sql鏄惁鎵ц锛岃浆涓篵oolean 缁熶竴鏍煎紡 - component.setting.laypage = false // 鏄惁鍒嗛〉锛岃浆涓篵oolean 缁熶竴鏍煎紡 component.setting.onload = 'true' // 榛樿鍔犺浇 if (!component.setting.execute) { @@ -429,31 +551,38 @@ } if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺 - component.setting.dataresource = component.setting.dataresource.replace(/\$@/ig, '/*') - component.setting.dataresource = component.setting.dataresource.replace(/@\$/ig, '*/') - _customScript = _customScript.replace(/\$@/ig, '/*') - _customScript = _customScript.replace(/@\$/ig, '*/') + component.setting.dataresource = component.setting.dataresource.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'') + _customScript = _customScript.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'') + _tailScript = _tailScript.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'') } else { - component.setting.dataresource = component.setting.dataresource.replace(/@\$|\$@/ig, '') - _customScript = _customScript.replace(/@\$|\$@/ig, '') + component.setting.dataresource = component.setting.dataresource.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'') + _customScript = _customScript.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'') + _tailScript = _tailScript.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'') } regs.forEach(cell => { component.setting.dataresource = component.setting.dataresource.replace(cell.reg, cell.value) _customScript = _customScript.replace(cell.reg, cell.value) + _tailScript = _tailScript.replace(cell.reg, cell.value) }) component.setting.customScript = _customScript // 鏁寸悊鍚庤嚜瀹氫箟鑴氭湰 + component.setting.tailScript = _tailScript // 鍚庣疆鑷畾涔夎剼鏈� + + if (window.backend && config.allSqls) { + component.setting.sync = 'false' + } else if (_tailScript) { + component.setting.sync = 'false' + } + component.dataName = 'mk' + component.uuid.slice(-18) // floor 缁勪欢鐨勫眰绾� // pageable 鏄惁鍒嗛〉锛岀粍浠跺睘鎬э紝涓嶅垎椤电殑缁勪欢鎵嶅彲浠ョ粺涓�鏌ヨ if (component.setting.sync === 'true') { - component.dataName = 'mk' + component.uuid.slice(-18) let param = this.getDefaultParam(component) _pars.push(param) - } else { - let arr_field = component.columns.map(col => col.field).join(',') - let param = UtilsDM.getQueryDataParams(component.setting, arr_field, [], component.setting.order || '', 1, 1000, BID) + } else if (component.subtype !== 'dualdatacard') { + let param = UtilsDM.getQueryDataParams(component.setting, [], component.setting.order || '', 1, 1000, BID) param.componentId = component.uuid @@ -464,11 +593,32 @@ return component }) - _pars = this.getFormatParam(_pars) + _pars = this.getFormatParam(_pars, config.MenuName) if (_pars) { - _pars.componentId = 'union' + _pars.componentId = '' params.unshift(_pars) + } else if (window.backend && config.allSqls && params.length > 0) { + let data = [] + params = params.filter(item => { + if (!item.$backend || item.public) return true + + item.data[0].exps.forEach(cell => { + if (cell.key === 'mk_obj_name') { + cell.value = 'mk' + item.componentId.slice(-18) + } + }) + data.push(item.data[0]) + return false + }) + if (data.length > 0) { + params.push({ + $backend: true, + $type: 's_Get_TableData', + componentId: '', + data + }) + } } if (config.everyPCount && !config.printPage) { // 鍏煎 @@ -487,8 +637,20 @@ auto: config.printPage === 'auto', config }, () => { - if (params.length === 0) { + if (config.normalcss) { + let node = document.getElementById(config.uuid) + node && node.remove() + + let ele = document.createElement('style') + ele.id = config.uuid + ele.innerHTML = config.normalcss + document.getElementsByTagName('head')[0].appendChild(ele) + } + + if (params.length === 0 && initInters.length === 0) { this.setState({loadingview: false, pages: [config.components]}) + } else if (initInters.length > 0) { + this.loadinit(initInters, params) } else { this.loadmaindata(params) } @@ -503,8 +665,42 @@ }) } + resetButton = (item, cell) => { + cell.logLabel = item.$menuname + '-' + cell.label + cell.Ot = cell.Ot || 'requiredSgl' + cell.syncComponentId = '' + cell.$menuId = item.uuid + + cell.hidden = cell.hidden === 'true' + if (!['pop', 'prompt', 'exec', 'innerpage', 'form'].includes(cell.OpenType)) { + cell.hidden = true + } + + if (cell.controlField) { + if (/,/ig.test(cell.controlVal)) { + cell.controlVals = cell.controlVal.split(',') + } else { + cell.controlVals = [(cell.controlVal || '')] + } + } + + return cell + } + resetElement = (cell) => { cell.style = cell.style || {} + + if (cell.style.display === 'inline-block') { + cell.style.verticalAlign = 'top' + } + + if (cell.marks && cell.marks.length === 0) { + cell.marks = null + } + if (cell.anchors && cell.anchors.length === 0) { + cell.anchors = null + } + if (['text', 'number', 'formula'].includes(cell.eleType)) { cell.innerHeight = cell.innerHeight || 'auto' cell.alignItems = cell.height > 1 ? cell.alignItems : '' @@ -514,10 +710,101 @@ if (cell.format === 'percent') { cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0 } + } else if (cell.eleType === 'formula' && typeof(cell.decimal) === 'number') { + cell.round = Math.pow(10, cell.decimal) } } return cell + } + + formatInterSetting = (inters, regs, initInters, params, BID, MenuName) => { + if (!inters) return [] + + let delay = 15 + inters.forEach(inter => { + if (inter.status !== 'true') return + + inter.setting.delay = delay + delay += 15 + + inter.setting.supModule = '' + inter.setting.arr_field = inter.columns.map(col => col.field).join(',') + inter.setting.$name = (MenuName || '') + '-鍏叡鏁版嵁婧�-' + inter.setting.name + + if (inter.setting.interType !== 'system') { + let param = UtilsDM.getQueryDataParams(inter.setting, [], inter.setting.order || '', 1, 1000, BID) + + param.componentId = inter.uuid + + if (inter.setting.loadlevel === 'init') { + initInters.push(param) + } else { + param.public = true + params.push(param) + } + return + } + + inter.setting.uuid = inter.uuid + + let _customScript = '' + let _tailScript = '' + inter.scripts.forEach(script => { + if (script.status === 'false') return + if (script.position !== 'back') { + _customScript += ` + ${script.sql} + ` + } else { + _tailScript += ` + ${script.sql} + ` + } + }) + delete inter.scripts + + inter.setting.execute = inter.setting.execute !== 'false' + inter.setting.laypage = false + inter.setting.$top = true + + if (!inter.setting.execute) { + inter.setting.dataresource = '' + } + if (/\s/.test(inter.setting.dataresource)) { + inter.setting.dataresource = '(' + inter.setting.dataresource + ') tb' + } + + if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺 + inter.setting.dataresource = inter.setting.dataresource.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'') + _customScript = _customScript.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'') + _tailScript = _tailScript.replace(/\$@/ig, '/*').replace(/@\$/ig, '*/').replace(/@datam@/ig, '\'Y\'') + } else { + inter.setting.dataresource = inter.setting.dataresource.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'') + _customScript = _customScript.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'') + _tailScript = _tailScript.replace(/@\$|\$@/ig, '').replace(/@datam@/ig, '\'\'') + } + + regs.forEach(cell => { + inter.setting.dataresource = inter.setting.dataresource.replace(cell.reg, cell.value) + _customScript = _customScript.replace(cell.reg, cell.value) + _tailScript = _tailScript.replace(cell.reg, cell.value) + }) + + inter.setting.customScript = _customScript // 鏁寸悊鍚庤嚜瀹氫箟鑴氭湰 + inter.setting.tailScript = _tailScript // 鍚庣疆鑷畾涔夎剼鏈� + + let param = UtilsDM.getQueryDataParams(inter.setting, [], inter.setting.order || '', 1, 1000, BID) + + param.componentId = inter.uuid + + if (inter.setting.loadlevel === 'init') { + initInters.push(param) + } else { + param.public = true + params.push(param) + } + }) } reload = () => { @@ -533,11 +820,6 @@ setTimeout(() => { this.getMenuParam() }, 50) - // Api.getAppVersion(tempId).then(() => { - // this.getMenuParam() - // }, () => { - // this.getMenuParam() - // }) }) } @@ -547,26 +829,20 @@ getDefaultParam = (component) => { const { columns, setting, dataName, format } = component - let arr_field = columns.map(col => col.field) let _dataresource = setting.dataresource let _customScript = setting.customScript if (setting.order && _dataresource) { - _dataresource = `select top 1000 ${arr_field.join(',')} from (select ${arr_field.join(',')} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource}) tmptable order by tmptable.rows ` + _dataresource = `select top 1000 ${setting.arr_field} from (select ${setting.arr_field} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource}) tmptable order by tmptable.rows ` } else if (_dataresource) { - _dataresource = `select top 1000 ${arr_field.join(',')} from ${_dataresource} ` - } - - // 娴嬭瘯绯荤粺鎵撳嵃鏌ヨ璇彞 - if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) { - _customScript && console.info(`${_dataresource ? '' : '/*涓嶆墽琛岄粯璁ql*/\n'}${_customScript}`) - _dataresource && console.info(_dataresource) + _dataresource = `select top 1000 ${setting.arr_field} from ${_dataresource} ` } return { name: dataName, columns: columns, par_tablename: '', + order: setting.order || '', type: format === 'array' ? format : '', primaryKey: setting.primaryKey || '', foreign_key: '', @@ -575,7 +851,7 @@ } } - getFormatParam = (params) => { + getFormatParam = (params, MenuName) => { const { BID } = this.state if (!params || params.length === 0) return '' @@ -592,11 +868,19 @@ let city = sessionStorage.getItem('city') || '' let district = sessionStorage.getItem('district') || '' let address = sessionStorage.getItem('address') || '' - - if (sessionStorage.getItem('isEditState') === 'true') { - userName = sessionStorage.getItem('CloudUserName') || '' - fullName = sessionStorage.getItem('CloudFullName') || '' - } + + let regoptions = [ + { reg: /@pageSize@/ig, value: 9999 }, + { reg: /@pageIndex@/ig, value: 1}, + { reg: /@ID@/ig, value: `''`}, + { reg: /@BID@/ig, value: `'${BID || ''}'`}, + { reg: /@LoginUID@/ig, value: `'${sessionStorage.getItem('LoginUID') || ''}'`}, + { reg: /@SessionUid@/ig, value: `'${localStorage.getItem('SessionUid') || ''}'`}, + { reg: /@UserID@/ig, value: `'${sessionStorage.getItem('UserID') || ''}'`}, + { reg: /@Appkey@/ig, value: `'${window.GLOB.appkey || ''}'`}, + { reg: /@lang@/ig, value: `'${sessionStorage.getItem('lang')}'`}, + { reg: /@typename@/ig, value: `'admin'`}, + ] let LText = params.map((item, index) => { let _sql = item.sql @@ -609,6 +893,20 @@ ` } + _sql = _sql.replace(/@orderBy@/ig, item.order) + _script = _script.replace(/@orderBy@/ig, item.order) + + regoptions.forEach(cell => { + _sql = _sql.replace(cell.reg, cell.value) + _script = _script.replace(cell.reg, cell.value) + }) + + // 娴嬭瘯绯荤粺鎵撳嵃鏌ヨ璇彞 + if (window.GLOB.debugger === true) { + _script && window.mkInfo(`${_sql ? '' : '/*涓嶆墽琛岄粯璁ql*/\n'}${_script}`) + _sql && window.mkInfo(_sql) + } + item.columns.forEach(cell => { LText_field.push(`Select '${item.name}' as tablename,'${cell.field}' as fieldname,'${cell.datatype}' as field_type`) }) @@ -617,17 +915,59 @@ let param = { func: 'sPC_Get_structured_data', - LText: LText.join(' union all '), - LText_field: LText_field.join(' union all '), - BID: BID || '' + BID: BID || '', + username: userName, + fullName: fullName } - param.LText = Utils.formatOptions(param.LText) - param.LText_field = Utils.formatOptions(param.LText_field) + if (MenuName) { + param.menuname = MenuName + } + + param.exec_type = window.GLOB.execType || 'y' + param.LText = Utils.formatOptions(LText.join(' union all '), param.exec_type) + param.custom_script = Utils.formatOptions(LText_field.join(' union all '), param.exec_type) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') - param.secretkey = Utils.encrypt(param.LText, param.timestamp) + param.secretkey = Utils.encrypt('', param.timestamp) return param + } + + loadinit = (initInters, params) => { + let deffers = initInters.map(item => { + let componentId = item.componentId + delete item.componentId + return new Promise(resolve => { + Api.genericInterface(item).then(res => { + if (!res.status) { + if (res.ErrCode !== '-2') { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + } + resolve() + } else { + let _data = { $$empty: true } + if (res.data && res.data[0]) { + _data = res.data[0] + } + window.GLOB.CacheData.set(componentId, _data) + } + resolve() + }) + }) + }) + + Promise.all(deffers).then(() => { + if (params.length === 0) { + this.setState({loadingview: false, pages: [this.state.config.components]}) + } else { + this.loadmaindata(params) + } + }) } /** @@ -639,17 +979,32 @@ let deffers = params.map(item => { let componentId = item.componentId delete item.componentId + delete item.public return new Promise(resolve => { Api.genericInterface(item).then(res => { if (!res.status) { - notification.warning({ - top: 92, - message: res.message, - duration: 5 - }) + if (item.func === 'sPC_Get_structured_data' && /灏嗘埅鏂瓧绗︿覆鎴栦簩杩涘埗鏁版嵁/ig.test(res.message)) { + res.message = res.message + '璇锋鏌ュ瓧娈甸泦' + } + if (res.ErrCode === 'version_up') { + this.reloadTabs() + } else if (res.ErrCode !== '-2') { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + } resolve(false) } else { res.componentId = componentId + + let _data = { $$empty: true } + if (res.data && res.data[0]) { + _data = res.data[0] + } + window.GLOB.CacheData.set(componentId, _data) + resolve(res) } }) @@ -660,17 +1015,30 @@ let _results = results.filter(Boolean) let comps = components.map(item => { + item.wrap = item.wrap || {} + item.data = null + if (!item.format) return item + if ((item.subtype === 'datacard' && item.wrap.layout !== 'flex') || item.type === 'table') { + item.$page = true + } + _results.forEach(res => { - if (res.componentId === item.uuid && res.data) { - item.data = res.data + if ((res.componentId === item.uuid || res.componentId === item.componentId) && res.data) { item.dataArray = fromJS(res.data).toJS() - } else if (res.componentId === 'union' && res[item.dataName]) { - item.data = res[item.dataName] - item.dataArray = fromJS(res[item.dataName]).toJS() + } else if (res[item.dataName]) { + let data = res[item.dataName] + if (!Array.isArray(data)) { + data = [data] + } + item.dataArray = fromJS(data).toJS() } }) + + if (item.$page && !item.dataArray) { + item.$page = false + } return item }) @@ -684,94 +1052,142 @@ this.setState({loadingview: false, pages}) } - while (!over) { - let page = [] - let count = 0 - let _pageover = false - let pagesover = false - - comps.forEach((_item, index) => { - let item = fromJS(_item).toJS() - - if (index + 1 >= length && !_pageover) { - pagesover = true - } - - if (item.wrap && item.wrap.printType === 'headerOrfooter') { // 椤电湁椤佃剼 - page.push(item) - } else if (_pageover) { - return - } else if (item.subtype === 'datacard' || item.type === 'table') { - if (_item.dataArray && _item.dataArray.length > 0) { - if (item.subtype === 'datacard' && item.wrap.layout === 'flex') { - if (!item.added && item.wrap.printHeight) { - count += item.wrap.printHeight - if (count >= limit) { - _pageover = true - } - if (count <= limit) { - _item.added = true - page.push(item) - } - } else if (!item.added) { - _item.added = true - page.push(item) - } - } else { - item.data = [] - - while (count + 1 <= limit && _item.dataArray.length > 0) { - item.data.push(_item.dataArray.shift()) - count++ - } - - if (count >= limit) { - _pageover = true - } else if (_item.dataArray.length > 0) { - _pageover = true - - } - - page.push(item) - } - _item.added = true - } else if (!item.added) { - _item.added = true - page.push(item) - } - } else if (!item.added && item.wrap && item.wrap.printHeight) { - if (item.wrap.empty === 'hidden' && (!item.data || item.data.length === 0)) { - _item.added = true - return - } - - count += item.wrap.printHeight - if (count >= limit) { - _pageover = true - } - if (count <= limit) { - _item.added = true - page.push(item) - } - } else if (!item.added) { - _item.added = true - page.push(item) - } - - if (index + 1 >= length && !_pageover) { - pagesover = true - } - }) - - pages.push(page) - pageIndex++ - - if (pageIndex >= 2000 || pagesover) { - over = true + let setData = (item) => { + if (item.setting && item.setting.sync === 'true' && item.data) { + item.dataName = Utils.getuuid() + window.GLOB.SyncData.set(item.dataName, item.data) } } - this.setState({loadingview: false, pages}) + if (this.state.config.printPage === 'custom' && this.state.config.printScripts) { + try { + // eslint-disable-next-line + let func = new Function('components', 'pages', 'notification', this.state.config.printScripts) + func(comps, pages, notification) + } catch (e) { + console.warn(e) + + notification.warning({ + top: 92, + message: '鑷畾涔夎剼鏈墽琛岄敊璇紒', + duration: 5 + }) + } + } else { + while (!over) { + let page = [] + let count = 0 + let _pageover = false + + comps.forEach(comp => { + let item = fromJS(comp).toJS() + + if (item.wrap.printType === 'headerOrfooter') { // 椤电湁椤佃剼 + item.data = item.dataArray || null + setData(item) + page.push(item) + comp.added = true + } + + if (_pageover) return + + if (item.$page && comp.dataArray.length > 0) { + item.data = [] + + while (count + 1 <= limit && comp.dataArray.length > 0) { + item.data.push(comp.dataArray.shift()) + count++ + } + + if (count >= limit || comp.dataArray.length > 0) { + _pageover = true + } + + if (comp.dataArray.length === 0) { + comp.added = true + } + + setData(item) + page.push(item) + } else if (!comp.added) { + if (item.wrap.printHeight) { + count += item.wrap.printHeight + if (count >= limit) { + _pageover = true + return + } + } + + item.data = item.dataArray || null + + setData(item) + page.push(item) + comp.added = true + } + }) + + pages.push(page) + pageIndex++ + + if (pageIndex >= 2000 || comps.findIndex(comp => !comp.added) === -1) { + over = true + } + } + } + + let total = pages.length + let date = moment().format('YYYY-MM-DD') + let datetime = moment().format('YYYY-MM-DD HH:mm:ss') + let rePos = false + + pages.forEach((page, index) => { + page.forEach(item => { + if (item.wrap.printType === 'headerOrfooter') { // 椤电湁椤佃剼 + if (item.type === 'balcony') { + if (item.style.position === 'absolute') { + rePos = true + } + item.elements.forEach(cell => { + if (cell.eleType === 'text' && cell.datatype === 'static') { + cell.value = cell.value.replace(/@total@/ig, total).replace(/@pageIndex@/ig, index + 1).replace(/@date@/ig, date).replace(/@datetime@/ig, datetime) + } + }) + } else if (item.subtype === 'propcard') { + item.subcards.forEach(card => { + card.elements.forEach(cell => { + if (cell.eleType === 'text' && cell.datatype === 'static') { + cell.value = cell.value.replace(/@total@/ig, total).replace(/@pageIndex@/ig, index + 1).replace(/@date@/ig, date).replace(/@datetime@/ig, datetime) + } + }) + }) + } + } + }) + }) + + this.setState({loadingview: false, pages, rePos}) + }) + } + + reloadTabs = () => { + if (this.reloading) return + + let time = new Date().getTime() + + let oldTime = sessionStorage.getItem('mk_reloadTabs') + + if (oldTime && time - oldTime < 180000) return + + sessionStorage.setItem('mk_reloadTabs', time) + + this.reloading = true + + Api.getAppVersion(true).then(() => { + window.location.reload() + }, (message) => { + Modal.error({ + title: message || '绯荤粺閰嶇疆鏇存柊澶辫触锛�', + }) }) } @@ -790,9 +1206,54 @@ } print = () => { - const { config, printing } = this.state + const { config, printing, BID, tempId, pageId } = this.state if (printing) return + + this.setState({printing: true}) + + if (config.callback === 'true') { + this.setState({loading: true}) + + Api.genericInterface({ + func: 's_print_proc', + username: sessionStorage.getItem('User_Name') || '', + fullname: sessionStorage.getItem('Full_Name') || '', + BID: BID || '', + print_type: config.callNo || '', + MenuNo: config.MenuNo || '', + Menuid: tempId || '' + }).then(res => { + if (!res.status) { + notification.warning({ + top: 92, + message: res.message || '鎵ц澶辫触锛�', + duration: 5 + }) + + this.setState({printing: false, loading: false}) + return + } + + let refresh = !/@no_target_menu@/i.test(res.message) + + this.setState({loading: false}) + + if (pageId && refresh) { + localStorage.setItem('menuUpdate', new Date().getTime() + ',' + pageId + ',menu') + } + + setTimeout(() => { + this.execPrint() + }, 300) + }) + } else { + this.execPrint() + } + } + + execPrint = () => { + const { config } = this.state let qrcodes = document.getElementsByClassName('qrcode-box') @@ -823,8 +1284,6 @@ } let jubuData = document.getElementById('bill-print').innerHTML - - this.setState({printing: true}) try { let iframe = document.createElement('IFRAME') @@ -876,90 +1335,98 @@ if (item.style && item.style.clear === 'left') { style = {clear: 'left'} + } else if (item.style && item.style.clear === 'right') { + style = {float: 'right'} } if (item.type === 'bar' || item.type === 'line') { return ( <Col span={item.width} style={style} key={item.uuid}> - <AntvBarAndLine config={item} initdata={item.data} mainSearch={[]} /> + <AntvBarAndLine config={item}/> </Col> ) } else if (item.type === 'pie') { return ( <Col span={item.width} style={style} key={item.uuid}> - <AntvPie config={item} initdata={item.data} mainSearch={[]} /> + <AntvPie config={item} /> </Col> ) } else if (item.type === 'scatter') { return ( <Col span={item.width} style={style} key={item.uuid}> - <AntvScatter config={item} initdata={item.data} mainSearch={[]}/> + <AntvScatter config={item}/> </Col> ) } else if (item.type === 'dashboard') { return ( <Col span={item.width} style={style} key={item.uuid}> - <AntvDashboard config={item} initdata={item.data} mainSearch={[]}/> + <AntvDashboard config={item}/> </Col> ) } else if (item.type === 'card' && item.subtype === 'datacard') { return ( <Col span={item.width} style={style} key={item.uuid}> - <DataCard config={item} initdata={item.data} mainSearch={[]} /> + <DataCard config={item} /> </Col> ) } else if (item.type === 'card' && item.subtype === 'propcard') { return ( <Col span={item.width} style={style} key={item.uuid}> - <PropCard config={item} initdata={item.data} mainSearch={[]} /> + <PropCard config={item} /> </Col> ) } else if (item.type === 'card' && item.subtype === 'dualdatacard') { return ( <Col span={item.width} style={style} key={item.uuid}> - <DoubleDataCard config={item} mainSearch={[]}/> + <DoubleDataCard config={item}/> </Col> ) } else if (item.type === 'card' && item.subtype === 'tablecard') { return ( <Col span={item.width} style={style} key={item.uuid}> - <TableCard config={item} initdata={item.data} mainSearch={[]}/> + <TableCard config={item}/> </Col> ) } else if (item.type === 'table' && item.subtype === 'normaltable') { return ( <Col span={item.width} style={style} key={item.uuid}> - <NormalTable config={item} initdata={item.data} mainSearch={[]}/> + <NormalTable config={item}/> </Col> ) } else if (item.type === 'code') { return ( <Col span={item.width} style={style} key={item.uuid}> - <SandBox config={item} initdata={item.data} mainSearch={[]}/> + <SandBox config={item}/> </Col> ) } else if (item.type === 'balcony') { - return ( - <Col span={item.width} style={style} key={item.uuid}> - <Balcony config={item} initdata={item.data}/> - </Col> - ) + if (item.wrap.printType === 'headerOrfooter' && item.style.position === 'absolute') { + return ( + <Balcony key={item.uuid} config={item}/> + ) + } else { + return ( + <Col span={item.width} style={style} key={item.uuid}> + <Balcony config={item}/> + </Col> + ) + } } else if (item.type === 'timeline') { return ( <Col span={item.width} style={style} key={item.uuid}> - <TimeLine config={item} initdata={item.data} mainSearch={[]}/> + <TimeLine config={item}/> </Col> ) } else if (item.type === 'editor') { return ( <Col span={item.width} style={style} key={item.uuid}> - <BraftEditor config={item} initdata={item.data} mainSearch={[]}/> + <BraftEditor config={item}/> </Col> ) } else if (item.type === 'antvG6') { return ( <Col span={item.width} style={style} key={item.uuid}> - <AntvG6 config={item} initdata={item.data} mainSearch={[]}/> + <AntvG6 config={item}/> </Col> ) } else if (item.type === 'antvX6') { @@ -975,18 +1442,18 @@ } render() { - const { loadingview, viewlost, config, pages, auto } = this.state + const { loadingview, viewlost, config, pages, auto, rePos, loading, ismob } = this.state return ( <div className="bill-print-wrap" > - {loadingview && <Spin size="large" />} + {loadingview || loading ? <Spin size="large" /> : null} {pages ? <div id="bill-print"> - {pages.map((components, index) => (<div className={'print-page' + (auto ? ' auto' : '')} key={index} style={{...config.style, overflow: 'hidden', boxSizing: 'border-box'}}><Row className="component-wrap">{this.getComponents(components)}</Row></div>))} + {pages.map((components, index) => (<div className={'print-page' + (auto ? ' auto' : '') + (rePos ? ' reset-position' : '')} key={index} style={{...config.style, overflow: 'hidden', boxSizing: 'border-box'}}><Row className="component-wrap">{this.getComponents(components)}</Row></div>))} </div> : null} {viewlost ? <NotFount msg={this.state.lostmsg} /> : null} {config && window.GLOB.breakpoint ? <DebugTable /> : null} - {pages && !loadingview && !viewlost ? <div className="print-button"><Button icon="printer" size="large" shape="circle" onClick={this.print}></Button></div> : null} - {!loadingview && !viewlost ? <div className="refresh-button"><Button icon="reload" size="large" shape="circle" onClick={this.reload}></Button></div> : null} + {pages && !loadingview && !viewlost && !ismob ? <div className="print-button"><Button icon="printer" size="large" shape="circle" onClick={this.print}></Button></div> : null} + {!loadingview && !viewlost && !ismob ? <div className="refresh-button"><Button icon="reload" size="large" shape="circle" onClick={this.reload}></Button></div> : null} </div> ) } -- Gitblit v1.8.0