Add File
This commit is contained in:
89
frontend/src/components/filter-text/index.ts
Normal file
89
frontend/src/components/filter-text/index.ts
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
import FilterText from './src/FilterText.vue'
|
||||||
|
|
||||||
|
export { FilterText }
|
||||||
|
|
||||||
|
const fieldText = (field: string, options: any[]) => {
|
||||||
|
for (let index = 0; index < options.length; index++) {
|
||||||
|
const element = options[index]
|
||||||
|
if (field === element.field) {
|
||||||
|
return element.title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const valueTextFormTree = (val: string, options: any[]) => {
|
||||||
|
let result = null
|
||||||
|
const stack = [...options]
|
||||||
|
while (stack.length) {
|
||||||
|
const item = stack.pop()
|
||||||
|
if (item.value === val) {
|
||||||
|
result = item.label
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if (item.children?.length) {
|
||||||
|
item.children.forEach((kid: any) => stack.push(kid))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result || val
|
||||||
|
}
|
||||||
|
const timestampFormatDate = (value: string) => {
|
||||||
|
if (!value) {
|
||||||
|
return '-'
|
||||||
|
}
|
||||||
|
return new Date(value).toLocaleString()
|
||||||
|
}
|
||||||
|
const valueText = (field: string, val: string, options: any[]) => {
|
||||||
|
for (let index = 0; index < options.length; index++) {
|
||||||
|
const element = options[index]
|
||||||
|
if (field === element.field) {
|
||||||
|
let isTree = false
|
||||||
|
const selectOption = element.option
|
||||||
|
for (let i = 0; i < selectOption.length; i++) {
|
||||||
|
const item = selectOption[i] as any
|
||||||
|
if (item.children !== undefined) {
|
||||||
|
isTree = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if (item.id === val || item.value === val) {
|
||||||
|
return item.name || item.label
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (element.type === 'time') {
|
||||||
|
return timestampFormatDate(val)
|
||||||
|
}
|
||||||
|
if (isTree) {
|
||||||
|
return valueTextFormTree(val, selectOption)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
export const convertFilterText = (conditions: any[], options: any[]) => {
|
||||||
|
const result: any[] = []
|
||||||
|
conditions.forEach((condition) => {
|
||||||
|
const field = condition.field
|
||||||
|
const ope = condition.operator
|
||||||
|
const value = condition.value
|
||||||
|
const fieldName = fieldText(field, options)
|
||||||
|
const textOpe = ':'
|
||||||
|
let separator = ','
|
||||||
|
if (ope === 'in') {
|
||||||
|
separator = '、'
|
||||||
|
}
|
||||||
|
if (ope === 'between') {
|
||||||
|
separator = '~'
|
||||||
|
}
|
||||||
|
let valText = value
|
||||||
|
|
||||||
|
if (value) {
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
const valTextArray = value.map((val) => valueText(field, val, options))
|
||||||
|
valText = valTextArray.join(separator)
|
||||||
|
}
|
||||||
|
if (valText?.length) {
|
||||||
|
const obj = fieldName + textOpe + valText
|
||||||
|
result.push(obj)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return result
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user