feat: webui-test-0

This commit is contained in:
手瓜一十雪 2024-05-05 14:32:48 +08:00
parent c4cf800142
commit 31c330826e
5 changed files with 228 additions and 14 deletions

View File

@ -8,11 +8,12 @@ import { checkVersion } from '@/common/utils/version';
import { log, logDebug, logError, LogLevel, setLogLevel } from '@/common/utils/log'; import { log, logDebug, logError, LogLevel, setLogLevel } from '@/common/utils/log';
import { NapCatOnebot11 } from '@/onebot11/main'; import { NapCatOnebot11 } from '@/onebot11/main';
import { hookApi } from '@/core/external/hook'; import { hookApi } from '@/core/external/hook';
import { InitWebUi } from './webui/index';
program program
.option('-q, --qq <type>', 'QQ号') .option('-q, --qq <type>', 'QQ号')
.parse(process.argv); .parse(process.argv);
InitWebUi();
const cmdOptions = program.opts(); const cmdOptions = program.opts();
// console.log(process.argv); // console.log(process.argv);

12
src/webui/index.ts Normal file
View File

@ -0,0 +1,12 @@
import express from 'express';
import { resolve } from 'node:path';
const app = express()
export async function InitWebUi() {
app.use(express.json())
app.use('/webui', express.static(resolve(__dirname, './static')))
// 启动WebUi
app.listen(6099, async () => {
console.log(`WebUi is running at IP:6099`)
})
}

View File

@ -0,0 +1,180 @@
setting-item[is-hidden],
setting-item[is-hidden] + setting-divider {
display: none !important;
}
.config-host-list {
width: 100%;
padding-left: 16px;
box-sizing: border-box;
}
.config-host-list[is-hidden],
.config-host-list[is-hidden] + setting-divider {
display: none !important;
}
setting-item .q-input {
height: 24px;
width: 100px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
box-sizing: border-box;
position: relative;
background: var(--bg_bottom_light);
border: 1px solid var(--border_dark);
}
setting-item .q-input .q-input__inner {
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
box-sizing: border-box;
color: var(--text_primary);
font-family: inherit;
font-size: 12px;
height: 24px;
line-height: 24px;
width: 100%;
border: 1px solid transparent;
padding: 0px 8px;
}
setting-item .q-input input[type='number'].q-input__inner::-webkit-outer-spin-button,
setting-item .q-input input[type='number'].q-input__inner::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
.config-host-list setting-item.setting-host-list-item .q-input {
width: 260px;
}
setting-item a {
color: var(--text-link);
}
setting-item a:hover {
color: var(--hover-link);
}
setting-item a:active,
setting-item a:visited {
color: var(--text-link);
}
ob-setting-select {
width: 100px;
}
ob-setting-select,
ob-setting-select::part(parent),
ob-setting-select::part(button) {
display: block;
position: relative;
height: 24px;
font-size: 12px;
line-height: 24px;
box-sizing: border-box;
}
ob-setting-select::part(button) {
display: flex;
padding: 0px 8px;
background-color: transparent;
border-radius: 4px;
border: 1px solid var(--border_dark);
z-index: 5;
cursor: default;
align-items: center;
flex-direction: row;
flex-wrap: nowrap;
}
ob-setting-select::part(current-text) {
display: block;
margin-right: 8px;
padding: 0px;
background: none;
background-color: transparent;
font-size: 12px;
color: var(--text_primary);
text-overflow: ellipsis;
border-radius: 0px;
border: none;
outline: none;
overflow: hidden;
appearance: none;
box-sizing: border-box;
cursor: default;
flex: 1;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
-webkit-pointer-events: none;
-moz-pointer-events: none;
-ms-pointer-events: none;
-o-pointer-events: none;
pointer-events: none;
}
ob-setting-select::part(button-arrow) {
position: relative;
display: block;
width: 16px;
height: 16px;
color: var(--icon_primary);
}
ob-setting-select::part(option-list) {
display: flex;
position: absolute;
top: 100%;
padding: 4px;
margin: 5px 0px;
width: 100%;
max-height: var(--q-contextmenu-max-height);
background-color: var(--blur_middle_standard);
background-clip: padding-box;
backdrop-filter: blur(8px);
font-size: 12px;
box-shadow: var(--shadow_bg_middle_secondary);
border: 1px solid var(--border_secondary);
border-radius: 4px;
box-sizing: border-box;
app-region: no-drag;
overflow-x: hidden;
overflow-y: auto;
list-style: none;
z-index: 999;
flex-direction: column;
align-items: stretch;
flex-wrap: nowrap;
justify-content: flex-start;
gap: 4px;
}
#llonebot-error {
display: none;
}
#llonebot-error setting-panel {
background: rgba(255, 0, 0, 0.5);
color: white;
}
#llonebot-error setting-panel pre {
margin: 0;
padding: 16px;
box-sizing: border-box;
}
#llonebot-error setting-panel pre code {
font-family: 'FiraCode Nerd Font', 'Fira Code', 'Cascadia Code', Consolas, 'Courier New', monospace;
}
#llonebot-error.show {
display: block;
}

View File

@ -1,9 +1,9 @@
export interface OB11Config { export interface OB11Config {
httpHost: string; httpHost: "",
httpPort: number; httpPort: number;
httpPostUrls: string[]; httpPostUrls: string[];
httpSecret: string; httpSecret: "",
wsHost: string; wsHost: "",
wsPort: number; wsPort: number;
wsReverseUrls: string[]; wsReverseUrls: string[];
enableHttp: boolean; enableHttp: boolean;
@ -16,8 +16,8 @@ export interface OB11Config {
enableLocalFile2Url: boolean; enableLocalFile2Url: boolean;
debug: boolean; debug: boolean;
heartInterval: number; heartInterval: number;
token: string; token: "",
musicSignUrl: string; musicSignUrl: "",
} }
class WebUiApiWrapper { class WebUiApiWrapper {
@ -26,7 +26,28 @@ class WebUiApiWrapper {
} }
public async getOB11Config(): Promise<OB11Config> { public async getOB11Config(): Promise<OB11Config> {
return {} as OB11Config; // 返回示例配置
return {
httpHost: "",
httpPort: 3000,
httpPostUrls: [],
httpSecret: "",
wsHost: "",
wsPort: 3000,
wsReverseUrls: [],
enableHttp: false,
enableHttpHeart: false,
enableHttpPost: false,
enableWs: false,
enableWsReverse: false,
messagePostFormat: 'array',
reportSelfMessage: false,
enableLocalFile2Url: false,
debug: false,
heartInterval: 60000,
token: "",
musicSignUrl: "",
};
} }
} }
export const WebUiApi = new WebUiApiWrapper(); export const WebUiApi = new WebUiApiWrapper();

View File

@ -4,10 +4,10 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/assets/color.css" /> <link rel="stylesheet" href="./assets/color.css" />
<link rel="stylesheet" href="/assets/style.css" /> <link rel="stylesheet" href="./assets/style.css" />
<link rel="stylesheet" href="/assets/NapCat.css" /> <link rel="stylesheet" href="./assets/NapCat.css" />
<link rel="stylesheet" href="/assets/webcomponents.css" /> <link rel="stylesheet" href="./assets/webcomponents.css" />
<script src="https://unpkg.com/axios/dist/axios.min.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<title>NapCat-WebUi</title> <title>NapCat-WebUi</title>
</head> </head>