refactor(车辆表单): 统一字段命名规范并优化表单逻辑
- 将表单字段从驼峰命名改为下划线命名以保持一致性 - 移除电池损耗度字段及相关逻辑 - 简化新旧程度选项 - 将年份选择器从普通选择器改为日期选择器 - 添加实际API调用逻辑替代模拟请求
Showing
2 changed files
with
107 additions
and
104 deletions
| 1 | /* | 1 | /* |
| 2 | * @Date: 2025-07-09 14:58:51 | 2 | * @Date: 2025-07-09 14:58:51 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-07-09 15:55:25 | 4 | + * @LastEditTime: 2025-07-09 16:07:38 |
| 5 | * @FilePath: /jgdl/src/api/car.js | 5 | * @FilePath: /jgdl/src/api/car.js |
| 6 | * @Description: 车辆相关API接口 | 6 | * @Description: 车辆相关API接口 |
| 7 | */ | 7 | */ | ... | ... |
| ... | @@ -132,26 +132,25 @@ | ... | @@ -132,26 +132,25 @@ |
| 132 | </nut-form-item> | 132 | </nut-form-item> |
| 133 | 133 | ||
| 134 | <!-- 车辆出厂年份 --> | 134 | <!-- 车辆出厂年份 --> |
| 135 | - <nut-form-item label-position="top" label="车辆出厂年份" prop="year"> | 135 | + <nut-form-item label-position="top" label="车辆出厂年份" prop="manufacture_year"> |
| 136 | <view class="form-item-content" @click="showYearPicker"> | 136 | <view class="form-item-content" @click="showYearPicker"> |
| 137 | - <text class="form-value">{{ formData.year || '请选择' }}</text> | 137 | + <text class="form-value">{{ formData.manufacture_year || '请选择' }}</text> |
| 138 | <Right class="arrow-icon" /> | 138 | <Right class="arrow-icon" /> |
| 139 | </view> | 139 | </view> |
| 140 | </nut-form-item> | 140 | </nut-form-item> |
| 141 | 141 | ||
| 142 | <!-- 新旧程度 --> | 142 | <!-- 新旧程度 --> |
| 143 | - <nut-form-item label-position="top" label="新旧程度" prop="condition" required | 143 | + <nut-form-item label-position="top" label="新旧程度" prop="new_level"> |
| 144 | - :rules="[{ required: true, message: '请选择新旧程度' }]"> | ||
| 145 | <view class="form-item-content" @click="showConditionPicker"> | 144 | <view class="form-item-content" @click="showConditionPicker"> |
| 146 | - <text class="form-value">{{ formData.condition || '请选择' }}</text> | 145 | + <text class="form-value">{{ formData.new_level || '请选择' }}</text> |
| 147 | <Right class="arrow-icon" /> | 146 | <Right class="arrow-icon" /> |
| 148 | </view> | 147 | </view> |
| 149 | </nut-form-item> | 148 | </nut-form-item> |
| 150 | 149 | ||
| 151 | <!-- 行驶里程 --> | 150 | <!-- 行驶里程 --> |
| 152 | - <nut-form-item label="行驶里程" prop="mileage" required | 151 | + <nut-form-item label="行驶里程" prop="total_mileage_km" required |
| 153 | :rules="[{ required: true, message: '请输入行驶里程' }]"> | 152 | :rules="[{ required: true, message: '请输入行驶里程' }]"> |
| 154 | - <nut-input v-model="formData.mileage" placeholder="1200" type="number" input-align="right"> | 153 | + <nut-input v-model="formData.total_mileage_km" placeholder="1200" type="number" input-align="right"> |
| 155 | <template #right> | 154 | <template #right> |
| 156 | <text class="unit">公里</text> | 155 | <text class="unit">公里</text> |
| 157 | </template> | 156 | </template> |
| ... | @@ -159,8 +158,8 @@ | ... | @@ -159,8 +158,8 @@ |
| 159 | </nut-form-item> | 158 | </nut-form-item> |
| 160 | 159 | ||
| 161 | <!-- 续航里程 --> | 160 | <!-- 续航里程 --> |
| 162 | - <nut-form-item label="续航里程" prop="range"> | 161 | + <nut-form-item label="续航里程" prop="range_km"> |
| 163 | - <nut-input v-model="formData.range" placeholder="60" type="number" input-align="right"> | 162 | + <nut-input v-model="formData.range_km" placeholder="60" type="number" input-align="right"> |
| 164 | <template #right> | 163 | <template #right> |
| 165 | <text class="unit">公里</text> | 164 | <text class="unit">公里</text> |
| 166 | </template> | 165 | </template> |
| ... | @@ -177,8 +176,8 @@ | ... | @@ -177,8 +176,8 @@ |
| 177 | </nut-form-item> | 176 | </nut-form-item> |
| 178 | 177 | ||
| 179 | <!-- 电池容量 --> | 178 | <!-- 电池容量 --> |
| 180 | - <nut-form-item label="电池容量" prop="batteryCapacity"> | 179 | + <nut-form-item label="电池容量" prop="battery_capacity_ah"> |
| 181 | - <nut-input v-model="formData.batteryCapacity" placeholder="20" type="number" | 180 | + <nut-input v-model="formData.battery_capacity_ah" placeholder="20" type="number" |
| 182 | input-align="right"> | 181 | input-align="right"> |
| 183 | <template #right> | 182 | <template #right> |
| 184 | <text class="unit">Ah</text> | 183 | <text class="unit">Ah</text> |
| ... | @@ -187,25 +186,25 @@ | ... | @@ -187,25 +186,25 @@ |
| 187 | </nut-form-item> | 186 | </nut-form-item> |
| 188 | 187 | ||
| 189 | <!-- 电池损耗度 --> | 188 | <!-- 电池损耗度 --> |
| 190 | - <nut-form-item label-position="top" label="电池损耗度" prop="batteryWear"> | 189 | + <!-- <nut-form-item label-position="top" label="电池损耗度" prop="batteryWear"> |
| 191 | <view class="form-item-content" @click="showBatteryWearPicker"> | 190 | <view class="form-item-content" @click="showBatteryWearPicker"> |
| 192 | <text class="form-value">{{ formData.batteryWear || '请选择' }}</text> | 191 | <text class="form-value">{{ formData.batteryWear || '请选择' }}</text> |
| 193 | <Right class="arrow-icon" /> | 192 | <Right class="arrow-icon" /> |
| 194 | </view> | 193 | </view> |
| 195 | - </nut-form-item> | 194 | + </nut-form-item> --> |
| 196 | 195 | ||
| 197 | <!-- 刹车磨损度 --> | 196 | <!-- 刹车磨损度 --> |
| 198 | - <nut-form-item label-position="top" label="刹车磨损度" prop="brakeWear"> | 197 | + <nut-form-item label-position="top" label="刹车磨损度" prop="brake_wear_level"> |
| 199 | <view class="form-item-content" @click="showBrakeWearPicker"> | 198 | <view class="form-item-content" @click="showBrakeWearPicker"> |
| 200 | - <text class="form-value">{{ formData.brakeWear || '请选择' }}</text> | 199 | + <text class="form-value">{{ formData.brake_wear_level || '请选择' }}</text> |
| 201 | <Right class="arrow-icon" /> | 200 | <Right class="arrow-icon" /> |
| 202 | </view> | 201 | </view> |
| 203 | </nut-form-item> | 202 | </nut-form-item> |
| 204 | 203 | ||
| 205 | <!-- 轮胎磨损度 --> | 204 | <!-- 轮胎磨损度 --> |
| 206 | - <nut-form-item label-position="top" label="轮胎磨损度" prop="tireWear"> | 205 | + <nut-form-item label-position="top" label="轮胎磨损度" prop="tire_wear_level"> |
| 207 | <view class="form-item-content" @click="showTireWearPicker"> | 206 | <view class="form-item-content" @click="showTireWearPicker"> |
| 208 | - <text class="form-value">{{ formData.tireWear || '请选择' }}</text> | 207 | + <text class="form-value">{{ formData.tire_wear_level || '请选择' }}</text> |
| 209 | <Right class="arrow-icon" /> | 208 | <Right class="arrow-icon" /> |
| 210 | </view> | 209 | </view> |
| 211 | </nut-form-item> | 210 | </nut-form-item> |
| ... | @@ -221,7 +220,7 @@ | ... | @@ -221,7 +220,7 @@ |
| 221 | </view> | 220 | </view> |
| 222 | <view class="form-item-right"> | 221 | <view class="form-item-right"> |
| 223 | <text class="price-symbol">¥</text> | 222 | <text class="price-symbol">¥</text> |
| 224 | - <input v-model="formData.sellingPrice" placeholder="3200" type="text" class="price-input" /> | 223 | + <input v-model="formData.price" placeholder="3200" type="text" class="price-input" /> |
| 225 | </view> | 224 | </view> |
| 226 | </view> | 225 | </view> |
| 227 | 226 | ||
| ... | @@ -232,7 +231,7 @@ | ... | @@ -232,7 +231,7 @@ |
| 232 | </view> | 231 | </view> |
| 233 | <view class="form-item-right"> | 232 | <view class="form-item-right"> |
| 234 | <text class="market-price-symbol">¥</text> | 233 | <text class="market-price-symbol">¥</text> |
| 235 | - <input v-model="formData.marketPrice" placeholder="6500" type="text" | 234 | + <input v-model="formData.market_price" placeholder="6500" type="text" |
| 236 | class="market-price-input" /> | 235 | class="market-price-input" /> |
| 237 | </view> | 236 | </view> |
| 238 | </view> | 237 | </view> |
| ... | @@ -240,7 +239,7 @@ | ... | @@ -240,7 +239,7 @@ |
| 240 | 239 | ||
| 241 | <!-- 车辆描述 --> | 240 | <!-- 车辆描述 --> |
| 242 | <view class="form-section"> | 241 | <view class="form-section"> |
| 243 | - <nut-textarea v-model="formData.description" placeholder="请描述车辆详情,如使用感受、车况特点等" /> | 242 | + <nut-textarea v-model="formData.note" placeholder="请描述车辆详情,如使用感受、车况特点等" /> |
| 244 | </view> | 243 | </view> |
| 245 | </view> | 244 | </view> |
| 246 | 245 | ||
| ... | @@ -280,8 +279,13 @@ | ... | @@ -280,8 +279,13 @@ |
| 280 | 279 | ||
| 281 | <!-- 年份选择 --> | 280 | <!-- 年份选择 --> |
| 282 | <nut-popup v-model:visible="yearPickerVisible" position="bottom"> | 281 | <nut-popup v-model:visible="yearPickerVisible" position="bottom"> |
| 283 | - <nut-picker v-model="yearValue" :columns="yearOptions" title="选择出厂年份" @confirm="onYearConfirm" | 282 | + <nut-date-picker |
| 284 | - @cancel="yearPickerVisible = false" /> | 283 | + v-model="yearValue" |
| 284 | + title="选择出厂年份" | ||
| 285 | + type="year-month" | ||
| 286 | + @confirm="onYearConfirm" | ||
| 287 | + @cancel="yearPickerVisible = false" | ||
| 288 | + /> | ||
| 285 | </nut-popup> | 289 | </nut-popup> |
| 286 | 290 | ||
| 287 | <!-- 新旧程度选择 --> | 291 | <!-- 新旧程度选择 --> |
| ... | @@ -319,6 +323,9 @@ import BrandModelPicker from '@/components/BrandModelPicker.vue' | ... | @@ -319,6 +323,9 @@ import BrandModelPicker from '@/components/BrandModelPicker.vue' |
| 319 | import { checkPermission, PERMISSION_TYPES } from '@/utils/permission' | 323 | import { checkPermission, PERMISSION_TYPES } from '@/utils/permission' |
| 320 | import './index.less' | 324 | import './index.less' |
| 321 | 325 | ||
| 326 | +// 导入接口 | ||
| 327 | +import { addVehicleAPI, editVehicleAPI, getVehicleDetailAPI } from '@/api/car'; | ||
| 328 | + | ||
| 322 | const themeVars = ref({ | 329 | const themeVars = ref({ |
| 323 | navbarBackground: '#fb923c', | 330 | navbarBackground: '#fb923c', |
| 324 | navbarColor: '#ffffff', | 331 | navbarColor: '#ffffff', |
| ... | @@ -341,12 +348,6 @@ const isAuthMode = ref(type === 'auth' && id) | ... | @@ -341,12 +348,6 @@ const isAuthMode = ref(type === 'auth' && id) |
| 341 | const isMyCarMode = ref(type === 'myCar' && id) | 348 | const isMyCarMode = ref(type === 'myCar' && id) |
| 342 | const carId = ref(id || '') | 349 | const carId = ref(id || '') |
| 343 | 350 | ||
| 344 | -// 文件上传相关 | ||
| 345 | -// const frontFileList = ref([]) // 正面照(保留用于兼容旧代码) | ||
| 346 | -// const leftFileList = ref([]) // 左侧照(保留用于兼容旧代码) | ||
| 347 | -// const rightFileList = ref([]) // 右侧照(保留用于兼容旧代码) | ||
| 348 | -// const otherFileList = ref([]) // 其他照片(保留用于兼容旧代码) | ||
| 349 | - | ||
| 350 | // 已上传图片的URL | 351 | // 已上传图片的URL |
| 351 | const uploadedImages = reactive({ | 352 | const uploadedImages = reactive({ |
| 352 | front: '', | 353 | front: '', |
| ... | @@ -370,18 +371,18 @@ const formData = reactive({ | ... | @@ -370,18 +371,18 @@ const formData = reactive({ |
| 370 | brand: '', | 371 | brand: '', |
| 371 | model: '', | 372 | model: '', |
| 372 | brandModel: '', // 品牌型号组合字段,用于表单验证 | 373 | brandModel: '', // 品牌型号组合字段,用于表单验证 |
| 373 | - year: '', | 374 | + manufacture_year: '', |
| 374 | - condition: '', | 375 | + new_level: '', |
| 375 | - mileage: '1200', | 376 | + total_mileage_km: '1200', |
| 376 | - range: '60', | 377 | + range_km: '60', |
| 377 | maxSpeed: '25', | 378 | maxSpeed: '25', |
| 378 | - batteryCapacity: '20', | 379 | + battery_capacity_ah: '20', |
| 379 | batteryWear: '', | 380 | batteryWear: '', |
| 380 | - brakeWear: '', | 381 | + brake_wear_level: '', |
| 381 | - tireWear: '', | 382 | + tire_wear_level: '', |
| 382 | - sellingPrice: '3200', | 383 | + price: '3200', |
| 383 | - marketPrice: '6500', | 384 | + market_price: '6500', |
| 384 | - description: '' | 385 | + note: '' |
| 385 | }) | 386 | }) |
| 386 | 387 | ||
| 387 | // 选择器显示状态 | 388 | // 选择器显示状态 |
| ... | @@ -402,7 +403,7 @@ const brandModelPickerRef = ref(null) | ... | @@ -402,7 +403,7 @@ const brandModelPickerRef = ref(null) |
| 402 | const schoolValue = ref([]) | 403 | const schoolValue = ref([]) |
| 403 | const brandValue = ref([]) | 404 | const brandValue = ref([]) |
| 404 | const modelValue = ref([]) | 405 | const modelValue = ref([]) |
| 405 | -const yearValue = ref([]) | 406 | +const yearValue = ref(new Date()) |
| 406 | const conditionValue = ref([]) | 407 | const conditionValue = ref([]) |
| 407 | const batteryWearValue = ref([]) | 408 | const batteryWearValue = ref([]) |
| 408 | const brakeWearValue = ref([]) | 409 | const brakeWearValue = ref([]) |
| ... | @@ -441,19 +442,10 @@ const modelOptions = ref([ | ... | @@ -441,19 +442,10 @@ const modelOptions = ref([ |
| 441 | { text: '其他型号', value: '其他型号' } | 442 | { text: '其他型号', value: '其他型号' } |
| 442 | ]) | 443 | ]) |
| 443 | 444 | ||
| 444 | -const yearOptions = ref([ | 445 | + |
| 445 | - { text: '2024年', value: '2024年' }, | ||
| 446 | - { text: '2023年', value: '2023年' }, | ||
| 447 | - { text: '2022年', value: '2022年' }, | ||
| 448 | - { text: '2021年', value: '2021年' }, | ||
| 449 | - { text: '2020年', value: '2020年' }, | ||
| 450 | - { text: '2019年', value: '2019年' }, | ||
| 451 | - { text: '2018年及以前', value: '2018年及以前' } | ||
| 452 | -]) | ||
| 453 | 446 | ||
| 454 | const conditionOptions = ref([ | 447 | const conditionOptions = ref([ |
| 455 | { text: '全新', value: '全新' }, | 448 | { text: '全新', value: '全新' }, |
| 456 | - { text: '9成新', value: '9成新' }, | ||
| 457 | { text: '8成新', value: '8成新' }, | 449 | { text: '8成新', value: '8成新' }, |
| 458 | { text: '7成新', value: '7成新' }, | 450 | { text: '7成新', value: '7成新' }, |
| 459 | { text: '6成新', value: '6成新' }, | 451 | { text: '6成新', value: '6成新' }, |
| ... | @@ -468,10 +460,6 @@ const wearLevelOptions = ref([ | ... | @@ -468,10 +460,6 @@ const wearLevelOptions = ref([ |
| 468 | { text: '需要更换', value: '需要更换' } | 460 | { text: '需要更换', value: '需要更换' } |
| 469 | ]) | 461 | ]) |
| 470 | 462 | ||
| 471 | -// 品牌型号数据已移至 BrandModelPicker 组件中 | ||
| 472 | - | ||
| 473 | - | ||
| 474 | - | ||
| 475 | /** | 463 | /** |
| 476 | * 触发图片上传 | 464 | * 触发图片上传 |
| 477 | * @param {String} type - 图片类型 (front/left/right/other) | 465 | * @param {String} type - 图片类型 (front/left/right/other) |
| ... | @@ -570,15 +558,6 @@ const deleteImage = (type) => { | ... | @@ -570,15 +558,6 @@ const deleteImage = (type) => { |
| 570 | }) | 558 | }) |
| 571 | } | 559 | } |
| 572 | 560 | ||
| 573 | -// 保留旧的上传逻辑作为备用(已注释) | ||
| 574 | -// const afterRead = (event, type) => { ... } | ||
| 575 | - | ||
| 576 | -// 保留旧的删除逻辑作为备用(已注释) | ||
| 577 | -// const onDeleteFront = (file, index) => { frontFileList.value.splice(index, 1) } | ||
| 578 | -// const onDeleteLeft = (file, index) => { leftFileList.value.splice(index, 1) } | ||
| 579 | -// const onDeleteRight = (file, index) => { rightFileList.value.splice(index, 1) } | ||
| 580 | -// const onDeleteOther = (file, index) => { otherFileList.value.splice(index, 1) } | ||
| 581 | - | ||
| 582 | /** | 561 | /** |
| 583 | * 显示学校选择器 | 562 | * 显示学校选择器 |
| 584 | */ | 563 | */ |
| ... | @@ -624,9 +603,9 @@ const showConditionPicker = () => { | ... | @@ -624,9 +603,9 @@ const showConditionPicker = () => { |
| 624 | /** | 603 | /** |
| 625 | * 显示电池损耗度选择器 | 604 | * 显示电池损耗度选择器 |
| 626 | */ | 605 | */ |
| 627 | -const showBatteryWearPicker = () => { | 606 | +// const showBatteryWearPicker = () => { |
| 628 | - batteryWearPickerVisible.value = true | 607 | +// batteryWearPickerVisible.value = true |
| 629 | -} | 608 | +// } |
| 630 | 609 | ||
| 631 | /** | 610 | /** |
| 632 | * 显示刹车磨损度选择器 | 611 | * 显示刹车磨损度选择器 |
| ... | @@ -671,7 +650,7 @@ const onModelConfirm = ({ selectedValue }) => { | ... | @@ -671,7 +650,7 @@ const onModelConfirm = ({ selectedValue }) => { |
| 671 | * 年份选择确认 | 650 | * 年份选择确认 |
| 672 | */ | 651 | */ |
| 673 | const onYearConfirm = ({ selectedValue }) => { | 652 | const onYearConfirm = ({ selectedValue }) => { |
| 674 | - formData.year = selectedValue[0] | 653 | + formData.manufacture_year = `${selectedValue[0]}年` |
| 675 | yearPickerVisible.value = false | 654 | yearPickerVisible.value = false |
| 676 | } | 655 | } |
| 677 | 656 | ||
| ... | @@ -679,7 +658,7 @@ const onYearConfirm = ({ selectedValue }) => { | ... | @@ -679,7 +658,7 @@ const onYearConfirm = ({ selectedValue }) => { |
| 679 | * 新旧程度选择确认 | 658 | * 新旧程度选择确认 |
| 680 | */ | 659 | */ |
| 681 | const onConditionConfirm = ({ selectedValue }) => { | 660 | const onConditionConfirm = ({ selectedValue }) => { |
| 682 | - formData.condition = selectedValue[0] | 661 | + formData.new_level = selectedValue[0] |
| 683 | conditionPickerVisible.value = false | 662 | conditionPickerVisible.value = false |
| 684 | } | 663 | } |
| 685 | 664 | ||
| ... | @@ -695,7 +674,7 @@ const onBatteryWearConfirm = ({ selectedValue }) => { | ... | @@ -695,7 +674,7 @@ const onBatteryWearConfirm = ({ selectedValue }) => { |
| 695 | * 刹车磨损度选择确认 | 674 | * 刹车磨损度选择确认 |
| 696 | */ | 675 | */ |
| 697 | const onBrakeWearConfirm = ({ selectedValue }) => { | 676 | const onBrakeWearConfirm = ({ selectedValue }) => { |
| 698 | - formData.brakeWear = selectedValue[0] | 677 | + formData.brake_wear_level = selectedValue[0] |
| 699 | brakeWearPickerVisible.value = false | 678 | brakeWearPickerVisible.value = false |
| 700 | } | 679 | } |
| 701 | 680 | ||
| ... | @@ -703,7 +682,7 @@ const onBrakeWearConfirm = ({ selectedValue }) => { | ... | @@ -703,7 +682,7 @@ const onBrakeWearConfirm = ({ selectedValue }) => { |
| 703 | * 轮胎磨损度选择确认 | 682 | * 轮胎磨损度选择确认 |
| 704 | */ | 683 | */ |
| 705 | const onTireWearConfirm = ({ selectedValue }) => { | 684 | const onTireWearConfirm = ({ selectedValue }) => { |
| 706 | - formData.tireWear = selectedValue[0] | 685 | + formData.tire_wear_level = selectedValue[0] |
| 707 | tireWearPickerVisible.value = false | 686 | tireWearPickerVisible.value = false |
| 708 | } | 687 | } |
| 709 | 688 | ||
| ... | @@ -737,10 +716,32 @@ const onBrandModelCancel = () => { | ... | @@ -737,10 +716,32 @@ const onBrandModelCancel = () => { |
| 737 | // 可以在这里处理取消逻辑 | 716 | // 可以在这里处理取消逻辑 |
| 738 | } | 717 | } |
| 739 | 718 | ||
| 719 | +const createCar = async (data) => { | ||
| 720 | + const { code } = await addVehicleAPI({ ...data }) | ||
| 721 | + if (code) { | ||
| 722 | + Taro.showToast({ | ||
| 723 | + title: '发布成功', | ||
| 724 | + icon: 'success' | ||
| 725 | + }) | ||
| 726 | + Taro.navigateBack() | ||
| 727 | + } | ||
| 728 | +} | ||
| 729 | + | ||
| 730 | +const updateCar = async (id, data) => { | ||
| 731 | + const { code } = await updateVehicleAPI({ id, ...data }) | ||
| 732 | + if (code) { | ||
| 733 | + Taro.showToast({ | ||
| 734 | + title: '保存成功', | ||
| 735 | + icon: 'success' | ||
| 736 | + }) | ||
| 737 | + Taro.navigateBack() | ||
| 738 | + } | ||
| 739 | +} | ||
| 740 | + | ||
| 740 | /** | 741 | /** |
| 741 | * 发布/保存车辆 | 742 | * 发布/保存车辆 |
| 742 | */ | 743 | */ |
| 743 | -const onPublish = () => { | 744 | +const onPublish = async () => { |
| 744 | if (!validateForm()) return | 745 | if (!validateForm()) return |
| 745 | 746 | ||
| 746 | const loadingTitle = isEditMode.value ? '保存中...' : '发布中...' | 747 | const loadingTitle = isEditMode.value ? '保存中...' : '发布中...' |
| ... | @@ -758,19 +759,21 @@ const onPublish = () => { | ... | @@ -758,19 +759,21 @@ const onPublish = () => { |
| 758 | const submitData = { | 759 | const submitData = { |
| 759 | ...formData, | 760 | ...formData, |
| 760 | images: images, | 761 | images: images, |
| 761 | - imageUrls: Object.values(images).filter(url => url) // 过滤空URL | 762 | + photo_meta_ids: Object.values(images).filter(url => url) // 过滤空URL |
| 762 | } | 763 | } |
| 763 | 764 | ||
| 765 | + console.warn(submitData); | ||
| 766 | + | ||
| 764 | if (isEditMode.value) { | 767 | if (isEditMode.value) { |
| 765 | submitData.id = carId.value | 768 | submitData.id = carId.value |
| 766 | } | 769 | } |
| 767 | 770 | ||
| 768 | - // TODO: 在此处调用实际的API接口提交数据 | 771 | + // 在此处调用实际的API接口提交数据 |
| 769 | - // if (isEditMode.value) { | 772 | + if (isEditMode.value) { |
| 770 | - // updateCar(carId.value, submitData) | 773 | + await updateCar(carId.value, submitData) |
| 771 | - // } else { | 774 | + } else { |
| 772 | - // createCar(submitData) | 775 | + await createCar(submitData) |
| 773 | - // } | 776 | + } |
| 774 | 777 | ||
| 775 | // 模拟请求 | 778 | // 模拟请求 |
| 776 | setTimeout(() => { | 779 | setTimeout(() => { |
| ... | @@ -809,17 +812,17 @@ const validateForm = () => { | ... | @@ -809,17 +812,17 @@ const validateForm = () => { |
| 809 | return false | 812 | return false |
| 810 | } | 813 | } |
| 811 | 814 | ||
| 812 | - if (!formData.condition) { | 815 | + // if (!formData.new_level) { |
| 813 | - Taro.showToast({ title: '请选择新旧程度', icon: 'none' }) | 816 | + // Taro.showToast({ title: '请选择新旧程度', icon: 'none' }) |
| 814 | - return false | 817 | + // return false |
| 815 | - } | 818 | + // } |
| 816 | 819 | ||
| 817 | - if (!formData.mileage || formData.mileage <= 0) { | 820 | + if (!formData.total_mileage_km || formData.total_mileage_km <= 0) { |
| 818 | Taro.showToast({ title: '请输入正确的行驶里程', icon: 'none' }) | 821 | Taro.showToast({ title: '请输入正确的行驶里程', icon: 'none' }) |
| 819 | return false | 822 | return false |
| 820 | } | 823 | } |
| 821 | 824 | ||
| 822 | - if (!formData.sellingPrice) { | 825 | + if (!formData.price) { |
| 823 | Taro.showToast({ title: '请输入出让价格', icon: 'none' }) | 826 | Taro.showToast({ title: '请输入出让价格', icon: 'none' }) |
| 824 | return false | 827 | return false |
| 825 | } | 828 | } |
| ... | @@ -844,18 +847,18 @@ const loadCarData = async () => { | ... | @@ -844,18 +847,18 @@ const loadCarData = async () => { |
| 844 | school: '上海理工大学', | 847 | school: '上海理工大学', |
| 845 | brand: '小牛电动', | 848 | brand: '小牛电动', |
| 846 | model: 'NGT', | 849 | model: 'NGT', |
| 847 | - year: '2023年', | 850 | + manufacture_year: '2023年', |
| 848 | - condition: '9成新', | 851 | + new_level: '9成新', |
| 849 | - mileage: '1200', | 852 | + total_mileage_km: '1200', |
| 850 | - range: '60', | 853 | + range_km: '60', |
| 851 | maxSpeed: '25', | 854 | maxSpeed: '25', |
| 852 | - batteryCapacity: '20', | 855 | + battery_capacity_ah: '20', |
| 853 | batteryWear: '轻微磨损', | 856 | batteryWear: '轻微磨损', |
| 854 | - brakeWear: '轻微磨损', | 857 | + brake_wear_level: '轻微磨损', |
| 855 | - tireWear: '轻微磨损', | 858 | + tire_wear_level: '轻微磨损', |
| 856 | - sellingPrice: '3200', | 859 | + price: '3200', |
| 857 | - marketPrice: '6500', | 860 | + market_price: '6500', |
| 858 | - description: '车况良好,电池续航正常,无重大事故,平时保养得当。', | 861 | + note: '车况良好,电池续航正常,无重大事故,平时保养得当。', |
| 859 | images: { | 862 | images: { |
| 860 | front: 'https://picsum.photos/300/200?random=1', | 863 | front: 'https://picsum.photos/300/200?random=1', |
| 861 | left: 'https://picsum.photos/300/200?random=2', | 864 | left: 'https://picsum.photos/300/200?random=2', |
| ... | @@ -869,18 +872,18 @@ const loadCarData = async () => { | ... | @@ -869,18 +872,18 @@ const loadCarData = async () => { |
| 869 | school: mockCarData.school, | 872 | school: mockCarData.school, |
| 870 | brand: mockCarData.brand, | 873 | brand: mockCarData.brand, |
| 871 | model: mockCarData.model, | 874 | model: mockCarData.model, |
| 872 | - year: mockCarData.year, | 875 | + manufacture_year: mockCarData.manufacture_year, |
| 873 | - condition: mockCarData.condition, | 876 | + new_level: mockCarData.new_level, |
| 874 | - mileage: mockCarData.mileage, | 877 | + total_mileage_km: mockCarData.total_mileage_km, |
| 875 | - range: mockCarData.range, | 878 | + range_km: mockCarData.range_km, |
| 876 | maxSpeed: mockCarData.maxSpeed, | 879 | maxSpeed: mockCarData.maxSpeed, |
| 877 | - batteryCapacity: mockCarData.batteryCapacity, | 880 | + battery_capacity_ah: mockCarData.battery_capacity_ah, |
| 878 | batteryWear: mockCarData.batteryWear, | 881 | batteryWear: mockCarData.batteryWear, |
| 879 | - brakeWear: mockCarData.brakeWear, | 882 | + brake_wear_level: mockCarData.brake_wear_level, |
| 880 | - tireWear: mockCarData.tireWear, | 883 | + tire_wear_level: mockCarData.tire_wear_level, |
| 881 | - sellingPrice: mockCarData.sellingPrice, | 884 | + price: mockCarData.price, |
| 882 | - marketPrice: mockCarData.marketPrice, | 885 | + market_price: mockCarData.market_price, |
| 883 | - description: mockCarData.description | 886 | + note: mockCarData.note |
| 884 | }) | 887 | }) |
| 885 | 888 | ||
| 886 | // 填充图片数据 | 889 | // 填充图片数据 | ... | ... |
-
Please register or login to post a comment