flex-mcp 1.0.0 → 1.0.2
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/README.md +190 -63
- package/dist/cli.js +10 -10
- package/dist/static.d.ts.map +1 -1
- package/dist/static.js +4 -2
- package/dist/static.js.map +1 -1
- package/dist/utils/telemetry.js +1 -1
- package/dist/web/assets/Blank-s8a1VcBP.js +1 -0
- package/dist/web/assets/Configs-Du0LnEIl.js +1 -0
- package/dist/web/assets/Dashboard-DBtv2jAX.js +27 -0
- package/dist/web/assets/InitScriptEditor-CyQQvKeL.js +675 -0
- package/dist/web/assets/Layout-BkmH4NiL.js +1 -0
- package/dist/web/assets/Layout-C1hga5lx.js +1 -0
- package/dist/web/assets/Login-Dbjg2uN-.js +1 -0
- package/dist/web/assets/Login-DflsSakB.js +1 -0
- package/dist/web/assets/Users-DKoYWDA0.js +1 -0
- package/dist/web/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
- package/dist/web/assets/index-Coivokd4.js +7371 -0
- package/dist/web/assets/style-DkqnAI3H.css +1 -0
- package/dist/web/index.html +14 -0
- package/package.json +3 -4
package/README.md
CHANGED
|
@@ -2,49 +2,56 @@
|
|
|
2
2
|
|
|
3
3
|
可运营 MCP Node 服务 - 支持多用户管理、MCP 协议、脚本执行。
|
|
4
4
|
|
|
5
|
-
## 安装
|
|
5
|
+
## 📦 安装
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install flex-mcp
|
|
8
|
+
npm install -g flex-mcp
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
或使用 npx(无需安装):
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx flex-mcp <command>
|
|
9
15
|
```
|
|
10
16
|
|
|
11
|
-
## 快速开始
|
|
17
|
+
## 🚀 快速开始
|
|
12
18
|
|
|
13
19
|
### 一键部署(推荐)
|
|
14
20
|
|
|
15
21
|
```bash
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
# 一键部署(初始化 + 启动)
|
|
20
|
-
meta-mcp deploy
|
|
22
|
+
# 全局安装后
|
|
23
|
+
flex-mcp deploy
|
|
21
24
|
```
|
|
22
25
|
|
|
23
|
-
|
|
26
|
+
这会自动:
|
|
27
|
+
- ✅ 创建 `.env` 配置文件
|
|
28
|
+
- ✅ 初始化数据库
|
|
29
|
+
- ✅ 启动服务器
|
|
30
|
+
|
|
31
|
+
### 分步操作
|
|
24
32
|
|
|
25
33
|
```bash
|
|
26
|
-
# 初始化项目(创建 .env 文件,初始化数据库)
|
|
27
|
-
|
|
34
|
+
# 1. 初始化项目(创建 .env 文件,初始化数据库)
|
|
35
|
+
flex-mcp init
|
|
28
36
|
|
|
29
|
-
# 启动服务器
|
|
30
|
-
|
|
37
|
+
# 2. 启动服务器
|
|
38
|
+
flex-mcp start
|
|
31
39
|
|
|
32
|
-
# 查看帮助
|
|
33
|
-
|
|
40
|
+
# 3. 查看帮助
|
|
41
|
+
flex-mcp help
|
|
34
42
|
```
|
|
35
43
|
|
|
36
|
-
|
|
44
|
+
## 🌐 访问运营页面
|
|
37
45
|
|
|
38
|
-
|
|
39
|
-
# 一键部署
|
|
40
|
-
npx flex-mcp deploy
|
|
46
|
+
服务器启动后,在浏览器中访问:
|
|
41
47
|
|
|
42
|
-
|
|
43
|
-
|
|
48
|
+
- **管理员登录页面(运营页面)**: `http://localhost:3000/admin/login`
|
|
49
|
+
- 默认账号:`admin` / `123456`
|
|
50
|
+
- **用户登录页面**: `http://localhost:3000/user/login`
|
|
51
|
+
- **API 端点**: `http://localhost:3000/api`
|
|
52
|
+
- **健康检查**: `http://localhost:3000/health`
|
|
44
53
|
|
|
45
|
-
|
|
46
|
-
npx flex-mcp start
|
|
47
|
-
```
|
|
54
|
+
> 💡 **提示**: 如果修改了端口(如 `PORT=5666`),请访问 `http://localhost:5666/admin/login`
|
|
48
55
|
|
|
49
56
|
### 在代码中使用
|
|
50
57
|
|
|
@@ -57,23 +64,47 @@ await startServer({
|
|
|
57
64
|
});
|
|
58
65
|
```
|
|
59
66
|
|
|
60
|
-
##
|
|
67
|
+
## ⚙️ 配置
|
|
68
|
+
|
|
69
|
+
### 环境变量
|
|
70
|
+
|
|
71
|
+
服务器启动后会在当前目录创建 `.env` 文件,你可以修改以下配置:
|
|
72
|
+
|
|
73
|
+
```env
|
|
74
|
+
# 服务器配置
|
|
75
|
+
PORT=3000 # 服务器端口(默认: 3000)
|
|
76
|
+
HOST=0.0.0.0 # 服务器主机(默认: 0.0.0.0)
|
|
77
|
+
|
|
78
|
+
# 超级管理员账号
|
|
79
|
+
ADMIN_USERNAME=admin # 管理员用户名(默认: admin)
|
|
80
|
+
ADMIN_PASSWORD=123456 # 管理员密码(默认: 123456)
|
|
61
81
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
- `DATABASE_URL`: 数据库路径(默认: ./data/database.sqlite)
|
|
65
|
-
- `JWT_SECRET`: JWT 密钥(生产环境请修改)
|
|
66
|
-
- `ADMIN_USERNAME`: 超级管理员用户名(默认: admin)
|
|
67
|
-
- `ADMIN_PASSWORD`: 超级管理员密码(默认: 123456)
|
|
68
|
-
- `CORS_ORIGIN`: CORS 来源(默认: *)
|
|
82
|
+
# 数据目录(可选)
|
|
83
|
+
DATA_DIR=./.data # 数据目录(默认: ./.data)
|
|
69
84
|
|
|
70
|
-
|
|
85
|
+
# 数据库路径(可选)
|
|
86
|
+
DATABASE_URL=./.data/database.sqlite
|
|
71
87
|
|
|
72
|
-
|
|
88
|
+
# JWT 密钥(可选,生产环境请修改)
|
|
89
|
+
JWT_SECRET=your-secret-key-here
|
|
73
90
|
|
|
74
|
-
|
|
91
|
+
# CORS 配置(可选)
|
|
92
|
+
CORS_ORIGIN=* # CORS 来源(默认: *)
|
|
75
93
|
|
|
76
|
-
|
|
94
|
+
# 禁用统计(可选)
|
|
95
|
+
DISABLE_TELEMETRY=false # 禁用使用统计(默认: false)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 修改端口
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# 方式 1: 修改 .env 文件中的 PORT
|
|
102
|
+
PORT=5666 flex-mcp start
|
|
103
|
+
|
|
104
|
+
# 方式 2: 使用环境变量
|
|
105
|
+
export PORT=5666
|
|
106
|
+
flex-mcp start
|
|
107
|
+
```
|
|
77
108
|
|
|
78
109
|
## 功能特性
|
|
79
110
|
|
|
@@ -84,9 +115,20 @@ await startServer({
|
|
|
84
115
|
- ✅ 变量系统
|
|
85
116
|
- ✅ REST API
|
|
86
117
|
|
|
87
|
-
## 连接 Cursor
|
|
118
|
+
## 🔌 连接 Cursor
|
|
119
|
+
|
|
120
|
+
### 1. 创建 MCP 用户
|
|
121
|
+
|
|
122
|
+
1. 访问管理员页面:`http://localhost:3000/admin/login`
|
|
123
|
+
2. 登录后进入"用户管理"
|
|
124
|
+
3. 创建新用户,记录邮箱和 API Key
|
|
125
|
+
|
|
126
|
+
### 2. 配置 Cursor
|
|
88
127
|
|
|
89
|
-
在 Cursor 的 MCP
|
|
128
|
+
在 Cursor 的 MCP 配置文件中添加:
|
|
129
|
+
|
|
130
|
+
**macOS/Linux:** `~/.cursor/mcp.json`
|
|
131
|
+
**Windows:** `%APPDATA%\Cursor\mcp.json`
|
|
90
132
|
|
|
91
133
|
```json
|
|
92
134
|
{
|
|
@@ -102,49 +144,134 @@ await startServer({
|
|
|
102
144
|
}
|
|
103
145
|
```
|
|
104
146
|
|
|
105
|
-
|
|
147
|
+
**注意:**
|
|
148
|
+
- 将 `YOUR_EMAIL` 替换为你的用户邮箱
|
|
149
|
+
- 将 `YOUR_API_KEY` 替换为你的 API Key
|
|
150
|
+
- 如果服务器运行在其他端口,修改 URL 中的端口号
|
|
151
|
+
|
|
152
|
+
### 3. 重启 Cursor
|
|
153
|
+
|
|
154
|
+
配置完成后,重启 Cursor 使配置生效。
|
|
155
|
+
|
|
156
|
+
## 📊 功能使用
|
|
157
|
+
|
|
158
|
+
### 管理员功能
|
|
159
|
+
|
|
160
|
+
登录管理员页面后,你可以:
|
|
161
|
+
|
|
162
|
+
1. **用户管理**
|
|
163
|
+
- 创建、编辑、删除用户
|
|
164
|
+
- 查看用户 API Key
|
|
165
|
+
- 重置用户 API Key
|
|
166
|
+
|
|
167
|
+
2. **配置管理**
|
|
168
|
+
- 创建 MCP 配置
|
|
169
|
+
- 配置 MCP 组件(NPM/URL/stdio)
|
|
170
|
+
- 管理变量(支持密钥占位符)
|
|
171
|
+
- 导入/导出配置
|
|
172
|
+
|
|
173
|
+
3. **系统监控**
|
|
174
|
+
- 查看系统状态
|
|
175
|
+
- 查看使用统计
|
|
176
|
+
|
|
177
|
+
### 用户功能
|
|
178
|
+
|
|
179
|
+
登录用户页面后,你可以:
|
|
180
|
+
|
|
181
|
+
1. **表管理**
|
|
182
|
+
- 创建、编辑、删除表
|
|
183
|
+
- 定义表结构(列、类型、约束)
|
|
184
|
+
- 管理表数据
|
|
185
|
+
|
|
186
|
+
2. **脚本执行**
|
|
187
|
+
- 编写和执行 TypeScript 脚本
|
|
188
|
+
- 使用 MCP 工具
|
|
189
|
+
- 访问表数据
|
|
190
|
+
- 使用变量
|
|
191
|
+
|
|
192
|
+
3. **提示词管理**
|
|
193
|
+
- 创建和管理提示词模板
|
|
194
|
+
- 使用变量占位符
|
|
195
|
+
|
|
196
|
+
## 📝 API 文档
|
|
106
197
|
|
|
107
198
|
### 认证
|
|
108
199
|
|
|
109
200
|
#### 用户登录
|
|
110
|
-
```http
|
|
111
|
-
POST /api/auth/user/login
|
|
112
|
-
Content-Type: application/json
|
|
113
201
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
"
|
|
117
|
-
|
|
202
|
+
```bash
|
|
203
|
+
curl -X POST http://localhost:3000/api/auth/user/login \
|
|
204
|
+
-H "Content-Type: application/json" \
|
|
205
|
+
-d '{
|
|
206
|
+
"email": "user@example.com",
|
|
207
|
+
"apiKey": "your-api-key"
|
|
208
|
+
}'
|
|
118
209
|
```
|
|
119
210
|
|
|
120
|
-
####
|
|
121
|
-
```http
|
|
122
|
-
POST /api/auth/admin/login
|
|
123
|
-
Content-Type: application/json
|
|
211
|
+
#### 管理员登录
|
|
124
212
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
"
|
|
128
|
-
|
|
213
|
+
```bash
|
|
214
|
+
curl -X POST http://localhost:3000/api/auth/admin/login \
|
|
215
|
+
-H "Content-Type: application/json" \
|
|
216
|
+
-d '{
|
|
217
|
+
"username": "admin",
|
|
218
|
+
"password": "123456"
|
|
219
|
+
}'
|
|
129
220
|
```
|
|
130
221
|
|
|
131
222
|
### 用户管理
|
|
132
223
|
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
|
|
224
|
+
```bash
|
|
225
|
+
# 获取用户列表(需要管理员权限)
|
|
226
|
+
curl http://localhost:3000/api/users \
|
|
227
|
+
-H "Authorization: Bearer YOUR_TOKEN"
|
|
136
228
|
```
|
|
137
229
|
|
|
138
230
|
### 配置管理
|
|
139
231
|
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
232
|
+
```bash
|
|
233
|
+
# 获取配置列表
|
|
234
|
+
curl http://localhost:3000/api/configs \
|
|
235
|
+
-H "Authorization: Bearer YOUR_TOKEN"
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## 💻 在代码中使用
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
import { startServer } from 'flex-mcp';
|
|
242
|
+
|
|
243
|
+
await startServer({
|
|
244
|
+
port: 3000,
|
|
245
|
+
host: '0.0.0.0',
|
|
246
|
+
});
|
|
146
247
|
```
|
|
147
248
|
|
|
249
|
+
## ❓ 常见问题
|
|
250
|
+
|
|
251
|
+
### Q: 如何修改管理员密码?
|
|
252
|
+
|
|
253
|
+
A: 修改 `.env` 文件中的 `ADMIN_PASSWORD` 环境变量,然后重启服务器。
|
|
254
|
+
|
|
255
|
+
### Q: 如何修改端口?
|
|
256
|
+
|
|
257
|
+
A: 修改 `.env` 文件中的 `PORT` 环境变量,或使用环境变量:`PORT=5666 flex-mcp start`
|
|
258
|
+
|
|
259
|
+
### Q: 数据存储在哪里?
|
|
260
|
+
|
|
261
|
+
A: 默认存储在 `./.data` 目录下,可以通过 `DATA_DIR` 环境变量修改。
|
|
262
|
+
|
|
263
|
+
### Q: 如何备份数据?
|
|
264
|
+
|
|
265
|
+
A: 备份 `./.data` 目录下的 `database.sqlite` 文件即可。
|
|
266
|
+
|
|
267
|
+
### Q: 如何重置数据库?
|
|
268
|
+
|
|
269
|
+
A: 删除 `./.data` 目录下的 `database.sqlite` 文件,然后重新运行 `flex-mcp init`。
|
|
270
|
+
|
|
271
|
+
## 📚 更多文档
|
|
272
|
+
|
|
273
|
+
详细使用指南请参考:[USAGE.md](../../USAGE.md)
|
|
274
|
+
|
|
148
275
|
## 许可证
|
|
149
276
|
|
|
150
277
|
MIT
|
package/dist/cli.js
CHANGED
|
@@ -64,8 +64,8 @@ async function init() {
|
|
|
64
64
|
console.log('\n✨ 初始化完成!');
|
|
65
65
|
console.log('\n下一步:');
|
|
66
66
|
console.log(' 1. 编辑 .env 文件配置环境变量(可选)');
|
|
67
|
-
console.log(' 2. 运行 "
|
|
68
|
-
console.log(' 或运行 "
|
|
67
|
+
console.log(' 2. 运行 "flex-mcp start" 启动服务');
|
|
68
|
+
console.log(' 或运行 "flex-mcp deploy" 一键部署');
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
71
71
|
* 启动服务器
|
|
@@ -216,7 +216,7 @@ function showHelp() {
|
|
|
216
216
|
Meta MCP Server - 可运营 MCP Node 服务
|
|
217
217
|
|
|
218
218
|
用法:
|
|
219
|
-
|
|
219
|
+
flex-mcp <command> [options]
|
|
220
220
|
|
|
221
221
|
命令:
|
|
222
222
|
init 初始化项目(创建 .env 文件,初始化数据库)
|
|
@@ -225,9 +225,9 @@ Meta MCP Server - 可运营 MCP Node 服务
|
|
|
225
225
|
help 显示帮助信息
|
|
226
226
|
|
|
227
227
|
示例:
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
228
|
+
flex-mcp init # 初始化项目
|
|
229
|
+
flex-mcp start # 启动服务器
|
|
230
|
+
flex-mcp deploy # 一键部署
|
|
231
231
|
|
|
232
232
|
环境变量:
|
|
233
233
|
通过 .env 文件配置,或使用环境变量:
|
|
@@ -237,7 +237,7 @@ Meta MCP Server - 可运营 MCP Node 服务
|
|
|
237
237
|
- ADMIN_PASSWORD: 超级管理员密码(默认: 123456)
|
|
238
238
|
- DATA_DIR: 数据目录(默认: ./.data)
|
|
239
239
|
|
|
240
|
-
更多信息: https://github.com/LeeLejia/
|
|
240
|
+
更多信息: https://github.com/LeeLejia/flex-mcp
|
|
241
241
|
`);
|
|
242
242
|
}
|
|
243
243
|
// 主函数
|
|
@@ -264,7 +264,7 @@ async function main() {
|
|
|
264
264
|
}
|
|
265
265
|
else {
|
|
266
266
|
console.error(`❌ 未知命令: ${command}`);
|
|
267
|
-
console.log('运行 "
|
|
267
|
+
console.log('运行 "flex-mcp help" 查看帮助信息');
|
|
268
268
|
process.exit(1);
|
|
269
269
|
}
|
|
270
270
|
}
|
|
@@ -277,10 +277,10 @@ async function main() {
|
|
|
277
277
|
// 如果直接运行此文件,执行主函数
|
|
278
278
|
// 检查是否是直接运行(不是被导入)
|
|
279
279
|
// 在 ESM 模块中,如果文件被直接执行,import.meta.url 会匹配 process.argv[1]
|
|
280
|
-
// 或者通过 npm bin 链接运行时,argv[1] 会包含 cli.js 或
|
|
280
|
+
// 或者通过 npm bin 链接运行时,argv[1] 会包含 cli.js 或 flex-mcp
|
|
281
281
|
const isMainModule = import.meta.url === `file://${process.argv[1]}` ||
|
|
282
282
|
process.argv[1]?.includes('cli.js') ||
|
|
283
|
-
process.argv[1]?.includes('
|
|
283
|
+
process.argv[1]?.includes('flex-mcp') ||
|
|
284
284
|
// 如果没有任何参数且是直接运行,也执行
|
|
285
285
|
(process.argv.length === 2 && import.meta.url.endsWith('cli.js'));
|
|
286
286
|
// 总是执行主函数(因为这是 CLI 入口文件)
|
package/dist/static.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAsC9C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkBpD"}
|
package/dist/static.js
CHANGED
|
@@ -15,8 +15,10 @@ export function getWebDistPath() {
|
|
|
15
15
|
// 尝试多个可能的路径(按优先级)
|
|
16
16
|
const possiblePaths = [
|
|
17
17
|
// npm 包中的路径(发布后)- 最优先
|
|
18
|
-
|
|
19
|
-
path.join(__dirname, '
|
|
18
|
+
// __dirname 在编译后是 dist/,所以 dist/web 应该是 path.join(__dirname, 'web')
|
|
19
|
+
path.join(__dirname, 'web'), // dist/web (npm 包中,web 文件在这里)
|
|
20
|
+
path.join(__dirname, '../web'), // web (如果 static.js 不在 dist 下)
|
|
21
|
+
path.join(__dirname, '../web/dist'), // web/dist (如果复制时保留了 dist 目录)
|
|
20
22
|
// 开发环境路径
|
|
21
23
|
path.join(__dirname, '../../web/dist'), // packages/server/dist/../../web/dist
|
|
22
24
|
path.join(__dirname, '../../../web/dist'), // 从 dist/static.js: dist/../../web/dist
|
package/dist/static.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,kBAAkB;IAClB,MAAM,aAAa,GAAG;QACpB,sBAAsB;QACtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"static.js","sourceRoot":"","sources":["../src/static.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/telemetry.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as e,c as o,o as a}from"./index-Coivokd4.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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as N,u as P,r as d,p as S,I as j,c as v,b as e,f as s,y as m,m as _,w as o,g as a,B as H,R as T,K as E,e as I,t as b,W as k,D as V,L as D,o as r,h as L,O,P as x}from"./index-Coivokd4.js";import{u as W,M as G,C as K,I as R}from"./InitScriptEditor-CyQQvKeL.js";import{_ as q}from"./_plugin-vue_export-helper-DlAUqK2U.js";const A={class:"configs-page"},F={style:{position:"absolute",width:"0",height:"0"}},J={class:"configs-container"},Q={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=W(),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 D.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",A,[(r(),v("svg",F,[...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",J,[e("main",Q,[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]=L(" 编辑配置 ",-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(E),{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]=I('<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(V),{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(O),{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(G,{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(R,{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};
|