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 | 42 | #elseif ($column.htmlType == "datetime" && $listOperationCondition == "BETWEEN") |
| 43 | 43 | <yd-search-date-range v-model="formData.${javaField}" label="${comment}" /> |
| 44 | 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 | 51 | #else |
| 63 | 52 | <view class="yd-search-form-item"> |
| 64 | 53 | <view class="yd-search-form-label"> |
| ... | ... | @@ -150,11 +139,11 @@ const formData = reactive({ |
| 150 | 139 | ${column.javaField}: [undefined, undefined] as [number | undefined, number | undefined], |
| 151 | 140 | #elseif ($column.dictType && "" != $column.dictType) |
| 152 | 141 | #if(${javaType} == "string") |
| 153 | - ${column.javaField}: -1 as -1 | string, // -1 表示全部 | |
| 142 | + ${column.javaField}: undefined as string | undefined, | |
| 154 | 143 | #elseif(${javaType} == "boolean") |
| 155 | - ${column.javaField}: -1 as -1 | boolean, // -1 表示全部 | |
| 144 | + ${column.javaField}: undefined as boolean | undefined, | |
| 156 | 145 | #else |
| 157 | - ${column.javaField}: -1, // -1 表示全部 | |
| 146 | + ${column.javaField}: undefined as number | undefined, | |
| 158 | 147 | #end |
| 159 | 148 | #elseif(${javaType} == "long" || ${javaType} == "integer" || ${javaType} == "short" || ${javaType} == "double" || ${javaType} == "bigdecimal" || ${javaType} == "byte") |
| 160 | 149 | ${column.javaField}: undefined as number | undefined, |
| ... | ... | @@ -181,7 +170,7 @@ const placeholder = computed(() => { |
| 181 | 170 | conditions.push(`${comment}:#[[${]]#formatDate(formData.${javaField}[0])#[[}]]#~#[[${]]#formatDate(formData.${javaField}[1])#[[}]]#`) |
| 182 | 171 | } |
| 183 | 172 | #elseif ($dictType && "" != $dictType) |
| 184 | - if (formData.${javaField} !== -1) { | |
| 173 | + if (formData.${javaField} !== undefined) { | |
| 185 | 174 | conditions.push(`${comment}:#[[${]]#getDictLabel(DICT_TYPE.${dictType.toUpperCase()}, formData.${javaField})#[[}]]#`) |
| 186 | 175 | } |
| 187 | 176 | #else |
| ... | ... | @@ -207,9 +196,7 @@ function handleSearch() { |
| 207 | 196 | ...formData, |
| 208 | 197 | #foreach($column in $columns) |
| 209 | 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 | 200 | ${column.javaField}: formatDateRange(formData.${column.javaField}), |
| 214 | 201 | #end |
| 215 | 202 | #end |
| ... | ... | @@ -224,7 +211,7 @@ function handleReset() { |
| 224 | 211 | #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") |
| 225 | 212 | formData.${column.javaField} = [undefined, undefined] |
| 226 | 213 | #elseif ($column.dictType && "" != $column.dictType) |
| 227 | - formData.${column.javaField} = -1 | |
| 214 | + formData.${column.javaField} = undefined | |
| 228 | 215 | #else |
| 229 | 216 | formData.${column.javaField} = undefined |
| 230 | 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 | 10 | import java.util.List; |
| 11 | 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 | 17 | * {@link CodegenEngine} 的 Vue3 Admin Uniapp + Wot UI 单元测试 |
| 15 | 18 | * |
| ... | ... | @@ -31,4 +34,29 @@ public class CodegenEngineUniappTest extends CodegenEngineAbstractTest { |
| 31 | 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 | 27 | clearable |
| 28 | 28 | /> |
| 29 | 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 | 42 | <yd-search-date-range v-model="formData.createTime" label="创建时间" /> |
| 65 | 43 | <view class="yd-search-form-actions"> |
| 66 | 44 | <wd-button class="flex-1" plain @click="handleReset"> |
| ... | ... | @@ -90,8 +68,8 @@ const visible = ref(false) // 搜索弹窗显示状态 |
| 90 | 68 | const formData = reactive({ |
| 91 | 69 | name: undefined as string | undefined, |
| 92 | 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 | 73 | createTime: [undefined, undefined] as [number | undefined, number | undefined], |
| 96 | 74 | }) // 搜索表单数据 |
| 97 | 75 | |
| ... | ... | @@ -104,10 +82,10 @@ const placeholder = computed(() => { |
| 104 | 82 | if (formData.birthday) { |
| 105 | 83 | conditions.push(`出生日期:${formData.birthday}`) |
| 106 | 84 | } |
| 107 | - if (formData.sex !== -1) { | |
| 85 | + if (formData.sex !== undefined) { | |
| 108 | 86 | conditions.push(`性别:${getDictLabel(DICT_TYPE.SYSTEM_USER_SEX, formData.sex)}`) |
| 109 | 87 | } |
| 110 | - if (formData.enabled !== -1) { | |
| 88 | + if (formData.enabled !== undefined) { | |
| 111 | 89 | conditions.push(`是否有效:${getDictLabel(DICT_TYPE.INFRA_BOOLEAN_STRING, formData.enabled)}`) |
| 112 | 90 | } |
| 113 | 91 | if (formData.createTime?.[0] && formData.createTime?.[1]) { |
| ... | ... | @@ -121,8 +99,6 @@ function handleSearch() { |
| 121 | 99 | visible.value = false |
| 122 | 100 | emit('search', { |
| 123 | 101 | ...formData, |
| 124 | - sex: formData.sex === -1 ? undefined : formData.sex, | |
| 125 | - enabled: formData.enabled === -1 ? undefined : formData.enabled, | |
| 126 | 102 | createTime: formatDateRange(formData.createTime), |
| 127 | 103 | }) |
| 128 | 104 | } |
| ... | ... | @@ -131,8 +107,8 @@ function handleSearch() { |
| 131 | 107 | function handleReset() { |
| 132 | 108 | formData.name = undefined |
| 133 | 109 | formData.birthday = undefined |
| 134 | - formData.sex = -1 | |
| 135 | - formData.enabled = -1 | |
| 110 | + formData.sex = undefined | |
| 111 | + formData.enabled = undefined | |
| 136 | 112 | formData.createTime = [undefined, undefined] |
| 137 | 113 | visible.value = false |
| 138 | 114 | emit('reset') | ... | ... |