Commit 4ce201c540f4ac54c3f01608b71b81e2e6db7379
1 parent
3c88d4d4
feat:【infra】移动端 admin uniapp 的代码生成的优化(增加时间范围的条件生成)
Showing
2 changed files
with
139 additions
and
11 deletions
yudao-module-infra/src/main/resources/codegen/vue3_admin_uniapp/components/search-form.vue.vm
| 1 | +<!-- 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 + 范围的处理; --> | |
| 1 | 2 | <template> |
| 2 | 3 | <!-- 搜索框入口 --> |
| 3 | 4 | <wd-search |
| ... | ... | @@ -30,6 +31,7 @@ |
| 30 | 31 | #set ($dictType = $column.dictType) |
| 31 | 32 | #set ($javaField = $column.javaField) |
| 32 | 33 | #set ($javaType = $column.javaType) |
| 34 | + #set ($listOperationCondition = $column.listOperationCondition) | |
| 33 | 35 | #set ($comment = $column.columnComment) |
| 34 | 36 | #set ($dictMethod = "getDictOptions") |
| 35 | 37 | #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short") |
| ... | ... | @@ -50,6 +52,58 @@ |
| 50 | 52 | clearable |
| 51 | 53 | /> |
| 52 | 54 | </view> |
| 55 | + #elseif ($column.htmlType == "datetime" && $listOperationCondition == "BETWEEN") | |
| 56 | + #set ($AttrName = $javaField.substring(0,1).toUpperCase() + ${javaField.substring(1)}) | |
| 57 | + <view class="mb-32rpx"> | |
| 58 | + <view class="mb-12rpx text-28rpx text-[#666]"> | |
| 59 | + ${comment} | |
| 60 | + </view> | |
| 61 | + <view class="flex items-center gap-16rpx"> | |
| 62 | + <view class="flex-1" @click="visible${AttrName}[0] = true"> | |
| 63 | + <view | |
| 64 | + class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx" | |
| 65 | + > | |
| 66 | + {{ formatDate(formData.${javaField}?.[0]) || '开始日期' }} | |
| 67 | + </view> | |
| 68 | + </view> | |
| 69 | + <text class="text-28rpx text-[#999]">至</text> | |
| 70 | + <view class="flex-1" @click="visible${AttrName}[1] = true"> | |
| 71 | + <view | |
| 72 | + class="h-72rpx flex items-center justify-center rounded-8rpx bg-[#f5f5f5] px-24rpx text-28rpx" | |
| 73 | + > | |
| 74 | + {{ formatDate(formData.${javaField}?.[1]) || '结束日期' }} | |
| 75 | + </view> | |
| 76 | + </view> | |
| 77 | + </view> | |
| 78 | + <wd-datetime-picker-view | |
| 79 | + v-if="visible${AttrName}[0]" | |
| 80 | + v-model="temp${AttrName}[0]" | |
| 81 | + type="date" | |
| 82 | + :columns-height="200" | |
| 83 | + /> | |
| 84 | + <view v-if="visible${AttrName}[0]" class="mt-16rpx flex justify-end gap-16rpx"> | |
| 85 | + <wd-button size="small" plain @click="handle${AttrName}0Cancel"> | |
| 86 | + 取消 | |
| 87 | + </wd-button> | |
| 88 | + <wd-button size="small" type="primary" @click="handle${AttrName}0Confirm"> | |
| 89 | + 确定 | |
| 90 | + </wd-button> | |
| 91 | + </view> | |
| 92 | + <wd-datetime-picker-view | |
| 93 | + v-if="visible${AttrName}[1]" | |
| 94 | + v-model="temp${AttrName}[1]" | |
| 95 | + type="date" | |
| 96 | + :columns-height="200" | |
| 97 | + /> | |
| 98 | + <view v-if="visible${AttrName}[1]" class="mt-16rpx flex justify-end gap-16rpx"> | |
| 99 | + <wd-button size="small" plain @click="handle${AttrName}1Cancel"> | |
| 100 | + 取消 | |
| 101 | + </wd-button> | |
| 102 | + <wd-button size="small" type="primary" @click="handle${AttrName}1Confirm"> | |
| 103 | + 确定 | |
| 104 | + </wd-button> | |
| 105 | + </view> | |
| 106 | + </view> | |
| 53 | 107 | #elseif (($column.htmlType == "select" || $column.htmlType == "radio") && $dictType && "" != $dictType) |
| 54 | 108 | <view class="mb-32rpx"> |
| 55 | 109 | <view class="mb-12rpx text-28rpx text-[#666]"> |
| ... | ... | @@ -100,6 +154,7 @@ |
| 100 | 154 | #set ($hasGetIntDictOptions = 0) |
| 101 | 155 | #set ($hasGetStrDictOptions = 0) |
| 102 | 156 | #set ($hasGetBoolDictOptions = 0) |
| 157 | +#set ($hasDateTimeBetween = 0) | |
| 103 | 158 | #foreach($column in $columns) |
| 104 | 159 | #if ($column.listOperation && $column.dictType && "" != $column.dictType) |
| 105 | 160 | #set ($hasDict = 1) |
| ... | ... | @@ -115,8 +170,14 @@ |
| 115 | 170 | #end |
| 116 | 171 | #end |
| 117 | 172 | #end |
| 173 | + #if ($hasDateTimeBetween == 0 && $column.listOperation && $column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 174 | + #set ($hasDateTimeBetween = 1) | |
| 175 | + #end | |
| 118 | 176 | #end |
| 119 | 177 | import { computed, reactive, ref, watch } from 'vue' |
| 178 | +#if ($hasDateTimeBetween == 1) | |
| 179 | +import { formatDate } from '@/utils/date' | |
| 180 | +#end | |
| 120 | 181 | #if ($hasDict == 1) |
| 121 | 182 | #set ($dictImportNames = "getDictLabel, ") |
| 122 | 183 | #if ($hasGetDictOptions == 1) |
| ... | ... | @@ -142,7 +203,9 @@ export interface SearchFormData { |
| 142 | 203 | #foreach($column in $columns) |
| 143 | 204 | #if ($column.listOperation) |
| 144 | 205 | #set ($javaType = $column.javaType.toLowerCase()) |
| 145 | - #if ($column.dictType && "" != $column.dictType) | |
| 206 | + #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 207 | + ${column.javaField}?: [number | undefined, number | undefined] | |
| 208 | + #elseif ($column.dictType && "" != $column.dictType) | |
| 146 | 209 | #if(${javaType} == "string") |
| 147 | 210 | ${column.javaField}?: string | number |
| 148 | 211 | #elseif(${javaType} == "boolean") |
| ... | ... | @@ -174,7 +237,9 @@ const visible = ref(false) |
| 174 | 237 | const formData = reactive<SearchFormData>({ |
| 175 | 238 | #foreach($column in $columns) |
| 176 | 239 | #if ($column.listOperation) |
| 177 | - #if ($column.dictType && "" != $column.dictType) | |
| 240 | + #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 241 | + ${column.javaField}: [undefined, undefined] as [number | undefined, number | undefined], | |
| 242 | + #elseif ($column.dictType && "" != $column.dictType) | |
| 178 | 243 | #set ($javaType = $column.javaType.toLowerCase()) |
| 179 | 244 | #if(${javaType} == "string") |
| 180 | 245 | ${column.javaField}: -1 as number | string, |
| ... | ... | @@ -199,7 +264,11 @@ const searchPlaceholder = computed(() => { |
| 199 | 264 | #set ($javaField = $column.javaField) |
| 200 | 265 | #set ($javaType = $column.javaType.toLowerCase()) |
| 201 | 266 | #set ($comment = $column.columnComment) |
| 202 | - #if ($dictType && "" != $dictType) | |
| 267 | + #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 268 | + if (props.searchParams?.${javaField}?.[0] && props.searchParams?.${javaField}?.[1]) { | |
| 269 | + conditions.push(`${comment}:#[[${]]#formatDate(props.searchParams.${javaField}[0])#[[}]]#~#[[${]]#formatDate(props.searchParams.${javaField}[1])#[[}]]#`) | |
| 270 | + } | |
| 271 | + #elseif ($dictType && "" != $dictType) | |
| 203 | 272 | if (props.searchParams?.${javaField} !== undefined && props.searchParams.${javaField} !== -1) { |
| 204 | 273 | conditions.push(`${comment}:#[[${]]#getDictLabel(DICT_TYPE.${dictType.toUpperCase()}, props.searchParams.${javaField})#[[}]]#`) |
| 205 | 274 | } |
| ... | ... | @@ -224,7 +293,9 @@ watch(visible, (val) => { |
| 224 | 293 | if (val && props.searchParams) { |
| 225 | 294 | #foreach($column in $columns) |
| 226 | 295 | #if ($column.listOperation) |
| 227 | - #if ($column.dictType && "" != $column.dictType) | |
| 296 | + #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 297 | + formData.${column.javaField} = props.searchParams.${column.javaField} ?? [undefined, undefined] | |
| 298 | + #elseif ($column.dictType && "" != $column.dictType) | |
| 228 | 299 | formData.${column.javaField} = props.searchParams.${column.javaField} ?? -1 |
| 229 | 300 | #else |
| 230 | 301 | formData.${column.javaField} = props.searchParams.${column.javaField} |
| ... | ... | @@ -234,6 +305,40 @@ watch(visible, (val) => { |
| 234 | 305 | } |
| 235 | 306 | }) |
| 236 | 307 | |
| 308 | +#if ($hasDateTimeBetween == 1) | |
| 309 | +// 时间范围选择器状态 | |
| 310 | +#foreach($column in $columns) | |
| 311 | + #if ($column.listOperation && $column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 312 | + #set ($javaField = $column.javaField) | |
| 313 | + #set ($AttrName = $javaField.substring(0,1).toUpperCase() + ${javaField.substring(1)}) | |
| 314 | +const visible${AttrName} = ref<[boolean, boolean]>([false, false]) | |
| 315 | +const temp${AttrName} = ref<[number, number]>([Date.now(), Date.now()]) | |
| 316 | + | |
| 317 | +/** ${column.columnComment}[0]确认 */ | |
| 318 | +function handle${AttrName}0Confirm() { | |
| 319 | + formData.${javaField} = [temp${AttrName}.value[0], formData.${javaField}?.[1]] | |
| 320 | + visible${AttrName}.value[0] = false | |
| 321 | +} | |
| 322 | + | |
| 323 | +/** ${column.columnComment}[0]取消 */ | |
| 324 | +function handle${AttrName}0Cancel() { | |
| 325 | + visible${AttrName}.value[0] = false | |
| 326 | +} | |
| 327 | + | |
| 328 | +/** ${column.columnComment}[1]确认 */ | |
| 329 | +function handle${AttrName}1Confirm() { | |
| 330 | + formData.${javaField} = [formData.${javaField}?.[0], temp${AttrName}.value[1]] | |
| 331 | + visible${AttrName}.value[1] = false | |
| 332 | +} | |
| 333 | + | |
| 334 | +/** ${column.columnComment}[1]取消 */ | |
| 335 | +function handle${AttrName}1Cancel() { | |
| 336 | + visible${AttrName}.value[1] = false | |
| 337 | +} | |
| 338 | + #end | |
| 339 | +#end | |
| 340 | +#end | |
| 341 | + | |
| 237 | 342 | /** 搜索 */ |
| 238 | 343 | function handleSearch() { |
| 239 | 344 | visible.value = false |
| ... | ... | @@ -244,7 +349,9 @@ function handleSearch() { |
| 244 | 349 | function handleReset() { |
| 245 | 350 | #foreach($column in $columns) |
| 246 | 351 | #if ($column.listOperation) |
| 247 | - #if ($column.dictType && "" != $column.dictType) | |
| 352 | + #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 353 | + formData.${column.javaField} = [undefined, undefined] | |
| 354 | + #elseif ($column.dictType && "" != $column.dictType) | |
| 248 | 355 | formData.${column.javaField} = -1 |
| 249 | 356 | #else |
| 250 | 357 | formData.${column.javaField} = undefined | ... | ... |
yudao-module-infra/src/main/resources/codegen/vue3_admin_uniapp/views/index.vue.vm
| ... | ... | @@ -111,6 +111,12 @@ |
| 111 | 111 | #end |
| 112 | 112 | #end |
| 113 | 113 | #end |
| 114 | +#set ($hasDateTimeBetween = 0) | |
| 115 | +#foreach($column in $columns) | |
| 116 | + #if ($hasDateTimeBetween == 0 && $column.listOperation && $column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 117 | + #set ($hasDateTimeBetween = 1) | |
| 118 | + #end | |
| 119 | +#end | |
| 114 | 120 | import type { SearchFormData } from './components/search-form.vue' |
| 115 | 121 | import type { ${simpleClassName} } from '@/api/${table.moduleName}/${table.businessName}' |
| 116 | 122 | import type { LoadMoreState } from '@/http/types' |
| ... | ... | @@ -125,6 +131,9 @@ import { DICT_TYPE } from '@/utils/constants' |
| 125 | 131 | #if ($hasDateTime == 1) |
| 126 | 132 | import { formatDateTime } from '@/utils/date' |
| 127 | 133 | #end |
| 134 | +#if ($hasDateTimeBetween == 1) | |
| 135 | +import { formatDateRange } from '@/utils/date' | |
| 136 | +#end | |
| 128 | 137 | import SearchForm from './components/search-form.vue' |
| 129 | 138 | |
| 130 | 139 | definePage({ |
| ... | ... | @@ -144,7 +153,9 @@ const queryParams = reactive({ |
| 144 | 153 | #foreach($column in $columns) |
| 145 | 154 | #if ($column.listOperation) |
| 146 | 155 | #set ($javaType = $column.javaType.toLowerCase()) |
| 147 | - #if ($column.dictType && "" != $column.dictType) | |
| 156 | + #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 157 | + ${column.javaField}: [undefined, undefined] as [number | undefined, number | undefined], | |
| 158 | + #elseif ($column.dictType && "" != $column.dictType) | |
| 148 | 159 | #if(${javaType} == "string") |
| 149 | 160 | ${column.javaField}: -1 as number | string, // -1 表示全部 |
| 150 | 161 | #elseif(${javaType} == "boolean") |
| ... | ... | @@ -172,14 +183,18 @@ function handleBack() { |
| 172 | 183 | async function getList() { |
| 173 | 184 | loadMoreState.value = 'loading' |
| 174 | 185 | try { |
| 175 | - const data = await get${simpleClassName}Page({ | |
| 176 | - ...queryParams, | |
| 186 | + const params: any = { ...queryParams } | |
| 177 | 187 | #foreach($column in $columns) |
| 178 | 188 | #if ($column.listOperation && $column.dictType && "" != $column.dictType) |
| 179 | - ${column.javaField}: queryParams.${column.javaField} === -1 ? undefined : queryParams.${column.javaField}, | |
| 189 | + params.${column.javaField} = queryParams.${column.javaField} === -1 ? undefined : queryParams.${column.javaField} | |
| 180 | 190 | #end |
| 181 | 191 | #end |
| 182 | - }) | |
| 192 | +#foreach($column in $columns) | |
| 193 | + #if ($column.listOperation && $column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 194 | + params.${column.javaField} = formatDateRange(queryParams.${column.javaField}) | |
| 195 | + #end | |
| 196 | +#end | |
| 197 | + const data = await get${simpleClassName}Page(params) | |
| 183 | 198 | list.value = [...list.value, ...data.list] |
| 184 | 199 | total.value = data.total |
| 185 | 200 | loadMoreState.value = list.value.length >= total.value ? 'finished' : 'loading' |
| ... | ... | @@ -193,7 +208,13 @@ async function getList() { |
| 193 | 208 | function handleQuery(data?: SearchFormData) { |
| 194 | 209 | #foreach($column in $columns) |
| 195 | 210 | #if ($column.listOperation) |
| 196 | - queryParams.${column.javaField} = data?.${column.javaField}#if ($column.dictType && "" != $column.dictType) ?? -1#end | |
| 211 | + #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | |
| 212 | + queryParams.${column.javaField} = data?.${column.javaField} ?? [undefined, undefined] | |
| 213 | + #elseif ($column.dictType && "" != $column.dictType) | |
| 214 | + queryParams.${column.javaField} = data?.${column.javaField} ?? -1 | |
| 215 | + #else | |
| 216 | + queryParams.${column.javaField} = data?.${column.javaField} | |
| 217 | + #end | |
| 197 | 218 | #end |
| 198 | 219 | #end |
| 199 | 220 | queryParams.pageNo = 1 | ... | ... |