mirror of
https://github.com/EasyTier/EasytierGame.git
synced 2025-05-19 10:27:56 +00:00
131 lines
3.6 KiB
Vue
131 lines
3.6 KiB
Vue
<template>
|
|
<div class="flex flex-col gap-[10px] h-full">
|
|
<ElForm
|
|
size="small"
|
|
label-position="top"
|
|
:model="mainStore.serverConfig"
|
|
>
|
|
<ElFormItem
|
|
label="白名单"
|
|
prop="ServerWhiteList"
|
|
class="full-label full-content overflow-hidden !flex flex-col h-full !mb-[0]"
|
|
>
|
|
<template #label>
|
|
<div class="flex items-center gap-[10px]">
|
|
白名单
|
|
<ElSwitch
|
|
v-model="mainStore.serverConfig.enableWhiteList"
|
|
inline-prompt
|
|
active-text="启用"
|
|
inactive-text="禁用"
|
|
></ElSwitch>
|
|
|
|
<div class="ml-auto">
|
|
<ElTooltip
|
|
placement="top"
|
|
content="打开软件的时候,就会开启这个自建服务"
|
|
>
|
|
<ElCheckbox v-model="mainStore.serverConfig.autoStart">自动启动</ElCheckbox>
|
|
</ElTooltip>
|
|
<ElTooltip
|
|
placement="top"
|
|
content="帮助其他虚拟网建立P2P链接"
|
|
>
|
|
<ElCheckbox v-model="mainStore.serverConfig.relayAllPeerrpc">转发所有对等节点的RPC数据包</ElCheckbox>
|
|
</ElTooltip>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<div class="h-full w-full flex flex-col overflow-hidden">
|
|
<div class="flex-1 overflow-auto">
|
|
<ElInput
|
|
:disabled="!mainStore.serverConfig.enableWhiteList"
|
|
placeholder="一行一个,支持通配符列表,如(ab*)。当该参数的列表为空时,就不会为所有其他网络提供转发服务。"
|
|
:maxlength="1000"
|
|
v-model="mainStore.serverConfig.serverWhiteList"
|
|
type="textarea"
|
|
:rows="3"
|
|
resize="none"
|
|
></ElInput>
|
|
</div>
|
|
</div>
|
|
</ElFormItem>
|
|
</ElForm>
|
|
<div class="flex items-center gap-[10px]">
|
|
<div class="flex items-center gap-[5px]">
|
|
<ElText>服务器端口</ElText>
|
|
<div class="max-w-[100px]">
|
|
<ElTooltip content="端口号">
|
|
<ElInput v-model="mainStore.serverConfig.port"></ElInput>
|
|
</ElTooltip>
|
|
</div>
|
|
</div>
|
|
<ElButton
|
|
size="large"
|
|
:loading="data.loading"
|
|
:type="data.isStart ? 'danger' : 'primary'"
|
|
@click="hanldeClickStart"
|
|
>
|
|
{{ !data.isStart ? "启动服务器" : "停止服务器" }}
|
|
</ElButton>
|
|
</div>
|
|
|
|
<ElInput
|
|
placeholder="服务器日志"
|
|
:model-value="data.log"
|
|
type="textarea"
|
|
:rows="14"
|
|
resize="none"
|
|
></ElInput>
|
|
</div>
|
|
</template>
|
|
<script setup lang="ts">
|
|
import useMainStore from "@/stores/index";
|
|
import { reactive, onMounted, onBeforeUnmount } from "vue";
|
|
import { getCurrentWindow } from "@tauri-apps/api/window";
|
|
import { listen, type UnlistenFn } from "@tauri-apps/api/event";
|
|
import { getServerArgs } from "@/composables/server";
|
|
import { dataSubscribe } from "@/composables/windows";
|
|
|
|
const appWindow = getCurrentWindow();
|
|
const mainStore = useMainStore();
|
|
const data = reactive({
|
|
log: "",
|
|
isStart: false,
|
|
loading: true
|
|
});
|
|
|
|
const listenStart = async () => {
|
|
const unListen = await listen<{ log: string; threadId: number | null }>("server_logs", event => {
|
|
data.log = event.payload.log || "";
|
|
if (event.payload.threadId) {
|
|
data.isStart = true;
|
|
} else {
|
|
data.isStart = false;
|
|
}
|
|
data.loading = false;
|
|
});
|
|
return unListen;
|
|
};
|
|
|
|
let unlistenStart: UnlistenFn | null = null;
|
|
onMounted(async () => {
|
|
unlistenStart = await listenStart();
|
|
});
|
|
|
|
onBeforeUnmount(() => {
|
|
unlistenStart && unlistenStart();
|
|
});
|
|
|
|
const hanldeClickStart = async () => {
|
|
data.loading = true;
|
|
const args = getServerArgs();
|
|
await appWindow.emitTo("main", "startStopServer", { args });
|
|
};
|
|
|
|
dataSubscribe(async (...a) => {
|
|
return { serverConfig: { ...mainStore.serverConfig }};
|
|
});
|
|
|
|
</script>
|