|
|
@@ -51,7 +51,8 @@
|
|
|
<el-table-column prop="communicationOperator" label="通信运营商" width="130" />
|
|
|
<el-table-column prop="loginRecordList" label="用户设备" width="200">
|
|
|
<template #default="scope">
|
|
|
- {{ scope.row.loginRecordList ? scope.row.loginRecordList[0].deviceBrand : '' }} {{ scope.row.loginRecordList?scope.row.loginRecordList[0].deviceModel:'' }}
|
|
|
+ {{ scope.row.loginRecordList ? scope.row.loginRecordList[0].deviceBrand : '' }} {{
|
|
|
+ scope.row.loginRecordList ? scope.row.loginRecordList[0].deviceModel : '' }}
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column prop="deviceRepeatCount" label="设备重复数量" width="110" />
|
|
|
@@ -123,43 +124,13 @@
|
|
|
</el-form>
|
|
|
</Layer>
|
|
|
|
|
|
- <Layer :layer="ecpmLayer" @confirm="ecpmLayer.show = false" @close="ecpmLayer.show = false">
|
|
|
- <From :form-items="dynamicFormItems1" @formSubmitted="handleFormSubmitted1" @formReset="handleFormReset1" />
|
|
|
- <el-divider></el-divider>
|
|
|
- <Table :showPage="false" ref="ecpmTable" :data="ecpmData" :height="ecpmLayer.height">
|
|
|
- <el-table-column prop="userId" label="用户ID" width="120" />
|
|
|
- <el-table-column prop="adSourceId" label="广告源ID" width="100" />
|
|
|
- <el-table-column prop="beginTime" label="开始时间" width="100" />
|
|
|
- <el-table-column prop="finishTime" label="完成时间" width="100" />
|
|
|
- <el-table-column prop="ecpm" label="ECPM" width="100">
|
|
|
- <template #default="scope">
|
|
|
- {{ roundPrice(scope.row.ecpm) || 0.00 }}
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="adSourceType" label="广告源类型" width="160">
|
|
|
- <template #default="scope">
|
|
|
- {{ getDictionaryName('ad_source_type', scope.row.adSourceType) }}
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="adSourceIndex" label="竞价匹配优先级" width="130" />
|
|
|
- <el-table-column prop="networkFormId" label="广告平台ID" width="100" />
|
|
|
- <el-table-column prop="networkName" label="广告平台名称" width="120" />
|
|
|
- <el-table-column prop="networkPlacementId" label="广告平台广告位ID" width="160" />
|
|
|
- <el-table-column prop="nickName" label="用户昵称" min-width="100" />
|
|
|
- <el-table-column prop="placementId" label="广告位ID" width="100" />
|
|
|
- <el-table-column prop="recordId" label="广告记录ID" width="160" />
|
|
|
- <el-table-column prop="revenue" label="收益" width="100">
|
|
|
- <template #default="scope">
|
|
|
- {{ roundPrice(scope.row.revenue) || 0.00 }}
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </Table>
|
|
|
- <template #bottom>
|
|
|
- <div style="position: absolute;bottom: 0px;right: 10px;">
|
|
|
- 共:{{ ecpmData.length }}
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </Layer>
|
|
|
+ <el-dialog v-model="ecpmLayer.show" :title="`查看用户《${ecpmData.nickName}》的ECPM`" :width="ecpmLayer.width" align-center center
|
|
|
+ :fullscreen="isFullscreen">
|
|
|
+ <el-icon class=" full-icon" @click="isFullscreen = !isFullscreen">
|
|
|
+ <FullScreen />
|
|
|
+ </el-icon>
|
|
|
+ <EcpmDialog v-if="ecpmLayer.show" v-model:isFullscreen="isFullscreen" :ecpmData="ecpmData" />
|
|
|
+ </el-dialog>
|
|
|
|
|
|
<!-- 审核备注 -->
|
|
|
<Layer :layer="layer2" @confirm="submit2(ruleForm2)" @close="layer2.show = false">
|
|
|
@@ -184,6 +155,7 @@ import { onBeforeMount, ref, reactive, nextTick } from "vue";
|
|
|
import From from "@/components/from/index.vue";
|
|
|
import Table from "@/components/table/index.vue";
|
|
|
import Layer from '@/components/layer/index.vue'
|
|
|
+import { FullScreen } from '@element-plus/icons'
|
|
|
import { ElMessage, ElLoading } from 'element-plus'
|
|
|
import {
|
|
|
getUserList, riskBannedUser, riskLockUser, appUserEcpm, getRevenueByTime,
|
|
|
@@ -196,6 +168,7 @@ import { convertUTCToBeijing, roundPrice, getTodayRangeLocal } from '@/utils/ind
|
|
|
import { useGetDictList } from '@/hooks/useGetDictList.js'
|
|
|
import { useStore } from 'vuex'
|
|
|
import { exportToExcel } from '@/utils/exportExcel.js'
|
|
|
+import EcpmDialog from "./components/ecpmDialog.vue";
|
|
|
|
|
|
const store = useStore()
|
|
|
const { loadDictData, getOptions, getDictionaryName } = useGetDictList();
|
|
|
@@ -223,7 +196,6 @@ const formSearch = ref({
|
|
|
});
|
|
|
|
|
|
const dynamicFormItems = ref([])
|
|
|
-const dynamicFormItems1 = ref([])
|
|
|
|
|
|
onBeforeMount(() => {
|
|
|
settingData()
|
|
|
@@ -270,16 +242,6 @@ const settingData = async () => {
|
|
|
{ label: '注册时间结束', prop: 'registryTimeEnd', type: 'date' },
|
|
|
]
|
|
|
|
|
|
- // 查看ECPM
|
|
|
- dynamicFormItems1.value = [
|
|
|
- {
|
|
|
- label: '广告源类型',
|
|
|
- prop: 'adsourceType',
|
|
|
- type: 'select',
|
|
|
- labelWidth: 100,
|
|
|
- options: getOptions('ad_source_type'),
|
|
|
- },
|
|
|
- ]
|
|
|
// 设置动态选项
|
|
|
getApiOptions()
|
|
|
})
|
|
|
@@ -666,45 +628,17 @@ const lockUser = async (row) => {
|
|
|
}
|
|
|
|
|
|
// 查看ECPM
|
|
|
+const ecpmData = ref({})
|
|
|
+const isFullscreen = ref(false)
|
|
|
const ecpmLayer = ref({
|
|
|
show: false,
|
|
|
title: "查看ECPM",
|
|
|
showButton: true,
|
|
|
width: '95vw',
|
|
|
- height: '60vh'
|
|
|
});
|
|
|
|
|
|
-
|
|
|
-const formSearch1 = ref({
|
|
|
- appId: undefined, // 应用ID
|
|
|
- userId: undefined, //用户ID
|
|
|
- adsourceType: undefined,// 广告源类型
|
|
|
-});
|
|
|
-
|
|
|
-const handleFormSubmitted1 = (formData) => {
|
|
|
- // console.log("接收到子组件传递的数据", formData);
|
|
|
- formSearch1.value.adsourceType = formData.adsourceType;
|
|
|
-
|
|
|
- lookEcpm();
|
|
|
-};
|
|
|
-const handleFormReset1 = () => {
|
|
|
- delete formSearch1.value.adsourceType // 渠道来源
|
|
|
-
|
|
|
- lookEcpm();
|
|
|
-};
|
|
|
-
|
|
|
-const ecpmTable = ref(null)
|
|
|
-const ecpmData = ref([])
|
|
|
-
|
|
|
const lookEcpm = async (row) => {
|
|
|
- if (row) {
|
|
|
- formSearch1.value.appId = row.appId
|
|
|
- formSearch1.value.userId = row.userId
|
|
|
- formSearch1.value.adsourceType = undefined
|
|
|
- }
|
|
|
- ecpmData.value = []
|
|
|
- let res = await appUserEcpm({ ...formSearch1.value })
|
|
|
- ecpmData.value = res.data
|
|
|
+ ecpmData.value = row
|
|
|
ecpmLayer.value.show = true
|
|
|
}
|
|
|
|
|
|
@@ -887,4 +821,13 @@ const tableHeader = {
|
|
|
display: flex;
|
|
|
margin: 10px 0 -10px 30px;
|
|
|
}
|
|
|
+
|
|
|
+.full-icon {
|
|
|
+ position: absolute;
|
|
|
+ right: 40px;
|
|
|
+ top: 15px;
|
|
|
+ cursor: pointer;
|
|
|
+ padding: 8px;
|
|
|
+ border-radius: 5px;
|
|
|
+}
|
|
|
</style>
|