whistle.mockbubu 2.2.4 → 2.2.5
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.
|
@@ -32,7 +32,7 @@ module.exports = (router) => {
|
|
|
32
32
|
// 新增匹配规则
|
|
33
33
|
router.post('/cgi-bin/mockbubu/add-match-version', wrapRouteHandler(async (ctx) => {
|
|
34
34
|
const { groupManager } = ctx
|
|
35
|
-
const { url, name, description = '' } = ctx.request.body || {}
|
|
35
|
+
const { url, name, description = '', content } = ctx.request.body || {}
|
|
36
36
|
|
|
37
37
|
validateRequiredParams({ url, name }, ['url', 'name'])
|
|
38
38
|
|
|
@@ -42,7 +42,7 @@ module.exports = (router) => {
|
|
|
42
42
|
name,
|
|
43
43
|
description,
|
|
44
44
|
conditions: [], // 新规则默认空条件(兜底匹配)
|
|
45
|
-
content: {},
|
|
45
|
+
content: content || {},
|
|
46
46
|
priority: 0,
|
|
47
47
|
})
|
|
48
48
|
|
package/package.json
CHANGED
package/public/js/app.js
CHANGED
|
@@ -2317,6 +2317,24 @@ const __default__ = {
|
|
|
2317
2317
|
const fullScreenEditorRef = (0,vue__WEBPACK_IMPORTED_MODULE_12__.ref)(null);
|
|
2318
2318
|
const versionNameInput = (0,vue__WEBPACK_IMPORTED_MODULE_12__.ref)(null);
|
|
2319
2319
|
const matchRuleNameInput = (0,vue__WEBPACK_IMPORTED_MODULE_12__.ref)(null);
|
|
2320
|
+
const tabsAreaRef = (0,vue__WEBPACK_IMPORTED_MODULE_12__.ref)(null);
|
|
2321
|
+
const tabsFade = (0,vue__WEBPACK_IMPORTED_MODULE_12__.reactive)({
|
|
2322
|
+
top: false,
|
|
2323
|
+
bottom: false
|
|
2324
|
+
});
|
|
2325
|
+
let tabsFadePending = false;
|
|
2326
|
+
const updateTabsFade = () => {
|
|
2327
|
+
if (tabsFadePending) return;
|
|
2328
|
+
tabsFadePending = true;
|
|
2329
|
+
requestAnimationFrame(() => {
|
|
2330
|
+
const el = tabsAreaRef.value;
|
|
2331
|
+
if (el) {
|
|
2332
|
+
tabsFade.top = el.scrollTop > 2;
|
|
2333
|
+
tabsFade.bottom = el.scrollTop + el.clientHeight < el.scrollHeight - 2;
|
|
2334
|
+
}
|
|
2335
|
+
tabsFadePending = false;
|
|
2336
|
+
});
|
|
2337
|
+
};
|
|
2320
2338
|
const responseList = (0,vue__WEBPACK_IMPORTED_MODULE_12__.ref)([]);
|
|
2321
2339
|
const currentFile = (0,vue__WEBPACK_IMPORTED_MODULE_12__.ref)({
|
|
2322
2340
|
content: {}
|
|
@@ -2504,8 +2522,10 @@ const __default__ = {
|
|
|
2504
2522
|
|
|
2505
2523
|
// 后端返回的数据已经包含 type, name, content, updateTime
|
|
2506
2524
|
// 只需添加 filename 字段用于兼容前端现有逻辑
|
|
2525
|
+
// 冻结每项的 content,阻止 Vue 2 对大对象进行深度响应式处理,避免主线程卡死
|
|
2507
2526
|
versionList.forEach(item => {
|
|
2508
2527
|
item.filename = item.name;
|
|
2528
|
+
item.content = Object.freeze(item.content || {});
|
|
2509
2529
|
});
|
|
2510
2530
|
|
|
2511
2531
|
// 直接替换列表数据
|
|
@@ -2516,11 +2536,19 @@ const __default__ = {
|
|
|
2516
2536
|
// 否则选中对应的版本
|
|
2517
2537
|
const targetName = mockVersion.value || 'source';
|
|
2518
2538
|
const currentFileData = versionList.find(item => item.name === targetName);
|
|
2539
|
+
|
|
2540
|
+
// 选中项需要深拷贝一份可编辑副本(frozen 对象不可直接编辑)
|
|
2519
2541
|
if (currentFileData) {
|
|
2520
|
-
currentFile.value =
|
|
2542
|
+
currentFile.value = {
|
|
2543
|
+
...currentFileData,
|
|
2544
|
+
content: JSON.parse(JSON.stringify(currentFileData.content))
|
|
2545
|
+
};
|
|
2521
2546
|
} else {
|
|
2522
|
-
|
|
2523
|
-
currentFile.value =
|
|
2547
|
+
const first = versionList[0];
|
|
2548
|
+
currentFile.value = first ? {
|
|
2549
|
+
...first,
|
|
2550
|
+
content: JSON.parse(JSON.stringify(first.content))
|
|
2551
|
+
} : {};
|
|
2524
2552
|
}
|
|
2525
2553
|
console.log('[ResponsePanel] 获取版本列表成功:', {
|
|
2526
2554
|
total: versionList.length,
|
|
@@ -2533,24 +2561,9 @@ const __default__ = {
|
|
|
2533
2561
|
throw err;
|
|
2534
2562
|
});
|
|
2535
2563
|
};
|
|
2536
|
-
|
|
2537
|
-
/**
|
|
2538
|
-
* 从已有版本名中计算下一个 v{n} 编号(历史最大编号+1,不与现有名重复)
|
|
2539
|
-
*/
|
|
2540
|
-
const nextVersionName = () => {
|
|
2541
|
-
const existing = new Set(responseList.value.map(item => item.filename));
|
|
2542
|
-
let max = 0;
|
|
2543
|
-
responseList.value.forEach(item => {
|
|
2544
|
-
const m = /^v(\d+)$/.exec(item.filename);
|
|
2545
|
-
if (m) max = Math.max(max, parseInt(m[1], 10));
|
|
2546
|
-
});
|
|
2547
|
-
let n = max + 1;
|
|
2548
|
-
while (existing.has(`v${n}`)) n++;
|
|
2549
|
-
return `v${n}`;
|
|
2550
|
-
};
|
|
2551
2564
|
const onCreate = () => {
|
|
2552
2565
|
versionModal.status = 'create';
|
|
2553
|
-
versionModal.name =
|
|
2566
|
+
versionModal.name = '';
|
|
2554
2567
|
versionModal.description = '';
|
|
2555
2568
|
versionModal.editingVersion = null;
|
|
2556
2569
|
versionModal.visible = true;
|
|
@@ -2733,11 +2746,11 @@ const __default__ = {
|
|
|
2733
2746
|
console.error('[ResponsePanel] 解析版本数据失败:', error);
|
|
2734
2747
|
return;
|
|
2735
2748
|
}
|
|
2736
|
-
console.log('[ResponsePanel] 解析后的版本列表:', versionList);
|
|
2737
2749
|
|
|
2738
|
-
//
|
|
2750
|
+
// 冻结 content,防止 Vue 2 深度 observe 大对象阻塞主线程
|
|
2739
2751
|
versionList.forEach(item => {
|
|
2740
2752
|
item.filename = item.name;
|
|
2753
|
+
item.content = Object.freeze(item.content || {});
|
|
2741
2754
|
});
|
|
2742
2755
|
|
|
2743
2756
|
// 更新列表
|
|
@@ -2848,8 +2861,10 @@ const __default__ = {
|
|
|
2848
2861
|
};
|
|
2849
2862
|
const selectFile = item => {
|
|
2850
2863
|
const tempEffect = currentFile.value.effect;
|
|
2864
|
+
// content 可能是 frozen 对象,深拷贝一份可编辑副本
|
|
2851
2865
|
currentFile.value = {
|
|
2852
2866
|
...item,
|
|
2867
|
+
content: JSON.parse(JSON.stringify(item.content || {})),
|
|
2853
2868
|
effect: tempEffect
|
|
2854
2869
|
};
|
|
2855
2870
|
const versionName = item.type === 'history' ? item.filename : '';
|
|
@@ -3300,14 +3315,30 @@ const __default__ = {
|
|
|
3300
3315
|
matchRuleChanged.value = false;
|
|
3301
3316
|
};
|
|
3302
3317
|
|
|
3303
|
-
/** 条件编辑区更新 */
|
|
3304
|
-
const handleConditionsChange = newConditions => {
|
|
3318
|
+
/** 条件编辑区更新 — 直接自动保存,无需手动点保存 */
|
|
3319
|
+
const handleConditionsChange = async newConditions => {
|
|
3305
3320
|
if (!currentMatchRule.value) return;
|
|
3306
3321
|
currentMatchRule.value = {
|
|
3307
3322
|
...currentMatchRule.value,
|
|
3308
3323
|
conditions: newConditions
|
|
3309
3324
|
};
|
|
3310
|
-
|
|
3325
|
+
const res = await (0,_service__WEBPACK_IMPORTED_MODULE_11__.updateMatchVersion)({
|
|
3326
|
+
url: props.api.name,
|
|
3327
|
+
matchVersionId: currentMatchRule.value.id,
|
|
3328
|
+
conditions: newConditions,
|
|
3329
|
+
content: currentMatchRule.value.content
|
|
3330
|
+
});
|
|
3331
|
+
if (res.code !== 200) {
|
|
3332
|
+
element_ui_lib_message__WEBPACK_IMPORTED_MODULE_2___default().error(res.msg || '条件保存失败');
|
|
3333
|
+
} else {
|
|
3334
|
+
const idx = matchRuleList.value.findIndex(r => r.id === currentMatchRule.value.id);
|
|
3335
|
+
if (idx > -1) {
|
|
3336
|
+
matchRuleList.value[idx] = {
|
|
3337
|
+
...matchRuleList.value[idx],
|
|
3338
|
+
conditions: newConditions
|
|
3339
|
+
};
|
|
3340
|
+
}
|
|
3341
|
+
}
|
|
3311
3342
|
};
|
|
3312
3343
|
|
|
3313
3344
|
/** 匹配规则 JSON 编辑器内容变更 */
|
|
@@ -3353,10 +3384,16 @@ const __default__ = {
|
|
|
3353
3384
|
return;
|
|
3354
3385
|
}
|
|
3355
3386
|
if (matchRuleModal.status === 'create') {
|
|
3387
|
+
// 已保存文件:responseList 在条件匹配模式下未加载,先补一次
|
|
3388
|
+
if (props.api.id && !responseList.value.length) {
|
|
3389
|
+
await getHistoryVersions();
|
|
3390
|
+
}
|
|
3391
|
+
const sourceItem = responseList.value.find(item => item.type === 'source') || getSourceVersion();
|
|
3356
3392
|
const res = await (0,_service__WEBPACK_IMPORTED_MODULE_11__.addMatchVersion)({
|
|
3357
3393
|
url: props.api.name,
|
|
3358
3394
|
name: matchRuleModal.name.trim(),
|
|
3359
|
-
description: matchRuleModal.description
|
|
3395
|
+
description: matchRuleModal.description,
|
|
3396
|
+
content: sourceItem?.content ? JSON.parse(JSON.stringify(sourceItem.content)) : {}
|
|
3360
3397
|
});
|
|
3361
3398
|
if (res.code !== 200) {
|
|
3362
3399
|
element_ui_lib_message__WEBPACK_IMPORTED_MODULE_2___default().error(res.msg || '创建失败');
|
|
@@ -3487,6 +3524,11 @@ const __default__ = {
|
|
|
3487
3524
|
immediate: true
|
|
3488
3525
|
});
|
|
3489
3526
|
|
|
3527
|
+
// tabs 列表变化后重新计算遮罩状态
|
|
3528
|
+
(0,vue__WEBPACK_IMPORTED_MODULE_12__.watch)([responseList, matchRuleList], () => {
|
|
3529
|
+
(0,vue__WEBPACK_IMPORTED_MODULE_12__.nextTick)(updateTabsFade);
|
|
3530
|
+
});
|
|
3531
|
+
|
|
3490
3532
|
// 移除 watch(date),避免轮询时不必要的 API 调用
|
|
3491
3533
|
// date 变化由 watch(name) 统一处理
|
|
3492
3534
|
// watch(date, () => {
|
|
@@ -3535,6 +3577,10 @@ const __default__ = {
|
|
|
3535
3577
|
fullScreenEditorRef,
|
|
3536
3578
|
versionNameInput,
|
|
3537
3579
|
matchRuleNameInput,
|
|
3580
|
+
tabsAreaRef,
|
|
3581
|
+
tabsFade,
|
|
3582
|
+
tabsFadePending,
|
|
3583
|
+
updateTabsFade,
|
|
3538
3584
|
responseList,
|
|
3539
3585
|
currentFile,
|
|
3540
3586
|
hasJsonError,
|
|
@@ -3557,7 +3603,6 @@ const __default__ = {
|
|
|
3557
3603
|
activeEditorContent,
|
|
3558
3604
|
getSourceVersion,
|
|
3559
3605
|
getHistoryVersions,
|
|
3560
|
-
nextVersionName,
|
|
3561
3606
|
onCreate,
|
|
3562
3607
|
onEditVersion,
|
|
3563
3608
|
handleDialogOpened,
|
|
@@ -4155,7 +4200,7 @@ const __default__ = {
|
|
|
4155
4200
|
const [ca, cb, cc] = parse(pluginVersion.value);
|
|
4156
4201
|
return la > ca || la === ca && lb > cb || la === ca && lb === cb && lc > cc;
|
|
4157
4202
|
});
|
|
4158
|
-
const updateCmd = (0,vue__WEBPACK_IMPORTED_MODULE_16__.computed)(() => `
|
|
4203
|
+
const updateCmd = (0,vue__WEBPACK_IMPORTED_MODULE_16__.computed)(() => `w2 install whistle.mockbubu --registry=https://registry.npmjs.org/`);
|
|
4159
4204
|
|
|
4160
4205
|
// 获取插件版本号
|
|
4161
4206
|
const fetchPluginVersion = async () => {
|
|
@@ -5302,7 +5347,7 @@ var render = function render() {
|
|
|
5302
5347
|
placeholder: "参数名"
|
|
5303
5348
|
},
|
|
5304
5349
|
on: {
|
|
5305
|
-
|
|
5350
|
+
blur: _setup.emitChange
|
|
5306
5351
|
},
|
|
5307
5352
|
model: {
|
|
5308
5353
|
value: cond.key,
|
|
@@ -5320,7 +5365,7 @@ var render = function render() {
|
|
|
5320
5365
|
placeholder: "参数值"
|
|
5321
5366
|
},
|
|
5322
5367
|
on: {
|
|
5323
|
-
|
|
5368
|
+
blur: _setup.emitChange
|
|
5324
5369
|
},
|
|
5325
5370
|
model: {
|
|
5326
5371
|
value: cond.value,
|
|
@@ -5777,6 +5822,8 @@ var render = function render() {
|
|
|
5777
5822
|
staticClass: "response-panel"
|
|
5778
5823
|
}, [_c("div", {
|
|
5779
5824
|
staticClass: "response-panel__header"
|
|
5825
|
+
}, [_c("div", {
|
|
5826
|
+
staticClass: "response-panel__header-toolbar"
|
|
5780
5827
|
}, [_setup.props.api ? _c("div", {
|
|
5781
5828
|
staticClass: "response-panel__mode-selector"
|
|
5782
5829
|
}, [_c("div", {
|
|
@@ -5816,7 +5863,37 @@ var render = function render() {
|
|
|
5816
5863
|
return _setup.switchMode("match");
|
|
5817
5864
|
}
|
|
5818
5865
|
}
|
|
5819
|
-
}, [_vm._v(" 条件匹配 ")])]) : _vm._e()]) : _vm._e(), _setup.mockMode === "version" ?
|
|
5866
|
+
}, [_vm._v(" 条件匹配 ")])]) : _vm._e()]) : _vm._e(), _setup.mockMode === "version" ? _c("div", {
|
|
5867
|
+
staticClass: "response-panel__add-btn",
|
|
5868
|
+
on: {
|
|
5869
|
+
click: _setup.onCreate
|
|
5870
|
+
}
|
|
5871
|
+
}, [_c("i", {
|
|
5872
|
+
staticClass: "el-icon-plus"
|
|
5873
|
+
}), _c("span", [_vm._v("新增版本")])]) : _vm._e(), _setup.mockMode === "match" ? _c("div", {
|
|
5874
|
+
staticClass: "response-panel__add-btn",
|
|
5875
|
+
on: {
|
|
5876
|
+
click: _setup.onCreateMatchRule
|
|
5877
|
+
}
|
|
5878
|
+
}, [_c("i", {
|
|
5879
|
+
staticClass: "el-icon-plus"
|
|
5880
|
+
}), _c("span", [_vm._v("新增规则")])]) : _vm._e(), _setup.mockMode === "version" && _setup.responseList.length > 1 ? _c("span", {
|
|
5881
|
+
staticClass: "response-panel__version-count"
|
|
5882
|
+
}, [_vm._v(" " + _vm._s(_setup.responseList.length - 1) + " 个版本 ")]) : _vm._e(), _setup.mockMode === "match" && _setup.matchRuleList.length > 0 ? _c("span", {
|
|
5883
|
+
staticClass: "response-panel__version-count"
|
|
5884
|
+
}, [_vm._v(" " + _vm._s(_setup.matchRuleList.length) + " 条规则 ")]) : _vm._e()]), _c("div", {
|
|
5885
|
+
staticClass: "response-panel__tabs-wrapper",
|
|
5886
|
+
class: {
|
|
5887
|
+
"has-top-fade": _setup.tabsFade.top,
|
|
5888
|
+
"has-bottom-fade": _setup.tabsFade.bottom
|
|
5889
|
+
}
|
|
5890
|
+
}, [_setup.mockMode === "version" ? _c("div", {
|
|
5891
|
+
ref: "tabsAreaRef",
|
|
5892
|
+
staticClass: "response-panel__tabs-area",
|
|
5893
|
+
on: {
|
|
5894
|
+
scroll: _setup.updateTabsFade
|
|
5895
|
+
}
|
|
5896
|
+
}, _vm._l(_setup.responseList, function (item, index) {
|
|
5820
5897
|
return _c("div", {
|
|
5821
5898
|
key: `${item.type}-${item.filename}`,
|
|
5822
5899
|
staticClass: "response-panel__tab",
|
|
@@ -5874,20 +5951,13 @@ var render = function render() {
|
|
|
5874
5951
|
}
|
|
5875
5952
|
}
|
|
5876
5953
|
}) : _vm._e()], 1);
|
|
5877
|
-
}), _c("div", {
|
|
5878
|
-
|
|
5954
|
+
}), 0) : _vm._e(), _setup.mockMode === "match" ? _c("div", {
|
|
5955
|
+
ref: "tabsAreaRef",
|
|
5956
|
+
staticClass: "response-panel__tabs-area",
|
|
5879
5957
|
on: {
|
|
5880
|
-
|
|
5958
|
+
scroll: _setup.updateTabsFade
|
|
5881
5959
|
}
|
|
5882
|
-
},
|
|
5883
|
-
attrs: {
|
|
5884
|
-
effect: "dark",
|
|
5885
|
-
content: "Add response version",
|
|
5886
|
-
placement: "top"
|
|
5887
|
-
}
|
|
5888
|
-
}, [_c("i", {
|
|
5889
|
-
staticClass: "el-icon-plus"
|
|
5890
|
-
})])], 1)] : _vm._e(), _setup.mockMode === "match" ? [_vm._l(_setup.matchRuleList, function (item, index) {
|
|
5960
|
+
}, _vm._l(_setup.matchRuleList, function (item, index) {
|
|
5891
5961
|
return _c("div", {
|
|
5892
5962
|
key: item.id,
|
|
5893
5963
|
staticClass: "response-panel__tab",
|
|
@@ -5931,20 +6001,7 @@ var render = function render() {
|
|
|
5931
6001
|
}
|
|
5932
6002
|
}
|
|
5933
6003
|
})], 1);
|
|
5934
|
-
}), _c("div", {
|
|
5935
|
-
staticClass: "response-panel__add-btn",
|
|
5936
|
-
on: {
|
|
5937
|
-
click: _setup.onCreateMatchRule
|
|
5938
|
-
}
|
|
5939
|
-
}, [_c("el-tooltip", {
|
|
5940
|
-
attrs: {
|
|
5941
|
-
effect: "dark",
|
|
5942
|
-
content: "新增匹配规则",
|
|
5943
|
-
placement: "top"
|
|
5944
|
-
}
|
|
5945
|
-
}, [_c("i", {
|
|
5946
|
-
staticClass: "el-icon-plus"
|
|
5947
|
-
})])], 1)] : _vm._e()], 2), _c("div", {
|
|
6004
|
+
}), 0) : _vm._e()])]), _c("div", {
|
|
5948
6005
|
staticClass: "response-panel__content"
|
|
5949
6006
|
}, [_setup.mockMode === "match" && _setup.currentMatchRule ? _c(_setup.MatchConditionEditor, {
|
|
5950
6007
|
attrs: {
|
|
@@ -6046,7 +6103,22 @@ var render = function render() {
|
|
|
6046
6103
|
staticClass: "response-panel__readonly-badge"
|
|
6047
6104
|
}, [_c("i", {
|
|
6048
6105
|
staticClass: "el-icon-lock"
|
|
6049
|
-
}), _c("span", [_vm._v("只读模式")])]) : _vm._e()
|
|
6106
|
+
}), _c("span", [_vm._v("只读模式")])]) : _vm._e(), (_setup.mockMode === "match" ? _setup.currentMatchRule && _setup.matchRuleChanged : !_setup.isSourceReadonly && _setup.currentFile.effect && (_setup.currentFile.type === "history" || _vm.api.mock)) ? _c("div", {
|
|
6107
|
+
staticClass: "response-panel__save-inline"
|
|
6108
|
+
}, [_setup.hasJsonError ? _c("span", {
|
|
6109
|
+
staticClass: "response-panel__error-text-inline"
|
|
6110
|
+
}, [_vm._v("JSON 格式错误")]) : _vm._e(), _c("el-button", {
|
|
6111
|
+
attrs: {
|
|
6112
|
+
size: "mini",
|
|
6113
|
+
type: "primary",
|
|
6114
|
+
disabled: _setup.hasJsonError
|
|
6115
|
+
},
|
|
6116
|
+
on: {
|
|
6117
|
+
click: _setup.handleUpdate
|
|
6118
|
+
}
|
|
6119
|
+
}, [_vm._v(" 保存 ")]), _c("span", {
|
|
6120
|
+
staticClass: "response-panel__effect-dot"
|
|
6121
|
+
})], 1) : _vm._e()], 1), _setup.mockMode === "version" ? _c(_setup.Editor, {
|
|
6050
6122
|
key: `editor-${_setup.currentFile.filename}-${_setup.isSourceReadonly}`,
|
|
6051
6123
|
ref: "editRef",
|
|
6052
6124
|
attrs: {
|
|
@@ -6100,22 +6172,7 @@ var render = function render() {
|
|
|
6100
6172
|
},
|
|
6101
6173
|
expression: "currentMatchRule.content"
|
|
6102
6174
|
}
|
|
6103
|
-
}) : _vm._e(),
|
|
6104
|
-
staticClass: "response-panel__save"
|
|
6105
|
-
}, [_setup.hasJsonError ? _c("span", {
|
|
6106
|
-
staticClass: "response-panel__error-text"
|
|
6107
|
-
}, [_vm._v("JSON 格式错误,无法保存")]) : _c("span", {
|
|
6108
|
-
staticClass: "response-panel__effect-icon"
|
|
6109
|
-
}), _c("el-button", {
|
|
6110
|
-
attrs: {
|
|
6111
|
-
size: "small",
|
|
6112
|
-
type: "primary",
|
|
6113
|
-
disabled: _setup.hasJsonError
|
|
6114
|
-
},
|
|
6115
|
-
on: {
|
|
6116
|
-
click: _setup.handleUpdate
|
|
6117
|
-
}
|
|
6118
|
-
}, [_vm._v(" 保存 ")])], 1) : _vm._e()], 1), _c("el-dialog", {
|
|
6175
|
+
}) : _vm._e()], 1), _c("el-dialog", {
|
|
6119
6176
|
attrs: {
|
|
6120
6177
|
visible: _setup.versionModal.visible,
|
|
6121
6178
|
width: "min(500px, 92vw)",
|
|
@@ -7905,7 +7962,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
7905
7962
|
|
|
7906
7963
|
var ___CSS_LOADER_EXPORT___ = _node_modules_pnpm_css_loader_6_11_0_webpack_5_100_2_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_pnpm_css_loader_6_11_0_webpack_5_100_2_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
|
7907
7964
|
// Module
|
|
7908
|
-
___CSS_LOADER_EXPORT___.push([module.id, ".mock-container[data-v-d97322d2] {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n.mock-container__content[data-v-d97322d2] {\n position: relative;\n padding-bottom: 16px;\n background-image: linear-gradient(0deg, var(--mb-accent-blue) 0, var(--mb-accent-blue) 16px, transparent 100%);\n display: flex;\n flex: 1;\n border: 1px solid var(--mb-border-color-light);\n border-left: none;\n overflow: hidden;\n}\n.mock-container__toolbar[data-v-d97322d2] {\n width: 48px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: 16px;\n gap: 8px;\n background: var(--mb-bg-base);\n border-right: 1px solid var(--mb-border-color-deep);\n z-index: 10;\n overflow: visible;\n}\n.mock-container__list-badge[data-v-d97322d2] {\n line-height: 1;\n overflow: visible;\n}\n.mock-container__detail-wrapper[data-v-d97322d2] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mock-container__current-url[data-v-d97322d2] {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 6px;\n padding: 5px 10px 5px 12px;\n background: var(--mb-bg-mantle);\n border-bottom: 1px solid var(--mb-border-color);\n min-height: 30px;\n flex-shrink: 0;\n}\n.mock-container__current-url-copy[data-v-d97322d2] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n cursor: pointer;\n color: var(--mb-text-muted);\n transition: color 0.15s, background 0.15s;\n}\n.mock-container__current-url-copy[data-v-d97322d2]:hover {\n color: var(--mb-accent-blue);\n background: var(--mb-bg-surface);\n}\n.mock-container__current-url-copy .el-icon-link[data-v-d97322d2] {\n font-size: 13px;\n}\n.mock-container__current-url-scroll[data-v-d97322d2] {\n flex: 1;\n min-width: 0;\n overflow-x: auto;\n overflow-y: hidden;\n text-align: left;\n}\n.mock-container__current-url-scroll[data-v-d97322d2]::-webkit-scrollbar {\n height: 3px;\n}\n.mock-container__current-url-scroll[data-v-d97322d2]::-webkit-scrollbar-track {\n background: transparent;\n}\n.mock-container__current-url-scroll[data-v-d97322d2]::-webkit-scrollbar-thumb {\n background: var(--mb-border-color-deep);\n border-radius: 2px;\n}\n.mock-container__current-url-text[data-v-d97322d2] {\n display: inline-block;\n font-size: 12px;\n color: var(--mb-text-secondary);\n white-space: nowrap;\n font-family: 'SF Mono', 'Consolas', monospace;\n line-height: 20px;\n}\n.mock-container__list-overlay[data-v-d97322d2] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 9;\n}\n.mock-container__backdrop[data-v-d97322d2] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n}\n.mock-container__list-panel[data-v-d97322d2] {\n position: absolute;\n top: 0;\n left: 48px;\n bottom: 0;\n width:
|
|
7965
|
+
___CSS_LOADER_EXPORT___.push([module.id, ".mock-container[data-v-d97322d2] {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n.mock-container__content[data-v-d97322d2] {\n position: relative;\n padding-bottom: 16px;\n background-image: linear-gradient(0deg, var(--mb-accent-blue) 0, var(--mb-accent-blue) 16px, transparent 100%);\n display: flex;\n flex: 1;\n border: 1px solid var(--mb-border-color-light);\n border-left: none;\n overflow: hidden;\n}\n.mock-container__toolbar[data-v-d97322d2] {\n width: 48px;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: 16px;\n gap: 8px;\n background: var(--mb-bg-base);\n border-right: 1px solid var(--mb-border-color-deep);\n z-index: 10;\n overflow: visible;\n}\n.mock-container__list-badge[data-v-d97322d2] {\n line-height: 1;\n overflow: visible;\n}\n.mock-container__detail-wrapper[data-v-d97322d2] {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mock-container__current-url[data-v-d97322d2] {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: 6px;\n padding: 5px 10px 5px 12px;\n background: var(--mb-bg-mantle);\n border-bottom: 1px solid var(--mb-border-color);\n min-height: 30px;\n flex-shrink: 0;\n}\n.mock-container__current-url-copy[data-v-d97322d2] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n cursor: pointer;\n color: var(--mb-text-muted);\n transition: color 0.15s, background 0.15s;\n}\n.mock-container__current-url-copy[data-v-d97322d2]:hover {\n color: var(--mb-accent-blue);\n background: var(--mb-bg-surface);\n}\n.mock-container__current-url-copy .el-icon-link[data-v-d97322d2] {\n font-size: 13px;\n}\n.mock-container__current-url-scroll[data-v-d97322d2] {\n flex: 1;\n min-width: 0;\n overflow-x: auto;\n overflow-y: hidden;\n text-align: left;\n}\n.mock-container__current-url-scroll[data-v-d97322d2]::-webkit-scrollbar {\n height: 3px;\n}\n.mock-container__current-url-scroll[data-v-d97322d2]::-webkit-scrollbar-track {\n background: transparent;\n}\n.mock-container__current-url-scroll[data-v-d97322d2]::-webkit-scrollbar-thumb {\n background: var(--mb-border-color-deep);\n border-radius: 2px;\n}\n.mock-container__current-url-text[data-v-d97322d2] {\n display: inline-block;\n font-size: 12px;\n color: var(--mb-text-secondary);\n white-space: nowrap;\n font-family: 'SF Mono', 'Consolas', monospace;\n line-height: 20px;\n}\n.mock-container__list-overlay[data-v-d97322d2] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 9;\n}\n.mock-container__backdrop[data-v-d97322d2] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.3);\n}\n.mock-container__list-panel[data-v-d97322d2] {\n position: absolute;\n top: 0;\n left: 48px;\n bottom: 0;\n width: 85%;\n max-width: calc(100% - 48px);\n background: var(--mb-bg-base);\n display: flex;\n flex-direction: column;\n box-shadow: 4px 0 12px rgba(0, 0, 0, 0.15);\n overflow: hidden;\n z-index: 1;\n}\n.mock-container__list-panel-body[data-v-d97322d2] {\n flex: 1;\n overflow: hidden;\n display: flex;\n}\n.mock-container__list-panel-body .request-list[data-v-d97322d2] {\n width: 100%;\n}\n.mock-container__disabled-overlay[data-v-d97322d2] {\n position: absolute;\n inset: 0;\n z-index: 20;\n background: var(--mb-disabled-overlay);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.mock-container__disabled-card[data-v-d97322d2] {\n background: var(--mb-disabled-card-bg);\n border-radius: 16px;\n padding: 40px 48px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n min-width: 260px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);\n}\n.mock-container__disabled-icon[data-v-d97322d2] {\n font-size: 36px;\n color: #888;\n line-height: 1;\n margin-bottom: 4px;\n}\n.mock-container__disabled-title[data-v-d97322d2] {\n font-size: 18px;\n font-weight: 600;\n color: #fff;\n}\n.mock-container__disabled-desc[data-v-d97322d2] {\n font-size: 13px;\n color: #aaa;\n text-align: center;\n}\n.mock-container__disabled-btn[data-v-d97322d2] {\n margin-top: 8px;\n border-radius: 8px;\n padding: 10px 32px;\n font-size: 15px;\n font-weight: 500;\n}\n", ""]);
|
|
7909
7966
|
// Exports
|
|
7910
7967
|
/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
|
|
7911
7968
|
|
|
@@ -8049,7 +8106,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
8049
8106
|
|
|
8050
8107
|
var ___CSS_LOADER_EXPORT___ = _node_modules_pnpm_css_loader_6_11_0_webpack_5_100_2_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_pnpm_css_loader_6_11_0_webpack_5_100_2_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
|
8051
8108
|
// Module
|
|
8052
|
-
___CSS_LOADER_EXPORT___.push([module.id, ".response-panel[data-v-c23cd6a6] {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n.response-panel__header[data-v-c23cd6a6] {\n display: flex;\n flex-
|
|
8109
|
+
___CSS_LOADER_EXPORT___.push([module.id, ".response-panel[data-v-c23cd6a6] {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n.response-panel__header[data-v-c23cd6a6] {\n display: flex;\n flex-direction: column;\n background-color: var(--mb-bg-mantle);\n flex-shrink: 0;\n}\n.response-panel__header-toolbar[data-v-c23cd6a6] {\n display: flex;\n align-items: center;\n gap: 0;\n height: 34px;\n border-bottom: 1px solid var(--mb-border-color);\n padding: 0 4px 0 0;\n}\n.response-panel__version-count[data-v-c23cd6a6] {\n margin-left: 6px;\n font-size: 11px;\n color: var(--mb-text-muted);\n font-variant-numeric: tabular-nums;\n}\n.response-panel__tabs-wrapper[data-v-c23cd6a6] {\n position: relative;\n}\n.response-panel__tabs-wrapper[data-v-c23cd6a6]::before,\n.response-panel__tabs-wrapper[data-v-c23cd6a6]::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 36px;\n z-index: 1;\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.2s;\n}\n.response-panel__tabs-wrapper[data-v-c23cd6a6]::before {\n top: 0;\n background: linear-gradient(var(--mb-bg-mantle), transparent);\n}\n.response-panel__tabs-wrapper[data-v-c23cd6a6]::after {\n bottom: 0;\n background: linear-gradient(transparent, var(--mb-bg-mantle));\n}\n.response-panel__tabs-wrapper.has-top-fade[data-v-c23cd6a6]::before {\n opacity: 1;\n}\n.response-panel__tabs-wrapper.has-bottom-fade[data-v-c23cd6a6]::after {\n opacity: 1;\n}\n.response-panel__tabs-area[data-v-c23cd6a6] {\n display: flex;\n flex-wrap: wrap;\n align-content: flex-start;\n gap: 5px;\n min-width: 0;\n padding: 5px 8px;\n max-height: calc((30px + 5px) * 3 + 5px);\n overflow-y: auto;\n overflow-x: hidden;\n}\n.response-panel__tabs-area[data-v-c23cd6a6]::-webkit-scrollbar {\n width: 3px;\n}\n.response-panel__tabs-area[data-v-c23cd6a6]::-webkit-scrollbar-thumb {\n background: var(--mb-border-color-deep);\n border-radius: 2px;\n}\n.response-panel__tab[data-v-c23cd6a6] {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n height: 26px;\n padding: 0 10px;\n font-size: 12px;\n font-weight: 500;\n color: var(--mb-text-secondary);\n background-color: var(--mb-bg-base);\n border: 1px solid var(--mb-border-color-deep);\n border-radius: 5px;\n white-space: nowrap;\n transition: color 0.15s, background-color 0.15s, border-color 0.15s;\n}\n.response-panel__tab[data-v-c23cd6a6]:hover:not(.response-panel__tab--selected) {\n color: var(--mb-accent-blue);\n border-color: var(--mb-accent-blue);\n background-color: var(--mb-accent-blue-bg);\n}\n.response-panel__tab--selected[data-v-c23cd6a6] {\n background-color: var(--mb-accent-blue);\n color: #fff;\n font-weight: 600;\n border-color: var(--mb-accent-blue);\n}\n.response-panel__tab--selected .response-panel__source-tab[data-v-c23cd6a6] {\n color: #fff;\n}\n.response-panel__tab--selected .response-panel__edit-btn[data-v-c23cd6a6],\n.response-panel__tab--selected .response-panel__delete-btn[data-v-c23cd6a6] {\n color: rgba(255, 255, 255, 0.7);\n opacity: 1;\n}\n.response-panel__tab--selected .response-panel__edit-btn[data-v-c23cd6a6]:hover,\n.response-panel__tab--selected .response-panel__delete-btn[data-v-c23cd6a6]:hover {\n color: #fff;\n}\n.response-panel__source-tab[data-v-c23cd6a6] {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n color: var(--mb-tag-amber);\n font-weight: 600;\n}\n.response-panel__source-tab i[data-v-c23cd6a6] {\n font-size: 13px;\n}\n.response-panel__tab-text[data-v-c23cd6a6] {\n display: inline-block;\n max-width: 100px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n vertical-align: middle;\n}\n.response-panel__edit-btn[data-v-c23cd6a6] {\n font-size: 11px;\n color: var(--mb-text-muted);\n opacity: 0;\n transition: opacity 0.12s, color 0.12s;\n}\n.response-panel__edit-btn[data-v-c23cd6a6]:hover {\n color: var(--mb-accent-blue);\n}\n.response-panel__delete-btn[data-v-c23cd6a6] {\n font-size: 11px;\n color: var(--mb-text-muted);\n opacity: 0;\n transition: opacity 0.12s, color 0.12s;\n}\n.response-panel__delete-btn[data-v-c23cd6a6]:hover {\n color: var(--mb-accent-red);\n}\n.response-panel__tab:hover .response-panel__edit-btn[data-v-c23cd6a6],\n.response-panel__tab:hover .response-panel__delete-btn[data-v-c23cd6a6] {\n opacity: 1;\n}\n.response-panel__add-btn[data-v-c23cd6a6] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n cursor: pointer;\n height: 24px;\n padding: 0 10px;\n margin: 0 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mb-accent-blue);\n background-color: var(--mb-accent-blue-bg);\n border: 1px solid var(--mb-accent-blue);\n border-radius: 4px;\n transition: background-color 0.15s, color 0.15s;\n}\n.response-panel__add-btn i[data-v-c23cd6a6] {\n font-size: 12px;\n}\n.response-panel__add-btn[data-v-c23cd6a6]:hover {\n color: #fff;\n background-color: var(--mb-accent-blue);\n}\n.response-panel__content[data-v-c23cd6a6] {\n position: relative;\n flex: 1;\n overflow: hidden;\n}\n.response-panel__toolbar[data-v-c23cd6a6] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background-color: var(--mb-bg-surface);\n border-bottom: 1px solid var(--mb-border-color);\n overflow-x: auto;\n}\n.response-panel__toolbar > *[data-v-c23cd6a6] {\n flex-shrink: 0;\n}\n.response-panel__toolbar .el-button[data-v-c23cd6a6] {\n margin: 0;\n}\n.response-panel__readonly-badge[data-v-c23cd6a6] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-left: auto;\n padding: 4px 12px;\n background-color: var(--mb-bg-mantle);\n border-radius: 4px;\n font-size: 12px;\n color: var(--mb-text-muted);\n font-weight: 500;\n height: 24px;\n overflow: hidden;\n}\n.response-panel__readonly-badge i[data-v-c23cd6a6] {\n font-size: 12px;\n}\n.response-panel__alert[data-v-c23cd6a6] {\n position: absolute;\n top: 8px;\n right: 10px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mb-accent-yellow);\n}\n.response-panel__save-inline[data-v-c23cd6a6] {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n margin-left: auto;\n flex-shrink: 0;\n}\n.response-panel__save-inline .el-button[data-v-c23cd6a6] {\n margin: 0;\n}\n.response-panel__effect-dot[data-v-c23cd6a6] {\n position: absolute;\n top: -3px;\n right: -3px;\n display: block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: var(--mb-accent-red);\n pointer-events: none;\n}\n.response-panel__error-text-inline[data-v-c23cd6a6] {\n color: var(--mb-accent-red);\n font-size: 11px;\n white-space: nowrap;\n}\n.response-panel__dialog[data-v-c23cd6a6] {\n display: flex;\n align-items: center;\n}\n.response-panel__dialog-label[data-v-c23cd6a6] {\n white-space: nowrap;\n}\n.response-panel__mode-selector[data-v-c23cd6a6] {\n position: relative;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n height: 100%;\n padding: 0 8px;\n border-right: 1px solid var(--mb-border-color);\n}\n.response-panel__mode-btn[data-v-c23cd6a6] {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n height: 24px;\n padding: 0 8px;\n font-size: 12px;\n font-weight: 600;\n color: #d97706;\n background-color: #fff8ee;\n border: 1px solid #f59e0b;\n border-radius: 4px;\n cursor: pointer;\n white-space: nowrap;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n transition: color 0.15s, border-color 0.15s, background-color 0.15s;\n}\n.response-panel__mode-btn .el-icon-arrow-down[data-v-c23cd6a6] {\n font-size: 12px;\n color: #d97706;\n font-weight: 900;\n transition: transform 0.2s;\n}\n.response-panel__mode-btn .el-icon-arrow-down.is-rotate[data-v-c23cd6a6] {\n transform: rotate(180deg);\n}\n.response-panel__mode-btn[data-v-c23cd6a6]:hover {\n color: #92400e;\n border-color: #d97706;\n background-color: #fef3c7;\n}\n.response-panel__mode-overlay[data-v-c23cd6a6] {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 99;\n}\n.response-panel__mode-dropdown[data-v-c23cd6a6] {\n position: absolute;\n top: calc(100% + 2px);\n left: 8px;\n z-index: 100;\n min-width: 100px;\n background-color: var(--mb-bg-overlay);\n border: 1px solid var(--mb-border-color-deep);\n border-radius: 4px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n}\n.response-panel__mode-option[data-v-c23cd6a6] {\n padding: 6px 14px;\n font-size: 12px;\n color: var(--mb-text-secondary);\n cursor: pointer;\n white-space: nowrap;\n}\n.response-panel__mode-option[data-v-c23cd6a6]:hover {\n background-color: var(--mb-bg-surface);\n color: var(--mb-accent-blue);\n}\n.response-panel__mode-option.is-active[data-v-c23cd6a6] {\n color: var(--mb-accent-blue);\n font-weight: 600;\n}\n", ""]);
|
|
8053
8110
|
// Exports
|
|
8054
8111
|
/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
|
|
8055
8112
|
|