소스 검색

玩家日志

ith5 6 달 전
부모
커밋
626d6f3eb3

+ 67 - 0
src/views/v1/api/gameLog/roleData.js

@@ -0,0 +1,67 @@
+import { request } from '@/utils/request.js'
+
+/**
+ * 角色数据 API接口
+ */
+export default {
+
+  /**
+   * 数据列表
+   * @returns
+   */
+  getPageList(params = {}) {
+    return request({
+      url: '/v1/gameLog/RoleData/index',
+      method: 'get',
+      params
+    })
+  },
+
+  /**
+   * 添加数据
+   * @returns
+   */
+  save(params = {}) {
+    return request({
+      url: '/v1/gameLog/RoleData/save',
+      method: 'post',
+      data: params
+    })
+  },
+
+  /**
+   * 更新数据
+   * @returns
+   */
+  update(id, data = {}) {
+    return request({
+      url: '/v1/gameLog/RoleData/update?id=' + id,
+      method: 'put',
+      data
+    })
+  },
+
+  /**
+   * 读取数据
+   * @returns
+   */
+  read(id) {
+    return request({
+      url: '/v1/gameLog/RoleData/read?id=' + id,
+      method: 'get'
+    })
+  },
+
+  /**
+   * 删除数据
+   * @returns
+   */
+  destroy(data) {
+    return request({
+      url: '/v1/gameLog/RoleData/destroy',
+      method: 'delete',
+      data
+    })
+  },
+
+}

+ 67 - 0
src/views/v1/api/gameLog/sdkLoginLog.js

@@ -0,0 +1,67 @@
+import { request } from '@/utils/request.js'
+
+/**
+ * 登录日志 API接口
+ */
+export default {
+
+  /**
+   * 数据列表
+   * @returns
+   */
+  getPageList(params = {}) {
+    return request({
+      url: '/v1/gameLog/SdkLoginLog/index',
+      method: 'get',
+      params
+    })
+  },
+
+  /**
+   * 添加数据
+   * @returns
+   */
+  save(params = {}) {
+    return request({
+      url: '/v1/gameLog/SdkLoginLog/save',
+      method: 'post',
+      data: params
+    })
+  },
+
+  /**
+   * 更新数据
+   * @returns
+   */
+  update(id, data = {}) {
+    return request({
+      url: '/v1/gameLog/SdkLoginLog/update?id=' + id,
+      method: 'put',
+      data
+    })
+  },
+
+  /**
+   * 读取数据
+   * @returns
+   */
+  read(id) {
+    return request({
+      url: '/v1/gameLog/SdkLoginLog/read?id=' + id,
+      method: 'get'
+    })
+  },
+
+  /**
+   * 删除数据
+   * @returns
+   */
+  destroy(data) {
+    return request({
+      url: '/v1/gameLog/SdkLoginLog/destroy',
+      method: 'delete',
+      data
+    })
+  },
+
+}

+ 67 - 0
src/views/v1/api/gameLog/sdkOrderRank.js

@@ -0,0 +1,67 @@
+import { request } from '@/utils/request.js'
+
+/**
+ * 充值排行 API接口
+ */
+export default {
+
+  /**
+   * 数据列表
+   * @returns
+   */
+  getPageList(params = {}) {
+    return request({
+      url: '/v1/gameLog/SdkOrderRank/index',
+      method: 'get',
+      params
+    })
+  },
+
+  /**
+   * 添加数据
+   * @returns
+   */
+  save(params = {}) {
+    return request({
+      url: '/v1/gameLog/SdkOrderRank/save',
+      method: 'post',
+      data: params
+    })
+  },
+
+  /**
+   * 更新数据
+   * @returns
+   */
+  update(id, data = {}) {
+    return request({
+      url: '/v1/gameLog/SdkOrderRank/update?id=' + id,
+      method: 'put',
+      data
+    })
+  },
+
+  /**
+   * 读取数据
+   * @returns
+   */
+  read(id) {
+    return request({
+      url: '/v1/gameLog/SdkOrderRank/read?id=' + id,
+      method: 'get'
+    })
+  },
+
+  /**
+   * 删除数据
+   * @returns
+   */
+  destroy(data) {
+    return request({
+      url: '/v1/gameLog/SdkOrderRank/destroy',
+      method: 'delete',
+      data
+    })
+  },
+
+}

+ 67 - 0
src/views/v1/api/gameLog/sdkOrderSuccess.js

@@ -0,0 +1,67 @@
+import { request } from '@/utils/request.js'
+
+/**
+ * 订单记录表(支付成功) API接口
+ */
+export default {
+
+  /**
+   * 数据列表
+   * @returns
+   */
+  getPageList(params = {}) {
+    return request({
+      url: '/v1/gameLog/SdkOrderSuccess/index',
+      method: 'get',
+      params
+    })
+  },
+
+  /**
+   * 添加数据
+   * @returns
+   */
+  save(params = {}) {
+    return request({
+      url: '/v1/gameLog/SdkOrderSuccess/save',
+      method: 'post',
+      data: params
+    })
+  },
+
+  /**
+   * 更新数据
+   * @returns
+   */
+  update(id, data = {}) {
+    return request({
+      url: '/v1/gameLog/SdkOrderSuccess/update?id=' + id,
+      method: 'put',
+      data
+    })
+  },
+
+  /**
+   * 读取数据
+   * @returns
+   */
+  read(id) {
+    return request({
+      url: '/v1/gameLog/SdkOrderSuccess/read?id=' + id,
+      method: 'get'
+    })
+  },
+
+  /**
+   * 删除数据
+   * @returns
+   */
+  destroy(data) {
+    return request({
+      url: '/v1/gameLog/SdkOrderSuccess/destroy',
+      method: 'delete',
+      data
+    })
+  },
+
+}

