feat:【infra】移动端 admin uniapp 的代码生成的优化(增加时间范围的条件生成)

This commit is contained in:
YunaiV
2025-12-18 08:41:41 +08:00
parent 4ce201c540
commit 3861fdf451
2 changed files with 51 additions and 137 deletions

View File

@@ -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> <template>
<!-- 搜索框入口 --> <!-- 搜索框入口 -->
<wd-search <wd-search
:placeholder="searchPlaceholder" :placeholder="placeholder"
:hide-cancel="true" :hide-cancel="true"
disabled disabled
@click="visible = true" @click="visible = true"
@@ -174,9 +173,9 @@
#set ($hasDateTimeBetween = 1) #set ($hasDateTimeBetween = 1)
#end #end
#end #end
import { computed, reactive, ref, watch } from 'vue' import { computed, reactive, ref } from 'vue'
#if ($hasDateTimeBetween == 1) #if ($hasDateTimeBetween == 1)
import { formatDate } from '@/utils/date' import { formatDate, formatDateRange } from '@/utils/date'
#end #end
#if ($hasDict == 1) #if ($hasDict == 1)
#set ($dictImportNames = "getDictLabel, ") #set ($dictImportNames = "getDictLabel, ")
@@ -198,65 +197,39 @@ import { $dictImportNames } from '@/hooks/useDict'
import { DICT_TYPE } from '@/utils/constants' import { DICT_TYPE } from '@/utils/constants'
#end #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<{ const emit = defineEmits<{
search: [data: SearchFormData] search: [data: Record<string, any>]
reset: [] reset: []
}>() }>()
const visible = ref(false) const visible = ref(false)
const formData = reactive<SearchFormData>({ const formData = reactive({
#foreach($column in $columns) #foreach($column in $columns)
#if ($column.listOperation) #if ($column.listOperation)
#set ($javaType = $column.javaType.toLowerCase())
#if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN")
${column.javaField}: [undefined, undefined] as [number | undefined, number | undefined], ${column.javaField}: [undefined, undefined] as [number | undefined, number | undefined],
#elseif ($column.dictType && "" != $column.dictType) #elseif ($column.dictType && "" != $column.dictType)
#set ($javaType = $column.javaType.toLowerCase())
#if(${javaType} == "string") #if(${javaType} == "string")
${column.javaField}: -1 as number | string, ${column.javaField}: -1 as -1 | string, // -1 表示全部
#elseif(${javaType} == "boolean") #elseif(${javaType} == "boolean")
${column.javaField}: -1 as number | boolean, ${column.javaField}: -1 as -1 | boolean, // -1 表示全部
#else #else
${column.javaField}: -1 as number, ${column.javaField}: -1, // -1 表示全部
#end #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 #else
${column.javaField}: undefined, ${column.javaField}: undefined as string | undefined,
#end #end
#end #end
#end #end
}) })
/** 搜索条件 placeholder 拼接 */ /** 搜索条件 placeholder 拼接 */
const searchPlaceholder = computed(() => { const placeholder = computed(() => {
const conditions: string[] = [] const conditions: string[] = []
#foreach($column in $columns) #foreach($column in $columns)
#if ($column.listOperation) #if ($column.listOperation)
@@ -265,46 +238,29 @@ const searchPlaceholder = computed(() => {
#set ($javaType = $column.javaType.toLowerCase()) #set ($javaType = $column.javaType.toLowerCase())
#set ($comment = $column.columnComment) #set ($comment = $column.columnComment)
#if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN")
if (props.searchParams?.${javaField}?.[0] && props.searchParams?.${javaField}?.[1]) { if (formData.${javaField}?.[0] && formData.${javaField}?.[1]) {
conditions.push(`${comment}:#[[${]]#formatDate(props.searchParams.${javaField}[0])#[[}]]#~#[[${]]#formatDate(props.searchParams.${javaField}[1])#[[}]]#`) conditions.push(`${comment}:#[[${]]#formatDate(formData.${javaField}[0])#[[}]]#~#[[${]]#formatDate(formData.${javaField}[1])#[[}]]#`)
} }
#elseif ($dictType && "" != $dictType) #elseif ($dictType && "" != $dictType)
if (props.searchParams?.${javaField} !== undefined && props.searchParams.${javaField} !== -1) { if (formData.${javaField} !== -1) {
conditions.push(`${comment}:#[[${]]#getDictLabel(DICT_TYPE.${dictType.toUpperCase()}, props.searchParams.${javaField})#[[}]]#`) conditions.push(`${comment}:#[[${]]#getDictLabel(DICT_TYPE.${dictType.toUpperCase()}, formData.${javaField})#[[}]]#`)
} }
#else #else
#if(${javaType} == "long" || ${javaType} == "integer" || ${javaType} == "short" || ${javaType} == "double" || ${javaType} == "bigdecimal" || ${javaType} == "byte" || ${javaType} == "boolean") #if(${javaType} == "long" || ${javaType} == "integer" || ${javaType} == "short" || ${javaType} == "double" || ${javaType} == "bigdecimal" || ${javaType} == "byte" || ${javaType} == "boolean")
if (props.searchParams?.${javaField} !== undefined) { if (formData.${javaField} !== undefined) {
conditions.push(`${comment}:#[[${]]#props.searchParams.${javaField}#[[}]]#`) conditions.push(`${comment}:#[[${]]#formData.${javaField}#[[}]]#`)
} }
#else #else
if (props.searchParams?.${javaField}) { if (formData.${javaField}) {
conditions.push(`${comment}:#[[${]]#props.searchParams.${javaField}#[[}]]#`) conditions.push(`${comment}:#[[${]]#formData.${javaField}#[[}]]#`)
} }
#end #end
#end #end
#end #end
#end #end
return conditions.length > 0 ? conditions.join(' | ') : '搜索${table.classComment}' 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) #if ($hasDateTimeBetween == 1)
// 时间范围选择器状态 // 时间范围选择器状态
#foreach($column in $columns) #foreach($column in $columns)
@@ -342,7 +298,18 @@ function handle${AttrName}1Cancel() {
/** 搜索 */ /** 搜索 */
function handleSearch() { function handleSearch() {
visible.value = false 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') emit('reset')
} }
</script> </script>

View File

@@ -8,11 +8,7 @@
/> />
<!-- 搜索组件 --> <!-- 搜索组件 -->
<SearchForm <SearchForm @search="handleQuery" @reset="handleReset" />
:search-params="queryParams"
@search="handleQuery"
@reset="handleReset"
/>
<!-- ${table.classComment}列表 --> <!-- ${table.classComment}列表 -->
<view class="p-24rpx"> <view class="p-24rpx">
@@ -111,17 +107,10 @@
#end #end
#end #end
#end #end
#set ($hasDateTimeBetween = 0)
#foreach($column in $columns)
#if ($hasDateTimeBetween == 0 && $column.listOperation && $column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN")
#set ($hasDateTimeBetween = 1)
#end
#end
import type { SearchFormData } from './components/search-form.vue'
import type { ${simpleClassName} } from '@/api/${table.moduleName}/${table.businessName}' import type { ${simpleClassName} } from '@/api/${table.moduleName}/${table.businessName}'
import type { LoadMoreState } from '@/http/types' import type { LoadMoreState } from '@/http/types'
import { onReachBottom } from '@dcloudio/uni-app' import { onReachBottom } from '@dcloudio/uni-app'
import { onMounted, reactive, ref } from 'vue' import { onMounted, ref } from 'vue'
import { get${simpleClassName}Page } from '@/api/${table.moduleName}/${table.businessName}' import { get${simpleClassName}Page } from '@/api/${table.moduleName}/${table.businessName}'
import { useAccess } from '@/hooks/useAccess' import { useAccess } from '@/hooks/useAccess'
import { navigateBackPlus } from '@/utils' import { navigateBackPlus } from '@/utils'
@@ -131,9 +120,6 @@ import { DICT_TYPE } from '@/utils/constants'
#if ($hasDateTime == 1) #if ($hasDateTime == 1)
import { formatDateTime } from '@/utils/date' import { formatDateTime } from '@/utils/date'
#end #end
#if ($hasDateTimeBetween == 1)
import { formatDateRange } from '@/utils/date'
#end
import SearchForm from './components/search-form.vue' import SearchForm from './components/search-form.vue'
definePage({ definePage({
@@ -147,31 +133,9 @@ const { hasAccessByCodes } = useAccess()
const total = ref(0) const total = ref(0)
const list = ref<${simpleClassName}[]>([]) const list = ref<${simpleClassName}[]>([])
const loadMoreState = ref<LoadMoreState>('loading') const loadMoreState = ref<LoadMoreState>('loading')
const queryParams = reactive({ const queryParams = ref({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
#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)
#if(${javaType} == "string")
${column.javaField}: -1 as number | string, // -1 表示全部
#elseif(${javaType} == "boolean")
${column.javaField}: -1 as number | boolean, // -1 表示全部
#else
${column.javaField}: -1 as number, // -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 as string | undefined,
#end
#end
#end
}) })
/** 返回上一页 */ /** 返回上一页 */
@@ -183,41 +147,23 @@ function handleBack() {
async function getList() { async function getList() {
loadMoreState.value = 'loading' loadMoreState.value = 'loading'
try { try {
const params: any = { ...queryParams } const data = await get${simpleClassName}Page(queryParams.value)
#foreach($column in $columns)
#if ($column.listOperation && $column.dictType && "" != $column.dictType)
params.${column.javaField} = queryParams.${column.javaField} === -1 ? undefined : queryParams.${column.javaField}
#end
#end
#foreach($column in $columns)
#if ($column.listOperation && $column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN")
params.${column.javaField} = formatDateRange(queryParams.${column.javaField})
#end
#end
const data = await get${simpleClassName}Page(params)
list.value = [...list.value, ...data.list] list.value = [...list.value, ...data.list]
total.value = data.total total.value = data.total
loadMoreState.value = list.value.length >= total.value ? 'finished' : 'loading' loadMoreState.value = list.value.length >= total.value ? 'finished' : 'loading'
} catch { } catch {
queryParams.pageNo = queryParams.pageNo > 1 ? queryParams.pageNo - 1 : 1 queryParams.value.pageNo = queryParams.value.pageNo > 1 ? queryParams.value.pageNo - 1 : 1
loadMoreState.value = 'error' loadMoreState.value = 'error'
} }
} }
/** 搜索按钮操作 */ /** 搜索按钮操作 */
function handleQuery(data?: SearchFormData) { function handleQuery(data?: Record<string, any>) {
#foreach($column in $columns) queryParams.value = {
#if ($column.listOperation) ...data,
#if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") pageNo: 1,
queryParams.${column.javaField} = data?.${column.javaField} ?? [undefined, undefined] pageSize: queryParams.value.pageSize,
#elseif ($column.dictType && "" != $column.dictType) }
queryParams.${column.javaField} = data?.${column.javaField} ?? -1
#else
queryParams.${column.javaField} = data?.${column.javaField}
#end
#end
#end
queryParams.pageNo = 1
list.value = [] list.value = []
getList() getList()
} }
@@ -232,7 +178,7 @@ function loadMore() {
if (loadMoreState.value === 'finished') { if (loadMoreState.value === 'finished') {
return return
} }
queryParams.pageNo++ queryParams.value.pageNo++
getList() getList()
} }