king
2023-09-19 9a1416e0b5cdb40f49b3c2061b04b35551d77e99
2023-09-19
11个文件已修改
2个文件已删除
1385 ■■■■ 已修改文件
src/menu/datasource/verifycard/customscript/index.jsx 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/verifycard/index.jsx 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/verifycard/utils.jsx 79 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/actioncomponent/verifyexcelout/utils.jsx 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcomponent/settingform/index.jsx 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx 500 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.scss 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/settingcomponent/settingform/utils.jsx 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/zshare/customscript/index.jsx 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils-custom.js 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/menudesign/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tabledesign/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/datasource/verifycard/customscript/index.jsx
@@ -33,74 +33,41 @@
  UNSAFE_componentWillMount() {
    const { searches } = this.props
    let _usefulFields = []
    searches.forEach(item => {
      if (!item.field) return
      if (item.type === 'group') {
        _usefulFields.push(item.field)
        _usefulFields.push(item.datefield)
        _usefulFields.push(item.datefield + '1')
      } else if (['dateweek', 'datemonth'].includes(item.type)) {
        _usefulFields.push(item.field)
        _usefulFields.push(item.field + '1')
      } else if (item.type === 'daterange') {
        let _skey = item.field
        let _ekey = item.field + '1'
        if (/,/.test(item.field)) {
          _skey = item.field.split(',')[0]
          _ekey = item.field.split(',')[1]
        }
        _usefulFields.push(_skey)
        _usefulFields.push(_ekey)
      } else if (item.type === 'date' && _usefulFields.includes(item.field)) {
        _usefulFields.push(item.field + '1')
      } else {
        _usefulFields.push(item.field)
      }
    })
    this.setState({
      usefulFields: _usefulFields.join(', ')
    })
    this.getSearchField(searches)
  }
  UNSAFE_componentWillReceiveProps (nextProps) {
    if (!is(fromJS(this.props.searches), fromJS(nextProps.searches))) {
      this.getSearchField(nextProps.searches)
    }
  }
      
  getSearchField = (searches) => {
      let _usefulFields = []
      nextProps.searches.forEach(item => {
        if (!item.field) return
        if (item.type === 'group') {
          _usefulFields.push(item.field)
          _usefulFields.push(item.datefield)
          _usefulFields.push(item.datefield + '1')
        } else if (['dateweek', 'datemonth'].includes(item.type)) {
          _usefulFields.push(item.field)
          _usefulFields.push(item.field + '1')
    searches.forEach(item => {
      if (['dateweek', 'datemonth'].includes(item.type)) {
        _usefulFields.push(item.key)
        _usefulFields.push(item.key + '1')
        } else if (item.type === 'daterange') {
          let _skey = item.field
          let _ekey = item.field + '1'
        let _skey = item.key
        let _ekey = item.key + '1'
          if (/,/.test(item.field)) {
            _skey = item.field.split(',')[0]
            _ekey = item.field.split(',')[1]
        if (/,/.test(item.key)) {
          _skey = item.key.split(',')[0]
          _ekey = item.key.split(',')[1]
          }
          _usefulFields.push(_skey)
          _usefulFields.push(_ekey)
        } else if (item.type === 'date' && _usefulFields.includes(item.field)) {
          _usefulFields.push(item.field + '1')
      } else if (item.type === 'date' && _usefulFields.includes(item.key)) {
        _usefulFields.push(item.key + '1')
        } else {
          _usefulFields.push(item.field)
        _usefulFields.push(item.key)
        }
      })
      this.setState({
        usefulFields: _usefulFields.join(', ')
      })
    }
  }
  edit = (record) => {
src/menu/datasource/verifycard/index.jsx
@@ -8,7 +8,7 @@
import Api from '@/api'
import Utils from '@/utils/utils.js'
import { formatSearch, joinMainSearchkey } from '@/utils/utils-custom.js'
import asyncComponent from '@/utils/asyncComponent'
import ColForm from './columnform'
import CustomScriptsForm from './customscript'
@@ -44,7 +44,6 @@
    initsql: '',          // sql验证时变量声明及赋值
    usefulfields: '',
    defaultsql: '',       // 默认Sql
    defaultSearch: '',
    systemScripts: [],
    median: {},
    visible: false,
@@ -210,11 +209,6 @@
      })
    }
    let _search = this.formatSearch(search)
    _search = Utils.joinMainSearchkey(_search)
    _search = _search.replace(/@\$@/ig, '')
    _search = _search ? 'where ' + _search : ''
    let columns = config.columns ? fromJS(config.columns).toJS() : []
    let subColumns = config.subColumns ? fromJS(config.subColumns).toJS() : []
@@ -227,8 +221,7 @@
      subColumns: subColumns,
      setting: _setting,
      median: _setting,
      searches: search,
      defaultSearch: _search,
      searches: formatSearch(search),
      searchKey: '',
      debugId: _setting.debugId || ''
    })
