king
2023-10-18 81d0d7721bb14a34b1eef99fd9506c3eda4bda99
src/menu/sysinterface/index.jsx
@@ -6,6 +6,7 @@
import Utils from '@/utils/utils.js'
import asyncComponent from '@/utils/asyncComponent'
import MKEmitter from '@/utils/events.js'
import './index.scss'
const DataSource = asyncComponent(() => import('@/menu/datasource'))
@@ -51,7 +52,6 @@
        dataIndex: 'operation',
        render: (text, record) =>
          (<div style={{textAlign: 'center'}}>
            <DataSource config={record} updateConfig={this.update}/>
            <span onClick={() => this.handleStatus(record)} style={{color: '#8E44AD', cursor: 'pointer', fontSize: '16px', marginRight: '15px'}}><SwapOutlined /></span>
            <span onClick={() => this.copy(record)} style={{color: '#26C281', cursor: 'pointer', fontSize: '16px', marginRight: '15px'}}><CopyOutlined /></span>
            <Popconfirm
@@ -59,8 +59,9 @@
              title="确定删除?"
              onConfirm={() => this.deleteScript(record)
            }>
              <span style={{color: '#ff4d4f', cursor: 'pointer', fontSize: '16px'}}><DeleteOutlined /></span>
              <span style={{color: '#ff4d4f', cursor: 'pointer', fontSize: '16px', marginRight: '15px'}}><DeleteOutlined /></span>
            </Popconfirm>
            <DataSource config={record} updateConfig={this.update}/>
          </div>)
      }
    ]
@@ -159,8 +160,44 @@
  changeScripts = (interfaces) => {
    const { config } = this.props
    interfaces = interfaces.map(item => {
      item.$tables = this.getTables(item)
      return item
    })
    this.setState({ interfaces })
    this.props.updateConfig({...config, interfaces})
  }
  getTables = (record) => {
    let tables = []
    let cuts = []
    let cutreg = /(from|update|insert\s+into)\s+(@db@)?[a-z_]+/ig
    let trimreg = /(from|update|insert\s+into)\s+(@db@)?/ig
    if (record.setting.interType === 'system') {
      if (record.setting.execute !== 'false' && record.setting.dataresource) {
        let tbs = record.setting.dataresource.match(cutreg)
        tbs && cuts.push(...tbs)
      }
      record.scripts && record.scripts.forEach(script => {
        if (script.status === 'false') return
        let tbs = script.sql.match(cutreg)
        tbs && cuts.push(...tbs)
      })
    } else if (record.setting.tableName) {
      let tb = record.setting.tableName.replace(/@db@|\s+/ig, '')
      if (/[a-z_]+/ig.test(tb)) {
        tables.push(tb)
      }
    }
    cuts = cuts.map(item => item.replace(trimreg, ''))
    tables.push(...cuts)
    tables = tables.filter(Boolean)
    tables = Array.from(new Set(tables))
    return tables
  }
  update = (record) => {
@@ -172,6 +209,9 @@
      record.status = 'false'
    }
    record.name = record.setting.name
    record.$tables = this.getTables(record)
    delete record.subColumns
    let interfaces = this.state.interfaces.map(item => {
      if (item.uuid !== record.uuid) {
@@ -182,6 +222,11 @@
    this.setState({ interfaces })
    this.props.updateConfig({...config, interfaces})
    MKEmitter.emit('editLineId', record.uuid)
    setTimeout(() => {
      MKEmitter.emit('mkUpdateInter', record, {delay: 0})
    }, 10)
  }
  addInterface = () => {
@@ -210,8 +255,8 @@
    const { visible, columns, interfaces } = this.state
    return (
      <div className="mk-sys-interface" style={{display: 'inline-block'}}>
        <Button className="mk-border-green" onClick={this.trigger}><DatabaseOutlined /> 公共数据源</Button>
      <>
        <Button className="mk-border-danger" onClick={this.trigger}><DatabaseOutlined /> 公共数据源</Button>
        <Modal
          title="公共数据源"
          wrapClassName="interface-controller-modal"
@@ -227,10 +272,9 @@
          destroyOnClose
        > 
          <PlusOutlined key="add-interface" onClick={this.addInterface}/>
          {/* <div style={{fontSize: '12px', position: 'relative', top: '20px'}}>注:接口执行完成后,会触发默认不加载的组件刷新数据。</div> */}
          <EditTable key="manage-interface" actions={['copy']} type="interface" data={interfaces} columns={columns} onChange={this.changeScripts}/>
        </Modal>
      </div>
      </>
    )
  }
}