12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import moment from 'moment'
- import { message } from 'antd'
- import { IFieldConfig } from './types'
- import { IQueryVariableMap } from 'app/containers/Dashboard/types'
- export function getDefaultFieldConfig (): IFieldConfig {
- return {
- alias: '',
- desc: '',
- useExpression: false
- }
- }
- export function extractQueryVariableNames (expression: string, withBoundaryToken: boolean = false) {
- const names = []
- if (!expression) { return names }
- const varReg = /\$(\w+)\$/g
- expression.replace(varReg, (match: string, p: string) => {
- const name = withBoundaryToken ? match : p
- if (!names.includes(name)) {
- names.push(name)
- }
- return name
- })
- return names
- }
- export function getFieldAlias (fieldConfig: IFieldConfig, queryVariableMap: IQueryVariableMap) {
- if (!fieldConfig) { return '' }
- const { alias, useExpression } = fieldConfig
- if (!useExpression) { return alias }
- const queryKeys = extractQueryVariableNames(alias, true)
- const keys = []
- const vals = []
- queryKeys.forEach((queryKey) => {
- keys.push(queryKey)
- const queryValue = queryVariableMap[queryKey]
- if (queryValue === undefined) {
- vals.push('')
- } else {
- vals.push(
- typeof queryValue === 'number'
- ? queryValue
- : queryValue.replace(/^(['"])|(['"])$/g, ''))
- }
- })
- const Moment = moment
- let funcBody = alias
- if (!alias.includes('return')) {
- funcBody = 'return ' + funcBody
- }
- const paramNames = ['Moment', ...keys, funcBody]
- try {
- const func = Function.apply(null, paramNames)
- const params = [Moment, ...vals]
- const dynamicAlias: string = func(...params)
- return dynamicAlias
- } catch (e) {
- message.error(`字段别名转换错误:${e.message}`)
- }
- }
|