flex-mcp 1.1.10 → 1.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +3 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/update.d.ts +6 -0
- package/dist/api/update.d.ts.map +1 -0
- package/dist/api/update.js +269 -0
- package/dist/api/update.js.map +1 -0
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +37 -8
- package/dist/update.js.map +1 -1
- package/dist/web/assets/{Blank-BlKddJHU.js → Blank-DnwEW0VT.js} +1 -1
- package/dist/web/assets/{Configs-sOwPYGsS.js → Configs-Bq1LRu7c.js} +1 -1
- package/dist/web/assets/{Dashboard-Bq0D1J8c.js → Dashboard-DG4KlU_v.js} +1 -1
- package/dist/web/assets/{InitScriptEditor-D6nioBYF.js → InitScriptEditor-BpsNM3mj.js} +1 -1
- package/dist/web/assets/Layout-CZunjis7.js +1 -0
- package/dist/web/assets/Layout-DuBl1mVJ.js +1 -0
- package/dist/web/assets/{Login-Co4BGypj.js → Login-CV4pyxSI.js} +1 -1
- package/dist/web/assets/{Login-Cu2_NRNJ.js → Login-Drzps0QW.js} +1 -1
- package/dist/web/assets/Users-zsruR1wp.js +1 -0
- package/dist/web/assets/{index-h7iG2I9f.js → index-mIcNgFiY.js} +3 -3
- package/dist/web/assets/style-BdM4weEm.css +1 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/assets/Layout-CsVepWQk.js +0 -1
- package/dist/web/assets/Layout-DVbq4zY1.js +0 -1
- package/dist/web/assets/Users-FtcuFUiR.js +0 -1
- package/dist/web/assets/style-BTAlT1zh.css +0 -1
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAS5B,eAAO,MAAM,SAAS,4EAAa,CAAC"}
|
package/dist/api/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import { authRouter } from './auth.js';
|
|
|
8
8
|
import { mcpRouter } from './mcp.js';
|
|
9
9
|
import { tablesRouter } from './tables.js';
|
|
10
10
|
import { promptsRouter } from './prompts.js';
|
|
11
|
+
import { updateRouter } from './update.js';
|
|
11
12
|
export const apiRouter = new Hono();
|
|
12
13
|
// 认证路由
|
|
13
14
|
apiRouter.route('/auth', authRouter);
|
|
@@ -21,4 +22,6 @@ apiRouter.route('/mcp', mcpRouter);
|
|
|
21
22
|
apiRouter.route('/tables', tablesRouter);
|
|
22
23
|
// 提示词管理路由(需要认证)
|
|
23
24
|
apiRouter.route('/prompts', promptsRouter);
|
|
25
|
+
// 更新管理路由(需要管理员认证)
|
|
26
|
+
apiRouter.route('/update', updateRouter);
|
|
24
27
|
//# sourceMappingURL=index.js.map
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;AAEpC,OAAO;AACP,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAErC,eAAe;AACf,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAEtC,eAAe;AACf,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAE1C,iBAAiB;AACjB,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEnC,cAAc;AACd,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAEzC,gBAAgB;AAChB,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAE3C,kBAAkB;AAClB,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/api/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAgD5B,eAAO,MAAM,YAAY,4EAAa,CAAC"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 更新管理 API 路由
|
|
3
|
+
*/
|
|
4
|
+
import { Hono } from 'hono';
|
|
5
|
+
import { authMiddleware, requireAdmin } from './middleware.js';
|
|
6
|
+
import { restartDaemon } from '../daemon.js';
|
|
7
|
+
import pkgUpdateNotifier from 'update-notifier';
|
|
8
|
+
const updateNotifier = pkgUpdateNotifier.default || pkgUpdateNotifier;
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
import * as fs from 'fs';
|
|
12
|
+
import { execSync } from 'child_process';
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = path.dirname(__filename);
|
|
15
|
+
// 读取 package.json(优先读取 server 包的 package.json,因为这是实际发布的包)
|
|
16
|
+
let pkg;
|
|
17
|
+
let packageJsonPath;
|
|
18
|
+
try {
|
|
19
|
+
// 先尝试读取 server 包的 package.json(编译后在 dist 目录,需要向上两级)
|
|
20
|
+
packageJsonPath = path.join(__dirname, '..', '..', 'package.json');
|
|
21
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
22
|
+
pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// 如果不存在,尝试读取项目根目录的 package.json
|
|
26
|
+
const rootPath = path.join(__dirname, '..', '..', '..', 'package.json');
|
|
27
|
+
if (fs.existsSync(rootPath)) {
|
|
28
|
+
packageJsonPath = rootPath;
|
|
29
|
+
pkg = JSON.parse(fs.readFileSync(rootPath, 'utf-8'));
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// 最后尝试当前工作目录
|
|
33
|
+
const cwdPath = path.join(process.cwd(), 'package.json');
|
|
34
|
+
if (fs.existsSync(cwdPath)) {
|
|
35
|
+
packageJsonPath = cwdPath;
|
|
36
|
+
pkg = JSON.parse(fs.readFileSync(cwdPath, 'utf-8'));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
throw new Error(`无法找到 package.json,尝试的路径: ${packageJsonPath}, ${rootPath}, ${cwdPath}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// 验证包信息
|
|
44
|
+
if (!pkg.name || !pkg.version) {
|
|
45
|
+
throw new Error(`package.json 缺少必要字段: name=${pkg.name}, version=${pkg.version}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
throw new Error(`无法读取 package.json: ${error.message}`);
|
|
50
|
+
}
|
|
51
|
+
export const updateRouter = new Hono();
|
|
52
|
+
/**
|
|
53
|
+
* 获取当前版本(只需要认证,不需要管理员权限)
|
|
54
|
+
*/
|
|
55
|
+
updateRouter.get('/version', authMiddleware, async (c) => {
|
|
56
|
+
try {
|
|
57
|
+
return c.json({
|
|
58
|
+
success: true,
|
|
59
|
+
version: pkg.version,
|
|
60
|
+
name: pkg.name,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
return c.json({
|
|
65
|
+
success: false,
|
|
66
|
+
error: error.message || '获取版本失败',
|
|
67
|
+
}, 500);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
// 其他更新路由需要管理员权限
|
|
71
|
+
updateRouter.use('/check', authMiddleware);
|
|
72
|
+
updateRouter.use('/check', requireAdmin());
|
|
73
|
+
updateRouter.use('/execute', authMiddleware);
|
|
74
|
+
updateRouter.use('/execute', requireAdmin());
|
|
75
|
+
/**
|
|
76
|
+
* 检查更新
|
|
77
|
+
*/
|
|
78
|
+
updateRouter.get('/check', async (c) => {
|
|
79
|
+
try {
|
|
80
|
+
const notifier = updateNotifier({
|
|
81
|
+
pkg,
|
|
82
|
+
updateCheckInterval: 0, // 强制检查
|
|
83
|
+
});
|
|
84
|
+
// update-notifier v7+ 需要等待检查完成
|
|
85
|
+
// 检查更新是异步的,需要等待完成
|
|
86
|
+
// 尝试多种方法等待检查完成
|
|
87
|
+
if (typeof notifier.check === 'function') {
|
|
88
|
+
await notifier.check();
|
|
89
|
+
}
|
|
90
|
+
else if (typeof notifier.fetchInfo === 'function') {
|
|
91
|
+
await notifier.fetchInfo();
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// 轮询检查 update 属性,最多等待 5 秒
|
|
95
|
+
const maxWait = 5000;
|
|
96
|
+
const interval = 100;
|
|
97
|
+
let waited = 0;
|
|
98
|
+
while (waited < maxWait && !notifier.update) {
|
|
99
|
+
await new Promise(resolve => setTimeout(resolve, interval));
|
|
100
|
+
waited += interval;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (notifier.update) {
|
|
104
|
+
const { current, latest, type } = notifier.update;
|
|
105
|
+
return c.json({
|
|
106
|
+
success: true,
|
|
107
|
+
hasUpdate: true,
|
|
108
|
+
currentVersion: current,
|
|
109
|
+
latestVersion: latest,
|
|
110
|
+
updateType: type,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
return c.json({
|
|
115
|
+
success: true,
|
|
116
|
+
hasUpdate: false,
|
|
117
|
+
currentVersion: pkg.version,
|
|
118
|
+
latestVersion: pkg.version,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
return c.json({
|
|
124
|
+
success: false,
|
|
125
|
+
error: error.message || '检查更新失败',
|
|
126
|
+
}, 500);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
/**
|
|
130
|
+
* 执行更新并重启
|
|
131
|
+
*/
|
|
132
|
+
updateRouter.post('/execute', async (c) => {
|
|
133
|
+
try {
|
|
134
|
+
// 检查是否有更新
|
|
135
|
+
const notifier = updateNotifier({
|
|
136
|
+
pkg,
|
|
137
|
+
updateCheckInterval: 0,
|
|
138
|
+
});
|
|
139
|
+
// update-notifier v7+ 需要等待检查完成
|
|
140
|
+
// 检查更新是异步的,需要等待完成
|
|
141
|
+
// 尝试多种方法等待检查完成
|
|
142
|
+
if (typeof notifier.check === 'function') {
|
|
143
|
+
await notifier.check();
|
|
144
|
+
}
|
|
145
|
+
else if (typeof notifier.fetchInfo === 'function') {
|
|
146
|
+
await notifier.fetchInfo();
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// 轮询检查 update 属性,最多等待 5 秒
|
|
150
|
+
const maxWait = 5000;
|
|
151
|
+
const interval = 100;
|
|
152
|
+
let waited = 0;
|
|
153
|
+
while (waited < maxWait && !notifier.update) {
|
|
154
|
+
await new Promise(resolve => setTimeout(resolve, interval));
|
|
155
|
+
waited += interval;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (!notifier.update) {
|
|
159
|
+
return c.json({
|
|
160
|
+
success: false,
|
|
161
|
+
error: '没有可用的更新',
|
|
162
|
+
}, 400);
|
|
163
|
+
}
|
|
164
|
+
const { latest } = notifier.update;
|
|
165
|
+
// 执行更新
|
|
166
|
+
// 注意:这里需要根据安装方式选择更新命令
|
|
167
|
+
// 由于是在运行时更新,我们需要使用 npm/pnpm 来更新
|
|
168
|
+
const isGlobal = await isGloballyInstalled();
|
|
169
|
+
if (isGlobal) {
|
|
170
|
+
// 全局安装:使用 npm install -g
|
|
171
|
+
execSync(`npm install -g ${pkg.name}@latest`, {
|
|
172
|
+
stdio: 'pipe', // 改为 pipe,避免在 API 响应中输出
|
|
173
|
+
encoding: 'utf-8',
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
// 本地安装:尝试使用 pnpm 或 npm
|
|
178
|
+
const projectRoot = path.dirname(packageJsonPath);
|
|
179
|
+
let updateSuccess = false;
|
|
180
|
+
// 先尝试使用 pnpm(如果项目使用 pnpm)
|
|
181
|
+
try {
|
|
182
|
+
execSync(`pnpm update ${pkg.name}@latest`, {
|
|
183
|
+
stdio: 'pipe',
|
|
184
|
+
encoding: 'utf-8',
|
|
185
|
+
cwd: projectRoot,
|
|
186
|
+
});
|
|
187
|
+
updateSuccess = true;
|
|
188
|
+
}
|
|
189
|
+
catch (pnpmError) {
|
|
190
|
+
// pnpm 失败,尝试 npm
|
|
191
|
+
try {
|
|
192
|
+
execSync(`npm install ${pkg.name}@latest`, {
|
|
193
|
+
stdio: 'pipe',
|
|
194
|
+
encoding: 'utf-8',
|
|
195
|
+
cwd: projectRoot,
|
|
196
|
+
});
|
|
197
|
+
updateSuccess = true;
|
|
198
|
+
}
|
|
199
|
+
catch (npmError) {
|
|
200
|
+
// 如果都失败,抛出错误
|
|
201
|
+
throw new Error(`更新失败: pnpm 和 npm 都失败了`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// 更新完成后,重启守护进程(如果正在运行)
|
|
206
|
+
try {
|
|
207
|
+
await restartDaemon();
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
// 如果重启失败,返回警告但不失败
|
|
211
|
+
console.warn('重启守护进程失败:', error.message);
|
|
212
|
+
return c.json({
|
|
213
|
+
success: true,
|
|
214
|
+
message: '更新成功,但重启失败,请手动重启服务',
|
|
215
|
+
latestVersion: latest,
|
|
216
|
+
restartFailed: true,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
return c.json({
|
|
220
|
+
success: true,
|
|
221
|
+
message: '更新成功并已重启服务',
|
|
222
|
+
latestVersion: latest,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
return c.json({
|
|
227
|
+
success: false,
|
|
228
|
+
error: error.message || '更新失败',
|
|
229
|
+
}, 500);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
/**
|
|
233
|
+
* 检查包是否全局安装
|
|
234
|
+
*/
|
|
235
|
+
async function isGloballyInstalled() {
|
|
236
|
+
try {
|
|
237
|
+
const currentPath = process.argv[1] || __filename;
|
|
238
|
+
const globalPaths = [
|
|
239
|
+
'/usr/local/bin',
|
|
240
|
+
'/usr/bin',
|
|
241
|
+
process.env.HOME + '/.npm-global/bin',
|
|
242
|
+
process.env.APPDATA + '/npm',
|
|
243
|
+
process.env.PROGRAMFILES + '/nodejs',
|
|
244
|
+
];
|
|
245
|
+
for (const globalPath of globalPaths) {
|
|
246
|
+
if (globalPath && currentPath.includes(globalPath)) {
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
const npmGlobalPrefix = execSync('npm config get prefix', {
|
|
252
|
+
encoding: 'utf-8',
|
|
253
|
+
stdio: 'pipe',
|
|
254
|
+
}).trim();
|
|
255
|
+
if (currentPath.includes(npmGlobalPrefix)) {
|
|
256
|
+
return true;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
// 忽略错误
|
|
261
|
+
}
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
// 默认假设是全局安装
|
|
266
|
+
return true;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/api/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,iBAAiB,MAAM,iBAAiB,CAAC;AAChD,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,IAAI,iBAAiB,CAAC;AACtE,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,0DAA0D;AAC1D,IAAI,GAAsC,CAAC;AAC3C,IAAI,eAAuB,CAAC;AAE5B,IAAI,CAAC;IACH,oDAAoD;IACpD,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACnE,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,gCAAgC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACxE,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,eAAe,GAAG,QAAQ,CAAC;YAC3B,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,aAAa;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;YACzD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,eAAe,GAAG,OAAO,CAAC;gBAC1B,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,4BAA4B,eAAe,KAAK,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ;IACR,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC;AAAC,OAAO,KAAU,EAAE,CAAC;IACpB,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;AAEvC;;GAEG;AACH,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACvD,IAAI,CAAC;QACH,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,QAAQ;SACjC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,gBAAgB;AAChB,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAC3C,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;AAC3C,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAC7C,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;AAE7C;;GAEG;AACH,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACrC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,cAAc,CAAC;YAC9B,GAAG;YACH,mBAAmB,EAAE,CAAC,EAAE,OAAO;SAChC,CAAC,CAAC;QAEH,+BAA+B;QAC/B,kBAAkB;QAClB,eAAe;QACf,IAAI,OAAQ,QAAgB,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAClD,MAAO,QAAgB,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;aAAM,IAAI,OAAQ,QAAgB,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7D,MAAO,QAAgB,CAAC,SAAS,EAAE,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,0BAA0B;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC;YACrB,MAAM,QAAQ,GAAG,GAAG,CAAC;YACrB,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,OAAO,MAAM,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC5C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAC5D,MAAM,IAAI,QAAQ,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;YAClD,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,IAAI;gBACf,cAAc,EAAE,OAAO;gBACvB,aAAa,EAAE,MAAM;gBACrB,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,KAAK;gBAChB,cAAc,EAAE,GAAG,CAAC,OAAO;gBAC3B,aAAa,EAAE,GAAG,CAAC,OAAO;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,QAAQ;SACjC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACxC,IAAI,CAAC;QACH,UAAU;QACV,MAAM,QAAQ,GAAG,cAAc,CAAC;YAC9B,GAAG;YACH,mBAAmB,EAAE,CAAC;SACvB,CAAC,CAAC;QAEH,+BAA+B;QAC/B,kBAAkB;QAClB,eAAe;QACf,IAAI,OAAQ,QAAgB,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAClD,MAAO,QAAgB,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;aAAM,IAAI,OAAQ,QAAgB,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7D,MAAO,QAAgB,CAAC,SAAS,EAAE,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,0BAA0B;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC;YACrB,MAAM,QAAQ,GAAG,GAAG,CAAC;YACrB,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,OAAO,MAAM,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC5C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAC5D,MAAM,IAAI,QAAQ,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,SAAS;aACjB,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;QAEnC,OAAO;QACP,sBAAsB;QACtB,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,EAAE,CAAC;QAE7C,IAAI,QAAQ,EAAE,CAAC;YACb,yBAAyB;YACzB,QAAQ,CAAC,kBAAkB,GAAG,CAAC,IAAI,SAAS,EAAE;gBAC5C,KAAK,EAAE,MAAM,EAAE,wBAAwB;gBACvC,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,uBAAuB;YACvB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAClD,IAAI,aAAa,GAAG,KAAK,CAAC;YAE1B,0BAA0B;YAC1B,IAAI,CAAC;gBACH,QAAQ,CAAC,eAAe,GAAG,CAAC,IAAI,SAAS,EAAE;oBACzC,KAAK,EAAE,MAAM;oBACb,QAAQ,EAAE,OAAO;oBACjB,GAAG,EAAE,WAAW;iBACjB,CAAC,CAAC;gBACH,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,iBAAiB;gBACjB,IAAI,CAAC;oBACH,QAAQ,CAAC,eAAe,GAAG,CAAC,IAAI,SAAS,EAAE;wBACzC,KAAK,EAAE,MAAM;wBACb,QAAQ,EAAE,OAAO;wBACjB,GAAG,EAAE,WAAW;qBACjB,CAAC,CAAC;oBACH,aAAa,GAAG,IAAI,CAAC;gBACvB,CAAC;gBAAC,OAAO,QAAQ,EAAE,CAAC;oBAClB,aAAa;oBACb,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC;YACH,MAAM,aAAa,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,kBAAkB;YAClB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,oBAAoB;gBAC7B,aAAa,EAAE,MAAM;gBACrB,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,YAAY;YACrB,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,MAAM;SAC/B,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;AACH,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,KAAK,UAAU,mBAAmB;IAChC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;QAElD,MAAM,WAAW,GAAG;YAClB,gBAAgB;YAChB,UAAU;YACV,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,kBAAkB;YACrC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM;YAC5B,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,SAAS;SACrC,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,UAAU,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,QAAQ,CAAC,uBAAuB,EAAE;gBACxD,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,MAAM;aACd,CAAC,CAAC,IAAI,EAAE,CAAC;YAEV,IAAI,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC1C,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAY;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/update.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAwCA;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAiBlC;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAqFhD"}
|
package/dist/update.js
CHANGED
|
@@ -11,21 +11,31 @@ import { getPidFile } from './daemon.js';
|
|
|
11
11
|
const __filename = fileURLToPath(import.meta.url);
|
|
12
12
|
const __dirname = path.dirname(__filename);
|
|
13
13
|
// 读取 package.json
|
|
14
|
+
// 注意:__dirname 在编译后是 dist 目录,所以需要向上两级到达 packages/server
|
|
14
15
|
const packageJsonPath = path.join(__dirname, '..', 'package.json');
|
|
15
16
|
let pkg;
|
|
16
17
|
try {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
catch (error) {
|
|
20
|
-
// 如果读取失败,尝试从当前目录读取
|
|
21
|
-
const altPath = path.join(process.cwd(), 'package.json');
|
|
22
|
-
if (fs.existsSync(altPath)) {
|
|
23
|
-
pkg = JSON.parse(fs.readFileSync(altPath, 'utf-8'));
|
|
18
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
19
|
+
pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
24
20
|
}
|
|
25
21
|
else {
|
|
26
|
-
|
|
22
|
+
// 如果读取失败,尝试从当前目录读取
|
|
23
|
+
const altPath = path.join(process.cwd(), 'package.json');
|
|
24
|
+
if (fs.existsSync(altPath)) {
|
|
25
|
+
pkg = JSON.parse(fs.readFileSync(altPath, 'utf-8'));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
throw new Error(`无法读取 package.json,尝试的路径: ${packageJsonPath}, ${altPath}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// 验证包信息
|
|
32
|
+
if (!pkg.name || !pkg.version) {
|
|
33
|
+
throw new Error(`package.json 缺少必要字段: name=${pkg.name}, version=${pkg.version}`);
|
|
27
34
|
}
|
|
28
35
|
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
throw new Error(`读取 package.json 失败: ${error.message}`);
|
|
38
|
+
}
|
|
29
39
|
/**
|
|
30
40
|
* 检查更新并提示用户
|
|
31
41
|
*/
|
|
@@ -57,6 +67,25 @@ export async function selfUpdate() {
|
|
|
57
67
|
pkg,
|
|
58
68
|
updateCheckInterval: 0, // 强制检查
|
|
59
69
|
});
|
|
70
|
+
// update-notifier v7+ 需要等待检查完成
|
|
71
|
+
// 检查更新是异步的,需要等待完成
|
|
72
|
+
// 尝试多种方法等待检查完成
|
|
73
|
+
if (typeof notifier.check === 'function') {
|
|
74
|
+
await notifier.check();
|
|
75
|
+
}
|
|
76
|
+
else if (typeof notifier.fetchInfo === 'function') {
|
|
77
|
+
await notifier.fetchInfo();
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// 轮询检查 update 属性,最多等待 5 秒
|
|
81
|
+
const maxWait = 5000;
|
|
82
|
+
const interval = 100;
|
|
83
|
+
let waited = 0;
|
|
84
|
+
while (waited < maxWait && !notifier.update) {
|
|
85
|
+
await new Promise(resolve => setTimeout(resolve, interval));
|
|
86
|
+
waited += interval;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
60
89
|
if (!notifier.update) {
|
|
61
90
|
console.log(`✅ 已是最新版本: ${pkg.version}`);
|
|
62
91
|
return;
|
package/dist/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,iBAAiB,MAAM,iBAAiB,CAAC;AAChD,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,IAAI,iBAAiB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,kBAAkB;AAClB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AACnE,IAAI,GAAsC,CAAC;AAE3C,IAAI,CAAC;IACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as e,c as o,o as a}from"./index-
|
|
1
|
+
import{d as e,c as o,o as a}from"./index-mIcNgFiY.js";import{_ as t}from"./_plugin-vue_export-helper-DlAUqK2U.js";const s={class:"blank-view"},n=e({__name:"Blank",setup(_){return(c,r)=>(a(),o("div",s))}}),m=t(n,[["__scopeId","data-v-1be224a2"]]);export{m as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as N,u as P,r as d,p as S,
|
|
1
|
+
import{d as N,u as P,r as d,p as S,s as j,c as v,b as e,f as s,A as m,m as _,w as o,g as a,B as H,O as T,P as V,e as E,t as b,V as k,G as I,y as L,o as r,h as D,K as G,L as x}from"./index-mIcNgFiY.js";import{u as O,M as A,C as K,I as W}from"./InitScriptEditor-BpsNM3mj.js";import{_ as q}from"./_plugin-vue_export-helper-DlAUqK2U.js";const F={class:"configs-page"},J={style:{position:"absolute",width:"0",height:"0"}},Q={class:"configs-container"},R={class:"config-content"},X={class:"user-selector-section"},Y={class:"selector-header"},Z={key:0,class:"loading-state"},$={key:1,class:"config-stats"},ee={class:"stat-card"},te={class:"stat-content"},se={class:"stat-value"},oe={class:"stat-card"},ae={class:"stat-content"},ne={class:"stat-value"},le={key:0,class:"modal-content"},ie={class:"tab-content"},re={class:"tab-content"},de={class:"tab-content"},ce=N({__name:"Configs",setup(ve){const u=P(),p=O(),i=d(null),f=d(!1),y=d([]),g=d(!1),w=d("components"),l=S(()=>p.currentConfig),C=d([]);async function M(){try{const n=await L.get("/users");y.value=n.data.data.filter(t=>t.role!=="admin"),C.value=y.value.map(t=>({label:t.email,value:t.id}))}catch{u.error("加载用户列表失败")}}async function B(){if(i.value){f.value=!0;try{await p.fetchUserConfig(i.value)}catch(n){u.error(n.message)}finally{f.value=!1}}}function U(){l.value&&(w.value="components",g.value=!0)}async function h(n){if(i.value)try{await p.updateUserConfig(i.value,n),u.success("更新成功")}catch(t){u.error(t.message)}}function z(n){i.value=n,n&&B()}return j(()=>{M()}),(n,t)=>(r(),v("div",F,[(r(),v("svg",J,[...t[3]||(t[3]=[e("defs",null,[e("linearGradient",{id:"loading-gradient",x1:"0%",y1:"0%",x2:"100%",y2:"100%"},[e("stop",{offset:"0%","stop-color":"#dc2626"}),e("stop",{offset:"50%","stop-color":"#ea580c"}),e("stop",{offset:"100%","stop-color":"#f59e0b"})])],-1)])])),t[15]||(t[15]=e("div",{class:"page-header"},[e("div",null,[e("h1",{class:"page-title"},"配置管理"),e("p",{class:"page-description"},"查看和编辑用户的 MCP 配置")])],-1)),e("div",Q,[e("main",R,[e("div",X,[e("div",Y,[t[6]||(t[6]=e("div",{class:"selector-label"},[e("svg",{class:"label-icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),e("span",null,"选择用户")],-1)),l.value?(r(),m(a(H),{key:0,type:"primary",size:"large",class:"edit-btn",onClick:U},{icon:o(()=>[...t[4]||(t[4]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:o(()=>[t[5]||(t[5]=D(" 编辑配置 ",-1))]),_:1})):_("",!0)]),s(a(T),{value:i.value,"onUpdate:value":[t[0]||(t[0]=c=>i.value=c),z],options:C.value,placeholder:"请选择要配置的用户",size:"large",filterable:"",clearable:"",class:"user-select"},{empty:o(()=>[s(a(k),{description:"暂无用户"})]),_:1},8,["value","options"])]),s(a(V),{class:"content-divider"}),f.value?(r(),v("div",Z,[...t[7]||(t[7]=[e("div",{class:"loading-spinner"},[e("svg",{class:"spinner",viewBox:"0 0 50 50"},[e("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none","stroke-width":"4"})])],-1),e("p",{class:"loading-text"},"加载配置中...",-1)])])):l.value?(r(),v("div",$,[e("div",ee,[t[9]||(t[9]=E('<div class="stat-icon stat-icon--primary" data-v-e297e9f7><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-e297e9f7><rect x="3" y="3" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect><rect x="14" y="3" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect><rect x="3" y="14" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect><rect x="14" y="14" width="7" height="7" rx="1" stroke="currentColor" stroke-width="2" data-v-e297e9f7></rect></svg></div>',1)),e("div",te,[e("div",se,b(l.value.components.length),1),t[8]||(t[8]=e("div",{class:"stat-label"},"MCP 组件",-1))])]),e("div",oe,[t[11]||(t[11]=e("div",{class:"stat-icon stat-icon--success"},[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e("div",ae,[e("div",ne,b(l.value.customTools.length),1),t[10]||(t[10]=e("div",{class:"stat-label"},"自定义工具",-1))])])])):i.value?(r(),m(a(k),{key:3,description:"该用户暂无配置或加载失败",class:"empty-placeholder"},{icon:o(()=>[...t[13]||(t[13]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1})):(r(),m(a(k),{key:2,description:"请选择一个用户查看配置",class:"empty-placeholder"},{icon:o(()=>[...t[12]||(t[12]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1}))])]),s(a(I),{show:g.value,"onUpdate:show":t[2]||(t[2]=c=>g.value=c),preset:"card",bordered:!1,class:"config-edit-modal",style:{width:"90vw",maxWidth:"1400px",height:"90vh"}},{header:o(()=>[...t[14]||(t[14]=[e("div",{class:"modal-header"},[e("div",{class:"modal-icon"},[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})])]),e("div",null,[e("h3",{class:"modal-title"},"编辑用户配置"),e("p",{class:"modal-subtitle"},"管理 MCP 组件、工具和脚本")])],-1)])]),default:o(()=>[l.value?(r(),v("div",le,[s(a(G),{value:w.value,"onUpdate:value":t[1]||(t[1]=c=>w.value=c),type:"line",animated:"",size:"large",class:"config-tabs"},{default:o(()=>[s(a(x),{name:"components",tab:"MCP 组件"},{default:o(()=>[e("div",ie,[s(A,{config:l.value,onUpdate:h},null,8,["config"])])]),_:1}),s(a(x),{name:"tools",tab:"自定义工具"},{default:o(()=>[e("div",re,[s(K,{config:l.value,onUpdate:h},null,8,["config"])])]),_:1}),s(a(x),{name:"init",tab:"初始化脚本"},{default:o(()=>[e("div",de,[s(W,{config:l.value,onUpdate:h},null,8,["config"])])]),_:1})]),_:1},8,["value"])])):_("",!0)]),_:1},8,["show"])]))}}),ge=q(ce,[["__scopeId","data-v-e297e9f7"]]);export{ge as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{d as $e,u as Se,r as m,p as le,
|
|
1
|
+
import{d as $e,u as Se,r as m,p as le,D as De,c as y,b as a,f as o,w as n,g as l,B as $,k as q,E as Ie,G as ce,o as w,h,N as Ce,j as W,H as ze,n as I,I as ye,J as Ae,s as Te,y as X,K as Ve,L as _e,m as te,F as fe,v as me,t as K,M as He,O as Ue,z as Ne,A as xe,P as Oe,Q as je,R as Le,S as Ee,U as Pe,V as ge,W as Je,X as qe,Y as Fe,Z as Be,_ as We,x as Ke,a as Ye,q as Ge,C as Qe,i as Xe}from"./index-mIcNgFiY.js";import{g as Ze,p as et,_ as tt,u as Re,I as at,C as st,M as lt}from"./InitScriptEditor-BpsNM3mj.js";import{_ as Me}from"./_plugin-vue_export-helper-DlAUqK2U.js";const nt={class:"variables-manager"},ot={class:"variables-toolbar"},rt={class:"variables-table-container"},it={class:"modal-form-wrapper"},ut=$e({__name:"VariablesManager",props:{config:{}},emits:["update"],setup(ne,{emit:_}){const f=ne,p=_,A=Se(),c=m(!1),E=m(!1),z=m(null),O=m(),R=m(""),U={pageSize:10,showSizePicker:!0,pageSizes:[10,20,50]},G=C=>({style:"cursor: pointer; transition: all 0.2s ease;",onMouseenter:u=>{u.currentTarget.style.backgroundColor="rgba(99, 102, 241, 0.04)"},onMouseleave:u=>{u.currentTarget.style.backgroundColor=""}}),H=[{title:"变量名",key:"name",width:100,render(C){return I("strong",C.name)}},{title:"值",key:"value",width:500,render(C){if(C.isSecret)return I(ye,{type:"info",depth:3,italic:!0},{default:()=>"****** (敏感信息)"});const u=String(C.value).split(`
|
|
2
2
|
`).map((b,Q,oe)=>{const ae=[I("span",{class:"value-line"},b)];return Q<oe.length-1&&ae.push(I("br")),ae}).flat();return I("div",{class:"variable-value-cell"},u)}},{title:"描述",key:"description",width:300,render(C){return I(ye,{depth:3},{default:()=>C.description||"-"})}},{title:"操作",key:"actions",width:150,render(C){return I(Ae,{size:"small"},{default:()=>[I($,{size:"small",onClick:()=>V(C)},{default:()=>"编辑"}),I($,{size:"small",type:"error",onClick:()=>P(C.id)},{default:()=>"删除"})]})}}],B=le(()=>{if(!R.value)return f.config.variables;const C=R.value.toLowerCase();return f.config.variables.filter(u=>{var b;return u.name.toLowerCase().includes(C)||((b=u.description)==null?void 0:b.toLowerCase().includes(C))})}),x=m({name:"",value:"",description:"",isSecret:!1}),L={name:{required:!0,message:"请输入变量名",trigger:"blur"},value:{required:!0,message:"请输入变量值",trigger:"blur"}};function V(C){z.value=C,x.value={name:C.name,value:C.value,description:C.description||"",isSecret:C.isSecret||!1},c.value=!0}function P(C){const u=f.config.variables.filter(b=>b.id!==C);p("update",{variables:u})}async function ve(){var C,u;try{await((C=O.value)==null?void 0:C.validate()),E.value=!0;const b={id:((u=z.value)==null?void 0:u.id)||Ze(),name:x.value.name,value:x.value.value,description:x.value.description||void 0,isSecret:x.value.isSecret},Q=[...f.config.variables],oe=Q.findIndex(ae=>ae.id===b.id);oe!==-1?Q[oe]=b:Q.push(b),p("update",{variables:Q}),c.value=!1,J()}catch(b){A.error(b.message)}finally{E.value=!1}}function J(){z.value=null,x.value={name:"",value:"",description:"",isSecret:!1}}return De(()=>c.value,C=>{C||J()}),(C,u)=>(w(),y("div",nt,[a("div",ot,[o(l($),{type:"primary",size:"large",class:"add-variable-btn",onClick:u[0]||(u[0]=b=>c.value=!0)},{icon:n(()=>[...u[8]||(u[8]=[a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M12 4v16m8-8H4",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),default:n(()=>[u[9]||(u[9]=h(" 添加变量 ",-1))]),_:1}),o(l(q),{value:R.value,"onUpdate:value":u[1]||(u[1]=b=>R.value=b),placeholder:"搜索变量名或描述...",size:"large",clearable:"",class:"search-input"},{prefix:n(()=>[...u[10]||(u[10]=[a("svg",{class:"search-icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1},8,["value"])]),a("div",rt,[o(l(Ie),{columns:H,data:B.value,pagination:U,"row-props":G,class:"modern-table"},null,8,["data"])]),o(l(ce),{show:c.value,"onUpdate:show":u[7]||(u[7]=b=>c.value=b),preset:"dialog",title:z.value?"编辑变量":"添加变量",class:"variable-edit-modal",style:{maxHeight:"90vh"}},{action:n(()=>[o(l($),{onClick:u[6]||(u[6]=b=>c.value=!1)},{default:n(()=>[...u[12]||(u[12]=[h("取消",-1)])]),_:1}),o(l($),{type:"primary",loading:E.value,onClick:ve},{default:n(()=>[...u[13]||(u[13]=[h("保存",-1)])]),_:1},8,["loading"])]),default:n(()=>[a("div",it,[o(l(Ce),{ref_key:"formRef",ref:O,model:x.value,rules:L},{default:n(()=>[o(l(W),{path:"name",label:"变量名"},{default:n(()=>[o(l(q),{value:x.value.name,"onUpdate:value":u[2]||(u[2]=b=>x.value.name=b),placeholder:"例如: API_KEY"},null,8,["value"])]),_:1}),o(l(W),{path:"value",label:"值"},{default:n(()=>[o(l(q),{value:x.value.value,"onUpdate:value":u[3]||(u[3]=b=>x.value.value=b),type:x.value.isSecret?"password":"textarea",rows:x.value.isSecret?void 0:3,placeholder:"变量值"},null,8,["value","type","rows"])]),_:1}),o(l(W),{path:"description",label:"描述"},{default:n(()=>[o(l(q),{value:x.value.description,"onUpdate:value":u[4]||(u[4]=b=>x.value.description=b),type:"textarea",rows:2,placeholder:"可选"},null,8,["value"])]),_:1}),o(l(W),{path:"isSecret",label:"敏感信息"},{default:n(()=>[o(l(ze),{checked:x.value.isSecret,"onUpdate:checked":u[5]||(u[5]=b=>x.value.isSecret=b)},{default:n(()=>[...u[11]||(u[11]=[h("标记为敏感信息(导出时使用占位符)",-1)])]),_:1},8,["checked"])]),_:1})]),_:1},8,["model"])])]),_:1},8,["show","title"])]))}}),dt=Me(ut,[["__scopeId","data-v-f50b6ccd"]]),ct={class:"prompts-manager"},vt={class:"prompts-toolbar"},pt={class:"prompts-table-container"},ft={class:"modal-header"},mt={class:"modal-title"},gt={class:"modal-subtitle"},wt={class:"modal-content-wrapper"},ht={class:"tab-pane-content"},bt={class:"form-section"},kt={class:"form-grid-2"},yt={class:"form-section"},xt={class:"section-header"},Ct={class:"parameters-list"},$t={class:"parameter-header"},St={class:"parameter-index"},Dt={class:"parameter-fields"},Mt={key:0,class:"empty-parameters"},_t={class:"tab-pane-content"},zt={style:{display:"flex","align-items":"center",gap:"8px"}},Tt={viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{width:"18px",height:"18px"}},Ut={class:"messages-section"},Nt={class:"message-header"},jt={class:"save-status-indicator"},It=["title"],Bt={key:0,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},At={key:1,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Vt={key:0,class:"monaco-wrapper"},Et={key:0,class:"empty-messages"},Rt={class:"modal-footer"},Ht={class:"test-content"},Ot={class:"test-messages"},Lt={class:"test-message-header"},Pt={class:"test-message-content"},Jt={key:0,class:"test-message-empty"},qt=$e({__name:"PromptsManager",setup(ne){const _=Se(),f=m(!1),p=m(!1),A=m(!1),c=m(!1),E=m(!1),z=m(null),O=m(),R=m(""),U=m([]),G=m("content"),H=m(!1),B=m(-1),x=m(new Map),L=m(!1),V=[{label:"用户",value:"user"},{label:"助手",value:"assistant"}],P={pageSize:10,showSizePicker:!0,pageSizes:[10,20,50]},ve=d=>({style:"cursor: pointer; transition: all 0.2s ease;",onMouseenter:t=>{t.currentTarget.style.backgroundColor="rgba(99, 102, 241, 0.04)"},onMouseleave:t=>{t.currentTarget.style.backgroundColor=""}}),J=[{title:"名称",key:"name",width:200,render(d){return I("strong",d.name)}},{title:"描述",key:"description",render(d){return I(ye,{depth:3},{default:()=>d.description||"-"})}},{title:"参数数量",key:"arguments",width:120,render(d){return I(ye,{depth:3},{default:()=>{var t;return`${((t=d.arguments)==null?void 0:t.length)||0} 个`}})}},{title:"消息数量",key:"messages",width:120,render(d){return I(ye,{depth:3},{default:()=>{var t;return`${((t=d.messages)==null?void 0:t.length)||0} 条`}})}},{title:"操作",key:"actions",width:200,render(d){return I(Ae,{size:"small"},{default:()=>[I($,{size:"small",onClick:()=>ue(d)},{default:()=>"编辑"}),I($,{size:"small",type:"info",onClick:()=>r(d)},{default:()=>"测试"}),I($,{size:"small",type:"error",onClick:()=>we(d.id)},{default:()=>"删除"})]})}}],C=le(()=>{if(!R.value)return U.value;const d=R.value.toLowerCase();return U.value.filter(t=>{var e;return t.name.toLowerCase().includes(d)||((e=t.description)==null?void 0:e.toLowerCase().includes(d))})}),u=m({name:"",description:"",arguments:[],messages:[]}),b=m({arguments:{}}),Q=le(()=>!p.value||!u.value.messages||u.value.messages.length===0?[]:u.value.messages.filter(t=>t.content.text).map(t=>({...t,content:{...t.content,text:et(t.content.text,b.value.arguments)}}))),oe={name:{required:!0,message:"请输入提示词名称",trigger:"blur"},messages:{required:!0,validator:(d,t)=>!t||t.length===0?new Error("至少需要一条消息"):!0,trigger:"blur"}};function ae(d){return x.value.get(d)||!1}function se(d){x.value.set(d,!0)}function ie(d){H.value&&B.value===d?(H.value=!1,B.value=-1):(H.value=!0,B.value=d)}async function Z(){var d,t;try{E.value=!0;const e=await X.get("/prompts");e.data.success&&(U.value=e.data.data)}catch(e){_.error(((t=(d=e.response)==null?void 0:d.data)==null?void 0:t.error)||"加载提示词失败")}finally{E.value=!1}}function pe(){z.value=null,T(),f.value=!0,G.value="content"}function ue(d){z.value=d,u.value={name:d.name,description:d.description||"",arguments:d.arguments?[...d.arguments]:[],messages:d.messages&&d.messages.length>0?[...d.messages]:[{role:"user",content:{type:"text",text:""}}]},x.value.clear(),f.value=!0,G.value="content"}async function we(d){var t,e;try{await X.delete(`/prompts/${d}`),_.success("删除成功"),await Z()}catch(s){_.error(((e=(t=s.response)==null?void 0:t.data)==null?void 0:e.error)||"删除失败")}}function he(){u.value.arguments.push({name:"",description:"",required:!1})}function re(d){u.value.arguments.splice(d,1)}function be(){u.value.messages.push({role:"user",content:{type:"text",text:""}}),se(u.value.messages.length-1)}function de(d){u.value.messages.splice(d,1),x.value.delete(d),B.value===d?(H.value=!1,B.value=-1):B.value>d&&B.value--}async function ke(){var d,t,e;try{await((d=O.value)==null?void 0:d.validate()),A.value=!0;const s={name:u.value.name,description:u.value.description||void 0,arguments:u.value.arguments.filter(i=>i.name),messages:u.value.messages.filter(i=>i.content.text)};z.value?(await X.put(`/prompts/${z.value.id}`,s),_.success("更新成功")):(await X.post("/prompts",s),_.success("创建成功")),x.value.clear(),f.value=!1,await Z(),T()}catch(s){_.error(((e=(t=s.response)==null?void 0:t.data)==null?void 0:e.error)||"保存失败")}finally{A.value=!1}}async function g(){var d,t,e;try{await((d=O.value)==null?void 0:d.validate()),c.value=!0;const s=u.value.arguments.filter(i=>i.name);b.value.arguments=s.reduce((i,j)=>(i[j.name]=b.value.arguments[j.name]||"",i),{}),p.value=!0}catch(s){_.error(((e=(t=s.response)==null?void 0:t.data)==null?void 0:e.error)||"测试失败")}finally{c.value=!1}}async function r(d){z.value=d,u.value={name:d.name,description:d.description||"",arguments:d.arguments?[...d.arguments]:[],messages:d.messages?[...d.messages]:[]};const t=u.value.arguments.filter(e=>e.name);b.value.arguments=t.reduce((e,s)=>(e[s.name]="",e),{}),await g()}function T(){z.value=null,u.value={name:"",description:"",arguments:[],messages:[{role:"user",content:{type:"text",text:`# 提示词模板
|
|
3
3
|
|
|
4
4
|
## 变量替换
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a1 as io,r as A,
|
|
1
|
+
import{a1 as io,r as A,y as ue,d as ht,s as At,U as co,D as ke,c as q,o as F,u as Dt,p as Te,m as ce,f as m,b as o,w as d,g as p,B as G,a2 as uo,e as Wt,G as vt,h as I,F as dt,v as pt,A as De,t as ne,Q as Xe,Z as po,a3 as vo,K as Zt,L as gt,a4 as Et,a5 as go,a6 as Ft,a7 as Ut,N as Qt,j as fe,k as be,O as Yt,a8 as $t,M as Le,z as Ae,H as Xt,a9 as je,S as mo,aa as fo,l as ct,ab as ho,Y as yo,R as Fe,E as Pt,ac as Mt,n as ve,I as Bt,_ as Jt,ad as wo,J as bo}from"./index-mIcNgFiY.js";import{_ as zt}from"./_plugin-vue_export-helper-DlAUqK2U.js";const Cr=io("config",()=>{const t=A(null),a=A(!1);async function s(){var $,P;a.value=!0;try{const R=await ue.get("/configs/me");return t.value=R.data.data,t.value}catch(R){throw new Error(((P=($=R.response)==null?void 0:$.data)==null?void 0:P.error)||"Failed to fetch config")}finally{a.value=!1}}async function c($){var P,R;a.value=!0;try{const V=await ue.get(`/configs/user/${$}`);return t.value=V.data.data,t.value}catch(V){throw new Error(((R=(P=V.response)==null?void 0:P.data)==null?void 0:R.error)||"Failed to fetch user config")}finally{a.value=!1}}async function u($){var P,R;a.value=!0;try{const V=await ue.put("/configs/me",$);return t.value=V.data.data,t.value}catch(V){throw new Error(((R=(P=V.response)==null?void 0:P.data)==null?void 0:R.error)||"Failed to update config")}finally{a.value=!1}}async function h($,P){var R,V;a.value=!0;try{const D=await ue.put(`/configs/user/${$}`,P);return t.value=D.data.data,t.value}catch(D){throw new Error(((V=(R=D.response)==null?void 0:R.data)==null?void 0:V.error)||"Failed to update user config")}finally{a.value=!1}}function j($){const P={...$,variables:$.variables.map(R=>({...R,value:R.isSecret?`{{${R.name}}}`:R.value}))};return JSON.stringify(P,null,2)}function k($){try{const P=JSON.parse($);if(!P.name||!Array.isArray(P.components)||!Array.isArray(P.customTools))throw new Error("Invalid config format");return P}catch(P){throw new Error(`Failed to parse config: ${P.message}`)}}return{currentConfig:t,loading:a,fetchConfig:s,fetchUserConfig:c,updateConfig:u,updateUserConfig:h,exportConfig:j,importConfig:k}});function Qe(){if(typeof globalThis<"u"&&"crypto"in globalThis){const t=globalThis.crypto;if(t&&typeof t.randomUUID=="function")return t.randomUUID()}return`${Date.now()}-${Math.random().toString(36).substring(2,11)}`}function It(t){return t==null?!1:typeof t=="boolean"?t:typeof t=="string"?t.trim()!=="":typeof t=="number"?t!==0:Array.isArray(t)?t.length>0:typeof t=="object"?Object.keys(t).length>0:!!t}function ko(t,a){let s=t;const c=/\{\{#if\s+(\w+)\}\}([\s\S]*?)(?:\{\{else\}\}([\s\S]*?))?\{\{\/if\}\}/g;s=s.replace(c,(h,j,k,$)=>{const P=a[j];return It(P)?k||"":$||""});const u=/\{\{#ifnot\s+(\w+)\}\}([\s\S]*?)(?:\{\{else\}\}([\s\S]*?))?\{\{\/ifnot\}\}/g;return s=s.replace(u,(h,j,k,$)=>{const P=a[j];return It(P)?$||"":k||""}),s}function Co(t,a){return t.replace(/\{\{(\w+)\}\}/g,(s,c)=>{const u=a[c];return u!=null?String(u):s})}function xr(t,a){let s=ko(t,a);return s=Co(s,a),s}function Rt(t,a){(a==null||a>t.length)&&(a=t.length);for(var s=0,c=Array(a);s<a;s++)c[s]=t[s];return c}function xo(t){if(Array.isArray(t))return t}function To(t,a,s){return(a=Mo(a))in t?Object.defineProperty(t,a,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[a]=s,t}function So(t,a){var s=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(s!=null){var c,u,h,j,k=[],$=!0,P=!1;try{if(h=(s=s.call(t)).next,a!==0)for(;!($=(c=h.call(s)).done)&&(k.push(c.value),k.length!==a);$=!0);}catch(R){P=!0,u=R}finally{try{if(!$&&s.return!=null&&(j=s.return(),Object(j)!==j))return}finally{if(P)throw u}}return k}}function $o(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
2
2
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Vt(t,a){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);a&&(c=c.filter(function(u){return Object.getOwnPropertyDescriptor(t,u).enumerable})),s.push.apply(s,c)}return s}function Lt(t){for(var a=1;a<arguments.length;a++){var s=arguments[a]!=null?arguments[a]:{};a%2?Vt(Object(s),!0).forEach(function(c){To(t,c,s[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(s)):Vt(Object(s)).forEach(function(c){Object.defineProperty(t,c,Object.getOwnPropertyDescriptor(s,c))})}return t}function Po(t,a){if(t==null)return{};var s,c,u=jo(t,a);if(Object.getOwnPropertySymbols){var h=Object.getOwnPropertySymbols(t);for(c=0;c<h.length;c++)s=h[c],a.indexOf(s)===-1&&{}.propertyIsEnumerable.call(t,s)&&(u[s]=t[s])}return u}function jo(t,a){if(t==null)return{};var s={};for(var c in t)if({}.hasOwnProperty.call(t,c)){if(a.indexOf(c)!==-1)continue;s[c]=t[c]}return s}function No(t,a){return xo(t)||So(t,a)||Ao(t,a)||$o()}function Oo(t,a){if(typeof t!="object"||!t)return t;var s=t[Symbol.toPrimitive];if(s!==void 0){var c=s.call(t,a);if(typeof c!="object")return c;throw new TypeError("@@toPrimitive must return a primitive value.")}return(a==="string"?String:Number)(t)}function Mo(t){var a=Oo(t,"string");return typeof a=="symbol"?a:a+""}function Ao(t,a){if(t){if(typeof t=="string")return Rt(t,a);var s={}.toString.call(t).slice(8,-1);return s==="Object"&&t.constructor&&(s=t.constructor.name),s==="Map"||s==="Set"?Array.from(t):s==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(s)?Rt(t,a):void 0}}function Do(t,a,s){return a in t?Object.defineProperty(t,a,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[a]=s,t}function qt(t,a){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);a&&(c=c.filter(function(u){return Object.getOwnPropertyDescriptor(t,u).enumerable})),s.push.apply(s,c)}return s}function Ht(t){for(var a=1;a<arguments.length;a++){var s=arguments[a]!=null?arguments[a]:{};a%2?qt(Object(s),!0).forEach(function(c){Do(t,c,s[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(s)):qt(Object(s)).forEach(function(c){Object.defineProperty(t,c,Object.getOwnPropertyDescriptor(s,c))})}return t}function zo(){for(var t=arguments.length,a=new Array(t),s=0;s<t;s++)a[s]=arguments[s];return function(c){return a.reduceRight(function(u,h){return h(u)},c)}}function Ye(t){return function a(){for(var s=this,c=arguments.length,u=new Array(c),h=0;h<c;h++)u[h]=arguments[h];return u.length>=t.length?t.apply(this,u):function(){for(var j=arguments.length,k=new Array(j),$=0;$<j;$++)k[$]=arguments[$];return a.apply(s,[].concat(u,k))}}}function mt(t){return{}.toString.call(t).includes("Object")}function _o(t){return!Object.keys(t).length}function et(t){return typeof t=="function"}function Eo(t,a){return Object.prototype.hasOwnProperty.call(t,a)}function Fo(t,a){return mt(a)||ze("changeType"),Object.keys(a).some(function(s){return!Eo(t,s)})&&ze("changeField"),a}function Uo(t){et(t)||ze("selectorType")}function Bo(t){et(t)||mt(t)||ze("handlerType"),mt(t)&&Object.values(t).some(function(a){return!et(a)})&&ze("handlersType")}function Jo(t){t||ze("initialIsRequired"),mt(t)||ze("initialType"),_o(t)&&ze("initialContent")}function Io(t,a){throw new Error(t[a]||t.default)}var Ro={initialIsRequired:"initial state is required",initialType:"initial state should be an object",initialContent:"initial state shouldn't be an empty object",handlerType:"handler should be an object or a function",handlersType:"all handlers should be a functions",selectorType:"selector should be a function",changeType:"provided value of changes should be an object",changeField:'it seams you want to change a field in the state which is not specified in the "initial" state',default:"an unknown error accured in `state-local` package"},ze=Ye(Io)(Ro),ut={changes:Fo,selector:Uo,handler:Bo,initial:Jo};function Vo(t){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};ut.initial(t),ut.handler(a);var s={current:t},c=Ye(Ho)(s,a),u=Ye(qo)(s),h=Ye(ut.changes)(t),j=Ye(Lo)(s);function k(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(R){return R};return ut.selector(P),P(s.current)}function $(P){zo(c,u,h,j)(P)}return[k,$]}function Lo(t,a){return et(a)?a(t.current):a}function qo(t,a){return t.current=Ht(Ht({},t.current),a),a}function Ho(t,a,s){return et(a)?a(t.current):Object.keys(s).forEach(function(c){var u;return(u=a[c])===null||u===void 0?void 0:u.call(a,t.current[c])}),s}var Ko={create:Vo},Go={paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}};function Wo(t){return function a(){for(var s=this,c=arguments.length,u=new Array(c),h=0;h<c;h++)u[h]=arguments[h];return u.length>=t.length?t.apply(this,u):function(){for(var j=arguments.length,k=new Array(j),$=0;$<j;$++)k[$]=arguments[$];return a.apply(s,[].concat(u,k))}}}function Zo(t){return{}.toString.call(t).includes("Object")}function Qo(t){return t||Kt("configIsRequired"),Zo(t)||Kt("configType"),t.urls?(Yo(),{paths:{vs:t.urls.monacoBase}}):t}function Yo(){console.warn(eo.deprecation)}function Xo(t,a){throw new Error(t[a]||t.default)}var eo={configIsRequired:"the configuration object is required",configType:"the configuration object should be an object",default:"an unknown error accured in `@monaco-editor/loader` package",deprecation:`Deprecation warning!
|
|
3
3
|
You are using deprecated way of configuration.
|
|
4
4
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as A,a as U,u as T,$ as F,p as I,q as N,r as u,s as S,c as v,b as e,e as G,f,w as _,g as H,B as $,F as D,v as P,x as R,t as h,y as g,n as a,o as i,z as q,m as Z,A as w,C as y,T as E,i as O}from"./index-mIcNgFiY.js";import{_ as J}from"./_plugin-vue_export-helper-DlAUqK2U.js";const K={class:"app-shell"},Q={class:"app-header"},W={class:"app-header__container"},X={class:"app-header__right"},Y={class:"app-body"},ee={class:"app-sidebar"},te={class:"sidebar-nav"},oe=["onClick"],se={class:"nav-item__icon admin-nav-icon"},ae={class:"nav-item__content"},ne={class:"nav-item__label"},re={class:"nav-item__description"},ie={key:0,class:"nav-item__indicator admin-indicator"},de={class:"app-content"},ce={class:"content-wrapper"},le={class:"app-footer"},pe={class:"version-info"},ue={class:"version-text"},ve=A({__name:"Layout",setup(fe){const m=O(),x=N(),C=U(),r=T(),M=F(),k=I(()=>x.name),c=u(!1),l=u(!1),p=u("..."),L=[{label:"用户管理",key:"AdminUsers",icon:()=>a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),description:"管理系统用户和权限"},{label:"配置管理",key:"AdminConfigs",icon:()=>a("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[a("path",{d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),a("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),description:"管理用户的 MCP 配置"}];function b(o){m.push({name:o})}function B(){C.adminLogout(),m.push("/admin/login")}async function V(){if(!c.value){c.value=!0;try{const t=(await g.get("/update/check")).data;t.success&&t.hasUpdate&&M.warning({title:"发现新版本",content:()=>a("div",[a("p",{style:"margin-bottom: 12px;"},`当前版本: ${t.currentVersion}`),a("p",{style:"margin-bottom: 12px;"},`最新版本: ${t.latestVersion}`),a("p",{style:"color: #666; font-size: 14px;"},"是否立即更新?更新后系统将自动重启。")]),positiveText:"立即更新",negativeText:"稍后提醒",onPositiveClick:async()=>{await z()},onNegativeClick:()=>{}})}catch(o){console.error("检查更新失败:",o)}finally{c.value=!1}}}async function z(){var t,d;if(l.value)return;l.value=!0;const o=r.loading("正在更新,请稍候...",{duration:0});try{const n=(await g.post("/update/execute")).data;o.destroy(),n.success?n.restartFailed?r.warning("更新成功,但重启失败,请手动重启服务",{duration:5e3}):(r.success("更新成功,系统正在重启...",{duration:3e3}),setTimeout(()=>{window.location.reload()},3e3)):r.error(n.error||"更新失败",{duration:5e3})}catch(s){o.destroy();const n=((d=(t=s.response)==null?void 0:t.data)==null?void 0:d.error)||s.message||"更新失败";r.error(n,{duration:5e3})}finally{l.value=!1}}async function j(){try{const o=await g.get("/update/version");o.data.success&&(p.value=o.data.version)}catch(o){console.error("获取版本失败:",o),p.value="unknown"}}return S(()=>{j(),setTimeout(()=>{V()},2e3)}),(o,t)=>{const d=R("router-view");return i(),v("div",K,[e("header",Q,[e("div",W,[t[2]||(t[2]=G('<div class="app-header__left" data-v-01543ff6><div class="app-logo" data-v-01543ff6><div class="logo-icon admin-theme" data-v-01543ff6><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-01543ff6><path d="M12 2L2 7L12 12L22 7L12 2Z" fill="url(#admin-gradient1)" data-v-01543ff6></path><path d="M2 17L12 22L22 17V12L12 17L2 12V17Z" fill="url(#admin-gradient2)" data-v-01543ff6></path><defs data-v-01543ff6><linearGradient id="admin-gradient1" x1="2" y1="2" x2="22" y2="12" data-v-01543ff6><stop offset="0%" stop-color="#dc2626" data-v-01543ff6></stop><stop offset="100%" stop-color="#ea580c" data-v-01543ff6></stop></linearGradient><linearGradient id="admin-gradient2" x1="2" y1="12" x2="22" y2="22" data-v-01543ff6><stop offset="0%" stop-color="#ea580c" data-v-01543ff6></stop><stop offset="100%" stop-color="#f59e0b" data-v-01543ff6></stop></linearGradient></defs></svg></div><div class="logo-text" data-v-01543ff6><div class="logo-title admin-title" data-v-01543ff6>Flex MCP Admin</div><div class="logo-subtitle" data-v-01543ff6>管理员控制台</div></div></div></div>',1)),e("div",X,[t[1]||(t[1]=e("div",{class:"admin-badge"},[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),e("span",null,"管理员")],-1)),f(H($),{class:"logout-btn",quaternary:"",circle:"",onClick:B},{icon:_(()=>[...t[0]||(t[0]=[e("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M9 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V5C3 4.46957 3.21071 3.96086 3.58579 3.58579C3.96086 3.21071 4.46957 3 5 3H9",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),e("path",{d:"M16 17L21 12L16 7",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),e("path",{d:"M21 12H9",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1})])])]),e("div",Y,[e("aside",ee,[e("nav",te,[(i(),v(D,null,P(L,s=>e("div",{key:s.key,class:q(["nav-item",{"nav-item--active":k.value===s.key}]),onClick:n=>b(s.key)},[e("div",se,[(i(),w(y(s.icon)))]),e("div",ae,[e("div",ne,h(s.label),1),e("div",re,h(s.description),1)]),k.value===s.key?(i(),v("div",ie)):Z("",!0)],10,oe)),64))])]),e("main",de,[e("div",ce,[f(d,null,{default:_(({Component:s,route:n})=>[f(E,{name:"page-fade",mode:"out-in"},{default:_(()=>[(i(),w(y(s),{key:n.path}))]),_:2},1024)]),_:1})])])]),e("footer",le,[e("div",pe,[e("span",ue,"v"+h(p.value),1)])])])}}}),ke=J(ve,[["__scopeId","data-v-01543ff6"]]);export{ke as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as t,d as L,a as V,r as H,p as _,q as j,s as z,c as i,b as o,e as I,f as v,t as a,g as m,w as h,B as A,F,v as P,x as S,y as q,o as r,z as D,m as G,A as g,C,T as N,i as T}from"./index-mIcNgFiY.js";import{_ as R}from"./_plugin-vue_export-helper-DlAUqK2U.js";const O=()=>t("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("rect",{x:"3",y:"3",width:"7",height:"7",rx:"1",stroke:"currentColor","stroke-width":"2",fill:"none"}),t("rect",{x:"14",y:"3",width:"7",height:"7",rx:"1",stroke:"currentColor","stroke-width":"2",fill:"none"}),t("rect",{x:"3",y:"14",width:"7",height:"7",rx:"1",stroke:"currentColor","stroke-width":"2",fill:"none"}),t("rect",{x:"14",y:"14",width:"7",height:"7",rx:"1",stroke:"currentColor","stroke-width":"2",fill:"none"})]),U=()=>t("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),Z=()=>t("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("path",{d:"M4 7h3m13 0h-3m-2 4l-2 5l-2-5m9-4l-3 8l-3-8m-6 11h3m0 0h3m-3 0V10",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),$=()=>t("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("polyline",{points:"16 18 22 12 16 6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),t("polyline",{points:"8 6 2 12 8 18",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),E=()=>t("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("path",{d:"M3 3h18v18H3V3zm2 2v14h14V5H5zm2 2h10v2H7V7zm0 4h10v2H7v-2zm0 4h7v2H7v-2z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})]),W=()=>t("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[t("path",{d:"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),t("path",{d:"M14 2v6h6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),t("path",{d:"M16 13H8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"}),t("path",{d:"M16 17H8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"}),t("path",{d:"M10 9H8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})]),x=[{label:"MCP 组件",key:"section-components",icon:O,description:"管理 MCP 服务组件"},{label:"自定义工具",key:"section-tools",icon:U,description:"创建和编辑工具"},{label:"变量管理",key:"section-variables",icon:Z,description:"配置环境变量",hideForAdmin:!0},{label:"初始化脚本",key:"section-init",icon:$,description:"编写启动脚本"},{label:"数据管理",key:"section-tables",icon:E,description:"创建和管理数据表",hideForAdmin:!0},{label:"提示词管理",key:"section-prompts",icon:W,description:"创建和管理提示词模板"}],J={class:"app-shell"},K={class:"app-header"},Q={class:"app-header__container"},X={class:"app-header__right"},Y={class:"user-info"},oo={class:"user-email"},to={class:"app-body"},eo={class:"app-sidebar"},so={class:"sidebar-nav"},no=["onClick"],ro={class:"nav-item__icon"},io={class:"nav-item__content"},ao={class:"nav-item__label"},lo={class:"nav-item__description"},co={key:0,class:"nav-item__indicator"},po={class:"app-content"},uo={class:"content-wrapper"},vo={class:"app-footer"},ho={class:"version-info"},ko={class:"version-text"},wo=L({__name:"Layout",setup(fo){const d=T(),l=j(),c=V(),p=H("..."),k=_(()=>l.name==="UserDashboard"?`section-${l.query.section||"components"}`:l.name),y=_(()=>{var s;return((s=c.user)==null?void 0:s.role)==="admin"?x.filter(u=>!u.hideForAdmin):x});function b(e){if(e.startsWith("section-")){const s=e.replace("section-","");d.push({name:"UserDashboard",query:{section:s}});return}d.push({name:e})}function M(){c.userLogout(),d.push("/user/login")}async function B(){try{const e=await q.get("/update/version");e.data.success&&(p.value=e.data.version)}catch(e){console.error("获取版本失败:",e),p.value="unknown"}}return z(()=>{B()}),(e,s)=>{var w;const u=S("router-view");return r(),i("div",J,[o("header",K,[o("div",Q,[s[2]||(s[2]=I('<div class="app-header__left" data-v-d9fd6813><div class="app-logo" data-v-d9fd6813><div class="logo-icon" data-v-d9fd6813><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-d9fd6813><path d="M12 2L2 7L12 12L22 7L12 2Z" fill="url(#gradient1)" data-v-d9fd6813></path><path d="M2 17L12 22L22 17V12L12 17L2 12V17Z" fill="url(#gradient2)" data-v-d9fd6813></path><defs data-v-d9fd6813><linearGradient id="gradient1" x1="2" y1="2" x2="22" y2="12" data-v-d9fd6813><stop offset="0%" stop-color="#6366f1" data-v-d9fd6813></stop><stop offset="100%" stop-color="#8b5cf6" data-v-d9fd6813></stop></linearGradient><linearGradient id="gradient2" x1="2" y1="12" x2="22" y2="22" data-v-d9fd6813><stop offset="0%" stop-color="#8b5cf6" data-v-d9fd6813></stop><stop offset="100%" stop-color="#ec4899" data-v-d9fd6813></stop></linearGradient></defs></svg></div><div class="logo-text" data-v-d9fd6813><div class="logo-title" data-v-d9fd6813>Flex MCP</div><div class="logo-subtitle" data-v-d9fd6813>MCP 服务运营平台</div></div></div></div>',1)),o("div",X,[o("div",Y,[s[0]||(s[0]=o("div",{class:"user-avatar"},[o("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[o("circle",{cx:"12",cy:"8",r:"4",fill:"currentColor",opacity:"0.3"}),o("path",{d:"M6 21C6 17.686 8.686 15 12 15C15.314 15 18 17.686 18 21",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})])],-1)),o("span",oo,a(((w=m(c).user)==null?void 0:w.email)||"用户"),1)]),v(m(A),{class:"logout-btn",quaternary:"",circle:"",onClick:M},{icon:h(()=>[...s[1]||(s[1]=[o("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[o("path",{d:"M9 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V5C3 4.46957 3.21071 3.96086 3.58579 3.58579C3.96086 3.21071 4.46957 3 5 3H9",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),o("path",{d:"M16 17L21 12L16 7",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}),o("path",{d:"M21 12H9",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])]),_:1})])])]),o("div",to,[o("aside",eo,[o("nav",so,[(r(!0),i(F,null,P(y.value,n=>(r(),i("div",{key:n.key,class:D(["nav-item",{"nav-item--active":k.value===n.key}]),onClick:f=>b(n.key)},[o("div",ro,[(r(),g(C(n.icon)))]),o("div",io,[o("div",ao,a(n.label),1),o("div",lo,a(n.description),1)]),k.value===n.key?(r(),i("div",co)):G("",!0)],10,no))),128))])]),o("main",po,[o("div",uo,[v(u,null,{default:h(({Component:n,route:f})=>[v(N,{name:"page-fade",mode:"out-in"},{default:h(()=>[(r(),g(C(n),{key:f.path}))]),_:2},1024)]),_:1})])])]),o("footer",vo,[o("div",ho,[o("span",ko,"v"+a(p.value),1)])])])}}}),go=R(wo,[["__scopeId","data-v-d9fd6813"]]);export{go as default};
|