|
|
@@ -23,78 +23,128 @@
|
|
|
</el-form>
|
|
|
</div>
|
|
|
<div class="gva-table-box">
|
|
|
- <el-table :data="tableData" @sort-change="sortChange" @selection-change="handleSelectionChange" height="500" style="width: 100%">
|
|
|
+ <el-table border
|
|
|
+ :data="tableData"
|
|
|
+ :span-method="objectSpanMethod"
|
|
|
+ @sort-change="sortChange"
|
|
|
+ @selection-change="handleSelectionChange"
|
|
|
+ height="500"
|
|
|
+ header-align="center"
|
|
|
+ >
|
|
|
<el-table-column
|
|
|
type="selection"
|
|
|
width="55"
|
|
|
/>
|
|
|
- <el-table-column fixed="left" align="left" label="游戏id" min-width="90" prop="game_id" sortable="custom" />
|
|
|
+ <el-table-column fixed="left" align="left" label="游戏id" min-width="70" prop="game_id" sortable="custom" />
|
|
|
<el-table-column fixed="left" align="left" label="日期" min-width="90" prop="create_date" />
|
|
|
- <el-table-column fixed="left" align="left" label="脚本负责人" min-width="90" prop="operator" />
|
|
|
- <el-table-column fixed="left" align="left" label="类型" min-width="60" prop="type" sortable="custom">
|
|
|
+ <el-table-column fixed="left" align="left" label="脚本负责人" min-width="70" prop="operator" />
|
|
|
+ <el-table-column fixed="left" align="left" label="类型" min-width="70" prop="type">
|
|
|
<template #default="scope">
|
|
|
<div>
|
|
|
{{ typeFiletr(scope.row.type) }}
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="拉取账号">
|
|
|
- <el-table-column prop="pull_account_ok" label="成功" width="60" />
|
|
|
- <el-table-column prop="pull_account_fail" label="失败" width="60" />
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="启动代理">
|
|
|
- <el-table-column prop="start_proxy_ok" label="成功" width="60" />
|
|
|
- <el-table-column prop="start_proxy_fail" label="失败" width="60" />
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="模拟器启动">
|
|
|
- <el-table-column prop="simulator_start_ok" label="成功" width="60" />
|
|
|
- <el-table-column prop="start_proxy_fail" label="失败" width="60" />
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="网络检查">
|
|
|
- <el-table-column prop="network_check_ok" label="成功" width="60" />
|
|
|
- <el-table-column prop="network_check_fail" label="失败" width="60" />
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="启动游戏">
|
|
|
- <el-table-column prop="enter_start_game" label="进入" width="60" />
|
|
|
- <el-table-column prop="game_start_ok" label="成功" width="60" />
|
|
|
- <el-table-column prop="game_start_fail" label="失败" width="60" />
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="登录游戏">
|
|
|
- <el-table-column prop="enter_login" label="进入" width="60" />
|
|
|
- <el-table-column prop="login_ok" label="成功" width="60" />
|
|
|
- <el-table-column prop="login_fail" label="失败" width="60" />
|
|
|
+ <el-table-column fixed="left" align="center" label="任务总数" min-width="70" prop="target_num" />
|
|
|
+ <el-table-column fixed="left" align="center" label="下发账号" min-width="70" prop="issued_account" />
|
|
|
+ <el-table-column label="留存账号" align="center" min-width="100" >
|
|
|
+ <el-table-column label="能付费" align="center">
|
|
|
+ <template #default="scope">
|
|
|
+ {{ scope.row.retained_account_num }}
|
|
|
+ <el-divider style="margin:0" />
|
|
|
+ {{ scope.row.fee_account_num}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="实名认证">
|
|
|
- <el-table-column prop="enter_authentication" label="进入" width="60" />
|
|
|
- <el-table-column prop="authentication_ok" label="成功" width="60" />
|
|
|
- <el-table-column prop="authentication_fail" label="失败" width="60" />
|
|
|
+ <el-table-column label="下拉成功率" align="center" min-width="100">
|
|
|
+ <el-table-column label="拉取账号" align="center" >
|
|
|
+ <el-table-column prop="pull_account_ok,pull_account_fail" label="下发账号" align="center" min-width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ {{ scope.row.pull_account_ok }}
|
|
|
+ <el-divider style="margin:0 5px" direction="vertical" />
|
|
|
+ {{ scope.row.issued_account}}
|
|
|
+ <el-divider style="margin:0" />
|
|
|
+ {{ scope.row.pull_account_ok == 0 || scope.row.issued_account == 0 ? 0 + '%' : Math.round(scope.row.pull_account_ok/scope.row.issued_account * 10000) / 100 + '%'}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table-column>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="选区">
|
|
|
- <el-table-column prop="enter_constituency" label="进入" width="60" />
|
|
|
- <el-table-column prop="constituency_ok" label="成功" width="60" />
|
|
|
- <el-table-column prop="constituency_fail" label="失败" width="60" />
|
|
|
+ <el-table-column label="启动成功率" align="center" min-width="100">
|
|
|
+ <el-table-column label="启动成功" align="center">
|
|
|
+ <el-table-column prop="game_start_ok,pull_account_ok" label="拉取成功" align="center" min-width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ {{ scope.row.simulator_start_ok }}
|
|
|
+ <el-divider style="margin:0 5px" direction="vertical" />
|
|
|
+ {{ scope.row.pull_account_ok}}
|
|
|
+ <el-divider style="margin:0" />
|
|
|
+ {{ scope.row.pull_account_ok == 0 ? 0 + '%' : Math.round(scope.row.simulator_start_ok/scope.row.pull_account_ok * 10000) / 100 + '%'}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table-column>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="角色">
|
|
|
- <el-table-column prop="has_role" label="有" width="60" />
|
|
|
- <el-table-column prop="not_role" label="无" width="60" />
|
|
|
+ <el-table-column label="主线成功率" align="center" min-width="100">
|
|
|
+ <el-table-column label="进入主线" align="center">
|
|
|
+ <el-table-column prop="enter_main,game_start_ok" label="启动成功" align="center" min-width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ {{ scope.row.enter_main }}
|
|
|
+ <el-divider style="margin:0 5px" direction="vertical" />
|
|
|
+ {{ scope.row.game_start_ok}}
|
|
|
+ <el-divider style="margin:0" />
|
|
|
+ {{ scope.row.enter_game == 0 || scope.row.game_start_ok == 0 ? 0 + '%' : Math.round(scope.row.enter_game/scope.row.game_start_ok * 10000) / 100 + '%'}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table-column>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="进入游戏">
|
|
|
- <el-table-column prop="enter_game" label="进入" width="60" />
|
|
|
- <el-table-column prop="enter_game_ok" label="成功" width="60" />
|
|
|
- <el-table-column prop="enter_game_fail" label="失败" width="60" />
|
|
|
+ <el-table-column label="任务成功率" align="center" min-width="100">
|
|
|
+ <el-table-column label="进入主线" align="center">
|
|
|
+ <el-table-column prop="enter_main,pull_account_fail" label="总任务数" align="center" min-width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ {{ scope.row.enter_main }}
|
|
|
+ <el-divider style="margin:0 5px" direction="vertical" />
|
|
|
+ {{ scope.row.target_num}}
|
|
|
+ <el-divider style="margin:0" />
|
|
|
+ {{ scope.row.enter_game == 0 || scope.row.target_num == 0 ? 0 + '%' : Math.round(scope.row.enter_main/scope.row.target_num * 10000) / 100 + '%'}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table-column>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="主线教程">
|
|
|
- <el-table-column prop="enter_main" label="进入" width="60" />
|
|
|
- <el-table-column prop="enter_main_ok" label="成功" width="60" />
|
|
|
- <el-table-column prop="enter_main_fail" label="失败" width="60" />
|
|
|
+ <el-table-column label="微信扫码率" align="center" min-width="100">
|
|
|
+ <el-table-column label="任务总数" align="center">
|
|
|
+ <el-table-column prop="pull_account_fail,pull_account_fail" label="扫码总数" align="center" min-width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ {{ scope.row.target_num }}
|
|
|
+ <el-divider style="margin:0 5px" direction="vertical" />
|
|
|
+ {{ scope.row.new_scanning_code}}
|
|
|
+ <el-divider style="margin:0" />
|
|
|
+ {{ scope.row.target_num == 0 || scope.row.new_scanning_code == 0 ? 0 + '%' : Math.round(scope.row.target_num/scope.row.new_scanning_code * 10000) / 100 + '%'}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table-column>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="付费">
|
|
|
- <el-table-column prop="enter_fee" label="进入" width="60" />
|
|
|
- <el-table-column prop="fee_ok" label="成功" width="60" />
|
|
|
- <el-table-column prop="fee_fail" label="失败" width="60" />
|
|
|
+ <el-table-column label="订单完成率" align="center" min-width="100">
|
|
|
+ <el-table-column label="付费成功" align="center">
|
|
|
+ <el-table-column prop="fee_ok,pull_account_fail" label="下发付费" align="center" min-width="100">
|
|
|
+ <template #default="scope">
|
|
|
+ {{ scope.row.fee_ok }}
|
|
|
+ <el-divider style="margin:0 5px" direction="vertical" />
|
|
|
+ {{ scope.row.order_create}}
|
|
|
+ <el-divider style="margin:0" />
|
|
|
+ {{ scope.row.fee_ok == 0 || scope.row.order_create == 0 ? 0 + '%' : Math.round(scope.row.fee_ok/scope.row.order_create * 10000) / 100 + '%'}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table-column>
|
|
|
</el-table-column>
|
|
|
+ <el-table-column align="center" label="付费任务" min-width="70" prop="pay_target"/>
|
|
|
+ <el-table-column align="center" label="付费完成" min-width="70" prop="pay_complete"/>
|
|
|
+ <el-table-column align="center" label="下发付费" min-width="70" prop="order_create"/>
|
|
|
+ <el-table-column align="center" label="订单数" min-width="70" prop="order_success"/>
|
|
|
+ <el-table-column align="center" label="付费成功" min-width="70" prop="fee_ok"/>
|
|
|
+
|
|
|
+
|
|
|
<el-table-column label="封号" min-width="60" prop="ban_off" />
|
|
|
<el-table-column label="冻结" min-width="60" prop="freeze" />
|
|
|
+ <el-table-column prop="has_role" label="新增有角色" width="60" />
|
|
|
+ <el-table-column prop="not_role" label="活跃无角色" width="60" />
|
|
|
</el-table>
|
|
|
<div class="gva-pagination">
|
|
|
<el-pagination
|
|
|
@@ -135,7 +185,7 @@
|
|
|
logStatistics,
|
|
|
} from '@/api/log'
|
|
|
import { toSQLLine } from '@/utils/stringFun'
|
|
|
- import { ref } from 'vue'
|
|
|
+ import { createElementBlock, ref } from 'vue'
|
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
import warningBar from '@/components/warningBar/warningBar.vue'
|
|
|
|
|
|
@@ -160,7 +210,7 @@
|
|
|
const tableData = ref([])
|
|
|
const tableFailData = ref([])
|
|
|
const searchInfo = ref({})
|
|
|
-
|
|
|
+ let spanArr = []
|
|
|
const onReset = () => {
|
|
|
searchInfo.value = {}
|
|
|
}
|
|
|
@@ -193,6 +243,11 @@
|
|
|
return target && `${target.label}`
|
|
|
}
|
|
|
|
|
|
+const renderheader = ({ column, $index }) => {
|
|
|
+ console.log(column)
|
|
|
+ console.log($index)
|
|
|
+}
|
|
|
+
|
|
|
const typeOptions = ref([
|
|
|
{
|
|
|
value: 0,
|
|
|
@@ -217,6 +272,11 @@
|
|
|
getTableData()
|
|
|
}
|
|
|
|
|
|
+ const headerStyle = () => {
|
|
|
+ return {
|
|
|
+ fontSize:"12px"
|
|
|
+ }
|
|
|
+ }
|
|
|
// 排序
|
|
|
const sortChange = ({ prop, order }) => {
|
|
|
if (prop) {
|
|
|
@@ -228,6 +288,38 @@
|
|
|
}
|
|
|
getTableData()
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ const getSpanArr = (data) => {
|
|
|
+ spanArr = []
|
|
|
+ var pos = 0
|
|
|
+ for (var i = 0; i < data.length; i++) {
|
|
|
+ if (i === 0) {
|
|
|
+ spanArr.push(1);
|
|
|
+ pos = 0
|
|
|
+ } else {
|
|
|
+ if (data[i].game_id === data[i - 1].game_id) {
|
|
|
+ spanArr[pos] += 1;
|
|
|
+ spanArr.push(0);
|
|
|
+ } else {
|
|
|
+ spanArr.push(1);
|
|
|
+ pos = i;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ console.log(spanArr)
|
|
|
+ }
|
|
|
+
|
|
|
+ const objectSpanMethod = (row) => {
|
|
|
+ if (row.columnIndex === 1 || row.columnIndex === 3 || row.columnIndex === 7 || row.columnIndex === 0 || row.columnIndex === 2 || row.columnIndex === 12|| row.columnIndex === 14|| row.columnIndex === 15|| row.columnIndex === 16|| row.columnIndex === 17) {
|
|
|
+ const rowspan = spanArr[row.rowIndex];
|
|
|
+ const colspan = rowspan > 0 ? 1 : 0;
|
|
|
+ return {
|
|
|
+ rowspan: rowspan,
|
|
|
+ colspan: colspan
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
// 查询
|
|
|
const getTableData = async() => {
|
|
|
@@ -237,6 +329,7 @@
|
|
|
total.value = table.data.total
|
|
|
page.value = table.data.page
|
|
|
pageSize.value = table.data.pageSize
|
|
|
+ getSpanArr(table.data.list)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -338,6 +431,9 @@
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
+ .el-table .cell {
|
|
|
+ white-space: pre-wrap; /*这是重点。文本换行*/
|
|
|
+}
|
|
|
.button-box {
|
|
|
padding: 10px 20px;
|
|
|
.el-button {
|