Files
2026-06-25 18:24:29 +08:00

63 lines
2.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// components/manual-add-sheet — 手动补记弹层docs/05 R7
// 用法:父页放 <manual-add-sheet id="addSheet" dogs="{{dogs}}" bind:saved="onSaved"/>
// this.selectComponent('#addSheet').open()
const { call } = require('../../utils/cloud.js');
function pad(n) { return String(n).padStart(2, '0'); }
Component({
properties: {
dogs: { type: Array, value: [] },
},
data: {
show: false,
dogId: '',
date: '',
time: '18:00',
durationMin: '',
distance: '',
submitting: false,
},
methods: {
open() {
const dogs = this.data.dogs;
const t = new Date();
const date = `${t.getFullYear()}-${pad(t.getMonth() + 1)}-${pad(t.getDate())}`;
this.setData({
show: true,
dogId: dogs[0] ? dogs[0]._id : '',
date, time: '18:00', durationMin: '', distance: '',
});
},
close() { this.setData({ show: false }); },
noop() {},
pickDog(e) { this.setData({ dogId: e.currentTarget.dataset.id }); },
onDate(e) { this.setData({ date: e.detail.value }); },
onTime(e) { this.setData({ time: e.detail.value }); },
onDuration(e) { this.setData({ durationMin: e.detail.value }); },
onDistance(e) { this.setData({ distance: e.detail.value }); },
async save() {
const { dogId, date, time, durationMin, distance, submitting } = this.data;
if (submitting) return;
if (!dogId) return wx.showToast({ title: '选择狗狗', icon: 'none' });
if (!durationMin || Number(durationMin) <= 0) return wx.showToast({ title: '填写时长', icon: 'none' });
const startAt = new Date(`${date}T${time || '00:00'}:00`).getTime();
this.setData({ submitting: true });
const res = await call('walkManual', {
dogId,
startAt,
duration: Math.round(Number(durationMin) * 60),
distance: distance ? Number(distance) : null,
}, { loading: true, loadingText: '保存中' });
this.setData({ submitting: false });
if (!res.ok) return;
this.setData({ show: false });
wx.showToast({ title: '补记成功', icon: 'success' });
this.triggerEvent('saved');
},
},
});