Commit 1c498865939f76da3b866189617fbd340e26c432

Authored by YunaiV
1 parent 1a232f80

refactor(codegen): 统一移动端搜索全部选项语义

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(() =&gt; {
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(() =&gt; {
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')
... ...