Переглянути джерело

fix(miniapp): reminder-config :key 修复 v-for index 未定义

liaoxg 1 день тому
батько
коміт
53faeb7b1a
1 змінених файлів з 41 додано та 41 видалено
  1. 41 41
      cfc-frontend/pages/reminder-config/index.vue

+ 41 - 41
cfc-frontend/pages/reminder-config/index.vue

@@ -1,31 +1,31 @@
-<template>
+<template>
   <view class="reminder-config-page">
     <scroll-view class="content" scroll-y>
-      <!-- 启用开关 -->
+      <!-- 鍚敤寮€鍏?-->
       <view class="cfg-card">
         <view class="cfg-card-header">
-          <text class="cfg-card-title">提醒开关</text>
+          <text class="cfg-card-title">鎻愰啋寮€鍏?/text>
           <text class="cfg-switch" :class="{ 'cfg-switch-on': enabled === 1 }" @tap="toggleEnabled">
-            <text class="cfg-switch-text">{{ enabled === 1 ? '已开启' : '已关闭' }}</text>
+            <text class="cfg-switch-text">{{ enabled === 1 ? '宸插紑鍚? : '宸插叧闂? }}</text>
           </text>
         </view>
-        <text class="cfg-card-desc">开启后,任务打卡未完成时会按以下设置发送提醒</text>
+        <text class="cfg-card-desc">寮€鍚悗锛屼换鍔℃墦鍗℃湭瀹屾垚鏃朵細鎸変互涓嬭缃彂閫佹彁閱?/text>
       </view>
 
-      <!-- 提醒渠道 -->
+      <!-- 鎻愰啋娓犻亾 -->
       <view class="cfg-card">
-        <text class="cfg-card-title">提醒渠道</text>
+        <text class="cfg-card-title">鎻愰啋娓犻亾</text>
         <view class="channel-list">
-          <view class="channel-item" v-for="ch in channels" :key="ch.type + '_' + index"
+          <view class="channel-item" v-for="(ch, index) in channels" :key="ch.type + '_' + index"
             :class="{
               'channel-selected': isSelected(ch.type),
               'channel-disabled': !ch.available
             }"
             @tap="toggleChannel(ch)">
-            <view class="channel-check" v-if="isSelected(ch.type) && ch.available">✓</view>
+            <view class="channel-check" v-if="isSelected(ch.type) && ch.available">鉁?/view>
             <view class="channel-info">
               <text class="channel-name">{{ ch.label }}</text>