+ 67 - 0
src/views/v1/api/gameLog/sdkRegLog.js

@@ -0,0 +1,67 @@
+import { request } from '@/utils/request.js'
+
+/**
+ * 注册日志 API接口
+ */
+export default {
+
+  /**
+   * 数据列表
+   * @returns
+   */
+  getPageList(params = {}) {
+    return request({
+      url: '/v1/gameLog/SdkRegLog/index',
+      method: 'get',
+      params
+    })
+  },
+
+  /**
+   * 添加数据
+   * @returns
+   */
+  save(params = {}) {
+    return request({
+      url: '/v1/gameLog/SdkRegLog/save',
+      method: 'post',
+      data: params
+    })
+  },
+
+  /**
+   * 更新数据
+   * @returns
+   */
+  update(id, data = {}) {
+    return request({
+      url: '/v1/gameLog/SdkRegLog/update?id=' + id,
+      method: 'put',
+      data
+    })
+  },
+
+  /**
+   * 读取数据
+   * @returns
+   */
+  read(id) {
+    return request({
+      url: '/v1/gameLog/SdkRegLog/read?id=' + id,
+      method: 'get'
+    })
+  },
+
+  /**
+   * 删除数据
+   * @returns
+   */
+  destroy(data) {
+    return request({
+      url: '/v1/gameLog/SdkRegLog/destroy',
+      method: 'delete',
+      data
+    })
+  },
+
+}

+ 101 - 0
src/views/v1/gameLog/roleData/edit.vue

@@ -0,0 +1,101 @@
+<template>
+  <component
+    is="a-modal"
+    :width="tool.getDevice() === 'mobile' ? '100%' : '600px'"
+    v-model:visible="visible"
+    :title="title"
+    :mask-closable="false"
+    :ok-loading="loading"
+    @cancel="close"
+    @before-ok="submit">
+    <!-- 表单信息 start -->
+    <a-form ref="formRef" :model="formData" :rules="rules" :auto-label-width="true">
+    </a-form>
+    <!-- 表单信息 end -->
+  </component>
+</template>
+
+<script setup>
+import { ref, reactive, computed } from 'vue'
+import tool from '@/utils/tool'
+import { Message, Modal } from '@arco-design/web-vue'
+import api from '../../api/gameLog/roleData'
+
+const emit = defineEmits(['success'])
+// 引用定义
+const visible = ref(false)
+const loading = ref(false)
+const formRef = ref()
+const mode = ref('')
+
+let title = computed(() => {
+  return '角色数据' + (mode.value == 'add' ? '-新增' : '-编辑')
+})
+
+// 表单初始值
+const initialFormData = {
+  id: null,
+}
+
+// 表单信息
+const formData = reactive({ ...initialFormData })
+
+// 验证规则
+const rules = {
+}
+
+// 打开弹框
+const open = async (type = 'add') => {
+  mode.value = type
+  // 重置表单数据
+  Object.assign(formData, initialFormData)
+  formRef.value.clearValidate()
+  visible.value = true
+  await initPage()
+}
+
+// 初始化页面数据
+const initPage = async () => {}
+
+// 设置数据
+const setFormData = async (data) => {
+  for (const key in formData) {
+    if (data[key] != null && data[key] != undefined) {
+      formData[key] = data[key]
+    }
+  }
+}
+
+// 数据保存
+const submit = async (done) => {
+  const validate = await formRef.value?.validate()
+  if (!validate) {
+    loading.value = true
+    let data = { ...formData }
+    let result = {}
+    if (mode.value === 'add') {
+      // 添加数据
+      data.id = undefined
+      result = await api.save(data)
+    } else {
+      // 修改数据
+      result = await api.update(data.id, data)
+    }
+    if (result.code === 200) {
+      Message.success('操作成功')
+      emit('success')
+      done(true)
+    }
+    // 防止连续点击提交
+    setTimeout(() => {
+      loading.value = false
+    }, 500)
+  }
+  done(false)
+}
+
+// 关闭弹窗
+const close = () => (visible.value = false)
+
+defineExpose({ open, setFormData })
+</script>

+ 158 - 0
src/views/v1/gameLog/roleData/index.vue

