Commit fe4c068e by chenxin

fix: 扫码营销 page

parent 55606532
......@@ -68,3 +68,57 @@ export default {
}
]
};
//扫码营销
export const scan = {
path: 'scan',
name: '扫码营销管理',
component: () => import(/* webpackChunkName: "scan" */ '../../views/ecm/index.vue'),
redirect: '/scan/list',
children: [
{
path: 'list',
name: '扫码营销',
component: () => import(/* webpackChunkName: "scan" */ '../../views/ecm/scan-list.vue'),
meta: {
path: '/scan/list'
}
},
{
path: 'edit/:id',
name: '智能营销编辑',
component: () => import(/* webpackChunkName: "scan" */ '../../views/ecm/scan-form.vue'),
meta: {
type: 'edit',
path: '/scan/list'
}
},
{
path: 'info/:id',
name: '智能营销详情',
component: () => import(/* webpackChunkName: "scan" */ '../../views/ecm/scan-form.vue'),
meta: {
type: 'info',
path: '/scan/list'
}
},
{
path: 'add',
name: '智能营销新增',
component: () => import(/* webpackChunkName: "scan" */ '../../views/ecm/scan-form.vue'),
meta: {
type: 'add',
path: '/scan/list'
}
},
{
path: 'log',
name: '扫码营销日志',
component: () => import(/* webpackChunkName: "scan" */ '../../views/ecm/scan-log-list.vue'),
meta: {
type: 'add',
path: '/scan/log'
}
}
]
};
......@@ -68,7 +68,7 @@ export default {
name: '导入发送列表',
component: () => import(/* webpackChunkName: "message" */ '../../views/message/importSendList.vue'),
meta: {
path: '/message/importSend'
path: '/message/import-send'
}
},
{
......@@ -77,7 +77,7 @@ export default {
component: () => import(/* webpackChunkName: "message" */ '../../views/message/importSendForm.vue'),
meta: {
type: 'add',
path: '/message/importSend'
path: '/message/import-send'
}
},
{
......@@ -86,7 +86,7 @@ export default {
component: () => import(/* webpackChunkName: "message" */ '../../views/message/importSendDetail.vue'),
meta: {
type: 'info',
path: '/message/importSend'
path: '/message/import-send'
}
}
]
......
......@@ -14,7 +14,7 @@ import message from './modules/message';
//卡券营销
import card from './modules/card';
//智能营销
import ecm from './modules/ecm';
import ecm, { scan } from './modules/ecm';
//模板消息
import msg from './modules/msg';
//通话中心
......@@ -36,7 +36,7 @@ export default [
name: 'layout',
component: Layout,
redirect: '/wechat/record',
children: [card, ecm, game, message, wechat, msg, calllog, recharge, evaluation, ewash, activity, cdKey]
children: [card, ecm, scan, game, message, wechat, msg, calllog, recharge, evaluation, ewash, activity, cdKey]
},
{
path: '/401',
......
......@@ -34,6 +34,9 @@ export const exportSmsExcel = config.api + PREFIX + 'export-sms-sendlog-excel';
//短信群发--保存群发
export const saveSendSmsService = params => requests(PREFIX + 'save-marketing-message', params);
//短信群发--禁用导入群发
export const stopSmsImportPlanTimer = params => requests(PREFIX + 'stop-sms-import-plan-timer', params);
//短信群发, 微信群发前查看筛选人数
export const checkMessageSendCount = params => requests(PREFIX + 'check-message-send-count', params);
......
<template>
<div></div>
</template>
<script>
export default {
name: 'scan-form',
data() {
return {
isEdit: this.$route.meta.type === 'edit',
isAdd: this.$route.meta.type === 'add',
isInfo: this.$route.meta.type === 'info'
};
},
created() {
this.$store.commit('aside_handler', true);
const name = this.isAdd ? '新建营销计划' : this.isEdit ? '编辑营销计划' : '营销计划详情';
this.$store.commit('mutations_breadcrumb', [{ name: '扫码营销', path: '' }, { name: '营销计划', path: '/scan' }, { name }]); // eslint-disable-line
}
};
</script>
<template>
<section class="dm-wrap" v-loading="loading">
<div class="pb22 clearfix">
<span>创建时间</span>
<el-date-picker class="w400 ml10" v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="refresh"></el-date-picker>
<el-input v-model="listParams.searchName" class="w200" placeholder="输入计划名称/创建人" clearable @change="search"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-checkbox class="vertical-middle" v-if="$store.state.marketing.isShowSelf" v-model="listParams.showSelfFlag" :true-label="1" :false-label="0" label="仅看本人" border @change="search" />
<el-button class="fr" type="primary" @click="$router.push('/scan/add')">新建计划</el-button>
</div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%" element-loading-text="拼命加载中">
<el-table-column label="优先级" type="index" width="80"></el-table-column>
<el-table-column v-for="(v, i) in tableHeader" :fixed="v.fixed" :show-overflow-tooltip="v.tooltip" :width="v.width" :min-width="v.minWidth" :align="v.align" :key="i" :prop="v.prop" :label="v.label" :formatter="v.formatter">
<template slot-scope="scope">
<span v-if="v.formatter" v-html="v.formatter(scope.row)"></span>
<span v-else>{{ scope.row[v.prop] }}</span>
</template>
</el-table-column>
<el-table-column min-width="100" align="left" prop="creatorName" label="创建人" v-if="$store.state.marketing.openFlag"></el-table-column>
<el-table-column label="操作" align="left" width="220" fixed="right">
<template slot-scope="scope">
<template v-if="scope.row.canEdit !== false">
<el-button type="text" @click="toRecord(scope.row)">记录</el-button>
<el-button type="text" v-if="scope.row.effectType == 0 || scope.row.effectType == 1" @click="editData(scope.row)">编辑</el-button>
<el-button type="text" v-if="scope.row.effectType == 2" @click="$router.push(`/scan/info/${scope.row.ecmPlanId}`)">详情</el-button>
</template>
<dm-delete v-if="scope.row.effectType !== 2 && scope.row.onlineStatus === 1 && scope.row.canEdit !== false" @confirm="offlineEcmPlan(scope.row)" tips="是否下线该计划?">
<el-button type="text">下线</el-button>
</dm-delete>
<dm-delete v-if="scope.row.putonStatus !== 2 && scope.row.canEdit !== false" @confirm="delData(scope.row)" tips="是否删除该计划?">
<el-button type="text">删除</el-button>
</dm-delete>
</template>
</el-table-column>
</el-table>
<!-- 不需要分页,只取前20 -->
<!-- <dm-pagination v-show="tableList.length" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="listParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"></dm-pagination> -->
</section>
</template>
<script>
import activitySelect from '@/components/activity-select/index.vue';
import { formatDateTimeByType } from '@/utils/index.js';
import { loadEcmList, deleteEcm, offlineEcmPlan } from '@/service/api/ecmApi.js';
export default {
name: 'scan-list',
data() {
return {
dateTime: [],
listParams: {
effectType: '', // 全部失效的默认值是-1,提交时判断''改为-1
marketingType: '',
marketingActivityId: '',
onlineStatus: '',
searchName: '',
currentPage: 1,
pageSize: 20,
showSelfFlag: ''
},
total: 0,
loading: false,
tableHeader: [
{ label: '计划名称', prop: 'ecmPlanName', minWidth: '160', align: 'left' },
{
label: '创建时间',
prop: 'createTime',
minWidth: '120',
align: 'left',
formatter(row) {
const date = formatDateTimeByType(row.createTime, 'yyyy-MM-dd-HH-mm-ss', true);
return date.y + '\n' + date.h;
}
},
{
label: '状态',
prop: 'onlineStatus',
width: '160',
align: 'left',
formatter(row) {
let result = '--';
switch (row.onlineStatus) {
case 0:
result = '<span class="dm-status--primary">待上线</span>';
break;
case 1:
result = '<span class="dm-status--success">已上线</span>';
break;
case 2:
result = '<span class="dm-status--info">已下线</span>';
break;
}
return result;
}
},
{
label: '执行时间',
prop: 'createTime',
minWidth: '120',
align: 'left',
formatter(row) {
const date = formatDateTimeByType(row.createTime, 'yyyy-MM-dd-HH-mm-ss', true);
return date.y + '\n' + date.h;
}
},
{ label: '合计营销次数', prop: 'timesForPeople', width: '160', align: 'left' }
],
tableList: []
};
},
components: {
activitySelect
},
created() {
this.getTableList();
this.$store.commit('aside_handler', true);
this.$store.commit('mutations_breadcrumb', [{ name: '扫码营销', path: '' }, { name: '营销计划', path: '/scan' }]); // eslint-disable-line
},
methods: {
search() {
this.listParams.currentPage = 1;
this.getTableList();
},
// handleSizeChange(val) {
// this.listParams.pageSize = val;
// this.getTableList();
// },
// handleCurrentChange(val) {
// this.listParams.currentPage = val;
// this.getTableList();
// },
async getTableList() {
this.loading = true;
if (this.dateTime) {
this.listParams.createBeginTime = formatDateTimeByType(this.dateTime[0], 'yyyy-MM-dd');
this.listParams.createEndTime = formatDateTimeByType(this.dateTime[1], 'yyyy-MM-dd');
} else {
this.listParams.createBeginTime = '';
this.listParams.createEndTime = '';
}
const params = { ...this.listParams };
if (params.effectType === '') {
params.effectType = -1; // 全部时效的默认值是-1
}
let res = await loadEcmList(params);
console.log(res);
this.tableList = res.result.result || [];
this.total = res.result.totalCount;
this.loading = false;
},
//编辑
editData(row) {
this.$router.push('/scan/edit/' + row.ecmPlanId);
},
// 记录
toRecord(row) {
const prefix = row.effectType == 1 ? 'batchlist' : row.effectType == 2 ? 'oncelist' : 'currentlist';
this.$router.push({ path: `/ecm/${prefix}/${row.ecmPlanId}`, query: { name: row.ecmPlanName } });
},
// 删除
async delData(row) {
try {
let res = await deleteEcm({ ecmPlanId: row.ecmPlanId });
if (res.errorCode === 0) {
this.$tips({ type: 'success', message: '删除成功!' });
if (this.tableList.length === 1 && this.listParams.currentPage !== 1) {
this.listParams.currentPage--;
}
this.getTableList();
} else {
this.$tips({ type: 'error', message: res.message || '删除失败!' });
}
} catch (err) {
this.$tips({ type: 'error', message: '删除失败!' });
}
},
// 下线
async offlineEcmPlan(row) {
try {
let res = await offlineEcmPlan({ ecmPlanId: row.ecmPlanId });
if (res.errorCode === 0) {
this.$tips({ type: 'success', message: '下线成功!' });
this.getTableList();
} else {
this.$tips({ type: 'error', message: res.message || '下线失败!' });
}
} catch (err) {
this.$tips({ type: 'error', message: '下线失败!' });
}
}
}
};
</script>
......@@ -44,6 +44,9 @@
<el-table-column label="操作" align="left" width="120px" fixed="right">
<template slot-scope="scope">
<el-button type="text" @click="$router.push(`/message/import-send/info/${scope.row.smsImportPlanId}`)">详情</el-button>
<dm-delete v-if="scope.row.sendStatus == 0" @confirm="invalidData(scope.row)" tips="禁用将关闭该发送计划,是否确认?">
<el-button type="text">禁用</el-button>
</dm-delete>
</template>
</el-table-column>
</el-table>
......@@ -52,7 +55,7 @@
</section>
</template>
<script>
import { pageSmsImportPlan } from '@/service/api/messageApi.js';
import { pageSmsImportPlan, stopSmsImportPlanTimer } from '@/service/api/messageApi.js';
import { formatDateTimeByType } from '@/utils/index.js';
import talbeMethods from '@/mixins/tableMethods.js';
import filterAvater from '@/mixins/filterAvater.js';
......@@ -95,6 +98,16 @@ export default {
timeCounts
},
methods: {
invalidData(row) {
stopSmsImportPlanTimer({ smsImportPlanId: row.smsImportPlanId })
.then(res => {
this.$tips({ type: 'success', message: '禁用成功!' });
this.getTableList();
})
.catch(err => {
this.$tips({ type: 'error', message: '禁用失败!' });
});
},
// 列表状态过滤器
// -1: 已失效; 0:定时执行,1:执行完毕,2:执行失败,3:无可用模板;4.执行中
filterStatus(row) {
......
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