king
2023-09-06 d2fd67a1bcec35db7870f55a83a25c043ae854f8
src/tabviews/zshare/topSearch/index.jsx
@@ -7,17 +7,18 @@
import md5 from 'md5'
import Api from '@/api'
import options from '@/store/options.js'
import asyncComponent from '@/utils/asyncComponent'
import asyncSpinComponent from '@/utils/asyncSpinComponent'
import Utils from '@/utils/utils.js'
import MKEmitter from '@/utils/events.js'
import MKInput from './mkInput'
import './index.scss'
const MutilForm = asyncSpinComponent(() => import('./advanceform'))
const MKCheckCard = asyncComponent(() => import('@/tabviews/zshare/mutilform/mkCheckCard'))
const MKCheckCard = asyncComponent(() => import('./mkCheckCard'))
const MKCheck = asyncComponent(() => import('@/tabviews/zshare/mutilform/mkCheck'))
const MKSwitch = asyncComponent(() => import('@/tabviews/zshare/mutilform/mkSwitch'))
const MKRadio = asyncComponent(() => import('./mkRadio'))
const MKSelect = asyncComponent(() => import('./mkSelect'))
const DateGroup = asyncComponent(() => import('./dategroup'))
const MKDatePicker = asyncComponent(() => import('./mkDatePicker'))
@@ -25,8 +26,7 @@
class MainSearch extends Component {
  static propTpyes = {
    BID: PropTypes.any,          // 父级Id,用于查询下拉选择项
    config: PropTypes.object,    // 组件配置信息(自定义页面)
    refreshdata: PropTypes.func  // 刷新数据
    config: PropTypes.object,    // 组件配置信息
  }
  state = {
@@ -51,8 +51,6 @@
    let advanceValues = []
    let linkFields = {}
    let record = {}
    let hasReqFields = false
    let forbid = false // header中不设置高级搜索
    let _setting = {showAdv: false, show: false, style: null}
    
@@ -66,6 +64,7 @@
      _setting.labelCol = {style: {width: _setting.labelwidth + '%'}}
      _setting.wrapperCol = {style: {width: (100 - _setting.labelwidth) + '%'}}
      _setting.borderRadius = config.wrap.borderRadius
      _setting.resetContrl = config.wrap.resetContrl || 'init'
    }
    
    if (config.type === 'search') {
@@ -113,26 +112,13 @@
        item.field = item.field + '@tail@'
      }
      if (item.required) {
        hasReqFields = true
      }
      if (item.advanced && !forbid) {
        _setting.showAdv = true
        if (!['group', 'check', 'switch'].includes(item.type)) {
          item.signValue = true
        }
      } else {
        item.advanced = false
      }
      if (item.advanced && item.initval) {
        let val = item.initval
        if (item.precision === 'hour') {
          if (/,/ig.test(val)) {
            val = val.split(',').map(m => m + ':00').join(',')
          } else {
            val = val + ':00'
          }
        }
        advanceValues.push({field: item.field, type: item.type, label: item.label, value: val})
      }
      if (item.type === 'group') {
@@ -142,7 +128,7 @@
        record[item.field] = item.initval
      }
      