@@ -0,0 +1,158 @@
+<template>
+  <div class="ma-content-block">
+    <sa-table
+      ref="crudRef"
+      :options="options"
+      :columns="columns"
+      :searchForm="searchForm"
+    >
+      <!-- 搜索区 tableSearch -->
+      <template #tableSearch>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="游戏名" field="game_id">
+            <a-tree-select
+              v-model="searchForm.game_id"
+              :data="gameList"
+              placeholder="请选择游戏"
+              allow-clear
+              :field-names="{ title: 'name', key: 'id' }"
+              allow-search
+              tree-checked-strategy="child"
+              :tree-checkable="true"
+              :max-tag-count="1"
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="媒体ID" field="media_id">
+            <a-input
+              v-model="searchForm.media_id"
+              placeholder="请输入媒体ID"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="广告位id" field="site_id">
+            <a-input
+              v-model="searchForm.site_id"
+              placeholder="请输入广告位id"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="负责人ID" field="auth_id">
+            <a-input
+              v-model="searchForm.auth_id"
+              placeholder="请输入负责人ID"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="用户名" field="user_name">
+            <a-input
+              v-model="searchForm.user_name"
+              placeholder="请输入用户名"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="注册日期" field="reg_time">
+            <a-date-picker
+              class="w-full"
+              v-model="searchForm.reg_time"
+              :show-time="false"
+              mode="date"
+              placeholder="请选择注册日期"
+            />
+          </a-form-item>
+        </a-col>
+      </template>
+
+      <!-- Table 自定义渲染 -->
+      <template #roles="{ record }">
+        <div v-if="record && record.roles && record.roles.length > 0">
+          <p
+            v-for="(role, index) in record.roles"
+            :key="`${role.role_name}-${index}`"
+          >
+            {{ role.server_name }} {{ role.role_name }} ({{ role.role_level }})
+          </p>
+        </div>
+        <div v-else>
+          <span>-</span>
+        </div>
+      </template>
+    </sa-table>
+  </div>
+</template>
+
+<script setup>
+import { onMounted, ref, reactive } from "vue";
+import { Message } from "@arco-design/web-vue";
+import api from "../../api/gameLog/roleData";
+import dayjs from "dayjs";
+import commonApi from "../../api/common";
+
+// 引用定义
+const crudRef = ref();
+const gameList = ref([]);
+
+// 搜索表单
+const searchForm = ref({
+  game_id: "",
+  media_id: "",
+  site_id: "",
+  auth_id: "",
+  user_name: "",
+  reg_time: "",
+});
+
+// SaTable 基础配置
+const options = reactive({
+  api: api.getPageList,
+  rowSelection: { showCheckedAll: true },
+  operationColumn: false,
+});
+
+// SaTable 列配置
+const columns = reactive([
+  { title: "用户名", dataIndex: "user_name", width: 120 },
+  { title: "游戏名", dataIndex: "game_name", width: 120 },
+  { title: "渠道id", dataIndex: "agent_id", width: 100 },
+  { title: "广告位id", dataIndex: "site_id", width: 100 },
+  { title: "注册IP", dataIndex: "ip", width: 180 },
+  { title: "注册时间", dataIndex: "create_time", width: 180 },
+  { title: "角色信息", width: 180, dataIndex: "roles" },
+  { title: "渠道名", dataIndex: "agent_name", width: 120 },
+  { title: "负责人", dataIndex: "auth_name", width: 120 },
+]);
+
+// 页面数据初始化
+const initPage = async () => {
+  searchForm.value.reg_time = dayjs().format("YYYY-MM-DD");
+  await getGameList();
+};
+
+// 获取游戏列表
+const getGameList = async () => {
+  const res = await commonApi.getGameListTreeApi();
+  if (res.code === 200) {
+    gameList.value = res.data;
+  }
+};
+
+// SaTable 数据请求
+const refresh = async () => {
+  crudRef.value?.refresh();
+};
+
+// 页面加载完成执行
+onMounted(async () => {
+  initPage();
+  refresh();
+});
+</script>

+ 101 - 0
src/views/v1/gameLog/sdkLoginLog/edit.vue

@@ -0,0 +1,101 @@
+<template>
+  <component
+    is="a-modal"
+    :width="tool.getDevice() === 'mobile' ? '100%' : '600px'"
+    v-model:visible="visible"
+    :title="title"
+    :mask-closable="false"
+    :ok-loading="loading"
+    @cancel="close"
+    @before-ok="submit">
+    <!-- 表单信息 start -->
+    <a-form ref="formRef" :model="formData" :rules="rules" :auto-label-width="true">
+    </a-form>
+    <!-- 表单信息 end -->
+  </component>
+</template>
+
+<script setup>
+import { ref, reactive, computed } from 'vue'
+import tool from '@/utils/tool'
+import { Message, Modal } from '@arco-design/web-vue'
+import api from '../../api/gameLog/sdkLoginLog'
+
+const emit = defineEmits(['success'])
+// 引用定义
+const visible = ref(false)
+const loading = ref(false)
+const formRef = ref()
+const mode = ref('')
+
+let title = computed(() => {
+  return '登录日志' + (mode.value == 'add' ? '-新增' : '-编辑')
+})
+
+// 表单初始值
+const initialFormData = {
+  id: null,
+}
+
+// 表单信息
+const formData = reactive({ ...initialFormData })
+
+// 验证规则
+const rules = {
+}
+
+// 打开弹框
+const open = async (type = 'add') => {
+  mode.value = type
+  // 重置表单数据
+  Object.assign(formData, initialFormData)
+  formRef.value.clearValidate()
+  visible.value = true
+  await initPage()
+}
+
+// 初始化页面数据
+const initPage = async () => {}
+
+// 设置数据
+const setFormData = async (data) => {
+  for (const key in formData) {
+    if (data[key] != null && data[key] != undefined) {
+      formData[key] = data[key]
+    }
+  }
+}
+
+// 数据保存
+const submit = async (done) => {
+  const validate = await formRef.value?.validate()
+  if (!validate) {
+    loading.value = true
+    let data = { ...formData }
+    let result = {}
+    if (mode.value === 'add') {
+      // 添加数据
+      data.id = undefined
+      result = await api.save(data)
+    } else {
+      // 修改数据
+      result = await api.update(data.id, data)
+    }
+    if (result.code === 200) {
+      Message.success('操作成功')
+      emit('success')
+      done(true)
+    }
+    // 防止连续点击提交
+    setTimeout(() => {
+      loading.value = false
+    }, 500)
+  }
+  done(false)
+}
+
+// 关闭弹窗
+const close = () => (visible.value = false)
+
+defineExpose({ open, setFormData })
+</script>

+ 188 - 0
src/views/v1/gameLog/sdkLoginLog/index.vue

