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/views/billprint/index.jsx |  173 +++++++++++++++++++++++++++++++--------------------------
 1 files changed, 93 insertions(+), 80 deletions(-)

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}

--
Gitblit v1.8.0