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