@@ -0,0 +1,188 @@
+<template>
+  <div class="ma-content-block">
+    <sa-table
+      ref="crudRef"
+      :options="options"
+      :columns="columns"
+      :searchForm="searchForm"
+    >
+      <!-- 搜索区 tableSearch -->
+      <template #tableSearch>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="用户名" field="user_name">
+            <a-input
+              v-model="searchForm.user_name"
+              placeholder="请输入用户名"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="游戏" field="game_id">
+            <a-tree-select
+              v-model="searchForm.game_id"
+              :data="gameList"
+              placeholder="请选择游戏"
+              allow-clear
+              :field-names="{ title: 'name', key: 'id' }"
+              allow-search
+              tree-checked-strategy="child"
+              :tree-checkable="true"
+              :max-tag-count="1"
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="媒体ID" field="media_id">
+            <a-input
+              v-model="searchForm.media_id"
+              placeholder="请输入媒体ID"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="渠道id" field="agent_id">
+            <a-input
+              v-model="searchForm.agent_id"
+              placeholder="请输入渠道id"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="广告位id" field="site_id">
+            <a-input
+              v-model="searchForm.site_id"
+              placeholder="请输入广告位id"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="负责人ID" field="auth_id">
+            <a-input
+              v-model="searchForm.auth_id"
+              placeholder="请输入负责人ID"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="登录日期" field="login_time">
+            <a-date-picker
+              class="w-full"
+              v-model="searchForm.login_time"
+              :show-time="false"
+              mode=""
+              placeholder="请选择登录日期"
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="注册日期" field="reg_time">
+            <a-date-picker
+              class="w-full"
+              v-model="searchForm.reg_time"
+              :show-time="false"
+              mode=""
+              placeholder="请选择注册日期"
+            />
+          </a-form-item>
+        </a-col>
+      </template>
+      <template #login_time="{ record }">
+        {{ dayjs(record.login_time * 1000).format("YYYY-MM-DD HH:mm:ss") }}
+      </template>
+      <template #reg_time="{ record }">
+        {{ dayjs(record.reg_time * 1000).format("YYYY-MM-DD HH:mm:ss") }}
+      </template>
+
+      <!-- Table 自定义渲染 -->
+    </sa-table>
+
+    <!-- 编辑表单 -->
+    <edit-form ref="editRef" @success="refresh" />
+  </div>
+</template>
+
+<script setup>
+import { onMounted, ref, reactive } from "vue";
+import { Message } from "@arco-design/web-vue";
+import EditForm from "./edit.vue";
+import api from "../../api/gameLog/sdkLoginLog";
+import commonApi from "../../api/common";
+import dayjs from "dayjs";
+const gameList = ref([]);
+
+// 引用定义
+const crudRef = ref();
+const editRef = ref();
+const viewRef = ref();
+
+// 搜索表单
+const searchForm = ref({
+  user_name: "",
+  game_id: "",
+  media_id: "",
+  agent_id: "",
+  site_id: "",
+  auth_id: "",
+  login_time: "",
+  reg_time: "",
+});
+
+// SaTable 基础配置
+const options = reactive({
+  api: api.getPageList,
+  rowSelection: { showCheckedAll: true },
+  operationColumn: false,
+});
+
+// SaTable 列配置
+const columns = reactive([
+  { title: "用户名", dataIndex: "user_name", width: 80 },
+  { title: "游戏", dataIndex: "game_name", width: 120 },
+  { title: "媒体ID", dataIndex: "media_id", width: 80 },
+  { title: "广告位id", dataIndex: "site_id", width: 100 },
+  { title: "登录IP", dataIndex: "ip", width: 180 },
+  { title: "登录IMEI/IDFA", dataIndex: "imei", width: 180 },
+  { title: "登录OAID/CID", dataIndex: "oaid", width: 180 },
+
+  { title: "登录时间", dataIndex: "login_time", width: 140 },
+  { title: "注册时间", dataIndex: "reg_time", width: 140 },
+
+  { title: "手机品牌", dataIndex: "brand", width: 120 },
+  { title: "手机型号", dataIndex: "model", width: 120 },
+  { title: "系统版本", dataIndex: "system_version", width: 100 },
+  { title: "sdk版本", dataIndex: "sdk_version", width: 100 },
+  { title: "设备类型", dataIndex: "vt", type: "dict", dict: "vt", width: 120 },
+  { title: "渠道名", dataIndex: "agent_name", width: 100 },
+  { title: "负责人", dataIndex: "auth_name", width: 100 },
+]);
+
+// 页面数据初始化
+const initPage = async () => {
+  searchForm.value.login_time = dayjs().format("YYYY-MM-DD");
+  await getGameList();
+};
+
+// 获取游戏列表
+const getGameList = async () => {
+  const res = await commonApi.getGameListTreeApi();
+  if (res.code === 200) {
+    gameList.value = res.data;
+  }
+};
+
+// SaTable 数据请求
+const refresh = async () => {
+  crudRef.value?.refresh();
+};
+
+// 页面加载完成执行
+onMounted(async () => {
+  initPage();
+  refresh();
+});
+</script>

+ 101 - 0
src/views/v1/gameLog/sdkOrderRank/edit.vue

