From 1d32b21f464a916695acc9fa7e7eeda6e44f830d Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 25 十月 2023 18:14:44 +0800
Subject: [PATCH] 2023-10-25

---
 src/menu/datasource/verifycard/utils.jsx                        |    2 
 src/tabviews/custom/components/card/prop-card/index.jsx         |    2 
 src/menu/components/card/double-data-card/options.jsx           |   14 +++
 src/tabviews/custom/components/card/double-data-card/index.scss |   18 ++++
 src/menu/components/card/data-card/options.jsx                  |   34 ++++++++
 src/tabviews/zshare/actionList/popupbutton/index.jsx            |    4 
 src/tabviews/custom/components/card/double-data-card/index.jsx  |   57 +++++++++-----
 src/tabviews/custom/components/card/data-card/index.scss        |   17 ++++
 src/menu/datasource/verifycard/index.jsx                        |   13 +++
 src/tabviews/custom/components/card/data-card/index.jsx         |   55 ++++++++-----
 10 files changed, 167 insertions(+), 49 deletions(-)

diff --git a/src/menu/components/card/data-card/options.jsx b/src/menu/components/card/data-card/options.jsx
index adc2931..818913d 100644
--- a/src/menu/components/card/data-card/options.jsx
+++ b/src/menu/components/card/data-card/options.jsx
@@ -106,6 +106,7 @@
         {field: 'broadcast', values: ['dynamic', 'public']},
         {field: 'supModule', values: ['static']},
         {field: 'publicId', values: ['public']},
+        {field: 'emptyExec', values: ['dynamic', 'public']},
       ],
       forbid: subtype !== 'propcard'
     },
@@ -204,7 +205,7 @@
         {field: 'checkAll', values: ['checkbox']},
         {field: 'selected', values: ['radio', 'checkbox']},
         {field: 'selStyle', values: ['radio', 'checkbox']},
-        // {field: 'priKeyType', values: ['radio', 'checkbox']},
+        {field: 'pickup', values: ['radio', 'checkbox']},
       ],
       forbid: subtype === 'tablecard'
     },
@@ -289,6 +290,19 @@
         {value: 'right', label: '鍙冲榻�'},
       ],
       forbid: subtype === 'tablecard'