-              <text class="channel-reason" v-if="!ch.available">{{ ch.reason || '未开通' }}</text>
+              <text class="channel-reason" v-if="!ch.available">{{ ch.reason || '鏈紑閫? }}</text>
             </view>
           </view>
           <view class="channel-tip" v-if="channelTip">
@@ -34,38 +34,38 @@
         </view>
       </view>
 
-      <!-- 提醒时机 -->
+      <!-- 鎻愰啋鏃舵満 -->
       <view class="cfg-card">
-        <text class="cfg-card-title">提醒时机</text>
+        <text class="cfg-card-title">鎻愰啋鏃舵満</text>
         <view class="timing-list">
           <view class="timing-item" :class="{ 'timing-active': timingMode === 'before_deadline' }" @tap="switchTiming('before_deadline')">
-            <text class="timing-name">任务截止前</text>
-            <text class="timing-desc">截止时间之前提醒</text>
+            <text class="timing-name">浠诲姟鎴鍓?/text>
+            <text class="timing-desc">鎴鏃堕棿涔嬪墠鎻愰啋</text>
           </view>
           <view class="timing-item" :class="{ 'timing-active': timingMode === 'after_timeout' }" @tap="switchTiming('after_timeout')">
-            <text class="timing-name">任务超时后</text>
-            <text class="timing-desc">截止时间之后提醒</text>
+            <text class="timing-name">浠诲姟瓒呮椂鍚?/text>
+            <text class="timing-desc">鎴鏃堕棿涔嬪悗鎻愰啋</text>
           </view>
         </view>
 
-        <!-- 偏移分钟 -->
+        <!-- 鍋忕Щ鍒嗛挓 -->
         <view class="offset-row">
           <text class="offset-label">{{ offsetLabel }}</text>
-          <input class="offset-input" type="number" :value="String(offsetMinutes)" @input="onOffsetInput" placeholder="分钟数" />
-          <text class="offset-unit">分钟</text>
+          <input class="offset-input" type="number" :value="String(offsetMinutes)" @input="onOffsetInput" placeholder="鍒嗛挓鏁? />
+          <text class="offset-unit">鍒嗛挓</text>
         </view>
         <text class="offset-hint" v-if="offsetHint">{{ offsetHint }}</text>
       </view>
 
-      <!-- 完成表扬开关 -->
+      <!-- 瀹屾垚琛ㄦ壃寮€鍏?-->
       <view class="cfg-card">
         <view class="cfg-card-header">
-          <text class="cfg-card-title">任务完成鼓励</text>
+          <text class="cfg-card-title">浠诲姟瀹屾垚榧撳姳</text>
           <text class="cfg-switch" :class="{ 'cfg-switch-on': completionPraiseEnabled === 1 }" @tap="togglePraiseEnabled">
-            <text class="cfg-switch-text">{{ completionPraiseEnabled === 1 ? '已开启' : '已关闭' }}</text>
+            <text class="cfg-switch-text">{{ completionPraiseEnabled === 1 ? '宸插紑鍚? : '宸插叧闂? }}</text>
           </text>
         </view>
-        <text class="cfg-card-desc">任务正常完成时,发送表扬鼓励消息</text>
+        <text class="cfg-card-desc">浠诲姟姝e父瀹屾垚鏃讹紝鍙戦€佽〃鎵紦鍔辨秷鎭?/text>
         <view class="channel-list" v-if="completionPraiseEnabled === 1" style="margin-top:20rpx">
           <view class="channel-item" v-for="(ch, pIndex) in channels" :key="'p-' + pIndex"
             :class="{
@@ -73,24 +73,24 @@
               'channel-disabled': !ch.available
             }"
             @tap="togglePraiseChannel(ch)">
-            <view class="channel-check" v-if="isPraiseSelected(ch.type) && ch.available">✓</view>
+            <view class="channel-check" v-if="isPraiseSelected(ch.type) && ch.available">鉁?/view>
             <view class="channel-info">
               <text class="channel-name">{{ ch.label }}</text>
-              <text class="channel-reason" v-if="!ch.available">{{ ch.reason || '未开通' }}</text>
+              <text class="channel-reason" v-if="!ch.available">{{ ch.reason || '鏈紑閫? }}</text>
             </view>
           </view>
         </view>
       </view>
 
-      <!-- 站内消息兜底说明 -->
+      <!-- 绔欏唴娑堟伅鍏滃簳璇存槑 -->
       <view class="tip-card">
-        <text class="tip-text">💡 站内消息提醒始终开启,作为兜底通道不随以上设置关闭</text>
+        <text class="tip-text">馃挕 绔欏唴娑堟伅鎻愰啋濮嬬粓寮€鍚紝浣滀负鍏滃簳閫氶亾涓嶉殢浠ヤ笂璁剧疆鍏抽棴</text>
       </view>
 
-      <!-- 保存按钮 -->
+      <!-- 淇濆瓨鎸夐挳 -->
       <view class="save-area">
         <view class="save-btn" @tap="saveConfig">
-          <text>{{ saving ? '保存中...' : '保存配置' }}</text>
+          <text>{{ saving ? '淇濆瓨涓?..' : '淇濆瓨閰嶇疆' }}</text>
         </view>
       </view>
     </scroll-view>
@@ -117,23 +117,23 @@ export default {
   },
   computed: {
     offsetLabel: function() {
-      return this.timingMode === 'before_deadline' ? '提前' : '超时后'
+      return this.timingMode === 'before_deadline' ? '鎻愬墠' : '瓒呮椂鍚?
     },
     offsetHint: function() {
       if (!this.offsetMinutes || this.offsetMinutes < 1 || this.offsetMinutes > 1440) {
-        return '请输入 1-1440 之间的分钟数'
+        return '璇疯緭鍏?1-1440 涔嬮棿鐨勫垎閽熸暟'
       }
       if (this.timingMode === 'before_deadline') {
-        return '将在任务截止前 ' + this.offsetMinutes + ' 分钟提醒'
+        return '灏嗗湪浠诲姟鎴鍓?' + this.offsetMinutes + ' 鍒嗛挓鎻愰啋'
       }
-      return '将在任务超时后 ' + this.offsetMinutes + ' 分钟提醒'
+      return '灏嗗湪浠诲姟瓒呮椂鍚?' + this.offsetMinutes + ' 鍒嗛挓鎻愰啋'
     },
     channelTip: function() {
       var selected = this.selectedChannels || []
       if (selected.length === 0) {
-        return '请至少选择一个提醒渠道'
+        return '璇疯嚦灏戦€夋嫨涓€涓彁閱掓笭閬?
       }
-      return '已选择 ' + selected.length + ' 个提醒渠道'
+      return '宸查€夋嫨 ' + selected.length + ' 涓彁閱掓笭閬?
     }
   },
   onLoad: function() {
@@ -156,7 +156,7 @@ export default {
       }
     }).catch(function() {
       self.loading = false
-      uni.showToast({ title: '加载失败,请重试', icon: 'none' })
+      uni.showToast({ title: '鍔犺浇澶辫触锛岃閲嶈瘯', icon: 'none' })
     })
   },
   methods: {
@@ -201,12 +201,12 @@ export default {
     saveConfig: function() {
       var self = this
       if (!this.selectedChannels || this.selectedChannels.length === 0) {
-        uni.showToast({ title: '请至少选择一个提醒渠道', icon: 'none' })
+        uni.showToast({ title: '璇疯嚦灏戦€夋嫨涓€涓彁閱掓笭閬?, icon: 'none' })
         return
       }
       var offset = this.offsetMinutes || 0
       if (offset < 1 || offset > 1440) {
-        uni.showToast({ title: '偏移分钟需在 1-1440 之间', icon: 'none' })
+        uni.showToast({ title: '鍋忕Щ鍒嗛挓闇€鍦?1-1440 涔嬮棿', icon: 'none' })
         return
       }
       if (this.saving) return
@@ -221,16 +221,16 @@ export default {
       }).then(function(res) {
         self.saving = false
         if (res && res.code === 200) {
-          uni.showToast({ title: '保存成功', icon: 'success' })
+          uni.showToast({ title: '淇濆瓨鎴愬姛', icon: 'success' })
           setTimeout(function() {
             uni.navigateBack()
           }, 1000)
         } else {
-          uni.showToast({ title: (res && res.message) || '保存失败', icon: 'none' })
+          uni.showToast({ title: (res && res.message) || '淇濆瓨澶辫触', icon: 'none' })
         }
       }).catch(function(err) {
         self.saving = false
-        uni.showToast({ title: (err && err.message) || '保存失败', icon: 'none' })
+        uni.showToast({ title: (err && err.message) || '淇濆瓨澶辫触', icon: 'none' })
       })
     }
   }