提交后台

This commit is contained in:
zpc 2024-12-10 16:31:02 +08:00
parent 2a1f568b35
commit 4b21cb794d
7 changed files with 148 additions and 213 deletions

View File

@ -91,6 +91,8 @@ declare module 'vue' {
ElImage: typeof import('element-plus/es')['ElImage']
ElMain: typeof import('element-plus/es')['ElMain']
ElSpace: typeof import('element-plus/es')['ElSpace']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElText: typeof import('element-plus/es')['ElText']
ElTimeline: typeof import('element-plus/es')['ElTimeline']
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']

View File

@ -12,7 +12,7 @@ import Tools from "@/core/utils/Tools";
import ThemeStore from "@/core/store/layouts/ThemeStore";
import LanguageComponent from "@/locale/components/LanguageComponent.vue";
import { computed } from "vue";
import AppMonitorService from "@/services/Apps/Ext/AppMonitorService";
const appStore = AppStore();
const coreStore = CoreStore();
const menuStore = MenuStore();
@ -43,42 +43,39 @@ function logOut() {
function onReload() {
coreStore.refresh(router.currentRoute.value.fullPath);
}
//
function jumpDoc() {
window.open("https://www.yuque.com/u378909/yidf7v", "_black");
let isClearAllCacheData = false;
//
async function onDelCache() {
if (isClearAllCacheData) {
Tools.message.error("正在删除缓存中");
return;
}
isClearAllCacheData = true;
var data = await AppMonitorService.ClearAllCacheData();
console.log(data);
Tools.message.success("缓存清除成功");
isClearAllCacheData = false;
//pro
function jumpPro() {
window.open("http://124.221.128.7:6600/", "_black");
}
</script>
<template>
<a-layout-header class="hzy-layout-header">
<div
class="hzy-header-btn"
@click="menuStore.onChangeCollapse(!menuStore.state.isCollapse)"
>
<!-- <a-tooltip>
<template #title>菜单收展</template>
<AppIcon :name="menuStore.state.isCollapse ? 'MenuUnfoldOutlined' : 'MenuFoldOutlined'" :size="iconSize" />
</a-tooltip> -->
<AppIcon
:name="
menuStore.state.isCollapse ? 'MenuUnfoldOutlined' : 'MenuFoldOutlined'
"
:size="iconSize"
/>
<div class="hzy-header-btn" @click="menuStore.onChangeCollapse(!menuStore.state.isCollapse)">
<AppIcon :name="menuStore.state.isCollapse ? 'MenuUnfoldOutlined' : 'MenuFoldOutlined'
" :size="iconSize" />
</div>
<div
style="flex: 1 1 0%; height: 100%; display: flex"
v-if="menuStore.state.menuMode == EMenuMode.top"
>
<div style="flex: 1 1 0%; height: 100%; display: flex" v-if="menuStore.state.menuMode == EMenuMode.top">
<LayoutOneLevelMenu />
</div>
<div style="flex: 1 1 0%" v-else></div>
<a-tooltip>
<template #title>清除缓存</template>
<div class="hzy-header-btn" @click="onDelCache">
<AppIcon name="DeleteOutlined" :size="iconSize" />
</div>
</a-tooltip>
<!-- 刷新当前选项卡 -->
<a-tooltip>
@ -91,31 +88,16 @@ function jumpPro() {
<!-- 全屏 -->
<a-tooltip>
<template #title>全屏</template>
<div
class="hzy-header-btn"
@click="toggle"
v-if="!coreStore.state.isMobile"
>
<AppIcon
:name="isFullscreen ? 'FullscreenExitOutlined' : 'FullscreenOutlined'"
:size="iconSize"
/>
<div class="hzy-header-btn" @click="toggle" v-if="!coreStore.state.isMobile">
<AppIcon :name="isFullscreen ? 'FullscreenExitOutlined' : 'FullscreenOutlined'" :size="iconSize" />
</div>
</a-tooltip>
<!-- 白昼 / 黑夜 -->
<a-tooltip>
<template #title>白昼 / 黑夜</template>
<div
class="hzy-header-btn"
@click="themeStore.changeTheme(!themeStore.state.isDark)"
>
<AppIcon
name="MoonNight"
:size="iconSize + 5"
style="color: white"
v-if="themeStore.state.isDark"
/>
<div class="hzy-header-btn" @click="themeStore.changeTheme(!themeStore.state.isDark)">
<AppIcon name="MoonNight" :size="iconSize + 5" style="color: white" v-if="themeStore.state.isDark" />
<AppIcon name="Sunny" :size="iconSize + 5" v-else />
</div>
</a-tooltip>
@ -160,6 +142,7 @@ function jumpPro() {
<style lang="less">
.hzy-layout {
//
.ant-layout-header {
position: relative;

View File

@ -36,5 +36,19 @@ export default class AppMonitorService {
static GetAppMonitorHour() {
return Http.get(`${this.urlPrefix}/GetAppMonitorHour`, {}, false)
}
/**
*
* @returns
*/
static ClearAllCacheData() {
return Http.get(`${AppConsts.domainExServerApi}/api/Cache/ClearAllCacheData`, {}, true)
}
/**
* 线
* @returns
*/
static GetCurrentOnlineUsers() {
return Http.get(`${this.urlPrefix}/GetCurrentOnlineUsers`, {})
}
}

View File

@ -8,7 +8,7 @@ import Tools from "@/core/utils/Tools";
import PageContainerGame from "@/core/components/PageContainerGame.vue";
import TableCurdV1 from "@/core/components/curd/TableCurdV1.vue";
import AppConfigService from "@/services/apps/Ext/AppConfigService";
import MonacoEditor from "@/core/components/MonacoEditor.vue";
defineOptions({ name: "appConfigIndex" });
var columns = [
{
@ -125,6 +125,13 @@ async function findList() {
const res = await AppConfigService.findForm();
state.loading = false;
if (res.code != 200) return;
if (res.data != null) {
res.data.form._cacheRequestUrls = "";
if (res.data.form.cacheRequestUrls != null && res.data.form.cacheRequestUrls.length > 0) {
res.data.form._cacheRequestUrls = JSON.stringify(res.data.form.cacheRequestUrls);
console.log(res.data.form._cacheRequestUrls);
}
}
state.vm = res.data;
// state.visible = false;
@ -139,9 +146,19 @@ function save() {
refForm.value?.validate().then(async () => {
try {
state.loading = true;
var saveData = state.vm.form;
if (saveData._cacheRequestUrls == "") {
saveData.cacheRequestUrls = [];
} else {
var o = JSON.parse(saveData._cacheRequestUrls);
saveData.cacheRequestUrls = o;
delete saveData._cacheRequestUrls;
}
console.log(saveData);
const result = await AppConfigService.saveForm(
state.vm.id,
state.vm.form
saveData
);
state.loading = false;
if (result.code != 200) return;
@ -193,182 +210,94 @@ function exportExcel() {
<a-form ref="refForm" layout="vertical" :model="state.vm.form">
<a-row :gutter="[16, 0]">
<a-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<a-form-item
label="系统标识"
name="tenantId"
:rules="[{ required: true, message: '请输入', trigger: 'blur' }]"
>
<a-input
v-model:value="state.vm.form.tenantId"
:readonly="true"
placeholder="请输入"
/>
<a-form-item label="系统标识" name="tenantId" :rules="[{ required: true, message: '请输入', trigger: 'blur' }]">
<a-input v-model:value="state.vm.form.tenantId" :readonly="true" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<a-form-item
label="名称"
name="name"
:rules="[{ required: true, message: '请输入', trigger: 'blur' }]"
>
<a-input
v-model:value="state.vm.form.name"
:readonly="readonly"
placeholder="请输入"
/>
<a-form-item label="名称" name="name" :rules="[{ required: true, message: '请输入', trigger: 'blur' }]">
<a-input v-model:value="state.vm.form.name" :readonly="readonly" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<a-form-item
label="域名"
name="domainName"
:rules="[{ required: true, message: '请输入', trigger: 'blur' }]"
>
<a-input
v-model:value="state.vm.form.domainName"
:readonly="readonly"
placeholder="请输入"
/>
<a-form-item label="域名" name="domainName" :rules="[{ required: true, message: '请输入', trigger: 'blur' }]">
<a-input v-model:value="state.vm.form.domainName" :readonly="readonly" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<a-form-item
label="唯一标识"
name="identifier"
:rules="[{ message: '请输入', trigger: 'blur' }]"
>
<a-input
v-model:value="state.vm.form.identifier"
:readonly="readonly"
placeholder="请输入"
/>
<a-form-item label="唯一标识" name="identifier" :rules="[{ message: '请输入', trigger: 'blur' }]">
<a-input v-model:value="state.vm.form.identifier" :readonly="readonly" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<a-form-item
label="隐私协议地址"
name="privacyAgreement"
:readonly="readonly"
>
<a-input
v-model:value="state.vm.form.privacyAgreement"
:readonly="readonly"
placeholder="请输入"
/>
<a-form-item label="隐私协议地址" name="privacyAgreement" :readonly="readonly">
<a-input v-model:value="state.vm.form.privacyAgreement" :readonly="readonly" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<a-form-item
label="用户协议地址"
name="userAgreement"
:readonly="readonly"
>
<a-input
v-model:value="state.vm.form.userAgreement"
:readonly="readonly"
placeholder="请输入"
/>
<a-form-item label="用户协议地址" name="userAgreement" :readonly="readonly">
<a-input v-model:value="state.vm.form.userAgreement" :readonly="readonly" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<a-form-item
label="app版本"
name="appVersion"
:readonly="readonly"
:rules="[{ message: '请输入', trigger: 'blur' }]"
>
<a-input
v-model:value="state.vm.form.appVersion"
:readonly="readonly"
placeholder="请输入"
/>
<a-form-item label="app版本" name="appVersion" :readonly="readonly"
:rules="[{ message: '请输入', trigger: 'blur' }]">
<a-input v-model:value="state.vm.form.appVersion" :readonly="readonly" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<a-form-item label="多语言请求地址" name="languageRequestUrl" :readonly="readonly"
:rules="[{ message: '请输入', trigger: 'blur' }]">
<a-input v-model:value="state.vm.form.languageRequestUrl" :readonly="readonly" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<a-form-item
label="缓存数据"
:readonly="readonly"
name="redisConnectionString"
:rules="[{ message: '请输入', trigger: 'blur' }]"
>
<a-input
v-model:value="state.vm.form.redisConnectionString"
:readonly="readonly"
placeholder="请输入"
/>
<a-form-item label="扩展数据库" name="cacheRequestUrls">
<MonacoEditor v-model:model-value="state.vm.form._cacheRequestUrls"></MonacoEditor>
</a-form-item>
</a-col>
<a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<a-form-item
label="扩展数据库"
name="extConnectionString"
:rules="[{ message: '请输入', trigger: 'blur' }]"
>
<a-textarea
v-model:value="state.vm.form.extConnectionString"
:readonly="readonly"
placeholder="请输入"
/>
<a-form-item label="缓存数据" :readonly="readonly" name="redisConnectionString"
:rules="[{ message: '请输入', trigger: 'blur' }]">
<a-input v-model:value="state.vm.form.redisConnectionString" :readonly="readonly" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<a-form-item
label="游戏数据库"
name="gameConnectionString"
:rules="[{ message: '请输入', trigger: 'blur' }]"
>
<a-textarea
v-model:value="state.vm.form.gameConnectionString"
placeholder="请输入"
:readonly="readonly"
/>
<a-form-item label="扩展数据库" name="extConnectionString" :rules="[{ message: '请输入', trigger: 'blur' }]">
<a-textarea v-model:value="state.vm.form.extConnectionString" :readonly="readonly" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<a-form-item label="游戏数据库" name="gameConnectionString" :rules="[{ message: '请输入', trigger: 'blur' }]">
<a-textarea v-model:value="state.vm.form.gameConnectionString" placeholder="请输入" :readonly="readonly" />
</a-form-item>
</a-col>
<a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<a-form-item
label="手机数据库"
name="phoneConnectionString"
:rules="[{ message: '请输入', trigger: 'blur' }]"
>
<a-textarea
v-model:value="state.vm.form.phoneConnectionString"
placeholder="请输入"
/>
<a-form-item label="手机数据库" name="phoneConnectionString" :rules="[{ message: '请输入', trigger: 'blur' }]">
<a-textarea v-model:value="state.vm.form.phoneConnectionString" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<a-form-item
label="用户数据"
name="userConnectionString"
:rules="[{ message: '请输入', trigger: 'blur' }]"
>
<a-textarea
v-model:value="state.vm.form.userConnectionString"
placeholder="请输入"
:readonly="readonly"
/>
<a-form-item label="用户数据" name="userConnectionString" :rules="[{ message: '请输入', trigger: 'blur' }]">
<a-textarea v-model:value="state.vm.form.userConnectionString" placeholder="请输入" :readonly="readonly" />
</a-form-item>
</a-col>
</a-row>
</a-form>
<a-space :size="15">
<a-button
type="primary"
v-if="power.update"
@click="readonly = !readonly"
>{{ readonly ? "修改" : "取消修改" }}</a-button
>
<a-button
type="primary"
:loading="state.loading"
@click="save()"
v-if="!readonly"
>保存</a-button
>
<a-button type="primary" v-if="power.update" @click="readonly = !readonly">{{ readonly ? "修改" : "取消修改"
}}</a-button>
<a-button type="primary" :loading="state.loading" @click="save()" v-if="!readonly">保存</a-button>
</a-space>
<Info ref="refInfo" :onSuccess="() => findList()" />
</PageContainerGame>
</template>
<style>
.monaco-editor {
width: 100%;
height: 100px;
}
</style>

View File

@ -29,24 +29,16 @@ let visible = ref(false);
<template>
<PageContainer :show="false" class="p-16">
<!-- 基础统计数据 -->
<div @click="visible = !visible">
<WorkOrder />
</div>
<!-- 近一年设备销售量 -->
<div class="mt-16">
<a-row :gutter="[16, 16]">
<a-col :xs="24" :sm="24" :md="12" :lg="16" :xl="12">
<WorkOrderStatistics
:data="login"
v-if="login != null && login.length > 0"
/>
<WorkOrderStatistics :data="login" v-if="login != null && login.length > 0" />
</a-col>
<a-col :xs="24" :sm="24" :md="12" :lg="16" :xl="12">
<UserSignStatistics
:data="registr"
v-if="registr != null && registr.length > 0"
/>
<UserSignStatistics :data="registr" v-if="registr != null && registr.length > 0" />
</a-col>
<a-col :xs="24" :sm="24" :md="12" :lg="16" :xl="12">
<PlayGameStatistics :data="playGame" />
@ -60,7 +52,9 @@ let visible = ref(false);
</div>
<!-- 抽屉 -->
<a-drawer v-model:open="visible" title="更多" placement="right" width="90%">
<Home1 />
<!-- <Home1 /> -->
12312
</a-drawer>
</PageContainer>
</template>

View File

@ -104,25 +104,26 @@ onBeforeUnmount(() => {
clearInterval(timer.value);
}
});
let visible = ref(false);
let visbleIndex = ref(0);
const tableData = ref([])
async function onDeList(index) {
if (index == 2) {
visible.value = !visible.value;
visbleIndex = index;
var c = await AppMonitorService.GetCurrentOnlineUsers();
tableData.value = c;
}
}
</script>
<template>
<a-row class="work-order" :gutter="[16, 16]">
<a-col
v-for="(card, index) in cards"
:key="index"
:xs="24"
:sm="12"
:md="12"
:lg="6"
:xl="4"
>
<a-card
:bordered="false"
hoverable
:style="{ background: card.color }"
:bodyStyle="{ padding: 0 }"
>
<a-col v-for="(card, index) in cards" :key="index" :xs="24" :sm="12" :md="12" :lg="6" :xl="4">
<a-card :bordered="false" hoverable :style="{ background: card.color }" :bodyStyle="{ padding: 0 }"
@click=" onDeList(index)">
<a-row class="text-center p-16">
<a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="8" class="icon">
<AppIcon :name="card.icon" :size="iconSize" style="color: #fff" />
@ -135,6 +136,18 @@ onBeforeUnmount(() => {
</a-card>
</a-col>
</a-row>
<!-- 抽屉 -->
<a-drawer v-model:open="visible" title="更多" placement="right" width="90%">
<el-table :data="tableData" style="width: 100%" v-if="visbleIndex == 2">
<el-table-column type="index" />
<el-table-column prop="userId" label="用户id" width="120" />
<el-table-column prop="nickName" label="昵称" />
<el-table-column prop="phoneNum" label="手机号" />
<el-table-column prop="diamond" label="钻石数" />
<el-table-column prop="deviceNumber" label="设备号" />
</el-table>
</a-drawer>
</template>
<style lang="less">

View File

@ -24,7 +24,7 @@
"secret": "95BB717C61D1ECB0E9FB82C932CC77FF",
"nodes": "http://124.220.55.158:94", //使
"url": "http://124.220.55.158:94",
"env": "DEV",
"env": "TEST",
"UserName": "admin",
"Password": "dbt@com@1234"
},