From ae46c8e640ed64abd7605b289554377e0cdc0cb7 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 04 十月 2023 22:10:30 +0800
Subject: [PATCH] 2023-10-04

---
 src/tabviews/custom/components/share/normalTable/index.jsx |  168 ++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 128 insertions(+), 40 deletions(-)

diff --git a/src/tabviews/custom/components/share/normalTable/index.jsx b/src/tabviews/custom/components/share/normalTable/index.jsx
index 147ae63..849c996 100644
--- a/src/tabviews/custom/components/share/normalTable/index.jsx
+++ b/src/tabviews/custom/components/share/normalTable/index.jsx
@@ -6,16 +6,13 @@
 
 import asyncComponent from '@/utils/asyncComponent'
 import { getMark } from '@/utils/utils.js'
-import MkIcon from '@/components/mk-icon'
 import MKEmitter from '@/utils/events.js'
-import zhCN from '@/locales/zh-CN/main.js'
-import enUS from '@/locales/en-US/main.js'
 import Encrypts from '@/components/encrypts'
-import '@/assets/css/table.scss'
 import './index.scss'
 
 const { Paragraph } = Typography
 const Video = asyncComponent(() => import('@/components/video'))
+const MkIcon = asyncComponent(() => import('@/components/mk-icon'))
 const MkPicture = asyncComponent(() => import('@/components/mkPicture'))
 const CardCellComponent = asyncComponent(() => import('@/tabviews/custom/components/card/cardcellList'))
 const PicRadio = {
@@ -255,7 +252,7 @@
         <div>
           {photos.map((url, i) => (
             <Col key={i} span={col.span || 24}>
-              <MkPicture style={{paddingTop}} scale={scale} url={url} urls={photos}/>
+              <MkPicture style={{paddingTop, backgroundSize: col.backgroundSize || 'cover'}} scale={scale} url={url} urls={photos}/>
             </Col>
           ))}
         </div>
@@ -333,29 +330,46 @@
       )
     } else if (col.type === 'formula') {
       let content = col.formula
-      Object.keys(record).forEach(key => {
-        let reg = new RegExp('@' + key + '@', 'ig')
-        content = content.replace(reg, record[key])
-      })
 
-      if (col.eval !== 'false') {
+      if (col.eval === 'func') {
         try {
           // eslint-disable-next-line
-          content = eval(content)
+          let func = new Function('data', col.formula)
+          content = func([record])
         } catch (e) {
+          console.warn(e)
           content = ''
+        }
+      } else {
+        Object.keys(record).forEach(key => {
+          let reg = new RegExp('@' + key + '@', 'ig')
+          content = content.replace(reg, record[key])
+        })
+        if (col.eval !== 'false') {
+          try {
+            // eslint-disable-next-line
+            content = eval(content)
+          } catch (e) {
+            console.info(content)
+            console.warn(e)
+            content = ''
+          }
+  
+          if (col.round && typeof(content) === 'number') {
+            content = Math.round(content * col.round) / col.round
+            content = content.toFixed(col.decimal)
+          }
         }
       }
 
       content = content === undefined ? '' : content
 
-      if (content !== '') {
+      if (col.eval === 'func') {
+        content = <span dangerouslySetInnerHTML={{__html: content}}></span>
+      } else if (content !== '') {
         content = `${col.prefix || ''}${content}${col.postfix || ''}`
-
-        if (col.eval === 'false') {
-          content = content.replace(/\n/ig, '<br/>').replace(/\s/ig, '&nbsp;')
-          content = <span dangerouslySetInnerHTML={{__html: content}}></span>
-        }
+        content = content.replace(/\n/ig, '<br/>').replace(/\s/ig, '&nbsp;')
+        content = <span dangerouslySetInnerHTML={{__html: content}}></span>
       }
 
       if (col.marks) {
@@ -384,11 +398,6 @@
       resProps.children = (
         <CardCellComponent data={record} cards={config} elements={col.elements}/>
       )
-    } else if (col.type === 'action') {
-      style.padding = '0px 5px'
-      resProps.children = (
-        <CardCellComponent data={record} cards={config} elements={col.elements}/>
-      )
     }
 
     if (resProps.rowSpan === 0) return null
@@ -413,7 +422,6 @@
   }
 
   state = {
-    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
     tableId: '',          // 琛ㄦ牸ID
     selectedRowKeys: [],  // 琛ㄦ牸涓�変腑琛�
     pageIndex: 1,         // 鍒濆椤甸潰绱㈠紩
@@ -433,7 +441,7 @@
     let rowspans = []
     let orderfields = {}
 
-    if (window.GLOB.dataFormat && !window.GLOB.mkHS) {
+    if (window.GLOB.dataFormat) {
       _format = true
 
       if (window.GLOB.memberLevel >= 30) {
@@ -481,7 +489,7 @@
               onCell: record => ({
                 record,
                 col: item,
-                config: item.type === 'custom' || item.type === 'action' ? {setting, columns: fields} : null,
+                config: item.type === 'custom' ? {setting, columns: fields} : null,
                 triggerLink: this.triggerLink
               })
             }
@@ -505,6 +513,8 @@
           width: item.Width || 120
         })
       })
+
+      orderfields = null
     }
 
     if (rowspans.length === 0) {
@@ -615,10 +625,32 @@
     this.props.refreshdata({pageIndex})
   }
 
