Commit 2f57c8cb by chenxin

fix: save

parent 46adcb6b
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=static/fonts/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//web-1251519181.file.myqcloud.com/components/element.2.12.0.css><link href=/marketing/static/css/main.6c1ae59e9a37a6875e8c50598fab8f7b.css rel=stylesheet></head><body><div id=app></div><script src=//web-1251519181.file.myqcloud.com/lib/vue/2.5.2/vue.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vue-router/3.0.2/vue-router.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vuex/3.1.0/vuex.min.js></script><script src=//web-1251519181.file.myqcloud.com/components/element.2.12.0.js></script><script src=//web-1251519181.file.myqcloud.com/components/header.2.0.36.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.10.js></script><script src=//web-1251519181.file.myqcloud.com/components/store.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/img-preview.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/member-group.2.2.16.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.18.js></script><script src=//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.42.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/input.2.0.20.js></script><script src=//web-1251519181.file.myqcloud.com/components/delete.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/selector.1.2.10.js></script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script type=text/javascript src=/marketing/static/js/manifest.46aefea3065c8f69aec6.js></script><script type=text/javascript src=/marketing/static/js/vendor.cbb380c2053ab598e892.js></script><script type=text/javascript src=/marketing/static/js/main.5ea46072e6bbe4a41500.js></script></body></html>
\ No newline at end of file
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=static/fonts/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//web-1251519181.file.myqcloud.com/components/element.2.12.0.css><link href=/marketing/static/css/main.a3022baf5f6c7e5873682b66837a6b90.css rel=stylesheet></head><body><div id=app></div><script src=//web-1251519181.file.myqcloud.com/lib/vue/2.5.2/vue.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vue-router/3.0.2/vue-router.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vuex/3.1.0/vuex.min.js></script><script src=//web-1251519181.file.myqcloud.com/components/element.2.12.0.js></script><script src=//web-1251519181.file.myqcloud.com/components/header.2.0.36.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.12.js></script><script src=//web-1251519181.file.myqcloud.com/components/store.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/img-preview.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/member-group.2.2.22.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.18.js></script><script src=//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.42.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/input.2.0.20.js></script><script src=//web-1251519181.file.myqcloud.com/components/delete.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/selector.1.2.10.js></script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script type=text/javascript src=/marketing/static/js/manifest.26dda0c9cdd8a3766add.js></script><script type=text/javascript src=/marketing/static/js/vendor.cbb380c2053ab598e892.js></script><script type=text/javascript src=/marketing/static/js/main.d393e62fba647c0e7171.js></script></body></html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
!function(e){var r=window.webpackJsonp;window.webpackJsonp=function(t,a,c){for(var i,f,u,d=0,s=[];d<t.length;d++)f=t[d],n[f]&&s.push(n[f][0]),n[f]=0;for(i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i]);for(r&&r(t,a,c);s.length;)s.shift()();if(c)for(d=0;d<c.length;d++)u=o(o.s=c[d]);return u};var t={},n={13:0};function o(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.e=function(e){var r=n[e];if(0===r)return new Promise(function(e){e()});if(r)return r[2];var t=new Promise(function(t,o){r=n[e]=[t,o]});r[2]=t;var a=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.timeout=12e4,o.nc&&c.setAttribute("nonce",o.nc),c.src=o.p+"static/js/"+({0:"card",1:"game",2:"wechat",3:"message",4:"ewash",5:"ecm",6:"evaluation",7:"activity",8:"recharge",9:"msg",10:"calllog"}[e]||e)+"."+{0:"8e1b0eab2d297700d323",1:"cd90e49431e5046ac7ba",2:"80e0f194da1feec0468f",3:"7e184a0f70d3614ae3a7",4:"f06678e25dd38f8e1514",5:"aaa3ab23591f87ce7fa5",6:"9241fcb121004879bb56",7:"9e0fe5bdfa11e6cd6dca",8:"e3c89eb894d7c035f9f7",9:"cd1336c39830cc4c109a",10:"9c8cebd900cbe47e56cd"}[e]+".js";var i=setTimeout(f,12e4);function f(){c.onerror=c.onload=null,clearTimeout(i);var r=n[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),n[e]=void 0)}return c.onerror=c.onload=f,a.appendChild(c),t},o.m=e,o.c=t,o.d=function(e,r,t){o.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},o.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(r,"a",r),r},o.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},o.p="/marketing/",o.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
!function(e){var r=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var i,u,f,d=0,s=[];d<t.length;d++)u=t[d],n[u]&&s.push(n[u][0]),n[u]=0;for(i in c)Object.prototype.hasOwnProperty.call(c,i)&&(e[i]=c[i]);for(r&&r(t,c,a);s.length;)s.shift()();if(a)for(d=0;d<a.length;d++)f=o(o.s=a[d]);return f};var t={},n={13:0};function o(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.e=function(e){var r=n[e];if(0===r)return new Promise(function(e){e()});if(r)return r[2];var t=new Promise(function(t,o){r=n[e]=[t,o]});r[2]=t;var c=document.getElementsByTagName("head")[0],a=document.createElement("script");a.type="text/javascript",a.charset="utf-8",a.async=!0,a.timeout=12e4,o.nc&&a.setAttribute("nonce",o.nc),a.src=o.p+"static/js/"+({0:"card",1:"game",2:"wechat",3:"message",4:"ewash",5:"evaluation",6:"ecm",7:"activity",8:"recharge",9:"msg",10:"calllog"}[e]||e)+"."+{0:"3621fa47514c89ab6f5e",1:"39f7524cf7b8e8b737c8",2:"f9d19ec4b3ff03678173",3:"108799c9b5a0b2361a97",4:"17d5d8e8e5023c0ef4dd",5:"0c17680da1cc0f794988",6:"2b4e0714179aea2a21c3",7:"eeb506934d60615dcdbd",8:"592425f0cd96d383286c",9:"396c5bb8123ba2181dab",10:"012adc27d4425d824c4b"}[e]+".js";var i=setTimeout(u,12e4);function u(){a.onerror=a.onload=null,clearTimeout(i);var r=n[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),n[e]=void 0)}return a.onerror=a.onload=u,c.appendChild(a),t},o.m=e,o.c=t,o.d=function(e,r,t){o.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},o.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(r,"a",r),r},o.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},o.p="/marketing/",o.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -23,10 +23,10 @@
<!-- 组件引用cdn -->
<script src="//web-1251519181.file.myqcloud.com/components/header.2.0.36.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/card.2.0.10.js"></script><!-- 卡券选择器 -->
<script src="//web-1251519181.file.myqcloud.com/components/card.2.0.12.js"></script><!-- 卡券选择器 -->
<script src="//web-1251519181.file.myqcloud.com/components/store.2.0.01.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/img-preview.2.0.00.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/member-group.2.2.16.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/member-group.2.2.22.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/store-card.2.0.18.js"></script><!-- 门店选择器 -->
<script src="//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.01.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/people.2.0.42.js"></script>
......
{
"name": "marketing1",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"build": "node build/build.js",
"format": "onchange 'test/**/*.js' 'src/**/*.js' 'src/**/*.vue' -- prettier --write {{changed}}"
},
"dependencies": {
"@antv/data-set": "^0.8.9",
"@antv/g2": "^3.2.6",
"@riophae/vue-treeselect": "^0.0.36",
"@tinymce/tinymce-vue": "^1.0.8",
"animate.css": "^3.7.2",
"animated-vue": "^0.5.3",
"axios": "^0.18.0",
"echarts": "^4.1.0",
"element-ui": "^2.4.1",
"packele": "^1.0.5",
"scriptjs": "^2.5.8",
"tinymce": "^4.8.2",
"uuid": "^3.3.2",
"v-charts": "^1.17.8",
"viser-vue": "^2.2.5",
"vue-axios": "^2.1.1",
"vue-qr": "^1.3.8",
"vue-router": "^3.0.1",
"vue-ueditor-wrap": "^1.3.4",
"vue2-editor": "^2.5.0",
"vuedraggable": "^2.16.0",
"vuex": "^3.0.1"
},
"devDependencies": {
"ansi-html": "^0.0.7",
"autoprefixer": "^7.1.2",
"babel-cli": "^6.26.0",
"babel-core": "^6.22.1",
"babel-eslint": "^9.0.0",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-loader": "^7.1.1",
"babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-plugin-transform-vue-jsx": "^3.5.0",
"babel-polyfill": "^6.26.0",
"babel-preset-env": "^1.3.2",
"babel-preset-flow": "^6.23.0",
"babel-preset-stage-2": "^6.22.0",
"chalk": "^2.0.1",
"copy-webpack-plugin": "^4.0.1",
"css-loader": "^0.28.0",
"element-theme-chalk": "^2.4.1",
"eslint": "^5.6.0",
"eslint-config-prettier": "^4.0.0",
"eslint-config-standard": "^12.0.0",
"eslint-friendly-formatter": "^4.0.1",
"eslint-loader": "^2.1.1",
"eslint-plugin-html": "^5.0.0",
"eslint-plugin-import": "^2.14.0",
"eslint-plugin-node": "^7.0.1",
"eslint-plugin-prettier": "^3.0.1",
"eslint-plugin-promise": "^4.0.1",
"eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^4.7.1",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.4",
"friendly-errors-webpack-plugin": "^1.6.1",
"html-webpack-plugin": "^2.30.1",
"localforage": "^1.7.2",
"node-notifier": "^5.1.2",
"node-sass": "^4.9.0",
"onchange": "^5.2.0",
"optimize-css-assets-webpack-plugin": "^3.2.0",
"ora": "^1.2.0",
"portfinder": "^1.0.13",
"postcss-import": "^11.0.0",
"postcss-loader": "^2.0.8",
"postcss-url": "^7.2.1",
"prettier": "^1.16.4",
"rimraf": "^2.6.0",
"sass-loader": "^7.0.3",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"uglifyjs-webpack-plugin": "^1.1.1",
"url-loader": "^0.5.8",
"vue-lazyload": "^1.2.6",
"vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.5.2",
"webpack": "^3.6.0",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-server": "^2.11.3",
"webpack-merge": "^4.1.0"
},
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}
......@@ -328,3 +328,13 @@
.el-table__empty-block{
min-height: 240px;
}
.member-block {
display: block;
height: 50px;
}
.tooltip-icon {
font-weight: inherit;
padding: 2px 0;
border-bottom: 1px dashed #1890ff;
}
\ No newline at end of file
......@@ -156,12 +156,12 @@ export default {
activityList(this.listParams)
.then(res => {
this.loading = false;
const tableList = this.tableList.concat(res.result.result) || [];
const total = res.result.totalCount;
const resList = res.result.result || [];
const tableList = this.tableList.concat(resList);
const total = res.result.totalCount || 0;
this.tableList = tableList;
this.total = total;
this.nomore = total <= tableList.length || total - tableList.length < this.listParams.pagesize; // 没有下一页了
// console.log('total:', total, 'length:', tableList.length, this.nomore);
})
.catch(() => {
this.loading = false;
......
......@@ -2,6 +2,7 @@
<section class="sms-lib">
<div :class="pbSize">
<span class="pr10">选择短信模板(共{{ total }}条)</span><el-input clearable v-model="listParams.search" class="w200" placeholder="请输入名称/内容" @change="LoadTempList"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<slot name="tips" />
</div>
<el-table tooltipEffect="light" :data="smsTempList" style="width: 100%" v-loading="loading" @row-click="rowClick">
<el-table-column :show-overflow-tooltip="false" :width="60" align="center" prop="gicSmsTemplateId">
......
......@@ -23,6 +23,15 @@ export default {
}
},
{
path: 'info/:id',
name: '智能营销详情',
component: () => import(/* webpackChunkName: "ecm" */ '../../views/ecm/form.vue'),
meta: {
type: 'info',
path: '/ecm/list'
}
},
{
path: 'add',
name: '智能营销新增',
component: () => import(/* webpackChunkName: "ecm" */ '../../views/ecm/form.vue'),
......@@ -40,11 +49,21 @@ export default {
}
},
{
path: 'oncelist/:id',
name: '立即发送记录',
component: () => import(/* webpackChunkName: "ecm" */ '../../views/ecm/current-list.vue'),
meta: {
path: '/ecm/list',
type: 'once'
}
},
{
path: 'currentlist/:id',
name: '实时发送记录',
component: () => import(/* webpackChunkName: "ecm" */ '../../views/ecm/current-list.vue'),
meta: {
path: '/ecm/list'
path: '/ecm/list',
type: 'currrent'
}
}
]
......
......@@ -82,7 +82,7 @@
<div class="iik f7" :class="fade">
<div class="iik-item-03"><span>卡券</span></div>
<el-row class="card-row">
<el-col :span="6"><view-item text="使用卡券" :num="dataView.activityCoup.useCnt" numBlue run></view-item></el-col>
<el-col :span="6"><view-item text="活动涉及母券数" :num="dataView.activityCoup.useCnt" numBlue run></view-item></el-col>
<el-col :span="6"><view-item text="投放张数" :num="dataView.activityCoup.volumesCnt"></view-item></el-col>
<el-col :span="6"><view-item text="领取张数" :num="dataView.activityCoup.getCnt"></view-item></el-col>
<el-col :span="6"><view-item text="核销订单数" :num="dataView.activityCoup.cardOrderCnt"></view-item></el-col>
......
......@@ -10,6 +10,15 @@
<el-date-picker :disabled="disabled" :picker-options="pickerOptions" v-model="ruleForm.endDate" value-format="yyyy-MM-dd HH:mm:ss" type="datetime" placeholder="结束日期"></el-date-picker>
</el-form-item>
<el-form-item>
<el-tooltip slot="label" open-delay="200" placement="top">
<div slot="content">可选内容,详细使用内容详见《营销活动运营复盘流程》</div>
<span class="tooltip-icon">会员分组</span>
</el-tooltip>
<div style="width:600px">
<vue-gic-member-group :readonly="disabled" onlyFixedType v-if="initMemberGroup" :defaltSelected="defaltSelected" :height="500" projectName="marketing" @handleDataTransferred="handleDataTransferred" @handleDataLeft="handleDataLeft"></vue-gic-member-group>
</div>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submit">确认{{ isAdd ? '新建' : '保存' }}</el-button>
</el-form-item>
</el-form>
......@@ -50,7 +59,8 @@ export default {
ruleForm: {
name: '',
beginDate: '',
endDate: ''
endDate: '',
memberGroup: ''
},
rules: {
name: [{ required: true, message: '请输入活动名称', trigger: 'change' }],
......@@ -61,6 +71,9 @@ export default {
return Date.now() >= val.getTime() + 24 * 60 * 60 * 1000;
}
},
// 会员分组
defaltSelected: [],
initMemberGroup: false,
isAdd: this.$route.meta.type === 'add',
isEdit: this.$route.meta.type === 'edit'
};
......@@ -102,19 +115,47 @@ export default {
getActivityInfo({ marketingActivityId: this.marketingActivityId })
.then(res => {
const result = res.result || {};
const { name, beginDate, endDate } = result;
const { activityInfo, tagGroupList } = result;
const { name, beginDate, endDate, memberGroup } = activityInfo;
this.ruleForm.name = name;
this.ruleForm.beginDate = formatDateTimeByType(beginDate, 'yyyy-MM-dd-HH-mm-ss');
this.ruleForm.endDate = formatDateTimeByType(endDate, 'yyyy-MM-dd-HH-mm-ss');
this.ruleForm.memberGroup = memberGroup;
this.defaltSelected = tagGroupList;
this.ruleForm.name = name;
this.loading = false;
this.$nextTick(() => {
this.initMemberGroup = true;
});
})
.catch(() => {
this.loading = false;
});
},
// *********会员分组**********
handleDataTransferred(data) {
// 会员分组 情况下 memberSearchDTO 传数组字符串
this.ruleForm.memberGroup = data
.map(v => v.memberTagGroupId)
.filter(v => v)
.join(',');
},
handleDataLeft(selectedData, selectionToRemove) {
// 不可编辑
if (!this.disabled) {
this.ruleForm.memberGroup = selectedData
.map(v => v.memberTagGroupId)
.filter(v => v)
.join(',');
} else {
this.$message.warning('营销活动已生效,分组数据编辑无效');
}
}
},
mounted() {
if (this.isAdd) {
this.initMemberGroup = true;
}
if (this.isEdit) {
this.getInfo();
}
......@@ -130,3 +171,10 @@ export default {
}
};
</script>
<style lang="scss" scoped>
/deep/ .group-set-transfer {
margin: 0;
padding: 0;
}
</style>
......@@ -107,7 +107,7 @@ export default {
this.$store.commit(
'mutations_layoutTips',
`<div class="layout--tips">
<i class="el-icon-info"></i>当天卡券统计报表数据在次日更新
<i class="el-icon-info"></i>卡券统计报表数据每隔3小时更新一次
</div>`
);
},
......
......@@ -9,7 +9,13 @@
<el-button class="fr" type="danger" @click="showDialog('add', {})">卡券销毁</el-button>
</div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%">
<el-table-column :show-overflow-tooltip="true" min-width="120" align="left" prop="cardName" label="卡券名称"></el-table-column>
<el-table-column :show-overflow-tooltip="true" min-width="120" align="left" prop="cardName" label="卡券名称">
<template slot-scope="scope">
<el-tooltip effect="dark" open-delay="200" :content="scope.row.cardId" placement="top-start">
<span style="line-height:22px;">{{ scope.row.cardName }}</span>
</el-tooltip>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" min-width="100" align="left" prop="createTime" label="销毁时间">
<template slot-scope="scope">
<p class="cell-time">
......
......@@ -36,7 +36,13 @@
<p>{{ scope.row.cardType === 0 ? '抵金券' : scope.row.cardType === 1 ? '折扣券' : '兑换券' }}</p>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" min-width="120" align="left" prop="cardName" label="卡券名称"></el-table-column>
<el-table-column :show-overflow-tooltip="true" min-width="120" align="left" prop="cardName" label="卡券名称">
<template slot-scope="scope">
<el-tooltip effect="dark" open-delay="200" :content="scope.row.cardId" placement="top-start">
<span style="line-height:22px;">{{ scope.row.cardName }}</span>
</el-tooltip>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" min-width="120" align="left" prop="fromCardCode" label="转赠卡券代码"></el-table-column>
<el-table-column :show-overflow-tooltip="true" width="140" align="left" prop="cardType" label="转赠状态">
<template slot-scope="scope">
......
......@@ -22,7 +22,7 @@
<h5>{{ item.saleAmount }}</h5>
<p>销售额</p>
</div>
<el-tooltip class="item" effect="dark" content="当日的领取数量\使用数量\核销率\销售额统计数据在次日凌晨更新" :open-delay="300">
<el-tooltip class="item" effect="dark" content="卡券的领取数量\使用数量\核销率\销售额统计数据每隔3小时更新一次" :open-delay="300">
<i style="position:absolute;right:10px;top:10px;cursor:pointer;color:#c0c4cc;font-size:18px;" class="el-icon-question"></i>
</el-tooltip>
</div>
......
<template>
<el-dialog title="卡券销毁" :visible.sync="show" width="600px" :before-close="close">
<div v-loading="loading">
<div class="dm-title__label--tips" style="padding-bottom: 10px;"><i class="el-icon-warning pr8 warning-color"></i>卡券销毁将不可撤回,请注意确认操作。</div>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="120px" class="pt20">
<el-form-item label="选择卡券" prop="cardId">
<el-button v-show="!ruleForm.cardId" @click="showCardDialog = true">选择卡券</el-button>
<div v-show="ruleForm.cardId">
{{ ruleForm.cardName }}
<el-button v-if="type === 'add'" type="text" @click="cleanCard" class="ml10">删除</el-button>
</div>
</el-form-item>
<el-form-item label="销毁方式" prop="destoryMode">
<el-radio-group :disabled="type !== 'add'" v-model="ruleForm.destoryMode">
<el-radio :label="0">全部销毁</el-radio>
<el-radio :label="1">部分销毁</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="type === 'add'" label="导入券码文件" prop="fileId">
<div>
<!-- eslint-disable-nextline -->
<div v-if="ruleForm.fileId" class="inline-block">已导入</div>
<file v-if="!ruleForm.fileId" :noUse="!ruleForm.destoryMode" needExtraParams :paramsObj="{ destoryPlanId: ruleForm.destoryPlanId }" ref="fileUpload" class="dash-btn inline-block" label="点击上传" @backImg="backImg" acceptType=".csv" tips="" :url="uploadUrl" width="50" iconClass="el-icon-upload2" /><!-- 上传 -->
<el-button type="text" class="ml10" @click="download">点击下载文件模板</el-button>
</div>
<p style="margin-top:8px;color:#909399;font-size:12px;line-height:1;">券码数量单次最多不超过5000条</p>
<p style="margin-top:8px;color:#909399;font-size:12px;line-height:1;">填写示例:‘123456(英文单引号'+券码编号文本形式)</p>
</el-form-item>
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="close">关闭</el-button>
<el-button v-if="type === 'add'" type="primary" @click="submit">确认销毁</el-button>
</span>
<vue-gic-card appendToBody :showCardDialog="showCardDialog" @selectCard="selectCard" :cardLimit="-1" :cardType="null"></vue-gic-card>
</el-dialog>
</template>
<script>
import { _debounce } from '@/utils/index';
import file from '@/components/upload/file';
import { getCoupDestoryDetail, importDestoryCoupCode, saveCoupDestoryPlan, downloadDestroyCodeTemplate } from '@/service/api/cardApi.js';
export default {
name: 'destory-dialog',
props: {
show: {
type: Boolean,
default: false
},
type: {
type: String,
default: 'add' // add edit
},
destoryItem: {
type: Object,
default: () => {}
}
},
data() {
// 部分销毁必传
const checkFileId = (rule, value, callback) => {
if (this.ruleForm.destoryMode && !value) {
return callback(new Error(rule.message));
}
callback();
};
return {
loading: false,
uploadUrl: importDestoryCoupCode,
showCardDialog: false,
ruleForm: {
destoryPlanId: '',
cardId: '',
cardName: '',
destoryMode: 0,
fileId: ''
},
rules: {
cardId: [{ required: true, message: '请选择卡券', trigger: 'change' }],
destoryMode: [{ required: true, message: '请选择销毁方式', trigger: 'change' }],
fileId: [{ validator: checkFileId, message: '请上传文件', trigger: 'change' }]
}
};
},
watch: {
show(val) {
if (val) {
if (this.type === 'add') {
this.loading = true;
getCoupDestoryDetail({})
.then(res => {
this.loading = false;
this.ruleForm.destoryPlanId = res.result;
})
.catch(() => {
this.loading = false;
});
} else {
this.ruleForm = { ...this.destoryItem };
}
}
}
},
components: {
file
},
methods: {
download() {
window.location = downloadDestroyCodeTemplate;
},
close() {
this.$refs.ruleForm.resetFields();
this.$emit('update:show', false);
},
submit: _debounce(function() {
if (this.loading) {
return;
}
this.$refs.ruleForm.validate(valid => {
if (!valid) {
return;
}
this.loading = true;
let params = { ...this.ruleForm };
delete params.fileId;
saveCoupDestoryPlan(params)
.then(res => {
this.loading = false;
this.$message({ message: '操作成功', type: 'success' });
this.close();
this.$emit('refresh');
})
.catch(() => {
this.loading = false;
});
});
}),
cleanCard() {
this.ruleForm.cardId = '';
this.ruleForm.cardName = '';
this.$refs.ruleForm.validateField('cardId');
},
//选择卡券后置
selectCard(val) {
if (val) {
this.ruleForm.cardId = val.coupCardId;
this.ruleForm.cardName = val.cardName;
this.$refs.ruleForm.validateField('cardId');
}
this.showCardDialog = false;
},
// ****上传图片***
upload() {
this.$refs.fileUpload.$el.querySelector('input').click();
},
backImg(res) {
this.ruleForm.fileId = new Date().getTime(); // 代表以及上传过文件
}
}
};
</script>
<style lang="scss" scoped>
/deep/ .dash-btn .el-button {
width: 174px;
border-style: dashed;
border-radius: 4px;
&:not(.is-disabled) {
background: white;
color: #606266;
border-color: #c0c4cc;
}
&.is-disabled {
color: #c0c4cc;
}
}
.dm-title__label--tips {
background: #fffbe6;
border-color: #ffe58f;
}
</style>
......@@ -27,7 +27,13 @@
</template>
</el-table-column>
<el-table-column width="120" align="left" prop="cardTypeExcel" label="卡券类型"> </el-table-column>
<el-table-column min-width="120" align="left" prop="cardName" label="卡券名称"> </el-table-column>
<el-table-column min-width="120" align="left" prop="cardName" label="卡券名称">
<template slot-scope="scope">
<el-tooltip effect="dark" open-delay="200" :content="scope.row.cardId" placement="top-start">
<span style="line-height:22px;">{{ scope.row.cardName }}</span>
</el-tooltip>
</template>
</el-table-column>
<el-table-column min-width="120" align="left" prop="cardCode" label="卡券券号"> </el-table-column>
<el-table-column min-width="120" align="left" prop="dictName" label="卡券来源"> </el-table-column>
<el-table-column min-width="120" align="left" prop="attentionStatus" label="关注状态"> </el-table-column>
......
......@@ -38,9 +38,9 @@
</p>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" min-width="120" header-align="left" align="left" prop="clerkId" label="会员信息">
<el-table-column :show-overflow-tooltip="true" min-width="140" header-align="left" align="left" prop="clerkId" label="会员信息">
<template slot-scope="scope">
<a :href="'/member/#/wechatmemberDetail?memberId=' + scope.row.memberId" target="_blank">
<a class="member-block" :href="'/member/#/wechatmemberDetail?memberId=' + scope.row.memberId" target="_blank">
<img class="vertical-middle table__avatar--40" :src="scope.row.thirdimgurl || defaultAvatar" width="60" height="60" />
<div class="inline-block vertical-middle">
<p class="table-name--ellipsis">{{ scope.row.thirdName || scope.row.memberName || '--' }}</p>
......@@ -59,14 +59,16 @@
</el-table-column>
<el-table-column min-width="100" align="left" prop="receiveTime" label="卡券名称">
<template slot-scope="scope">
<template v-if="scope.row.gicCouponType === 1">
<router-link :to="`/ewash/info/${scope.row.coupCardId}`" target="_blank">{{ scope.row.cardName }}</router-link>
<!-- <p class="blue" @click="$router.push('/ewash/info/' + scope.row.coupCardId)">{{ scope.row.cardName }}</p> -->
</template>
<template v-else>
<router-link :to="`/card/info/${scope.row.coupCardId}`" target="_blank">{{ scope.row.cardName }}</router-link>
<!-- <p class="blue" @click="$router.push('/card/info/' + scope.row.coupCardId)">{{ scope.row.cardName }}</p> -->
</template>
<el-tooltip effect="dark" open-delay="200" :content="scope.row.coupCardId" placement="top-start">
<template v-if="scope.row.gicCouponType === 1">
<router-link :to="`/ewash/info/${scope.row.coupCardId}`" target="_blank">{{ scope.row.cardName }}</router-link>
<!-- <p class="blue" @click="$router.push('/ewash/info/' + scope.row.coupCardId)">{{ scope.row.cardName }}</p> -->
</template>
<template v-else>
<router-link :to="`/card/info/${scope.row.coupCardId}`" target="_blank">{{ scope.row.cardName }}</router-link>
<!-- <p class="blue" @click="$router.push('/card/info/' + scope.row.coupCardId)">{{ scope.row.cardName }}</p> -->
</template>
</el-tooltip>
</template>
</el-table-column>
<el-table-column width="125" align="left" prop="receiveTime" label="卡券代码">
......
......@@ -15,7 +15,10 @@
</el-table-column>
<el-table-column min-width="120" align="left" prop="cardName" label="卡券名称">
<template slot-scope="scope">
<p style="line-height:22px;">{{ scope.row.cardName }}</p>
<el-tooltip effect="dark" open-delay="200" :content="scope.row.coupCardId" placement="top-start">
<span style="line-height:22px;">{{ scope.row.cardName }}</span>
</el-tooltip>
<br />
<p class="fz13 gray" style="line-height:20px;">{{ scope.row.subName }}</p>
</template>
</el-table-column>
......
......@@ -94,6 +94,7 @@ export default {
},
isEdit: this.$route.meta.type === 'edit',
isAdd: this.$route.meta.type === 'add',
isInfo: this.$route.meta.type === 'info',
// 人群筛选器可传参数
sceneValue: 'member', // 场景值
useId: '', // 模板id
......@@ -225,7 +226,7 @@ export default {
const consumTrigger = res.result.consumTrigger;
this.enabledMessageState = res.result.enabledMessageState || 0;
this.xxSysp.goodsEnable = res.result.goodsEnable || false; // 是否支持商品选择器
if (result && this.isEdit) {
if (result && !this.isAdd) {
this.creatorId = res.result.ecmDTO.creatorId;
this.ecmPlanId = this.form.ecmPlanId = result.ecmPlanId || '';
this.form.ecmPlanName = result.ecmPlanName;
......@@ -860,17 +861,12 @@ export default {
props: ['ppp']
});
new Profile().$mount('#mount-point');
// var Profile = Vue.extend({
// template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>',
// data: function() {
// return {
// firstName: 'Walter',
// lastName: 'White',
// alias: 'Heisenberg'
// };
// }
// });
this.$store.commit(
'mutations_layoutTips',
`<div class="layout--tips">
<i class="el-icon-info"></i>营销对象为所有会员,包括微信会员、POS会员以及微信粉丝。
</div>`
);
},
created() {
// 设置面包屑
......@@ -880,5 +876,8 @@ export default {
}
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '智能营销', path: '/ecm' }, { name: breadcrumbName, path: '' }]); // eslint-disable-line
this.listTemplateVariables();
},
beforeDestroy() {
this.$store.commit('mutations_layoutTips', '');
}
};
<template>
<section class="dm-wrap" v-loading="loading">
<div class="pb22 clearfix">
<el-select class="dm-select" clearable="" v-model="listParams.effectType" placeholder="选择时效" @change="search">
<el-option v-for="(v, i) in effectTypeOption" :key="i" :label="v.label" :value="v.value"></el-option>
</el-select>
<el-select class="dm-select" clearable v-model="listParams.marketingType" placeholder="选择营销方式" @change="search">
<el-option v-for="(v, i) in marketingTypeOptions" :key="i" :label="v.label" :value="v.value"></el-option>
</el-select>
<activity-select class="vertical-middle w150 mr5" :actId.sync="listParams.marketingActivityId" onlySelect @actUpdate="search"></activity-select>
<el-select class="dm-select" clearable v-model="listParams.onlineStatus" placeholder="选择上线状态" @change="search">
<el-option v-for="(v, i) in onlineOptions" :key="i" :label="v.label" :value="v.value"></el-option>
</el-select>
<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('/ecm/add')">新建计划</el-button>
</div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%" element-loading-text="拼命加载中">
<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">
<dm-delete v-if="scope.row.onlineStatus === 1 && scope.row.canEdit !== false" @confirm="offlineEcmPlan(scope.row)" tips="是否下线该计划?">
<el-button type="text">下线</el-button>
</dm-delete>
<el-button type="text" v-if="scope.row.canEdit !== false" @click="editData(scope.row)">编辑</el-button>
<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>
<el-button type="text" @click="toRecord(scope.row)">记录</el-button>
</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>
</template>
<script>
import activitySelect from '@/components/activity-select';
import { loadEcmList, deleteEcm, offlineEcmPlan } from '@/service/api/ecmApi.js';
const marketingTypeOptions = [{ value: '', label: '所有发送类型' }, { value: 'card', label: '卡券营销' }, { value: 'message', label: '短信营销' }, { value: 'teletext', label: '图文营销' }, { value: 'text', label: '文本营销' }, { value: 'teltask', label: '话务' }, { value: 'image', label: '微信图片' }]; // eslint-disable-line
export default {
name: 'ecm',
data() {
return {
effectTypeOption: [{ value: '', label: '所有时效' }, { value: 0, label: '实时' }, { value: 1, label: '定时' }], // eslint-disable-line
onlineOptions: [{ value: '', label: '所有上线状态' }, { value: 0, label: '待上线' }, { value: 1, label: '已上线' }, { value: 2, label: '已下线' }], // eslint-disable-line
marketingTypeOptions,
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', fixed: 'left' },
{
label: '时效',
prop: 'effectType',
width: '160',
align: 'left',
formatter(row) {
return row.effectType ? `<span><i class="el-icon-time fz18 vertical-middle"></i><span class="vertical-middle"> 每天${row.effectTime}:00</span></span>` : '实时';
}
},
{ label: '营销方式', prop: 'marketingType', minWidth: '160', align: 'left' },
{
label: '营销活动',
prop: 'marketingActivityName',
width: '160',
align: 'left',
formatter(row) {
return row.marketingActivityName || '--';
}
},
{ label: '营销人次', prop: 'timesForPeople', width: '160', align: 'left' },
{
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;
}
}
],
tableList: []
};
},
components: {
activitySelect
},
created() {
this.loadEcmList();
this.$store.commit('aside_handler', false);
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '智能营销', path: '/ecm' }]); // eslint-disable-line
},
methods: {
search() {
this.listParams.currentPage = 1;
this.loadEcmList();
},
handleSizeChange(val) {
this.listParams.pageSize = val;
this.loadEcmList();
},
handleCurrentChange(val) {
this.listParams.currentPage = val;
this.loadEcmList();
},
async loadEcmList() {
this.loading = true;
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('/ecm/edit/' + row.ecmPlanId);
},
// 记录
toRecord(row) {
this.$router.push({ path: `/ecm/${row.effectType ? 'batchlist' : 'currentlist'}/${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.loadEcmList();
} 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.loadEcmList();
} else {
this.$tips({ type: 'error', message: res.message || '下线失败!' });
}
} catch (err) {
this.$tips({ type: 'error', message: '下线失败!' });
}
}
}
};
</script>
......@@ -2,7 +2,7 @@
<div class="dm-integral__item__wrap">
<!-- {{ item.integralType }} -->
<template v-if="item.integralType === 1">
<span class="fz16">赠送积分<span class="fz12 gray ml20">* 仅支持给认证会员赠送积分</span></span>
<span class="fz16">赠送积分<span class="fz12 gray ml20">* 仅支持给开卡会员赠送积分</span></span>
<p class="mt15">
<span class="fz24 mr5 primary-font-color">{{ item.integralCount }}</span>
<span>积分</span>
......
......@@ -16,14 +16,16 @@
<div class="dm-marketing__content__item" v-for="(v, i) in list" :key="i">
<i class="dm-marketing__content--index">{{ i + 1 }}</i>
<component :is="v.comName" :item="v.item" :isSupportVar="isSupportVar"></component>
<i class="el-icon-edit dm-marketing__opt--icon" v-if="v.comName === 'item-teltask' || v.comName === 'item-text' || v.comName === 'item-wxa' || v.comName === 'item-integral'" @click="editItem(v)"></i>
<dm-delete @confirm="delItem(v)">
<i class="el-icon-delete dm-marketing__opt--icon"></i>
</dm-delete>
<template v-if="!readOnly">
<i class="el-icon-edit dm-marketing__opt--icon" v-if="v.comName === 'item-teltask' || v.comName === 'item-text' || v.comName === 'item-wxa' || v.comName === 'item-integral'" @click="editItem(v)"></i>
<dm-delete @confirm="delItem(v)">
<i class="el-icon-delete dm-marketing__opt--icon"></i>
</dm-delete>
</template>
</div>
</div>
</div>
<div class="dm-marketing__opt--wrap" @mouseleave="optShow = false">
<div v-if="!readOnly" class="dm-marketing__opt--wrap" @mouseleave="optShow = false">
<i class="el-icon-plus dm-marketing__opt--icon--bottom" v-if="list.length && list.length < maxEventCount" @mouseover="optShow = true"></i>
<transition name="fade">
<opt @addItem="addItem" :options="options" v-if="list.length && list.length < maxEventCount && optShow" style="margin:0px 0 0 15px;position:relative;top:10px;"></opt>
......@@ -118,6 +120,11 @@ export default {
// 图文 实时发送这个参数为true,过滤图文仅要单图文
type: Boolean,
default: false
},
readOnly: {
// 只读
type: Boolean,
default: false
}
},
data() {
......
......@@ -44,8 +44,8 @@
</a>
</template>
</el-table-column>
<el-table-column width="60" align="left" label="名次" prop="memberPhone"></el-table-column>
<el-table-column :min-width="100" align="left" label="玩游戏时间" prop="createTime">
<el-table-column min-width="150" align="left" label="手机号" prop="memberPhone"></el-table-column>
<el-table-column min-width="120" align="left" label="玩游戏时间" prop="createTime">
<template slot-scope="scope">
<p class="cell-time">
{{ formatDateTimeByType(scope.row.createTime, 'yyyy-MM-dd-HH-mm-ss', true).y }}<br />
......
......@@ -26,7 +26,9 @@
</el-form>
<p class="title mb15 mt40">短信模板设置</p>
<div class="dm-title__label--tips" style="margin-top:15px;margin-bottom:20px;"><i class="el-icon-warning pr8 warning-color"></i>短信运营商限制:为避免骚扰用户,营销短信只允许在8点到22点发送</div>
<sms-temp pbSize="pb15" :activeId.sync="ruleForm.gicSmsTemplateId" @emitSmsItemInfo="onSmsItemInfo"></sms-temp>
<sms-temp pbSize="pb15" :activeId.sync="ruleForm.gicSmsTemplateId" @emitSmsItemInfo="onSmsItemInfo">
<span slot="tips" class="fz12 gray">* 请注意若发送的短信模板中包含会员变量,但发送对象无该变量时则显示横杆“-”</span>
</sms-temp>
<div class="text-center">
<el-button type="primary" @click="submitForm">提 交</el-button>
<el-button @click="$router.go(-1)">返 回</el-button>
......
......@@ -94,7 +94,8 @@
<div class="dm-wrap" v-loading="loading">
<div class="pb22">
<div slot="header" class="clearfix">
<el-date-picker v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="consumeRecord"></el-date-picker>
<el-date-picker :pickerOptions="pickerOptions" v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="consumeRecord"></el-date-picker>
<span class="fz12 gray">* 此处仅支持筛选近半年的统计数据</span>
</div>
</div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%">
......@@ -146,7 +147,7 @@ export default {
},
pickerOptions: {
disabledDate(val) {
return Date.now() >= val.getTime() + 3 * 30 * 24 * 60 * 60 * 1000;
return Date.now() >= val.getTime() + 6 * 30 * 24 * 60 * 60 * 1000;
}
}
};
......
......@@ -18,6 +18,7 @@
<el-button v-else class="fr" type="primary" @click="$router.push('/wechat/record/add')">新建群发</el-button>
</div>
<el-table tooltipEffect="light" :data="recordList" style="width: 100%" row-key="sendTime">
<el-table-column min-width="100" align="left" prop="clerkName" label="用户名称" fixed="left"></el-table-column>
<el-table-column :min-width="100" align="left" label="时间" prop="createTime">
<template slot-scope="scope">
<p class="cell-time">
......@@ -25,6 +26,24 @@
</p>
</template>
</el-table-column>
<el-table-column :min-width="120" align="left" label="标题">
<template slot-scope="{ row }">
<template v-if="row.content && row.content.length > 10">
<el-popover placement="top-start" width="200" open-delay="200" trigger="hover">
<span class="word-break-all" v-html="row.content"></span>
<div class="ellipsis" slot="reference" v-html="row.content"></div>
</el-popover>
</template>
<template v-else-if="row.mediaUrl">
<p v-if="row.couponType === 1">
<i class="iconfont icon-qiapian- blue" />
<a :href="row.mediaUrl" target="_blank">{{ row.content }}</a>
</p>
<a v-else :href="row.mediaUrl" target="_blank">{{ row.content }}</a>
</template>
<span v-else>{{ row.content }}</span>
</template>
</el-table-column>
<el-table-column v-for="(v, i) in recordHeader" :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" :fixed="v.fixed" :render-header="v.renderHeader"></el-table-column>
<el-table-column label="状态" align="left" prop="timesStatus" width="160px">
<template slot-scope="scope">
......@@ -88,49 +107,48 @@ export default {
// return date.y + '\n' + date.h;
// }
// },
{ label: '用户名称', prop: 'clerkName', align: 'left', fixed: 'left', minWidth: '100' },
{
label: '标题',
prop: 'content',
tooltip: false,
align: 'left',
formatter: function(row, column, cellValue, index) {
let temp = null;
if (row.mediaUrl) {
if (row.couponType === 1) {
temp = (
<p>
<i class="iconfont icon-qiapian- blue" />
<a href={row.mediaUrl} target="_blank">
{' '}
{row.content}
</a>
</p>
);
} else {
temp = (
<a href={row.mediaUrl} target="_blank">
{row.content}
</a>
);
}
} else {
temp = <span>{row.content}</span>;
}
if (row.content && row.content.length > 10) {
return (
<el-popover placement="top-start" width="200" trigger="hover">
<span class="word-break-all">{row.content}</span>
<div class="ellipsis" slot="reference">
{temp}
</div>
</el-popover>
);
} else {
return temp;
}
}
},
// {
// label: '标题',
// prop: 'content',
// tooltip: false,
// align: 'left',
// formatter: function(row, column, cellValue, index) {
// let temp = null;
// if (row.mediaUrl) {
// if (row.couponType === 1) {
// temp = (
// <p>
// <i class="iconfont icon-qiapian- blue" />
// <a href={row.mediaUrl} target="_blank">
// {' '}
// {row.content}
// </a>
// </p>
// );
// } else {
// temp = (
// <a href={row.mediaUrl} target="_blank">
// {row.content}
// </a>
// );
// }
// } else {
// temp = <span>{row.content}</span>;
// }
// if (row.content && row.content.length > 10) {
// return (
// <el-popover placement="top-start" width="200" trigger="hover">
// <span class="word-break-all">{row.content}</span>
// <div class="ellipsis" slot="reference">
// {temp}
// </div>
// </el-popover>
// );
// } else {
// return temp;
// }
// }
// },
{
label: '营销活动',
prop: 'marketingActivityName',
......
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