+    },
+    {
+      type: 'radio',
+      field: 'pickup',
+      label: '鏀惰捣寮�鍏�',
+      initval: wrap.pickup || 'false',
+      tooltip: '鏁版嵁鍗″彸涓婅浼氭樉绀烘敹璧峰紑鍏炽��',
+      required: false,
+      options: [
+        {value: 'false', label: '鏃�'},
+        {value: 'true', label: '鏈�'},
+      ],
+      forbid: subtype !== 'datacard' || appType === 'mob'
     },
     {
       type: 'radio',
@@ -401,7 +415,23 @@
       tooltip: '鏁版嵁鏇存柊鏃惰嚜鍔ㄦ墽琛屾寜閽�傛敞锛氭鎸夐挳鎵ц鎴愬姛鍚庤皑鎱庨�夋嫨鍒锋柊椤癸紝閬垮厤閫犳垚寰幆鎵ц銆�',
       required: false,
       options: buttons,
-      forbid: subtype !== 'propcard'
+      forbid: subtype !== 'propcard',
+      controlFields: [
+        {field: 'emptyExec', notNull: true},
+      ]
+    },
+    {
+      type: 'radio',
+      field: 'emptyExec',
+      label: '绌哄�兼墽琛�',
+      initval: wrap.emptyExec || 'true',
+      tooltip: '褰撴煡璇㈡暟鎹负绌烘椂锛岃嚜鍔ㄦ墽琛屾寜閽槸鍚︽墽琛屻��',
+      required: false,
+      forbid: subtype !== 'propcard',
+      options: [
+        {value: 'true', label: '鏄�'},
+        {value: 'false', label: '鍚�'},
+      ],
     },
     {
       type: 'radio',
diff --git a/src/menu/components/card/double-data-card/options.jsx b/src/menu/components/card/double-data-card/options.jsx
index 3bdc566..1941d17 100644
--- a/src/menu/components/card/double-data-card/options.jsx
+++ b/src/menu/components/card/double-data-card/options.jsx
@@ -91,6 +91,7 @@
       controlFields: [
         {field: 'selected', values: ['radio', 'checkbox']},
         {field: 'selStyle', values: ['radio', 'checkbox']},
+        {field: 'pickup', values: ['radio', 'checkbox']},
       ],
     },
     {
@@ -125,6 +126,19 @@
     },
     {
       type: 'radio',
+      field: 'pickup',
+      label: '鏀惰捣寮�鍏�',
+      initval: wrap.pickup || 'false',
+      tooltip: '鏁版嵁鍗″彸涓婅浼氭樉绀烘敹璧峰紑鍏炽��',
+      required: false,
+      options: [
+        {value: 'false', label: '鏃�'},
+        {value: 'true', label: '鏈�'},
+      ],
+      forbid: appType === 'mob'
+    },
+    {
+      type: 'radio',
       field: 'parity',
       label: '濂囧伓鑳屾櫙',
       initval: wrap.parity || 'false',
diff --git a/src/menu/datasource/verifycard/index.jsx b/src/menu/datasource/verifycard/index.jsx
index 0ed4d4c..8e452d1 100644
--- a/src/menu/datasource/verifycard/index.jsx
+++ b/src/menu/datasource/verifycard/index.jsx
@@ -659,6 +659,17 @@
 
       let _debugId = md5(r.sql)
 
+      if (r.custompage && _columns.findIndex(col => col.field === 'mk_total') === -1) {
+        Modal.warning({
+          title: `鏁版嵁婧愭垨鑷畾涔夎剼鏈腑浣跨敤鑷畾涔夊垎椤垫帓搴忔椂锛岃鍦ㄥ瓧娈甸泦涓坊鍔� mk_total銆俙,
+          okText: '鐭ラ亾浜�',
+          onOk: () => {
+            reject()
+          }
+        })
+        return
+      }
+
       if (debugId === _debugId) {
         resolve()
         return
@@ -693,7 +704,7 @@
               })
             }
 
-            if (!tail) {
+            if (!tail && setting.order) {
               let keys = setting.order.replace(/\s+(asc|desc)/ig, '').replace(/\s+/g, '')
               keys.split(',').forEach(field => {
                 if (new RegExp(`'${field}'`).test(result.message)) {
diff --git a/src/menu/datasource/verifycard/utils.jsx b/src/menu/datasource/verifycard/utils.jsx
index 2a79dee..dcf3980 100644
--- a/src/menu/datasource/verifycard/utils.jsx
+++ b/src/menu/datasource/verifycard/utils.jsx
@@ -207,6 +207,6 @@
       })
     }
 
-    return { error, sql, errors: errors.join('锛�') }
+    return { error, sql, errors: errors.join('锛�'), custompage }
   }
 }
\ No newline at end of file
diff --git a/src/tabviews/custom/components/card/data-card/index.jsx b/src/tabviews/custom/components/card/data-card/index.jsx
index 96e55f2..9cc9fcd 100644
--- a/src/tabviews/custom/components/card/data-card/index.jsx
+++ b/src/tabviews/custom/components/card/data-card/index.jsx
@@ -1,7 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { Spin, Empty, notification, message, Row, Col, Pagination, Modal } from 'antd'
+import { Spin, Empty, notification, message, Row, Col, Pagination, Modal, Switch } from 'antd'
 import { DownOutlined } from '@ant-design/icons'
 
 import Api from '@/api'
@@ -37,13 +37,14 @@
     selectedData: [],
     loading: false,
     card: null,
-    data: null,
+    data: [],
     total: null,
     precards: [],
     nextcards: [],
     selected: 'false',
     supNodes: [],
-    supComs: null
+    supComs: null,
+    pickup: false
   }
 
   loaded = false
@@ -133,7 +134,7 @@
     _config.wrap.scale = _config.wrap.scale === 'true' ? 'scale' : ''
     _config.wrap.layout = (_config.wrap.layout || 'grid') + '-layout float-' + (_config.wrap.cardFloat || 'left')
 
-    _config.wrap.wrapClass =  `${_config.wrap.selStyle} ${_config.wrap.cardType || ''} ${_config.wrap.scale}`
+    _config.wrap.wrapClass = `${_config.wrap.selStyle} ${_config.wrap.cardType || ''} ${_config.wrap.scale}`
 
     let pageOptions = ['10', '25', '50', '100', '500', '1000']
 
@@ -149,7 +150,7 @@
       }
     }
 
-    let _data = null
+    let _data = []
     if (_config.setting.sync === 'true') {
       _config.setting.onload = 'false'
 
@@ -470,7 +471,7 @@
   checkTopLine = (id) => {
     const { config, data, selected } = this.state
 
-    if (!data || data.length === 0) {
+    if (data.length === 0) {
       this.setState({
         activeKey: '',
         selectKeys: [],
@@ -592,7 +593,7 @@
     const { config, data, selectedData } = this.state
 
     if (config.wrap.cardType !== 'checkbox') return
-    if (!data || data.length === 0) return
+    if (data.length === 0) return
     
     if (selectedData.length === 0 || selectedData.length < data.length) {
       let index = ''
@@ -822,6 +823,7 @@
         selectedData: [],
         data: data,
         total: total,
+        pickup: false,
         loading: false
       })
 
@@ -1125,14 +1127,22 @@
     })
   }
 
-  render() {
-    const { config, precards, nextcards, loading, data, pageIndex, pageSize, total, card, activeKey, BID, BData, selectedData, selectKeys } = this.state
+  pickupChange = () => {
+    this.setState({
+      pickup: !this.state.pickup
+    })
+  }
 
-    if (config.wrap.empty === 'hidden' && (!data || data.length === 0)) return null
+  render() {
+    const { config, precards, nextcards, loading, pageIndex, pageSize, total, card, activeKey, BID, BData, selectedData, selectKeys, pickup } = this.state
+
+    let data = this.state.data
+
+    if (config.wrap.empty === 'hidden' && data.length === 0) return null
 
     let _total = 0
     let switchable = false
-    if (config.wrap.pagestyle === 'switch' && total > pageSize && data) {
+    if (config.wrap.pagestyle === 'switch' && total > pageSize) {
       _total = pageSize * pageIndex
       switchable = true
     }
@@ -1142,7 +1152,7 @@
     if (config.$extend) {
       extendData = {$$BID: BID, $$BData: BData, $$selectedData: selectedData, $$type: 'extendCard'}
       
-      if (data && data[0]) {
+      if (data[0]) {
         if (selectedData[0]) {
           extendData = {...extendData, ...selectedData[0]}
         } else {
@@ -1158,11 +1168,15 @@
       }
     }
 
+    if (pickup) {
+      data = data.filter(item => selectKeys.includes(item.key))
+    }
+
     return (
       <div className="custom-data-card-box" id={'anchor' + config.uuid} style={config.style}>
         {loading ?
           <div className="loading-mask">
-            {data ? <div className="ant-spin-blur"></div> : null}
+            {data.length ? <div className="ant-spin-blur"></div> : null}
             <Spin />
           </div> : null
         }
@@ -1177,6 +1191,7 @@
             selectedData={selectedData}
           /> : null
         }
+        {config.wrap.pickup === 'true' && this.state.data.length > 0 ? <div className="pickup-wrap"><Switch title="鏀惰捣" checkedChildren="寮�" unCheckedChildren="鍏�" checked={pickup} onChange={this.pickupChange} /></div> : null}
         <div className={`data-zoom ${config.wrap.wrapClass}`}>
           {switchable ? <div className={'prev-page ' + (pageIndex === 1 ? 'disabled' : '')} onClick={this.prevPage}><div><div><img src={preImg} alt=""/></div></div></div> : null}
           <Row className={'card-row-list ' + config.wrap.layout}>
@@ -1189,7 +1204,7 @@
                 </CardItem>}
               </Col>
             ))}
-            {data && data.map((item, index) => {
+            {data.map((item, index) => {
               let className = 'mk-card '
               if (config.wrap.parity === 'true') {
                 if (index % 2 === 1) {
@@ -1198,15 +1213,15 @@
               }
               if (item.$disabled) {
                 className = 'mk-disabled'
-              } else if (activeKey === index) {
+              } else if (activeKey === item.key) {
                 className += 'active'
-              } else if (selectKeys.indexOf(index) > -1) {
+              } else if (selectKeys.indexOf(item.key) > -1) {
                 className += 'selected'
               }
 
               return (
                 <Col className={className} key={index} style={card.wStyle} span={card.setting.width}>
-                  <CardItem card={card} cards={config} data={item} onClick={() => {this.changeCard(index, item)}}>
+                  <CardItem card={card} cards={config} data={item} onClick={() => {this.changeCard(item.key, item)}}>
                     <span className="circle-select"></span>
                   </CardItem>
                 </Col>
@@ -1224,9 +1239,9 @@
           </Row>
           {switchable ? <div className={'prev-page ' + (total <= _total ? 'disabled' : '')} onClick={this.nextPage}><div><div><img src={nextImg} alt=""/></div></div></div> : null}
         </div>
-        {config.$empty && (!data || data.length === 0) ? <Empty description={false}/> : null}
-        {config.wrap.pagestyle === 'page' && data ? <Pagination size="small" total={total} showTotal={(t, range) => total > 0 ? `${range[0]}-${range[1]} 鍏� ${total} 鏉 : `鍏� ${total} 鏉} pageSize={pageSize} showSizeChanger={true} pageSizeOptions={this.state.pageOptions} onChange={this.changePageIndex} onShowSizeChange={this.pageSizeChange} current={pageIndex}/> : null}
-        {config.wrap.pagestyle === 'more' && data && data.length > 0 ? <div className={'mk-more' + (pageSize * pageIndex >= total ? ' disabled' : '')} onClick={this.loadMore}>鏌ョ湅鏇村<DownOutlined/></div> : null}
+        {config.$empty && data.length === 0 ? <Empty description={false}/> : null}
+        {config.wrap.pagestyle === 'page' ? <Pagination size="small" total={total} showTotal={(t, range) => total > 0 ? `${range[0]}-${range[1]} 鍏� ${total} 鏉 : `鍏� ${total} 鏉} pageSize={pageSize} showSizeChanger={true} pageSizeOptions={this.state.pageOptions} onChange={this.changePageIndex} onShowSizeChange={this.pageSizeChange} current={pageIndex}/> : null}
+        {config.wrap.pagestyle === 'more' && data.length > 0 ? <div className={'mk-more' + (pageSize * pageIndex >= total ? ' disabled' : '')} onClick={this.loadMore}>鏌ョ湅鏇村<DownOutlined/></div> : null}
       </div>
     )
   }
diff --git a/src/tabviews/custom/components/card/data-card/index.scss b/src/tabviews/custom/components/card/data-card/index.scss
index ea3ac4a..e56de99 100644
--- a/src/tabviews/custom/components/card/data-card/index.scss
+++ b/src/tabviews/custom/components/card/data-card/index.scss
@@ -6,6 +6,23 @@
   min-height: 20px;
   overflow-y: auto;
 
+  .pickup-wrap {
+    float: right;
+    button {
+      margin-top: 3px;
+    }
+  }
+  .pickup-wrap + div {
+    clear: both;
+  }
+  .button-list + .pickup-wrap {
+    position: relative;
+    button {
+      position: absolute;
+      bottom: 0;
+      right: 0;
+    }
+  }
   .data-zoom {
     display: flex;
     position: relative;
diff --git a/src/tabviews/custom/components/card/double-data-card/index.jsx b/src/tabviews/custom/components/card/double-data-card/index.jsx
index d803a09..bda5137 100644
--- a/src/tabviews/custom/components/card/double-data-card/index.jsx
+++ b/src/tabviews/custom/components/card/double-data-card/index.jsx
@@ -1,7 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { Spin, Empty, notification, Row, Col, Pagination, Modal } from 'antd'
+import { Spin, Empty, notification, Row, Col, Pagination, Modal, Switch } from 'antd'
 import { DownOutlined, UpOutlined, PlusSquareOutlined, MinusSquareOutlined } from '@ant-design/icons'
 
 import Api from '@/api'
@@ -35,7 +35,7 @@
     selectedData: [],          // 閫変腑鏁版嵁锛岀敤浜庡伐鍏锋爮鎸夐挳
     loading: false,            // 鏁版嵁鍔犺浇鐘舵��
     card: null,                // 鍗$墖璁剧疆
-    data: null,                // 鏁版嵁
+    data: [],                // 鏁版嵁
     total: null,
     precards: [],
     nextcards: [],
@@ -43,7 +43,8 @@
     opens: [],
     wrapStyle: null,
     subcard: null,
-    subconfig: null
+    subconfig: null,
+    pickup: false
   }
 
   loaded = false
@@ -380,7 +381,7 @@
     const { config, data, selected, card } = this.state
     let _opens = [...this.state.opens]
 
-    if (!data || data.length === 0) {
+    if (data.length === 0) {
       this.setState({
         activeKey: '',
         selectKeys: [],
@@ -462,7 +463,7 @@
     const { config, data, selectedData } = this.state
 
     if (config.wrap.cardType !== 'checkbox') return
-    if (!data || data.length === 0) return
+    if (data.length === 0) return
     
     if (selectedData.length === 0 || selectedData.length < data.length) {
       let index = ''
@@ -723,6 +724,7 @@
         selectedData: [],
         data: data,
         total: total,
+        pickup: false,
         loading: false
       })
 
@@ -1083,17 +1085,25 @@
     })
   }
 
-  render() {
-    const { config, precards, nextcards, loading, data, pageIndex, pageSize, total, card, activeKey, BID, BData, selectedData, selectKeys, subcard, subconfig, wrapStyle, opens } = this.state
+  pickupChange = () => {
+    this.setState({
+      pickup: !this.state.pickup
+    })
+  }
 
-    if (config.wrap.empty === 'hidden' && (!data || data.length === 0)) return null
+  render() {
+    const { config, precards, nextcards, loading, pageIndex, pageSize, total, card, activeKey, BID, BData, selectedData, selectKeys, subcard, subconfig, wrapStyle, opens, pickup } = this.state
+
+    let data = this.state.data
+
+    if (config.wrap.empty === 'hidden' && data.length === 0) return null
 
     let extendData = null
 
     if (config.$extend) {
       extendData = {$$BID: BID, $$BData: BData, $$selectedData: selectedData, $$type: 'extendCard'}
       
-      if (data && data[0]) {
+      if (data[0]) {
         if (selectedData[0]) {
           extendData = {...extendData, ...selectedData[0]}
         } else {
@@ -1115,11 +1125,15 @@
       mainBox = 'flex-card '
     }
 
+    if (pickup) {
+      data = data.filter(item => selectKeys.includes(item.key))
+    }
+
     return (
       <div className="double-data-card-box" id={'anchor' + config.uuid} style={config.style}>
         {loading ?
           <div className="loading-mask">
-            {data ? <div className="ant-spin-blur"></div> : null}
+            {data.length ? <div className="ant-spin-blur"></div> : null}
             <Spin />
           </div> : null
         }
@@ -1134,6 +1148,7 @@
             selectedData={selectedData}
           /> : null
         }
+        {config.wrap.pickup === 'true' && this.state.data.length > 0 ? <div className="pickup-wrap"><Switch title="鏀惰捣" checkedChildren="寮�" unCheckedChildren="鍏�" checked={pickup} onChange={this.pickupChange} /></div> : null}
         <div className={config.wrap.zoomStyle ? 'data-zoom-box' : ''} style={config.wrap.zoomStyle}>
           <div className={`data-zoom ${config.wrap.wrapClass}`} style={config.wrap.minWidth ? {minWidth: config.wrap.minWidth} : null}>
             <Row className={'card-row-list '}>
@@ -1146,16 +1161,16 @@
                   </CardItem>}
                 </Col>
               ))}
-              {data && data.map((item, index) => {
+              {data.map((item, index) => {
                 let className = 'card-item-wrap mk-card ' + mainBox
                 let subClass = 'mk-unfold'
                 let unfold = true
 
                 if (item.$disabled) {
                   className = 'card-item-wrap mk-disabled ' + mainBox
-                } else if (activeKey === index) {
+                } else if (activeKey === item.key) {
                   className += 'active'
-                } else if (selectKeys.indexOf(index) > -1) {
+                } else if (selectKeys.indexOf(item.key) > -1) {
                   className += 'selected'
                 }
 
@@ -1164,18 +1179,18 @@
                     subClass = 'mk-disabled'
                     unfold = false
                   } else {
-                    subClass = opens.indexOf(index) > -1 ? 'mk-unfold' : 'mk-collapse'
-                    unfold = opens.indexOf(index) > -1
+                    subClass = opens.indexOf(item.key) > -1 ? 'mk-unfold' : 'mk-collapse'
+                    unfold = opens.indexOf(item.key) > -1
                   }
                 }
 
                 return (
                   <Col key={index} span={card.setting.width} style={card.wStyle}>
                     <div className={className} style={wrapStyle}>
-                      <CardItem card={card} cards={config} data={item} onDoubleClick={() => this.onDoubleClick(index, subClass)} onClick={() => {this.changeCard(index, item, subClass)}}>
+                      <CardItem card={card} cards={config} data={item} onDoubleClick={() => this.onDoubleClick(item.key, subClass)} onClick={() => {this.changeCard(item.key, item, subClass)}}>
                         <span className="circle-select"></span>
-                        {card.setting.controlIcon === 'left' ? (!unfold ? <PlusSquareOutlined className={subClass} onClick={(e) => this.changeUnfold(e, index, subClass)}/> : <MinusSquareOutlined className={subClass} onClick={(e) => this.changeUnfold(e, index, subClass)}/>) : null}
-                        {card.setting.controlIcon === 'right' ? <UpOutlined className={subClass} onClick={(e) => this.changeUnfold(e, index, subClass)}/> : null}
+                        {card.setting.controlIcon === 'left' ? (!unfold ? <PlusSquareOutlined className={subClass} onClick={(e) => this.changeUnfold(e, item.key, subClass)}/> : <MinusSquareOutlined className={subClass} onClick={(e) => this.changeUnfold(e, item.key, subClass)}/>) : null}
+                        {card.setting.controlIcon === 'right' ? <UpOutlined className={subClass} onClick={(e) => this.changeUnfold(e, item.key, subClass)}/> : null}
                       </CardItem>
                       <div className={'sub-card-wrap ' + subClass + (config.wrap.parity === 'true' ? ' mk-parity-bg' : '')} onClick={() => this.changeSubCard(item)}>
                         {item.children.map((cell, index) => <Col key={'sub' + index} span={subcard.setting.width || 24}>
@@ -1197,10 +1212,10 @@
               ))}
             </Row>
           </div>
-          {config.$empty && (!data || data.length === 0) ? <Empty description={false}/> : null}
+          {config.$empty && data.length === 0 ? <Empty description={false}/> : null}
         </div>
-        {config.wrap.pagestyle === 'page' && data ? <Pagination size="small" total={total} showTotal={(t, range) => total > 0 ? `${range[0]}-${range[1]} 鍏� ${total} 鏉 : `鍏� ${total} 鏉} pageSize={pageSize} showSizeChanger={true} pageSizeOptions={this.state.pageOptions} onChange={this.changePageIndex} onShowSizeChange={this.pageSizeChange} current={pageIndex}/> : null}
-        {config.wrap.pagestyle === 'more' && data && data.length > 0 ? <div className={'mk-more' + (pageSize * pageIndex >= total ? ' disabled' : '')} onClick={this.loadMore}>鏌ョ湅鏇村<DownOutlined/></div> : null}
+        {config.wrap.pagestyle === 'page' ? <Pagination size="small" total={total} showTotal={(t, range) => total > 0 ? `${range[0]}-${range[1]} 鍏� ${total} 鏉 : `鍏� ${total} 鏉} pageSize={pageSize} showSizeChanger={true} pageSizeOptions={this.state.pageOptions} onChange={this.changePageIndex} onShowSizeChange={this.pageSizeChange} current={pageIndex}/> : null}
+        {config.wrap.pagestyle === 'more' && data.length > 0 ? <div className={'mk-more' + (pageSize * pageIndex >= total ? ' disabled' : '')} onClick={this.loadMore}>鏌ョ湅鏇村<DownOutlined/></div> : null}
       </div>
     )
   }
diff --git a/src/tabviews/custom/components/card/double-data-card/index.scss b/src/tabviews/custom/components/card/double-data-card/index.scss
index e0b3f63..bb3872a 100644
--- a/src/tabviews/custom/components/card/double-data-card/index.scss
+++ b/src/tabviews/custom/components/card/double-data-card/index.scss
@@ -6,6 +6,23 @@
   min-height: 20px;
   overflow-y: auto;
 
+  .pickup-wrap {
+    float: right;
+    button {
+      margin-top: 3px;
+    }
+  }
+  .pickup-wrap + div {
+    clear: both;
+  }
+  .button-list + .pickup-wrap {
+    position: relative;
+    button {
+      position: absolute;
+      bottom: 0;
+      right: 0;
+    }
+  }
   .data-zoom {
     display: flex;
     position: relative;
@@ -126,7 +143,6 @@
     border-color: #ffffff;
     transform: rotate(45deg);
   }
-
   .data-zoom.check.square {
     .circle-select {
       border-radius: 0!important;
diff --git a/src/tabviews/custom/components/card/prop-card/index.jsx b/src/tabviews/custom/components/card/prop-card/index.jsx
index f114efa..340d871 100644
--- a/src/tabviews/custom/components/card/prop-card/index.jsx
+++ b/src/tabviews/custom/components/card/prop-card/index.jsx
@@ -376,7 +376,7 @@
   autoExec = (times) => {
     const { config, data } = this.state
 
-    if (!config.wrap.autoExec) return
+    if (!config.wrap.autoExec || (config.wrap.emptyExec === 'false' && data.$$empty)) return
 
     let btn = document.getElementById('button' + config.wrap.autoExec)
 
diff --git a/src/tabviews/zshare/actionList/popupbutton/index.jsx b/src/tabviews/zshare/actionList/popupbutton/index.jsx
index efd9c5c..5153d82 100644
--- a/src/tabviews/zshare/actionList/popupbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/popupbutton/index.jsx
@@ -237,7 +237,7 @@
         ratio = ratio + 'vw'
       }
       return <Modal
-        wrapClassName={'popview-modal ' + (!btn.$view ? '' : 'custom-popview ') + (btn.popshow || '')}
+        wrapClassName={`popview-modal popview-${btn.uuid} ` + (!btn.$view ? '' : 'custom-popview ') + (btn.popshow || '')}
         title={btn.label}
         width={ratio}
         maskClosable={btn.clickouter === 'close'}
@@ -275,7 +275,7 @@
       return (
         <Drawer
           title={btn.label}
-          className={!btn.$view ? 'table-drawer-popview' : 'custom-drawer-popview' }
+          className={!btn.$view ? 'table-drawer-popview' : 'custom-drawer-popview popview-' + btn.uuid}
           width={width}
           height={height}
           maskClosable={btn.clickouter === 'close'}

--
Gitblit v1.8.0