소스 검색

应用管理列表
广告渠道管理列表
广告位管理列表

marxjaw 4 달 전
부모
커밋
cfee177e11

+ 8 - 0
src/api/formworkErection.js

@@ -15,6 +15,14 @@ export function channelList(data) {
         data
     })
 }
+// 获取广告渠道列表
+export function placementList(data) {
+    return request({
+        url: '/agent-service/placement/list',
+        method: 'post',
+        data
+    })
+}
 
 // 新增广告渠道
 export function channelAddOne(data) {

+ 34 - 26
src/directive/copy/index.js

@@ -1,33 +1,41 @@
 /**
  * v-copy
  * 复制某个值至剪贴板
- * 接收参数:string类型/Ref<string>类型/Reactive<string>类型
+ * 支持 string、ref(string)、reactive(string)
  */
 import { ElMessage } from 'element-plus'
+import { isRef, unref } from 'vue'
+
 const directive = {
-  mounted(el, binding) {
-    el.copyData = binding.value
-    // 将事件处理函数挂载到元素上,以便在卸载时移除
-    el.__handleClick__ = handleClick
-    el.addEventListener('click', el.__handleClick__)
-  },
-  updated(el, binding) {
-    el.copyData = binding.value
-  },
-  beforeUnmount(el) {
-    el.removeEventListener('click', el.__handleClick__)
-  }
+    mounted(el, binding) {
+        const handleClick = async () => {
+            try {
+                const value = unref(binding.value)
+                if (typeof value !== 'string') {
+                    console.warn('v-copy 指令的值必须是字符串或字符串的 ref/reactive')
+                    return
+                }
+
+                await navigator.clipboard.writeText(value)
+                ElMessage.success('复制成功')
+            } catch (err) {
+                console.error('复制失败:', err)
+                ElMessage.error('复制失败')
+            }
+        }
+
+        el.__handleClick__ = handleClick
+        el.addEventListener('click', handleClick)
+    },
+
+    updated(el, binding) {
+        // updated 生命周期中无需更新事件,只需确保绑定值是最新的,handleClick 每次读取 unref 即可
+    },
+
+    beforeUnmount(el) {
+        el.removeEventListener('click', el.__handleClick__)
+        delete el.__handleClick__
+    }
 }
-function handleClick(ev) {
-  let input = document.createElement('input')
-  input.value = this.copyData.toLocaleString()
-  document.body.appendChild(input)
-  input.select()
-  document.execCommand('Copy')
-  document.body.removeChild(input)
-  ElMessage({
-    type: 'success',
-    message: '复制成功'
-  })
-}
-export default directive
+
+export default directive

+ 1 - 1
src/hooks/useGetDictList.js

@@ -130,7 +130,7 @@ export function useGetDictList() {
                 entry.typeCode === typeCode &&
                 entry.dictionaryCode === String(dictionaryCode)
         );
-        return item ? item.dictionaryName : '123';
+        return item ? item.dictionaryName : '暂无数据';
     }
 
     /**

+ 3 - 3
src/router/modules/formworkErection.js

@@ -6,18 +6,18 @@ const route = [
         path: '/formworkErection',
         component: Layout,
         redirect: '/formworkErection/agencyAdmin/index',
-        meta: { title: '搭建模板', icon: 'sfont system-zidingyi' },
+        meta: { title: '广告变现', icon: 'sfont system-zidingyi' },
         children: [
             {
                 path: 'agencyAdmin/index',
                 name: 'agencyAdmin',
-                component: createNameComponent(() => import('@/views/main/formworkErection/agencyAdmin.vue')),
+                component: createNameComponent(() => import('@/views/main/formworkErection/appAdmin.vue')),
                 meta: { title: '应用管理' },
             },
             {
                 path: 'channelType/index',
                 name: 'channelType',
-                component: createNameComponent(() => import('@/views/main/formworkErection/channelType.vue')),
+                component: createNameComponent(() => import('@/views/main/formworkErection/placementAdmin.vue')),
                 meta: { title: '广告位管理' },
             },
             {

+ 2 - 2
src/router/permission/backConfig.js

@@ -7,8 +7,8 @@ const dashboard = {
 }
 
 const formworkErection = {
-  agencyAdmin: createNameComponent(() => import('@/views/main/formworkErection/agencyAdmin.vue')),
-  channelType: createNameComponent(() => import('@/views/main/formworkErection/channelType.vue')),
+  agencyAdmin: createNameComponent(() => import('@/views/main/formworkErection/appAdmin.vue')),
+  channelType: createNameComponent(() => import('@/views/main/formworkErection/placementAdmin.vue')),
   channelAdmin: createNameComponent(() => import('@/views/main/formworkErection/channelAdmin.vue')),
 }
 

+ 13 - 11
src/views/main/formworkErection/agencyAdmin.vue → src/views/main/formworkErection/appAdmin.vue

@@ -12,9 +12,14 @@
         <el-table-column prop="appName" label="应用名称" />
         <el-table-column prop="appKey" label="应用秘钥" >
           <template #default="scope">
-            <el-icon v-if="showKey" @click="changeShowKey"><View /></el-icon>
-            <el-icon v-if="!showKey"  @click="changeShowKey"><Hide /></el-icon>
-            <el-icon v-if="showKey" v-copy="" ><CopyDocument /></el-icon>
+            <label>{{scope.row.showKey?scope.row.appKey: "******"}}</label>
+            <span style="margin-left: 15px">
+              <el-icon v-if="scope.row.showKey" @click="()=>{scope.row.showKey = !scope.row.showKey}"><View /></el-icon>
+              <el-icon v-if="!scope.row.showKey"  @click="()=>{scope.row.showKey = !scope.row.showKey}"><Hide /></el-icon>
+            </span>
+            <span style="margin-left: 5px">
+              <el-icon v-copy="scope.row.appKey" ><CopyDocument /></el-icon>
+            </span>
           </template>
         </el-table-column>
         <el-table-column prop="channelName" label="广告渠道名称" width="150" />
@@ -47,9 +52,9 @@
               <el-button class="button-item" type="primary" style="margin-bottom: 5px" @click="edit(scope.row)">
                 编辑
               </el-button>
-              <el-popconfirm placement="left" title="确认删除该用户?" @confirm="removeAgency(scope.row)">
+              <el-popconfirm placement="left" title="确认删除该数据?" @confirm="removeAgency(scope.row)">
                 <template #reference>
-                  <el-button class="button-item" style="margin-bottom: 5px" type="warning">删除代理</el-button>
+                  <el-button class="button-item" style="margin-bottom: 5px" type="warning">删除</el-button>
                 </template>
               </el-popconfirm>
             </div>
@@ -108,11 +113,8 @@
   const store = useStore();
   const { dictData, loadDictData, getOptions, getDictionaryName } = useGetDictList();
   const form = ref(null);
-  const tableData = ref([]);
-  const showKey = ref(false);
-  const changeShowKey = ()=>{
-    showKey.value = !showKey.value
-  }
+  const tableData = ref([
+  ]);
 
   // 分页参数, 供table使用
   const page = reactive({
@@ -259,7 +261,7 @@
   // 弹窗
   const layer = ref({
     show: false,
-    title: "新增代理",
+    title: "新增App",
     showButton: true,
     width: "50vw",
     edit: false,

+ 14 - 76
src/views/main/formworkErection/channelAdmin.vue

@@ -8,82 +8,24 @@
     <div class="layout-container">
       <Table @getTableData="changeTableData" v-model:page="page" ref="table" :data="tableData"
         @selection-change="handleSelectionChange">
-        <el-table-column prop="appId" label="渠道ID" width="150" />
-        <el-table-column prop="appName" label="渠道名称" width="100" />
-        <el-table-column prop="appType" label="渠道类型" width="100" />
-        <el-table-column prop="channelOrigin" label="所属代理" width="90">
+        <el-table-column prop="channelId" label="渠道ID" />
+        <el-table-column prop="channelName" label="渠道名称" />
+        <el-table-column prop="loginType" label="登录类型"  >
           <template #default="scope">
-            {{ getDictionaryName('channel_origin', scope.row.channelOrigin) }}
+            {{getDictionaryName("login_type",scope.row.loginType)}}
           </template>
         </el-table-column>
-        <el-table-column prop="channelType" label="游戏名字" width="100">
+        <el-table-column prop="channelAccount" label="渠道账号"  />
+        <el-table-column prop="channelPwd" label="渠道密码" />
+        <el-table-column prop="channelStatus" label="渠道状态" >
           <template #default="scope">
-            {{ getDictionaryName('channel_type', Number(scope.row.channelType)) }}
+            {{getDictionaryName("channel_status", scope.row.channelStatus)}}
           </template>
         </el-table-column>
-        <el-table-column prop="communicationOperator" label="APP应用" width="100" />
-        <el-table-column prop="deviceRepeatCount" label="游戏分类" width="110" />
-        <el-table-column prop="ipRepeatCount" label="APP包" width="100" />
-        <el-table-column prop="lastLoginIp" label="最低版本" width="150" />
-        <el-table-column prop="lastLoginTime" label="打包版本" width="160">
-          <template #default="scope">
-            {{ convertUTCToBeijing(scope.row.lastLoginTime) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="loginDays" label="打包code" width="100" />
-        <el-table-column prop="nickName" label="更新提示" width="90" />
-        <el-table-column prop="pointsBalance" label="更新方式" width="90" />
-        <el-table-column prop="pointsTotal" label="取回原数据" width="100" />
-        <el-table-column prop="redPacketAmount" label="分成" width="90" />
-        <el-table-column prop="redPacketBalance" label="显示提示语" width="100" />
-        <el-table-column prop="redPacketBalance" label="日志级别" width="90" />
-        <el-table-column prop="redPacketBalance" label="实名" width="90" />
-        <el-table-column prop="redPacketBalance" label="登录" width="90" />
-        <el-table-column prop="redPacketBalance" label="异常玩家登录" width="110" />
-        <el-table-column prop="redPacketBalance" label="使用巨量SDK" width="120" />
-        <el-table-column prop="redPacketBalance" label="使用快手SDK" width="120" />
-        <el-table-column prop="redPacketBalance" label="一级风控" width="90" />
-        <el-table-column prop="redPacketBalance" label="允许手机号登录" width="130" />
-        <el-table-column prop="redPacketBalance" label="微信登录" width="90" />
-        <el-table-column prop="redPacketBalance" label="游客登录" width="90" />
-        <el-table-column prop="redPacketBalance" label="限IMEI登录" width="100" />
-        <el-table-column prop="redPacketBalance" label="云机拦截" width="90" />
-        <el-table-column prop="redPacketBalance" label="全服任务开关" width="110" />
-        <el-table-column prop="redPacketBalance" label="提现加Q群" width="100" />
-        <el-table-column prop="redPacketBalance" label="提现校验" width="90" />
-        <el-table-column prop="redPacketBalance" label="展示底部导航" width="110" />
-        <el-table-column prop="redPacketBalance" label="显示提现入口" width="110" />
-        <el-table-column prop="redPacketBalance" label="显示QQ群" width="90" />
-        <el-table-column prop="redPacketBalance" label="显示邀新" width="90" />
-        <el-table-column prop="redPacketBalance" label="邀请方式" width="90" />
-        <el-table-column prop="redPacketBalance" label="邀请绑定方式" width="110" />
-        <el-table-column prop="redPacketBalance" label="显示积分" width="90" />
-        <el-table-column prop="redPacketBalance" label="启动模式" width="90" />
-        <el-table-column prop="redPacketBalance" label="是否跳过权限获取" width="140" />
-        <el-table-column prop="redPacketBalance" label="权限没有完全授予时允许登陆" width="220" />
-        <el-table-column prop="redPacketBalance" label="看广告" width="90" />
-        <el-table-column prop="redPacketBalance" label="异常玩家是否允许看广告" width="180" />
-        <el-table-column prop="redPacketBalance" label="获取定位" width="90" />
-        <el-table-column prop="redPacketBalance" label="读取应用列表" width="110" />
-        <el-table-column prop="redPacketBalance" label="读取sim卡状态" width="120" />
-        <el-table-column prop="redPacketBalance" label="读取定位信息" width="110" />
-        <el-table-column prop="redPacketBalance" label="读取storage信息" width="140" />
-        <el-table-column prop="redPacketBalance" label="读取host" width="90" />
-        <el-table-column prop="redPacketBalance" label="读取DNS" width="90" />
-        <el-table-column prop="redPacketBalance" label="读取无障碍服务" width="130" />
-        <el-table-column prop="redPacketBalance" label="读取VPN状态" width="110" />
-        <el-table-column prop="redPacketBalance" label="后台切前台是否检查" width="160" />
-        <el-table-column prop="redPacketBalance" label="是否开启短视频" width="130" />
-        <el-table-column prop="redPacketBalance" label="充值" width="90" />
-        <el-table-column prop="redPacketBalance" label="更换包名目标渠道" width="140" />
-        <el-table-column prop="redPacketBalance" label="兑换" width="90" />
-        <el-table-column prop="redPacketBalance" label="无操作X秒弹插屏" width="140" />
-        <el-table-column prop="redPacketBalance" label="每日最大广告数" width="140" />
-        <el-table-column prop="redPacketBalance" label="创建时间" width="90" />
-        <el-table-column prop="redPacketBalance" label="更新时间" width="90" />
-        <el-table-column prop="redPacketBalance" label="操作人" width="90" />
-
-        <el-table-column label="操作" width="150" fixed="right">
+        <el-table-column prop="apiKey" label="API秘钥"  />
+        <el-table-column prop="apiSecret" label="API密令" />
+        <el-table-column prop="remark" label="备注" />
+        <el-table-column label="操作" fixed="right">
           <template #default="scope">
             <div class="button">
               <el-button class="button-item" type="primary" style="margin-bottom: 5px;" @click="edit(scope.row)">
@@ -351,13 +293,9 @@
   import { onBeforeMount, ref, reactive } from "vue";
   import From from "@/components/from/index.vue";
   import Table from "@/components/table/index.vue";
-  import Layer from '@/components/layer/index.vue'
-  import { ElMessage } from 'element-plus'
-  import { getUserList, getStaticList, riskBannedUser, riskLockUser } from '@/api/userModule.js'
-  import { riskChangeUserStatus } from '@/api/riskModule.js'
-  import { convertUTCToBeijing } from '@/utils/index.js'
   import { useGetDictList } from '@/hooks/useGetDictList.js'
   import { useStore } from 'vuex'
+  import {channelList} from "@/api/formworkErection";
 
   const store = useStore()
   const { dictData, loadDictData, getOptions, getDictionaryName } = useGetDictList();
@@ -551,7 +489,7 @@
 
   // 分页数据
   const getList = async () => {
-    let res = await getUserList({ ...formSearch.value });
+    let res = await channelList({ ...formSearch.value });
     tableData.value = res.data;
     page.total = res.pageMeta.total;
   };

+ 19 - 37
src/views/main/formworkErection/channelType.vue → src/views/main/formworkErection/placementAdmin.vue

@@ -8,45 +8,26 @@
         <div class="layout-container">
             <Table @getTableData="changeTableData" v-model:page="page" ref="table" :data="tableData"
                 @selection-change="handleSelectionChange">
-                <el-table-column prop="appId" label="渠道类型" width="150" />
-                <el-table-column prop="appName" label="用途" width="100" />
-                <el-table-column prop="appType" label="所属代理" width="100" />
-                <el-table-column prop="channelOrigin" label="视频数" width="90">
-                    <template #default="scope">
-                        {{ getDictionaryName('channel_origin', scope.row.channelOrigin) }}
-                    </template>
+                <el-table-column prop="placementId" label="广告位ID"  />
+                <el-table-column prop="placementName" label="广告位名称"  />
+                <el-table-column prop="adFormat" label="广告位样式"  >
+                  <template #default="scope">
+                    {{getDictionaryName("ad_format",scope.row.adFormat)}}
+                  </template>
                 </el-table-column>
-                <el-table-column prop="channelType" label="核减数" width="100">
-                    <template #default="scope">
-                        {{ getDictionaryName('channel_type', Number(scope.row.channelType)) }}
-                    </template>
+                <el-table-column prop="appName" label="所属平台应用"  />
+                <el-table-column prop="networkAppName" label="所属渠道应用" />
+                <el-table-column prop="appType" label="类型" width="100" >
+                  <template #default="scope">
+                    {{getDictionaryName("app_type",scope.row.appType)}}
+                  </template>
                 </el-table-column>
-
-                <el-table-column prop="communicationOperator" label="签到前最小红包" width="130" />
-                <el-table-column prop="deviceRepeatCount" label="签到前最大红包" width="130" />
-                <el-table-column prop="ipRepeatCount" label="首包红包" width="100" />
-                <el-table-column prop="lastLoginIp" label="红包封顶最小值" width="130" />
-                <el-table-column prop="lastLoginTime" label="红包封顶最大值" width="130">
-                    <template #default="scope">
-                        {{ convertUTCToBeijing(scope.row.lastLoginTime) }}
-                    </template>
+                <el-table-column prop="status" label="广告位状态" >
+                  <template #default="scope">
+                    {{getDictionaryName("placement_status",scope.row.status)}}
+                  </template>
                 </el-table-column>
-                <el-table-column prop="loginDays" label="客服QQ号" width="100" />
-                <el-table-column prop="nickName" label="QQ群号" width="90" />
-                <el-table-column prop="pointsBalance" label="玩家类型" width="90" />
-
-                <el-table-column prop="pointsTotal" label="累计提现达到X显示QQ群弹窗" width="220" />
-                <el-table-column prop="redPacketAmount" label="累计笔数达到X显示QQ群弹窗" width="220" />
-
-                <el-table-column prop="redPacketBalance" label="apk版本" width="90" />
-                <el-table-column prop="redPacketBalance" label="apk版本code" width="110" />
-                <el-table-column prop="redPacketBalance" label="打包版本号" width="100" />
-                <el-table-column prop="redPacketBalance" label="创建时间" width="90" />
-                <el-table-column prop="redPacketBalance" label="更新时间" width="90" />
-                <el-table-column prop="redPacketBalance" label="操作人" width="90" />
-
-
-                <el-table-column label="操作" width="150" fixed="right">
+                <el-table-column label="操作" fixed="right">
                     <template #default="scope">
                         <div class="button">
                             <el-button class="button-item" type="primary" style="margin-bottom: 5px;"
@@ -140,6 +121,7 @@
     import { convertUTCToBeijing } from '@/utils/index.js'
     import { useGetDictList } from '@/hooks/useGetDictList.js'
     import { useStore } from 'vuex'
+    import {placementList} from "@/api/formworkErection";
 
     const store = useStore()
     const { dictData, loadDictData, getOptions, getDictionaryName } = useGetDictList();
@@ -219,7 +201,7 @@
 
     // 分页数据
     const getList = async () => {
-        let res = await getUserList({ ...formSearch.value });
+        let res = await placementList({ ...formSearch.value });
         tableData.value = res.data;
         page.total = res.pageMeta.total;
     };