king
2021-07-08 0847aeed380492bafaf5b27a49ac4e4b77a819b1
2021-07-08
9个文件已修改
305 ■■■■ 已修改文件
src/menu/datasource/index.jsx 134 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/verifycard/index.jsx 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/verifycard/utils.jsx 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/mob/searchconfig/index.jsx 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/mob/searchconfig/settingform/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/mob/searchconfig/settingform/index.scss 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/topSearch/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils.js 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/index.jsx
@@ -16,6 +16,7 @@
  state = {
    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
    appType: sessionStorage.getItem('appType'),
    sourcelist: [],
    mainSearch: [],
    visible: false,
@@ -35,42 +36,129 @@
  editDataSource = () => {
    const { config } = this.props
    const { appType } = this.state
    let search = []
    let parents = []
    let _conf = config
    let getParents = (box) => {
    let menu = fromJS(window.GLOB.customMenu).toJS()
    if (appType === 'mob') {
      let ms = null
      menu.components.forEach(item => {
        if (item.type === 'topbar' && (item.wrap.type === 'search' || (item.wrap.type === 'navbar' && item.wrap.search === 'true'))) {
          ms = item.search
        }
      })
      if (config.floor > 1) {
        let _search = null
        let filterComponent = (box) => {
      box.components.forEach(item => {
        if (item.type !== 'tabs') return
            if (_search) return
            if (item.uuid === config.uuid) {
              _search = box.slist.pop()
            } else if (item.type === 'group') {
              item.components.forEach(m => {
                if (m.uuid !== config.uuid) return
                _search = box.slist.pop()
              })
            } else if (item.type === 'tabs') {
              let able = item.setting.display === 'inline-block' && item.setting.position === 'top'
        item.subtabs.forEach(tab => {
          if (_conf.parentId === tab.parentId && _conf.tabId === tab.uuid) {
            parents.unshift(tab)
            _conf = item
                if (able && tab.hasSearch === 'icon' && tab.search) {
                  tab.slist = [...box.slist, tab.search]
                } else {
                  tab.slist = [...box.slist]
                }
            if (_conf.parentId && _conf.tabId) {
              getParents(tab)
                filterComponent(tab)
              })
            }
          })
        }
        menu.slist = []
        filterComponent(menu)
        if (_search) {
          ms = _search
        }
      }
      if (ms) {
        if (ms.setting.type === 'search') {
          search.push({
            type: 'text',
            label: '搜索栏',
            field: ms.setting.field,
            match: ms.setting.match,
            required: ms.setting.required,
            value: ms.setting.initval || ''
          })
        }
        ms.fields.forEach(item => {
          if (item.type === 'range') {
            item.initval = `${item.minValue},${item.maxValue}`
          }
          search.push(item)
        })
        ms.groups.forEach(group => {
          if (group.setting.type === 'search') {
            search.push({
              type: 'text',
              label: group.wrap.name,
              field: group.setting.field,
              match: group.setting.match,
              required: group.setting.required,
              value: group.setting.initval || ''
            })
          }
          group.fields.forEach(item => {
            if (item.type === 'range') {
              item.initval = `${item.minValue},${item.maxValue}`
            }
            search.push(item)
          })
        })
            }
          } else {
            getParents(tab)
          }
        })
      })
    }
      if (config.floor > 1) {
        let _search = null
        let filterComponent = (box) => {
          box.components.forEach(item => {
            if (_search) return
    if (config.parentId && config.tabId) {
      getParents(window.GLOB.customMenu)
    }
    parents.unshift(window.GLOB.customMenu)
    parents.forEach(parent => {
      parent.components.forEach(item => {
        if (item.type === 'search') {
          search = item.search
              box.slist = [...box.slist, item.search]
            } else if (item.uuid === config.uuid) {
              _search = box.slist.pop()
            } else if (item.type === 'group') {
              item.components.forEach(m => {
                if (m.uuid !== config.uuid) return
                _search = box.slist.pop()
              })
            } else if (item.type === 'tabs') {
              item.subtabs.forEach(tab => {
                tab.slist = [...box.slist]
                filterComponent(tab)
              })
        }
      })
        }
        menu.slist = []
        filterComponent(menu)
        if (_search) {
          search = _search
        }
      } else {
        menu.components.forEach(item => {
          if (item.type !== 'search') return
          search = item.search
    })
      }
    }
    this.setState({
      visible: true,
src/menu/datasource/verifycard/index.jsx
@@ -34,6 +34,7 @@
    initsql: '',          // sql验证时变量声明及赋值
    usefulfields: '',
    defaultsql: '',       // 默认Sql
    defaultSearch: '',
    systemScripts: [],
    colColumns: [
      {
@@ -208,11 +209,18 @@
      })
    }
    let _search = this.formatSearch(search)
    _search = Utils.joinMainSearchkey(_search)
    _search = _search.replace(/@\$@/ig, '')
    _search = _search ? 'where ' + _search : ''
    this.setState({
      scripts,
      columns: fromJS(config.columns).toJS(),
      setting: _setting,
      searches: search,
      defaultSearch: _search,
      varMarks: Marks
    })
@@ -386,8 +394,15 @@
          return
        }
        let _search = this.formatSearch(search)
        _search = Utils.joinMainSearchkey(_search)
        _search = _search.replace(/@\$@/ig, '')
        _search = _search ? 'where ' + _search : ''
        this.setState({
          searches: search,
          defaultSearch: _search,
          setting: res
        }, () => {
          this.sqlverify(() => { // 验证成功
@@ -441,15 +456,9 @@
  }
  getdefaultSql = () => {
    const { columns, searches, setting } = this.state
    const { columns, setting, defaultSearch } = this.state
    let defaultsql = ''
    let arr_field = columns.map(col => col.field).join(',')
    let _search = this.formatSearch(searches)
    _search = Utils.joinMainSearchkey(_search)
    _search = _search.replace(/@\$@/ig, '')
    _search = _search ? 'where ' + _search : ''
    if (setting.dataresource) {
      let _dataresource = setting.dataresource
@@ -458,7 +467,7 @@
        _dataresource = '(' + _dataresource + ') tb'
      }
      defaultsql = `select top @pageSize@ ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by @orderBy@) as rows from ${_dataresource} ${_search}) tmptable where rows > (@pageSize@ * (@pageIndex@ - 1)) order by tmptable.rows`
      defaultsql = `select top @pageSize@ ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by @orderBy@) as rows from ${_dataresource} ${defaultSearch}) tmptable where rows > (@pageSize@ * (@pageIndex@ - 1)) order by tmptable.rows`
    }
    this.setState({defaultsql})
@@ -499,6 +508,8 @@
        item.value = moment().format('YYYY-MM-DD')
      } else if (item.type === 'daterange') {
        item.value = [moment().format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')].join(',')
      } else if (item.type === 'range') {
      } else if (item.type === 'multiselect' || (item.type === 'checkcard' && search.multiple === 'true')) {
        item.type = 'multi'
        item.value = '@$@'
@@ -534,8 +545,15 @@
            return
          }
          let _search = this.formatSearch(search)
          _search = Utils.joinMainSearchkey(_search)
          _search = _search.replace(/@\$@/ig, '')
          _search = _search ? 'where ' + _search : ''
          this.setState({
            searches: search,
            defaultSearch: _search,
            setting: res
          }, () => {
            this.sqlverify(() => { resolve({setting: res, columns, scripts }) }, reject, false)
@@ -569,7 +587,7 @@
  }
  sqlverify = (resolve, reject, change = false, testScripts) => {
    const { columns, setting, scripts, searches } = this.state
    const { columns, setting, scripts, searches, defaultSearch } = this.state
    let _scripts = scripts.filter(item => item.status !== 'false')
@@ -587,7 +605,7 @@
    }
    if ((setting.interType === 'system' && setting.execute !== 'false') || _scripts.length > 0) {
      let result = SettingUtils.getDebugSql(setting, _scripts, columns, searches)
      let result = SettingUtils.getDebugSql(setting, _scripts, columns, searches, defaultSearch)
      if (result.error) {
        notification.warning({
src/menu/datasource/verifycard/utils.jsx
@@ -7,7 +7,7 @@
   * @return {Object}  setting       页面设置
   * @return {Array}   columns       显示字段
   */
  static getDebugSql (setting, scripts, columns, searches = []) {
  static getDebugSql (setting, scripts, columns, searches = [], defSearch) {
    let sql = ''
    let error = ''
    let _dataresource = ''
@@ -77,7 +77,7 @@
          reg: new RegExp('@' + item.datefield + '1@', 'ig')
        })
      }
      if (['dateweek', 'datemonth', 'daterange'].includes(item.type)) {
      if (['dateweek', 'datemonth', 'daterange', 'range'].includes(item.type)) {
        _regoptions.push({
          var: new RegExp('@' + item.field, 'ig'),
          reg: new RegExp('@' + item.field + '@', 'ig')
@@ -114,7 +114,7 @@
      }
    })
    let _search = ''
    let _search = defSearch
    if (setting.queryType === 'statistics' && _dataresource) {
      _regoptions.forEach(item => {
@@ -136,7 +136,7 @@
      }, {
        reg: new RegExp('@FullName@', 'ig'),
      })
      if (setting.laypage !== 'false') {
      if (setting.laypage === 'true') {
        _regoptions.push({
          reg: new RegExp('@pageSize@', 'ig'),
        }, {
@@ -176,7 +176,11 @@
        _dataresource = '(' + _dataresource + ') tb'
      }
      _dataresource = `select${setting.laypage !== 'false' ?  ' top 10' : ''} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource} ${_search}) tmptable ${setting.laypage !== 'false' ?  'where rows > 0' : ''} order by tmptable.rows`
      if (setting.order) {
        _dataresource = `select${setting.laypage === 'true' ?  ' top 10' : ''} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource} ${_search}) tmptable ${setting.laypage === 'true' ?  'where rows > 0' : ''} order by tmptable.rows`
      } else {
        _dataresource = `select${setting.laypage === 'true' ?  ' top 10' : ''} ${arr_field} from ${_dataresource} ${_search}`
      }
    }
    if (_customScript) {
src/mob/searchconfig/index.jsx
@@ -148,20 +148,49 @@
   * 3、通过loading刷新
   */
  handleSubmit = () => {
    const { config } = this.state
    this.formRef.handleConfirm().then(res => {
      let _group = fromJS(this.state.group).toJS()
      let fieldrepet = false // 字段重复
      _group.fields = _group.fields.map(item => {
        if (item.uuid !== res.uuid && item.field.toLowerCase() === res.field.toLowerCase()) {
          fieldrepet = true
        }
        if (item.uuid === res.uuid) {
          return res
        } else {
          return item
        }
      })
      let fieldrepet = false // 字段重复
      let lowerField = res.field.toLowerCase()
      if (config.setting.field) {
        let m = config.setting.field.toLowerCase().split(',')
        if (m.includes(lowerField)) {
          fieldrepet = true
        }
      }
      config.fields.forEach(item => {
        if (item.uuid === res.uuid) return
        if (res.type === 'date' && item.type === 'date') return
        if (item.field.toLowerCase() === lowerField) {
          fieldrepet = true
        }
      })
      config.groups.forEach(group => {
        if (group.setting.field) {
          let m = group.setting.field.toLowerCase().split(',')
          if (m.includes(lowerField)) {
            fieldrepet = true
          }
        }
        group.fields.forEach(item => {
          if (item.uuid === res.uuid) return
          if (res.type === 'date' && item.type === 'date') return
          if (item.field.toLowerCase() === lowerField) {
            fieldrepet = true
          }
        })
      })
      if (fieldrepet) {
@@ -285,8 +314,54 @@
   * @description 保存分组设置
   */
  settingSave = () => {
    const { config } = this.state
    this.settingRef.handleConfirm().then(res => {
      let _group = {...this.state.group, setting: res}
      let lowers = _group.setting.field ? _group.setting.field.toLowerCase() : ''
      if (lowers) {
        let fieldrepet = false // 字段重复
        lowers = lowers.split(',')
        let length = lowers.length
        if (_group.floor !== 1 && config.setting.field) {
          let m = config.setting.field.toLowerCase().split(',')
          if (Array.from(new Set([...m, ...lowers])).length < m.length + length) {
            fieldrepet = true
          }
        }
        config.fields.forEach(item => {
          if (lowers.includes(item.field.toLowerCase())) {
            fieldrepet = true
          }
        })
        config.groups.forEach(group => {
          if (_group.uuid === group.uuid) return
          if (group.setting.field) {
            let m = group.setting.field.toLowerCase().split(',')
            if (Array.from(new Set([...m, ...lowers])).length < m.length + length) {
              fieldrepet = true
            }
          }
          group.fields.forEach(item => {
            if (lowers.includes(item.field.toLowerCase())) {
              fieldrepet = true
            }
          })
        })
        if (fieldrepet) {
          notification.warning({
            top: 92,
            message: '字段已存在!',
            duration: 10
          })
          return
        }
      }
      this.setState({
        group: _group,
        settingVisible: false
src/mob/searchconfig/settingform/index.jsx
@@ -69,7 +69,7 @@
    }
    return (
      <Form {...formItemLayout} className="ant-advanced-search-form modal-setting-form">
      <Form {...formItemLayout} className="mob-search-setting-form">
        <Row gutter={24}>
          <Col span={12}>
            <Form.Item label="顶部样式">
src/mob/searchconfig/settingform/index.scss
@@ -1,4 +1,4 @@
.ant-advanced-search-form.modal-setting-form {
.mob-search-setting-form {
  .textarea {
    .ant-form-item-label {
      width: 16.3%;
@@ -15,4 +15,9 @@
    position: relative;
    left: -3px;
  }
  .ant-col.ant-col-12 {
    display: inline-block;
    float: none;
    vertical-align: top;
  }
}
src/tabviews/zshare/topSearch/index.jsx
@@ -144,10 +144,6 @@
              data_sql: Utils.formatOptions(_option.sql)
            })
          } else { // 合并请求,区分本地及系统
            // 外联数据库替换
            if (window.GLOB.externalDatabase !== null) {
              _option.sql = _option.sql.replace(/@db@/ig, window.GLOB.externalDatabase)
            }
            if (item.database === 'sso') {
              mainItems.push(`select '${item.field}' as obj_name,'${_option.field}' as arr_field,'${window.btoa(window.encodeURIComponent(_option.sql))}' as LText`)
            } else {
src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
@@ -229,8 +229,10 @@
        fields = fields + ','
      }
      let database = btn.sheet.match(/(.*)\.(.*)\./ig) || ''
      let sheet = btn.sheet.replace(/(.*)\.(.*)\./ig, '')
      let database = btn.sheet.match(/(.*)\.(.*)\.|@db@/ig) || ''
      let sheet = btn.sheet.replace(/(.*)\.(.*)\.|@db@/ig, '')
      database = database ? (database[0] || '') : ''
      _value = `Insert into ${database}${sheet} (${fields}createuserid,createuser,createstaff,bid)\nSelect ${fields}@userid@,@username,@fullname,@BID@ From @${sheet}`
    } else {
src/utils/utils.js
@@ -500,6 +500,10 @@
        let _endval = moment(val[1], 'YYYY-MM-DD').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000'
        searchText += '(' + item.key + ' >= \'' + _startval + '\' AND ' + item.key + ' < \'' + _endval + '\')'
      } else if (item.type === 'range') {
        let val = item.value.split(',')
        searchText += '(' + item.key + ' >= \'' + val[0] + '\' AND ' + item.key + ' < \'' + val[1] + '\')'
      } else {
        searchText += '(' + item.key + ' ' + item.match + ' \'' + item.value + '\')'
      }
@@ -762,14 +766,21 @@
  let userName = sessionStorage.getItem('User_Name') || ''
  let fullName = sessionStorage.getItem('Full_Name') || ''
  let city = sessionStorage.getItem('city') || ''
  let _sheet = item.sheet
  if (sessionStorage.getItem('isEditState') === 'true') {
    userName = sessionStorage.getItem('CloudUserName') || ''
    fullName = sessionStorage.getItem('CloudFullName') || ''
  }
  let database = item.sheet.match(/(.*)\.(.*)\./ig) || ''
  let sheet = item.sheet.replace(/(.*)\.(.*)\./ig, '')
  if (window.GLOB.externalDatabase !== null) {
    _sheet = _sheet.replace(/@db@/ig, window.GLOB.externalDatabase)
  }
  let database = _sheet.match(/(.*)\.(.*)\./ig)
  let sheet = _sheet.replace(/(.*)\.(.*)\./ig, '')
  database = database ? (database[0] || '') : ''
  let getuuid = () => {
    let uuid = []