From 6f2b0cab4c9a4dacfebb2d6fbd4ec2fdc14e22ba Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期一, 29 四月 2024 15:29:58 +0800
Subject: [PATCH] 2024-04-29

---
 src/menu/components/table/normal-table/columns/editColumn/formconfig.jsx         |   92 ++++++++++
 src/menu/components/module/voucher/voucherTable/index.scss                       |    3 
 src/menu/components/table/normal-table/options.jsx                               |   53 +++++
 src/utils/utils-custom.js                                                        |   19 +
 src/tabviews/custom/components/share/normalTable/index.scss                      |    3 
 src/tabviews/zshare/actionList/exceloutbutton/index.jsx                          |    2 
 src/menu/components/form/simple-form/index.jsx                                   |    2 
 src/tabviews/custom/popview/index.jsx                                            |   25 ++
 src/menu/components/table/normal-table/columns/editColumn/index.jsx              |   17 +
 src/tabviews/basetable/index.jsx                                                 |   20 -
 src/templates/modalconfig/index.jsx                                              |    2 
 src/tabviews/custom/components/module/invoice/index.jsx                          |    8 
 src/tabviews/custom/components/card/data-card/index.jsx                          |   39 +--
 src/menu/components/module/invoice/verifycard/customscript/index.jsx             |    6 
 src/menu/components/form/step-form/index.jsx                                     |    2 
 src/menu/components/card/data-card/options.jsx                                   |    2 
 src/menu/components/form/tab-form/index.jsx                                      |    2 
 src/tabviews/custom/components/module/voucher/voucherTable/index.scss            |    3 
 src/tabviews/custom/components/table/normal-table/index.jsx                      |   83 +++++++--
 src/tabviews/custom/components/module/invoice/invoiceTable/index.jsx             |    2 
 src/tabviews/custom/components/table/edit-table/normalTable/index.scss           |    3 
 src/menu/modalconfig/index.scss                                                  |   12 +
 src/tabviews/custom/index.jsx                                                    |   45 +++-
 src/menu/modalconfig/index.jsx                                                   |    2 
 src/menu/components/module/invoice/verifycard/index.jsx                          |    6 
 src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx |   14 +
 src/menu/components/table/normal-table/index.jsx                                 |   22 ++
 src/tabviews/zshare/normalTable/index.scss                                       |    5 
 28 files changed, 371 insertions(+), 123 deletions(-)

diff --git a/src/menu/components/card/data-card/options.jsx b/src/menu/components/card/data-card/options.jsx
index 4ea2fb5..2c480ad 100644
--- a/src/menu/components/card/data-card/options.jsx
+++ b/src/menu/components/card/data-card/options.jsx
@@ -746,7 +746,7 @@
           width: '20%'
         },
         {
-          title: '鑿滃崟',
+          title: '缁勪欢',
           dataIndex: 'nodes',
           inputType: 'cascader',
           editable: true,
diff --git a/src/menu/components/form/simple-form/index.jsx b/src/menu/components/form/simple-form/index.jsx
index 3a0bf93..a394711 100644
--- a/src/menu/components/form/simple-form/index.jsx
+++ b/src/menu/components/form/simple-form/index.jsx
@@ -375,7 +375,7 @@
         })
       }
 