@@ -0,0 +1,101 @@
+<template>
+  <component
+    is="a-modal"
+    :width="tool.getDevice() === 'mobile' ? '100%' : '600px'"
+    v-model:visible="visible"
+    :title="title"
+    :mask-closable="false"
+    :ok-loading="loading"
+    @cancel="close"
+    @before-ok="submit">
+    <!-- 表单信息 start -->
+    <a-form ref="formRef" :model="formData" :rules="rules" :auto-label-width="true">
+    </a-form>
+    <!-- 表单信息 end -->
+  </component>
+</template>
+
+<script setup>
+import { ref, reactive, computed } from 'vue'
+import tool from '@/utils/tool'
+import { Message, Modal } from '@arco-design/web-vue'
+import api from '../../api/gameLog/sdkOrderRank'
+
+const emit = defineEmits(['success'])
+// 引用定义
+const visible = ref(false)
+const loading = ref(false)
+const formRef = ref()
+const mode = ref('')
+
+let title = computed(() => {
+  return '充值排行' + (mode.value == 'add' ? '-新增' : '-编辑')
+})
+
+// 表单初始值
+const initialFormData = {
+  orderid: null,
+}
+
+// 表单信息
+const formData = reactive({ ...initialFormData })
+
+// 验证规则
+const rules = {
+}
+
+// 打开弹框
+const open = async (type = 'add') => {
+  mode.value = type
+  // 重置表单数据
+  Object.assign(formData, initialFormData)
+  formRef.value.clearValidate()
+  visible.value = true
+  await initPage()
+}
+
+// 初始化页面数据
+const initPage = async () => {}
+
+// 设置数据
+const setFormData = async (data) => {
+  for (const key in formData) {
+    if (data[key] != null && data[key] != undefined) {
+      formData[key] = data[key]
+    }
+  }
+}
+
+// 数据保存
+const submit = async (done) => {
+  const validate = await formRef.value?.validate()
+  if (!validate) {
+    loading.value = true
+    let data = { ...formData }
+    let result = {}
+    if (mode.value === 'add') {
+      // 添加数据
+      data.orderid = undefined
+      result = await api.save(data)
+    } else {
+      // 修改数据
+      result = await api.update(data.orderid, data)
+    }
+    if (result.code === 200) {
+      Message.success('操作成功')
+      emit('success')
+      done(true)
+    }
+    // 防止连续点击提交
+    setTimeout(() => {
+      loading.value = false
+    }, 500)
+  }
+  done(false)
+}
+
+// 关闭弹窗
+const close = () => (visible.value = false)
+
+defineExpose({ open, setFormData })
+</script>

+ 232 - 0
src/views/v1/gameLog/sdkOrderRank/index.vue

@@ -0,0 +1,232 @@
+<template>
+  <div class="ma-content-block">
+    <sa-table
+      ref="crudRef"
+      :options="options"
+      :columns="columns"
+      :searchForm="searchForm"
+    >
+      <!-- 搜索区 tableSearch -->
+      <template #tableSearch>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="游戏名" field="game_id">
+            <a-tree-select
+              v-model="searchForm.game_id"
+              :data="gameList"
+              placeholder="请选择游戏"
+              allow-clear
+              :field-names="{ title: 'name', key: 'id' }"
+              allow-search
+              tree-checked-strategy="child"
+              :tree-checkable="true"
+              :max-tag-count="1"
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="媒体ID" field="media_id">
+            <a-select
+              v-model="searchForm.media_id"
+              :options="[]"
+              placeholder="请选择媒体ID"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="负责人" field="auth_id">
+            <a-select
+              v-model="searchForm.auth_id"
+              :options="[]"
+              placeholder="请选择负责人"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="渠道ID" field="agent_id">
+            <a-input
+              v-model="searchForm.agent_id"
+              placeholder="请输入渠道ID"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="广告位ID" field="site_id">
+            <a-input
+              v-model="searchForm.site_id"
+              placeholder="请输入广告位ID"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="用户名" field="user_name">
+            <a-input
+              v-model="searchForm.user_name"
+              placeholder="请输入用户名"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="服务器ID" field="server_id">
+            <a-input
+              v-model="searchForm.server_id"
+              placeholder="请输入服务器ID"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="服务器名" field="server_name">
+            <a-input
+              v-model="searchForm.server_name"
+              placeholder="请输入服务器名"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="注册日期" field="reg_date">
+            <a-range-picker
+              v-model="searchForm.reg_date"
+              :show-time="false"
+              mode="date"
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="充值日期" field="pay_date">
+            <a-range-picker
+              v-model="searchForm.pay_date"
+              :show-time="false"
+              mode="date"
+            />
+          </a-form-item>
+        </a-col>
+      </template>
+
+      <template #user_name="{ record }">
+        {{ record.uid }} - {{ record.user_name }}
+      </template>
+
+      <template #game_name="{ record }">
+        {{ record.game_id }} - {{ record.game_name }}
+      </template>
+
+      <template #alert="{ record }">
+        <div>
+          <div v-if="record.login_alert === 0">
+            <a-tag color="red">登录告警</a-tag>
+          </div>
+          <div v-if="record.pay_alert === 0">
+            <a-tag color="red">充值告警</a-tag>
+          </div>
+          <div v-else><a-tag color="green">正常</a-tag></div>
+        </div>
+      </template>
+
+      <template #login_time="{ record }">
+        {{ dayjs(record.login_time * 1000).format("YYYY-MM-DD HH:mm:ss") }}
+      </template>
+
+      <template #pay_time="{ record }">
+        {{ dayjs(record.pay_time * 1000).format("YYYY-MM-DD HH:mm:ss") }}
+      </template>
+
+      <!-- Table 自定义渲染 -->
+    </sa-table>
+  </div>
+</template>
+
+<script setup>
+import { onMounted, ref, reactive } from "vue";
+import api from "../../api/gameLog/sdkOrderRank";
+import dayjs from "dayjs";
+import commonApi from "../../api/common";
+
+// 引用定义
+const crudRef = ref();
+const gameList = ref([]);
+
+// 搜索表单
+const searchForm = ref({
+  game_id: "",
+  media_id: "",
+  auth_id: "",
+  agent_id: "",
+  site_id: "",
+  user_name: "",
+  server_id: "",
+  server_name: "",
+  reg_date: [],
+  pay_date: [],
+});
+
+// SaTable 基础配置
+const options = reactive({
+  api: api.getPageList,
+  pk: "orderid",
+  rowSelection: { showCheckedAll: true },
+  operationColumn: false,
+});
+
+// SaTable 列配置
+const columns = reactive([
+  { title: "用户名", dataIndex: "user_name", width: 250 },
+  { title: "渠道ID", dataIndex: "agent_id", width: 120 },
+  { title: "广告位ID", dataIndex: "site_id", width: 120 },
+
+  { title: "游戏名", dataIndex: "game_name", width: 120 },
+
+  // { title: "服务器ID", dataIndex: "server_id", width: 120 },
+  { title: "服务器名", dataIndex: "server_name", width: 120 },
+  { title: "角色名", dataIndex: "role_name", width: 120 },
+  { title: "角色ID", dataIndex: "role_id", width: 120 },
+
+  { title: "支付方式", dataIndex: "pay_channel_name", width: 120 },
+  { title: "历史充值金额", dataIndex: "totalMoney", width: 120 },
+  { title: "累计充值金额", dataIndex: "searchTotalMoney", width: 120 },
+
+  { title: "充值日期", dataIndex: "pay_date", width: 180 },
+  { title: "注册日期", dataIndex: "reg_date", width: 180 },
+
+  { title: "最近登录时间", dataIndex: "login_time", width: 180 },
+  { title: "最近充值时间", dataIndex: "pay_time", width: 180 },
+
+  { title: "告警", dataIndex: "alert", width: 120 },
+
+  { title: "渠道名", dataIndex: "agent_name", width: 180 },
+  { title: "负责人", dataIndex: "auth_name", width: 180 },
+]);
+
+// 页面数据初始化
+const initPage = async () => {
+  searchForm.value.pay_date = [
+    dayjs().format("YYYY-MM-DD"),
+    dayjs().format("YYYY-MM-DD"),
+  ];
+  await getGameList();
+};
+
+// 获取游戏列表
+const getGameList = async () => {
+  const res = await commonApi.getGameListTreeApi();
+  if (res.code === 200) {
+    gameList.value = res.data;
+  }
+};
+
+// SaTable 数据请求
+const refresh = async () => {
+  crudRef.value?.refresh();
+};
+
+// 页面加载完成执行
+onMounted(async () => {
+  initPage();
+  refresh();
+});
+</script>

