From 1a176e4bdba485301385caac1a29102e598d25cc Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 13 五月 2025 11:32:02 +0800 Subject: [PATCH] 2025-05-13 --- src/views/billprint/index.jsx | 383 ++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 283 insertions(+), 100 deletions(-) diff --git a/src/views/billprint/index.jsx b/src/views/billprint/index.jsx index 0c287de..4f2aa10 100644 --- a/src/views/billprint/index.jsx +++ b/src/views/billprint/index.jsx @@ -1,7 +1,8 @@ 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' @@ -44,8 +45,11 @@ visible: false, rePos: false, loading: false, - auto: true + 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,22 @@ let param = JSON.parse(window.decodeURIComponent(window.atob(params.param))) sessionStorage.setItem('dataM', param.dataM || '') + let urlParam = {...param} + + delete urlParam.tempId + delete urlParam.pageId + delete urlParam.dataM + + Object.keys(urlParam).forEach(key => { + if (key === key.toLowerCase()) return + urlParam[key.toLowerCase()] = urlParam[key] + delete urlParam[key] + }) + this.setState({ BID: param.id || '', tempId: param.tempId, - urlParam: param, + urlParam: urlParam, pageId: param.pageId || '' }, () => { setTimeout(() => { @@ -87,17 +103,29 @@ } componentDidMount() { - const _this = this + const that = this if (window.GLOB.sysType !== 'cloud') { Object.defineProperty(window, 'debugger', { configurable: true, enumerable: true, set(value) { - if (value + '' === 'false') { - window.GLOB.debugger = false - } else { + 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 + } } } }) @@ -115,7 +143,7 @@ window.GLOB.breakpoint = value + '' sessionStorage.setItem('breakpoint', value) } - _this.debugChange() + that.debugChange() } }) } @@ -141,7 +169,7 @@ window.GLOB.breakpoint = false sessionStorage.removeItem('breakpoint') - _this.debugChange() + that.debugChange() } } } @@ -166,13 +194,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 @@ -198,6 +228,8 @@ document.getElementsByTagName('head')[0].appendChild(link) } } + + this.getMenuParam() }) } else { notification.warning({ @@ -251,6 +283,10 @@ return } + if (config.webTitle) { + document.title = config.webTitle + } + config.style = config.style || {} config.pageSize = ['A4', 'A3', 'A5'].includes(config.pageSize) ? config.pageSize : 'A4' config.pageLayout = config.pageLayout !== 'horizontal' ? 'vertical' : 'horizontal' @@ -296,6 +332,30 @@ config.components = config.components.filter(item => !['tabs', 'search'].includes(item.type)) + let urlparam = urlParam ? {...urlParam} : {} + if (config.urlFields && config.urlFields.length) { + config.urlFields.forEach(field => { + let key = field.toLowerCase() + if (urlparam[key] !== undefined) return + urlparam[key] = '' + }) + } + + if (window.backend && config.allSqls) { + let keys = Object.keys(urlparam) + config.allSqls.forEach(item => { + item.id = md5(window.GLOB.appkey + item.v_id) + if (['datasource', 'interface', 'excelOut'].includes(item.type)) { + 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') || '' @@ -313,7 +373,7 @@ if (config.urlFields) { config.urlFields.forEach(field => { - let val = `'${urlParam ? (urlParam[field] || '') : ''}'` + let val = `'${urlparam[field.toLowerCase()]}'` regs.push({ reg: new RegExp('@' + field + '@', 'ig'), value: val @@ -325,7 +385,7 @@ let initInters = [] - this.formatInterSetting(config.interfaces, regs, initInters, params, BID) + this.formatInterSetting(config.interfaces, regs, initInters, params, BID, config.MenuName) config.components = config.components.map(component => { if (component.action) { @@ -341,6 +401,8 @@ component.$searches = [] } component.data = [] // 鍒濆鍖栨暟鎹负绌� + + component.$menuname = (config.MenuName || '') + '-' + (component.name || '') if (component.subtype === 'tablecard') { // 鍏煎 component.type = 'card' @@ -360,7 +422,9 @@ let getColumns = (cols) => { return cols.filter(item => { 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) @@ -466,6 +530,7 @@ 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 @@ -475,6 +540,8 @@ component.setting.sync = 'false' return component } + + component.setting.uuid = component.uuid let _customScript = '' let _tailScript = '' @@ -520,11 +587,17 @@ 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 if (component.subtype !== 'dualdatacard') { @@ -539,11 +612,34 @@ 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 = [] + let ids = [] + params = params.filter(item => { + if (!item.$backend || item.public) return true + ids.push(item.componentId) + 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: '', + componentIds: ids, + data + }) + } } if (config.everyPCount && !config.printPage) { // 鍏煎 @@ -574,6 +670,8 @@ if (params.length === 0 && initInters.length === 0) { this.setState({loadingview: false, pages: [config.components]}) + + this.autoExec() } else if (initInters.length > 0) { this.loadinit(initInters, params) } else { @@ -622,6 +720,9 @@ 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' @@ -640,7 +741,7 @@ return cell } - formatInterSetting = (inters, regs, initInters, params, BID) => { + formatInterSetting = (inters, regs, initInters, params, BID, MenuName) => { if (!inters) return [] let delay = 15 @@ -652,6 +753,7 @@ 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) @@ -666,6 +768,8 @@ } return } + + inter.setting.uuid = inter.uuid let _customScript = '' let _tailScript = '' @@ -683,7 +787,6 @@ }) delete inter.scripts - inter.setting.$name = '鍏叡鏁版嵁婧�-' + inter.setting.name inter.setting.execute = inter.setting.execute !== 'false' inter.setting.laypage = false inter.setting.$top = true @@ -771,7 +874,7 @@ } } - getFormatParam = (params) => { + getFormatParam = (params, MenuName) => { const { BID } = this.state if (!params || params.length === 0) return '' @@ -798,6 +901,7 @@ { 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'`}, ] @@ -822,8 +926,8 @@ // 娴嬭瘯绯荤粺鎵撳嵃鏌ヨ璇彞 if (window.GLOB.debugger === true) { - _script && console.info(`${_sql ? '' : '/*涓嶆墽琛岄粯璁ql*/\n'}${_script}`) - _sql && console.info(_sql) + _script && window.mkInfo(`${_sql ? '' : '/*涓嶆墽琛岄粯璁ql*/\n'}${_script}`) + _sql && window.mkInfo(_sql) } item.columns.forEach(cell => { @@ -834,17 +938,21 @@ let param = { func: 'sPC_Get_structured_data', - LText: LText.join(' union all '), - LText_field: LText_field.join(' union all '), 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 } @@ -856,11 +964,13 @@ return new Promise(resolve => { Api.genericInterface(item).then(res => { if (!res.status) { - notification.warning({ - top: 92, - message: res.message, - duration: 5 - }) + if (res.ErrCode !== '-2') { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + } resolve() } else { let _data = { $$empty: true } @@ -877,6 +987,8 @@ Promise.all(deffers).then(() => { if (params.length === 0) { this.setState({loadingview: false, pages: [this.state.config.components]}) + + this.autoExec() } else { this.loadmaindata(params) } @@ -891,28 +1003,49 @@ let deffers = params.map(item => { let componentId = item.componentId - let ispublic = item.public + let ids = item.componentIds delete item.componentId + delete item.componentIds 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 if (ids) { + ids.forEach(id => { + let _id = 'mk' + id.slice(-18) + + if (res[_id]) { + let _data = { $$empty: true } + if (res[_id][0]) { + _data = res[_id][0] + } + window.GLOB.CacheData.set(id, _data) + } + }) + + resolve(res) } else { res.componentId = componentId - if (ispublic) { - let _data = { $$empty: true } - if (res.data && res.data[0]) { - _data = res.data[0] - } - window.GLOB.CacheData.set(componentId, _data) + let _data = { $$empty: true } + if (res.data && res.data[0]) { + _data = res.data[0] } + window.GLOB.CacheData.set(componentId, _data) + resolve(res) } }) @@ -935,7 +1068,7 @@ _results.forEach(res => { 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]) { + } else if (res[item.dataName]) { let data = res[item.dataName] if (!Array.isArray(data)) { data = [data] @@ -967,63 +1100,79 @@ } } - 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) { + 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 } - - setData(item) - page.push(item) - } else if (!comp.added) { - if (item.wrap.printHeight) { - count += item.wrap.printHeight - if (count >= limit) { - _pageover = true - return + + 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 } - - 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 } - }) - - pages.push(page) - pageIndex++ - - if (pageIndex >= 2000 || comps.findIndex(comp => !comp.added) === -1) { - over = true } } @@ -1058,6 +1207,40 @@ }) this.setState({loadingview: false, pages, rePos}) + + this.autoExec() + }) + } + + autoExec = () => { + const { config } = this.state + + if (config.autoExec !== 'true') return + + setTimeout(() => { + this.print() + }, config.autoExecSplit || 500) + } + + 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 || '绯荤粺閰嶇疆鏇存柊澶辫触锛�', + }) }) } @@ -1312,7 +1495,7 @@ } render() { - const { loadingview, viewlost, config, pages, auto, rePos, loading } = this.state + const { loadingview, viewlost, config, pages, auto, rePos, loading, ismob } = this.state return ( <div className="bill-print-wrap" > @@ -1322,8 +1505,8 @@ </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