      if (['select', 'link', 'multiselect', 'checkcard'].includes(item.type)) {
      if (['select', 'link', 'multiselect', 'checkcard', 'radio'].includes(item.type)) {
        item.options = item.options || []
        item.options = item.options.filter(op => !op.Hide)
        if (item.setAll === 'true' && ['select', 'link'].includes(item.type)) {
@@ -158,12 +144,12 @@
        if (item.resourceType === '1' && item.dataSource) {
          let _option = Utils.getSelectQueryOptions(item)
          if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) {
          if (window.GLOB.debugger === true) {
            console.info(_option.sql)
          }
          // 测试系统单个请求
          if (!window.GLOB.mkHS && options.sysType === 'local' && !window.GLOB.systemType) {
          if (!window.GLOB.mkHS && window.GLOB.sysType === 'local' && !window.GLOB.systemType) {
            deForms.push({
              ...item,
              arr_field: _option.field,
@@ -178,6 +164,33 @@
          }
        }
        item.oriOptions = fromJS(item.options).toJS()
        if (item.type === 'checkcard' && item.multiple === 'dropdown' && item.resourceType === '0') {
          this.resetCheckcard(item)
        }
      }
      if (item.signValue && item.initval) {
        let val = item.initval
        if (item.precision === 'hour') {
          if (/,/ig.test(val)) {
            val = val.split(',').map(m => m + ':00').join(',')
          } else {
            val = val + ':00'
          }
        }
        let text = val
        if (item.type === 'select' || item.type === 'link' || item.type === 'radio') {
          item.oriOptions.forEach(cell => {
            if (cell.Value === val) {
              text = cell.Text
            }
          })
        }
        advanceValues.push({field: item.field, type: item.type, label: item.label, value: val, text})
      }
      fieldMap.set(item.field, item)
@@ -213,16 +226,48 @@
    this.setState({
      setting: _setting,
      hasReqFields,
      hasReqFields: config.$s_req,
      advanceValues,
      searchlist: _list
    }, () => {
      if (!window.GLOB.mkHS && options.sysType === 'local' && window.GLOB.systemType !== 'production') {
      if (!window.GLOB.mkHS && window.GLOB.sysType === 'local' && window.GLOB.systemType !== 'production') {
        this.improveSimpleSearch(deForms)
      } else if (mainItems.length > 0 || localItems.length > 0) {
        this.improveSearch(mainItems, localItems)
      }
    })
  }
  resetCheckcard = (item) => {
    let pid = item.resourceType === '0' ? 'pid' : item.parentField
    let _options = []
    let _others = []
    item.oriOptions.forEach(op => {
      if (op[pid] === item.mark) {
        _options.push(op)
      } else {
        _others.push(op)
      }
    })
    _options = _options.map(op => {
      op.children = []
      _others = _others.filter(cell => {
        if (cell[pid] === op.$value) {
          op.children.push(cell)
          return false
        }
        return true
      })
      op.subIds = op.children.map(cell => cell.$value)
      return op
    })
    item.oriOptions = _options
    item.options = _options
  }
  // 查询下拉菜单
@@ -286,15 +331,11 @@
      mainparam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
      mainparam.secretkey = Utils.encrypt(mainparam.LText, mainparam.timestamp)
      if (window.GLOB.mainSystemApi) {
        mainparam.rduri = window.GLOB.mainSystemApi
      }
      if (window.GLOB.mkHS) { // 云端数据验证
        mainparam.open_key = Utils.encryptOpenKey(mainparam.secretkey, mainparam.timestamp)
        if (options.cloudServiceApi) {
          mainparam.rduri = options.cloudServiceApi
          mainparam.userid = sessionStorage.getItem('CloudUserID') || ''
          mainparam.LoginUID = sessionStorage.getItem('CloudLoginUID') || ''
        }
      } else if (window.GLOB.mainSystemApi) {
        mainparam.rduri = window.GLOB.mainSystemApi
      }
      deffers.push(
@@ -384,7 +425,7 @@
  resetSearch = (result) => {
    let _searchlist = fromJS(this.state.searchlist).toJS().map(item => {
      if (['select', 'link', 'multiselect', 'checkcard'].includes(item.type) && result[item.field] && result[item.field].length > 0) {
      if (['select', 'link', 'multiselect', 'checkcard', 'radio'].includes(item.type) && result[item.field] && result[item.field].length > 0) {
        let options = []
        let map = new Map()
        let all = false
@@ -432,6 +473,10 @@
        })
        item.oriOptions = [...item.oriOptions, ...options]
        if (item.type === 'checkcard' && item.multiple === 'dropdown') {
          this.resetCheckcard(item)
        }
      }
      if (item.linkField) {
@@ -514,6 +559,8 @@
        content = <DateGroup position={index} config={item} onChange={(val, type) => this.dateGroupChange(val, type, item)} />
      } else if (item.type === 'checkcard') {
        content = <MKCheckCard config={item} onChange={(val) => this.cardChange(val, item)} />
      } else if (item.type === 'radio') {
        content = <MKRadio config={item} onChange={(val) => this.recordChange(val, false, item)} />
      } else if (item.type === 'check') {
        content = <MKCheck config={item} onChange={(val) => this.recordChange(val, false, item)} />
      } else if (item.type === 'switch') {
@@ -582,7 +629,7 @@
      if (visible) {
        let advanceValues = []
        this.state.searchlist.forEach(item => {
          if (!item.advanced) return
          if (!item.signValue) return
    
          let val = this.record[item.field]
          if (val || val === 0) {
@@ -593,7 +640,18 @@
                val = val + ':00'
              }
            }
            advanceValues.push({field: item.field, type: item.type, label: item.label, value: val})
            let text = val
            if (item.type === 'select' || item.type === 'link' || item.type === 'radio') {
              item.oriOptions.forEach(cell => {
                if (cell.Value === val) {
                  text = cell.Text
                }
              })
            }
            advanceValues.push({field: item.field, type: item.type, label: item.label, value: val, text})
          }
        })
        this.setState({advanceValues})
@@ -611,6 +669,8 @@
  }
  handleSubmit = () => {
    const { config } = this.props
    this.setState({}, () => {
      this.props.form.validateFields((err, values) => {
        if (err) return
@@ -648,7 +708,21 @@
          this.sign = ''
        }, 2000)
        
        this.props.refreshdata(searches)
        if (config.wrap && config.wrap.cacheSearch === 'true') {
          let _values = {}
          searches.forEach(item => {
            _values[item.key] = item.value
          })
          window.GLOB.SearchBox.set(config.$searchId + 'cache', _values)
        }
        if (this.props.refreshdata) {
          this.props.refreshdata(searches)
        } else {
          window.GLOB.SearchBox.set(config.$searchId, searches)
          MKEmitter.emit('searchRefresh', config.$searchId)
        }
      })
    })
  }
@@ -657,10 +731,16 @@
   * @description 搜索条件重置
   */
  handleReset = () => {
    const { setting } = this.state
    let record = {}
    let advanceValues = []
    let searchlist = this.state.searchlist.map(item => {
      item.initval = item.oriInitval
      if (setting.resetContrl === 'clear' && ['text', 'date', 'datemonth', 'dateweek', 'daterange'].includes(item.type)) {
        item.initval = ''
      }
      if (item.type === 'group') {
        record[item.datefield] = item.initval
@@ -668,7 +748,7 @@
      } else {
        record[item.field] = item.initval
      }
      if (item.advanced && item.initval) {
      if (item.signValue && item.initval) {
        let val = item.initval
        if (item.precision === 'hour') {
          if (/,/ig.test(val)) {
@@ -677,7 +757,18 @@
            val = val + ':00'
          }
        }
        advanceValues.push({field: item.field, type: item.type, label: item.label, value: val})
        let text = val
        if (item.type === 'select' || item.type === 'link' || item.type === 'radio') {
          item.oriOptions.forEach(cell => {
            if (cell.Value === val) {
              text = cell.Text
            }
          })
        }
        advanceValues.push({field: item.field, type: item.type, label: item.label, value: val, text})
      }
      return item
@@ -781,7 +872,7 @@
    let advanceValues = []
    this.state.searchlist.forEach(item => {
      if (!item.advanced) return
      if (!item.signValue) return
      let val = this.record[item.field]
      if (val || val === 0) {
@@ -792,7 +883,18 @@
            val = val + ':00'
          }
        }
        advanceValues.push({field: item.field, type: item.type, label: item.label, value: val})
        let text = val
        if (item.type === 'select' || item.type === 'link' || item.type === 'radio') {
          item.oriOptions.forEach(cell => {
            if (cell.Value === val) {
              text = cell.Text
            }
          })
        }
        advanceValues.push({field: item.field, type: item.type, label: item.label, value: val, text})
      }
    })
@@ -830,7 +932,7 @@
                return (
                  <div key={index}>
                    <span>{item.label}: </span>
                    <span className="advance-value">{item.value}</span>
                    <span className="advance-value">{item.text}</span>
                    <CloseOutlined onClick={() => this.closeAdvanceForm(item)} />
                  </div>)
              })}