From 613d7ada2c5a89d21fdaa4a92f914c27b06f171b Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期三, 09 八月 2023 11:43:32 +0800 Subject: [PATCH] Merge branch 'develop' --- src/menu/components/card/balcony/index.jsx | 2 src/views/billprint/index.scss | 6 + src/views/billprint/index.jsx | 173 +++++++++++++++------------- src/menu/components/card/data-card/options.jsx | 22 +-- src/tabviews/zshare/actionList/normalbutton/index.jsx | 8 src/menu/components/card/balcony/options.jsx | 115 +++--------------- src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx | 2 7 files changed, 136 insertions(+), 192 deletions(-) diff --git a/src/menu/components/card/balcony/index.jsx b/src/menu/components/card/balcony/index.jsx index 7359268..70ff681 100644 --- a/src/menu/components/card/balcony/index.jsx +++ b/src/menu/components/card/balcony/index.jsx @@ -256,6 +256,8 @@ updateWrap = (res) => { delete res.quick + res.linkType = res.linkType || 'static' + let _card = {...this.state.card, wrap: res} if (res.datatype === 'public') { diff --git a/src/menu/components/card/balcony/options.jsx b/src/menu/components/card/balcony/options.jsx index 95227ce..81b6603 100644 --- a/src/menu/components/card/balcony/options.jsx +++ b/src/menu/components/card/balcony/options.jsx @@ -6,6 +6,7 @@ */ export default function (wrap, buttons, columns) { let menu = window.GLOB.customMenu + let MenuType = menu.parentId === 'BillPrintTemp' ? 'billPrint' : '' let modules = MenuUtils.getLinkModules(menu.components) || [] let supmodules = MenuUtils.getSupModules(menu.components, '', menu.interfaces) @@ -32,6 +33,10 @@ } } else { roleList = [] + } + + if (wrap.datatype === 'public' && MenuType === 'billPrint') { + wrap.datatype = 'static' } const balconyWrapForm = [ @@ -64,7 +69,7 @@ options: [ {value: 'dynamic', label: '鍔ㄦ��'}, {value: 'static', label: '闈欐��'}, - {value: 'public', label: '鍏叡鏁版嵁婧�'}, + {value: 'public', label: '鍏叡鏁版嵁婧�', disabled: MenuType === 'billPrint'}, ], controlFields: [ {field: 'empty', values: ['dynamic']}, @@ -122,7 +127,8 @@ {field: 'supControl', values: ['sup']}, {field: 'syncModule', values: ['sync']}, {field: 'checkAll', values: ['sync']}, - ] + ], + forbid: MenuType === 'billPrint' }, { type: 'cascader', @@ -166,95 +172,6 @@ {value: 'show', label: '鏄剧ず'}, ] }, - // { - // type: 'radio', - // field: 'position', - // label: '浣嶇疆', - // initval: wrap.position || 'relative', - // tooltip: '鐩稿瀹氫綅鏄浉瀵瑰叾姝e父浣嶇疆鐨勫亸绉伙紱缁濆瀹氫綅鏄浉瀵逛簬鍘熺粍浠剁殑鍋忕Щ锛屽師缁勪欢楂樺害鍙涓�0锛涘浐瀹氬畾浣嶆槸鐩稿浜庣獥鍙g殑浣嶇疆锛屽畾浣嶆晥鏋滄祴璇曠幆澧冧腑鏌ョ湅銆�', - // required: false, - // options: [ - // {value: 'relative', label: '鐩稿瀹氫綅'}, - // {value: 'absolute', label: '缁濆瀹氫綅'}, - // {value: 'fixed', label: '鍥哄畾瀹氫綅'}, - // ], - // controlFields: [ - // {field: 'quick', values: ['fixed']}, - // {field: 'realwidth', values: ['fixed', 'absolute']}, - // {field: 'transform', values: ['fixed', 'absolute']}, - // ] - // }, - // { - // type: 'select', - // field: 'quick', - // label: '蹇嵎閫夋嫨', - // initval: '', - // required: false, - // subFields: ['top', 'left', 'right', 'bottom', 'transform'], - // options: [ - // {value: 'top', label: '涓�', top: '0px', left: '0px', right: '0px', bottom: '', transform: ''}, - // {value: 'top-left', label: '宸︿笂', top: '0px', left: '0px', right: '', bottom: '', transform: ''}, - // {value: 'top-right', label: '鍙充笂', top: '0px', left: '', right: '0px', bottom: '', transform: ''}, - // {value: 'left-middle', label: '宸︿腑', top: '50%', left: '0px', right: '', bottom: '', transform: 'translateY(-50%)'}, - // {value: 'right-middle', label: '鍙充腑', top: '50%', left: '', right: '0px', bottom: '', transform: 'translateY(-50%)'}, - // {value: 'bottom-left', label: '宸︿笅', top: '', left: '0px', right: '', bottom: '0px', transform: ''}, - // {value: 'bottom-right', label: '鍙充笅', top: '', left: '', right: '0px', bottom: '0px', transform: ''}, - // {value: 'bottom', label: '涓�', top: '', left: '0px', right: '0px', bottom: '0px', transform: ''}, - // {value: 'middle', label: '涓棿', top: '50%', left: '50%', right: '', bottom: '', transform: 'translate(-50%, -50%)'} - // ] - // }, - // { - // type: 'styleInput', - // field: 'top', - // label: '璺濅笂', - // initval: wrap.top || '', - // required: false - // }, - // { - // type: 'styleInput', - // field: 'right', - // label: '璺濆彸', - // initval: wrap.right || '', - // required: false - // }, - // { - // type: 'styleInput', - // field: 'bottom', - // label: '璺濅笅', - // initval: wrap.bottom || '', - // required: false - // }, - // { - // type: 'styleInput', - // field: 'left', - // label: '璺濆乏', - // initval: wrap.left || '', - // required: false - // }, - // { - // type: 'styleInput', - // field: 'realwidth', - // label: '瀹為檯瀹藉害', - // initval: wrap.realwidth || '', - // required: false - // }, - // { - // type: 'select', - // field: 'transform', - // label: '鍙樻崲', - // initval: wrap.transform || '', - // required: false, - // options: [ - // {value: 'translateY(-50%)', label: '涓婄Щ50%'}, - // {value: 'translateY(50%)', label: '涓嬬Щ50%'}, - // {value: 'translateX(-50%)', label: '宸︾Щ50%'}, - // {value: 'translateX(50%)', label: '鍙崇Щ50%'}, - // {value: 'translate(-50%, -50%)', label: '宸︿笂绉�50%'}, - // {value: 'translate(-50%, 50%)', label: '宸︿笅绉�50%'}, - // {value: 'translate(50%, -50%)', label: '鍙充笂绉�50%'}, - // {value: 'translate(50%, 50%)', label: '鍙充笅绉�50%'}, - // ] - // }, { type: 'radio', field: 'empty', @@ -279,6 +196,19 @@ }, { type: 'radio', + field: 'printType', + label: '缁勪欢绫诲瀷', + initval: wrap.printType || 'content', + tooltip: '閫夋嫨绫诲瀷涓恒�婇〉鐪�/椤佃剼銆嬫椂锛屾墦鍗扮殑姣忛〉閲岄兘浼氬甫鏈夎缁勪欢銆傛敞锛氶〉鐪夐〉鑴氫腑鏂囨湰鍏冪礌灏嗘浛鎹� @pageIndex@锛堥〉鐮侊級銆丂total@锛堟�绘暟锛夈�丂date@锛堝綋鍓嶆棩鏈燂級銆丂datetime@锛堝綋鍓嶆椂闂达級锛屼娇鐢ㄥ垎椤靛弬鏁版椂娉ㄦ剰鎵撳嵃妯℃澘鐨勯〉闈㈠竷灞�浣跨敤鍒嗛〉銆�', + required: false, + options: [ + {value: 'content', label: '娴姩鍗�'}, + {value: 'headerOrfooter', label: '椤电湁/椤佃剼'}, + ], + forbid: MenuType !== 'billPrint' + }, + { + type: 'radio', field: 'permission', label: '鏉冮檺楠岃瘉', initval: wrap.permission || (!appType ? 'true' : 'false'), @@ -295,7 +225,8 @@ label: '鍏宠仈鎸夐挳', initval: wrap.linkbtn || '', required: false, - options: buttons + options: buttons, + forbid: MenuType === 'billPrint' }, { type: 'multiselect', diff --git a/src/menu/components/card/data-card/options.jsx b/src/menu/components/card/data-card/options.jsx index 0be3642..37be9fa 100644 --- a/src/menu/components/card/data-card/options.jsx +++ b/src/menu/components/card/data-card/options.jsx @@ -62,6 +62,10 @@ } } + if (wrap.datatype === 'public' && MenuType === 'billPrint') { + wrap.datatype = 'static' + } + const cardWrapForm = [ { type: 'text', @@ -99,7 +103,7 @@ options: [ {value: 'dynamic', label: '鍔ㄦ��', priKeyType: 'static'}, {value: 'static', label: '闈欐��', priKeyType: 'static'}, - {value: 'public', label: '鍏叡鏁版嵁婧�', priKeyType: 'static'}, + {value: 'public', label: '鍏叡鏁版嵁婧�', priKeyType: 'static', disabled: MenuType === 'billPrint'}, ], linkFields: ['priKeyType'], controlFields: [ @@ -279,18 +283,6 @@ ], forbid: subtype === 'tablecard' }, - // { - // type: 'radio', - // field: 'checkAll', - // label: '鍏ㄩ��', - // initval: wrap.checkAll || 'hidden', - // required: false, - // options: [ - // {value: 'hidden', label: '闅愯棌'}, - // {value: 'show', label: '鏄剧ず'}, - // ], - // forbid: subtype !== 'datacard' || appType !== 'mob' - // }, { type: 'radio', field: 'cardFloat', @@ -336,10 +328,10 @@ field: 'printType', label: '缁勪欢绫诲瀷', initval: wrap.printType || 'content', - tooltip: '閫夋嫨绫诲瀷涓恒�婇〉鐪�/椤佃剼銆嬫椂锛屾墦鍗扮殑姣忛〉閲岄兘浼氬甫鏈夎缁勪欢銆�', + tooltip: '閫夋嫨绫诲瀷涓恒�婇〉鐪�/椤佃剼銆嬫椂锛屾墦鍗扮殑姣忛〉閲岄兘浼氬甫鏈夎缁勪欢銆傛敞锛氶〉鐪夐〉鑴氫腑鏂囨湰鍏冪礌灏嗘浛鎹� @pageIndex@锛堥〉鐮侊級銆丂total@锛堟�绘暟锛夈�丂date@锛堝綋鍓嶆棩鏈燂級銆丂datetime@锛堝綋鍓嶆椂闂达級锛屼娇鐢ㄥ垎椤靛弬鏁版椂娉ㄦ剰鎵撳嵃妯℃澘鐨勯〉闈㈠竷灞�浣跨敤鍒嗛〉銆�', required: false, options: [ - {value: 'content', label: '鍐呭'}, + {value: 'content', label: '灞炴�у崱'}, {value: 'headerOrfooter', label: '椤电湁/椤佃剼'}, ], controlFields: [ diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx index c07350f..a4f9f7c 100644 --- a/src/tabviews/zshare/actionList/normalbutton/index.jsx +++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx @@ -2106,8 +2106,8 @@ } } else if (res.ErrCode === 'Y') { // 鎵ц鎴愬姛 let msg = res.message || '鎵ц鎴愬姛锛�' - if (/\n/.test(msg)) { - msg = msg.replace(/\n/ig, '<br/>') + if (/\n|\r/.test(msg)) { + msg = msg.replace(/\n|\r/ig, '<br/>') msg = <span dangerouslySetInnerHTML={{__html: msg}}></span> } Modal.success({ @@ -2580,8 +2580,8 @@ if (res.ErrCode === 'E') { let msg = res.message || '鎵ц澶辫触锛�' - if (/\n/.test(msg)) { - msg = msg.replace(/\n/ig, '<br/>') + if (/\n|\r/.test(msg)) { + msg = msg.replace(/\n|\r/ig, '<br/>') msg = <span dangerouslySetInnerHTML={{__html: msg}}></span> } Modal.error({ diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx index b538627..99a32d2 100644 --- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx @@ -135,7 +135,7 @@ width: '10%', editable: true, inputType: 'radio', - render: (text, record) => record.required === 'true' ? '鏄�' : '鍚�', + render: (text, record) => record.required === 'true' ? <span style={{color: 'red'}}>鏄�</span> : '鍚�', options: [ {value: 'true', text: '鏄�'}, {value: 'false', text: '鍚�'} diff --git a/src/views/billprint/index.jsx b/src/views/billprint/index.jsx index 3321ff8..7d9d55d 100644 --- a/src/views/billprint/index.jsx +++ b/src/views/billprint/index.jsx @@ -41,6 +41,7 @@ config: null, urlParam: null, visible: false, + rePos: false, auto: true } @@ -691,20 +692,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 item.dataArray = fromJS(res.data).toJS() } else if (res.componentId === 'union' && res[item.dataName]) { - item.data = res[item.dataName] - if (!Array.isArray(item.data)) { - item.data = [item.data] + let data = res[item.dataName] + if (!Array.isArray(data)) { + data = [data] } - item.dataArray = fromJS(item.data).toJS() + item.dataArray = fromJS(data).toJS() } }) + + if (item.$page && !item.dataArray) { + item.$page = false + } return item }) @@ -729,97 +740,93 @@ let page = [] let count = 0 let _pageover = false - let pagesover = false - comps.forEach((_item, index) => { - let item = fromJS(_item).toJS() + comps.forEach(comp => { + let item = fromJS(comp).toJS() - if (index + 1 >= length && !_pageover) { - pagesover = true - } - - if (item.wrap && item.wrap.printType === 'headerOrfooter') { // 椤电湁椤佃剼 + if (item.wrap.printType === 'headerOrfooter') { // 椤电湁椤佃剼 + item.data = item.dataArray || null setData(item) 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 - setData(item) - page.push(item) - } - } else if (!item.added) { - _item.added = true - setData(item) - 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 + comp.added = true + } - } + if (_pageover) return - setData(item) - page.push(item) - } - _item.added = true - } else if (!item.added) { - _item.added = true - setData(item) - 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 + if (item.$page && comp.dataArray.length > 0) { + item.data = [] + + while (count + 1 <= limit && comp.dataArray.length > 0) { + item.data.push(comp.dataArray.shift()) + count++ } - count += item.wrap.printHeight - if (count >= limit) { + if (count >= limit || comp.dataArray.length > 0) { _pageover = true } - if (count <= limit) { - _item.added = true - setData(item) - page.push(item) + + if (comp.dataArray.length === 0) { + comp.added = true } - } else if (!item.added) { - _item.added = true + setData(item) page.push(item) - } - - if (index + 1 >= length && !_pageover) { - pagesover = true + } 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 || pagesover) { + if (pageIndex >= 2000 || comps.findIndex(comp => !comp.added) === -1) { over = true } } - this.setState({loadingview: false, pages}) + 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}) }) } @@ -989,11 +996,17 @@ </Col> ) } else if (item.type === 'balcony') { - return ( - <Col span={item.width} style={style} key={item.uuid}> - <Balcony config={item}/> - </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}> @@ -1025,13 +1038,13 @@ } render() { - const { loadingview, viewlost, config, pages, auto } = this.state + const { loadingview, viewlost, config, pages, auto, rePos } = this.state return ( <div className="bill-print-wrap" > {loadingview && <Spin size="large" />} {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} diff --git a/src/views/billprint/index.scss b/src/views/billprint/index.scss index fa8b84a..3ad6384 100644 --- a/src/views/billprint/index.scss +++ b/src/views/billprint/index.scss @@ -82,6 +82,12 @@ .print-page.auto:last-child { height: auto!important; } +.reset-position.print-page { + position: relative; + .component-wrap { + position: unset; + } +} .normal-custom-table .main-pickup { display: none!important; -- Gitblit v1.8.0