feat(EditFamily): 添加区域战队选择功能并替换家庭规模选择
将家庭规模选择替换为区域战队选择功能,添加区域选择器和相关逻辑
Showing
1 changed file
with
62 additions
and
23 deletions
| 1 | <!-- | 1 | <!-- |
| 2 | * @Date: 2025-08-27 17:44:53 | 2 | * @Date: 2025-08-27 17:44:53 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-08-28 21:18:07 | 4 | + * @LastEditTime: 2025-08-29 14:18:23 |
| 5 | * @FilePath: /lls_program/src/pages/EditFamily/index.vue | 5 | * @FilePath: /lls_program/src/pages/EditFamily/index.vue |
| 6 | * @Description: 文件描述 | 6 | * @Description: 文件描述 |
| 7 | --> | 7 | --> |
| 8 | <template> | 8 | <template> |
| 9 | - <view class="min-h-screen flex flex-col bg-white"> | 9 | + <view class="min-h-screen flex flex-col bg-[#F9FAFB]"> |
| 10 | <!-- <AppHeader title="编辑家庭" /> --> | 10 | <!-- <AppHeader title="编辑家庭" /> --> |
| 11 | <view class="flex-1 px-4 py-6 overflow-auto"> | 11 | <view class="flex-1 px-4 py-6 overflow-auto"> |
| 12 | <view class="mb-6"> | 12 | <view class="mb-6"> |
| ... | @@ -37,23 +37,16 @@ | ... | @@ -37,23 +37,16 @@ |
| 37 | /> | 37 | /> |
| 38 | </view> | 38 | </view> |
| 39 | </view> | 39 | </view> |
| 40 | - <!-- Family Size --> | 40 | + <!-- District Selection --> |
| 41 | <view class="mb-6"> | 41 | <view class="mb-6"> |
| 42 | <view class="bg-white rounded-lg border border-gray-200 p-4"> | 42 | <view class="bg-white rounded-lg border border-gray-200 p-4"> |
| 43 | - <view class="block text-lg font-medium mb-4">家庭规模</view> | 43 | + <view class="block text-lg font-medium mb-4">快来挑选加入哪个区域战队</view> |
| 44 | - <view class="flex gap-2"> | 44 | + <view class="bg-white rounded-xl p-4 border border-gray-200" @click="showDistrictPicker = true"> |
| 45 | - <view | 45 | + <view class="flex justify-between items-center"> |
| 46 | - v-for="size in familySizes" | 46 | + <text :class="{'text-gray-400': !selectedDistrictText, 'text-gray-900': selectedDistrictText}" class="text-base"> |
| 47 | - :key="size" | 47 | + {{ selectedDistrictText || '请选择区域' }} |
| 48 | - @click="familySize = size" | 48 | + </text> |
| 49 | - :class="[ | 49 | + <Right size="16" color="#888" /> |
| 50 | - 'flex-1 py-3 rounded-lg border text-center', | ||
| 51 | - familySize === size | ||
| 52 | - ? 'border-blue-500 bg-blue-50 text-blue-500' | ||
| 53 | - : 'border-gray-200 text-gray-700' | ||
| 54 | - ]" | ||
| 55 | - > | ||
| 56 | - {{ size }} | ||
| 57 | </view> | 50 | </view> |
| 58 | </view> | 51 | </view> |
| 59 | </view> | 52 | </view> |
| ... | @@ -156,22 +149,55 @@ | ... | @@ -156,22 +149,55 @@ |
| 156 | :init-no="previewIndex" | 149 | :init-no="previewIndex" |
| 157 | @close="closePreview" | 150 | @close="closePreview" |
| 158 | /> | 151 | /> |
| 152 | + | ||
| 153 | + <!-- 区域选择器 --> | ||
| 154 | + <nut-popup v-model:visible="showDistrictPicker" position="bottom"> | ||
| 155 | + <nut-picker | ||
| 156 | + v-model="districtValue" | ||
| 157 | + :columns="districtColumns" | ||
| 158 | + @confirm="onDistrictConfirm" | ||
| 159 | + @cancel="showDistrictPicker = false" | ||
| 160 | + title="选择区域战队" | ||
| 161 | + ></nut-picker> | ||
| 162 | + </nut-popup> | ||
| 159 | </view> | 163 | </view> |
| 160 | </template> | 164 | </template> |
| 161 | 165 | ||
| 162 | <script setup> | 166 | <script setup> |
| 163 | import { ref, onMounted } from 'vue'; | 167 | import { ref, onMounted } from 'vue'; |
| 164 | import Taro from '@tarojs/taro'; | 168 | import Taro from '@tarojs/taro'; |
| 165 | -import { Edit, Tips, Photograph } from '@nutui/icons-vue-taro'; | 169 | +import { Edit, Tips, Photograph, Right } from '@nutui/icons-vue-taro'; |
| 166 | // import AppHeader from '../../components/AppHeader.vue'; | 170 | // import AppHeader from '../../components/AppHeader.vue'; |
| 167 | import BASE_URL from '@/utils/config'; | 171 | import BASE_URL from '@/utils/config'; |
| 168 | 172 | ||
| 169 | const familyName = ref(''); | 173 | const familyName = ref(''); |
| 170 | const familyIntro = ref(''); | 174 | const familyIntro = ref(''); |
| 171 | -const familySize = ref('3-5人'); | 175 | +const selectedDistrict = ref(null); |
| 176 | +const selectedDistrictText = ref(''); | ||
| 172 | const familyMotto = ref(['', '', '', '']); | 177 | const familyMotto = ref(['', '', '', '']); |
| 173 | const familyMottoPlaceholder = ref(['孝', '敬', '和', '睦']); | 178 | const familyMottoPlaceholder = ref(['孝', '敬', '和', '睦']); |
| 174 | -const familySizes = ['2人', '3-5人', '6人+']; | 179 | + |
| 180 | +// 区域选择器相关 | ||
| 181 | +const showDistrictPicker = ref(false); | ||
| 182 | +const districtValue = ref([]); | ||
| 183 | +const districtColumns = ref([ | ||
| 184 | + { text: '黄浦区', value: 310101 }, | ||
| 185 | + { text: '徐汇区', value: 310104 }, | ||
| 186 | + { text: '长宁区', value: 310105 }, | ||
| 187 | + { text: '静安区', value: 310106 }, | ||
| 188 | + { text: '普陀区', value: 310107 }, | ||
| 189 | + { text: '虹口区', value: 310109 }, | ||
| 190 | + { text: '杨浦区', value: 310110 }, | ||
| 191 | + { text: '闵行区', value: 310112 }, | ||
| 192 | + { text: '宝山区', value: 310113 }, | ||
| 193 | + { text: '嘉定区', value: 310114 }, | ||
| 194 | + { text: '浦东新区', value: 310115 }, | ||
| 195 | + { text: '金山区', value: 310116 }, | ||
| 196 | + { text: '松江区', value: 310117 }, | ||
| 197 | + { text: '青浦区', value: 310118 }, | ||
| 198 | + { text: '奉贤区', value: 310120 }, | ||
| 199 | + { text: '崇明区', value: 310151 } | ||
| 200 | +]); | ||
| 175 | const familyAvatar = ref(''); | 201 | const familyAvatar = ref(''); |
| 176 | const focusedIndex = ref(-1); | 202 | const focusedIndex = ref(-1); |
| 177 | 203 | ||
| ... | @@ -185,12 +211,25 @@ onMounted(() => { | ... | @@ -185,12 +211,25 @@ onMounted(() => { |
| 185 | // Mock data for current family information | 211 | // Mock data for current family information |
| 186 | familyName.value = '幸福一家'; | 212 | familyName.value = '幸福一家'; |
| 187 | familyIntro.value = '我们是相亲相爱的一家人'; | 213 | familyIntro.value = '我们是相亲相爱的一家人'; |
| 188 | - familySize.value = '3-5人'; | 214 | + districtValue.value = [310104]; // 模拟勾选项已选择徐汇区 |
| 215 | + // 需要提交的数据集 | ||
| 216 | + selectedDistrict.value = 310104; // 模拟已选择徐汇区 | ||
| 217 | + selectedDistrictText.value = districtColumns.value.find(item => item.value === selectedDistrict.value).text; | ||
| 189 | familyMotto.value = ['家', '和', '万', '事']; | 218 | familyMotto.value = ['家', '和', '万', '事']; |
| 190 | familyAvatar.value = 'https://img.yzcdn.cn/vant/cat.jpeg'; | 219 | familyAvatar.value = 'https://img.yzcdn.cn/vant/cat.jpeg'; |
| 191 | }); | 220 | }); |
| 192 | 221 | ||
| 193 | /** | 222 | /** |
| 223 | + * @description 确认选择区域 | ||
| 224 | + * @param {object} param0 - 包含 selectedValue 和 selectedOptions 的对象 | ||
| 225 | + */ | ||
| 226 | +const onDistrictConfirm = ({ selectedValue, selectedOptions }) => { | ||
| 227 | + selectedDistrict.value = selectedValue[0]; | ||
| 228 | + selectedDistrictText.value = selectedOptions.map((option) => option.text).join(''); | ||
| 229 | + showDistrictPicker.value = false; | ||
| 230 | +}; | ||
| 231 | + | ||
| 232 | +/** | ||
| 194 | * 处理输入变化 | 233 | * 处理输入变化 |
| 195 | */ | 234 | */ |
| 196 | const handleInputChange = (index, value) => { | 235 | const handleInputChange = (index, value) => { |
| ... | @@ -337,8 +376,8 @@ const validateForm = () => { | ... | @@ -337,8 +376,8 @@ const validateForm = () => { |
| 337 | return false; | 376 | return false; |
| 338 | } | 377 | } |
| 339 | 378 | ||
| 340 | - if (!familySize.value) { | 379 | + if (!selectedDistrict.value) { |
| 341 | - showToast('请选择家庭规模', 'error'); | 380 | + showToast('请选择区域战队', 'error'); |
| 342 | return false; | 381 | return false; |
| 343 | } | 382 | } |
| 344 | 383 | ... | ... |
-
Please register or login to post a comment