Commit 47442554 by chenxin

fix: 微信卡券

parent 3432595d
......@@ -13,7 +13,8 @@ const state = {
breadcrumb: [],
layoutTips: '',
isShowSelf: false, // 展示是否显示 '仅看本人' btn 在app.vue调用 每次刷新都会获取
openFlag: false // 列表是否显示创建人
openFlag: false, // 列表是否显示创建人
appletEnable: false // 小程序是否可用
};
// getters
......@@ -54,6 +55,10 @@ const actions = {
// mutations
const mutations = {
// 更新小程序是否可用
updateAppletEnable(state, val) {
state.appletEnable = !!val;
},
// 更新是否限流
updateLimit(state, val) {
state.isLimit = !!val;
......
......@@ -332,3 +332,16 @@ export const spiltStr = html => {
.join('<br>');
return text;
};
// 小程序版本过低警告
export const appletUnableAlert = () => {
Vue.prototype
.$confirm("当前会员小程序版本过低,请联系达摩运营提审并发布最新版小程序后再次尝试。造成不便,敬请谅解。<div class='mt10'><a href='#' target='_blank'>达摩GIC卡券模块更新说明</a></div>", '提示', {
cancelButtonText: '确定',
showConfirmButton: false,
dangerouslyUseHTMLString: true
// type: 'warning'
})
.then(() => {})
.catch(() => {});
};
......@@ -3,7 +3,6 @@
*/
import { _debounce } from '@/utils/index';
import dmUploadImg from '@/components/upload/img';
import imgTextDrag from './partials/imgtext-drag';
import { formatDateTimeByType, deepClone } from '@/utils/index.js';
import xxSysp_mix from '@/mixins/selector.js'; // 商品选择器方法
import { listEntepriseWeimobShop, listEntepriseWeimobCoupon } from '@/service/api/commonApi.js';
......@@ -29,7 +28,8 @@ const initForm = {
useCodePrefix: 0,
useCodeSuffix: 0,
cardEffectiveMode: 0,
dateTime: [],
dateTime: [], // 用户使用有效期
sendDateTime: [], // 卡券模板投放期限
costValue: 0, //成本费用
startDay: 0,
limitDay: null,
......@@ -50,7 +50,8 @@ const initForm = {
products_exchange_number: 0,
onlyFlag: true, // 是否显示与优惠同享,默认true显示
giveFlag: 0, // 开启转赠 1开启
refundFlag: 0 // 开启退货 1开启
refundFlag: 0, // 开启退货 1开启
jumpSwitch: false // 跳转配置
};
const sale_limit = { fee: 0, goods: '', flag: false, type: 0 }; //最低消费
const goods = { ok: '', no: '', flag: false };
......@@ -207,7 +208,6 @@ export default {
},
components: {
'dm-upload-img': dmUploadImg,
'img-text-drag': imgTextDrag,
'dm-goods-input': dmGoodsInput
},
computed: {
......@@ -223,6 +223,22 @@ export default {
} else {
return false;
}
},
// 是否展示模板投放有效期
showSendDateTime() {
// 当输入完整用户使用有效期后,出现卡券模板投放期限
const { cardEffectiveMode, limitDay, dateTime } = this.form;
if (cardEffectiveMode == 0) {
// 用户使用有效期=固定日期,则默认卡券模板投放期限开始时间=今天,结束日期=用户使用有效期结束日期
if (dateTime && dateTime[0]) {
this.form.sendDateTime = [...dateTime];
}
return !!(dateTime && dateTime[0] && dateTime[1]);
}
if (cardEffectiveMode == 1) {
return !!limitDay;
}
return false;
}
},
methods: {
......@@ -527,10 +543,6 @@ export default {
return;
}
}
if (this.form.costValue <= 0 && this.form.cardType !== 1) {
this.$tips({ type: 'warning', message: '成本必须大于0' });
return;
}
// 验证号段 不能为空 起始号段和结尾号段必须位数一致
if (this.form.useCustomCode) {
......
<template>
<div>
<el-form class="dm-wrap" :model="form" ref="form" :rules="rules" label-width="130px">
<el-form class="dm-wrap" :model="form" ref="form" :rules="rules" label-width="150px">
<el-form-item label="卡券类型">
<el-radio-group v-model="form.cardType" :disabled="isEdit || isInfo" @change="reset">
<el-radio :label="0">抵金券</el-radio>
......@@ -15,7 +15,6 @@
</el-form-item>
<el-form-item prop="cardName" label="卡券名称">
<dm-input v-model="form.cardName" class="w400" placeholder="请输入卡券名称" :disabled="isEdit || isInfo" :byteType="1" :maxlength="9"></dm-input>
<div class="tips fz12 gray">* 建议涵盖卡券属性、服务及金额,突出优惠力度。例:无门槛减10元优惠券</div>
</el-form-item>
<el-form-item prop="subName" label="备注名">
......@@ -183,7 +182,6 @@
</div> -->
<div>
<el-checkbox v-model="only" :disabled="isEdit || isInfo">不与其它优惠共享</el-checkbox>
<span class="fz12 gray ml5">* 仅用于微信原生卡券详情展示,无实际业务逻辑</span>
</div>
</el-form-item>
<el-form-item prop="cardLimit" label="领券限制">
......@@ -193,7 +191,7 @@
<el-radio :label="0"> <el-input-number controls-position="right" :min="0" class="w150" v-model="form.cardLimit" :disabled="isEdit || isInfo"></el-input-number> 张/人 <span class="fz13 gray">每个用户领券上限,默认为1</span> </el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="costValue" label="成本费用" v-show="form.cardType !== 1"> <el-input-number controls-position="right" :disabled="isEdit || isInfo" :precision="2" :min="0" class="w200" v-model="form.costValue"></el-input-number> <span class="fz13 gray">请填写大于0的数字(限制两位小数)</span> </el-form-item>
<el-form-item prop="costValue" label="成本费用" v-show="form.cardType !== 1"> <el-input-number controls-position="right" :disabled="isEdit || isInfo" :precision="2" :min="0" class="w200" v-model="form.costValue"></el-input-number></el-form-item>
<el-form-item label="code类型">
<el-radio v-model="form.useCustomCode" :label="0" :disabled="isEdit || isInfo">随机生成</el-radio>
<el-radio v-model="form.useCustomCode" :label="1" :disabled="isEdit || isInfo">自定义号段</el-radio>
......@@ -220,7 +218,10 @@
<div v-show="form.useCustomCode"><el-input-number controls-position="right" :min="0" :max="100000" disabled class="w200" :value="form.customCodeEnd - form.customCodeBegin + 1"></el-input-number><span class="fz13 gray">优惠券创建数量,如不填,则默认为100,000张</span></div>
</el-form-item>
<el-form-item class="is-required" prop="useCustomCode" label="有效期">
<el-form-item class="is-required" prop="useCustomCode">
<el-tooltip slot="label" open-delay="100" content="用户使用有效期为用户领取卡券后的使用有效期计算规则" placement="top">
<span class="tooltip-icon cursor">用户使用有效期</span>
</el-tooltip>
<div>
<el-radio v-model="form.cardEffectiveMode" :disabled="isEdit || isInfo || cardValidity" :label="0">固定日期</el-radio>
<el-date-picker v-model="form.dateTime" @focus="form.cardEffectiveMode = 0" :disabled="isEdit || isInfo || cardValidity" :picker-options="pickerOptions" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
......@@ -234,6 +235,20 @@
</div>
</el-form-item>
<!-- 当输入完整用户使用有效期后,出现卡券模板投放期限 -->
<el-form-item v-if="showSendDateTime" class="is-required" prop="SendDateTime">
<el-tooltip slot="label" open-delay="100" content="卡券模板投放期限为该张卡券可在GIC后台或通过API接口可投放给用户的期限" placement="top">
<span class="tooltip-icon cursor">卡券模板投放期限</span>
</el-tooltip>
<el-date-picker v-model="form.sendDateTime" :disabled="isEdit || isInfo" :picker-options="pickerOptions" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
<div class="gray fz13">* 卡券模板投放期限结束日期不能迟于卡券使用有效期固定日期结束日期</div>
</el-form-item>
<el-form-item prop="cardExplain" label="跳转配置">
<el-switch v-model="form.jumpSwitch"></el-switch>
<div class="gray fz13">* 开启后小程序卡券详情将对应路径的跳转按钮</div>
</el-form-item>
<el-form-item prop="cardExplain" label="适用门店说明">
<dm-input class="w400" v-model="form.cardExplain" :disabled="isInfo" :maxlength="50"></dm-input>
</el-form-item>
......@@ -247,10 +262,11 @@
<el-alert v-show="storeMode && form.cardApplyChannel.indexOf('WMmicroMall') !== -1" title="选择的门店必须保持与微盟侧门店一致,请确认选择无误" type="warning" show-icon :closable="false" class="mt20 width80"></el-alert>
</el-form-item>
<el-form-item v-if="giveEnable && form.useCustomCode != 1" label="卡券转赠">
<!-- feature/m12 暂时隐藏 -->
<!-- <el-form-item v-if="giveEnable && form.useCustomCode != 1" label="卡券转赠">
<el-switch :disabled="isEdit" v-model="form.giveFlag" :active-value="1" :inactive-value="0"></el-switch>
<span class="tips fz12 gray ml5">* code类型为自定义号段暂时不支持卡券转赠,转赠多次会消耗相同次数的库存,请设置足够的安全库存</span>
</el-form-item>
</el-form-item> -->
<el-form-item v-if="(isAdd || isCopy) && refundEnable && form.cardType != 2" label="退货退券">
<el-switch :disabled="isEdit" v-model="form.refundFlag" :active-value="1" :inactive-value="0"></el-switch>
</el-form-item>
......@@ -259,22 +275,22 @@
<el-switch :disabled="isEdit" v-model="form.refundFlag" :active-value="1" :inactive-value="0"></el-switch>
</el-form-item>
<el-form-item prop="image" label="(选填)封面图片">
<!-- <el-form-item prop="image" label="(选填)封面图片">
<dm-upload-img :disabled="isEdit || isInfo" :model.sync="form.image" width="64" label="上传图片" url="/api-plug/upload-img" tips="图片建议尺寸:850px*350px,大小不超过2M"></dm-upload-img>
</el-form-item>
<el-form-item prop="coverDescript" label="(选填)封面简介">
<dm-input class="w400" v-model="form.coverDescript" :disabled="isEdit || isInfo" :maxlength="12"></dm-input>
</el-form-item>
</el-form-item> -->
<el-form-item prop="useDescript" label="使用说明">
<dm-input class="w400" type="textarea" :rows="4" v-model="form.useDescript" :maxlength="500" :disabled="isInfo"></dm-input>
</el-form-item>
<el-form-item prop="teletexts" label="(选填)图文介绍">
<!-- <el-form-item prop="teletexts" label="(选填)图文介绍">
<p class="fz13 gray">图片建议尺寸:900px*500px,大小不超过2M,格式限制JPG;至少上传1组图文,最多输入5000字</p>
<img-text-drag :list.sync="imgTextList" :disabled="form.auditingStatus === 1"></img-text-drag>
</el-form-item>
</el-form-item> -->
<!-- <el-form-item label="放入卡券展架" v-show="cardLimitRadio === 1" v-loading="cardShelfsLoading">
<el-transfer :disabled="isInfo" filterable :filter-method="filterMethod" filter-placeholder="输入展架名称搜索" v-model="form.shelfIds" :titles="['所有门店展架', '选中的展架']" :data="cardShelfsList"> </el-transfer>
......@@ -286,7 +302,7 @@
</el-form-item>
<div class="btn-wrap_fixed" :class="{ on: asideShow }">
<el-button type="primary" @click="submitForm('form')" v-loading="submitLoading" v-show="!isInfo && canEdit">保存并提交审核</el-button>
<el-button type="primary" @click="submitForm('form')" v-loading="submitLoading" v-show="!isInfo && canEdit && $store.state.marketing.appletEnable">保存</el-button>
<el-button @click="$router.go(-1)">返 回</el-button>
</div>
</el-form>
......
......@@ -6,7 +6,15 @@
<script>
export default {
name: 'card',
methods: {
getAppletVersion() {
setTimeout(() => {
this.$store.commit('updateAppletEnable', true);
}, 2000);
}
},
created() {
this.getAppletVersion();
this.$store.commit('aside_handler', false);
this.$nextTick(_ => {
this.$store.commit('aside_handler', true);
......
......@@ -14,14 +14,14 @@
<el-input v-model="listParams.searchParam" class="w200 vertical-middle" placeholder="输入卡券名称/备注" clearable @change="refresh"><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="refresh" />
<el-checkbox class="ml0" v-model="listParams.effectiveFlag" :true-label="1" :false-label="0" label="仅展示有效卡券" border @change="refresh" />
<el-button class="fr" type="primary" @click="$router.push('/card/add')">新增卡券</el-button>
<el-button class="fr" type="primary" @click="addCard">新增卡券</el-button>
</div>
<ul class="clearfix" element-loading-text="拼命加载中">
<card-item @adjust-stock="preAdjustStock" :item="v" v-for="(v, i) in tableList" :key="i" @delete-card="delData"></card-item>
</ul>
<div class="text-center" v-if="tableList.length === 0">
<img class="block block-center pt100" width="60" height="60" src="../../assets/img/no-data_icon.png" alt="" />
<el-button class="block block-center mt10" type="text" @click="$router.push('/card/add')">新增卡券</el-button>
<el-button class="block block-center mt10" type="text" @click="addCard">新增卡券</el-button>
</div>
<adjust-stock :show.sync="adjustStock" :totalCount="currentCard.couponStock" :coupCardId="currentCard.coupCardId" @refresh="delayRefresh"></adjust-stock>
<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>
......@@ -32,6 +32,7 @@ import { cardPageList, deleteCard } from '@/service/api/cardApi.js';
import adjustStock from './partials/adjust-Stock';
import cardItem from './partials/card-item';
import tableMethods from '@/mixins/tableMethods.js';
import { appletUnableAlert } from '@/utils/index.js';
export default {
name: 'card-list',
mixins: [tableMethods],
......@@ -65,6 +66,19 @@ export default {
this.getTableList();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '卡券营销', path: '' }, { name: '卡券库', path: '' }]); // eslint-disable-line
},
mounted() {
this.$store.commit(
'mutations_layoutTips',
`<div class="layout--tips">
<i class="el-icon-info"></i>
由于微信侧对卡券业务的调整,2021年1月5日0点起,达摩GIC将从原先的微信卡券切换至GIC卡券,主体功能保持不变。届时与微信相关的微信卡包将不再支持,敬请谅解。
</div>
`
);
},
beforeDestroy() {
this.$store.commit('mutations_layoutTips', '');
},
methods: {
//编辑库存 前置
preAdjustStock(val) {
......@@ -91,6 +105,13 @@ export default {
}
this.loading = false;
},
addCard() {
if (!this.$store.state.marketing.appletEnable) {
appletUnableAlert();
} else {
this.$router.push('/card/add');
}
},
delData(val) {
this.$confirm('是否删除该卡券?', '提示', {
confirmButtonText: '确定',
......
......@@ -28,9 +28,10 @@
</div>
<div class="card-item__detail">
<p class="ellipsis-100">
有效期:<span v-if="item.cardEffectiveMode !== 0">领取后第{{ item.startDay + 1 }}-{{ item.limitDay + item.startDay }}</span>
使用有效期:<span v-if="item.cardEffectiveMode !== 0">领取后第{{ item.startDay + 1 }}-{{ item.limitDay + item.startDay }}</span>
<span v-if="item.cardEffectiveMode === 0">{{ formatDateTimeByType(item.beginDate, 'yyyy-MM-dd') }}{{ formatDateTimeByType(item.endDate, 'yyyy-MM-dd') }}</span>
</p>
<p>模板投放期限:<span>2020-03-01 至 2020-03-30</span></p>
<p class="ellipsis-100">
使用条件:<el-popover :open-delay="300" placement="top-start" width="200" trigger="hover" :content="item.useCondition | filterUseCondition">
<span slot="reference" class="ellipsis-100">{{ item.useCondition | filterUseCondition }}</span>
......@@ -64,7 +65,7 @@
<script>
import renderTemp from './status-render.js';
import { formatDateTimeByType } from '@/utils/index.js';
import { formatDateTimeByType, appletUnableAlert } from '@/utils/index.js';
export default {
props: {
item: {
......@@ -95,6 +96,11 @@ export default {
* 1 投放 2 报表 3 编辑 4 删除 5 详情 6复制 7领取记录
*/
handler(val) {
// 若小程序版本不支持 不支持 卡券新建编辑复制 修改库存
if ((val == 3 || val == 6) && !this.$store.state.marketing.appletEnable) {
appletUnableAlert();
return;
}
switch (val) {
case 1:
this.$router.push({
......@@ -193,7 +199,7 @@ export default {
line-height: 1.8em;
span {
font-size: 13px;
color: #999;
color: #606266;
}
}
}
......
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