+ 101 - 0
src/views/v1/gameLog/sdkOrderSuccess/edit.vue

@@ -0,0 +1,101 @@
+<template>
+  <component
+    is="a-modal"
+    :width="tool.getDevice() === 'mobile' ? '100%' : '600px'"
+    v-model:visible="visible"
+    :title="title"
+    :mask-closable="false"
+    :ok-loading="loading"
+    @cancel="close"
+    @before-ok="submit">
+    <!-- 表单信息 start -->
+    <a-form ref="formRef" :model="formData" :rules="rules" :auto-label-width="true">
+    </a-form>
+    <!-- 表单信息 end -->
+  </component>
+</template>
+
+<script setup>
+import { ref, reactive, computed } from 'vue'
+import tool from '@/utils/tool'
+import { Message, Modal } from '@arco-design/web-vue'
+import api from '../../api/gameLog/sdkOrderSuccess'
+
+const emit = defineEmits(['success'])
+// 引用定义
+const visible = ref(false)
+const loading = ref(false)
+const formRef = ref()
+const mode = ref('')
+
+let title = computed(() => {
+  return '订单记录表(支付成功)' + (mode.value == 'add' ? '-新增' : '-编辑')
+})
+
+// 表单初始值
+const initialFormData = {
+  orderid: null,
+}
+
+// 表单信息
+const formData = reactive({ ...initialFormData })
+
+// 验证规则
+const rules = {
+}
+
+// 打开弹框
+const open = async (type = 'add') => {
+  mode.value = type
+  // 重置表单数据
+  Object.assign(formData, initialFormData)
+  formRef.value.clearValidate()
+  visible.value = true
+  await initPage()
+}
+
+// 初始化页面数据
+const initPage = async () => {}
+
+// 设置数据
+const setFormData = async (data) => {
+  for (const key in formData) {
+    if (data[key] != null && data[key] != undefined) {
+      formData[key] = data[key]
+    }
+  }
+}
+
+// 数据保存
+const submit = async (done) => {
+  const validate = await formRef.value?.validate()
+  if (!validate) {
+    loading.value = true
+    let data = { ...formData }
+    let result = {}
+    if (mode.value === 'add') {
+      // 添加数据
+      data.orderid = undefined
+      result = await api.save(data)
+    } else {
+      // 修改数据
+      result = await api.update(data.orderid, data)
+    }
+    if (result.code === 200) {
+      Message.success('操作成功')
+      emit('success')
+      done(true)
+    }
+    // 防止连续点击提交
+    setTimeout(() => {
+      loading.value = false
+    }, 500)
+  }
+  done(false)
+}
+
+// 关闭弹窗
+const close = () => (visible.value = false)
+
+defineExpose({ open, setFormData })
+</script>

+ 215 - 0
src/views/v1/gameLog/sdkOrderSuccess/index.vue

