Commit a3ee23bd by crushh

update: dist

parents f55ede6a 8e2ed188
<!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></title><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//at.alicdn.com/t/font_688955_2dxzdzrb3a7.css><script src=//at.alicdn.com/t/font_688955_2dxzdzrb3a7.js></script><link rel=stylesheet href=//at.alicdn.com/t/font_3229694_f4zx0uhc8y.css><script src=//at.alicdn.com/t/font_3229694_f4zx0uhc8y.js></script><link src=//at.alicdn.com/t/font_2859043_udehp133w1.css><script src=//at.alicdn.com/t/font_2859043_udehp133w1.js></script><link rel=stylesheet href=//at.alicdn.com/t/font_2996579_dv9vctk5vdt.css><script src=//at.alicdn.com/t/font_2996579_dv9vctk5vdt.js></script><link href=/marketing/static/css/main.99b199cd4220bd4715e83acca8b645b2.css rel=stylesheet></head><body><div id=app><div class=el-loading-spinner style="width: 98%;"><svg viewBox="25 25 50 50" class=circular><circle cx=50 cy=50 r=20 fill=none class=path></circle></svg></div></div><script>(function() {
<!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></title><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//at.alicdn.com/t/font_688955_2dxzdzrb3a7.css><script src=//at.alicdn.com/t/font_688955_2dxzdzrb3a7.js></script><link rel=stylesheet href=//at.alicdn.com/t/font_3229694_f4zx0uhc8y.css><script src=//at.alicdn.com/t/font_3229694_f4zx0uhc8y.js></script><link src=//at.alicdn.com/t/font_2859043_udehp133w1.css><script src=//at.alicdn.com/t/font_2859043_udehp133w1.js></script><link rel=stylesheet href=//at.alicdn.com/t/font_2996579_dv9vctk5vdt.css><script src=//at.alicdn.com/t/font_2996579_dv9vctk5vdt.js></script><link href=/marketing/static/css/main.611e568b61fe3184758e81eca2d39e5c.css rel=stylesheet></head><body><div id=app><div class=el-loading-spinner style="width: 98%;"><svg viewBox="25 25 50 50" class=circular><circle cx=50 cy=50 r=20 fill=none class=path></circle></svg></div></div><script>(function() {
var src = '/component/static/import-component.js?timestrap=' + new Date().getTime();
var host = window.location.host;
host = host.indexOf('localhost') > -1 || host.indexOf('192.168') > -1 ? 'gicdev.demogic.com' : host;
document.write('<script src="//' + host + src + '"><\/script>');
})();</script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script src=//web-1251519181.file.myqcloud.com/components/track.1.0.4.js></script><script src=//web-1251519181.file.myqcloud.com/components/upload-file.1.0.10.js></script><script type=text/javascript src=/marketing/static/js/manifest.b21502bd872c037825c7.js></script><script type=text/javascript src=/marketing/static/js/vendor.24a60bdab11def7b4f96.js></script><script type=text/javascript src=/marketing/static/js/main.5c6ae1dffd16b0f20cdc.js></script></body></html>
\ No newline at end of file
})();</script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script src=//web-1251519181.file.myqcloud.com/components/track.1.0.4.js></script><script src=//web-1251519181.file.myqcloud.com/components/upload-file.1.0.10.js></script><script type=text/javascript src=/marketing/static/js/manifest.dc0a71ce5d3c66ad0ac6.js></script><script type=text/javascript src=/marketing/static/js/vendor.24a60bdab11def7b4f96.js></script><script type=text/javascript src=/marketing/static/js/main.5c6ae1dffd16b0f20cdc.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.
!function(e){var a=window.webpackJsonp_marketing;window.webpackJsonp_marketing=function(n,o,c){for(var d,f,i,u=0,b=[];u<n.length;u++)f=n[u],r[f]&&b.push(r[f][0]),r[f]=0;for(d in o)Object.prototype.hasOwnProperty.call(o,d)&&(e[d]=o[d]);for(a&&a(n,o,c);b.length;)b.shift()();if(c)for(u=0;u<c.length;u++)i=t(t.s=c[u]);return i};var n={},r={25:0};function t(a){if(n[a])return n[a].exports;var r=n[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,t),r.l=!0,r.exports}t.e=function(e){var a=r[e];if(0===a)return new Promise(function(e){e()});if(a)return a[2];var n=new Promise(function(n,t){a=r[e]=[n,t]});a[2]=n;var o=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.timeout=12e4,t.nc&&c.setAttribute("nonce",t.nc),c.src=t.p+"static/js/"+({0:"card",1:"game",2:"wechat",3:"ecm",4:"message",5:"ewash",6:"scan",7:"recharge",8:"activity",9:"signIn",10:"evaluation",11:"cdKey",12:"popup",13:"msg",15:"calllog"}[e]||e)+"."+{0:"afc9df433429579944dd",1:"ca211db21f8ed7dab03b",2:"7e196ea11ca490efdaeb",3:"ae976d8752054a1335b4",4:"2074258e42312005562a",5:"396241348d17af8aa0b7",6:"4b71e5e25afe4d4d4b50",7:"a9bbd120fabf848f5798",8:"8d9c6b1eac82ed1a52b3",9:"648d4e9bf392d8980030",10:"e6de6c45acf160e8fe99",11:"f44b4a5a120f0f2cad59",12:"a4ca4f06f8fee1f54722",13:"43324dd45b68dd402d28",14:"9eada43119f62aed5436",15:"410d734e15e42bc183a8",16:"226d196e7c18a52ad28f",17:"f452153f5da885444f89",18:"3ba3b70d72322dd6fc56",19:"8ba3e4166cbd0c8327e5",20:"5dbfdb8d97c0910fdde0",21:"ad98c8e9d3749f2f1097",22:"565b19a2c1b633ae81e9"}[e]+".js";var d=setTimeout(f,12e4);function f(){c.onerror=c.onload=null,clearTimeout(d);var a=r[e];0!==a&&(a&&a[1](new Error("Loading chunk "+e+" failed.")),r[e]=void 0)}return c.onerror=c.onload=f,o.appendChild(c),n},t.m=e,t.c=n,t.d=function(e,a,n){t.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(a,"a",a),a},t.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},t.p="/marketing/",t.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
!function(e){var a=window.webpackJsonp_marketing;window.webpackJsonp_marketing=function(n,c,o){for(var d,f,i,u=0,b=[];u<n.length;u++)f=n[u],r[f]&&b.push(r[f][0]),r[f]=0;for(d in c)Object.prototype.hasOwnProperty.call(c,d)&&(e[d]=c[d]);for(a&&a(n,c,o);b.length;)b.shift()();if(o)for(u=0;u<o.length;u++)i=t(t.s=o[u]);return i};var n={},r={25:0};function t(a){if(n[a])return n[a].exports;var r=n[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,t),r.l=!0,r.exports}t.e=function(e){var a=r[e];if(0===a)return new Promise(function(e){e()});if(a)return a[2];var n=new Promise(function(n,t){a=r[e]=[n,t]});a[2]=n;var c=document.getElementsByTagName("head")[0],o=document.createElement("script");o.type="text/javascript",o.charset="utf-8",o.async=!0,o.timeout=12e4,t.nc&&o.setAttribute("nonce",t.nc),o.src=t.p+"static/js/"+({0:"card",1:"game",2:"wechat",3:"ecm",4:"message",5:"ewash",6:"scan",7:"recharge",8:"activity",9:"signIn",10:"evaluation",11:"cdKey",12:"popup",13:"msg",15:"calllog"}[e]||e)+"."+{0:"e903c53e4003288739b8",1:"75393911b32eb0c3bc38",2:"7e196ea11ca490efdaeb",3:"ae976d8752054a1335b4",4:"2074258e42312005562a",5:"396241348d17af8aa0b7",6:"4b71e5e25afe4d4d4b50",7:"a9bbd120fabf848f5798",8:"8d9c6b1eac82ed1a52b3",9:"38bd42de49d0c5d1baca",10:"e6de6c45acf160e8fe99",11:"f44b4a5a120f0f2cad59",12:"a4ca4f06f8fee1f54722",13:"43324dd45b68dd402d28",14:"de9c24d932bd3a52e5a1",15:"410d734e15e42bc183a8",16:"d289dd364cecac713aa8",17:"ae448793912623b7797d",18:"5de42ed43ebf08ccd3f8",19:"eabfc990ecc899db5ce0",20:"fd948de34acfd10a8897",21:"ad98c8e9d3749f2f1097",22:"565b19a2c1b633ae81e9"}[e]+".js";var d=setTimeout(f,12e4);function f(){o.onerror=o.onload=null,clearTimeout(d);var a=r[e];0!==a&&(a&&a[1](new Error("Loading chunk "+e+" failed.")),r[e]=void 0)}return o.onerror=o.onload=f,c.appendChild(o),n},t.m=e,t.c=n,t.d=function(e,a,n){t.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(a,"a",a),a},t.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},t.p="/marketing/",t.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
......@@ -120,3 +120,6 @@ export const aiOutboundStoreGroupSplit = params => requests('/api-marketing/stat
// 活动转换门店分组数据
export const aiTransformStoreGroupSplit = params => requests('/api-marketing/statistics/ai-transform-store-group-split', params, true, false, 'get');
// 客户明细导出
export const exportAiCustomDetail = '/api-marketing/statistics/export-ai-custom-detail';
......@@ -14,3 +14,6 @@ export const saveStoreSignSetting = params => requests(PREFIX + 'save', params);
export const getStoreSignDetail = params => requests(PREFIX + 'get-detail', params);
// 门店签到计划删除
export const delSignPlan = params => requests(PREFIX + 'del-sign-plan', params);
// 门店签到导出
export const exportStoreSign = config.api + PREFIX + 'export-store-sign';
......@@ -2,6 +2,7 @@
<div class="data-detail">
<div v-if="analyseFlag" class="page-tip">活动转化金额每天更新 1 次</div>
<el-input v-model="search.search" @change="handleCurrentChange(1)" type="text" placeholder="请输入姓名/昵称/手机号/会员卡号" prefix-icon="el-icon-search" clearable class="search-bar"></el-input>
<el-button class="fr" type="primary" icon="iconfont fz14 icon-cp-xiazai" v-if="$getButtonLimit($buttonCode.marketingAiDetailExport)" :limit-code="$buttonCode.marketingAiDetailExport" @click="exportExcel" size="small" :disabled="!total"> 查询结果导出</el-button>
<el-table :data="tableData" v-loading="loading">
<el-table-column label="基本信息" min-width="200px" show-overflow-tooltip fixed="left">
<div slot-scope="{ row }" class="member-info">
......@@ -42,13 +43,14 @@
</div>
</el-table-column>
</el-table>
<vue-gic-export-excel :dialogVisible.sync="dialogVisible" :dataArr="tableData" :type="2" :excelUrl="excelUrl" :params="params" :projectName="projectName"></vue-gic-export-excel>
<dm-pagination v-if="total > 0" background @size-change="handleSizeChange" @current-change="handleCurrentChange" :total="total" :current-page="search.pageNum" :page-size="search.pageSize" :page-sizes="[20, 40, 60, 80]" layout="total, sizes, prev, pager, next"></dm-pagination>
</div>
</template>
<script>
import { formatDateTimeByType } from '@/utils/index.js';
import { getCustomDetail } from '@/service/api/aiApi.js';
import { getCustomDetail, exportAiCustomDetail } from '@/service/api/aiApi.js';
export default {
name: 'AiDataDetail',
......@@ -65,7 +67,10 @@ export default {
},
tableData: [],
total: 0,
loading: false
loading: false,
dialogVisible: false,
excelUrl: '', // 下载数据的地址
params: {} // 传递的参数
};
},
created() {
......@@ -76,6 +81,16 @@ export default {
console.log('mounted3');
},
methods: {
exportExcel() {
this.params = {
search: this.search.search,
analyseFlag: this.analyseFlag ? 1 : 0,
smsFlag: this.showSendTime ? 1 : 0,
activityId: this.search.activityId
};
this.dialogVisible = true;
this.excelUrl = exportAiCustomDetail;
},
getData() {
this.loading = true;
getCustomDetail(this.search)
......
......@@ -39,12 +39,11 @@
<script>
import { formatDateTimeByType } from '@/utils/index.js';
import { getActivityInfo } from '@/service/api/aiApi.js';
import gicNewMemberGroup from '@/components/dm-new-member-group/index.vue';
import ruleFilter from '@/components/dm-new-rule/ruleFilter.vue';
export default {
name: 'ActivityInfo',
components: { gicNewMemberGroup, ruleFilter },
components: { ruleFilter },
data() {
return {
activityInfo: {}
......
<template>
<div class="defineTime">
<p class="tips">自定义时段不少于4个小时</p>
<p class="tips">自定义时段不少于1个小时</p>
<el-form :model="form" ref="defineTime">
<div class="flex" v-for="(v, i) in form.timeRangeList" :key="i">
<el-form-item class="mt10" :prop="'timeRangeList.' + i + '.startTime'" :rules="[{ validator: validateTime(i) }, { validator: validateStarTime(v, i) }]">
......@@ -132,8 +132,8 @@ export default {
let start = new Date(new Date().toLocaleDateString() + ' ' + item.startTime).getTime();
minutes = (end - start) / 60000 + minutes;
});
if (minutes < 240) {
this.$message.error('自定义时段不少于4个小时');
if (minutes < 60) {
this.$message.error('自定义时段不少于1个小时');
return;
}
},
......
......@@ -286,7 +286,6 @@ import activeTime from '@/views/ai/task/components/activeTime.vue';
import tagPop from '@/views/ai/task/tagPop.vue';
import { formatDateTimeByType, _debounce } from '@/utils/index';
import gicNewMemberGroup from '@/components/dm-new-member-group/index.vue';
import ruleFilter from '@/components/dm-new-rule/ruleFilter.vue';
export default {
mixins: [filterAvater],
......@@ -488,7 +487,6 @@ export default {
holidaySense,
activeTime,
LibMessage,
gicNewMemberGroup,
ruleFilter,
tagPop
},
......
......@@ -139,7 +139,6 @@
<script>
import ruleFilter from '@/components/dm-new-rule/ruleFilter.vue';
import gicNewMemberGroup from '@/components/dm-new-member-group/index.vue';
import filterAvater from '@/mixins/filterAvater.js';
import { formatDateTimeByType } from '@/utils/index.js';
import { getActivityDetail, aiDictList, templateList, getSmsTemplateEcho } from '@/service/api/aiApi.js';
......@@ -192,8 +191,7 @@ export default {
this.getActivityDetail(this.$route.params.id);
},
components: {
ruleFilter,
gicNewMemberGroup
ruleFilter
},
filters: {
birthTypeFilter(val) {
......
<template>
<section class="card-record-get" v-loading="recordLoading">
<div class="page-tip">当天的卡券领取记录数据可在隔天下载完整内容</div>
<div class="page-tip">当天的卡券领取记录数据可在隔天下载完整内容<br />导出数据只支持近两年数据</div>
<!-- 条件筛选区 -->
<div class="pb20">
<el-input clearable v-model="listParams.search" style="width:240px" placeholder="请输入会员信息/卡券代码" @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
......@@ -112,7 +112,7 @@
</div>
<div class="ml20">
<el-radio v-model="confirm.radio" :label="1">所有卡券领取时期段导出</el-radio>
<el-date-picker clearable v-model="confirm.dateTime" class="block mt10 mb10" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
<el-date-picker clearable v-model="confirm.dateTime" value-format="timestamp" :picker-options="pickerOptions" class="block mt10 mb10" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="confirmClose">取 消</el-button>
......@@ -128,7 +128,6 @@ import { cardRecordPage, coupcardDestroy, exportReceivedRecordExcel } from '@/se
import cardOrder from './card-order';
import tableMethods from '@/mixins/tableMethods.js';
import filterAvater from '@/mixins/filterAvater.js';
export default {
name: 'record-get',
mixins: [tableMethods, filterAvater],
......@@ -182,7 +181,19 @@ export default {
dialogVisible: false,
excelUrl: '', // 下载数据的地址
params: {}, // 传递的参数
dataArr: []
dataArr: [],
pickerOptions: {
disabledDate: time => {
let y = new Date().getFullYear() - 1;
let isLeap = (0 === y % 4 && 0 === y % 100) || 0 === y % 400;
let days = isLeap ? 366 : 365;
let preY = new Date().getFullYear() - 2;
let preYisLeap = (0 === preY % 4 && 0 === preY % 100) || 0 === preY % 400;
let prevDays = preYisLeap ? 366 : 365;
// let monthDayNum = new Date().getDate() + 1;
return time.getTime() < Date.now() - (days * 8.64e7 + prevDays * 8.64e7) || time.getTime() >= new Date().getTime();
}
}
};
},
computed: {
......
......@@ -177,8 +177,6 @@
<script>
import { formatDateTimeByType } from '@/utils/index.js';
import gicNewMemberGroup from '@/components/dm-new-member-group/index.vue';
const music = new Audio();
export default {
props: {
......@@ -223,9 +221,7 @@ export default {
this.desW = 300;
}
},
components: {
gicNewMemberGroup
},
computed: {
storeParams() {
return !this.isAdd ? { creatorId: this.form.creatorId } : {};
......
......@@ -135,7 +135,6 @@
<script>
import { getPageLink } from '@/service/api/gameApi.js';
import Linktools from '@/components/linktools-fulls/index.vue';
import gicNewMemberGroup from '@/components/dm-new-member-group/index.vue';
export default {
data() {
const filterJsonVal = (rule, value, callback) => {
......@@ -307,8 +306,7 @@ export default {
}
},
components: {
Linktools,
gicNewMemberGroup
Linktools
},
computed: {
storeParams() {
......
......@@ -4,7 +4,9 @@
<el-date-picker class="w250" v-model="pageParams.time" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="refresh"></el-date-picker>
<el-input v-model="pageParams.storeName" class="w300" placeholder="请输入门店名称或门店code" clearable @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-input v-model="pageParams.memberInfo" class="w300" placeholder="会员姓名/手机号/签到计划" clearable @change="refresh"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-button class="fr" type="primary" icon="iconfont fz14 icon-cp-xiazai" v-if="$getButtonLimit($buttonCode.marketingExportSign)" :limit-code="$buttonCode.marketingExportSign" @click="exportExcel" size="small" :disabled="!total"> 查询结果导出</el-button>
</div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%">
<el-table-column :show-overflow-tooltip="true" align="left" prop="createTime" label="签到时间">
<template slot-scope="scope">
......@@ -32,12 +34,13 @@
</el-table-column>
<el-table-column :show-overflow-tooltip="true" align="left" prop="prizeTxt" label="签到福利"></el-table-column>
</el-table>
<vue-gic-export-excel :dialogVisible.sync="dialogVisible" :dataArr="tableList" :type="2" :excelUrl="excelUrl" :params="params" :projectName="projectName"></vue-gic-export-excel>
<dm-pagination v-show="tableList.length" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pageParams.currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="pageParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"></dm-pagination>
</section>
</template>
<script>
import { getPageSignLog } from '@/service/api/storeSign.js';
import { getPageSignLog, exportStoreSign } from '@/service/api/storeSign.js';
import { formatDateTimeByType } from '@/utils/index.js';
export default {
name: 'sign-record',
......@@ -54,7 +57,10 @@ export default {
tableList: [],
// 门店单选
storeName: '',
storeDialog: false
storeDialog: false,
dialogVisible: false,
excelUrl: '', // 下载数据的地址
params: {} // 传递的参数
};
},
created() {
......@@ -85,6 +91,17 @@ export default {
this.loading = false;
}
},
exportExcel() {
const params = { storeName: this.pageParams.storeName, memberInfo: this.pageParams.memberInfo };
if (this.pageParams.time) {
params.startTime = formatDateTimeByType(params.time[0], 'yyyy-MM-dd');
params.endTime = formatDateTimeByType(params.time[1], 'yyyy-MM-dd');
delete params.time;
}
this.params = params;
this.dialogVisible = true;
this.excelUrl = exportStoreSign;
},
refresh() {
this.pageParams.currentPage = '1';
this.fetch();
......
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