king
2023-08-10 f451bc0b3d7bdff140fa906eaf8b73ddb2aa4134
src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
@@ -2,7 +2,7 @@
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import { Table, Typography, Modal, Input, InputNumber, Button, notification, message, Select } from 'antd'
import { EditOutlined } from '@ant-design/icons'
import { EditOutlined, QuestionCircleOutlined } from '@ant-design/icons'
import moment from 'moment'
import Api from '@/api'
@@ -119,7 +119,7 @@
    this.setState({editing: false})
    setTimeout(() => {
      if (col.enter === '$next') {
      if (/\$next/.test(col.enter)) {
        MKEmitter.emit('nextLine', col, record.$$uuid)
      } else if (col.enter === '$sub') {
        MKEmitter.emit('subLine', col, record)
@@ -208,7 +208,7 @@
    this.setState({editing: false})
    setTimeout(() => {
      if (col.enter === '$next') {
      if (/\$next/.test(col.enter)) {
        MKEmitter.emit('nextLine', col, record.$$uuid)
      } else if (col.enter === '$sub') {
        MKEmitter.emit('subLine', col, record)
@@ -240,7 +240,7 @@
    this.setState({editing: false})
    setTimeout(() => {
      if (col.enter === '$next') {
      if (/\$next/.test(col.enter)) {
        MKEmitter.emit('nextLine', col, record.$$uuid)
      } else if (col.enter === '$sub') {
        MKEmitter.emit('subLine', col, record)
@@ -433,21 +433,35 @@
      )
    } 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) {
          if (window.debugger) {
            console.info(content)
            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) {
            if (window.debugger) {
              console.info(content)
              console.warn(e)
            }
            content = ''
          }
        }
      }
@@ -462,7 +476,9 @@
        content = content.toFixed(col.decimal)
      }
      if (content !== '') {
      if (col.eval === 'func') {
        content = <span dangerouslySetInnerHTML={{__html: content}}></span>
      } else if (content !== '') {
        content = `${col.prefix || ''}${content}${col.postfix || ''}`
        content = content.replace(/\n/ig, '<br/>').replace(/\s/ig, '&nbsp;')
        content = <span dangerouslySetInnerHTML={{__html: content}}></span>
@@ -542,7 +558,7 @@
    this.onBlur()
    setTimeout(() => {
      if (col.enter === '$next') {
      if (/\$next/.test(col.enter)) {
        MKEmitter.emit('nextLine', col, record.$$uuid)
      } else if (col.enter === '$sub') {
        MKEmitter.emit('subLine', col, record)
@@ -602,7 +618,7 @@
    const { col, record } = this.props
    setTimeout(() => {
      if (col.enter === '$next') {
      if (/\$next/.test(col.enter)) {
        MKEmitter.emit('nextLine', col, record.$$uuid)
      } else if (col.enter === '$sub') {
        MKEmitter.emit('subLine', col, record)
@@ -638,7 +654,7 @@
    }
    setTimeout(() => {
      if (col.enter === '$next') {
      if (/\$next/.test(col.enter)) {
        MKEmitter.emit('nextLine', col, record.$$uuid)
      } else if (col.enter === '$sub') {
        MKEmitter.emit('subLine', col, record)
@@ -826,21 +842,35 @@
      )
    } 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) {
          if (window.debugger) {
            console.info(content)
            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) {
            if (window.debugger) {
              console.info(content)
              console.warn(e)
            }
            content = ''
          }
        }
      }
@@ -855,7 +885,9 @@
        content = content.toFixed(col.decimal)
      }
      if (content !== '') {
      if (col.eval === 'func') {
        content = <span dangerouslySetInnerHTML={{__html: content}}></span>
      } else if (content !== '') {
        content = `${col.prefix || ''}${content}${col.postfix || ''}`
        content = content.replace(/\n/ig, '<br/>').replace(/\s/ig, '&nbsp;')
        content = <span dangerouslySetInnerHTML={{__html: content}}></span>
@@ -918,7 +950,9 @@
    orderfields: {},      // 排序id与field转换
    loading: false,
    pageOptions: [],
    deForms: null
    deForms: null,
    visible: false,
    midData: null
  }
  UNSAFE_componentWillMount () {
@@ -1074,23 +1108,18 @@
  }
  transferData = (menuid, data, type) => {
    const { MenuID, setting } = this.props
    const { MenuID } = this.props
    const { edData } = this.state
    if (menuid !== MenuID) return
    if (type !== 'line') {
      if (setting.editType === 'multi' && data.length > 0) {
        this.setState({edData: []}, () => {
          this.setState({edData: data})
        })
      } else {
        this.setState({edData: data})
      }
      let index = edData.findIndex(item => !item.$origin && !item.$forbid)
      if (setting.addable && data.length === 0) {
        setTimeout(() => {
          this.plusLine(true)
        }, 10)
      if (index > -1) {
        this.setState({visible: true, midData: data})
      } else {
        this.updateMutil(data)
      }
    } else if (type === 'line') {
      let _edData = this.state.edData.map(item => {
@@ -1102,6 +1131,24 @@
      })
      this.setState({edData: _edData})
    }
  }
  updateMutil = (data) => {
    const { setting } = this.props
    if (setting.editType === 'multi' && data.length > 0) {
      this.setState({edData: []}, () => {
        this.setState({edData: data, visible: false, midData: null})
      })
    } else {
      this.setState({edData: data, visible: false, midData: null})
    }
    if (setting.addable && data.length === 0) {
      setTimeout(() => {
        this.plusLine(true)
      }, 10)
    }
  }
@@ -1297,7 +1344,12 @@
    let next = edData[index + 1] || null
    
    if (next) {
      let node = document.getElementById(setting.initId + next.$$uuid)
      let nextId = setting.initId + next.$$uuid
      if (/^\$next_/.test(col.enter)) {
        nextId = col.enter.split('_')[1] + next.$$uuid
      }
      let node = document.getElementById(nextId)
      if (node) {
        if (setting.editType === 'multi') {
          if (setting.triType === 'click') {
@@ -1592,6 +1644,8 @@
    const { submit, BID, setting } = this.props
    const { forms } = this.state
    this.setState({visible: false, midData: null})
    if (setting.supModule && !BID) {
      notification.warning({
        top: 92,
@@ -1620,16 +1674,6 @@
    if (submit.intertype === 'system') { // 系统存储过程
      param.func = 'sPC_TableData_InUpDe'
      
      if (sessionStorage.getItem('dataM') === 'true') { // 数据权限
        result.sql = result.sql.replace(/\$@/ig, '/*')
        result.sql = result.sql.replace(/@\$/ig, '*/')
        result.bottom = result.bottom.replace(/\$@/ig, '/*')
        result.bottom = result.bottom.replace(/@\$/ig, '*/')
      } else {
        result.sql = result.sql.replace(/@\$|\$@/ig, '')
        result.bottom = result.bottom.replace(/@\$|\$@/ig, '')
      }
      param.excel_in_type = 'true'
      param.LText1 = Utils.formatOptions(result.insert)
      param.LText2 = Utils.formatOptions(result.bottom)
@@ -1649,7 +1693,9 @@
        } else {
          this.execError(res)
        }
      }, () => {
      }, (error) => {
        if (error && error.ErrCode === 'LoginError') return
        this.execError({})
      })
    } else if (submit.intertype === 'inner' && submit.innerFunc) { // 自定义存储过程
@@ -1661,33 +1707,17 @@
        } else {
          this.execError(res)
        }
      }, () => {
      }, (error) => {
        if (error && error.ErrCode === 'LoginError') return
        this.execError({})
      })
    }
  }
  updataLine = (item) => {
    if (item.$type === 'del') {
      let _data = this.state.edData.filter(m => m.$$uuid !== item.$$uuid)
      this.setState({edData: _data})
    } else {
      let _data = this.state.edData.map(m => {
        if (m.$$uuid === item.$$uuid) {
          item.$origin = true
          return item
        }
        return m
      })
      this.setState({edData: _data})
    }
    MKEmitter.emit('reloadData', this.props.MenuID, item.$$uuid)
  }
  execSuccess = (res) => {
    const { submit } = this.props
    const { edData } = this.state
    if (res && res.ErrCode === 'S') { // 执行成功
      notification.success({
@@ -1703,8 +1733,18 @@
    }
    let _edData = fromJS(edData).toJS()
    _edData = _edData.map(item => {
      if (!item.$forbid) {
        item.$origin = true
      }
      return item
    })
    this.setState({
      loading: false
      loading: false,
      edData: _edData
    })
    if (submit.closetab === 'true') {
@@ -1853,7 +1893,7 @@
  render() {
    const { setting, lineMarks, submit } = this.props
    const { tableId, edData, columns, loading, pageOptions, selectedRowKeys } = this.state
    const { tableId, edData, columns, loading, pageOptions, selectedRowKeys, visible, midData } = this.state
    const components = {
      body: {
@@ -1862,7 +1902,6 @@
      }
    }
    // 数据收起时,过滤已选数据
    let _data = edData.filter(item => !item.$deleted)
    // 设置表格选择属性:单选、多选、不可选
@@ -1894,9 +1933,9 @@
    return (
      <>
        <div className="edit-custom-table-btn-wrap" style={submit.wrapStyle}>
        {setting.hasSubmit ? <div className="edit-custom-table-btn-wrap" style={submit.wrapStyle}>
          <Button style={submit.style} onClick={() => setTimeout(() => {this.submit()}, 10)} loading={loading} className="submit-table" type="link">提交</Button>
        </div>
        </div> : null}
        <div className={`edit-custom-table ${setting.tableHeader || ''} ${height ? 'fixed-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || ''} mk-edit-${setting.editType || 'simple'}`} id={tableId}>
          <Table
            rowKey="$$uuid"
@@ -1919,8 +1958,23 @@
            onChange={this.changeTable}
            pagination={_pagination}
          />
          {_data.length > 10 ? <Button style={submit.style} onClick={() => setTimeout(() => {this.submit()}, 10)} loading={loading} className="submit-footer-table" type="link">提交</Button> : null}
          {setting.hasSubmit && _data.length > 10 ? <Button style={submit.style} onClick={() => setTimeout(() => {this.submit()}, 10)} loading={loading} className="submit-footer-table" type="link">提交</Button> : null}
        </div>
        <Modal
          className="mk-user-confirm"
          visible={visible}
          width={450}
          maskClosable={false}
          closable={false}
          footer={[
            <Button key="cancel" onClick={() => { this.setState({ visible: false, midData: null }) }}>取消</Button>,
            <Button key="refresh" className="table-refresh" onClick={() => { midData && this.updateMutil(midData) }}>刷新表格</Button>,
            <Button key="confirm" type="primary" onClick={() => setTimeout(() => {this.submit()}, 10)}>提交数据</Button>
          ]}
          destroyOnClose
        >
          <div><QuestionCircleOutlined />表格中有数据尚未提交</div>
        </Modal>
      </>
    )
  }