king
2023-06-10 f155ee9b2db0f4eee687b53fd2f09bd3ebb02677
src/templates/sharecomponent/tablecomponent/index.jsx
@@ -8,8 +8,7 @@
import Api from '@/api'
import options from '@/store/options.js'
import Utils from '@/utils/utils.js'
import zhCN from '@/locales/zh-CN/model.js'
import enUS from '@/locales/en-US/model.js'
import MKEmitter from '@/utils/events.js'
import { queryTableSql } from '@/utils/option.js'
import './index.scss'
@@ -24,7 +23,6 @@
  }
  state = {
    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
    tables: [],          // 系统表
    tableFields: [],     // 已选表字段集
    selectedTables: [],  // 已选表
@@ -36,15 +34,28 @@
  UNSAFE_componentWillMount () {
    const { config } = this.props
    let tables = config.tables ? fromJS(config.tables).toJS() : []
    window.GLOB.publicTables = tables
    this.setState({
      selectedTables: config.tables ? fromJS(config.tables).toJS() : []
      selectedTables: tables
    }, () => {
      this.gettableFields()
    })
  }
  componentDidMount () {
    MKEmitter.addListener('publicTableChange', this.publicTableChange)
    this.gettables()
  }
  publicTableChange = (table, type) => {
    if (type === 'plus') {
      this.onTableChange(table)
    } else if (type === 'del') {
      this.deleteTable(table)
    }
  }
  /**
@@ -71,6 +82,8 @@
    Api.getSystemCacheConfig(param).then(res => {
      if (res.status) {
        let tbNames = res.data.map(item => item.TbName).join(',')
        sessionStorage.setItem('mk_tb_names', ',' + tbNames.toLowerCase() + ',')
        this.setState({
          tables: res.data
        })
@@ -85,7 +98,7 @@
  }
  gettableFields = () => {
    let deffers = this.state.selectedTables.map(item => {
    let deffers = this.state.selectedTables.map((item, i) => {
      return new Promise(resolve => {
        let param = {func: 'sPC_Get_FieldName', TBName: item.TbName}
        if (options.cloudServiceApi) { // 且存在云端地址
@@ -94,10 +107,12 @@
          param.LoginUID = sessionStorage.getItem('CloudLoginUID') || ''
        }
        Api.getSystemCacheConfig(param).then(res => {
          res.TBName = item.TbName
          resolve(res)
        })
        setTimeout(() => {
          Api.getSystemCacheConfig(param).then(res => {
            res.TBName = item.TbName
            resolve(res)
          })
        }, (i + 1) * 100)
      })
    })
    Promise.all(deffers).then(response => {
@@ -169,11 +184,15 @@
    let _table = tables.filter(item => item.TbName === value)[0]
    let isSelected = !!selectedTables.filter(cell => cell.TbName === value)[0]
    if (!isSelected) {
      let _tables = [...selectedTables, _table]
      window.GLOB.publicTables = _tables
      this.setState({
        selectedTables: [...selectedTables, _table]
        selectedTables: _tables
      })
      let _config = {...config, tables: [...selectedTables, _table]}
      let _config = {...config, tables: _tables}
      
      Api.getSystemConfig({func: 'sPC_Get_FieldName', TBName: value}).then(res => {
        if (res.status) {
@@ -247,6 +266,8 @@
    let _tables = selectedTables.filter(item => item.TbName !== table.TbName)
    let _fields = tableFields.filter(item => item.tableName !== table.TbName)
    window.GLOB.publicTables = _tables
    this.setState({
      selectedTables: _tables,
      tableFields: _fields
@@ -264,20 +285,21 @@
    this.setState = () => {
      return
    }
    MKEmitter.removeListener('publicTableChange', this.publicTableChange)
  }
  render() {
    const { containerId } = this.props
    const { dict, tables, selectedTables } = this.state
    const { tables, selectedTables } = this.state
    return (
      <div className="model-table-tablemanage-view">
      <div className="model-tablename-manage-view">
        {/* 表名添加 */}
        <div className="ant-col ant-form-item-label">
          <label>
            <Tooltip placement="topLeft" title="此处可以添加页面配置相关的常用表,可通过工具栏中的添加按钮,可批量添加表格相关字段。">
            <Tooltip placement="topLeft" title="此处可以添加页面配置相关的常用表。">
              <QuestionCircleOutlined className="mk-form-tip" />
              {dict['header.menu.table.add']}
              表名
            </Tooltip>
          </label>
        </div>
@@ -286,17 +308,19 @@
          className="tables"
          style={{ width: '100%' }}
          optionFilterProp="children"
          value={dict['header.menu.table.placeholder']}
          onChange={this.onTableChange}
          value="请选择表名"
          onSelect={this.onTableChange}
          dropdownClassName="mk-tables"
          dropdownMatchSelectWidth={false}
          showArrow={false}
          getPopupContainer={() => containerId ? document.getElementById(containerId) : document.body}
          filterOption={(input, option) => {
            return option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||
              option.props.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
            return option.props.children[0].toLowerCase().indexOf(input.toLowerCase()) >= 0 ||
              option.props.children[2].toLowerCase().indexOf(input.toLowerCase()) >= 0
          }}
        > 
          {tables.map((table, index) => (
            <Option key={index} title={table.TbName} value={table.TbName}>{table.Remark}</Option>
            <Option key={index} title={table.TbName} value={table.TbName}>{table.Remark}<br/>{table.TbName}</Option>
          ))}
        </Select>
        {selectedTables.length > 0 && <List
@@ -306,7 +330,6 @@
          renderItem={(item, index) => <List.Item key={index} title={item.Remark + ' (' + item.TbName + ')'}>
            {item.Remark + ' (' + item.TbName + ')'}
            <CloseOutlined onClick={() => this.deleteTable(item)}/>
            <div className="bottom-mask"></div>
          </List.Item>}
        />}
      </div>