king
2025-01-13 8e3b4c6dede34e8be6ba47a20ecd9a70576675cf
src/views/tabledesign/index.jsx
@@ -4,8 +4,8 @@
import { is, fromJS } from 'immutable'
import moment from 'moment'
import HTML5Backend from 'react-dnd-html5-backend'
import { notification, Modal, Collapse, Card, Switch, Button, Typography } from 'antd'
import { DoubleLeftOutlined, DoubleRightOutlined } from '@ant-design/icons'
import { notification, Modal, Collapse, Card, Switch, Button, Typography, message } from 'antd'
import { DoubleLeftOutlined, DoubleRightOutlined, CopyOutlined } from '@ant-design/icons'
import md5 from 'md5'
import Api from '@/api'
@@ -577,33 +577,34 @@
          for (let i = 0; i < 18; i++) {
            uuid += String.fromCharCode(Math.floor(Math.random() * 26) + 65)
          }
          uuid = uuid.replace(/minke/ig, 'MNKIE')
          return uuid
        }
        long_data = []
        let oriIds = {}
        if (config.allSqls) {
          config.allSqls.forEach(item => {
            if (!item.md5) return
            oriIds[item.uuid + item.md5] = item.v_id
          })
        }
        // let oriIds = {}
        // if (config.allSqls) {
        //   config.allSqls.forEach(item => {
        //     if (!item.md5) return
        //     oriIds[item.uuid + item.md5] = item.v_id
        //   })
        // }
        
        config.allSqls = sqls.map(item => {
          let v_id = _t + getguid()
          if (oriIds[item.uuid + item.md5]) {
            v_id = oriIds[item.uuid + item.md5]
          }
          // if (oriIds[item.uuid + item.md5]) {
          //   v_id = oriIds[item.uuid + item.md5]
          // }
          
          long_data.push(`${md5(window.GLOB.appkey + v_id)},${item.uuid},${v_id},${window.btoa(window.encodeURIComponent(item.LText))}`)
          long_data.push(`${md5(window.GLOB.appkey + v_id)},${item.uuid},${v_id},${window.btoa(window.encodeURIComponent(item.LText))},${config.sqlperm === 'false' ? '' : item.roleId || ''}`)
          
          return {
            uuid: item.uuid,
            v_id: v_id,
            type: item.type,
            reps: item.reps,
            md5: item.md5 || '',
            // md5: item.md5 || '',
            luser: item.luser === true
          }
        })