@@ -426,15 +419,8 @@
          search = [...search, ...mainSearch]
        }
        let _search = this.formatSearch(search)
        _search = Utils.joinMainSearchkey(_search)
        _search = _search.replace(/@\$@/ig, '')
        _search = _search ? 'where ' + _search : ''
        this.setState({
          searches: search,
          defaultSearch: _search,
          searches: formatSearch(search),
          setting: res
        }, () => {
          this.sqlverify(() => { // 验证成功
@@ -513,9 +499,12 @@
  }
  getdefaultSql = () => {
    const { columns, setting, defaultSearch } = this.state
    const { columns, setting, searches } = this.state
    let defaultsql = ''
    let arr_field = columns.map(col => col.field).join(',')
    let _search = joinMainSearchkey(searches)
    _search = _search ? 'where ' + _search : ''
    if (setting.dataresource) {
      let _dataresource = setting.dataresource
@@ -524,59 +513,10 @@
        _dataresource = '(' + _dataresource + ') tb'
      }
      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`
      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`
    }
    this.setState({defaultsql})
  }
  /**
   * @description 获取全部搜索条件
   * @param {Array} searches 搜索条件数组
   */
  formatSearch (searches) {
    if (!searches) return []
    let newsearches = []
    searches.forEach(search => {
      if (!search.field) return
      let item = {
        key: search.field,
        match: search.match,
        type: search.type,
        label: search.label,
        value: search.initval,
        required: search.required === 'true'
      }
      if (item.type === 'group') {
        item.key = search.datefield
        item.type = 'daterange'
        item.match = 'between'
        item.value = [moment().format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')].join(',')
        newsearches.push(item)
        return
      } else if (item.type === 'date') {
        item.value = moment().format('YYYY-MM-DD')
      } else if (item.type === 'datemonth') {
        item.value = moment().format('YYYY-MM')
      } else if (item.type === 'dateweek') {
        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 = '@$@'
      } else {
        item.value = '@$@'
      }
      newsearches.push(item)
    })
    return newsearches
  }
  submitDataSource = () => {
@@ -611,15 +551,8 @@
            search = [...search, ...mainSearch]
          }
          let _search = this.formatSearch(search)
          _search = Utils.joinMainSearchkey(_search)
          _search = _search.replace(/@\$@/ig, '')
          _search = _search ? 'where ' + _search : ''
          this.setState({
            searches: search,
            defaultSearch: _search,
            searches: formatSearch(search),
            setting: res
          }, () => {
            this.sqlverify(() => { resolve({setting: res, columns, subColumns, scripts, cols }) }, reject, 'submit')
@@ -674,7 +607,7 @@
  sqlverify = (resolve, reject, type, testScripts) => {
    const { config } = this.props
    const { columns, setting, scripts, searches, defaultSearch, debugId } = this.state
    const { columns, setting, scripts, searches, debugId } = this.state
    let _scripts = scripts.filter(item => item.status !== 'false')
@@ -697,7 +630,7 @@
    }
    if ((setting.interType === 'system' && setting.execute !== 'false') || _scripts.length > 0) {
      let r = SettingUtils.getDebugSql(setting, _scripts, columns, searches, defaultSearch, config.type)
      let r = SettingUtils.getDebugSql(setting, _scripts, columns, searches, config.type)
      let _debugId = md5(r.sql)
src/menu/datasource/verifycard/utils.jsx
@@ -1,4 +1,6 @@
import { getSearchRegs, joinMainSearchkey } from '@/utils/utils-custom.js'
export default class SettingUtils {
  /**
   * @description 生成页面查询语句
@@ -7,7 +9,7 @@
   * @return {Object}  setting       页面设置
   * @return {Array}   columns       显示字段
   */
  static getDebugSql (setting, scripts, columns, searches = [], defSearch, type) {
  static getDebugSql (setting, scripts, columns, searches = [], type) {
    let sql = ''
    let error = ''
    let _dataresource = ''
@@ -95,85 +97,28 @@
    }
    // 正则替换
    let _regoptions = []
    let _fields = []
    let custompage = /@pageSize@|@orderBy@/i.test(_dataresource + _customScript)
    let _regoptions = getSearchRegs(searches)
    searches.forEach(item => {
      if (!item.field) return
      if (item.datefield) {
        _regoptions.push({
          reg: new RegExp('@' + item.datefield + '@', 'ig')
        })
        _regoptions.push({
          reg: new RegExp('@' + item.datefield + '1@', 'ig')
        })
      }
      if (['dateweek', 'datemonth', 'range'].includes(item.type)) {
        _regoptions.push({
          reg: new RegExp('@' + item.field + '@', 'ig')
        })
        _regoptions.push({
          reg: new RegExp('@' + item.field + '1@', 'ig')
        })
      } else if (item.type === 'daterange') {
        let _skey = item.field
        let _ekey = item.field + '1'
        if (/,/.test(item.field)) {
          _skey = item.field.split(',')[0]
          _ekey = item.field.split(',')[1]
        }
        _regoptions.push({
          reg: new RegExp('@' + _skey + '@', 'ig')
        })
        _regoptions.push({
          reg: new RegExp('@' + _ekey + '@', 'ig')
        })
      } else if (item.type === 'date') {
        if (_fields.includes(item.field)) {
          _regoptions.push({
            reg: new RegExp('@' + item.field + '1@', 'ig')
          })
        } else {
          _fields.push(item.field)
          _regoptions.push({
            reg: new RegExp('@' + item.field + '@', 'ig')
          })
        }
      } else if (item.type === 'text' || item.type === 'select') {
        item.field.split(',').forEach(field => {
          _regoptions.push({
            reg: new RegExp('@' + field + '@', 'ig')
          })
        })
      } else {
        _regoptions.push({
          reg: new RegExp('@' + item.field + '@', 'ig')
        })
      }
    })
    let _search = joinMainSearchkey(searches)
    _search = _search ? 'where ' + _search : ''
    _regoptions.push({
      reg: new RegExp('@orderBy@', 'ig'),
    }, {
      reg: new RegExp('@UserName@', 'ig'),
    }, {
      reg: new RegExp('@FullName@', 'ig'),
      value: setting.order || ''
    }, {
      reg: new RegExp('@pageSize@', 'ig'),
      value: 9999
    }, {
      reg: new RegExp('@pageIndex@', 'ig'),
      value: 1
    })
    _regoptions.forEach(item => {
      _dataresource = _dataresource.replace(item.reg, '0')
      _customScript = _customScript.replace(item.reg, '0')
      _tailScript = _tailScript.replace(item.reg, '0')
      _dataresource = _dataresource.replace(item.reg, item.value || '0')
      _customScript = _customScript.replace(item.reg, item.value || '0')
      _tailScript = _tailScript.replace(item.reg, item.value || '0')
    })
    let _search = defSearch
    if (setting.queryType === 'statistics') {
      _search = ''
src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx
@@ -884,7 +884,7 @@
      return
    }
    let sql = SettingUtils.getDebugSql(verify, scripts, (verify.useSearch === 'true' ? searches : []), Utils)
    let sql = SettingUtils.getDebugSql(verify, scripts, (verify.useSearch === 'true' ? searches : []))
    let _debugId = md5(sql)
src/templates/sharecomponent/actioncomponent/verifyexcelout/utils.jsx
@@ -1,18 +1,17 @@
import moment from 'moment'
import { formatSearch, getSearchRegs, joinMainSearchkey } from '@/utils/utils-custom.js'
export default class SettingUtils {
  /**
   * @description 生成页面查询语句
   */
  static getDebugSql (verify, scripts, searches, Utils) {
  static getDebugSql (verify, scripts, searches) {
    let sql = ''
    let _dataresource = verify.dataresource || ''
    let regoptions = this.getRegOptions(searches)
    let _search = this.formatSearch(searches)
    _search = Utils.joinMainSearchkey(_search)
    let _search = formatSearch(searches)
    let regoptions = getSearchRegs(_search)
    _search = _search.replace(/@\$@/ig, '')
    _search = joinMainSearchkey(_search)
    _search = _search ? 'where ' + _search : ''
    let arr_field = []
@@ -129,127 +128,5 @@
    }
    return sql
  }
  /**
   * @description 获取全部搜索条件
   * @param {Array} searches 搜索条件数组
   */
  static formatSearch (searches) {
    if (!searches || searches.length === 0) return []
    let newsearches = []
    searches.forEach(search => {
      if (!search.field) return
      let item = {
        key: search.field,
        match: search.match,
        type: search.type,
        label: search.label,
        value: search.initval,
        required: search.required === 'true'
      }
      if (item.type === 'group') {
        item.key = search.datefield
        item.type = 'daterange'
        item.match = 'between'
        item.value = [moment().format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')].join(',')
        newsearches.push(item)
        return
      } else if (item.type === 'date') {
        item.value = moment().format('YYYY-MM-DD')
      } else if (item.type === 'datemonth') {
        item.value = moment().format('YYYY-MM')
      } else if (item.type === 'dateweek') {
        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 === 'multiselect' || (item.type === 'checkcard' && search.multiple === 'true')) {
        item.type = 'multi'
        item.value = '@$@'
      } else {
        item.value = '@$@'
      }
      newsearches.push(item)
    })
    return newsearches
  }
  /**
   * @description 获取搜索用于正则替换
   * @param {Array}   searches     搜索条件
   * @return {String}  searchText  拼接结果
   */
  static getRegOptions (searches) {
    if (!searches || searches.length === 0) return []
    let options = []
    let fieldmap = new Map()
    searches.forEach(search => {
      let item = {
        key: search.field,
        value: '0'
      }
      if (fieldmap.has(item.key)) {
        item.key = item.key + '1'
      }
      fieldmap.set(item.key, true)
      if (search.type === 'group') {
        options.push({
          key: search.field,
          value: '0'
        })
        options.push({
          key: search.datefield,
          value: '0'
        })
        options.push({
          key: search.datefield + '1',
          value: '0'
        })
        options.push(item)
      } else if (['datemonth', 'dateweek'].includes(search.type)) {
        options.push(item)
        options.push({
          key: item.key + '1',
          value: '0'
        })
      } else if (search.type === 'daterange') {
        let _skey = search.field
        let _ekey = search.field + '1'
        if (/,/.test(search.field)) {
          _skey = search.field.split(',')[0]
          _ekey = search.field.split(',')[1]
        }
        options.push({
          key: _skey,
          value: '0'
        })
        options.push({
          key: _ekey,
          value: '0'
        })
      } else if (search.type === 'text' || search.type === 'select') {
        item.key.split(',').forEach(field => {
          let cell = JSON.parse(JSON.stringify(item))
          cell.key = field
          options.push(cell)
        })
      } else {
        options.push(item)
      }
    })
    return options
  }
}
src/templates/sharecomponent/settingcomponent/settingform/index.jsx
@@ -3,10 +3,10 @@
import { fromJS } from 'immutable'
import { Form, notification, Modal, Spin, Tabs, Typography, Popconfirm, Button } from 'antd'
import { CheckCircleOutlined, StopOutlined, SwapOutlined, DeleteOutlined, BorderOutlined } from '@ant-design/icons'
import moment from 'moment'
import Api from '@/api'
import Utils from '@/utils/utils.js'
import { formatSearch, joinMainSearchkey } from '@/utils/utils-custom.js'
import SettingUtils from './utils.jsx'
import asyncComponent from '@/utils/asyncComponent'
import DataSource from './datasource'
@@ -30,9 +30,8 @@
    formlist: [],
    btnloading: false,
    activeKey: 'setting',
    search: '',
    searches: [],
    arr_field: '',
    regoptions: [],
    setting: null,
    defaultSql: '',
    visible: false,
@@ -78,25 +77,7 @@
      })
    }
    // 搜索的where条件
    let _search = this.formatSearch(search)
    _search = Utils.joinMainSearchkey(_search)
    _search = _search.replace(/@\$@/ig, '')
    _search = _search ? 'where ' + _search : ''
    let status = fromJS(_setting).toJS()
    let regoptions = this.getRegOptions(search)
    if (config.urlFields && config.urlFields.length > 0) {
      config.urlFields.forEach(field => {
        regoptions.push({
          key: field,
          value: '0',
          type: 'url'
        })
      })
    }
    if (window.GLOB.funcs && window.GLOB.funcs.length > 0) {
      window.GLOB.funcs.forEach(m => {
@@ -112,9 +93,8 @@
    this.setState({
      setting: _setting,
      search: _search,
      searches: formatSearch(search),
      arr_field: arr_field.join(','),
      regoptions: regoptions, // 搜索条件,正则替换
      columns: columns,
      scripts: _scripts,
      status
@@ -123,123 +103,6 @@
  componentDidMount () {
    this.props.updRecord(this.state.status)
  }
  getRegOptions = (searches) => {
    if (!searches || searches.length === 0) return []
    let options = []
    let fieldmap = new Map()
    searches.forEach(search => {
      let item = {
        key: search.field,
        value: '0'
      }
      if (fieldmap.has(item.key)) {
        item.key = item.key + '1'
      }
      fieldmap.set(item.key, true)
      if (search.type === 'group') {
        options.push({
          key: search.field,
          value: '0'
        })
        options.push({
          key: search.datefield,
          value: '0'
        })
        options.push({
          key: search.datefield + '1',
          value: '0'
        })
        options.push(item)
      } else if (['datemonth', 'dateweek'].includes(search.type)) {
        options.push(item)
        options.push({
          key: item.key + '1',
          value: '0'
        })
      } else if (search.type === 'daterange') {
        let _skey = search.field
        let _ekey = search.field + '1'
        if (/,/.test(search.field)) {
          _skey = search.field.split(',')[0]
          _ekey = search.field.split(',')[1]
        }
        options.push({
          key: _skey,
          value: '0'
        })
        options.push({
          key: _ekey,
          value: '0'
        })
      } else if (search.type === 'text' || search.type === 'select') {
        item.key.split(',').forEach(field => {
          let cell = JSON.parse(JSON.stringify(item))
          cell.key = field
          options.push(cell)
        })
      } else {
        options.push(item)
      }
    })
    return options
  }
  /**
   * @description 获取全部搜索条件
   * @param {Array} searches 搜索条件数组
   */
  formatSearch (searches) {
    if (!searches || searches.length === 0) return []
    let newsearches = []
    searches.forEach(search => {
      if (!search.field) return
      let item = {
        key: search.field,
        match: search.match,
        type: search.type,
        label: search.label,
        value: search.initval,
        required: search.required === 'true'
      }
      if (item.type === 'group') {
        item.key = search.datefield
        item.type = 'daterange'
        item.match = 'between'
        item.value = [moment().format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')].join(',')
        newsearches.push(item)
        return
      } else if (item.type === 'date') {
        item.value = moment().format('YYYY-MM-DD')
      } else if (item.type === 'datemonth') {
        item.value = moment().format('YYYY-MM')
      } else if (item.type === 'dateweek') {
        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 === 'multiselect' || (item.type === 'checkcard' && search.multiple === 'true')) {
        item.type = 'multi'
        item.value = '@$@'
      } else {
        item.value = '@$@'
      }
      newsearches.push(item)
    })
    return newsearches
  }
  handleConfirm = (trigger) => {
@@ -297,7 +160,8 @@
  }
  sqlverify = (_resolve, _reject, type, uscripts) => {
    const { setting, scripts, arr_field, regoptions, search } = this.state
    const { config } = this.props
    const { setting, scripts, arr_field, searches } = this.state
    if (setting.interType !== 'system') { // 不使用系统接口时,不需要sql验证
      _resolve()
@@ -316,7 +180,7 @@
    } else if (type === 'scripts' && _scripts.length === 0) {
      _resolve()
    } else { // type 为 submit 、 verify ,以及其他需要验证的场景
      let r = SettingUtils.getDebugSql(setting, _scripts, arr_field, regoptions, search)
      let r = SettingUtils.getDebugSql(setting, _scripts, arr_field, searches, config.urlFields)
      if (r.errors) {
        notification.warning({
@@ -341,7 +205,7 @@
  // 标签切换
  changeTab = (val) => {
    const { activeKey, search, arr_field } = this.state
    const { activeKey, searches, arr_field } = this.state
    if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.scriptsForm.props.form.getFieldValue('sql'))) {
      notification.warning({
@@ -357,11 +221,14 @@
        if (res.dataresource) {
          let _dataresource = res.dataresource
          let _search = joinMainSearchkey(searches)
          _search = _search ? 'where ' + _search : ''
          if (/\s/.test(_dataresource)) {
            _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} ${_search}) tmptable where rows > (@pageSize@ * (@pageIndex@ - 1)) order by tmptable.rows`
        }
        
        this.setState({
@@ -517,7 +384,7 @@
              scripts={scripts}
              defaultSql={defaultSql}
              urlFields={config.urlFields}
              searches={this.props.search}
              searches={this.state.searches}
              scriptsChange={this.scriptsChange}
              scriptsUpdate={this.scriptsUpdate}
              wrappedComponentRef={(inst) => this.scriptsForm = inst}
src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx
File was deleted
src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.scss
File was deleted
src/templates/sharecomponent/settingcomponent/settingform/utils.jsx
@@ -1,13 +1,11 @@
import { getSearchRegs, joinMainSearchkey } from '@/utils/utils-custom.js'
export default class SettingUtils {
  /**
   * @description 生成页面查询语句
   * @return {String}  arr_field     显示列字段
   * @return {String}  search        搜索条件
   * @return {Object}  setting       页面设置
   * @return {Array}   regoptions    搜索条件正则替换
   */
  static getDebugSql (setting, scripts, arr_field, regoptions, search) {
  static getDebugSql (setting, scripts, arr_field, searches = [], urlFields) {
    let sql = ''
    let _dataresource = setting.dataresource || ''
    let _customScript = ''
@@ -53,22 +51,22 @@
      _customScript = _customScript.replace(/@db@/ig, window.GLOB.externalDatabase)
    }
    
    let _regoptions = getSearchRegs(searches)
    let _search = joinMainSearchkey(searches)
    _search = _search ? 'where ' + _search : ''
    // 正则替换
    let _regoptions = regoptions.map(item => {
      return {
        reg: new RegExp('@' + item.key + '@', 'ig'),
        value: `'0'`,
        type: item.type || ''
      }
    if (urlFields && urlFields.length > 0) {
      urlFields.forEach(field => {
        _regoptions.push({
          reg: new RegExp('@' + field + '@', 'ig'),
          value: `'0'`
    })
      })
    }
    _regoptions.push({
      reg: new RegExp('@userName@', 'ig'),
      value: `''`
    }, {
      reg: new RegExp('@fullName@', 'ig'),
      value: `''`
    }, {
      reg: new RegExp('@orderBy@', 'ig'),
      value: setting.order
    }, {
@@ -79,24 +77,13 @@
      value: 1
    })
    let _search = search
    if (setting.queryType === 'statistics' && _dataresource) {
      _regoptions.forEach(item => {
        _dataresource = _dataresource.replace(item.reg, item.value)
      })
      _search = ''
    } else if (_dataresource) {
      _regoptions.forEach(item => {
        if (item.type !== 'url') return
        _dataresource = _dataresource.replace(item.reg, item.value)
      })
    }
    if (_customScript) {
      _regoptions.forEach(item => {
        _customScript = _customScript.replace(item.reg, item.value)
      })
    if (setting.queryType === 'statistics' && _dataresource) {
      _search = ''
    }
    // 数据源处理, 存在显示列时 
@@ -139,62 +126,5 @@
    }
    return { sql, errors: errors.join(';') }
  }
  /**
   * @description 生成前置或后置语句
   * @return {String}  scripts       脚本
   * @return {Array}   regoptions    搜索条件正则替换
   */
  static getCustomDebugSql (scripts, regoptions) {
    let sql = ''
    let _customScript = ''
    scripts.forEach(script => {
      if (script.status === 'false') return
      _customScript += `
      ${script.sql}
      `
    })
    if (_customScript) {
      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
        ${_customScript}
      `
    }
    if (window.GLOB.funcs && window.GLOB.funcs.length > 0) {
      window.GLOB.funcs.forEach(item => {
        let reg = new RegExp('\\$ex@' + item.func_code + '@ex\\$', 'ig')
        _customScript = _customScript.replace(reg, `/*$ex@${item.func_code}-begin*/\n${item.key_sql}\n/*@ex$-end*/`)
      })
    }
    _customScript = _customScript.replace(/@\$|\$@/ig, '')
    _customScript = _customScript.replace(/@userName@|@fullName@/ig, `''`)
    // 正则替换
    if (regoptions) {
      let _regoptions = regoptions.map(item => {
        return {
          reg: new RegExp('@' + item.key + '@', 'ig'),
          value: `'0'`
        }
      })
      _regoptions.forEach(item => {
        _customScript = _customScript.replace(item.reg, item.value)
      })
    }
    if (_customScript) {
      sql = `${_customScript}
        aaa:
        if @ErrorCode!=''
          insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select '1949-10-01 15:00:00',@ErrorCode, @retmsg,'1949-10-01 15:00:00'
      `
    }
    return sql
  }
}
src/templates/zshare/customscript/index.jsx
@@ -94,18 +94,23 @@
    let _usefulFields = []
    searches.forEach(item => {
      if (!item.field) return
      if (item.type === 'group') {
        _usefulFields.push(item.field)
        _usefulFields.push(item.datefield)
        _usefulFields.push(item.datefield + '1')
      } else if (['dateweek', 'datemonth', 'daterange'].includes(item.type)) {
        _usefulFields.push(item.field)
        _usefulFields.push(item.field + '1')
      } else if (_usefulFields.includes(item.field)) {
        _usefulFields.push(item.field + '1')
      if (['dateweek', 'datemonth'].includes(item.type)) {
        _usefulFields.push(item.key)
        _usefulFields.push(item.key + '1')
      } else if (item.type === 'daterange') {
        let _skey = item.key
        let _ekey = item.key + '1'
        if (/,/.test(item.key)) {
          _skey = item.key.split(',')[0]
          _ekey = item.key.split(',')[1]
        }
        _usefulFields.push(_skey)
        _usefulFields.push(_ekey)
      } else if (item.type === 'date' && _usefulFields.includes(item.key)) {
        _usefulFields.push(item.key + '1')
      } else {
        _usefulFields.push(item.field.replace(/,/ig, ', '))
        _usefulFields.push(item.key.replace(/,/ig, ', '))
      }
    })
src/utils/utils-custom.js
@@ -932,6 +932,178 @@
}
/**
 * @description 格式化搜索条件
 */
export function formatSearch (searches) {
  if (!searches) return []
  let newsearches = []
  searches.forEach(item => {
    if (!item.field) return
    if (item.type === 'group') {
      newsearches.push({
        key: item.field,
        match: '',
        type: item.type,
        value: 'customized',
        forbid: true
      }, {
        key: item.datefield,
        match: 'between',
        type: 'daterange',
        value: '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000',
        forbid: item.query === 'false'
      })
    } else {
      let value = item.initval
      let type = item.type
      if (item.type === 'date') {
        value = '1949-10-01 00:00:00.000'
      } else if (item.type === 'datemonth') {
        value = '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000'
      } else if (item.type === 'dateweek') {
        value = '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000'
      } else if (item.type === 'daterange') {
        value = '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000'
      } else if (item.type === 'range') {
        value = `${item.minValue},${item.maxValue}`
      } else if (item.type === 'multiselect' || (item.type === 'checkcard' && item.multiple === 'true')) {
        type = 'multi'
        value = '0'
      } else {
        value = '0'
      }
      newsearches.push({
        key: item.field,
        match: item.match,
        type: type,
        value: value,
        precision: item.precision || 'day',
        forbid: item.query === 'false'
      })
    }
  })
  return newsearches
}
/**
 * @description 拼接where条件
 */
export function joinMainSearchkey (searches) {
  if (!searches || searches.length === 0) return ''
  let searchText = []
  searches.forEach(item => {
    if (item.forbid) return
    if (item.type === 'text' || item.type === 'select') { // 综合搜索,文本或下拉,所有字段拼接
      let str = item.match === 'like' || item.match === 'not like' ? '%' : ''
      let fields = item.key.split(',').map(field => {
        return field + ' ' + item.match + ' \'' + str + item.value + str + '\''
      })
      searchText.push('(' + fields.join(' OR ') + ')')
    } else if (item.type === 'checkcard') {
      let str = item.match === 'like' || item.match === 'not like' ? '%' : ''
      searchText.push('(' + item.key + ' ' + item.match + ' \'' + str + item.value + str + '\')')
    } else if (item.type === 'multi') {
      searchText.push(`('${item.value}' ${item.match} '%'+${item.key}+'%')`)
    } else if (item.type === 'date') {
      searchText.push('(' + item.key + ' ' + item.match + ' \'' + item.value + '\')')
    } else if (item.type === 'datemonth' || item.type === 'dateweek' || item.type === 'range') {
      let val = item.value.split(',')
      searchText.push('(' + item.key + ' >= \'' + val[0] + '\' AND ' + item.key + ' < \'' + val[1] + '\')')
    } else if (item.type === 'daterange') {
      let val = item.value.split(',')
      let _skey = item.key
      let _ekey = item.key
      if (/,/.test(item.key)) {
        _skey = item.key.split(',')[0]
        _ekey = item.key.split(',')[1]
      }
      searchText.push('(' + _skey + ' >= \'' + val[0] + '\' AND ' + _ekey + ' < \'' + val[1] + '\')')
    } else {
      searchText.push('(' + item.key + ' ' + item.match + ' \'' + item.value + '\')')
    }
  })
  return searchText.join(' AND ')
}
/**
 * @description 获取搜索正则替换
 */
export function getSearchRegs (searches) {
  if (!searches) return []
  let options = []
  let fieldmap = new Map()
  searches.forEach(item => {
    if (item.type === 'date') {
      if (fieldmap.has(item.key)) {
        options.push({
          reg: new RegExp('@' + item.key + '1@', 'ig'),
          value: `'${item.value}'`
        })
      } else {
        fieldmap.set(item.key, true)
        options.push({
          reg: new RegExp('@' + item.key + '@', 'ig'),
          value: `'${item.value}'`
        })
      }
    } else if (['dateweek', 'datemonth', 'range'].includes(item.type)) {
      let val = item.value.split(',')
      options.push({
        reg: new RegExp('@' + item.key + '@', 'ig'),
        value: `'${val[0]}'`
      }, {
        reg: new RegExp('@' + item.key + '1@', 'ig'),
        value: `'${val[1]}'`
      })
    } else if (item.type === 'daterange') {
      let val = item.value.split(',')
      let _skey = item.key
      let _ekey = item.key + '1'
      if (/,/.test(item.key)) {
        _skey = item.key.split(',')[0]
        _ekey = item.key.split(',')[1]
      }
      options.push({
        reg: new RegExp('@' + _skey + '@', 'ig'),
        value: `'${val[0]}'`
      }, {
        reg: new RegExp('@' + _ekey + '@', 'ig'),
        value: `'${val[1]}'`
      })
    } else if (item.type === 'text' || item.type === 'select') {
      item.key.split(',').forEach(field => {
        options.push({
          reg: new RegExp('@' + field + '@', 'ig'),
          value: `'${item.value}'`
        })
      })
    } else {
      options.push({
        reg: new RegExp('@' + item.key + '@', 'ig'),
        value: `'${item.value}'`
      })
    }
  })
  return options
}
/**
 * @description 重置移动端style
 * @return {Object}  style
 */
src/views/menudesign/index.jsx
@@ -36,7 +36,7 @@
const PasteController = asyncComponent(() => import('@/menu/pastecontroller'))
const StyleController = asyncComponent(() => import('@/menu/stylecontroller'))
const ReplaceField = asyncComponent(() => import('@/menu/replaceField'))
// const Debug = asyncComponent(() => import('@/menu/debug'))
const Debug = asyncComponent(() => import('@/menu/debug'))
const NormalCss = asyncComponent(() => import('@/menu/normalCss'))
const Versions = asyncComponent(() => import('@/menu/versions'))
const TableNodes = asyncComponent(() => import('@/menu/tablenodes'))
@@ -1162,7 +1162,7 @@
              <div className={'menu-view' + (menuloading ? ' saving' : '') + (eyeopen ? ' eye-open' : '')}>
                <Card bordered={false} extra={
                  <div className="mk-opeartion-list">
                    {/* <Debug config={config}/> */}
                    <Debug config={config}/>
                    <Button className="mk-border-purple" onClick={() => this.setState({eyeopen: !eyeopen})}>{!eyeopen ? <EyeOutlined /> : <EyeInvisibleOutlined />} 组件名</Button>
                    <Versions MenuId={MenuId} open_edition={config ? config.open_edition : ''}/>
                    <TableNodes config={config} />
src/views/tabledesign/index.jsx
@@ -34,7 +34,7 @@
const BgController = asyncComponent(() => import('@/pc/bgcontroller'))
const StyleController = asyncComponent(() => import('@/menu/stylecontroller'))
const ReplaceField = asyncComponent(() => import('@/menu/replaceField'))
// const Debug = asyncComponent(() => import('@/menu/debug'))
const Debug = asyncComponent(() => import('@/menu/debug'))
const Versions = asyncComponent(() => import('@/menu/versions'))
const Transfer = asyncComponent(() => import('@/menu/transfer'))
const Unattended = asyncComponent(() => import('@/templates/zshare/unattended'))
@@ -872,7 +872,7 @@
              <div className={'menu-view' + (menuloading ? ' saving' : '')}>
                <Card bordered={false} extra={
                  <div className="mk-opeartion-list">
                    {/* {config ? <Debug config={config}/> : null} */}
                    {config ? <Debug config={config}/> : null}
                    {config ? <Transfer config={config}/> : null}
                    {config ? <Unattended config={config} updateConfig={this.updateConfig}/> : null}
                    <Versions MenuId={MenuId} open_edition={config ? config.open_edition : ''}/>