Commit e9da656d authored by Xuguangxing's avatar Xuguangxing

feat: 增加优惠券弹窗逻辑及同盾id处理

parent db75319e
...@@ -43,4 +43,8 @@ export default { ...@@ -43,4 +43,8 @@ export default {
getServerTime() { getServerTime() {
return http.get(`${config.apiHost}/editor/getServerTime`); return http.get(`${config.apiHost}/editor/getServerTime`);
}, },
getTongDunIdByKey(params) {
return http.post(`${config.kdspHost}/api/kdsp/fraud/getDeviceId`, params);
},
}; };
\ No newline at end of file
import http from '../service/http.service';
import config from '../config';
export default {
// 获取优惠券弹窗
getCouponModal(params) {
return http.post(`${config.kdspHost}/api/kdsp/app-config-push/coupon/push`, params);
},
};
\ No newline at end of file
<template>
<div class="couponModal">
<cr-popup v-model="show" round :close-on-click-overlay="false">
11
<cr-icon type="close" size="34px" color="#FFF" @click="close" />
</cr-popup>
</div>
</template>
<script>
export default {
name: 'CouponModal',
props: {
value: Boolean,
},
data() {
return {
show: false,
}
},
methods: {
close() {
this.show = false;
}
},
watch: {
value(val) {
this.show = val;
}
}
}
</script>
<style lang="less" scoped>
@deep: ~'>>>';
.couponModal{
/deep/ .cr-overlay{
z-index: 103;
}
}
.cr-popup {
z-index: 104;
background-color: transparent;
border-radius: 0;
}
.cr-icon {
display: block;
margin: 20px auto 0;
}
</style>
\ No newline at end of file
...@@ -3,6 +3,7 @@ import { Getter, State, Mutation } from 'vuex-class'; ...@@ -3,6 +3,7 @@ import { Getter, State, Mutation } from 'vuex-class';
import FreedomContainer from '../../component/FreedomContainer/index.vue'; import FreedomContainer from '../../component/FreedomContainer/index.vue';
import BackTop from '../../component/BackTop/index.vue'; import BackTop from '../../component/BackTop/index.vue';
import InvalidNotice from '../../component/invalidNotice/index.vue'; import InvalidNotice from '../../component/invalidNotice/index.vue';
import CouponModal from '../../component/CouponModal/index.vue';
import EmptyState from '../../component/EmptyState/index.vue'; import EmptyState from '../../component/EmptyState/index.vue';
import PageBottomTip from '../../component/PageBottomTip/index.vue'; import PageBottomTip from '../../component/PageBottomTip/index.vue';
import GridLayout from '../../component/VueGridLayout/GridLayout.vue'; import GridLayout from '../../component/VueGridLayout/GridLayout.vue';
...@@ -21,7 +22,8 @@ import Bridge from '@qg/js-bridge'; ...@@ -21,7 +22,8 @@ import Bridge from '@qg/js-bridge';
import MpBridge from '@qg/citrus-ui/src/helper/service/mp'; import MpBridge from '@qg/citrus-ui/src/helper/service/mp';
import navigatorApi from '@/api/navigator.api'; import navigatorApi from '@/api/navigator.api';
import editorApi from '@/api/editor.api'; import editorApi from '@/api/editor.api';
@Component({ components: { FreedomContainer, GridLayout, GridItem, PageBottomTip, BackTop, InvalidNotice, EmptyState }, name: 'Activity'}) import modalApi from '@/api/modal.api';
@Component({ components: { FreedomContainer, GridLayout, GridItem, PageBottomTip, BackTop, InvalidNotice, EmptyState, CouponModal }, name: 'Activity'})
export default class Activity extends Mixins(TransformStyleMixin, BottomNavStyleMixin, SaMixin, DisableTouchMixin) { export default class Activity extends Mixins(TransformStyleMixin, BottomNavStyleMixin, SaMixin, DisableTouchMixin) {
@Getter('pageData') pageData; @Getter('pageData') pageData;
...@@ -52,6 +54,8 @@ export default class Activity extends Mixins(TransformStyleMixin, BottomNavStyle ...@@ -52,6 +54,8 @@ export default class Activity extends Mixins(TransformStyleMixin, BottomNavStyle
targetEle: HTMLElement | null = null; targetEle: HTMLElement | null = null;
loading: boolean = true; loading: boolean = true;
modfiTabsStyleDebounce = debounce(this.modfiTabsStyle, 300); modfiTabsStyleDebounce = debounce(this.modfiTabsStyle, 300);
showCouponModal: boolean = false;
couponModalData: object = {};
get layout() { get layout() {
if (!isApp && !isWxMp && !EASY_ENV_IS_NODE) { if (!isApp && !isWxMp && !EASY_ENV_IS_NODE) {
this.pageData.elements = this.pageData.elements.filter(v => v.name !== 'cs-search-bar' && v.name !== 'cs-snap-up'); this.pageData.elements = this.pageData.elements.filter(v => v.name !== 'cs-search-bar' && v.name !== 'cs-snap-up');
...@@ -146,12 +150,47 @@ export default class Activity extends Mixins(TransformStyleMixin, BottomNavStyle ...@@ -146,12 +150,47 @@ export default class Activity extends Mixins(TransformStyleMixin, BottomNavStyle
async created() { async created() {
const [res, ] = await editorApi.getFinanceSetting(); const [res, ] = await editorApi.getFinanceSetting();
const [serverTime, ] = await editorApi.getServerTime(); const [serverTime, ] = await editorApi.getServerTime();
console.log(res, 'finance result'); // console.log(res, 'finance result');
console.log(serverTime, 'time'); // console.log(serverTime, 'time');
if (res && res.showFlag === 0) { if (res && res.showFlag === 0) {
this.pageData.elements = this.pageData.elements.filter(v => v.name !== 'freedom-container' || !v.props.isFinance); this.pageData.elements = this.pageData.elements.filter(v => v.name !== 'freedom-container' || !v.props.isFinance);
} }
this.comparePageTime(serverTime); // 验证活动是否在设定的有效期范围内 this.comparePageTime(serverTime); // 验证活动是否在设定的有效期范围内
this.getCouponModalDetail();
}
async getCouponModalDetail() {
// 获取优惠券弹窗相关配置
if (this.pageData?.props?.couponModal && this.pageData?.props?.couponModal.length) {
const couponPushIdList = this.pageData.props.couponModal.join(',');
let tongdunDeviceId = '';
// 先获取同盾ID,再调用优惠券弹窗推送接口
if (EASY_ENV_IS_BROWSER) {
if (isApp) {
// app的时候通过事件获取同盾id
EventBus.$on('NATIVE_EVENT_GET_TDONGDUN_ID', res => {
console.log('getTongdunIdInAppSuccess', JSON.stringify(res));
tongdunDeviceId = res.data.tongdunDeviceId || '';
this.getCouponModalDetailReq(couponPushIdList, tongdunDeviceId);
});
const bridge = new Bridge();
bridge.run({
event: 'getTongdunId',
data: {},
});
}
}
}
},
async getCouponModalDetailReq(couponPushIdList, tongdunDeviceId) {
// 获取推送弹窗数据
if (!couponPushIdList || !tongdunDeviceId) { return; }
const [res, err] = await modalApi.getCouponModal({
couponPushIdList,
tongdunDeviceId
});
if (err) { return; }
this.couponModalData = res;
this.showCouponModal = true;
} }
comparePageTime(serverTime) { comparePageTime(serverTime) {
const { validStartTime, validEndTime } = this.pageInfo; const { validStartTime, validEndTime } = this.pageInfo;
...@@ -208,11 +247,11 @@ export default class Activity extends Mixins(TransformStyleMixin, BottomNavStyle ...@@ -208,11 +247,11 @@ export default class Activity extends Mixins(TransformStyleMixin, BottomNavStyle
async fetchApi(options) { async fetchApi(options) {
const { store, route } = options; const { store, route } = options;
const { pageId } = route.params; const { pageId } = route.params;
try { // try {
await store.dispatch('getFinanceSetting'); // await store.dispatch('getFinanceSetting');
} catch (err) { // } catch (err) {
console.log(err); // console.log(err);
} // }
return store.dispatch('getPageDate', { pageId }); return store.dispatch('getPageDate', { pageId });
} }
updateShopCartCount() { updateShopCartCount() {
......
<template> <template>
<div class="pageContent"> <div class="pageContent">
{{couponModalData}}
<div class="activity" :class="{hasBottomNav: navigatorConfig}" :style="transformStyle(pageData.commonStyle)"> <div class="activity" :class="{hasBottomNav: navigatorConfig}" :style="transformStyle(pageData.commonStyle)">
<template v-if="!noPageData && tenantIdCorrect"> <template v-if="!noPageData && tenantIdCorrect">
<div class="layout"> <div class="layout">
...@@ -24,6 +25,7 @@ ...@@ -24,6 +25,7 @@
</div> </div>
<back-top v-if="showBackTop" :show-back-top="showBackTop" ref="backTop" /> <back-top v-if="showBackTop" :show-back-top="showBackTop" ref="backTop" />
<invalid-notice v-model="pageInvalid" @toOtherActivity="toOtherActivity"/> <invalid-notice v-model="pageInvalid" @toOtherActivity="toOtherActivity"/>
<coupon-modal v-modeo="showCouponModal" />
</template> </template>
<empty-state v-else /> <empty-state v-else />
</div> </div>
......
{ {
"api": { "api": {
"apiHost": "https://quantum-blocks-toc.liangkebang.net", "apiHost": "https://quantum-blocks-ds.liangkebang.net",
"h5Host": "https://quantum-h5-toc.liangkebang.net", "h5Host": "https://quantum-h5-ds.liangkebang.net",
"opapiHost": "https://opapi-toc.liangkebang.net", "opapiHost": "https://opapi-ds.liangkebang.net",
"passportHost": "https://passportapi-toc.liangkebang.net", "passportHost": "https://passportapi-ds.liangkebang.net",
"talosHost": "https://talos-toc.liangkebang.net", "talosHost": "https://talos-ds.liangkebang.net",
"kdspHost": "https://kdsp-api-toc.liangkebang.net", "kdspHost": "https://kdsp-api-ds.liangkebang.net",
"loginUrl": "", "loginUrl": "",
"newApolloFlag": true, "newApolloFlag": true,
"h5ShopHost": "https://tenet-toc.liangkebang.net/#", "h5ShopHost": "https://tenet-ds.liangkebang.net/#",
"mallHost": "https://mall-toc.liangkebang.net", "mallHost": "https://mall-ds.liangkebang.net",
"xyqbH5Host": "https://mapi-toc.liangkebang.net", "xyqbH5Host": "https://mapi-ds.liangkebang.net",
"yxmTenantId": 560761, "yxmTenantId": 560761,
"appIdMap": { "appIdMap": {
"560761": "wxe16bf9293671506c", "560761": "wxe16bf9293671506c",
...@@ -18,8 +18,8 @@ ...@@ -18,8 +18,8 @@
} }
}, },
"redis": { "redis": {
"port": "30895", "port": "31980",
"host": "172.16.4.89", "host": "172.16.4.7",
"password": "", "password": "",
"db": 0 "db": 0
}, },
......
{"apiHost":"https://quantum-blocks-toc.liangkebang.net","h5Host":"https://quantum-h5-toc.liangkebang.net","opapiHost":"https://opapi-toc.liangkebang.net","passportHost":"https://passportapi-toc.liangkebang.net","talosHost":"https://talos-toc.liangkebang.net","kdspHost":"https://kdsp-api-toc.liangkebang.net","loginUrl":"","newApolloFlag":true,"h5ShopHost":"https://tenet-toc.liangkebang.net/#","mallHost":"https://mall-toc.liangkebang.net","xyqbH5Host":"https://mapi-toc.liangkebang.net","yxmTenantId":560761,"appIdMap":{"560761":"wxe16bf9293671506c","560867":"wxccb8435d68e8c7d6"},"qiniuUpHost":"https://up-z0.qiniup.com","qiniuHost":"https://appsync.lkbang.net"} {"apiHost":"https://quantum-blocks-ds.liangkebang.net","h5Host":"https://quantum-h5-ds.liangkebang.net","opapiHost":"https://opapi-ds.liangkebang.net","passportHost":"https://passportapi-ds.liangkebang.net","talosHost":"https://talos-ds.liangkebang.net","kdspHost":"https://kdsp-api-ds.liangkebang.net","loginUrl":"","newApolloFlag":true,"h5ShopHost":"https://tenet-ds.liangkebang.net/#","mallHost":"https://mall-ds.liangkebang.net","xyqbH5Host":"https://mapi-ds.liangkebang.net","yxmTenantId":560761,"appIdMap":{"560761":"wxe16bf9293671506c","560867":"wxccb8435d68e8c7d6"},"qiniuUpHost":"https://up-z0.qiniup.com","qiniuHost":"https://appsync.lkbang.net"}
\ No newline at end of file \ No newline at end of file
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
"test": "cross-env NODE_ENV=production EGG_SERVER_ENV=sit egg-scripts start --port 80 --workers 1", "test": "cross-env NODE_ENV=production EGG_SERVER_ENV=sit egg-scripts start --port 80 --workers 1",
"stop": "egg-scripts stop", "stop": "egg-scripts stop",
"backend": "nohup egg-scripts start --port 7001 --workers 4", "backend": "nohup egg-scripts start --port 7001 --workers 4",
"dev": "cross-env NODE_ENV=test APOLLO_CLUSTER=k8s NAMESPACE=toc npm run apollo && egg-bin dev -r egg-ts-helper/register", "dev": "cross-env NODE_ENV=test APOLLO_CLUSTER=k8s NAMESPACE=ds npm run apollo && egg-bin dev -r egg-ts-helper/register",
"debug": "egg-bin debug -r egg-ts-helper/register", "debug": "egg-bin debug -r egg-ts-helper/register",
"apollo": "node bin/apollo.js", "apollo": "node bin/apollo.js",
"build": "cross-env NODE_ENV=production APOLLO_CLUSTER=3C npm run apollo && cross-env COS_ENV=production easy build --devtool", "build": "cross-env NODE_ENV=production APOLLO_CLUSTER=3C npm run apollo && cross-env COS_ENV=production easy build --devtool",
......
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