Commit b44fadf1 by caoyanzhi

Merge branch 'feature/3月迭代' of http://git.gicdev.com/marketing-web/marketing into feature/3月迭代

parents 385f8504 0bf8994e
<template>
<div>
<div class="member-group-container">
<div class="echo-member-group" v-if="echoFlag">
<div class="subTitle">
<div class="line"></div>
<div class="text">
<div class="space-between">
已选分组
<span><el-button type="text" class="delBtn" @click="del">删除</el-button><el-button type="text" @click="edit">编辑</el-button></span>
<span v-if="!onlyRead"><el-button type="text" class="delBtn" @click="del">删除</el-button><el-button type="text" @click="edit">编辑</el-button></span>
</div>
</div>
</div>
<div class="echoLine" v-for="item in defaltSelected" :key="item.memberTagGroupId">
<div class="echoLine" v-for="item in defaultSelected" :key="item.memberTagGroupId">
<div class="dot"></div>
<el-tag size="mini" v-if="item.isRealTime">实时</el-tag>
<el-tag size="mini" type="warning" v-else>非实时</el-tag>
......@@ -64,8 +64,8 @@ import table from './table';
export default {
name: 'gic-new-member-group',
props: {
defaltSelected: {
type: Array,
selectedIds: {
type: String,
default() {
return [];
}
......@@ -110,8 +110,7 @@ export default {
type: Array,
default: () => [0, 1]
},
echo: {
// 使用回显样式
onlyRead: {
type: Boolean,
default: false
}
......@@ -147,14 +146,22 @@ export default {
}
},
watch: {
defaltSelected(val) {
selectedIds(val) {
if (val.length) {
this.echoFlag = true;
this.handleSelectionChange(this.defaltSelected);
this.getDefaultSelected(val);
}
}
},
methods: {
getDefaultSelected(val) {
this.axios.get(`${this.baseUrl}/gic-member-tag-web/member-tag-group/queryGroupByIds?requestProject=${this.projectName}&memberTagGroupIds=${val}`).then(res => {
if (res.data.errorCode == 1) {
this.defaultSelected = res.data.result;
this.handleSelectionChange(this.defaultSelected);
}
});
},
confirm() {
if (!Object.keys(this.selected).length) {
this.$message.warning('请选择分组');
......@@ -240,8 +247,11 @@ export default {
width: 100%;
}
}
.echo-member-group {
.member-group-container {
width: 400px;
}
.echo-member-group {
width: 100%;
background: #f7f8fa;
border-radius: 4px;
padding: 12px 15px;
......
<template>
<div>
<div class="ruleFilter">
<div class="echo-member-group" v-if="echoFlag">
<div class="subTitle">
<div class="line"></div>
<div class="text">
<div class="space-between">
已选分组
<span><el-button type="text" class="delBtn" @click="delAll">删除</el-button><el-button type="text" @click="edit">编辑</el-button></span>
<span v-if="!onlyRead"><el-button type="text" class="delBtn" @click="delAll">删除</el-button><el-button type="text" @click="edit">编辑</el-button></span>
</div>
</div>
</div>
......@@ -69,6 +69,7 @@ import qs from 'qs';
import transform from './createParams.js';
export default {
name: 'ruleFilter',
data() {
return {
activeName: '',
......@@ -101,7 +102,15 @@ export default {
hideId: {
type: Array,
default: () => []
},
onlyRead: {
type: Boolean,
default: false
}
// echoWidth: {
// type: String,
// default: '400px'
// }
},
mounted() {
this.getDataList();
......@@ -383,8 +392,11 @@ export default {
width: 100%;
}
}
.echo-member-group {
.ruleFilter {
width: 400px;
}
.echo-member-group {
width: 100%;
background: #f7f8fa;
border-radius: 4px;
padding: 0 15px 15px 15px;
......
......@@ -138,8 +138,7 @@ const requests = (url, data = {}, contentTypeIsJSON = false, isSilence = false,
.then(res => {
clearTimeout(_timer);
popRequest(_random);
resolve(res.data);
return;
if (res.data.errorCode !== 0 && res.data.code != 0) {
reject(res);
if (res.data.message.indexOf('抱歉') >= 0) {
......
......@@ -166,14 +166,23 @@ export default {
console.log(val);
if (val) {
const { birth_type, callFlag, birthDate1, birthDate2, callTime, birth_days } = this.form;
const obj = {
startDate: birth_type == 2 ? birthDate2[0] : birthDate1[0],
endDate: birth_type == 2 ? birthDate2[1] : birthDate1[1],
callFlag,
birth_type,
callTime,
birth_days
};
if (birth_type == 3) {
obj.startDate = birthDate1[0] - birth_days * 24 * 60 * 60 * 1000;
obj.endDate = birthDate1[1] - birth_days * 24 * 60 * 60 * 1000;
} else if (birth_type == 2) {
obj.startDate = birthDate2[0];
obj.endDate = birthDate2[1];
} else {
obj.startDate = birthDate1[0];
obj.endDate = birthDate1[1];
}
if (arr.length) {
obj.callTime = arr;
}
......@@ -192,9 +201,10 @@ export default {
if (this.form.birthDate1) {
if (this.currentTime + val * 24 * 60 * 60 * 1000 > this.form.birthDate1[0]) {
this.$message.warning('生日范围开始日期 - 生日前X天不能早于当前日期');
this.form.birth_days = 1;
this.form.birth_days = ' ';
}
}
console.log(this.form.birth_days);
},
handleDateChange(val) {
console.log(val);
......
......@@ -4,18 +4,26 @@
<el-radio v-model="form.holiday_type" :label="1">推荐节日</el-radio>
<el-radio v-model="form.holiday_type" :label="2">自定义节日</el-radio>
<span class="tips">为保证触达率,节日活动需要提前创建,不支持创建节日日期为活动创建日的活动</span>
<div>
<el-tag type="mini">{{ form.holiday_name }}</el-tag>
<el-button type="text" v-show="form.holiday_type == 1" @click="visible = true">选择节日</el-button>
<div v-if="form.holiday_type == 1">
<el-tag type="mini" v-if="form.holiday_name1">{{ form.holiday_name1 }}</el-tag>
<el-button type="text" @click="visible = true">{{ !form.holiday_name1 ? '选择节日' : '重新选择' }}</el-button>
</div>
<div v-if="form.holiday_type == 2">
<el-form-item prop="holiday_name2" :rules="[{ required: true, message: '请输入节日名称' }]">
<el-input class="w340" :maxlength="10" placeholder="请输入节日名称" show-word-limit v-model="form.holiday_name2"></el-input>
</el-form-item>
</div>
</el-form-item>
<el-form-item label="节日日期" prop="holiday_date1" v-show="form.holiday_type == 1">
<span class="tips" v-if="!form.holiday_date1">未选择节日</span>
<span v-else>{{ form.holiday_date1 }}</span>
</el-form-item>
<el-form-item label="节日日期" prop="holiday_date" required>
<span class="tips" v-if="!form.holiday_date">未选择节日</span>
<span v-else>{{ form.holiday_date }}</span>
<el-form-item label="节日日期" prop="holiday_date2" v-show="form.holiday_type == 2">
<el-date-picker v-model="form.holiday_date2" value-format="yyyy-MM-dd" :picker-options="pickerOptions" type="date" placeholder="选择日期"> </el-date-picker>
</el-form-item>
<el-form-item label="外呼时间" prop="holiday_day" required>
节日前
<el-input-number class="w100" style="margin:0 5px;" v-model="form.holiday_day" controls-position="right" :max="30" :min="1" size="small" />
<el-input-number class="w100" style="margin:0 5px;" v-model="form.holiday_day" @change="hanldeHolidayDay" controls-position="right" :max="30" :min="1" size="small" />
天内外呼完成
<span class="tips">由于外呼线路有限,为保证外呼触达率,建议外呼时间周期不小于5</span>
</el-form-item>
......@@ -53,21 +61,45 @@
import defineTime from './defineTime.vue';
import { formatDateTimeByType, getTimesByReq } from '@/utils/index';
import { listAllHolidays } from '@/service/api/aiApi.js';
let minTime = null;
let maxTime = null;
export default {
data() {
const holiday_date2 = (rule, value, callback) => {
if (this.form.holiday_type == 2 && !value) {
return callback(new Error('请选择节日日期'));
}
if (this.form.holiday_type == 2 && value) {
if (this.currentTime + this.form.holiday_day * 24 * 60 * 60 * 1000 > value) {
return callback(new Error('节日日期 - 节日前X天不能早于当前日期'));
}
}
callback();
};
const holiday_date1 = (rule, value, callback) => {
if (this.form.holiday_type == 1 && !value) {
return callback(new Error('请选择节日日期'));
}
callback();
};
return {
formatDateTimeByType,
getTimesByReq,
form: {
holiday_type: 1, // 节日活动场景特有值 节日类型 1推荐 2自定义
holiday_name: '国庆节', // 节日活动场景特有值 节日名称
holiday_date: '2022-10-01', //节日活动场景特有值 节日日期
holiday_day: '', // 外呼时间
holiday_name1: '', // 节日活动场景特有值 节日名称
holiday_date1: '', //节日活动场景特有值 节日日期
holiday_name2: '', // 节日活动场景特有值 节日名称
holiday_date2: '', //节日活动场景特有值 节日日期
holiday_day: ' ', // 外呼时间
callFlag: 0, //外呼时段 0 默认 1 自定义
callTime: [{}] // 自定义时段
},
rules: {},
rules: {
holiday_date1: { validator: holiday_date1 },
holiday_date2: { validator: holiday_date2 }
},
holidayData: [
{
id: 'S', //节日分类ID
......@@ -124,7 +156,26 @@ export default {
}
],
selectedData: '',
visible: false
visible: false,
pickerOptions: {
onPick(time) {
// 起始时间:仅半年范围内 && 结束时间:跨度最多3个月,即所选起始时间往后+90天为上限;
if (!time.maxDate) {
const timeRange = 60 * 24 * 60 * 60 * 1000; // 3个月
minTime = time.minDate.getTime(); // 最小时间
maxTime = time.minDate.getTime() + timeRange; // 最大时间
}
},
disabledDate: time => {
const timeRange = 60 * 24 * 60 * 60 * 1000; // 3个月
if (minTime && maxTime) {
return time.getTime() < minTime || time.getTime() > maxTime;
} else {
return time.getTime() < new Date().getTime() || time.getTime() > new Date().getTime() + timeRange;
}
}
},
currentTime: new Date(new Date().toLocaleDateString()).getTime()
};
},
props: {
......@@ -147,9 +198,14 @@ export default {
computed: {
activeTime() {
let str = '';
if (this.form.holiday_date && this.form.holiday_day) {
let startTimestamp = getTimesByReq(this.form.holiday_date) - this.form.holiday_day * 24 * 60 * 60 * 1000;
let endTimestamp = getTimesByReq(this.form.holiday_date) - 24 * 60 * 60 * 1000;
if (this.form.holiday_type == 1 && this.form.holiday_date1 && this.form.holiday_day) {
let startTimestamp = getTimesByReq(this.form.holiday_date1) - this.form.holiday_day * 24 * 60 * 60 * 1000;
let endTimestamp = getTimesByReq(this.form.holiday_date1) - 24 * 60 * 60 * 1000;
str = formatDateTimeByType(startTimestamp, 'yyyy-MM-dd') + ' 至 ' + formatDateTimeByType(endTimestamp, 'yyyy-MM-dd');
} else if (this.form.holiday_type == 2 && this.form.holiday_date2 && this.form.holiday_day) {
let startTimestamp = getTimesByReq(this.form.holiday_date2) - this.form.holiday_day * 24 * 60 * 60 * 1000;
let endTimestamp = getTimesByReq(this.form.holiday_date2) - 24 * 60 * 60 * 1000;
str = formatDateTimeByType(startTimestamp, 'yyyy-MM-dd') + ' 至 ' + formatDateTimeByType(endTimestamp, 'yyyy-MM-dd');
}
return str;
......@@ -163,12 +219,20 @@ export default {
// 回显时 根据活动有效期和节日日期 算出外呼时间
this.form.holiday_day = ((getTimesByReq(this.form.holiday_date) - this.form.startDate) / 24) * 60 * 60 * 1000;
},
hanldeHolidayDay(val) {
const { holiday_type, holiday_date1, holiday_date2 } = this.form;
if ((holiday_type == 1 && holiday_date1) || (holiday_type == 2 && holiday_date2)) {
if (this.currentTime + val * 24 * 60 * 60 * 1000 > getTimesByReq(this.form[`holiday_date${holiday_type}`])) {
this.form.holiday_day = ' ';
this.$message.warning('节日日期 - 节日前X天不能早于当前日期');
}
}
},
async getListAllHolidays() {
const { result } = await listAllHolidays();
console.log(result);
if (result) {
// this.holidayData = result;
this.holidayData = result;
}
},
addItem() {
......@@ -177,8 +241,9 @@ export default {
return;
}
const { date, name } = this.selectedData;
this.form.holiday_name = name;
this.form.holiday_date = date;
this.form.holiday_name1 = name;
this.form.holiday_date1 = date;
this.$refs.form.clearValidate('holiday_date1');
this.close();
},
close() {
......@@ -197,16 +262,23 @@ export default {
});
this.$refs.form.validate(val => {
if (val) {
const { callFlag, callTime, holiday_date, holiday_type, holiday_name, holiday_day } = this.form;
const { callFlag, callTime, holiday_date1, holiday_type, holiday_name1, holiday_day, holiday_name2, holiday_date2 } = this.form;
const obj = {
startDate: getTimesByReq(holiday_date) - holiday_day * 24 * 60 * 60 * 1000,
endDate: getTimesByReq(holiday_date) - 24 * 60 * 60 * 1000,
callFlag,
callTime,
holiday_date,
holiday_type,
holiday_name
holiday_type
};
if (holiday_type == 1) {
obj.startDate = getTimesByReq(holiday_date1) - holiday_day * 24 * 60 * 60 * 1000;
obj.endDate = getTimesByReq(holiday_date1) - 24 * 60 * 60 * 1000;
obj.holiday_name = holiday_name1;
obj.holiday_date = holiday_date1;
} else if (holiday_type == 2) {
obj.startDate = getTimesByReq(holiday_date2) - holiday_day * 24 * 60 * 60 * 1000;
obj.endDate = getTimesByReq(holiday_date2) - 24 * 60 * 60 * 1000;
obj.holiday_name = holiday_name2;
obj.holiday_date = holiday_date2;
}
console.log(obj);
if (arr.length) {
obj.callTime = arr;
......
......@@ -31,8 +31,8 @@
<div class="tips" style="margin:0 0 12px 0;">默认为权限范围内的全部客户</div>
<el-button v-if="form.memberType == 0 && !memberCrowdWidgetId && form.scene != 4" size="small" @click="ruleVisible = true">添加其他条件</el-button>
<ruleFilter v-show="form.memberType == 0 && form.scene != 4" :visiable.sync="ruleVisible" @save="handleRuleFilterSave" :memberCrowdWidgetId="memberCrowdWidgetId" />
<el-button v-if="form.memberType == 1 && !selectedGroup.length" size="small" @click="groupVisible = true">添加分组</el-button>
<gic-new-member-group v-show="form.memberType == 1" :visiable.sync="groupVisible" :defaltSelected="selectedGroup" @change="confirmGroupDialog" />
<el-button v-if="form.memberType == 1 && !selectedGroupIds" size="small" @click="groupVisible = true">添加分组</el-button>
<gic-new-member-group v-show="form.memberType == 1" :visiable.sync="groupVisible" :selectedIds="selectedGroupIds" @change="confirmGroupDialog" />
</div>
</el-form-item>
<el-form-item label="消费条件" v-if="form.scene == 4 && form.memberType == 0">
......@@ -366,7 +366,6 @@ export default {
timesOptions: [1, 2, 3, 4, 5], //重播次数下拉
loading: false,
currentIndex: 0,
selectedGroup: [], // 被选中的客户分组
selectedGroupIds: '', // 被选中的客户分组id
memberCrowdWidgetId: '', // 被选的规则id
filterFrontShow: [], // 筛选器回显数据
......@@ -415,7 +414,7 @@ export default {
console.log(result);
if (result) {
const { activityId, activityName, activityPlanList, analyseAmount, analyseDays, analyseFlag, startDate, endDate, scene } = result;
const { activityEventList, filterJson, memberTagGroupList, memberType, planId, planMemberCount, planName, sceneJson } = activityPlanList[0];
const { activityEventList, filterJson, memberType, planId, planMemberCount, planName, sceneJson } = activityPlanList[0];
const { aiEventId, aiTemplateId, callFlag, callTime, eventId, labelFlag, recallFlag, smsFlag, labelJson, recallJson, smsJson } = activityEventList[0];
const { birth_type, birth_days, holiday_type, holiday_name, holiday_date, consume_days_flag, consume_days, consume_times_flag, consume_times, consume_amount_flag, consume_amount } = JSON.parse(sceneJson);
this.form = {
......@@ -442,7 +441,6 @@ export default {
this.memberCrowdWidgetId = filterJson;
} else if (memberType == 1) {
this.selectedGroupIds = filterJson;
this.selectedGroup = memberTagGroupList;
}
if (scene == 4) {
const obj = {
......@@ -590,11 +588,14 @@ export default {
if (recallFlag) {
data.activityPlanList[0].activityEventList[0].recallJson = JSON.stringify(this.recallList);
}
const { result } = await initActivity(data);
if (result) {
this.$router.go(-1);
try {
const { result } = await initActivity(data);
if (result) {
this.$router.go(-1);
}
} finally {
this.btnLoading = false;
}
this.btnLoading = false;
} else {
this.scrollToError(this);
}
......@@ -659,11 +660,8 @@ export default {
},
/**客户分组 */
confirmGroupDialog(arr, idStr) {
this.selectedGroup = arr;
this.selectedGroupIds = idStr;
this.getMemberCount();
console.log(arr);
console.log(idStr);
},
/** 根据客户意向发送挂机短信 */
delSmslist(index) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment