From a7813a33fc5f60ea995dfe0f09f52243e2ccfbb2 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 22 二月 2024 16:28:11 +0800
Subject: [PATCH] 2024-02-22

---
 src/tabviews/zshare/actionList/excelInbutton/excelin/index.jsx       |  108 ++++++++++++++-------------
 src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx |   90 ++++++++++++++++------
 src/tabviews/zshare/actionList/excelInbutton/index.jsx               |   40 ++-------
 3 files changed, 130 insertions(+), 108 deletions(-)

diff --git a/src/tabviews/zshare/actionList/excelInbutton/excelin/index.jsx b/src/tabviews/zshare/actionList/excelInbutton/excelin/index.jsx
index ee748ae..80e3562 100644
--- a/src/tabviews/zshare/actionList/excelInbutton/excelin/index.jsx
+++ b/src/tabviews/zshare/actionList/excelInbutton/excelin/index.jsx
@@ -1,6 +1,5 @@
 import React, { Component } from 'react'
 import PropTypes from 'prop-types'
-import { notification } from 'antd'
 import * as XLSX from 'sheetjs-style'
 import Utils from '@/utils/utils.js'
 import './index.scss'
@@ -27,10 +26,6 @@
   onImportExcel = file => {
     const { btn } = this.props
 
-    let btnColumns = btn.verify.columns.filter(option => option.import !== 'init')
-    let columns = btnColumns.map(option => option.Column)
-    let range = btn.verify.range || 0
-
     // excel鏁版嵁澶勭悊
     const { files } = file.target
     const fileReader = new FileReader()
@@ -42,50 +37,64 @@
         // 浠ヤ簩杩涘埗娴佹柟寮忚鍙栧緱鍒版暣浠絜xcel琛ㄦ牸瀵硅薄
         const workbook = XLSX.read(result, { type: 'binary' })
 
-        let errors = null
-        let sheetName = btn.verify.sheet
-        let errDetail = ''
-
-        if (sheetName === 'Sheet1' && Object.keys(workbook.Sheets).length === 1) {
-          sheetName = Object.keys(workbook.Sheets)[0]
-        }
-
-        if (!workbook.Sheets.hasOwnProperty(sheetName)) {
-          errors = 'notexit'
-        } else if (range === 1) {
-          let header = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], {header: columns})[0]
-
-          if (!header) {
-            errors = 'empty'
-          } else {
-            let iserror = false
-            btnColumns.forEach(op => {
-              if (iserror) return
-
-              let _name = typeof(header[op.Column]) === 'string' ? header[op.Column].replace(/(^\s*|\s*$)/g, '') : header[op.Column]
-              let _text = op.Text ? op.Text.replace(/(^\s*|\s*$)/g, '') : op.Text
-
-              if (!_name) {
-                iserror = true
-                errors = 'headerError'
-                errDetail = `Excel涓笉瀛樺湪锛�${_text}锛夊垪锛乣
-              } else if (_name !== _text) {
-                iserror = true
-                errors = 'headerError'
-                errDetail = `Excel涓紙${_name}锛変笌鎸夐挳鍒椾俊鎭紙${_text}锛変笉涓�鑷达紒`
-              }
-            })
+        if (btn.verify.excelHandle === 'true') {
+          // eslint-disable-next-line
+          let func = new Function('XLSX', 'workbook', 'btn', 'callback', btn.verify.excel_func)
+          func(XLSX, workbook, btn.verify, (data, error) => {
+            if (!error && (!data || data.length === 0)) {
+              error = '鏈幏鍙栧埌Excel鏁版嵁锛�'
+            }
+            this.props.returndata(data, error)
+          })
+        } else {
+          let btnColumns = btn.verify.columns.filter(option => option.import !== 'init')
+          let columns = btnColumns.map(option => option.Column)
+          let range = btn.verify.range || 0
+  
+          let error = null
+          let sheetName = btn.verify.sheet
+  
+          if (sheetName === 'Sheet1' && Object.keys(workbook.Sheets).length === 1) {
+            sheetName = Object.keys(workbook.Sheets)[0]
           }
+  
+          if (!workbook.Sheets.hasOwnProperty(sheetName)) {
+            error = '宸ヤ綔琛ㄣ��' + sheetName + '銆嬩笉瀛樺湪锛�'
+          } else if (range === 1) {
+            let header = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], {header: columns})[0]
+  
+            if (!header) {
+              error = '宸ヤ綔琛ㄣ��' + sheetName + '銆嬩负绌猴紒'
+            } else {
+              btnColumns.forEach(op => {
+                if (error) return
+  
+                let _name = typeof(header[op.Column]) === 'string' ? header[op.Column].replace(/(^\s*|\s*$)/g, '') : header[op.Column]
+                let _text = op.Text ? op.Text.replace(/(^\s*|\s*$)/g, '') : op.Text
+  
+                if (!_name) {
+                  error = `宸ヤ綔琛ㄣ��${sheetName}銆嬭〃澶撮敊璇紝Excel涓笉瀛樺湪锛�${_text}锛夊垪锛乣
+                } else if (_name !== _text) {
+                  error = `宸ヤ綔琛ㄣ��${sheetName}銆嬭〃澶撮敊璇紝Excel涓紙${_name}锛変笌鎸夐挳鍒椾俊鎭紙${_text}锛変笉涓�鑷达紒`
+                }
+              })
+            }
+          }
+  
+          let data = []
+  
+          if (!error) {
+            data = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], {header: columns, range: (range)})
+  
+            if (!data || data.length === 0) {
+              error = '鏈幏鍙栧埌宸ヤ綔琛ㄣ��' + sheetName + '銆嬫暟鎹紒'
+            }
+          }
+  
+          // 鏈�缁堣幏鍙栧埌骞朵笖鏍煎紡鍖栧悗鐨� json 鏁版嵁
+          this.props.returndata(data, error)
         }
 
