| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- <template>
- <view class="page">
- <view v-if="!week" class="loading-box">加载中...</view>
- <view v-else class="content">
- <text class="page-hint">第 {{ week.weekNo }} 周 · {{ formatDate(week.weekStart) }} ~ {{ formatDate(week.weekEnd) }}</text>
- <!-- A表:周行动宣告计划 -->
- <view class="section">
- <text class="section-title">📋 本周行动计划(A表)</text>
- <text class="section-desc">写下本周要做的具体行动,每行一个(参考:明确人事时地)</text>
- <textarea class="field-textarea" v-model="form.plan" placeholder="1、完成站桩15分钟 2、准备早餐、拍照记录 3、..."></textarea>
- <button class="btn-save" @click="savePlan">保存计划</button>
- </view>
- <!-- B表:周复盘五问 -->
- <view class="section" v-if="week.status === 'reviewed' || week.status === 'planned' || week.status === 'pending'">
- <text class="section-title">✅ 本周复盘(B表)</text>
- <view class="review-field">
- <text class="review-label">本周达成了什么?</text>
- <textarea class="field-textarea" v-model="form.achieved" placeholder="如:体重降到 171.5"></textarea>
- </view>
- <view class="review-field">
- <text class="review-label">有什么体验?</text>
- <textarea class="field-textarea" v-model="form.experience" placeholder="如:愉悦、疲惫"></textarea>
- </view>
- <view class="review-field">
- <text class="review-label">行得通的是什么?</text>
- <textarea class="field-textarea" v-model="form.worked" placeholder="总结有效的方法"></textarea>
- </view>
- <view class="review-field">
- <text class="review-label">要提升 / 行不通的是什么?</text>
- <textarea class="field-textarea" v-model="form.improve" placeholder="总结待改进之处"></textarea>
- </view>
- <view class="review-field">
- <text class="review-label">下一周要挑战自己什么?</text>
- <textarea class="field-textarea" v-model="form.nextChallenge" placeholder="写下下周的新挑战"></textarea>
- </view>
- <button class="btn-save review-btn" @click="saveReview">提交复盘</button>
- </view>
- </view>
- </view>
- </template>
- <script>
- import { getDoaStageDetail, submitDoaWeekPlan, submitDoaWeekReview } from '../../utils/api.js'
- export default {
- data() {
- return {
- weekId: 0,
- stageId: 0,
- week: null,
- form: {
- plan: '',
- achieved: '',
- experience: '',
- worked: '',
- improve: '',
- nextChallenge: ''
- }
- }
- },
- onLoad(options) {
- this.weekId = parseInt(options.weekId || '0', 10)
- this.stageId = parseInt(options.stageId || '0', 10)
- this.loadWeek()
- },
- methods: {
- formatDate(dateStr) {
- if (!dateStr) return ''
- return String(dateStr).slice(0, 10)
- },
- async loadWeek() {
- try {
- var res = await getDoaStageDetail(this.stageId)
- if (res.code === 200 && res.data && res.data.weeks) {
- for (var i = 0; i < res.data.weeks.length; i++) {
- if (res.data.weeks[i].id === this.weekId) {
- this.week = res.data.weeks[i]
- this.form.plan = this.week.plan || ''
- this.form.achieved = this.week.achieved || ''
- this.form.experience = this.week.experience || ''
- this.form.worked = this.week.worked || ''
- this.form.improve = this.week.improve || ''
- this.form.nextChallenge = this.week.nextChallenge || ''
- break
- }
- }
- }
- if (!this.week) {
- uni.showToast({ title: '周记录不存在', icon: 'none' })
- setTimeout(function() { uni.navigateBack() }, 1000)
- }
- } catch (e) {
- uni.showToast({ title: '加载失败', icon: 'none' })
- }
- },
- savePlan() {
- var self = this
- submitDoaWeekPlan(this.weekId, this.form.plan).then(function(res) {
- if (res.code === 200) {
- uni.showToast({ title: '计划已保存', icon: 'success' })
- self.week.status = 'planned'
- } else {
- uni.showToast({ title: res.message || '保存失败', icon: 'none' })
- }
- })
- },
- saveReview() {
- var self = this
- var data = {
- weekId: this.weekId,
- achieved: this.form.achieved,
- experience: this.form.experience,
- worked: this.form.worked,
- improve: this.form.improve,
- nextChallenge: this.form.nextChallenge
- }
- submitDoaWeekReview(data).then(function(res) {
- if (res.code === 200) {
- uni.showToast({ title: '复盘已提交', icon: 'success' })
- self.week.status = 'reviewed'
- setTimeout(function() { uni.navigateBack() }, 600)
- } else {
- uni.showToast({ title: res.message || '提交失败', icon: 'none' })
- }
- })
- }
- }
- }
- </script>
- <style scoped>
- .page { min-height: 100vh; background: #F5F7FA; padding: 24rpx; }
- .loading-box { text-align: center; padding: 100rpx 0; color: #94A3B8; font-size: 28rpx; }
- .page-hint { font-size: 26rpx; color: #475569; display: block; margin-bottom: 16rpx; font-weight: 600; }
- .section { background: #fff; border-radius: 16rpx; padding: 24rpx; margin-bottom: 20rpx; }
- .section-title { font-size: 28rpx; font-weight: 700; color: #1E293B; display: block; }
- .section-desc { font-size: 22rpx; color: #94A3B8; margin-top: 4rpx; display: block; }
- .field-textarea {
- background: #F8FAFC; border: 1rpx solid #E2E8F0; border-radius: 12rpx;
- padding: 16rpx 18rpx; font-size: 26rpx; color: #1E293B;
- height: 160rpx; width: 100%; box-sizing: border-box; margin-top: 12rpx;
- }
- .review-field { margin-top: 16rpx; }
- .review-label { font-size: 24rpx; color: #475569; font-weight: 600; display: block; }
- .btn-save {
- background: #10B981; color: #fff; font-size: 28rpx; font-weight: 600;
- border-radius: 40rpx; border: none; height: 76rpx; line-height: 76rpx;
- margin-top: 20rpx;
- }
- .review-btn { background: #6366F1; }
- </style>
|