最新
This commit is contained in:
@ -2,6 +2,7 @@
|
|||||||
ENV = 'development'
|
ENV = 'development'
|
||||||
|
|
||||||
# base api
|
# base api
|
||||||
VUE_APP_BASE_API = 'http://localhost:9000'
|
VUE_APP_BASE_API = 'http://127.0.0.1:9000'
|
||||||
|
# VUE_APP_BASE_API = 'http://47.108.136.226:9000'
|
||||||
#VUE_APP_BASE_API = 'http://47.108.139.184:8001'
|
#VUE_APP_BASE_API = 'http://47.108.139.184:8001'
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,8 @@ export function getRewardTypeList(params) {
|
|||||||
size: params.size || 10,
|
size: params.size || 10,
|
||||||
name: params.name,
|
name: params.name,
|
||||||
status: params.status,
|
status: params.status,
|
||||||
storeId: params.storeId
|
storeId: params.storeId,
|
||||||
|
source: params.source
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,7 +12,7 @@ export function getMerchantAndStoreList() {
|
|||||||
// 获取任务列表
|
// 获取任务列表
|
||||||
export function getTaskList({ netbarAccount, gid, num = 10, pageidx }) {
|
export function getTaskList({ netbarAccount, gid, num = 10, pageidx }) {
|
||||||
return request({
|
return request({
|
||||||
url: '/x/task/getNonLoginTaskList',
|
url: '/x/task/list',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: {
|
params: {
|
||||||
netbarAccount,
|
netbarAccount,
|
||||||
|
|||||||
15
src/components/AliyunSlider.vue
Normal file
15
src/components/AliyunSlider.vue
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<template>
|
||||||
|
<div class="aliyun-slider">
|
||||||
|
<!-- 这里是阿里云滑块组件的内容 -->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
// 这里可以添加你的组件逻辑
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.aliyun-slider {
|
||||||
|
/* 这里可以添加样式 */
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -14,10 +14,13 @@
|
|||||||
@click.native="handleCascaderClick"
|
@click.native="handleCascaderClick"
|
||||||
/>
|
/>
|
||||||
<el-button @click="handleReset" style="margin-left: 10px;">重置</el-button>
|
<el-button @click="handleReset" style="margin-left: 10px;">重置</el-button>
|
||||||
<el-button class="refresh-btn" @click="handleRefresh" style="margin-left: auto;">
|
<div style="margin-left: auto; display: flex; gap: 10px;">
|
||||||
<i class="el-icon-refresh"></i>
|
<el-button class="refresh-btn" @click="handleSyncTask">任务同步</el-button>
|
||||||
<span>刷新</span>
|
<el-button class="refresh-btn" @click="handleRefresh">
|
||||||
</el-button>
|
<i class="el-icon-refresh"></i>
|
||||||
|
<span>刷新</span>
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-tabs v-model="activeGame" @tab-click="handleGameChange">
|
<el-tabs v-model="activeGame" @tab-click="handleGameChange">
|
||||||
@ -32,20 +35,32 @@
|
|||||||
<!-- 任务列表表格 -->
|
<!-- 任务列表表格 -->
|
||||||
<div class="task-table-container">
|
<div class="task-table-container">
|
||||||
<el-table v-loading="loading" :data="taskList" style="width: 100%; max-width: 100%; table-layout: fixed; overflow-x: hidden;" border>
|
<el-table v-loading="loading" :data="taskList" style="width: 100%; max-width: 100%; table-layout: fixed; overflow-x: hidden;" border>
|
||||||
<el-table-column prop="qqNetbarTaskRules" label="任务规则" :resizable="false" align="center" header-align="center" min-width="16%" />
|
<el-table-column label="任务名称" align="center" min-width="16%" :resizable="false">
|
||||||
<el-table-column prop="qqNetbarTaskMemo" label="任务描述" :resizable="false" align="center" header-align="center" min-width="16%" />
|
|
||||||
<el-table-column prop="qqNetbarTaskName" label="任务名称" :resizable="false" align="center" header-align="center" min-width="16%" />
|
|
||||||
<el-table-column prop="qqNetbarReward" label="奖励名称" :resizable="false" align="center" header-align="center" min-width="16%">
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>
|
{{ scope.row.title || '-' }}
|
||||||
{{
|
|
||||||
(scope.row.rewards && scope.row.rewards.filter(r => r.rewardTypeSource === 1).map(r => r.name).join('、')) || '-'
|
|
||||||
}}
|
|
||||||
</span>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="qqNetbarTargetTime" label="目标次数" :resizable="false" align="center" header-align="center" min-width="16%" />
|
<el-table-column label="任务描述" align="center" min-width="16%" :resizable="false">
|
||||||
<el-table-column label="操作" align="center" min-width="16%">
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.task_desc || '-' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="规则描述" align="center" min-width="16%" :resizable="false">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.rule_desc || '-' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="目标名称" align="center" min-width="16%" :resizable="false">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.target_name || '-' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="目标次数" align="center" min-width="16%" :resizable="false">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
{{ scope.row.target_times || '-' }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" min-width="16%" :resizable="false">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button type="primary" size="mini" @click="configureReward(scope.row)">配置奖励</el-button>
|
<el-button type="primary" size="mini" @click="configureReward(scope.row)">配置奖励</el-button>
|
||||||
</template>
|
</template>
|
||||||
@ -72,7 +87,7 @@
|
|||||||
<el-form label-width="100px">
|
<el-form label-width="100px">
|
||||||
<el-form-item label="奖励类型">
|
<el-form-item label="奖励类型">
|
||||||
<el-select v-model="selectedRewardTypeId" placeholder="请选择奖励类型" filterable :loading="rewardTypeLoading" style="width: 100%" @change="handleRewardTypeChange">
|
<el-select v-model="selectedRewardTypeId" placeholder="请选择奖励类型" filterable :loading="rewardTypeLoading" style="width: 100%" @change="handleRewardTypeChange">
|
||||||
<el-option v-for="item in rewardTypeList" :key="item.id" :label="item.name" :value="item.id" />
|
<el-option v-for="item in rewardTypeList" :key="item.id" :label="item.name" :value="item.tencentTypeId" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="奖励">
|
<el-form-item label="奖励">
|
||||||
@ -95,6 +110,7 @@ import { getGameList } from '@/api/game'
|
|||||||
import { getTaskList, getMerchantAndStoreList, setTaskReward, operateTaskReward } from '@/api/task'
|
import { getTaskList, getMerchantAndStoreList, setTaskReward, operateTaskReward } from '@/api/task'
|
||||||
import { getRewardTypeList } from '@/api/reward-type'
|
import { getRewardTypeList } from '@/api/reward-type'
|
||||||
import { getRewardSystemList } from '@/api/reward'
|
import { getRewardSystemList } from '@/api/reward'
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'GameTask',
|
name: 'GameTask',
|
||||||
@ -248,7 +264,7 @@ export default {
|
|||||||
const res = await getTaskList({ netbarAccount, gid, num: 10, pageidx: '' })
|
const res = await getTaskList({ netbarAccount, gid, num: 10, pageidx: '' })
|
||||||
console.log('getTaskList result', res)
|
console.log('getTaskList result', res)
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.taskList = res.data.taskList || []
|
this.taskList = res.data.list?.taskList || []
|
||||||
} else {
|
} else {
|
||||||
this.$message.error(res.message || '获取任务列表失败')
|
this.$message.error(res.message || '获取任务列表失败')
|
||||||
this.taskList = []
|
this.taskList = []
|
||||||
@ -269,7 +285,7 @@ export default {
|
|||||||
this.rewardList = []
|
this.rewardList = []
|
||||||
this.rewardListLoading = false
|
this.rewardListLoading = false
|
||||||
// 获取奖励类型
|
// 获取奖励类型
|
||||||
getRewardTypeList({ page: 1, size: 1000 }).then(res => {
|
getRewardTypeList({ page: 1, size: 1000, source: 1 }).then(res => {
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.rewardTypeList = res.data.list || []
|
this.rewardTypeList = res.data.list || []
|
||||||
} else {
|
} else {
|
||||||
@ -305,7 +321,7 @@ export default {
|
|||||||
this.$message.error('请选择奖励类型和奖励')
|
this.$message.error('请选择奖励类型和奖励')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const taskId = this.currentTask.qqNetbarTaskId || this.currentTask.id
|
const taskId = this.currentTask.task_id || this.currentTask.qqNetbarTaskId || this.currentTask.id
|
||||||
operateTaskReward({
|
operateTaskReward({
|
||||||
type: 1,
|
type: 1,
|
||||||
taskId,
|
taskId,
|
||||||
@ -348,6 +364,25 @@ export default {
|
|||||||
this.$message.error('请求失败')
|
this.$message.error('请求失败')
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
formatTimestamp(ts) {
|
||||||
|
if (!ts) return '-'
|
||||||
|
const date = new Date(ts * 1000)
|
||||||
|
return date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, '0') + '-' + date.getDate().toString().padStart(2, '0') + ' ' + date.getHours().toString().padStart(2, '0') + ':' + date.getMinutes().toString().padStart(2, '0') + ':' + date.getSeconds().toString().padStart(2, '0')
|
||||||
|
},
|
||||||
|
async handleSyncTask() {
|
||||||
|
try {
|
||||||
|
const res = await request({ url: '/x/task/sync', method: 'post' })
|
||||||
|
if (res.code === 0) {
|
||||||
|
const msg = (res.data && res.data.message) ? res.data.message : (res.message || '任务同步成功')
|
||||||
|
this.$message.success(msg)
|
||||||
|
this.handleRefresh()
|
||||||
|
} else {
|
||||||
|
this.$message.error(res.message || '任务同步失败')
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
this.$message.error('任务同步失败')
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@ -438,4 +473,8 @@ export default {
|
|||||||
overflow-x: hidden !important;
|
overflow-x: hidden !important;
|
||||||
max-width: 100% !important;
|
max-width: 100% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::v-deep .el-table__column-resize {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -113,9 +113,9 @@
|
|||||||
<el-form-item label="奖励名称" prop="name" label-width="120px">
|
<el-form-item label="奖励名称" prop="name" label-width="120px">
|
||||||
<el-input v-model="addRewardForm.name" placeholder="请输入奖励名称" />
|
<el-input v-model="addRewardForm.name" placeholder="请输入奖励名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="奖励类型" prop="rewardTypeId" label-width="120px">
|
<el-form-item label="奖励类型" prop="tencentTypeId" label-width="120px">
|
||||||
<el-select v-model="addRewardForm.rewardTypeId" placeholder="请选择奖励类型" filterable style="width: 100%">
|
<el-select v-model="addRewardForm.tencentTypeId" placeholder="请选择奖励类型" filterable style="width: 100%">
|
||||||
<el-option v-for="item in rewardTypeList" :key="item.id" :label="item.name" :value="item.id" />
|
<el-option v-for="item in rewardTypeList" :key="item.id" :label="item.name" :value="item.tencentTypeId" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="游戏ID" prop="gameId" label-width="120px">
|
<el-form-item label="游戏ID" prop="gameId" label-width="120px">
|
||||||
@ -212,7 +212,7 @@
|
|||||||
addRewardForm: {
|
addRewardForm: {
|
||||||
id: undefined,
|
id: undefined,
|
||||||
name: '',
|
name: '',
|
||||||
rewardTypeId: undefined,
|
tencentTypeId: undefined,
|
||||||
gameId: undefined,
|
gameId: undefined,
|
||||||
rewardImg: '',
|
rewardImg: '',
|
||||||
qqGoodsId: '',
|
qqGoodsId: '',
|
||||||
@ -229,11 +229,9 @@
|
|||||||
source: 1
|
source: 1
|
||||||
},
|
},
|
||||||
addRewardRules: {
|
addRewardRules: {
|
||||||
rewardTypeId: [{ required: true, message: '请选择奖励类型', trigger: 'change' }],
|
tencentTypeId: [{ required: true, message: '请选择奖励类型', trigger: 'change' }],
|
||||||
name: [{ required: true, message: '请输入奖励名称', trigger: 'blur' }],
|
name: [{ required: true, message: '请输入奖励名称', trigger: 'blur' }],
|
||||||
description: [{ required: true, message: '请输入奖励描述', trigger: 'blur' }],
|
|
||||||
status: [{ required: true, message: '请选择状态', trigger: 'change' }],
|
status: [{ required: true, message: '请选择状态', trigger: 'change' }],
|
||||||
value: [{ required: true, message: '请输入奖励值', trigger: 'blur' }],
|
|
||||||
expireType: [{ required: true, message: '请选择过期类型', trigger: 'change' }],
|
expireType: [{ required: true, message: '请选择过期类型', trigger: 'change' }],
|
||||||
validFrom: [
|
validFrom: [
|
||||||
{ required: true, message: '请选择有效开始时间', trigger: 'change',
|
{ required: true, message: '请选择有效开始时间', trigger: 'change',
|
||||||
@ -352,7 +350,7 @@
|
|||||||
this.addRewardForm = {
|
this.addRewardForm = {
|
||||||
id: row.id,
|
id: row.id,
|
||||||
name: row.name,
|
name: row.name,
|
||||||
rewardTypeId: row.rewardTypeId,
|
tencentTypeId: row.tencentTypeId || row.rewardTypeId,
|
||||||
gameId: row.gameId,
|
gameId: row.gameId,
|
||||||
rewardImg: row.rewardImg || row.imageUrl || '',
|
rewardImg: row.rewardImg || row.imageUrl || '',
|
||||||
qqGoodsId: row.qqGoodsId,
|
qqGoodsId: row.qqGoodsId,
|
||||||
@ -381,7 +379,11 @@
|
|||||||
try {
|
try {
|
||||||
await this.$refs.addRewardForm.validate()
|
await this.$refs.addRewardForm.validate()
|
||||||
const api = this.dialogType === 'add' ? addReward : updateReward
|
const api = this.dialogType === 'add' ? addReward : updateReward
|
||||||
const formData = { ...this.addRewardForm, source: 1 }
|
const formData = {
|
||||||
|
...this.addRewardForm,
|
||||||
|
rewardTypeId: this.addRewardForm.tencentTypeId,
|
||||||
|
source: 1
|
||||||
|
}
|
||||||
const res = await api(formData)
|
const res = await api(formData)
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.$message.success(this.dialogType === 'add' ? '添加奖励成功' : '编辑奖励成功')
|
this.$message.success(this.dialogType === 'add' ? '添加奖励成功' : '编辑奖励成功')
|
||||||
@ -402,7 +404,7 @@
|
|||||||
this.addRewardForm = {
|
this.addRewardForm = {
|
||||||
id: undefined,
|
id: undefined,
|
||||||
name: '',
|
name: '',
|
||||||
rewardTypeId: undefined,
|
tencentTypeId: undefined,
|
||||||
gameId: undefined,
|
gameId: undefined,
|
||||||
rewardImg: '',
|
rewardImg: '',
|
||||||
qqGoodsId: '',
|
qqGoodsId: '',
|
||||||
|
|||||||
@ -139,9 +139,6 @@ export default {
|
|||||||
],
|
],
|
||||||
code: [
|
code: [
|
||||||
{ required: true, message: '请输入编码', trigger: 'blur' }
|
{ required: true, message: '请输入编码', trigger: 'blur' }
|
||||||
],
|
|
||||||
iconUrl: [
|
|
||||||
{ required: true, message: '请输入图标URL', trigger: 'blur' }
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -153,7 +150,7 @@ export default {
|
|||||||
async getList() {
|
async getList() {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
try {
|
try {
|
||||||
const res = await getRewardTypeList(this.query)
|
const res = await getRewardTypeList({ ...this.query, source: 1 })
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.list = res.data.list
|
this.list = res.data.list
|
||||||
this.total = res.data.total
|
this.total = res.data.total
|
||||||
@ -213,7 +210,7 @@ export default {
|
|||||||
if (valid) {
|
if (valid) {
|
||||||
try {
|
try {
|
||||||
const api = this.dialogType === 'add' ? addRewardType : updateRewardType
|
const api = this.dialogType === 'add' ? addRewardType : updateRewardType
|
||||||
const submitData = { ...this.form }
|
const submitData = { ...this.form, source: 1 }
|
||||||
const res = await api(submitData)
|
const res = await api(submitData)
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
this.$message.success(this.dialogType === 'add' ? '新增成功' : '编辑成功')
|
this.$message.success(this.dialogType === 'add' ? '新增成功' : '编辑成功')
|
||||||
|
|||||||
@ -24,8 +24,10 @@
|
|||||||
class="custom-table"
|
class="custom-table"
|
||||||
header-row-class-name="custom-header"
|
header-row-class-name="custom-header"
|
||||||
row-class-name="custom-row"
|
row-class-name="custom-row"
|
||||||
|
:header-cell-style="{ textAlign: 'center' }"
|
||||||
|
:cell-style="{ textAlign: 'center' }"
|
||||||
>
|
>
|
||||||
<el-table-column label="用户信息" min-width="300">
|
<el-table-column label="用户信息" min-width="16%" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<div class="user-info-cell">
|
<div class="user-info-cell">
|
||||||
<el-avatar :size="48" :src="scope.row.avatar">
|
<el-avatar :size="48" :src="scope.row.avatar">
|
||||||
@ -38,25 +40,25 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="phone" label="手机号" width="300" align="center">
|
<el-table-column prop="phone" label="手机号" min-width="16%" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ scope.row.phone || '-' }}
|
{{ scope.row.phone || '-' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="status" label="状态" width="100" align="center">
|
<el-table-column prop="status" label="状态" min-width="16%" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span :class="['status-tag', scope.row.status === 0 ? 'status-normal' : 'status-block']">
|
<span :class="['status-tag', scope.row.status === 0 ? 'status-normal' : 'status-block']">
|
||||||
{{ scope.row.status === 0 ? '正常' : '禁用' }}
|
{{ scope.row.status === 0 ? '正常' : '禁用' }}
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="birthday" label="注册时间" width="200" align="center">
|
<el-table-column prop="birthday" label="注册时间" min-width="16%" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ scope.row.firstVisitAt ? scope.row.firstVisitAt : '-' }}
|
{{ scope.row.firstVisitAt ? scope.row.firstVisitAt : '-' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="lastLoginStoreName" label="最近登录门店" width="200" align="center" />
|
<el-table-column prop="lastLoginStoreName" label="最近登录门店" min-width="16%" align="center" />
|
||||||
<el-table-column label="操作" width="160" align="center">
|
<el-table-column label="操作" min-width="16%" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<div class="action-buttons">
|
<div class="action-buttons">
|
||||||
<el-button type="primary" size="mini" class="action-btn edit-btn" @click="onEdit(scope.row)">
|
<el-button type="primary" size="mini" class="action-btn edit-btn" @click="onEdit(scope.row)">
|
||||||
|
|||||||
Reference in New Issue
Block a user