|
|
@@ -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;">>=</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">>=</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'
|
|
|
- }
|
|
|
- ]
|
|
|
+
|
|
|
},
|
|
|
}
|
|
|
},
|