Commit 9b390549 by 黑潮

Merge branch 'feature/10月迭代'

parents 18690f7d 359a7907
<template>
<div>
<el-input style="width:180px;" v-model="query.searchParam" prefix-icon="el-icon-search" placeholder="请输入游戏名称" @change="onSearch" clearable></el-input>
<el-table style="margin-top:20px" :data="list" @row-click="onRowClick">
<el-table-column width="50px">
<template slot-scope="scope">
<el-radio :value="seletedId" :label="scope.row.gameId">&nbsp;</el-radio>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip label="游戏名称" prop="gameName"></el-table-column>
<el-table-column show-overflow-tooltip label="游戏ID" prop="gameId"></el-table-column>
<el-table-column label="游戏状态">
<template slot-scope="scope">
<template v-if="'gameStatusName' in scope.row">
<div v-if="scope.row.gameStatusName === '进行中'"><span class="dm-status--primary--flash"></span>{{ scope.row.gameStatusName }}</div>
<div v-else :class="scope.row.gameStatusName === '未开始' ? 'dm-status--warning' : 'dm-status--info'">{{ scope.row.gameStatusName }}</div>
</template>
<template v-else-if="'activityStatus' in scope.row">
<div v-if="scope.row.activityStatus === 1"><span class="dm-status--primary--flash"></span>进行中</div>
<div v-else :class="scope.row.activityStatus === 0 ? 'dm-status--warning' : 'dm-status--info'">
{{ scope.row.activityStatus === 0 ? '未开始' : '已结束' }}
</div>
</template>
</template>
</el-table-column>
<el-table-column label="开始时间">
<template slot-scope="scope">
<p style="line-height: 18px;">{{ formatDateTimeByType(scope.row.gameStartTime, 'yyyy-MM-dd') }}</p>
<p style="line-height: 18px;">{{ formatDateTimeByType(scope.row.gameStartTime, 'HH:mm:ss') }}</p>
</template>
</el-table-column>
<el-table-column label="结束时间">
<template slot-scope="scope">
<p style="line-height: 18px;">{{ formatDateTimeByType(scope.row.gameEndTime, 'yyyy-MM-dd') }}</p>
<p style="line-height: 18px;">{{ formatDateTimeByType(scope.row.gameEndTime, 'HH:mm:ss') }}</p>
</template>
</el-table-column>
</el-table>
<el-pagination style="margin-top:10px;text-align:right" small layout="prev, pager, next" :current-page="query.currentPage" :page-size="query.pageSize" :total="total" @current-change="onPageChange"> </el-pagination>
</div>
</template>
<script>
import qs from 'qs';
import { formatDateTimeByType } from '@/utils/index.js';
export default {
name: 'GamelinkList',
props: {
gameType: {
required: true,
type: String
},
gameId: {
type: String
}
},
data() {
return {
formatDateTimeByType,
list: [],
query: {
requestProject: 'gic-web',
searchParam: '',
currentPage: 1,
pageSize: 8,
gameStatus: 4
},
seletedItem: null,
seletedId: '',
total: 0
};
},
created() {
this.seletedId = this.gameId || '';
},
methods: {
onPageChange(val) {
this.query.currentPage = val;
this.getList(this.gameType);
this.seletedItem = null;
this.seletedId = '';
},
onRowClick(row) {
this.seletedItem = row;
this.seletedId = row.gameId;
},
onSearch() {
this.query.currentPage = 1;
this.seletedItem = null;
this.seletedId = '';
this.getList(this.gameType);
},
getList(gameType) {
const setResponse = (res, type) => {
//type 0 大转盘/刮刮卡 ----- 1 其他游戏
const { errorCode, message, result } = res.data || {};
if (errorCode != 0) {
return this.$message.error(message);
} else {
if (type === 0) {
this.list = result.page.result || [];
this.total = result.page.totalCount || 0;
} else {
this.list = (result.result || []).map(item => ({ ...item, gameId: item.gameActivityId }));
this.total = result.totalCount || 0;
}
}
};
switch (gameType) {
case 'GAME_LINK_DZP':
this.axios.post(`/api-marketing/page-lottery-game`, qs.stringify({ ...this.query, gameType: 1 })).then(res => {
setResponse(res, 0);
});
break;
case 'GAME_LINK_GGK':
this.axios.post(`/api-marketing/page-lottery-game`, qs.stringify({ ...this.query, gameType: 2 })).then(res => {
setResponse(res, 0);
});
break;
case 'GAME_LINK_PTYX':
this.axios.post(`/api-marketing/page-puzzle-game`, qs.stringify({ ...this.query })).then(res => {
setResponse(res, 1);
});
break;
case 'GAME_LINK_ZNM':
this.axios.post(`/api-marketing/page-znm-game`, qs.stringify({ ...this.query })).then(res => {
setResponse(res, 1);
});
break;
case 'GAME_LINK_KLFL':
this.axios.post(`/api-marketing/page-klfl-game`, qs.stringify({ ...this.query })).then(res => {
setResponse(res, 1);
});
break;
}
}
},
watch: {
gameType: {
handler() {
this.query.currentPage = 1;
this.query.searchParam = '';
this.getList(this.gameType);
},
immediate: true
},
gameId() {
this.seletedId = this.gameId || '';
},
seletedItem(val) {
this.$emit('select', val);
}
}
};
</script>
......@@ -2,8 +2,8 @@
<!-- 链接小工具 -->
<div class="link-tools-contain">
<div :class="activeName ? 'min-780' : 'min-1028'">
<div class="el-dialog">
<div class="el-dialog__body">
<div class="dm-dialog">
<div class="dm-dialog__body">
<!-- 链接类型 -->
<div class="links-types">
<label class="types-title">链接类型</label>
......@@ -28,6 +28,31 @@
</el-select>
</div>
</div>
<div style="margin: 20px 0 0 10px;" v-if="twoLevelValue == 'GAME_LINK' && threeLevelValue">
<div class="game-wrapper">
<div v-if="gameProps.showGameInfo" class="game-info">
<div class="game-info__title">
{{ gameInfo.title }}
<div style="float:right;color:#2B2B2B;font-size:14px">
<div v-if="gameInfo.gameStatus === '进行中'"><span class="dm-status--primary--flash"></span>{{ gameInfo.gameStatus }}</div>
<div v-else-if="gameInfo.gameStatus === '已删除'"><span class="dm-status--error"></span>{{ gameInfo.gameStatus }}</div>
<div v-else :class="gameInfo.gameStatus === '未开始' ? 'dm-status--warning' : 'dm-status--info'">{{ gameInfo.gameStatus }}</div>
</div>
</div>
<div class="game-info__other">
{{ gameInfo.id }}
</div>
<div v-if="gameInfo.gameStartTime || gameInfo.gameEndTime" class="game-info__other">{{ formatDateTimeByType(gameInfo.gameStartTime, 'yyyy-MM-dd HH:mm:ss') }}{{ formatDateTimeByType(gameInfo.gameEndTime, 'yyyy-MM-dd HH:mm:ss') }}</div>
</div>
<div v-else class="button-add-game" @click="gameProps.gameListVisible = true">
<i class="el-icon-plus"></i>
选择游戏-{{ threeLevelOptions.find(el => el.id == threeLevelValue).label }}
</div>
</div>
<el-tooltip v-if="gameProps.showGameInfo" effect="dark" content="删除" placement="top-start">
<i class="iconfont icon-shanchu" style="vertical-align:middle;font-size:24px;color:#909399;cursor:pointer" @click="(gameInfo = null), (gameProps.showGameInfo = false)"></i>
</el-tooltip>
</div>
<!-- h5 -->
<div class="h5link-contain" v-if="h5linkVisible">
......@@ -101,6 +126,12 @@
</div>
</div>
</div>
<el-dialog title="游戏列表" :close-on-click-modal="false" :visible.sync="gameProps.gameListVisible">
<game-list v-if="gameProps.gameListVisible" ref="gameList" :game-type="gameProps.gameType"></game-list>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="onSelectGame">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
......@@ -112,6 +143,29 @@ import Treeselect from '@riophae/vue-treeselect';
// import axios from 'axios'
import qs from 'qs';
import { formatDateTimeByType } from '@/utils/index.js';
import GameList from '../game-list.vue';
import { generateMiniProgramLink } from '@/service/api/gameApi.js';
const getgameStatus = val => {
console.log(val);
let text = '已结束';
switch (val) {
case 1:
text = '进行中';
break;
case 0:
text = '未开始';
break;
default:
text = '已结束';
break;
}
return text;
};
export default {
name: 'links',
props: ['linkToolsVisible', 'showType', 'projectName', 'activeName'],
......@@ -317,7 +371,14 @@ export default {
timeSwitch: 0
},
// 获取 location origin
baseUrl: ''
baseUrl: '',
gameProps: {
gameListVisible: false,
gameType: '',
showGameInfo: false
},
gameInfo: null,
formatDateTimeByType
};
},
beforeMount() {
......@@ -331,6 +392,37 @@ export default {
}
},
methods: {
changeGame(val) {
this.gameInfo = null;
this.gameProps.showGameInfo = false;
this.gameProps.gameType = val;
},
onSelectGame() {
if (this.$refs.gameList && this.$refs.gameList.seletedItem) {
const gameItem = this.$refs.gameList.seletedItem;
generateMiniProgramLink({ id: gameItem.gameId || gameItem.gameActivityId, linkId: this.gameProps.gameType }).then(res => {
this.gameProps.showGameInfo = true;
this.gameProps.gameListVisible = false;
this.gameInfo = {
title: gameItem.gameName,
id: gameItem.gameId || gameItem.gameActivityId,
gameStartTime: gameItem.gameStartTime,
gameEndTime: gameItem.gameEndTime,
gameStatus: 'gameStatusName' in gameItem ? gameItem.gameStatusName : getgameStatus(gameItem.activityStatus)
};
this.selectLinkObj.id = this.gameProps.gameType;
this.selectLinkObj.url = res.result.link;
this.selectLinkObj.name = gameItem.gameName;
console.log(this.selectLinkObj);
this.$emit('linkSelect', this.selectLinkObj);
});
} else {
this.$message.warning('请添加游戏');
}
},
// --------------------------------------------------
// 选择类型改变 (一级选择,保存选择类型)
linksTypeChange: function(e) {
......@@ -426,6 +518,7 @@ export default {
return;
}
let selectTwoItem = '';
console.log(this.twoLevelOptions);
that.twoLevelOptions.forEach(function(ele, index) {
if (e == ele.linkId) {
selectTwoItem = ele;
......@@ -439,6 +532,7 @@ export default {
console.log('二级选择的 obj: ', that.selectLinkObj.id);
// 判断是否结束, 1:结束;
console.log(selectTwoItem);
if (selectTwoItem.type == 1 || selectTwoItem.type == 4 || selectTwoItem.type == 6) {
that.threeLevelVisible = false; // 三级部分隐藏
that.threeLevelValue = ''; // 清空三级数据
......@@ -490,7 +584,7 @@ export default {
return false;
}
// 获取三级列表数据
that.getLinksList(selectTwoItem.linkId, 3, twoType);
that.getLinksList(selectTwoItem.linkId, 3, twoType, selectTwoItem.childList);
}
},
......@@ -504,6 +598,11 @@ export default {
that.threeLevelTreeVisible = false; // 三级中第二个下拉树形结构
that.threeLevelSearchVisible = false; // 三级中第三个搜索下拉
break;
case 5: // 单选
that.threeLeveloneVisible = true; // 三级中第一个下拉单选
that.threeLevelTreeVisible = false; // 三级中第二个下拉树形结构
that.threeLevelSearchVisible = false; // 三级中第三个搜索下拉
break;
case 2: // 搜索下拉
that.threeLeveloneVisible = false; // 三级中第一个下拉单选
that.threeLevelTreeVisible = false; // 三级中第二个下拉树形结构
......@@ -658,6 +757,12 @@ export default {
// threeSingleValueChange
threeSingleValueChange(e) {
if (this.twoLevelValue == 'GAME_LINK') {
this.gameInfo = null;
this.gameProps.gameType = e;
this.gameProps.showGameInfo = false;
return;
}
let that = this;
console.log(e, that.threeLevelValue);
let selThreeItem = '';
......@@ -1120,7 +1225,16 @@ export default {
},
// 获取一级列表/二级列表
getLinksList(parentId, num, twoType) {
getLinksList(parentId, num, twoType, childList) {
if (childList && childList.length > 0) {
childList.forEach(function(ele, index) {
ele.id = ele.tagid;
ele.label = ele.tagname;
ele.value = ele.tagid;
});
this.threeLevelOptions = childList;
return;
}
let that = this;
// 如果不传传的显示类型,设置
twoType = twoType ? twoType : '';
......@@ -1297,7 +1411,8 @@ export default {
},
components: {
Treeselect
Treeselect,
GameList
}
};
</script>
......@@ -2218,7 +2333,7 @@ export default {
overflow: auto;
}
.el-dialog__body {
.dm-dialog__body {
/*border-bottom: 1px solid #e7e7eb;*/
padding: 0px 20px 0 20px;
-webkit-box-sizing: border-box;
......@@ -2226,7 +2341,7 @@ export default {
box-sizing: border-box;
}
.el-dialog__footer {
.dm-dialog__footer {
padding: 10px 20px;
}
......@@ -2246,7 +2361,7 @@ export default {
}
}
.el-dialog {
.dm-dialog {
/*min-width: 1051px;*/
margin: 0;
// border: 1px solid #e8e8e8;
......@@ -2255,19 +2370,19 @@ export default {
-moz-box-sizing: border-box;
box-sizing: border-box;
.el-dialog__header {
.dm-dialog__header {
border-bottom: 1px solid #e7e7eb;
}
}
.min-780 {
.el-dialog {
.dm-dialog {
min-width: 780px;
}
}
.min-1028 {
.el-dialog {
.dm-dialog {
min-width: 1028px;
}
}
......@@ -2397,4 +2512,42 @@ export default {
margin-bottom: 0;
}
}
.game-wrapper {
display: inline-block;
vertical-align: middle;
background-color: #f7f9fb;
overflow: hidden;
width: 680px;
}
.button-add-game {
cursor: pointer;
height: 32px;
line-height: 32px;
text-align: center;
margin: 20px 50px;
border: 1px dashed #dcdfe6;
border-radius: 4px;
font-size: 14px;
color: #606266;
&:hover {
border-color: #1890ff;
color: #1890ff;
}
}
.game-info {
margin: 14px 28px 16px 20px;
line-height: 1.4;
&__title {
color: #303133;
font-size: 16px;
}
&__other {
margin-top: 5px;
color: #909399;
font-size: 12px;
}
}
.icon-shanchu:hover {
color: #1890ff !important;
}
</style>
......@@ -17,7 +17,7 @@ export default {
},
{
path: 'record',
name: '充值记录',
name: '记录',
component: () => import(/* webpackChunkName: "recharge" */ '../../views/recharge/record.vue')
},
{
......
......@@ -6,7 +6,7 @@
<div style="max-width: 300px" slot="content">{{ item.gicCouponType | getTipText }}</div>
<span class="card-item_head-tip">外部券<i class="iconfont icon-xinxixianshi card-item_head-icon"></i></span>
</el-tooltip>
<h4>{{ item.cardName }}</h4>
<h4 style="text-overflow: ellipsis;white-space: nowrap;overflow: hidden;padding: 0 20px;">{{ item.cardName }}</h4>
<p>{{ item.subName }}</p>
</div>
<div class="card-item_body">
......
......@@ -79,7 +79,7 @@
<span v-html="filterCardStatus(scope.row)"></span>
</template>
</el-table-column>
<el-table-column min-width="80" align="left" prop="receiveName" label="投放来源"></el-table-column>
<el-table-column min-width="80" align="left" prop="receiveName" label="投放渠道"></el-table-column>
<el-table-column width="100" align="left" prop="receiveName" label="来源明细">
<template slot-scope="scope">
{{ scope.row.receiveCode == 'RECEIVE_003' || scope.row.receiveCode == 'RECEIVE_005' || scope.row.receiveCode == 'RECEIVE_007' || scope.row.receiveCode == 'RECEIVE_004' || scope.row.receiveCode == 'RECEIVE_010' ? scope.row.receiveTypeExcel : '--' }}
......
......@@ -88,7 +88,7 @@
<el-table-column label="操作" align="left" width="200" fixed="right">
<template slot-scope="scope">
<!-- <template v-if="scope.row.canEdit !== false"> -->
<el-button type="text" v-if="scope.row.canEdit && scope.row.onlineStatus != 2" @click="editData(scope.row)">编辑</el-button>
<el-button type="text" v-if="scope.row.canEdit && scope.row.onlineStatus != 2 && scope.row.effectType != 2" @click="editData(scope.row)">编辑</el-button>
<el-button type="text" v-else @click="$router.push(`/ecm/info/${scope.row.ecmPlanId}`)">详情</el-button>
<!-- </template> -->
<!-- <dm-delete v-if="scope.row.effectType !== 2 && scope.row.onlineStatus === 1 && scope.row.canEdit !== false" @confirm="offlineEcmPlan(scope.row)" tips="是否下线该计划?">
......
<template>
<div>
<el-input style="width:180px;" v-model="query.searchParam" prefix-icon="el-icon-search" placeholder="请输入游戏名称" @change="onSearch" clearable></el-input>
<el-table style="margin-top:20px" :data="list" @row-click="onRowClick">
<el-table-column width="50px">
<template slot-scope="scope">
<el-radio :value="seletedId" :label="scope.row.gameId">&nbsp;</el-radio>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip label="游戏名称" prop="gameName"></el-table-column>
<el-table-column show-overflow-tooltip label="游戏ID" prop="gameId"></el-table-column>
<el-table-column label="游戏状态">
<template slot-scope="scope">
<template v-if="'gameStatusName' in scope.row">
<div v-if="scope.row.gameStatusName === '进行中'"><span class="dm-status--primary--flash"></span>{{ scope.row.gameStatusName }}</div>
<div v-else :class="scope.row.gameStatusName === '未开始' ? 'dm-status--warning' : 'dm-status--info'">{{ scope.row.gameStatusName }}</div>
</template>
<template v-else-if="'activityStatus' in scope.row">
<div v-if="scope.row.activityStatus === 1"><span class="dm-status--primary--flash"></span>进行中</div>
<div v-else :class="scope.row.activityStatus === 0 ? 'dm-status--warning' : 'dm-status--info'">
{{ scope.row.activityStatus === 0 ? '未开始' : '已结束' }}
</div>
</template>
</template>
</el-table-column>
<el-table-column label="开始时间">
<template slot-scope="scope">
<p>{{ formatDateTimeByType(scope.row.gameStartTime, 'yyyy-MM-dd') }}</p>
<p>{{ formatDateTimeByType(scope.row.gameStartTime, 'HH:mm:ss') }}</p>
</template>
</el-table-column>
<el-table-column label="结束时间">
<template slot-scope="scope">
<p>{{ formatDateTimeByType(scope.row.gameEndTime, 'yyyy-MM-dd') }}</p>
<p>{{ formatDateTimeByType(scope.row.gameEndTime, 'HH:mm:ss') }}</p>
</template>
</el-table-column>
</el-table>
<el-pagination style="margin-top:10px;text-align:right" small layout="prev, pager, next" :current-page="query.currentPage" :page-size="query.pageSize" :total="total" @current-change="onPageChange"> </el-pagination>
</div>
</template>
<script>
import qs from 'qs';
import { formatDateTimeByType } from '@/utils/index.js';
export default {
name: 'GamelinkList',
props: {
gameType: {
required: true,
type: String
},
gameId: {
type: String
}
},
data() {
return {
formatDateTimeByType,
list: [],
query: {
requestProject: 'gic-web',
searchParam: '',
currentPage: 1,
pageSize: 8,
gameStatus: 4
},
seletedItem: null,
seletedId: '',
total: 0
};
},
created() {
this.seletedId = this.gameId || '';
},
methods: {
onPageChange(val) {
this.query.currentPage = val;
this.getList(this.gameType);
this.seletedItem = null;
this.seletedId = '';
},
onRowClick(row) {
this.seletedItem = row;
this.seletedId = row.gameId;
},
onSearch() {
this.query.currentPage = 1;
this.seletedItem = null;
this.seletedId = '';
this.getList(this.gameType);
},
getList(gameType) {
const setResponse = (res, type) => {
//type 0 大转盘/刮刮卡 ----- 1 其他游戏
const { errorCode, message, result } = res.data || {};
if (errorCode != 0) {
return this.$message.error(message);
} else {
if (type === 0) {
this.list = result.page.result || [];
this.total = result.page.totalCount || 0;
} else {
this.list = (result.result || []).map(item => ({ ...item, gameId: item.gameActivityId }));
this.total = result.totalCount || 0;
}
}
};
switch (gameType) {
case 'GAME_LINK_DZP':
this.axios.post(`/api-marketing/page-lottery-game`, qs.stringify({ ...this.query, gameType: 1 })).then(res => {
setResponse(res, 0);
});
break;
case 'GAME_LINK_GGK':
this.axios.post(`/api-marketing/page-lottery-game`, qs.stringify({ ...this.query, gameType: 2 })).then(res => {
setResponse(res, 0);
});
break;
case 'GAME_LINK_PTYX':
this.axios.post(`/api-marketing/page-puzzle-game`, qs.stringify({ ...this.query })).then(res => {
setResponse(res, 1);
});
break;
case 'GAME_LINK_ZNM':
this.axios.post(`/api-marketing/page-znm-game`, qs.stringify({ ...this.query })).then(res => {
setResponse(res, 1);
});
break;
case 'GAME_LINK_KLFL':
this.axios.post(`/api-marketing/page-klfl-game`, qs.stringify({ ...this.query })).then(res => {
setResponse(res, 1);
});
break;
}
}
},
watch: {
gameType: {
handler() {
this.query.currentPage = 1;
this.query.searchParam = '';
this.getList(this.gameType);
},
immediate: true
},
gameId() {
this.seletedId = this.gameId || '';
},
seletedItem(val) {
this.$emit('select', val);
}
}
};
</script>
<template>
<el-dialog title="添加小程序链接" :visible.sync="show" width="600px" class="add-replay-content" :before-close="close">
<el-form label-position="right" ref="form" :model="form" label-width="100px" v-loading="loading">
<el-dialog title="添加小程序链接" :visible.sync="show" width="770px" class="add-replay-content" :before-close="close">
<el-form style="max-height: 550px;overflow: auto;" label-position="right" ref="form" :model="form" label-width="100px" v-loading="loading">
<el-form-item class="text-content" label="文本内容">
<el-input v-model="form.title" @keyup.native="toInput(form.title, $event)"></el-input>
<span class="text-num">{{ inputNum }}/{{ inputLength }}</span>
......@@ -29,6 +29,10 @@
<el-select v-show="preValue && preValue != 5" filterable clearable @change="changeNextValue" class="w200" v-model="nextValue" placeholder="请选择">
<el-option v-for="item in options2" :key="item.linkId" :label="item.name" :value="item.linkId"> </el-option>
</el-select>
<el-select class="w200" v-model="threeValue" placeholder="请选择" v-if="options3 && options3.length > 0" @change="changeThreeValue">
<el-option v-for="item in options3" :key="item.tagid" :label="item.tagname" :value="item.tagid"></el-option>
</el-select>
<game-list style="margin-top:20px;margin-right: 8px;padding: 20px;border: 1px solid #dcdfe6;border-radius:2px" ref="gameList" v-if="gameLinkVisible" :game-id="gameProps.gameId" :game-type="gameProps.gameType" @select="onSelectGame"></game-list>
</div>
</el-form-item>
</div>
......@@ -44,8 +48,10 @@
<script>
import { getByteVal, getZhLen } from '../assets/utils.js';
import qs from 'qs';
import GameList from './game-list.vue';
export default {
name: 'lib-wxa',
components: { GameList },
props: {
show: {
type: Boolean,
......@@ -72,6 +78,7 @@ export default {
inputLength: 20, // 限制最大字数
preValue: '',
nextValue: '',
threeValue: '',
options1: [
{
value: 3,
......@@ -87,6 +94,10 @@ export default {
}
],
options2: [],
gameProps: {
gameType: '',
gameId: ''
},
wechatContent: {},
listParams: {
pageSize: 10,
......@@ -112,7 +123,25 @@ export default {
}
}
},
computed: {
options3() {
let obj = this.options2.find(el => {
return el.linkId === this.nextValue;
});
if (obj && obj.childList && obj.childList.length > 0) {
return obj.childList;
} else {
return [];
}
},
gameLinkVisible() {
return this.nextValue == 'GAME_LINK' && this.threeValue;
}
},
watch: {
options3() {
this.threeValue = '';
},
show(val) {
this.form = {
title: '',
......@@ -123,6 +152,8 @@ export default {
};
this.preValue = '';
this.nextValue = '';
this.threeValue = '';
this.selectedGame = null;
this.wechatContent = {};
if (val && this.item.ecmMarketingTypeRelationId) {
this.form = JSON.parse(JSON.stringify(this.item));
......@@ -140,7 +171,22 @@ export default {
this.getPageName(pagePath.pageId);
} else {
this.getNextList(this.preValue).then(res => {
this.nextValue = pagePath.type;
if (pagePath.type.startsWith('GAME_LINK')) {
this.nextValue = 'GAME_LINK';
} else {
this.nextValue = pagePath.type;
}
if (this.nextValue == 'GAME_LINK') {
this.$nextTick(() => {
this.threeValue = pagePath.gameType;
this.gameProps.gameType = pagePath.gameType;
this.gameProps.gameId = pagePath.tagid;
});
} else {
this.$nextTick(() => {
this.threeValue = pagePath.tagid;
});
}
});
}
}
......@@ -248,6 +294,30 @@ export default {
this.wechatContent.pageType = this.preValue;
}
},
changeThreeValue(val) {
if (val.startsWith('GAME_LINK')) {
this.selectedGame = null;
this.wechatContent.type = val;
this.$nextTick(() => {
this.gameProps.gameType = val;
this.gameProps.gameId = '';
});
} else {
let option = this.options3.find(el => el.tagid === val);
this.wechatContent.tagid = option.tagid;
this.wechatContent.tagname = option.tagname;
}
},
onSelectGame(val) {
if (val) {
this.gameProps.gameId = val.gameId || val.gameActivityId;
this.wechatContent.tagid = val.gameId || val.gameActivityId;
this.wechatContent.tagname = val.gameName;
this.wechatContent.gameType = this.threeValue;
this.wechatContent.gameName = val.gameName;
this.selectedGame = val;
}
},
// 获取自定义链接list
getCustonList() {
return new Promise((resolve, reject) => {
......@@ -329,6 +399,14 @@ export default {
this.$message({ type: 'warning', message: '链接选择' });
return;
}
if (this.options3 && this.options3.length > 0 && !this.threeValue) {
this.$message({ type: 'warning', message: '链接选择' });
return;
}
if (this.nextValue == 'GAME_LINK' && !this.selectedGame) {
this.$message({ type: 'warning', message: '请选择游戏' });
return;
}
// 自定义链接
if (this.preValue === 5) {
......@@ -350,6 +428,7 @@ export default {
this.listParams.search = '';
this.listParams.nomore = false;
this.options2 = [];
this.options3 = [];
this.$emit('update:show', false);
}
}
......
......@@ -115,6 +115,26 @@
</template>
</template>
</el-table-column>
<el-table-column prop="img" :render-header="labelImg" align="left" :min-width="160">
<template slot-scope="scope" v-if="scope.row.prizeType !== 3">
<template v-if="isAdd || scope.row.inOpt">
<el-row type="flex" align="middle">
<el-upload :action="`${getHost()}/api-marketing/upload-game-image`" :disabled="!!scope.row.prizeImage" :data="{ requestProject: 'marketing' }" with-credentials accept="jpg,png" class="avatar-uploader" :show-file-list="false" :before-upload="beforeUpload" :on-success="onUploaded(scope.row)" :on-error="onUploadError">
<img v-if="scope.row.prizeImage" :src="scope.row.prizeImage" style="width:30px;height:30px;object-fit:contain" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
<i class="el-icon-error" v-if="scope.row.prizeImage" @click="scope.row.prizeImage = ''"></i>
</el-upload>
<div style="line-height:17px;font-size:12px;color:#909399;margin-left:10px;margin-top:5px">
<div>图片建议尺寸</div>
<div>320*200px</div>
</div>
</el-row>
</template>
<div v-else-if="scope.row.prizeImage" style="line-height:0">
<img :src="scope.row.prizeImage" style="width:32px;height:32px;object-fit:contain;border:1px solid #dcdfe6;border-radius:2px;box-sizing:border-box" />
</div>
</template>
</el-table-column>
<el-table-column prop="prizeQuantity" label="商品数量" align="left" :min-width="160">
<template slot-scope="scope" v-if="scope.row.prizeType !== 3">
<template v-if="isAdd || (scope.row.inOpt && scope.row.prizeType != 2)"> <el-input-number controls-position="right" v-model="scope.row.prizeCount" type="number" :min="0" :disabled="isInfo" class="width50" size="small"></el-input-number> 件 </template>
......@@ -230,6 +250,7 @@ export default {
sortList: [{ label: '奖品1', value: 1 }, { label: '奖品2', value: 2 }, { label: '奖品3', value: 3 }, { label: '奖品4', value: 4 }, { label: '奖品5', value: 5 }, { label: '奖品6', value: 6 }, { label: '奖品7', value: 7 }, { label: '奖品8', value: 8 }, { label: '随机', value: null }], // eslint-disable-line
tableList: Array(8)
.fill({
prizeImage: '',
prizeId: '',
prizeType: 3,
prizeCount: null,
......@@ -311,6 +332,36 @@ export default {
}
},
methods: {
getHost() {
const host = window.location.origin;
if (host.indexOf('localhost') != '-1') {
return 'http://gicdev.demogic.com';
} else {
return host;
}
},
beforeUpload(file) {
if (!['image/jpeg', 'image/png'].includes(file.type)) {
this.$message.warning('图片格式错误');
return false;
} else if (file.size > 1024 * 1024) {
this.$message.warning('图片大小超过1MB');
return false;
}
},
onUploaded(row) {
return function(res, file, fileList) {
if (res.errorCode === 0) {
this.$set(row, 'prizeImage', res.result.qcloudImageUrl);
// row.prizeImage = res.result.qcloudImageUrl;
} else {
this.$message.warning(res.message);
}
};
},
onUploadError() {
this.$message.error('图片上传失败');
},
// 更新游戏奖品
updateGamePrize(index) {
const current = this.tableList[index];
......@@ -335,6 +386,7 @@ export default {
}
const params = {
prizeImage: current.prizeImage,
gameId: this.$route.params.id,
gamePrizeId: current.prizeId,
type: current.prizeType, // 奖品类型,1:积分,2:卡券,3:谢谢参与
......@@ -368,6 +420,7 @@ export default {
this.tableList[index].prizeCount = 0;
this.tableList[index].prizeCardId = '';
this.tableList[index].cardName = '';
this.tableList[index].prizeImage = '';
},
// 添加规则
addRule(i) {
......@@ -619,6 +672,7 @@ export default {
this.tableList.forEach((v, i) => {
if (v.prizeType === 1) {
list.push({
prizeImage: v.prizeImage,
prizeIntegral: v.prizeIntegral,
prizeCount: v.prizeCount, // 奖品数量
prizeRate: 0,
......@@ -630,6 +684,7 @@ export default {
});
} else if (v.prizeType === 2) {
list.push({
prizeImage: v.prizeImage,
prizeCardId: v.prizeCardId, // 奖项设置: 所选卡券的主键ID coupCardId
prizeCount: v.prizeCount, // 奖品数量
prizeRate: 0,
......@@ -711,6 +766,21 @@ export default {
</el-tooltip>
);
},
labelImg(h, { column, $index }) {
return (
<span>
<span class="fw500">奖项图片</span>
<el-tooltip class="item" effect="dark" placement="top-start">
<i style="margin-left:2px" class="iconfont icon-xinxixianshi minor-font-color fz14" />
<div style="line-height:18px" slot="content">
<div>可上传自定义图片,非必传,未上传展示默认图标;</div>
<div>格式:jpgpng</div>
<div>大小:1MB以内。</div>
</div>
</el-tooltip>
</span>
);
},
downloadWheelSkinPsd() {
window.location = downloadWheelSkinPsd;
}
......@@ -724,6 +794,36 @@ export default {
</script>
<style lang="scss" scoped>
.avatar-uploader /deep/ {
font-size: 0;
line-height: 0;
margin-top: 5px;
.el-upload {
border: 1px dashed #dcdfe6;
border-radius: 2px;
cursor: pointer;
position: relative;
}
.avatar-uploader-icon {
font-size: 16px;
color: #303133;
width: 30px;
height: 30px;
line-height: 30px;
text-align: center;
}
.el-icon-error {
position: absolute;
right: 0;
top: 0;
transform: translate(40%, -40%);
font-size: 12px;
color: rgba(0, 0, 0, 0.4);
&:hover {
color: rgba(0, 0, 0, 0.8);
}
}
}
.skin-box {
display: block;
width: 220px;
......
......@@ -382,6 +382,7 @@ export default {
},
async marketingCharts() {
try {
this.list = [];
let res = await messageMarketingChart(this.listParams);
this.sumCount = res.result.sumCount;
this.sumFee = res.result.sumFee;
......@@ -404,6 +405,7 @@ export default {
async smsData(type = 'list') {
this.loading = true;
try {
this.list = [];
let res = await smsData(Object.assign({ ajaxType: type }, this.listParams));
if (type === 'list') {
if (res.errorCode === 0 && res.result.page.result) {
......@@ -436,6 +438,7 @@ export default {
async voiceData(type = 'list') {
this.loading = true;
try {
this.list = [];
let res = await voiceData(Object.assign({ ajaxType: type }, this.listParams));
if (type === 'list') {
if (res.errorCode === 0 && res.result.page.result) {
......@@ -466,6 +469,7 @@ export default {
async callData(type = 'list') {
this.loading = true;
try {
this.list = [];
let res = await callData(Object.assign({ ajaxType: type, taskType: type === 'list' ? this.taskType : '' }, this.listParams));
if (type === 'list') {
if (res.errorCode === 0 && res.result.page.result) {
......@@ -498,6 +502,7 @@ export default {
async videoPage(type = 'list') {
this.loading = true;
try {
this.list = [];
this.videoListParams.startTime = formatDateTimeByType(this.dateTimeVideo[0], 'yyyy-MM-dd');
this.videoListParams.endTime = formatDateTimeByType(this.dateTimeVideo[1], 'yyyy-MM-dd');
if (type === 'list') {
......@@ -553,6 +558,7 @@ export default {
async recordData(type = 'list') {
this.loading = true;
try {
this.list = [];
let res = await recordData(Object.assign({ ajaxType: type, taskType: type === 'list' ? this.taskType : '' }, this.listParams));
if (type === 'list') {
if (res.errorCode === 0 && res.result.page.result) {
......
......@@ -5,22 +5,23 @@
<el-select style="width:180px" clearable v-model="listParams.feeType" placeholder="全部记录类型" @change="onChangeFeeType">
<el-option label="充值" :value="1"></el-option>
<el-option label="扣款" :value="2"></el-option>
<el-option label="退费" :value="3"></el-option>
</el-select>
<el-select v-if="listParams.feeType == 2" style="width:180px" clearable v-model="listParams.deductType" placeholder="全部扣款类型" @change="onSearch">
<el-option v-for="(value, key) in deductTypeList" :key="key" :label="value" :value="key"></el-option>
</el-select>
</div>
<el-table tooltipEffect="dark" :data="tableList" style="width: 100%">
<el-table-column align="left" prop="timeEnd" label="充值时间">
<el-table-column align="left" prop="timeEnd" label="操作时间">
<template slot-scope="scope">
<p style="color:#606266;">{{ formatDateTimeByType(scope.row.timeEnd, 'yyyy-MM-dd-HH-mm-ss', true).y }}</p>
<p style="color:#606266;">{{ formatDateTimeByType(scope.row.timeEnd, 'yyyy-MM-dd-HH-mm-ss', true).h }}</p>
</template>
</el-table-column>
<el-table-column align="left" prop="transactionId" label="充值流水号"></el-table-column>
<el-table-column align="left" prop="transactionId" label="流水号"></el-table-column>
<el-table-column label="记录类型">
<template slot-scope="scope">
{{ scope.row.feeType == 1 ? '充值' : '扣款' }}
{{ textMap[scope.row.feeType] }}
</template>
</el-table-column>
<el-table-column label="扣款类型">
......@@ -28,15 +29,15 @@
{{ deductTypeList[scope.row.deductType] }}
</template>
</el-table-column>
<el-table-column align="left" prop="payType" label="充值方式">
<!-- <el-table-column align="left" prop="payType" label="充值方式">
<template slot-scope="scope">
{{ scope.row.payType | filterPayType }}
</template>
</el-table-column>
</el-table-column> -->
<el-table-column label="金额" align="left" prop="totalFee">
<template slot-scope="scope"> {{ (scope.row.totalFee / 100).toFixed(2) }}</template>
</el-table-column>
<el-table-column align="left" prop="reason" label="充值原因" show-overflow-tooltip></el-table-column>
<el-table-column align="left" prop="reason" label="原因" show-overflow-tooltip></el-table-column>
<el-table-column label="图片凭证">
<template slot-scope="scope">
<!-- <el-image v-for="(item, index) in getUrls(scope).slice(0, 3)" :key="`${currentPage}-${item}`" style="width: 36px; height: 36px" :src="item" :preview-src-list="getUrls(scope, index)" lazy>
......@@ -66,6 +67,11 @@ export default {
components: { Viewer },
data() {
return {
textMap: {
1: '充值',
2: '扣款',
3: '退费'
},
formatDateTimeByType,
dateTime: [Date.now() - 30 * 24 * 60 * 60 * 1000, Date.now()],
loading: false,
......@@ -84,7 +90,7 @@ export default {
},
created() {
this.rechargeRecord();
this.$store.commit('mutations_breadcrumb', [{ name: '企业管理', path: '' }, { name: '计费中心', path: '/recharge' }, { name: '充值记录', path: '' }]); // eslint-disable-line
this.$store.commit('mutations_breadcrumb', [{ name: '企业管理', path: '' }, { name: '计费中心', path: '/recharge' }, { name: '记录', path: '' }]); // eslint-disable-line
},
methods: {
getUrls(scope) {
......
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