|
|
@@ -15,6 +15,17 @@
|
|
|
/>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
+ <el-form-item label="游戏端口">
|
|
|
+ <el-select v-model="searchInfo.game_port_id" placeholder="请选择" style="width:100%">
|
|
|
+ <el-option
|
|
|
+ v-for="item in GamePortOptions"
|
|
|
+ :key="item.id"
|
|
|
+ :label="`${item.name}`"
|
|
|
+ :value="item.id"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
<el-form-item label="状态">
|
|
|
<el-select v-model="searchInfo.is_complete" placeholder="是否完成" >
|
|
|
<el-option
|
|
|
@@ -26,24 +37,28 @@
|
|
|
/>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="日期" prop="create_date">
|
|
|
- <el-date-picker
|
|
|
- v-model="searchInfo.create_date"
|
|
|
- popper-class="picker-popovers"
|
|
|
- class="timefilter"
|
|
|
- type="datetime"
|
|
|
- placeholder="选择日期时间"
|
|
|
- value-format="YYYY-MM-DD"
|
|
|
- >
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
+ <el-form-item label="日期" prop="date">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="searchInfo.date"
|
|
|
+ size="default"
|
|
|
+ type="daterange"
|
|
|
+ unlink-panels
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ :disabled-date="disabledDate"
|
|
|
+ :shortcuts="shortcuts"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
<el-form-item>
|
|
|
<el-button size="small" type="primary" icon="search" @click="onSubmit">查询</el-button>
|
|
|
<el-button size="small" icon="refresh" @click="onReset">重置</el-button>
|
|
|
+ <el-button class="excel-btn" size="small" type="primary" icon="download" @click="handleExcelExport">导出</el-button>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
</div>
|
|
|
<div class="gva-table-box">
|
|
|
+
|
|
|
<el-table :data="tableData" border @sort-change="sortChange" @selection-change="handleSelectionChange" style="width: 100%">
|
|
|
<el-table-column label="任务ID" width="70" prop="task_id" sortable="custom" />
|
|
|
<el-table-column label="任务日期" min-width="100" prop="create_date" />
|
|
|
@@ -52,29 +67,31 @@
|
|
|
<el-table-column label="登录方式" width="75" prop="login_method" />
|
|
|
<el-table-column label="新增目标" width="75" prop="new_target" />
|
|
|
<el-table-column label="新增完成" width="75" prop="new_complete" />
|
|
|
- <el-table-column fixed="right" align="right" label="剩余新增" width="75" prop="new_target1">
|
|
|
+ <el-table-column label="剩余新增" width="75" prop="new_target1">
|
|
|
<template #default="scope">
|
|
|
- {{ scope.row.new_target <= scope.row.new_complete+scope.row.hand_new_complete ? 0 : scope.row.new_complete+scope.row.hand_new_complete-scope.row.new_target}}
|
|
|
+ {{ scope.row.new_target <= scope.row.new_complete ? 0 : scope.row.new_complete-scope.row.new_target}}
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column fixed="right" align="right" label="留存目标" width="75" prop="retained_target" />
|
|
|
- <el-table-column fixed="right" align="right" label="留存完成" width="75" prop="retained_complete" />
|
|
|
- <el-table-column fixed="right" align="right" label="剩余留存" width="75" prop="retained_target1">
|
|
|
+ <el-table-column label="留存目标" width="75" prop="retained_target" />
|
|
|
+ <el-table-column label="留存完成" width="75" prop="retained_complete" />
|
|
|
+ <el-table-column label="剩余留存" width="75" prop="retained_target1">
|
|
|
<template #default="scope">
|
|
|
- {{ scope.row.retained_target <= scope.row.retained_complete+scope.row.hand_retained_complete ? 0 : scope.row.retained_complete+scope.row.hand_retained_complete-scope.row.retained_target}}
|
|
|
+ {{ scope.row.retained_target <= scope.row.retained_complete ? 0 : scope.row.retained_complete-scope.row.retained_target}}
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column fixed="right" align="right" label="付费目标" width="75" prop="pay_target" />
|
|
|
- <el-table-column fixed="right" align="right" label="付费完成" width="75" prop="pay_complete" />
|
|
|
- <el-table-column fixed="right" align="right" label="剩余付费" width="75" prop="pay_target1">
|
|
|
+ <el-table-column label="付费目标" width="75" prop="pay_target" />
|
|
|
+ <el-table-column label="付费完成" width="75" prop="pay_complete" />
|
|
|
+ <el-table-column label="剩余付费" width="75" prop="pay_target1">
|
|
|
<template #default="scope">
|
|
|
- {{ scope.row.pay_target <= scope.row.pay_complete+scope.row.hand_pay_complete ? 0 : scope.row.pay_complete+scope.row.hand_pay_complete-scope.row.pay_target}}
|
|
|
+ {{ scope.row.pay_target <= scope.row.pay_complete ? 0 : scope.row.pay_complete-scope.row.pay_target}}
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column fixed="right" align="right" label="付费流水" width="75" prop="amount"/>
|
|
|
- <el-table-column fixed="right" align="right" label="手动新增" width="75" prop="hand_new_complete"/>
|
|
|
- <el-table-column fixed="right" align="right" label="手动留存" width="75" prop="hand_retained_complete"/>
|
|
|
- <el-table-column fixed="right" align="right" label="手动付费" width="75" prop="hand_pay_complete"/>
|
|
|
+ <el-table-column label="付费流水" width="75" prop="amount"/>
|
|
|
+ <el-table-column label="群控效率" width="75" prop="game_rate"/>
|
|
|
+ <el-table-column label="手动新增" width="75" prop="hand_new_complete"/>
|
|
|
+ <el-table-column label="手动留存" width="75" prop="hand_retained_complete"/>
|
|
|
+ <el-table-column label="手动付费" width="75" prop="hand_pay_complete"/>
|
|
|
+ <el-table-column label="手动付费金额" width="75" prop="hand_amount_total"/>
|
|
|
<el-table-column fixed="right" align="right" label="是否完成" width="75" prop="is_complete" >
|
|
|
<template #default="scope">
|
|
|
<div>
|
|
|
@@ -82,7 +99,7 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column fixed="right" align="right" label="操作" width="140">
|
|
|
+ <el-table-column fixed="right" label="操作" width="160">
|
|
|
<template #default="scope">
|
|
|
<el-button
|
|
|
icon="edit"
|
|
|
@@ -91,6 +108,20 @@
|
|
|
link
|
|
|
@click="editCardFunc(scope.row)"
|
|
|
>编辑</el-button>
|
|
|
+ <el-button
|
|
|
+ icon="edit"
|
|
|
+ size="small"
|
|
|
+ type="primary"
|
|
|
+ link
|
|
|
+ @click="resetFeeFunc(scope.row)"
|
|
|
+ >重置付费</el-button>
|
|
|
+ <el-button
|
|
|
+ icon="edit"
|
|
|
+ size="small"
|
|
|
+ type="primary"
|
|
|
+ link
|
|
|
+ @click="accountListFunc(scope.row)"
|
|
|
+ >可付费账号</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
@@ -232,6 +263,17 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
+ <el-dialog v-model="accountFormVisible" :before-close="closeAccount" :title="accountTitle">
|
|
|
+ <el-table :data="tableData1">
|
|
|
+ <el-table-column align="left" label="账号" show-overflow-tooltip min-width="160" prop="account" />
|
|
|
+ <el-table-column align="left" label="密码" show-overflow-tooltip min-width="160" prop="password" />
|
|
|
+ </el-table>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button size="small" @click="closeAccount">取 消</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
@@ -246,6 +288,9 @@
|
|
|
getGameTaskTargetById,
|
|
|
updateGameTaskTarget,
|
|
|
getGameTaskTargetList,
|
|
|
+ taskResetFee,
|
|
|
+ getFeeAccountList,
|
|
|
+ taskTargetExport
|
|
|
} from '@/api/task'
|
|
|
import {
|
|
|
selectResponsiblePerson,
|
|
|
@@ -253,6 +298,7 @@
|
|
|
import { toSQLLine } from '@/utils/stringFun'
|
|
|
import warningBar from '@/components/warningBar/warningBar.vue'
|
|
|
import { ref } from 'vue'
|
|
|
+ import dayjs from "dayjs";
|
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
|
|
|
const statusFiletr = (value) => {
|
|
|
@@ -482,6 +528,7 @@ const deleteBtn = async(btns, index) => {
|
|
|
const total = ref(0)
|
|
|
const pageSize = ref(10)
|
|
|
const tableData = ref([])
|
|
|
+ const tableData1 = ref([])
|
|
|
const searchInfo = ref({})
|
|
|
|
|
|
const onReset = () => {
|
|
|
@@ -493,6 +540,14 @@ const deleteBtn = async(btns, index) => {
|
|
|
page.value = 1
|
|
|
pageSize.value = 10
|
|
|
searchInfo.value.task_id = Number(searchInfo.value.task_id)
|
|
|
+ if (typeof searchInfo.value.date != "undefined") {
|
|
|
+ searchInfo.value.date[0] = dayjs(searchInfo.value.date[0]).format(
|
|
|
+ "YYYY-MM-DD"
|
|
|
+ );
|
|
|
+ searchInfo.value.date[1] = dayjs(searchInfo.value.date[1]).format(
|
|
|
+ "YYYY-MM-DD"
|
|
|
+ );
|
|
|
+ }
|
|
|
getTableData()
|
|
|
}
|
|
|
|
|
|
@@ -544,6 +599,50 @@ const deleteBtn = async(btns, index) => {
|
|
|
const handleSelectionChange = (val) => {
|
|
|
apis.value = val
|
|
|
}
|
|
|
+
|
|
|
+ const handleExcelExport = async() => {
|
|
|
+ var fileName = Date.parse(new Date()) + "-task.xlsx"
|
|
|
+ if(searchInfo.value.create_date == null){
|
|
|
+ let dt = new Date()
|
|
|
+ var y = dt.getFullYear()
|
|
|
+ var mt = (dt.getMonth() + 1).toString().padStart(2,'0')
|
|
|
+ var day = dt.getDate().toString().padStart(2,'0')
|
|
|
+ var timeStr = y + "-" + mt + "-" + day
|
|
|
+ fileName = timeStr + "-task.xlsx"
|
|
|
+ }else{
|
|
|
+ fileName = searchInfo.value.create_date + "-task.xlsx"
|
|
|
+ }
|
|
|
+ taskTargetExport({ page: page.value, pageSize: pageSize.value, ...searchInfo.value },fileName)
|
|
|
+}
|
|
|
+
|
|
|
+ const shortcuts = [
|
|
|
+ {
|
|
|
+ text: "今日",
|
|
|
+ value: () => {
|
|
|
+ const end = new Date();
|
|
|
+ const start = new Date();
|
|
|
+ return [start, end];
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ text: "最近一周",
|
|
|
+ value: () => {
|
|
|
+ const end = new Date();
|
|
|
+ const start = new Date();
|
|
|
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
|
|
|
+ return [start, end];
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ text: "最近一月",
|
|
|
+ value: () => {
|
|
|
+ const end = new Date();
|
|
|
+ const start = new Date();
|
|
|
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
|
|
|
+ return [start, end];
|
|
|
+ },
|
|
|
+ },
|
|
|
+];
|
|
|
|
|
|
const deleteVisible = ref(false)
|
|
|
|
|
|
@@ -611,6 +710,7 @@ const deleteBtn = async(btns, index) => {
|
|
|
|
|
|
const dialogTitle = ref('新增')
|
|
|
const dialogFormVisible = ref(false)
|
|
|
+ const accountFormVisible = ref(false)
|
|
|
const openDialog = (key) => {
|
|
|
switch (key) {
|
|
|
case 'addCard':
|
|
|
@@ -631,6 +731,10 @@ const deleteBtn = async(btns, index) => {
|
|
|
initForm()
|
|
|
dialogFormVisible.value = false
|
|
|
}
|
|
|
+
|
|
|
+ const closeAccount = () => {
|
|
|
+ accountFormVisible.value = false
|
|
|
+ }
|
|
|
|
|
|
const editCardFunc = async(row) => {
|
|
|
const res = await getGameTaskTargetById({ id: row.task_id, create_date:row.create_date })
|
|
|
@@ -638,7 +742,15 @@ const deleteBtn = async(btns, index) => {
|
|
|
form.value = res.data
|
|
|
openDialog('edit')
|
|
|
}
|
|
|
-
|
|
|
+ }
|
|
|
+
|
|
|
+ const accountListFunc = async(row) => {
|
|
|
+ const res = await getFeeAccountList({ id: row.task_id, create_date:row.create_date })
|
|
|
+ if (res.code === 0) {
|
|
|
+ tableData1.value = res.data
|
|
|
+ dialogTitle.value = '可付费账号'
|
|
|
+ accountFormVisible.value = true
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
const enterDialog = async() => {
|
|
|
@@ -687,22 +799,19 @@ const deleteBtn = async(btns, index) => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- const deleteApiFunc = async(row) => {
|
|
|
- ElMessageBox.confirm('此操作将永久删除所有角色下该api, 是否继续?', '提示', {
|
|
|
+ const resetFeeFunc = async(row) => {
|
|
|
+ ElMessageBox.confirm('此操作将重置付费, 是否继续?', '提示', {
|
|
|
confirmButtonText: '确定',
|
|
|
cancelButtonText: '取消',
|
|
|
type: 'warning'
|
|
|
})
|
|
|
.then(async() => {
|
|
|
- const res = await deleteGameTask(row)
|
|
|
+ const res = await taskResetFee(row)
|
|
|
if (res.code === 0) {
|
|
|
ElMessage({
|
|
|
type: 'success',
|
|
|
- message: '删除成功!'
|
|
|
+ message: '重置成功!'
|
|
|
})
|
|
|
- if (tableData.value.length === 1 && page.value > 1) {
|
|
|
- page.value--
|
|
|
- }
|
|
|
getTableData()
|
|
|
}
|
|
|
})
|