Răsfoiți Sursa

feat: 提交积分规则 调整任务列表的业务逻辑

xyh 5 luni în urmă
părinte
comite
3904885de2

+ 98 - 79
src/views/pointsManagement/pointsRules/compontents/Activity_editBox.vue

@@ -5,7 +5,6 @@
     width="900px"
     :before-close="handleClose"
     custom-class="activity-edit-dialog">
-{{form}}
     <el-form :model="form" :rules="rules" ref="formRef" label-width="140px" class="activity-form">
       <el-row :gutter="20">
         <el-col :span="12">
@@ -71,14 +70,29 @@
 
         <el-row :gutter="20">
           <el-col :span="24">
-            <el-form-item label="连续签到加成" prop="signRewardList">
+            <el-form-item label="连续签到加成">
               <el-table :data="form.signRewardList" style="width: 100%" :disabled="type === 'view'" size="mini">
                 <el-table-column prop="continueDays" label="连续签到周期(天)">
                   <template slot-scope="scope">
                     <span v-if="type === 'view'">
                       {{ scope.row.continueDays }}天
                     </span>
-                    <el-input v-else v-model="scope.row.continueDays" type="number" placeholder="天数" @blur="updatePeriod(scope.$index, scope.row.continueDays)"></el-input>
+                    <el-form-item v-else :prop="'signRewardList.' + scope.$index + '.continueDays'" :rules="[
+                      { required: true, message: '请输入连续签到周期', trigger: ['blur','change'] },
+                      { validator: (rule, value, callback) => {
+                          if (value === '' || value === null || value === undefined) {
+                            callback();
+                          } else if (Number(value) <= 0) {
+                            callback('连续签到周期必须大于0');
+                          } else {
+                            callback();
+                          }
+                        },
+                        trigger: ['blur','change']
+                      }
+                    ]">
+                      <el-input v-model="scope.row.continueDays" type="number" placeholder="天数" @blur="updatePeriod(scope.$index, scope.row.continueDays)"></el-input>
+                    </el-form-item>
                   </template>
                 </el-table-column>
                 <el-table-column prop="rewardPoints" label="连续签到积分">
@@ -86,12 +100,29 @@
                     <span v-if="type === 'view'">
                       {{ scope.row.rewardPoints }}
                     </span>
-                    <el-input v-else v-model="scope.row.rewardPoints" type="number" placeholder="积分"></el-input>
+                    <el-form-item v-else :prop="'signRewardList.' + scope.$index + '.rewardPoints'" :rules="[
+                      { required: true, message: '请输入连续签到积分', trigger: ['blur', 'change'] },
+                      { validator: (rule, value, callback) => {
+                          if (value === '' || value === null || value === undefined) {
+                            callback();
+                          } else if (Number(value) <= 0) {
+                            callback('连续签到积分必须大于0');
+                          } else {
+                            callback();
+                          }
+                        },
+                        trigger: ['blur', 'change']
+                      }
+                    ]">
+                      <el-input v-model="scope.row.rewardPoints" type="number" placeholder="积分"></el-input>
+                    </el-form-item>
                   </template>
                 </el-table-column>
                 <el-table-column label="说明" width="280">
                   <template slot-scope="scope">
-                    {{ getDescription(scope.$index) }}
+                    <div style="margin-bottom: 16px">
+                      {{ getDescription(scope.$index) }}
+                    </div>
                   </template>
                 </el-table-column>
                 <el-table-column width="50">
@@ -103,9 +134,11 @@
                     </span>
                   </template>
                   <template slot-scope="scope">
-                    <el-button v-if="type !== 'view'" type="text" @click="deletePeriod(scope.$index)" title="删除周期">
-                        <i class="el-icon-remove-outline"></i>
-                      </el-button>
+                    <div style="margin-bottom: 16px">
+                      <el-button v-if="type !== 'view'" type="text" @click="deletePeriod(scope.$index)" title="删除周期">
+                          <i class="el-icon-remove-outline"></i>
+                        </el-button>
+                    </div>
                   </template>
                 </el-table-column>
               </el-table>
@@ -128,11 +161,13 @@
       <template v-else>
         <el-row :gutter="20">
           <el-col :span="24">
-            <el-form-item label="任务列表" prop="activityTaskList">
+            <el-form-item label="任务列表">
               <el-table :data="form.activityTaskList" style="width: 100%" :disabled="type === 'view'" size="medium">
                 <el-table-column prop="taskName" label="任务名称" width="150">
                   <template slot-scope="scope">
+                    <div style="margin-bottom: 20px">
                     <span>{{ scope.row.taskName }}</span>
+                    </div>
                   </template>
                 </el-table-column>
                 <el-table-column prop="triggerValue" label="触发条件" width="200">
@@ -146,41 +181,80 @@
                        </template>
                     </span>
                     <template v-else>
-                      <span v-if="scope.row.taskName === '分享服务号' || scope.row.taskName === '浏览动态' || scope.row.taskName === '浏览商户'">
+                      <span style="display:block;margin-bottom: 20px" v-if="scope.row.taskName === '分享服务号' || scope.row.taskName === '浏览动态' || scope.row.taskName === '浏览商户'">
                         点击
                       </span>
                       <span v-else style="display: flex; align-items: center;">
