create.vue 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <template>
  2. <view class="create-page">
  3. <view class="form">
  4. <view class="form-item">
  5. <text class="label">运动类型</text>
  6. <input class="input" v-model="form.exerciseType" placeholder="如:跑步、瑜伽等" />
  7. </view>
  8. <view class="form-item">
  9. <text class="label">时长(分钟)</text>
  10. <input class="input" type="number" v-model="form.durationMin" placeholder="请输入时长" />
  11. </view>
  12. <view class="form-item">
  13. <text class="label">消耗热量(kcal)</text>
  14. <input class="input" type="number" v-model="form.caloriesBurned" placeholder="请输入消耗热量" />
  15. </view>
  16. <view class="form-item">
  17. <text class="label">运动日期</text>
  18. <picker mode="date" :value="form.exerciseDate" @change="onDateChange">
  19. <view class="picker">{{ form.exerciseDate }}</view>
  20. </picker>
  21. </view>
  22. </view>
  23. <button class="submit-btn" @click="submit">保存</button>
  24. </view>
  25. </template>
  26. <script>
  27. import { createExerciseRecord } from '../../utils/api.js'
  28. import { today } from '../../utils/format.js'
  29. export default {
  30. data() {
  31. return {
  32. form: {
  33. exerciseType: '',
  34. durationMin: '',
  35. caloriesBurned: '',
  36. exerciseDate: today()
  37. }
  38. }
  39. },
  40. methods: {
  41. onDateChange(e) {
  42. this.form.exerciseDate = e.detail.value
  43. },
  44. submit() {
  45. if (!this.form.exerciseType) {
  46. uni.showToast({ title: '请输入运动类型', icon: 'none' })
  47. return
  48. }
  49. if (!this.form.durationMin) {
  50. uni.showToast({ title: '请输入时长', icon: 'none' })
  51. return
  52. }
  53. var data = {
  54. exerciseType: this.form.exerciseType,
  55. durationMin: parseInt(this.form.durationMin),
  56. caloriesBurned: this.form.caloriesBurned ? parseInt(this.form.caloriesBurned) : 0,
  57. exerciseDate: this.form.exerciseDate
  58. }
  59. createExerciseRecord(data).then(() => {
  60. uni.showToast({ title: '保存成功', icon: 'success' })
  61. setTimeout(() => {
  62. uni.navigateBack()
  63. }, 1000)
  64. })
  65. }
  66. }
  67. }
  68. </script>
  69. <style>
  70. .create-page { padding: 30rpx; }
  71. .form { background: #fff; border-radius: 16rpx; padding: 0 30rpx; margin-bottom: 60rpx; }
  72. .form-item { display: flex; align-items: center; padding: 30rpx 0; border-bottom: 1rpx solid #f5f5f5; }
  73. .label { width: 220rpx; color: #333; }
  74. .input { flex: 1; text-align: right; }
  75. .picker { flex: 1; text-align: right; color: #333; }
  76. .submit-btn { background: #F97316; color: #fff; border-radius: 40rpx; }
  77. </style>