Commit de8a20d4 by crushh

update: dist

parents 278e2e6f 208d33a3
<!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/fonts/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//at.alicdn.com/t/font_3229694_vfjtu9hqyrc.css><script src=//at.alicdn.com/t/font_3229694_vfjtu9hqyrc.js></script><link rel=stylesheet href=//at.alicdn.com/t/font_2996579_875h3lycepk.css><script src=//at.alicdn.com/t/font_2996579_875h3lycepk.js></script><link src=//at.alicdn.com/t/font_2859043_udehp133w1.css><script src=//at.alicdn.com/t/font_2859043_udehp133w1.js></script><link href=/marketing/static/css/main.6c36d0c5dc84384038766f8b78c2d41a.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/fonts/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//at.alicdn.com/t/font_3229694_f4zx0uhc8y.css><script src=//at.alicdn.com/t/font_3229694_f4zx0uhc8y.js></script><link rel=stylesheet href=//at.alicdn.com/t/font_2996579_1d7th3zc6it.css><script src=//at.alicdn.com/t/font_2996579_1d7th3zc6it.js></script><link src=//at.alicdn.com/t/font_2859043_udehp133w1.css><script src=//at.alicdn.com/t/font_2859043_udehp133w1.js></script><link href=/marketing/static/css/main.f449bf4de459771390983d7c4a600479.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 src=//web-1251519181.file.myqcloud.com/components/steps.1.0.1.js></script><script type=text/javascript src=/marketing/static/js/manifest.35971490530bb5831541.js></script><script type=text/javascript src=/marketing/static/js/vendor.f17f3d28b64b648f6606.js></script><script type=text/javascript src=/marketing/static/js/main.bdb1d54faf12f641a938.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.9476d372b684d24a5351.js></script><script type=text/javascript src=/marketing/static/js/vendor.f17f3d28b64b648f6606.js></script><script type=text/javascript src=/marketing/static/js/main.3456c2d2fb2e4a3bc8cb.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.
!function(e){var n=window.webpackJsonp_marketing;window.webpackJsonp_marketing=function(r,a,o){for(var d,f,i,b=0,u=[];b<r.length;b++)f=r[b],t[f]&&u.push(t[f][0]),t[f]=0;for(d in a)Object.prototype.hasOwnProperty.call(a,d)&&(e[d]=a[d]);for(n&&n(r,a,o);u.length;)u.shift()();if(o)for(b=0;b<o.length;b++)i=c(c.s=o[b]);return i};var r={},t={24:0};function c(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,c),t.l=!0,t.exports}c.e=function(e){var n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new Promise(function(r,c){n=t[e]=[r,c]});n[2]=r;var a=document.getElementsByTagName("head")[0],o=document.createElement("script");o.type="text/javascript",o.charset="utf-8",o.async=!0,o.timeout=12e4,c.nc&&o.setAttribute("nonce",c.nc),o.src=c.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:"d2e66d7741b8f38c8558",1:"4cfd835d75d2c639d1f8",2:"e9c5839d7edcbaf2df0c",3:"ea6786113019e1d2c839",4:"2d43047a94aef3fd92d9",5:"3b8ece3c446bdb1e29ae",6:"9a995f0cdff670d4f8d3",7:"b1e91d850a61d38e523d",8:"8d9c6b1eac82ed1a52b3",9:"83c93bebb990c9076c7b",10:"da8008653f8c25addc3a",11:"7c2067b1ba786ef1b65c",12:"f1227cca53669d779b78",13:"3bd01eeb6f1b6fb0828d",14:"be5aa3556f1c4057ad85",15:"410d734e15e42bc183a8",16:"91803d84dca88eb2778e",17:"6c7bfbfbe4bbd7a2633a",18:"06bff57b96446d6498dc",19:"3e3263b6a2d044879e2b",20:"5dbfdb8d97c0910fdde0",21:"ad98c8e9d3749f2f1097"}[e]+".js";var d=setTimeout(f,12e4);function f(){o.onerror=o.onload=null,clearTimeout(d);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return o.onerror=o.onload=f,a.appendChild(o),r},c.m=e,c.c=r,c.d=function(e,n,r){c.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},c.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return c.d(n,"a",n),n},c.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},c.p="/marketing/",c.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 f,d,i,u=0,b=[];u<n.length;u++)d=n[u],r[d]&&b.push(r[d][0]),r[d]=0;for(f in c)Object.prototype.hasOwnProperty.call(c,f)&&(e[f]=c[f]);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={24: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:"9df7b6d363b92e4c6a9e",1:"58d1016a421f13c02477",2:"2d97ab8f38d7e456013e",3:"6905f9eee96413587b3b",4:"2d43047a94aef3fd92d9",5:"8e2749d3a189eeb56c2e",6:"9a995f0cdff670d4f8d3",7:"e204eb08edf4921f88da",8:"8d9c6b1eac82ed1a52b3",9:"0f494cbd8f2821fff1d9",10:"da8008653f8c25addc3a",11:"7c2067b1ba786ef1b65c",12:"f1227cca53669d779b78",13:"0098fa7c5f629fa37a39",14:"be5aa3556f1c4057ad85",15:"410d734e15e42bc183a8",16:"91803d84dca88eb2778e",17:"6c7bfbfbe4bbd7a2633a",18:"3ba3b70d72322dd6fc56",19:"20596c2fde39ba8b7da1",20:"5dbfdb8d97c0910fdde0",21:"ad98c8e9d3749f2f1097"}[e]+".js";var f=setTimeout(d,12e4);function d(){o.onerror=o.onload=null,clearTimeout(f);var a=r[e];0!==a&&(a&&a[1](new Error("Loading chunk "+e+" failed.")),r[e]=void 0)}return o.onerror=o.onload=d,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
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.
......@@ -9,10 +9,10 @@
<link rel="stylesheet" type="text/css" href="<%= htmlWebpackPlugin.options.BASE_URL %>static/fonts/iconfont.css">
<link rel="stylesheet" type="text/css" href="<%= htmlWebpackPlugin.options.BASE_URL %>static/css/common.css">
<!-- <link rel="stylesheet" href="//at.alicdn.com/t/font_2996579_93aeeozj35q.css"> -->
<link rel="stylesheet" href="//at.alicdn.com/t/font_3229694_vfjtu9hqyrc.css"> <!--GIC3.0营销-->
<script src="//at.alicdn.com/t/font_3229694_vfjtu9hqyrc.js"></script> <!--GIC3.0营销-->
<link rel="stylesheet" href="//at.alicdn.com/t/font_2996579_875h3lycepk.css"> <!-- 3.0企业 -->
<script src="//at.alicdn.com/t/font_2996579_875h3lycepk.js"></script><!-- 3.0企业 -->
<link rel="stylesheet" href="//at.alicdn.com/t/font_3229694_f4zx0uhc8y.css"> <!--GIC3.0营销-->
<script src="//at.alicdn.com/t/font_3229694_f4zx0uhc8y.js"></script> <!--GIC3.0营销-->
<link rel="stylesheet" href="//at.alicdn.com/t/font_2996579_1d7th3zc6it.css"> <!-- 3.0企业 -->
<script src="//at.alicdn.com/t/font_2996579_1d7th3zc6it.js"></script><!-- 3.0企业 -->
<link src="//at.alicdn.com/t/font_2859043_udehp133w1.css"><!--3.0组件库-->
<script src="//at.alicdn.com/t/font_2859043_udehp133w1.js"></script><!--3.0组件库-->
<!-- <link rel="stylesheet" href="//web-1251519181.file.myqcloud.com/components/element.2.12.0.css"> -->
......@@ -41,6 +41,6 @@
<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 src="//web-1251519181.file.myqcloud.com/components/steps.1.0.1.js"></script>
<!-- <script src="//web-1251519181.file.myqcloud.com/components/steps.1.0.1.js"></script> -->
</body>
</html>
......@@ -150,6 +150,9 @@ a:hover {
.mt15{
margin-top: 15px!important;
}
.mt16{
margin-top: 16px!important;
}
.mt17{
margin-top: 17px!important;
}
......@@ -250,12 +253,18 @@ a:hover {
.w160{
width: 160px!important;
}
.w180{
width: 180px !important;
}
.w200{
width: 200px!important;
}
.w250{
width: 250px!important;
}
.w256{
width: 256px!important;
}
.w260{
width: 260px!important;
}
......@@ -271,6 +280,9 @@ a:hover {
.w350{
width: 350px!important;
}
.w382{
width: 382px!important;
}
.w400{
width: 400px!important;
}
......
<template>
<div>
<dm-layout :projectName="projectName" v-if="!isQianKun">
<dm-layout :projectName="projectName" v-if="$store.getters.getShowLayout">
<keep-alive>
<router-view v-if="$route.meta.keepAlive" />
</keep-alive>
......@@ -20,6 +20,7 @@ export default {
components: {
description
},
data() {
return {
collapseFlag: false,
......
<template>
<div>
<label class="el-button el-button--primary" :class="{ 'is-disabled': copyDisabled }" :style="labelStyle">
<label :class="[textType ? 'el-button el-button--text el-button--small' : 'el-button el-button--primary', copyDisabled ? 'is-disabled' : '']" :style="labelStyle">
<i v-if="icon" :class="icon"></i>
{{ label }}
<input type="file" style="display:none;" :disabled="copyDisabled" accept="image/gif, image/jpeg,image/png" ref="uploader" v-upload="this" />
......@@ -63,6 +63,10 @@ export default {
disabled: {
type: Boolean,
default: false
},
textType: {
type: Boolean,
default: false
}
},
watch: {
......
......@@ -44,9 +44,10 @@ export default {
el.addEventListener('change', function(e) {
if (e.target.value) binding.value.loading = true;
else return;
console.log(binding.value);
const size = binding.value.limit && binding.value.limit.maxSize ? binding.value.limit.maxSize : 2; // 默认最大2M限制
if (el.files[0].size > size * 1024 * 1024) {
binding.value.$tips({ type: 'warning', message: `上传${binding.value.acceptType.indexOf('image') >= 0 ? '图片' : '文件'}不能大于${size}M` });
binding.value.$tips({ type: 'warning', message: `上传${binding.value.fileType.indexOf('image') >= 0 ? '图片' : '文件'}不能大于${size}M` });
binding.value.loading = false;
return;
}
......
......@@ -7,6 +7,7 @@ import { axios } from './service/api/index';
import directives from './directives';
import limit from '@/utils/limiting';
import scrollToError from '@/assets/common.js';
Vue.config.productionTip = false;
if (process.env.NODE_ENV == 'development') { // eslint-disable-line
......@@ -18,6 +19,7 @@ Vue.prototype.scrollToError = scrollToError;
Vue.prototype.axios = axios;
Vue.prototype.axios.withCredentials = true;
Vue.prototype.axios.defaults.timeout = 50000;
Object.keys(directives).map(item => Vue.directive(item, directives[item]));
window.$bus = new Vue();
let flag = false;
......
import Vue from 'vue';
import Router from 'vue-router';
import routes from './routes';
// import store from '@/store';
// import axios from 'axios';
import store from '@/store';
import axios from 'axios';
Vue.use(Router);
......@@ -25,38 +25,32 @@ let router = new Router({
router.beforeEach((to, from, next) => {
// 获取是否限流
let path = to.path;
Object.keys(to.params).map(key => {
path = path.replace(to.params[key], `:${key}`);
});
next();
// axios
// .get(`/api-plug/rate-limit?requestPath=${path}&enterpriseId=${store.state.marketing.enterpriseId}`)
// .then(limitRes => {
// // 这个接口不规范 不用封装的request
// // code: 0正常 1必填参数未填写 2限流
// if (limitRes.data.resultCode == 1) {
// store.commit('updateLimit', true); // 更新正在限流
// next({ path: '/limit' });
// } else {
// store.commit('updateLimit', false);
// if (to.path == '/limit') {
// next('/');
// }
// next();
// }
// })
// .catch(() => {
// next();
// });
// document.title = to.name;
// if (to.path != '/limit' && store.state.marketing.isLimit) {
// next({ path: '/limit' });
// } else if (to.path == '/limit' && !store.state.marketing.isLimit) {
// next({ path: '/' });
// } else {
// next();
// }
if (to.meta.hiddenLayout) {
store.dispatch('setShowLayout', false);
}
axios
.get(`/api-plug/rate-limit?requestPath=${path}&enterpriseId=${store.state.marketing.enterpriseId}`)
.then(limitRes => {
// 这个接口不规范 不用封装的request
// code: 0正常 1必填参数未填写 2限流
if (limitRes.data.resultCode == 1) {
store.commit('updateLimit', true); // 更新正在限流
next({ path: '/limit' });
} else {
store.commit('updateLimit', false);
if (to.path == '/limit') {
next('/');
}
next();
}
})
.catch(() => {
next();
});
});
export default router;
......@@ -219,6 +219,52 @@ export default {
meta: {
path: '/game/klfl'
}
},
{
path: 'cmh',
name: '拆盲盒列表',
component: () => import(/* webpackChunkName: "game" */ '../../views/game/cmh/index.vue')
},
{
path: 'cmh/add',
name: '新建拆盲盒',
component: () => import(/* webpackChunkName: "game" */ '../../views/game/cmh/form.vue'),
meta: {
type: 'add',
hiddenLayout: true
}
},
{
path: 'cmh/edit/:id',
name: '编辑拆盲盒',
component: () => import(/* webpackChunkName: "game" */ '../../views/game/cmh/form.vue'),
meta: {
type: 'edit'
}
},
{
path: 'cmh/info/:id',
name: '查看拆盲盒',
component: () => import(/* webpackChunkName: "game" */ '../../views/game/cmh/info.vue'),
meta: {
type: 'info'
}
},
{
path: 'cmh/copy/:id',
name: '复制拆盲盒',
component: () => import(/* webpackChunkName: "game" */ '../../views/game/cmh/form.vue'),
meta: {
type: 'copy'
}
},
{
path: 'cmh/statistics/:id',
name: '拆盲盒数据统计',
component: () => import(/* webpackChunkName: "game" */ '../../views/game/cmh/form.vue'),
meta: {
type: 'statistics'
}
}
]
};
......@@ -156,5 +156,24 @@ export const getCouponStock = params => requests(PREFIX + 'get-coupon-stock', pa
// 游戏营销-- 获取游戏更新时间
export const getGameDataUpdatetime = params => requests(PREFIX + 'get-game-data-updatetime', params);
//游戏营销--拆盲盒游戏分页列表
export const cmhPage = params => requests(PREFIX + '/game-pro/page', params, true, false, 'post');
//游戏营销--拆盲盒游戏统计数据
export const cmhStatistics = params => requests(PREFIX + '/game-pro/page-statistics', params);
//游戏营销--拆盲盒游戏新建
export const initActivity = params => requests(PREFIX + '/game-pro/init-activity', params);
//游戏营销--拆盲盒-获取游戏详细信息
export const getGameDetail = params => requests(PREFIX + '/game-pro/getGameDetail', params, true, false, 'get');
//游戏营销--拆盲盒-根据类型获取游戏模板信息
export const getGameTemplateByType = params => requests(PREFIX + '/game-pro/get-game-template-by-type', params, true, false, 'get');
// 生成小程序游戏链接
export const generateMiniProgramLink = params => requests('api-admin/get-page-link-game', params);
//卡券回显 key 卡券ID ; value 卡券状态 0正常 1删除 2失效
export const cardView = params => requests(PREFIX + '/game-pro/card-view', params);
......@@ -18,7 +18,8 @@ const state = {
userId: '',
departAuth: 0,
superAdmin: 0,
keepAlive: []
keepAlive: [],
showLayout: true
};
// getters
......@@ -38,7 +39,8 @@ const getters = {
},
getLimitCodeList: state => state.limitCodeList,
// 查询是否被限制使用微信模版消息 true:被限制
getLimitWechatTemplateMessage: state => state.limitCodeList.some(el => el == 'wxTemplateMessage')
getLimitWechatTemplateMessage: state => state.limitCodeList.some(el => el == 'wxTemplateMessage'),
getShowLayout: state => state.showLayout
};
// actions
......@@ -57,6 +59,9 @@ const actions = {
async getIsShowSelfData(state) {
let res = await getIsShowSelf();
this.commit('mutations_auth', res.result);
},
setShowLayout({ commit }, item) {
commit('mutations_Layout', item);
}
};
......@@ -109,6 +114,9 @@ const mutations = {
},
setKeepAlive(state, val) {
state.keepAlive = val;
},
mutations_Layout(state, val) {
state.showLayout = val;
}
};
......
<template>
<div>
<div class="navtop">
<div class="gameName">
<img src="../../../assets/img/recharge_phone.png" alt="" />
<span>幸运盲盒</span>
</div>
<div class="rightBtn">
<el-button @click="returnNext">退出</el-button>
<el-button type="primary">发布并预览</el-button>
</div>
</div>
<div class="content">
<div class="left-content">
<el-menu class="dm-aside-menu" ref="asideMenu" :default-active="menuActive" @select="handleMenuSelect">
<el-menu-item class="dm-sub-menu" v-for="(el, index) in menuList" :key="index" :index="index">
{{ el }}
</el-menu-item>
</el-menu>
<div class="iphone" v-if="menuActive == 0">
<span class="gameTitle">{{ gameName }}</span>
<img src="../../../assets/img/Navbar.png" alt="" />
<gameTemplate :bgImg="bgImg" :tipsImg="tipsImg" :boxImg="boxImg" :adImg="adImg" />
</div>
<div class="iphone" v-else>
<img :src="bcImg[menuActive]" />
</div>
</div>
<div class="rightForm">
<dm-steps :active="active" simple>
<dm-step title="步骤一" @click.native="active = 0"></dm-step>
<dm-step title="步骤二" @click.native="active = 1"></dm-step>
<dm-step title="步骤三" @click.native="active = 2"></dm-step>
</dm-steps>
<div class="formContent">
<baseConfig :templateArr="templateData" v-show="active == 0" @change="handleBaseConfigChange" @nextStep="data => nextStep(1, data)" />
<prizeConfig v-show="active == 1" @nextStep="data => nextStep(2, data)" />
</div>
</div>
</div>
</div>
</template>
<script>
import steps from '@/views/game/dm-steps/steps';
import step from '@/views/game/dm-step/step';
import baseConfig from './base-config.vue';
import prizeConfig from './prize-config.vue';
import { getGameTemplateByType } from '@/service/api/gameApi.js';
import gameTemplate from './gameTemplate';
export default {
data() {
return {
active: 0,
menuActive: 0,
templateData: [],
prizeMax: 10,
prizeMin: 1,
gameName: '游戏名称',
bcImg: {
1: require('@/assets/img/mould_01_rule_page.png'),
2: require('@/assets/img/mould_01_prize_page.png'),
3: require('@/assets/img/mould_01_success_page.png'),
4: require('@/assets/img/mould_01_fail_page.png'),
5: require('@/assets/img/mould_01_share_page.png')
},
menuList: ['首页', '活动规则', '我的奖品', '中奖', '未中奖', '分享效果'],
bgImg: 'https://pic01-10001430.cos.ap-shanghai.myqcloud.com/game/template1/mould_01_bg.png',
tipsImg: 'https://pic01-10001430.cos.ap-shanghai.myqcloud.com/game/template1/tips_btn.png',
boxImg: 'https://pic01-10001430.cos.ap-shanghai.myqcloud.com/game/template1/mould_01_box01.png',
adImg: ''
};
},
components: {
'dm-steps': steps,
'dm-step': step,
baseConfig,
gameTemplate,
prizeConfig
},
mounted() {
this.getGameTemplateByType();
},
destroyed() {
this.$store.dispatch('setShowLayout', true);
},
methods: {
handleBaseConfigChange(data) {
console.log('handleBaseConfigChange----->');
console.log(data);
const { backImageUrl, noticeImageUrl, adsImageUrl, gameName } = data;
this.bgImg = backImageUrl;
this.tipsImg = noticeImageUrl;
this.boxImg = data.prizeStyleJson[0].imageNoSelectUrl;
this.adImg = adsImageUrl;
this.gameName = gameName;
},
returnNext() {
this.$store.dispatch('setShowLayout', true);
this.$router.go(-1);
},
handleMenuSelect(index) {
this.menuActive = index;
},
getGameTemplateByType() {
getGameTemplateByType({ templateType: 1 }).then(res => {
if (res.code == 0) {
if (res.result && res.result.length) {
res.result.forEach(item => {
const { gameTemplateMaterialList } = item;
let materialMap = {};
gameTemplateMaterialList &&
gameTemplateMaterialList.forEach(val => {
if (materialMap.hasOwnProperty(val.materialKey)) {
materialMap[val.materialKey].push(val);
} else {
materialMap[val.materialKey] = [val];
}
});
item.materialMap = materialMap;
});
this.templateData = res.result;
const { prizeMax, prizeMin } = res.result[0];
this.prizeMax = prizeMax;
this.prizeMin = prizeMin;
}
console.log(this.templateData);
}
});
},
nextStep(step, data) {
this.active = step;
console.log(data);
}
}
};
</script>
<style lang="scss" scoped>
.navtop {
width: 100%;
height: 52px;
background: #ffffff;
box-shadow: 0px 4px 8px 0px rgba(220, 223, 230, 0.4);
border-radius: 4px 0px 0px 0px;
display: flex;
padding: 10px 20px;
justify-content: space-between;
box-sizing: border-box;
position: relative;
.gameName {
align-items: center;
display: flex;
img {
width: 30px;
}
span {
color: #303133;
font-weight: 600;
font-size: 17px;
margin-left: 12px;
}
}
}
.content {
display: flex;
overflow: hidden;
}
.left-content {
width: 520px;
height: calc(100vh - 52px);
background: #f7f8fa;
box-sizing: border-box;
padding: 30px 0 20px 20px;
display: flex;
}
.dm-aside-menu {
width: 90px;
height: 100%;
border-right: none;
background-color: #f7f8fa;
box-sizing: border-box;
overflow-y: auto;
/deep/ .el-menu {
background-color: transparent;
}
/deep/ .el-menu-item {
padding-left: 10px !important;
height: 32px;
width: auto;
font-size: 14px;
font-weight: 400;
color: #303133;
line-height: 34px;
border-radius: 4px;
&:hover {
background: #ebeffe;
}
&.is-active {
font-weight: 500;
color: #2f54eb;
background: #ebeffe;
}
+ .el-menu-item {
margin-top: 8px;
}
}
}
.iphone {
width: 375px;
background: #ffffff;
border-radius: 8px 8px 0px 0px;
margin: 0 20px 0 13px;
position: relative;
img {
width: 375px;
}
}
.gameTitle {
font-size: 17px;
position: absolute;
color: #000000;
font-weight: 600;
z-index: 100;
top: 56px;
left: 154px;
}
.rightForm {
padding: 30px 20px 0 30px;
box-sizing: border-box;
width: calc(100vw - 520px);
height: calc(100vh - 108px);
background: #ffffff;
.formContent {
margin-top: 20px;
overflow-y: auto;
height: 90%;
}
}
</style>
<template>
<div class="template-game">
<img class="bg-image" :src="bgImg" />
<div class="content">
<div class="right-btn rule">游戏规则</div>
<div class="right-btn award">我的奖品</div>
<div class="music-icon iconfont" :class="isPlay ? 'icon-yinfu' : 'icon-xingzhuangjiehe2x'"></div>
<div class="integral">100积分/次</div>
<!-- <swiper
class="swiper-class"
ref="mySwiper"
:options="swiperOptions"
:autoplay="swiperOptions.autoplay"
>
<swiper-slide v-for="item in list" :key="item">
<div class="swiper-item">
<img
src="https://pic01-10001430.cos.ap-shanghai.myqcloud.com/game/template1/tips_bg.png"
/>
<span>{{ item }}</span>
</div>
</swiper-slide>
</swiper> -->
<div class="box-box">
<img v-for="item in boxList" :key="item" :src="boxImg" :style="{ left: item.left, top: item.top }" @click="showOpenBoxDialog = true" />
</div>
<div class="points-count-box">
<div class="text-box">
<div class="text">1500</div>
<img class="text-shadow" src="https://pic01-10001430.cos.ap-shanghai.myqcloud.com/game/template1/circle_bg.png" />
<img class="title-image" src="https://pic01-10001430.cos.ap-shanghai.myqcloud.com/game/template1/我的积分.png" />
</div>
<div class="game-name-box">
<img :src="tipsImg" style="width: 224px;height: 22px;" />
</div>
<div class="text-box">
<div class="text">55</div>
<img class="text-shadow" src="https://pic01-10001430.cos.ap-shanghai.myqcloud.com/game/template1/circle_bg.png" />
<img class="title-image" src="https://pic01-10001430.cos.ap-shanghai.myqcloud.com/game/template1/剩余次数.png" />
</div>
</div>
<img class="ad-image" :src="adImg" mode="widthFix" v-id="adImg" />
<!-- <div class="share-box" @click="clickShareBtn">
<div class="icon">
<div class="iconfont icon-yaoqing"></div>
</div>
<img src="https://pic01-10001430.cos.ap-shanghai.myqcloud.com/game/template1/邀请助力.png" />
</div> -->
</div>
</div>
</template>
<script>
import img from '../../../components/upload/img.vue';
export default {
components: { img },
data() {
return {
list: ['刷卡拉拉卡', '阿拉卡萨卢克和史莱克', '刷卡拉拉卡', '阿拉卡萨卢克和史莱克'],
boxList: [
{
left: '51%',
top: '214px'
},
{
left: '33%',
top: '262px'
},
{
left: '66%',
top: '258px'
},
{
left: '16%',
top: '307px'
},
{
left: '52%',
top: '306px'
},
{
left: '84%',
top: '307px'
},
{
left: '35%',
top: '351px'
},
{
left: '68%',
top: '355px'
},
{
left: '53%',
top: '400px'
}
],
isPlay: true,
name: '猜盲盒'
};
},
props: {
bgImg: {
type: String,
default: ''
},
tipsImg: {
type: String,
default: ''
},
boxImg: {
type: String,
default: ''
},
adImg: {
type: String,
default: ''
}
},
created() {
document.title = '猜盲盒';
}
};
</script>
<style lang="scss" scoped>
img {
object-fit: fill;
}
.template-game {
}
.bg-image {
width: 375px;
position: absolute;
height: 724px;
overflow-y: auto;
}
.content {
position: relative;
z-index: 1;
}
.music-icon {
text-align: center;
width: 30px;
height: 30px;
line-height: 30px;
border-radius: 50%;
position: absolute;
top: 20px;
left: 20px;
z-index: 10;
background: rgba(39, 41, 43, 0.5);
color: white;
font-size: 20px;
/* transform: rotate(90deg); */
}
@keyframes transform {
0% {
transform: rotate(0%);
}
25% {
transform: rotate(90deg);
}
50% {
transform: rotate(180deg);
}
75% {
transform: rotate(270deg);
}
100% {
transform: rotate(360deg);
}
}
.music-icon.icon-yinfu {
animation-name: transform;
animation-duration: 3s;
animation-timing-function: linear;
animation-iteration-count: infinite;
}
.right-btn {
writing-mode: tb-rl;
position: absolute;
right: 0;
top: 20px;
padding: 7px 5px;
border-radius: 8px 0 0 8px;
background: rgba(39, 41, 43, 0.5);
z-index: 10;
color: white;
font-size: 11px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
}
.right-btn.award {
top: 89px;
}
.integral {
position: absolute;
z-index: 2;
top: 126px;
left: 50%;
transform: translateX(-50%);
min-width: 120px;
height: 24px;
line-height: 24px;
text-align: center;
padding: 0 10px;
box-sizing: border-box;
border-radius: 8px;
border: 1px solid white;
background: rgba(255, 255, 255, 0.3);
color: #27292b;
font-size: 12px;
}
.swiper-class {
position: absolute;
left: 20px;
top: 160px;
z-index: 10;
width: 300px;
height: 36px;
}
.swiper-item {
width: 300px;
height: 36px;
box-sizing: border-box;
border-radius: 17px 0 0 17px;
position: relative;
display: flex;
align-items: center;
}
.swiper-item img {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
.swiper-item span {
padding-left: 30px;
color: white;
font-size: 12px;
z-index: 2;
}
.box-box {
height: 531px;
width: 100%;
position: relative;
}
@keyframes box-animation {
from {
transform: translate(-50%, -50%);
}
to {
transform: translate(-50%, 0);
}
}
.box-box img {
position: absolute;
transform: translate(-50%, 0);
width: 95px;
height: 95px;
animation-timing-function: ease-in;
/* animation-name: box-animation; */
animation-duration: 1s;
}
.box-box img:nth-child(1) {
animation-delay: 0s;
}
.box-box img:nth-child(2) {
animation-delay: 0.1s;
}
.box-box img:nth-child(3) {
animation-delay: 0.2s;
}
.box-box img:nth-child(4) {
animation-delay: 0.3s;
}
.box-box img:nth-child(5) {
animation-delay: 0.4s;
}
.box-box img:nth-child(6) {
animation-delay: 0.5s;
}
.box-box img:nth-child(7) {
animation-delay: 0.6s;
}
.box-box img:nth-child(8) {
animation-delay: 0.7s;
}
.box-box img:nth-child(9) {
animation-delay: 0.8s;
}
.points-count-box {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 18px;
}
.text-box {
position: relative;
text-align: center;
}
.text-box .text {
font-family: DINAlternate-Bold, DINAlternate;
font-size: 20px;
font-weight: 600;
color: #388ccc;
line-height: 23px;
position: relative;
z-index: 2;
}
.text-box .text-shadow {
position: absolute;
left: 50%;
top: 17px;
transform: translateX(-50%);
width: 41px;
height: 8px;
z-index: 1;
}
.text-box .title-image {
padding-top: 5px;
width: 48px;
height: 16px;
}
.game-name-box {
}
.ad-image {
margin: 39px 15px 15px;
border-radius: 8px;
width: calc(100% - 30px);
}
.share-box {
position: absolute;
z-index: 10;
right: 20px;
bottom: 40px;
padding: 10px;
}
.share-box .icon {
display: flex;
align-items: center;
justify-content: center;
width: 38px;
height: 38px;
border-radius: 50%;
background: #27292b;
box-shadow: inset 0px 3px 2px 0px rgba(243, 243, 243, 0.4);
}
.share-box .icon .iconfont {
background-image: -webkit-linear-gradient(180deg, #01ffde 0%, #01fff4 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-size: 18px;
}
.share-box img {
position: absolute;
left: 50%;
bottom: 0;
width: 48px;
height: 16px;
transform: translateX(-50%);
z-index: 2;
}
</style>
<template>
<div>
<label class="el-button el-button--primary" :class="{ 'is-disabled': disabled }">
<label :class="[textType ? 'el-button el-button--text el-button--small' : 'el-button el-button--primary', disabled ? 'is-disabled' : '']">
{{ disabled ? '上传中...' : label }}
<input type="file" style="display:none;" :disabled="disabled" accept="audio/mpeg" ref="uploader" v-audioUpload="this" />
</label>
......@@ -29,6 +29,10 @@ export default {
url: {
type: String,
default: '/api-marketing/upload-game-music'
},
textType: {
type: Boolean,
default: false
}
},
data() {
......
<template>
<el-dialog title="游戏链接下载" :visible.sync="show" width="600px" :before-close="close">
<el-dialog title="游戏预览" :visible.sync="show" width="600px" :before-close="close">
<div class="link-tip">
<i class="el-icon-info"></i>
非会员进入游戏页面将提示进行认证注册成为会员,认证成功后自动返回游戏页面
</div>
<div class="link-title">
<i class="icon iconfont icon-xiaochengxu4" style="color:#6457AD"></i>
小程序链接
</div>
<div v-loading="loading" class="links-block">
<div class="links__body">
<div class="links__body--url">{{ miniprogram.link }}</div>
<div class="links__body--btn">
<el-button v-clipboard:text="miniprogram.link" type="text" icon="iconfont icon-lianjie fz14"> 复制链接</el-button>
<el-button v-clipboard:text="miniprogram.link" v-show="miniprogram.link" type="text" icon="iconfont icon-lianjie fz14"> 复制链接</el-button>
</div>
</div>
<div class="link__divider"></div>
<div class="links__qr">
<!-- <vue-qr id="qrWrap" :text="qcText" :size="102" :margin="0" :logoMargin="10"></vue-qr> -->
<div style="text-align:center">
<el-image style="width:102px;height:102px;border:4px solid #fff;cursor: pointer;" lazy :src="miniprogram.url" @click.native="onView(false)">
<!-- <img slot="placeholder" style="width:102px;height:102px" src="@/assets/img/loaderror.png" /> -->
<div slot="placeholder" style="display:flex;align-items:center;justify-content:center;width:100%;height:100%;">
<i class="el-icon-picture-outline" style="font-size:30px"></i>
</div>
</el-image>
</div>
<el-button class="links__qr--btn" type="text" icon="iconfont icon-icon_yunxiazai fz14 mr4" @click="downloadMiniporgramImg">小程序二维码下载</el-button>
<el-button class="links__qr--btn" v-show="miniprogram.url" type="text" icon="iconfont icon-icon_yunxiazai fz14 mr4" @click="downloadMiniporgramImg">小程序二维码下载</el-button>
</div>
</div>
<!-- <div class="link-title">
<i class="icon iconfont icon-fuwuhao2" style="color:#2CBB64"></i>
H5链接
<div slot="footer" v-if="showFooter">
<slot></slot>
</div>
<div class="links-block" style="margin-bottom:25px">
<div class="links__body">
<div class="links__body--url">{{ obj.gameUrl }}</div>
<div class="links__body--btn">
<el-button v-clipboard:text="obj.gameUrl" type="text" icon="iconfont icon-lianjie fz14"> 复制链接</el-button>
</div>
</div>
<div class="link__divider"></div>
<div class="links__qr">
<vue-qr id="qrWrap" :text="qcText" :size="510" :logoScale="5" :margin="0" :logoMargin="10" @click.native="onView(true)"></vue-qr>
<el-button class="links__qr--btn" type="text" icon="iconfont icon-icon_yunxiazai fz14 mr4" @click="downloadImg">服务号二维码下载</el-button>
</div>
</div> -->
</el-dialog>
</template>
<script>
......@@ -73,6 +53,10 @@ export default {
gameTypeName: {
type: String,
default: ''
},
showFooter: {
type: Boolean,
default: false
}
},
data() {
......@@ -120,14 +104,20 @@ export default {
case '口令福利':
gameType = 'GAME_LINK_KLFL';
break;
case '拆盲盒':
gameType = 'GAME_LINK_CMH';
break;
}
generateMiniProgramLink({
id: this.obj.gameId || this.obj.gameActivityId,
linkId: gameType
}).then(res => {
this.miniprogram = res.result;
this.loading = false;
});
})
.then(res => {
this.miniprogram = res.result;
})
.finally(() => {
this.loading = false;
});
},
close() {
this.$emit('update:show', false);
......@@ -180,7 +170,7 @@ export default {
overflow-x: hidden;
overflow-y: auto;
word-break: break-all;
padding: 13px 22px 0 16px;
padding: 13px 16px 0 16px;
line-height: 17px;
font-size: 12px;
}
......@@ -204,7 +194,7 @@ export default {
}
.links-block {
display: flex;
background: #f5f7fa;
background: #f7f8fa;
margin: 10px 0 10px;
}
.link-title {
......@@ -220,21 +210,20 @@ export default {
}
}
.link-tip {
width: 544px;
background: #e6f7ff;
border-radius: 4px;
border: 1px solid #91d5ff;
font-size: 13px;
color: #606266;
line-height: 1.2;
padding: 10px 0;
margin-bottom: 10px;
width: 552px;
background: #fcf6f1;
border-radius: 2px;
font-size: 12px;
color: #303133;
line-height: 22px;
padding: 5px 0;
margin-bottom: 16px;
display: flex;
.el-icon-info {
line-height: 18px;
margin-left: 16px;
margin-right: 4px;
color: #2f54eb;
line-height: 22px;
margin-left: 17px;
margin-right: 9px;
color: #fa8c16;
font-size: 12px;
}
}
......
......@@ -28,6 +28,9 @@ export default {
case 5:
this.gameTypeName = '口令福利';
break;
case 6:
this.gameTypeName = '拆盲盒';
break;
}
this.linksObj = row;
this.linkShow = true;
......
import Step from './step';
/* istanbul ignore next */
const GicStep = {
install(Vue) {
Vue.component(Step.name, Step);
}
};
if (typeof window.Vue !== 'undefined' && window.Vue) {
window.Vue.use(GicStep);
}
export default GicStep;
# 副标题
```
<h2>simple样式</h2>
<dm-steps :active="active" simple>
<dm-step title="步骤一" @click.native="active=0"></dm-step>
<dm-step title="步骤二" @click.native="active=1"></dm-step>
<dm-step title="步骤三" @click.native="active=2"></dm-step>
</dm-steps>
<h2>线性样式</h2>
<dm-steps :active="active">
<dm-step title="步骤一" ></dm-step>
<dm-step title="步骤二" ></dm-step>
<dm-step title="步骤三" ></dm-step>
```
### props
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 是否必传 |
| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ |
| space | 每个 step 的间距,不填写将自适应间距。支持百分比 | [Number, String] | -- | -- | 否 |
| active | 设置当前激活步骤 | Number | -- | 0 | 否 |
| simple | 样式 | Boolean | | false| 否 |
### 更新日志:
1.1.0 重写完成 by黄冷
\ No newline at end of file
<template>
<div class="steps" v-if="$parent.simple">
<div class="step-item" :class="[$parent.active === index ? 'active' : '']">
<slot name="title"> {{ title }} </slot>
</div>
<span class="triangle" :class="[$parent.active === index ? 'triangle-active' : '', $parent.active == index + 1 ? 'triangle-bg' : 'triangle-default']"></span>
</div>
<div v-else class="dm-step" :style="style" :class="[isLast && !space && 'is-flex']">
<div class="dm-step-box" :class="`is-${currentStatus}`">
<!-- 线 -->
<div class="dm-step__line" :style="isLast ? '' : { marginRight: $parent.stepOffset + 'px' }">
<i class="dm-step__line-inner" :style="lineStyle"></i>
</div>
<div class="dm-step__head">
<!-- icon -->
<div class="dm-step__icon">
<slot v-if="currentStatus !== 'success' && currentStatus !== 'error'" name="icon">
<i v-if="icon" class="dm-step__icon-inner" :class="[icon]"></i>
<div class="dm-step__icon-inner" v-if="!icon">{{ index + 1 }}</div>
</slot>
<i v-else :class="['el-icon-' + (currentStatus === 'success' ? 'check' : 'close')]" class="dm-step__icon-inner is-status"> </i>
</div>
<!-- 内容区 -->
<div class="dm-step__content" :class="`is-${currentStatus}`">
<slot name="title">{{ title }}</slot>
</div>
</div>
</div>
<!-- 文字描述 -->
<div class="dm-step__description" :class="`is-${currentStatus}`">
<slot name="description">{{ description }}</slot>
</div>
</div>
</template>
<script>
export default {
name: 'vue-gic-step',
props: {
title: String,
icon: String,
description: String,
status: String
},
data() {
return {
index: -1,
lineStyle: {},
internalStatus: ''
};
},
beforeCreate() {
this.$parent.steps.push(this);
},
beforeDestroy() {
const steps = this.$parent.steps;
const index = steps.indexOf(this);
if (index >= 0) {
steps.splice(index, 1);
}
},
computed: {
currentStatus() {
return this.status || this.internalStatus;
},
prevStatus() {
const prevStep = this.$parent.steps[this.index - 1];
return prevStep ? prevStep.currentStatus : 'wait';
},
isLast() {
const parent = this.$parent;
return parent.steps[parent.steps.length - 1] === this;
},
space() {
const {
$parent: { space }
} = this;
return space;
},
style: function() {
const style = {};
const parent = this.$parent;
const len = parent.steps.length;
const space = typeof this.space === 'number' ? this.space + 'px' : this.space ? this.space : 100 / (len - 1) + '%';
style.flexBasis = space;
return style;
}
},
methods: {
updateStatus(val) {
const prevChild = this.$parent.$children[this.index - 1];
if (val > this.index) {
this.internalStatus = this.$parent.finishStatus;
} else if (val === this.index && this.prevStatus !== 'error') {
this.internalStatus = this.$parent.processStatus;
} else {
this.internalStatus = 'wait';
}
if (prevChild) prevChild.calcProgress(this.internalStatus);
},
calcProgress(status) {
let step = 100;
const style = {};
style.transitionDelay = 150 * this.index + 'ms';
if (status === 'wait') {
step = 0;
style.transitionDelay = -150 * this.index + 'ms';
}
style.borderWidth = step ? '1px' : 0;
style.width = step + '%';
this.lineStyle = style;
}
},
mounted() {
const unwatch = this.$watch('index', val => {
this.$watch('$parent.active', this.updateStatus, { immediate: true });
this.$watch(
'$parent.processStatus',
() => {
const activeIndex = this.$parent.active;
this.updateStatus(activeIndex);
},
{ immediate: true }
);
unwatch();
});
}
};
</script>
<style lang="scss">
.dm-step {
position: relative;
flex-shrink: 1;
&:last-of-type.is-flex {
flex-basis: 80px !important;
flex-shrink: 1;
flex-grow: 0;
.dm-step__content {
flex: 1;
}
}
.dm-step-box {
position: relative;
width: 100%;
&.is-process {
color: #fff;
border-color: #2f54eb;
.dm-step__icon {
background-color: #2f54eb;
}
}
&.is-finish,
&.is-success {
color: #2f54eb;
border-color: #2f54eb;
}
&.is-wait {
color: #c0c4cc;
border-color: #c0c4cc;
}
}
.dm-step__line {
position: absolute;
height: 1px;
top: 11px;
left: 0;
right: 0;
border-color: inherit;
background-color: #dcdfe6;
}
.dm-step__line-inner {
display: block;
border-top: 1px solid;
border-color: inherit;
transition: 0.15s ease-out;
box-sizing: border-box;
width: 0;
height: 0;
}
.dm-step__head {
display: flex;
width: 100%;
border-color: inherit;
}
.dm-step__icon {
position: relative;
z-index: 1;
display: inline-flex;
justify-content: center;
align-items: center;
width: 24px;
height: 24px;
font-size: 14px;
box-sizing: border-box;
background-color: #fff;
transition: 0.15s ease-out;
border-radius: 50%;
border: 1px solid;
border-color: inherit;
&-inner {
display: inline-block;
user-select: none;
text-align: center;
line-height: 1;
color: inherit;
&.is-status {
font-size: 16px;
transform: translateY(1px);
}
}
}
.dm-step__content {
position: relative;
z-index: 2;
line-height: 25px;
padding-left: 8px;
padding-right: 18px;
background-color: #fff;
font-size: 16px;
&.is-process {
color: #303133;
font-weight: 500;
}
&.is-finish,
&.is-success {
color: #303133;
}
&.is-wait {
color: #909399;
}
}
.dm-step__description {
padding-left: 32px;
line-height: 24px;
color: #909399;
&.is-process {
color: #606266;
}
}
}
.steps {
display: flex;
width: 100%;
position: relative;
// margin-right: 10px;
.active {
background: #2f54eb;
color: #fff;
}
}
.step-item {
flex: 1;
background: #eef4ff;
color: #303133;
height: 44px;
text-align: center;
line-height: 44px;
cursor: pointer;
font-size: 14px;
}
.triangle {
width: 0;
height: 0;
display: inline-block;
z-index: 2;
border-style: solid;
border-width: 22px 0 22px 12px;
position: relative;
background: #eef4ff;
border-color: transparent transparent transparent #eef4ff;
}
.steps:last-of-type {
.triangle {
background: #fff;
}
}
.triangle::before {
content: '';
position: absolute;
height: 28px;
width: 4px;
background: #fff;
transform: rotate(-209deg) translateY(-0.7px);
transform-origin: 0 0;
top: 0;
right: -6px;
}
.triangle::after {
content: '';
bottom: 0;
position: absolute;
height: 27px;
width: 4px;
background: #fff;
transform: rotate(209deg) translateY(1.3px);
transform-origin: 100% 100%;
right: 1.8px;
}
.triangle-active {
border-left-color: #2f54eb;
}
.triangle-bg {
background: #2f54eb;
}
.triangle-default {
background: #eef4ff;
}
</style>
import Steps from './steps';
/* istanbul ignore next */
const GicSteps = {
install(Vue) {
Vue.component(Steps.name, Steps);
}
};
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.use(GicSteps);
}
export default GicSteps;
<template>
<div class="dm-steps">
<slot></slot>
</div>
</template>
<script>
export default {
name: 'vue-gic-steps',
props: {
space: [Number, String], // 间距
active: {
// 设置步骤
type: Number,
default: 0
},
finishStatus: {
// 成功状态
type: String,
default: 'success'
},
processStatus: {
// 当前步骤状态
type: String,
default: 'process'
},
simple: {
type: Boolean,
default: false
}
},
data() {
return {
steps: [],
stepOffset: 20
};
},
watch: {
active(newVal, oldVal) {
this.$emit('change', newVal, oldVal);
},
steps(steps) {
steps.forEach((child, index) => {
child.index = index;
});
}
}
};
</script>
<style lang="scss">
.dm-steps {
display: flex;
white-space: nowrap;
background-color: #fff;
}
</style>
......@@ -120,7 +120,7 @@ import { numberToChinese, formatDateTimeByType } from '@/utils/index.js';
import dmUploadAvatar from '@/components/upload/avatar';
import editAlertMixin from '../common/editAlertMixin.js';
import ptyxSkin from './partials/ptyx-skin.vue';
import audioUpload from './partials/audio-upload.vue';
import audioUpload from '../common/audio-upload.vue';
import dmShare from '../common/share.vue';
import dmThreshold from '../common/threshold.vue';
let gameInfo = {};
......
......@@ -134,6 +134,29 @@
</div>
</div>
</el-col>
<el-col :span="6" style="padding: 0 2px">
<div class="recharge-today-item border2">
<div class="text-center">
<div class="icon-box color4">
<i class="iconfont icon-AIdianhua fz36"></i>
</div>
</div>
<div class="consume-info">
<div class="consume-item">
<p class="consume-item-label">系统通知</p>
<p class="consume-item-value">
<span class="value-content">{{ recharge.aiCount || 0 }}</span>
</p>
</div>
<div class="consume-item">
<p class="consume-item-label">合计费用</p>
<p class="consume-item-value">
<span class="value-content">{{ (recharge.aiFee / 1000) | amount }}</span>
</p>
</div>
</div>
</div>
</el-col>
</el-row>
</div>
<div class="dm-wrap" style="padding-top: 0">
......@@ -325,7 +348,8 @@ export default {
{ name: '短信营销', type: 'marketing', fee: result.messageFee, count: result.messageCount },
{ name: '短信验证码', type: 'sms', fee: result.smsFee, count: result.smsCount },
{ name: '双向呼叫', type: 'call', fee: result.callFee, count: result.callTime },
{ name: 'AI电话', type: 'ai-call', fee: result.aiFee, count: result.aiCount }
{ name: 'AI电话', type: 'ai-call', fee: result.aiFee, count: result.aiCount },
{ name: '系统通知', type: 'ai-voiceFee', fee: result.aiFee, count: result.aiCount }
];
} else {
this.recharge = res.result;
......
......@@ -87,6 +87,15 @@
<el-radio :label="3">活动创建人</el-radio>
</el-radio-group>
</el-form-item>
<!-- <h2 class="icon-type-title mb20">
<div class="mark" />
系统通知
</h2>
<el-form-item label="系统通知" prop="aiRule" class="mb20">
<el-radio-group v-model="form.jifei">
<el-radio :label="1">活动创建人</el-radio>
</el-radio-group>
</el-form-item> -->
</template>
</el-form>
<div class="footer">
......
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