Commit 078ef662 by 黑潮

Merge branch 'feature/8月上旬迭代'

parents 605e7ae2 3fa61574
......@@ -15,7 +15,7 @@
<el-table-column :show-overflow-tooltip="false" :width="200" :min-width="200" align="left" prop="title" label="模板名称"></el-table-column>
<el-table-column :show-overflow-tooltip="false" :width="200" :min-width="200" align="left" prop="content" label="模板类型">
<template slot-scope="scope">
<p class="gray">{{ scope.row.type === 0 ? '普通短信' : scope.row.type === 1 ? '营销短信' : '验证码' }}</p>
<p class="gray" style="color:#606266">{{ scope.row.type === 0 ? '普通短信' : scope.row.type === 1 ? '营销短信' : '验证码' }}</p>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="false" :min-width="200" align="left" prop="content" label="模板内容">
......
......@@ -103,6 +103,15 @@ export default {
path: '/card/merge/list',
type: 'edit'
}
},
{
path: 'info/:id',
name: '查看卡券包',
component: () => import(/* webpackChunkName: "card" */ '../../views/card/merge-form.vue'),
meta: {
path: '/card/merge/list',
type: 'info'
}
}
]
},
......
......@@ -6,6 +6,7 @@ import axios from 'axios';
// const router = new VueRouter();
import router from '../../router/index';
import store from '../../store/index';
import Vue from 'vue';
// 加载最小时间
const MINI_TIME = 300;
......@@ -124,7 +125,12 @@ const requests = (url, data = {}, contentTypeIsJSON = false, isSilence = false,
popRequest(_random);
if (res.data.errorCode !== 0) {
reject(res);
handlerErr(res.data.errorCode, res.data.message, alertError);
// handlerErr(res.data.errorCode, res.data.message, alertError);
if (res.data.message.indexOf('抱歉') >= 0) {
Vue.prototype.$alert(res.data.message, '提示');
} else {
handlerErr(res.data.errorCode, res.data.message, alertError);
}
} else {
resolve(res.data);
}
......
......@@ -127,7 +127,7 @@
<div class="ecm-msg__edit">
<div class="ecm-msg__edit--inner">
<el-form-item label-width="100px" label="头部文案">
<el-input type="textarea" :style="'color:' + copyTemplate.headerColor" v-model="copyTemplate.headerText" :rows="4" class="w450" :maxlength="200"></el-input>
<el-input type="textarea" :style="'color:' + copyTemplate.headerColor" v-model="copyTemplate.headerText" :rows="4" class="w450" :maxlength="200" @input="filterWord('headerText')"></el-input>
<div class="input-suffix clearfix">
<!-- <el-color-picker class="ml10 vertical-middle" v-model="copyTemplate.headerColor"></el-color-picker> -->
<el-button type="text" class="ml10 vertical-middle" @click="insetVarPre('headerText')">插入变量</el-button>
......@@ -141,7 +141,7 @@
</div>
</el-form-item>
<el-form-item label-width="100px" label="尾部文案">
<el-input type="textarea" :style="'color:' + copyTemplate.remarkColor" v-model="copyTemplate.remarkText" :rows="4" class="w450" :maxlength="200"></el-input>
<el-input type="textarea" :style="'color:' + copyTemplate.remarkColor" v-model="copyTemplate.remarkText" :rows="4" class="w450" :maxlength="200" @input="filterWord('remarkText')"></el-input>
<div class="input-suffix clearfix">
<el-color-picker class="ml10 vertical-middle" v-model="copyTemplate.remarkColor"></el-color-picker>
<el-button type="text" class="vertical-middle" @click="insetVarPre('remarkText')">插入变量</el-button>
......@@ -270,6 +270,9 @@ export default {
this.$store.commit('mutations_layoutTips', '');
},
methods: {
filterWord(prop) {
this.copyTemplate[prop] = this.copyTemplate[prop].replace(/[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/g, '');
},
// 获取变量列表
async listTemplateVariables() {
try {
......
......@@ -2,18 +2,18 @@
<div class="dm-wrap" v-loading="loading">
<el-form ref="form" :model="ruleForm" label-width="140px" :rules="rules">
<el-form-item prop="name" label="卡券包名称">
<dm-input v-model="ruleForm.name" class="w250" placeholder="请输入卡券包名称" :byteType="1" :maxlength="10"></dm-input>
<dm-input v-model="ruleForm.name" class="w250" placeholder="请输入卡券包名称" :byteType="1" :maxlength="10" :disabled="isInfo"></dm-input>
</el-form-item>
<el-form-item prop="effectiveMode" label="有效时间">
<!-- <el-select class="w300" v-model="ruleForm.effectiveMode">
<el-option v-for="(v, i) in sendTypeOptions" :key="i" :value="v.value" :label="v.label"></el-option>
</el-select> -->
<el-radio-group v-model="ruleForm.effectiveMode">
<el-radio-group v-model="ruleForm.effectiveMode" :disabled="isInfo">
<el-radio :label="0">不限</el-radio>
<el-radio :label="1">选择时间段</el-radio>
</el-radio-group>
<br />
<el-date-picker v-if="ruleForm.effectiveMode" class="w250 mt10" v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions"></el-date-picker>
<el-date-picker v-if="ruleForm.effectiveMode" class="w250 mt10" v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions" :disabled="isInfo"></el-date-picker>
</el-form-item>
<el-form-item label="数据对话">
<!-- 只能新增不能改 -->
......@@ -26,7 +26,7 @@
<dm-activity-select :actId.sync="ruleForm.marketingActivityId" :readOnly="isInfo || isEdit"></dm-activity-select>
</el-form-item>
<el-form-item prop="cardIds" label="新增卡券">
<div><el-button @click="showCardDialog = true">添加卡券</el-button></div>
<div><el-button @click="showCardDialog = true" :disabled="isInfo">添加卡券</el-button></div>
<el-table v-if="ruleForm.cardIds" class="mt20" :data="tableData" style="width: 100%">
<el-table-column min-width="120" align="left" prop="cardName" label="卡券名称">
<template slot-scope="scope">
......@@ -64,7 +64,7 @@
</el-table-column>
<el-table-column label="操作" align="left" width="80px" fixed="right">
<template slot-scope="scope">
<el-button type="text" @click="del(scope.row)">删除</el-button>
<el-button type="text" @click="del(scope.row)" :disabled="isInfo">删除</el-button>
</template>
</el-table-column>
</el-table>
......@@ -78,7 +78,7 @@
</div>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="saveForm">{{ isAdd ? '新增' : '保存' }}</el-button>
<el-button type="primary" @click="saveForm" :disabled="isInfo">{{ isAdd ? '新增' : '保存' }}</el-button>
</el-form-item>
</el-form>
<vue-gic-card :type="1" :showCardDialog.sync="showCardDialog" @selectCard="selectCard" :cardLimit="-1" :cardType="null"></vue-gic-card>
......@@ -125,7 +125,8 @@ export default {
tableData: [],
sceneSettingIdOptions: [],
isAdd: this.$route.meta.type === 'add',
isEdit: this.$route.meta.type === 'edit'
isEdit: this.$route.meta.type === 'edit',
isInfo: this.$route.meta.type === 'info'
};
},
methods: {
......@@ -227,7 +228,7 @@ export default {
},
mounted() {
this.sceneSettingList();
if (this.isEdit) {
if (this.isEdit || this.isInfo) {
this.getInfo();
}
},
......
......@@ -3,7 +3,8 @@
<div class="pb22 clearfix">
<el-date-picker class="w400" v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="refresh"></el-date-picker>
<dm-activity-select class="vertical-middle w150 mr5" width="150" :actId.sync="listParams.marketingActivityId" onlySelect @actUpdate="refresh"></dm-activity-select>
<el-input v-model="listParams.search" class="w300" placeholder="请输入卡券包名称" clearable @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-input v-model="listParams.search" class="w300" placeholder="请输入卡券包名称/创建人" clearable @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-checkbox v-if="$store.state.marketing.isShowSelf" class="vertical-middle" v-model="listParams.showSelfFlag" :true-label="1" :false-label="0" label="仅看本人" border @change="refresh" />
<el-button class="fr" type="primary" @click="$router.push('/card/merge/add')">新建卡券包</el-button>
</div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%">
......@@ -30,12 +31,15 @@
<el-table-column :show-overflow-tooltip="true" min-width="120" align="left" prop="marketingActivityName" label="数据对话">
<template slot-scope="scope">{{ scope.row.marketingActivityName || '--' }}</template>
</el-table-column>
<el-table-column label="操作" align="left" width="120px" fixed="right">
<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="200px" fixed="right">
<template slot-scope="scope">
<el-button type="text" @click="$router.push(`/card/merge/edit/${scope.row.cardPackageId}`)">修改</el-button>
<dm-delete @confirm="del(scope.row)" tips="是否删除该卡券包?">
<el-button v-if="scope.row.canEdit" type="text" @click="$router.push(`/card/merge/edit/${scope.row.cardPackageId}`)">修改</el-button>
<el-button v-else type="text" @click="$router.push(`/card/merge/info/${scope.row.cardPackageId}`)">查看</el-button>
<dm-delete v-if="scope.row.canEdit" @confirm="del(scope.row)" tips="是否删除该卡券包?">
<el-button type="text">删除</el-button>
</dm-delete>
<el-button v-if="scope.row.canEdit" type="text" @click="$router.push(`/card/merge/record-list?cardPackageId=${scope.row.cardPackageId}&name=${scope.row.name}`)">领取记录</el-button>
</template>
</el-table-column>
</el-table>
......@@ -57,6 +61,7 @@ export default {
visible: false,
dateTime: [],
listParams: {
showSelfFlag: 0,
marketingActivityId: '',
beginTime: '',
endTime: '',
......
<template>
<section class="dm-wrap" v-loading="loading">
<div class="pb22 clearfix">
<el-input v-model="listParams.search" class="w300" placeholder="请输入卡券包名称" clearable @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-input v-model="listParams.search" class="w300" placeholder="请输入会员信息" clearable @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<!-- <el-input v-model="listParams.receiveCode" class="w300" placeholder="请输入投放渠道" clearable @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input> -->
</div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%">
......@@ -48,6 +48,7 @@ export default {
formatDateTimeByType,
visible: false,
listParams: {
cardPackageId: '',
search: '',
marketingActivityId: '',
receiveCode: '',
......@@ -65,8 +66,9 @@ export default {
};
},
created() {
this.listParams.cardPackageId = this.$route.query.cardPackageId;
this.getTableList();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '卡券包', path: '' }, { name: '卡券包领取记录', path: '' }]); // eslint-disable-line
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '卡券包', path: '' }, { name: `${this.$route.query.name || ''}-卡券包领取记录`, path: '' }]); // eslint-disable-line
},
methods: {
// 加载列表
......
......@@ -270,6 +270,9 @@ export default {
},
methods: {
/* ----------------核心方法--------------- */
filterWord(prop) {
this.copyTemplate[prop] = this.copyTemplate[prop].replace(/[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/g, '');
},
checkMessageSendCount() {
return new Promise(async (resolve, reject) => {
let events = this.$refs.marketingEvent.list.map(el => el.name);
......
......@@ -495,7 +495,7 @@
<div class="ecm-msg__edit">
<div class="ecm-msg__edit--inner">
<el-form-item label-width="100px" label="头部文案">
<el-input type="textarea" :style="'color:' + copyTemplate.headerColor" v-model="copyTemplate.headerText" :rows="4" class="w450" :maxlength="200"></el-input>
<el-input type="textarea" :style="'color:' + copyTemplate.headerColor" v-model="copyTemplate.headerText" :rows="4" class="w450" :maxlength="200" @input="filterWord('headerText')"></el-input>
<div class="input-suffix clearfix">
<!-- <el-color-picker class="ml10 vertical-middle" v-model="copyTemplate.headerColor"></el-color-picker> -->
<el-button type="text" class="ml10 vertical-middle" @click="insetVarPre('headerText')">插入变量</el-button>
......@@ -509,7 +509,7 @@
</div>
</el-form-item>
<el-form-item label-width="100px" label="尾部文案">
<el-input type="textarea" :style="'color:' + copyTemplate.remarkColor" v-model="copyTemplate.remarkText" :rows="4" class="w450" :maxlength="200"></el-input>
<el-input type="textarea" :style="'color:' + copyTemplate.remarkColor" v-model="copyTemplate.remarkText" :rows="4" class="w450" :maxlength="200" @input="filterWord('remarkText')"></el-input>
<div class="input-suffix clearfix">
<el-color-picker class="ml10 vertical-middle" v-model="copyTemplate.remarkColor"></el-color-picker>
<el-button type="text" class="vertical-middle" @click="insetVarPre('remarkText')">插入变量</el-button>
......
......@@ -196,6 +196,9 @@ export default {
},
methods: {
/* ----------------核心方法--------------- */
filterWord(prop) {
this.copyTemplate[prop] = this.copyTemplate[prop].replace(/[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/g, '');
},
// 获取变量列表
async listTemplateVariables() {
this.loading = true;
......
......@@ -154,7 +154,7 @@
<div class="ecm-msg__edit--inner">
<el-form>
<el-form-item label-width="100px" label="头部文案">
<el-input type="textarea" :style="'color:' + copyTemplate.headerColor" v-model="copyTemplate.headerText" :rows="4" class="w450" :maxlength="200"></el-input>
<el-input type="textarea" :style="'color:' + copyTemplate.headerColor" v-model="copyTemplate.headerText" :rows="4" class="w450" :maxlength="200" @input="filterWord('headerText')"></el-input>
<div class="input-suffix clearfix">
<el-button type="text" class="ml10 vertical-middle" @click="insetVarPre('headerText')">插入变量</el-button>
<span class="gray fz13 fr mr10">{{ copyTemplate.headerText.length }}/200</span>
......@@ -167,7 +167,7 @@
</div>
</el-form-item>
<el-form-item label-width="100px" label="尾部文案">
<el-input type="textarea" :style="'color:' + copyTemplate.remarkColor" v-model="copyTemplate.remarkText" :rows="4" class="w450" :maxlength="200"></el-input>
<el-input type="textarea" :style="'color:' + copyTemplate.remarkColor" v-model="copyTemplate.remarkText" :rows="4" class="w450" :maxlength="200" @input="filterWord('remarkText')"></el-input>
<div class="input-suffix clearfix">
<el-color-picker class="ml10 vertical-middle" v-model="copyTemplate.remarkColor"></el-color-picker>
<el-button type="text" class="vertical-middle" @click="insetVarPre('remarkText')">插入变量</el-button>
......
......@@ -118,7 +118,7 @@
<div class="ecm-msg__edit">
<div class="ecm-msg__edit--inner">
<el-form-item label-width="100px" label="头部文案">
<el-input type="textarea" :style="'color:' + copyTemplate.headerColor" v-model="copyTemplate.headerText" :rows="4" class="w450" :maxlength="200"></el-input>
<el-input type="textarea" :style="'color:' + copyTemplate.headerColor" v-model="copyTemplate.headerText" :rows="4" class="w450" :maxlength="200" @input="filterWord('headerText')"></el-input>
<div class="input-suffix clearfix">
<!-- <el-color-picker class="ml10 vertical-middle" v-model="copyTemplate.headerColor"></el-color-picker> -->
<el-button type="text" class="ml10 vertical-middle" @click="insetVarPre('headerText')">插入变量</el-button>
......@@ -132,7 +132,7 @@
</div>
</el-form-item>
<el-form-item label-width="100px" label="尾部文案">
<el-input type="textarea" :style="'color:' + copyTemplate.remarkColor" v-model="copyTemplate.remarkText" :rows="4" class="w450" :maxlength="200"></el-input>
<el-input type="textarea" :style="'color:' + copyTemplate.remarkColor" v-model="copyTemplate.remarkText" :rows="4" class="w450" :maxlength="200" @input="filterWord('remarkText')"></el-input>
<div class="input-suffix clearfix">
<el-color-picker class="ml10 vertical-middle" v-model="copyTemplate.remarkColor"></el-color-picker>
<el-button type="text" class="vertical-middle" @click="insetVarPre('remarkText')">插入变量</el-button>
......@@ -260,6 +260,9 @@ export default {
this.$store.commit('mutations_layoutTips', '');
},
methods: {
filterWord(prop) {
this.copyTemplate[prop] = this.copyTemplate[prop].replace(/[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/g, '');
},
// 拉取营销场景
async sceneSettingList() {
let res = await sceneSettingList();
......
......@@ -148,6 +148,10 @@ export default {
groupType: this.info.memberType === 0 ? 0 : 1
};
const res = await checkMessageSendCount(params);
if (res.result <= 0) {
this.$alert('抱歉,您当前所选人群数量为0,请重新选择人群', '提示');
return;
}
if (res.errorCode === 0) {
this.$confirm(
`<div>
......@@ -200,18 +204,10 @@ export default {
if (this.info.sendType) {
params.sendTime = formatDateTimeByType(this.info.sendTime, 'yyyy-MM-dd-HH-mm-ss');
}
saveSendSmsService(params)
.then(res => {
if (res.errorCode === 0) {
this.$router.push('/message/record');
this.$tips({ type: 'success', message: res.message || '提交成功' });
} else {
this.$tips({ type: 'error', message: '提交失败' });
}
})
.catch(err => {
this.$tips({ type: 'error', message: '提交失败' });
});
saveSendSmsService(params).then(res => {
this.$router.push('/message/record');
this.$tips({ type: 'success', message: res.message || '提交成功' });
});
})
.catch(() => {
this.$tips({ type: 'info', message: '已取消提交' });
......@@ -233,7 +229,7 @@ export default {
// // 这里强制获取人群筛选器的配置项
// await this.$refs.peopleFilter.confirmSet();
if (this.checkAccountState()) return;
// if (this.checkAccountState()) return;
let nowHour = null;
if (this.info.sendType) {
nowHour = new Date(this.info.sendTime).getHours();
......
......@@ -4,7 +4,7 @@
<h3 class="dm-title__label">基本信息</h3>
<el-row :gutter="20" class="message-detail__label">
<el-col :span="8">
<span class="primary-font-color">手工导入时间:</span>
<span class="primary-font-color">创建时间:</span>
<span class="regular-font-color">{{ formatDateTimeByType(info.createTime, 'yyyy-MM-dd-HH-mm-ss') }}</span>
</el-col>
<el-col :span="16">
......@@ -61,11 +61,11 @@
</template>
</el-table-column>
<el-table-column v-for="(v, i) in messageHeader" :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"></el-table-column>
<el-table-column :min-width="80" align="left" label="错误码" prop="errorMsg">
<el-table-column :min-width="80" align="left" label="错误码" prop="errorMsg" show-overflow-tooltip>
<template slot-scope="scope">
<span v-if="scope.row.errorMsg == -1">--</span>
<span v-else-if="scope.row.backStatus == '--' && scope.row.sendStatus !== 2">--</span>
<el-button v-else type="text" @click="errorCodeShow = true">{{ scope.row.errorMsg }}</el-button>
<el-button style="text-overflow:ellipsis;overflow:hidden;white-space:nowrap;width:100%" v-else type="text" @click="errorCodeShow = true">{{ scope.row.errorMsg }}</el-button>
</template>
</el-table-column>
<el-table-column :min-width="100" align="left" label="上报时间" prop="backTime">
......
......@@ -37,7 +37,13 @@
<el-table-column min-width="120" align="left" prop="totalFeeNum" label="计费条数"></el-table-column>
<el-table-column min-width="120" align="left" label="状态">
<template slot-scope="scope">
<span v-html="filterStatus(scope.row)"></span>
<span v-if="scope.row.sendStatus === 5"><span class="dm-status--primary--flash"></span>执行中</span>
<span v-else-if="filterStatus(scope.row.sendStatus)" :class="'dm-status--' + filterStatus(scope.row.sendStatus).type">
{{ filterStatus(scope.row.sendStatus).label }}
<el-tooltip v-if="scope.row.sendStatus == 2 && scope.row.failReason" :content="scope.row.failReason" placement="top">
<i class="el-icon-question" style="color:#c0c4cc;cursor:pointer;margin-left:3px;font-size:14px"></i>
</el-tooltip>
</span>
<time-counts v-if="scope.row.sendStatus == 0" class="primary-color fz12" :defaultVal="scope.row.sendTime" :autoStart="true"></time-counts>
</template>
</el-table-column>
......@@ -80,7 +86,7 @@ export default {
pageSize: 20
},
// 发送状态(-1: 已失效; 0:定时执行,1:执行完毕,2:执行失败,3:无可用模板;4.执行中)
status: [{ value: -1, label: '已失效' }, { value: 0, label: '定时执行' }, { value: 1, label: '执行完毕' }, { value: 2, label: '执行失败' }, { value: 3, label: '无可用模板' }, { value: 5, label: '执行中' }], // eslint-disable-line
status: [{ value: 0, label: '定时执行', type: 'warning' }, { value: 1, label: '已执行', type: 'success' }, { value: 2, label: '执行失败', type: 'error' }, { value: 5, label: '执行中', type: 'primary--flash' }, { value: -1, label: '已失效', type: 'error' }], // eslint-disable-line
total: 0,
loading: false,
tableList: [],
......@@ -110,22 +116,12 @@ export default {
},
// 列表状态过滤器
// -1: 已失效; 0:定时执行,1:执行完毕,2:执行失败,3:无可用模板;4.执行中
filterStatus(row) {
let _content = '';
if (row.sendStatus == -1) {
_content = `<div class="dm-status--info">已失效</div>`;
} else if (row.sendStatus == 0) {
_content = `<div class="dm-status--warning">定时执行</div>`;
} else if (row.sendStatus == 1) {
_content = `<div class="dm-status--success">执行完毕</div>`;
} else if (row.sendStatus == 2) {
_content = `<div class="dm-status--default">执行失败</div>`;
} else if (row.sendStatus == 3) {
_content = `<div class="dm-status--default">无可用模板</div>`;
} else if (row.sendStatus == 4) {
_content = `<div class="dm-status--primary">执行中</div>`;
}
return _content;
filterStatus(val) {
let result = null;
this.status.forEach(v => {
if (val === v.value) result = v;
});
return result;
},
// 加载列表
async getTableList() {
......
......@@ -22,7 +22,12 @@
<el-table-column label="状态" prop="sendStatus" align="left" width="140px">
<template slot-scope="scope">
<span v-if="scope.row.sendStatus === 5"><span class="dm-status--primary--flash"></span>执行中</span>
<span v-else :class="'dm-status--' + filterStatus(scope.row.sendStatus).type">{{ filterStatus(scope.row.sendStatus).label }}</span>
<span v-else-if="filterStatus(scope.row.sendStatus)" :class="'dm-status--' + filterStatus(scope.row.sendStatus).type">
{{ filterStatus(scope.row.sendStatus).label }}
<el-tooltip v-if="scope.row.sendStatus == 2 && scope.row.failReason" :content="scope.row.failReason" placement="top">
<i class="el-icon-question" style="color:#c0c4cc;cursor:pointer;margin-left:3px;font-size:14px"></i>
</el-tooltip>
</span>
<time-counts v-if="scope.row.sendStatus == 0" :key="scope.row.smsId" class="primary-color fz12" :defaultVal="scope.row.sendTime" :autoStart="true"></time-counts>
</template>
</el-table-column>
......@@ -51,7 +56,7 @@ export default {
mixins: [tableMethods],
data() {
return {
sendStatusOptions: [{ value: '', label: '所有状态', type: '' }, { value: 0, label: '定时执行', type: 'warning' }, { value: 1, label: '执行完毕', type: 'success' }, { value: 2, label: '执行失败', type: 'danger' }, { value: 3, label: '无可用模板', type: 'danger' }, { value: 5, label: '执行中', type: 'primary--flash' }, { value: -1, label: '已失效', type: 'danger' }], // eslint-disable-line
sendStatusOptions: [{ value: '', label: '所有状态', type: '' }, { value: 0, label: '定时执行', type: 'warning' }, { value: 1, label: '已执行', type: 'success' }, { value: 2, label: '执行失败', type: 'error' }, { value: 5, label: '执行中', type: 'primary--flash' }, { value: -1, label: '已失效', type: 'error' }], // eslint-disable-line
recordLoading: false,
messageList: [],
recordHeader: [
......@@ -159,7 +164,7 @@ export default {
});
},
filterStatus(val) {
let result = { label: '执行错误', type: 'warning' };
let result = null;
this.sendStatusOptions.forEach(v => {
if (val === v.value) result = v;
});
......
......@@ -29,7 +29,7 @@
<div class="gray fz13">* 请勿在文案中使用“#”井号,会导致在用户端展示错误。</div>
</el-form-item>
<el-form-item label="头部文案">
<el-input type="textarea" :style="'color:' + info.headerColor" v-model="info.headerText" :rows="4" class="w450" :maxlength="200"></el-input>
<el-input type="textarea" :style="'color:' + info.headerColor" v-model="info.headerText" :rows="4" class="w450" :maxlength="200" @input="filterWord('headerText')"></el-input>
<div class="input-suffix clearfix">
<!-- <el-color-picker class="ml10 vertical-middle" v-model="info.headerColor"></el-color-picker> -->
<el-button type="text" class="vertical-middle ml10" @click="insetVar('headerText')">插入变量</el-button>
......@@ -51,7 +51,7 @@
</div>
</el-form-item>
<el-form-item label="尾部文案">
<el-input type="textarea" :style="'color:' + info.remarkColor" v-model="info.remarkText" :rows="4" class="w450" :maxlength="200"></el-input>
<el-input type="textarea" :style="'color:' + info.remarkColor" v-model="info.remarkText" :rows="4" class="w450" :maxlength="200" @input="filterWord('remarkText')"></el-input>
<div class="input-suffix clearfix">
<el-color-picker class="ml10 vertical-middle" v-model="info.remarkColor"></el-color-picker>
<el-button type="text" class="vertical-middle" @click="insetVar('remarkText')">插入变量</el-button>
......@@ -219,6 +219,9 @@ export default {
}
},
methods: {
filterWord(prop) {
this.info[prop] = this.info[prop].replace(/[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/g, '');
},
async listTemplateVariables() {
this.loading = true;
try {
......
......@@ -4,7 +4,7 @@
<h3 class="dm-title__label--outer">账户余额</h3>
<span class="fz22 danger-color vertical-middle pr20">{{ (recharge.balance / 100) | amount }}</span>
<el-button class="ml10 vertical-middle" size="mini" type="primary" @click="$router.push('/recharge/do')">充值</el-button>
<el-button style="padding: 3px 0" type="text" @click="$router.push('/recharge/record')">充值记录</el-button>
<el-button style="padding: 3px 0" type="text" @click="$router.push('/recharge/record')">记录</el-button>
</div>
<div class="dm-wrap">
<h3 class="dm-title__label--outer">今日消费</h3>
......
......@@ -46,7 +46,7 @@
<el-table-column align="left" width="100" prop="countNum" label="计费条数">
<template slot-scope="scope">{{ scope.row.countNum }}</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" align="left" width="320" prop="storeName" label="服务门店">
<el-table-column :show-overflow-tooltip="true" align="left" width="320" prop="storeName" label="门店">
<template slot-scope="scope">
<p>{{ scope.row.storeName }}</p>
<p class="gray">{{ scope.row.storeGroupName }}</p>
......@@ -75,7 +75,7 @@
</template>
</el-table-column>
<el-table-column align="left" width="150" prop="receivePhone" label="接收号码"></el-table-column>
<el-table-column :show-overflow-tooltip="true" align="left" width="320" prop="storeName" label="服务门店">
<el-table-column :show-overflow-tooltip="true" align="left" width="320" prop="storeName" label="门店">
<template slot-scope="scope">
<p>{{ scope.row.storeName }}</p>
<p class="fz13 gray">{{ scope.row.storeGroupName }}</p>
......@@ -101,7 +101,7 @@
</template>
</el-table-column>
<el-table-column align="left" prop="receivePhone" label="接收号码"></el-table-column>
<el-table-column :show-overflow-tooltip="true" align="left" width="320" prop="storeName" label="服务门店">
<el-table-column :show-overflow-tooltip="true" align="left" width="320" prop="storeName" label="门店">
<template slot-scope="scope">
<p>{{ scope.row.storeName }}</p>
<p class="fz13 gray">{{ scope.row.storeGroupName }}</p>
......@@ -123,7 +123,7 @@
</p>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" align="left" min-width="320" prop="storeName" label="任务门店">
<el-table-column :show-overflow-tooltip="true" align="left" min-width="320" prop="storeName" label="门店">
<template slot-scope="scope">
<p>{{ scope.row.storeName }}</p>
<p class="fz13 gray">{{ scope.row.storeGroupName }}</p>
......@@ -168,7 +168,7 @@
</p>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" align="left" prop="storeName" width="350" label="任务门店">
<el-table-column :show-overflow-tooltip="true" align="left" prop="storeName" width="350" label="门店">
<template slot-scope="scope">
<p>{{ scope.row.storeName }}</p>
<p class="fz13 gray">{{ scope.row.storeGroupName }}</p>
......
<template>
<section class="recharge dm-wrap" v-loading="loading">
<div class="pb22"><el-date-picker v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="onSearch"></el-date-picker></div>
<div class="pb22">
<el-date-picker v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="onSearch"></el-date-picker>
<el-select style="width:180px" clearable v-model="listParams.feeType" placeholder="全部记录类型" @change="onChangeFeeType">
<el-option label="充值" :value="1"></el-option>
<el-option label="扣款" :value="2"></el-option>
</el-select>
<el-select v-if="listParams.feeType == 2" style="width:180px" clearable v-model="listParams.deductType" placeholder="全部扣款类型" @change="onSearch">
<el-option v-for="(value, key) in deductTypeList" :key="key" :label="value" :value="key"></el-option>
</el-select>
</div>
<el-table tooltipEffect="dark" :data="tableList" style="width: 100%">
<el-table-column align="left" prop="timeEnd" label="充值时间">
<template slot-scope="scope">
......@@ -9,6 +18,16 @@
</template>
</el-table-column>
<el-table-column align="left" prop="transactionId" label="充值流水号"></el-table-column>
<el-table-column label="记录类型">
<template slot-scope="scope">
{{ scope.row.feeType == 1 ? '充值' : '扣款' }}
</template>
</el-table-column>
<el-table-column label="扣款类型">
<template slot-scope="scope">
{{ deductTypeList[scope.row.deductType] }}
</template>
</el-table-column>
<el-table-column align="left" prop="payType" label="充值方式">
<template slot-scope="scope">
{{ scope.row.payType | filterPayType }}
......@@ -18,6 +37,20 @@
<template slot-scope="scope"> {{ (scope.row.totalFee / 100).toFixed(2) }}</template>
</el-table-column>
<el-table-column align="left" prop="reason" label="充值原因" show-overflow-tooltip></el-table-column>
<el-table-column label="图片凭证">
<template slot-scope="scope">
<!-- <el-image v-for="(item, index) in getUrls(scope).slice(0, 3)" :key="`${currentPage}-${item}`" style="width: 36px; height: 36px" :src="item" :preview-src-list="getUrls(scope, index)" lazy>
<div slot="placeholder" class="image-slot">
<i class="el-icon-picture-outline"></i>
</div>
</el-image> -->
<viewer :options="options" :images="getUrls(scope)" class="viewer" ref="viewer">
<template #default="scope2">
<img style="width: 36px; height: 36px;margin-left:5px;cursor:pointer" v-for="src in scope2.images" :src="src" :key="src" />
</template>
</viewer>
</template>
</el-table-column>
</el-table>
<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>
......@@ -25,9 +58,12 @@
<script>
import { rechargeRecord } from '@/service/api/rechargeApi.js';
import { formatDateTimeByType } from '@/utils/index.js';
import 'viewerjs/dist/viewer.css';
import { component as Viewer } from 'v-viewer';
export default {
name: 'recharge-record',
components: { Viewer },
data() {
return {
formatDateTimeByType,
......@@ -38,9 +74,12 @@ export default {
currentPage: 1,
pageSize: 20,
beginTime: '',
endTime: ''
endTime: '',
deductType: '',
feeType: ''
},
total: 0
total: 0,
deductTypeList: {}
};
},
created() {
......@@ -48,6 +87,15 @@ export default {
this.$store.commit('mutations_breadcrumb', [{ name: '企业管理', path: '' }, { name: '计费中心', path: '/recharge' }, { name: '充值记录', path: '' }]); // eslint-disable-line
},
methods: {
getUrls(scope) {
let urls = scope.row.imageUrls ? scope.row.imageUrls.split(',') : [];
urls = urls.filter(el => el);
return urls;
},
onChangeFeeType() {
this.listParams.deductType = '';
this.onSearch();
},
onSearch() {
this.listParams.currentPage = 1;
this.rechargeRecord();
......@@ -76,6 +124,7 @@ export default {
if (res.errorCode === 0 && res.result.result) {
this.tableList = res.result.result;
this.total = res.result.totalCount;
this.deductTypeList = JSON.parse(res.result.params.deductTypeList || '{}');
} else {
this.tableList = [];
}
......
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