-                        <template v-if="scope.row.status == 0">
-                           <span style="margin-right: 5px;">&gt;=</span>
-                          <el-input v-model="scope.row.triggerValue" type="number" placeholder="请输入" style="width: 80px"></el-input>
+                        <template>
+                           <span style="margin-right: 5px;margin-bottom: 20px">&gt;=</span>
+                           <el-form-item :prop="'activityTaskList.' + scope.$index + '.triggerValue'" :rules="[
+                             {
+                               required: true,
+                               message: '请输入触发条件',
+                               trigger: ['blur', 'change']
+                             },
+                             { validator: (rule, value, callback) => {
+                                 if (value === '' || value === null || value === undefined) {
+                                   callback();
+                                 } else if (Number(value) <= 0) {
+                                   callback('触发条件必须大于0');
+                                 } else {
+                                   callback();
+                                 }
+                               },
+                               trigger: ['blur', 'change']
+                             }
+                           ]">
+                            <el-input v-model="scope.row.triggerValue" type="number" placeholder="请输入" style="width: 120px"></el-input>
+                          </el-form-item>
                         </template>
-                        <span v-else>--</span>
                       </span>
                     </template>
                   </template>
                 </el-table-column>
                 <el-table-column prop="rewardPoints" label="积分">
                   <template slot-scope="scope">
-                    <span v-if="type === 'view'">{{ scope.row.rewardPoints }}</span>
+                    <span v-if="type === 'view'"> {{ scope.row.rewardPoints }}</span>
                     <template v-else>
-                      <el-input v-if="scope.row.status == 0" v-model="scope.row.rewardPoints" type="number" placeholder="请输入"></el-input>
-                      <span v-else>--</span>
+                      <el-form-item :prop="'activityTaskList.' + scope.$index + '.rewardPoints'" :rules="[
+                        {
+                          required: true,
+                          message: '请输入积分',
+                          trigger: ['blur', 'change']
+                        },
+                        {
+                          validator: (rule, value, callback) => {
+                            if (value === '' || value === null || value === undefined) {
+                              callback();
+                            } else if (Number(value) <= 0) {
+                              callback('积分必须大于0');
+                            } else {
+                              callback();
+                            }
+                          },
+                          trigger: ['blur', 'change']
+                        }
+                      ]">
+                        <el-input v-model="scope.row.rewardPoints" type="number" placeholder="请输入"></el-input>
+                      </el-form-item>
                     </template>
                   </template>
                 </el-table-column>
-                <el-table-column prop="frequencyLimitValue" label="次数限制" width="120">
+                <el-table-column label="次数限制" width="120">
                   <template slot-scope="scope">
                     <span v-if="type === 'view'">{{ scope.row.frequencyLimitValue }}</span>
                     <template v-else>
-                      <DictSelect v-if="scope.row.status == 0" v-model="scope.row.frequencyLimitValue" :dictOptions="taskLimitTimes" placeholder="请选择"/>
-                      <span v-else>--</span>
+                      <div style="margin-bottom: 20px">
+                      <DictSelect v-model="scope.row.frequencyLimitValue" :dictOptions="taskLimitTimes" placeholder="请选择"/>
+                      </div>
                     </template>
                   </template>
                 </el-table-column>
                 <el-table-column label="是否开启" width="120">
                   <template slot-scope="scope">
-                    <el-switch v-model="scope.row.status" active-value="0"
-                               inactive-value="1" :disabled="type === 'view'"></el-switch>
+                    <div style="margin-bottom: 20px">
+                    <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" :disabled="type === 'view'"></el-switch>
+                    </div>
                   </template>
                 </el-table-column>
               </el-table>
@@ -264,7 +338,7 @@ export default {
           { required: true, message: '请输入基础积分', trigger: 'blur' },
           { validator: (rule, value, callback) => {
               if (Number(value) < 0) {
-                callback(new Error('基础积分不能小于0'));
+                callback('基础积分不能小于0');
               } else {
                 callback();
               }
@@ -272,66 +346,11 @@ export default {
             trigger: 'blur'
           }
         ],
-        signRewardList: [
-          { validator: (rule, value, callback) => {
-              if (!value || value.length === 0) {
-                callback(new Error('请添加连续签到加成'));
-                return;
-              }
-
-              for (let i = 0; i < value.length; i++) {
-                const bonus = value[i];
-                if (!bonus.continueDays || Number(bonus.continueDays) <= 0) {
-                  callback(new Error('连续签到周期必须大于0'));
-                  return;
-                }
-                if (!bonus.rewardPoints || Number(bonus.rewardPoints) <= 0) {
-                  callback(new Error('连续签到积分必须大于0'));
-                  return;
-                }
-              }
-
-              // 检查连续签到周期总和是否超过活动总天数
-              const totalDays = this.getTotalDays();
-              if (this.form.isPermanent == '0' && totalDays > 0) {
-                const totalPeriod = value.reduce((sum, item) => sum + Number(item.continueDays), 0);
-                if (totalPeriod > totalDays) {
-                  callback(new Error('连续签到周期总和不能超过活动总天数'));
-                  return;
-                }
-              }
 
-              callback();
-            },
-            trigger: 'change'
-          }
-        ],
         dateRange: [
           { required: true, message: '请选择活动时间', trigger: 'change' }
         ],
-        activityTaskList: [
-          { validator: (rule, value, callback) => {
-              for (let i = 0; i < value.length; i++) {
-                const task = value[i];
-                // 只在任务开启的情况下才校验
-                if (task.status == '0') {
-                  // 验证完成订单和充值任务的触发条件
-                  if ((task.taskName === '完成订单' || task.taskName === '充值任务') && (!task.triggerValue || Number(task.triggerValue) <= 0)) {
-                    callback(new Error('触发条件必须大于0'));
-                    return;
-                  }
-                  // 验证所有任务的积分
-                  if (!task.rewardPoints || Number(task.rewardPoints) <= 0) {
-                    callback(new Error('积分必须大于0'));
-                    return;
-                  }
-                }
-              }
-              callback();
-            },
-            trigger: 'change'
-          }
-        ]
+
       },
     }
   },