-      if (item.type === 'switch' || item.type === 'check') {
+      if (['switch', 'check', 'popSelect'].includes(item.type)) {
         _linksupFields.push({
           field: item.field,
           label: item.label
diff --git a/src/menu/components/form/step-form/index.jsx b/src/menu/components/form/step-form/index.jsx
index dd919dc..b2a9e85 100644
--- a/src/menu/components/form/step-form/index.jsx
+++ b/src/menu/components/form/step-form/index.jsx
@@ -477,7 +477,7 @@
         })
       }
 
-      if (item.type === 'switch' || item.type === 'check') {
+      if (['switch', 'check', 'popSelect'].includes(item.type)) {
         _linksupFields.push({
           field: item.field,
           label: item.label
diff --git a/src/menu/components/form/tab-form/index.jsx b/src/menu/components/form/tab-form/index.jsx
index 66e8181..ecc6b22 100644
--- a/src/menu/components/form/tab-form/index.jsx
+++ b/src/menu/components/form/tab-form/index.jsx
@@ -482,7 +482,7 @@
         })
       }
 
-      if (item.type === 'switch' || item.type === 'check') {
+      if (['switch', 'check', 'popSelect'].includes(item.type)) {
         _linksupFields.push({
           field: item.field,
           label: item.label
diff --git a/src/menu/components/module/invoice/verifycard/customscript/index.jsx b/src/menu/components/module/invoice/verifycard/customscript/index.jsx
index 6886fa1..fee69b5 100644
--- a/src/menu/components/module/invoice/verifycard/customscript/index.jsx
+++ b/src/menu/components/module/invoice/verifycard/customscript/index.jsx
@@ -78,11 +78,11 @@
           Select @invoice_type='', @from_to_name='', @from_to_tax_no='', @from_to_addr='', @from_to_tel='', @from_to_bank_name='', @from_to_account_no='', @from_to_mob='', @from_to_email='', @from_to_code='', @orgname='', @tax_no='', @addr='', @tel='', @bank_name='', @account_no='', @remark='', @payee='', @reviewer='', @drawer='', @io='', @orgcode='', @total_net_amount=0, @total_tax=0, @total_amount=0
           
           /* 鍙戠エ鏄庣粏涓存椂琛� */
-          Declare @details_list table (productcode Nvarchar(50), productname Nvarchar(50), spec Nvarchar(50), unit Nvarchar(50), bill_count Decimal(18,10), unitprice Decimal(18,10), amount_line Decimal(18,2), tax_classify_code Nvarchar(50), tax_classify_name Nvarchar(50), tax_rate Decimal(18,2), tax_amount Decimal(18,2), invoice_lp Nvarchar(50), jskey Nvarchar(50), data_type Nvarchar(50))
+          Declare @details_list table (productcode Nvarchar(50), productname Nvarchar(50), spec Nvarchar(50), unit Nvarchar(50), bill_count Decimal(18,10), unitprice Decimal(18,10), amount_line Decimal(18,2), tax_classify_code Nvarchar(50), tax_classify_name Nvarchar(50), tax_rate Decimal(18,2), tax_amount Decimal(18,2), free_tax_mark Nvarchar(50), vat_special_management Nvarchar(50), invoice_lp Nvarchar(50), jskey Nvarchar(50), data_type Nvarchar(50))
           
-          Insert into @details_list (productcode, productname, spec, unit, bill_count, unitprice, amount_line, tax_classify_code, tax_classify_name, tax_rate, tax_amount, invoice_lp, jskey, data_type)
+          Insert into @details_list (productcode, productname, spec, unit, bill_count, unitprice, amount_line, tax_classify_code, tax_classify_name, tax_rate, tax_amount, free_tax_mark, vat_special_management, invoice_lp, jskey, data_type)
           
-          Select '', '', '', '', 0, 0, 0, '', '', 0, 0, '', '', ''
+          Select '', '', '', '', 0, 0, 0, '', '', 0, 0, '', '', '', '', ''
 
         `
 
diff --git a/src/menu/components/module/invoice/verifycard/index.jsx b/src/menu/components/module/invoice/verifycard/index.jsx
index 5ffa0bd..0f51541 100644
--- a/src/menu/components/module/invoice/verifycard/index.jsx
+++ b/src/menu/components/module/invoice/verifycard/index.jsx
@@ -569,13 +569,13 @@
               </p>
               <p className="note">{`/* 鍙戠エ鏄庣粏涓存椂琛� */`}</p>
               <p>
-                Declare @details_list table (productcode Nvarchar(50), productname Nvarchar(50), spec Nvarchar(50), unit Nvarchar(50), bill_count Decimal(18,10), unitprice Decimal(18,10), amount_line Decimal(18,2), tax_classify_code Nvarchar(50), tax_classify_name Nvarchar(50), tax_rate Decimal(18,2), tax_amount Decimal(18,2), invoice_lp Nvarchar(50), jskey Nvarchar(50), data_type Nvarchar(50))
+                Declare @details_list table (productcode Nvarchar(50), productname Nvarchar(50), spec Nvarchar(50), unit Nvarchar(50), bill_count Decimal(18,10), unitprice Decimal(18,10), amount_line Decimal(18,2), tax_classify_code Nvarchar(50), tax_classify_name Nvarchar(50), tax_rate Decimal(18,2), tax_amount Decimal(18,2), free_tax_mark Nvarchar(50), vat_special_management Nvarchar(50), invoice_lp Nvarchar(50), jskey Nvarchar(50), data_type Nvarchar(50))
               </p>
               <p>
-                Insert into @details_list (productcode, productname, spec, unit, bill_count, unitprice, amount_line, tax_classify_code, tax_classify_name, tax_rate, tax_amount, invoice_lp, jskey, data_type)
+                Insert into @details_list (productcode, productname, spec, unit, bill_count, unitprice, amount_line, tax_classify_code, tax_classify_name, tax_rate, tax_amount, free_tax_mark, vat_special_management, invoice_lp, jskey, data_type)
               </p>
               <p>
-                Select '', '', '', '', 0, 0, 0, '', '', 0, 0, '', '', ''
+                Select '', '', '', '', 0, 0, 0, '', '', 0, 0, '', '', '', '', ''
               </p>
               <p className="note">{`/* 鍓嶇疆鑴氭湰 */`}</p>
               <p>
diff --git a/src/menu/components/module/voucher/voucherTable/index.scss b/src/menu/components/module/voucher/voucherTable/index.scss
index c46fe8d..38a139c 100644
--- a/src/menu/components/module/voucher/voucherTable/index.scss
+++ b/src/menu/components/module/voucher/voucherTable/index.scss
@@ -10,9 +10,8 @@
     position: absolute;
     bottom: 10px;
   }
-  >.ant-table-wrapper {
+  .ant-table-wrapper {
     position: relative;
-    z-index: 1;
   }
   .ant-table {
     color: inherit;
diff --git a/src/menu/components/table/normal-table/columns/editColumn/formconfig.jsx b/src/menu/components/table/normal-table/columns/editColumn/formconfig.jsx
index b50848d..49c4c7f 100644
--- a/src/menu/components/table/normal-table/columns/editColumn/formconfig.jsx
+++ b/src/menu/components/table/normal-table/columns/editColumn/formconfig.jsx
@@ -61,6 +61,9 @@
     value: 'colspan',
     text: '鍚堝苟鍒�'
   }, {
+    value: 'extend',
+    text: '鎵╁睍鍒�'
+  }, {
     value: 'index',
     text: '搴忓彿'
   }]
@@ -197,6 +200,95 @@
       }]
     },
     {
+      type: 'radio',
+      key: 'colUnit',
+      label: '鍗曚綅',
+      initVal: card.colUnit || 'day',
+      required: true,
+      options: [{
+        value: 'day',
+        text: '澶�'
+      }, {
+        value: 'hour',
+        text: '灏忔椂'
+      }]
+    },
+    {
+      type: 'number',
+      key: 'shift',
+      label: '鍋忕Щ閲�',
+      initVal: card.shift || 0,
+      min: -1000,
+      max: 1000,
+      decimal: 0,
+      required: true
+    },
+    {
+      type: 'number',
+      key: 'quota',
+      label: '鎸囨爣鏁�',
+      initVal: card.quota || 7,
+      min: 1,
+      max: 1000,
+      decimal: 0,
+      required: true
+    },
+    {
+      type: 'select',
+      key: 'dayFormat',
+      label: '鏍煎紡鍖�',
+      initVal: card.dayFormat || 'M/DD',
+      required: true,
+      options: [{
+        value: 'M/DD',
+        label: 'M/DD锛�4/29锛�'
+      }, {
+        value: 'M-DD',
+        label: 'M-DD锛�4-29锛�'
+      }, {
+        value: 'M鏈圖D鏃�',
+        label: 'M鏈圖D鏃ワ紙4鏈�29鏃ワ級'
+      }, {
+        value: 'M/DD week',
+        label: 'M/DD week锛�4/29 鏄熸湡涓�锛�'
+      }, {
+        value: 'M-DD week',
+        label: 'M-DD week锛�4-29 鏄熸湡涓�锛�'
+      }, {
+        value: 'M鏈圖D鏃� week',
+        label: 'M鏈圖D鏃� week锛�4鏈�29鏃� 鏄熸湡涓�锛�'
+      }]
+    },
+    {
+      type: 'select',
+      key: 'hourFormat',
+      label: '鏍煎紡鍖�',
+      initVal: card.hourFormat || 'H:00',
+      required: true,
+      options: [{
+        value: 'H:00',
+        label: 'H:00锛�15:00锛�'
+      }, {
+        value: 'H point',
+        label: 'H锛�15鐐癸級'
+      }, {
+        value: 'h:00',
+        label: 'h:00锛�3:00 pm锛�'
+      }]
+    },
+    {
+      type: 'text',
+      key: 'supField',
+      label: '涓婄骇瀛楁',
+      initVal: card.supField || '',
+      tooltip: '鏉ユ簮浜庝笂绾х粍浠剁殑瀛楁闆嗭紙涓婄骇缁勪欢涓虹┖鏃朵粠url鍙傛暟涓�夊彇锛夛紝璇ュ瓧娈靛�硷紙鐢ㄩ�楀彿鍒嗛殧锛夊彲鎺у埗鎵╁睍鍒楃殑鍒楀悕銆�',
+      required: false,
+      rules: [{
+        pattern: /^[\u4E00-\u9FA50-9a-zA-Z_]*$/ig,
+        message: '瀛楁鍚嶅彧鍏佽鍖呭惈鏁板瓧銆佸瓧姣嶃�佹眽瀛椾互鍙奯'
+      }]
+    },
+    {
       type: 'number',
       key: 'startTime',
       precision: 0,
diff --git a/src/menu/components/table/normal-table/columns/editColumn/index.jsx b/src/menu/components/table/normal-table/columns/editColumn/index.jsx
index 7104329..afa1f03 100644
--- a/src/menu/components/table/normal-table/columns/editColumn/index.jsx
+++ b/src/menu/components/table/normal-table/columns/editColumn/index.jsx
@@ -20,6 +20,7 @@
   custom: ['label', 'type', 'Align', 'Width', 'blacklist', 'IsSort'],
   action: ['label', 'type', 'Align', 'Width'],
   formula: ['label', 'type', 'Align', 'Hide', 'Width', 'prefix', 'postfix', 'eval', 'formula', 'blacklist'],
+  extend: ['label', 'field', 'type', 'Align', 'Width', 'colUnit', 'shift', 'quota', 'supField'],
   index: ['label', 'type', 'Align', 'Width']
 }
 
@@ -97,6 +98,12 @@
       _options.push('decimal')
     } else if (this.record.type === 'custom' && this.record.IsSort === 'true') {
       _options.push('sortField')
+    } else if (this.record.type === 'extend') {
+      if (this.record.colUnit === 'day') {
+        _options.push('dayFormat')
+      } else {
+        _options.push('hourFormat')
+      }
     }
 
     if (this.record.Hide !== 'true') {
@@ -186,7 +193,7 @@
       }
     } else if (key === 'format' && value === 'percent') {
       this.props.form.setFieldsValue({postfix: '%'})
-    } else if (['perspective', 'eval', 'IsSort', 'textFormat'].includes(key)) {
+    } else if (['perspective', 'eval', 'IsSort', 'textFormat', 'colUnit'].includes(key)) {
       let _options = this.getOptions()
 
       this.setState({
@@ -211,12 +218,12 @@
       if (item.hidden || item.forbid) return
 
       if (item.type === 'text') {
-        let rules = []
+        let rules = item.rules || []
         if (item.key !== 'linkurl') {
-          rules = [{
+          rules.push({
             max: formRule.input.max,
             message: formRule.input.message
-          }]
+          })
         }
         fields.push(
           <Col span={12} key={index}>
@@ -356,7 +363,7 @@
             </Form.Item>
           </Col>
         )
-      } else if (item.type === 'cascader') { // 澶氶��
+      } else if (item.type === 'cascader') {
         fields.push(
           <Col span={12} key={index}>
             <Form.Item label={item.label}>
diff --git a/src/menu/components/table/normal-table/index.jsx b/src/menu/components/table/normal-table/index.jsx
index 6bdefb2..9286025 100644
--- a/src/menu/components/table/normal-table/index.jsx
+++ b/src/menu/components/table/normal-table/index.jsx
@@ -278,11 +278,11 @@
   }
 
   getWrapForms = () => {
-    const { wrap, action, columns, cols } = this.state.card
+    const { card } = this.state
 
     let _actions = []
 
-    cols.forEach(col => {
+    card.cols.forEach(col => {
       if (col.type === 'custom') {
         col.elements.forEach(cell => {
           if (cell.eleType !== 'button') return
@@ -292,7 +292,7 @@
       }
     })
 
-    return getWrapForm(wrap, _actions, columns, action)
+    return getWrapForm(card.wrap, _actions, card.columns, card.action, card.supNodes || [], card.uuid)
   }
 
   updateWrap = (res) => {
@@ -311,7 +311,21 @@
     res.borderRadius = card.wrap.borderRadius || 0
     res.resetContrl = card.wrap.resetContrl || 'init'
 
-    this.updateComponent({...card, wrap: res})
+    let _card = {...card, wrap: res}
+
+    if (res.supNodes) {
+      _card.supNodes = res.supNodes
+      _card.supNodes = _card.supNodes.map(item => {
+        item.componentId = item.nodes[item.nodes.length - 1]
+        return item
+      })
+
+      delete res.supNodes
+    } else {
+      delete _card.supNodes
+    }
+
+    this.updateComponent(_card)
   }
 
   updatecolumn = (config) => {
diff --git a/src/menu/components/table/normal-table/options.jsx b/src/menu/components/table/normal-table/options.jsx
index 413b0cd..22662e1 100644
--- a/src/menu/components/table/normal-table/options.jsx
+++ b/src/menu/components/table/normal-table/options.jsx
@@ -1,7 +1,9 @@
+import MenuUtils from '@/utils/utils-custom.js'
+
 /**
  * @description Wrap琛ㄥ崟閰嶇疆淇℃伅
  */
-export default function (wrap, action = [], columns = [], toolBtns) {
+export default function (wrap, action = [], columns = [], toolBtns, supNodes, id = '') {
   let roleList = sessionStorage.getItem('sysRoles')
   let appType = sessionStorage.getItem('appType')
   let isprint = sessionStorage.getItem('MenuType') === 'billPrint'
@@ -16,6 +18,9 @@
   } else {
     roleList = []
   }
+
+  let menu = window.GLOB.customMenu
+  let modules = MenuUtils.getSupModules(menu.components, id, menu.interfaces)
 
   const wrapForm = [
     {
@@ -302,6 +307,22 @@
     },
     {
       type: 'radio',
+      field: 'supType',
+      label: '涓婄骇绫诲瀷',
+      initval: wrap.supType || 'single',
+      tooltip: '涓婄骇缁勪欢涓哄崟涓�缁勪欢鎴栧涓粍浠躲��',
+      required: false,
+      forbid: appType === 'mob' || isprint,
+      options: [
+        {value: 'single', label: '鍗曠粍浠�'},
+        {value: 'multi', label: '澶氱粍浠�'},
+      ],
+      controlFields: [
+        {field: 'supNodes', values: ['multi']},
+      ]
+    },
+    {
+      type: 'radio',
       field: 'permission',
       label: '鏉冮檺楠岃瘉',
       initval: wrap.permission || (!appType ? 'true' : 'false'),
@@ -346,6 +367,36 @@
       options: roleList,
       forbid: !!appType || isprint
     },
+    {
+      type: 'table',
+      field: 'supNodes',
+      label: '涓婄骇缁勪欢',
+      initval: supNodes,
+      required: true,
+      forbid: appType === 'mob' || isprint,
+      span: 24,
+      actions: ['edit', 'del', 'add', 'move'],
+      columns: [
+        {
+          title: '搴忓彿',
+          dataIndex: '$index',
+          editable: false,
+          required: false,
+          width: '20%'
+        },
+        {
+          title: '缁勪欢',
+          dataIndex: 'nodes',
+          inputType: 'cascader',
+          editable: true,
+          required: true,
+          extends: [{key: 'label', value: 'label'}],
+          width: '50%',
+          render: (text, record) => record.label,
+          options: modules
+        }
+      ]
+    }
   ]
 
   return wrapForm
diff --git a/src/menu/modalconfig/index.jsx b/src/menu/modalconfig/index.jsx
index 8bb149f..6388269 100644
--- a/src/menu/modalconfig/index.jsx
+++ b/src/menu/modalconfig/index.jsx
@@ -135,7 +135,7 @@
         })
       }
 
-      if (item.type === 'switch' || item.type === 'check') {
+      if (['switch', 'check', 'popSelect'].includes(item.type)) {
         _linksupFields.push({
           field: item.field,
           label: item.label
diff --git a/src/menu/modalconfig/index.scss b/src/menu/modalconfig/index.scss
index d73bd57..9449b04 100644
--- a/src/menu/modalconfig/index.scss
+++ b/src/menu/modalconfig/index.scss
@@ -76,8 +76,16 @@
     height: 100%;
     overflow-y: hidden;
     background: #ffffff;
-    .ant-card-head {
-      min-height: 44px;
+    .ant-card {
+      padding-top: 45px;
+      .ant-card-head {
+        min-height: 44px;
+        position: fixed;
+        width: calc(100vw - 235px);
+        top: 48px;
+        z-index: 12;
+        background: #ffffff;
+      }
     }
     .ant-card-head-title {
       padding: 5px 0;
diff --git a/src/tabviews/basetable/index.jsx b/src/tabviews/basetable/index.jsx
index 51bb531..56d1f89 100644
--- a/src/tabviews/basetable/index.jsx
+++ b/src/tabviews/basetable/index.jsx
@@ -213,18 +213,6 @@
       config.components.forEach(component => {
         if (component.type === 'tabs') return
 
-        if (param.$searchkey) {
-          component.search = component.search.map(item => {
-            if (['text', 'select', 'link', 'checkcard'].includes(item.type) && param.$searchkey === item.field.toLowerCase()) {
-              item.initval = param.$searchval
-            }
-  
-            return item
-          })
-
-          component.$searches = Utils.initMainSearch(component.search)
-        }
-
         if (component.$searches.length) {
           component.$main = true
           
@@ -358,6 +346,14 @@
       // 鎼滅储鏉′欢鍒濆鍖�
       Utils.initSearchVal(item)
 
+      if (urlparam.$searchkey) {
+        item.search.forEach(cell => {
+          if (urlparam.$searchkey === cell.field.toLowerCase() && ['text', 'select', 'link', 'checkcard'].includes(cell.type)) {
+            cell.initval = urlparam.$searchval
+          }
+        })
+      }
+
       item.$searches = Utils.initMainSearch(item.search)
 
       let statFields = []
diff --git a/src/tabviews/custom/components/card/data-card/index.jsx b/src/tabviews/custom/components/card/data-card/index.jsx
index e4ad7be..95c8bb2 100644
--- a/src/tabviews/custom/components/card/data-card/index.jsx
+++ b/src/tabviews/custom/components/card/data-card/index.jsx
@@ -42,12 +42,11 @@
     precards: [],
     nextcards: [],
     selected: 'false',
-    supNodes: [],
-    supComs: null,
     pickup: false
   }
 
   loaded = false
+  supModules = []
 
   UNSAFE_componentWillMount () {
     const { config } = this.props
@@ -124,11 +123,6 @@
       _config.wrap.selected = 'false'
     }
 
-    let supComs = null
-    if (_config.wrap.supType === 'multi') {
-      supComs = _config.supNodes.map(item => item.componentId)
-    }
-
     _config.wrap.selStyle = _config.wrap.selStyle || 'active'
     _config.wrap.pagestyle = _config.wrap.pagestyle || 'page'
     _config.wrap.scale = _config.wrap.scale === 'true' ? 'scale' : ''
@@ -197,7 +191,6 @@
     this.setState({
       pageSize: _config.setting.pageSize || 10,
       pageOptions,
-      supComs,
       selected,
       precards,
       nextcards,
@@ -412,14 +405,14 @@
    * @param {*} btn        // 鎵ц鐨勬寜閽�
    */
   refreshByButtonResult = (menuId, position, btn, id = '', lines) => {
-    const { config, BID, supComs, supNodes } = this.state
+    const { config, BID } = this.state
 
     if (config.uuid !== menuId) return
 
-    if (supComs) {
-      if (position === 'mainline' || position === 'popclose') { // 涓昏〃鍒锋柊锛屽幓闄ゅ悓姝ュ埛鏂扮粍浠�
-        let supNode = supNodes[supNodes.length - 1]
-        supComs.forEach((item, i) => {
+    if (config.supNodes) {
+      if (position === 'mainline' || position === 'popclose') {
+        let supNode = this.supModules[this.supModules.length - 1]
+        config.supNodes.forEach((item, i) => {
           setTimeout(() => {
             if (supNode && supNode.key === item) {
               MKEmitter.emit('reloadData', item, supNode.value)
@@ -678,28 +671,26 @@
   }
 
   resetParentParam = (MenuID, id, data) => {
-    const { config, supComs } = this.state
+    const { config } = this.state
 
-    if (supComs) {
-      if (!supComs.includes(MenuID)) return
-      let supNodes = this.state.supNodes.filter(item => item.key !== MenuID)
+    if (config.supNodes) {
+      if (!config.supNodes.includes(MenuID)) return
+      this.supModules = this.supModules.filter(item => item.key !== MenuID)
       let bid = ''
       let _data = null
 
       if (id) {
-        supNodes.push({key: MenuID, value: id, data})
+        this.supModules.push({key: MenuID, value: id, data})
       }
-      if (supNodes.length > 0) {
-        bid = supNodes[supNodes.length - 1].value
-        _data = supNodes[supNodes.length - 1].data
+      if (this.supModules.length > 0) {
+        bid = this.supModules[this.supModules.length - 1].value
+        _data = this.supModules[this.supModules.length - 1].data
       }
 
       if (bid !== this.state.BID || bid !== '') {
-        this.setState({ BID: bid, BData: _data, pageIndex: 1, supNodes }, () => {
+        this.setState({ BID: bid, BData: _data, pageIndex: 1 }, () => {
           this.loadData()
         })
-      } else {
-        this.setState({ supNodes })
       }
     } else {
       if (!config.setting.supModule || config.setting.supModule !== MenuID) return
diff --git a/src/tabviews/custom/components/module/invoice/index.jsx b/src/tabviews/custom/components/module/invoice/index.jsx
index e0ca568..363794d 100644
--- a/src/tabviews/custom/components/module/invoice/index.jsx
+++ b/src/tabviews/custom/components/module/invoice/index.jsx
@@ -469,7 +469,7 @@
     let tax = 0
 
     let lines = details.map(line => {
-      let _sql = `Select '${line.productcode}', '${line.productname}', '${line.spec}', '${line.unit}', ${line.bill_count}, ${line.unitprice}, ${line.amount_line}, '${line.tax_classify_code}', '${line.tax_classify_name}', ${line.tax_rate}, ${line.tax_amount}, '${line.invoice_lp || ''}', '${line.uuid}'`
+      let _sql = `Select '${line.productcode}', '${line.productname}', '${line.spec}', '${line.unit}', ${line.bill_count}, ${line.unitprice}, ${line.amount_line}, '${line.tax_classify_code}', '${line.tax_classify_name}', ${line.tax_rate}, ${line.tax_amount}, '${line.free_tax_mark || ''}', '${line.vat_special_management || ''}', '${line.invoice_lp || ''}', '${line.uuid}'`
       let data_type = 'add'
 
       price += line.amount_line * 100
@@ -494,7 +494,7 @@
 
     if (options.length) {
       options.forEach(line => {
-        lines.push(`Select '${line.productcode}', '${line.productname}', '${line.spec}', '${line.unit}', ${line.bill_count}, ${line.unitprice}, ${line.amount_line}, '${line.tax_classify_code}', '${line.tax_classify_name}', ${line.tax_rate}, ${line.tax_amount}, '${line.invoice_lp || ''}', '${line.uuid}', 'del'`)
+        lines.push(`Select '${line.productcode}', '${line.productname}', '${line.spec}', '${line.unit}', ${line.bill_count}, ${line.unitprice}, ${line.amount_line}, '${line.tax_classify_code}', '${line.tax_classify_name}', ${line.tax_rate}, ${line.tax_amount}, '${line.free_tax_mark || ''}', '${line.vat_special_management || ''}', '${line.invoice_lp || ''}', '${line.uuid}', 'del'`)
       })
     }
 
@@ -520,9 +520,9 @@
 
       /* 鍙戠エ鏄庣粏涓存椂琛� */
 
-      Declare @details_list table (productcode Nvarchar(50), productname Nvarchar(50), spec Nvarchar(50), unit Nvarchar(50), bill_count Decimal(18,10), unitprice Decimal(18,10), amount_line Decimal(18,2), tax_classify_code Nvarchar(50), tax_classify_name Nvarchar(50), tax_rate Decimal(18,2), tax_amount Decimal(18,2), invoice_lp Nvarchar(50), jskey Nvarchar(50), data_type Nvarchar(50))
+      Declare @details_list table (productcode Nvarchar(50), productname Nvarchar(50), spec Nvarchar(50), unit Nvarchar(50), bill_count Decimal(18,10), unitprice Decimal(18,10), amount_line Decimal(18,2), tax_classify_code Nvarchar(50), tax_classify_name Nvarchar(50), tax_rate Decimal(18,2), tax_amount Decimal(18,2), free_tax_mark Nvarchar(50), vat_special_management Nvarchar(50), invoice_lp Nvarchar(50), jskey Nvarchar(50), data_type Nvarchar(50))
 
-      Insert into @details_list (productcode, productname, spec, unit, bill_count, unitprice, amount_line, tax_classify_code, tax_classify_name, tax_rate, tax_amount, invoice_lp, jskey, data_type)
+      Insert into @details_list (productcode, productname, spec, unit, bill_count, unitprice, amount_line, tax_classify_code, tax_classify_name, tax_rate, tax_amount, free_tax_mark, vat_special_management, invoice_lp, jskey, data_type)
 
       ${lines}
 
diff --git a/src/tabviews/custom/components/module/invoice/invoiceTable/index.jsx b/src/tabviews/custom/components/module/invoice/invoiceTable/index.jsx
index 46c3243..310b26f 100644
--- a/src/tabviews/custom/components/module/invoice/invoiceTable/index.jsx
+++ b/src/tabviews/custom/components/module/invoice/invoiceTable/index.jsx
@@ -321,6 +321,8 @@
         item.unitprice = prod.unitprice
         item.tax_rate = prod.tax_rate || 0
         item.tax_name = prod.tax_rate * 100 + '%'
+        item.free_tax_mark = prod.free_tax_mark || ''
+        item.vat_special_management = prod.vat_special_management || ''
 
         if (prod.vat_special_management && prod.free_tax_mark === 'true') {
           item.tax_name = prod.vat_special_management
diff --git a/src/tabviews/custom/components/module/voucher/voucherTable/index.scss b/src/tabviews/custom/components/module/voucher/voucherTable/index.scss
index 131b529..b25955b 100644
--- a/src/tabviews/custom/components/module/voucher/voucherTable/index.scss
+++ b/src/tabviews/custom/components/module/voucher/voucherTable/index.scss
@@ -10,9 +10,8 @@
     position: absolute;
     bottom: 10px;
   }
-  >.ant-table-wrapper {
+  .ant-table-wrapper {
     position: relative;
-    z-index: 1;
   }
   .ant-table {
     color: inherit;
diff --git a/src/tabviews/custom/components/share/normalTable/index.scss b/src/tabviews/custom/components/share/normalTable/index.scss
index 805be57..a7688af 100644
--- a/src/tabviews/custom/components/share/normalTable/index.scss
+++ b/src/tabviews/custom/components/share/normalTable/index.scss
@@ -24,9 +24,8 @@
     position: absolute;
     bottom: 10px;
   }
-  >.ant-table-wrapper {
+  .ant-table-wrapper {
     position: relative;
-    z-index: 1;
   }
   .ant-table {
     color: inherit;
diff --git a/src/tabviews/custom/components/table/edit-table/normalTable/index.scss b/src/tabviews/custom/components/table/edit-table/normalTable/index.scss
index 1fdde89..52f01f0 100644
--- a/src/tabviews/custom/components/table/edit-table/normalTable/index.scss
+++ b/src/tabviews/custom/components/table/edit-table/normalTable/index.scss
@@ -7,9 +7,8 @@
   --mk-table-font-size: 14px;
   --mk-table-font-weight: normal;
 
-  >.ant-table-wrapper {
+  .ant-table-wrapper {
     position: relative;
-    // z-index: 1;
   }
   .ant-table-placeholder {
     border-top-color: var(--mk-table-border-color);
diff --git a/src/tabviews/custom/components/table/normal-table/index.jsx b/src/tabviews/custom/components/table/normal-table/index.jsx
index 766cfd5..c2ba689 100644
--- a/src/tabviews/custom/components/table/normal-table/index.jsx
+++ b/src/tabviews/custom/components/table/normal-table/index.jsx
@@ -43,6 +43,7 @@
   }
 
   loaded = false
+  supModules = []
 
   /**
    * @description 鍒濆鍖栧鐞�
@@ -754,20 +755,41 @@
   }
 
   resetParentParam = (MenuID, id, data) => {
-    const { setting } = this.state
+    const { config, setting } = this.state
 
-    if (!setting.supModule || setting.supModule !== MenuID) return
+    if (config.supNodes) {
+      if (!config.supNodes.includes(MenuID)) return
+      this.supModules = this.supModules.filter(item => item.key !== MenuID)
+      let bid = ''
+      let _data = null
 
-    if (id !== this.state.BID || id !== '') {
-      this.setState({
-        pageIndex: 1,
-        BID: id,
-        BData: data
-      }, () => {
-        if (!setting.checkBid) {
+      if (id) {
+        this.supModules.push({key: MenuID, value: id, data})
+      }
+      if (this.supModules.length > 0) {
+        bid = this.supModules[this.supModules.length - 1].value
+        _data = this.supModules[this.supModules.length - 1].data
+      }
+
+      if (bid !== this.state.BID || bid !== '') {
+        this.setState({ BID: bid, BData: _data, pageIndex: 1 }, () => {
           this.loadmaindata(true, 'true')
-        }
-      })
+        })
+      }
+    } else {
+      if (!setting.supModule || setting.supModule !== MenuID) return
+  
+      if (id !== this.state.BID || id !== '') {
+        this.setState({
+          pageIndex: 1,
+          BID: id,
+          BData: data
+        }, () => {
+          if (!setting.checkBid) {
+            this.loadmaindata(true, 'true')
+          }
+        })
+      }
     }
   }
 
@@ -782,16 +804,41 @@
 
     if (config.uuid !== menuId) return
 
-    if (position === 'line' || position === 'line_grid') {
-      if (lines && lines.length === 1) {
-        this.loadLinedata(lines[0].$$uuid, position)
+    if (config.supNodes) {
+      if (position === 'mainline' || position === 'popclose') {
+        let supNode = this.supModules[this.supModules.length - 1]
+        config.supNodes.forEach((item, i) => {
+          setTimeout(() => {
+            if (supNode && supNode.key === item) {
+              MKEmitter.emit('reloadData', item, supNode.value)
+            } else {
+              MKEmitter.emit('reloadData', item)
+            }
+          }, i * 10)
+        })
+      } else {
+        if (position === 'line' || position === 'line_grid') {
+          if (lines && lines.length === 1) {
+            this.loadLinedata(lines[0].$$uuid, position)
+          } else {
+            this.reloadtable(btn, id)
+          }
+        } else {
+          this.reloadtable(btn, id)
+        }
+      }
+    } else {
+      if (position === 'line' || position === 'line_grid') {
+        if (lines && lines.length === 1) {
+          this.loadLinedata(lines[0].$$uuid, position)
+        } else {
+          this.reloadtable(btn, id)
+        }
+      } else if ((position === 'mainline' || position === 'popclose') && config.setting.supModule && BID) { // 鍒锋柊婧愮粍浠舵椂锛岄檮甯﹀埛鏂颁笂绾ц涓庡綋鍓嶇粍浠�
+        MKEmitter.emit('reloadData', config.setting.supModule, BID)
       } else {
         this.reloadtable(btn, id)
       }
-    } else if ((position === 'mainline' || position === 'popclose') && config.setting.supModule && BID) { // 鍒锋柊婧愮粍浠舵椂锛岄檮甯﹀埛鏂颁笂绾ц涓庡綋鍓嶇粍浠�
-      MKEmitter.emit('reloadData', config.setting.supModule, BID)
-    } else {
-      this.reloadtable(btn, id)
     }
   }
 
diff --git a/src/tabviews/custom/index.jsx b/src/tabviews/custom/index.jsx
index b8acc23..da25be6 100644
--- a/src/tabviews/custom/index.jsx
+++ b/src/tabviews/custom/index.jsx
@@ -267,18 +267,6 @@
       config.components.forEach(component => {
         if (component.type !== 'search') return
 
-        if (param.$searchkey) {
-          component.search = component.search.map(item => {
-            if (['text', 'select', 'link', 'checkcard'].includes(item.type) && param.$searchkey === item.field.toLowerCase()) {
-              item.initval = param.$searchval
-            }
-  
-            return item
-          })
-
-          component.$searches = Utils.initMainSearch(component.search)
-        }
-
         window.GLOB.SearchBox.set(MenuID, component.$searches)
 
         if (component.$s_req) {
@@ -566,8 +554,14 @@
         item.type = 'card'
       }
 
-      if (item.wrap && item.wrap.supType === 'multi') { // 鏁版嵁鍗″涓婄骇缁勪欢
-        item.setting.supModule = item.supNodes[0].componentId
+      if (item.wrap && item.wrap.supType === 'multi') { // 鏁版嵁鍗°�乼able澶氫笂绾х粍浠�
+        item.supNodes = item.supNodes.map(node => node.componentId)
+        if (item.supNodes[0]) {
+          item.setting.supModule = item.supNodes[0]
+        } else {
+          item.supNodes = null
+          item.setting.supModule = ''
+        }
       } else if (item.setting && item.setting.supModule && typeof(item.setting.supModule) !== 'string') {
         let pid = item.setting.supModule.pop()
         if (pid && pid !== 'empty') {
@@ -584,6 +578,14 @@
       // 鎼滅储鏉′欢鍒濆鍖�
       if (item.search) {
         Utils.initSearchVal(item)
+
+        if (urlparam.$searchkey) {
+          item.search.forEach(cell => {
+            if (urlparam.$searchkey === cell.field.toLowerCase() && ['text', 'select', 'link', 'checkcard'].includes(cell.type)) {
+              cell.initval = urlparam.$searchval
+            }
+          })
+        }
 
         item.$searches = Utils.initMainSearch(item.search)
 
@@ -958,7 +960,7 @@
     if (cell.syncComponentId) {
       if (cell.syncComponentId === item.setting.supModule) {
         cell.syncComponentId = ''
-        if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') {
+        if (['line', 'grid', 'line_grid'].includes(cell.execSuccess)) {
           cell.execSuccess = 'mainline'
         }
       } else if (cell.syncComponentId === 'multiComponent') {
@@ -966,8 +968,17 @@
           return m.syncComId.pop() || ''
         })
 
-        if (item.setting.supModule && ids.includes(item.setting.supModule)) {
-          if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') {
+        if (item.supNodes) {
+          item.supNodes.forEach(node => {
+            if (!ids.includes(node)) return
+
+            if (['line', 'grid', 'line_grid'].includes(cell.execSuccess)) {
+              cell.execSuccess = 'mainline'
+            }
+            ids = ids.filter(id => id !== node)
+          })
+        } else if (item.setting.supModule && ids.includes(item.setting.supModule)) {
+          if (['line', 'grid', 'line_grid'].includes(cell.execSuccess)) {
             cell.execSuccess = 'mainline'
           }
           ids = ids.filter(id => id !== item.setting.supModule)
diff --git a/src/tabviews/custom/popview/index.jsx b/src/tabviews/custom/popview/index.jsx
index 83c7cdf..935f765 100644
--- a/src/tabviews/custom/popview/index.jsx
+++ b/src/tabviews/custom/popview/index.jsx
@@ -314,8 +314,14 @@
         }
       }
 
-      if (item.wrap && item.wrap.supType === 'multi') { // 鏁版嵁鍗″涓婄骇缁勪欢
-        item.setting.supModule = item.supNodes[0].componentId
+      if (item.wrap && item.wrap.supType === 'multi') { // 鏁版嵁鍗°�乼able澶氫笂绾х粍浠�
+        item.supNodes = item.supNodes.map(node => node.componentId)
+        if (item.supNodes[0]) {
+          item.setting.supModule = item.supNodes[0]
+        } else {
+          item.supNodes = null
+          item.setting.supModule = ''
+        }
       } else if (item.setting && item.setting.supModule && typeof(item.setting.supModule) !== 'string') {
         let pid = item.setting.supModule.pop()
         if (pid && pid !== 'empty') {
@@ -651,7 +657,7 @@
     if (cell.syncComponentId) {
       if (cell.syncComponentId === item.setting.supModule) {
         cell.syncComponentId = ''
-        if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') {
+        if (['line', 'grid', 'line_grid'].includes(cell.execSuccess)) {
           cell.execSuccess = 'mainline'
         }
       } else if (cell.syncComponentId === 'multiComponent') {
@@ -659,8 +665,17 @@
           return m.syncComId.pop() || ''
         })
 
-        if (item.setting.supModule && ids.includes(item.setting.supModule)) {
-          if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') {
+        if (item.supNodes) {
+          item.supNodes.forEach(node => {
+            if (!ids.includes(node)) return
+
+            if (['line', 'grid', 'line_grid'].includes(cell.execSuccess)) {
+              cell.execSuccess = 'mainline'
+            }
+            ids = ids.filter(id => id !== node)
+          })
+        } else if (item.setting.supModule && ids.includes(item.setting.supModule)) {
+          if (['line', 'grid', 'line_grid'].includes(cell.execSuccess)) {
             cell.execSuccess = 'mainline'
           }
           ids = ids.filter(id => id !== item.setting.supModule)
diff --git a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
index c0fd989..f16a983 100644
--- a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -780,7 +780,7 @@
         const wb = XLSX.utils.book_new()
         XLSX.utils.book_append_sheet(wb, ws, btn.verify.sheet || 'Sheet1')
   
-        XLSX.writeFile(wb, `${btn.$menuName || ''}${moment().format('YYYYMMDDHHmmss')}.xlsx`)
+        XLSX.writeFile(wb, `${btn.verify.excelName || btn.$menuName || ''}${moment().format('YYYYMMDDHHmmss')}.xlsx`)
   
         this.execSuccess({ErrCode: ErrCode || 'S', message: msg || '瀵煎嚭鎴愬姛锛�'})
       }
diff --git a/src/tabviews/zshare/normalTable/index.scss b/src/tabviews/zshare/normalTable/index.scss
index 75c4770..c65a3ae 100644
--- a/src/tabviews/zshare/normalTable/index.scss
+++ b/src/tabviews/zshare/normalTable/index.scss
@@ -10,11 +10,8 @@
     position: absolute;
     bottom: 40px;
   }
-  >.ant-table-wrapper {
-    position: relative;
-    z-index: 1;
-  }
   .ant-table-wrapper {
+    position: relative;
     color: rgba(0, 0, 0, 0.65);
     font-size: 14px;
     .ant-table {
diff --git a/src/templates/modalconfig/index.jsx b/src/templates/modalconfig/index.jsx
index c8b2d92..3f2571f 100644
--- a/src/templates/modalconfig/index.jsx
+++ b/src/templates/modalconfig/index.jsx
@@ -264,7 +264,7 @@
         })
       }
 
-      if (item.type === 'switch' || item.type === 'check') {
+      if (['switch', 'check', 'popSelect'].includes(item.type)) {
         _linksupFields.push({
           field: item.field,
           label: item.label
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx
index f8240c3..02f31bc 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx
@@ -248,6 +248,18 @@
             </Col> : null}
             {btnType !== 'print' && excelHandle !== 'true' ? <Col span={8}>
               <Form.Item label={
+                <Tooltip placement="topLeft" title="瀵煎嚭excel鐨勬枃浠跺悕锛岄粯璁や负鑿滃崟鍚�+缁勪欢鍚嶃��">
+                  <QuestionCircleOutlined className="mk-form-tip" />
+                  鏂囦欢鍚�
+                </Tooltip>
+              }>
+                {getFieldDecorator('excelName', {
+                  initialValue: setting.excelName || ''
+                })(<Input autoComplete="off" />)}
+              </Form.Item>
+            </Col> : null}
+            {btnType !== 'print' && excelHandle !== 'true' ? <Col span={8}>
+              <Form.Item label={
                 <Tooltip placement="topLeft" title="瀵煎嚭excel涓伐浣滆〃鍚嶇О锛岄粯璁や负Sheet1銆�">
                   <QuestionCircleOutlined className="mk-form-tip" />
                   宸ヤ綔琛�
@@ -255,7 +267,7 @@
               }>
                 {getFieldDecorator('sheet', {
                   initialValue: setting.sheet || ''
-                })(<Input placeholder="" autoComplete="off" />)}
+                })(<Input autoComplete="off" />)}
               </Form.Item>
             </Col> : null}
             {btnType !== 'print' && excelHandle !== 'true' ? <Col span={8}>
diff --git a/src/utils/utils-custom.js b/src/utils/utils-custom.js
index 0bbb449..841817d 100644
--- a/src/utils/utils-custom.js
+++ b/src/utils/utils-custom.js
@@ -576,7 +576,16 @@
             return cell
           })
         }
-      } else if (item.type === 'table' && item.cols) {
+      } else if (item.type === 'table') {
+        if (item.supNodes && item.supNodes.length > 0) {
+          item.supNodes = item.supNodes.map(cell => {
+            cell.nodes = cell.nodes.map(n => md5(commonId + n))
+            cell.componentId = cell.nodes[cell.nodes.length - 1]
+
+            return cell
+          })
+        }
+
         let loopCol = (cols) => {
           return cols.map(col => {
             if (col.type === 'action') {
@@ -614,7 +623,7 @@
           })
         }
 
-        item.cols = loopCol(item.cols)
+        item.cols = loopCol(item.cols || [])
 
         if (item.colsCtrls) {
           item.colsCtrls = item.colsCtrls.map(col => {
@@ -882,7 +891,7 @@
           return cell
         })
       }
-    } else if (item.type === 'table' && item.cols) {
+    } else if (item.type === 'table') {
       let loopCol = (cols) => {
         return cols.map(col => {
           if (col.type === 'action') {
@@ -923,7 +932,7 @@
         })
       }
 
-      item.cols = loopCol(item.cols)
+      item.cols = loopCol(item.cols || [])
 
       if (item.colsCtrls) {
         item.colsCtrls = item.colsCtrls.map(col => {
@@ -1711,7 +1720,7 @@
       } else if (!card.setting.supModule) {
         errors.push({ level: 0, detail: '鏈缃笂绾х粍浠讹紒'})
       }
-    } else if (card.type === 'card' && card.subtype === 'datacard') { // 鏁版嵁鍗★紝鍙兘鏈夊涓婄骇
+    } else if ((card.type === 'card' && card.subtype === 'datacard') || card.subtype === 'normaltable') { // 鏁版嵁鍗°�乼able锛屽彲鑳芥湁澶氫笂绾�
       if (card.wrap.supType !== 'multi' && !card.setting.supModule) {
         errors.push({ level: 0, detail: '鏈缃笂绾х粍浠讹紒'})
       }

--
Gitblit v1.8.0