Commit ba8df19f by 无尘

fix: 修改奖励配置

parent 448e6ef7
<!DOCTYPE html><html><head><meta charset=utf-8><link rel="shortcut icon" href=./favicon.ico><title>分享有礼</title><link href=./static/css/app.4cfedf151a6c34316502e3430c8a5a95.css rel=stylesheet></head><body style="background-color: #f0f2f5;min-width: 1400px;"><div id=app></div><script src=//web-1251519181.file.myqcloud.com/lib/vue/2.6.6/vue.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vue-router/3.0.2/vue-router.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vuex/3.1.0/vuex.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/elementUI/index.2.5.4.js></script><script src=//web-1251519181.file.myqcloud.com/components/header.2.0.33.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.03.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-new.2.0.29.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.38.js></script><script src=//web-1251519181.file.myqcloud.com/components/aside-menu.2.0.11.js></script><script src=//web-1251519181.file.myqcloud.com/components/area-ab.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.02.js></script><script src=//web-1251519181.file.myqcloud.com/components/selector.1.1.91.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.12.js></script><script type=text/javascript src=./static/js/manifest.b603178de987585bc242.js></script><script type=text/javascript src=./static/js/vendor.8455def81090347f10ce.js></script><script type=text/javascript src=./static/js/app.063950505fceb28630cd.js></script></body></html> <!DOCTYPE html><html><head><meta charset=utf-8><link rel="shortcut icon" href=./favicon.ico><title>分享有礼</title><link href=./static/css/app.a3533ed9de2b438f641cfdaa5a58c4ec.css rel=stylesheet></head><body style="background-color: #f0f2f5;min-width: 1400px;"><div id=app></div><script src=//web-1251519181.file.myqcloud.com/lib/vue/2.6.6/vue.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vue-router/3.0.2/vue-router.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vuex/3.1.0/vuex.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/elementUI/index.2.5.4.js></script><script src=//web-1251519181.file.myqcloud.com/components/header.2.0.33.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.03.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-new.2.0.29.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.38.js></script><script src=//web-1251519181.file.myqcloud.com/components/aside-menu.2.0.11.js></script><script src=//web-1251519181.file.myqcloud.com/components/area-ab.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.02.js></script><script src=//web-1251519181.file.myqcloud.com/components/selector.1.1.91.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.12.js></script><script type=text/javascript src=./static/js/manifest.23f4bfa9a7c9ad926b0f.js></script><script type=text/javascript src=./static/js/vendor.6e29ed0b437a6bb669b1.js></script><script type=text/javascript src=./static/js/app.680a6cd41b8032942b82.js></script></body></html>
\ No newline at end of file \ 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.
!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,a){for(var f,i,u,d=0,b=[];d<r.length;d++)i=r[d],t[i]&&b.push(t[i][0]),t[i]=0;for(f in c)Object.prototype.hasOwnProperty.call(c,f)&&(e[f]=c[f]);for(n&&n(r,c,a);b.length;)b.shift()();if(a)for(d=0;d<a.length;d++)u=o(o.s=a[d]);return u};var r={},t={15:0};function o(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,o),t.l=!0,t.exports}o.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,o){n=t[e]=[r,o]});n[2]=r;var c=document.getElementsByTagName("head")[0],a=document.createElement("script");a.type="text/javascript",a.charset="utf-8",a.async=!0,a.timeout=12e4,o.nc&&a.setAttribute("nonce",o.nc),a.src=o.p+"static/js/"+e+"."+{0:"b1c6d8cabf2459ac5a8a",1:"5b546fa38466a0b05e37",2:"6fca983435b50c941d78",3:"21c06336c724d34fa44b",4:"e42560cdcc9ef2f1fe8a",5:"8ecd133bf1cda0bdffb4",6:"fda09ea240d5c03fd4f4",7:"b0fd74564cc799593b8f",8:"fe9ec49f63ecd8e527ba",9:"522a01ff8d619d2bf030",10:"e16b73d2d4b922255e52",11:"c11d02c33702d00b2e2e",12:"b96af0829c134b12bfbb"}[e]+".js";var f=setTimeout(i,12e4);function i(){a.onerror=a.onload=null,clearTimeout(f);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return a.onerror=a.onload=i,c.appendChild(a),r},o.m=e,o.c=r,o.d=function(e,n,r){o.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(n,"a",n),n},o.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},o.p="./",o.oe=function(e){throw console.error(e),e}}([]); !function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,a){for(var f,i,u,d=0,b=[];d<r.length;d++)i=r[d],t[i]&&b.push(t[i][0]),t[i]=0;for(f in c)Object.prototype.hasOwnProperty.call(c,f)&&(e[f]=c[f]);for(n&&n(r,c,a);b.length;)b.shift()();if(a)for(d=0;d<a.length;d++)u=o(o.s=a[d]);return u};var r={},t={15:0};function o(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,o),t.l=!0,t.exports}o.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,o){n=t[e]=[r,o]});n[2]=r;var c=document.getElementsByTagName("head")[0],a=document.createElement("script");a.type="text/javascript",a.charset="utf-8",a.async=!0,a.timeout=12e4,o.nc&&a.setAttribute("nonce",o.nc),a.src=o.p+"static/js/"+e+"."+{0:"b1c6d8cabf2459ac5a8a",1:"5b546fa38466a0b05e37",2:"711300c9a2c418190ac7",3:"6910fc54772239762497",4:"e42560cdcc9ef2f1fe8a",5:"8ecd133bf1cda0bdffb4",6:"2342d9cea2c3b9db329d",7:"b0fd74564cc799593b8f",8:"fe9ec49f63ecd8e527ba",9:"522a01ff8d619d2bf030",10:"e16b73d2d4b922255e52",11:"c11d02c33702d00b2e2e",12:"b96af0829c134b12bfbb"}[e]+".js";var f=setTimeout(i,12e4);function i(){a.onerror=a.onload=null,clearTimeout(f);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return a.onerror=a.onload=i,c.appendChild(a),r},o.m=e,o.c=r,o.d=function(e,n,r){o.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(n,"a",n),n},o.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},o.p="./",o.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file \ No newline at end of file
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @Author: 无尘 * @Author: 无尘
* @Date: 2019-11-18 10:37:02 * @Date: 2019-11-18 10:37:02
* @LastEditors: 无尘 * @LastEditors: 无尘
* @LastEditTime: 2019-11-28 19:26:46 * @LastEditTime: 2019-12-03 11:09:32
--> -->
<!-- <!--
<base-config @submitNext="submitNext"></base-config> <base-config @submitNext="submitNext"></base-config>
...@@ -14,23 +14,82 @@ import baseConfig from '@/components/active-config/base-config.vue'; ...@@ -14,23 +14,82 @@ import baseConfig from '@/components/active-config/base-config.vue';
<template> <template>
<div class="base-config-content"> <div class="base-config-content">
<div class="config-title font-14 color-303133">基本信息</div> <div class="config-title font-14 color-303133">基本信息</div>
<el-form label-width="114px" :model="activeInfoData" ref="baseForm" :rules="rules"> <el-form
<el-form-item v-if="$route.query.activityId" label="活动目的:" prop=""> {{ activeInfoData.parentGoalName }} - {{ activeInfoData.goalName }} </el-form-item> label-width="114px"
<el-form-item v-if="$route.query.activityId" label="转化路径:" prop=""> :model="activeInfoData"
ref="baseForm"
:rules="rules"
>
<el-form-item
v-if="$route.query.activityId"
label="活动目的:"
prop=""
> {{ activeInfoData.parentGoalName }} - {{ activeInfoData.goalName }} </el-form-item>
<el-form-item
v-if="$route.query.activityId"
label="转化路径:"
prop=""
>
<div>{{ activeInfoData.router && activeInfoData.router.length ? activeInfoData.router.map(ele => ele.transName).join('→') : '' }}</div> <div>{{ activeInfoData.router && activeInfoData.router.length ? activeInfoData.router.map(ele => ele.transName).join('→') : '' }}</div>
</el-form-item> </el-form-item>
<el-form-item v-if="$route.query.activityId && activeInfoData.activityMarketPageName" label="活动营销页:" prop=""> </el-form-item> <el-form-item
<el-form-item v-if="$route.query.activityId && activeInfoData.gamePlanName" label="游戏计划:" prop=""> </el-form-item> v-if="$route.query.activityId && activeInfoData.activityMarketPageName"
<el-form-item v-if="$route.query.activityId && activeInfoData.cardCoupName" label="卡券:" prop=""> </el-form-item> label="活动营销页:"
<el-form-item label="活动名称:" prop="activityName"> prop="activityMarketPageName"
<limitInput :inputWidth="350" :disflag="$route.query.interfaceId ? true : false" :inputValue.sync="activeInfoData.activityName" :holder="'请输入活动名称'" :getByType="'word'" :maxLength="30"> </limitInput> > </el-form-item>
<el-form-item
v-if="$route.query.activityId && activeInfoData.gamePlanName"
label="游戏计划:"
prop="gamePlanName"
> </el-form-item>
<el-form-item
v-if="$route.query.activityId && activeInfoData.cardCoupName"
label="卡券:"
prop="cardCoupName"
> </el-form-item>
<el-form-item
label="活动名称:"
prop="activityName"
>
<limitInput
:inputWidth="350"
:disflag="$route.query.interfaceId ? true : false"
:inputValue.sync="activeInfoData.activityName"
:holder="'请输入活动名称'"
:getByType="'word'"
:maxLength="30"
> </limitInput>
</el-form-item> </el-form-item>
<el-form-item label="活动有效期:" prop="dateRange"> <el-form-item
<el-date-picker class="m-l-10" prefix-icon="el-icon-time" :picker-options="pickerOptions" v-model="activeInfoData.dateRange" @change="changeDate" :editable="false" :value-format="'yyyy-MM-dd HH:mm:ss'" :default-time="['00:00:00', '23:59:59']" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> </el-date-picker> label="活动有效期:"
prop="dateRange"
>
<el-date-picker
class="m-l-10"
prefix-icon="el-icon-time"
:picker-options="pickerOptions"
v-model="activeInfoData.dateRange"
@change="changeDate"
:editable="false"
:value-format="'yyyy-MM-dd HH:mm:ss'"
:default-time="['00:00:00', '23:59:59']"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item class="m-t-50"> <el-form-item class="m-t-50">
<el-button type="primary" @click="returnBack">返回</el-button> <el-button
<el-button type="primary" @click="submitForm('baseForm')">下一步</el-button> type="primary"
@click="returnBack"
>返回</el-button>
<el-button
type="primary"
@click="submitForm('baseForm')"
>下一步</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
...@@ -48,6 +107,16 @@ export default { ...@@ -48,6 +107,16 @@ export default {
limitInput limitInput
}, },
data() { data() {
const checkDate = (rule, value, callback) => {
console.log(value)
if (!value || !value.length) {
callback(new Error('请选择活动有效期'));
} else if (value[0].split(' ')[0] == timeFormat.timeStampToYmd(new Date().getTime()) && value[0].split(' ')[0] == value[1].split(' ')[0]) {
callback(new Error('不能选择今天'));
} else {
callback();
}
};
return { return {
activeInfoData: { activeInfoData: {
activityId: '', activityId: '',
...@@ -68,7 +137,7 @@ export default { ...@@ -68,7 +137,7 @@ export default {
}, },
rules: { rules: {
activityName: [{ required: true, message: '请输入活动名称', trigger: 'blur' }], activityName: [{ required: true, message: '请输入活动名称', trigger: 'blur' }],
dateRange: [{ required: true, message: '请选择活动有效期', trigger: 'blur' }] dateRange: [{ validator: checkDate, trigger: 'blur' }]
}, },
choiceDateCopy: [], choiceDateCopy: [],
pickerOptions: { pickerOptions: {
...@@ -83,9 +152,9 @@ export default { ...@@ -83,9 +152,9 @@ export default {
const one = 365 * 24 * 3600 * 1000; const one = 365 * 24 * 3600 * 1000;
const minTime = this.choiceDateCopy[0] - one; const minTime = this.choiceDateCopy[0] - one;
const maxTime = this.choiceDateCopy[0] + one; const maxTime = this.choiceDateCopy[0] + one;
return time.getTime() < minTime || time.getTime() > maxTime || time.getTime() < Date.now() - 8.64e6; return time.getTime() < minTime || time.getTime() > maxTime || time.getTime() < Date.now() - 8.64e7;
} }
return time.getTime() < Date.now() - 8.64e6; return time.getTime() < Date.now() - 8.64e7;
} }
} }
}; };
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @Author: 无尘 * @Author: 无尘
* @Date: 2019-11-18 10:37:02 * @Date: 2019-11-18 10:37:02
* @LastEditors: 无尘 * @LastEditors: 无尘
* @LastEditTime: 2019-11-28 15:20:58 * @LastEditTime: 2019-12-03 10:41:26
--> -->
<!-- <!--
<card-config @submitBack="submitBack" @submitNext="submitNext"></card-config> <card-config @submitBack="submitBack" @submitNext="submitNext"></card-config>
...@@ -14,26 +14,56 @@ import cardConfig from '@/components/active-config/card-config.vue'; ...@@ -14,26 +14,56 @@ import cardConfig from '@/components/active-config/card-config.vue';
<template> <template>
<div class="card-config-content"> <div class="card-config-content">
<div class="config-title font-14 color-303133">小程序卡片配置</div> <div class="config-title font-14 color-303133">小程序卡片配置</div>
<div role="alert" class="el-alert el-alert--info"> <div
role="alert"
class="el-alert el-alert--info"
>
<i class="el-alert__icon el-icon-info font-12 color-1890ff"></i> <i class="el-alert__icon el-icon-info font-12 color-1890ff"></i>
<div class="el-alert__content"> <div class="el-alert__content">
<span class="el-alert__title color-606266 font-14 font-w-400" <span class="el-alert__title color-606266 font-14 font-w-400">1. 邀请人可在活动中心一键转发【会员认证流程】的小程序卡片给微信好友,请对小程序卡片的样式进行设置。优秀的活动标题和封面图可以大幅提升受邀人的参与积极性!<br />
>1. 邀请人可在活动中心一键转发【会员认证流程】的小程序卡片给微信好友,请对小程序卡片的样式进行设置。优秀的活动标题和封面图可以大幅提升受邀人的参与积极性!<br /> 2. 受邀人服务号关注后,系统将自动发送【会员认证流程】的小程序卡片,请对小程序卡片的样式进行设置。优秀的活动标题和封面图可以大幅提升受邀人的参与积极性!</span>
2. 受邀人服务号关注后,系统将自动发送【会员认证流程】的小程序卡片,请对小程序卡片的样式进行设置。优秀的活动标题和封面图可以大幅提升受邀人的参与积极性!</span
>
</div> </div>
</div> </div>
<div class="form-wrap flex"> <div class="form-wrap flex">
<el-form label-width="114px" :model="activeInfoData" ref="cardForm" :rules="rules"> <el-form
<el-form-item label="页面标题:" prop="appletTitle"> label-width="114px"
<limitInput :inputWidth="503" :disflag="$route.query.interfaceId ? true : false" :inputValue.sync="activeInfoData.appletTitle" :holder="'请输入页面标题'" :getByType="'word'" :maxLength="40"> </limitInput> :model="activeInfoData"
ref="cardForm"
:rules="rules"
>
<el-form-item
label="页面标题:"
prop="appletTitle"
>
<limitInput
:inputWidth="503"
:disflag="$route.query.interfaceId ? true : false"
:inputValue.sync="activeInfoData.appletTitle"
:holder="'请输入页面标题'"
:getByType="'word'"
:maxLength="40"
> </limitInput>
</el-form-item> </el-form-item>
<el-form-item label="海报上传:" prop="playBillUrl"> <el-form-item
<single-upload v-model="activeInfoData.playBillUrl"> </single-upload> label="海报上传:"
prop="playBillUrl"
>
<single-upload
:width="600"
:limitRate="5/4"
:limitFlag="3"
v-model="activeInfoData.playBillUrl"
> </single-upload>
</el-form-item> </el-form-item>
<el-form-item class="m-t-50"> <el-form-item class="m-t-50">
<el-button type="primary" @click="submitBack">上一步</el-button> <el-button
<el-button type="primary" @click="submitForm('cardForm')">下一步</el-button> type="primary"
@click="submitBack"
>上一步</el-button>
<el-button
type="primary"
@click="submitForm('cardForm')"
>下一步</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="form-preview"> <div class="form-preview">
...@@ -42,7 +72,10 @@ import cardConfig from '@/components/active-config/card-config.vue'; ...@@ -42,7 +72,10 @@ import cardConfig from '@/components/active-config/card-config.vue';
<div class="form-preview-inner"> <div class="form-preview-inner">
<div class="form-preview-title">{{ activeInfoData.appletTitle }}</div> <div class="form-preview-title">{{ activeInfoData.appletTitle }}</div>
<div class="form-preview-img flex flex-pack-center flex-align-center"> <div class="form-preview-img flex flex-pack-center flex-align-center">
<img :src="activeInfoData.playBillUrl" alt="" /> <img
:src="activeInfoData.playBillUrl"
alt=""
/>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @Author: 无尘 * @Author: 无尘
* @Date: 2019-11-18 10:37:02 * @Date: 2019-11-18 10:37:02
* @LastEditors: 无尘 * @LastEditors: 无尘
* @LastEditTime: 2019-11-28 14:32:27 * @LastEditTime: 2019-12-03 10:37:02
--> -->
<!-- <!--
<center-config @submitBack="submitBack" @submitNext="submitNext"></center-config> <center-config @submitBack="submitBack" @submitNext="submitNext"></center-config>
...@@ -14,47 +14,107 @@ import centerConfig from '@/components/active-config/center-config.vue'; ...@@ -14,47 +14,107 @@ import centerConfig from '@/components/active-config/center-config.vue';
<template> <template>
<div class="center-config-content"> <div class="center-config-content">
<div class="config-title font-14 color-303133">活动中心配置</div> <div class="config-title font-14 color-303133">活动中心配置</div>
<div role="alert" class="el-alert el-alert--info"> <div
role="alert"
class="el-alert el-alert--info"
>
<i class="el-alert__icon el-icon-info font-12 color-1890ff"></i> <i class="el-alert__icon el-icon-info font-12 color-1890ff"></i>
<div class="el-alert__content"> <div class="el-alert__content">
<span class="el-alert__title color-606266 font-14 font-w-400" <span class="el-alert__title color-606266 font-14 font-w-400">1. 活动中心是邀请人访问的页面,用于介绍活动和奖励规则,展示受邀人清单和奖励信息。<br />
>1. 活动中心是邀请人访问的页面,用于介绍活动和奖励规则,展示受邀人清单和奖励信息。<br /> 2. 当前活动的转化路径以服务号作为受邀人入口,邀请人可在活动中心一键服务号的带二维码海报,以实现朋友圈转发。</span>
2. 当前活动的转化路径以服务号作为受邀人入口,邀请人可在活动中心一键服务号的带二维码海报,以实现朋友圈转发。</span
>
</div> </div>
</div> </div>
<div class="form-wrap flex"> <div class="form-wrap flex">
<el-form label-width="144px" :model="activeInfoData" ref="centerForm" :rules="rules"> <el-form
<el-form-item label="头图上传:" prop="headUrl"> label-width="144px"
<single-upload v-model="activeInfoData.headUrl"> </single-upload> :model="activeInfoData"
ref="centerForm"
:rules="rules"
>
<el-form-item
label="头图上传:"
prop="headUrl"
>
<single-upload
:width="750"
v-model="activeInfoData.headUrl"
> </single-upload>
</el-form-item> </el-form-item>
<el-form-item label="分享按钮:" prop=""> <el-form-item
label="分享按钮:"
prop=""
>
<div class="flex"> <div class="flex">
<span class="color-wrap flex flex-pack-center flex-space-between border-box">背景色<el-color-picker v-model="activeInfoData.shareBackColor"></el-color-picker></span><span class="color-wrap flex flex-space-between flex-pack-center border-box">文字色<el-color-picker v-model="activeInfoData.shareFontColor"></el-color-picker></span> <span class="color-wrap flex flex-pack-center flex-space-between border-box">背景色<el-color-picker v-model="activeInfoData.shareBackColor"></el-color-picker></span><span class="color-wrap flex flex-space-between flex-pack-center border-box">文字色<el-color-picker v-model="activeInfoData.shareFontColor"></el-color-picker></span>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="分享按钮文案:" prop="shareButtonFont"> <el-form-item
<limitInput :inputWidth="394" :disflag="$route.query.editFlag ? true : false" :inputValue.sync="activeInfoData.shareButtonFont" :holder="'请输入分享按钮文案'" :getByType="'word'" :maxLength="20"> </limitInput> label="分享按钮文案:"
prop="shareButtonFont"
>
<limitInput
:inputWidth="394"
:disflag="$route.query.editFlag ? true : false"
:inputValue.sync="activeInfoData.shareButtonFont"
:holder="'请输入分享按钮文案'"
:getByType="'word'"
:maxLength="20"
> </limitInput>
</el-form-item> </el-form-item>
<el-form-item label="活动介绍展现模式:" prop="activityIntroduceMode"> <el-form-item
<el-radio-group v-model="activeInfoData.activityIntroduceMode" @change="changeMode"> label="活动介绍展现模式:"
prop="activityIntroduceMode"
>
<el-radio-group
v-model="activeInfoData.activityIntroduceMode"
@change="changeMode"
>
<el-radio label="1">文字模式</el-radio> <el-radio label="1">文字模式</el-radio>
<el-radio label="2">图文模式</el-radio> <el-radio label="2">图文模式</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item v-if="activeInfoData.activityIntroduceMode == 1" label="活动介绍文案:" prop="activityIntroduceDetail"> <el-form-item
v-if="activeInfoData.activityIntroduceMode == 1"
label="活动介绍文案:"
prop="activityIntroduceDetail"
>
<div class="w-400"> <div class="w-400">
<tinymce-edit :disabledEdit="$route.query.editFlag ? true : false" ref="tinymceWrap" :bodyHtml="activeInfoData.activityIntroduceDetail" @changeEditor="changeEditor"></tinymce-edit> <tinymce-edit
:disabledEdit="$route.query.editFlag ? true : false"
ref="tinymceWrap"
:bodyHtml="activeInfoData.activityIntroduceDetail"
@changeEditor="changeEditor"
></tinymce-edit>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item v-if="activeInfoData.activityIntroduceMode == 2" label="选择图文模板:" prop="activityIntroduceId"> <el-form-item
<el-select size="large" v-model="activeInfoData.activityIntroduceId" @change="changePage" placeholder="请选择自定义页面"> v-if="activeInfoData.activityIntroduceMode == 2"
<el-option v-for="item in markingList" :key="item.pageId" :label="item.name" :value="item.pageId"> </el-option> label="选择图文模板:"
prop="activityIntroduceId"
>
<el-select
size="large"
v-model="activeInfoData.activityIntroduceId"
@change="changePage"
placeholder="请选择自定义页面"
>
<el-option
v-for="item in markingList"
:key="item.pageId"
:label="item.name"
:value="item.pageId"
> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item class="m-t-50"> <el-form-item class="m-t-50">
<el-button type="primary" @click="submitBack">上一步</el-button> <el-button
<el-button type="primary" @click="submitForm('centerForm')">下一步</el-button> type="primary"
@click="submitBack"
>上一步</el-button>
<el-button
type="primary"
@click="submitForm('centerForm')"
>下一步</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="form-preview"> <div class="form-preview">
...@@ -62,18 +122,31 @@ import centerConfig from '@/components/active-config/center-config.vue'; ...@@ -62,18 +122,31 @@ import centerConfig from '@/components/active-config/center-config.vue';
<div class="form-preview-inner"> <div class="form-preview-inner">
<div class="form-preview-body"> <div class="form-preview-body">
<div class="form-preview-body_top"> <div class="form-preview-body_top">
<img :src="activeInfoData.headUrl" alt="" /> <img
:src="activeInfoData.headUrl"
alt=""
/>
</div> </div>
<div class="form-preview-body_middle border-box"> <div class="form-preview-body_middle border-box">
<div class="form-preview-body_content"> <div class="form-preview-body_content">
<div class="form-preview-btn" :style="{ background: activeInfoData.shareBackColor, color: activeInfoData.shareFontColor }">{{ activeInfoData.shareButtonFont }}</div> <div
class="form-preview-btn"
:style="{ background: activeInfoData.shareBackColor, color: activeInfoData.shareFontColor }"
>{{ activeInfoData.shareButtonFont }}</div>
</div> </div>
</div> </div>
<div class="form-preview-body_rules border-box"> <div class="form-preview-body_rules border-box">
<div class="rules-title">活动规则</div> <div class="rules-title">活动规则</div>
<div v-if="activeInfoData.activityIntroduceMode == 1" class="rules-body" v-html="activeInfoData.activityIntroduceDetail"></div> <div
v-if="activeInfoData.activityIntroduceMode == 1"
class="rules-body"
v-html="activeInfoData.activityIntroduceDetail"
></div>
<!-- v-if="activeInfoData.activityIntroduceMode == 2" --> <!-- v-if="activeInfoData.activityIntroduceMode == 2" -->
<app-template v-if="activeInfoData.activityIntroduceMode == 2" :templateData="templateData"></app-template> <app-template
v-if="activeInfoData.activityIntroduceMode == 2"
:templateData="templateData"
></app-template>
</div> </div>
</div> </div>
</div> </div>
...@@ -114,7 +187,7 @@ export default { ...@@ -114,7 +187,7 @@ export default {
headUrl: '', headUrl: '',
shareBackColor: '#1890ff', shareBackColor: '#1890ff',
shareFontColor: '#ffffff', shareFontColor: '#ffffff',
shareButtonFont: '', shareButtonFont: '立即分享赢福利',
activityIntroduceMode: '1', activityIntroduceMode: '1',
activityIntroduceId: '', activityIntroduceId: '',
activityIntroduceDetail: '' activityIntroduceDetail: ''
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @Author: 无尘 * @Author: 无尘
* @Date: 2019-11-21 16:37:02 * @Date: 2019-11-21 16:37:02
* @LastEditors: 无尘 * @LastEditors: 无尘
* @LastEditTime: 2019-11-28 15:24:54 * @LastEditTime: 2019-12-03 10:09:14
--> -->
<!-- <!--
<fraud-control></fraud-control> <fraud-control></fraud-control>
...@@ -14,20 +14,33 @@ import fraudControl from '@/components/active-config/configs/fraud-control.vue'; ...@@ -14,20 +14,33 @@ import fraudControl from '@/components/active-config/configs/fraud-control.vue';
<template> <template>
<div class="fraud-control border-box"> <div class="fraud-control border-box">
<el-form label-width="154px" :model="pointFreeze" ref="rewardForm" :rules="rules"> <el-form
<div role="alert" class="el-alert el-alert--info"> label-width="154px"
:model="pointFreeze"
ref="rewardForm"
:rules="rules"
>
<div
role="alert"
class="el-alert el-alert--info"
>
<i class="el-alert__icon el-icon-info font-12 color-1890ff"></i> <i class="el-alert__icon el-icon-info font-12 color-1890ff"></i>
<div class="el-alert__content"> <div class="el-alert__content">
<span class="el-alert__title color-606266 font-14 font-w-400" <span class="el-alert__title color-606266 font-14 font-w-400">为了获取邀请人奖励,可能会出现恶意盗刷的情况,因此系统支持对单个受邀人的成交额累计上限做控制。<br />
>为了获取邀请人奖励,可能会出现恶意盗刷的情况,因此系统支持对单个受邀人的成交额累计上限做控制。<br /> 这能有效的杜绝邀请人在闯关奖励、竞赛奖励中采用作弊手段(即时奖励有单独的限制控制,该成交额上限对即时奖励不起作用)。</span>
这能有效的杜绝邀请人在闯关奖励、竞赛奖励中采用作弊手段(即时奖励有单独的限制控制,该成交额上限对即时奖励不起作用)。</span
>
</div> </div>
</div> </div>
<el-form-item label="成交额上限控制:" prop=""> <el-form-item
label="成交额上限控制:"
prop=""
>
<ul class="flex "> <ul class="flex ">
<template v-for="(item, index) in modeData"> <template v-for="(item, index) in modeData">
<li :class="['li-cell li-second-cell flex-1 ', pointFreeze.numberLimitType == item.goalId ? 'li-second-active' : '']" :key="index + 'first'" @click="selectStore(item)"> <li
:class="['li-cell li-second-cell flex-1 ', pointFreeze.amountLimitFlag == item.goalId ? 'li-second-active' : '']"
:key="index + 'first'"
@click="selectStore(item)"
>
<div class="li-cell-inner"> <div class="li-cell-inner">
<div class="li-cell-bottom border-box"> <div class="li-cell-bottom border-box">
<div class="li-cell-scene"> <div class="li-cell-scene">
...@@ -46,24 +59,43 @@ import fraudControl from '@/components/active-config/configs/fraud-control.vue'; ...@@ -46,24 +59,43 @@ import fraudControl from '@/components/active-config/configs/fraud-control.vue';
</li> </li>
</template> </template>
</ul> </ul>
<div v-if="pointFreeze.numberLimitType == 2" class="store-select-wrap"> <div
v-if="pointFreeze.amountLimitFlag == 2"
class="store-select-wrap"
>
<div class="store-select-title"> <div class="store-select-title">
<span class="font-14 color-606266">限制额度:</span> <span class="font-14 color-606266">限制额度:</span>
<el-input-number v-model="pointFreeze.numberLimitNum" controls-position="right" :min="1" :max="999999"> </el-input-number> <el-input-number
v-model="pointFreeze.amountLimitAmount"
controls-position="right"
:min="1"
:max="999999"
> </el-input-number>
<span class="font-14 color-606266"></span> <span class="font-14 color-606266"></span>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
<div role="alert" class="el-alert el-alert--info m-t-20"> <div
role="alert"
class="el-alert el-alert--info m-t-20"
>
<i class="el-alert__icon el-icon-info font-12 color-1890ff"></i> <i class="el-alert__icon el-icon-info font-12 color-1890ff"></i>
<div class="el-alert__content"> <div class="el-alert__content">
<span class="el-alert__title color-606266 font-14 font-w-400">转化路径的一系列节点中,消费行为尤其特殊,因为可以申请退款,所以涉及到奖励回收的问题。请根据自身的活动政策,配置相关的风险控制策略。注意:仅针对即时奖励可进行控制,闯关奖励、竞赛奖励和受邀人奖励不作回收处理。由于即时奖励中没有卡券类奖励,因此没有卡券处理方案的配置。</span> <span class="el-alert__title color-606266 font-14 font-w-400">转化路径的一系列节点中,消费行为尤其特殊,因为可以申请退款,所以涉及到奖励回收的问题。请根据自身的活动政策,配置相关的风险控制策略。注意:仅针对即时奖励可进行控制,闯关奖励、竞赛奖励和受邀人奖励不作回收处理。由于即时奖励中没有卡券类奖励,因此没有卡券处理方案的配置。</span>
</div> </div>
</div> </div>
<el-form-item class="m-t-20" label="积分处理方案:" prop=""> <el-form-item
class="m-t-20"
label="积分处理方案:"
prop=""
>
<ul class="flex "> <ul class="flex ">
<template v-for="(item, index) in contentData"> <template v-for="(item, index) in contentData">
<li :class="['li-cell li-second-cell flex-1 ', pointFreeze.awardLimitType == item.goalId ? 'li-second-active' : '']" :key="index + 'first'" @click="selectMoney(item)"> <li
:class="['li-cell li-second-cell flex-1 ', pointFreeze.pointProgram == item.goalId ? 'li-second-active' : '']"
:key="index + 'first'"
@click="selectMoney(item)"
>
<div class="li-cell-inner"> <div class="li-cell-inner">
<div class="li-cell-bottom border-box"> <div class="li-cell-bottom border-box">
<div class="li-cell-scene"> <div class="li-cell-scene">
...@@ -82,17 +114,33 @@ import fraudControl from '@/components/active-config/configs/fraud-control.vue'; ...@@ -82,17 +114,33 @@ import fraudControl from '@/components/active-config/configs/fraud-control.vue';
</li> </li>
</template> </template>
</ul> </ul>
<div v-if="pointFreeze.awardLimitType == 1" class="store-select-wrap child-select-wrap"> <div
v-if="pointFreeze.pointProgram == 1"
class="store-select-wrap child-select-wrap"
>
<div class="store-select-title"> <div class="store-select-title">
<span class="font-14 color-606266">延时时长:</span> <span class="font-14 color-606266">延时时长:</span>
<el-input-number v-model="pointFreeze.operateDay" controls-position="right" :min="1" :max="99"> </el-input-number> <el-input-number
v-model="pointFreeze.pointControlDay"
controls-position="right"
:min="1"
:max="99"
> </el-input-number>
<span class="font-14 color-606266 p-l-3 p-r-10"></span> <span class="font-14 color-606266 p-l-3 p-r-10"></span>
</div> </div>
</div> </div>
<div v-if="pointFreeze.awardLimitType == 2" class="store-select-wrap child-select-wrap"> <div
v-if="pointFreeze.pointProgram == 2"
class="store-select-wrap child-select-wrap"
>
<div class="store-select-title"> <div class="store-select-title">
<span class="font-14 color-606266">冻结时长:</span> <span class="font-14 color-606266">冻结时长:</span>
<el-input-number v-model="pointFreeze.operateDay" controls-position="right" :min="1" :max="99"> </el-input-number> <el-input-number
v-model="pointFreeze.pointControlDay"
controls-position="right"
:min="1"
:max="99"
> </el-input-number>
<span class="font-14 color-606266 p-l-3 p-r-10"></span> <span class="font-14 color-606266 p-l-3 p-r-10"></span>
</div> </div>
</div> </div>
...@@ -107,7 +155,12 @@ export default { ...@@ -107,7 +155,12 @@ export default {
value: { value: {
type: [Object, Array], type: [Object, Array],
default() { default() {
return {}; return {
amountLimitFlag: 0,
amountLimitAmount: 1,
pointProgram: 1, //0、不限制,1、延时发放(推荐),2积分冻结
pointControlDay: 1, //限制延时
};
} }
} }
}, },
...@@ -115,22 +168,21 @@ export default { ...@@ -115,22 +168,21 @@ export default {
data() { data() {
return { return {
pointFreeze: { pointFreeze: {
numberLimitType: 1, amountLimitFlag: 0,
numberLimitNum: 1, amountLimitAmount: 1,
awardLimitType: 1, //奖励限制类型 1、不限制奖励(推荐),2、限制奖励次数,3、限制奖励额度 pointProgram: 1, //0、不限制,1、延时发放(推荐),2积分冻结
awardLimitNumber: 0, //额度 pointControlDay: 1, //限制延时
operateDay: 1, //限制延时
stepType: 1 //步骤类型 类型:1服务号关注,2活动营销页访问奖励,3会员认证奖励,4游戏参与奖励,5卡券领取奖励6,消费奖励 stepType: 1 //步骤类型 类型:1服务号关注,2活动营销页访问奖励,3会员认证奖励,4游戏参与奖励,5卡券领取奖励6,消费奖励
}, },
modeData: [ modeData: [
{ {
goalId: 1, goalId: 0,
goalName: '不控制上限 (推荐)', goalName: '不控制上限 (推荐)',
describe: '同一个受邀人无论消费多少,都会计入累计成交额。' describe: '同一个受邀人无论消费多少,都会计入累计成交额。'
}, },
{ {
goalId: 2, goalId: 1,
goalName: '控制成交额上限', goalName: '控制成交额上限',
describe: '限制针对单个受邀人统计的成交额,超过该额度之后,溢出的成交额不计入奖励结算的统计。' describe: '限制针对单个受邀人统计的成交额,超过该额度之后,溢出的成交额不计入奖励结算的统计。'
} }
...@@ -147,7 +199,7 @@ export default { ...@@ -147,7 +199,7 @@ export default {
describe: '积分发放没有延时,但受邀人退款后会追扣(回收)积分,可设置积分冻结期来确保退换服务期内的积分安全。注意:闯关奖励、竞赛奖励、受邀人奖励不会追扣(回收)。' describe: '积分发放没有延时,但受邀人退款后会追扣(回收)积分,可设置积分冻结期来确保退换服务期内的积分安全。注意:闯关奖励、竞赛奖励、受邀人奖励不会追扣(回收)。'
}, },
{ {
goalId: 3, goalId: 0,
goalName: '不予控制', goalName: '不予控制',
describe: '积分发放没有延时,也不会对受邀人的 退款事件作积分的追扣(回收)。' describe: '积分发放没有延时,也不会对受邀人的 退款事件作积分的追扣(回收)。'
} }
...@@ -172,30 +224,19 @@ export default { ...@@ -172,30 +224,19 @@ export default {
}); });
}, },
/** /**
* 选择即时奖励模式 * 选择控制
*/ */
selectStore(item) { selectStore(item) {
const that = this; const that = this;
that.pointFreeze.numberLimitType = item.goalId; that.pointFreeze.amountLimitFlag = item.goalId;
}, },
/** /**
* 选择即时奖励内容 * 选择积分处理方案
*/ */
selectMoney(item) { selectMoney(item) {
const that = this; const that = this;
that.pointFreeze.awardLimitType = item.goalId; that.pointFreeze.pointProgram = item.goalId;
}, },
/**
* 阶梯奖励添加奖项:
*/
toAddItem() {
const that = this;
that.pointFreeze.instanceContent.push({
minPeople: 10,
maxPeople: 20,
point: 1
});
}
}, },
watch: { watch: {
value(newData) { value(newData) {
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @Author: 无尘 * @Author: 无尘
* @Date: 2019-11-18 10:37:02 * @Date: 2019-11-18 10:37:02
* @LastEditors: 无尘 * @LastEditors: 无尘
* @LastEditTime: 2019-12-02 12:10:43 * @LastEditTime: 2019-12-03 10:09:34
--> -->
<!-- <!--
<reward-config @submitBack="submitBack" @submitNext="submitNext"></reward-config> <reward-config @submitBack="submitBack" @submitNext="submitNext"></reward-config>
...@@ -446,12 +446,10 @@ export default { ...@@ -446,12 +446,10 @@ export default {
}, },
// 防欺诈 // 防欺诈
pointFreeze: { pointFreeze: {
numberLimitType: 1, amountLimitFlag: 0,
numberLimitNum: 1, amountLimitAmount: 1,
awardLimitType: 1, //奖励限制类型 1、不限制奖励(推荐),2、限制奖励次数,3、限制奖励额度 pointProgram: 1, //0、不限制,1、延时发放(推荐),2积分冻结
awardLimitNumber: 1, //额度 pointControlDay: 1, //限制延时
operateDay: 1, //限制延时
stepType: 1 //步骤类型 类型:1服务号关注,2活动营销页访问奖励,3会员认证奖励,4游戏参与奖励,5卡券领取奖励6,消费奖励
} }
}, },
rules: { rules: {
...@@ -594,12 +592,10 @@ export default { ...@@ -594,12 +592,10 @@ export default {
}, },
// 防欺诈 // 防欺诈
pointFreeze: { pointFreeze: {
numberLimitType: 1, amountLimitFlag: 0,
numberLimitNum: 1, amountLimitAmount: 1,
awardLimitType: 1, //奖励限制类型 1、不限制奖励(推荐),2、限制奖励次数,3、限制奖励额度 pointProgram: 1, //0、不限制,1、延时发放(推荐),2积分冻结
awardLimitNumber: 1, //额度 pointControlDay: 1, //限制延时
operateDay: 1, //限制延时
stepType: 1 //步骤类型 类型:1服务号关注,2活动营销页访问奖励,3会员认证奖励,4游戏参与奖励,5卡券领取奖励6,消费奖励
} }
}, },
entryActivityFlag: { entryActivityFlag: {
...@@ -696,12 +692,10 @@ export default { ...@@ -696,12 +692,10 @@ export default {
}, },
// 防欺诈 // 防欺诈
pointFreeze: { pointFreeze: {
numberLimitType: 1, amountLimitFlag: 0,
numberLimitNum: 1, amountLimitAmount: 1,
awardLimitType: 1, //奖励限制类型 1、不限制奖励(推荐),2、限制奖励次数,3、限制奖励额度 pointProgram: 1, //0、不限制,1、延时发放(推荐),2积分冻结
awardLimitNumber: 1, //额度 pointControlDay: 1, //限制延时
operateDay: 1, //限制延时
stepType: 1 //步骤类型 类型:1服务号关注,2活动营销页访问奖励,3会员认证奖励,4游戏参与奖励,5卡券领取奖励6,消费奖励
} }
}, },
authorizeOpenCardFlag: { authorizeOpenCardFlag: {
...@@ -816,12 +810,10 @@ export default { ...@@ -816,12 +810,10 @@ export default {
}, },
// 防欺诈 // 防欺诈
pointFreeze: { pointFreeze: {
numberLimitType: 1, amountLimitFlag: 0,
numberLimitNum: 1, amountLimitAmount: 1,
awardLimitType: 1, //奖励限制类型 1、不限制奖励(推荐),2、限制奖励次数,3、限制奖励额度 pointProgram: 1, //0、不限制,1、延时发放(推荐),2积分冻结
awardLimitNumber: 1, //额度 pointControlDay: 1, //限制延时
operateDay: 1, //限制延时
stepType: 1 //步骤类型 类型:1服务号关注,2活动营销页访问奖励,3会员认证奖励,4游戏参与奖励,5卡券领取奖励6,消费奖励
} }
}, },
enjoyGameFlag: { enjoyGameFlag: {
...@@ -918,12 +910,10 @@ export default { ...@@ -918,12 +910,10 @@ export default {
}, },
// 防欺诈 // 防欺诈
pointFreeze: { pointFreeze: {
numberLimitType: 1, amountLimitFlag: 0,
numberLimitNum: 1, amountLimitAmount: 1,
awardLimitType: 1, //奖励限制类型 1、不限制奖励(推荐),2、限制奖励次数,3、限制奖励额度 pointProgram: 1, //0、不限制,1、延时发放(推荐),2积分冻结
awardLimitNumber: 1, //额度 pointControlDay: 1, //限制延时
operateDay: 1, //限制延时
stepType: 1 //步骤类型 类型:1服务号关注,2活动营销页访问奖励,3会员认证奖励,4游戏参与奖励,5卡券领取奖励6,消费奖励
} }
}, },
receiveCardFlag: { receiveCardFlag: {
...@@ -1020,12 +1010,10 @@ export default { ...@@ -1020,12 +1010,10 @@ export default {
}, },
// 防欺诈 // 防欺诈
pointFreeze: { pointFreeze: {
numberLimitType: 1, amountLimitFlag: 0,
numberLimitNum: 1, amountLimitAmount: 1,
awardLimitType: 1, //奖励限制类型 1、不限制奖励(推荐),2、限制奖励次数,3、限制奖励额度 pointProgram: 1, //0、不限制,1、延时发放(推荐),2积分冻结
awardLimitNumber: 1, //额度 pointControlDay: 1, //限制延时
operateDay: 1, //限制延时
stepType: 1 //步骤类型 类型:1服务号关注,2活动营销页访问奖励,3会员认证奖励,4游戏参与奖励,5卡券领取奖励6,消费奖励
} }
}, },
consumeAwardFlag: { consumeAwardFlag: {
...@@ -1122,12 +1110,10 @@ export default { ...@@ -1122,12 +1110,10 @@ export default {
}, },
// 防欺诈 // 防欺诈
pointFreeze: { pointFreeze: {
numberLimitType: 1, amountLimitFlag: 0,
numberLimitNum: 1, amountLimitAmount: 1,
awardLimitType: 1, //奖励限制类型 1、不限制奖励(推荐),2、限制奖励次数,3、限制奖励额度 pointProgram: 1, //0、不限制,1、延时发放(推荐),2积分冻结
awardLimitNumber: 1, //额度 pointControlDay: 1, //限制延时
operateDay: 1, //限制延时
stepType: 1 //步骤类型 类型:1服务号关注,2活动营销页访问奖励,3会员认证奖励,4游戏参与奖励,5卡券领取奖励6,消费奖励
} }
}, },
ProgressiveData: [] //根据路径添加 ProgressiveData: [] //根据路径添加
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @Author: 无尘 * @Author: 无尘
* @Date: 2019-11-13 16:37:02 * @Date: 2019-11-13 16:37:02
* @LastEditors: 无尘 * @LastEditors: 无尘
* @LastEditTime: 2019-12-02 13:59:07 * @LastEditTime: 2019-12-03 11:42:29
--> -->
<!-- <!--
<in-progress-active></in-progress-active> <in-progress-active></in-progress-active>
...@@ -35,6 +35,9 @@ import inProgressActive from '@/components/active/in-progress-active.vue'; ...@@ -35,6 +35,9 @@ import inProgressActive from '@/components/active/in-progress-active.vue';
@click.stop="toEdit(index, item)" @click.stop="toEdit(index, item)"
>活动配置</el-button> >活动配置</el-button>
<el-button <el-button
data-clipboard-action="copy"
:data-clipboard-text="item.acitivityUrl"
class="copy-tag"
type="primary" type="primary"
plain plain
@click.stop="handleCopy(index, item)" @click.stop="handleCopy(index, item)"
...@@ -62,7 +65,7 @@ import inProgressActive from '@/components/active/in-progress-active.vue'; ...@@ -62,7 +65,7 @@ import inProgressActive from '@/components/active/in-progress-active.vue';
</template> </template>
<script> <script>
import outDateActive from '@/components/active/out-date-active.vue'; import outDateActive from '@/components/active/out-date-active.vue';
import Clipboard from 'clipboard'; // import Clipboard from 'clipboard';
import showMsg from '@/common/js/showmsg'; import showMsg from '@/common/js/showmsg';
import errMsg from '@/common/js/error'; import errMsg from '@/common/js/error';
import { getRequest } from '@/api/api'; import { getRequest } from '@/api/api';
...@@ -142,12 +145,15 @@ export default { ...@@ -142,12 +145,15 @@ export default {
/** /**
* 复制路径 * 复制路径
*/ */
/* eslint-disable */
handleCopy(index, row) { handleCopy(index, row) {
let clipboard = new Clipboard('.copy-tag', { const that = this;
let clipboard = new that.clipboard('.copy-tag', {
text: function() { text: function() {
return `${row.acitivityUrl}`; return '123456666'+row.acitivityUrl;
} }
}); });
console.log(clipboard)
clipboard.on('success', e => { clipboard.on('success', e => {
showMsg.showmsg('复制成功!', 'success'); showMsg.showmsg('复制成功!', 'success');
// 释放内存 // 释放内存
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @Author: 无尘 * @Author: 无尘
* @Date: 2019-11-20 13:44:22 * @Date: 2019-11-20 13:44:22
* @LastEditors: 无尘 * @LastEditors: 无尘
* @LastEditTime: 2019-11-28 15:00:39 * @LastEditTime: 2019-12-03 10:42:07
--> -->
<!-- <!--
单个上传组件 单个上传组件
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
></i> ></i>
</el-upload> </el-upload>
<p class="upload-tip w-500"> <p class="upload-tip w-500">
必须为规格≥300*300的正方形图片,大小不超过1M,仅限JPG格式。 宽度≥{{width}}px,宽高比≤{{limitRate}},大小不超过1M,仅限JPG格式。
</p> </p>
<!-- 图片预览 --> <!-- 图片预览 -->
<vue-gic-img-preview <vue-gic-img-preview
...@@ -68,7 +68,11 @@ export default { ...@@ -68,7 +68,11 @@ export default {
}, },
limitFlag: { limitFlag: {
type: [Number, String], type: [Number, String],
default: 1 // 1: 根据大于宽高,2:根据固定宽高 default: 1 // 1: 根据大于宽高,2:根据固定宽高 3:宽高比5:4
},
limitRate: {
type: [Number, String],
default: 2 // 宽高比
}, },
width: { width: {
type: Number, type: Number,
...@@ -147,11 +151,15 @@ export default { ...@@ -147,11 +151,15 @@ export default {
let width = this.width; let width = this.width;
let height = this.height; let height = this.height;
if (that.limitFlag == 2 && (width !== that.width || height !== that.height) ){ if (that.limitFlag == 2 && (width !== that.width || height !== that.height) ){
that.$message.error(`图片尺寸必须为${that.width}*${that.height}px!`); that.$message.error(`图片尺寸必须为${that.width}*${that.height}px`);
reject();
}
if (that.limitFlag == 1 && (width < that.width || width/height > that.limitRate) ){
that.$message.error(`图片宽度必须>=${that.width}px,宽高比≤${that.limitRate}!`);
reject(); reject();
} }
if (that.limitFlag == 1 && (width < that.width || height < that.height) ){ if (that.limitFlag == 3 && (width < that.width || width/height != that.limitRate) ){
that.$message.error(`图片尺寸必须>=${that.width}*${that.height}px!`); that.$message.error(`图片宽度必须>=${that.width}px,宽高比≤${that.limitRate}!`);
reject(); reject();
} }
resolve(); resolve();
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* @Author: 无尘 * @Author: 无尘
* @Date: 2019-11-12 10:18:29 * @Date: 2019-11-12 10:18:29
* @LastEditors: 无尘 * @LastEditors: 无尘
* @LastEditTime: 2019-11-20 10:10:51 * @LastEditTime: 2019-12-03 11:32:31
*/ */
import promise from 'es6-promise'; import promise from 'es6-promise';
promise.polyfill(); promise.polyfill();
...@@ -28,6 +28,9 @@ require('../static/font/iconfont.js'); ...@@ -28,6 +28,9 @@ require('../static/font/iconfont.js');
import filters from './filters/index.js'; import filters from './filters/index.js';
import VeLine from 'v-charts/lib/line.common'; import VeLine from 'v-charts/lib/line.common';
import VeHistogram from 'v-charts/lib/histogram.common'; import VeHistogram from 'v-charts/lib/histogram.common';
import clipboard from 'clipboard';
//注册到vue原型上
Vue.prototype.clipboard = clipboard;
Vue.component(VeLine.name, VeLine); Vue.component(VeLine.name, VeLine);
Vue.component(VeHistogram.name, VeHistogram); Vue.component(VeHistogram.name, VeHistogram);
......
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