Commit e0806be3 by 黑潮

Merge branch 'feature/销售线索' into master

# Conflicts:
#	index.html
#	src/views/ecm/form.vue
parents b4564b35 a1085fbd
......@@ -4,6 +4,6 @@ root = true
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
end_of_line = crlf
insert_final_newline = true
trim_trailing_whitespace = true
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="shortcut icon" href="./static/img/favicon.ico">
<title>GIC后台</title>
<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="//web-1251519181.file.myqcloud.com/components/element.2.12.0.css">
<!-- element 皮肤 -->
<!-- <link rel="stylesheet" type="text/css" href="http://web-1251519181.file.myqcloud.com/lib/elementUI/theme.1.0.1/index.css"> -->
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
<!-- 库引用cdn -->
<script src="//web-1251519181.file.myqcloud.com/lib/vue/2.5.2/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/components/element.2.12.0.js"></script>
<!-- <script src="//web-1251519181.file.myqcloud.com/lib/elementUI/index.2.5.4.js"></script> -->
<!-- 组件引用cdn -->
<script src="//web-1251519181.file.myqcloud.com/components/header.2.0.45.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js"></script>
<!-- <script src="//web-1251519181.file.myqcloud.com/components/card.2.0.19.js"></script>卡券选择器 -->
<script src="//web-1251519181.file.myqcloud.com/components/store.2.0.01.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/img-preview.2.0.00.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/member-group.2.2.30.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/store-card.2.0.30.js"></script><!-- 门店选择器 -->
<script src="//web-1251519181.file.myqcloud.com/components/store-new.2.0.71.js"></script><!-- 新版门店选择器 -->
<script src="//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.06.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/people.2.0.43.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/export-excel.2.0.16.js"></script><!-- 数据导出 -->
<script src="//web-1251519181.file.myqcloud.com/components/input.2.0.20.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/delete.2.0.00.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/selector.1.2.25.js"></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/activity-select.1.0.2.1.js"></script><!-- 数据对话 -->
<script src="//web-1251519181.file.myqcloud.com/components/upload-file.1.0.6.js"></script><!-- 文件上传 -->
<script src="//web-1251519181.file.myqcloud.com/components/card.2.0.20.js"></script><!-- 卡券弹窗 -->
<script src="//web-1251519181.file.myqcloud.com/components/radio-transfer.1.0.13.js"></script><!-- 单选穿梭框 -->
</body>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="shortcut icon" href="./static/img/favicon.ico">
<title>GIC后台</title>
<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="//web-1251519181.file.myqcloud.com/components/element.2.12.0.css">
<!-- element 皮肤 -->
<!-- <link rel="stylesheet" type="text/css" href="http://web-1251519181.file.myqcloud.com/lib/elementUI/theme.1.0.1/index.css"> -->
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
<!-- 库引用cdn -->
<script src="//web-1251519181.file.myqcloud.com/lib/vue/2.5.2/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/components/element.2.12.0.js"></script>
<!-- <script src="//web-1251519181.file.myqcloud.com/lib/elementUI/index.2.5.4.js"></script> -->
<!-- 组件引用cdn -->
<script src="//web-1251519181.file.myqcloud.com/components/header.2.0.45.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js"></script>
<!-- <script src="//web-1251519181.file.myqcloud.com/components/card.2.0.19.js"></script>卡券选择器 -->
<script src="//web-1251519181.file.myqcloud.com/components/store.2.0.01.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/img-preview.2.0.00.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/member-group.2.2.30.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/store-card.2.0.30.js"></script><!-- 门店选择器 -->
<script src="//web-1251519181.file.myqcloud.com/components/store-new.2.0.71.js"></script><!-- 新版门店选择器 -->
<script src="//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.06.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/people.2.0.43.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/export-excel.2.0.16.js"></script><!-- 数据导出 -->
<script src="//web-1251519181.file.myqcloud.com/components/input.2.0.20.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/delete.2.0.00.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/selector.1.2.25.js"></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/activity-select.1.0.2.1.js"></script><!-- 数据对话 -->
<script src="//web-1251519181.file.myqcloud.com/components/upload-file.1.0.6.js"></script><!-- 文件上传 -->
<script src="//web-1251519181.file.myqcloud.com/components/card.2.0.20.js"></script><!-- 卡券弹窗 -->
<script src="//web-1251519181.file.myqcloud.com/components/radio-transfer.1.0.13.js"></script><!-- 单选穿梭框 -->
<script src="//web-1251519181.file.myqcloud.com/components/steps.1.0.1.js"></script>
<script src="//web-1251519181.file.myqcloud.com/components/material.1.0.4.js"></script>
</body>
</html>
......@@ -220,6 +220,9 @@ a:hover {
.w110{
width: 110px!important;
}
.w140{
width: 140px !important;
}
.w150{
width: 150px!important;
}
......@@ -518,4 +521,3 @@ img::after {
// ::-webkit-scrollbar {
// display: none;
// }
<template>
<div class="left-aside-contain" :style="{ height: asideHeight }">
<div class="left-aside-contain">
<div class="leftBar-wrap">
<div class="cardmenu" :class="{ collapse: leftCollapse }">
<div class="cardtitle" v-show="!leftCollapse">
......
<template>
<div class="layout-container" :style="{ height: bodyHeight + 'px' }">
<div class="layout-container">
<vue-gic-header class="user-header-pop" style="z-index: 1999;" :projectName="projectName" :collapseFlag="collapseFlag" @collapseTag="collapseTagHandler" @toRouterView="toRouterView"></vue-gic-header>
<div class="layout">
<aside-menu class="layout-left" v-if="asideShow" :projectName="projectName" :leftModulesName="leftModulesName" :collapseFlag.sync="collapseFlag"></aside-menu>
......@@ -10,8 +10,11 @@
<el-breadcrumb-item :class="{ 'no-link': !v.path }" v-for="(v, i) in breadcrumb" :key="i" :to="{ path: v.path }">{{ v.name }}</el-breadcrumb-item>
</el-breadcrumb>
<h3>
<span>{{ contentTitle }}</span>
<div v-html="layoutTips" class="layout--tips--wrap"></div>
<div>
<span>{{ contentTitle }}</span>
<div v-html="layoutTips" class="layout--tips--wrap"></div>
</div>
<div v-if="showDescription" class="intro_wrap"><img :src="require('@/assets/img/introlIcon.png')" class="introlIcon" alt="" /><span class="intro" @click="() => (drawer = true)">指标说明</span></div>
</h3>
</div>
<div class="layout-content__wrap">
......@@ -22,20 +25,25 @@
<vue-gic-footer></vue-gic-footer>
</div>
</div>
<description :drawer.sync="drawer" :direction="direction" :contentTitle="contentTitle" />
</div>
</template>
<script>
import asideMenu from '../aside-menu';
import description from '@/views/ecm/touch-components/description.vue';
export default {
components: {
asideMenu
asideMenu,
description
},
data() {
return {
collapseFlag: false,
projectName: 'marketing',
leftModulesName: '公众号配置',
bodyHeight: 0
bodyHeight: 0,
drawer: false,
direction: 'rtl'
};
},
mounted() {
......@@ -54,6 +62,9 @@ export default {
},
layoutTips() {
return this.$store.state.marketing.layoutTips;
},
showDescription() {
return (this.$route.path.indexOf('ecm/list') >= 0 || this.$route.path.indexOf('ecm/clue') >= 0 || this.$route.path.indexOf('ecm/touch') >= 0) && this.$store.state.marketing.xsxsFlag;
}
},
// watch:{
......@@ -72,12 +83,20 @@ export default {
collapseTagHandler(val) {
this.collapseFlag = val;
}
},
watch: {
$route: {
handler: function(to) {
this.drawer = false;
},
immediate: true
}
}
};
</script>
<style lang="scss">
.layout-container {
height: 100%;
height: 100vh;
display: flex;
}
.layout {
......@@ -95,6 +114,7 @@ export default {
position: fixed;
left: 0;
z-index: 9;
height: 100%;
}
&-right {
position: relative;
......@@ -126,6 +146,28 @@ export default {
font-size: 20px;
padding: 24px 0;
font-weight: 500;
display: flex;
justify-content: space-between;
.intro_wrap {
display: flex;
align-items: center;
.introlIcon {
width: 20px;
height: 20px;
margin-right: 8px;
}
.intro {
width: 64px;
height: 22px;
font-size: 16px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #1890ff;
line-height: 22px;
cursor: pointer;
padding-right: 30px;
}
}
}
}
&-content__wrap {
......
export const ecmTypes = [
{ value: 'teletext', label: '图文', visible: true },
{ value: 'text', label: '文本', visible: true },
{ value: 'image', label: '图片', visible: true },
{ value: 'card', label: '卡券', visible: true },
{ value: 'wxa', label: '小程序', visible: true },
{ value: 'message', label: '短信', visible: true },
{ value: 'teltask', label: '话务', visible: true },
{ value: 'integral', label: '积分', visible: true },
{ value: 'grade', label: '会员卡升级', visible: false },
{ value: 'qywx', label: '企微任务', visible: false }
];
......@@ -65,6 +65,24 @@ export default {
path: '/ecm/list',
type: 'currrent'
}
},
{
path: 'touch/:id',
name: '触达效果',
component: () => import(/* webpackChunkName: "ecm" */ '../../views/ecm/touch-effect.vue'),
meta: {
path: '/ecm/list',
type: 'info'
}
},
{
path: 'clue',
name: '线索页',
component: () => import(/* webpackChunkName: "ecm" */ '../../views/ecm/touch-clue.vue'),
meta: {
path: '/ecm/list',
type: 'info'
}
}
]
};
......
......@@ -43,4 +43,26 @@ export const exportBatchSendDetails = config.api + PREFIX + 'export-batch-send-d
// 智能营销--实时人员列表--导出csv
export const exportCurrentSendDetails = config.api + PREFIX + 'export-current-send-details';
// 智能营销--触达效果
export const ecmTouchEffectColumnDiagram = params => requests(PREFIX + 'ecmTouchEffectColumnDiagram', params);
export const ecmTouchEffectTable = params => requests(PREFIX + 'ecmTouchEffectTable', params);
export const ecmTouchEffectFunnelChart = params => requests(PREFIX + 'ecmTouchEffectFunnelChart', params);
export const ecmPlanTouchConfig = params => requests(PREFIX + 'ecmPlanTouchConfig', params);
// 智能营销--导购线索
export const ecmGuideCluesColumnDiagram = params => requests(PREFIX + 'ecmGuideCluesColumnDiagram', params);
export const ecmGuideCluesTable = params => requests(PREFIX + 'ecmGuideCluesTable', params);
export const ecmGuideCluesTaskTable = params => requests(PREFIX + 'ecmGuideCluesTaskTable', params); // 任务完成情况表格
export const ecmGuideCluesTouchEffectTotalTab = params => requests(PREFIX + 'ecmGuideCluesTouchEffectTotalTab', params); // 触达效果-整体转化-表格
export const ecmGuideCluesTouchEffectTabTotalHead = params => requests(PREFIX + 'ecmGuideCluesTouchEffectTabTotalHead', params); // 触达效果-整体转化-表头
export const ecmGuideCluesTouchEffectTab = params => requests(PREFIX + 'ecmGuideCluesTouchEffectTab', params); // 触达效果-其他tab-表格
export const ecmGuideCluesTouchEffectTabHead = params => requests(PREFIX + 'ecmGuideCluesTouchEffectTabHead', params); // 触达效果-其他tab-表头
// 智能营销--后台线索
export const ecmHeadCluesColumnDiagram = params => requests(PREFIX + 'ecmHeadCluesColumnDiagram', params);
export const ecmHeadGuideCluesTable = params => requests(PREFIX + 'ecmHeadGuideCluesTable', params);
export const ecmHeadCluesTaskTab = params => requests(PREFIX + 'ecmHeadCluesTaskTab', params); // 表格
export const ecmHeadCluesTaskTabHead = params => requests(PREFIX + 'ecmHeadCluesTaskTabHead', params); //表头1 计划整体
export const ecmGuideCluesTouchEffectTabTotalHead1 = params => requests(PREFIX + 'ecmGuideCluesTouchEffectTabTotalHead1', params); //表头2 区域合计
export const getUseStoredFalg = params => requests(PREFIX + 'get-ecm-store-flag', params);
export const getXsxsFalg = params => requests(PREFIX + 'get-xsxs-open-flag', params);
......@@ -15,7 +15,8 @@ const state = {
layoutTips: '',
isShowSelf: false, // 展示是否显示 '仅看本人' btn 在app.vue调用 每次刷新都会获取
openFlag: false, // 列表是否显示创建人
appletEnable: false // 小程序是否可用
appletEnable: false, // 小程序是否可用,
xsxsFlag: false // 是否开启销售线索
};
// getters
......
......@@ -3,7 +3,7 @@
<div class="pb22 clearfix">
<el-date-picker class="w250" v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="search"></el-date-picker>
<el-select class="dm-select" clearable v-model="listParams.type" placeholder="选择上线状态" @change="search">
<el-option v-for="(v, i) in typeOptions" :key="i" :label="v.label" :value="v.value"></el-option>
<el-option v-for="(v, i) in showTypeOptions" :key="i" :label="v.label" :value="v.value"></el-option>
</el-select>
<el-input v-model="listParams.title" class="w200" placeholder="输入营销内容标题" clearable @change="search"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
</div>
......@@ -44,9 +44,10 @@
</section>
</template>
<script>
import { ecmBatchSendInfos } from '@/service/api/ecmApi.js';
import { ecmBatchSendInfos, getUseStoredFalg, getXsxsFalg } from '@/service/api/ecmApi.js';
import { formatDateTimeByType } from '@/utils/index.js';
import batchDialog from './batch-dialog';
import { ecmTypes } from '@/config/ecm.js';
export default {
name: 'ecm-batch-list',
......@@ -57,7 +58,7 @@ export default {
let that = this;
return {
dateTime: [Date.now() - 30 * 24 * 60 * 60 * 1000, Date.now()],
typeOptions: [{ value: '', label: '所有营销方式' }, { value: 'teletext', label: '图文' }, { value: 'text', label: '文本' }, { value: 'image', label: '图片' }, { value: 'card', label: '卡券' }, { value: 'wxa', label: '小程序' }, { value: 'message', label: '短信' }, { value: 'teltask', label: '话务' }, { value: 'integral', label: '积分' }], // eslint-disable-line
typeOptions: [{ value: '', label: '所有营销方式', visible: true }, ...JSON.parse(JSON.stringify(ecmTypes))], // eslint-disable-line
listParams: {
ecmPlanId: this.$route.params.id,
beginTime: '',
......@@ -118,6 +119,16 @@ export default {
};
},
created() {
getXsxsFalg().then(res => {
if (res.result) {
this.typeOptions.find(el => el.value == 'qywx').visible = true;
}
});
getUseStoredFalg().then(res => {
if (res.result.useStoredFlag) {
this.typeOptions.find(el => el.value == 'grade').visible = true;
}
});
this.ecmBatchSendInfos();
this.$store.commit('mutations_breadcrumb', [{ name: '营销管理', path: '' }, { name: '智能营销', path: '/ecm' }, { name: this.$route.query.name + ' - 批次记录', path: '' }]); // eslint-disable-line
},
......@@ -130,13 +141,18 @@ export default {
</div>
`
);
setTimeout(_ => {
this.$store.commit('mutations_layoutTips', '');
}, 5000);
// setTimeout(_ => {
// this.$store.commit('mutations_layoutTips', '');
// }, 5000);
},
beforeDestroy() {
this.$store.commit('mutations_layoutTips', '');
},
computed: {
showTypeOptions() {
return this.typeOptions.filter(el => el.visible == true);
}
},
methods: {
formatDateTimeByType,
search() {
......
......@@ -167,9 +167,9 @@ export default {
mounted() {
if (!this.isComponet) {
this.$store.commit('mutations_layoutTips', `<div class="layout--tips"><i class="el-icon-info"></i>历史数据限制:2018年11月15日之前的历史营销计划,没有详细数据</div>`);
setTimeout(_ => {
this.$store.commit('mutations_layoutTips', '');
}, 5000);
// setTimeout(_ => {
// this.$store.commit('mutations_layoutTips', '');
// }, 5000);
}
},
created() {
......
import { _debounce } from '@/utils/index';
import { getEcmInfo, saveEcmInfo, getUseStoredFalg } from '@/service/api/ecmApi.js';
import { getEcmInfo, saveEcmInfo, getUseStoredFalg, getXsxsFalg } from '@/service/api/ecmApi.js';
import { getCardManualSetting } from '@/service/api/cardApi.js';
import { listTemplateVariables } from '@/service/api/msgApi.js';
import { klflStrategy } from '@/service/api/gameApi.js'; // 会员等级列表接口
......@@ -150,7 +150,15 @@ export default {
},
storedChecked: false,
discount_limit: { type: 1, count: undefined, flag: false }, // 适用商品折扣
useStoredFlag: 0 //显示储值触发和会员卡升级事件
useStoredFlag: 0, //显示储值触发和会员卡升级事件
analyseConfig: {
open_flag: 0,
crowd_flag: 0,
crowd_send: 4,
crowd_no_send: 1,
marke_days: 14
},
xsxsFlag: 0
};
},
components: {
......@@ -402,6 +410,9 @@ export default {
this.form.storedLowest = cost.lowest_cost;
this.form.storedMax = cost.max_cost;
}
if (this.xsxsFlag && result && result.analyseJson) {
this.analyseConfig = JSON.parse(result.analyseJson);
}
}
if (!this.form.templateUseEnable) return;
let template = null;
......@@ -643,6 +654,18 @@ export default {
return;
}
}
if (this.xsxsFlag == 1) {
if (this.analyseConfig.crowd_send === undefined) {
this.$tips({ type: 'warning', message: '请填写实验组' });
return;
} else if (this.analyseConfig.crowd_no_send === undefined) {
this.$tips({ type: 'warning', message: '请填写参照组' });
return;
} else if (this.analyseConfig.marke_days === undefined) {
this.$tips({ type: 'warning', message: '请填写营销效果时长' });
return;
}
}
this.$refs[formName].validate(valid => {
if (valid) {
let params = {
......@@ -768,6 +791,9 @@ export default {
};
params.marketingTemplate = JSON.stringify(marketingTemplate);
}
if (this.xsxsFlag == 1) {
params.analyseJson = JSON.stringify(this.analyseConfig);
}
this.saveEcmInfo(params);
} else {
this.$tips({ type: 'warning', message: '表单填写不完整' });
......@@ -1002,6 +1028,21 @@ export default {
.filter(v => v)
.join(',');
}
},
onChangeAnalyseConfig(isOpen, isOpenFlag) {
if (!isOpen) {
this.analyseConfig.crowd_send = 4;
this.analyseConfig.crowd_no_send = 1;
isOpenFlag && (this.analyseConfig.marke_days = 14);
isOpenFlag && (this.analyseConfig.crowd_flag = 0);
}
},
onChangeEffectType(val) {
if (val == 0) {
this.analyseConfig.crowd_flag = 0;
this.analyseConfig.crowd_send = 4;
this.analyseConfig.crowd_no_send = 1;
}
}
},
filters: {
......@@ -1038,6 +1079,9 @@ export default {
this.effectActionOptions.push({ value: 'stored', label: '储值触发' });
}
});
getXsxsFalg().then(res => {
this.xsxsFlag = res.result;
});
// 设置面包屑
let breadcrumbName = '智能营销编辑';
if (this.isAdd) {
......
......@@ -8,9 +8,9 @@
<dm-input class="w400" :maxlength="9" v-model="form.ecmPlanName" :disabled="!isAdd"></dm-input>
</el-form-item>
<el-form-item label="时效" class="is-required">
<el-radio v-model="form.effectType" :label="0" :disabled="!isAdd">触点</el-radio>
<el-radio v-model="form.effectType" :label="1" :disabled="!isAdd">重复</el-radio>
<el-radio v-model="form.effectType" :label="2" :disabled="!isAdd">单次</el-radio>
<el-radio v-model="form.effectType" :label="0" :disabled="!isAdd" @change="onChangeEffectType">触点</el-radio>
<el-radio v-model="form.effectType" :label="1" :disabled="!isAdd" @change="onChangeEffectType">重复</el-radio>
<el-radio v-model="form.effectType" :label="2" :disabled="!isAdd" @change="onChangeEffectType">单次</el-radio>
<!-- <el-select style="width:262px;" :disabled="!isAdd" v-model="form.effectTime" v-if="form.effectType == 1" placeholder="请选择时间">
<el-option v-for="(v, i) in dayOptions" :key="i" :label="v.label" :value="v.value"></el-option>
</el-select> -->
......@@ -287,7 +287,7 @@
<section class="dm-form__wrap">
<h3 class="dm-title__label">营销事件</h3>
<!-- 只有实时才是单图文 -->
<marketing-event :readOnly="isInfo" show-out-coupon-icon ref="marketingEvent" @has-card="hasCard" v-if="ecmPlanId" :singleFlag="form.effectType === 0" :integralMultiple="form.effectAction === 'consume'" :ecmPlanId="ecmPlanId" :isSupportVar="form.effectType === 0" :code="code" :enabledMessageState="enabledMessageState" :cardLimitType="-1" :use-stored="useStoredFlag && ['consume', 'stored'].includes(form.effectAction)"></marketing-event>
<marketing-event :readOnly="isInfo" show-out-coupon-icon ref="marketingEvent" @has-card="hasCard" v-if="ecmPlanId" :singleFlag="form.effectType === 0" :integralMultiple="form.effectAction === 'consume'" :ecmPlanId="ecmPlanId" :isSupportVar="form.effectType === 0" :code="code" :enabledMessageState="enabledMessageState" :cardLimitType="-1" :use-stored="useStoredFlag && ['consume', 'stored'].includes(form.effectAction) && form.effectType == 0"></marketing-event>
<!-- 只有非实时&&选择卡券了展示提示 -->
<div v-if="currentCard.comName && form.effectType != 0 && couponAutoGetFlag" class="fz13 regular-font-color line-height2" style="margin-left:120px;margin-top:30px;">
* 用户在领取卡券后需要<b class="bold">同步至ERP</b>,如果关闭用户<b class="bold">手动领取</b>,卡券在<b class="bold">批量投放</b>时会需要将卡券信息批量同步至ERP。 <br />
......@@ -371,6 +371,52 @@
</div>
</el-form-item>
</section>
<!-- 营销分析设置 -->
<section class="dm-form__wrap" v-if="xsxsFlag == 1">
<h3 class="dm-title__label">
<span class="inline-block mr10">营销分析设置</span>
<el-switch :disabled="!isAdd" v-model="analyseConfig.open_flag" :active-value="1" :inactive-value="0" @change="onChangeAnalyseConfig($event, true)"></el-switch>
</h3>
<div v-if="analyseConfig.open_flag == 1" style="padding-bottom:10px;color:#303133">
<div class="mt20">
<div class="w150 text-right inline-block mr10">
<label class="cursor required">
<span>设置营销效果时长</span>
<el-tooltip slot="label" open-delay="200" placement="top">
<i style="cursor:pointer;color:#909399;font-size:14px;" class="iconfont icon-xinxixianshi"></i>
<div slot="content" style="width:376px;line-height: 22px;">设置线索在被营销触达之后的{{ analyseConfig.marke_days || '--' }}天内,客户所产生的消费纳入到该线索收益统计中</div>
</el-tooltip>
</label>
</div>
<el-input-number :disabled="!isAdd" controls-position="right" class="w150" :min="3" :max="31" v-model="analyseConfig.marke_days"></el-input-number>
<span class="ml10">天之内</span>
</div>
<div style="margin-top:6px;color:#A5A7AD;font-size:12px;margin-left:164px">最长 31 天,最短 3 天 (以自然日计算)</div>
<div class="mt20" v-show="[1, 2].includes(form.effectType)">
<div class="w150 text-right inline-block mr10">
<label class="cursor">
<span>设置参照组</span>
<el-tooltip slot="label" open-delay="200" placement="top">
<i style="cursor:pointer;color:#909399;font-size:14px;" class="iconfont icon-xinxixianshi"></i>
<div slot="content" style="width:376px;line-height: 22px;">设置后,系统按下方比例随机抽取部分营销人群作为参照,不触发任务。后续可在【触达效果】中查看对照数据结果</div>
</el-tooltip>
</label>
</div>
<el-switch :disabled="!isAdd" v-model="analyseConfig.crowd_flag" :active-value="1" :inactive-value="0" @change="onChangeAnalyseConfig($event, false)"></el-switch>
</div>
<div v-if="analyseConfig.crowd_flag == 1" class="mt20">
<label class="w150 text-right inline-block mr10">实验组 (触发任务人群)</label>
<el-input-number :disabled="!isAdd" controls-position="right" class="w150" :min="1" v-model="analyseConfig.crowd_send"></el-input-number>
<span class="ml10 mr10">:</span>
<el-input-number :disabled="!isAdd" controls-position="right" class="w150" :min="1" v-model="analyseConfig.crowd_no_send"></el-input-number>
<span class="ml10">参照组 (不触发任务人群)</span>
<el-tooltip v-if="analyseConfig.crowd_no_send > 1" class="item" effect="dark" placement="top" :open-delay="300">
<i style="cursor:pointer;color:#909399;font-size:14px;vertical-align: middle;" class="iconfont icon-xinxixianshi"></i>
<div slot="content" style="width:376px;line-height: 22px;">原则:同一用户在同一计划中不会既存在实验组中,又存在于参照组中。 在计划允许对同一个用户重复营销的情况下,如果首次触发时,某些用户已经被归为实验组了,那么下一次触发时,这些用户还会被默认归入到实验组,剩余的再按照比例进行触发。<br />因此对于这些允许对用户进行重复营销的计划,最终在【触达效果】中所呈现的实验组与参照组的人数比例可能和配置的比例不一致。</div>
</el-tooltip>
</div>
</div>
</section>
<!-- 操作区 -->
<div class="btn-wrap_fixed" :class="{ on: asideShow }">
<el-button type="primary" @click="submit('form')" v-if="!isInfo">保 存</el-button>
......@@ -535,4 +581,9 @@ export default ecmForm;
.is-expand {
transform: rotate(180deg);
}
.required::before {
content: '*';
color: #f56c6c;
margin-right: 4px;
}
</style>
......@@ -167,3 +167,6 @@ export const LoadTempList = params => requests(PREFIX + 'load-message-templateLi
//会员等级
export const getCardLevelList = params => requests('api-plug/member-grade-list', params);
//企业列表
export const getEntepriseList = params => requests(PREFIX + 'list-qywx-enteprise', params);
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M10.24 512c0 276.992 224.256 501.76 501.248 501.76 276.992 0 501.76-224.256 501.76-501.248 0-276.992-224.256-501.76-501.248-501.76S10.24 235.008 10.24 512z" fill="#333333" fill-opacity=".8" /><path d="M391.68 376.32c0-53.248 58.368-85.504 103.424-57.856l193.536 118.784c43.008 26.624 43.008 89.088 0 115.712l-193.536 118.784c-45.056 27.648-103.424-4.608-103.424-57.856V376.32z m132.096 118.784l4.096 2.56v-5.12l-4.096 2.56z" fill="#FFFFFF" /></svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg fill="#1890ff" class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M180.224 610.304c0 76.8-56.32 142.336-132.608 153.088v134.144h928.256v-134.144c-76.288-10.752-133.12-76.288-133.12-153.088s56.32-142.336 133.12-153.088V323.072H47.616v134.144c76.288 10.752 132.608 76.288 132.608 153.088zM3.584 477.696V300.544c0-6.144 2.048-11.264 6.656-15.872 4.096-4.096 9.728-6.656 15.872-6.656H998.4c6.144 0 11.264 2.048 15.872 6.656 4.096 4.096 6.656 9.728 6.656 15.872v176.64c0 6.144-2.048 11.264-6.656 15.872-4.096 4.096-9.728 6.656-15.872 6.656-60.928 0-110.592 49.664-110.592 110.592s49.664 110.592 110.592 110.592c6.144 0 11.264 2.048 15.872 6.656 4.096 4.096 6.656 9.728 6.656 15.872v176.64c0 6.144-2.048 11.264-6.656 15.872-4.096 4.096-9.728 6.656-15.872 6.656H25.6c-6.144 0-11.264-2.048-15.872-6.656-4.096-4.096-6.656-9.728-6.656-15.872v-176.64c0-6.144 2.048-11.264 6.656-15.872 4.096-4.096 9.728-6.656 15.872-6.656 60.928 0 110.592-49.664 110.592-110.592 0-60.928-49.664-110.592-110.592-110.592-6.144 0-11.264-2.048-15.872-6.656-4.096-4.096-6.144-9.728-6.144-15.36z m377.856-223.744c-11.776 3.072-24.064-4.096-27.136-15.872-3.072-11.776 4.096-24.064 15.872-27.136l467.968-124.928c11.776-3.072 24.064 4.096 27.136 15.872l26.112 98.304c3.072 11.776-4.096 24.064-15.872 27.136-11.776 3.072-24.064-4.096-27.136-15.872l-20.48-76.8-446.464 119.296zM666.112 389.12c0-12.288 9.728-22.016 22.016-22.016s22.016 9.728 22.016 22.016v88.576c0 12.288-9.728 22.016-22.016 22.016s-22.016-9.728-22.016-22.016V389.12z m0 176.64c0-12.288 9.728-22.016 22.016-22.016s22.016 9.728 22.016 22.016v88.576c0 12.288-9.728 22.016-22.016 22.016s-22.016-9.728-22.016-22.016v-88.576z m0 176.64c0-12.288 9.728-22.016 22.016-22.016s22.016 9.728 22.016 22.016v88.576c0 12.288-9.728 22.016-22.016 22.016s-22.016-9.728-22.016-22.016V742.4z" /></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1617868465882" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7312" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M146.432 5.12H614.4l307.2 305.664v668.672c0 24.064-19.456 43.52-44.032 43.52H146.432c-24.064 0-44.032-19.456-44.032-43.52V48.64C102.4 24.576 121.856 5.12 146.432 5.12z" fill="#3D6AE8" p-id="7313"></path><path d="M614.4 5.12l307.2 307.2h-239.104C645.12 312.32 614.4 281.6 614.4 244.224V5.12z" fill="#86ADF2" p-id="7314"></path><path d="M239.104 514.048h546.304v102.4H239.104zM239.104 718.848h546.304v102.4H239.104z" fill="#E1EDFF" p-id="7315"></path></svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1616486164284" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7879" xmlns:xlink="http://www.w3.org/1999/xlink" width="200.1953125" height="200"><defs><style type="text/css"></style></defs><path d="M833.532723 837.12H22.524723c-7.168 0-14.848-4.096-18.432-9.728-4.608-6.144-5.12-13.824-2.56-20.992l168.96-604.16c3.584-9.216 11.776-14.848 21.504-14.848h810.496c7.168 0 14.848 4.096 18.432 9.728 4.608 6.144 5.12 13.824 2.56 20.992l-168.96 604.16c-3.072 8.704-11.264 14.848-20.992 14.848z m-777.728-46.08h761.856l152.064-558.592H207.868723L55.804723 791.04z" fill="#1890ff" p-id="7880"></path><path d="M833.532723 837.12H22.524723c-7.168 0-14.848-4.096-18.432-9.728-4.608-6.144-5.12-13.824-2.56-20.992l168.96-604.16c3.584-9.216 11.776-14.848 21.504-14.848h810.496c7.168 0 14.848 4.096 18.432 9.728 4.608 6.144 5.12 13.824 2.56 20.992l-168.96 604.16c-3.072 8.704-11.264 14.848-20.992 14.848z m-777.728-46.08h761.856l152.064-558.592H207.868723L55.804723 791.04z" fill="#1890ff" p-id="7881"></path><path d="M478.204723 393.216L372.732723 634.88H320.508723L219.132723 393.216H276.988723l70.656 182.272 72.192-182.272h58.368z m25.088 241.664V393.216h51.712V634.88H503.292723z m152.064-83.968V634.88h-51.712V393.216h120.832c22.016 0 37.888 1.536 47.104 4.608 15.872 5.12 28.672 16.384 37.888 33.28 6.656 12.288 10.24 26.624 10.24 40.96 0 12.288-2.048 24.064-6.656 34.816-4.608 11.264-10.752 20.48-18.432 27.136-7.168 6.144-15.36 10.752-23.04 12.8-7.68 2.048-18.944 3.584-33.28 3.584H655.868723l-0.512 0.512z m0-43.52h70.144c12.288 0 21.504-1.536 26.624-5.632 7.168-6.144 11.264-16.384 11.264-31.744 0-16.384-5.632-26.624-16.896-30.72-4.096-1.536-10.752-2.56-19.456-2.56H655.868723v70.656h-0.512z" fill="#1890ff" p-id="7882"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1616486164284" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7879" xmlns:xlink="http://www.w3.org/1999/xlink" width="200.1953125" height="200"><defs><style type="text/css"></style></defs><path d="M833.532723 837.12H22.524723c-7.168 0-14.848-4.096-18.432-9.728-4.608-6.144-5.12-13.824-2.56-20.992l168.96-604.16c3.584-9.216 11.776-14.848 21.504-14.848h810.496c7.168 0 14.848 4.096 18.432 9.728 4.608 6.144 5.12 13.824 2.56 20.992l-168.96 604.16c-3.072 8.704-11.264 14.848-20.992 14.848z m-777.728-46.08h761.856l152.064-558.592H207.868723L55.804723 791.04z" fill="#c0c4cc" p-id="7880"></path><path d="M833.532723 837.12H22.524723c-7.168 0-14.848-4.096-18.432-9.728-4.608-6.144-5.12-13.824-2.56-20.992l168.96-604.16c3.584-9.216 11.776-14.848 21.504-14.848h810.496c7.168 0 14.848 4.096 18.432 9.728 4.608 6.144 5.12 13.824 2.56 20.992l-168.96 604.16c-3.072 8.704-11.264 14.848-20.992 14.848z m-777.728-46.08h761.856l152.064-558.592H207.868723L55.804723 791.04z" fill="#c0c4cc" p-id="7881"></path><path d="M478.204723 393.216L372.732723 634.88H320.508723L219.132723 393.216H276.988723l70.656 182.272 72.192-182.272h58.368z m25.088 241.664V393.216h51.712V634.88H503.292723z m152.064-83.968V634.88h-51.712V393.216h120.832c22.016 0 37.888 1.536 47.104 4.608 15.872 5.12 28.672 16.384 37.888 33.28 6.656 12.288 10.24 26.624 10.24 40.96 0 12.288-2.048 24.064-6.656 34.816-4.608 11.264-10.752 20.48-18.432 27.136-7.168 6.144-15.36 10.752-23.04 12.8-7.68 2.048-18.944 3.584-33.28 3.584H655.868723l-0.512 0.512z m0-43.52h70.144c12.288 0 21.504-1.536 26.624-5.632 7.168-6.144 11.264-16.384 11.264-31.744 0-16.384-5.632-26.624-16.896-30.72-4.096-1.536-10.752-2.56-19.456-2.56H655.868723v70.656h-0.512z" fill="#c0c4cc" p-id="7882"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" fill="#1890ff" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M913.903509 128.089283l-805.853631 0c-38.792515 0-70.352301 31.559786-70.352301 70.352301l0 626.775047c0 38.792515 31.559786 70.352301 70.352301 70.352301l805.853631 0c38.792515 0 70.352301-31.559786 70.352301-70.352301l0-626.775047C984.255811 159.64907 952.696024 128.089283 913.903509 128.089283zM108.049878 179.254593l805.853631 0c10.579963 0 19.186991 8.607028 19.186991 19.186991l0 321.058227-236.495272-236.496296c-27.431769-27.429723-72.062246-27.429723-99.494015 0L445.901583 434.20417l-53.064566-52.707432c-27.430746-27.430746-72.063269-27.430746-99.494015 0L88.862887 585.977875l0-387.53629C88.862887 187.861622 97.469915 179.254593 108.049878 179.254593zM913.903509 844.403622l-805.853631 0c-10.579963 0-19.186991-8.607028-19.186991-19.186991L88.862887 658.33688l240.660128-240.661152c7.480368-7.482415 19.653619-7.481392 27.195386 0.061398l322.30666 320.137251c4.990664 4.956895 11.510148 7.432273 18.027585 7.432273 6.576789 0 13.151531-2.520403 18.151405-7.554046 9.956769-10.024308 9.902534-26.222221-0.121773-36.178991L482.20337 470.261387l151.077857-151.077857c7.480368-7.480368 19.652596-7.482415 27.13501 0l272.675286 272.675286 0 233.357815C933.090501 835.796594 924.483472 844.403622 913.903509 844.403622z" /></svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 204.9 200" style="enable-background:new 0 0 204.9 200;" xml:space="preserve">
<style type="text/css">
.st0{fill:#1890ff;}
</style>
<path class="st0" d="M204,139c0-10-7.5-19-21-26V95.5v-1V93c0-1.5,0-3-0.5-4.5c14-7,21.5-16.5,21.5-26v-18v-1V42
c0-22.5-39-39.5-90.5-39.5c-52,0-91,17-91,39.5v20c0,1.5,0,3,0.5,4.5C9,73.5,1.5,83,1.5,92.5v20c0,10,7.5,19,21,26v20
c0,22.5,39,39.5,90.5,39.5s90.5-17,90.5-39.5v-18v-1C204,140,204,139.5,204,139L204,139z M190.5,43c-1,4-4,7.5-9.5,11
c-14.5,9.5-40,15-68,15c-47,0-75-14.5-77.5-25.5v-1C35.5,29,73,16,113,16s77.5,13,77.5,26.5L190.5,43L190.5,43z M41.5,67
c1.5,1,3,1.5,5,2.5l1,0.5c1.5,0.5,2.5,1,4,2l1.5,0.5l4.5,1.5l1,0.5c2,0.5,4,1,6,2L66,77c1.5,0.5,3.5,1,5,1l2,0.5
c1.5,0.5,3.5,0.5,5,1l2,0.5c2.5,0.5,4.5,0.5,7,1h1.5c2,0,4,0.5,6,0.5H97c1.5,0,3.5,0,5.5,0.5h21c1.5,0,3.5,0,5-0.5h3
c2,0,3.5-0.5,5.5-0.5h2c2.5-0.5,4.5-0.5,7-1l2.5-0.5c1.5-0.5,3-0.5,4.5-1l2.5-0.5c1.5-0.5,3-0.5,4.5-1l2-0.5l6-1.5l1-0.5l4.5-1.5
l1.5-0.5c1.5-0.5,3-1,4-2l1-0.5c3.5-1.5,6.5-3.5,9.5-5l1-0.5c0,0,0.5,0,0.5-0.5c-0.5,5.5-7.5,11.5-19.5,16c-15,6.5-36,9.5-58,9.5
C73,89.5,44,78,37.5,67c-1-1.5-1.5-2.5-1.5-3.5c0,0,0.5,0,0.5,0.5l1,0.5C38.5,65,40,66,41.5,67L41.5,67z M113,165.5h-11.5
c-1.5,0-3.5,0-5-0.5l-4-0.5c-1,0-2.5,0-3.5-0.5h-2l-2.5-0.5c-1,0-2,0-3-0.5c-0.5,0-1,0-2-0.5l-2-0.5c-1,0-2-0.5-3-0.5
c-0.5,0-1,0-1.5-0.5l-2-0.5c-1,0-2-0.5-3-0.5h-1.5c-1,0-2-0.5-2.5-0.5l-3-1c-1-0.5-1.5-0.5-2.5-1l-2.5-1c-0.5-0.5-1.5-0.5-2-1l-2-1
c-0.5-0.5-1.5-0.5-2-1l-1.5-1c-0.5-0.5-1.5-1-2-1L44,150c-0.5-0.5-1-1-2-1.5l-1.5-1c-0.5-0.5-1-0.5-1-1L39,146c0.5,0,0.5,0,1,0.5
l2.5,0.5c1.5,0.5,3,1,5,1.5l3,0.5c1.5,0.5,3,0.5,5,1c1,0,2,0.5,3,0.5c1.5,0.5,3.5,0.5,5,1l3,0.5c1.5,0,3.5,0.5,5.5,0.5l3,0.5
c1.5,0,3.5,0,5.5,0.5h23c2,0,3.5,0,5.5-0.5l3-0.5c1.5,0,3-0.5,5-0.5l3-0.5c1.5,0,3-0.5,4.5-0.5l3-0.5c1.5,0,3-0.5,4.5-1l3-0.5
c1.5-0.5,2.5-0.5,4-1c1,0,2-0.5,2.5-0.5c1.5-0.5,2.5-0.5,4-1l2.5-0.5c1.5-0.5,2.5-1,3.5-1.5c0.5-0.5,1.5-0.5,2-1
c1.5-0.5,2.5-1,4-1.5c0.5,0,1-0.5,1.5-0.5c1.5-0.5,2.5-1,4-2l1.5-0.5c3.5-2,6-3.5,8.5-5.5l0.5-0.5l3-3l1-1c0.5-1,1.5-1.5,2-2.5
c0,0,0.5-0.5,0.5-1c7.5,4.5,12,9,12,13.5v1.5C188.5,151,160.5,165.5,113,165.5L113,165.5z M143,100c1,0,2-0.5,3.5-0.5s2.5-0.5,4-0.5
c1,0,2.5-0.5,3.5-0.5c1.5-0.5,2.5-0.5,4-1c1-0.5,2.5-0.5,3.5-1c1.5-0.5,2.5-0.5,3.5-1c1-0.5,2-0.5,3-1c0.5,0,1-0.5,1.5-0.5v0.5
c0,1-0.5,2-1.5,3.5c-7,11-35.5,22-75.5,22c-26,0-49.5-4.5-64.5-12.5c-7.5-4-12-8.5-13-13v-1c0-5,5.5-10.5,14.5-15L31,80l0.5,0.5
c1,1,2,1.5,3,2.5l1,1c1,0.5,1.5,1,2.5,2l1.5,1c1,0.5,2,1,2.5,1.5h2l3,1.5c0.5,0.5,1.5,0.5,2,1c1,0.5,2,1,3,1c0.5,0.5,1.5,0.5,2,1
c1,0.5,2,0.5,3,1l2.5,1c1,0.5,2,0.5,3.5,1c1,0,1.5,0.5,2.5,0.5c1,0.5,2,0.5,3.5,1l3,0.5c1,0,2.5,0.5,4,1l2.5,0.5c1,0,2,0.5,3.5,0.5
c1,0,2,0.5,3,0.5c1,0,2,0,3,0.5l8.5,1H131c1,0,2.5,0,3.5-0.5h1.5c1,0,2,0,3-0.5c1.5,0,2.5-0.5,4-0.5 M20,117.5l0.5,0.5
c1.5,1,3,1.5,4.5,2.5l1.5,0.5c1,0.5,2.5,1,3.5,1.5l2,0.5l4.5,1.5L38,125c2,0.5,4,1,6,2l1.5,0.5c1.5,0.5,3,1,5,1l2,0.5
c1.5,0.5,3.5,0.5,5,1l2,0.5c2.5,0.5,4.5,0.5,7.5,1h1c2,0,4,0.5,6,0.5h2.5c2,0,3.5,0,5.5,0.5h20.5c2,0,3.5,0,5.5-0.5h2.5
c2,0,4-0.5,6-0.5h1.5c2.5-0.5,4.5-0.5,7-1l2-0.5c1.5-0.5,3.5-0.5,5-1l2.5-0.5c1.5-0.5,3-0.5,4.5-1l2-0.5l6-1.5l1.5-0.5
c1.5-0.5,3-1,4-1.5l2-1c1-0.5,2.5-1,3.5-1.5c0.5,0,1-0.5,1.5-0.5c1.5-0.5,3-1.5,4.5-2.5l1-0.5c1-0.5,2-1.5,3-2c0.5-0.5,1-0.5,1.5-1
v1c-2.5,10.5-31,25-77,25c-15,0-29.5-1.5-42.5-5c-6.5-1.5-12.5-3.5-17.5-5.5c-10.5-4.5-17-10.5-17.5-15.5c0,0,0.5,0,0.5,0.5H16
C17.5,116,18.5,117,20,117.5L20,117.5z M36.5,160.5l1,0.5c1,1,2.5,1.5,4.5,2.5c1.5,1,3,1.5,4.5,2.5l1.5,0.5c1,0.5,2.5,1,4,1.5l2,0.5
c1.5,0.5,3,1,5,1.5l1,0.5l6,1.5l1.5,0.5c1.5,0.5,3,1,5,1L74,175c1.5,0.5,3,0.5,5,1l2,0.5c2.5,0.5,4.5,0.5,7,1h2c2,0,3.5,0.5,5.5,0.5
h3c1.5,0,3,0,5,0.5h21c1.5,0,3,0,4.5-0.5h3c1.5,0,3-0.5,5-0.5l2.5-0.5c2.5-0.5,4.5-0.5,6.5-1l2.5-0.5c1.5-0.5,3-0.5,4.5-1l2.5-0.5
c1.5-0.5,3-0.5,4.5-1l2-0.5l6-1.5l1.5-0.5l4.5-1.5c0.5,0,1-0.5,1.5-0.5c1.5-0.5,2.5-1,4-2l1-0.5c1.5-1,3.5-1.5,5-2.5s3-1.5,4.5-2.5
l1-0.5h0.5c-1,11-30.5,26-77.5,26S37.5,171.5,36.5,160.5C36,160,36,160.5,36.5,160.5L36.5,160.5z"/>
</svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1618907934833" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9879" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M415 934c205.2 1.2 391.9-120.1 476.2-309.5 82.3-189.1 45.1-409.7-94.4-560.6h37.4C1014 280.7 999 600.8 799.9 799.4 599.1 999.9 281.2 1014.7 63 833.8v-37.3C159.4 885 284.8 934 415 934z" p-id="9880" fill="#F5222D"></path><path d="M861.2 271.7l21-6c3.2 9.3 5.7 18.8 7.5 28.4l-21 6c-1.6-9.7-4.1-19.2-7.5-28.4z m13.5 55.3l21-4.5c1.5 10.5 3 19.4 4.5 30l-21 3c-1.5-10.5-3-19.5-4.5-28.5z m9 83.7c0.3-9.5-0.2-18.9-1.5-28.3l21-1.5c0 10.5 1.5 19.4 1.5 30l-21-0.2z m-43.4-191.4l19.5-9c4.6 8.7 8.6 17.7 12 26.9l-19.5 7.5c-4.6-7.4-7.6-16.3-12-25.4z m-58.4-94.2l16.5-13.5c6 7.5 12 15 18 23.9l-18 12c-5.1-7.8-10.6-15.3-16.5-22.4z m-212.7 755c-9 3-18 6-28.4 9l-6-20.9c9-3 18-4.5 26.9-7.5l7.5 19.4zM813.3 170l19.5-10.5c4.5 7.5 9 16.3 15 25.4l-19.5 10.5c-4.4-8.8-9.4-17.3-15-25.4zM73.4 733.8l12 12 7.5 9-15 15c-2.6-2.9-5.6-5.4-9-7.5l-6-6v-13.5l10.5-9z m672.5-649l-3-3 15-15 3 3 18 17.9-16.5 15c-5.1-6.3-10.6-12.3-16.5-17.9zM397 883.1V904c-10.5 0-19.5-1.5-30-1.5l1.5-20.9c9.6-0.2 19.1 0.3 28.5 1.5z m-56.9-6l-3 20.9c-10.1-1.3-20.1-3.3-30-6l6-20.9c8.8 2.8 17.9 4.8 27 6z m172.2 18c-10.5 1.5-19.5 3-30 4.5l-3-20.9c9-1.5 18-3 28.5-4.5l4.5 20.9z m-56.9 7.5c-9.9 1.2-19.9 1.7-30 1.5v-20.9c9.5 0.3 19-0.2 28.4-1.5l1.6 20.9z m-169.2-37.4l-6 20.9c-10.5-3-19.5-6-28.5-9l7.3-20.9 27.2 9z m-53.9-19.5l-9 19.4c-9-4.5-18-7.5-26.9-12l10.5-19.4c8.9 4.5 17.8 8.9 25.2 12h0.2zM135 790.4l-13.5 17.9-22.4-17.9 13.5-16.3c8 4.6 15.5 10.1 22.3 16.4l0.1-0.1z m47.9 30l-10.5 19.4c-9-4.5-16.5-10.5-25.5-15l12-17.9c7.4 4.4 14.9 8.9 23.8 13.4l0.2 0.1z m569-79.3l16.5 15-6 6-15 15-15-16.3c5.4-4.6 10.4-9.6 15-15l4.5-4.5v-0.2z m-28.4 53.8c-7.5 6-15 12-24 17.9l-12-17.9c7.5-6 15-10.5 22.4-16.3l13.6 16.3z m160.2-355.8l21 1.5c-0.3 10-1.2 20.1-3 30l-21-3c1.5-10.5 1.5-19.5 3-28.5z m-64.4 212.3l19.5 10.5c-4.5 9-10.5 16.3-15 25.4l-18-12c4.6-7.5 9-14.9 13.5-23.9z m-13.5 59.9l-18 22.4-16.5-13.5 18-22.4 16.5 13.5z m58.4-162.9l21 6c-3 10.5-6 19.4-9 28.4l-19.5-7.5c1.8-9.2 4.3-18.2 7.5-26.9z m-188.7 281c-8.2 5.5-16.7 10.5-25.5 15L639.5 825c7.5-4.5 16.5-10.5 24-15l12 19.4z m200.7-335l22.4 3c-1.3 10.1-3.3 20.1-6 30l-21-6 4.6-27z m-31.4 106.3l19.5 9c-4.5 9-7.5 17.9-12 26.9l-19.5-10.5c4.9-8 8.9-16.6 12-25.4zM624.6 857.8c-9 4.5-18 7.5-26.9 12l-7.5-19.4c8.9-3.1 17.4-7.1 25.5-12l8.9 19.4zM428.4 738.2h-10.6c-17.6 0-35.1-1.5-52.4-4.5l3-20.9c19.3 3 38.9 4.5 58.4 4.5 162.8-4.8 291.3-141.7 287.6-306.6-0.5-17.1-2.5-34.1-6-50.8l21-4.5c18.5 92.1-3.9 187.8-61.3 261.6-58.7 73.6-146.1 117.7-239.5 121.1l-0.2 0.1z m-5.9-617.5c-78.7-0.4-154.4 30.1-211.2 85.2-56.5 54.6-88.4 130.2-88.4 209.2-0.1 17 1.4 34.1 4.5 50.8l-21 3c-15.5-92.7 10.9-187.6 71.9-258.5 69.1-83 175.4-124.2 281.6-109.1l-3 22.4a248.3 248.3 0 0 0-34.4-3zM77.1 594.9l132.7-134.3 70.8 71.7L168 646.2l43.1 43.6c15.4 15.6 22.7 14.8 38.8-1.5l70.4-71.3c17.2-17.4 18.1-22.7 4.9-37.9l-22.1-24.2 18.1-11.7c6.5 7 17.4 19.4 23.3 26.6 19 22.2 17.6 33.5-5.8 57.2L259 707.6c-22.4 22.7-36.2 23.8-59 0.7l-84.9-85.9 14.7-14.8 24.4 24.7 98.3-99.5-43.1-43.6L91.1 609.1l-14-14.2zM390 561.8c24.4-58.4 27.3-101 11.2-131.9l-69.5 70.4-13.5-13.8 71.9-72.7c-0.4-0.4-0.5-0.9-0.9-1.3-3.1-3.5-16.5-17.4-31.1-32.7L317.4 421c4.9 13.6 8.9 27.5 12.1 41.6l-19.2 5.9a301.8 301.8 0 0 0-32.3-86.3l17-10.3c5.4 9.7 10.3 19.6 14.7 30l35.1-35.6-31-32.1 14.6-14.8s14.7 15.2 31 32.1l60.3-61 13.5 13.6-60.5 61.2c14.1 14.7 27.3 28 30.4 31.2 0.7 0.7 1.3 1.6 2 2.4l69.3-70.2 13.6 13.6-67.7 68.5c37.7 16.5 76.6 12.6 129.2-12.3l5.6 21.8c-39.8 21-86 25.8-129.2 13.2 11.6 44.6 6.6 92-13.9 133.2l-21.5-5-0.5 0.1z m171.7-344.9c-7.9-33.2-21.1-64.9-39.1-93.8l15.2-11.7c7.3 11.9 13.8 24.3 19.6 37l55.2-55.9 13.5 13.6-14.9 15c23.9 27.8 41 60.9 50.2 96.6 25.1 2.6 50.5 1.5 75.4-3.3l2.9 20.9c-24.7 4.5-50 5.4-75 2.9 1.9 26.1 0.4 52.4-4.7 78.1l-20.6-1.8c6.2-26 8.2-52.9 5.8-79.5-24.1-5.5-47-15.5-67.5-29.5l3.1 13.6-19.1-2.2zM524 306.8l1.4-17.9c12.5 0.2 27.2 0.4 42.5 0.9-3.9-13.2-9.1-26-15.6-38.1l16.5-7.9c7.7 14.8 13.7 30.5 17.9 46.7 18.1 0.7 35.7 2 48.7 3.1l-1.4 19.8-43.3-3.1c3.3 26.2 2.4 52.7-2.7 78.6l-19.4-2.4c5.9-25.3 7.1-51.4 3.4-77.1-17.2-1.1-34.4-2-48-2.6z m-72.6-105.7l8.1-17c11.4 3.1 25.5 7.5 36.8 11.5L489 211l39.3-39.8 13.6 13.8-82.8 83.7-13.6-13.6 41.7-42.1c-11.2-4-25-8.8-35.8-11.7v-0.2z m113.9-33.6l4.1 10.9c21.3 16.7 45.7 28.8 71.7 35.5-8.8-29.2-23.4-56.3-42.9-79.7l-32.9 33.3z m-63.6 151.6c-1.3-24.4-5.5-48.5-12.7-71.8l17.4-5.1c7 24.8 11.2 50.3 12.5 76l-17.2 0.9z m13.6-84.1l2.9-17.2c23.6 2.6 47.1 5.4 70.6 8.4l-2.7 18.3c-17.7-2.9-54.7-7.7-70.9-9.6h0.1z" p-id="9881" fill="#F5222D"></path></svg>
\ No newline at end of file
<svg height="200" fill="#1890ff" viewBox="0 0 1024 1024" width="200" xmlns="http://www.w3.org/2000/svg"><path d="m893.686 171.345h-763.374c-55.326 0-100.6 45.272-100.6 100.601v526.064c0 55.328 45.272 100.603 100.6 100.603h763.374c55.328 0 100.603-45.274 100.603-100.603v-526.064c-.001-55.329-45.275-100.601-100.603-100.601m37.723 626.663c0 9.968-3.954 19.404-11.13 26.587-7.185 7.185-16.629 11.137-26.594 11.137h-763.373c-9.965 0-19.41-3.952-26.592-11.137-7.177-7.183-11.13-16.619-11.13-26.587v-526.062c0-9.967 3.954-19.412 11.13-26.594 7.182-7.175 16.626-11.131 26.592-11.131h763.374c9.965 0 19.412 3.956 26.594 11.131 7.178 7.182 11.133 16.628 11.133 26.594v526.062z"/><path d="m815.983 326.708-295.53 221.65-295.529-221.65c-13.883-10.416-33.594-7.6-44.01 6.288-10.417 13.893-7.603 33.597 6.287 44.013l314.394 235.797c.007.008.02.014.025.019.69.516 1.399 1.002 2.126 1.457.016.013.04.026.066.037a30.93 30.93 0 0 0 1.949 1.124c.15.076.294.152.444.227.666.341 1.338.666 2.028.954.126.056.254.096.378.148a35.8 35.8 0 0 0 1.682.624c.293.104.587.192.886.288.415.127.835.245 1.255.354.299.079.593.164.895.234.637.144 1.277.271 1.927.387.294.045.582.082.876.119.454.065.904.118 1.355.161.275.023.551.056.828.071.666.045 1.324.071 1.99.079.043 0 .085.006.127.006h.055c.04 0 .085-.006.127-.006a35.323 35.323 0 0 0 1.985-.079c.275-.016.553-.048.828-.071.457-.043.906-.096 1.361-.161.293-.037.582-.074.875-.119.648-.11 1.291-.24 1.934-.387.293-.07.59-.155.883-.234.42-.109.846-.228 1.261-.359.294-.091.587-.18.88-.283.572-.19 1.135-.399 1.693-.629.118-.048.245-.088.367-.144.689-.288 1.361-.61 2.033-.954.15-.071.293-.147.443-.227.654-.35 1.301-.715 1.938-1.111l.085-.056a31.568 31.568 0 0 0 2.104-1.443.105.105 0 0 1 .037-.024l314.396-235.797c13.889-10.417 16.702-30.123 6.279-44.012-10.419-13.886-30.121-16.707-44.013-6.291"/></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1618468888381" class="icon" viewBox="0 0 1200 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1882" width="18.75" height="16" data-spm-anchor-id="a313x.7781069.0.i23" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M494.345 0C767.365 0 988.69 190.217 988.69 424.854v0.742a84.745 84.745 0 0 0-42.09-11.088 84.745 84.745 0 0 0-42.09 11.088v-0.707c0-186.191-181.284-341.98-410.165-341.98-228.917 0-410.2 155.789-410.2 341.945 0 88.135 40.36 171.502 112.64 235.096 18.608 16.349 28.813 39.901 28.071 64.3l-0.282 4.909-7.945 87.322 155.26-52.93a85.31 85.31 0 0 1 36.37-4.096l5.225 0.706c26.412 4.414 53.425 6.674 80.86 6.674 48.094 0 94.103-6.886 136.793-19.492l-0.07-1.235c0 32.132 18.537 59.957 45.62 73.728-56.39 19.314-117.936 29.907-182.342 29.907-32.486 0-64.23-2.718-94.95-7.838l-216.629 73.869a42.231 42.231 0 0 1-53.53-25.6 40.89 40.89 0 0 1-2.119-17.232l13.63-151.128C53.672 645.155 0 540.39 0 424.82 0 190.217 221.325 0 494.345 0z" fill="#1890ff" p-id="1883"></path><path d="M933.888 590.177c12.217 4.308 47.951 22.74 75.6 41.42 25.14 16.948 42.337 34.956 52.753 27.541 9.393-8.898-8.44-30.014-27.33-60.31-17.443-27.895-35.593-65.183-38.135-72.774-14.619-44.138-25.989-67.02-62.888-67.02s-66.807 30.014-66.807 67.02 31.85 51.906 66.807 64.123z" fill="#1890ff" p-id="1884"></path><path d="M819.377 733.643c3.954-12.676 21.256-49.752 38.947-78.495 16.03-26.13 33.192-44.138 25.812-54.73-8.793-9.535-28.99 9.18-58.121 29.165-26.836 18.397-62.747 37.747-70.091 40.466-42.62 15.82-64.689 27.895-64.053 65.89 0.635 37.923 30.367 68.148 66.313 67.513 35.981-0.636 49.893-33.686 61.193-69.809z" fill="#1890ff" p-id="1885"></path><path d="M1054.226 728.7c-4.167 12.605-22.105 49.363-40.254 77.788-16.49 25.847-33.933 43.538-26.73 54.272 8.616 9.675 29.131-8.686 58.615-28.142 27.118-17.902 63.347-36.617 70.762-39.195 42.867-15.042 65.148-26.765 65.148-64.723 0-37.924-29.167-68.714-65.148-68.714-36.017 0-50.494 32.803-62.393 68.714z" fill="#1890ff" p-id="1886"></path><path d="M924.213 866.692c-12.994-4.237-51.023-22.634-80.508-41.49-26.835-17.09-45.303-35.345-56.143-27.506-9.781 9.357 9.428 30.897 29.908 61.934 18.89 28.602 38.735 66.843 41.525 74.682 16.243 45.409 28.636 68.89 67.548 68.22 38.948-0.707 69.95-32.31 69.315-70.621-0.707-38.347-34.604-53.178-71.68-65.219z" fill="#1890ff" p-id="1887"></path></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1618468888381" class="icon" viewBox="0 0 1200 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1882" width="18.75" height="16" data-spm-anchor-id="a313x.7781069.0.i23" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M494.345 0C767.365 0 988.69 190.217 988.69 424.854v0.742a84.745 84.745 0 0 0-42.09-11.088 84.745 84.745 0 0 0-42.09 11.088v-0.707c0-186.191-181.284-341.98-410.165-341.98-228.917 0-410.2 155.789-410.2 341.945 0 88.135 40.36 171.502 112.64 235.096 18.608 16.349 28.813 39.901 28.071 64.3l-0.282 4.909-7.945 87.322 155.26-52.93a85.31 85.31 0 0 1 36.37-4.096l5.225 0.706c26.412 4.414 53.425 6.674 80.86 6.674 48.094 0 94.103-6.886 136.793-19.492l-0.07-1.235c0 32.132 18.537 59.957 45.62 73.728-56.39 19.314-117.936 29.907-182.342 29.907-32.486 0-64.23-2.718-94.95-7.838l-216.629 73.869a42.231 42.231 0 0 1-53.53-25.6 40.89 40.89 0 0 1-2.119-17.232l13.63-151.128C53.672 645.155 0 540.39 0 424.82 0 190.217 221.325 0 494.345 0z" fill="#606266" p-id="1883"></path><path d="M933.888 590.177c12.217 4.308 47.951 22.74 75.6 41.42 25.14 16.948 42.337 34.956 52.753 27.541 9.393-8.898-8.44-30.014-27.33-60.31-17.443-27.895-35.593-65.183-38.135-72.774-14.619-44.138-25.989-67.02-62.888-67.02s-66.807 30.014-66.807 67.02 31.85 51.906 66.807 64.123z" fill="#606266" p-id="1884"></path><path d="M819.377 733.643c3.954-12.676 21.256-49.752 38.947-78.495 16.03-26.13 33.192-44.138 25.812-54.73-8.793-9.535-28.99 9.18-58.121 29.165-26.836 18.397-62.747 37.747-70.091 40.466-42.62 15.82-64.689 27.895-64.053 65.89 0.635 37.923 30.367 68.148 66.313 67.513 35.981-0.636 49.893-33.686 61.193-69.809z" fill="#606266" p-id="1885"></path><path d="M1054.226 728.7c-4.167 12.605-22.105 49.363-40.254 77.788-16.49 25.847-33.933 43.538-26.73 54.272 8.616 9.675 29.131-8.686 58.615-28.142 27.118-17.902 63.347-36.617 70.762-39.195 42.867-15.042 65.148-26.765 65.148-64.723 0-37.924-29.167-68.714-65.148-68.714-36.017 0-50.494 32.803-62.393 68.714z" fill="#606266" p-id="1886"></path><path d="M924.213 866.692c-12.994-4.237-51.023-22.634-80.508-41.49-26.835-17.09-45.303-35.345-56.143-27.506-9.781 9.357 9.428 30.897 29.908 61.934 18.89 28.602 38.735 66.843 41.525 74.682 16.243 45.409 28.636 68.89 67.548 68.22 38.948-0.707 69.95-32.31 69.315-70.621-0.707-38.347-34.604-53.178-71.68-65.219z" fill="#606266" p-id="1887"></path></svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1618459213131" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1301" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M63.98 109.048v89.545h895.45v-89.545H63.98z m0 447.725h895.45v-89.546H63.98v89.546z m0 358.18h895.45v-89.546H63.98v89.545z" p-id="1302" fill="#606266"></path></svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1618459213131" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1301" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><defs><style type="text/css"></style></defs><path d="M63.98 109.048v89.545h895.45v-89.545H63.98z m0 447.725h895.45v-89.546H63.98v89.546z m0 358.18h895.45v-89.546H63.98v89.545z" p-id="1302" fill="#909399"></path></svg>
\ No newline at end of file
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" fill="#1890ff" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M903.9 916.4H123.4c-61.2 0-111.1-49.8-111.1-111.1V219.7c0-61.2 49.8-111.1 111.1-111.1h780.5c61.2 0 111.1 49.8 111.1 111.1v585.6c0 61.3-49.8 111.1-111.1 111.1zM123.4 169.2c-27.8 0-50.5 22.6-50.5 50.5v585.6c0 27.8 22.6 50.5 50.5 50.5h780.5c27.8 0 50.5-22.6 50.5-50.5V219.7c0-27.8-22.6-50.5-50.5-50.5H123.4z" /><path d="M327.1 591.6H213c-39 0-70.7-31.7-70.7-70.7V341.8c0-39 31.7-70.7 70.7-70.7h114.1c39 0 70.7 31.7 70.7 70.7v179.1c0 39-31.7 70.7-70.7 70.7zM213 331.7c-5.5 0-10.1 4.6-10.1 10.1v179.1c0 5.5 4.6 10.1 10.1 10.1h114.1c5.5 0 10.1-4.6 10.1-10.1V341.8c0-5.5-4.6-10.1-10.1-10.1H213z" /><path d="M172.6 723.7h649.7" /><path d="M822.3 754H172.6c-16.7 0-30.3-13.6-30.3-30.3s13.6-30.3 30.3-30.3h649.7c16.7 0 30.3 13.6 30.3 30.3S839 754 822.3 754z" /><path d="M562.4 528.8h259.9" /><path d="M822.3 559.1H562.4c-16.7 0-30.3-13.6-30.3-30.3s13.6-30.3 30.3-30.3h259.9c16.7 0 30.3 13.6 30.3 30.3s-13.6 30.3-30.3 30.3z" /><path d="M562.4 333.9h259.9" /><path d="M822.3 364.2H562.4c-16.7 0-30.3-13.6-30.3-30.3s13.6-30.3 30.3-30.3h259.9c16.7 0 30.3 13.6 30.3 30.3s-13.6 30.3-30.3 30.3z" /></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" fill="#1890ff" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M762.8 1024l-5.6-0.1c-125.5-6.4-290.5-119.2-442.2-301.8l-54-64.9C106.7 471.6 29.5 294.9 49.1 172.3 64.9 74 199.1 0 278.4 0c51.1 0 71.1 29.2 77.8 43.7 37.2 66.2 88.6 189 88.9 241l0.1 9-3.3 8.5c-12.4 32.6-39.7 48-57.8 58.2-16.4 9.2-18.8 11.3-19.5 15.6 2 6.6 15.2 40.1 94.8 137.8l41.1 49.3c80.8 94.9 110.8 113.2 116.4 116 5.1 0.5 7.7-1 21-15.5 13.9-15.2 34.9-38.1 70-43.2l8.7-1.2 8.4 1.8c51.6 10.8 164.6 85.7 223.9 135.2 21.5 15.3 38.4 48.3 23.1 96.5-22.3 69.7-114.9 171.3-209.2 171.3zM278.4 63.6c-54.1 0-156.8 58.7-166.4 118.7-16.3 101.4 59.6 267.8 197.9 434.2l54 64.9C502.4 848.1 654 954.9 759.4 960.3h3.6c59.6-0.2 132.3-77 148.3-127.2 5.4-16.9 2.3-24 0.6-25.3l-2.8-2.1c-61.2-51.3-159.1-112.5-194.6-122-10.6 2.4-18.4 10.4-29.7 22.8-15.9 17.3-37.7 41.1-78.9 35.3-11.5-1.6-41.9-5.9-154.1-137.8l-41.5-49.8C298.1 416.6 300 387 300.8 374.3c2.7-41.7 30-57 51.9-69.3 14.5-8.1 24-14 28.6-23.1-2.6-36-43.8-142-81.3-208.2l-1.6-3.1c-2.6-6.3-14.9-7-20-7z m339.4 615.9zM364.2 374.7z" /></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" fill="#1890ff" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M170.496 179.2h683.52v106.496h-683.52z" /><path d="M458.752 179.2h106.496v683.52h-106.496z" /></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" fill="#1890ff" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M691.198707 135.809293c121.069899 0 219.59499 91.010586 219.59499 203.733333 0 35.069414-10.016323 69.302303-28.387556 100.196849-27.552323 45.08703-71.801535 78.491152-125.240888 94.354101-14.197657 4.172283-25.051798 5.845333-35.069415 5.845333-23.378747 0-41.74998-18.368646-41.749979-41.748687s18.371232-41.751273 41.749979-41.751273c1.664 0 5.008808 0 9.182384-1.664 35.905939-10.025374 64.293495-30.895838 80.155152-58.455919 10.860606-17.533414 15.869414-36.732121 15.869414-56.775111 0-65.966545-60.956444-120.233374-135.267556-120.233374-25.885737 0-50.937535 6.681859-73.48105 19.198708-39.24299 22.552566-62.621737 60.121212-62.621738 101.035959v349.862788c0 70.963717-39.241697 136.092444-104.370424 172.833616-35.068121 20.04299-74.317576 30.060606-114.395798 30.060606C216.096323 892.302222 117.569939 801.286465 117.569939 688.571475c0-35.070707 10.017616-69.308768 28.388849-100.199435 27.549737-45.094788 71.808-78.491152 125.248646-94.352808 15.026424-4.173576 25.04404-5.84404 35.069414-5.84404 23.38004 0 41.742222 18.369939 41.742223 41.748687s-18.362182 41.74998-41.742223 41.74998c-1.671758 0-5.017859 0-9.190141 1.664-35.904646 10.854141-64.293495 31.734949-80.153859 58.448161-10.854141 17.536-15.862949 36.743758-15.862949 56.785455 0 65.956202 60.947394 120.230788 136.096323 120.230788 25.885737 0 50.937535-6.67798 73.481051-19.205172 39.241697-22.542222 62.621737-60.112162 62.621737-101.025616V339.542626c0-70.975354 39.241697-136.104081 104.370424-172.834909 34.231596-20.880808 73.481051-30.898424 113.559273-30.898424zM34.909091 512.466747" /></svg>
......@@ -461,3 +461,14 @@
vertical-align: middle;
margin: 0 10px;
}
.dm-qywx__item__wrap {
width: 760px;
padding: 11px 20px 18px;
border: 1px solid rgba(228,231,237,1);
border-radius:4px;
display: inline-block;
position: relative;
vertical-align: middle;
margin: 0 10px;
color: #303133;
}
<template>
<div class="dm-qywx__item__wrap">
<div class="fz16">{{ qywx.qywxEnterpriseName }}</div>
<div class="divider"></div>
<div>{{ item.title }}</div>
<div style="margin-top:12px;color:#606266;white-space:pre-wrap;word-break:break-word">{{ qywx.remark }}</div>
<p style="margin-top:12px">
<span>任务完成方式</span>
<el-checkbox v-if="qywx.telFlag" label="话务" :value="qywx.telFlag" :true-label="1" :false-label="0" disabled></el-checkbox>
<el-checkbox v-if="qywx.chatFlag" label="会话" :value="qywx.chatFlag" :true-label="1" :false-label="0" disabled></el-checkbox>
<el-checkbox v-if="qywx.smsFlag" label="短信" :value="qywx.smsFlag" :true-label="1" :false-label="0" disabled></el-checkbox>
</p>
</div>
</template>
<script>
export default {
name: 'item-qywx',
props: {
item: {
type: Object,
default() {
return {};
}
}
},
computed: {
qywx() {
return this.item.qywx || {};
}
}
};
</script>
<style lang="scss" scoped>
.divider {
margin-top: 12px;
margin-bottom: 18px;
height: 1px;
background-color: #dcdfe6;
}
/deep/ .el-checkbox {
margin: 0;
margin-right: 20px;
}
</style>
......@@ -52,7 +52,7 @@
{{ scope.row.storeMode === 0 ? '所有门店' : scope.row.storeMode === 1 ? '部分分组' : '部分门店' }}
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="false" :width="100" align="left" prop="couponStock" label="库存" :formatter="(row, col, val) => (showOutCouponIcon ? '--' : val)"></el-table-column>
<el-table-column :show-overflow-tooltip="false" :width="100" align="left" prop="couponStock" label="库存" :formatter="(row, col, val) => (showOutCouponIcon && (row.gicCouponType == 3 || row.gicCouponType == 4) ? '--' : val)"></el-table-column>
</el-table>
<dm-pagination v-show="tableList.length" class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="listParams.pageSize" layout="prev, pager, next" :total="total"></dm-pagination>
<span slot="footer" class="dialog-footer">
......
......@@ -24,7 +24,7 @@
<el-table-column :show-overflow-tooltip="false" :width="200" :min-width="200" align="left" prop="title" label="模板名称"></el-table-column>
<el-table-column :show-overflow-tooltip="false" :width="200" :min-width="200" align="left" prop="content" label="模板类型">
<template slot-scope="scope">
<p class="gray">{{ scope.row.type === 0 ? '普通短信' : scope.row.type === 1 ? '营销短信' : '验证码' }}</p>
<div>{{ scope.row.type === 0 ? '普通短信' : scope.row.type === 1 ? '营销短信' : '验证码' }}</div>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="false" :min-width="200" align="left" prop="content" label="模板内容">
......
<template>
<div class="material-item">
<img v-if="item.statusFlag === 0" class="invalid" src="../assets/img/invalid.svg" />
<el-button v-if="!readOnly" class="material-item__delete" type="text" @click="onDelete">删除</el-button>
<template v-if="item.type == 1">
<div class="text__title">{{ item.title }}</div>
<div class="text__content">{{ item.content }}</div>
</template>
<div class="webpage" v-else-if="item.type == 3">
<div style="flex:1;min-width:0;margin-right:10px">
<div class="webpage__title">{{ item.title }}</div>
<div class="webpage__content">{{ item.content }}</div>
</div>
<img :src="item.img" />
</div>
<template v-else-if="[2, 4].includes(item.type)">
<div class="media__title">{{ item.title }}</div>
<div class="media__content">
<div style="width:56px;position:relative;display:inline-block">
<img :src="item.img" />
<img v-if="item.type == 4" src="../assets/img/bofang.svg" style="height:20px;width:20px;position:absolute;top:18px;left:18px" />
</div>
</div>
</template>
<div class="file" v-else-if="item.type == 5">
<img style="width:36px;height:36px;margin-left:15px" :src="fileImg" />
<span class="file__title">{{ item.title }}</span>
</div>
</div>
</template>
<script>
const fileImg = require('../assets/img/file2.svg'); //eslint-disable-line
export default {
name: 'material-item',
props: {
item: Object,
readOnly: Boolean
},
data() {
return {
fileImg
};
},
methods: {
onDelete() {
this.$emit('delete', this.item.relation_id);
}
}
};
</script>
<style lang="scss" scoped>
.material-item {
position: relative;
box-sizing: border-box;
font-size: 12px;
font-weight: 400;
color: #303133;
line-height: 17px;
position: relative;
height: 100px;
width: 240px;
background-color: #f1f3f7;
padding: 10px;
&__delete {
position: absolute;
top: 10px;
right: 10px;
}
.text-center {
text-align: center;
}
.invalid {
height: 40px;
width: 40px;
position: absolute;
left: 0;
top: 0;
opacity: 0.4;
}
}
.text {
&__title {
max-width: 180px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
&__content {
margin-top: 4px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
}
.webpage {
margin-top: 20px;
display: flex;
align-items: center;
&__content {
margin-top: 10px;
}
&__title,
&__content {
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.media {
&__content,
&__title {
text-align: center;
max-width: 180px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
&__content {
margin-top: 4px;
position: relative;
}
}
.file {
margin-top: 30px;
display: flex;
align-items: center;
&__title {
margin-left: 24px;
flex: 1;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
img {
height: 56px;
width: 56px;
}
</style>
<template>
<div class="inline-block dm-marketing__opt">
<span v-for="(v, i) in options" :key="i" class="dm-marketing__opt__item" :class="{ 'is-disabled': v.disabled }" @click="addItem(v)">
<img :src="v.img" alt="" srcset="" /><span> {{ v.name }}</span>
<span v-for="(v, i) in options" :key="i" class="dm-marketing__opt__item" :class="{ 'is-disabled': v.disabled, item: !v.disabled }" @click="addItem(v)" @mouseenter="onHover(i, v)" @mouseleave="onLeave(i, v)">
<img :ref="`img-${i}`" :src="v.disabled ? v.disabledImg : v.img" alt="" srcset="" /><span> {{ v.name }}</span>
</span>
</div>
</template>
......@@ -21,6 +21,14 @@ export default {
addItem(item) {
if (item.disabled) return;
this.$emit('addItem', item);
},
onHover(i, v) {
if (v.disabled) return;
this.$refs[`img-${i}`] && this.$refs[`img-${i}`][0] && (this.$refs[`img-${i}`][0].src = v.hoverImg);
},
onLeave(i, v) {
if (v.disabled) return;
this.$refs[`img-${i}`] && this.$refs[`img-${i}`][0] && (this.$refs[`img-${i}`][0].src = v.img);
}
}
};
......@@ -34,4 +42,9 @@ export default {
}
cursor: not-allowed;
}
.item:hover {
span {
color: #1890ff !important;
}
}
</style>
<template>
<div class="funnel_wrap">
<div :id="nodeName"></div>
<div class="funnelDesc">
<p>
<span>{{ data[0].action }}</span>
<span class="num">{{ data[0].value }}</span>
</p>
<p>
<span class="per">{{ data[1].action }}</span>
<span class="num">{{ data[1].value }}</span>
<span class="rate">
<span>/</span>
<span>{{ data[1].rateAction }}</span>
<span class="rateNum">{{ data[1].rate }}</span>
</span>
</p>
<p>
<span class="per">{{ data[2].action }}</span>
<span class="num">{{ data[2].value }}</span>
<span class="rate">
<span>/</span>
<span>{{ data[2].rateAction }}</span>
<span class="rateNum">{{ data[2].rate }}</span>
</span>
</p>
</div>
</div>
</template>
<script>
import * as G2 from '@antv/g2';
export default {
name: 'funnel',
props: {
nodeName: String,
colorArr: Array,
data: {
type: Array,
default: () => []
}
},
mounted() {
this.funnel();
},
methods: {
funnel() {
var chart = new G2.Chart({
container: this.nodeName,
forceFit: true,
height: 144,
padding: [0, 0, 0]
});
chart.source(this.data);
chart.axis(false);
chart.legend(false);
chart.tooltip({
showTitle: false,
itemTpl: '<li data-index={index} style="display:flex;">' + '<span style="background-color:{color};margin-top:8px;" class="g2-tooltip-marker"></span>' + '<div><p>{name} {value}</p><p>{rateAction} {rate}</p></div>' + '</li>'
});
chart
.coord('rect')
.transpose()
.scale(1, -1);
chart
.intervalSymmetric()
.position('action*value')
.shape('funnel')
.color('action', this.colorArr)
.tooltip('action*value*rate*rateAction', function(action, value, rate, rateAction) {
return {
name: action,
rate: rate,
value: value,
rateAction: rateAction
};
});
chart.render();
}
}
};
</script>
<style scoped lang="scss">
.funnel_wrap {
display: flex;
#funnel1,
#funnel2,
#funnel3 {
width: 219px;
height: 144px;
}
.funnelDesc {
padding: 14px 0 13px 10px;
p {
display: flex;
align-items: center;
height: 20px;
line-height: 20px;
&:nth-child(1) {
// margin: 0 0 23px 15px;
margin-bottom: 23px;
// margin-left: 15px;
}
&:nth-child(2) {
// margin: 0 0 33px -14px;
margin-bottom: 33px;
// margin-left: -14px;
}
&:nth-child(3) {
// margin: 0 0 0 -44px;
}
}
span {
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #303133;
white-space: nowrap;
}
.rate {
height: 22px;
display: inline-block;
display: flex;
justify-content: space-between;
span:nth-child(2) {
margin: 0 8px;
}
}
.num {
font-size: 18px;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #303133;
line-height: 21px;
margin: 0 8px 0 15px;
}
.rateNum {
font-size: 18px;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
}
}
}
</style>
<template>
<div class="content">
<div class="top" v-if="!isCluePage">
<div class="left">计划:{{ $route.query.name }}</div>
<div class="right" v-if="isRepeat">批次合计:{{ batchNum }} / 最新批次时间:{{ batchTimes }}</div>
</div>
<div class="middle" v-for="(item, index) in data" :key="index">
<template v-if="item.isSales == 1">
<div class="left" v-if="isReference && !isCluePage">
<img :src="require('@/assets/img/experimentIcon.png')" class="icon" />
<span class="title">实验组</span>
<span>-计划触达</span>
</div>
</template>
<template v-else>
<div class="left" v-if="isReference && !isCluePage">
<img :src="require('@/assets/img/referenceIcon.png')" class="icon" />
<span class="title">参照组</span>
<span>-计划非触达</span>
</div>
</template>
<!--非线索页列表-->
<div class="right" :class="[isCluePage ? 'cluePage' : '']" ref="right">
<div v-if="!isCluePage">
<p>计划人次</p>
<p>{{ item.planMbrTimes ? item.planMbrTimes.toLocaleString() : 0 }}</p>
</div>
<div>
<p>{{ isCluePage ? '计划触达人数' : '计划人数' }}</p>
<p>{{ item.planMbrNum ? item.planMbrNum.toLocaleString() : 0 }}</p>
</div>
<div v-if="isCluePage && item.flag" class="taskRate">
<p>
任务完成率<span>(任务总数 {{ item.taskCnt ? item.taskCnt.toLocaleString() : 0 }})</span>
</p>
<p>{{ item.taskRate ? item.taskRate.toFixed(2) + '%' : '0.00%' }}</p>
</div>
<div v-if="isCluePage || item.isSales == 1" class="touchMbr">
<p>
触达人数<span>(触达率 {{ item.touchRate ? item.touchRate + '%' : '0.00%' }})</span>
</p>
<p>{{ item.touchMbrNum ? item.touchMbrNum.toLocaleString() : 0 }}</p>
</div>
<div v-else class="touchMbr touchMbr2">- -</div>
<div class="convMbr">
<p>
转化人数<span :class="{ active: isReference && item.isSales == 1 && data[0].transformRate < data[1].transformRate }">(转化率 {{ item.transformRate ? item.transformRate + '%' : '0.00%' }})</span>
</p>
<p>{{ item.convMbrNum ? item.convMbrNum.toLocaleString() : 0 }}</p>
</div>
<div>
<p>转化订单数</p>
<p>{{ item.convOrderCnt ? item.convOrderCnt.toLocaleString() : 0 }}</p>
</div>
<div>
<p>转化收益</p>
<p>{{ convSalesAmt(item.convSalesAmt) }}</p>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'market-list',
props: {
// 是否是线索页面
isCluePage: {
type: Boolean,
default: false
},
// 是否重复营销
isRepeat: {
type: Boolean,
default: true
},
// 是否勾选参照组
isReference: {
type: Boolean,
default: true
},
// 数据
data: {
type: Array,
default: () => []
},
batchTimes: String,
batchNum: Number | String
},
computed: {
convSalesAmt(num) {
return num => {
if (num) {
num = parseFloat(num).toFixed(2);
let i = num.indexOf('.');
let before = parseInt(num.slice(0, i)).toLocaleString();
let last = num.slice(i);
return before + last;
} else {
return '0.00';
}
};
}
}
};
</script>
<style lang="scss" scoped>
.content {
font-family: PingFangSC-Medium, PingFang SC;
margin-left: 8px;
margin-right: 13px;
.top {
color: #303133;
height: 50px;
background: #f5f7fa;
border-radius: 6px;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 5px;
margin-top: 10px;
.left {
font-size: 16px;
font-weight: 600;
line-height: 22px;
padding-left: 27px;
}
.right {
font-family: PingFangSC-Regular, PingFang SC;
font-size: 14px;
font-weight: 400;
line-height: 20px;
padding-right: 16px;
}
}
.middle {
margin-bottom: 4px;
height: 100px;
background: #f0f5ff;
border-radius: 6px;
display: flex;
align-items: center;
.left {
width: 226px;
height: 55px;
box-sizing: border-box;
display: flex;
align-items: center;
padding: 0 35px 0 25px;
border-right: 1px solid#E4E7ED;
span {
font-size: 14px;
font-weight: 400;
color: #606266;
line-height: 20px;
white-space: nowrap;
}
.title {
font-weight: 600;
color: #303133;
margin-right: 4px;
}
.icon {
width: 40px;
height: 40px;
border-radius: 4px;
margin-right: 15px;
}
}
.right {
padding: 0 28px 0 32px;
height: 58px;
flex: 1;
display: flex;
justify-content: space-between;
div {
flex: 1;
p {
&:nth-child(1) {
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #606266;
line-height: 20px;
padding-top: 4px;
margin-bottom: 6px;
}
&:nth-child(2) {
font-size: 24px;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #303133;
line-height: 28px;
}
.active {
color: #f5222d;
margin-left: 4px;
}
}
}
.touchMbr2 {
align-items: center;
padding-top: 19px;
}
.convMbr,
.touchMbr,
.taskRate {
flex: 1.3;
}
}
.cluePage {
padding-left: 65px;
}
&:nth-of-type(3) {
background: #f5f7fa;
margin-bottom: 7px;
.left {
padding-right: 21px;
}
}
}
}
</style>
<template>
<div class="draw">
<div id="draw_g2" v-if="!isNone"></div>
<div class="none" v-else>
<img :src="require('@/assets/img/chart-no-data.png')" alt="" />
<p>暂无数据</p>
</div>
</div>
</template>
<script>
import * as G2 from '@antv/g2';
import { ecmTouchEffectColumnDiagram, ecmGuideCluesColumnDiagram, ecmHeadCluesColumnDiagram } from '@/service/api/ecmApi.js';
export default {
name: 'touch-charts',
props: {
type: String // 0是触达效果 1导购线索 2后台线索
},
data() {
return {
chartData: [],
isNone: false
};
},
mounted() {
this.getChartData();
},
methods: {
draw() {
this.chartData = this.formatterData(this.chartData);
let valueArr = this.chartData.filter(item => item.value >= 0);
let rateArr = this.chartData.filter(item => item.rate >= 0);
let valueFlag = valueArr.every(item => item.value == 0); // value是否出现全为0的情况
let rateFlag = rateArr.every(item => item.rate == 0); // rate是否出现全为0的情况
const chart = new G2.Chart({
container: 'draw_g2',
forceFit: true,
height: 376,
padding: [55, 90, 46, 68]
});
chart.source(this.chartData);
chart.tooltip({
showMarkers: false,
shared: true
});
chart.legend({
position: 'top',
offsetY: -20
});
chart.axis('value', {
grid: {
type: 'line',
lineStyle: {
stroke: '#d9d9d9',
lineWidth: 1,
lineDash: [-1, -1]
}
}
});
chart.scale({
date: {
dataKey: 'date',
type: 'cat'
},
value: {
min: 0,
ticks: valueFlag ? [0, 2, 4, 6, 8] : '',
tickCount: 5
},
rate: {
min: 0,
ticks: rateFlag ? [0, 2, 4, 6, 8] : '',
tickCount: 5
}
});
chart.axis('rate', {
label: {
formatter: text => {
let num = Number(text);
if (num > 10000) {
return num / 10000 + '万';
}
return num + '元';
}
},
grid: null
});
chart.axis('value', {
label: {
formatter: text => {
let num = Number(text);
if (num >= 10000) {
return num / 10000 + '万';
}
return num;
}
}
});
chart
.interval()
.position('date*value')
.color('name', ['rgba(91, 143, 249, 0.85)', 'rgba(90, 216, 166, 0.85)', '#FF9F40'])
.adjust([
{
type: 'dodge',
marginRatio: 0.1
}
]); // eslint-disable-next-line
chart
.line()
.position('date*rate')
.color('name', ['#FF9F40']);
chart.render();
},
getChartData() {
let meth;
if (this.type == 0) meth = ecmTouchEffectColumnDiagram;
else if (this.type == 1) meth = ecmGuideCluesColumnDiagram;
else meth = ecmHeadCluesColumnDiagram;
meth({ ecmPlanId: this.$route.query.id || this.$route.params.id }).then(res => {
if (!res.result || !res.result.length) {
// 没数据的情况
this.isNone = true;
} else {
this.chartData = res.result.map(item => {
if (item.name == '线索转化收益') {
item.rate = item.vaule ? parseFloat(item.vaule) : 0;
delete item.vaule;
} else {
item.value = item.vaule ? parseFloat(item.vaule) : 0;
delete item.vaule;
}
return item;
});
this.draw();
}
});
},
allDate() {
let arr = [];
let date = new Date().getTime();
let oneDay = 86400000;
for (let i = 1; i <= 15; i++) {
let year = new Date(date - oneDay * i).getFullYear();
let month = String(new Date(date - oneDay * i).getMonth() + 1).padStart('2', '0');
let day = String(new Date(date - oneDay * i).getDate()).padStart('2', '0');
let item = year + '-' + month + '-' + day;
let obj = [
{ date: item, value: 0, name: '触达人数' },
{ date: item, value: 0, name: '转化人数' },
{ date: item, rate: 0, name: '线索转化收益' }
];
arr.unshift(...obj);
}
return arr;
},
formatterData(chartData) {
let dateArr = this.allDate();
chartData.forEach(item => {
dateArr.forEach(el => {
if (item.date == el.date && item.name == el.name) {
if (el.name == '线索转化收益') el.rate = item.rate;
else el.value = item.value;
}
});
});
return dateArr;
}
}
};
</script>
<style lang="scss" scoped>
.draw {
.title {
padding-left: 12px;
font-size: 16px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 700;
color: #303133;
line-height: 22px;
margin-bottom: 36px;
}
#draw_g2 {
height: 376px;
margin: 0 auto;
position: relative;
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0, 0, 0, 0.45);
line-height: 17px;
&::before {
content: '人数';
position: absolute;
top: 10px;
left: 41px;
}
&::after {
content: '金额';
position: absolute;
top: 10px;
right: 57px;
}
}
.none {
text-align: center;
p {
color: #c0c4cc;
font-size: 14px;
padding-bottom: 20px;
}
}
}
</style>
......@@ -21,7 +21,7 @@
<span class="right-tips">{{ i > 2 ? '自定义' : '模板' }}</span>
</li>
</ul>
<dm-upload-img icon="el-icon-upload" @backImg="backImgBg" class="uplaod" :tipsStyle="{ position: 'absolute', top: '-30px', width: '100%', left: '0px' }" :showImg="false" :model.sync="form.bgImg" width="auto" label="上传本地图片" tips=" 背景图片大小不超过1M,尺寸750*1206px"></dm-upload-img>
<dm-upload-img icon="el-icon-upload" @backImg="backImgBg" class="uplaod" :tipsStyle="{ position: 'absolute', top: '-30px', width: '100%', left: '0px' }" :showImg="false" :model.sync="form.bgImg" width="auto" label="上传本地图片" tips=" 背景图片大小不超过1M,尺寸750*1448px"></dm-upload-img>
</div>
</el-form-item>
<el-form-item label="游戏按钮" class="clearfix">
......
This source diff could not be displayed because it is too large. You can view the blob instead.
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