@@ -0,0 +1,215 @@
+<template>
+  <div class="ma-content-block">
+    <sa-table
+      ref="crudRef"
+      :options="options"
+      :columns="columns"
+      :searchForm="searchForm"
+    >
+      <!-- 搜索区 tableSearch -->
+      <template #tableSearch>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="游戏" field="game_id">
+            <a-tree-select
+              v-model="searchForm.game_id"
+              :data="gameList"
+              placeholder="请选择游戏"
+              allow-clear
+              :field-names="{ title: 'name', key: 'id' }"
+              allow-search
+              tree-checked-strategy="child"
+              :tree-checkable="true"
+              :max-tag-count="1"
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="充值日期" field="pay_date">
+            <a-range-picker
+              class="w-full"
+              v-model="searchForm.pay_date"
+              :show-time="false"
+              mode="date"
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="注册日期" field="reg_date">
+            <a-range-picker
+              class="w-full"
+              v-model="searchForm.reg_date"
+              :show-time="false"
+              mode="date"
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="服务器ID" field="server_id">
+            <a-input
+              v-model="searchForm.server_id"
+              placeholder="请输入服务器ID"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="服务器名" field="server_name">
+            <a-input
+              v-model="searchForm.server_name"
+              placeholder="请输入服务器名"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="媒体ID" field="media_id">
+            <a-select
+              v-model="searchForm.media_id"
+              :options="[]"
+              placeholder="请选择媒体ID"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="负责人" field="auth_id">
+            <a-select
+              v-model="searchForm.auth_id"
+              :options="[]"
+              placeholder="请选择负责人"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="渠道ID" field="agent_id">
+            <a-input
+              v-model="searchForm.agent_id"
+              placeholder="请输入渠道ID"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="广告位ID" field="site_id">
+            <a-input
+              v-model="searchForm.site_id"
+              placeholder="请输入广告位ID"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="用户名" field="user_name">
+            <a-input
+              v-model="searchForm.user_name"
+              placeholder="请输入用户名"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+      </template>
+
+      <!-- Table 自定义渲染 -->
+    </sa-table>
+
+    <!-- 编辑表单 -->
+    <edit-form ref="editRef" @success="refresh" />
+  </div>
+</template>
+
+<script setup>
+import { onMounted, ref, reactive } from "vue";
+import { Message } from "@arco-design/web-vue";
+import EditForm from "./edit.vue";
+import api from "../../api/gameLog/sdkOrderSuccess";
+import dayjs from "dayjs";
+import commonApi from "../../api/common";
+
+// 引用定义
+const crudRef = ref();
+const editRef = ref();
+const viewRef = ref();
+const gameList = ref([]);
+
+// 搜索表单
+const searchForm = ref({
+  game_id: "",
+  media_id: "",
+  auth_id: "",
+  agent_id: "",
+  site_id: "",
+  user_name: "",
+  server_id: "",
+  server_name: "",
+  reg_date: [],
+  pay_date: [],
+});
+
+// SaTable 基础配置
+const options = reactive({
+  api: api.getPageList,
+  pk: "orderid",
+  rowSelection: { showCheckedAll: true },
+  export: {
+    // 导出url
+    url: "v1/gameLog/sdkOrderSuccess/export",
+    // 显示导出按钮的权限
+    auth: ["v1/gameLog/sdkOrderSuccess/export"],
+    // 按钮文案
+    text: "导出",
+    // 是否显示
+    show: true,
+  },
+  operationColumn: false,
+});
+
+// SaTable 列配置
+const columns = reactive([
+  { title: "订单号", dataIndex: "orderid", width: 180 },
+  { title: "用户名", dataIndex: "user_name", width: 120 },
+  { title: "渠道ID", dataIndex: "agent_id", width: 120 },
+  { title: "广告位ID", dataIndex: "site_id", width: 120 },
+
+  { title: "游戏名", dataIndex: "game_name", width: 120 },
+
+  { title: "服务器ID", dataIndex: "server_id", width: 120 },
+  { title: "服务器名", dataIndex: "server_name", width: 120 },
+
+  { title: "支付方式", dataIndex: "pay_channel_name", width: 120 },
+  { title: "充值金额", dataIndex: "money", width: 120 },
+
+  { title: "充值日期", dataIndex: "pay_date", width: 180 },
+  { title: "注册日期", dataIndex: "reg_date", width: 180 },
+
+  { title: "渠道名", dataIndex: "agent_name", width: 180 },
+  { title: "负责人", dataIndex: "auth_name", width: 180 },
+]);
+
+// 页面数据初始化
+const initPage = async () => {
+  searchForm.value.pay_date = [
+    dayjs().format("YYYY-MM-DD"),
+    dayjs().format("YYYY-MM-DD"),
+  ];
+  await getGameList();
+};
+
+// 获取游戏列表
+const getGameList = async () => {
+  const res = await commonApi.getGameListTreeApi();
+  if (res.code === 200) {
+    gameList.value = res.data;
+  }
+};
+// SaTable 数据请求
+const refresh = async () => {
+  crudRef.value?.refresh();
+};
+
+// 页面加载完成执行
+onMounted(async () => {
+  initPage();
+  refresh();
+});
+</script>

+ 101 - 0
src/views/v1/gameLog/sdkRegLog/edit.vue

@@ -0,0 +1,101 @@
+<template>
+  <component
+    is="a-modal"
+    :width="tool.getDevice() === 'mobile' ? '100%' : '600px'"
+    v-model:visible="visible"
+    :title="title"
+    :mask-closable="false"
+    :ok-loading="loading"
+    @cancel="close"
+    @before-ok="submit">
+    <!-- 表单信息 start -->
+    <a-form ref="formRef" :model="formData" :rules="rules" :auto-label-width="true">
+    </a-form>
+    <!-- 表单信息 end -->
+  </component>
+</template>
+
+<script setup>
+import { ref, reactive, computed } from 'vue'
+import tool from '@/utils/tool'
+import { Message, Modal } from '@arco-design/web-vue'
+import api from '../../api/gameLog/sdkRegLog'
+
+const emit = defineEmits(['success'])
+// 引用定义
+const visible = ref(false)
+const loading = ref(false)
+const formRef = ref()
+const mode = ref('')
+
+let title = computed(() => {
+  return '注册日志' + (mode.value == 'add' ? '-新增' : '-编辑')
+})
+
+// 表单初始值
+const initialFormData = {
+  id: null,
+}
+
+// 表单信息
+const formData = reactive({ ...initialFormData })
+
+// 验证规则
+const rules = {
+}
+
+// 打开弹框
+const open = async (type = 'add') => {
+  mode.value = type
+  // 重置表单数据
+  Object.assign(formData, initialFormData)
+  formRef.value.clearValidate()
+  visible.value = true
+  await initPage()
+}
+
+// 初始化页面数据
+const initPage = async () => {}
+
+// 设置数据
+const setFormData = async (data) => {
+  for (const key in formData) {
+    if (data[key] != null && data[key] != undefined) {
+      formData[key] = data[key]
+    }
+  }
+}
+
+// 数据保存
+const submit = async (done) => {
+  const validate = await formRef.value?.validate()
+  if (!validate) {
+    loading.value = true
+    let data = { ...formData }
+    let result = {}
+    if (mode.value === 'add') {
+      // 添加数据
+      data.id = undefined
+      result = await api.save(data)
+    } else {
+      // 修改数据
+      result = await api.update(data.id, data)
+    }
+    if (result.code === 200) {
+      Message.success('操作成功')
+      emit('success')
+      done(true)
+    }
+    // 防止连续点击提交
+    setTimeout(() => {
+      loading.value = false
+    }, 500)
+  }
+  done(false)
+}
+
+// 关闭弹窗
+const close = () => (visible.value = false)
+
+defineExpose({ open, setFormData })
+</script>

