Commit 1c498865939f76da3b866189617fbd340e26c432
1 parent
1a232f80
refactor(codegen): 统一移动端搜索全部选项语义
Showing
3 changed files
with
58 additions
and
67 deletions
yudao-module-infra/src/main/resources/codegen/vue3_admin_uniapp/components/search-form.vue.vm
| @@ -42,23 +42,12 @@ | @@ -42,23 +42,12 @@ | ||
| 42 | #elseif ($column.htmlType == "datetime" && $listOperationCondition == "BETWEEN") | 42 | #elseif ($column.htmlType == "datetime" && $listOperationCondition == "BETWEEN") |
| 43 | <yd-search-date-range v-model="formData.${javaField}" label="${comment}" /> | 43 | <yd-search-date-range v-model="formData.${javaField}" label="${comment}" /> |
| 44 | #elseif (($column.htmlType == "select" || $column.htmlType == "radio") && $dictType && "" != $dictType) | 44 | #elseif (($column.htmlType == "select" || $column.htmlType == "radio") && $dictType && "" != $dictType) |
| 45 | - <view class="yd-search-form-item"> | ||
| 46 | - <view class="yd-search-form-label"> | ||
| 47 | - ${comment} | ||
| 48 | - </view> | ||
| 49 | - <wd-radio-group v-model="formData.${javaField}" type="button"> | ||
| 50 | - <wd-radio :value="-1"> | ||
| 51 | - 全部 | ||
| 52 | - </wd-radio> | ||
| 53 | - <wd-radio | ||
| 54 | - v-for="dict in $dictMethod(DICT_TYPE.$dictType.toUpperCase())" | ||
| 55 | - :key="dict.value" | ||
| 56 | - :value="dict.value" | ||
| 57 | - > | ||
| 58 | - {{ dict.label }} | ||
| 59 | - </wd-radio> | ||
| 60 | - </wd-radio-group> | ||
| 61 | - </view> | 45 | + <yd-search-picker |
| 46 | + v-model="formData.${javaField}" | ||
| 47 | + label="${comment}" | ||
| 48 | + :columns="$dictMethod(DICT_TYPE.$dictType.toUpperCase())" | ||
| 49 | + all-option | ||
| 50 | + /> | ||
| 62 | #else | 51 | #else |
| 63 | <view class="yd-search-form-item"> | 52 | <view class="yd-search-form-item"> |
| 64 | <view class="yd-search-form-label"> | 53 | <view class="yd-search-form-label"> |
| @@ -150,11 +139,11 @@ const formData = reactive({ | @@ -150,11 +139,11 @@ const formData = reactive({ | ||
| 150 | ${column.javaField}: [undefined, undefined] as [number | undefined, number | undefined], | 139 | ${column.javaField}: [undefined, undefined] as [number | undefined, number | undefined], |
| 151 | #elseif ($column.dictType && "" != $column.dictType) | 140 | #elseif ($column.dictType && "" != $column.dictType) |
| 152 | #if(${javaType} == "string") | 141 | #if(${javaType} == "string") |
| 153 | - ${column.javaField}: -1 as -1 | string, // -1 表示全部 | 142 | + ${column.javaField}: undefined as string | undefined, |
| 154 | #elseif(${javaType} == "boolean") | 143 | #elseif(${javaType} == "boolean") |
| 155 | - ${column.javaField}: -1 as -1 | boolean, // -1 表示全部 | 144 | + ${column.javaField}: undefined as boolean | undefined, |
| 156 | #else | 145 | #else |
| 157 | - ${column.javaField}: -1, // -1 表示全部 | 146 | + ${column.javaField}: undefined as number | undefined, |
| 158 | #end | 147 | #end |
| 159 | #elseif(${javaType} == "long" || ${javaType} == "integer" || ${javaType} == "short" || ${javaType} == "double" || ${javaType} == "bigdecimal" || ${javaType} == "byte") | 148 | #elseif(${javaType} == "long" || ${javaType} == "integer" || ${javaType} == "short" || ${javaType} == "double" || ${javaType} == "bigdecimal" || ${javaType} == "byte") |
| 160 | ${column.javaField}: undefined as number | undefined, | 149 | ${column.javaField}: undefined as number | undefined, |
| @@ -181,7 +170,7 @@ const placeholder = computed(() => { | @@ -181,7 +170,7 @@ const placeholder = computed(() => { | ||
| 181 | conditions.push(`${comment}:#[[${]]#formatDate(formData.${javaField}[0])#[[}]]#~#[[${]]#formatDate(formData.${javaField}[1])#[[}]]#`) | 170 | conditions.push(`${comment}:#[[${]]#formatDate(formData.${javaField}[0])#[[}]]#~#[[${]]#formatDate(formData.${javaField}[1])#[[}]]#`) |
| 182 | } | 171 | } |
| 183 | #elseif ($dictType && "" != $dictType) | 172 | #elseif ($dictType && "" != $dictType) |
| 184 | - if (formData.${javaField} !== -1) { | 173 | + if (formData.${javaField} !== undefined) { |
| 185 | conditions.push(`${comment}:#[[${]]#getDictLabel(DICT_TYPE.${dictType.toUpperCase()}, formData.${javaField})#[[}]]#`) | 174 | conditions.push(`${comment}:#[[${]]#getDictLabel(DICT_TYPE.${dictType.toUpperCase()}, formData.${javaField})#[[}]]#`) |
| 186 | } | 175 | } |
| 187 | #else | 176 | #else |
| @@ -207,9 +196,7 @@ function handleSearch() { | @@ -207,9 +196,7 @@ function handleSearch() { | ||
| 207 | ...formData, | 196 | ...formData, |
| 208 | #foreach($column in $columns) | 197 | #foreach($column in $columns) |
| 209 | #if ($column.listOperation) | 198 | #if ($column.listOperation) |
| 210 | - #if ($column.dictType && "" != $column.dictType) | ||
| 211 | - ${column.javaField}: formData.${column.javaField} === -1 ? undefined : formData.${column.javaField}, | ||
| 212 | - #elseif ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | 199 | + #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") |
| 213 | ${column.javaField}: formatDateRange(formData.${column.javaField}), | 200 | ${column.javaField}: formatDateRange(formData.${column.javaField}), |
| 214 | #end | 201 | #end |
| 215 | #end | 202 | #end |
| @@ -224,7 +211,7 @@ function handleReset() { | @@ -224,7 +211,7 @@ function handleReset() { | ||
| 224 | #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") | 211 | #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") |
| 225 | formData.${column.javaField} = [undefined, undefined] | 212 | formData.${column.javaField} = [undefined, undefined] |
| 226 | #elseif ($column.dictType && "" != $column.dictType) | 213 | #elseif ($column.dictType && "" != $column.dictType) |
| 227 | - formData.${column.javaField} = -1 | 214 | + formData.${column.javaField} = undefined |
| 228 | #else | 215 | #else |
| 229 | formData.${column.javaField} = undefined | 216 | formData.${column.javaField} = undefined |
| 230 | #end | 217 | #end |
yudao-module-infra/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineUniappTest.java
| @@ -10,6 +10,9 @@ import org.junit.jupiter.api.Test; | @@ -10,6 +10,9 @@ import org.junit.jupiter.api.Test; | ||
| 10 | import java.util.List; | 10 | import java.util.List; |
| 11 | import java.util.Map; | 11 | import java.util.Map; |
| 12 | 12 | ||
| 13 | +import static org.junit.jupiter.api.Assertions.assertFalse; | ||
| 14 | +import static org.junit.jupiter.api.Assertions.assertTrue; | ||
| 15 | + | ||
| 13 | /** | 16 | /** |
| 14 | * {@link CodegenEngine} 的 Vue3 Admin Uniapp + Wot UI 单元测试 | 17 | * {@link CodegenEngine} 的 Vue3 Admin Uniapp + Wot UI 单元测试 |
| 15 | * | 18 | * |
| @@ -31,4 +34,29 @@ public class CodegenEngineUniappTest extends CodegenEngineAbstractTest { | @@ -31,4 +34,29 @@ public class CodegenEngineUniappTest extends CodegenEngineAbstractTest { | ||
| 31 | assertResult(result, "/vue3_admin_uniapp_one"); | 34 | assertResult(result, "/vue3_admin_uniapp_one"); |
| 32 | } | 35 | } |
| 33 | 36 | ||
| 37 | + @Test | ||
| 38 | + public void testExecute_dictSearch() { | ||
| 39 | + // 准备参数 | ||
| 40 | + CodegenTableDO table = getTable("student") | ||
| 41 | + .setFrontType(CodegenFrontTypeEnum.VUE3_ADMIN_UNIAPP_WOT.getType()) | ||
| 42 | + .setTemplateType(CodegenTemplateTypeEnum.ONE.getType()); | ||
| 43 | + List<CodegenColumnDO> columns = getColumnList("student"); | ||
| 44 | + | ||
| 45 | + // 调用并断言数字、布尔字典 | ||
| 46 | + Map<String, String> result = codegenEngine.execute(DbType.MYSQL, table, columns, null, null); | ||
| 47 | + String searchForm = result.get("yudao-ui-admin-uniapp/src/pages-infra/demo/components/search-form.vue"); | ||
| 48 | + assertFalse(searchForm.contains("<wd-radio")); | ||
| 49 | + assertTrue(searchForm.contains("all-option")); | ||
| 50 | + assertTrue(searchForm.contains(":columns=\"getIntDictOptions(DICT_TYPE.SYSTEM_USER_SEX)\"")); | ||
| 51 | + assertTrue(searchForm.contains(":columns=\"getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)\"")); | ||
| 52 | + | ||
| 53 | + // 调用并断言字符串字典 | ||
| 54 | + columns.stream().filter(column -> "sex".equals(column.getJavaField())).findFirst().orElseThrow() | ||
| 55 | + .setJavaType("String"); | ||
| 56 | + result = codegenEngine.execute(DbType.MYSQL, table, columns, null, null); | ||
| 57 | + searchForm = result.get("yudao-ui-admin-uniapp/src/pages-infra/demo/components/search-form.vue"); | ||
| 58 | + assertTrue(searchForm.contains(":columns=\"getStrDictOptions(DICT_TYPE.SYSTEM_USER_SEX)\"")); | ||
| 59 | + assertTrue(searchForm.contains("sex: undefined as string | undefined,")); | ||
| 60 | + } | ||
| 61 | + | ||
| 34 | } | 62 | } |
yudao-module-infra/src/test/resources/codegen/vue3_admin_uniapp_one/vue/search-form
| @@ -27,40 +27,18 @@ | @@ -27,40 +27,18 @@ | ||
| 27 | clearable | 27 | clearable |
| 28 | /> | 28 | /> |
| 29 | </view> | 29 | </view> |
| 30 | - <view class="yd-search-form-item"> | ||
| 31 | - <view class="yd-search-form-label"> | ||
| 32 | - 性别 | ||
| 33 | - </view> | ||
| 34 | - <wd-radio-group v-model="formData.sex" type="button"> | ||
| 35 | - <wd-radio :value="-1"> | ||
| 36 | - 全部 | ||
| 37 | - </wd-radio> | ||
| 38 | - <wd-radio | ||
| 39 | - v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_USER_SEX)" | ||
| 40 | - :key="dict.value" | ||
| 41 | - :value="dict.value" | ||
| 42 | - > | ||
| 43 | - {{ dict.label }} | ||
| 44 | - </wd-radio> | ||
| 45 | - </wd-radio-group> | ||
| 46 | - </view> | ||
| 47 | - <view class="yd-search-form-item"> | ||
| 48 | - <view class="yd-search-form-label"> | ||
| 49 | - 是否有效 | ||
| 50 | - </view> | ||
| 51 | - <wd-radio-group v-model="formData.enabled" type="button"> | ||
| 52 | - <wd-radio :value="-1"> | ||
| 53 | - 全部 | ||
| 54 | - </wd-radio> | ||
| 55 | - <wd-radio | ||
| 56 | - v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)" | ||
| 57 | - :key="dict.value" | ||
| 58 | - :value="dict.value" | ||
| 59 | - > | ||
| 60 | - {{ dict.label }} | ||
| 61 | - </wd-radio> | ||
| 62 | - </wd-radio-group> | ||
| 63 | - </view> | 30 | + <yd-search-picker |
| 31 | + v-model="formData.sex" | ||
| 32 | + label="性别" | ||
| 33 | + :columns="getIntDictOptions(DICT_TYPE.SYSTEM_USER_SEX)" | ||
| 34 | + all-option | ||
| 35 | + /> | ||
| 36 | + <yd-search-picker | ||
| 37 | + v-model="formData.enabled" | ||
| 38 | + label="是否有效" | ||
| 39 | + :columns="getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)" | ||
| 40 | + all-option | ||
| 41 | + /> | ||
| 64 | <yd-search-date-range v-model="formData.createTime" label="创建时间" /> | 42 | <yd-search-date-range v-model="formData.createTime" label="创建时间" /> |
| 65 | <view class="yd-search-form-actions"> | 43 | <view class="yd-search-form-actions"> |
| 66 | <wd-button class="flex-1" plain @click="handleReset"> | 44 | <wd-button class="flex-1" plain @click="handleReset"> |
| @@ -90,8 +68,8 @@ const visible = ref(false) // 搜索弹窗显示状态 | @@ -90,8 +68,8 @@ const visible = ref(false) // 搜索弹窗显示状态 | ||
| 90 | const formData = reactive({ | 68 | const formData = reactive({ |
| 91 | name: undefined as string | undefined, | 69 | name: undefined as string | undefined, |
| 92 | birthday: undefined as string | undefined, | 70 | birthday: undefined as string | undefined, |
| 93 | - sex: -1, // -1 表示全部 | ||
| 94 | - enabled: -1 as -1 | boolean, // -1 表示全部 | 71 | + sex: undefined as number | undefined, |
| 72 | + enabled: undefined as boolean | undefined, | ||
| 95 | createTime: [undefined, undefined] as [number | undefined, number | undefined], | 73 | createTime: [undefined, undefined] as [number | undefined, number | undefined], |
| 96 | }) // 搜索表单数据 | 74 | }) // 搜索表单数据 |
| 97 | 75 | ||
| @@ -104,10 +82,10 @@ const placeholder = computed(() => { | @@ -104,10 +82,10 @@ const placeholder = computed(() => { | ||
| 104 | if (formData.birthday) { | 82 | if (formData.birthday) { |
| 105 | conditions.push(`出生日期:${formData.birthday}`) | 83 | conditions.push(`出生日期:${formData.birthday}`) |
| 106 | } | 84 | } |
| 107 | - if (formData.sex !== -1) { | 85 | + if (formData.sex !== undefined) { |
| 108 | conditions.push(`性别:${getDictLabel(DICT_TYPE.SYSTEM_USER_SEX, formData.sex)}`) | 86 | conditions.push(`性别:${getDictLabel(DICT_TYPE.SYSTEM_USER_SEX, formData.sex)}`) |
| 109 | } | 87 | } |
| 110 | - if (formData.enabled !== -1) { | 88 | + if (formData.enabled !== undefined) { |
| 111 | conditions.push(`是否有效:${getDictLabel(DICT_TYPE.INFRA_BOOLEAN_STRING, formData.enabled)}`) | 89 | conditions.push(`是否有效:${getDictLabel(DICT_TYPE.INFRA_BOOLEAN_STRING, formData.enabled)}`) |
| 112 | } | 90 | } |
| 113 | if (formData.createTime?.[0] && formData.createTime?.[1]) { | 91 | if (formData.createTime?.[0] && formData.createTime?.[1]) { |
| @@ -121,8 +99,6 @@ function handleSearch() { | @@ -121,8 +99,6 @@ function handleSearch() { | ||
| 121 | visible.value = false | 99 | visible.value = false |
| 122 | emit('search', { | 100 | emit('search', { |
| 123 | ...formData, | 101 | ...formData, |
| 124 | - sex: formData.sex === -1 ? undefined : formData.sex, | ||
| 125 | - enabled: formData.enabled === -1 ? undefined : formData.enabled, | ||
| 126 | createTime: formatDateRange(formData.createTime), | 102 | createTime: formatDateRange(formData.createTime), |
| 127 | }) | 103 | }) |
| 128 | } | 104 | } |
| @@ -131,8 +107,8 @@ function handleSearch() { | @@ -131,8 +107,8 @@ function handleSearch() { | ||
| 131 | function handleReset() { | 107 | function handleReset() { |
| 132 | formData.name = undefined | 108 | formData.name = undefined |
| 133 | formData.birthday = undefined | 109 | formData.birthday = undefined |
| 134 | - formData.sex = -1 | ||
| 135 | - formData.enabled = -1 | 110 | + formData.sex = undefined |
| 111 | + formData.enabled = undefined | ||
| 136 | formData.createTime = [undefined, undefined] | 112 | formData.createTime = [undefined, undefined] |
| 137 | visible.value = false | 113 | visible.value = false |
| 138 | emit('reset') | 114 | emit('reset') |