Commit 984a6730 by caoyanzhi

Merge branch 'feature/商品选择器' into test

# Conflicts:
#	dist/index.html
#	dist/static/css/main.7c417c0eae1ff92f0366d998858d49ae.css
#	dist/static/css/main.d71c2df8acf2b8c992246ba3b3e4b7b8.css
#	dist/static/css/main.fd6463a737284095d22d8fb2af612605.css
#	dist/static/js/ecm.09c6c06cb3314d6adea6.js
#	dist/static/js/ecm.763c5b056cf0a48875b2.js
#	dist/static/js/ecm.7d4fb175ac675c5a5d74.js
#	dist/static/js/ewash.1ff85c307f9e68524f34.js
#	dist/static/js/ewash.9359f90f8ce4a9d9d8bf.js
#	dist/static/js/ewash.feb0ffd2cfb795f0d746.js
#	dist/static/js/game.f69e799a4fcade301a3c.js
#	dist/static/js/scan.0ddf1cf110c21976bb32.js
#	dist/static/js/scan.952dd795058a8320af99.js
#	dist/static/js/scan.cc6d123e6bb64892a5b5.js
#	dist/static/js/signIn.84b91fefa20d9462504c.js
parents 9602ec42 e9a59b84
<<<<<<< HEAD
<!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/c/font_3380872_b9qubgdi1ic.css><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 rel=stylesheet href=//at.alicdn.com/t/c/font_3380872_hsi60jw7bi7.css><script src=//at.alicdn.com/t/c/font_3380872_hsi60jw7bi7.js></script><link href=/marketing/static/css/main.fd6463a737284095d22d8fb2af612605.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/c/font_3380872_b9qubgdi1ic.css><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 rel=stylesheet href=//at.alicdn.com/t/c/font_3380872_hsi60jw7bi7.css><script src=//at.alicdn.com/t/c/font_3380872_hsi60jw7bi7.js></script><link href=/marketing/static/css/main.7c417c0eae1ff92f0366d998858d49ae.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() {
>>>>>>> feature/商品选择器
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 ? 'www.gicdev.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.022c4791d42578646bf7.js></script><script type=text/javascript src=/marketing/static/js/vendor.24a60bdab11def7b4f96.js></script><script type=text/javascript src=/marketing/static/js/main.f5db8279715a323a78b5.js></script></body></html>
\ No newline at end of file
<<<<<<< HEAD
})();</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.022c4791d42578646bf7.js></script><script type=text/javascript src=/marketing/static/js/vendor.24a60bdab11def7b4f96.js></script><script type=text/javascript src=/marketing/static/js/main.f5db8279715a323a78b5.js></script></body></html>
=======
})();</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.87d197d29c9a71c11147.js></script><script type=text/javascript src=/marketing/static/js/vendor.e0ebad0c4fec1c8f90bf.js></script><script type=text/javascript src=/marketing/static/js/main.df885165c88c0c95b3e9.js></script></body></html>
>>>>>>> feature/商品选择器
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 c=window.webpackJsonp;window.webpackJsonp=function(n,a,o){for(var f,d,i,b=0,u=[];b<n.length;b++)d=n[b],r[d]&&u.push(r[d][0]),r[d]=0;for(f in a)Object.prototype.hasOwnProperty.call(a,f)&&(e[f]=a[f]);for(c&&c(n,a,o);u.length;)u.shift()();if(o)for(b=0;b<o.length;b++)i=t(t.s=o[b]);return i};var n={},r={25:0};function t(c){if(n[c])return n[c].exports;var r=n[c]={i:c,l:!1,exports:{}};return e[c].call(r.exports,r,r.exports,t),r.l=!0,r.exports}t.e=function(e){var c=r[e];if(0===c)return new Promise(function(e){e()});if(c)return c[2];var n=new Promise(function(n,t){c=r[e]=[n,t]});c[2]=n;var a=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:"1bfc28cdfdbd925237d8",1:"4bae1568fe34f4ea4acc",2:"78a893a3285592901952",3:"09c6c06cb3314d6adea6",4:"a11ede89dfa4f6dd621b",5:"1ff85c307f9e68524f34",6:"cc6d123e6bb64892a5b5",7:"fed72fe4c42bb8d8d839",8:"442031faa4ebb0041149",9:"84b91fefa20d9462504c",10:"0756ab734cd7ddc9e1b3",11:"f0c61288632fe8432bef",12:"396650af933c0c4e4ae2",13:"200e6bfe2fb2f86c8231",14:"bbf5c3d415a5621fbc43",15:"7e607494d8968aef74ab",16:"3b17d743d502b83d338f",17:"3fcc0f820b45cd11895c",18:"65f42a7dbc2b1236e85b",19:"5bfe603c48f2505b1f58",20:"4b7d606aea3710914c5d",21:"3b70c426e7cb5384d238",22:"6cd16237471f80ad3676"}[e]+".js";var f=setTimeout(d,12e4);function d(){o.onerror=o.onload=null,clearTimeout(f);var c=r[e];0!==c&&(c&&c[1](new Error("Loading chunk "+e+" failed.")),r[e]=void 0)}return o.onerror=o.onload=d,a.appendChild(o),n},t.m=e,t.c=n,t.d=function(e,c,n){t.o(e,c)||Object.defineProperty(e,c,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var c=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(c,"a",c),c},t.o=function(e,c){return Object.prototype.hasOwnProperty.call(e,c)},t.p="/marketing/",t.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.
......@@ -6,8 +6,8 @@ import dmUploadImg from '@/components/upload/img';
import linktools from '@/components/linktools-fulls/index';
import dmUploadAvatar from '@/components/upload/avatar';
import sendPreview from './partials/send-preview';
import { formatDateTimeByType, deepClone, getTimesByReq } from '@/utils/index.js';
import xxSysp_mix from '@/mixins/selector.js'; // 商品选择器方法
import { formatDateTimeByType, /*deepClone,*/ getTimesByReq } from '@/utils/index.js';
// import xxSysp_mix from '@/mixins/selector.js'; // 商品选择器方法
import { listEntepriseWeimobShop, listEntepriseWeimobCoupon } from '@/service/api/commonApi.js';
import { getCardDetail, saveUpdateCard, copyCardDetailService, getCardManualSetting, getCategoryList, getPropertyList, getLatestReptileTime, getPropertyValueList, getWeimobCouponBindCount, getCardEffectiveMode, getStoreWidgetStore, getStoreByCode, importCostStore } from '@/service/api/cardApi.js';
import dmGoodsInput from '@/components/goods-input/index.vue';
......@@ -43,6 +43,7 @@ const initForm = {
startDay: 0,
limitDay: null,
cardExplain: '',
goodsFilterId: '', // 商品选择器id
// image: {
// imgUrl: '',
// code: ''
......@@ -96,7 +97,7 @@ const preventEnter = function(e) {
}
};
export default {
mixins: [xxSysp_mix],
// mixins: [xxSysp_mix],
data() {
const checkSendDateTime = (rule, value, callback) => {
const { sendDateTime, cardEffectiveMode, dateTime, putEffectiveMode } = this.form;
......@@ -151,6 +152,7 @@ export default {
};
const that = this;
return {
goodsEnable: false,
storeUuid: '',
storeUuidCache: '',
// 商场抵金券适用门店-部分门店列表数据
......@@ -749,7 +751,7 @@ export default {
// 支持的品牌-商品选择器
if (res.result.goodsEnable) {
this.xxSysp.goodsEnable = res.result.goodsEnable;
this.goodsEnable = res.result.goodsEnable;
}
// 新增情况下,如果配置了线下门店,默认选中线下门店
......@@ -886,38 +888,41 @@ export default {
}
// 线下适用商品
if (card.goodsSearchDetail && card.goodsFilterId) {
this.xxSysp.goodsFilterId = card.goodsFilterId;
const goodsSearchDetail = JSON.parse(card.goodsSearchDetail || '{}');
this.xxSysp.conditionList = this.xxSysp.conditionList_copy = goodsSearchDetail.conditionList; // ref selector此时放在modal里并没有渲染,之后赋值
this.xxSysp.conditionList = goodsSearchDetail.conditionList; // ref selector此时放在modal里并没有渲染,之后赋值
this.xxSysp.conditionList_copy = deepClone(goodsSearchDetail.conditionList || {}); // 备份数据
this.xxSysp.filterLogicalOperator = goodsSearchDetail.filterLogicalOperator || [];
if (card.gicCouponType == 3 || card.gicCouponType == 4) {
const filterAbbrInfo = (goodsSearchDetail.filterAbbrInfo || []).map(el => {
return el.map((item, index) => {
if (index == 0) {
item.optName = null;
}
// intersect 或者,union 并且,diff 剔除
switch (item.optName) {
case 'union':
item.optName = '或者';
break;
case 'intersect':
item.optName = '并且';
break;
case 'diff':
item.optName = '剔除';
break;
}
return item;
});
});
this.xxSysp.filterAbbrInfo = this.xxSyspLabel(filterAbbrInfo);
} else {
this.xxSysp.filterAbbrInfo = goodsSearchDetail.filterAbbrInfo || [];
}
// if (card.goodsSearchDetail && card.goodsFilterId) {
// this.xxSysp.goodsFilterId = card.goodsFilterId;
// const goodsSearchDetail = JSON.parse(card.goodsSearchDetail || '{}');
// this.xxSysp.conditionList = this.xxSysp.conditionList_copy = goodsSearchDetail.conditionList; // ref selector此时放在modal里并没有渲染,之后赋值
// this.xxSysp.conditionList = goodsSearchDetail.conditionList; // ref selector此时放在modal里并没有渲染,之后赋值
// this.xxSysp.conditionList_copy = deepClone(goodsSearchDetail.conditionList || {}); // 备份数据
// this.xxSysp.filterLogicalOperator = goodsSearchDetail.filterLogicalOperator || [];
// if (card.gicCouponType == 3 || card.gicCouponType == 4) {
// const filterAbbrInfo = (goodsSearchDetail.filterAbbrInfo || []).map(el => {
// return el.map((item, index) => {
// if (index == 0) {
// item.optName = null;
// }
// // intersect 或者,union 并且,diff 剔除
// switch (item.optName) {
// case 'union':
// item.optName = '或者';
// break;
// case 'intersect':
// item.optName = '并且';
// break;
// case 'diff':
// item.optName = '剔除';
// break;
// }
// return item;
// });
// });
// this.xxSysp.filterAbbrInfo = this.xxSyspLabel(filterAbbrInfo);
// } else {
// this.xxSysp.filterAbbrInfo = goodsSearchDetail.filterAbbrInfo || [];
// }
// }
if (card.goodsFilterId) {
this.form.goodsFilterId = card.goodsFilterId;
}
this.form.cardLimit = card.cardLimit;
......@@ -1093,7 +1098,15 @@ export default {
if (this.form.cardType == 3) {
if (this.form.costValueProportionFlag == 1) {
if (!(this.isEdit && this.storeMode == 0) && (!Array.isArray(this.originStoreList) || this.originStoreList.length == 0)) {
// 编辑、复制
// 固定成本 有门店选择器id,没有costStoreList
// 门店成本 有门店选择器id,有costStoreList
// 新增、复制
// 导入时,无门店选择器id,有costStoreList
// 新增、复制时,有costStoreList即可保存
// 编辑时,有门店选择器id,即可保存
if (!(this.isEdit && this.storeUuid) && !((this.isAdd || this.isCopy) && Array.isArray(this.originStoreList) && this.originStoreList.length > 0)) {
this.$tips({ type: 'warning', message: '请选择卡券适用门店' });
const body = document.getElementsByClassName('dm-layout-page')[0];
toTop(body, this.$refs.useStore.$el.offsetTop - body.offsetTop);
......@@ -1311,14 +1324,17 @@ export default {
}
// 线下适用商品
if (this.xxSysp.goodsEnable && this.xxSysp.goodsFilterId) {
card.goodsFilterId = this.xxSysp.goodsFilterId;
if (this.xxSysp.conditionList) {
card.goodsSearchDetail = JSON.stringify({
conditionList: this.isEdit ? this.xxSysp.conditionList_copy : this.xxSysp.conditionList, // 编辑保存备份数据
filterAbbrInfo: this.xxSysp.filterAbbrInfo
}); // 反显数据
}
// if (this.xxSysp.goodsEnable && this.xxSysp.goodsFilterId) {
// card.goodsFilterId = this.xxSysp.goodsFilterId;
// if (this.xxSysp.conditionList) {
// card.goodsSearchDetail = JSON.stringify({
// conditionList: this.isEdit ? this.xxSysp.conditionList_copy : this.xxSysp.conditionList, // 编辑保存备份数据
// filterAbbrInfo: this.xxSysp.filterAbbrInfo
// }); // 反显数据
// }
// }
if (this.goodsEnable && this.form.goodsFilterId) {
card.goodsFilterId = this.form.goodsFilterId;
}
//卡券限制
......
......@@ -80,6 +80,7 @@
<el-form-item v-if="form.cardType == 3" label="卡券成本比例">
<el-switch v-model="form.costValueProportionFlag" :active-value="1" :inactive-value="0" :disabled="isEdit || isInfo"></el-switch>
<span class="gray fz13">* 成本比例以商户维度设置</span>
<div class="cost-box" v-if="form.costValueProportionFlag == 1">
<div class="cost-box-type">
<span class="cost-box-type-label">成本费用</span>
......@@ -192,16 +193,17 @@
</div>
</div>
<!-- 线下适用商品 -->
<div v-if="(form.cardType === 0 || form.cardType === 1) && form.cardApplyChannel.indexOf('offlineStore') !== -1 && xxSysp.goodsEnable">
<!-- <div v-if="(form.cardType === 0 || form.cardType === 1) && form.cardApplyChannel.indexOf('offlineStore') !== -1 && xxSysp.goodsEnable"> -->
<div v-if="(form.cardType === 0 || form.cardType === 1) && form.cardApplyChannel.indexOf('offlineStore') !== -1 && goodsEnable">
<span class="inline-block w100 pr10 text-right" style="vertical-align:top">线下适用商品</span>
<div class="sysp__content clearfix inline-block">
<div class="fl" v-if="xxSysp.filterAbbrInfo.length && !Array.isArray(xxSysp.filterAbbrInfo[0])">
<!-- <div class="fl" v-if="xxSysp.filterAbbrInfo.length && !Array.isArray(xxSysp.filterAbbrInfo[0])">
<template v-for="(item, idx) in xxSysp.filterAbbrInfo">
{{ item.optName }}
<span :key="idx" class="item">{{ item.text }}</span>
</template>
</div>
<div class="fl" v-if="xxSysp.filterAbbrInfo.length && Array.isArray(xxSysp.filterAbbrInfo[0])">
</div> -->
<!-- <div class="fl" v-if="xxSysp.filterAbbrInfo.length && Array.isArray(xxSysp.filterAbbrInfo[0])">
<div v-for="(item, idx) in xxSysp.filterAbbrInfo" :key="idx">
<div class="complex-and" v-if="idx > 0 && (idx < xxSysp.max || xxSysp.isExpand)">【{{ getXxSysFilterText(idx - 1) }}】</div>
<template v-for="(el, i) in item">
......@@ -212,16 +214,23 @@
</template>
</div>
<el-button v-if="xxSysp.filterAbbrInfo.length > xxSysp.max" type="text" @click="xxSysp.isExpand = !xxSysp.isExpand">{{ xxSysp.isExpand ? '收起' : '展开' }}<i class="el-icon-arrow-down" :class="{ 'is-expand': xxSysp.isExpand }"></i></el-button>
</div>
<template v-if="gicCouponType != 3 && gicCouponType != 4">
<template v-if="xxSysp.goodsEnable && (((isEdit || isInfo) && xxSysp.filterAbbrInfo.length) || isAdd || isCopy)">
<el-button type="primary" @click="handleXxSyspClick" class="fl mt5" size="mini">{{ isEdit || isInfo ? '查看' : '编辑' }}</el-button>
<el-button v-show="xxSysp.filterAbbrInfo.length && !isEdit && !isInfo" @click="handleXxSyspReset" class="fl mt5" size="mini">清空</el-button>
</div> -->
<!-- 新增时,外部券不显示商品选择器 -->
<!-- 编辑时,都显示商品选择器 -->
<template v-if="((isEdit || isInfo) && form.goodsFilterId) || ((isAdd || isCopy) && gicCouponType != 3 && gicCouponType != 4)">
<template v-if="goodsEnable">
<!-- <template v-if="xxSysp.goodsEnable && (((isEdit || isInfo) && xxSysp.filterAbbrInfo.length) || isAdd || isCopy)"> -->
<!-- <el-button type="primary" @click="handleXxSyspClick" class="fl mt5" size="mini">{{ isEdit || isInfo ? '查看' : '编辑' }}</el-button>
<el-button v-show="xxSysp.filterAbbrInfo.length && !isEdit && !isInfo" @click="handleXxSyspReset" class="fl mt5" size="mini">清空</el-button> -->
<dm-goods-selector ref="goodsSelector" mode="dialog" scene-code="productCoupons" is-coupon :projectName="requestProject" :disabled="isEdit" :widget-id.sync="form.goodsFilterId">
<el-button slot="trigger" type="primary" class="fl mt5" size="mini" @click="$refs.goodsSelector.showGoodsSelector()">编辑</el-button>
</dm-goods-selector>
</template>
<p v-else class="fz14 gray">未选择</p>
</template>
</div>
<div v-if="xxSysp.goodsEnable && (((isEdit || isInfo) && xxSysp.filterAbbrInfo.length) || isAdd || isCopy)" class="tips fz12 gray"><span class="w100 pr10 inline-block"></span>* 仅支持第三方api接口核销卡券时使用</div>
<div v-if="goodsEnable && (((isEdit || isInfo) && form.goodsFilterId) || isAdd || isCopy)" class="tips fz12 gray"><span class="w100 pr10 inline-block"></span>* 仅支持第三方api接口核销卡券时使用</div>
<!-- <div v-if="xxSysp.goodsEnable && (((isEdit || isInfo) && xxSysp.filterAbbrInfo.length) || isAdd || isCopy)" class="tips fz12 gray"><span class="w100 pr10 inline-block"></span>* 仅支持第三方api接口核销卡券时使用</div> -->
</div>
<!-- 兑换券 -->
<div v-show="form.cardType === 2" class="mb10"><el-checkbox :disabled="isEdit || isInfo" v-model="sale_limit.flag">消费条件</el-checkbox> <span class="fz12 gray">(至少填写一项)</span></div>
......@@ -262,7 +271,8 @@
</div>
<!-- 只有线下门店展示适用商品折扣 -->
<!-- 1: 大于等于 2:大于 3: 等于 4: 小于 5: 小于等于 -->
<div v-if="form.cardApplyChannel.indexOf('offlineStore') !== -1 && form.cardType !== 2 && form.cardType != 3 && xxSysp.goodsEnable">
<div v-if="form.cardApplyChannel.indexOf('offlineStore') !== -1 && form.cardType !== 2 && form.cardType != 3 && goodsEnable">
<!-- <div v-if="form.cardApplyChannel.indexOf('offlineStore') !== -1 && form.cardType !== 2 && form.cardType != 3 && xxSysp.goodsEnable"> -->
<el-checkbox v-model="discount_limit.flag" :disabled="isEdit || isInfo">适用商品折扣</el-checkbox>
<div v-if="discount_limit.flag" class="inline-block">
<el-select :disabled="isEdit || isInfo" v-model="discount_limit.type" class="w100 ml10">
......@@ -466,13 +476,13 @@
</dm-form-bottom>
</el-form>
<el-dialog title="适用商品" :visible.sync="xxSysp.visible" width="700px">
<!-- <el-dialog title="适用商品" :visible.sync="xxSysp.visible" width="700px">
<vue-gic-goods-selector style="max-height:500px;overflow-y:auto;overflow-x:hidden" ref="selector" :projectName="requestProject" isCoupon></vue-gic-goods-selector>
<div slot="footer" class="dialog-footer">
<el-button @click="xxSysp.visible = false">{{ isEdit ? '关闭' : '取消' }}</el-button>
<el-button v-if="isAdd || isCopy" type="primary" @click="xxSyspConfirm">确定</el-button>
</div>
</el-dialog>
</el-dialog> -->
<el-dialog title="成本批量导入" :visible.sync="importCost.visible" width="720px" @close="onCloseImportCost">
<dm-import-file ref="importFile" style="width:680px" :options="importCost.options" @change="handleFileChange" :echo="fileEcho"></dm-import-file>
<template slot="footer">
......
......@@ -36,7 +36,7 @@
<el-tooltip class="item" effect="dark" open-delay="300">
<div slot="content">
<span v-if="item.isApiCreate">该卡券为外部接口创建卡券无法用于营销</span>
<span v-else> 1.卡券的领取数量\使用数量\核销率\销售额统计数据每隔3小时更新一次<br />2.销售额:此卡券参与核销的订单应收总金额(若订单发送退款且退券则金额扣除,不退券则金额不扣除)。一笔订单若使用多张相同卡券,只计一笔订单的金额</span>
<span v-else> 1.卡券的领取数据\使用数量\核销率\销售额统计每天9:30/12:30/15:30/18:30各刷新一次数据<br />2.销售额:此卡券参与核销的订单应收总金额(若订单发送退款且退券则金额扣除,不退券则金额不扣除)。一笔订单若使用多张相同卡券,只计一笔订单的金额</span>
</div>
<i style="position:absolute;right:10px;top:10px;cursor:pointer;color:#c0c4cc;font-size:18px;" class="el-icon-question"></i>
</el-tooltip>
......
......@@ -15,6 +15,8 @@ export default Vue.component('render-temp', {
const showPutonBtn = this.item.showPutonBtn || false;
// 是否有商场抵金券的创建权限 true:有权限 false:无权限
const hasCouponCreate = this.$store.getters.getLimitCodeList.every(el => el != 'couponCreate');
// 是否是商场类商户
const hasStoreCardAuth = this.$store.getters.getStoreCardAuth;
// 当前卡券是否 是长期有效||在投放有效期内
// putEffectiveMode 0:固定日期,1:长期
const canGroupSend = this.item.putEffectiveMode == 1 ? true : new Date() > new Date(this.item.putBeginDate) && new Date() < new Date(this.item.putEndDate);
......@@ -36,7 +38,7 @@ export default Vue.component('render-temp', {
</a>
);
const bind3 =
$getButtonLimit($buttonCode.marketingEditCard) && !isWeimo && !isCommon && !isApiCreate && hasCouponCreate ? (
$getButtonLimit($buttonCode.marketingEditCard) && !isWeimo && !isApiCreate && (this.item.cardType == 3 && hasStoreCardAuth ? hasCouponCreate : true) ? (
<a title="编辑" limit-code={$buttonCode.marketingEditCard} onClick={this.handler.bind(null, 3)}>
<i class="el-icon-edit" />
</a>
......@@ -44,7 +46,7 @@ export default Vue.component('render-temp', {
''
);
const bind4 =
$getButtonLimit($buttonCode.marketingDelCard) && canEdit && !isWeimo && !isCommon ? (
$getButtonLimit($buttonCode.marketingDelCard) && canEdit && !isWeimo && (this.item.cardType == 3 && hasStoreCardAuth ? hasCouponCreate : true) ? (
<a title="删除" limit-code={$buttonCode.marketingDelCard} onClick={this.handler.bind(null, 4)}>
<i class="el-icon-delete" />
</a>
......@@ -57,7 +59,7 @@ export default Vue.component('render-temp', {
</a>
);
const bind6 =
$getButtonLimit($buttonCode.marketingCopyCard) && canEdit && !isApiCreate && !isWeimo && !isCommon && hasCouponCreate ? (
$getButtonLimit($buttonCode.marketingCopyCard) && canEdit && !isApiCreate && !isWeimo && (this.item.cardType == 3 && hasStoreCardAuth ? hasCouponCreate : true) ? (
<a title="复制" limit-code={$buttonCode.marketingCopyCard} onClick={this.handler.bind(null, 6)}>
<i class="iconfont icon-wxcard-copy" />
</a>
......
<template>
<div class="storeBox" v-loading="loading">
<div>
门店<span style="margin: 0 10px;">{{ tableData.length }}</span
门店<span style="margin: 0 10px;">{{ total }}</span
>
</div>
<div class="searchBox">
......@@ -12,6 +12,7 @@
</div>
</div>
<div class="content">
<el-table v-if="!Array.isArray(tableData) || tableData.length == 0" :data="tableData"></el-table>
<div v-for="(item, index) in tableData" :key="index">
<div class="c_top">
<div class="c_t_left">
......@@ -184,7 +185,7 @@ export default {
}
.content {
margin-top: 20px;
height: 48px;
// height: 48px;
.c_top {
background: #ebecf0;
......
......@@ -4,16 +4,16 @@ import { getEcmInfo, saveEcmInfo, getUseStoredFalg, getXsxsFalg, gicPaymentList
import { getCardManualSetting } from '@/service/api/cardApi.js';
import { listTemplateVariables } from '@/service/api/msgApi.js';
import { klflStrategy } from '@/service/api/gameApi.js'; // 会员等级列表接口
import xxSysp_mix from '@/mixins/selector.js'; // 商品选择器方法mixins
// import xxSysp_mix from '@/mixins/selector.js'; // 商品选择器方法mixins
import marketingEvent from './marketing-event/index.vue';
import { formatDateTimeByType, deepClone } from '@/utils/index.js';
import { formatDateTimeByType /*deepClone*/ } from '@/utils/index.js';
import { isEmpty, numOfDecimal } from '@/utils/strlen.js';
import itemCard from './partials/item-card.vue';
import varDialog from './partials/variables.vue';
import Vue from 'vue';
export default {
name: 'ecm-manage',
mixins: [xxSysp_mix],
// mixins: [xxSysp_mix],
data() {
return {
onlineStatus: 0,
......@@ -40,6 +40,7 @@ export default {
couponAutoGetFlag: 0, // 1开启自动领取 0关闭
couponAutoGetStock: 0, // 自动领取最大库存数
enterpriseId: '',
goodsEnable: false,
form: {
memberType: 0,
ecmPlanName: '',
......@@ -88,6 +89,7 @@ export default {
order_store_new: '',
storedLowest: 0,
storedMax: 0,
goods_filter_id: '', // 商品选择器id
consum_type: 1,
gift_flag: 0,
consumer_store_type: 0,
......@@ -436,7 +438,8 @@ export default {
const commonScene = res.result.commonScene;
const consumTrigger = res.result.consumTrigger;
this.enabledMessageState = res.result.enabledMessageState || 0;
this.xxSysp.goodsEnable = res.result.goodsEnable || false; // 是否支持商品选择器
// this.xxSysp.goodsEnable = res.result.goodsEnable || false; // 是否支持商品选择器
this.goodsEnable = res.result.goodsEnable || false; // 是否支持商品选择器
if (result && !this.isInit) {
this.onlineStatus = result.onlineStatus;
this.creatorId = res.result.ecmDTO.creatorId;
......@@ -540,15 +543,16 @@ export default {
}
// 消费商品
if (res.result.goodsEnable && consumTrigger.goods_filter_id) {
this.xxSysp.goodsFilterId = consumTrigger.goods_filter_id || '';
this.form.goods_filter_id = consumTrigger.goods_filter_id || '';
// this.xxSysp.goodsFilterId = consumTrigger.goods_filter_id || '';
this.consumeChecked.good = !!consumTrigger.goods_filter_id || false;
if (res.result.goodsSearchDetail.detail) {
const goodsSearchDetail = JSON.parse(res.result.goodsSearchDetail.detail);
this.xxSysp.conditionList = goodsSearchDetail.conditionList; // ref selector此时放在modal里并没有渲染,之后赋值
this.xxSysp.conditionList_copy = deepClone(goodsSearchDetail.conditionList); // 备份数据
this.xxSysp.filterAbbrInfo = goodsSearchDetail.filterAbbrInfo || [];
this.xxSysp.filterLogicalOperator = goodsSearchDetail.filterLogicalOperator || [];
}
// if (res.result.goodsSearchDetail.detail) {
// const goodsSearchDetail = JSON.parse(res.result.goodsSearchDetail.detail);
// this.xxSysp.conditionList = goodsSearchDetail.conditionList; // ref selector此时放在modal里并没有渲染,之后赋值
// this.xxSysp.conditionList_copy = deepClone(goodsSearchDetail.conditionList); // 备份数据
// this.xxSysp.filterAbbrInfo = goodsSearchDetail.filterAbbrInfo || [];
// this.xxSysp.filterLogicalOperator = goodsSearchDetail.filterLogicalOperator || [];
// }
this.form.gift_flag = consumTrigger.gift_flag;
}
......@@ -836,7 +840,8 @@ export default {
}
}
// 校验勾选
if (this.consumeChecked.good && !this.xxSysp.goodsFilterId) {
if (this.consumeChecked.good && !this.form.goods_filter_id) {
// if (this.consumeChecked.good && !this.xxSysp.goodsFilterId) {
this.$tips({ type: 'warning', message: '请选择指定消费商品' });
return;
}
......@@ -998,12 +1003,14 @@ export default {
order_store: this.consumeChecked.store ? (this.form.consumerStoreType === 0 ? this.form.order_store : this.form.order_store_new) : ''
};
// 勾选消费商品
if (this.consumeChecked.good && this.xxSysp.goodsFilterId) {
consumeObj.goods_filter_id = this.xxSysp.goodsFilterId;
consumeObj.goodsSearchDetail = JSON.stringify({
conditionList: this.isEdit ? this.xxSysp.conditionList_copy : this.xxSysp.conditionList, // 编辑保存备份数据
filterAbbrInfo: this.xxSysp.filterAbbrInfo
});
if (this.consumeChecked.good && this.form.goods_filter_id) {
// if (this.consumeChecked.good && this.xxSysp.goodsFilterId) {
consumeObj.goods_filter_id = this.form.goods_filter_id;
// consumeObj.goods_filter_id = this.xxSysp.goodsFilterId;
// consumeObj.goodsSearchDetail = JSON.stringify({
// conditionList: this.isEdit ? this.xxSysp.conditionList_copy : this.xxSysp.conditionList, // 编辑保存备份数据
// filterAbbrInfo: this.xxSysp.filterAbbrInfo
// });
consumeObj.gift_flag = this.form.gift_flag;
}
......
......@@ -171,14 +171,15 @@
</div>
</div>
</el-form-item>
<el-form-item v-if="xxSysp.goodsEnable">
<el-form-item v-if="goodsEnable">
<!-- <el-form-item v-if="xxSysp.goodsEnable"> -->
<div class="no_label_form_label">
<el-checkbox class="el-form-item__label align-left" :disabled="!isAdd" v-model="consumeChecked.good">消费商品</el-checkbox>
<div>
<span class="fz14 gray" v-show="!consumeChecked.good && form.consum_type == 1">所有消费商品</span>
<div class="fz14 gray" v-show="!consumeChecked.good && form.consum_type !== 1">勾选后,满足条件的订单中在所选商品范围内的商品金额才会进行统计</div>
<div class="sysp__content clearfix" v-show="consumeChecked.good">
<div class="fl" v-if="xxSysp.filterAbbrInfo.length && !Array.isArray(xxSysp.filterAbbrInfo[0])">
<!-- <div class="fl" v-if="xxSysp.filterAbbrInfo.length && !Array.isArray(xxSysp.filterAbbrInfo[0])">
<template v-for="(item, idx) in xxSysp.filterAbbrInfo">
{{ item.optName }}
<span :key="idx" class="item">{{ item.text }}</span>
......@@ -197,7 +198,10 @@
<el-button v-if="xxSysp.filterAbbrInfo.length > xxSysp.max" type="text" @click="xxSysp.isExpand = !xxSysp.isExpand">{{ xxSysp.isExpand ? '收起' : '展开' }}<i class="el-icon-arrow-down" :class="{ 'is-expand': xxSysp.isExpand }"></i></el-button>
</div>
<el-button type="primary" @click="handleXxSyspClick" class="fl mt5" size="mini">{{ !isAdd ? '查看' : '编辑' }}</el-button>
<el-button v-show="xxSysp.filterAbbrInfo.length && isAdd" @click="handleXxSyspReset" class="fl mt5" size="mini">清空</el-button>
<el-button v-show="xxSysp.filterAbbrInfo.length && isAdd" @click="handleXxSyspReset" class="fl mt5" size="mini">清空</el-button> -->
<dm-goods-selector ref="goodsSelector" mode="dialog" scene-code="productEcm" :projectName="projectName" :disabled="!isAdd" :widget-id.sync="form.goods_filter_id">
<el-button slot="trigger" type="primary" @click="$refs.goodsSelector.showGoodsSelector()" class="fl mt5" size="mini">编辑</el-button>
</dm-goods-selector>
</div>
<div v-show="consumeChecked.good">
<span style="margin-left: 38px;">是否剔除“赠品”类型商品</span>
......@@ -643,13 +647,13 @@
</el-form>
<!-- 消费商品dialog -->
<el-dialog title="适用商品" :visible.sync="xxSysp.visible" width="690px">
<!-- <el-dialog title="适用商品" :visible.sync="xxSysp.visible" width="690px">
<vue-gic-goods-selector ref="selector" :projectName="projectName"></vue-gic-goods-selector>
<div slot="footer" class="dialog-footer">
<el-button @click="xxSysp.visible = false">{{ !isAdd ? '关闭' : '取消' }}</el-button>
<el-button v-if="isAdd" type="primary" @click="xxSyspConfirm">确定</el-button>
</div>
</el-dialog>
</el-dialog> -->
</div>
</template>
<script>
......
......@@ -37,6 +37,7 @@
{{ row.mainStoreCode || '--' }}
</template>
</el-table-column>
<el-table-column label="浏览次数" min-width="96" prop="browseCnt" :formatter="(row, col, val) => val || '--'"></el-table-column>
<el-table-column label="中奖次数" min-width="96" prop="winCnt" :formatter="(row, col, val) => val || '--'"></el-table-column>
<el-table-column label="分享次数" min-width="96" prop="shareCnt" :formatter="(row, col, val) => val || '--'"></el-table-column>
<el-table-column label="裂变新用户" min-width="112" prop="invitationMemberCnt" :formatter="(row, col, val) => val || '--'"></el-table-column>
......@@ -44,7 +45,11 @@
<el-table-column min-width="88" prop="isNewMember" :formatter="(row, col, val) => val || '--'">
<template slot="header">
新会员
<el-tooltip placement="top" content="用户自身是否通过本次游戏注册成为会员">
<el-tooltip placement="top">
<div slot="content">
1、用户自身是否通过本次游戏注册成为会员;<br />
2、POS会员转微信会员也会统计为新会员。
</div>
<i class="iconfont icon-QuestionCircleOutlined"></i>
</el-tooltip>
</template>
......
......@@ -141,7 +141,7 @@ export default {
gameActivityId: this.form.gameActivityId || this.$route.params.id || this.gameActivityId,
strategyName: this.form.strategyName,
prizeReferId: this.cardObj.coupCardId,
prizeReferType: '2', // znm只能配卡券,积分有问题
prizeReferType: 1, // znm只能配卡券,积分有问题
prizeStock: 0,
prizeCount: 0,
prizeIntegral: 0,
......
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