diff --git a/electron/main.js b/electron/main.js
new file mode 100644
index 0000000..a5e71eb
--- /dev/null
+++ b/electron/main.js
@@ -0,0 +1,53 @@
+const { app, BrowserWindow } = require("electron");
+const path = require("path");
+const http = require("http");
+const httpProxy = require("http-proxy"); // 需要安装:npm install http-proxy
+
+// 创建代理服务器
+const proxyServer = httpProxy.createProxyServer({});
+
+// 定义目标服务
+const proxyTargets = {
+ "/live-digital-avatar-manage": "http://192.168.10.25:8080/live-digital-avatar-manage",
+ "/asr": "http://192.168.10.138:8090",
+ "/tts": "http://192.168.10.113:9880"
+};
+
+// 创建本地 HTTP 服务器
+const server = http.createServer((req, res) => {
+ // 根据请求路径匹配目标服务
+ for (const pathPrefix in proxyTargets) {
+ if (req.url.startsWith(pathPrefix)) {
+ const target = proxyTargets[pathPrefix];
+ // 重写路径(移除前缀)
+ req.url = req.url.replace(pathPrefix, "");
+ // 转发请求
+ proxyServer.web(req, res, { target });
+ return;
+ }
+ }
+ res.statusCode = 404;
+ res.end("Not Found");
+});
+
+// 启动服务器
+server.listen(3000, () => {
+ console.log("Proxy server running on port 3000");
+});
+
+function createWindow() {
+ const win = new BrowserWindow({
+ width: 800,
+ height: 600,
+ webPreferences: {
+ preload: path.join(__dirname, "preload.js"), // 使用计算后的 __dirname
+ nodeIntegration: true,
+ contextIsolation: false
+ }
+ });
+
+ // 加载应用
+ win.loadFile("dist/index.html");
+}
+
+app.whenReady().then(createWindow);
diff --git a/electron/preload.js b/electron/preload.js
new file mode 100644
index 0000000..f2b8530
--- /dev/null
+++ b/electron/preload.js
@@ -0,0 +1,6 @@
+import { contextBridge } from "electron";
+
+// 安全地暴露 API 给渲染进程
+contextBridge.exposeInMainWorld("electronAPI", {
+ // 可以在这里添加需要暴露的 API
+});
diff --git a/package-lock.json b/package-lock.json
index 682053e..18153c9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4029,6 +4029,12 @@
"@iconify/types": "*"
}
},
+ "node_modules/@iconify/types": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/@iconify/types/-/types-2.0.0.tgz",
+ "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
+ "dev": true
+ },
"node_modules/@iconify/vue": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/@iconify/vue/-/vue-4.3.0.tgz",
@@ -4044,12 +4050,6 @@
"vue": ">=3"
}
},
- "node_modules/@iconify/vue/node_modules/@iconify/types": {
- "version": "2.0.0",
- "resolved": "https://registry.npmmirror.com/@iconify/types/-/types-2.0.0.tgz",
- "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
- "dev": true
- },
"node_modules/@isaacs/balanced-match": {
"version": "4.0.1",
"resolved": "https://registry.npmmirror.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
@@ -4154,12 +4154,6 @@
"node": ">=18.12.0"
}
},
- "node_modules/@nuxt/kit/node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "optional": true
- },
"node_modules/@nuxt/kit/node_modules/c12": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/c12/-/c12-3.1.0.tgz",
@@ -5929,18 +5923,42 @@
"@types/estree": "*"
}
},
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "devOptional": true
+ },
+ "node_modules/@types/http-cache-semantics": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmmirror.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
+ "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==",
+ "dev": true
+ },
"node_modules/@types/js-cookie": {
"version": "3.0.6",
"resolved": "https://registry.npmmirror.com/@types/js-cookie/-/js-cookie-3.0.6.tgz",
"integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==",
"dev": true
},
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true
+ },
"node_modules/@types/mockjs": {
"version": "1.0.10",
"resolved": "https://registry.npmmirror.com/@types/mockjs/-/mockjs-1.0.10.tgz",
"integrity": "sha512-SXgrhajHG7boLv6oU93CcmdDm0HYRiceuz6b+7z+/2lCJPTWDv0V5YiwFHT2ejE4bQqgSXQiVPQYPWv7LGsK1g==",
"dev": true
},
+ "node_modules/@types/ms": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/@types/ms/-/ms-2.1.0.tgz",
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+ "dev": true
+ },
"node_modules/@types/node": {
"version": "20.19.9",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-20.19.9.tgz",
@@ -6330,12 +6348,6 @@
"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
}
},
- "node_modules/@typescript-eslint/utils/node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
- },
"node_modules/@typescript-eslint/utils/node_modules/@types/semver": {
"version": "7.7.0",
"resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.7.0.tgz",
@@ -21184,13 +21196,6 @@
"url": "https://opencollective.com/webpack"
}
},
- "node_modules/schema-utils/node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true,
- "peer": true
- },
"node_modules/schema-utils/node_modules/ajv": {
"version": "8.17.1",
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
@@ -24279,20 +24284,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/webpack/node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
- "dev": true,
- "peer": true
- },
- "node_modules/webpack/node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true,
- "peer": true
- },
"node_modules/webpack/node_modules/eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",
diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts
index 2a87da3..b756684 100644
--- a/src/router/modules/remaining.ts
+++ b/src/router/modules/remaining.ts
@@ -53,6 +53,28 @@ export default [
}
]
},
+ {
+ path: "/AiLive",
+ redirect: "/AiLive",
+ meta: {
+ title: "AI直播",
+ rank: 4
+ },
+ children: [
+ {
+ path: "/AiLive",
+ name: "AiLive",
+ component: () => import("@/views/AiLive/index.vue"),
+ meta: {
+ title: "数字人",
+ showLink: true,
+ showParent: true,
+ roles: ["admin", "common"]
+ },
+ children: []
+ }
+ ]
+ },
{
path: "/redirect",
component: Layout,
diff --git a/src/views/AiLive/index.vue b/src/views/AiLive/index.vue
new file mode 100644
index 0000000..9b3cc91
--- /dev/null
+++ b/src/views/AiLive/index.vue
@@ -0,0 +1,9 @@
+
+
+
+
+