diff --git a/plugins.v2/clashruleprovider/__init__.py b/plugins.v2/clashruleprovider/__init__.py index 0a72eb6..7939e03 100644 --- a/plugins.v2/clashruleprovider/__init__.py +++ b/plugins.v2/clashruleprovider/__init__.py @@ -154,7 +154,7 @@ class ClashRuleProvider(_PluginBase): self._clash_template['proxies'] = self._clash_template.get('proxies') or [] self._clash_template['proxy-groups'] = self._clash_template.get('proxy-groups') or [] self._clash_template['rule-providers'] = self._clash_template.get('rule-providers') or {} - self._clash_template['rules'] = self._clash_template.get('rule-providers') or [] + self._clash_template['rules'] = self._clash_template.get('rules') or [] except yaml.YAMLError as exc: logger.error(f"Error loading clash template yaml: {exc}") if self._group_by_region: @@ -1097,6 +1097,8 @@ class ClashRuleProvider(_PluginBase): branch = 'meta' api_url = f"https://api.github.com/repos/{owner}/{repo}/contents/geo" resp = RequestUtils().get_res(api_url, headers=settings.GITHUB_HEADERS, params={'ref': branch}) + if not resp: + return for path in resp.json(): if path["type"] == "dir" and path["name"] in self._geo_rules: tree_sha = path["sha"] @@ -1301,7 +1303,7 @@ class ClashRuleProvider(_PluginBase): ) clash_config['rules'] = clash_config.get('rules', []) if not self._discard_rules: - clash_config['rules'] += first_config.get('rules', []) + clash_config['rules'] = first_config.get('rules', []) + clash_config['rules'] clash_config['rule-providers'] = clash_config.get('rule-providers') or {} clash_config['rule-providers'].update(first_config.get('rule-providers', {})) @@ -1364,7 +1366,16 @@ class ClashRuleProvider(_PluginBase): logger.warn(f"规则集合 {rule.payload} 不存在, 跳过 {rule.raw_rule}") continue top_rules.append(rule.raw_rule) - clash_config["rules"] = self._top_rules + clash_config.get("rules", []) + for raw_rule in clash_config.get("rules", []): + rule = ClashRuleParser.parse_rule_line(raw_rule) + if not rule: + logger.warn(f"无效的规则 {raw_rule}, 跳过") + continue + if not isinstance(rule.action, Action) and rule.action not in outbound_names: + logger.warn(f"出站 {rule.action} 不存在, 跳过 {rule.raw_rule}") + continue + top_rules.append(rule.raw_rule) + clash_config["rules"] = top_rules if self._rule_provider: clash_config['rule-providers'] = clash_config.get('rule-providers') or {} clash_config['rule-providers'].update(self._rule_provider) diff --git a/plugins.v2/clashruleprovider/clashruleparser.py b/plugins.v2/clashruleprovider/clashruleparser.py index 266a944..64cdd81 100644 --- a/plugins.v2/clashruleprovider/clashruleparser.py +++ b/plugins.v2/clashruleprovider/clashruleparser.py @@ -1016,7 +1016,7 @@ class Converter: dc_buf = Converter.decode_base64(cipher_raw).decode('utf-8') if dc_buf.startswith("ss://"): dc_buf = dc_buf[len("ss://"):] - dc_buf = Converter.decode_base64(dc_buf).decode('utf-8') + dc_buf = Converter.decode_base64(dc_buf).decode('utf-8') cipher, password = dc_buf.split(":", 1) server = parsed.hostname port = parsed.port diff --git a/plugins.v2/clashruleprovider/dist/assets/__federation_expose_Page-CdB5Ln3A.js b/plugins.v2/clashruleprovider/dist/assets/__federation_expose_Page-BOIuCekN.js similarity index 98% rename from plugins.v2/clashruleprovider/dist/assets/__federation_expose_Page-CdB5Ln3A.js rename to plugins.v2/clashruleprovider/dist/assets/__federation_expose_Page-BOIuCekN.js index 649abaf..c4edabe 100644 --- a/plugins.v2/clashruleprovider/dist/assets/__federation_expose_Page-CdB5Ln3A.js +++ b/plugins.v2/clashruleprovider/dist/assets/__federation_expose_Page-BOIuCekN.js @@ -4563,6 +4563,7 @@ const newProxyGroup = ref({ // 组件状态 const loading = ref(true); +const importProxiesLoading = ref(false); const error = ref(null); const rules = ref([]); const rulesetRules = ref([]); @@ -5007,6 +5008,7 @@ async function importRule() { async function importExtraProxiesFun() { try { + importProxiesLoading.value = true; const requestData = { type: importExtraProxies.value.type, payload: importExtraProxies.value.payload @@ -5019,9 +5021,11 @@ async function importExtraProxiesFun() { message: '节点导入失败', color: 'error' }; + importProxiesLoading.value = false; return } importExtraProxiesDialog.value = false; + importProxiesLoading.value = false; await refreshData(); // 显示成功提示 snackbar.value = { @@ -5030,6 +5034,7 @@ async function importExtraProxiesFun() { color: 'success' }; } catch (err) { + importProxiesLoading.value = false; error.value = '节点导入失败: ' + (err.message || '未知错误'); snackbar.value = { show: true, @@ -6021,7 +6026,6 @@ return (_ctx, _cache) => { disabled: !isManual(item.source) }, { default: _withCtx(() => [ - _cache[117] || (_cache[117] = _createTextVNode(" > ")), _createVNode(_component_v_icon, null, { default: _withCtx(() => _cache[116] || (_cache[116] = [ _createTextVNode("mdi-delete") @@ -6037,7 +6041,7 @@ return (_ctx, _cache) => { activator: "parent", location: "top" }, { - default: _withCtx(() => _cache[118] || (_cache[118] = [ + default: _withCtx(() => _cache[117] || (_cache[117] = [ _createTextVNode(" 非手动添加 ") ])), _: 1 @@ -6075,7 +6079,7 @@ return (_ctx, _cache) => { ]), _: 1 }, 8, ["headers", "items", "page", "items-per-page"]), - _cache[119] || (_cache[119] = _createElementVNode("div", { class: "text-caption text-grey mt-2" }, null, -1)) + _cache[118] || (_cache[118] = _createElementVNode("div", { class: "text-caption text-grey mt-2" }, null, -1)) ]) ]), _: 1 @@ -6085,7 +6089,7 @@ return (_ctx, _cache) => { _createElementVNode("div", _hoisted_33, [ _createElementVNode("div", _hoisted_34, [ _createElementVNode("div", _hoisted_35, [ - _cache[122] || (_cache[122] = _createElementVNode("div", { class: "text-h6" }, "规则集合", -1)), + _cache[121] || (_cache[121] = _createElementVNode("div", { class: "text-h6" }, "规则集合", -1)), _createElementVNode("div", _hoisted_36, [ _createVNode(_component_v_text_field, { modelValue: searchRuleProviders.value, @@ -6104,12 +6108,12 @@ return (_ctx, _cache) => { }, { default: _withCtx(() => [ _createVNode(_component_v_icon, { left: "" }, { - default: _withCtx(() => _cache[120] || (_cache[120] = [ + default: _withCtx(() => _cache[119] || (_cache[119] = [ _createTextVNode("mdi-plus") ])), _: 1 }), - _cache[121] || (_cache[121] = _createTextVNode(" 添加规则集合 ")) + _cache[120] || (_cache[120] = _createTextVNode(" 添加规则集合 ")) ]), _: 1 }) @@ -6145,9 +6149,8 @@ return (_ctx, _cache) => { disabled: !isManual(item.source) }, { default: _withCtx(() => [ - _cache[124] || (_cache[124] = _createTextVNode(" > ")), _createVNode(_component_v_icon, null, { - default: _withCtx(() => _cache[123] || (_cache[123] = [ + default: _withCtx(() => _cache[122] || (_cache[122] = [ _createTextVNode("mdi-pencil") ])), _: 1 @@ -6165,7 +6168,7 @@ return (_ctx, _cache) => { }, { default: _withCtx(() => [ _createVNode(_component_v_icon, null, { - default: _withCtx(() => _cache[125] || (_cache[125] = [ + default: _withCtx(() => _cache[123] || (_cache[123] = [ _createTextVNode("mdi-delete") ])), _: 1 @@ -6179,7 +6182,7 @@ return (_ctx, _cache) => { activator: "parent", location: "top" }, { - default: _withCtx(() => _cache[126] || (_cache[126] = [ + default: _withCtx(() => _cache[124] || (_cache[124] = [ _createTextVNode(" 非手动添加 ") ])), _: 1 @@ -6238,7 +6241,7 @@ return (_ctx, _cache) => { _createVNode(_component_v_card, { class: "h-100" }, { default: _withCtx(() => [ _createVNode(_component_v_card_title, { class: "text-h6 font-weight-medium" }, { - default: _withCtx(() => _cache[127] || (_cache[127] = [ + default: _withCtx(() => _cache[125] || (_cache[125] = [ _createTextVNode("状态信息") ])), _: 1 @@ -6247,7 +6250,7 @@ return (_ctx, _cache) => { default: _withCtx(() => [ _createElementVNode("div", _hoisted_40, [ _createElementVNode("div", _hoisted_41, [ - _cache[128] || (_cache[128] = _createElementVNode("span", null, "状态", -1)), + _cache[126] || (_cache[126] = _createElementVNode("span", null, "状态", -1)), _createVNode(_component_v_chip, { size: "small", color: status.value === 'running' ? 'success' : 'warning' @@ -6259,23 +6262,23 @@ return (_ctx, _cache) => { }, 8, ["color"]) ]), _createElementVNode("div", _hoisted_42, [ - _cache[129] || (_cache[129] = _createElementVNode("span", null, "订阅配置规则数", -1)), + _cache[127] || (_cache[127] = _createElementVNode("span", null, "订阅配置规则数", -1)), _createElementVNode("span", null, _toDisplayString(subscriptionInfo.value.rule_size), 1) ]), _createElementVNode("div", _hoisted_43, [ - _cache[130] || (_cache[130] = _createElementVNode("span", null, "置顶规则数", -1)), + _cache[128] || (_cache[128] = _createElementVNode("span", null, "置顶规则数", -1)), _createElementVNode("span", null, _toDisplayString(sortedRules.value.length), 1) ]), _createElementVNode("div", _hoisted_44, [ - _cache[131] || (_cache[131] = _createElementVNode("span", null, "规则集规则数", -1)), + _cache[129] || (_cache[129] = _createElementVNode("span", null, "规则集规则数", -1)), _createElementVNode("span", null, _toDisplayString(sortedRulesetRules.value.length), 1) ]), _createElementVNode("div", _hoisted_45, [ - _cache[132] || (_cache[132] = _createElementVNode("span", null, "代理组数", -1)), + _cache[130] || (_cache[130] = _createElementVNode("span", null, "代理组数", -1)), _createElementVNode("span", null, _toDisplayString(proxyGroups.value.length), 1) ]), _createElementVNode("div", _hoisted_46, [ - _cache[133] || (_cache[133] = _createElementVNode("span", null, "最后更新", -1)), + _cache[131] || (_cache[131] = _createElementVNode("span", null, "最后更新", -1)), _createElementVNode("span", null, _toDisplayString(lastUpdated.value), 1) ]) ]) @@ -6297,7 +6300,7 @@ return (_ctx, _cache) => { default: _withCtx(() => [ _createVNode(_component_v_card_title, { class: "d-flex justify-space-between align-center" }, { default: _withCtx(() => [ - _cache[135] || (_cache[135] = _createElementVNode("span", { class: "text-h6 font-weight-medium" }, "订阅链接", -1)), + _cache[133] || (_cache[133] = _createElementVNode("span", { class: "text-h6 font-weight-medium" }, "订阅链接", -1)), _createVNode(_component_v_tooltip, { location: "top", text: "复制链接" @@ -6313,7 +6316,7 @@ return (_ctx, _cache) => { }), { default: _withCtx(() => [ _createVNode(_component_v_icon, null, { - default: _withCtx(() => _cache[134] || (_cache[134] = [ + default: _withCtx(() => _cache[132] || (_cache[132] = [ _createTextVNode("mdi-content-copy") ])), _: 1 @@ -6337,12 +6340,12 @@ return (_ctx, _cache) => { color: "grey", class: "mr-2" }, { - default: _withCtx(() => _cache[136] || (_cache[136] = [ + default: _withCtx(() => _cache[134] || (_cache[134] = [ _createTextVNode("mdi-link") ])), _: 1 }), - _cache[137] || (_cache[137] = _createElementVNode("span", { class: "text-grey-darken-1" }, "原始链接:", -1)) + _cache[135] || (_cache[135] = _createElementVNode("span", { class: "text-grey-darken-1" }, "原始链接:", -1)) ]), _createElementVNode("div", _hoisted_49, [ (Object.keys(subscriptionsInfo.value).length > 0) @@ -6363,7 +6366,7 @@ return (_ctx, _cache) => { ]), _createElementVNode("div", _hoisted_51, [ _createVNode(_component_v_icon, { color: "blue" }, { - default: _withCtx(() => _cache[138] || (_cache[138] = [ + default: _withCtx(() => _cache[136] || (_cache[136] = [ _createTextVNode("mdi-arrow-down-bold") ])), _: 1 @@ -6374,12 +6377,12 @@ return (_ctx, _cache) => { color: "primary", class: "mr-2" }, { - default: _withCtx(() => _cache[139] || (_cache[139] = [ + default: _withCtx(() => _cache[137] || (_cache[137] = [ _createTextVNode("mdi-link-variant") ])), _: 1 }), - _cache[140] || (_cache[140] = _createElementVNode("span", { class: "text-grey-darken-1" }, "生成链接:", -1)) + _cache[138] || (_cache[138] = _createElementVNode("span", { class: "text-grey-darken-1" }, "生成链接:", -1)) ]), _createElementVNode("div", _hoisted_53, [ _createElementVNode("a", { @@ -6413,12 +6416,12 @@ return (_ctx, _cache) => { _createVNode(_component_v_expansion_panel_title, null, { default: _withCtx(() => [ _createVNode(_component_v_icon, { left: "" }, { - default: _withCtx(() => _cache[141] || (_cache[141] = [ + default: _withCtx(() => _cache[139] || (_cache[139] = [ _createTextVNode("mdi-cloud-download") ])), _: 1 }), - _cache[142] || (_cache[142] = _createElementVNode("span", { class: "text-subtitle-1 font-weight-medium" }, "订阅管理", -1)) + _cache[140] || (_cache[140] = _createElementVNode("span", { class: "text-subtitle-1 font-weight-medium" }, "订阅管理", -1)) ]), _: 1 }), @@ -6431,7 +6434,7 @@ return (_ctx, _cache) => { variant: "tonal", class: "mb-4" }, { - default: _withCtx(() => _cache[143] || (_cache[143] = [ + default: _withCtx(() => _cache[141] || (_cache[141] = [ _createTextVNode(" 暂无订阅信息,请先添加订阅链接 ") ])), _: 1 @@ -6517,11 +6520,11 @@ return (_ctx, _cache) => { : _createCommentVNode("", true) ]), _createElementVNode("div", _hoisted_57, [ - _cache[144] || (_cache[144] = _createElementVNode("span", null, "已用流量:", -1)), + _cache[142] || (_cache[142] = _createElementVNode("span", null, "已用流量:", -1)), _createElementVNode("strong", null, _toDisplayString(formatBytes(info.download + info.upload)), 1) ]), _createElementVNode("div", _hoisted_58, [ - _cache[145] || (_cache[145] = _createElementVNode("span", null, "剩余流量:", -1)), + _cache[143] || (_cache[143] = _createElementVNode("span", null, "剩余流量:", -1)), _createElementVNode("strong", null, _toDisplayString(formatBytes(info.total - info.download)), 1) ]), _createVNode(_component_v_progress_linear, { @@ -6550,12 +6553,12 @@ return (_ctx, _cache) => { }, { default: _withCtx(() => [ _createVNode(_component_v_icon, { left: "" }, { - default: _withCtx(() => _cache[146] || (_cache[146] = [ + default: _withCtx(() => _cache[144] || (_cache[144] = [ _createTextVNode("mdi-cloud-sync") ])), _: 1 }), - _cache[147] || (_cache[147] = _createTextVNode(" 更新订阅 ")) + _cache[145] || (_cache[145] = _createTextVNode(" 更新订阅 ")) ]), _: 2 }, 1032, ["onClick", "loading"]) @@ -6589,12 +6592,12 @@ return (_ctx, _cache) => { }, { default: _withCtx(() => [ _createVNode(_component_v_icon, { left: "" }, { - default: _withCtx(() => _cache[148] || (_cache[148] = [ + default: _withCtx(() => _cache[146] || (_cache[146] = [ _createTextVNode("mdi-refresh") ])), _: 1 }), - _cache[149] || (_cache[149] = _createTextVNode(" 刷新数据 ")) + _cache[147] || (_cache[147] = _createTextVNode(" 刷新数据 ")) ]), _: 1 }, 8, ["loading"]), @@ -6605,12 +6608,12 @@ return (_ctx, _cache) => { }, { default: _withCtx(() => [ _createVNode(_component_v_icon, { left: "" }, { - default: _withCtx(() => _cache[150] || (_cache[150] = [ + default: _withCtx(() => _cache[148] || (_cache[148] = [ _createTextVNode("mdi-cog") ])), _: 1 }), - _cache[151] || (_cache[151] = _createTextVNode(" 配置 ")) + _cache[149] || (_cache[149] = _createTextVNode(" 配置 ")) ]), _: 1 }) @@ -6765,7 +6768,7 @@ return (_ctx, _cache) => { color: "secondary", onClick: closeRuleDialog }, { - default: _withCtx(() => _cache[152] || (_cache[152] = [ + default: _withCtx(() => _cache[150] || (_cache[150] = [ _createTextVNode("取消") ])), _: 1 @@ -6774,7 +6777,7 @@ return (_ctx, _cache) => { color: "primary", type: "submit" }, { - default: _withCtx(() => _cache[153] || (_cache[153] = [ + default: _withCtx(() => _cache[151] || (_cache[151] = [ _createTextVNode("保存") ])), _: 1 @@ -6990,7 +6993,7 @@ return (_ctx, _cache) => { }, { "prepend-inner": _withCtx(() => [ _createVNode(_component_v_icon, { color: "warning" }, { - default: _withCtx(() => _cache[154] || (_cache[154] = [ + default: _withCtx(() => _cache[152] || (_cache[152] = [ _createTextVNode("mdi-timer") ])), _: 1 @@ -7020,7 +7023,7 @@ return (_ctx, _cache) => { }, { "prepend-inner": _withCtx(() => [ _createVNode(_component_v_icon, { color: "warning" }, { - default: _withCtx(() => _cache[155] || (_cache[155] = [ + default: _withCtx(() => _cache[153] || (_cache[153] = [ _createTextVNode("mdi-timer") ])), _: 1 @@ -7152,7 +7155,7 @@ return (_ctx, _cache) => { class: "mb-6", variant: "tonal" }, { - default: _withCtx(() => _cache[156] || (_cache[156] = [ + default: _withCtx(() => _cache[154] || (_cache[154] = [ _createTextVNode(" 参考"), _createElementVNode("a", { href: "https://wiki.metacubex.one/config/proxy-groups/", @@ -7168,7 +7171,7 @@ return (_ctx, _cache) => { color: "secondary", onClick: _cache[55] || (_cache[55] = $event => (proxyGroupDialog.value = false)) }, { - default: _withCtx(() => _cache[157] || (_cache[157] = [ + default: _withCtx(() => _cache[155] || (_cache[155] = [ _createTextVNode("取消") ])), _: 1 @@ -7177,7 +7180,7 @@ return (_ctx, _cache) => { color: "primary", type: "submit" }, { - default: _withCtx(() => _cache[158] || (_cache[158] = [ + default: _withCtx(() => _cache[156] || (_cache[156] = [ _createTextVNode("保存") ])), _: 1 @@ -7203,7 +7206,7 @@ return (_ctx, _cache) => { _createVNode(_component_v_card, null, { default: _withCtx(() => [ _createVNode(_component_v_card_title, { class: "headline" }, { - default: _withCtx(() => _cache[159] || (_cache[159] = [ + default: _withCtx(() => _cache[157] || (_cache[157] = [ _createTextVNode("YAML 配置") ])), _: 1 @@ -7221,7 +7224,7 @@ return (_ctx, _cache) => { color: "primary", onClick: _cache[57] || (_cache[57] = $event => (copyToClipboard(displayedYaml.value))) }, { - default: _withCtx(() => _cache[160] || (_cache[160] = [ + default: _withCtx(() => _cache[158] || (_cache[158] = [ _createTextVNode("复制") ])), _: 1 @@ -7230,7 +7233,7 @@ return (_ctx, _cache) => { color: "primary", onClick: _cache[58] || (_cache[58] = $event => (yamlDialog.value = false)) }, { - default: _withCtx(() => _cache[161] || (_cache[161] = [ + default: _withCtx(() => _cache[159] || (_cache[159] = [ _createTextVNode("关闭") ])), _: 1 @@ -7253,7 +7256,7 @@ return (_ctx, _cache) => { _createVNode(_component_v_card, null, { default: _withCtx(() => [ _createVNode(_component_v_card_title, null, { - default: _withCtx(() => _cache[162] || (_cache[162] = [ + default: _withCtx(() => _cache[160] || (_cache[160] = [ _createTextVNode("导入规则") ])), _: 1 @@ -7286,7 +7289,7 @@ return (_ctx, _cache) => { class: "mb-4", variant: "tonal" }, { - default: _withCtx(() => _cache[163] || (_cache[163] = [ + default: _withCtx(() => _cache[161] || (_cache[161] = [ _createTextVNode(" 请输入 Clash 规则中的 "), _createElementVNode("strong", null, "rules", -1), _createTextVNode(" 字段,例如:"), @@ -7309,7 +7312,7 @@ return (_ctx, _cache) => { color: "secondary", onClick: _cache[62] || (_cache[62] = $event => (importRuleDialog.value = false, error.value=null)) }, { - default: _withCtx(() => _cache[164] || (_cache[164] = [ + default: _withCtx(() => _cache[162] || (_cache[162] = [ _createTextVNode("取消") ])), _: 1 @@ -7318,7 +7321,7 @@ return (_ctx, _cache) => { color: "primary", onClick: importRule }, { - default: _withCtx(() => _cache[165] || (_cache[165] = [ + default: _withCtx(() => _cache[163] || (_cache[163] = [ _createTextVNode("导入") ])), _: 1 @@ -7341,7 +7344,7 @@ return (_ctx, _cache) => { _createVNode(_component_v_card, null, { default: _withCtx(() => [ _createVNode(_component_v_card_title, null, { - default: _withCtx(() => _cache[166] || (_cache[166] = [ + default: _withCtx(() => _cache[164] || (_cache[164] = [ _createTextVNode("导入节点") ])), _: 1 @@ -7375,7 +7378,7 @@ return (_ctx, _cache) => { class: "mb-4", variant: "tonal" }, { - default: _withCtx(() => _cache[167] || (_cache[167] = [ + default: _withCtx(() => _cache[165] || (_cache[165] = [ _createTextVNode(" 请输入 Clash 规则中的 "), _createElementVNode("strong", null, "proxies", -1), _createTextVNode(" 字段,例如:"), @@ -7397,7 +7400,7 @@ return (_ctx, _cache) => { class: "mb-4", variant: "tonal" }, { - default: _withCtx(() => _cache[168] || (_cache[168] = [ + default: _withCtx(() => _cache[166] || (_cache[166] = [ _createTextVNode(" 请输入 V2Ray 格式的节点链接,例如:"), _createElementVNode("br", null, null, -1), _createElementVNode("code", null, "vmess://xxxx", -1), @@ -7417,20 +7420,21 @@ return (_ctx, _cache) => { color: "secondary", onClick: _cache[66] || (_cache[66] = $event => (importExtraProxiesDialog.value=false, error.value=null)) }, { - default: _withCtx(() => _cache[169] || (_cache[169] = [ + default: _withCtx(() => _cache[167] || (_cache[167] = [ _createTextVNode("取消") ])), _: 1 }), _createVNode(_component_v_btn, { color: "primary", - onClick: importExtraProxiesFun + onClick: importExtraProxiesFun, + loading: importProxiesLoading.value }, { - default: _withCtx(() => _cache[170] || (_cache[170] = [ - _createTextVNode("导入") + default: _withCtx(() => _cache[168] || (_cache[168] = [ + _createTextVNode(" 导入 ") ])), _: 1 - }) + }, 8, ["loading"]) ]), _: 1 }) @@ -7583,7 +7587,7 @@ return (_ctx, _cache) => { color: "secondary", onClick: _cache[77] || (_cache[77] = $event => (ruleProviderDialog.value = false, error.value=null)) }, { - default: _withCtx(() => _cache[171] || (_cache[171] = [ + default: _withCtx(() => _cache[169] || (_cache[169] = [ _createTextVNode("取消") ])), _: 1 @@ -7592,7 +7596,7 @@ return (_ctx, _cache) => { color: "primary", type: "submit" }, { - default: _withCtx(() => _cache[172] || (_cache[172] = [ + default: _withCtx(() => _cache[170] || (_cache[170] = [ _createTextVNode("保存") ])), _: 1 @@ -7614,6 +7618,6 @@ return (_ctx, _cache) => { } }; -const PageComponent = /*#__PURE__*/_export_sfc(_sfc_main, [['__scopeId',"data-v-77adff9b"]]); +const PageComponent = /*#__PURE__*/_export_sfc(_sfc_main, [['__scopeId',"data-v-4a22a0ac"]]); export { PageComponent as default }; diff --git a/plugins.v2/clashruleprovider/dist/assets/__federation_expose_Page-BYw_2U8w.css b/plugins.v2/clashruleprovider/dist/assets/__federation_expose_Page-DKIzYtCl.css similarity index 68% rename from plugins.v2/clashruleprovider/dist/assets/__federation_expose_Page-BYw_2U8w.css rename to plugins.v2/clashruleprovider/dist/assets/__federation_expose_Page-DKIzYtCl.css index 431b55e..5bfe312 100644 --- a/plugins.v2/clashruleprovider/dist/assets/__federation_expose_Page-BYw_2U8w.css +++ b/plugins.v2/clashruleprovider/dist/assets/__federation_expose_Page-DKIzYtCl.css @@ -1,13 +1,13 @@ -.plugin-page[data-v-77adff9b] { +.plugin-page[data-v-4a22a0ac] { margin: 0 auto; } /* 使卡片等宽并适应移动端 */ -.d-flex.flex-wrap[data-v-77adff9b] { +.d-flex.flex-wrap[data-v-4a22a0ac] { gap: 16px; } -.url-display[data-v-77adff9b] { +.url-display[data-v-4a22a0ac] { word-break: break-all; padding: 8px; background: rgba(0, 0, 0, 0.05); @@ -16,19 +16,19 @@ /* 移动端堆叠布局 */ @media (max-width: 768px) { -.d-flex.flex-wrap[data-v-77adff9b] { +.d-flex.flex-wrap[data-v-4a22a0ac] { flex-direction: column; } } /* Add visual distinction between sections */ -.ruleset-section[data-v-77adff9b] { +.ruleset-section[data-v-4a22a0ac] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 16px; background-color: #f5f5f5; } -.top-section[data-v-77adff9b] { +.top-section[data-v-4a22a0ac] { border: 1px solid #e0e0e0; border-radius: 4px; padding: 16px; @@ -36,15 +36,15 @@ } /* Optional: Add different border colors to further distinguish */ -.ruleset-section[data-v-77adff9b] { +.ruleset-section[data-v-4a22a0ac] { border-left: 4px solid #2196F3; /* Blue accent */ } -.top-section[data-v-77adff9b] { +.top-section[data-v-4a22a0ac] { border-left: 4px solid #4CAF50; /* Green accent */ } -.drag-handle[data-v-77adff9b] { +.drag-handle[data-v-4a22a0ac] { cursor: move; } -.gap-2[data-v-77adff9b] { +.gap-2[data-v-4a22a0ac] { gap: 8px; } diff --git a/plugins.v2/imdbsource/__init__.py b/plugins.v2/imdbsource/__init__.py index 297b4cd..db7674c 100644 --- a/plugins.v2/imdbsource/__init__.py +++ b/plugins.v2/imdbsource/__init__.py @@ -159,7 +159,7 @@ class ImdbSource(_PluginBase): for entry in entries: cast = [name for related in entry.get('relatedconst', []) for name in names if name.get('id') == related] mtype, year, plot = year_and_type(entry) - mp_url = f"/media?mediaid=imdb:{entry.get('ttconst')}&title='{entry.get('name')}'&year={year}&type={mtype.value}" + mp_url = f"/media?mediaid=imdb:{entry.get('ttconst')}&title={entry.get('name')}&year={year}&type={mtype.value}" primary_img_url = next((f"{image.get('url')}" for image in images if image.get("id") == entry.get('rmconst')), '') primary_img_url = f'{self._img_proxy_prefix}{primary_img_url}'