+ 175 - 0
src/views/v1/gameLog/sdkRegLog/index.vue

@@ -0,0 +1,175 @@
+<template>
+  <div class="ma-content-block">
+    <sa-table
+      ref="crudRef"
+      :options="options"
+      :columns="columns"
+      :searchForm="searchForm"
+    >
+      <!-- 搜索区 tableSearch -->
+      <template #tableSearch>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="用户名" field="user_name">
+            <a-input
+              v-model="searchForm.user_name"
+              placeholder="请输入用户名"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="游戏" field="game_id">
+            <a-tree-select
+              v-model="searchForm.game_id"
+              :data="gameList"
+              placeholder="请选择游戏"
+              allow-clear
+              :field-names="{ title: 'name', key: 'id' }"
+              allow-search
+              tree-checked-strategy="child"
+              :tree-checkable="true"
+              :max-tag-count="1"
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="媒体ID" field="media_id">
+            <a-select
+              v-model="searchForm.media_id"
+              :options="[]"
+              placeholder="请选择媒体ID"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="渠道id" field="agent_id">
+            <a-input
+              v-model="searchForm.agent_id"
+              placeholder="请输入渠道id"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="广告位id" field="site_id">
+            <a-input
+              v-model="searchForm.site_id"
+              placeholder="请输入广告位id"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="注册时间" field="reg_time">
+            <a-date-picker
+              class="w-full"
+              :default-value="dayjs().format('YYYY-MM-DD')"
+              v-model="searchForm.reg_time"
+              :show-time="false"
+              mode=""
+              placeholder="请选择注册时间"
+            />
+          </a-form-item>
+        </a-col>
+        <a-col :sm="8" :xs="24">
+          <a-form-item label="设备类型" field="vt">
+            <sa-select
+              v-model="searchForm.vt"
+              dict="vt"
+              placeholder="请选择设备类型"
+              allow-clear
+            />
+          </a-form-item>
+        </a-col>
+      </template>
+
+      <!-- Table 自定义渲染 -->
+      <template #reg_time="{ record }">
+        {{ dayjs(record.reg_time * 1000).format("YYYY-MM-DD HH:mm:ss") }}
+      </template>
+    </sa-table>
+
+    <!-- 编辑表单 -->
+    <edit-form ref="editRef" @success="refresh" />
+  </div>
+</template>
+
+<script setup>
+import { onMounted, ref, reactive } from "vue";
+import { Message } from "@arco-design/web-vue";
+import EditForm from "./edit.vue";
+import api from "../../api/gameLog/sdkRegLog";
+import dayjs from "dayjs";
+import commonApi from "../../api/common";
+
+// 引用定义
+const crudRef = ref();
+const editRef = ref();
+const viewRef = ref();
+const gameList = ref([]);
+
+// 搜索表单
+const searchForm = ref({
+  user_name: "",
+  game_id: "",
+  media_id: "",
+  agent_id: "",
+  site_id: "",
+  reg_time: "",
+  vt: "",
+});
+
+// SaTable 基础配置
+const options = reactive({
+  api: api.getPageList,
+  rowSelection: { showCheckedAll: true },
+  operationColumn: false,
+});
+
+// SaTable 列配置
+const columns = reactive([
+  { title: "用户名", dataIndex: "user_name", width: 180 },
+  { title: "游戏", dataIndex: "game_name", width: 180 },
+  { title: "渠道id", dataIndex: "agent_id", width: 180 },
+  { title: "广告位id", dataIndex: "site_id", width: 180 },
+  { title: "注册IMEI/IDFA", dataIndex: "imei", width: 180 },
+  { title: "注册OAID/CID", dataIndex: "oaid", width: 180 },
+
+  { title: "注册IP", dataIndex: "ip", width: 180 },
+  { title: "注册时间", dataIndex: "reg_time", width: 180 },
+
+  { title: "手机品牌", dataIndex: "brand", width: 180 },
+  { title: "手机型号", dataIndex: "model", width: 180 },
+  { title: "系统版本", dataIndex: "system_version", width: 180 },
+  { title: "sdk版本", dataIndex: "sdk_version", width: 180 },
+  { title: "设备类型", dataIndex: "vt", type: "dict", dict: "vt", width: 120 },
+  { title: "渠道名", dataIndex: "agent_name", width: 180 },
+  { title: "负责人", dataIndex: "auth_name", width: 180 },
+]);
+
+// 页面数据初始化
+const initPage = async () => {
+  await getGameList();
+};
+
+// SaTable 数据请求
+const refresh = async () => {
+  crudRef.value?.refresh();
+};
+
+// 获取游戏列表
+const getGameList = async () => {
+  const res = await commonApi.getGameListTreeApi();
+  if (res.code === 200) {
+    gameList.value = res.data;
+  }
+};
+
+// 页面加载完成执行
+onMounted(async () => {
+  initPage();
+  searchForm.value.reg_time = dayjs().format("YYYY-MM-DD");
+  // refresh();
+});
+</script>