|
|
@@ -1,8 +1,7 @@
|
|
|
-<!-- TODO @AI:参考 /Users/yunai/Java/yudao-ui-admin-uniapp-next-v4/src/pages/message/components/search-form.vue 和 /Users/yunai/Java/yudao-ui-admin-uniapp-next-v4/src/pages/message/index.vue,实现对 time + 范围的处理; -->
|
|
|
<template>
|
|
|
<!-- 搜索框入口 -->
|
|
|
<wd-search
|
|
|
- :placeholder="searchPlaceholder"
|
|
|
+ :placeholder="placeholder"
|
|
|
:hide-cancel="true"
|
|
|
disabled
|
|
|
@click="visible = true"
|
|
|
@@ -174,9 +173,9 @@
|
|
|
#set ($hasDateTimeBetween = 1)
|
|
|
#end
|
|
|
#end
|
|
|
-import { computed, reactive, ref, watch } from 'vue'
|
|
|
+import { computed, reactive, ref } from 'vue'
|
|
|
#if ($hasDateTimeBetween == 1)
|
|
|
-import { formatDate } from '@/utils/date'
|
|
|
+import { formatDate, formatDateRange } from '@/utils/date'
|
|
|
#end
|
|
|
#if ($hasDict == 1)
|
|
|
#set ($dictImportNames = "getDictLabel, ")
|
|
|
@@ -198,65 +197,39 @@ import { $dictImportNames } from '@/hooks/useDict'
|
|
|
import { DICT_TYPE } from '@/utils/constants'
|
|
|
#end
|
|
|
|
|
|
-/** 搜索表单数据 */
|
|
|
-export interface SearchFormData {
|
|
|
-#foreach($column in $columns)
|
|
|
- #if ($column.listOperation)
|
|
|
- #set ($javaType = $column.javaType.toLowerCase())
|
|
|
- #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN")
|
|
|
- ${column.javaField}?: [number | undefined, number | undefined]
|
|
|
- #elseif ($column.dictType && "" != $column.dictType)
|
|
|
- #if(${javaType} == "string")
|
|
|
- ${column.javaField}?: string | number
|
|
|
- #elseif(${javaType} == "boolean")
|
|
|
- ${column.javaField}?: boolean | number
|
|
|
- #else
|
|
|
- ${column.javaField}?: number
|
|
|
- #end
|
|
|
- #elseif(${javaType} == "long" || ${javaType} == "integer" || ${javaType} == "short" || ${javaType} == "double" || ${javaType} == "bigdecimal" || ${javaType} == "byte")
|
|
|
- ${column.javaField}?: number
|
|
|
- #elseif(${javaType} == "boolean")
|
|
|
- ${column.javaField}?: boolean
|
|
|
- #else
|
|
|
- ${column.javaField}?: string
|
|
|
- #end
|
|
|
- #end
|
|
|
-#end
|
|
|
-}
|
|
|
-
|
|
|
-const props = defineProps<{
|
|
|
- searchParams?: Partial<SearchFormData>
|
|
|
-}>()
|
|
|
-
|
|
|
const emit = defineEmits<{
|
|
|
- search: [data: SearchFormData]
|
|
|
+ search: [data: Record<string, any>]
|
|
|
reset: []
|
|
|
}>()
|
|
|
|
|
|
const visible = ref(false)
|
|
|
-const formData = reactive<SearchFormData>({
|
|
|
+const formData = reactive({
|
|
|
#foreach($column in $columns)
|
|
|
#if ($column.listOperation)
|
|
|
+ #set ($javaType = $column.javaType.toLowerCase())
|
|
|
#if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN")
|
|
|
${column.javaField}: [undefined, undefined] as [number | undefined, number | undefined],
|
|
|
#elseif ($column.dictType && "" != $column.dictType)
|
|
|
- #set ($javaType = $column.javaType.toLowerCase())
|
|
|
#if(${javaType} == "string")
|
|
|
- ${column.javaField}: -1 as number | string,
|
|
|
+ ${column.javaField}: -1 as -1 | string, // -1 表示全部
|
|
|
#elseif(${javaType} == "boolean")
|
|
|
- ${column.javaField}: -1 as number | boolean,
|
|
|
+ ${column.javaField}: -1 as -1 | boolean, // -1 表示全部
|
|
|
#else
|
|
|
- ${column.javaField}: -1 as number,
|
|
|
+ ${column.javaField}: -1, // -1 表示全部
|
|
|
#end
|
|
|
+ #elseif(${javaType} == "long" || ${javaType} == "integer" || ${javaType} == "short" || ${javaType} == "double" || ${javaType} == "bigdecimal" || ${javaType} == "byte")
|
|
|
+ ${column.javaField}: undefined as number | undefined,
|
|
|
+ #elseif(${javaType} == "boolean")
|
|
|
+ ${column.javaField}: undefined as boolean | undefined,
|
|
|
#else
|
|
|
- ${column.javaField}: undefined,
|
|
|
+ ${column.javaField}: undefined as string | undefined,
|
|
|
#end
|
|
|
#end
|
|
|
#end
|
|
|
})
|
|
|
|
|
|
/** 搜索条件 placeholder 拼接 */
|
|
|
-const searchPlaceholder = computed(() => {
|
|
|
+const placeholder = computed(() => {
|
|
|
const conditions: string[] = []
|
|
|
#foreach($column in $columns)
|
|
|
#if ($column.listOperation)
|
|
|
@@ -265,46 +238,29 @@ const searchPlaceholder = computed(() => {
|
|
|
#set ($javaType = $column.javaType.toLowerCase())
|
|
|
#set ($comment = $column.columnComment)
|
|
|
#if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN")
|
|
|
- if (props.searchParams?.${javaField}?.[0] && props.searchParams?.${javaField}?.[1]) {
|
|
|
- conditions.push(`${comment}:#[[${]]#formatDate(props.searchParams.${javaField}[0])#[[}]]#~#[[${]]#formatDate(props.searchParams.${javaField}[1])#[[}]]#`)
|
|
|
+ if (formData.${javaField}?.[0] && formData.${javaField}?.[1]) {
|
|
|
+ conditions.push(`${comment}:#[[${]]#formatDate(formData.${javaField}[0])#[[}]]#~#[[${]]#formatDate(formData.${javaField}[1])#[[}]]#`)
|
|
|
}
|
|
|
#elseif ($dictType && "" != $dictType)
|
|
|
- if (props.searchParams?.${javaField} !== undefined && props.searchParams.${javaField} !== -1) {
|
|
|
- conditions.push(`${comment}:#[[${]]#getDictLabel(DICT_TYPE.${dictType.toUpperCase()}, props.searchParams.${javaField})#[[}]]#`)
|
|
|
+ if (formData.${javaField} !== -1) {
|
|
|
+ conditions.push(`${comment}:#[[${]]#getDictLabel(DICT_TYPE.${dictType.toUpperCase()}, formData.${javaField})#[[}]]#`)
|
|
|
}
|
|
|
#else
|
|
|
- #if(${javaType} == "long" || ${javaType} == "integer" || ${javaType} == "short" || ${javaType} == "double" || ${javaType} == "bigdecimal" || ${javaType} == "byte" || ${javaType} == "boolean")
|
|
|
- if (props.searchParams?.${javaField} !== undefined) {
|
|
|
- conditions.push(`${comment}:#[[${]]#props.searchParams.${javaField}#[[}]]#`)
|
|
|
+ #if(${javaType} == "long" || ${javaType} == "integer" || ${javaType} == "short" || ${javaType} == "double" || ${javaType} == "bigdecimal" || ${javaType} == "byte" || ${javaType} == "boolean")
|
|
|
+ if (formData.${javaField} !== undefined) {
|
|
|
+ conditions.push(`${comment}:#[[${]]#formData.${javaField}#[[}]]#`)
|
|
|
}
|
|
|
- #else
|
|
|
- if (props.searchParams?.${javaField}) {
|
|
|
- conditions.push(`${comment}:#[[${]]#props.searchParams.${javaField}#[[}]]#`)
|
|
|
+ #else
|
|
|
+ if (formData.${javaField}) {
|
|
|
+ conditions.push(`${comment}:#[[${]]#formData.${javaField}#[[}]]#`)
|
|
|
}
|
|
|
- #end
|
|
|
+ #end
|
|
|
#end
|
|
|
#end
|
|
|
#end
|
|
|
return conditions.length > 0 ? conditions.join(' | ') : '搜索${table.classComment}'
|
|
|
})
|
|
|
|
|
|
-/** 监听弹窗打开,同步外部参数 */
|
|
|
-watch(visible, (val) => {
|
|
|
- if (val && props.searchParams) {
|
|
|
-#foreach($column in $columns)
|
|
|
- #if ($column.listOperation)
|
|
|
- #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN")
|
|
|
- formData.${column.javaField} = props.searchParams.${column.javaField} ?? [undefined, undefined]
|
|
|
- #elseif ($column.dictType && "" != $column.dictType)
|
|
|
- formData.${column.javaField} = props.searchParams.${column.javaField} ?? -1
|
|
|
- #else
|
|
|
- formData.${column.javaField} = props.searchParams.${column.javaField}
|
|
|
- #end
|
|
|
- #end
|
|
|
-#end
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
#if ($hasDateTimeBetween == 1)
|
|
|
// 时间范围选择器状态
|
|
|
#foreach($column in $columns)
|
|
|
@@ -342,7 +298,18 @@ function handle${AttrName}1Cancel() {
|
|
|
/** 搜索 */
|
|
|
function handleSearch() {
|
|
|
visible.value = false
|
|
|
- emit('search', { ...formData } as SearchFormData)
|
|
|
+ emit('search', {
|
|
|
+ ...formData,
|
|
|
+#foreach($column in $columns)
|
|
|
+ #if ($column.listOperation)
|
|
|
+ #if ($column.dictType && "" != $column.dictType)
|
|
|
+ ${column.javaField}: formData.${column.javaField} === -1 ? undefined : formData.${column.javaField},
|
|
|
+ #elseif ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN")
|
|
|
+ ${column.javaField}: formatDateRange(formData.${column.javaField}),
|
|
|
+ #end
|
|
|
+ #end
|
|
|
+#end
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
/** 重置 */
|
|
|
@@ -362,3 +329,4 @@ function handleReset() {
|
|
|
emit('reset')
|
|
|
}
|
|
|
</script>
|
|
|
+
|