|
@@ -4,10 +4,11 @@ import { Minus, Plus } from '@element-plus/icons-vue'
|
|
|
import { reactive } from 'vue'
|
|
|
|
|
|
const props = defineProps<{
|
|
|
- filter: CustomFilter
|
|
|
- filterList: Array<FilterItem>
|
|
|
+ filter: CustomFilter // 当前过滤条件
|
|
|
+ filterList: Array<FilterItem> // 过滤条件的值列表
|
|
|
}>()
|
|
|
|
|
|
+// 筛选条件
|
|
|
const conditionOptions: Array<{
|
|
|
label: string
|
|
|
value: any
|
|
@@ -34,6 +35,7 @@ const conditionOptions: Array<{
|
|
|
}
|
|
|
]
|
|
|
|
|
|
+// 筛选条件列表
|
|
|
const filterList = reactive<
|
|
|
Array<{
|
|
|
filterCondition: string
|
|
@@ -41,15 +43,25 @@ const filterList = reactive<
|
|
|
}>
|
|
|
>([])
|
|
|
|
|
|
+/**
|
|
|
+ * 初始化过滤条件的列表
|
|
|
+ */
|
|
|
const initFilterList = () => {
|
|
|
console.log(props.filterList)
|
|
|
filterList.splice(0, filterList.length, ...props.filterList)
|
|
|
}
|
|
|
|
|
|
-const verifySub = () => {
|
|
|
+/**
|
|
|
+ * 校验提交条件
|
|
|
+ *
|
|
|
+ * 如果校验通过,则返回true
|
|
|
+ *
|
|
|
+ * 如果为空,或者不符合规则,则返回false
|
|
|
+ */
|
|
|
+const verifySub = (): boolean => {
|
|
|
if (props.filter.valueType === CustomFilterValueType.INPUT && props.filter.valueValid) {
|
|
|
const func = props.filter.valueValid
|
|
|
- // 校验不通过或者为空,都视为无效数据
|
|
|
+ // 有任意一条不符合规则,则都不通过
|
|
|
const result = filterList.find((item) => {
|
|
|
// 是否有效
|
|
|
return func(item.value)
|
|
@@ -66,21 +78,28 @@ const verifySub = () => {
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * 根据传入的格式化函数,对过滤条件的值进行格式化
|
|
|
+ */
|
|
|
const valueFormat = () => {
|
|
|
let backupList = JSON.parse(JSON.stringify(filterList)) as Array<{
|
|
|
filterCondition: string
|
|
|
value: any
|
|
|
}>
|
|
|
let format: any = null
|
|
|
- if (props.filter.valueType === CustomFilterValueType.INPUT) {
|
|
|
+ // input框格式化
|
|
|
+ if (props.filter.valueType === CustomFilterValueType.INPUT && props.filter.valueFormat) {
|
|
|
format = props.filter.valueFormat
|
|
|
}
|
|
|
+ // 这里单独对日期格式的'X'进行处理
|
|
|
+ // 秒级时间戳会返回一个字符串,需要转为数字
|
|
|
if (
|
|
|
props.filter.valueType === CustomFilterValueType.DATEPICKER &&
|
|
|
props.filter.valueFormat === 'X'
|
|
|
) {
|
|
|
format = parseInt
|
|
|
}
|
|
|
+ // 有格式化函数则进行格式化
|
|
|
if (format) {
|
|
|
backupList.map((item) => {
|
|
|
item.value = format(item.value)
|
|
@@ -90,10 +109,16 @@ const valueFormat = () => {
|
|
|
return backupList
|
|
|
}
|
|
|
|
|
|
-const subCondition = () => {
|
|
|
+/**
|
|
|
+ * 获取格式化后的提交的筛选条件
|
|
|
+ */
|
|
|
+const getSubCondition = () => {
|
|
|
return valueFormat()
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * 添加筛选条件
|
|
|
+ */
|
|
|
const addFilter = () => {
|
|
|
filterList.push({
|
|
|
filterCondition: 'gt',
|
|
@@ -101,12 +126,16 @@ const addFilter = () => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * 删除筛选条件
|
|
|
+ * @param index 删除的条件索引
|
|
|
+ */
|
|
|
const delCondition = (index: number) => {
|
|
|
filterList.splice(index, 1)
|
|
|
}
|
|
|
|
|
|
defineExpose({
|
|
|
- subCondition,
|
|
|
+ getSubCondition,
|
|
|
verifySub,
|
|
|
initFilterList
|
|
|
})
|