-        let data = []
-
-        if (!errors) {
-          data = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], {header: columns, range: (range)})
-        }
-
-        // 鏈�缁堣幏鍙栧埌骞朵笖鏍煎紡鍖栧悗鐨� json 鏁版嵁
-        this.props.returndata(data, errors, sheetName, errDetail)
         this.setState({
           excelId: '',
         }, () => {
@@ -101,13 +110,8 @@
             excelId: Utils.getuuid()
           })
         })
-        notification.warning({
-          top: 92,
-          message: '鏂囦欢瑙f瀽閿欒锛�',
-          duration: 5
-        })
         // 閿欒浼犻��
-        this.props.returndata([], 'other')
+        this.props.returndata([], '鏂囦欢瑙f瀽閿欒锛�')
       }
     }
 
diff --git a/src/tabviews/zshare/actionList/excelInbutton/index.jsx b/src/tabviews/zshare/actionList/excelInbutton/index.jsx
index b4ac4ee..bfc7d78 100644
--- a/src/tabviews/zshare/actionList/excelInbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/excelInbutton/index.jsx
@@ -276,43 +276,21 @@
   /**
    * @description Excel 瀵煎叆
    */
-  getexceldata = (data, errors, sheetName, errDetail) => {
+  getexceldata = (data, error) => {
     const { btn, BID } = this.props
 
-    if (errors) {
-      if (errors === 'notexit') {
-        notification.warning({
-          top: 92,
-          message: '宸ヤ綔琛ㄣ��' + sheetName + '銆嬩笉瀛樺湪锛�',
-          duration: 5
-        })
-      } else if (errors === 'empty') {
-        notification.warning({
-          top: 92,
-          message: '宸ヤ綔琛ㄣ��' + sheetName + '銆嬩负绌猴紒',
-          duration: 5
-        })
-      } else if (errors === 'headerError') {
-        notification.warning({
-          top: 92,
-          message: `宸ヤ綔琛ㄣ��${sheetName}銆嬭〃澶撮敊璇紝${errDetail}`,
-          duration: 5
-        })
-      }
+    if (error) {
+      notification.warning({
+        top: 92,
+        message: error,
+        duration: 5
+      })
 
       this.setState({ loading: false })
       return
     }
-
-    if (!data || data.length === 0) {
-      notification.warning({
-        top: 92,
-        message: '鏈幏鍙栧埌宸ヤ綔琛ㄣ��' + sheetName + '銆嬫暟鎹紒',
-        duration: 5
-      })
-      this.setState({ loading: false })
-      return
-    } else if (data.length * btn.verify.columns.length > 30000) {
+    
+    if (data.length * btn.verify.columns.length > 30000) {
       notification.warning({
         top: 92,
         message: '褰撳墠瀵煎叆鏁版嵁閲忚繃澶э紝濡傞亣閿欒鎻愮ず锛岃鍒嗘壒瀵煎叆锛�',
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx
index 5dd577b..5c664eb 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx
@@ -19,7 +19,9 @@
 const { confirm } = Modal
 const { Search } = Input
 const { Paragraph } = Typography
+
 const EditTable = asyncComponent(() => import('@/templates/zshare/editTable'))
+const CodeMirror = asyncComponent(() => import('@/templates/zshare/codemirror'))
 const FullScripts = asyncComponent(() => import('@/templates/zshare/verifycard/fullScripts'))
 
 class VerifyCard extends Component {
@@ -307,17 +309,17 @@
       _verify.range = 1
     }
 
+    _verify.excelHandle = _verify.excelHandle || 'false'
+    _verify.default = _verify.default || 'true'
+    _verify.sheet = _verify.sheet || 'Sheet1'
+    _verify.range = _verify.range || 0
+    _verify.columns = _columns
+    _verify.scripts = _verify.scripts || []
+    _verify.uniques = _verify.uniques || []
+
     this.setState({
       searchKey: '',
-      verify: {
-        ..._verify,
-        default: _verify.default || 'true',
-        sheet: _verify.sheet || 'Sheet1',
-        range: _verify.range || 0,
-        columns: _columns,
-        scripts: _verify.scripts || [],
-        uniques: _verify.uniques || []
-      }
+      verify: _verify
     }, () => {
       this.resetUniqueColumns()
     })
@@ -712,6 +714,10 @@
         if (!err) {
           let _verify = {...verify, ...values}
 
+          if (_verify.excelHandle !== 'true') {
+            delete _verify.excel_func
+          }
+
           let cols = _verify.columns.map(col => col.Column.toLowerCase())
           cols = Array.from(new Set(cols))
 
@@ -771,22 +777,27 @@
             resolve(_verify)
           }
         } else {
-          notification.warning({
-            top: 92,
-            message: '璇疯缃瓻xcel琛ㄥ悕!',
-            duration: 5
-          })
+          this.setState({activeKey: 'basemsg'})
         }
       })
     })
   }
 
-  onOptionChange = (e, key) => {
+  onOptionChange = (e) => {
     const { verify } = this.state
     let value = e.target.value
 
     this.setState({
       verify: {...verify, default: value}
+    })
+  }
+
+  onHandleChange = (e) => {
+    const { verify } = this.state
+    let value = e.target.value
+
+    this.setState({
+      verify: {...verify, excelHandle: value}
     })
   }
 
@@ -867,7 +878,44 @@
           <TabPane tab="鍩虹楠岃瘉" key="basemsg">
             <Form {...formItemLayout}>
               <Row gutter={24}>
+                {card.intertype === 'system' ? <Col span={8}>
+                  <Form.Item label={'榛樿sql'}>
+                    <Radio.Group value={verify.default} onChange={this.onOptionChange}>
+                      <Radio value="true">鎵ц</Radio>
+                      <Radio value="false">涓嶆墽琛�</Radio>
+                    </Radio.Group>
+                  </Form.Item>
+                </Col> : null}
                 <Col span={8}>
+                  <Form.Item label={
+                    <Tooltip placement="topRight" title="鑷畾涔夐獙璇丒xcel鏍煎紡锛屽彲鐢ㄥ弬鏁颁负 XLSX銆乨ata銆乧olumns銆乧allback銆�">
+                      <QuestionCircleOutlined className="mk-form-tip" />
+                      瀵煎叆鏍煎紡
+                    </Tooltip>
+                  }>
+                    {getFieldDecorator('excelHandle', {
+                      initialValue: verify.excelHandle
+                    })(
+                    <Radio.Group onChange={this.onHandleChange}>
+                      <Radio value="false">榛樿</Radio>
+                      <Radio value="true">鑷畾涔�</Radio>
+                    </Radio.Group>)}
+                  </Form.Item>
+                </Col>
+                {verify.excelHandle === 'true' ? <Col span={24} style={{paddingLeft: '30px'}}>
+                  <Form.Item wrapperCol={ {xs: { span: 24 }, sm: { span: 24 }} } label="">
+                    {getFieldDecorator('excel_func', {
+                      initialValue: verify.excel_func || '',
+                      rules: [
+                        {
+                          required: true,
+                          message: '璇峰~鍐欒嚜瀹氫箟閫昏緫!'
+                        }
+                      ]
+                    })(<CodeMirror mode="text/javascript" theme="cobalt" />)}
+                  </Form.Item>
+                </Col> : null}
+                {verify.excelHandle !== 'true' ? <Col span={8}>
                   <Form.Item label={
                     <Tooltip placement="bottomLeft" title="瀵煎叆鏃跺伐浣滆〃鍚嶄笌excel涓繀椤讳竴鑷达紝娉細宸ヤ綔琛ㄥ悕涓篠heet1涓攅xcel涓粎鏈変竴涓伐浣滆〃鏃朵笉杩涜琛ㄥ悕楠岃瘉銆�">
                       <QuestionCircleOutlined className="mk-form-tip" />
@@ -884,8 +932,8 @@
                       ]
                     })(<Input placeholder="" autoComplete="off" />)}
                   </Form.Item>
-                </Col>
-                <Col span={8}>
+                </Col> : null}
+                {verify.excelHandle !== 'true' ? <Col span={8}>
                   <Form.Item label={
                     <Tooltip placement="bottomLeft" title="蹇界暐棣栬鏃讹紝浼氭牎楠宔xcel涓〃澶村悕绉颁笌excel鍒楄缃槸鍚︿竴鑷淬��">
                       <QuestionCircleOutlined className="mk-form-tip" />
@@ -895,14 +943,6 @@
                     {getFieldDecorator('range', {
                       initialValue: verify.range || 0
                     })(<InputNumber min={0} max={100} precision={0} />)}
-                  </Form.Item>
-                </Col>
-                {card.intertype === 'system' ? <Col span={8}>
-                  <Form.Item label={'榛樿sql'}>
-                    <Radio.Group value={verify.default} onChange={this.onOptionChange}>
-                      <Radio value="true">鎵ц</Radio>
-                      <Radio value="false">涓嶆墽琛�</Radio>
-                    </Radio.Group>
                   </Form.Item>
                 </Col> : null}
               </Row>

--
Gitblit v1.8.0