-  mkCheckTopLine = (menuId, id) => {
+  mkCheckTopLine = (menuId, id, type) => {
     const { MenuID, data, setting } = this.props
 
     if (MenuID !== menuId || !data || data.length === 0) return
+
+    if (type === 'sign') {
+      let index = ''
+      let keys = []
+      let items = []
+      data.forEach((item, i) => {
+        if (!item.$disabled && item.selected === 'true') {
+          items.push(item)
+          keys.push(i)
+          index = i
+        }
+      })
+  
+      this.changedata(index)
+      this.setState({ selectedRowKeys: keys, activeIndex: index })
+      this.props.chgSelectData(items)
+
+      if (setting.$hasSyncModule) {
+        MKEmitter.emit('syncBalconyData', MenuID, items, data.length === keys.length)
+      }
+      return
+    }
 
     let index = 0
     if (id) {
@@ -714,10 +746,7 @@
     }
   }
 
-  /**
-   * 
-   */
-  onSelectChange = selectedRowKeys => {
+  onSelectChange = (selectedRowKeys, e) => {
     const { setting, MenuID, data } = this.props
 
     let index = ''
@@ -776,7 +805,7 @@
     }
 
     let selects = this.props.data.filter((item, _index) => newkeys.includes(_index) && !item.$disabled)
-    
+
     this.props.chgSelectData(selects)
 
     if (setting.$hasSyncModule) {
@@ -795,7 +824,9 @@
       pickup: false
     })
 
-    sorter.field = orderfields[sorter.field] || ''
+    if (orderfields) {
+      sorter.field = orderfields[sorter.field] || ''
+    }
 
     this.props.refreshdata(pagination, filters, sorter)
   }
@@ -816,13 +847,52 @@
     MKEmitter.emit('resetSelectLine', MenuID, _id, _data)
   }
 
