|
@@ -19,13 +19,13 @@
|
|
|
<view class="card">
|
|
<view class="card">
|
|
|
<view class="card-header">
|
|
<view class="card-header">
|
|
|
<text class="card-icon">🍽️</text>
|
|
<text class="card-icon">🍽️</text>
|
|
|
- <text class="card-title">选择餐次</text>
|
|
|
|
|
|
|
+ <text class="card-title">选择餐次(可多选)</text>
|
|
|
</view>
|
|
</view>
|
|
|
<view class="card-body">
|
|
<view class="card-body">
|
|
|
<view class="tag-row">
|
|
<view class="tag-row">
|
|
|
<TagChip v-for="m in mealTypes" :key="m.value" :label="m.label"
|
|
<TagChip v-for="m in mealTypes" :key="m.value" :label="m.label"
|
|
|
- :active="form.mealType === m.value"
|
|
|
|
|
- @select="form.mealType = m.value" />
|
|
|
|
|
|
|
+ :active="form.mealTypes.indexOf(m.value) > -1"
|
|
|
|
|
+ @select="toggleMealType(m.value)" />
|
|
|
</view>
|
|
</view>
|
|
|
</view>
|
|
</view>
|
|
|
</view>
|
|
</view>
|
|
@@ -194,7 +194,7 @@ export default {
|
|
|
{ label: '加餐', value: 'snack' }
|
|
{ label: '加餐', value: 'snack' }
|
|
|
],
|
|
],
|
|
|
form: {
|
|
form: {
|
|
|
- mealType: '',
|
|
|
|
|
|
|
+ mealTypes: [],
|
|
|
foodItems: '',
|
|
foodItems: '',
|
|
|
remark: '',
|
|
remark: '',
|
|
|
photos: [],
|
|
photos: [],
|
|
@@ -207,6 +207,18 @@ export default {
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
computed: {
|
|
computed: {
|
|
|
|
|
+ // 餐次多选 → 逗号拼接字符串(后端契约不变:mealType 仍为单值 String,VARCHAR(32) 够用)
|
|
|
|
|
+ // 固定按早餐→午餐→晚餐→加餐输出,避免点击顺序影响 records 页首项样式语义
|
|
|
|
|
+ mealType: function() {
|
|
|
|
|
+ var arr = this.form.mealTypes || []
|
|
|
|
|
+ if (arr.length <= 1) return arr.join(',')
|
|
|
|
|
+ var order = { breakfast: 0, lunch: 1, dinner: 2, snack: 3 }
|
|
|
|
|
+ return arr.slice().sort(function(a, b) {
|
|
|
|
|
+ var ia = order[a] === undefined ? 9 : order[a]
|
|
|
|
|
+ var ib = order[b] === undefined ? 9 : order[b]
|
|
|
|
|
+ return ia - ib
|
|
|
|
|
+ }).join(',')
|
|
|
|
|
+ },
|
|
|
recordDurationText: function() {
|
|
recordDurationText: function() {
|
|
|
if (!this.form.voicePath) return ''
|
|
if (!this.form.voicePath) return ''
|
|
|
var s = this.recordSeconds
|
|
var s = this.recordSeconds
|
|
@@ -280,9 +292,24 @@ export default {
|
|
|
return d.getFullYear() + '年' + (d.getMonth() + 1) + '月' + d.getDate() + '日 周' + weekdays[d.getDay()]
|
|
return d.getFullYear() + '年' + (d.getMonth() + 1) + '月' + d.getDate() + '日 周' + weekdays[d.getDay()]
|
|
|
},
|
|
},
|
|
|
goBack: function() { uni.navigateBack() },
|
|
goBack: function() { uni.navigateBack() },
|
|
|
|
|
+ // 餐次 toggle 多选:已选则移除,未选则追加
|
|
|
|
|
+ toggleMealType: function(value) {
|
|
|
|
|
+ var arr = this.form.mealTypes
|
|
|
|
|
+ var i = arr.indexOf(value)
|
|
|
|
|
+ if (i > -1) { arr.splice(i, 1) } else { arr.push(value) }
|
|
|
|
|
+ },
|
|
|
mealTypeLabel: function(type) {
|
|
mealTypeLabel: function(type) {
|
|
|
var m = { breakfast: '早餐', lunch: '午餐', dinner: '晚餐', snack: '加餐' }
|
|
var m = { breakfast: '早餐', lunch: '午餐', dinner: '晚餐', snack: '加餐' }
|
|
|
- return m[type] || type || '饮食'
|
|
|
|
|
|
|
+ if (!type) return '饮食'
|
|
|
|
|
+ // 兼容逗号拼接多餐次(breakfast,lunch → 早餐、午餐);未知值原样输出
|
|
|
|
|
+ var parts = String(type).split(',')
|
|
|
|
|
+ var labels = []
|
|
|
|
|
+ for (var i = 0; i < parts.length; i++) {
|
|
|
|
|
+ var v = parts[i] && parts[i].trim()
|
|
|
|
|
+ if (!v) continue
|
|
|
|
|
+ labels.push(m[v] || v)
|
|
|
|
|
+ }
|
|
|
|
|
+ return labels.length > 0 ? labels.join('、') : '饮食'
|
|
|
},
|
|
},
|
|
|
formatDate: function(dateStr) {
|
|
formatDate: function(dateStr) {
|
|
|
if (!dateStr) return ''
|
|
if (!dateStr) return ''
|
|
@@ -448,7 +475,7 @@ export default {
|
|
|
},
|
|
},
|
|
|
submitCheckin: async function() {
|
|
submitCheckin: async function() {
|
|
|
var self = this
|
|
var self = this
|
|
|
- if (!self.form.mealType) { uni.showToast({ title: '请选择餐次', icon: 'none' }); return }
|
|
|
|
|
|
|
+ if (!self.form.mealTypes || self.form.mealTypes.length === 0) { uni.showToast({ title: '请选择餐次', icon: 'none' }); return }
|
|
|
// 内容校验:文字(食物清单/备注)、图片、语音 至少有一项
|
|
// 内容校验:文字(食物清单/备注)、图片、语音 至少有一项
|
|
|
var hasText = (self.form.foodItems && self.form.foodItems.trim()) || (self.form.remark && self.form.remark.trim())
|
|
var hasText = (self.form.foodItems && self.form.foodItems.trim()) || (self.form.remark && self.form.remark.trim())
|
|
|
var hasPhoto = self.form.photos && self.form.photos.length > 0
|
|
var hasPhoto = self.form.photos && self.form.photos.length > 0
|
|
@@ -475,7 +502,7 @@ export default {
|
|
|
data: {
|
|
data: {
|
|
|
memberId: self.memberId,
|
|
memberId: self.memberId,
|
|
|
taskId: self.taskId || undefined,
|
|
taskId: self.taskId || undefined,
|
|
|
- mealType: self.form.mealType,
|
|
|
|
|
|
|
+ mealType: self.mealType,
|
|
|
foodItems: self.form.foodItems || '',
|
|
foodItems: self.form.foodItems || '',
|
|
|
remark: self.form.remark || '',
|
|
remark: self.form.remark || '',
|
|
|
photoUrls: photoUrls.join(','),
|
|
photoUrls: photoUrls.join(','),
|