@@ -895,6 +896,129 @@
    return is(fromJS(oriConfig), fromJS(config))
  }
  copyMenu = () => {
    const { config } = this.state
    if (!config.enabled) {
      notification.warning({
        top: 92,
        message: '菜单未启用,不可复制。',
        duration: 5
      })
    } else {
      let msg = { copyType: 'components', type: 'admin', interfaces: [] }
      msg.components = fromJS(config.components).toJS()
      msg.components.forEach((item, i) => {
        if (item.type === 'tabs') {
          item.name = '标签组' + i
          item.width = 24
          item.subtype = 'tabs'
          item.setting = {autoSwitch: 'false', blacklist: [], name: item.name, position: 'top', supModule: [], tabStyle: 'line', width: 24}
          item.subtabs.forEach(tab => {
            tab.components[0].subtype = 'normaltable'
            tab.components[0].width = 24
            tab.components[0].wrap.width = 24
            tab.components[0].wrap.name = tab.components[0].name
            tab.components[0].action.forEach(btn => {
              if (btn.OpenType === 'popview' && btn.config) {
                btn.config.Template = 'CustomPage'
                if (btn.config.components[0]) {
                  btn.config.components[0].subtype = 'normaltable'
                }
              }
            })
            tab.components[0].cols = tab.components[0].cols.filter(col => !(col.field && col.Hide === 'true'))
            tab.components[0].cols.forEach(col => {
              if (col.type !== 'custom') return
              col.elements.forEach(btn => {
                if (btn.OpenType === 'popview' && btn.config) {
                  btn.config.Template = 'CustomPage'
                  if (btn.config.components[0]) {
                    btn.config.components[0].subtype = 'normaltable'
                  }
                }
              })
            })
          })
        } else {
          item.subtype = 'normaltable'
          item.width = 24
          item.wrap.width = 24
          item.wrap.name = item.name
          item.action.forEach(btn => {
            if (btn.OpenType === 'popview' && btn.config) {
              btn.config.Template = 'CustomPage'
              if (btn.config.components[0]) {
                btn.config.components[0].subtype = 'normaltable'
              }
            }
          })
          item.cols = item.cols.filter(col => !(col.field && col.Hide === 'true'))
          item.cols.forEach(col => {
            if (col.type !== 'custom') return
            col.elements.forEach(btn => {
              if (btn.OpenType === 'popview' && btn.config) {
                btn.config.Template = 'CustomPage'
                if (btn.config.components[0]) {
                  btn.config.components[0].subtype = 'normaltable'
                }
              }
            })
          })
        }
      })
      if (msg.components[0].search && msg.components[0].search.length > 0) {
        let cell = {
          uuid: Utils.getuuid(),
          type: 'search',
          width: 24,
          subtype: 'mainsearch',
          name: '搜索',
          search: msg.components[0].search,
          style: {borderBottomColor: '#f0f0f0', borderBottomWidth: '1px'},
          wrap: {float: 'left', blacklist: [], name: '搜索', width: 24}
        }
        cell.wrap.advanceType = msg.components[0].wrap.advanceType || 'modal'
        cell.wrap.advanceWidth = msg.components[0].wrap.advanceWidth || 1000
        cell.wrap.searchLwidth = msg.components[0].wrap.searchLwidth || 33.3
        cell.wrap.searchRatio = msg.components[0].wrap.searchRatio || 6
        cell.wrap.resetContrl = msg.components[0].wrap.resetContrl || 'init'
        cell.wrap.show = msg.components[0].wrap.show || 'true'
        if (cell.wrap.advanceType === 'drawer') {
          cell.wrap.drawerPlacement = msg.components[0].wrap.drawerPlacement || 'left'
        }
        msg.components[0].search = []
        msg.components[0].setting.useMSearch = 'true'
        msg.components.unshift(cell)
        msg.components[0].$tables = getTables(msg.components[0])
        msg.components[1].$tables = getTables(msg.components[1])
      }
      try {
        msg = window.btoa(window.encodeURIComponent(JSON.stringify(msg)))
      } catch (e) {
        console.warn('Stringify Failure')
        msg = ''
      }
      let oInput = document.createElement('input')
      oInput.value = msg
      document.body.appendChild(oInput)
      oInput.select()
      document.execCommand('Copy')
      document.body.removeChild(oInput)
      message.success('复制成功。')
    }
  }
  updateLogConfig = (config) => {
    config.fstMenuId = this.state.config.fstMenuId || config.fstMenuId || ''
    config.parentId = this.state.config.parentId || config.parentId || ''
@@ -943,6 +1067,7 @@
                      {/* 表名添加 */}
                      <TableComponent config={config} updatetable={this.updateConfig}/>
                      <Paragraph style={{padding: '15px 0px 0px 18px'}} copyable={{ text: MenuId }}>菜单ID</Paragraph>
                      <Paragraph style={{padding: '0px 0px 0px 5px'}}>菜单组件 <CopyOutlined onClick={this.copyMenu} style={{marginLeft: '3px', cursor: 'pointer', color: '#1890ff'}} /></Paragraph>
                    </> : null}
                  </Panel>
                  <Panel header="搜索" key="search">
@@ -965,13 +1090,6 @@
              <div className={'menu-view' + (menuloading ? ' saving' : '')}>
                <Card bordered={false} extra={
                  <div className="mk-opeartion-list">
                    {/* <Dropdown overlay={
                      <div className="mk-button-dropdown-wrap">
                        <ReplaceField type="custom" config={config} updateConfig={this.resetConfig}/>
                      </div>
                    } trigger={['click']} placement="bottomCenter">
                      <Button className="mk-button-more">更多<DownOutlined/></Button>
                    </Dropdown> */}
                    {config ? <Debug config={config}/> : null}
                    {config ? <Transfer config={config}/> : null}
                    {config ? <Unattended config={config} updateConfig={this.updateConfig}/> : null}
@@ -980,7 +1098,7 @@
                    <ReplaceField type="custom" config={config} updateConfig={this.resetConfig}/>
                    <PasteBaseTable type="page" insert={this.insert}/>
                    {config ? <Switch className="big" checkedChildren="启" unCheckedChildren="停" checked={config.enabled} onChange={this.onEnabledChange} /> : null}
                    <Button type="primary" id="save-config" onClick={this.submitConfig} loading={menuloading}>保存</Button>
                    <Button type="primary" id="save-config" disabled={!config} onClick={this.submitConfig} loading={menuloading}>保存</Button>
                    <Button type="default" disabled={menuloading} onClick={this.closeView}>关闭</Button>
                  </div>
                } style={{ width: '100%' }}>