-  resetTable = (id, repage) => {
-    const { MenuID } = this.props
+  resetTable = (id, type, Index) => {
+    const { MenuID, setting, data } = this.props
 
     if (id !== MenuID) return
 
-    if (repage === 'false') {
+    if (type === 'delete') {
+      let selectKeys = fromJS(this.state.selectedRowKeys).toJS()
+      let activeKey = this.state.activeIndex
+
+      let trans = activeKey === Index
+      let _item = null
+      let selects = []
+      
+      if (setting.tableType) {
+        selectKeys = selectKeys.filter(key => key !== Index)
+        selectKeys = selectKeys.map(key => key > Index ? key - 1 : key)
+
+        selects = selectKeys.map(key => data[key]).filter(Boolean)
+
+        activeKey = selectKeys.length ? selectKeys[selectKeys.length - 1] : null
+
+        if (trans && selects.length) {
+          _item = selects[selects.length - 1]
+        }
+      }
+
+      this.setState({ selectedRowKeys: selectKeys, activeIndex: activeKey })
+
+      this.props.chgSelectData(selects)
+
+      if (trans) {
+        MKEmitter.emit('resetSelectLine', MenuID, (_item ? _item.$$uuid : ''), _item)
+      }
+
+      if (setting.$hasSyncModule) {
+        MKEmitter.emit('syncBalconyData', MenuID, selects, data.length === selects.length)
+      }
+    } else if (type === 'false') {
       this.setState({
+        selectedRowKeys: [],
+        activeIndex: null,
+        pickup: false
+      })
+    } else if (type === 'repage') {
+      this.setState({
+        pageIndex: Index,
         selectedRowKeys: [],
         activeIndex: null,
         pickup: false
@@ -908,7 +978,7 @@
 
   render() {
     const { setting, statFValue, lineMarks, data } = this.props
-    const { selectedRowKeys, activeIndex, pickup, tableId, pageOptions } = this.state
+    const { selectedRowKeys, activeIndex, pickup, tableId, pageOptions, columns } = this.state
 
     // 璁剧疆琛ㄦ牸閫夋嫨灞炴�э細鍗曢�夈�佸閫夈�佷笉鍙��
     let rowSelection = null
@@ -947,7 +1017,7 @@
         pageSizeOptions: pageOptions,
         showSizeChanger: true,
         total: this.props.total || 0,
-        showTotal: (total, range) => `${range[0]}-${range[1]} ${this.state.dict['main.pagination.of']} ${total} ${this.state.dict['main.pagination.items']}`
+        showTotal: (total, range) => `${range[0]}-${range[1]} 鍏� ${total} 鏉
       }
     }
 
@@ -958,9 +1028,26 @@
     }
 
     let height = setting.height || false
+    if (height && height <= 100) {
+      height = height + 'vh'
+    }
+    let loading = this.props.loading
+    if (setting.mask === 'hidden') {
+      loading = false
+    }
+
+    let fixed = ''
+    if (setting.colfixed && setting.colfixed.length) {
+      if (setting.colfixed.includes('first')) {
+        fixed = 'mk-fixed-first-col'
+      }
+      if (setting.colfixed.includes('last')) {
+        fixed += ' mk-fixed-last-col'
+      }
+    }
 
     return (
-      <div className={`normal-custom-table ${setting.tableHeader || ''} ${height ? 'fixed-height' : ''} ${setting.mode || ''}`} id={tableId}>
+      <div className={`normal-custom-table ${setting.tableHeader || ''} ${height ? 'fixed-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || 'middle'} table-col-${columns.length} ${fixed}`} id={tableId}>
         {(setting.tableType === 'radio' || setting.tableType === 'checkbox') && data && data.length > 0 ?
           <Switch title="鏀惰捣" className="main-pickup" checkedChildren="寮�" unCheckedChildren="鍏�" checked={pickup} onChange={this.pickupChange} /> : null
         }
@@ -969,14 +1056,15 @@
           size={setting.size || 'middle'}
           bordered={setting.bordered !== 'false'}
           rowSelection={rowSelection}
-          columns={this.state.columns}
+          columns={columns}
           dataSource={_data}
-          loading={this.props.loading}
+          loading={loading}
           scroll={{ x: '100%', y: height }}
           onRow={(record, index) => {
             return {
               lineMarks: setting.tableMode !== 'fast' ? lineMarks : null,
               data: record,
+              title: setting.tipField ? record[setting.tipField] : '',
               className: index === activeIndex ? ' mk-row-active ' : '',
               onClick: () => {this.changeRow(record, index)},
               onDoubleClick: () => {this.doubleClickLine(record)}

--
Gitblit v1.8.0