whistle.mock-plugins 1.4.0-beta.2 → 1.4.0-beta.3

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.
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see 807.index.js.LICENSE.txt */
2
- (self.webpackChunkwhistle_mock_plugins=self.webpackChunkwhistle_mock_plugins||[]).push([[807],{126:e=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var t=function(e){return"string"!=typeof e?"":e.replace(/<style[\s\S]*?<\/style>/gi," ").replace(/<script[\s\S]*?<\/script>/gi," ").replace(/<[^>]+>/g," ").replace(/\s+/g," ").trim().slice(0,300)},r=function(e){if(!e)return{};if("object"==n(e))return{message:t(e.message||e.error||e.detail),conflict:e.conflict||null};if("string"!=typeof e)return{};var o=e.trim();if(!o)return{};try{return r(JSON.parse(o))}catch(e){return{message:t(o),conflict:null}}};e.exports={getApiError:function(e,n){var o=t(n)||"WebDAV 操作失败",a=e&&e.response,i=r(a&&a.data);if(i.message)return i;var c=a&&a.status;if(c){var l=t(a.statusText);return{message:"".concat(o,"(HTTP ").concat(c).concat(l?" ".concat(l):"",")"),conflict:i.conflict||null}}if(e&&"ECONNABORTED"==e.code)return{message:"".concat(o,":请求超时,请检查 WebDAV 地址和网络"),conflict:null};var s=t(e&&e.message);return s&&"Network Error"!=s?{message:s,conflict:null}:{message:"".concat(o,":网络请求失败,请检查 Whistle 服务日志"),conflict:null}},normalizeMessage:t,parseResponseData:r}},807:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>Hr});var r=t(6540),o=t(4625),a=t(4180),i=(t(6940),t(5072)),c=t.n(i),l=t(7825),s=t.n(l),u=t(7659),d=t.n(u),p=t(5056),f=t.n(p),m=t(540),h=t.n(m),b=t(1113),y=t.n(b),g=t(9604),v={};v.styleTagTransform=y(),v.setAttributes=f(),v.insert=d().bind(null,"head"),v.domAPI=s(),v.insertStyleElement=h(),c()(g.A,v),g.A&&g.A.locals&&g.A.locals;var x=t(2497),w={};w.styleTagTransform=y(),w.setAttributes=f(),w.insert=d().bind(null,"head"),w.domAPI=s(),w.insertStyleElement=h(),c()(x.A,w),x.A&&x.A.locals&&x.A.locals;var E=t(5448),k=t(5131),A=t(867),S=t(2941),L=t(2702),I=t(4825),O=t(4431),j=t(1372),C=t(3740),N=t(845),T=t(462),P=t(8602),z=t(3200),M=t(6157),_=t(1201),R=t(9222),F=t(4716),D=t(7260),U=t(5095),B=t(2545),G={};function V(e){return V="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},V(e)}function W(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||function(e,n){if(e){if("string"==typeof e)return q(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?q(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function q(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function Y(){Y=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==V(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(V(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function H(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function J(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){H(a,r,o,i,c,"next",e)}function c(e){H(a,r,o,i,c,"throw",e)}i(void 0)}))}}G.styleTagTransform=y(),G.setAttributes=f(),G.insert=d().bind(null,"head"),G.domAPI=s(),G.insertStyleElement=h(),c()(B.A,G),B.A&&B.A.locals&&B.A.locals;var K=function(){var e=J(Y().mark((function e(){var n,t;return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch("/cgi-bin/version",{headers:{"Content-Type":"application/json"}});case 2:return n=e.sent,e.next=5,n.json();case 5:if(t=e.sent,n.ok){e.next=8;break}throw new Error(t.message||"请求失败");case 8:return e.abrupt("return",t);case 9:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();const $=function(e){var n=e.visible,t=e.onCancel,o=W((0,r.useState)(""),2),a=o[0],i=o[1],c=W((0,r.useState)(!1),2),l=c[0],s=c[1],u=W((0,r.useState)(null),2),d=u[0],p=u[1];(0,r.useEffect)((function(){n&&f()}),[n]);var f=function(){var e=J(Y().mark((function e(){var n;return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s(!0),p(null),e.prev=2,e.next=5,K();case 5:0===(n=e.sent).code?i(n.data.content):p(n.message),e.next=12;break;case 9:e.prev=9,e.t0=e.catch(2),p("获取版本信息失败: ".concat(e.t0.message));case 12:return e.prev=12,s(!1),e.finish(12);case 15:case"end":return e.stop()}}),e,null,[[2,9,12,15]])})));return function(){return e.apply(this,arguments)}}();return r.createElement(R.A,{title:"版本更新记录",open:n,onCancel:t,footer:null,width:800,className:"version-modal"},r.createElement("div",{className:"version-modal-content"},l&&r.createElement("div",{className:"version-modal-loading"},r.createElement(F.A,{size:"large"}),r.createElement("p",null,"正在加载版本信息...")),d&&r.createElement(D.A,{message:"加载失败",description:d,type:"error",showIcon:!0}),!l&&!d&&a&&r.createElement("div",{className:"version-markdown-content"},r.createElement(U.$,null,a.replace(/^#\s*🔄?\s*版本更新记录\s*\n+/,"")))))};var X=t(9924),Z=t(7959),Q=[{key:"Esc",desc:"关闭弹窗/抽屉"},{key:"Ctrl + S",desc:"保存表单"},{key:"Ctrl + 1",desc:"功能模块"},{key:"Ctrl + 2",desc:"接口管理"},{key:"Ctrl + 3",desc:"系统设置"},{key:"Ctrl + 4",desc:"请求统计"},{key:"Ctrl + 5",desc:"接口嗅探"},{key:"Ctrl + Shift + N",desc:"新建接口"},{key:"Ctrl + K",desc:"聚焦搜索"},{key:"Shift + ?",desc:"快捷键帮助"}];function ee(e){return ee="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ee(e)}function ne(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function te(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?ne(Object(t),!0).forEach((function(n){re(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ne(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function re(e,n,t){return(n=function(e){var n=function(e){if("object"!=ee(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=ee(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ee(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const oe=function(e){var n=e.visible,t=e.onClose,o=Q,a=[{title:"快捷键",dataIndex:"key",key:"key",width:180,render:function(e){return r.createElement("kbd",{style:{display:"inline-block",padding:"4px 8px",fontSize:"12px",fontFamily:"monospace",lineHeight:1,color:"#333",background:"#f5f5f5",border:"1px solid #d9d9d9",borderRadius:"4px",boxShadow:"0 1px 0 rgba(0,0,0,0.1)"}},e)}},{title:"功能",dataIndex:"desc",key:"desc"}];return r.createElement(R.A,{title:"⌨️ 键盘快捷键",open:n,onCancel:t,footer:null,width:480},r.createElement(X.A,{dataSource:o.map((function(e,n){return te(te({},e),{},{id:n})})),columns:a,rowKey:"id",pagination:!1,size:"small",showHeader:!1}))};var ae=t(2689),ie={};function ce(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||function(e,n){if(e){if("string"==typeof e)return le(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?le(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function le(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}ie.styleTagTransform=y(),ie.setAttributes=f(),ie.insert=d().bind(null,"head"),ie.domAPI=s(),ie.insertStyleElement=h(),c()(ae.A,ie),ae.A&&ae.A.locals&&ae.A.locals;var se=E.A.Header,ue=E.A.Content,de=E.A.Sider,pe=["light","cyber","earth"];const fe=function(e){var n,t,i=e.children,c=(0,a.zy)().pathname,l=ce((0,r.useState)(!1),2),s=l[0],u=l[1],d=ce((0,r.useState)(!1),2),p=d[0],f=d[1],m=ce((0,r.useState)(!1),2),h=m[0],b=m[1];n=(0,a.W6)(),t=(0,r.useCallback)((function(e){var t,r,o=navigator.platform.toUpperCase().indexOf("MAC")>=0?e.metaKey:e.ctrlKey,a=null===(t=e.target)||void 0===t||null===(t=t.tagName)||void 0===t?void 0:t.toLowerCase(),i="input"===a||"textarea"===a||(null===(r=e.target)||void 0===r?void 0:r.isContentEditable);if(e.shiftKey&&"?"===e.key&&!i)return e.preventDefault(),void window.dispatchEvent(new CustomEvent("keyboard-shortcuts-help"));if("Escape"!==e.key){if(o&&!e.shiftKey&&/^[1-5]$/.test(e.key)){e.preventDefault();var c=parseInt(e.key,10)-1;return n.push(["/","/interface","/settings","/stats","/sniffer"][c]),void Z.Ay.success("已切换到".concat(["功能模块","接口管理","系统设置","请求统计","接口嗅探"][c]))}return o&&"s"===e.key.toLowerCase()&&!e.shiftKey?(e.preventDefault(),void window.dispatchEvent(new CustomEvent("shortcut-save"))):o&&e.shiftKey&&"n"===e.key.toLowerCase()?(e.preventDefault(),void window.dispatchEvent(new CustomEvent("shortcut-new-interface"))):o&&"k"===e.key.toLowerCase()&&!e.shiftKey?(e.preventDefault(),void window.dispatchEvent(new CustomEvent("shortcut-focus-search"))):void 0}window.dispatchEvent(new CustomEvent("shortcut-esc"))}),[n]),(0,r.useEffect)((function(){return document.addEventListener("keydown",t),function(){return document.removeEventListener("keydown",t)}}),[t]),(0,r.useEffect)((function(){var e=function(){return b(!0)};return window.addEventListener("keyboard-shortcuts-help",e),function(){return window.removeEventListener("keyboard-shortcuts-help",e)}}),[]);var y=ce((0,r.useState)((function(){var e=localStorage.getItem("theme");if(e&&pe.includes(e))return e;var n=localStorage.getItem("cyberTheme");return"false"===n?"light":"true"===n?"cyber":"light"})),2),g=y[0],v=y[1];(0,r.useEffect)((function(){document.body.classList.remove("cyber-theme","earth-theme"),"light"!==g&&document.body.classList.add("".concat(g,"-theme"))}),[g]),(0,r.useEffect)((function(){var e=function(){var e=localStorage.getItem("theme");if(e&&pe.includes(e))v(e);else{var n=localStorage.getItem("cyberTheme");v("false"===n?"light":"cyber")}};return window.addEventListener("storage",e),function(){return window.removeEventListener("storage",e)}}),[]);var x=(0,r.useMemo)((function(){return{token:{colorPrimary:"#00f0ff",colorPrimaryHover:"#33f3ff",colorPrimaryActive:"#00c2cc",colorSuccess:"#00ff41",colorWarning:"#f0e800",colorError:"#ff4d4f",colorInfo:"#00f0ff",colorText:"#e0e0e0",colorTextSecondary:"#a0a0a0",colorTextTertiary:"#6b7280",colorBorder:"#1a1a2e",colorBorderSecondary:"#1a1a2e",colorBgBase:"#050508",colorBgContainer:"#0f0f1a",colorBgElevated:"#141420",colorBgLayout:"#0a0a12",colorBgSpotlight:"#141420",borderRadius:6,borderRadiusSM:4,borderRadiusLG:8,wireframe:!1,fontFamily:"'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",fontFamilyCode:"'Share Tech Mono', 'SFMono-Regular', Consolas, monospace"},algorithm:k.A.darkAlgorithm}}),[]),w=(0,r.useMemo)((function(){return{token:{colorPrimary:"#b87333",colorPrimaryHover:"#c9894d",colorPrimaryActive:"#9a5f2a",colorSuccess:"#6b8e23",colorWarning:"#d4a017",colorError:"#c0392b",colorInfo:"#8d6e63",colorText:"#3d3630",colorTextSecondary:"#6d6459",colorTextTertiary:"#9e9488",colorBorder:"#e0d8cf",colorBorderSecondary:"#d5cdc2",colorBgBase:"#faf6f0",colorBgContainer:"#fdfcfa",colorBgElevated:"#f5f0e8",colorBgLayout:"#f0ebe3",colorBgSpotlight:"#f5f0e8",borderRadius:6,borderRadiusSM:4,borderRadiusLG:8,wireframe:!1,fontFamily:"'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",fontFamilyCode:"'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace"},algorithm:k.A.defaultAlgorithm}}),[]),R=(0,r.useMemo)((function(){return{token:{borderRadius:6,borderRadiusSM:4,borderRadiusLG:8},algorithm:k.A.defaultAlgorithm}}),[]),F=(0,r.useMemo)((function(){return"cyber"===g?x:"earth"===g?w:R}),[g,x,w,R]),D=(0,r.useMemo)((function(){switch(g){case"cyber":return{headerBg:"#0f0f1a",headerBorder:"#1a1a2e",logoIcon:"#00ff41",logoGradient:"linear-gradient(135deg, #00f0ff, #00ff41)",versionColor:"#6b7280",siderBg:"#0f0f1a",wrapperBg:"#0a0a12",breadcrumbLink:"#a0a0a0",breadcrumbCurrent:"#e0e0e0",titleColor:"#e0e0e0",titleFont:"'Orbitron', sans-serif",titleLetterSpacing:"0.5px",contentBg:"#0f0f1a",contentBorder:"#1a1a2e"};case"earth":return{headerBg:"#fdfcfa",headerBorder:"#e0d8cf",logoIcon:"#b87333",logoGradient:"linear-gradient(135deg, #b87333, #d4a017)",versionColor:"#6d6459",siderBg:"#f5f0e8",wrapperBg:"#f0ebe3",breadcrumbLink:"#6d6459",breadcrumbCurrent:"#3d3630",titleColor:"#3d3630",titleFont:void 0,titleLetterSpacing:void 0,contentBg:"#fdfcfa",contentBorder:"#e0d8cf"};default:return{headerBg:"#ffffff",headerBorder:"#f0f0f0",logoIcon:"#52c41a",logoGradient:"linear-gradient(135deg, #1890ff, #52c41a)",versionColor:"#000000d9",siderBg:"#ffffff",wrapperBg:"#f5f5f5",breadcrumbLink:"#000000d9",breadcrumbCurrent:"#000000d9",titleColor:"#000000d9",titleFont:void 0,titleLetterSpacing:void 0,contentBg:"#ffffff",contentBorder:"#f0f0f0"}}}),[g]),U=[{key:"1",icon:r.createElement(j.A,null),label:r.createElement(o.N_,{to:"/"},"功能模块")},{key:"2",icon:r.createElement(C.A,null),label:r.createElement(o.N_,{to:"/interface"},"接口管理")},{key:"4",icon:r.createElement(N.A,null),label:r.createElement(o.N_,{to:"/stats"},"请求统计")},{key:"5",icon:r.createElement(T.A,null),label:r.createElement(o.N_,{to:"/sniffer"},"接口嗅探")},{key:"3",icon:r.createElement(P.A,null),label:r.createElement(o.N_,{to:"/settings"},"系统设置")}],B=function(){var e=[{path:"/",title:"首页"}];return c.startsWith("/interface")?(e.push({path:"/interface",title:"接口管理"}),c.includes("/interface/")&&"/interface/"!==c&&e.push({path:c,title:"功能接口详情"})):"/stats"===c?e.push({path:"/stats",title:"请求统计"}):"/sniffer"===c?e.push({path:"/sniffer",title:"接口嗅探"}):"/settings"===c&&e.push({path:"/settings",title:"系统设置"}),e}();return r.createElement(A.Ay,{theme:F},r.createElement(E.A,{className:"app-layout"},r.createElement(se,{className:"app-header",style:{background:D.headerBg,borderBottom:"1px solid ".concat(D.headerBorder)}},r.createElement("div",{className:"header-left"},r.createElement("div",{className:"logo-container"},r.createElement("div",{className:"logo-icon-group"},r.createElement(z.A,{className:"logo-icon logo-icon-secondary",style:{color:D.logoIcon}})),r.createElement("div",{className:"logo-text",style:{background:D.logoGradient,WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"}},"MockMaster")),r.createElement(S.Ay,{type:"text",icon:s?r.createElement(M.A,null):r.createElement(_.A,null),onClick:function(){return u(!s)},className:"collapse-button"})),r.createElement("div",{className:"header-right"},r.createElement(L.A,null,r.createElement(S.Ay,{type:"text",size:"small",className:"version-button",onClick:function(){return f(!0)}},r.createElement("span",{style:{color:D.versionColor,fontFamily:"'Share Tech Mono', monospace"}},"v","1.4.0-beta.2"))))),r.createElement(E.A,null,r.createElement(de,{width:220,className:"app-sider",collapsed:s,collapsible:!0,trigger:null,style:{background:D.siderBg}},r.createElement(I.A,{mode:"inline",selectedKeys:"/"===c||"#/"===c?["1"]:c.startsWith("/interface")||c.includes("/interface")?["2"]:"/stats"===c||c.includes("/stats")?["4"]:"/sniffer"===c||c.includes("/sniffer")?["5"]:"/settings"===c||c.includes("/settings")?["3"]:[],items:U,style:{height:"100%",borderRight:0,padding:"8px",background:D.siderBg}})),r.createElement(E.A,{className:"app-content-wrapper",style:{padding:0,background:D.wrapperBg}},r.createElement("div",{style:{padding:"16px 24px 0"}},r.createElement(O.A,{className:"app-breadcrumb",style:{marginBottom:16}},B.map((function(e,n){return r.createElement(O.A.Item,{key:n},n<B.length-1?r.createElement(o.N_,{to:e.path,style:{color:D.breadcrumbLink}},e.title):r.createElement("span",{style:{color:D.breadcrumbCurrent,fontWeight:500}},e.title))}))),r.createElement("h1",{style:{margin:0,fontSize:22,fontWeight:700,color:D.titleColor,fontFamily:D.titleFont,letterSpacing:D.titleLetterSpacing}},"/"===c||"#/"===c?"功能模块管理":c.startsWith("/interface")?"接口配置管理":"/stats"===c?"请求统计":"/sniffer"===c?"接口嗅探":"/settings"===c?"系统设置":"Whistle Mock Plugin")),r.createElement(ue,{className:"app-content",style:{background:D.contentBg,padding:24,borderRadius:6,minHeight:280,margin:"16px 24px 24px",border:"1px solid ".concat(D.contentBorder)}},i))),r.createElement($,{visible:p,onCancel:function(){return f(!1)}}),r.createElement(oe,{visible:h,onClose:function(){return b(!1)}})))};var me=t(1847),he=t(677),be=t(1196),ye=t(7308),ge=t(5895),ve=t(6914),xe=t(9957),we=t(5957),Ee=t(6044),ke=t(138),Ae=t(385),Se=t(7025),Le=t(1617),Ie=t(7028),Oe=t(756),je=t(581),Ce=t(1083),Ne=t(9660),Te={};function Pe(e){return Pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pe(e)}function ze(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function Me(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?ze(Object(t),!0).forEach((function(n){_e(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ze(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function _e(e,n,t){return(n=function(e){var n=function(e){if("object"!=Pe(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=Pe(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Pe(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Re(){Re=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==Pe(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(Pe(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function Fe(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function De(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){Fe(a,r,o,i,c,"next",e)}function c(e){Fe(a,r,o,i,c,"throw",e)}i(void 0)}))}}function Ue(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||function(e,n){if(e){if("string"==typeof e)return Be(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Be(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Be(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}Te.styleTagTransform=y(),Te.setAttributes=f(),Te.insert=d().bind(null,"head"),Te.domAPI=s(),Te.insertStyleElement=h(),c()(Ne.A,Te),Ne.A&&Ne.A.locals&&Ne.A.locals;var Ge=t(126).getApiError,Ve=me.A.Paragraph,We=me.A.Text,qe=me.A.Title,Ye=function(e){var n=e.title,t=e.eyebrow,o=e.modules,a=e.selectedIds,i=e.onChange,c=e.emptyText,l=e.action,s=e.actionIcon,u=e.actionClassName,d=e.actionLoading,p=e.disabled,f=e.onAction,m=e.extra,h=o.map((function(e){return e.id})),b=h.filter((function(e){return a.includes(e)})).length,y=o.length>0&&b==o.length,g=b>0&&!y;return r.createElement(he.A,{className:"webdav-sync-module-card",bordered:!1},r.createElement("div",{className:"webdav-sync-module-header"},r.createElement("div",null,r.createElement(We,{type:"secondary",className:"webdav-sync-module-eyebrow"},t),r.createElement(qe,{level:5},n)),m),r.createElement("div",{className:"webdav-sync-select-all"},r.createElement(be.A,{checked:y,indeterminate:g,disabled:!o.length||p,onChange:function(e){return i(e.target.checked?h:[])}},"全选"),r.createElement(We,{type:"secondary"},"已选择 ",b," / ",o.length)),r.createElement("div",{className:"webdav-sync-module-list"},o.length?r.createElement(be.A.Group,{value:a,onChange:i,disabled:p},o.map((function(e){return r.createElement(be.A,{key:e.id,value:e.id,className:"webdav-sync-module-option"},r.createElement("span",{className:"webdav-sync-module-name"},e.name),r.createElement("span",{className:"webdav-sync-module-count"},e.interfaceCount||0," 个接口"))}))):r.createElement(ye.A,{image:ye.A.PRESENTED_IMAGE_SIMPLE,description:c})),r.createElement(S.Ay,{block:!0,type:"primary",className:u,icon:s,loading:d,disabled:p||!b,onClick:f},l,"(",b,")"))};const He=function(e){var n=e.open,t=e.onClose,o=e.onPulled,a=Ue(ge.A.useForm(),1)[0],i=Ue((0,r.useState)(null),2),c=i[0],l=i[1],s=Ue((0,r.useState)(!1),2),u=s[0],d=s[1],p=Ue((0,r.useState)(""),2),f=p[0],m=p[1],h=Ue((0,r.useState)(""),2),b=h[0],y=h[1],g=Ue((0,r.useState)([]),2),v=g[0],x=g[1],w=Ue((0,r.useState)([]),2),E=w[0],k=w[1],A=function(e,n){var t=Ge(e,n);return y(t.message),Z.Ay.error(t.message),t},I=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};l(e),n.push&&x((e.localModules||[]).map((function(e){return e.id}))),n.pull&&k((e.remoteModules||[]).map((function(e){return e.id})))},O=function(){var e=De(Re().mark((function e(){var n,t,r;return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return d(!0),y(""),e.prev=2,e.next=5,Ce.A.get("/cgi-bin/webdav");case 5:if(n=e.sent,t=n.data.data,I(t,{push:!0,pull:!0}),a.setFieldsValue({endpoint:t.endpoint,username:t.username,password:""}),!t.configured){e.next=20;break}return e.prev=10,e.next=13,Ce.A.post("/cgi-bin/webdav",{action:"refresh"});case 13:r=e.sent,I(r.data.data,{pull:!0}),e.next=20;break;case 17:e.prev=17,e.t0=e.catch(10),A(e.t0,"连接配置已读取,但刷新远端模块失败");case 20:e.next=25;break;case 22:e.prev=22,e.t1=e.catch(2),A(e.t1,"读取 WebDAV 配置失败");case 25:return e.prev=25,d(!1),e.finish(25);case 28:case"end":return e.stop()}}),e,null,[[2,22,25,28],[10,17]])})));return function(){return e.apply(this,arguments)}}();(0,r.useEffect)((function(){n&&O()}),[n]);var j,C=function(){var e=De(Re().mark((function e(n){var t,r,o,a=arguments;return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=a.length>1&&void 0!==a[1]?a[1]:{},r=a.length>2&&void 0!==a[2]?a[2]:{},e.next=4,Ce.A.post("/cgi-bin/webdav",Me({action:n},t));case 4:return(o=e.sent).data&&o.data.data&&I(o.data.data,r),e.abrupt("return",o.data);case 7:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),N=function(){var e=De(Re().mark((function e(){var n;return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,a.validateFields();case 3:n=e.sent,e.next=9;break;case 6:return e.prev=6,e.t0=e.catch(0),e.abrupt("return");case 9:return m("test"),y(""),e.prev=11,e.next=14,C("test",n);case 14:Z.Ay.success("WebDAV 连接测试成功"),e.next=20;break;case 17:e.prev=17,e.t1=e.catch(11),A(e.t1,"WebDAV 连接测试失败");case 20:return e.prev=20,m(""),e.finish(20);case 23:case"end":return e.stop()}}),e,null,[[0,6],[11,17,20,23]])})));return function(){return e.apply(this,arguments)}}(),T=function(){var e=De(Re().mark((function e(){var n,t;return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,a.validateFields();case 3:n=e.sent,e.next=9;break;case 6:return e.prev=6,e.t0=e.catch(0),e.abrupt("return");case 9:return m("connect"),y(""),e.prev=11,e.next=14,C("connect",n,{push:!0,pull:!0});case 14:return a.setFieldValue("password",""),Z.Ay.success("WebDAV 连接已保存"),e.prev=16,e.next=19,Ce.A.post("/cgi-bin/webdav",{action:"refresh"});case 19:t=e.sent,I(t.data.data,{pull:!0}),e.next=26;break;case 23:e.prev=23,e.t1=e.catch(16),A(e.t1,"连接已保存,但刷新远端模块失败");case 26:e.next=31;break;case 28:e.prev=28,e.t2=e.catch(11),A(e.t2,"保存 WebDAV 连接失败");case 31:return e.prev=31,m(""),e.finish(31);case 34:case"end":return e.stop()}}),e,null,[[0,6],[11,28,31,34],[16,23]])})));return function(){return e.apply(this,arguments)}}(),P=function(){var e=De(Re().mark((function e(){return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return m("refresh"),y(""),e.prev=2,e.next=5,C("refresh",{},{pull:!0});case 5:Z.Ay.success("远端状态已刷新"),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(2),A(e.t0,"刷新远端状态失败");case 11:return e.prev=11,m(""),e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[2,8,11,14]])})));return function(){return e.apply(this,arguments)}}(),z=function(){var e=De(Re().mark((function e(){var n,t,r,o=arguments;return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=o.length>0&&void 0!==o[0]&&o[0],(t=o.length>1&&void 0!==o[1]?o[1]:v).length){e.next=5;break}return Z.Ay.warning("请至少选择一个要推送的功能模块"),e.abrupt("return");case 5:return m("push"),y(""),e.prev=7,e.next=10,C("push",{force:n,featureIds:t},{push:!0,pull:!0});case 10:Z.Ay.success("已推送 ".concat(t.length," 个功能模块")),e.next=17;break;case 13:e.prev=13,e.t0=e.catch(7),r=Ge(e.t0,"推送失败"),e.t0.response&&409==e.t0.response.status&&"REMOTE_NEWER"==r.conflict&&!n?R.A.confirm({title:"远端模块存在差异",content:"已选择模块的远端内容与本地不同,继续推送会覆盖远端版本。确定继续吗?",okText:"继续推送",cancelText:"取消",onOk:function(){return z(!0,t)}}):e.t0.response&&409==e.t0.response.status&&"REMOTE_UNVERIFIABLE"==r.conflict&&!n?R.A.confirm({title:"远端服务不支持并发校验",content:"WebDAV 没有返回 ETag 或 Last-Modified,无法确认模块清单期间是否被其他设备修改。仍要覆盖吗?",okText:"强制推送",okType:"danger",cancelText:"取消",onOk:function(){return z(!0,t)}}):e.t0.response&&409==e.t0.response.status&&"REMOTE_INVALID"==r.conflict&&!n?R.A.confirm({title:"远端模块清单已损坏",content:"继续推送会用已选择的 ".concat(t.length," 个模块创建新清单。确定继续吗?"),okText:"推送已选模块",okType:"danger",cancelText:"取消",onOk:function(){return z(!0,t)}}):A(e.t0,"推送失败");case 17:return e.prev=17,m(""),e.finish(17);case 20:case"end":return e.stop()}}),e,null,[[7,13,17,20]])})));return function(){return e.apply(this,arguments)}}(),M=function(){var e=De(Re().mark((function e(){var n,t,r,a=arguments;return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=a.length>0&&void 0!==a[0]&&a[0],(t=a.length>1&&void 0!==a[1]?a[1]:E).length){e.next=5;break}return Z.Ay.warning("请至少选择一个要拉取的功能模块"),e.abrupt("return");case 5:return m("pull"),y(""),e.prev=7,e.next=10,C("pull",{force:n,featureIds:t},{push:!0,pull:!0});case 10:if(Z.Ay.success("已拉取 ".concat(t.length," 个功能模块")),!o){e.next=14;break}return e.next=14,o();case 14:e.next=20;break;case 16:e.prev=16,e.t0=e.catch(7),r=Ge(e.t0,"拉取失败"),e.t0.response&&409==e.t0.response.status&&"LOCAL_NEWER"==r.conflict&&!n?R.A.confirm({title:"本地模块存在差异",content:"已选择模块的本地内容与远端不同,继续拉取会覆盖其中 ".concat(t.length," 个本地模块及其接口。确定继续吗?"),okText:"覆盖本地",okType:"danger",cancelText:"取消",onOk:function(){return M(!0,t)}}):e.t0.response&&409==e.t0.response.status&&"LOCAL_CHANGED"==r.conflict?R.A.warning({title:"本地模块发生变化",content:"拉取过程中检测到本地模块被修改,本次没有覆盖任何本地数据。请检查修改后重新拉取。",okText:"知道了"}):A(e.t0,"拉取失败");case 20:return e.prev=20,m(""),e.finish(20);case 23:case"end":return e.stop()}}),e,null,[[7,16,20,23]])})));return function(){return e.apply(this,arguments)}}(),_=function(){var e=De(Re().mark((function e(){return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return m("disconnect"),y(""),e.prev=2,e.next=5,C("disconnect");case 5:Z.Ay.success("已断开 WebDAV,同步文件未删除"),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(2),A(e.t0,"断开连接失败");case 11:return e.prev=11,m(""),e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[2,8,11,14]])})));return function(){return e.apply(this,arguments)}}(),U=c&&c.configured,B=!!f;return r.createElement(R.A,{title:null,open:n,onCancel:function(){B?Z.Ay.warning("WebDAV 操作正在进行,请等待完成后再关闭"):t()},footer:null,width:1e3,maskClosable:!B,keyboard:!B,destroyOnClose:!0,className:"webdav-sync-modal",wrapClassName:"webdav-sync-modal-wrap"},r.createElement("div",{className:"webdav-sync-hero"},r.createElement("div",{className:"webdav-sync-hero-icon"},r.createElement(ke.A,null)),r.createElement("div",{className:"webdav-sync-hero-copy"},r.createElement(We,{className:"webdav-sync-kicker"},"WEBDAV SYNC"),r.createElement(qe,{level:3},"功能模块同步"),r.createElement(Ve,null,"按模块手动推送或拉取,每个模块独立压缩保存。")),r.createElement(ve.A,{color:U?"success":"default"},U?"已连接":"尚未配置")),b&&r.createElement(D.A,{className:"webdav-sync-error",type:"error",showIcon:!0,closable:!0,message:"WebDAV 操作失败",description:b,onClose:function(){return y("")}}),r.createElement(F.A,{spinning:u},U?r.createElement("div",{className:"webdav-sync-connected"},r.createElement(he.A,{className:"webdav-sync-connection-card",bordered:!1},r.createElement(we.A,{title:"连接信息",column:{xs:1,sm:2},size:"small"},r.createElement(we.A.Item,{label:"目录地址",span:2},r.createElement(We,{className:"webdav-sync-break-all",code:!0},c.endpoint)),r.createElement(we.A.Item,{label:"用户名"},c.username),r.createElement(we.A.Item,{label:"模块清单"},c.remoteFileName)),r.createElement(Ee.A,{title:"确定断开 WebDAV?",description:"只会清除本机连接信息,不会删除远端同步文件。",okText:"断开",cancelText:"取消",onConfirm:_},r.createElement(S.Ay,{type:"link",danger:!0,className:"webdav-sync-disconnect",icon:r.createElement(Le.A,null),loading:"disconnect"==f,disabled:B&&"disconnect"!=f},"断开连接"))),r.createElement("div",{className:"webdav-sync-module-grid"},r.createElement(Ye,{eyebrow:"LOCAL MODULES",title:"本地模块",modules:c.localModules||[],selectedIds:v,onChange:x,emptyText:"暂无可推送的功能模块",action:"推送已选模块",actionIcon:r.createElement(Ie.A,null),actionLoading:"push"==f,disabled:B,onAction:function(){return z(!1)}}),r.createElement(Ye,{eyebrow:"REMOTE MODULES",title:"远端模块",modules:c.remoteModules||[],selectedIds:E,onChange:k,emptyText:c.remoteFileInvalid?"远端模块清单已损坏":"远端暂无模块,请先推送或刷新",action:"拉取已选模块",actionIcon:r.createElement(Oe.A,null),actionClassName:"webdav-sync-pull-button",actionLoading:"pull"==f,disabled:B,onAction:function(){return M(!1)},extra:r.createElement(S.Ay,{shape:"circle",icon:r.createElement(je.A,null),loading:"refresh"==f,disabled:B&&"refresh"!=f,onClick:P,"aria-label":"刷新远端模块"})})),r.createElement(D.A,{className:"webdav-sync-manual-note",type:"info",showIcon:!0,message:"只同步已选择的模块",description:"远端清单更新时间:".concat((j=c.remoteUpdatedAt,j?new Date(j).toLocaleString("zh-CN",{hour12:!1}):"未获取"),"。拉取只替换同 ID 的已选模块及其接口,未选择的本地模块保持不变。")})):r.createElement("div",{className:"webdav-sync-grid"},r.createElement(he.A,{className:"webdav-sync-card",bordered:!1},r.createElement(ge.A,{form:a,layout:"vertical",requiredMark:!1},r.createElement(ge.A.Item,{name:"endpoint",label:"WebDAV 专用目录",rules:[{required:!0,message:"请输入 WebDAV 目录地址"}],extra:"只填写目录,不包含 JSON 文件名;末尾斜杠会自动补齐。"},r.createElement(xe.A,{prefix:r.createElement(Ae.A,null),placeholder:"https://webdav.example.com/webdav/whistle-mock-plugin-sync/"})),r.createElement("div",{className:"webdav-sync-form-row"},r.createElement(ge.A.Item,{name:"username",label:"用户名",rules:[{required:!0,message:"请输入 WebDAV 用户名"}]},r.createElement(xe.A,{autoComplete:"username"})),r.createElement(ge.A.Item,{name:"password",label:"密码",rules:[{required:!0,message:"请输入 WebDAV 密码"}]},r.createElement(xe.A.Password,{autoComplete:"current-password"}))),r.createElement(L.A,{className:"webdav-sync-form-actions"},r.createElement(S.Ay,{icon:r.createElement(Se.A,null),loading:"test"==f,disabled:B&&"test"!=f,onClick:N},"测试连接"),r.createElement(S.Ay,{type:"primary",icon:r.createElement(ke.A,null),loading:"connect"==f,disabled:B&&"connect"!=f,onClick:T},"保存连接")))),r.createElement(he.A,{className:"webdav-sync-note",bordered:!1},r.createElement(Se.A,{className:"webdav-sync-note-icon"}),r.createElement(qe,{level:5},"凭据只留在本机"),r.createElement(Ve,null,"账号密码保存在 Whistle 插件数据目录,页面不会读取明文密码,也不会写入远端同步文件。"),r.createElement("div",{className:"webdav-sync-file-tree"},r.createElement("div",null,"专用 WebDAV 目录"),r.createElement("div",null,"├─ ",c?c.remoteFileName:"whistle-mock-plugin-manifest.json"),r.createElement("div",null,"└─ 每个功能模块一个 .json.gz"))))))};var Je=t(6370),Ke=t(2120),$e=t(7977),Xe=t(2609),Ze=t(7152),Qe=t(5739),en=t(6729),nn=t(261),tn=t(3598),rn=t(1952),on=t(9248),an=t(6362),cn=t(9237),ln=t(3146),sn=t(4801),un=t(6704),dn=t(3014),pn={};function fn(e){return fn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},fn(e)}function mn(e,n){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!t){if(Array.isArray(e)||(t=vn(e))||n&&e&&"number"==typeof e.length){t&&(e=t);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,c=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return i=e.done,e},e:function(e){c=!0,a=e},f:function(){try{i||null==t.return||t.return()}finally{if(c)throw a}}}}function hn(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function bn(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?hn(Object(t),!0).forEach((function(n){yn(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):hn(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function yn(e,n,t){return(n=function(e){var n=function(e){if("object"!=fn(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=fn(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==fn(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function gn(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||vn(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function vn(e,n){if(e){if("string"==typeof e)return xn(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?xn(e,n):void 0}}function xn(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function wn(){wn=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==fn(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(fn(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function En(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function kn(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){En(a,r,o,i,c,"next",e)}function c(e){En(a,r,o,i,c,"throw",e)}i(void 0)}))}}pn.styleTagTransform=y(),pn.setAttributes=f(),pn.insert=d().bind(null,"head"),pn.domAPI=s(),pn.insertStyleElement=h(),c()(dn.A,pn),dn.A&&dn.A.locals&&dn.A.locals;var An=me.A.Text,Sn=me.A.Title,Ln=me.A.Paragraph,In=xe.A.TextArea,On=function(){var e=kn(wn().mark((function e(){var n;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ce.A.get("/_flush_cache");case 3:return n=e.sent,e.abrupt("return",n.data);case 7:throw e.prev=7,e.t0=e.catch(0),console.error("刷新缓存失败:",e.t0),e.t0;case 11:case"end":return e.stop()}}),e,null,[[0,7]])})));return function(){return e.apply(this,arguments)}}();const jn=function(){var e=(0,a.W6)(),n=gn((0,r.useState)([]),2),t=n[0],o=n[1],i=gn((0,r.useState)(!1),2),c=i[0],l=i[1],s=gn((0,r.useState)(null),2),u=s[0],d=s[1],p=gn((0,r.useState)(!1),2),f=p[0],m=p[1],h=gn((0,r.useState)([]),2),b=h[0],y=h[1],g=gn((0,r.useState)(!1),2),v=g[0],x=g[1],w=gn((0,r.useState)(!1),2),E=w[0],k=w[1],A=gn((0,r.useState)(!1),2),I=A[0],O=A[1],N=gn((0,r.useState)(!0),2),T=N[0],P=N[1],z=gn(ge.A.useForm(),1)[0],M=gn((0,r.useState)((function(){var e=localStorage.getItem("feature-list-config");return e?JSON.parse(e):{sortBy:"name",sortOrder:"ascend",pageSize:12,current:1,viewMode:"card"}})),2),_=M[0],D=M[1],U=function(e){var n=bn(bn({},_),e);D(n),localStorage.setItem("feature-list-config",JSON.stringify(n))};(0,r.useEffect)((function(){V(),B()}),[]);var B=function(){var e=kn(wn().mark((function e(){var n;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ce.A.get("/cgi-bin/settings");case 3:n=e.sent,k(1==n.data.webDavSyncEnabled),e.next=11;break;case 7:e.prev=7,e.t0=e.catch(0),console.error("读取 WebDAV 同步设置失败:",e.t0),k(!1);case 11:case"end":return e.stop()}}),e,null,[[0,7]])})));return function(){return e.apply(this,arguments)}}();(0,r.useEffect)((function(){var e=function(){c&&H()},n=function(){W()};return window.addEventListener("shortcut-save",e),window.addEventListener("shortcut-new-interface",n),function(){window.removeEventListener("shortcut-save",e),window.removeEventListener("shortcut-new-interface",n)}}),[c]);var G,V=function(){var e=kn(wn().mark((function e(){var n,t;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,P(!0),e.next=4,fetch("/cgi-bin/features");case 4:return n=e.sent,e.next=7,n.json();case 7:0===(t=e.sent).code?o(t.data||[]):(console.error("获取功能模块失败:",t.message),Z.Ay.error("获取功能模块失败: "+t.message)),e.next=15;break;case 11:e.prev=11,e.t0=e.catch(0),console.error("获取功能模块错误:",e.t0),Z.Ay.error("获取功能模块失败, 请检查网络连接");case 15:return e.prev=15,P(!1),e.finish(15);case 18:case"end":return e.stop()}}),e,null,[[0,11,15,18]])})));return function(){return e.apply(this,arguments)}}(),W=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;e?(d(e),z.setFieldsValue({name:e.name,description:e.description,active:!1!==e.active})):(d(null),z.resetFields(),z.setFieldsValue({active:!0})),l(!0)},q=function(){l(!1)},Y=function(){var e=kn(wn().mark((function e(){return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,On();case 3:e.next=8;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("刷新缓存失败,可能需要等待缓存自动过期:",e.t0);case 8:case"end":return e.stop()}}),e,null,[[0,5]])})));return function(){return e.apply(this,arguments)}}(),H=function(){var e=kn(wn().mark((function e(n){var t,r,o;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,t=bn({},n),u&&(t.id=u.id),P(!0),e.next=6,fetch("/cgi-bin/features",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});case 6:return r=e.sent,e.next=9,r.json();case 9:0===(o=e.sent).code?(Z.Ay.success(u?"功能模块更新成功":"功能模块创建成功"),V(),q(),Y()):Z.Ay.error("操作失败: "+o.message),e.next=17;break;case 13:e.prev=13,e.t0=e.catch(0),console.error("保存功能模块错误:",e.t0),Z.Ay.error("保存失败: "+e.t0.message);case 17:return e.prev=17,P(!1),e.finish(17);case 20:case"end":return e.stop()}}),e,null,[[0,13,17,20]])})));return function(n){return e.apply(this,arguments)}}(),J=function(){var e=kn(wn().mark((function e(n,r){var a,i;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("/cgi-bin/features?id=".concat(n),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({active:!r})});case 3:return a=e.sent,e.next=6,a.json();case 6:0===(i=e.sent).code?(Z.Ay.success("".concat(r?"禁用":"启用","功能模块成功")),o(t.map((function(e){return e.id===n?bn(bn({},e),{},{active:!r}):e}))),Y()):Z.Ay.error("".concat(r?"禁用":"启用","功能模块失败: ").concat(i.message)),e.next=14;break;case 10:e.prev=10,e.t0=e.catch(0),console.error("".concat(r?"禁用":"启用","功能模块错误:"),e.t0),Z.Ay.error("操作失败: ".concat(e.t0.message));case 14:case"end":return e.stop()}}),e,null,[[0,10]])})));return function(n,t){return e.apply(this,arguments)}}(),K=function(){var e=kn(wn().mark((function e(n){return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:R.A.confirm({title:"确定要删除此功能吗?",content:"这将删除所有相关的接口和模拟数据,此操作无法恢复。",okText:"删除",okType:"danger",cancelText:"取消",onOk:function(){var e=kn(wn().mark((function e(){var r,a;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,P(!0),e.next=4,fetch("/cgi-bin/features?id=".concat(n),{method:"DELETE"});case 4:return r=e.sent,e.next=7,r.json();case 7:0===(a=e.sent).code?(Z.Ay.success("功能模块已成功删除"),o(t.filter((function(e){return e.id!==n}))),Y()):Z.Ay.error("删除失败: "+a.message),e.next=15;break;case 11:e.prev=11,e.t0=e.catch(0),console.error("删除功能错误:",e.t0),Z.Ay.error("操作失败: "+e.t0.message);case 15:return e.prev=15,P(!1),e.finish(15);case 18:case"end":return e.stop()}}),e,null,[[0,11,15,18]])})));return function(){return e.apply(this,arguments)}}()});case 1:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),$=function(n){localStorage.setItem("selectedFeatureId",n.id),e.push("/interface/".concat(n.id))},Q=function(){var e=kn(wn().mark((function e(n){var t,r,o,a,i,c,l;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("/cgi-bin/interfaces?featureId=".concat(n.id));case 3:return t=e.sent,e.next=6,t.json();case 6:r=e.sent,o=bn(bn({},n),{},{interfaces:0===r.code?r.data:[]}),a=JSON.stringify(o,null,2),i="data:application/json;charset=utf-8,"+encodeURIComponent(a),c="whistle-mock-feature-".concat(n.id,".json"),(l=document.createElement("a")).setAttribute("href",i),l.setAttribute("download",c),l.click(),Z.Ay.success("配置导出成功"),e.next=22;break;case 18:e.prev=18,e.t0=e.catch(0),console.error("导出配置错误:",e.t0),Z.Ay.error("导出失败: "+e.t0.message);case 22:case"end":return e.stop()}}),e,null,[[0,18]])})));return function(n){return e.apply(this,arguments)}}(),ee=function(){var e=kn(wn().mark((function e(){var n,r,o,a,i,c,l,s,u,d,p,f,h;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==b.length){e.next=3;break}return Z.Ay.warning("请至少选择一个功能模块"),e.abrupt("return");case 3:e.prev=3,x(!0),n=t.filter((function(e){return b.includes(e.id)})),r=[],o=mn(n),e.prev=8,o.s();case 10:if((a=o.n()).done){e.next=21;break}return i=a.value,e.next=14,fetch("/cgi-bin/interfaces?featureId=".concat(i.id));case 14:return c=e.sent,e.next=17,c.json();case 17:l=e.sent,r.push(bn(bn({},i),{},{interfaces:0===l.code?l.data:[]}));case 19:e.next=10;break;case 21:e.next=26;break;case 23:e.prev=23,e.t0=e.catch(8),o.e(e.t0);case 26:return e.prev=26,o.f(),e.finish(26);case 29:s=1===r.length?r[0]:r,u=JSON.stringify(s,null,2),d=new Blob([u],{type:"application/json;charset=utf-8"}),p=URL.createObjectURL(d),f=1===r.length?"whistle-mock-feature-".concat(r[0].id,".json"):"whistle-mock-features-".concat(r.length,".json"),(h=document.createElement("a")).href=p,h.download=f,h.click(),URL.revokeObjectURL(p),Z.Ay.success("成功导出 ".concat(r.length," 个功能模块")),m(!1),e.next=47;break;case 43:e.prev=43,e.t1=e.catch(3),console.error("导出配置错误:",e.t1),Z.Ay.error("导出失败: "+e.t1.message);case 47:return e.prev=47,x(!1),e.finish(47);case 50:case"end":return e.stop()}}),e,null,[[3,43,47,50],[8,23,26,29]])})));return function(){return e.apply(this,arguments)}}(),ne=function(){var e=document.createElement("input");e.type="file",e.accept=".json",e.onchange=function(){var e=kn(wn().mark((function e(n){var t,r;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=n.target.files[0]){e.next=3;break}return e.abrupt("return");case 3:(r=new FileReader).onload=function(){var e=kn(wn().mark((function e(n){var t,r,o,a,i,c,l,s,u,d,p,f,m,h,b,y,g,v,x;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,t=JSON.parse(n.target.result),r=Array.isArray(t)?t:[t],o=r.filter((function(e){return e&&e.name})),0!==o.length){e.next=7;break}return Z.Ay.error("无效的配置文件: 缺少功能名称"),e.abrupt("return");case 7:Z.Ay.loading({content:"正在导入功能配置...",key:"importInfo"}),a=0,i=0,c=0,l=0,s=mn(o),e.prev=13,s.s();case 15:if((u=s.n()).done){e.next=67;break}return d=u.value,e.prev=17,p={name:d.name,description:d.description||"",active:!1!==d.active},e.next=21,fetch("/cgi-bin/features",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(p)});case 21:return f=e.sent,e.next=24,f.json();case 24:if(0!==(m=e.sent).code){e.next=57;break}if(a++,h=m.data,!(Array.isArray(d.interfaces)&&d.interfaces.length>0)){e.next=55;break}b=mn(d.interfaces),e.prev=30,b.s();case 32:if((y=b.n()).done){e.next=47;break}return g=y.value,e.prev=34,v=bn(bn({},g),{},{featureId:h.id,id:void 0}),e.next=38,fetch("/cgi-bin/interfaces",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)});case 38:c++,e.next=45;break;case 41:e.prev=41,e.t0=e.catch(34),console.error("导入接口配置失败:",e.t0),l++;case 45:e.next=32;break;case 47:e.next=52;break;case 49:e.prev=49,e.t1=e.catch(30),b.e(e.t1);case 52:return e.prev=52,b.f(),e.finish(52);case 55:e.next=59;break;case 57:i++,console.error("导入功能失败:",m.message);case 59:e.next=65;break;case 61:e.prev=61,e.t2=e.catch(17),i++,console.error("导入功能错误:",e.t2);case 65:e.next=15;break;case 67:e.next=72;break;case 69:e.prev=69,e.t3=e.catch(13),s.e(e.t3);case 72:return e.prev=72,s.f(),e.finish(72);case 75:x=c>0||l>0?",共导入 ".concat(c," 个接口").concat(l>0?"(".concat(l," 个失败)"):""):"",Z.Ay.success({content:"导入完成:成功 ".concat(a," 个功能").concat(i>0?",失败 ".concat(i," 个功能"):"").concat(x),key:"importInfo",duration:3}),V(),e.next=84;break;case 80:e.prev=80,e.t4=e.catch(0),console.error("导入配置错误:",e.t4),Z.Ay.error("导入失败: "+e.t4.message);case 84:case"end":return e.stop()}}),e,null,[[0,80],[13,69,72,75],[17,61],[30,49,52,55],[34,41]])})));return function(n){return e.apply(this,arguments)}}(),r.readAsText(t);case 6:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),e.click()},te=function(e,n){U({current:e,pageSize:n})},re=function(e){U({viewMode:e,current:1})},oe=function(){var e,n=(e=t,function(e){if(Array.isArray(e))return xn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||vn(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).sort((function(e,n){var t,r;switch(_.sortBy){case"name":return t=e.name||"",r=n.name||"","ascend"===_.sortOrder?t.localeCompare(r,"zh-CN"):r.localeCompare(t,"zh-CN");case"createdAt":return t=new Date(e.createdAt||0).getTime(),r=new Date(n.createdAt||0).getTime(),"ascend"===_.sortOrder?t-r:r-t;case"interfaceCount":return t=e.interfaceCount||0,r=n.interfaceCount||0,"ascend"===_.sortOrder?t-r:r-t;case"active":return t=e.active?1:0,r=n.active?1:0,"ascend"===_.sortOrder?t-r:r-t;default:return 0}})),r=(_.current-1)*_.pageSize,o=r+_.pageSize;return n.slice(r,o)};return r.createElement(fe,null,r.createElement("div",{className:"page-container"},r.createElement("div",{className:"page-title-bar"},r.createElement("div",{className:"title-section"},r.createElement("div",{className:"title-with-badge"},r.createElement("h1",{className:"page-title"},"功能模块管理")),r.createElement("div",{className:"page-description"},"创建和管理功能模块,为每个功能配置独立的接口")),r.createElement("div",{className:"page-actions"},r.createElement(S.Ay,{type:"primary",icon:r.createElement(cn.A,null),onClick:function(){return W()}},"新建功能"),r.createElement(S.Ay,{type:"primary",icon:r.createElement(rn.A,null),onClick:ne,style:{backgroundColor:"#52c41a",borderColor:"#52c41a"}},"导入功能"),r.createElement(S.Ay,{type:"primary",icon:r.createElement(ln.A,null),onClick:function(){0!==t.length?(y(t.map((function(e){return e.id}))),m(!0)):Z.Ay.warning("暂无可导出的功能模块")},disabled:0===t.length,style:0===t.length?void 0:{backgroundColor:"#fa8c16",borderColor:"#fa8c16"}},"导出功能"),E&&r.createElement(S.Ay,{type:"primary",icon:r.createElement(ke.A,null),onClick:function(){return O(!0)},style:{backgroundColor:"#0891b2",borderColor:"#0891b2"}},"WebDAV"))),t.length>0&&!T&&r.createElement(he.A,{className:"control-panel-card",style:{marginBottom:24}},r.createElement(Ze.A,{gutter:[24,16],align:"middle"},r.createElement(Je.A,{xs:24,sm:12,md:8,lg:6},r.createElement("div",{className:"stats-section"},r.createElement("div",{className:"stats-item"},r.createElement("span",{className:"stats-number"},t.length),r.createElement("span",{className:"stats-label"},"功能模块")),r.createElement("div",{className:"stats-item"},r.createElement("span",{className:"stats-number"},t.filter((function(e){return e.active})).length),r.createElement("span",{className:"stats-label"},"已启用")),r.createElement("div",{className:"stats-item"},r.createElement("span",{className:"stats-number"},t.reduce((function(e,n){return e+(n.interfaceCount||0)}),0)),r.createElement("span",{className:"stats-label"},"接口总数")))),r.createElement(Je.A,{xs:24,sm:12,md:8,lg:9},r.createElement("div",{className:"sort-controls"},r.createElement("div",{className:"control-group"},r.createElement("span",{className:"control-label"},r.createElement(sn.A,null)," 排序方式"),r.createElement(Qe.A,{value:_.sortBy,onChange:function(e){U({sortBy:e,current:1})},style:{width:120},size:"middle"},r.createElement(Qe.A.Option,{value:"name"},"名称"),r.createElement(Qe.A.Option,{value:"createdAt"},"创建时间"),r.createElement(Qe.A.Option,{value:"interfaceCount"},"接口数量"),r.createElement(Qe.A.Option,{value:"active"},"状态")),r.createElement(Qe.A,{value:_.sortOrder,onChange:function(e){U({sortOrder:e,current:1})},style:{width:80},size:"middle"},r.createElement(Qe.A.Option,{value:"ascend"},"升序"),r.createElement(Qe.A.Option,{value:"descend"},"降序"))))),r.createElement(Je.A,{xs:24,sm:12,md:4,lg:3},r.createElement("div",{className:"view-mode-controls"},r.createElement(S.Ay.Group,null,r.createElement($e.A,{title:"卡片视图"},r.createElement(S.Ay,{type:"card"===_.viewMode?"primary":"default",icon:r.createElement(j.A,null),onClick:function(){return re("card")}})),r.createElement($e.A,{title:"列表视图"},r.createElement(S.Ay,{type:"list"===_.viewMode?"primary":"default",icon:r.createElement(un.A,null),onClick:function(){return re("list")}}))))),r.createElement(Je.A,{xs:24,sm:24,md:12,lg:6},r.createElement("div",{className:"pagination-controls"},r.createElement("div",{className:"control-group"},r.createElement("span",{className:"control-label"},"每页显示"),r.createElement(Qe.A,{value:_.pageSize,onChange:function(e){U({pageSize:e,current:1})},style:{width:80},size:"middle"},r.createElement(Qe.A.Option,{value:8},"8"),r.createElement(Qe.A.Option,{value:12},"12"),r.createElement(Qe.A.Option,{value:16},"16"),r.createElement(Qe.A.Option,{value:24},"24")),r.createElement("span",{className:"page-info"},"第 ",(_.current-1)*_.pageSize+1,"-",Math.min(_.current*_.pageSize,t.length)," 条")))))),r.createElement(he.A,{className:"feature-list-card"},T?r.createElement("div",{className:"loading-state"},r.createElement(F.A,{size:"large"}),r.createElement("div",{className:"loading-text"},"正在加载功能模块...")):t.length>0?r.createElement(r.Fragment,null,"card"===_.viewMode?r.createElement(Ze.A,{gutter:[20,20],className:"feature-grid"},oe().map((function(e){return function(e){var n=e.createdAt?new Date(e.createdAt).toLocaleDateString():"未知日期";return r.createElement(Je.A,{xs:24,sm:12,md:8,lg:6,key:e.id,style:{marginBottom:16}},r.createElement(Ke.A.Ribbon,{text:e.active?"已启用":"已禁用",color:e.active?"#52c41a":"#f5222d",style:{display:"block"}},r.createElement(he.A,{className:"feature-card ".concat(e.active?"":"inactive-feature"),onClick:function(n){var t=n.target;t.closest(".ant-switch")||t.closest(".feature-name .ant-switch")||t.closest(".ant-card-actions")||t.closest(".ant-card-actions li")||$(e)},style:{cursor:"pointer"},actions:[r.createElement($e.A,{title:"管理接口"},r.createElement(C.A,{key:"interfaces",onClick:function(n){n.stopPropagation(),$(e)}})),r.createElement($e.A,{title:"编辑功能"},r.createElement(nn.A,{key:"edit",onClick:function(n){n.stopPropagation(),W(e)}})),r.createElement($e.A,{title:"删除功能"},r.createElement(tn.A,{key:"delete",onClick:function(n){n.stopPropagation(),K(e.id)}})),r.createElement($e.A,{title:"导出配置"},r.createElement(rn.A,{key:"export",onClick:function(n){n.stopPropagation(),Q(e)}}))]},r.createElement("div",{className:"feature-card-content"},r.createElement("div",{className:"feature-name"},r.createElement(Sn,{level:4,ellipsis:{tooltip:e.name}},e.name),r.createElement(Xe.A,{checked:e.active,onChange:function(n,t){t.stopPropagation(),J(e.id,e.active)},size:"small",onClick:function(){event.stopPropagation()}})),r.createElement(Ln,{className:"feature-description",ellipsis:{rows:2,expandable:!1,tooltip:e.description}},e.description||"无描述"),r.createElement("div",{className:"feature-stat"},r.createElement("span",null,r.createElement(on.A,null)," ",e.interfaceCount||0," 个接口"),r.createElement("span",{className:"feature-date"},r.createElement(an.A,null)," ",n))))))}(e)}))):(G=[{title:"状态",dataIndex:"active",key:"active",width:100,render:function(e,n){return r.createElement(Xe.A,{checked:e,onChange:function(t,r){r.stopPropagation(),J(n.id,e)},checkedChildren:"启用",unCheckedChildren:"禁用"})}},{title:"功能名称",dataIndex:"name",key:"name",ellipsis:{tooltip:!0},render:function(e){return r.createElement(An,{strong:!0,style:{fontSize:"14px"}},e)}},{title:"功能描述",dataIndex:"description",key:"description",ellipsis:{tooltip:!0},render:function(e){return r.createElement(An,{type:"secondary"},e||"无描述")}},{title:"接口数量",dataIndex:"interfaceCount",key:"interfaceCount",width:100,align:"center",render:function(e){return r.createElement(Ke.A,{count:e||0,showZero:!0,style:{backgroundColor:"#1677ff"}})}},{title:"创建时间",dataIndex:"createdAt",key:"createdAt",width:120,render:function(e){return r.createElement(An,{type:"secondary"},e?new Date(e).toLocaleDateString():"未知日期")}},{title:"操作",key:"action",width:200,fixed:"right",render:function(e,n){return r.createElement(L.A,{size:"small"},r.createElement($e.A,{title:"管理接口"},r.createElement(S.Ay,{type:"link",size:"small",icon:r.createElement(C.A,null),onClick:function(e){e.stopPropagation(),$(n)}},"接口")),r.createElement($e.A,{title:"编辑"},r.createElement(S.Ay,{type:"link",size:"small",icon:r.createElement(nn.A,null),onClick:function(e){e.stopPropagation(),W(n)}})),r.createElement($e.A,{title:"导出"},r.createElement(S.Ay,{type:"link",size:"small",icon:r.createElement(rn.A,null),onClick:function(e){e.stopPropagation(),Q(n)}})),r.createElement($e.A,{title:"删除"},r.createElement(S.Ay,{type:"link",size:"small",danger:!0,icon:r.createElement(tn.A,null),onClick:function(e){e.stopPropagation(),K(n.id)}})))}}],r.createElement(X.A,{columns:G,dataSource:oe(),rowKey:"id",pagination:!1,onRow:function(e){return{onClick:function(){return $(e)},style:{cursor:"pointer"}}},rowClassName:function(e){return e.active?"":"inactive-row"}})),t.length>_.pageSize&&r.createElement("div",{className:"pagination-wrapper"},r.createElement(en.A,{current:_.current,pageSize:_.pageSize,total:t.length,onChange:te,onShowSizeChange:te,showSizeChanger:!1,showQuickJumper:!0,showTotal:function(e,n){return"第 ".concat(n[0],"-").concat(n[1]," 条,共 ").concat(e," 个功能模块")},size:"default",className:"custom-pagination"}))):r.createElement(ye.A,{className:"custom-empty",image:r.createElement("div",{className:"empty-image"},r.createElement(C.A,{style:{fontSize:64,color:"#d9d9d9"}})),description:r.createElement("div",{className:"empty-description"},r.createElement("div",{className:"empty-title"},"暂无功能模块"),r.createElement("div",{className:"empty-subtitle"},"创建您的第一个功能模块,开始管理接口"))},r.createElement("div",{className:"empty-actions"},r.createElement(S.Ay,{type:"primary",icon:r.createElement(cn.A,null),onClick:function(){return W()}},"创建新功能"),r.createElement(S.Ay,{icon:r.createElement(rn.A,null),onClick:ne},"导入功能"))))),r.createElement(R.A,{title:u?"编辑功能":"新建功能",open:c,onCancel:q,footer:null,destroyOnClose:!0,width:500},r.createElement(ge.A,{form:z,layout:"vertical",onFinish:H,initialValues:{name:"",description:"",active:!0}},r.createElement(ge.A.Item,{name:"name",label:"功能名称",rules:[{required:!0,message:"请输入功能名称"}]},r.createElement(xe.A,{placeholder:"请输入功能名称"})),r.createElement(ge.A.Item,{name:"description",label:"功能描述"},r.createElement(In,{placeholder:"请输入功能描述(可选)",autoSize:{minRows:3,maxRows:6}})),r.createElement("div",{className:"form-actions"},r.createElement(S.Ay,{onClick:q},"取消"),r.createElement(S.Ay,{type:"primary",htmlType:"submit",loading:T},"确定")))),r.createElement(R.A,{title:"导出功能",open:f,onCancel:function(){return m(!1)},footer:null,destroyOnClose:!0,width:520},r.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12}},r.createElement(be.A,{indeterminate:b.length>0&&b.length<t.length,checked:t.length>0&&b.length===t.length,onChange:function(e){return y(e.target.checked?t.map((function(e){return e.id})):[])}},"全选"),r.createElement(An,{type:"secondary"},"已选择 ",b.length," / ",t.length)),r.createElement("div",{style:{maxHeight:360,overflowY:"auto",border:"1px solid #f0f0f0",borderRadius:8,padding:"4px 12px"}},r.createElement(be.A.Group,{value:b,onChange:function(e){return y(e)},style:{width:"100%"}},t.map((function(e){return r.createElement("div",{key:e.id,style:{padding:"8px 0",borderBottom:"1px solid #fafafa"}},r.createElement(be.A,{value:e.id,style:{width:"100%"}},r.createElement("span",{style:{fontWeight:500}},e.name),r.createElement("span",{style:{color:"#999",marginLeft:8,fontSize:12}},e.interfaceCount||0," 个接口")))})))),r.createElement("div",{className:"form-actions",style:{marginTop:16}},r.createElement(S.Ay,{onClick:function(){return m(!1)}},"取消"),r.createElement(S.Ay,{type:"primary",loading:v,disabled:0===b.length,onClick:ee},"导出 (",b.length,")"))),r.createElement(He,{open:I,onClose:function(){return O(!1)},onPulled:kn(wn().mark((function e(){return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,V();case 2:return e.next=4,Y();case 4:case"end":return e.stop()}}),e)})))}))};var Cn=t(8603),Nn=t(8073),Tn=t(6143),Pn=t(696),zn=t(5710),Mn=t(7046),_n=t(2877),Rn=t(3108),Fn=t(4103),Dn=t(1348),Un=t(4034),Bn={};Bn.styleTagTransform=y(),Bn.setAttributes=f(),Bn.insert=d().bind(null,"head"),Bn.domAPI=s(),Bn.insertStyleElement=h(),c()(Un.A,Bn),Un.A&&Un.A.locals&&Un.A.locals;var Gn=t(5901),Vn=t(961),Wn=t(6552),qn=t(5225),Yn=t(6008),Hn=t(9822),Jn=t(9197),Kn=t(234),$n=t(2630),Xn=t(1295),Zn=t(8027),Qn=t(3829);function et(e){return et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},et(e)}function nt(){nt=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==et(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(et(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function tt(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function rt(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){tt(a,r,o,i,c,"next",e)}function c(e){tt(a,r,o,i,c,"throw",e)}i(void 0)}))}}var ot=function(){var e=rt(nt().mark((function e(){var n;return nt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ce.A.get("/_flush_cache");case 3:return n=e.sent,e.abrupt("return",n.data);case 7:throw e.prev=7,e.t0=e.catch(0),console.error("刷新缓存失败:",e.t0),e.t0;case 11:case"end":return e.stop()}}),e,null,[[0,7]])})));return function(){return e.apply(this,arguments)}}(),at=function(){var e=rt(nt().mark((function e(){return nt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,ot();case 3:e.next=8;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("刷新缓存失败,可能需要等待缓存自动过期:",e.t0);case 8:case"end":return e.stop()}}),e,null,[[0,5]])})));return function(){return e.apply(this,arguments)}}(),it=function(e,n){if(n&&n.includes("json"))try{var t=JSON.parse(e);return JSON.stringify(t,null,2)}catch(n){return e}return e},ct=function(){return(0,Qn.A)()};function lt(e){return lt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},lt(e)}function st(e){return function(e){if(Array.isArray(e))return ht(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||mt(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ut(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function dt(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?ut(Object(t),!0).forEach((function(n){pt(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ut(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function pt(e,n,t){return(n=function(e){var n=function(e){if("object"!=lt(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=lt(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==lt(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ft(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||mt(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function mt(e,n){if(e){if("string"==typeof e)return ht(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?ht(e,n):void 0}}function ht(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var bt=xe.A.TextArea,yt=Qe.A.Option;const gt=function(e){var n=e.form,t=e.responses,o=e.activeResponseId,a=e.onPreview,i=e.enableSorting,c=void 0!==i&&i,l=n.getFieldValue,s=n.setFieldsValue,u=ft((0,r.useState)(!1),2),d=u[0],p=u[1],f=ft((0,r.useState)(""),2),m=f[0],h=f[1],b=ft((0,r.useState)(!1),2),y=b[0],g=b[1],v=ft((0,r.useState)(!1),2),x=v[0],w=v[1],E=ft((0,r.useState)((function(){var e=localStorage.getItem("responseParamMatcherEnabled");return null===e||"false"!==e})),2),k=E[0],A=E[1];(0,r.useEffect)((function(){var e=function(){var e=localStorage.getItem("responseParamMatcherEnabled");A(null===e||"false"!==e)};return window.addEventListener("storage",e),function(){return window.removeEventListener("storage",e)}}),[]);var I=t.findIndex((function(e){return e.id===o})),O=I>=0?t[I]:null,j=ft((0,r.useState)((function(){return Array.isArray(t)?t.map((function(e){return dt({},e)})):[]})),2),C=j[0],N=j[1];(0,r.useEffect)((function(){N(Array.isArray(t)?t.map((function(e){return dt({},e)})):[])}),[t]);var T=function(){g(!y)},P=function(){var e=ct(),n=l("responses")||[];if(!Array.isArray(n))try{"string"==typeof n&&(n=JSON.parse(n))}catch(e){n=[]}Array.isArray(n)||(n=[]);var t={id:e,name:"响应 ".concat(n.length+1),description:"",content:'{\n "code": 0,\n "message": "success",\n "data": {}\n}',paramMatchers:[]},r=[].concat(st(n),[t]);s({responses:r,activeResponseId:e})},z=function(e){s({activeResponseId:e}),p(!1)},M=function(){if(o&&m.trim()){var e=(l("responses")||[]).map((function(e){return e.id===o?dt(dt({},e),{},{name:m.trim()}):e}));s({responses:e})}p(!1),h("")},_=function(e){if(I>=0){var n=st(l("responses")||[]);n[I]=dt(dt({},n[I]),{},{content:e}),s({responses:n})}},R=function(e){if(I>=0){var n=st(l("responses")||[]);n[I]=dt(dt({},n[I]),{},{paramMatchers:e}),s({responses:n})}},F=function(){var e=O&&O.paramMatchers||[];R([].concat(st(e),[{paramPath:"",paramValue:"",matchType:"exact"}]))},D=function(e,n,t){var r=(O&&O.paramMatchers||[]).map((function(r,o){return o===e?dt(dt({},r),{},pt({},n,t)):r}));R(r)};return Array.isArray(t)&&0!==t.length?r.createElement(he.A,{title:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Yn.A,null),r.createElement("span",null,"响应内容编辑"),r.createElement(Ke.A,{count:t.length,style:{backgroundColor:"#52c41a"}})),extra:r.createElement(L.A,{size:"small"},c&&r.createElement(S.Ay,{type:"default",icon:r.createElement(Jn.A,null),onClick:function(){return w(!x)},size:"small",style:{display:"flex",alignItems:"center",gap:"4px"}},"排序"),r.createElement(S.Ay,{type:"default",icon:r.createElement(Hn.A,null),onClick:P,size:"small",style:{display:"flex",alignItems:"center",gap:"4px"}},"添加响应"),r.createElement(S.Ay,{type:"default",icon:r.createElement(Kn.A,null),onClick:function(){O?a&&a():Z.Ay.error("未找到有效的响应内容")},size:"small",style:{display:"flex",alignItems:"center",gap:"4px",borderColor:"#52c41a",color:"#52c41a"}},"预览"),r.createElement(S.Ay,{type:"default",icon:r.createElement($n.A,null),onClick:function(){if(O&&O.content)try{var e=JSON.parse(O.content),n=JSON.stringify(e,null,2);_(n),Z.Ay.success("JSON已格式化")}catch(e){Z.Ay.error("无效的JSON格式,无法格式化")}else Z.Ay.warning("没有可格式化的JSON内容")},size:"small",style:{display:"flex",alignItems:"center",gap:"4px",borderColor:"#fa8c16",color:"#fa8c16"}},"格式化JSON")),style:{marginBottom:16},bodyStyle:{padding:"16px"}},c&&x&&Array.isArray(C)&&C.length>1&&r.createElement("div",{style:{marginBottom:12}},r.createElement(Gn.ReactSortable,{list:C,setList:function(e){N(e),s({responses:e})},animation:150,ghostClass:"sortable-ghost",style:{display:"flex",gap:8,overflowX:"auto",paddingBottom:4}},C.map((function(e){return r.createElement("div",{key:e.id,className:"sortable-chip".concat(e.id===o?" sortable-chip-active":""),onClick:function(){return z(e.id)},title:e.name||"未命名响应"},e.name||"未命名响应")})))),r.createElement("div",{style:{marginBottom:"16px"}},r.createElement(Ze.A,{gutter:12,align:"middle"},r.createElement(Je.A,{span:20},r.createElement("div",{style:{marginBottom:"8px"}},r.createElement("label",{style:{fontSize:"12px",color:"#666",fontWeight:"bold"}},"选择响应 / 编辑名称")),r.createElement("div",{style:{position:"relative"}},d?r.createElement(xe.A.Group,{compact:!0},r.createElement(xe.A,{style:{width:"calc(100% - 80px)"},value:m,onChange:function(e){return h(e.target.value)},onPressEnter:M,onBlur:M,placeholder:"输入响应名称",autoFocus:!0}),r.createElement(S.Ay,{style:{width:"40px"},type:"primary",icon:r.createElement(Xn.A,null),onClick:M}),r.createElement(S.Ay,{style:{width:"40px"},icon:r.createElement(tn.A,null),onClick:function(){p(!1),h("")}})):r.createElement(xe.A.Group,{compact:!0},r.createElement(Qe.A,{style:{width:"calc(100% - 40px)"},placeholder:"选择要编辑的响应",value:o,onChange:z},t.map((function(e,n){return r.createElement(yt,{key:e.id,value:e.id},e.name||"响应 ".concat(n+1))}))),r.createElement($e.A,{title:"编辑响应名称"},r.createElement(S.Ay,{style:{width:"40px"},icon:r.createElement(nn.A,null),onClick:function(){O&&(h(O.name||""),p(!0))},disabled:!O}))))),r.createElement(Je.A,{span:4},r.createElement("div",{style:{marginBottom:"8px"}},r.createElement("label",{style:{fontSize:"12px",color:"#666",fontWeight:"bold"}},"操作")),r.createElement($e.A,{title:"删除当前响应"},r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null),onClick:function(){return o&&function(e){var n=l("responses")||[];if(n.length<=1)Z.Ay.warning("至少需要保留一个响应");else{var t,r=n.filter((function(n){return n.id!==e})),a=o;e===o&&(a=null===(t=r[0])||void 0===t?void 0:t.id),s({responses:r,activeResponseId:a})}}(o)},disabled:t.length<=1||!O,style:{width:"100%"}},"删除"))))),O&&k&&function(){if(!O)return null;var e=O.paramMatchers||[];return r.createElement("div",{style:{marginBottom:"12px"}},r.createElement(Wn.A,{orientation:"left",orientationMargin:0,style:{margin:"0 0 10px 0",fontSize:"12px"}},r.createElement(L.A,{size:6},r.createElement(Rn.A,{style:{color:"#1677ff"}}),r.createElement("span",{style:{fontWeight:"bold",color:"#333"}},"入参匹配规则"),e.length>0&&r.createElement(ve.A,{color:"blue",style:{fontSize:"11px",padding:"0 4px"}},e.length,"条"),r.createElement($e.A,{title:"满足所有规则时返回此响应;无规则的响应作为默认兜底。响应按列表顺序依次检查,第一个匹配的响应被返回。"},r.createElement(Dn.A,{style:{color:"#bbb",cursor:"help",fontSize:"12px"}})))),r.createElement("div",null,e.map((function(e,n){return r.createElement("div",{key:n,style:{display:"flex",gap:"8px",alignItems:"center",marginBottom:"8px"}},r.createElement(xe.A,{style:{flex:1},placeholder:"参数路径(如:userId 或 data.user.id)",value:e.paramPath||"",onChange:function(e){return D(n,"paramPath",e.target.value)},size:"small"}),r.createElement(xe.A,{style:{flex:1},placeholder:"期望值(如:123 或 admin)",value:e.paramValue||"",onChange:function(e){return D(n,"paramValue",e.target.value)},size:"small"}),r.createElement(Qe.A,{style:{width:90},value:e.matchType||"exact",onChange:function(e){return D(n,"matchType",e)},size:"small"},r.createElement(yt,{value:"exact"},"精确匹配"),r.createElement(yt,{value:"contains"},"包含"),r.createElement(yt,{value:"regex"},"正则")),r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null),size:"small",onClick:function(){return function(e){var n=(O&&O.paramMatchers||[]).filter((function(n,t){return t!==e}));R(n)}(n)}}))})),r.createElement(S.Ay,{type:"dashed",size:"small",icon:r.createElement(cn.A,null),onClick:F,style:{width:"100%"}},"添加匹配规则"),0===e.length&&r.createElement("div",{style:{color:"#bbb",fontSize:"12px",marginTop:"6px",textAlign:"center"}},"无规则时此响应作为默认兜底响应")))}(),O&&r.createElement(r.Fragment,null,r.createElement("div",{style:{marginBottom:"8px"}},r.createElement("label",{style:{fontSize:"12px",color:"#666",fontWeight:"bold"}},"响应内容")),r.createElement("div",{style:{position:"relative"}},r.createElement(bt,{rows:26,placeholder:"请输入响应内容...",style:{fontFamily:'Monaco, Menlo, "Ubuntu Mono", monospace',fontSize:"13px",lineHeight:"1.5",minHeight:"620px"},value:O.content||"",onChange:function(e){return _(e.target.value)}}),r.createElement(S.Ay,{className:"textarea-fullscreen-btn",icon:r.createElement(Zn.A,null),onClick:T,size:"small",style:{position:"absolute",top:"8px",right:"12px",background:"rgba(255, 255, 255, 0.9)",border:"1px solid #d9d9d9",zIndex:10},title:"全屏编辑"}))),y&&O?Vn.createPortal(r.createElement("div",{className:"textarea-fullscreen-overlay",onKeyDown:function(e){"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),g(!1))},tabIndex:-1},r.createElement("div",{className:"textarea-fullscreen-header"},r.createElement(S.Ay,{icon:r.createElement(qn.A,null),onClick:T,size:"small",type:"text",style:{color:"#595959"}},"退出全屏 (ESC)")),r.createElement(bt,{className:"textarea-fullscreen-editor",autoFocus:!0,placeholder:"请输入响应内容...",value:O.content||"",onChange:function(e){return _(e.target.value)}})),document.body):null):r.createElement(he.A,{title:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Yn.A,null),r.createElement("span",null,"响应内容编辑")),style:{marginBottom:16},bodyStyle:{padding:"16px"}},r.createElement("div",{style:{textAlign:"center",padding:"40px 20px",borderRadius:"6px",border:"1px dashed #d9d9d9"}},r.createElement(zn.A,{style:{fontSize:"32px",color:"#bfbfbf",marginBottom:"12px"}}),r.createElement("div",{style:{color:"#999",marginBottom:"16px"}},"暂无响应数据"),r.createElement(S.Ay,{type:"primary",icon:r.createElement(Hn.A,null),onClick:P},"创建第一个响应")))};var vt=[{value:"application/json; charset=utf-8",label:"JSON"},{value:"text/plain; charset=utf-8",label:"纯文本"},{value:"text/html; charset=utf-8",label:"HTML"},{value:"application/xml; charset=utf-8",label:"XML"},{value:"application/javascript; charset=utf-8",label:"JavaScript"}],xt=[{value:"response",label:"模拟响应"},{value:"redirect",label:"重定向"},{value:"url_redirect",label:"URL重定向"}],wt=[{value:"200",label:"200 OK"},{value:"201",label:"201 Created"},{value:"204",label:"204 No Content"},{value:"400",label:"400 Bad Request"},{value:"401",label:"401 Unauthorized"},{value:"403",label:"403 Forbidden"},{value:"404",label:"404 Not Found"},{value:"500",label:"500 Internal Server Error"}],Et=[{value:"ALL",label:"所有方法"},{value:"GET",label:"GET"},{value:"POST",label:"POST"},{value:"PUT",label:"PUT"},{value:"DELETE",label:"DELETE"},{value:"PATCH",label:"PATCH"},{value:"HEAD",label:"HEAD"},{value:"OPTIONS",label:"OPTIONS"}];const kt=function(e){var n=e.visible,t=e.onCancel,o=e.previewContent;return r.createElement(R.A,{title:(null==o?void 0:o.title)||"预览响应内容",open:n,onCancel:t,footer:[r.createElement(S.Ay,{key:"close",onClick:t},"关闭")],width:600},(null==o?void 0:o.description)&&r.createElement("div",{style:{marginBottom:"16px",padding:"8px",borderRadius:"4px",borderLeft:"4px solid #00f0ff"}},r.createElement("div",{style:{fontWeight:"bold",marginBottom:"4px"}},"描述:"),r.createElement("div",{style:{opacity:.7}},o.description)),r.createElement("div",{style:{maxHeight:"60vh",overflow:"auto",padding:"16px",borderRadius:"4px",fontFamily:"'Share Tech Mono', monospace"}},r.createElement("pre",{style:{margin:0,whiteSpace:"pre-wrap",wordWrap:"break-word"}},null==o?void 0:o.content)))};function At(e){return At="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},At(e)}function St(){St=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==At(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(At(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function Lt(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function It(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||function(e,n){if(e){if("string"==typeof e)return Ot(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Ot(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ot(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}const jt=function(e){var n=e.visible,t=e.onCancel,o=e.interfaceItem,a=e.onSaved,i=It(ge.A.useForm(),1)[0],c=It((0,r.useState)(!1),2),l=c[0],s=c[1],u=It((0,r.useState)(null),2),d=u[0],p=u[1];(0,r.useEffect)((function(){if(n&&o){var e=Array.isArray(o.responses)?o.responses:[],t=o.activeResponseId||e[0]&&e[0].id||"";i.setFieldsValue({responses:e,activeResponseId:t})}}),[n,o]);var f=function(){var e=i.getFieldsValue(!0),n=Array.isArray(e.responses)?e.responses:[],t=n.find((function(n){return n.id===e.activeResponseId}))||n[0];if(t){var r="application/json; charset=utf-8",o=it(t.content||"",r);p({title:"预览: ".concat(t.name||"未命名响应"),content:o,contentType:r,description:""}),s(!0)}else Z.Ay.error("未找到有效的响应内容")},m=function(){var e,n=(e=St().mark((function e(){var n,r,c,l,s;return St().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,i.validateFields();case 3:if(n=i.getFieldsValue(!0),r={responses:Array.isArray(n.responses)?n.responses:[],activeResponseId:n.activeResponseId||n.responses&&n.responses[0]&&n.responses[0].id||""},o&&o.id){e.next=8;break}return Z.Ay.error("缺少接口ID,无法保存"),e.abrupt("return");case 8:return e.next=10,Ce.A.patch("/cgi-bin/interfaces/".concat(o.id),r);case 10:if(!(c=e.sent).data||0!==c.data.code){e.next=19;break}return Z.Ay.success("保存成功"),e.next=15,at();case 15:a&&a(),t&&t(),e.next=20;break;case 19:throw new Error((null===(l=c.data)||void 0===l?void 0:l.message)||"保存失败");case 20:e.next=28;break;case 22:if(e.prev=22,e.t0=e.catch(0),!e.t0||!e.t0.errorFields){e.next=26;break}return e.abrupt("return");case 26:console.error("保存失败",e.t0),Z.Ay.error((null===(s=e.t0.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.message)||e.t0.message||"保存失败");case 28:case"end":return e.stop()}}),e,null,[[0,22]])})),function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){Lt(a,r,o,i,c,"next",e)}function c(e){Lt(a,r,o,i,c,"throw",e)}i(void 0)}))});return function(){return n.apply(this,arguments)}}();return r.createElement(r.Fragment,null,r.createElement(Tn.A,{title:"数据管理",placement:"right",width:1040,open:n,onClose:t,destroyOnClose:!0,bodyStyle:{paddingBottom:80},footer:r.createElement("div",{style:{textAlign:"right"}},r.createElement(L.A,null,r.createElement(S.Ay,{onClick:t},"取消"),r.createElement(S.Ay,{type:"primary",onClick:m},"保存")))},r.createElement(ge.A,{form:i,layout:"vertical",initialValues:{responses:[],activeResponseId:""}},r.createElement(ge.A.Item,{name:"responses",hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{name:"activeResponseId",hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:!0},(function(e){var n=e.getFieldValue,t=n("responses")||[],o=n("activeResponseId")||t[0]&&t[0].id||"";return r.createElement(gt,{form:i,responses:t,activeResponseId:o,onPreview:f,enableSorting:!0})})))),r.createElement(kt,{visible:l,onCancel:function(){return s(!1)},previewContent:d}))};function Ct(e){return Ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ct(e)}function Nt(){Nt=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==Ct(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(Ct(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function Tt(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function Pt(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||function(e,n){if(e){if("string"==typeof e)return zt(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?zt(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function zt(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}const Mt=function(e){var n=e.visible,t=e.onCancel,o=e.interfaceItem,a=e.onSaved,i=Pt(ge.A.useForm(),1)[0],c=Pt((0,r.useState)(!1),2),l=c[0],s=c[1],u=Pt((0,r.useState)(null),2),d=u[0],p=u[1];(0,r.useEffect)((function(){if(n&&o){var e=Array.isArray(o.responses)?o.responses:[],t=o.activeResponseId||e[0]&&e[0].id||"";i.setFieldsValue({responses:e,activeResponseId:t})}}),[n,o]);var f=function(){var e=i.getFieldsValue(!0),n=Array.isArray(e.responses)?e.responses:[],t=n.find((function(n){return n.id===e.activeResponseId}))||n[0];if(t){var r="application/json; charset=utf-8",o=it(t.content||"",r);p({title:"预览: ".concat(t.name||"未命名响应"),content:o,contentType:r,description:""}),s(!0)}else Z.Ay.error("未找到有效的响应内容")},m=function(){var e,n=(e=Nt().mark((function e(){var n,r,c,l,s;return Nt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,i.validateFields();case 3:if(n=i.getFieldsValue(!0),r={responses:Array.isArray(n.responses)?n.responses:[],activeResponseId:n.activeResponseId||n.responses&&n.responses[0]&&n.responses[0].id||""},o&&o.id){e.next=8;break}return Z.Ay.error("缺少接口ID,无法保存"),e.abrupt("return");case 8:return e.next=10,Ce.A.patch("/cgi-bin/interfaces/".concat(o.id),r);case 10:if(!(c=e.sent).data||0!==c.data.code){e.next=19;break}return Z.Ay.success("保存成功"),e.next=15,at();case 15:a&&a(),t&&t(),e.next=20;break;case 19:throw new Error((null===(l=c.data)||void 0===l?void 0:l.message)||"保存失败");case 20:e.next=28;break;case 22:if(e.prev=22,e.t0=e.catch(0),!e.t0||!e.t0.errorFields){e.next=26;break}return e.abrupt("return");case 26:console.error("保存失败",e.t0),Z.Ay.error((null===(s=e.t0.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.message)||e.t0.message||"保存失败");case 28:case"end":return e.stop()}}),e,null,[[0,22]])})),function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){Tt(a,r,o,i,c,"next",e)}function c(e){Tt(a,r,o,i,c,"throw",e)}i(void 0)}))});return function(){return n.apply(this,arguments)}}();return r.createElement(r.Fragment,null,r.createElement(R.A,{title:"数据管理",open:n,onOk:m,onCancel:t,width:1040,destroyOnClose:!0,okText:"保存",cancelText:"取消",bodyStyle:{maxHeight:"80vh",overflow:"auto",padding:"24px"}},r.createElement(ge.A,{form:i,layout:"vertical",initialValues:{responses:[],activeResponseId:""}},r.createElement(ge.A.Item,{name:"responses",hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{name:"activeResponseId",hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:!0},(function(e){var n=e.getFieldValue,t=n("responses")||[],o=n("activeResponseId")||t[0]&&t[0].id||"";return r.createElement(gt,{form:i,responses:t,activeResponseId:o,onPreview:f,enableSorting:!0})})))),r.createElement(kt,{visible:l,onCancel:function(){return s(!1)},previewContent:d}))};var _t=["key","name"],Rt=["key","name"],Ft=["key","name"],Dt=["key","name"];function Ut(){return Ut=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},Ut.apply(null,arguments)}function Bt(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==n.indexOf(r))continue;t[r]=e[r]}return t}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],-1===n.indexOf(t)&&{}.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function Gt(e){return function(e){if(Array.isArray(e))return Zt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Xt(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vt(e){return Vt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vt(e)}function Wt(){Wt=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==Vt(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(Vt(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function qt(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function Yt(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){qt(a,r,o,i,c,"next",e)}function c(e){qt(a,r,o,i,c,"throw",e)}i(void 0)}))}}function Ht(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function Jt(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?Ht(Object(t),!0).forEach((function(n){Kt(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):Ht(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function Kt(e,n,t){return(n=function(e){var n=function(e){if("object"!=Vt(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=Vt(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Vt(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function $t(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||Xt(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Xt(e,n){if(e){if("string"==typeof e)return Zt(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Zt(e,n):void 0}}function Zt(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var Qt=Qe.A.Option,er=xe.A.Search,nr=[{key:"active",title:"状态",required:!0},{key:"name",title:"名称",required:!0},{key:"group",title:"分组",required:!1},{key:"urlPattern",title:"URL匹配规则",required:!1},{key:"proxyType",title:"处理方式",required:!1},{key:"currentResponse",title:"当前响应",required:!1},{key:"responseDelay",title:"延迟(毫秒)",required:!1},{key:"httpStatus",title:"状态码",required:!1},{key:"contentType",title:"内容类型",required:!1},{key:"targetUrl",title:"目标URL",required:!1},{key:"customHeaders",title:"自定义头",required:!1},{key:"paramMatchers",title:"参数匹配",required:!1},{key:"httpMethod",title:"请求方法",required:!1},{key:"action",title:"操作",required:!0}];const tr=function(){var e=(0,a.g)().featureId,n=((0,a.W6)(),$t((0,r.useState)([]),2)),t=n[0],o=n[1],i=$t((0,r.useState)([]),2),c=i[0],l=i[1],s=$t((0,r.useState)(!1),2),u=(s[0],s[1]),d=$t((0,r.useState)(!1),2),p=d[0],f=d[1],m=$t((0,r.useState)(!1),2),h=m[0],b=m[1],y=$t((0,r.useState)(null),2),g=y[0],v=y[1],x=$t((0,r.useState)([]),2),w=x[0],E=x[1],k=$t((0,r.useState)(null),2),A=k[0],O=k[1],j=$t((0,r.useState)(!1),2),C=j[0],N=j[1],T=$t((0,r.useState)(!1),2),z=T[0],M=T[1],_=$t((0,r.useState)(!1),2),F=_[0],U=_[1],B=$t((0,r.useState)(!1),2),G=B[0],V=B[1],W=$t((0,r.useState)(!1),2),q=W[0],Y=W[1],H=$t((0,r.useState)(null),2),J=H[0],K=H[1],$=$t((0,r.useState)(!1),2),Q=$[0],ee=$[1],ne=$t((0,r.useState)(null),2),te=ne[0],re=ne[1],oe=$t((0,r.useState)(null),2),ae=oe[0],ie=oe[1],ce=$t((0,r.useState)(null),2),le=(ce[0],ce[1]),se=(0,r.useRef)(null),ue=$t((0,r.useState)(""),2),de=ue[0],pe=ue[1],me=$t((0,r.useState)([]),2),ye=me[0],we=me[1],ke=$t((0,r.useState)(!1),2),Ae=(ke[0],ke[1],$t((0,r.useState)("modal"),2)),Se=Ae[0],Le=Ae[1],Ie=$t((0,r.useState)("modal"),2),Oe=Ie[0],Ne=Ie[1],Te=$t((0,r.useState)(!0),2),Pe=Te[0],ze=Te[1],Me=$t((0,r.useState)(!0),2),_e=Me[0],Re=Me[1],Fe=$t(ge.A.useForm(),1)[0],De=(0,r.useState)((function(){var e=localStorage.getItem("interface-table-config"),n=nr.map((function(e){return e.key}));return e?JSON.parse(e):{sortOrder:null,sortField:null,pageSize:10,current:1,visibleColumns:n}})),Ue=$t(De,2),Be=Ue[0],Ge=Ue[1],Ve=function(e){var n=Jt(Jt({},Be),e);Ge(n),localStorage.setItem("interface-table-config",JSON.stringify(n))};(0,r.useEffect)((function(){qe()}),[]),(0,r.useEffect)((function(){g&&Ye()}),[g]),(0,r.useEffect)((function(){var e=function(){z&&rn()},n=function(){Je()},t=function(){var e;null===(e=se.current)||void 0===e||e.focus()};return window.addEventListener("shortcut-save",e),window.addEventListener("shortcut-new-interface",n),window.addEventListener("shortcut-focus-search",t),function(){window.removeEventListener("shortcut-save",e),window.removeEventListener("shortcut-new-interface",n),window.removeEventListener("shortcut-focus-search",t)}}),[z]),(0,r.useEffect)((function(){var e=localStorage.getItem("dataManagementDisplayMode");e&&Le(e);var n=function(){var e=localStorage.getItem("dataManagementDisplayMode");e&&Le(e)};return window.addEventListener("storage",n),function(){window.removeEventListener("storage",n)}}),[]),(0,r.useEffect)((function(){var e=localStorage.getItem("interfaceFormDisplayMode");e&&Ne(e);var n=function(){var e=localStorage.getItem("interfaceFormDisplayMode");e&&Ne(e)};return window.addEventListener("storage",n),function(){window.removeEventListener("storage",n)}}),[]),(0,r.useEffect)((function(){var e=function(){var e=localStorage.getItem("interfaceParamMatcherEnabled");ze(null===e||"false"!==e);var n=localStorage.getItem("responseParamMatcherEnabled");Re(null===n||"false"!==n)};return e(),window.addEventListener("storage",e),function(){return window.removeEventListener("storage",e)}}),[]);var We=t.find((function(e){return e.id===g})),qe=function(){var n=Yt(Wt().mark((function n(){var t,r,a,i,c,l,s;return Wt().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,f(!0),n.next=4,Ce.A.get("/cgi-bin/features");case 4:(t=n.sent).data&&0===t.data.code&&Array.isArray(t.data.data)?(a=t.data.data,o(a),i=localStorage.getItem("selectedFeatureId"),c=i&&a.find((function(e){return e.id===i}))?i:null,(l=e||c||(null===(r=a[0])||void 0===r?void 0:r.id))&&v(l)):(o([]),Z.Ay.warning("获取功能模块数据格式不正确")),n.next=13;break;case 8:n.prev=8,n.t0=n.catch(0),console.error("获取功能模块失败:",n.t0),Z.Ay.error((null===(s=n.t0.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.message)||"获取功能模块失败"),o([]);case 13:return n.prev=13,f(!1),n.finish(13);case 16:case"end":return n.stop()}}),n,null,[[0,8,13,16]])})));return function(){return n.apply(this,arguments)}}(),Ye=function(){var e=Yt(Wt().mark((function e(){var n,t,r;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(g){e.next=2;break}return e.abrupt("return");case 2:return e.prev=2,b(!0),e.next=6,Ce.A.get("/cgi-bin/interfaces?featureId=".concat(g));case 6:n=e.sent,console.log("获取接口列表响应:",n.data),n.data&&0===n.data.code&&Array.isArray(n.data.data)?(t=n.data.data.map((function(e){return console.log("处理接口 ".concat(e.name,":"),{hasResponses:!!e.responses,responsesLength:e.responses?e.responses.length:0,activeResponseId:e.activeResponseId}),Array.isArray(e.responses)||(e.responses=[]),e.responses=e.responses.map((function(e,n){return{id:e.id||"resp-".concat(n,"-").concat(Date.now()),name:e.name||"响应 ".concat(n+1),description:e.description||"",content:e.content||"{}",paramMatchers:Array.isArray(e.paramMatchers)?e.paramMatchers:[]}})),e})),l(t),console.log("处理后的接口列表:",t),console.log("接口分组信息:",t.map((function(e){return{id:e.id,name:e.name,group:e.group}}))),He(t)):(console.warn("接口数据格式不正确:",n.data),l([]),Z.Ay.warning("获取接口配置数据格式不正确")),e.next=16;break;case 11:e.prev=11,e.t0=e.catch(2),console.error("获取接口配置失败:",e.t0),Z.Ay.error((null===(r=e.t0.response)||void 0===r||null===(r=r.data)||void 0===r?void 0:r.message)||"获取接口配置失败"),l([]);case 16:return e.prev=16,b(!1),e.finish(16);case 19:case"end":return e.stop()}}),e,null,[[2,11,16,19]])})));return function(){return e.apply(this,arguments)}}(),He=function(e){var n=new Set;e.forEach((function(e){e.group&&n.add(e.group)}));var t=Array.from(n).sort();E(t),A&&!t.includes(A)&&O(null)},Je=function(){if(g){Fe.resetFields(),V(!1);var e=ct(),n=[{id:e,name:"默认响应",description:"",content:'{\n "code": 0,\n "message": "success",\n "data": {}\n}'}];console.log("创建新接口,初始化响应数据:",n),Fe.setFieldsValue({proxyType:"response",statusCode:"200",contentType:"application/json; charset=utf-8",responses:n,activeResponseId:e,httpMethod:"ALL",headerItems:[],paramMatchers:[],group:void 0}),le(e),re(null),M(!0)}else Z.Ay.warning("请先选择一个功能模块")},Ze=function(){var e=Yt(Wt().mark((function e(n){var t,r,o;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ce.A.delete("/cgi-bin/interfaces?id=".concat(n));case 3:if(!(t=e.sent).data||0!==t.data.code){e.next=10;break}Z.Ay.success("接口删除成功"),Ye(),at(),e.next=11;break;case 10:throw new Error((null===(r=t.data)||void 0===r?void 0:r.message)||"接口删除失败");case 11:e.next=17;break;case 13:e.prev=13,e.t0=e.catch(0),console.error("接口删除失败:",e.t0),Z.Ay.error((null===(o=e.t0.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.message)||e.t0.message||"接口删除失败");case 17:case"end":return e.stop()}}),e,null,[[0,13]])})));return function(n){return e.apply(this,arguments)}}(),en=function(){var e=Yt(Wt().mark((function e(n,t){var r,o,a;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ce.A.patch("/cgi-bin/interfaces/".concat(n),{active:!t});case 3:if(!(r=e.sent).data||0!==r.data.code){e.next=10;break}Z.Ay.success("接口".concat(t?"禁用":"启用","成功")),Ye(),at(),e.next=11;break;case 10:throw new Error((null===(o=r.data)||void 0===o?void 0:o.message)||"接口".concat(t?"禁用":"启用","失败"));case 11:e.next=17;break;case 13:e.prev=13,e.t0=e.catch(0),console.error("接口".concat(t?"禁用":"启用","失败:"),e.t0),Z.Ay.error((null===(a=e.t0.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.message)||e.t0.message||"接口".concat(t?"禁用":"启用","失败"));case 17:case"end":return e.stop()}}),e,null,[[0,13]])})));return function(n,t){return e.apply(this,arguments)}}(),rn=function(){var e=Yt(Wt().mark((function e(){var n,t,r,o,a,i,c,l,s,u,d,p;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Fe.validateFields();case 3:if(n=Fe.getFieldsValue(!0),console.log("表单提交数据:",n),t={},n.headerItems&&Array.isArray(n.headerItems)&&n.headerItems.forEach((function(e){e&&e.headerName&&(t[e.headerName]=e.headerValue)})),r=n.group,Array.isArray(r)&&(r=r.length>0?r[0]:""),o=(n.responses||(te?te.responses:[])).map((function(e){return Jt(Jt({},e),{},{paramMatchers:Array.isArray(e.paramMatchers)?e.paramMatchers.filter((function(e){return e&&e.paramPath&&e.paramValue})):[]})})),a={name:n.name||(te?te.name:""),group:r||(te?te.group:"")||"",urlPattern:n.pattern||(te?te.urlPattern:""),proxyType:n.proxyType||(te?te.proxyType:"response"),featureId:g,responses:o,activeResponseId:n.activeResponseId||(te?te.activeResponseId:null),httpStatus:parseInt(n.statusCode,10)||(te?te.httpStatus:200),contentType:n.contentType||(te?te.contentType:"application/json; charset=utf-8"),responseDelay:parseInt(n.responseDelay,10)||(te?te.responseDelay:0)||0,httpMethod:n.httpMethod||(te?te.httpMethod:"ALL"),active:!0},console.log("提交的分组值:",r),"redirect"!==n.proxyType&&"url_redirect"!==n.proxyType||(a.targetUrl=n.targetUrl,a.headers=t),i=Array.isArray(n.paramMatchers)?n.paramMatchers.filter((function(e){return e&&e.paramPath&&e.paramValue})):[],a.paramMatchers=i,console.log("提交接口数据:",a),!te){e.next=30;break}return e.next=19,Ce.A.put("/cgi-bin/interfaces?id=".concat(te.id),a);case 19:if(!(c=e.sent).data||0!==c.data.code){e.next=27;break}Z.Ay.success("接口更新成功"),M(!1),Ye(),at(),e.next=28;break;case 27:throw new Error((null===(l=c.data)||void 0===l?void 0:l.message)||"接口更新失败");case 28:e.next=43;break;case 30:return e.next=32,Ce.A.post("/cgi-bin/interfaces",a);case 32:if(!(s=e.sent).data||0!==s.data.code){e.next=42;break}Z.Ay.success("接口创建成功"),console.log("接口创建成功,返回数据:",s.data),console.log("返回的接口数据中的分组信息:",null===(u=s.data.data)||void 0===u?void 0:u.group),M(!1),Ye(),at(),e.next=43;break;case 42:throw new Error((null===(d=s.data)||void 0===d?void 0:d.message)||"接口创建失败");case 43:e.next=49;break;case 45:e.prev=45,e.t0=e.catch(0),console.error("表单提交失败:",e.t0),Z.Ay.error((null===(p=e.t0.response)||void 0===p||null===(p=p.data)||void 0===p?void 0:p.message)||e.t0.message||"操作失败");case 49:case"end":return e.stop()}}),e,null,[[0,45]])})));return function(){return e.apply(this,arguments)}}(),on=function(){M(!1),V(!1)},an=function(){var e=Fe.getFieldValue("responses")||[],n=Fe.getFieldValue("activeResponseId"),t=e.find((function(e){return e.id===n}));if(t){var r=Fe.getFieldValue("contentType")||"",o=it(t.content,r);ie({title:"预览: ".concat(t.name||"未命名响应"),content:o,description:"",contentType:r}),U(!0)}else Z.Ay.error("未找到有效的响应内容")},ln=function(){var e=Yt(Wt().mark((function e(n,t){var r,o,a;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ce.A.patch("/cgi-bin/interfaces?id=".concat(n),{activeResponseId:t});case 3:if(0!==e.sent.data.code){e.next=10;break}return l(c.map((function(e){return e.id===n?Jt(Jt({},e),{},{activeResponseId:t}):e}))),o=null===(r=c.find((function(e){return e.id===n})))||void 0===r||null===(r=r.responses)||void 0===r?void 0:r.find((function(e){return e.id===t})),Z.Ay.success("已切换到响应: ".concat((null==o?void 0:o.name)||"未命名")),e.next=10,at();case 10:e.next=16;break;case 12:e.prev=12,e.t0=e.catch(0),console.error("切换响应失败:",e.t0),Z.Ay.error("切换响应失败: "+((null===(a=e.t0.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.message)||e.t0.message));case 16:case"end":return e.stop()}}),e,null,[[0,12]])})));return function(n,t){return e.apply(this,arguments)}}(),sn=function(){var e=c.filter((function(e){return!g||e.featureId===g}));if(A&&(e=e.filter((function(e){return e.group===A}))),de){var n=de.toLowerCase();return e.filter((function(e){return e.name&&e.name.toLowerCase().includes(n)||e.urlPattern&&e.urlPattern.toLowerCase().includes(n)}))}return e}(),un=function(){var e=Yt(Wt().mark((function e(n){var t,r;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(ye&&0!==ye.length){e.next=3;break}return Z.Ay.warning("请先选择要操作的接口"),e.abrupt("return");case 3:return e.prev=3,u(!0),t=ye.map((function(e){return Ce.A.patch("/cgi-bin/interfaces/".concat(e),{active:n})})),e.next=8,Promise.all(t);case 8:Z.Ay.success("已".concat(n?"启用":"禁用"," ").concat(ye.length," 个接口")),we([]),Ye(),at(),e.next=18;break;case 14:e.prev=14,e.t0=e.catch(3),console.error("批量操作失败:",e.t0),Z.Ay.error("批量操作失败: "+((null===(r=e.t0.response)||void 0===r||null===(r=r.data)||void 0===r?void 0:r.message)||e.t0.message));case 18:return e.prev=18,u(!1),e.finish(18);case 21:case"end":return e.stop()}}),e,null,[[3,14,18,21]])})));return function(n){return e.apply(this,arguments)}}(),dn=[{title:"状态",dataIndex:"active",key:"active",width:80,render:function(e,n){return r.createElement(Xe.A,{checked:!1!==e,onChange:function(t){return en(n.id,!1!==e)},size:"small"})}},{title:"名称",dataIndex:"name",key:"name",sorter:function(e,n){return e.name.localeCompare(n.name)},render:function(e){return r.createElement("span",{className:"interface-name"},e)}},{title:"分组",dataIndex:"group",key:"group",width:120,sorter:function(e,n){var t=e.group||"",r=n.group||"";return t.localeCompare(r)},render:function(e){return e?r.createElement(ve.A,{color:"blue",style:{cursor:"pointer"},onClick:function(){return O(e)}},e):r.createElement("span",{style:{color:"#999",fontStyle:"italic"}},"未分组")}},{title:"URL匹配规则",dataIndex:"urlPattern",key:"urlPattern",ellipsis:!0,render:function(e){return r.createElement("span",{className:"url-pattern"},e)}},{title:"处理方式",dataIndex:"proxyType",key:"proxyType",width:120,render:function(e){var n=xt.find((function(n){return n.value===e}));return r.createElement(Ke.A,{color:(null==n?void 0:n.color)||"#999",text:(null==n?void 0:n.label)||e})}},{title:"当前响应",dataIndex:"activeResponseId",key:"currentResponse",width:200,render:function(e,n){var t;return n.responses&&Array.isArray(n.responses)&&0!==n.responses.length?r.createElement(Qe.A,{value:e||(null===(t=n.responses[0])||void 0===t?void 0:t.id),style:{width:"100%"},onChange:function(e){return ln(n.id,e)},disabled:"response"!==n.proxyType},n.responses.map((function(e){return r.createElement(Qt,{key:e.id,value:e.id},e.name)}))):r.createElement("span",{className:"no-response"},"无响应数据")}},{title:"延迟(毫秒)",dataIndex:"responseDelay",key:"responseDelay",width:100,sorter:function(e,n){return(e.responseDelay||0)-(n.responseDelay||0)},render:function(e){var n=parseInt(e,10)||0;return r.createElement("span",{className:n>0?"delay-active":"delay-inactive"},n>0?n:"无延迟")}},{title:"状态码",dataIndex:"httpStatus",key:"httpStatus",width:100,render:function(e){var n=e||200,t="status-success";return n>=400?t="status-error":n>=300&&(t="status-warning"),r.createElement("span",{className:t},n)}},{title:"内容类型",dataIndex:"contentType",key:"contentType",width:120,sorter:function(e,n){var t=e.contentType||"",r=n.contentType||"";return t.localeCompare(r)},sortDirections:["ascend","descend"],render:function(e,n){if("response"!==n.proxyType)return"-";var t=vt.find((function(n){return n.value===e}));return t?t.label:e}},{title:"目标URL",dataIndex:"targetUrl",key:"targetUrl",ellipsis:!0,sorter:function(e,n){var t=e.targetUrl||"",r=n.targetUrl||"";return t.localeCompare(r)},sortDirections:["ascend","descend"],render:function(e,n){return"redirect"===n.proxyType||"url_redirect"===n.proxyType?e:"-"}},{title:"自定义头",dataIndex:"customHeaders",key:"customHeaders",width:100,sorter:function(e,n){return Object.keys(e.customHeaders||{}).length-Object.keys(n.customHeaders||{}).length},sortDirections:["ascend","descend"],render:function(e,n){if("redirect"!==n.proxyType&&"url_redirect"!==n.proxyType)return"-";var t=n.customHeaders||{},o=Object.keys(t).length;if(0===o)return"-";var a=Object.values(t).some((function(e){return e&&e.startsWith("@")}));return r.createElement($e.A,{title:r.createElement("div",null,Object.entries(t).map((function(e){var n=$t(e,2),t=n[0],o=n[1];return r.createElement("div",{key:t},t,": ",o,o&&o.startsWith("@")&&r.createElement("span",{style:{color:"#52c41a"}}," (随机)"))})))},r.createElement("span",{style:{color:"#1677ff"}},o,"个",a&&r.createElement("span",{style:{marginLeft:4}},"🎲")))}},{title:"参数匹配",dataIndex:"paramMatchers",key:"paramMatchers",width:120,render:function(e,n){if("response"!==n.proxyType)return"-";var t=Pe,o=_e,a=n.paramMatchers||[],i=t?a.filter((function(e){return e.paramPath})).length:0,c=o?(n.responses||[]).filter((function(e){return Array.isArray(e.paramMatchers)&&e.paramMatchers.filter((function(e){return e.paramPath})).length>0})):[],l=c.reduce((function(e,n){return e+n.paramMatchers.filter((function(e){return e.paramPath})).length}),0);if(0===i&&0===l)return"-";var s=r.createElement("div",{style:{maxWidth:280}},i>0&&r.createElement("div",{style:{marginBottom:c.length>0?8:0}},r.createElement("div",{style:{fontWeight:"bold",marginBottom:4,color:"#faad14"}},"接口级条件(",i,"条)"),a.filter((function(e){return e.paramPath})).map((function(e,n){return r.createElement("div",{key:n,style:{fontSize:"12px"}},e.paramPath,": ",e.paramValue,r.createElement("span",{style:{color:"#52c41a",marginLeft:4}},"(","exact"===e.matchType?"精确":"contains"===e.matchType?"包含":"正则",")"))}))),c.length>0&&r.createElement("div",null,r.createElement("div",{style:{fontWeight:"bold",marginBottom:4,color:"#1677ff"}},"响应级规则(共",l,"条)"),c.map((function(e,n){return r.createElement("div",{key:n,style:{marginBottom:4}},r.createElement("div",{style:{fontSize:"12px",color:"#aaa",marginBottom:2}},e.name,":"),e.paramMatchers.filter((function(e){return e.paramPath})).map((function(e,n){return r.createElement("div",{key:n,style:{fontSize:"12px",paddingLeft:8}},e.paramPath,": ",e.paramValue,r.createElement("span",{style:{color:"#52c41a",marginLeft:4}},"(","exact"===e.matchType?"精确":"contains"===e.matchType?"包含":"正则",")"))})))}))));return r.createElement($e.A,{title:s},r.createElement(L.A,{size:4,direction:"vertical",style:{lineHeight:1.4}},i>0&&r.createElement(ve.A,{color:"orange",style:{fontSize:"11px",padding:"0 4px"}},"接口:",i,"条"),l>0&&r.createElement(ve.A,{color:"blue",style:{fontSize:"11px",padding:"0 4px"}},"响应:",l,"条")))}},{title:"请求方法",dataIndex:"httpMethod",key:"httpMethod",width:120,sorter:function(e,n){var t=e.httpMethod||"",r=n.httpMethod||"";return t.localeCompare(r)},sortDirections:["ascend","descend"],render:function(e){var n=Et.find((function(n){return n.value===e}));return n?n.label:e}},{title:"操作",key:"action",width:220,render:function(e,n){return r.createElement("div",{className:"action-buttons"},r.createElement(S.Ay,{type:"text",icon:r.createElement(nn.A,null),onClick:function(){return function(e){if(e){console.log("编辑接口:",e),Fe.resetFields(),V(!1);var n=[],t="";if(e.responses&&Array.isArray(e.responses)&&e.responses.length>0)n=e.responses,t=e.activeResponseId||n[0].id;else if(e.responseContent){var r=ct();n=[{id:r,name:"默认响应",description:"",content:e.responseContent}],t=r}var o=[];e.headers&&"object"===Vt(e.headers)&&(o=Object.entries(e.headers).map((function(e){var n=$t(e,2);return{headerName:n[0],headerValue:n[1]}})));var a=e.group;Array.isArray(a)&&(a=a.length>0?a[0]:void 0),Fe.setFieldsValue({name:e.name,group:a||void 0,pattern:e.urlPattern,proxyType:e.proxyType||"response",statusCode:(e.httpStatus||e.statusCode||200).toString(),contentType:e.contentType||"application/json; charset=utf-8",responses:n,activeResponseId:t,httpMethod:e.httpMethod||e.method||"ALL",targetUrl:e.targetUrl||"",headerItems:o,paramMatchers:e.paramMatchers||[],responseDelay:e.responseDelay?e.responseDelay.toString():"0"}),console.log("编辑接口时设置的分组值:",a),le(t),re(e),M(!0)}else Z.Ay.warning("接口数据不完整,无法编辑")}(n)}}),"response"===n.proxyType&&r.createElement($e.A,{title:"数据管理"},r.createElement(S.Ay,{type:"text",icon:r.createElement(zn.A,null),onClick:function(){K(n),Y(!0)}})),r.createElement($e.A,{title:"复制新增"},r.createElement(S.Ay,{type:"text",icon:r.createElement(Mn.A,null),onClick:function(){return function(e){if(g)if(e){Fe.resetFields();var n=JSON.parse(JSON.stringify(e)),t=[],r="";if(Array.isArray(n.responses)&&n.responses.length>0){var o,a=new Map;t=n.responses.map((function(e){var n=ct();return a.set(e.id,n),{id:n,name:e.name||"未命名响应",description:e.description||"",content:e.content||"{}",paramMatchers:Array.isArray(e.paramMatchers)?e.paramMatchers.map((function(e){return Jt({},e)})):[]}})),r=a.get(n.activeResponseId)||(null===(o=t[0])||void 0===o?void 0:o.id)||""}else if(n.responseContent){var i=ct();t=[{id:i,name:"默认响应",description:"",content:n.responseContent}],r=i}var c=[];n.headers&&"object"===Vt(n.headers)&&(c=Object.entries(n.headers).map((function(e){var n=$t(e,2);return{headerName:n[0],headerValue:n[1]}})));var l=n.group;Array.isArray(l)&&(l=l.length>0?l[0]:void 0),Fe.setFieldsValue({name:"".concat(n.name||"未命名接口"," - 副本"),group:l||void 0,pattern:n.urlPattern,proxyType:n.proxyType||"response",statusCode:(n.httpStatus||n.statusCode||200).toString(),contentType:n.contentType||"application/json; charset=utf-8",responses:t,activeResponseId:r,httpMethod:n.httpMethod||n.method||"ALL",targetUrl:n.targetUrl||"",headerItems:c,paramMatchers:Array.isArray(n.paramMatchers)?n.paramMatchers:[],responseDelay:n.responseDelay?String(n.responseDelay):"0"}),le(r||null),re(null),V(!0),M(!0)}else Z.Ay.warning("接口数据不完整,无法复制");else Z.Ay.warning("请先选择一个功能模块")}(n)}})),r.createElement(Ee.A,{title:"确定要删除此接口吗?",onConfirm:function(){return Ze(n.id)},okText:"确定",cancelText:"取消"},r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null)})))}}],pn=Be.visibleColumns||nr.map((function(e){return e.key})),fn=dn.filter((function(e){return pn.includes(e.key)})),mn=function(){var e=Yt(Wt().mark((function e(n){var t,r,o;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,N(!0),e.next=4,Ce.A.patch("/cgi-bin/interfaces?active=".concat(n),{featureId:g,group:A});case 4:if(!(t=e.sent).data||0!==t.data.code){e.next=10;break}Z.Ay.success('分组 "'.concat(A,'" 中的接口已成功').concat(n?"启用":"禁用")),Ye(),e.next=11;break;case 10:throw new Error((null===(r=t.data)||void 0===r?void 0:r.message)||"批量操作失败");case 11:e.next=17;break;case 13:e.prev=13,e.t0=e.catch(0),console.error("批量操作失败:",e.t0),Z.Ay.error((null===(o=e.t0.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.message)||e.t0.message||"批量操作失败");case 17:return e.prev=17,N(!1),e.finish(17);case 20:case"end":return e.stop()}}),e,null,[[0,13,17,20]])})));return function(n){return e.apply(this,arguments)}}();return r.createElement(fe,null,r.createElement("div",{className:"interface-management-container"},!t.length&&r.createElement(D.A,{message:"未找到功能模块",description:"请先在模拟数据页面创建功能模块,然后再添加接口",type:"warning",showIcon:!0,style:{marginBottom:16}}),!1===(null==We?void 0:We.active)&&r.createElement(D.A,{message:"功能模块已禁用",description:"当前功能模块已被禁用,所有关联接口不会生效。您可以在模拟数据页面启用此功能模块。",type:"warning",showIcon:!0,style:{marginBottom:16}}),r.createElement(he.A,{className:"interface-control-panel"},r.createElement("div",{className:"control-panel-header"},r.createElement("div",{className:"control-left"},r.createElement("div",{className:"feature-selector"},r.createElement("span",null,"功能模块:"),r.createElement(Qe.A,{value:g,onChange:function(e){v(e),localStorage.setItem("selectedFeatureId",e),Ve({current:1})},style:{width:200},placeholder:"选择功能模块",loading:p,dropdownMatchSelectWidth:!1},(t||[]).map((function(e){return r.createElement(Qt,{key:e.id,value:e.id},e.name,!1===e.active&&r.createElement("span",{style:{color:"#ff4d4f",marginLeft:8}},"(已禁用)"))})))),r.createElement(er,{ref:se,placeholder:"搜索接口名称或URL",onSearch:function(e){pe(e)},value:de,onChange:function(e){return pe(e.target.value)},style:{width:220,marginLeft:12},enterButton:r.createElement(_n.A,null),allowClear:!0}),r.createElement(Cn.A,{overlay:r.createElement(I.A,{selectedKeys:A?[A]:["ALL_GROUPS"],onClick:function(e){var n=e.key;O("ALL_GROUPS"===n||n===A?null:n)}},r.createElement(I.A.Item,{key:"ALL_GROUPS"},"全部分组"),w.map((function(e){return r.createElement(I.A.Item,{key:e},e," (",c.filter((function(n){return n.group===e})).length,")")}))),trigger:["click"],disabled:0===w.length},r.createElement(S.Ay,{style:{marginLeft:12},icon:r.createElement(Rn.A,null)},A?"分组: ".concat(A):"分组筛选",r.createElement(Fn.A,null)))),r.createElement("div",{className:"control-right"},r.createElement(L.A,null,r.createElement($e.A,{title:"刷新数据"},r.createElement(S.Ay,{icon:r.createElement(je.A,null),onClick:function(){Ye(),Z.Ay.success("数据已刷新")},loading:h})),r.createElement(S.Ay,{type:"primary",icon:r.createElement(cn.A,null),onClick:Je,disabled:!g||!1===(null==We?void 0:We.active)},"添加接口")))),r.createElement("div",{className:"control-panel-stats"},r.createElement("div",{className:"stats-left"},r.createElement(L.A,{size:"large"},A&&r.createElement("span",{className:"stat-item"},r.createElement("span",{className:"stat-label"},"当前分组:"),r.createElement(ve.A,{color:"blue"},A)),r.createElement("span",{className:"stat-item"},de?r.createElement(Ke.A,{count:'搜索"'.concat(de,'" - ').concat(sn.length,"个结果"),style:{backgroundColor:"#108ee9"}}):r.createElement(Ke.A,{count:"共 ".concat(sn.length," 个接口"),style:{backgroundColor:"#52c41a"}})))),r.createElement("div",{className:"stats-right"},ye.length>0&&r.createElement(L.A,null,r.createElement("span",{className:"selected-count"},"已选择 ",ye.length," 项"),r.createElement(Ee.A,{title:"确定要批量启用选中的接口吗?",onConfirm:function(){return un(!0)},okText:"确定",cancelText:"取消"},r.createElement(S.Ay,{size:"small",type:"primary"},"批量启用")),r.createElement(Ee.A,{title:"确定要批量禁用选中的接口吗?",onConfirm:function(){return un(!1)},okText:"确定",cancelText:"取消"},r.createElement(S.Ay,{size:"small",danger:!0},"批量禁用"))),A&&r.createElement(L.A,{style:{marginLeft:ye.length>0?16:0}},r.createElement(Ee.A,{title:'确定要启用分组 "'.concat(A,'" 中的所有接口吗?'),onConfirm:function(){return mn(!0)},okText:"确定",cancelText:"取消"},r.createElement(S.Ay,{type:"primary",size:"small",loading:C},"分组启用")),r.createElement(Ee.A,{title:'确定要禁用分组 "'.concat(A,'" 中的所有接口吗?'),onConfirm:function(){return mn(!1)},okText:"确定",cancelText:"取消"},r.createElement(S.Ay,{danger:!0,size:"small",loading:C},"分组禁用"))),r.createElement(Nn.A,{title:"自定义显示列",trigger:"click",open:Q,onOpenChange:function(e){ee(e)},content:r.createElement("div",{style:{width:280}},r.createElement("div",{style:{marginBottom:12}},r.createElement(L.A,null,r.createElement(S.Ay,{size:"small",onClick:function(){var e=nr.map((function(e){return e.key}));Ve({visibleColumns:e})}},"全选"),r.createElement(S.Ay,{size:"small",onClick:function(){var e=nr.map((function(e){return e.key}));Ve({visibleColumns:e})}},"重置"))),r.createElement(be.A.Group,{value:Be.visibleColumns||nr.map((function(e){return e.key})),onChange:function(e){var n=nr.filter((function(e){return e.required})).map((function(e){return e.key})),t=Gt(new Set([].concat(Gt(n),Gt(e))));Ve({visibleColumns:t})},style:{width:"100%"}},r.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"8px"}},nr.map((function(e){return r.createElement(be.A,{key:e.key,value:e.key,disabled:e.required,style:{width:"100%",color:e.required?"#999":void 0}},e.title,e.required&&r.createElement("span",{style:{color:"#999",fontSize:"12px",marginLeft:4}},"(必须)"))})))))},r.createElement($e.A,{title:"自定义表格显示列"},r.createElement(S.Ay,{icon:r.createElement(P.A,null),type:"text",size:"small",className:"inline-column-settings-btn",style:{marginLeft:ye.length>0||A?16:0}},"列设置")))))),r.createElement(he.A,{className:"list-container-card",bordered:!1,bodyStyle:{padding:0}},r.createElement("div",{className:"interface-list-container"},r.createElement(X.A,{columns:fn,dataSource:sn,rowKey:"id",loading:h,onChange:function(e,n,t){console.log("表格变化:",{pagination:e,filters:n,sorter:t});var r={sortField:t.field||null,sortOrder:t.order||null,current:e.current,pageSize:e.pageSize};Ve(r)},rowSelection:{selectedRowKeys:ye,onChange:function(e){we(e)}},size:"middle",pagination:{current:Be.current,pageSize:Be.pageSize,showSizeChanger:!0,showQuickJumper:!0,showTotal:function(e,n){return"共 ".concat(e," 个接口,显示第 ").concat(n[0],"-").concat(n[1]," 个")},pageSizeOptions:["10","20","50","100"],size:"default"},locale:{emptyText:"暂无接口配置"},sortDirections:["ascend","descend"],className:"interface-table"}))),"drawer"===Oe?r.createElement(Tn.A,{title:r.createElement("div",{style:{fontSize:"18px",fontWeight:600,color:"#262626",display:"flex",alignItems:"center",gap:"8px"}},r.createElement("span",null,te?"编辑接口":G?"复制新增接口":"添加接口"),r.createElement(Ke.A,{count:"配置向导",style:{backgroundColor:"#f0f9ff",color:"#1677ff",fontSize:"11px",fontWeight:"normal"}})),placement:"right",width:1040,open:z,onClose:on,destroyOnClose:!0,bodyStyle:{padding:"0",overflowY:"auto"},footer:r.createElement("div",{style:{textAlign:"right"}},r.createElement(L.A,null,r.createElement(S.Ay,{onClick:on},"取消"),r.createElement(S.Ay,{type:"primary",onClick:rn},te?"保存":"创建"))),className:"interface-drawer"},r.createElement("div",{style:{padding:"24px"}},r.createElement(ge.A,{form:Fe,layout:"vertical",initialValues:{name:"",group:"",pattern:"",proxyType:"response",statusCode:"200",contentType:"application/json; charset=utf-8",responses:[],httpMethod:"ALL",targetUrl:"",headerItems:[],paramMatchers:[],responseDelay:"0"}},r.createElement(Pn.A,{defaultActiveKey:te&&"response"===te.proxyType?["3"]:["1","2","3"],style:{marginBottom:"16px"},ghost:!0},r.createElement(Pn.A.Panel,{header:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Ke.A,{count:"1",style:{backgroundColor:"#1677ff"}}),r.createElement("span",null,"基础信息")),key:"1"},r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"name",label:"接口名称",rules:[{required:!0,message:"请输入接口名称"}]},r.createElement(xe.A,{placeholder:"请输入接口名称"}))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"group",label:"分组",tooltip:"为接口设置分组,便于管理和批量操作"},r.createElement(Qe.A,{placeholder:"选择或创建分组",showSearch:!0,allowClear:!0,style:{width:"100%"},mode:"tags",maxTagCount:"responsive",maxTagTextLength:10,onChange:function(e){if(Array.isArray(e)&&e.length>0){var n=""===e[0]?void 0:e[0];Fe.setFieldsValue({group:n})}},onInputKeyDown:function(e){"Enter"===e.key&&e.stopPropagation()}},Array.from(new Set(c.map((function(e){return e.group})).filter(Boolean))).map((function(e){return r.createElement(Qt,{key:e,value:e},e)}))))))),r.createElement(Pn.A.Panel,{header:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Ke.A,{count:"2",style:{backgroundColor:"#1677ff"}}),r.createElement("span",null,"URL配置")),key:"2"},r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"pattern",label:"URL匹配规则",rules:[{required:!0,message:"请输入URL匹配规则"},function(e){var n=e.getFieldValue;return{validator:function(e,t){var r=n("proxyType");if(!t)return Promise.resolve();if("url_redirect"===r)try{return new URL(t),Promise.resolve()}catch(e){return Promise.reject(new Error("URL重定向模式下,URL匹配规则必须是完整的URL"))}return"redirect"===r?t.startsWith("http://")||t.startsWith("https://")?Promise.resolve():Promise.reject(new Error("重定向模式下,URL匹配规则必须以http://或https://开头")):Promise.resolve()}}}]},r.createElement(xe.A,{placeholder:"根据选择的处理方式输入相应格式的URL"}))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"proxyType",label:"处理方式",rules:[{required:!0,message:"请选择处理方式"}]},r.createElement(Qe.A,{onChange:function(){return Fe.setFieldsValue({pattern:""})}},xt.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)})))))),r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"httpMethod",label:"请求方法",rules:[{required:!0,message:"请选择请求方法"}]},r.createElement(Qe.A,null,Et.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)}))))),r.createElement("div",{style:{flex:1}}))),r.createElement(Pn.A.Panel,{header:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Ke.A,{count:"3",style:{backgroundColor:"#1677ff"}}),r.createElement("span",null,"高级配置")),key:"3"},r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:function(e,n){return e.proxyType!==n.proxyType}},(function(e){var n=e.getFieldValue,t=(e.setFieldsValue,n("proxyType"));return"response"===t?r.createElement(r.Fragment,null,r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"statusCode",label:"状态码",rules:[{required:!0,message:"请选择状态码"}]},r.createElement(Qe.A,null,wt.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)}))))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"contentType",label:"内容类型",rules:[{required:!0,message:"请选择内容类型"}]},r.createElement(Qe.A,null,vt.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)}))))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"responseDelay",label:"延迟响应(毫秒)",rules:[{pattern:/^\d*$/,message:"请输入有效的数字"}]},r.createElement(xe.A,{placeholder:"例如:500"})))),Pe&&r.createElement(ge.A.Item,{label:"接口匹配条件",tooltip:"接口级入参匹配:用于区分同一URL下的不同接口定义。可为每条规则指定响应内容,匹配时直接返回该响应;不指定则走响应级匹配逻辑。"},r.createElement(ge.A.List,{name:"paramMatchers"},(function(e,n){var t=n.add,o=n.remove;return r.createElement(r.Fragment,null,e.map((function(e){var n=e.key,t=e.name,a=Bt(e,_t);return r.createElement("div",{key:n,style:{display:"flex",gap:"8px",alignItems:"center",marginBottom:"8px"}},r.createElement(ge.A.Item,Ut({},a,{name:[t,"paramPath"],rules:[{required:!0,message:"请输入参数路径"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"参数路径(如:userId 或 data.user.id)"})),r.createElement(ge.A.Item,Ut({},a,{name:[t,"paramValue"],rules:[{required:!0,message:"请输入期望值"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"期望值(如:123 或 admin)"})),r.createElement(ge.A.Item,Ut({},a,{name:[t,"matchType"],style:{width:90,margin:0},initialValue:"exact"}),r.createElement(Qe.A,null,r.createElement(Qt,{value:"exact"},"精确匹配"),r.createElement(Qt,{value:"contains"},"包含"),r.createElement(Qt,{value:"regex"},"正则"))),r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:!0},(function(e){var n=(0,e.getFieldValue)("responses")||[];return r.createElement(ge.A.Item,Ut({},a,{name:[t,"targetResponseId"],style:{width:130,margin:0}}),r.createElement(Qe.A,{allowClear:!0,placeholder:"指定响应(可选)"},n.filter((function(e){return e&&e.id})).map((function(e){return r.createElement(Qt,{key:e.id,value:e.id},e.name||"未命名")}))))})),r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null),onClick:function(){return o(t)}}))})),r.createElement(S.Ay,{type:"dashed",onClick:function(){return t()},icon:r.createElement(cn.A,null),style:{width:"100%"}},"添加参数匹配规则"))}))),r.createElement(ge.A.Item,{name:"responses",initialValue:[],hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{name:"activeResponseId",hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:!0},(function(e){var n=e.getFieldValue,t=n("responses")||[],o=n("activeResponseId");if(!Array.isArray(t))try{t=JSON.parse(t)}catch(e){t=[]}return r.createElement(gt,{form:Fe,responses:t,activeResponseId:o,onPreview:an})}))):"redirect"===t||"url_redirect"===t?r.createElement(r.Fragment,null,r.createElement(ge.A.Item,{name:"targetUrl",label:"重定向目标URL",rules:[{required:!0,message:"请输入重定向目标URL"},{validator:function(e,n){if(!n)return Promise.resolve();try{return new URL(n),Promise.resolve()}catch(e){return Promise.reject(new Error("请输入有效的URL格式"))}}}],tooltip:"重定向的目标URL,必须是完整的URL格式"},r.createElement(xe.A,{placeholder:"例如:https://api.example.com/users"})),r.createElement(ge.A.Item,{label:"自定义请求头"},r.createElement(ge.A.List,{name:"headerItems"},(function(e,n){var t=n.add,o=n.remove;return r.createElement(r.Fragment,null,e.map((function(e){var n=e.key,t=e.name,a=Bt(e,Rt);return r.createElement("div",{key:n,style:{display:"flex",gap:"8px",alignItems:"center",marginBottom:"8px"}},r.createElement(ge.A.Item,Ut({},a,{name:[t,"headerName"],rules:[{required:!0,message:"请输入请求头名称"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"请求头名称(如:Authorization)"})),r.createElement(ge.A.Item,Ut({},a,{name:[t,"headerValue"],rules:[{required:!0,message:"请输入请求头值"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"请求头值(如:Bearer token123)"})),r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null),onClick:function(){return o(t)}}))})),r.createElement(S.Ay,{type:"dashed",onClick:function(){return t()},icon:r.createElement(cn.A,null),style:{width:"100%",marginTop:"8px"}},"添加请求头"))})))):null}))))))):r.createElement(R.A,{title:r.createElement("div",{style:{fontSize:"18px",fontWeight:600,color:"#262626",display:"flex",alignItems:"center",gap:"8px"}},r.createElement("span",null,te?"编辑接口":G?"复制新增接口":"添加接口"),r.createElement(Ke.A,{count:"配置向导",style:{backgroundColor:"#f0f9ff",color:"#1677ff",fontSize:"11px",fontWeight:"normal"}})),open:z,onOk:rn,onCancel:on,width:1200,destroyOnClose:!0,okText:te?"保存":"创建",cancelText:"取消",bodyStyle:{maxHeight:"75vh",overflow:"auto",padding:"0"},className:"interface-modal"},r.createElement("div",{style:{padding:"24px"}},r.createElement(ge.A,{form:Fe,layout:"vertical",initialValues:{name:"",group:"",pattern:"",proxyType:"response",statusCode:"200",contentType:"application/json; charset=utf-8",responses:[],httpMethod:"ALL",targetUrl:"",headerItems:[],paramMatchers:[],responseDelay:"0"}},r.createElement(Pn.A,{defaultActiveKey:te&&"response"===te.proxyType?["3"]:["1","2","3"],style:{marginBottom:"16px"},ghost:!0},r.createElement(Pn.A.Panel,{header:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Ke.A,{count:"1",style:{backgroundColor:"#1677ff"}}),r.createElement("span",null,"基础信息")),key:"1"},r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"name",label:"接口名称",rules:[{required:!0,message:"请输入接口名称"}]},r.createElement(xe.A,{placeholder:"请输入接口名称"}))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"group",label:"分组",tooltip:"为接口设置分组,便于管理和批量操作"},r.createElement(Qe.A,{placeholder:"选择或创建分组",showSearch:!0,allowClear:!0,style:{width:"100%"},mode:"tags",maxTagCount:"responsive",maxTagTextLength:10,onChange:function(e){if(Array.isArray(e)&&e.length>0){var n=""===e[0]?void 0:e[0];Fe.setFieldsValue({group:n})}},onInputKeyDown:function(e){"Enter"===e.key&&e.stopPropagation()}},Array.from(new Set(c.map((function(e){return e.group})).filter(Boolean))).map((function(e){return r.createElement(Qt,{key:e,value:e},e)}))))))),r.createElement(Pn.A.Panel,{header:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Ke.A,{count:"2",style:{backgroundColor:"#1677ff"}}),r.createElement("span",null,"URL配置")),key:"2"},r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"pattern",label:"URL匹配规则",rules:[{required:!0,message:"请输入URL匹配规则"},function(e){var n=e.getFieldValue;return{validator:function(e,t){var r=n("proxyType");if(!t)return Promise.resolve();if("url_redirect"===r)try{return new URL(t),Promise.resolve()}catch(e){return Promise.reject(new Error("URL重定向模式下,URL匹配规则必须是完整的URL(包括http://或https://)"))}if("redirect"===r)return t.startsWith("http://")||t.startsWith("https://")?Promise.resolve():Promise.reject(new Error("重定向模式下,URL匹配规则必须以http://或https://开头"));if("response"===r){if(t.startsWith("/")&&t.endsWith("/"))try{return new RegExp(t.slice(1,-1)),Promise.resolve()}catch(e){return Promise.reject(new Error("无效的正则表达式格式"))}return t.includes("*")?/^[a-zA-Z0-9\-_/.*]+$/.test(t)?Promise.resolve():Promise.reject(new Error("通配符URL格式不正确")):/^[a-zA-Z0-9\-_/]+$/.test(t)?Promise.resolve():Promise.reject(new Error("URL路径格式不正确"))}return Promise.resolve()}}}],tooltip:{title:r.createElement(r.Fragment,null,r.createElement("div",null,"不同处理方式下URL匹配规则要求:"),r.createElement("ul",{style:{margin:"5px 0 0 15px",padding:0}},r.createElement("li",null,r.createElement("b",null,"模拟响应:")," 支持路径格式如 /api/users,通配符如 /api/*,正则如 /\\/api\\/\\d+/"),r.createElement("li",null,r.createElement("b",null,"重定向:")," 必须以http://或https://开头,例如:https://example.com/api"),r.createElement("li",null,r.createElement("b",null,"URL重定向:")," 必须是完整URL,包括http://或https://,例如:https://example.com/api/users"))),overlayStyle:{maxWidth:"450px"}}},r.createElement(xe.A,{placeholder:"根据选择的处理方式输入相应格式的URL"}))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"proxyType",label:"处理方式",rules:[{required:!0,message:"请选择处理方式"}],tooltip:{title:r.createElement(r.Fragment,null,r.createElement("div",null,"不同处理方式的规则说明:"),r.createElement("ul",{style:{margin:"5px 0 0 15px",padding:0}},r.createElement("li",null,r.createElement("b",null,"模拟响应:")," 返回您定义的响应内容"),r.createElement("li",null,r.createElement("b",null,"重定向:")," 将请求重定向到其他URL,URL匹配规则必须以http://或https://开头"),r.createElement("li",null,r.createElement("b",null,"URL重定向:")," 完全匹配URL时重定向,URL匹配规则必须是完整URL"))),overlayStyle:{maxWidth:"450px"}}},r.createElement(Qe.A,{onChange:function(e){Fe.setFieldsValue({pattern:""});var n=document.querySelector('input[placeholder="根据选择的处理方式输入相应格式的URL"]');n&&("response"===e?n.placeholder="例如:/api/users,/api/users/*,/api\\/users\\/\\d+/":"redirect"===e?n.placeholder="例如:https://example.com/api":"url_redirect"===e&&(n.placeholder="例如:https://example.com/api/users"))}},xt.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)})))))),r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"httpMethod",label:"请求方法",rules:[{required:!0,message:"请选择请求方法"}]},r.createElement(Qe.A,null,Et.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)}))))),r.createElement("div",{style:{flex:1}}))),r.createElement(Pn.A.Panel,{header:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Ke.A,{count:"3",style:{backgroundColor:"#1677ff"}}),r.createElement("span",null,"高级配置")),key:"3"},r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:function(e,n){return e.proxyType!==n.proxyType}},(function(e){var n=e.getFieldValue,t=(e.setFieldsValue,n("proxyType"));return"response"===t?r.createElement(r.Fragment,null,r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"statusCode",label:"状态码",rules:[{required:!0,message:"请选择状态码"}]},r.createElement(Qe.A,null,wt.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)}))))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"contentType",label:"内容类型",rules:[{required:!0,message:"请选择内容类型"}]},r.createElement(Qe.A,null,vt.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)}))))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"responseDelay",label:"延迟响应(毫秒)",tooltip:"设置接口响应延迟时间,单位为毫秒",rules:[{pattern:/^\d*$/,message:"请输入有效的数字"},{validator:function(e,n){return!n||parseInt(n,10)<=6e4?Promise.resolve():Promise.reject(new Error("延迟时间不能超过60秒(60000毫秒)"))}}]},r.createElement(xe.A,{placeholder:"例如:500"})))),Pe&&r.createElement(ge.A.Item,{label:"接口匹配条件",tooltip:"接口级入参匹配:用于区分同一URL下的不同接口定义。可为每条规则指定响应内容,匹配时直接返回该响应;不指定则走响应级匹配逻辑。支持嵌套属性路径,如:a.b.c"},r.createElement(ge.A.List,{name:"paramMatchers"},(function(e,n){var t=n.add,o=n.remove;return r.createElement(r.Fragment,null,e.map((function(e){var n=e.key,t=e.name,a=Bt(e,Ft);return r.createElement("div",{key:n,style:{display:"flex",gap:"8px",alignItems:"center",marginBottom:"8px"}},r.createElement(ge.A.Item,Ut({},a,{name:[t,"paramPath"],rules:[{required:!0,message:"请输入参数路径"},{pattern:/^[a-zA-Z_$][a-zA-Z0-9_$.]*$/,message:"请输入有效的参数路径,如:userId 或 data.user.id"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"参数路径(如:userId 或 data.user.id)"})),r.createElement(ge.A.Item,Ut({},a,{name:[t,"paramValue"],rules:[{required:!0,message:"请输入期望值"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"期望值(如:123 或 admin)"})),r.createElement(ge.A.Item,Ut({},a,{name:[t,"matchType"],style:{width:100,margin:0},initialValue:"exact"}),r.createElement(Qe.A,{placeholder:"匹配类型"},r.createElement(Qt,{value:"exact"},"精确匹配"),r.createElement(Qt,{value:"contains"},"包含"),r.createElement(Qt,{value:"regex"},"正则"))),r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:!0},(function(e){var n=(0,e.getFieldValue)("responses")||[];return r.createElement(ge.A.Item,Ut({},a,{name:[t,"targetResponseId"],style:{width:140,margin:0}}),r.createElement(Qe.A,{allowClear:!0,placeholder:"指定响应(可选)"},n.filter((function(e){return e&&e.id})).map((function(e){return r.createElement(Qt,{key:e.id,value:e.id},e.name||"未命名")}))))})),r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null),onClick:function(){return o(t)}}))})),r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginTop:"8px"}},r.createElement(S.Ay,{type:"dashed",onClick:function(){return t()},icon:r.createElement(cn.A,null),style:{flex:1}},"添加参数匹配规则"),r.createElement(Nn.A,{content:r.createElement("div",{style:{maxWidth:"300px"}},r.createElement("div",{style:{marginBottom:"8px",fontWeight:"bold"}},"匹配规则说明:"),r.createElement("div",{style:{lineHeight:"1.6"}},r.createElement("div",null,"• ",r.createElement("strong",null,"精确匹配"),":参数值完全相等"),r.createElement("div",null,"• ",r.createElement("strong",null,"包含"),":参数值包含指定内容"),r.createElement("div",null,"• ",r.createElement("strong",null,"正则"),":参数值符合正则表达式"),r.createElement("div",null,"• ",r.createElement("strong",null,"嵌套路径"),":使用点号分隔,如 data.user.id"))),title:"参数匹配规则",trigger:"click",placement:"top"},r.createElement(S.Ay,{type:"text",icon:r.createElement(Dn.A,null),style:{color:"#999",padding:"4px"},size:"small"}))))}))),r.createElement(ge.A.Item,{name:"responses",initialValue:[],hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{name:"activeResponseId",hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:!0},(function(e){var n=e.getFieldValue,t=n("responses")||[],o=n("activeResponseId");if(!Array.isArray(t))try{"string"==typeof t&&(t=JSON.parse(t))}catch(e){t=[]}return r.createElement(gt,{form:Fe,responses:t,activeResponseId:o,onPreview:an})}))):"redirect"===t||"url_redirect"===t?r.createElement(r.Fragment,null,r.createElement(ge.A.Item,{name:"targetUrl",label:"重定向目标URL",rules:[{required:!0,message:"请输入重定向目标URL"},{validator:function(e,n){if(!n)return Promise.resolve();try{return new URL(n),Promise.resolve()}catch(e){return Promise.reject(new Error("请输入有效的URL格式(包括http://或https://)"))}}}],tooltip:"重定向的目标URL,必须是完整的URL格式"},r.createElement(xe.A,{placeholder:"例如:https://api.example.com/users"})),r.createElement(ge.A.Item,{label:"自定义请求头"},r.createElement(ge.A.List,{name:"headerItems"},(function(e,n){var t=n.add,o=n.remove;return r.createElement(r.Fragment,null,e.map((function(e){var n=e.key,t=e.name,a=Bt(e,Dt);return r.createElement("div",{key:n,style:{display:"flex",gap:"8px",alignItems:"center",marginBottom:"8px"}},r.createElement(ge.A.Item,Ut({},a,{name:[t,"headerName"],rules:[{required:!0,message:"请输入请求头名称"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"请求头名称(如:Authorization)"})),r.createElement(ge.A.Item,Ut({},a,{name:[t,"headerValue"],rules:[{required:!0,message:"请输入请求头值"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"请求头值(如:Bearer token123)"})),r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null),onClick:function(){return o(t)}}))})),r.createElement(S.Ay,{type:"dashed",onClick:function(){return t()},icon:r.createElement(cn.A,null),style:{width:"100%",marginTop:"8px"}},"添加请求头"))})))):null}))))))),r.createElement(kt,{visible:F,onCancel:function(){return U(!1)},previewContent:ae}),"drawer"===Se?r.createElement(jt,{visible:q,onCancel:function(){Y(!1),K(null)},interfaceItem:J,onSaved:function(){Ye()}}):r.createElement(Mt,{visible:q,onCancel:function(){Y(!1),K(null)},interfaceItem:J,onSaved:function(){Ye()}})))};var rr=t(1019),or=t(770),ar=t(9218),ir={};function cr(e){return cr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},cr(e)}function lr(){lr=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==cr(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(cr(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function sr(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function ur(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||function(e,n){if(e){if("string"==typeof e)return dr(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?dr(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function dr(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}ir.styleTagTransform=y(),ir.setAttributes=f(),ir.insert=d().bind(null,"head"),ir.domAPI=s(),ir.insertStyleElement=h(),c()(ar.A,ir),ar.A&&ar.A.locals&&ar.A.locals;var pr=me.A.Text,fr=function(e){Ce.A.put("/cgi-bin/settings",e).catch((function(){}))};const mr=function(){var e=ur((0,r.useState)("modal"),2),n=e[0],t=e[1],o=ur((0,r.useState)("modal"),2),a=o[0],i=o[1],c=ur((0,r.useState)(!0),2),l=c[0],s=c[1],u=ur((0,r.useState)(!0),2),d=u[0],p=u[1],f=ur((0,r.useState)(!1),2),m=f[0],h=f[1],b=ur((0,r.useState)(!1),2),y=b[0],g=b[1],v=ur((0,r.useState)("light"),2),x=v[0],w=v[1];(0,r.useEffect)((function(){var e=localStorage.getItem("dataManagementDisplayMode");e&&t(e);var n=localStorage.getItem("interfaceFormDisplayMode");n&&i(n),Ce.A.get("/cgi-bin/settings").then((function(e){var n=e.data,t=!1!==n.interfaceParamMatcherEnabled,r=!1!==n.responseParamMatcherEnabled;s(t),p(r),h(1==n.webDavSyncEnabled),localStorage.setItem("interfaceParamMatcherEnabled",String(t)),localStorage.setItem("responseParamMatcherEnabled",String(r)),window.dispatchEvent(new Event("storage"))})).catch((function(){var e=localStorage.getItem("interfaceParamMatcherEnabled");null!==e&&s("false"!==e);var n=localStorage.getItem("responseParamMatcherEnabled");null!==n&&p("false"!==n)}));var r=localStorage.getItem("theme");if(r)w(r);else{var o=localStorage.getItem("cyberTheme"),a="false"===o?"light":"true"===o?"cyber":"light";w(a),localStorage.setItem("theme",a)}}),[]);var E=function(){var e,n=(e=lr().mark((function e(n){var t;return lr().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=m,h(n),g(!0),e.prev=3,e.next=6,Ce.A.put("/cgi-bin/settings",{webDavSyncEnabled:n});case 6:Z.Ay.success("WebDAV 同步功能已".concat(n?"开启":"关闭")),e.next=13;break;case 9:e.prev=9,e.t0=e.catch(3),h(t),Z.Ay.error("保存 WebDAV 同步设置失败");case 13:return e.prev=13,g(!1),e.finish(13);case 16:case"end":return e.stop()}}),e,null,[[3,9,13,16]])})),function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){sr(a,r,o,i,c,"next",e)}function c(e){sr(a,r,o,i,c,"throw",e)}i(void 0)}))});return function(e){return n.apply(this,arguments)}}(),k=function(e){"interface"!==e?R.A.info({title:"响应入参匹配规则说明",width:560,content:r.createElement("div",null,r.createElement("p",null,"用于在同一接口内,根据请求参数选择具体响应(响应级匹配)。"),r.createElement("p",null,"执行顺序与优先级:"),r.createElement("ul",null,r.createElement("li",null,"仅在“接口入参匹配”未直接确定目标响应时才会执行。"),r.createElement("li",null,"按响应配置顺序匹配,命中第一条规则即返回对应响应。"),r.createElement("li",null,"支持精确匹配、包含匹配、正则匹配。"),r.createElement("li",null,"若本开关关闭,则跳过响应级匹配,直接使用默认响应。")),r.createElement("p",null,"兜底逻辑:"),r.createElement("ul",null,r.createElement("li",null,"开启但未命中任一规则时,使用默认响应。"),r.createElement("li",null,"与接口级都关闭时,请求将直接返回默认响应。")))}):R.A.info({title:"接口入参匹配规则说明",width:560,content:r.createElement("div",null,r.createElement("p",null,"用于区分同一 URL 下的不同接口定义(接口级匹配)。"),r.createElement("p",null,"执行顺序与优先级:"),r.createElement("ul",null,r.createElement("li",null,"先进行 URL 匹配,命中多个接口时,按接口匹配条件顺序查找第一条命中规则。"),r.createElement("li",null,"若命中规则且配置了目标响应,则直接返回该响应(最高优先级)。"),r.createElement("li",null,"若命中规则但未配置目标响应,则进入“响应入参匹配”阶段继续判断。"),r.createElement("li",null,"若本开关关闭,则跳过接口级匹配,直接走“响应入参匹配”(若开启)。")),r.createElement("p",null,"兜底逻辑:"),r.createElement("ul",null,r.createElement("li",null,"若最终没有任何入参规则命中,系统返回默认响应。"),r.createElement("li",null,"支持嵌套参数路径,例如:data.user.id。")))})};return r.createElement(fe,null,r.createElement(rr.A,null),r.createElement("div",{className:"page-container"},r.createElement("div",{className:"page-title-bar"},r.createElement("div",null,r.createElement("h1",{className:"page-title"},"系统设置"),r.createElement("div",{className:"page-description"},"配置插件的全局设置项和界面选项"))),r.createElement(he.A,{title:"界面设置",className:"settings-card"},r.createElement("div",{className:"settings-item"},r.createElement("div",{className:"settings-item-header"},r.createElement("div",null,r.createElement("div",{className:"settings-item-title"},"数据管理交互"),r.createElement("div",{className:"settings-item-description"},"选择数据管理的显示方式")),r.createElement(L.A,null,r.createElement(pr,{type:"secondary"},"drawer"===n?"抽屉模式":"弹窗模式"),r.createElement(Xe.A,{checked:"drawer"===n,onChange:function(e){var n=e?"drawer":"modal";t(n),localStorage.setItem("dataManagementDisplayMode",n),window.dispatchEvent(new Event("storage"))}})))),r.createElement("div",{className:"settings-item"},r.createElement("div",{className:"settings-item-header"},r.createElement("div",null,r.createElement("div",{className:"settings-item-title"},"接口表单交互"),r.createElement("div",{className:"settings-item-description"},"选择添加/编辑接口的显示方式")),r.createElement(L.A,null,r.createElement(pr,{type:"secondary"},"drawer"===a?"抽屉模式":"弹窗模式"),r.createElement(Xe.A,{checked:"drawer"===a,onChange:function(e){var n=e?"drawer":"modal";i(n),localStorage.setItem("interfaceFormDisplayMode",n),window.dispatchEvent(new Event("storage"))}})))),r.createElement("div",{className:"settings-item"},r.createElement("div",{className:"settings-item-header"},r.createElement("div",null,r.createElement("div",{className:"settings-item-title"},"接口入参匹配",r.createElement(S.Ay,{type:"text",size:"small",className:"settings-help-icon",icon:r.createElement(Dn.A,null),onClick:function(){return k("interface")}})),r.createElement("div",{className:"settings-item-description"},"是否在接口编辑表单中显示「接口匹配条件」配置区域")),r.createElement(L.A,null,r.createElement(pr,{type:"secondary"},l?"已开启":"已关闭"),r.createElement(Xe.A,{checked:l,onChange:function(e){s(e),localStorage.setItem("interfaceParamMatcherEnabled",String(e)),fr({interfaceParamMatcherEnabled:e}),window.dispatchEvent(new Event("storage"))}})))),r.createElement("div",{className:"settings-item"},r.createElement("div",{className:"settings-item-header"},r.createElement("div",null,r.createElement("div",{className:"settings-item-title"},"响应入参匹配",r.createElement(S.Ay,{type:"text",size:"small",className:"settings-help-icon",icon:r.createElement(Dn.A,null),onClick:function(){return k("response")}})),r.createElement("div",{className:"settings-item-description"},"是否在响应内容编辑器中显示「入参匹配规则」配置区域")),r.createElement(L.A,null,r.createElement(pr,{type:"secondary"},d?"已开启":"已关闭"),r.createElement(Xe.A,{checked:d,onChange:function(e){p(e),localStorage.setItem("responseParamMatcherEnabled",String(e)),fr({responseParamMatcherEnabled:e}),window.dispatchEvent(new Event("storage"))}}))))),r.createElement(he.A,{title:"同步设置",className:"settings-card",style:{marginTop:24}},r.createElement("div",{className:"settings-item"},r.createElement("div",{className:"settings-item-header"},r.createElement("div",null,r.createElement("div",{className:"settings-item-title"},r.createElement(ke.A,{style:{marginRight:8}}),"WebDAV 同步"),r.createElement("div",{className:"settings-item-description"},"开启后,在功能模块管理页显示 WebDAV 入口;关闭不会清除已保存的连接配置")),r.createElement(L.A,null,r.createElement(pr,{type:"secondary"},m?"已开启":"已关闭"),r.createElement(Xe.A,{checked:m,loading:y,onChange:E}))))),r.createElement(he.A,{title:"主题设置",className:"settings-card",style:{marginTop:24}},r.createElement("div",{className:"settings-item"},r.createElement("div",{className:"settings-item-header"},r.createElement("div",null,r.createElement("div",{className:"settings-item-title"},"界面主题"),r.createElement("div",{className:"settings-item-description"},"选择插件的界面主题风格"))),r.createElement(or.Ay.Group,{value:x,onChange:function(e){var n=e.target.value;w(n),localStorage.setItem("theme",n),localStorage.setItem("cyberTheme",String("cyber"===n)),window.dispatchEvent(new Event("storage")),Z.Ay.success("".concat({light:"经典亮色",cyber:"赛博朋克",earth:"大地色系"}[n],"主题已开启"))},style:{marginTop:12}},r.createElement(L.A,{direction:"vertical"},r.createElement(or.Ay,{value:"light"},r.createElement(L.A,null,r.createElement("span",{style:{display:"inline-block",width:16,height:16,borderRadius:4,background:"#1890ff",verticalAlign:"middle",marginRight:4}}),"经典亮色 — Ant Design 默认亮色风格")),r.createElement(or.Ay,{value:"cyber"},r.createElement(L.A,null,r.createElement("span",{style:{display:"inline-block",width:16,height:16,borderRadius:4,background:"linear-gradient(135deg, #00f0ff, #00ff41)",verticalAlign:"middle",marginRight:4}}),"赛博朋克 — 深色霓虹科技风格")),r.createElement(or.Ay,{value:"earth"},r.createElement(L.A,null,r.createElement("span",{style:{display:"inline-block",width:16,height:16,borderRadius:4,background:"linear-gradient(135deg, #b87333, #d4a017)",verticalAlign:"middle",marginRight:4}}),"大地色系 — 暖色调自然舒适风格"))))))))};var hr=t(6544),br=t(6601),yr=t(8553),gr=t(4353),vr=t.n(gr);function xr(e){return xr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},xr(e)}function wr(){wr=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==xr(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(xr(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function Er(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function kr(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){Er(a,r,o,i,c,"next",e)}function c(e){Er(a,r,o,i,c,"throw",e)}i(void 0)}))}}function Ar(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||Sr(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Sr(e,n){if(e){if("string"==typeof e)return Lr(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Lr(e,n):void 0}}function Lr(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}const Ir=function(){var e=Ar((0,r.useState)(!0),2),n=e[0],t=e[1],o=Ar((0,r.useState)({}),2),a=o[0],i=o[1],c=Ar((0,r.useState)({topInterfaces:[],topFeatures:[]}),2),l=c[0],s=c[1],u=Ar((0,r.useState)({}),2),d=u[0],p=u[1],f=Ar((0,r.useState)([]),2),m=f[0],h=f[1],b=Ar((0,r.useState)(!1),2),y=b[0],g=b[1],v=Ar((0,r.useState)(null),2),x=v[0],w=v[1],E=Ar((0,r.useState)(""),2),k=E[0],A=E[1],S=(0,r.useCallback)(kr(wr().mark((function e(){var n,t,r,o,a,c;return wr().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.all([Ce.A.get("/cgi-bin/stats?type=overview"),Ce.A.get("/cgi-bin/stats?type=top"),Ce.A.get("/cgi-bin/stats?type=timeline")]);case 2:t=e.sent,r=Ar(t,3),o=r[0],a=r[1],c=r[2],i(o.data.data||{}),s(a.data.data||{topInterfaces:[],topFeatures:[]}),p((null===(n=c.data.data)||void 0===n?void 0:n.timeline)||{});case 10:case"end":return e.stop()}}),e)}))),[]),I=(0,r.useCallback)(function(){var e=kr(wr().mark((function e(n,t){var r,o,a;return wr().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return g(!0),e.prev=1,o=new URLSearchParams({type:"recent"}),n&&o.append("date",n),t&&o.append("url",t),e.next=7,Ce.A.get("/cgi-bin/stats?".concat(o.toString()));case 7:a=e.sent,h((null===(r=a.data.data)||void 0===r?void 0:r.logs)||[]),e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),console.error("加载最近记录失败:",e.t0);case 14:return e.prev=14,g(!1),e.finish(14);case 17:case"end":return e.stop()}}),e,null,[[1,11,14,17]])})));return function(n,t){return e.apply(this,arguments)}}(),[]),O=function(){var e=kr(wr().mark((function e(){var n;return wr().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t(!0),e.prev=1,e.next=4,S();case 4:return n=x?vr()(x).format("YYYY-MM-DD"):"",e.next=7,I(n,k);case 7:e.next=12;break;case 9:e.prev=9,e.t0=e.catch(1),console.error("加载统计数据失败:",e.t0);case 12:return e.prev=12,t(!1),e.finish(12);case 15:case"end":return e.stop()}}),e,null,[[1,9,12,15]])})));return function(){return e.apply(this,arguments)}}();(0,r.useEffect)((function(){O()}),[]);var j,P=[{title:"接口名称",dataIndex:"name",key:"name"},{title:"命中次数",dataIndex:"count",key:"count",width:120},{title:"占比",key:"percent",width:120,render:function(e,n){var t=a.totalHits||1,o=(n.count/t*100).toFixed(1);return r.createElement(Ke.A,{count:"".concat(o,"%"),style:{backgroundColor:"#52c41a"}})}}],z=[{title:"时间",dataIndex:"timestamp",key:"timestamp",width:180,render:function(e){return new Date(e).toLocaleString()}},{title:"方法",dataIndex:"method",key:"method",width:80},{title:"URL",dataIndex:"url",key:"url",ellipsis:!0},{title:"状态",dataIndex:"status",key:"status",width:80,render:function(e){return r.createElement(ve.A,{color:e>=200&&e<300?"success":"default"},e)}},{title:"模块",dataIndex:"featureName",key:"featureName",width:140},{title:"接口",dataIndex:"interfaceName",key:"interfaceName",width:160}],M=Object.entries(d).sort(),_=Math.max.apply(Math,(j=Object.values(d),function(e){if(Array.isArray(e))return Lr(e)}(j)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(j)||Sr(j)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).concat([1]));return r.createElement(fe,null,r.createElement("div",{className:"page-container"},r.createElement("div",{className:"page-title-bar"},r.createElement("div",null,r.createElement("h1",{className:"page-title"},"📊 请求统计"),r.createElement("div",{className:"page-description"},"查看 Mock 接口的命中情况、流量趋势和未覆盖接口"))),n?r.createElement(F.A,{size:"large",style:{display:"block",margin:"80px auto"}}):r.createElement(r.Fragment,null,r.createElement(Ze.A,{gutter:16,style:{marginBottom:24}},r.createElement(Je.A,{span:6},r.createElement(he.A,null,r.createElement(hr.A,{title:"今日命中",value:a.todayHits||0,prefix:r.createElement(T.A,null),valueStyle:{color:"#52c41a"}}))),r.createElement(Je.A,{span:6},r.createElement(he.A,null,r.createElement(hr.A,{title:"7日总请求",value:a.totalRequests||0,prefix:r.createElement(N.A,null)}))),r.createElement(Je.A,{span:6},r.createElement(he.A,null,r.createElement(hr.A,{title:"命中率",value:a.hitRate||0,suffix:"%",prefix:r.createElement(yr.A,null),valueStyle:{color:"#1890ff"}}))),r.createElement(Je.A,{span:6},r.createElement(he.A,null,r.createElement(hr.A,{title:"活跃接口 / 总数",value:"".concat(a.activeInterfaces||0," / ").concat(a.totalInterfaces||0),prefix:r.createElement(C.A,null)})))),r.createElement(he.A,{title:"📈 近7天命中趋势",style:{marginBottom:24}},0===M.length?r.createElement(ye.A,{description:"暂无数据"}):r.createElement("div",{style:{display:"flex",alignItems:"flex-end",height:160,gap:12,padding:"0 8px"}},M.map((function(e){var n=Ar(e,2),t=n[0],o=n[1];return r.createElement("div",{key:t,style:{flex:1,display:"flex",flexDirection:"column",alignItems:"center"}},r.createElement("div",{style:{fontSize:12,fontWeight:600,marginBottom:4}},o),r.createElement("div",{style:{width:"100%",height:"".concat(o/_*120,"px"),background:"#1890ff",borderRadius:"4px 4px 0 0",minHeight:o>0?4:0,transition:"height 0.3s"}}),r.createElement("div",{style:{fontSize:11,color:"#999",marginTop:4}},t.slice(5)))})))),r.createElement(Ze.A,{gutter:16,style:{marginBottom:24}},r.createElement(Je.A,{span:12},r.createElement(he.A,{title:"🏆 Top 10 命中接口"},0===l.topInterfaces.length?r.createElement(ye.A,{description:"暂无命中记录"}):r.createElement(X.A,{dataSource:l.topInterfaces,columns:P,rowKey:"id",pagination:!1,size:"small"}))),r.createElement(Je.A,{span:12},r.createElement(he.A,{title:"📦 Top 10 功能模块"},0===l.topFeatures.length?r.createElement(ye.A,{description:"暂无命中记录"}):r.createElement(X.A,{dataSource:l.topFeatures,columns:[{title:"模块名称",dataIndex:"name",key:"name"},{title:"命中次数",dataIndex:"count",key:"count",width:120}],rowKey:"id",pagination:!1,size:"small"})))),r.createElement(he.A,{title:"🕐 最近命中记录",extra:r.createElement(L.A,null,r.createElement(br.A,{placeholder:"筛选日期",value:x,onChange:function(e){w(e);var n=e?vr()(e).format("YYYY-MM-DD"):"";I(n,k)},allowClear:!0,style:{width:140}}),r.createElement(xe.A,{placeholder:"筛选 URL",value:k,onChange:function(e){var n=e.target.value;A(n);var t=x?vr()(x).format("YYYY-MM-DD"):"";I(t,n)},allowClear:!0,prefix:r.createElement(_n.A,null),style:{width:200}}))},y?r.createElement(F.A,{size:"small",style:{display:"block",margin:"40px auto"}}):0===m.length?r.createElement(ye.A,{description:"暂无记录"}):r.createElement(X.A,{dataSource:m,columns:z,rowKey:"id",pagination:!1,size:"small"})))))};var Or=t(277),jr=t(6325),Cr=t(5850),Nr=t(3903),Tr=t(7345);function Pr(e){return Pr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pr(e)}function zr(){zr=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==Pr(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(Pr(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function Mr(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function _r(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){Mr(a,r,o,i,c,"next",e)}function c(e){Mr(a,r,o,i,c,"throw",e)}i(void 0)}))}}function Rr(e){return function(e){if(Array.isArray(e))return Ur(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Dr(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Fr(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||Dr(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Dr(e,n){if(e){if("string"==typeof e)return Ur(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Ur(e,n):void 0}}function Ur(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var Br=Qe.A.Option,Gr=xe.A.TextArea,Vr=["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"],Wr=[{key:"none",label:"None"},{key:"json",label:"JSON"},{key:"form",label:"x-www-form-urlencoded"},{key:"text",label:"Raw Text"}],qr=function(){try{var e=localStorage.getItem("sniffer-history");return e?JSON.parse(e):[]}catch(e){return[]}};const Yr=function(){var e,n=Fr((0,r.useState)(""),2),t=n[0],o=n[1],a=Fr((0,r.useState)("GET"),2),i=a[0],c=a[1],l=Fr((0,r.useState)("none"),2),s=l[0],u=l[1],d=Fr((0,r.useState)(""),2),p=d[0],f=d[1],m=Fr((0,r.useState)([{key:"",value:"",id:Date.now()}]),2),h=m[0],b=m[1],y=Fr((0,r.useState)([{key:"",value:"",id:Date.now()+1}]),2),g=y[0],v=y[1],x=Fr((0,r.useState)(!1),2),w=x[0],E=x[1],k=Fr((0,r.useState)(null),2),A=k[0],I=k[1],O=Fr((0,r.useState)(qr),2),j=O[0],N=O[1],P=Fr((0,r.useState)(!1),2),z=P[0],M=P[1],_=Fr((0,r.useState)(!1),2),R=_[0],F=_[1],D=Fr(ge.A.useForm(),1)[0],U=Fr((0,r.useState)([]),2),B=U[0],G=U[1];(0,r.useEffect)((function(){Ce.A.get("/cgi-bin/features").then((function(e){0===e.data.code&&G(e.data.data||[])})).catch((function(){}))}),[]),(0,r.useEffect)((function(){localStorage.setItem("sniffer-history",JSON.stringify(j.slice(0,100)))}),[j]);var V=function(e,n){n([].concat(Rr(e),[{key:"",value:"",id:Date.now()+Math.random()}]))},W=function(e,n,t){var r=Rr(e);r.splice(t,1),0===r.length&&r.push({key:"",value:"",id:Date.now()}),n(r)},q=function(e,n,t,r,o){var a=Rr(e);a[t][r]=o,n(a)},Y=function(e){var n={};return e.forEach((function(e){e.key&&void 0!==e.value&&(n[e.key]=e.value)})),n},H=function(){var e=_r(zr().mark((function e(){var n,r,o,a,c,l;return zr().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.trim()){e.next=3;break}return Z.Ay.warning("请输入请求 URL"),e.abrupt("return");case 3:return E(!0),I(null),e.prev=5,n={url:t.trim(),method:i,headers:Y(g),queryParams:Y(h),body:"none"===s?void 0:p,bodyType:s},e.next=9,Ce.A.post("/cgi-bin/proxy-fetch",n);case 9:if(0!==(r=e.sent).data.code){e.next=18;break}a=r.data.data,I(a),c={id:Date.now().toString(),timestamp:(new Date).toISOString(),url:n.url,method:n.method,status:a.status,statusText:a.statusText,preview:(null===(o=a.body)||void 0===o?void 0:o.slice(0,200))||"",request:n},N((function(e){return[c].concat(Rr(e)).slice(0,100)})),Z.Ay.success("请求成功 ".concat(a.status)),e.next=19;break;case 18:throw new Error(r.data.message);case 19:e.next=24;break;case 21:e.prev=21,e.t0=e.catch(5),Z.Ay.error((null===(l=e.t0.response)||void 0===l||null===(l=l.data)||void 0===l?void 0:l.message)||e.t0.message||"请求失败");case 24:return e.prev=24,E(!1),e.finish(24);case 27:case"end":return e.stop()}}),e,null,[[5,21,24,27]])})));return function(){return e.apply(this,arguments)}}(),J=function(){var e=_r(zr().mark((function e(){var n,r,o,a,c;return zr().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,D.validateFields();case 3:return n=e.sent,r=(null==A?void 0:A.body)||"",o={name:n.name,urlPattern:n.urlPattern||t,proxyType:"response",httpMethod:i,httpStatus:(null==A?void 0:A.status)||200,contentType:"application/json; charset=utf-8",responseContent:r,responses:[{id:Date.now().toString(),name:"默认响应",description:"从接口嗅探导入",content:r,paramMatchers:[]}],activeResponseId:Date.now().toString(),active:!0},e.next=8,Ce.A.post("/cgi-bin/interfaces",o);case 8:if(0!==(a=e.sent).data.code){e.next=15;break}Z.Ay.success("Mock 接口创建成功"),F(!1),D.resetFields(),e.next=16;break;case 15:throw new Error(a.data.message);case 16:e.next=23;break;case 18:if(e.prev=18,e.t0=e.catch(0),!e.t0.errorFields){e.next=22;break}return e.abrupt("return");case 22:Z.Ay.error("创建失败: "+((null===(c=e.t0.response)||void 0===c||null===(c=c.data)||void 0===c?void 0:c.message)||e.t0.message));case 23:case"end":return e.stop()}}),e,null,[[0,18]])})));return function(){return e.apply(this,arguments)}}(),K=[{title:"Method",dataIndex:"method",key:"method",width:80,render:function(e){return r.createElement(ve.A,{color:"GET"===e?"blue":"POST"===e?"green":"default"},e)}},{title:"URL",dataIndex:"url",key:"url",ellipsis:!0,render:function(e){return r.createElement("span",{style:{fontSize:12}},e)}},{title:"Status",dataIndex:"status",key:"status",width:80,render:function(e){return r.createElement(ve.A,{color:e>=200&&e<300?"success":e>=400?"error":"default"},e)}},{title:"操作",key:"action",width:120,render:function(e,n){return r.createElement(L.A,null,r.createElement(S.Ay,{size:"small",onClick:function(){return function(e){var n=e.request||{};o(n.url||e.url||""),c(n.method||"GET"),u(n.bodyType||"none"),f(n.body||"");var t=Object.entries(n.queryParams||{}).map((function(e,n){var t=Fr(e,2);return{key:t[0],value:t[1],id:Date.now()+n}}));b(t.length?t:[{key:"",value:"",id:Date.now()}]);var r=Object.entries(n.headers||{}).map((function(e,n){var t=Fr(e,2);return{key:t[0],value:t[1],id:Date.now()+n+1e3}}));v(r.length?r:[{key:"",value:"",id:Date.now()+1e3}]),I({status:e.status,statusText:e.statusText,body:e.preview,headers:{}}),M(!1)}(n)}},"加载"),r.createElement(Ee.A,{title:"确定删除?",onConfirm:function(){return N((function(e){return e.filter((function(e){return e.id!==n.id}))}))}},r.createElement(S.Ay,{size:"small",danger:!0,icon:r.createElement(tn.A,null)})))}}];return r.createElement(fe,null,r.createElement("div",{className:"page-container"},r.createElement("div",{className:"page-title-bar"},r.createElement("div",null,r.createElement("h1",{className:"page-title"},r.createElement(C.A,null)," 接口嗅探"),r.createElement("div",{className:"page-description"},"像 Postman 一样发送真实请求,抓取响应后一键保存为 Mock 接口")),r.createElement(L.A,null,r.createElement(S.Ay,{icon:r.createElement(jr.A,null),onClick:function(){return M(!0)}},"历史记录 (",j.length,")"))),r.createElement(he.A,{style:{marginBottom:24}},r.createElement(Ze.A,{gutter:8,style:{marginBottom:16}},r.createElement(Je.A,{flex:"120px"},r.createElement(Qe.A,{value:i,onChange:c,style:{width:"100%"}},Vr.map((function(e){return r.createElement(Br,{key:e,value:e},e)})))),r.createElement(Je.A,{flex:"auto"},r.createElement(xe.A,{placeholder:"https://api.example.com/users",value:t,onChange:function(e){return o(e.target.value)},onPressEnter:H,style:{fontFamily:"monospace"},prefix:r.createElement(T.A,null)})),r.createElement(Je.A,{flex:"120px"},r.createElement(S.Ay,{type:"primary",icon:r.createElement(Cr.A,null),loading:w,onClick:H,block:!0},"发送"))),r.createElement(Or.A,{defaultActiveKey:"params"},r.createElement(Or.A.TabPane,{tab:r.createElement("span",null,r.createElement(Yn.A,null)," Query 参数"),key:"params"},r.createElement(L.A,{direction:"vertical",style:{width:"100%"}},h.map((function(e,n){return r.createElement(Ze.A,{gutter:8,key:e.id},r.createElement(Je.A,{span:8},r.createElement(xe.A,{placeholder:"参数名",value:e.key,onChange:function(e){return q(h,b,n,"key",e.target.value)}})),r.createElement(Je.A,{span:14},r.createElement(xe.A,{placeholder:"参数值",value:e.value,onChange:function(e){return q(h,b,n,"value",e.target.value)}})),r.createElement(Je.A,{span:2},r.createElement(S.Ay,{icon:r.createElement(tn.A,null),onClick:function(){return W(h,b,n)},disabled:1===h.length&&!e.key})))})),r.createElement(S.Ay,{type:"dashed",icon:r.createElement(cn.A,null),onClick:function(){return V(h,b)}},"添加参数"))),r.createElement(Or.A.TabPane,{tab:r.createElement("span",null,r.createElement(Yn.A,null)," Headers"),key:"headers"},r.createElement(L.A,{direction:"vertical",style:{width:"100%"}},g.map((function(e,n){return r.createElement(Ze.A,{gutter:8,key:e.id},r.createElement(Je.A,{span:8},r.createElement(xe.A,{placeholder:"Header 名",value:e.key,onChange:function(e){return q(g,v,n,"key",e.target.value)}})),r.createElement(Je.A,{span:14},r.createElement(xe.A,{placeholder:"Header 值",value:e.value,onChange:function(e){return q(g,v,n,"value",e.target.value)}})),r.createElement(Je.A,{span:2},r.createElement(S.Ay,{icon:r.createElement(tn.A,null),onClick:function(){return W(g,v,n)},disabled:1===g.length&&!e.key})))})),r.createElement(S.Ay,{type:"dashed",icon:r.createElement(cn.A,null),onClick:function(){return V(g,v)}},"添加 Header"))),r.createElement(Or.A.TabPane,{tab:r.createElement("span",null,r.createElement(Yn.A,null)," Body"),key:"body"},r.createElement(L.A,{direction:"vertical",style:{width:"100%"}},r.createElement(Qe.A,{value:s,onChange:u,style:{width:200}},Wr.map((function(e){return r.createElement(Br,{key:e.key,value:e.key},e.label)}))),"none"!==s&&r.createElement(Gr,{rows:8,placeholder:"json"===s?'{\n "name": "test"\n}':"form"===s?"name=test&age=18":"raw text...",value:p,onChange:function(e){return f(e.target.value)},style:{fontFamily:"monospace",fontSize:13}}))))),A&&r.createElement(he.A,{title:r.createElement(L.A,null,r.createElement("span",null,"响应结果"),r.createElement(ve.A,{color:A.status>=200&&A.status<300?"success":A.status>=400?"error":"default"},A.status," ",A.statusText)),extra:r.createElement(L.A,null,r.createElement(S.Ay,{size:"small",icon:r.createElement(Mn.A,null),onClick:function(){null!=A&&A.body&&(navigator.clipboard.writeText(A.body),Z.Ay.success("响应内容已复制"))}},"复制响应"),r.createElement(S.Ay,{size:"small",icon:r.createElement(Nr.A,null),type:"primary",onClick:function(){D.setFieldsValue({name:"",urlPattern:t}),F(!0)}},"保存为 Mock 接口"))},r.createElement(Or.A,{defaultActiveKey:"body"},r.createElement(Or.A.TabPane,{tab:"Body",key:"body"},r.createElement(Gr,{value:function(e){try{var n=JSON.parse(e);return JSON.stringify(n,null,2)}catch(n){return e}}(A.body),readOnly:!0,rows:16,style:{fontFamily:"monospace",fontSize:12,background:"#fafafa"}})),r.createElement(Or.A.TabPane,{tab:"Headers",key:"headers"},r.createElement("pre",{style:{background:"#fafafa",padding:16,borderRadius:4,fontSize:12}},JSON.stringify(A.headers,null,2))))),!A&&!w&&r.createElement(ye.A,{description:"输入 URL 并点击「发送」开始嗅探真实接口"})),r.createElement(Tn.A,{title:"历史记录",open:z,onClose:function(){return M(!1)},width:600,extra:r.createElement(Ee.A,{title:"确定清空全部历史?",onConfirm:function(){N([]),Z.Ay.success("历史记录已清空")}},r.createElement(S.Ay,{icon:r.createElement(Tr.A,null),danger:!0},"清空"))},r.createElement(X.A,{dataSource:j,columns:K,rowKey:"id",pagination:{pageSize:10},size:"small"})),r.createElement(Tn.A,{title:"保存为 Mock 接口",open:R,onClose:function(){return F(!1)},width:480,footer:r.createElement(L.A,{style:{float:"right"}},r.createElement(S.Ay,{onClick:function(){return F(!1)}},"取消"),r.createElement(S.Ay,{type:"primary",icon:r.createElement(Nr.A,null),onClick:J},"创建接口"))},r.createElement(ge.A,{form:D,layout:"vertical"},r.createElement(ge.A.Item,{name:"name",label:"接口名称",rules:[{required:!0,message:"请输入接口名称"}]},r.createElement(xe.A,{placeholder:"例如:获取用户列表"})),r.createElement(ge.A.Item,{name:"featureId",label:"所属功能模块",rules:[{required:!0,message:"请选择功能模块"}]},r.createElement(Qe.A,{placeholder:"选择功能模块"},B.map((function(e){return r.createElement(Br,{key:e.id,value:e.id},e.name)})))),r.createElement(ge.A.Item,{name:"urlPattern",label:"URL 匹配规则",rules:[{required:!0,message:"请输入匹配规则"}]},r.createElement(xe.A,{placeholder:"例如:/api/users 或 /api/users/*"})),r.createElement(ge.A.Item,{label:"请求方法"},r.createElement(ve.A,null,i)),r.createElement(ge.A.Item,{label:"响应状态码"},r.createElement(ve.A,null,null==A?void 0:A.status)),r.createElement(ge.A.Item,{label:"响应预览"},r.createElement(Gr,{value:null==A||null===(e=A.body)||void 0===e?void 0:e.slice(0,500),readOnly:!0,rows:6,style:{fontFamily:"monospace",fontSize:11,background:"#fafafa"}})))))};t(3363),t(1780);const Hr=function(){return r.createElement(o.I9,null,r.createElement("div",{className:"App"},r.createElement(a.dO,null,r.createElement(a.qh,{exact:!0,path:"/",component:jn}),r.createElement(a.qh,{exact:!0,path:"/interface",component:tr}),r.createElement(a.qh,{path:"/interface/:featureId",component:tr}),r.createElement(a.qh,{path:"/stats",component:Ir}),r.createElement(a.qh,{path:"/sniffer",component:Yr}),r.createElement(a.qh,{path:"/settings",component:mr}),r.createElement(a.rd,{to:"/"}))))}},1019:(e,n,t)=>{"use strict";t.d(n,{A:()=>i});var r=t(6540),o=t(1847),a=t(770);function i(){var e="legacy"===localStorage.getItem("mm-ui-version")?"legacy":"modern";return r.createElement("div",{style:{marginBottom:24}},r.createElement(o.A.Title,{level:5},"界面版本"),r.createElement(a.Ay.Group,{value:e,onChange:function(e){localStorage.setItem("mm-ui-version",e.target.value),window.location.reload()},options:[{value:"modern",label:"UI 3.0 工作台"},{value:"legacy",label:"经典 UI 2.0"}]}),r.createElement(o.A.Paragraph,{type:"secondary",style:{marginTop:8}},"切换后刷新页面,两个界面共用原有模块、接口和同步数据。此偏好仅保存在当前浏览器。"))}},1780:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>y});var r=t(5072),o=t.n(r),a=t(7825),i=t.n(a),c=t(7659),l=t.n(c),s=t(5056),u=t.n(s),d=t(540),p=t.n(d),f=t(1113),m=t.n(f),h=t(9709),b={};b.styleTagTransform=m(),b.setAttributes=u(),b.insert=l().bind(null,"head"),b.domAPI=i(),b.insertStyleElement=p(),o()(h.A,b);const y=h.A&&h.A.locals?h.A.locals:void 0},2497:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,".App {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif;\n height: 100%;\n width: 100%;\n}\n\n/* 页面容器样式 */\n.page-container {\n width: 100%;\n height: 100%;\n background-color: #fff;\n border-radius: 8px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\n padding: 24px;\n transition: all 0.3s;\n}\n\n/* 页面标题栏样式 */\n.page-title-bar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 24px;\n padding-bottom: 16px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.page-title {\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 20px;\n line-height: 32px;\n}\n\n.page-description {\n margin-top: 8px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n\n.page-actions {\n display: flex;\n gap: 12px;\n}\n\n/* 卡片样式 */\n.custom-card {\n border-radius: 8px;\n overflow: hidden;\n transition: all 0.3s;\n height: 100%;\n}\n\n.custom-card:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n transform: translateY(-3px);\n}\n\n/* 表格样式 */\n.custom-table {\n border-radius: 8px;\n overflow: hidden;\n}\n\n.custom-table .ant-table-thead > tr > th {\n background: #fafafa;\n font-weight: 600;\n}\n\n/* 表单样式 */\n.custom-form-item-label {\n font-weight: 500;\n color: rgba(0, 0, 0, 0.85);\n}\n\n.custom-form-item-hint {\n color: rgba(0, 0, 0, 0.45);\n font-size: 13px;\n margin-top: 4px;\n}\n\n/* 按钮样式 */\n.custom-button {\n border-radius: 4px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.custom-button-icon {\n margin-right: 8px;\n}\n\n/* 状态标签样式 */\n.status-tag {\n border-radius: 10px;\n padding: 2px 8px;\n font-size: 12px;\n line-height: 1.5;\n display: inline-flex;\n align-items: center;\n}\n\n.status-tag-success {\n background-color: #f6ffed;\n border: 1px solid #b7eb8f;\n color: #52c41a;\n}\n\n.status-tag-warning {\n background-color: #fffbe6;\n border: 1px solid #ffe58f;\n color: #faad14;\n}\n\n.status-tag-error {\n background-color: #fff2f0;\n border: 1px solid #ffccc7;\n color: #ff4d4f;\n}\n\n/* 动画效果 */\n.fade-in {\n animation: fadeIn 0.3s ease-in-out;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* 滚动条样式 */\n::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb {\n background: #c1c1c1;\n border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n background: #a8a8a8;\n}\n\n/* 响应式调整 */\n@media (max-width: 576px) {\n .page-container {\n padding: 16px;\n }\n \n .page-title-bar {\n flex-direction: column;\n align-items: flex-start;\n }\n \n .page-actions {\n margin-top: 16px;\n width: 100%;\n justify-content: flex-start;\n }\n}\n",""]);const c=i},2545:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,"/* 版本弹窗样式 */\n.version-modal .ant-modal-content {\n padding: 0;\n}\n\n.version-modal .ant-modal-header {\n padding: 16px 24px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.version-modal .ant-modal-body {\n padding: 0;\n max-height: 70vh;\n overflow-y: auto;\n}\n\n.version-modal-content {\n padding: 24px;\n}\n\n.version-modal-loading {\n text-align: center;\n padding: 40px;\n}\n\n.version-modal-loading p {\n margin-top: 16px;\n color: #666;\n}\n\n/* 版本号按钮样式 */\n.version-button {\n padding: 4px 8px;\n height: auto;\n border-radius: 4px;\n transition: background-color 0.3s ease;\n}\n\n.version-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.version-button:focus {\n background-color: rgba(0, 0, 0, 0.06);\n}\n\n/* Markdown 内容样式 */\n.version-markdown-content {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n line-height: 1.6;\n color: #333;\n}\n\n.version-markdown-content h1 {\n font-size: 24px;\n font-weight: 600;\n margin: 0 0 16px 0;\n padding-bottom: 8px;\n border-bottom: 1px solid #eee;\n color: #1890ff;\n}\n\n.version-markdown-content h2 {\n font-size: 20px;\n font-weight: 600;\n margin: 24px 0 12px 0;\n color: #262626;\n}\n\n.version-markdown-content h3 {\n font-size: 16px;\n font-weight: 600;\n margin: 16px 0 8px 0;\n color: #52c41a;\n}\n\n.version-markdown-content p {\n margin: 8px 0;\n color: #595959;\n}\n\n.version-markdown-content ul {\n padding-left: 20px;\n margin: 8px 0;\n}\n\n.version-markdown-content li {\n margin: 4px 0;\n color: #595959;\n}\n\n.version-markdown-content strong {\n font-weight: 600;\n color: #262626;\n}\n\n.version-markdown-content code {\n background-color: #f5f5f5;\n padding: 2px 4px;\n border-radius: 3px;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n font-size: 87%;\n}\n\n.version-markdown-content pre {\n background-color: #f6f8fa;\n padding: 16px;\n border-radius: 6px;\n overflow-x: auto;\n margin: 16px 0;\n}\n\n.version-markdown-content pre code {\n background-color: transparent;\n padding: 0;\n} ",""]);const c=i},2689:(e,n,t)=>{"use strict";t.d(n,{A:()=>p});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a),c=t(4417),l=t.n(c),s=new URL(t(3008),t.b),u=i()(o()),d=l()(s);u.push([e.id,`/* 基础样式 */\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n}\n\nbody {\n background-color: #f0f2f5;\n color: #000000d9;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.app-container {\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n}\n\n/* 顶部导航栏 */\n.header {\n background-color: #fff;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);\n height: 48px;\n display: flex;\n align-items: center;\n padding: 0 16px;\n z-index: 100;\n}\n\n.logo {\n font-weight: bold;\n font-size: 18px;\n color: #1890ff;\n margin-right: 24px;\n display: flex;\n align-items: center;\n}\n\n.logo-icon {\n margin-right: 8px;\n width: 24px;\n height: 24px;\n background-color: #1890ff;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n}\n\n.search {\n flex: 1;\n max-width: 320px;\n margin-right: 16px;\n}\n\n.search input {\n width: 100%;\n height: 32px;\n border-radius: 4px;\n border: 1px solid #d9d9d9;\n padding: 0 8px 0 32px;\n background-image: url(${d});\n background-repeat: no-repeat;\n background-position: 8px center;\n}\n\n.header-actions {\n display: flex;\n align-items: center;\n}\n\n.header-actions button {\n background: none;\n border: none;\n cursor: pointer;\n color: #595959;\n padding: 4px 8px;\n margin-left: 8px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n}\n\n.header-actions button:hover {\n background-color: #f5f5f5;\n color: #1890ff;\n}\n\n.header-actions button i {\n margin-right: 4px;\n}\n\n/* 主内容区域 */\n.main-container {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n/* 左侧导航 */\n.sidebar {\n width: 250px;\n background-color: #fff;\n border-right: 1px solid #f0f0f0;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.create-feature {\n padding: 16px;\n}\n\n.create-feature button {\n width: 100%;\n height: 36px;\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.create-feature button:hover {\n background-color: #40a9ff;\n}\n\n.feature-list {\n flex: 1;\n padding: 0 8px;\n overflow-y: auto;\n}\n\n.feature-item {\n padding: 8px 12px;\n margin-bottom: 4px;\n border-radius: 4px;\n cursor: pointer;\n}\n\n.feature-item:hover {\n background-color: #f5f5f5;\n}\n\n.feature-item.active {\n background-color: #e6f7ff;\n}\n\n.feature-link {\n display: flex;\n justify-content: space-between;\n align-items: center;\n text-decoration: none;\n color: #595959;\n}\n\n.feature-item.active .feature-link {\n color: #1890ff;\n}\n\n.feature-name {\n font-size: 14px;\n}\n\n.feature-count {\n background-color: #f0f0f0;\n color: #8c8c8c;\n font-size: 12px;\n padding: 2px 6px;\n border-radius: 10px;\n min-width: 20px;\n text-align: center;\n}\n\n.feature-item.active .feature-count {\n background-color: #1890ff;\n color: white;\n}\n\n/* 右侧内容区域 */\n.content {\n flex: 1;\n padding: 16px;\n overflow-y: auto;\n}\n\n.app-layout {\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n}\n\n.app-header {\n position: fixed;\n z-index: 100;\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 24px;\n height: 64px;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);\n}\n\n.header-left {\n display: flex;\n align-items: center;\n}\n\n.logo-container {\n display: flex;\n align-items: center;\n margin-right: 24px;\n}\n\n.logo-icon-group {\n position: relative;\n width: 32px;\n height: 32px;\n margin-right: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.logo-icon {\n font-size: 24px;\n color: #1890ff;\n}\n\n.logo-icon-primary {\n position: relative;\n z-index: 2;\n font-size: 22px;\n display: none;\n}\n\n.logo-icon-secondary {\n position: absolute;\n right: -6px;\n font-size: 16px;\n color: #52c41a;\n background: white;\n border-radius: 50%;\n box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);\n padding: 2px;\n}\n\n.logo-text {\n color: #1890ff;\n font-size: 18px;\n font-weight: 600;\n white-space: nowrap;\n background: linear-gradient(135deg, #1890ff, #52c41a);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n letter-spacing: -0.5px;\n}\n\n.collapse-button {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n}\n\n.app-sider {\n overflow: auto;\n height: 100vh;\n position: fixed;\n left: 0;\n top: 64px;\n bottom: 0;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);\n z-index: 99;\n transition: all 0.2s;\n}\n\n.app-content-wrapper {\n margin-top: 64px;\n margin-left: 220px;\n padding: 0 24px 24px;\n transition: all 0.2s;\n}\n\n.app-content {\n padding: 24px;\n overflow: initial;\n min-height: calc(100vh - 64px - 48px - 32px);\n transition: all 0.3s;\n}\n\n.page-header {\n margin-bottom: 16px;\n}\n\n.app-breadcrumb {\n font-size: 14px;\n}\n\n/* 当侧边栏折叠时的样式调整 */\n.app-sider.ant-layout-sider-collapsed + .app-content-wrapper {\n margin-left: 80px;\n}\n\n/* 菜单项样式定制 */\n.ant-menu-item {\n border-radius: 4px;\n margin: 4px 0 !important;\n}\n\n.ant-menu-item-selected {\n font-weight: 500;\n}\n\n.ant-menu-inline .ant-menu-item::after {\n display: none;\n}\n\n/* 移动端响应式调整 */\n@media (max-width: 768px) {\n .app-sider {\n position: absolute;\n z-index: 100;\n box-shadow: 2px 0 8px rgba(0, 0, 0, 0.15);\n }\n \n .app-content-wrapper {\n margin-left: 0 !important;\n padding: 0 16px 16px;\n }\n \n .app-content {\n padding: 16px;\n }\n \n .logo-text {\n display: none;\n }\n \n .app-header {\n padding: 0 16px;\n }\n}\n\n/* 暗色主题适配 */\n.dark-theme .app-header,\n.dark-theme .app-sider {\n background-color: #141414 !important;\n border-color: #303030 !important;\n}\n\n.dark-theme .logo-text,\n.dark-theme .logo-icon-primary {\n color: #177ddc;\n}\n\n.dark-theme .logo-icon-secondary {\n color: #49aa19;\n background: #141414;\n} `,""]);const p=u},3008:e=>{"use strict";e.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 width=%2716%27 height=%2716%27%3E%3Cpath fill=%27%23999%27 d=%27M15.5 14h-.79l-.28-.27a6.5 6.5 0 0 0 1.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 0 0-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 0 0 5.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z%27/%3E%3C/svg%3E"},3014:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,'.mock-data-container {\n padding: 24px;\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\n}\n\n.header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 24px;\n padding-bottom: 16px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n/* 页面标题区域样式 */\n.title-section {\n flex: 1;\n}\n\n.title-with-badge {\n display: flex;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.page-title {\n margin: 0 !important;\n font-size: 24px;\n font-weight: 600;\n color: #262626;\n line-height: 1.2;\n}\n\n.page-description {\n color: #8c8c8c;\n font-size: 14px;\n line-height: 1.5;\n margin: 0;\n}\n\n/* 控制面板卡片样式 */\n.control-panel-card {\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n border: 1px solid #f0f0f0;\n}\n\n.control-panel-card .ant-card-body {\n padding: 20px 24px;\n}\n\n/* 统计信息区域 */\n.stats-section {\n display: flex;\n gap: 24px;\n align-items: center;\n}\n\n.stats-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n}\n\n.stats-number {\n font-size: 24px;\n font-weight: 600;\n color: #1890ff;\n line-height: 1;\n margin-bottom: 4px;\n}\n\n.stats-label {\n font-size: 12px;\n color: #8c8c8c;\n line-height: 1;\n}\n\n/* 控制组样式 */\n.control-group {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.control-label {\n font-size: 14px;\n color: #595959;\n white-space: nowrap;\n font-weight: 500;\n}\n\n.control-label .anticon {\n margin-right: 6px;\n color: #1890ff;\n}\n\n.page-info {\n font-size: 13px;\n color: #8c8c8c;\n white-space: nowrap;\n}\n\n/* 功能列表卡片样式 */\n.feature-list-card {\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n border: 1px solid #f0f0f0;\n min-height: 400px;\n}\n\n.feature-list-card .ant-card-body {\n padding: 24px;\n}\n\n.feature-grid {\n min-height: 300px;\n}\n\n.feature-card {\n position: relative;\n transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);\n height: 100%;\n display: flex;\n flex-direction: column;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n border: 1px solid #f0f0f0;\n cursor: pointer;\n background: #ffffff;\n}\n\n.feature-card:hover {\n transform: translateY(-4px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);\n border-color: #d9d9d9;\n}\n\n.feature-card:active {\n transform: translateY(-2px);\n}\n\n/* 添加卡片悬浮效果 */\n.feature-card::before {\n content: \'\';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(135deg, rgba(24, 144, 255, 0.02), rgba(24, 144, 255, 0.04));\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: none;\n z-index: 1;\n}\n\n.feature-card:hover::before {\n opacity: 1;\n}\n\n/* 为卡片内容添加相对定位,确保在渐变层之上 */\n.feature-card .ant-card-body {\n position: relative;\n z-index: 2;\n padding: 20px;\n}\n\n.feature-card .ant-card-actions {\n position: relative;\n z-index: 2;\n border-top: 1px solid #f0f0f0;\n background: #fafafa;\n}\n\n.feature-card .ant-card-actions li {\n transition: all 0.2s ease;\n}\n\n.feature-card .ant-card-actions li:hover {\n background: #f0f0f0;\n}\n\n/* 不活跃功能卡片样式 */\n.feature-card.inactive-feature {\n opacity: 0.7;\n filter: grayscale(0.3);\n}\n\n.feature-card.inactive-feature:hover {\n opacity: 0.9;\n filter: grayscale(0.1);\n}\n\n.feature-card-content {\n padding: 16px;\n height: 140px;\n display: flex;\n flex-direction: column;\n}\n\n.feature-name {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n\n.feature-name h4 {\n margin: 0;\n font-size: 18px;\n color: #1890ff;\n font-weight: 600;\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.status-tag {\n font-size: 12px;\n padding: 2px 8px;\n border-radius: 10px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-weight: 500;\n}\n\n.status-tag.inactive {\n background-color: #fff1f0;\n color: #f5222d;\n border: 1px solid #ffa39e;\n}\n\n.status-tag.active {\n background-color: #f6ffed;\n color: #52c41a;\n border: 1px solid #b7eb8f;\n}\n\n.feature-description {\n color: #666;\n font-size: 14px;\n margin-bottom: 16px;\n flex: 1;\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n}\n\n.feature-stat {\n margin-top: auto;\n color: #8c8c8c;\n font-size: 13px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.feature-date {\n color: #999;\n font-size: 12px;\n}\n\n.inactive-feature {\n opacity: 0.75;\n background-color: #fafafa;\n}\n\n.inactive-feature .ant-card-meta-title {\n color: #999;\n}\n\n.empty-data {\n text-align: center;\n padding: 48px 0;\n background-color: #f9f9f9;\n border-radius: 8px;\n margin: 24px 0;\n}\n\n.loading {\n text-align: center;\n padding: 48px 0;\n}\n\n.mock-data-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n}\n\n.mock-data-header h2 {\n font-size: 18px;\n margin: 0;\n color: #1890ff;\n}\n\n.add-mock-btn {\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n padding: 8px 16px;\n cursor: pointer;\n transition: background-color 0.3s;\n}\n\n.add-mock-btn:hover {\n background-color: #40a9ff;\n}\n\n.mock-editor {\n background-color: #f9f9f9;\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 20px;\n}\n\n.mock-form {\n display: flex;\n flex-direction: column;\n gap: 15px;\n}\n\n.form-row {\n display: flex;\n gap: 15px;\n}\n\n.method-select {\n width: 120px;\n}\n\n.path-input {\n flex: 1;\n}\n\n.form-group {\n display: flex;\n flex-direction: column;\n gap: 5px;\n}\n\n.form-group label {\n font-weight: 500;\n color: #333;\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n padding: 8px 12px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n font-size: 14px;\n transition: border-color 0.3s;\n font-family: inherit;\n}\n\n.form-group textarea {\n font-family: monospace;\n resize: vertical;\n min-height: 150px;\n}\n\n.form-group input:focus,\n.form-group select:focus,\n.form-group textarea:focus {\n border-color: #40a9ff;\n outline: none;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n.form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 10px;\n}\n\n.cancel-btn {\n padding: 8px 16px;\n background-color: #f5f5f5;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.3s;\n}\n\n.cancel-btn:hover {\n background-color: #e6e6e6;\n}\n\n.save-btn {\n padding: 8px 16px;\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.3s;\n}\n\n.save-btn:hover {\n background-color: #40a9ff;\n}\n\n.mock-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.mock-table th,\n.mock-table td {\n padding: 12px 15px;\n text-align: left;\n border-bottom: 1px solid #eee;\n}\n\n.mock-table th {\n font-weight: 500;\n color: #666;\n background-color: #f9f9f9;\n}\n\n.mock-table tr.inactive {\n color: #999;\n background-color: #f9f9f9;\n}\n\n.mock-table tr:hover {\n background-color: #f5f5f5;\n}\n\n.toggle-switch {\n position: relative;\n display: inline-block;\n width: 40px;\n height: 20px;\n}\n\n.toggle-switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n transition: .4s;\n border-radius: 34px;\n}\n\n.toggle-slider:before {\n position: absolute;\n content: "";\n height: 16px;\n width: 16px;\n left: 2px;\n bottom: 2px;\n background-color: white;\n transition: .4s;\n border-radius: 50%;\n}\n\ninput:checked + .toggle-slider {\n background-color: #1890ff;\n}\n\ninput:checked + .toggle-slider:before {\n transform: translateX(20px);\n}\n\n.edit-btn,\n.delete-btn {\n padding: 5px 10px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 13px;\n margin-right: 5px;\n}\n\n.edit-btn {\n background-color: #f0f7ff;\n color: #1890ff;\n}\n\n.delete-btn {\n background-color: #fff0f0;\n color: #ff4d4f;\n}\n\n.edit-btn:hover {\n background-color: #e6f7ff;\n}\n\n.delete-btn:hover {\n background-color: #ffd4d4;\n}\n\n.empty-list {\n text-align: center;\n padding: 30px;\n color: #999;\n font-style: italic;\n background-color: #f9f9f9;\n border-radius: 4px;\n}\n\n.page-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 24px;\n padding-bottom: 16px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.page-header h1 {\n font-size: 24px;\n font-weight: 600;\n color: #1890ff;\n margin: 0;\n}\n\n.header-actions {\n display: flex;\n gap: 12px;\n}\n\n.add-button, .import-button {\n height: 36px;\n padding: 0 16px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n font-weight: 500;\n transition: all 0.3s;\n}\n\n.add-button {\n background-color: #1890ff;\n color: white;\n}\n\n.add-button:hover {\n background-color: #40a9ff;\n box-shadow: 0 4px 12px rgba(24, 144, 255, 0.2);\n}\n\n.import-button {\n background-color: #52c41a;\n color: white;\n}\n\n.import-button:hover {\n background-color: #73d13d;\n box-shadow: 0 4px 12px rgba(82, 196, 26, 0.2);\n}\n\n.feature-list-container {\n background-color: white;\n border-radius: 4px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n.feature-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.feature-table th,\n.feature-table td {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.feature-table th {\n background-color: #fafafa;\n color: #8c8c8c;\n font-weight: 500;\n font-size: 14px;\n}\n\n.feature-table tr:hover {\n background-color: #fafafa;\n}\n\n.feature-table tr.inactive {\n color: #a6a6a6;\n background-color: #f9f9f9;\n}\n\n.action-buttons {\n display: flex;\n gap: 8px;\n}\n\n.edit-button,\n.delete-button,\n.interface-button,\n.export-button {\n border: none;\n border-radius: 4px;\n padding: 4px 8px;\n cursor: pointer;\n font-size: 12px;\n}\n\n.interface-button {\n background-color: #e6f7ff;\n color: #1890ff;\n}\n\n.interface-button:hover {\n background-color: #bae7ff;\n}\n\n.export-button {\n background-color: #f6ffed;\n color: #52c41a;\n}\n\n.export-button:hover {\n background-color: #d9f7be;\n}\n\n.edit-button {\n background-color: #f0f5ff;\n color: #597ef7;\n}\n\n.edit-button:hover {\n background-color: #d6e4ff;\n}\n\n.delete-button {\n background-color: #fff1f0;\n color: #f5222d;\n}\n\n.delete-button:hover {\n background-color: #ffccc7;\n}\n\n/* 切换开关样式 */\n.switch {\n position: relative;\n display: inline-block;\n width: 36px;\n height: 20px;\n}\n\n.switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n transition: .4s;\n border-radius: 20px;\n}\n\n.slider:before {\n position: absolute;\n content: "";\n height: 16px;\n width: 16px;\n left: 2px;\n bottom: 2px;\n background-color: white;\n transition: .4s;\n border-radius: 50%;\n}\n\ninput:checked + .slider {\n background-color: #1890ff;\n}\n\ninput:checked + .slider:before {\n transform: translateX(16px);\n}\n\n/* 空数据样式 */\n.empty-data {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 0;\n color: #8c8c8c;\n}\n\n.empty-icon {\n font-size: 48px;\n margin-bottom: 16px;\n color: #d9d9d9;\n}\n\n.empty-text {\n font-size: 16px;\n margin-bottom: 24px;\n color: #8c8c8c;\n}\n\n.empty-actions {\n display: flex;\n gap: 16px;\n}\n\n.create-button, .import-button-large {\n height: 36px;\n padding: 0 20px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n border: none;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.create-button {\n background-color: #1890ff;\n color: white;\n}\n\n.create-button:hover {\n background-color: #40a9ff;\n}\n\n.import-button-large {\n background-color: #52c41a;\n color: white;\n}\n\n.import-button-large:hover {\n background-color: #73d13d;\n}\n\n/* 模态框样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: fadeIn 0.3s;\n}\n\n.modal {\n background-color: white;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\n width: 500px;\n max-width: 90%;\n max-height: 90vh;\n overflow-y: auto;\n animation: slideIn 0.3s;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes slideIn {\n from {\n transform: translateY(-20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.modal-header h2 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1890ff;\n}\n\n.close-button {\n background: none;\n border: none;\n font-size: 20px;\n color: #999;\n cursor: pointer;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n transition: all 0.3s;\n}\n\n.close-button:hover {\n background-color: #f5f5f5;\n color: #555;\n}\n\n.feature-form {\n padding: 24px;\n}\n\n.form-group {\n margin-bottom: 20px;\n}\n\n.form-group label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.checkbox-label {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n color: #333;\n cursor: pointer;\n}\n\n.form-group input[type="text"] {\n width: 100%;\n height: 40px;\n padding: 0 12px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n font-size: 14px;\n transition: all 0.3s;\n}\n\n.form-group input[type="text"]:focus {\n border-color: #40a9ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n outline: none;\n}\n\n.form-group input[type="checkbox"] {\n width: 16px;\n height: 16px;\n margin: 0;\n}\n\n.form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n margin-top: 24px;\n}\n\n.cancel-button {\n height: 40px;\n padding: 0 16px;\n background-color: white;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n transition: all 0.3s;\n}\n\n.cancel-button:hover {\n background-color: #f5f5f5;\n}\n\n.submit-button {\n height: 40px;\n padding: 0 24px;\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n transition: all 0.3s;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n/* 加载中样式 */\n/* 加载状态样式 */\n.loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n gap: 16px;\n}\n\n.loading-text {\n color: #8c8c8c;\n font-size: 16px;\n}\n\n/* 空状态样式 */\n.custom-empty {\n padding: 60px 20px;\n}\n\n.empty-image {\n margin-bottom: 16px;\n}\n\n.empty-description {\n margin-bottom: 24px;\n}\n\n.empty-title {\n font-size: 16px;\n font-weight: 500;\n color: #262626;\n margin-bottom: 8px;\n}\n\n.empty-subtitle {\n font-size: 14px;\n color: #8c8c8c;\n line-height: 1.5;\n}\n\n.empty-actions {\n display: flex;\n gap: 12px;\n justify-content: center;\n flex-wrap: wrap;\n}\n\n/* 分页组件样式 */\n.pagination-wrapper {\n margin-top: 32px;\n padding-top: 24px;\n border-top: 1px solid #f0f0f0;\n display: flex;\n justify-content: center;\n}\n\n.custom-pagination {\n display: flex;\n justify-content: center;\n}\n\n.custom-pagination .ant-pagination-total-text {\n color: #8c8c8c;\n font-size: 14px;\n}\n\n/* 响应式调整 */\n@media (max-width: 768px) {\n .mock-data-container {\n padding: 16px;\n }\n \n .page-title-bar {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n \n .page-actions {\n width: 100%;\n justify-content: flex-start;\n }\n \n .stats-section {\n justify-content: space-around;\n gap: 16px;\n }\n \n .control-group {\n justify-content: flex-start;\n }\n \n .control-panel-card .ant-card-body {\n padding: 16px;\n }\n \n .feature-list-card .ant-card-body {\n padding: 16px;\n }\n \n .feature-card-content {\n height: auto;\n }\n \n .form-actions {\n flex-direction: column;\n }\n \n .cancel-button, .submit-button {\n width: 100%;\n }\n \n .empty-actions {\n flex-direction: column;\n align-items: center;\n }\n \n .empty-actions .ant-btn {\n width: 200px;\n }\n}\n\n@media (max-width: 576px) {\n .stats-section {\n flex-direction: column;\n gap: 12px;\n align-items: stretch;\n }\n \n .stats-item {\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n background: #fafafa;\n border-radius: 6px;\n }\n \n .stats-number {\n font-size: 20px;\n }\n \n .stats-label {\n font-size: 13px;\n }\n \n .control-group {\n flex-direction: column;\n align-items: flex-start;\n gap: 8px;\n }\n \n .page-info {\n order: -1;\n font-weight: 500;\n }\n}\n\n/* 修复功能模块状态标记(ribbon)与按钮的重叠问题 */\n.ant-ribbon.ant-ribbon-placement-end {\n top: 5px; /* 向下调整 ribbon 位置 */\n right: 0px;\n z-index: 5;\n}\n\n/* 确保功能卡片右上角有足够空间容纳 ribbon */\n.ant-card-extra {\n margin-right: 70px; /* 为 ribbon 提供足够空间 */\n}\n\n/* 当屏幕宽度较小时调整 ribbon 位置 */\n@media (max-width: 576px) {\n .ant-ribbon.ant-ribbon-placement-end {\n top: 3px;\n z-index: 5;\n }\n \n .ant-card-extra {\n margin-right: 60px;\n }\n}\n\n/* 视图切换控制样式 */\n.view-mode-controls {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n}\n\n.view-mode-controls .ant-btn-group {\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);\n}\n\n/* 列表视图样式 */\n.feature-list-card .ant-table-wrapper {\n margin-top: 0;\n}\n\n.feature-list-card .ant-table {\n font-size: 14px;\n}\n\n.feature-list-card .ant-table-thead > tr > th {\n background-color: #fafafa;\n font-weight: 600;\n color: #262626;\n padding: 16px;\n}\n\n.feature-list-card .ant-table-tbody > tr > td {\n padding: 16px;\n}\n\n.feature-list-card .ant-table-tbody > tr:hover {\n background-color: #f5f5f5;\n}\n\n.feature-list-card .ant-table-tbody > tr.inactive-row {\n background-color: #fafafa;\n opacity: 0.7;\n}\n\n.feature-list-card .ant-table-tbody > tr.inactive-row:hover {\n background-color: #f0f0f0;\n}\n\n/* 列表视图中的操作按钮样式 */\n.feature-list-card .ant-btn-link {\n padding: 4px 8px;\n height: auto;\n}\n\n/* 响应式调整 */\n@media (max-width: 768px) {\n .view-mode-controls {\n justify-content: center;\n margin-top: 12px;\n }\n \n .feature-list-card .ant-table {\n font-size: 13px;\n }\n \n .feature-list-card .ant-table-thead > tr > th,\n .feature-list-card .ant-table-tbody > tr > td {\n padding: 12px 8px;\n }\n} ',""]);const c=i},3363:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>y});var r=t(5072),o=t.n(r),a=t(7825),i=t.n(a),c=t(7659),l=t.n(c),s=t(5056),u=t.n(s),d=t(540),p=t.n(d),f=t(1113),m=t.n(f),h=t(7702),b={};b.styleTagTransform=m(),b.setAttributes=u(),b.insert=l().bind(null,"head"),b.domAPI=i(),b.insertStyleElement=p(),o()(h.A,b);const y=h.A&&h.A.locals?h.A.locals:void 0},4034:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,"/* 全局样式变量 */\n:root {\n --primary-color: #1890ff;\n --primary-hover: #40a9ff;\n --primary-active: #096dd9;\n --success-color: #52c41a;\n --warning-color: #faad14;\n --error-color: #f5222d;\n --font-color: #262626;\n --text-secondary: #595959;\n --text-light: #8c8c8c;\n --border-color: #f0f0f0;\n --border-radius: 8px;\n --card-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n --transition-time: 0.3s;\n}\n\n\n/* 页面容器 */\n.interface-management-container {\n padding: 24px;\n min-height: calc(100vh - 120px);\n}\n\n/* 统一控制台 */\n.interface-control-panel {\n margin-bottom: 16px;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.control-panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.control-left {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.control-right {\n display: flex;\n align-items: center;\n}\n\n.feature-selector {\n display: flex;\n align-items: center;\n background: #f9f9f9;\n padding: 6px 12px;\n border-radius: var(--border-radius);\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);\n transition: all var(--transition-time);\n}\n\n.feature-selector:hover {\n box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);\n}\n\n.feature-selector span {\n margin-right: 8px;\n font-weight: 600;\n color: var(--text-secondary);\n font-size: 14px;\n}\n\n.control-panel-stats {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 0 8px 0;\n min-height: 40px;\n}\n\n.stats-left {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.stats-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.stat-item {\n display: inline-flex;\n align-items: center;\n font-size: 14px;\n}\n\n.stat-label {\n color: var(--text-secondary);\n margin-right: 6px;\n}\n\n.stat-value {\n font-weight: 600;\n color: var(--font-color);\n}\n\n.selected-count {\n font-weight: 600;\n color: var(--primary-color);\n font-size: 13px;\n}\n\n/* 旧版样式兼容 */\n.interface-header-card {\n margin-bottom: 16px;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.interface-management-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n}\n\n.feature-selector-container {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.interface-actions {\n display: flex;\n align-items: center;\n}\n\n.add-interface-button {\n background: linear-gradient(to right, var(--primary-color), var(--primary-hover));\n border: none;\n box-shadow: 0 2px 6px rgba(24, 144, 255, 0.25);\n transition: all var(--transition-time);\n}\n\n.add-interface-button:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 10px rgba(24, 144, 255, 0.4);\n}\n\n/* 分组筛选区域 */\n.filter-card {\n margin-bottom: 16px;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filter-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.filter-title {\n font-weight: 600;\n font-size: 15px;\n color: var(--text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.group-tags-container {\n margin-bottom: 12px;\n max-height: 120px;\n overflow-y: auto;\n padding: 8px 0;\n}\n\n.group-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.group-tag {\n cursor: pointer;\n user-select: none;\n transition: all 0.2s;\n padding: 6px 12px;\n font-size: 13px;\n}\n\n.group-tag:hover {\n transform: translateY(-2px);\n}\n\n.group-tag.active {\n font-weight: 600;\n}\n\n.group-actions {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n justify-content: flex-end;\n}\n\n.empty-groups {\n color: #999;\n font-style: italic;\n padding: 8px 0;\n}\n\n/* 接口列表区域 */\n.list-header-card {\n margin-bottom: 16px;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.list-header-info {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n\n.feature-info {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.feature-info .label {\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.feature-info .value {\n font-weight: 600;\n color: var(--font-color);\n}\n\n.group-badge {\n margin-left: 12px;\n}\n\n.interface-stats {\n font-size: 13px;\n}\n\n.selected-count {\n font-weight: 600;\n color: var(--primary-color);\n}\n\n.batch-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.list-container-card {\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n margin-bottom: 40px;\n}\n\n.interface-list-container {\n padding: 0;\n}\n\n/* 表格样式增强 */\n.interface-table th {\n background-color: #f5f7fa !important;\n font-weight: 600;\n padding: 12px 16px !important;\n color: #333;\n white-space: nowrap;\n}\n\n.interface-table td {\n padding: 12px 16px !important;\n white-space: nowrap;\n overflow: hidden;\n}\n\n/* 当前响应列需要 overflow: visible 以显示完整的下拉菜单 */\n.interface-table td.current-response-cell {\n overflow: visible !important;\n}\n\n/* 卡片视图样式 */\n.interface-card-view {\n padding-bottom: 20px;\n}\n\n.interface-card {\n border-radius: 8px;\n transition: all 0.3s;\n height: 100%;\n}\n\n.interface-card:hover {\n transform: translateY(-3px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n}\n\n.interface-card.inactive {\n background-color: #f5f5f5;\n border: 1px solid #e8e8e8;\n opacity: 0.8;\n}\n\n.interface-card-header {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 12px;\n position: relative;\n}\n\n.interface-card-title {\n font-weight: 600;\n font-size: 15px;\n margin-right: 40px;\n line-height: 1.4;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.interface-card-switch {\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.interface-card-group {\n cursor: pointer;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n align-self: flex-start;\n}\n\n.url-pattern-container {\n background: #f5f7fa;\n padding: 8px;\n border-radius: 4px;\n margin-bottom: 10px;\n}\n\n.interface-card .url-pattern {\n font-family: monospace;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: 12px;\n color: #333;\n}\n\n.interface-card-info {\n margin-bottom: 12px;\n}\n\n.info-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 4px;\n}\n\n.info-label {\n font-size: 12px;\n color: #666;\n}\n\n.status-badge {\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 12px;\n}\n\n.status-success {\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n color: #52c41a;\n}\n\n.status-warning {\n background: #fff7e6;\n border: 1px solid #ffd591;\n color: #faad14;\n}\n\n.status-error {\n background: #fff1f0;\n border: 1px solid #ffa39e;\n color: #f5222d;\n}\n\n.interface-card-actions {\n display: flex;\n justify-content: space-between;\n margin-top: 12px;\n gap: 8px;\n}\n\n.card-pagination {\n display: flex;\n justify-content: center;\n margin-top: 20px;\n padding: 0 16px 16px;\n}\n\n.test-interface-container {\n padding: 20px;\n background: #f9f9f9;\n border-radius: var(--border-radius);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);\n margin-top: 24px;\n}\n\n.test-result {\n margin-top: 24px;\n padding: 20px;\n border-radius: var(--border-radius);\n background-color: #fff;\n border: 1px solid var(--border-color);\n box-shadow: var(--card-shadow);\n}\n\n.result-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 1px solid var(--border-color);\n}\n\n.result-header h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--font-color);\n}\n\n.status {\n font-size: 14px;\n padding: 4px 12px;\n border-radius: 20px;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status.success {\n background-color: #f6ffed;\n border: 1px solid #b7eb8f;\n color: var(--success-color);\n}\n\n.status.error {\n background-color: #fff2f0;\n border: 1px solid #ffccc7;\n color: var(--error-color);\n}\n\n.result-content {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.result-item {\n display: flex;\n align-items: flex-start;\n padding: 8px 12px;\n background: #fafafa;\n border-radius: 6px;\n transition: background-color var(--transition-time);\n}\n\n.result-item:hover {\n background: #f0f0f0;\n}\n\n.result-item .label {\n font-weight: 600;\n width: 120px;\n flex-shrink: 0;\n color: var(--text-secondary);\n}\n\n.result-item .value {\n word-break: break-all;\n color: var(--font-color);\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n}\n\n.result-body {\n margin-top: 16px;\n}\n\n.result-body .label {\n font-weight: 600;\n margin-bottom: 12px;\n color: var(--text-secondary);\n}\n\n.result-body pre {\n margin: 0;\n padding: 16px;\n background-color: #f5f5f5;\n border-radius: var(--border-radius);\n max-height: 400px;\n overflow: auto;\n white-space: pre-wrap;\n word-wrap: break-word;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n font-size: 14px;\n line-height: 1.6;\n border: 1px solid #e8e8e8;\n}\n\n.result-error {\n color: var(--error-color);\n padding: 12px 16px;\n background-color: #fff2f0;\n border-radius: var(--border-radius);\n border-left: 4px solid var(--error-color);\n}\n\n.breadcrumb {\n display: flex;\n align-items: center;\n font-size: 14px;\n margin-bottom: 16px;\n}\n\n.breadcrumb .link {\n color: var(--primary-color);\n cursor: pointer;\n transition: color var(--transition-time);\n}\n\n.breadcrumb .link:hover {\n color: var(--primary-hover);\n text-decoration: underline;\n}\n\n.breadcrumb .separator {\n margin: 0 12px;\n color: #d9d9d9;\n}\n\n.breadcrumb .current {\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.add-button {\n background: linear-gradient(to right, var(--primary-color), var(--primary-hover));\n color: white;\n border: none;\n border-radius: var(--border-radius);\n padding: 0 20px;\n height: 40px;\n cursor: pointer;\n font-size: 15px;\n font-weight: 500;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all var(--transition-time);\n box-shadow: 0 2px 8px rgba(24, 144, 255, 0.35);\n}\n\n.add-button:hover {\n background: linear-gradient(to right, var(--primary-hover), var(--primary-active));\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(24, 144, 255, 0.5);\n}\n\n.feature-details {\n background-color: white;\n border-radius: var(--border-radius);\n box-shadow: var(--card-shadow);\n padding: 24px;\n margin-bottom: 24px;\n border-left: 4px solid var(--primary-color);\n}\n\n.feature-name {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-bottom: 12px;\n}\n\n.feature-name h1 {\n font-size: 22px;\n font-weight: 600;\n color: var(--font-color);\n margin: 0;\n}\n\n.status-badge {\n font-size: 13px;\n padding: 4px 12px;\n border-radius: 20px;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge.active {\n background-color: #f6ffed;\n color: var(--success-color);\n border: 1px solid #b7eb8f;\n}\n\n.status-badge.inactive {\n background-color: #fff1f0;\n color: var(--error-color);\n border: 1px solid #ffa39e;\n}\n\n.feature-description {\n color: var(--text-secondary);\n font-size: 15px;\n margin: 0;\n line-height: 1.6;\n}\n\n/* 重复的表格样式已移除,使用上面的统一定义 */\n\n.interface-table tr.inactive {\n color: var(--text-light);\n background-color: #f9f9f9;\n opacity: 0.7;\n}\n\n.url-pattern {\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n padding: 4px 8px;\n background: #f5f5f5;\n border-radius: 4px;\n display: inline-block;\n max-width: 300px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* 接口状态开关 */\n.status-switch {\n position: relative;\n display: inline-block;\n width: 48px;\n height: 24px;\n}\n\n.status-switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.status-switch .slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n transition: .4s;\n border-radius: 24px;\n}\n\n.status-switch .slider:before {\n position: absolute;\n content: \"\";\n height: 18px;\n width: 18px;\n left: 3px;\n bottom: 3px;\n background-color: white;\n transition: .4s;\n border-radius: 50%;\n}\n\n.status-switch input:checked + .slider {\n background-color: var(--success-color);\n}\n\n.status-switch input:checked + .slider:before {\n transform: translateX(24px);\n}\n\n/* 操作按钮 */\n.action-button {\n border: none;\n border-radius: 6px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n transition: all var(--transition-time);\n margin-right: 8px;\n}\n\n.test-button {\n background-color: #e6f7ff;\n color: var(--primary-color);\n border: 1px solid #91d5ff;\n}\n\n.test-button:hover {\n background-color: #bae7ff;\n}\n\n.edit-button {\n background-color: #fcf6bd;\n color: #d4b106;\n border: 1px solid #ffd666;\n}\n\n.edit-button:hover {\n background-color: #fff1b8;\n}\n\n.delete-button {\n background-color: #fff2f0;\n color: var(--error-color);\n border: 1px solid #ffccc7;\n}\n\n.delete-button:hover {\n background-color: #ffa39e;\n color: #fff;\n}\n\n/* 空状态 */\n.empty-data {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n background: #fafafa;\n border-radius: var(--border-radius);\n text-align: center;\n margin-top: 24px;\n}\n\n.empty-icon {\n font-size: 64px;\n color: #d9d9d9;\n margin-bottom: 24px;\n}\n\n.empty-text {\n color: var(--text-secondary);\n font-size: 16px;\n margin-bottom: 24px;\n}\n\n.create-interface-button {\n background: linear-gradient(to right, var(--primary-color), var(--primary-hover));\n color: white;\n border: none;\n border-radius: var(--border-radius);\n padding: 0 24px;\n height: 44px;\n cursor: pointer;\n font-size: 16px;\n font-weight: 500;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all var(--transition-time);\n box-shadow: 0 2px 8px rgba(24, 144, 255, 0.35);\n}\n\n.create-interface-button:hover {\n background: linear-gradient(to right, var(--primary-hover), var(--primary-active));\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(24, 144, 255, 0.5);\n}\n\n/* 加载状态 */\n.loading {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 40px;\n font-size: 16px;\n color: var(--text-secondary);\n}\n\n/* 错误容器样式 */\n.error-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n color: #8c8c8c;\n}\n\n.error-icon {\n font-size: 48px;\n margin-bottom: 16px;\n}\n\n.error-message {\n font-size: 16px;\n margin-bottom: 24px;\n}\n\n.back-button {\n height: 36px;\n padding: 0 20px;\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n.back-button:hover {\n background-color: #40a9ff;\n}\n\n/* 模态框样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n.modal {\n background-color: white;\n border-radius: 4px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n width: 600px;\n max-width: 90%;\n max-height: 90vh;\n overflow-y: auto;\n}\n\n.interface-modal {\n width: 700px;\n}\n\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.modal-header h2 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #262626;\n}\n\n.close-button {\n background: none;\n border: none;\n font-size: 20px;\n color: #8c8c8c;\n cursor: pointer;\n}\n\n.interface-form {\n padding: 16px;\n}\n\n.form-row {\n display: flex;\n gap: 16px;\n}\n\n.form-row .form-group {\n flex: 1;\n}\n\n.form-group {\n margin-bottom: 16px;\n}\n\n.form-group label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #262626;\n}\n\n.response-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.format-button {\n background-color: #f0f5ff;\n color: #597ef7;\n border: none;\n border-radius: 4px;\n padding: 4px 8px;\n cursor: pointer;\n font-size: 12px;\n}\n\n.format-button:hover {\n background-color: #d6e4ff;\n}\n\n.checkbox-label,\n.radio-label {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: normal;\n color: #262626;\n margin-bottom: 8px;\n}\n\n.radio-group {\n display: flex;\n gap: 24px;\n}\n\n.form-group input[type=\"text\"],\n.form-group input[type=\"number\"],\n.form-group select {\n width: 100%;\n height: 32px;\n padding: 0 12px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n font-size: 14px;\n}\n\n.form-group textarea {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n font-size: 14px;\n resize: vertical;\n font-family: monospace;\n}\n\n.help-text {\n font-size: 12px;\n color: #8c8c8c;\n margin-top: 4px;\n display: block;\n}\n\n.form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n}\n\n.cancel-button {\n height: 32px;\n padding: 0 16px;\n background-color: white;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n.submit-button {\n height: 32px;\n padding: 0 16px;\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n/* 全屏TextArea样式 */\n.textarea-fullscreen-btn {\n position: absolute;\n top: 8px;\n right: 32px;\n background: rgba(255, 255, 255, 0.9);\n border: 1px solid #d9d9d9;\n z-index: 10;\n}\n\n.textarea-fullscreen-btn:hover {\n background: rgba(255, 255, 255, 1);\n border-color: #40a9ff;\n}\n\n.textarea-fullscreen-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: #1f1f1f;\n z-index: 1000;\n display: flex;\n flex-direction: column;\n}\n\n.textarea-fullscreen-header {\n padding: 12px 16px;\n border-bottom: 1px solid #333;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n}\n\n.textarea-fullscreen-editor {\n flex: 1;\n border: none !important;\n background: #1f1f1f !important;\n color: #ffffff !important;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace !important;\n font-size: 14px !important;\n line-height: 1.6 !important;\n resize: none !important;\n padding: 16px !important;\n outline: none !important;\n box-shadow: none !important;\n}\n\n.textarea-fullscreen-editor:focus {\n background: #1f1f1f !important;\n border: none !important;\n box-shadow: none !important;\n}\n\n/* 延迟时间样式 */\n.delay-active {\n color: #1890ff;\n font-weight: 500;\n}\n\n.delay-inactive {\n color: #999;\n font-style: italic;\n}\n\n/* 状态码样式 */\n.status-success {\n color: #52c41a;\n font-weight: 500;\n}\n\n.status-warning {\n color: #faad14;\n font-weight: 500;\n}\n\n.status-error {\n color: #f5222d;\n font-weight: 500;\n}\n\n/* 接口名称样式 */\n.interface-name {\n font-weight: 500;\n}\n\n/* URL模式样式 */\n.url-pattern {\n font-family: monospace;\n color: #333;\n}\n\n/* 无响应数据样式 */\n.no-response {\n color: #999;\n font-style: italic;\n}\n\n/* 内联列设置按钮样式 */\n.inline-column-settings-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n border-radius: 4px;\n border: 1px solid #d9d9d9;\n background: #ffffff;\n color: #666;\n font-size: 12px;\n transition: all 0.2s ease;\n}\n\n.inline-column-settings-btn:hover {\n border-color: #4096ff;\n background: #f0f9ff;\n color: #4096ff;\n}\n\n.inline-column-settings-btn:active {\n border-color: #1677ff;\n background: #e6f4ff;\n}\n\n/* 紧凑排序 Chips */\n.sortable-chip {\n display: inline-flex;\n align-items: center;\n padding: 2px 10px;\n height: 24px;\n border: 1px solid #e6e6e6;\n border-radius: 12px;\n background: #fff;\n font-size: 12px;\n color: #595959;\n cursor: move;\n user-select: none;\n white-space: nowrap;\n}\n\n.sortable-chip:hover {\n border-color: #bfbfbf;\n box-shadow: 0 1px 2px rgba(0,0,0,0.06);\n}\n\n.sortable-chip-active {\n background: #e6f7ff;\n border-color: #91d5ff;\n color: #1677ff;\n}\n\n.sortable-ghost {\n opacity: 0.6;\n}\n\n/* 接口弹窗样式 */\n.interface-modal .ant-modal-header {\n border-bottom: 1px solid #f0f0f0;\n padding: 16px 24px;\n margin-bottom: 0;\n}\n\n.interface-modal .ant-modal-body {\n padding: 0;\n}\n\n.interface-modal .ant-card {\n border: 1px solid #e8e8e8;\n border-radius: 8px;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);\n}\n\n.interface-modal .ant-card-head {\n background: #fafafa;\n border-bottom: 1px solid #f0f0f0;\n padding: 0 20px;\n min-height: 48px;\n}\n\n.interface-modal .ant-card-head-title {\n font-size: 14px;\n font-weight: 600;\n color: #262626;\n padding: 12px 0;\n}\n\n.interface-modal .ant-form-item-label > label {\n font-size: 13px;\n font-weight: 500;\n color: #434343;\n}\n\n.interface-modal .ant-form-item {\n margin-bottom: 16px;\n}\n\n.interface-modal .ant-input,\n.interface-modal .ant-select-selector {\n border-radius: 6px;\n border: 1px solid #d9d9d9;\n}\n\n.interface-modal .ant-input:focus,\n.interface-modal .ant-select-focused .ant-select-selector {\n border-color: #4096ff;\n box-shadow: 0 0 0 2px rgba(64, 150, 255, 0.1);\n}\n\n/* 接口弹窗中的折叠面板样式 */\n.interface-modal .ant-collapse {\n background: transparent;\n border: none;\n}\n\n.interface-modal .ant-collapse-item {\n margin-bottom: 16px;\n background: #ffffff;\n border: 1px solid #e8e8e8;\n border-radius: 8px;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);\n}\n\n.interface-modal .ant-collapse-header {\n background: #fafafa;\n border-bottom: 1px solid #f0f0f0;\n border-radius: 8px 8px 0 0 !important;\n padding: 16px 20px !important;\n font-size: 14px;\n font-weight: 600;\n color: #262626;\n}\n\n.interface-modal .ant-collapse-content {\n border-top: none;\n background: #ffffff;\n border-radius: 0 0 8px 8px;\n}\n\n.interface-modal .ant-collapse-content-box {\n padding: 20px;\n}\n\n.interface-modal .ant-collapse-arrow {\n color: #666 !important;\n font-size: 12px !important;\n}\n\n/* 参数匹配规则帮助按钮样式 */\n.interface-modal .ant-popover-inner-content {\n padding: 12px;\n}\n\n.interface-modal .ant-popover-title {\n font-weight: 600;\n color: #262626;\n padding: 8px 12px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n/* 分页器样式 */\n.interface-table .ant-pagination-options {\n margin-right: 16px;\n}\n\n/* 可调整列宽样式 */\n.column-resize-handle {\n position: absolute;\n right: -5px;\n top: 0;\n bottom: 0;\n width: 10px;\n cursor: col-resize;\n z-index: 1;\n user-select: none;\n}\n\n.column-resize-handle:hover {\n background-color: rgba(24, 144, 255, 0.2);\n}\n\n.column-resize-handle::after {\n content: '';\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n width: 2px;\n height: 20px;\n background-color: #d9d9d9;\n transition: background-color 0.3s;\n}\n\n.column-resize-handle:hover::after {\n background-color: #1890ff;\n}\n",""]);const c=i},7702:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,"/* ============================================================\n Whistle Mock Plugin - Cyberpunk Theme Override\n 覆盖 Ant Design 5 和项目自定义样式为赛博朋克风格\n ============================================================ */\n\n/* ── 全局背景与文字 ── */\nbody.cyber-theme, body.cyber-theme #root{\n background-color: #050508 !important;\n color: #e0e0e0 !important;\n font-family: 'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\nbody.cyber-theme{\n --primary-color: #00f0ff;\n --primary-hover: #33f3ff;\n --primary-active: #00c2cc;\n --success-color: #00ff41;\n --warning-color: #f0e800;\n --error-color: #ff4d4f;\n --font-color: #e0e0e0;\n --text-secondary: #a0a0a0;\n --text-light: #6b7280;\n --border-color: #1a1a2e;\n --border-radius: 6px;\n --card-shadow: 0 0 0 1px rgba(0, 240, 255, 0.1);\n --transition-time: 0.3s;\n --ant-color-primary: #00f0ff;\n --ant-color-primary-hover: #33f3ff;\n --ant-color-primary-active: #00c2cc;\n --ant-color-success: #00ff41;\n --ant-color-warning: #f0e800;\n --ant-color-error: #ff4d4f;\n --ant-color-info: #00f0ff;\n --ant-color-text: #e0e0e0;\n --ant-color-text-secondary: #a0a0a0;\n --ant-color-border: #1a1a2e;\n --ant-color-bg-base: #0a0a12;\n --ant-color-bg-container: #0f0f1a;\n --ant-color-bg-elevated: #141420;\n --ant-color-bg-layout: #0a0a12;\n background-color: #050508 !important;\n}\n\nbody.cyber-theme h1, body.cyber-theme h2, body.cyber-theme h3, body.cyber-theme h4, body.cyber-theme h5, body.cyber-theme h6{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme a{\n color: #00f0ff !important;\n}\nbody.cyber-theme a:hover{\n color: #33f3ff !important;\n}\n\n/* ── 滚动条 ── */\nbody.cyber-theme ::-webkit-scrollbar{\n width: 6px;\n height: 6px;\n}\nbody.cyber-theme ::-webkit-scrollbar-track{\n background: #0a0a12;\n}\nbody.cyber-theme ::-webkit-scrollbar-thumb{\n background: #1a1a2e;\n border-radius: 3px;\n}\nbody.cyber-theme ::-webkit-scrollbar-thumb:hover{\n background: #00f0ff;\n}\n\n/* ── Ant Design Layout ── */\nbody.cyber-theme .ant-layout{\n background: #0a0a12 !important;\n}\n\nbody.cyber-theme .ant-layout-header{\n background: #0f0f1a !important;\n border-bottom: 1px solid #1a1a2e !important;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) !important;\n}\n\nbody.cyber-theme .ant-layout-sider{\n background: #0f0f1a !important;\n border-right: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-layout-content{\n background: #0f0f1a !important;\n}\n\n/* ── Ant Menu ── */\nbody.cyber-theme .ant-menu{\n background: #0f0f1a !important;\n border-right: none !important;\n}\n\nbody.cyber-theme .ant-menu-item{\n color: #a0a0a0 !important;\n border-radius: 4px !important;\n margin: 4px 8px !important;\n}\n\nbody.cyber-theme .ant-menu-item:hover{\n color: #00f0ff !important;\n background: rgba(0, 240, 255, 0.08) !important;\n}\n\nbody.cyber-theme .ant-menu-item-selected{\n color: #00f0ff !important;\n background: rgba(0, 240, 255, 0.12) !important;\n font-weight: 500;\n}\n\nbody.cyber-theme .ant-menu-item-selected::after{\n display: none !important;\n}\n\nbody.cyber-theme .ant-menu-submenu-title{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-menu-submenu-selected > .ant-menu-submenu-title{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-menu-inline .ant-menu-item::after{\n display: none !important;\n}\n\n/* ── Ant Card ── */\nbody.cyber-theme .ant-card{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n border-radius: 6px !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-card:hover{\n border-color: rgba(0, 240, 255, 0.3) !important;\n box-shadow: 0 0 0 1px rgba(0, 240, 255, 0.1), 0 4px 16px rgba(0, 0, 0, 0.4) !important;\n}\n\nbody.cyber-theme .ant-card-head{\n background: #0f0f1a !important;\n border-bottom: 1px solid #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-card-body{\n background: #0f0f1a !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-card-meta-title{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-card-meta-description{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-card-actions{\n background: #0a0a12 !important;\n border-top: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-card-actions > li > span{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-card-actions > li > span:hover{\n color: #00f0ff !important;\n}\n\n/* ── Ant Button ── */\nbody.cyber-theme .ant-btn{\n border-radius: 4px !important;\n}\n\nbody.cyber-theme .ant-btn-primary{\n background: #00f0ff !important;\n border-color: #00f0ff !important;\n color: #050508 !important;\n font-weight: 500;\n}\n\nbody.cyber-theme .ant-btn-primary:hover{\n background: #33f3ff !important;\n border-color: #33f3ff !important;\n box-shadow: 0 0 12px rgba(0, 240, 255, 0.4) !important;\n}\n\nbody.cyber-theme .ant-btn-default{\n background: transparent !important;\n border-color: #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-btn-default:hover{\n border-color: #00f0ff !important;\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-btn-text{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-btn-text:hover{\n color: #00f0ff !important;\n background: rgba(0, 240, 255, 0.08) !important;\n}\n\nbody.cyber-theme .ant-btn-dangerous{\n background: transparent !important;\n border-color: #ff4d4f !important;\n color: #ff4d4f !important;\n}\n\nbody.cyber-theme .ant-btn-dangerous:hover{\n background: rgba(255, 77, 79, 0.1) !important;\n}\n\n/* ── Ant Table ── */\nbody.cyber-theme .ant-table{\n background: #0f0f1a !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-table-thead > tr > th{\n background: #141420 !important;\n color: #a0a0a0 !important;\n border-bottom: 1px solid #1a1a2e !important;\n font-weight: 600;\n}\n\nbody.cyber-theme .ant-table-tbody > tr > td{\n background: #0f0f1a !important;\n color: #e0e0e0 !important;\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-table-tbody > tr:hover > td{\n background: rgba(0, 240, 255, 0.05) !important;\n}\n\nbody.cyber-theme .ant-table-tbody > tr.ant-table-row-selected > td{\n background: rgba(0, 240, 255, 0.08) !important;\n}\n\nbody.cyber-theme .ant-table-cell{\n background: #0f0f1a !important;\n}\n\nbody.cyber-theme .ant-table-empty .ant-empty-description{\n color: #6b7280 !important;\n}\n\n/* ── Ant Modal ── */\nbody.cyber-theme .ant-modal-content{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n box-shadow: 0 0 0 1px rgba(0, 240, 255, 0.1), 0 16px 48px rgba(0, 0, 0, 0.6) !important;\n}\n\nbody.cyber-theme .ant-modal-header{\n background: #0f0f1a !important;\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-modal-title{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-modal-close-x{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-modal-close-x:hover{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-modal-footer{\n border-top: 1px solid #1a1a2e !important;\n}\n\n/* ── Ant Form ── */\nbody.cyber-theme .ant-form-item-label > label{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-input{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-input:hover{\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-input:focus{\n border-color: #00f0ff !important;\n box-shadow: 0 0 0 2px rgba(0, 240, 255, 0.15) !important;\n}\n\nbody.cyber-theme .ant-input::placeholder{\n color: #4a4a5a !important;\n}\n\nbody.cyber-theme .ant-input-affix-wrapper{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-input-affix-wrapper:hover{\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-input-affix-wrapper-focused{\n border-color: #00f0ff !important;\n box-shadow: 0 0 0 2px rgba(0, 240, 255, 0.15) !important;\n}\n\nbody.cyber-theme .ant-input-textarea{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\n/* ── Ant Select ── */\nbody.cyber-theme .ant-select-selector{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-select:hover .ant-select-selector{\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-select-focused .ant-select-selector{\n border-color: #00f0ff !important;\n box-shadow: 0 0 0 2px rgba(0, 240, 255, 0.15) !important;\n}\n\nbody.cyber-theme .ant-select-dropdown{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-select-item{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-select-item-option-active{\n background: rgba(0, 240, 255, 0.08) !important;\n}\n\nbody.cyber-theme .ant-select-item-option-selected{\n background: rgba(0, 240, 255, 0.12) !important;\n color: #00f0ff !important;\n font-weight: 500;\n}\n\n/* ── Ant Switch ── */\nbody.cyber-theme .ant-switch{\n background: #2a2a3e !important;\n}\n\nbody.cyber-theme .ant-switch-checked{\n background: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-switch-checked .ant-switch-inner{\n color: #050508 !important;\n}\n\n/* ── Ant Tag ── */\nbody.cyber-theme .ant-tag{\n background: rgba(0, 240, 255, 0.08) !important;\n border-color: rgba(0, 240, 255, 0.2) !important;\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-tag-green{\n background: rgba(0, 255, 65, 0.08) !important;\n border-color: rgba(0, 255, 65, 0.2) !important;\n color: #00ff41 !important;\n}\n\nbody.cyber-theme .ant-tag-red{\n background: rgba(255, 77, 79, 0.08) !important;\n border-color: rgba(255, 77, 79, 0.2) !important;\n color: #ff4d4f !important;\n}\n\nbody.cyber-theme .ant-tag-orange{\n background: rgba(240, 232, 0, 0.08) !important;\n border-color: rgba(240, 232, 0, 0.2) !important;\n color: #f0e800 !important;\n}\n\n/* ── Ant Badge ── */\nbody.cyber-theme .ant-badge-status-dot{\n box-shadow: 0 0 4px currentColor;\n}\n\n/* ── Ant Pagination ── */\nbody.cyber-theme .ant-pagination-item{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-pagination-item a{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-pagination-item:hover{\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-pagination-item:hover a{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-pagination-item-active{\n background: #00f0ff !important;\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-pagination-item-active a{\n color: #050508 !important;\n}\n\nbody.cyber-theme .ant-pagination-prev .ant-pagination-item-link, body.cyber-theme .ant-pagination-next .ant-pagination-item-link{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-pagination-prev:hover .ant-pagination-item-link, body.cyber-theme .ant-pagination-next:hover .ant-pagination-item-link{\n border-color: #00f0ff !important;\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-pagination-disabled .ant-pagination-item-link{\n color: #4a4a5a !important;\n}\n\n/* ── Ant Breadcrumb ── */\nbody.cyber-theme .ant-breadcrumb{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .ant-breadcrumb a{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-breadcrumb a:hover{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-breadcrumb-separator{\n color: #4a4a5a !important;\n}\n\nbody.cyber-theme .ant-breadcrumb li:last-child{\n color: #e0e0e0 !important;\n}\n\n/* ── Ant Popover / Tooltip ── */\nbody.cyber-theme .ant-popover-inner{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-popover-title{\n color: #e0e0e0 !important;\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-popover-inner-content{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-tooltip-inner{\n background: #141420 !important;\n border: 1px solid #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\n/* ── Ant Drawer ── */\nbody.cyber-theme .ant-drawer-content{\n background: #0f0f1a !important;\n border-left: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-drawer-header{\n background: #0f0f1a !important;\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-drawer-title{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-drawer-body{\n background: #0f0f1a !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-drawer-close{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-drawer-close:hover{\n color: #00f0ff !important;\n}\n\n/* ── Ant Alert ── */\nbody.cyber-theme .ant-alert{\n background: #0a0a12 !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-alert-info{\n background: rgba(0, 240, 255, 0.06) !important;\n border-color: rgba(0, 240, 255, 0.2) !important;\n}\n\nbody.cyber-theme .ant-alert-success{\n background: rgba(0, 255, 65, 0.06) !important;\n border-color: rgba(0, 255, 65, 0.2) !important;\n}\n\nbody.cyber-theme .ant-alert-warning{\n background: rgba(240, 232, 0, 0.06) !important;\n border-color: rgba(240, 232, 0, 0.2) !important;\n}\n\nbody.cyber-theme .ant-alert-error{\n background: rgba(255, 77, 79, 0.06) !important;\n border-color: rgba(255, 77, 79, 0.2) !important;\n}\n\nbody.cyber-theme .ant-alert-message{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-alert-description{\n color: #a0a0a0 !important;\n}\n\n/* ── Ant Radio / Checkbox ── */\nbody.cyber-theme .ant-radio-wrapper{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-radio-checked .ant-radio-inner{\n border-color: #00f0ff !important;\n background: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-radio-checked .ant-radio-inner::after{\n background: #050508 !important;\n}\n\nbody.cyber-theme .ant-checkbox-wrapper{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-checkbox-checked .ant-checkbox-inner{\n background: #00f0ff !important;\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-checkbox-checked .ant-checkbox-inner::after{\n border-color: #050508 !important;\n}\n\n/* ── Ant Divider ── */\nbody.cyber-theme .ant-divider{\n border-color: #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-divider-horizontal.ant-divider-with-text{\n color: #a0a0a0 !important;\n border-color: #1a1a2e !important;\n}\n\n/* ── Ant Dropdown / Menu ── */\nbody.cyber-theme .ant-dropdown-menu{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-dropdown-menu-item{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-dropdown-menu-item:hover{\n background: rgba(0, 240, 255, 0.08) !important;\n color: #00f0ff !important;\n}\n\n/* ── Ant Steps ── */\nbody.cyber-theme .ant-steps-item-title{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-steps-item-description{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .ant-steps-item-finish .ant-steps-item-icon{\n background: rgba(0, 240, 255, 0.1) !important;\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-steps-item-finish .ant-steps-item-icon .ant-steps-icon{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-steps-item-process .ant-steps-item-icon{\n background: #00f0ff !important;\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-steps-item-process .ant-steps-item-icon .ant-steps-icon{\n color: #050508 !important;\n}\n\n/* ── Ant Tabs ── */\nbody.cyber-theme .ant-tabs-tab{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-tabs-tab:hover{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-tabs-tab-active .ant-tabs-tab-btn{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-tabs-ink-bar{\n background: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-tabs-content{\n color: #e0e0e0 !important;\n}\n\n/* ── Ant Collapse ── */\nbody.cyber-theme .ant-collapse{\n background: #0f0f1a !important;\n border-color: #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-collapse > .ant-collapse-item{\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-collapse-header{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-collapse-content{\n background: #0a0a12 !important;\n border-top: 1px solid #1a1a2e !important;\n color: #a0a0a0 !important;\n}\n\n/* ── Ant Descriptions ── */\nbody.cyber-theme .ant-descriptions-item-label{\n background: #141420 !important;\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-descriptions-item-content{\n background: #0f0f1a !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-descriptions-bordered .ant-descriptions-item-label, body.cyber-theme .ant-descriptions-bordered .ant-descriptions-item-content{\n border-color: #1a1a2e !important;\n}\n\n/* ── Ant List ── */\nbody.cyber-theme .ant-list{\n background: #0f0f1a !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-list-item{\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-list-empty-text{\n color: #6b7280 !important;\n}\n\n/* ── Ant Statistic ── */\nbody.cyber-theme .ant-statistic-title{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-statistic-content{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-statistic-content-value{\n color: #00f0ff !important;\n}\n\n/* ── Ant Empty ── */\nbody.cyber-theme .ant-empty-description{\n color: #6b7280 !important;\n}\n\n/* ── Ant Spin ── */\nbody.cyber-theme .ant-spin-dot-item{\n background: #00f0ff !important;\n}\n\n/* ── Ant Message ── */\nbody.cyber-theme .ant-message-notice-content{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n color: #e0e0e0 !important;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5) !important;\n}\n\n/* ── Ant Skeleton ── */\nbody.cyber-theme .ant-skeleton-title, body.cyber-theme .ant-skeleton-paragraph > li{\n background: #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-skeleton-button{\n background: #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-skeleton-input{\n background: #1a1a2e !important;\n}\n\n/* ── 赛博朋克特殊效果 ── */\n\n/* 网格背景 */\nbody.cyber-theme .cyber-grid-bg{\n background-color: #050508;\n background-image:\n linear-gradient(rgba(0, 240, 255, 0.02) 1px, transparent 1px),\n linear-gradient(90deg, rgba(0, 240, 255, 0.02) 1px, transparent 1px);\n background-size: 40px 40px;\n}\n\n/* 发光文字 */\nbody.cyber-theme .text-glow-cyan{\n text-shadow: 0 0 8px rgba(0, 240, 255, 0.5);\n}\n\n/* 顶部装饰线 */\nbody.cyber-theme .cyber-top-line{\n position: relative;\n}\nbody.cyber-theme .cyber-top-line::before{\n content: '';\n position: absolute;\n top: 0;\n left: 20px;\n width: 40px;\n height: 2px;\n background: #00f0ff;\n}\n\n/* 霓虹边框 */\nbody.cyber-theme .cyber-border{\n border: 1px solid rgba(0, 240, 255, 0.2);\n box-shadow: inset 0 0 0 1px rgba(0, 240, 255, 0.05);\n}\n\n/* ── 项目自定义样式覆盖 ── */\n\n/* mock-data.css 覆盖 */\nbody.cyber-theme .mock-data-container{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n box-shadow: none !important;\n}\n\nbody.cyber-theme .feature-card{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n box-shadow: none !important;\n}\n\nbody.cyber-theme .feature-card:hover{\n border-color: rgba(0, 240, 255, 0.3) !important;\n box-shadow: 0 0 12px rgba(0, 240, 255, 0.1) !important;\n}\n\nbody.cyber-theme .feature-card::before{\n background: linear-gradient(135deg, rgba(0, 240, 255, 0.03), rgba(0, 240, 255, 0.06)) !important;\n}\n\nbody.cyber-theme .feature-card .ant-card-actions{\n background: #0a0a12 !important;\n border-top: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .feature-name h4{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .status-tag.active{\n background: rgba(0, 255, 65, 0.1) !important;\n border-color: rgba(0, 255, 65, 0.3) !important;\n color: #00ff41 !important;\n}\n\nbody.cyber-theme .status-tag.inactive{\n background: rgba(255, 77, 79, 0.1) !important;\n border-color: rgba(255, 77, 79, 0.3) !important;\n color: #ff4d4f !important;\n}\n\nbody.cyber-theme .feature-description{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .feature-stat{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .page-title{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .page-description{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .control-label{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .stats-number{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .stats-label{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .empty-data{\n background: #0a0a12 !important;\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .empty-icon{\n color: #2a2a3e !important;\n}\n\n/* interface-management.css 覆盖 */\nbody.cyber-theme .interface-management-container{\n background: #0f0f1a !important;\n}\n\nbody.cyber-theme .interface-control-panel, body.cyber-theme .interface-header-card, body.cyber-theme .filter-card, body.cyber-theme .list-header-card, body.cyber-theme .list-container-card{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n box-shadow: none !important;\n}\n\nbody.cyber-theme .control-panel-header{\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .feature-selector{\n background: #0a0a12 !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .feature-selector span{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .interface-table th{\n background: #141420 !important;\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .interface-table td{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .url-pattern-container{\n background: #0a0a12 !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .url-pattern{\n background: #0a0a12 !important;\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .interface-card{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .interface-card.inactive{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n opacity: 0.6;\n}\n\nbody.cyber-theme .interface-card-title{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .info-label{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .status-success{\n background: rgba(0, 255, 65, 0.1) !important;\n border-color: rgba(0, 255, 65, 0.3) !important;\n color: #00ff41 !important;\n}\n\nbody.cyber-theme .status-warning{\n background: rgba(240, 232, 0, 0.1) !important;\n border-color: rgba(240, 232, 0, 0.3) !important;\n color: #f0e800 !important;\n}\n\nbody.cyber-theme .status-error{\n background: rgba(255, 77, 79, 0.1) !important;\n border-color: rgba(255, 77, 79, 0.3) !important;\n color: #ff4d4f !important;\n}\n\nbody.cyber-theme .test-interface-container{\n background: #0a0a12 !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .test-result{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .result-item{\n background: #0a0a12 !important;\n}\n\nbody.cyber-theme .result-item:hover{\n background: #141420 !important;\n}\n\nbody.cyber-theme .result-item .label{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .result-item .value{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .result-body pre{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .result-error{\n background: rgba(255, 77, 79, 0.08) !important;\n color: #ff4d4f !important;\n}\n\nbody.cyber-theme .breadcrumb .separator{\n color: #4a4a5a !important;\n}\n\nbody.cyber-theme .feature-details{\n background: #0f0f1a !important;\n border-left-color: #00f0ff !important;\n box-shadow: none !important;\n}\n\nbody.cyber-theme .feature-name h1{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .feature-description{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .add-button, body.cyber-theme .add-interface-button, body.cyber-theme .create-interface-button{\n background: linear-gradient(to right, #00c2cc, #00f0ff) !important;\n color: #050508 !important;\n box-shadow: 0 2px 8px rgba(0, 240, 255, 0.3) !important;\n}\n\nbody.cyber-theme .add-button:hover, body.cyber-theme .add-interface-button:hover, body.cyber-theme .create-interface-button:hover{\n background: linear-gradient(to right, #00f0ff, #33f3ff) !important;\n box-shadow: 0 4px 16px rgba(0, 240, 255, 0.4) !important;\n}\n\nbody.cyber-theme .edit-button{\n background: rgba(0, 240, 255, 0.08) !important;\n color: #00f0ff !important;\n border-color: rgba(0, 240, 255, 0.2) !important;\n}\n\nbody.cyber-theme .delete-button{\n background: rgba(255, 77, 79, 0.08) !important;\n color: #ff4d4f !important;\n border-color: rgba(255, 77, 79, 0.2) !important;\n}\n\nbody.cyber-theme .test-button{\n background: rgba(0, 240, 255, 0.08) !important;\n color: #00f0ff !important;\n border-color: rgba(0, 240, 255, 0.2) !important;\n}\n\nbody.cyber-theme .interface-button{\n background: rgba(0, 240, 255, 0.08) !important;\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .export-button{\n background: rgba(0, 255, 65, 0.08) !important;\n color: #00ff41 !important;\n}\n\nbody.cyber-theme .empty-data{\n background: #0a0a12 !important;\n}\n\nbody.cyber-theme .empty-icon{\n color: #2a2a3e !important;\n}\n\nbody.cyber-theme .empty-text{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .modal-overlay{\n background: rgba(0, 0, 0, 0.7) !important;\n}\n\nbody.cyber-theme .modal{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .modal-header{\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .modal-header h2{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .close-button{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .close-button:hover{\n background: #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .form-group label{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .checkbox-label, body.cyber-theme .radio-label{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .help-text{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .format-button{\n background: rgba(0, 240, 255, 0.08) !important;\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .loading{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .error-container{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .back-button{\n background: #00f0ff !important;\n color: #050508 !important;\n}\n\n/* pagination */\nbody.cyber-theme .pagination-wrapper{\n border-top: 1px solid #1a1a2e !important;\n}\n\n/* app-layout.css 覆盖 */\nbody.cyber-theme .app-header{\n background: #0f0f1a !important;\n border-bottom: 1px solid #1a1a2e !important;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) !important;\n}\n\nbody.cyber-theme .logo-icon{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .logo-icon-secondary{\n color: #00ff41 !important;\n background: #0f0f1a !important;\n box-shadow: 0 0 4px rgba(0, 240, 255, 0.3) !important;\n}\n\nbody.cyber-theme .logo-text{\n background: linear-gradient(135deg, #00f0ff, #00ff41) !important;\n -webkit-background-clip: text !important;\n -webkit-text-fill-color: transparent !important;\n}\n\nbody.cyber-theme .app-sider{\n background: #0f0f1a !important;\n border-right: 1px solid #1a1a2e !important;\n box-shadow: 2px 0 8px rgba(0, 0, 0, 0.3) !important;\n}\n\nbody.cyber-theme .app-content-wrapper{\n background: #0a0a12 !important;\n}\n\nbody.cyber-theme .app-content{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .app-breadcrumb{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .version-button{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .version-button:hover{\n color: #00f0ff !important;\n background: rgba(0, 240, 255, 0.05) !important;\n}\n\n/* settings.css 等通用覆盖 */\nbody.cyber-theme .settings-container{\n background: #0f0f1a !important;\n}\n\n/* ── App.css 覆盖 ── */\nbody.cyber-theme .page-container{\n background-color: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n box-shadow: 0 0 0 1px rgba(0, 240, 255, 0.05) !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .page-title-bar{\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .page-title{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .page-description{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .custom-card{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .custom-card:hover{\n box-shadow: 0 4px 16px rgba(0, 240, 255, 0.08) !important;\n border-color: rgba(0, 240, 255, 0.2) !important;\n}\n\nbody.cyber-theme .custom-table .ant-table-thead > tr > th{\n background: #141420 !important;\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .custom-form-item-label{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .custom-form-item-hint{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .status-tag-success{\n background-color: rgba(0, 255, 65, 0.1) !important;\n border: 1px solid rgba(0, 255, 65, 0.3) !important;\n color: #00ff41 !important;\n}\n\nbody.cyber-theme .status-tag-warning{\n background-color: rgba(240, 232, 0, 0.1) !important;\n border: 1px solid rgba(240, 232, 0, 0.3) !important;\n color: #f0e800 !important;\n}\n\nbody.cyber-theme .status-tag-error{\n background-color: rgba(255, 77, 79, 0.1) !important;\n border: 1px solid rgba(255, 77, 79, 0.3) !important;\n color: #ff4d4f !important;\n}\n\n/* ── 响应式保持 ── */\n@media (max-width: 768px){\n body.cyber-theme .app-sider{\n box-shadow: 2px 0 8px rgba(0, 0, 0, 0.5) !important;\n }\n}\n",""]);const c=i},9218:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,'.settings-container {\n width: 100%;\n max-width: 900px;\n margin: 0 auto;\n background-color: #fff;\n border-radius: 8px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\n padding: 24px;\n}\n\n.settings-header {\n margin-bottom: 24px;\n padding-bottom: 16px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.settings-header h4 {\n margin-bottom: 8px;\n color: #1890ff;\n}\n\n.settings-card {\n margin-bottom: 20px;\n}\n\n.settings-card .ant-card-head {\n border-bottom: 1px solid #f0f0f0;\n padding-bottom: 0;\n}\n\n.settings-card .ant-card-head-title {\n font-size: 16px;\n font-weight: 500;\n}\n\n/* 设置项样式 */\n.settings-item {\n padding: 16px 0;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.settings-item:last-child {\n border-bottom: none;\n}\n\n.settings-item-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.settings-item-title {\n font-size: 14px;\n font-weight: 500;\n color: #262626;\n margin-bottom: 4px;\n display: inline-flex;\n align-items: center;\n gap: 2px;\n}\n\n.settings-item-description {\n font-size: 12px;\n color: #8c8c8c;\n line-height: 1.5;\n}\n\n.settings-help-icon {\n color: #8c8c8c;\n padding: 0;\n min-width: auto;\n height: auto;\n line-height: 1;\n}\n\n.settings-help-icon:hover {\n color: #1677ff;\n}\n\n.settings-section {\n margin-bottom: 32px;\n}\n\n.settings-section h2 {\n font-size: 16px;\n font-weight: 600;\n color: #262626;\n margin: 0 0 16px 0;\n padding-bottom: 8px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.setting-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 0;\n border-bottom: 1px solid #f5f5f5;\n}\n\n.setting-item:last-child {\n border-bottom: none;\n}\n\n.setting-label {\n display: flex;\n flex-direction: column;\n}\n\n.setting-label span:first-child {\n font-weight: 500;\n color: #262626;\n margin-bottom: 4px;\n}\n\n.setting-description {\n color: #999;\n font-size: 12px;\n margin-top: 4px;\n}\n\n.setting-control {\n display: flex;\n align-items: center;\n}\n\n.setting-control input[type="number"] {\n width: 100px;\n height: 32px;\n padding: 0 12px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n font-size: 14px;\n}\n\n/* 切换开关样式 */\n.switch {\n position: relative;\n display: inline-block;\n width: 36px;\n height: 20px;\n}\n\n.switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n transition: .4s;\n border-radius: 20px;\n}\n\n.slider:before {\n position: absolute;\n content: "";\n height: 16px;\n width: 16px;\n left: 2px;\n bottom: 2px;\n background-color: white;\n transition: .4s;\n border-radius: 50%;\n}\n\ninput:checked + .slider {\n background-color: #1890ff;\n}\n\ninput:checked + .slider:before {\n transform: translateX(16px);\n}\n\n.settings-actions {\n display: flex;\n justify-content: flex-end;\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n}\n\n.reset-button {\n height: 32px;\n padding: 0 16px;\n background-color: white;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n.save-button {\n height: 32px;\n padding: 0 16px;\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n.reset-button:disabled,\n.save-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.about-section {\n margin-top: 20px;\n}\n\n.about-content {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.plugin-info p {\n margin: 8px 0;\n}\n\n.plugin-description p {\n margin: 8px 0;\n color: #595959;\n line-height: 1.5;\n}\n\n/* 响应式调整 */\n@media (max-width: 768px) {\n .settings-container {\n padding: 16px;\n }\n \n .settings-actions {\n flex-direction: column;\n align-items: center;\n }\n \n .settings-actions button {\n width: 100%;\n margin-bottom: 8px;\n }\n} \n',""]);const c=i},9604:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,"/* 全局样式 */\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,\n 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n 'Noto Color Emoji';\n}\n\nhtml, body, #root {\n height: 100%;\n width: 100%;\n}\n\nbody {\n background-color: #f5f7fa;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\nbutton, input {\n font-size: 14px;\n}\n\na {\n color: #1890ff;\n text-decoration: none;\n transition: all 0.3s;\n}\n\na:hover {\n color: #40a9ff;\n}\n\n/* 辅助类 */\n.text-center {\n text-align: center;\n}\n\n.text-right {\n text-align: right;\n}\n\n.text-left {\n text-align: left;\n}\n\n.mb-0 {\n margin-bottom: 0;\n}\n\n.mb-1 {\n margin-bottom: 4px;\n}\n\n.mb-2 {\n margin-bottom: 8px;\n}\n\n.mb-3 {\n margin-bottom: 16px;\n}\n\n.mb-4 {\n margin-bottom: 24px;\n}\n\n.mt-0 {\n margin-top: 0;\n}\n\n.mt-1 {\n margin-top: 4px;\n}\n\n.mt-2 {\n margin-top: 8px;\n}\n\n.mt-3 {\n margin-top: 16px;\n}\n\n.mt-4 {\n margin-top: 24px;\n}\n\n.ml-1 {\n margin-left: 4px;\n}\n\n.ml-2 {\n margin-left: 8px;\n}\n\n.ml-3 {\n margin-left: 16px;\n}\n\n.mr-1 {\n margin-right: 4px;\n}\n\n.mr-2 {\n margin-right: 8px;\n}\n\n.mr-3 {\n margin-right: 16px;\n}\n\n.p-0 {\n padding: 0;\n}\n\n.p-1 {\n padding: 4px;\n}\n\n.p-2 {\n padding: 8px;\n}\n\n.p-3 {\n padding: 16px;\n}\n\n.p-4 {\n padding: 24px;\n}\n\n/* 弹性布局 */\n.d-flex {\n display: flex;\n}\n\n.align-center {\n align-items: center;\n}\n\n.justify-between {\n justify-content: space-between;\n}\n\n.justify-center {\n justify-content: center;\n}\n\n.flex-column {\n flex-direction: column;\n}\n\n.flex-wrap {\n flex-wrap: wrap;\n}\n\n.flex-1 {\n flex: 1;\n}\n\n/* 颜色 */\n.text-primary {\n color: #1890ff;\n}\n\n.text-success {\n color: #52c41a;\n}\n\n.text-warning {\n color: #faad14;\n}\n\n.text-danger {\n color: #ff4d4f;\n}\n\n.text-secondary {\n color: rgba(0, 0, 0, 0.45);\n}\n\n.bg-white {\n background-color: #fff;\n}\n\n.bg-light {\n background-color: #f5f7fa;\n}\n\n/* 滚动条样式 */\n::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb {\n background: #c1c1c1;\n border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n background: #a8a8a8;\n} ",""]);const c=i},9660:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,'.webdav-sync-modal .ant-modal-content {\n display: flex;\n max-height: calc(100vh - 24px);\n flex-direction: column;\n overflow: hidden;\n padding: 0;\n}\n\n.webdav-sync-modal {\n top: 12px;\n max-width: calc(100vw - 32px);\n padding-bottom: 0;\n}\n\n.webdav-sync-modal-wrap {\n overflow: hidden;\n}\n\n.webdav-sync-modal .ant-modal-body {\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n\n.webdav-sync-modal .ant-modal-close {\n top: 12px;\n color: rgba(255, 255, 255, 0.86);\n}\n\n.webdav-sync-hero {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n gap: 12px;\n padding: 14px 20px;\n color: #fff;\n background:\n radial-gradient(circle at 85% 0%, rgba(56, 189, 248, 0.32), transparent 38%),\n linear-gradient(135deg, #102a43 0%, #0b7285 100%);\n}\n\n.webdav-sync-hero .ant-typography {\n margin: 0;\n color: inherit;\n}\n\n.webdav-sync-hero .ant-typography.ant-typography-secondary {\n color: rgba(255, 255, 255, 0.68);\n}\n\n.webdav-sync-hero-copy {\n min-width: 0;\n}\n\n.webdav-sync-hero-copy .ant-typography:last-child {\n font-size: 13px;\n white-space: nowrap;\n}\n\n.webdav-sync-hero-icon {\n display: flex;\n width: 40px;\n height: 40px;\n align-items: center;\n justify-content: center;\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 11px;\n background: rgba(255, 255, 255, 0.12);\n font-size: 20px;\n box-shadow: inset 0 1px rgba(255, 255, 255, 0.18);\n}\n\n.webdav-sync-kicker {\n display: block;\n margin-bottom: 1px !important;\n color: #67e8f9 !important;\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 0.18em;\n}\n\n.webdav-sync-grid {\n display: grid;\n grid-template-columns: minmax(0, 1.55fr) minmax(260px, 0.65fr);\n gap: 12px;\n padding: 12px;\n background: #f3f6f8;\n}\n\n.webdav-sync-error {\n margin: 10px 12px 0;\n padding: 8px 12px;\n}\n\n.webdav-sync-error .ant-alert-description {\n overflow-wrap: anywhere;\n}\n\n.webdav-sync-modal .ant-descriptions-item-label {\n width: 82px;\n white-space: nowrap;\n}\n\n.webdav-sync-modal .ant-descriptions-item-content {\n min-width: 0;\n}\n\n.webdav-sync-card,\n.webdav-sync-note,\n.webdav-sync-status-card,\n.webdav-sync-connection-card,\n.webdav-sync-module-card {\n border-radius: 10px;\n box-shadow: 0 5px 18px rgba(15, 42, 67, 0.06);\n}\n\n.webdav-sync-card .ant-card-body,\n.webdav-sync-note .ant-card-body {\n padding: 16px;\n}\n\n.webdav-sync-modal .ant-form-item {\n margin-bottom: 14px;\n}\n\n.webdav-sync-connected {\n display: grid;\n gap: 10px;\n padding: 12px;\n background: #f3f6f8;\n}\n\n.webdav-sync-connection-card .ant-card-body {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: end;\n gap: 12px;\n padding: 12px 16px;\n}\n\n.webdav-sync-connection-card .ant-descriptions {\n min-width: 0;\n}\n\n.webdav-sync-connection-card .ant-descriptions-header {\n margin-bottom: 8px;\n}\n\n.webdav-sync-connection-card .ant-descriptions-row > th,\n.webdav-sync-connection-card .ant-descriptions-row > td {\n padding-bottom: 6px;\n}\n\n.webdav-sync-form-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n}\n\n.webdav-sync-form-actions,\n.webdav-sync-form-actions .ant-space-item {\n display: flex;\n width: 100%;\n}\n\n.webdav-sync-form-actions .ant-btn {\n flex: 1;\n}\n\n.webdav-sync-note {\n color: #475569;\n background: linear-gradient(160deg, #ecfeff, #f8fafc 62%);\n}\n\n.webdav-sync-note-icon {\n display: block;\n margin-bottom: 10px;\n color: #0891b2;\n font-size: 24px;\n}\n\n.webdav-sync-file-tree,\n.webdav-sync-file-name {\n padding: 8px 10px;\n border-radius: 7px;\n color: #d8f3f5;\n background: #102a43;\n font-family: SFMono-Regular, Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n line-height: 1.6;\n}\n\n.webdav-sync-break-all {\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n.webdav-sync-actions {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n margin-top: 22px;\n}\n\n.webdav-sync-actions .ant-btn {\n white-space: nowrap;\n}\n\n.webdav-sync-pull-button {\n border-color: #059669 !important;\n background: #059669 !important;\n}\n\n.webdav-sync-disconnect {\n padding-inline: 0;\n}\n\n.webdav-sync-module-grid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px;\n}\n\n.webdav-sync-module-card .ant-card-body {\n display: flex;\n height: min(440px, calc(100vh - 300px));\n min-height: 280px;\n flex-direction: column;\n padding: 14px;\n}\n\n.webdav-sync-module-header,\n.webdav-sync-select-all {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.webdav-sync-module-header {\n align-items: flex-start;\n}\n\n.webdav-sync-module-header .ant-typography {\n margin: 0;\n}\n\n.webdav-sync-module-eyebrow {\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 0.14em;\n}\n\n.webdav-sync-select-all {\n margin-top: 8px;\n padding: 7px 10px;\n border-radius: 7px;\n background: #f8fafc;\n}\n\n.webdav-sync-module-list {\n min-height: 0;\n flex: 1;\n margin: 8px 0 10px;\n overflow: auto;\n overscroll-behavior: contain;\n}\n\n.webdav-sync-module-list .ant-checkbox-group {\n display: grid;\n gap: 5px;\n}\n\n.webdav-sync-module-option.ant-checkbox-wrapper {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n gap: 8px;\n margin-inline-start: 0;\n padding: 7px 9px;\n border: 1px solid #e6edf2;\n border-radius: 7px;\n background: #fff;\n}\n\n.webdav-sync-module-option .ant-checkbox + span {\n display: contents;\n padding-inline-start: 0;\n}\n\n.webdav-sync-module-name {\n min-width: 0;\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n.webdav-sync-module-count {\n color: #94a3b8;\n font-size: 12px;\n white-space: nowrap;\n}\n\n.webdav-sync-manual-note {\n padding: 8px 12px;\n border-radius: 8px;\n}\n\n.webdav-sync-manual-note .ant-alert-message {\n margin-bottom: 1px;\n}\n\n.webdav-sync-manual-note .ant-alert-description {\n font-size: 12px;\n line-height: 1.5;\n}\n\n.webdav-sync-status-title {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.webdav-sync-status-title .ant-typography {\n margin: 0;\n}\n\n.webdav-sync-status-title > div > .ant-typography:first-child {\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 0.14em;\n}\n\n.webdav-sync-file-name {\n margin-bottom: 16px;\n line-height: 1.5;\n}\n\nbody.cyber-theme .webdav-sync-grid {\n background: #071116;\n}\n\nbody.cyber-theme .webdav-sync-connected {\n background: #071116;\n}\n\nbody.cyber-theme .webdav-sync-card,\nbody.cyber-theme .webdav-sync-note,\nbody.cyber-theme .webdav-sync-status-card,\nbody.cyber-theme .webdav-sync-connection-card,\nbody.cyber-theme .webdav-sync-module-card {\n border: 1px solid rgba(0, 240, 255, 0.2);\n background: #0b1c24;\n}\n\nbody.cyber-theme .webdav-sync-select-all,\nbody.cyber-theme .webdav-sync-module-option.ant-checkbox-wrapper {\n border-color: rgba(0, 240, 255, 0.18);\n background: #102730;\n}\n\nbody.earth-theme .webdav-sync-grid {\n background: #f0ebe3;\n}\n\nbody.earth-theme .webdav-sync-connected {\n background: #f0ebe3;\n}\n\nbody.earth-theme .webdav-sync-hero {\n background:\n radial-gradient(circle at 85% 0%, rgba(212, 160, 23, 0.3), transparent 38%),\n linear-gradient(135deg, #3d3630 0%, #8b5e3c 100%);\n}\n\n@media (max-width: 720px) {\n .webdav-sync-hero {\n grid-template-columns: auto 1fr;\n padding: 12px 14px;\n }\n\n .webdav-sync-hero > .ant-tag {\n grid-column: 2;\n justify-self: start;\n }\n\n .webdav-sync-hero-copy .ant-typography:last-child {\n white-space: normal;\n }\n\n .webdav-sync-grid,\n .webdav-sync-form-row,\n .webdav-sync-actions,\n .webdav-sync-module-grid,\n .webdav-sync-connection-card .ant-card-body {\n grid-template-columns: 1fr;\n }\n\n .webdav-sync-module-card .ant-card-body {\n height: auto;\n min-height: 300px;\n }\n\n .webdav-sync-module-list {\n max-height: 240px;\n }\n}\n',""]);const c=i},9709:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,"/* ============================================================\n Whistle Mock Plugin - Earth Tone Theme Override\n 覆盖 Ant Design 5 和项目自定义样式为大地色系风格\n ============================================================ */\n\n/* ── 全局背景与文字 ── */\nbody.earth-theme, body.earth-theme #root{\n background-color: #f0ebe3 !important;\n color: #3d3630 !important;\n font-family: 'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\nbody.earth-theme{\n --primary-color: #b87333;\n --primary-hover: #c9894d;\n --primary-active: #9a5f2a;\n --success-color: #6b8e23;\n --warning-color: #d4a017;\n --error-color: #c0392b;\n --font-color: #3d3630;\n --text-secondary: #6d6459;\n --text-light: #9e9488;\n --border-color: #e0d8cf;\n --border-radius: 6px;\n --card-shadow: 0 2px 8px rgba(61, 54, 48, 0.06);\n --transition-time: 0.3s;\n --ant-color-primary: #b87333;\n --ant-color-primary-hover: #c9894d;\n --ant-color-primary-active: #9a5f2a;\n --ant-color-success: #6b8e23;\n --ant-color-warning: #d4a017;\n --ant-color-error: #c0392b;\n --ant-color-info: #8d6e63;\n --ant-color-text: #3d3630;\n --ant-color-text-secondary: #6d6459;\n --ant-color-border: #e0d8cf;\n --ant-color-bg-base: #f0ebe3;\n --ant-color-bg-container: #fdfcfa;\n --ant-color-bg-elevated: #f5f0e8;\n --ant-color-bg-layout: #f0ebe3;\n background-color: #f0ebe3 !important;\n}\n\nbody.earth-theme h1, body.earth-theme h2, body.earth-theme h3, body.earth-theme h4, body.earth-theme h5, body.earth-theme h6{\n color: #3d3630 !important;\n}\n\nbody.earth-theme a{\n color: #b87333 !important;\n}\nbody.earth-theme a:hover{\n color: #c9894d !important;\n}\n\n/* ── 滚动条 ── */\nbody.earth-theme ::-webkit-scrollbar{\n width: 6px;\n height: 6px;\n}\nbody.earth-theme ::-webkit-scrollbar-track{\n background: #f0ebe3;\n}\nbody.earth-theme ::-webkit-scrollbar-thumb{\n background: #d5cdc2;\n border-radius: 3px;\n}\nbody.earth-theme ::-webkit-scrollbar-thumb:hover{\n background: #b87333;\n}\n\n/* ── Ant Design Layout ── */\nbody.earth-theme .ant-layout{\n background: #f0ebe3 !important;\n}\n\nbody.earth-theme .ant-layout-header{\n background: #fdfcfa !important;\n border-bottom: 1px solid #e0d8cf !important;\n box-shadow: 0 1px 4px rgba(61, 54, 48, 0.06) !important;\n}\n\nbody.earth-theme .ant-layout-sider{\n background: #f5f0e8 !important;\n border-right: 1px solid #e0d8cf !important;\n}\n\nbody.earth-theme .ant-layout-content{\n background: #fdfcfa !important;\n}\n\n/* ── Ant Menu ── */\nbody.earth-theme .ant-menu{\n background: #f5f0e8 !important;\n border-right: none !important;\n}\n\nbody.earth-theme .ant-menu-item{\n color: #6d6459 !important;\n border-radius: 4px !important;\n margin: 4px 8px !important;\n}\n\nbody.earth-theme .ant-menu-item:hover{\n color: #b87333 !important;\n background: rgba(184, 115, 51, 0.08) !important;\n}\n\nbody.earth-theme .ant-menu-item-selected{\n color: #b87333 !important;\n background: rgba(184, 115, 51, 0.12) !important;\n}\n\nbody.earth-theme .ant-menu-item-selected:hover{\n color: #b87333 !important;\n background: rgba(184, 115, 51, 0.16) !important;\n}\n\nbody.earth-theme .ant-menu-submenu-title{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-menu-submenu-selected > .ant-menu-submenu-title{\n color: #b87333 !important;\n}\n\n/* ── Ant Card ── */\nbody.earth-theme .ant-card{\n background: #fdfcfa !important;\n border: 1px solid #e0d8cf !important;\n border-radius: 6px !important;\n box-shadow: 0 2px 8px rgba(61, 54, 48, 0.06) !important;\n}\n\nbody.earth-theme .ant-card-bordered{\n border: 1px solid #e0d8cf !important;\n}\n\nbody.earth-theme .ant-card-head{\n background: #fdfcfa !important;\n border-bottom: 1px solid #e0d8cf !important;\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-card-body{\n background: #fdfcfa !important;\n color: #3d3630 !important;\n}\n\n/* ── Ant Button ── */\nbody.earth-theme .ant-btn{\n border-radius: 4px !important;\n}\n\nbody.earth-theme .ant-btn-primary{\n background: #b87333 !important;\n border-color: #b87333 !important;\n color: #ffffff !important;\n font-weight: 500;\n}\n\nbody.earth-theme .ant-btn-primary:hover{\n background: #c9894d !important;\n border-color: #c9894d !important;\n box-shadow: 0 2px 8px rgba(184, 115, 51, 0.3) !important;\n}\n\nbody.earth-theme .ant-btn-default{\n background: transparent !important;\n border-color: #e0d8cf !important;\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-btn-default:hover{\n border-color: #b87333 !important;\n color: #b87333 !important;\n}\n\nbody.earth-theme .ant-btn-text{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-btn-text:hover{\n color: #b87333 !important;\n background: rgba(184, 115, 51, 0.08) !important;\n}\n\nbody.earth-theme .ant-btn-dangerous{\n background: transparent !important;\n border-color: #c0392b !important;\n color: #c0392b !important;\n}\n\nbody.earth-theme .ant-btn-dangerous:hover{\n background: #c0392b !important;\n color: #ffffff !important;\n}\n\n/* ── Ant Table ── */\nbody.earth-theme .ant-table{\n background: #fdfcfa !important;\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-table-thead > tr > th{\n background: #f5f0e8 !important;\n color: #3d3630 !important;\n border-bottom: 1px solid #e0d8cf !important;\n font-weight: 600;\n}\n\nbody.earth-theme .ant-table-tbody > tr > td{\n border-bottom: 1px solid #e0d8cf !important;\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-table-tbody > tr:hover > td{\n background: rgba(184, 115, 51, 0.04) !important;\n}\n\nbody.earth-theme .ant-table-tbody > tr.ant-table-row-selected > td{\n background: rgba(184, 115, 51, 0.08) !important;\n}\n\n/* ── Ant Input / TextArea ── */\nbody.earth-theme .ant-input,\nbody.earth-theme .ant-input-affix-wrapper,\nbody.earth-theme .ant-input-textarea{\n background: #fdfcfa !important;\n border-color: #e0d8cf !important;\n color: #3d3630 !important;\n border-radius: 4px !important;\n}\n\nbody.earth-theme .ant-input:hover,\nbody.earth-theme .ant-input-affix-wrapper:hover{\n border-color: #c9894d !important;\n}\n\nbody.earth-theme .ant-input:focus,\nbody.earth-theme .ant-input-affix-wrapper:focus,\nbody.earth-theme .ant-input-focused,\nbody.earth-theme .ant-input-affix-wrapper-focused{\n border-color: #b87333 !important;\n box-shadow: 0 0 0 2px rgba(184, 115, 51, 0.1) !important;\n}\n\nbody.earth-theme .ant-input::placeholder,\nbody.earth-theme .ant-input-textarea::placeholder{\n color: #9e9488 !important;\n}\n\n/* ── Ant Select ── */\nbody.earth-theme .ant-select-selector{\n background: #fdfcfa !important;\n border-color: #e0d8cf !important;\n color: #3d3630 !important;\n border-radius: 4px !important;\n}\n\nbody.earth-theme .ant-select:hover .ant-select-selector{\n border-color: #c9894d !important;\n}\n\nbody.earth-theme .ant-select-focused .ant-select-selector{\n border-color: #b87333 !important;\n box-shadow: 0 0 0 2px rgba(184, 115, 51, 0.1) !important;\n}\n\nbody.earth-theme .ant-select-dropdown{\n background: #fdfcfa !important;\n border: 1px solid #e0d8cf !important;\n box-shadow: 0 4px 16px rgba(61, 54, 48, 0.1) !important;\n}\n\nbody.earth-theme .ant-select-item{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-select-item-option-selected{\n background: rgba(184, 115, 51, 0.12) !important;\n color: #b87333 !important;\n font-weight: 500;\n}\n\nbody.earth-theme .ant-select-item-option-active{\n background: rgba(184, 115, 51, 0.06) !important;\n}\n\n/* ── Ant Modal ── */\nbody.earth-theme .ant-modal-content{\n background: #fdfcfa !important;\n border: 1px solid #e0d8cf !important;\n box-shadow: 0 8px 32px rgba(61, 54, 48, 0.12) !important;\n}\n\nbody.earth-theme .ant-modal-header{\n background: #fdfcfa !important;\n border-bottom: 1px solid #e0d8cf !important;\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-modal-title{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-modal-close-x{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-modal-close-x:hover{\n color: #b87333 !important;\n}\n\n/* ── Ant Drawer ── */\nbody.earth-theme .ant-drawer-content{\n background: #fdfcfa !important;\n}\n\nbody.earth-theme .ant-drawer-header{\n background: #fdfcfa !important;\n border-bottom: 1px solid #e0d8cf !important;\n}\n\nbody.earth-theme .ant-drawer-title{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-drawer-close{\n color: #6d6459 !important;\n}\n\n/* ── Ant Tabs ── */\nbody.earth-theme .ant-tabs-tab{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-tabs-tab:hover{\n color: #b87333 !important;\n}\n\nbody.earth-theme .ant-tabs-tab-active{\n color: #b87333 !important;\n}\n\nbody.earth-theme .ant-tabs-ink-bar{\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-tabs-content{\n color: #3d3630 !important;\n}\n\n/* ── Ant Form ── */\nbody.earth-theme .ant-form-item-label > label{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-form-item-explain-error{\n color: #c0392b !important;\n}\n\n/* ── Ant Switch ── */\nbody.earth-theme .ant-switch-checked{\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-switch-checked:hover{\n background: #c9894d !important;\n}\n\n/* ── Ant Radio ── */\nbody.earth-theme .ant-radio-checked .ant-radio-inner{\n border-color: #b87333 !important;\n}\n\nbody.earth-theme .ant-radio-checked .ant-radio-inner::after{\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-radio-wrapper:hover .ant-radio,\nbody.earth-theme .ant-radio:hover .ant-radio-inner{\n border-color: #b87333 !important;\n}\n\n/* ── Ant Checkbox ── */\nbody.earth-theme .ant-checkbox-checked .ant-checkbox-inner{\n background: #b87333 !important;\n border-color: #b87333 !important;\n}\n\nbody.earth-theme .ant-checkbox-indeterminate .ant-checkbox-inner::after{\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-checkbox-wrapper:hover .ant-checkbox-inner,\nbody.earth-theme .ant-checkbox:hover .ant-checkbox-inner{\n border-color: #b87333 !important;\n}\n\n/* ── Ant Badge ── */\nbody.earth-theme .ant-badge-status-dot{\n box-shadow: 0 0 4px currentColor !important;\n}\n\n/* ── Ant Tag ── */\nbody.earth-theme .ant-tag{\n border-radius: 4px !important;\n}\n\nbody.earth-theme .ant-tag-green{\n color: #6b8e23 !important;\n background: rgba(107, 142, 35, 0.1) !important;\n border-color: rgba(107, 142, 35, 0.2) !important;\n}\n\nbody.earth-theme .ant-tag-blue{\n color: #8d6e63 !important;\n background: rgba(141, 110, 99, 0.1) !important;\n border-color: rgba(141, 110, 99, 0.2) !important;\n}\n\nbody.earth-theme .ant-tag-red{\n color: #c0392b !important;\n background: rgba(192, 57, 43, 0.1) !important;\n border-color: rgba(192, 57, 43, 0.2) !important;\n}\n\nbody.earth-theme .ant-tag-orange{\n color: #d4a017 !important;\n background: rgba(212, 160, 23, 0.1) !important;\n border-color: rgba(212, 160, 23, 0.2) !important;\n}\n\nbody.earth-theme .ant-tag-default{\n color: #6d6459 !important;\n background: #f5f0e8 !important;\n border-color: #e0d8cf !important;\n}\n\n/* ── Ant Divider ── */\nbody.earth-theme .ant-divider{\n border-top: 1px solid #e0d8cf !important;\n}\n\nbody.earth-theme .ant-divider-horizontal{\n margin: 16px 0 !important;\n}\n\n/* ── Ant Empty ── */\nbody.earth-theme .ant-empty-description{\n color: #9e9488 !important;\n}\n\n/* ── Ant Spin ── */\nbody.earth-theme .ant-spin-dot-item{\n background: #b87333 !important;\n}\n\n/* ── Ant Breadcrumb ── */\nbody.earth-theme .ant-breadcrumb{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-breadcrumb a{\n color: #9e9488 !important;\n}\n\nbody.earth-theme .ant-breadcrumb a:hover{\n color: #b87333 !important;\n}\n\nbody.earth-theme .ant-breadcrumb-separator{\n color: #d5cdc2 !important;\n}\n\n/* ── Ant Statistic ── */\nbody.earth-theme .ant-statistic-title{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-statistic-content{\n color: #3d3630 !important;\n}\n\n/* ── Ant DatePicker / TimePicker ── */\nbody.earth-theme .ant-picker{\n background: #fdfcfa !important;\n border-color: #e0d8cf !important;\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-picker:hover{\n border-color: #c9894d !important;\n}\n\nbody.earth-theme .ant-picker-focused{\n border-color: #b87333 !important;\n box-shadow: 0 0 0 2px rgba(184, 115, 51, 0.1) !important;\n}\n\nbody.earth-theme .ant-picker-panel{\n background: #fdfcfa !important;\n border: 1px solid #e0d8cf !important;\n}\n\nbody.earth-theme .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner{\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner::before{\n border-color: #b87333 !important;\n}\n\n/* ── Ant Pagination ── */\nbody.earth-theme .ant-pagination-item-active{\n border-color: #b87333 !important;\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-pagination-item-active a{\n color: #ffffff !important;\n}\n\nbody.earth-theme .ant-pagination-item:hover{\n border-color: #b87333 !important;\n}\n\nbody.earth-theme .ant-pagination-item:hover a{\n color: #b87333 !important;\n}\n\n/* ── Ant Popover / Tooltip ── */\nbody.earth-theme .ant-popover-inner{\n background: #fdfcfa !important;\n border: 1px solid #e0d8cf !important;\n box-shadow: 0 4px 16px rgba(61, 54, 48, 0.1) !important;\n}\n\nbody.earth-theme .ant-tooltip-inner{\n background: #3d3630 !important;\n color: #fdfcfa !important;\n}\n\n/* ── Ant Dropdown ── */\nbody.earth-theme .ant-dropdown-menu{\n background: #fdfcfa !important;\n border: 1px solid #e0d8cf !important;\n box-shadow: 0 4px 16px rgba(61, 54, 48, 0.1) !important;\n}\n\nbody.earth-theme .ant-dropdown-menu-item{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-dropdown-menu-item:hover{\n background: rgba(184, 115, 51, 0.06) !important;\n color: #b87333 !important;\n}\n\n/* ── Ant Slider ── */\nbody.earth-theme .ant-slider-track{\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-slider-handle{\n border-color: #b87333 !important;\n}\n\nbody.earth-theme .ant-slider-handle:hover{\n border-color: #c9894d !important;\n}\n\n/* ── Ant Tree ── */\nbody.earth-theme .ant-tree{\n background: transparent !important;\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-tree-node-content-wrapper:hover{\n background: rgba(184, 115, 51, 0.06) !important;\n}\n\nbody.earth-theme .ant-tree-node-selected{\n background: rgba(184, 115, 51, 0.12) !important;\n color: #b87333 !important;\n}\n\n/* ── 版本弹窗样式覆盖 ── */\nbody.earth-theme .version-markdown-content h1{\n color: #b87333 !important;\n border-bottom-color: #e0d8cf !important;\n}\n\nbody.earth-theme .version-markdown-content h2{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .version-markdown-content h3{\n color: #6b8e23 !important;\n}\n\nbody.earth-theme .version-markdown-content p,\nbody.earth-theme .version-markdown-content li{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .version-markdown-content strong{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .version-markdown-content code{\n background-color: #f5f0e8 !important;\n color: #b87333 !important;\n}\n\nbody.earth-theme .version-markdown-content pre{\n background-color: #f5f0e8 !important;\n}\n",""]);const c=i}}]);
2
+ (self.webpackChunkwhistle_mock_plugins=self.webpackChunkwhistle_mock_plugins||[]).push([[807],{126:e=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}var t=function(e){return"string"!=typeof e?"":e.replace(/<style[\s\S]*?<\/style>/gi," ").replace(/<script[\s\S]*?<\/script>/gi," ").replace(/<[^>]+>/g," ").replace(/\s+/g," ").trim().slice(0,300)},r=function(e){if(!e)return{};if("object"==n(e))return{message:t(e.message||e.error||e.detail),conflict:e.conflict||null};if("string"!=typeof e)return{};var o=e.trim();if(!o)return{};try{return r(JSON.parse(o))}catch(e){return{message:t(o),conflict:null}}};e.exports={getApiError:function(e,n){var o=t(n)||"WebDAV 操作失败",a=e&&e.response,i=r(a&&a.data);if(i.message)return i;var c=a&&a.status;if(c){var l=t(a.statusText);return{message:"".concat(o,"(HTTP ").concat(c).concat(l?" ".concat(l):"",")"),conflict:i.conflict||null}}if(e&&"ECONNABORTED"==e.code)return{message:"".concat(o,":请求超时,请检查 WebDAV 地址和网络"),conflict:null};var s=t(e&&e.message);return s&&"Network Error"!=s?{message:s,conflict:null}:{message:"".concat(o,":网络请求失败,请检查 Whistle 服务日志"),conflict:null}},normalizeMessage:t,parseResponseData:r}},807:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>Hr});var r=t(6540),o=t(4625),a=t(4180),i=(t(6940),t(5072)),c=t.n(i),l=t(7825),s=t.n(l),u=t(7659),d=t.n(u),p=t(5056),f=t.n(p),m=t(540),h=t.n(m),b=t(1113),y=t.n(b),g=t(9604),v={};v.styleTagTransform=y(),v.setAttributes=f(),v.insert=d().bind(null,"head"),v.domAPI=s(),v.insertStyleElement=h(),c()(g.A,v),g.A&&g.A.locals&&g.A.locals;var x=t(2497),w={};w.styleTagTransform=y(),w.setAttributes=f(),w.insert=d().bind(null,"head"),w.domAPI=s(),w.insertStyleElement=h(),c()(x.A,w),x.A&&x.A.locals&&x.A.locals;var E=t(5448),k=t(5131),A=t(867),S=t(2941),L=t(2702),I=t(4825),O=t(4431),j=t(1372),C=t(3740),N=t(845),T=t(462),P=t(8602),z=t(3200),M=t(6157),_=t(1201),R=t(9222),F=t(4716),D=t(7260),U=t(5095),B=t(2545),G={};function V(e){return V="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},V(e)}function W(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||function(e,n){if(e){if("string"==typeof e)return q(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?q(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function q(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function Y(){Y=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==V(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(V(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function H(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function J(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){H(a,r,o,i,c,"next",e)}function c(e){H(a,r,o,i,c,"throw",e)}i(void 0)}))}}G.styleTagTransform=y(),G.setAttributes=f(),G.insert=d().bind(null,"head"),G.domAPI=s(),G.insertStyleElement=h(),c()(B.A,G),B.A&&B.A.locals&&B.A.locals;var K=function(){var e=J(Y().mark((function e(){var n,t;return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch("/cgi-bin/version",{headers:{"Content-Type":"application/json"}});case 2:return n=e.sent,e.next=5,n.json();case 5:if(t=e.sent,n.ok){e.next=8;break}throw new Error(t.message||"请求失败");case 8:return e.abrupt("return",t);case 9:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();const $=function(e){var n=e.visible,t=e.onCancel,o=W((0,r.useState)(""),2),a=o[0],i=o[1],c=W((0,r.useState)(!1),2),l=c[0],s=c[1],u=W((0,r.useState)(null),2),d=u[0],p=u[1];(0,r.useEffect)((function(){n&&f()}),[n]);var f=function(){var e=J(Y().mark((function e(){var n;return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s(!0),p(null),e.prev=2,e.next=5,K();case 5:0===(n=e.sent).code?i(n.data.content):p(n.message),e.next=12;break;case 9:e.prev=9,e.t0=e.catch(2),p("获取版本信息失败: ".concat(e.t0.message));case 12:return e.prev=12,s(!1),e.finish(12);case 15:case"end":return e.stop()}}),e,null,[[2,9,12,15]])})));return function(){return e.apply(this,arguments)}}();return r.createElement(R.A,{title:"版本更新记录",open:n,onCancel:t,footer:null,width:800,className:"version-modal"},r.createElement("div",{className:"version-modal-content"},l&&r.createElement("div",{className:"version-modal-loading"},r.createElement(F.A,{size:"large"}),r.createElement("p",null,"正在加载版本信息...")),d&&r.createElement(D.A,{message:"加载失败",description:d,type:"error",showIcon:!0}),!l&&!d&&a&&r.createElement("div",{className:"version-markdown-content"},r.createElement(U.$,null,a.replace(/^#\s*🔄?\s*版本更新记录\s*\n+/,"")))))};var X=t(9924),Z=t(7959),Q=[{key:"Esc",desc:"关闭弹窗/抽屉"},{key:"Ctrl + S",desc:"保存表单"},{key:"Ctrl + 1",desc:"功能模块"},{key:"Ctrl + 2",desc:"接口管理"},{key:"Ctrl + 3",desc:"系统设置"},{key:"Ctrl + 4",desc:"请求统计"},{key:"Ctrl + 5",desc:"接口嗅探"},{key:"Ctrl + Shift + N",desc:"新建接口"},{key:"Ctrl + K",desc:"聚焦搜索"},{key:"Shift + ?",desc:"快捷键帮助"}];function ee(e){return ee="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ee(e)}function ne(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function te(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?ne(Object(t),!0).forEach((function(n){re(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ne(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function re(e,n,t){return(n=function(e){var n=function(e){if("object"!=ee(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=ee(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==ee(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const oe=function(e){var n=e.visible,t=e.onClose,o=Q,a=[{title:"快捷键",dataIndex:"key",key:"key",width:180,render:function(e){return r.createElement("kbd",{style:{display:"inline-block",padding:"4px 8px",fontSize:"12px",fontFamily:"monospace",lineHeight:1,color:"#333",background:"#f5f5f5",border:"1px solid #d9d9d9",borderRadius:"4px",boxShadow:"0 1px 0 rgba(0,0,0,0.1)"}},e)}},{title:"功能",dataIndex:"desc",key:"desc"}];return r.createElement(R.A,{title:"⌨️ 键盘快捷键",open:n,onCancel:t,footer:null,width:480},r.createElement(X.A,{dataSource:o.map((function(e,n){return te(te({},e),{},{id:n})})),columns:a,rowKey:"id",pagination:!1,size:"small",showHeader:!1}))};var ae=t(2689),ie={};function ce(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||function(e,n){if(e){if("string"==typeof e)return le(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?le(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function le(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}ie.styleTagTransform=y(),ie.setAttributes=f(),ie.insert=d().bind(null,"head"),ie.domAPI=s(),ie.insertStyleElement=h(),c()(ae.A,ie),ae.A&&ae.A.locals&&ae.A.locals;var se=E.A.Header,ue=E.A.Content,de=E.A.Sider,pe=["light","cyber","earth"];const fe=function(e){var n,t,i=e.children,c=(0,a.zy)().pathname,l=ce((0,r.useState)(!1),2),s=l[0],u=l[1],d=ce((0,r.useState)(!1),2),p=d[0],f=d[1],m=ce((0,r.useState)(!1),2),h=m[0],b=m[1];n=(0,a.W6)(),t=(0,r.useCallback)((function(e){var t,r,o=navigator.platform.toUpperCase().indexOf("MAC")>=0?e.metaKey:e.ctrlKey,a=null===(t=e.target)||void 0===t||null===(t=t.tagName)||void 0===t?void 0:t.toLowerCase(),i="input"===a||"textarea"===a||(null===(r=e.target)||void 0===r?void 0:r.isContentEditable);if(e.shiftKey&&"?"===e.key&&!i)return e.preventDefault(),void window.dispatchEvent(new CustomEvent("keyboard-shortcuts-help"));if("Escape"!==e.key){if(o&&!e.shiftKey&&/^[1-5]$/.test(e.key)){e.preventDefault();var c=parseInt(e.key,10)-1;return n.push(["/","/interface","/settings","/stats","/sniffer"][c]),void Z.Ay.success("已切换到".concat(["功能模块","接口管理","系统设置","请求统计","接口嗅探"][c]))}return o&&"s"===e.key.toLowerCase()&&!e.shiftKey?(e.preventDefault(),void window.dispatchEvent(new CustomEvent("shortcut-save"))):o&&e.shiftKey&&"n"===e.key.toLowerCase()?(e.preventDefault(),void window.dispatchEvent(new CustomEvent("shortcut-new-interface"))):o&&"k"===e.key.toLowerCase()&&!e.shiftKey?(e.preventDefault(),void window.dispatchEvent(new CustomEvent("shortcut-focus-search"))):void 0}window.dispatchEvent(new CustomEvent("shortcut-esc"))}),[n]),(0,r.useEffect)((function(){return document.addEventListener("keydown",t),function(){return document.removeEventListener("keydown",t)}}),[t]),(0,r.useEffect)((function(){var e=function(){return b(!0)};return window.addEventListener("keyboard-shortcuts-help",e),function(){return window.removeEventListener("keyboard-shortcuts-help",e)}}),[]);var y=ce((0,r.useState)((function(){var e=localStorage.getItem("theme");if(e&&pe.includes(e))return e;var n=localStorage.getItem("cyberTheme");return"false"===n?"light":"true"===n?"cyber":"light"})),2),g=y[0],v=y[1];(0,r.useEffect)((function(){document.body.classList.remove("cyber-theme","earth-theme"),"light"!==g&&document.body.classList.add("".concat(g,"-theme"))}),[g]),(0,r.useEffect)((function(){var e=function(){var e=localStorage.getItem("theme");if(e&&pe.includes(e))v(e);else{var n=localStorage.getItem("cyberTheme");v("false"===n?"light":"cyber")}};return window.addEventListener("storage",e),function(){return window.removeEventListener("storage",e)}}),[]);var x=(0,r.useMemo)((function(){return{token:{colorPrimary:"#00f0ff",colorPrimaryHover:"#33f3ff",colorPrimaryActive:"#00c2cc",colorSuccess:"#00ff41",colorWarning:"#f0e800",colorError:"#ff4d4f",colorInfo:"#00f0ff",colorText:"#e0e0e0",colorTextSecondary:"#a0a0a0",colorTextTertiary:"#6b7280",colorBorder:"#1a1a2e",colorBorderSecondary:"#1a1a2e",colorBgBase:"#050508",colorBgContainer:"#0f0f1a",colorBgElevated:"#141420",colorBgLayout:"#0a0a12",colorBgSpotlight:"#141420",borderRadius:6,borderRadiusSM:4,borderRadiusLG:8,wireframe:!1,fontFamily:"'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",fontFamilyCode:"'Share Tech Mono', 'SFMono-Regular', Consolas, monospace"},algorithm:k.A.darkAlgorithm}}),[]),w=(0,r.useMemo)((function(){return{token:{colorPrimary:"#b87333",colorPrimaryHover:"#c9894d",colorPrimaryActive:"#9a5f2a",colorSuccess:"#6b8e23",colorWarning:"#d4a017",colorError:"#c0392b",colorInfo:"#8d6e63",colorText:"#3d3630",colorTextSecondary:"#6d6459",colorTextTertiary:"#9e9488",colorBorder:"#e0d8cf",colorBorderSecondary:"#d5cdc2",colorBgBase:"#faf6f0",colorBgContainer:"#fdfcfa",colorBgElevated:"#f5f0e8",colorBgLayout:"#f0ebe3",colorBgSpotlight:"#f5f0e8",borderRadius:6,borderRadiusSM:4,borderRadiusLG:8,wireframe:!1,fontFamily:"'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",fontFamilyCode:"'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace"},algorithm:k.A.defaultAlgorithm}}),[]),R=(0,r.useMemo)((function(){return{token:{borderRadius:6,borderRadiusSM:4,borderRadiusLG:8},algorithm:k.A.defaultAlgorithm}}),[]),F=(0,r.useMemo)((function(){return"cyber"===g?x:"earth"===g?w:R}),[g,x,w,R]),D=(0,r.useMemo)((function(){switch(g){case"cyber":return{headerBg:"#0f0f1a",headerBorder:"#1a1a2e",logoIcon:"#00ff41",logoGradient:"linear-gradient(135deg, #00f0ff, #00ff41)",versionColor:"#6b7280",siderBg:"#0f0f1a",wrapperBg:"#0a0a12",breadcrumbLink:"#a0a0a0",breadcrumbCurrent:"#e0e0e0",titleColor:"#e0e0e0",titleFont:"'Orbitron', sans-serif",titleLetterSpacing:"0.5px",contentBg:"#0f0f1a",contentBorder:"#1a1a2e"};case"earth":return{headerBg:"#fdfcfa",headerBorder:"#e0d8cf",logoIcon:"#b87333",logoGradient:"linear-gradient(135deg, #b87333, #d4a017)",versionColor:"#6d6459",siderBg:"#f5f0e8",wrapperBg:"#f0ebe3",breadcrumbLink:"#6d6459",breadcrumbCurrent:"#3d3630",titleColor:"#3d3630",titleFont:void 0,titleLetterSpacing:void 0,contentBg:"#fdfcfa",contentBorder:"#e0d8cf"};default:return{headerBg:"#ffffff",headerBorder:"#f0f0f0",logoIcon:"#52c41a",logoGradient:"linear-gradient(135deg, #1890ff, #52c41a)",versionColor:"#000000d9",siderBg:"#ffffff",wrapperBg:"#f5f5f5",breadcrumbLink:"#000000d9",breadcrumbCurrent:"#000000d9",titleColor:"#000000d9",titleFont:void 0,titleLetterSpacing:void 0,contentBg:"#ffffff",contentBorder:"#f0f0f0"}}}),[g]),U=[{key:"1",icon:r.createElement(j.A,null),label:r.createElement(o.N_,{to:"/"},"功能模块")},{key:"2",icon:r.createElement(C.A,null),label:r.createElement(o.N_,{to:"/interface"},"接口管理")},{key:"4",icon:r.createElement(N.A,null),label:r.createElement(o.N_,{to:"/stats"},"请求统计")},{key:"5",icon:r.createElement(T.A,null),label:r.createElement(o.N_,{to:"/sniffer"},"接口嗅探")},{key:"3",icon:r.createElement(P.A,null),label:r.createElement(o.N_,{to:"/settings"},"系统设置")}],B=function(){var e=[{path:"/",title:"首页"}];return c.startsWith("/interface")?(e.push({path:"/interface",title:"接口管理"}),c.includes("/interface/")&&"/interface/"!==c&&e.push({path:c,title:"功能接口详情"})):"/stats"===c?e.push({path:"/stats",title:"请求统计"}):"/sniffer"===c?e.push({path:"/sniffer",title:"接口嗅探"}):"/settings"===c&&e.push({path:"/settings",title:"系统设置"}),e}();return r.createElement(A.Ay,{theme:F},r.createElement(E.A,{className:"app-layout"},r.createElement(se,{className:"app-header",style:{background:D.headerBg,borderBottom:"1px solid ".concat(D.headerBorder)}},r.createElement("div",{className:"header-left"},r.createElement("div",{className:"logo-container"},r.createElement("div",{className:"logo-icon-group"},r.createElement(z.A,{className:"logo-icon logo-icon-secondary",style:{color:D.logoIcon}})),r.createElement("div",{className:"logo-text",style:{background:D.logoGradient,WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"}},"MockMaster")),r.createElement(S.Ay,{type:"text",icon:s?r.createElement(M.A,null):r.createElement(_.A,null),onClick:function(){return u(!s)},className:"collapse-button"})),r.createElement("div",{className:"header-right"},r.createElement(L.A,null,r.createElement(S.Ay,{type:"text",size:"small",className:"version-button",onClick:function(){return f(!0)}},r.createElement("span",{style:{color:D.versionColor,fontFamily:"'Share Tech Mono', monospace"}},"v","1.4.0-beta.3"))))),r.createElement(E.A,null,r.createElement(de,{width:220,className:"app-sider",collapsed:s,collapsible:!0,trigger:null,style:{background:D.siderBg}},r.createElement(I.A,{mode:"inline",selectedKeys:"/"===c||"#/"===c?["1"]:c.startsWith("/interface")||c.includes("/interface")?["2"]:"/stats"===c||c.includes("/stats")?["4"]:"/sniffer"===c||c.includes("/sniffer")?["5"]:"/settings"===c||c.includes("/settings")?["3"]:[],items:U,style:{height:"100%",borderRight:0,padding:"8px",background:D.siderBg}})),r.createElement(E.A,{className:"app-content-wrapper",style:{padding:0,background:D.wrapperBg}},r.createElement("div",{style:{padding:"16px 24px 0"}},r.createElement(O.A,{className:"app-breadcrumb",style:{marginBottom:16}},B.map((function(e,n){return r.createElement(O.A.Item,{key:n},n<B.length-1?r.createElement(o.N_,{to:e.path,style:{color:D.breadcrumbLink}},e.title):r.createElement("span",{style:{color:D.breadcrumbCurrent,fontWeight:500}},e.title))}))),r.createElement("h1",{style:{margin:0,fontSize:22,fontWeight:700,color:D.titleColor,fontFamily:D.titleFont,letterSpacing:D.titleLetterSpacing}},"/"===c||"#/"===c?"功能模块管理":c.startsWith("/interface")?"接口配置管理":"/stats"===c?"请求统计":"/sniffer"===c?"接口嗅探":"/settings"===c?"系统设置":"Whistle Mock Plugin")),r.createElement(ue,{className:"app-content",style:{background:D.contentBg,padding:24,borderRadius:6,minHeight:280,margin:"16px 24px 24px",border:"1px solid ".concat(D.contentBorder)}},i))),r.createElement($,{visible:p,onCancel:function(){return f(!1)}}),r.createElement(oe,{visible:h,onClose:function(){return b(!1)}})))};var me=t(1847),he=t(677),be=t(1196),ye=t(7308),ge=t(5895),ve=t(6914),xe=t(9957),we=t(5957),Ee=t(6044),ke=t(138),Ae=t(385),Se=t(7025),Le=t(1617),Ie=t(7028),Oe=t(756),je=t(581),Ce=t(1083),Ne=t(9660),Te={};function Pe(e){return Pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pe(e)}function ze(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function Me(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?ze(Object(t),!0).forEach((function(n){_e(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ze(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function _e(e,n,t){return(n=function(e){var n=function(e){if("object"!=Pe(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=Pe(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Pe(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function Re(){Re=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==Pe(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(Pe(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function Fe(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function De(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){Fe(a,r,o,i,c,"next",e)}function c(e){Fe(a,r,o,i,c,"throw",e)}i(void 0)}))}}function Ue(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||function(e,n){if(e){if("string"==typeof e)return Be(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Be(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Be(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}Te.styleTagTransform=y(),Te.setAttributes=f(),Te.insert=d().bind(null,"head"),Te.domAPI=s(),Te.insertStyleElement=h(),c()(Ne.A,Te),Ne.A&&Ne.A.locals&&Ne.A.locals;var Ge=t(126).getApiError,Ve=me.A.Paragraph,We=me.A.Text,qe=me.A.Title,Ye=function(e){var n=e.title,t=e.eyebrow,o=e.modules,a=e.selectedIds,i=e.onChange,c=e.emptyText,l=e.action,s=e.actionIcon,u=e.actionClassName,d=e.actionLoading,p=e.disabled,f=e.onAction,m=e.extra,h=o.map((function(e){return e.id})),b=h.filter((function(e){return a.includes(e)})).length,y=o.length>0&&b==o.length,g=b>0&&!y;return r.createElement(he.A,{className:"webdav-sync-module-card",bordered:!1},r.createElement("div",{className:"webdav-sync-module-header"},r.createElement("div",null,r.createElement(We,{type:"secondary",className:"webdav-sync-module-eyebrow"},t),r.createElement(qe,{level:5},n)),m),r.createElement("div",{className:"webdav-sync-select-all"},r.createElement(be.A,{checked:y,indeterminate:g,disabled:!o.length||p,onChange:function(e){return i(e.target.checked?h:[])}},"全选"),r.createElement(We,{type:"secondary"},"已选择 ",b," / ",o.length)),r.createElement("div",{className:"webdav-sync-module-list"},o.length?r.createElement(be.A.Group,{value:a,onChange:i,disabled:p},o.map((function(e){return r.createElement(be.A,{key:e.id,value:e.id,className:"webdav-sync-module-option"},r.createElement("span",{className:"webdav-sync-module-name"},e.name),r.createElement("span",{className:"webdav-sync-module-count"},e.interfaceCount||0," 个接口"))}))):r.createElement(ye.A,{image:ye.A.PRESENTED_IMAGE_SIMPLE,description:c})),r.createElement(S.Ay,{block:!0,type:"primary",className:u,icon:s,loading:d,disabled:p||!b,onClick:f},l,"(",b,")"))};const He=function(e){var n=e.open,t=e.onClose,o=e.onPulled,a=Ue(ge.A.useForm(),1)[0],i=Ue((0,r.useState)(null),2),c=i[0],l=i[1],s=Ue((0,r.useState)(!1),2),u=s[0],d=s[1],p=Ue((0,r.useState)(""),2),f=p[0],m=p[1],h=Ue((0,r.useState)(""),2),b=h[0],y=h[1],g=Ue((0,r.useState)([]),2),v=g[0],x=g[1],w=Ue((0,r.useState)([]),2),E=w[0],k=w[1],A=function(e,n){var t=Ge(e,n);return y(t.message),Z.Ay.error(t.message),t},I=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};l(e),n.push&&x((e.localModules||[]).map((function(e){return e.id}))),n.pull&&k((e.remoteModules||[]).map((function(e){return e.id})))},O=function(){var e=De(Re().mark((function e(){var n,t,r;return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return d(!0),y(""),e.prev=2,e.next=5,Ce.A.get("/cgi-bin/webdav");case 5:if(n=e.sent,t=n.data.data,I(t,{push:!0,pull:!0}),a.setFieldsValue({endpoint:t.endpoint,username:t.username,password:""}),!t.configured){e.next=20;break}return e.prev=10,e.next=13,Ce.A.post("/cgi-bin/webdav",{action:"refresh"});case 13:r=e.sent,I(r.data.data,{pull:!0}),e.next=20;break;case 17:e.prev=17,e.t0=e.catch(10),A(e.t0,"连接配置已读取,但刷新远端模块失败");case 20:e.next=25;break;case 22:e.prev=22,e.t1=e.catch(2),A(e.t1,"读取 WebDAV 配置失败");case 25:return e.prev=25,d(!1),e.finish(25);case 28:case"end":return e.stop()}}),e,null,[[2,22,25,28],[10,17]])})));return function(){return e.apply(this,arguments)}}();(0,r.useEffect)((function(){n&&O()}),[n]);var j,C=function(){var e=De(Re().mark((function e(n){var t,r,o,a=arguments;return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=a.length>1&&void 0!==a[1]?a[1]:{},r=a.length>2&&void 0!==a[2]?a[2]:{},e.next=4,Ce.A.post("/cgi-bin/webdav",Me({action:n},t));case 4:return(o=e.sent).data&&o.data.data&&I(o.data.data,r),e.abrupt("return",o.data);case 7:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),N=function(){var e=De(Re().mark((function e(){var n;return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,a.validateFields();case 3:n=e.sent,e.next=9;break;case 6:return e.prev=6,e.t0=e.catch(0),e.abrupt("return");case 9:return m("test"),y(""),e.prev=11,e.next=14,C("test",n);case 14:Z.Ay.success("WebDAV 连接测试成功"),e.next=20;break;case 17:e.prev=17,e.t1=e.catch(11),A(e.t1,"WebDAV 连接测试失败");case 20:return e.prev=20,m(""),e.finish(20);case 23:case"end":return e.stop()}}),e,null,[[0,6],[11,17,20,23]])})));return function(){return e.apply(this,arguments)}}(),T=function(){var e=De(Re().mark((function e(){var n,t;return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,a.validateFields();case 3:n=e.sent,e.next=9;break;case 6:return e.prev=6,e.t0=e.catch(0),e.abrupt("return");case 9:return m("connect"),y(""),e.prev=11,e.next=14,C("connect",n,{push:!0,pull:!0});case 14:return a.setFieldValue("password",""),Z.Ay.success("WebDAV 连接已保存"),e.prev=16,e.next=19,Ce.A.post("/cgi-bin/webdav",{action:"refresh"});case 19:t=e.sent,I(t.data.data,{pull:!0}),e.next=26;break;case 23:e.prev=23,e.t1=e.catch(16),A(e.t1,"连接已保存,但刷新远端模块失败");case 26:e.next=31;break;case 28:e.prev=28,e.t2=e.catch(11),A(e.t2,"保存 WebDAV 连接失败");case 31:return e.prev=31,m(""),e.finish(31);case 34:case"end":return e.stop()}}),e,null,[[0,6],[11,28,31,34],[16,23]])})));return function(){return e.apply(this,arguments)}}(),P=function(){var e=De(Re().mark((function e(){return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return m("refresh"),y(""),e.prev=2,e.next=5,C("refresh",{},{pull:!0});case 5:Z.Ay.success("远端状态已刷新"),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(2),A(e.t0,"刷新远端状态失败");case 11:return e.prev=11,m(""),e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[2,8,11,14]])})));return function(){return e.apply(this,arguments)}}(),z=function(){var e=De(Re().mark((function e(){var n,t,r,o=arguments;return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=o.length>0&&void 0!==o[0]&&o[0],(t=o.length>1&&void 0!==o[1]?o[1]:v).length){e.next=5;break}return Z.Ay.warning("请至少选择一个要推送的功能模块"),e.abrupt("return");case 5:return m("push"),y(""),e.prev=7,e.next=10,C("push",{force:n,featureIds:t},{push:!0,pull:!0});case 10:Z.Ay.success("已推送 ".concat(t.length," 个功能模块")),e.next=17;break;case 13:e.prev=13,e.t0=e.catch(7),r=Ge(e.t0,"推送失败"),e.t0.response&&409==e.t0.response.status&&"REMOTE_NEWER"==r.conflict&&!n?R.A.confirm({title:"远端模块存在差异",content:"已选择模块的远端内容与本地不同,继续推送会覆盖远端版本。确定继续吗?",okText:"继续推送",cancelText:"取消",onOk:function(){return z(!0,t)}}):e.t0.response&&409==e.t0.response.status&&"REMOTE_UNVERIFIABLE"==r.conflict&&!n?R.A.confirm({title:"远端服务不支持并发校验",content:"WebDAV 没有返回 ETag 或 Last-Modified,无法确认模块清单期间是否被其他设备修改。仍要覆盖吗?",okText:"强制推送",okType:"danger",cancelText:"取消",onOk:function(){return z(!0,t)}}):e.t0.response&&409==e.t0.response.status&&"REMOTE_INVALID"==r.conflict&&!n?R.A.confirm({title:"远端模块清单已损坏",content:"继续推送会用已选择的 ".concat(t.length," 个模块创建新清单。确定继续吗?"),okText:"推送已选模块",okType:"danger",cancelText:"取消",onOk:function(){return z(!0,t)}}):A(e.t0,"推送失败");case 17:return e.prev=17,m(""),e.finish(17);case 20:case"end":return e.stop()}}),e,null,[[7,13,17,20]])})));return function(){return e.apply(this,arguments)}}(),M=function(){var e=De(Re().mark((function e(){var n,t,r,a=arguments;return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=a.length>0&&void 0!==a[0]&&a[0],(t=a.length>1&&void 0!==a[1]?a[1]:E).length){e.next=5;break}return Z.Ay.warning("请至少选择一个要拉取的功能模块"),e.abrupt("return");case 5:return m("pull"),y(""),e.prev=7,e.next=10,C("pull",{force:n,featureIds:t},{push:!0,pull:!0});case 10:if(Z.Ay.success("已拉取 ".concat(t.length," 个功能模块")),!o){e.next=14;break}return e.next=14,o();case 14:e.next=20;break;case 16:e.prev=16,e.t0=e.catch(7),r=Ge(e.t0,"拉取失败"),e.t0.response&&409==e.t0.response.status&&"LOCAL_NEWER"==r.conflict&&!n?R.A.confirm({title:"本地模块存在差异",content:"已选择模块的本地内容与远端不同,继续拉取会覆盖其中 ".concat(t.length," 个本地模块及其接口。确定继续吗?"),okText:"覆盖本地",okType:"danger",cancelText:"取消",onOk:function(){return M(!0,t)}}):e.t0.response&&409==e.t0.response.status&&"LOCAL_CHANGED"==r.conflict?R.A.warning({title:"本地模块发生变化",content:"拉取过程中检测到本地模块被修改,本次没有覆盖任何本地数据。请检查修改后重新拉取。",okText:"知道了"}):A(e.t0,"拉取失败");case 20:return e.prev=20,m(""),e.finish(20);case 23:case"end":return e.stop()}}),e,null,[[7,16,20,23]])})));return function(){return e.apply(this,arguments)}}(),_=function(){var e=De(Re().mark((function e(){return Re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return m("disconnect"),y(""),e.prev=2,e.next=5,C("disconnect");case 5:Z.Ay.success("已断开 WebDAV,同步文件未删除"),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(2),A(e.t0,"断开连接失败");case 11:return e.prev=11,m(""),e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[2,8,11,14]])})));return function(){return e.apply(this,arguments)}}(),U=c&&c.configured,B=!!f;return r.createElement(R.A,{title:null,open:n,onCancel:function(){B?Z.Ay.warning("WebDAV 操作正在进行,请等待完成后再关闭"):t()},footer:null,width:1e3,maskClosable:!B,keyboard:!B,destroyOnClose:!0,className:"webdav-sync-modal",wrapClassName:"webdav-sync-modal-wrap"},r.createElement("div",{className:"webdav-sync-hero"},r.createElement("div",{className:"webdav-sync-hero-icon"},r.createElement(ke.A,null)),r.createElement("div",{className:"webdav-sync-hero-copy"},r.createElement(We,{className:"webdav-sync-kicker"},"WEBDAV SYNC"),r.createElement(qe,{level:3},"功能模块同步"),r.createElement(Ve,null,"按模块手动推送或拉取,每个模块独立压缩保存。")),r.createElement(ve.A,{color:U?"success":"default"},U?"已连接":"尚未配置")),b&&r.createElement(D.A,{className:"webdav-sync-error",type:"error",showIcon:!0,closable:!0,message:"WebDAV 操作失败",description:b,onClose:function(){return y("")}}),r.createElement(F.A,{spinning:u},U?r.createElement("div",{className:"webdav-sync-connected"},r.createElement(he.A,{className:"webdav-sync-connection-card",bordered:!1},r.createElement(we.A,{title:"连接信息",column:{xs:1,sm:2},size:"small"},r.createElement(we.A.Item,{label:"目录地址",span:2},r.createElement(We,{className:"webdav-sync-break-all",code:!0},c.endpoint)),r.createElement(we.A.Item,{label:"用户名"},c.username),r.createElement(we.A.Item,{label:"模块清单"},c.remoteFileName)),r.createElement(Ee.A,{title:"确定断开 WebDAV?",description:"只会清除本机连接信息,不会删除远端同步文件。",okText:"断开",cancelText:"取消",onConfirm:_},r.createElement(S.Ay,{type:"link",danger:!0,className:"webdav-sync-disconnect",icon:r.createElement(Le.A,null),loading:"disconnect"==f,disabled:B&&"disconnect"!=f},"断开连接"))),r.createElement("div",{className:"webdav-sync-module-grid"},r.createElement(Ye,{eyebrow:"LOCAL MODULES",title:"本地模块",modules:c.localModules||[],selectedIds:v,onChange:x,emptyText:"暂无可推送的功能模块",action:"推送已选模块",actionIcon:r.createElement(Ie.A,null),actionLoading:"push"==f,disabled:B,onAction:function(){return z(!1)}}),r.createElement(Ye,{eyebrow:"REMOTE MODULES",title:"远端模块",modules:c.remoteModules||[],selectedIds:E,onChange:k,emptyText:c.remoteFileInvalid?"远端模块清单已损坏":"远端暂无模块,请先推送或刷新",action:"拉取已选模块",actionIcon:r.createElement(Oe.A,null),actionClassName:"webdav-sync-pull-button",actionLoading:"pull"==f,disabled:B,onAction:function(){return M(!1)},extra:r.createElement(S.Ay,{shape:"circle",icon:r.createElement(je.A,null),loading:"refresh"==f,disabled:B&&"refresh"!=f,onClick:P,"aria-label":"刷新远端模块"})})),r.createElement(D.A,{className:"webdav-sync-manual-note",type:"info",showIcon:!0,message:"只同步已选择的模块",description:"远端清单更新时间:".concat((j=c.remoteUpdatedAt,j?new Date(j).toLocaleString("zh-CN",{hour12:!1}):"未获取"),"。拉取只替换同 ID 的已选模块及其接口,未选择的本地模块保持不变。")})):r.createElement("div",{className:"webdav-sync-grid"},r.createElement(he.A,{className:"webdav-sync-card",bordered:!1},r.createElement(ge.A,{form:a,layout:"vertical",requiredMark:!1},r.createElement(ge.A.Item,{name:"endpoint",label:"WebDAV 专用目录",rules:[{required:!0,message:"请输入 WebDAV 目录地址"}],extra:"只填写目录,不包含 JSON 文件名;末尾斜杠会自动补齐。"},r.createElement(xe.A,{prefix:r.createElement(Ae.A,null),placeholder:"https://webdav.example.com/webdav/whistle-mock-plugin-sync/"})),r.createElement("div",{className:"webdav-sync-form-row"},r.createElement(ge.A.Item,{name:"username",label:"用户名",rules:[{required:!0,message:"请输入 WebDAV 用户名"}]},r.createElement(xe.A,{autoComplete:"username"})),r.createElement(ge.A.Item,{name:"password",label:"密码",rules:[{required:!0,message:"请输入 WebDAV 密码"}]},r.createElement(xe.A.Password,{autoComplete:"current-password"}))),r.createElement(L.A,{className:"webdav-sync-form-actions"},r.createElement(S.Ay,{icon:r.createElement(Se.A,null),loading:"test"==f,disabled:B&&"test"!=f,onClick:N},"测试连接"),r.createElement(S.Ay,{type:"primary",icon:r.createElement(ke.A,null),loading:"connect"==f,disabled:B&&"connect"!=f,onClick:T},"保存连接")))),r.createElement(he.A,{className:"webdav-sync-note",bordered:!1},r.createElement(Se.A,{className:"webdav-sync-note-icon"}),r.createElement(qe,{level:5},"凭据只留在本机"),r.createElement(Ve,null,"账号密码保存在 Whistle 插件数据目录,页面不会读取明文密码,也不会写入远端同步文件。"),r.createElement("div",{className:"webdav-sync-file-tree"},r.createElement("div",null,"专用 WebDAV 目录"),r.createElement("div",null,"├─ ",c?c.remoteFileName:"whistle-mock-plugin-manifest.json"),r.createElement("div",null,"└─ 每个功能模块一个 .json.gz"))))))};var Je=t(6370),Ke=t(2120),$e=t(7977),Xe=t(2609),Ze=t(7152),Qe=t(5739),en=t(6729),nn=t(261),tn=t(3598),rn=t(1952),on=t(9248),an=t(6362),cn=t(9237),ln=t(3146),sn=t(4801),un=t(6704),dn=t(3014),pn={};function fn(e){return fn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},fn(e)}function mn(e,n){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!t){if(Array.isArray(e)||(t=vn(e))||n&&e&&"number"==typeof e.length){t&&(e=t);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,c=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return i=e.done,e},e:function(e){c=!0,a=e},f:function(){try{i||null==t.return||t.return()}finally{if(c)throw a}}}}function hn(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function bn(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?hn(Object(t),!0).forEach((function(n){yn(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):hn(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function yn(e,n,t){return(n=function(e){var n=function(e){if("object"!=fn(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=fn(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==fn(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function gn(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||vn(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function vn(e,n){if(e){if("string"==typeof e)return xn(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?xn(e,n):void 0}}function xn(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function wn(){wn=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==fn(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(fn(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function En(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function kn(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){En(a,r,o,i,c,"next",e)}function c(e){En(a,r,o,i,c,"throw",e)}i(void 0)}))}}pn.styleTagTransform=y(),pn.setAttributes=f(),pn.insert=d().bind(null,"head"),pn.domAPI=s(),pn.insertStyleElement=h(),c()(dn.A,pn),dn.A&&dn.A.locals&&dn.A.locals;var An=me.A.Text,Sn=me.A.Title,Ln=me.A.Paragraph,In=xe.A.TextArea,On=function(){var e=kn(wn().mark((function e(){var n;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ce.A.get("/_flush_cache");case 3:return n=e.sent,e.abrupt("return",n.data);case 7:throw e.prev=7,e.t0=e.catch(0),console.error("刷新缓存失败:",e.t0),e.t0;case 11:case"end":return e.stop()}}),e,null,[[0,7]])})));return function(){return e.apply(this,arguments)}}();const jn=function(){var e=(0,a.W6)(),n=gn((0,r.useState)([]),2),t=n[0],o=n[1],i=gn((0,r.useState)(!1),2),c=i[0],l=i[1],s=gn((0,r.useState)(null),2),u=s[0],d=s[1],p=gn((0,r.useState)(!1),2),f=p[0],m=p[1],h=gn((0,r.useState)([]),2),b=h[0],y=h[1],g=gn((0,r.useState)(!1),2),v=g[0],x=g[1],w=gn((0,r.useState)(!1),2),E=w[0],k=w[1],A=gn((0,r.useState)(!1),2),I=A[0],O=A[1],N=gn((0,r.useState)(!0),2),T=N[0],P=N[1],z=gn(ge.A.useForm(),1)[0],M=gn((0,r.useState)((function(){var e=localStorage.getItem("feature-list-config");return e?JSON.parse(e):{sortBy:"name",sortOrder:"ascend",pageSize:12,current:1,viewMode:"card"}})),2),_=M[0],D=M[1],U=function(e){var n=bn(bn({},_),e);D(n),localStorage.setItem("feature-list-config",JSON.stringify(n))};(0,r.useEffect)((function(){V(),B()}),[]);var B=function(){var e=kn(wn().mark((function e(){var n;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ce.A.get("/cgi-bin/settings");case 3:n=e.sent,k(1==n.data.webDavSyncEnabled),e.next=11;break;case 7:e.prev=7,e.t0=e.catch(0),console.error("读取 WebDAV 同步设置失败:",e.t0),k(!1);case 11:case"end":return e.stop()}}),e,null,[[0,7]])})));return function(){return e.apply(this,arguments)}}();(0,r.useEffect)((function(){var e=function(){c&&H()},n=function(){W()};return window.addEventListener("shortcut-save",e),window.addEventListener("shortcut-new-interface",n),function(){window.removeEventListener("shortcut-save",e),window.removeEventListener("shortcut-new-interface",n)}}),[c]);var G,V=function(){var e=kn(wn().mark((function e(){var n,t;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,P(!0),e.next=4,fetch("/cgi-bin/features");case 4:return n=e.sent,e.next=7,n.json();case 7:0===(t=e.sent).code?o(t.data||[]):(console.error("获取功能模块失败:",t.message),Z.Ay.error("获取功能模块失败: "+t.message)),e.next=15;break;case 11:e.prev=11,e.t0=e.catch(0),console.error("获取功能模块错误:",e.t0),Z.Ay.error("获取功能模块失败, 请检查网络连接");case 15:return e.prev=15,P(!1),e.finish(15);case 18:case"end":return e.stop()}}),e,null,[[0,11,15,18]])})));return function(){return e.apply(this,arguments)}}(),W=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;e?(d(e),z.setFieldsValue({name:e.name,description:e.description,active:!1!==e.active})):(d(null),z.resetFields(),z.setFieldsValue({active:!0})),l(!0)},q=function(){l(!1)},Y=function(){var e=kn(wn().mark((function e(){return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,On();case 3:e.next=8;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("刷新缓存失败,可能需要等待缓存自动过期:",e.t0);case 8:case"end":return e.stop()}}),e,null,[[0,5]])})));return function(){return e.apply(this,arguments)}}(),H=function(){var e=kn(wn().mark((function e(n){var t,r,o;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,t=bn({},n),u&&(t.id=u.id),P(!0),e.next=6,fetch("/cgi-bin/features",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});case 6:return r=e.sent,e.next=9,r.json();case 9:0===(o=e.sent).code?(Z.Ay.success(u?"功能模块更新成功":"功能模块创建成功"),V(),q(),Y()):Z.Ay.error("操作失败: "+o.message),e.next=17;break;case 13:e.prev=13,e.t0=e.catch(0),console.error("保存功能模块错误:",e.t0),Z.Ay.error("保存失败: "+e.t0.message);case 17:return e.prev=17,P(!1),e.finish(17);case 20:case"end":return e.stop()}}),e,null,[[0,13,17,20]])})));return function(n){return e.apply(this,arguments)}}(),J=function(){var e=kn(wn().mark((function e(n,r){var a,i;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("/cgi-bin/features?id=".concat(n),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({active:!r})});case 3:return a=e.sent,e.next=6,a.json();case 6:0===(i=e.sent).code?(Z.Ay.success("".concat(r?"禁用":"启用","功能模块成功")),o(t.map((function(e){return e.id===n?bn(bn({},e),{},{active:!r}):e}))),Y()):Z.Ay.error("".concat(r?"禁用":"启用","功能模块失败: ").concat(i.message)),e.next=14;break;case 10:e.prev=10,e.t0=e.catch(0),console.error("".concat(r?"禁用":"启用","功能模块错误:"),e.t0),Z.Ay.error("操作失败: ".concat(e.t0.message));case 14:case"end":return e.stop()}}),e,null,[[0,10]])})));return function(n,t){return e.apply(this,arguments)}}(),K=function(){var e=kn(wn().mark((function e(n){return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:R.A.confirm({title:"确定要删除此功能吗?",content:"这将删除所有相关的接口和模拟数据,此操作无法恢复。",okText:"删除",okType:"danger",cancelText:"取消",onOk:function(){var e=kn(wn().mark((function e(){var r,a;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,P(!0),e.next=4,fetch("/cgi-bin/features?id=".concat(n),{method:"DELETE"});case 4:return r=e.sent,e.next=7,r.json();case 7:0===(a=e.sent).code?(Z.Ay.success("功能模块已成功删除"),o(t.filter((function(e){return e.id!==n}))),Y()):Z.Ay.error("删除失败: "+a.message),e.next=15;break;case 11:e.prev=11,e.t0=e.catch(0),console.error("删除功能错误:",e.t0),Z.Ay.error("操作失败: "+e.t0.message);case 15:return e.prev=15,P(!1),e.finish(15);case 18:case"end":return e.stop()}}),e,null,[[0,11,15,18]])})));return function(){return e.apply(this,arguments)}}()});case 1:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),$=function(n){localStorage.setItem("selectedFeatureId",n.id),e.push("/interface/".concat(n.id))},Q=function(){var e=kn(wn().mark((function e(n){var t,r,o,a,i,c,l;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("/cgi-bin/interfaces?featureId=".concat(n.id));case 3:return t=e.sent,e.next=6,t.json();case 6:r=e.sent,o=bn(bn({},n),{},{interfaces:0===r.code?r.data:[]}),a=JSON.stringify(o,null,2),i="data:application/json;charset=utf-8,"+encodeURIComponent(a),c="whistle-mock-feature-".concat(n.id,".json"),(l=document.createElement("a")).setAttribute("href",i),l.setAttribute("download",c),l.click(),Z.Ay.success("配置导出成功"),e.next=22;break;case 18:e.prev=18,e.t0=e.catch(0),console.error("导出配置错误:",e.t0),Z.Ay.error("导出失败: "+e.t0.message);case 22:case"end":return e.stop()}}),e,null,[[0,18]])})));return function(n){return e.apply(this,arguments)}}(),ee=function(){var e=kn(wn().mark((function e(){var n,r,o,a,i,c,l,s,u,d,p,f,h;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(0!==b.length){e.next=3;break}return Z.Ay.warning("请至少选择一个功能模块"),e.abrupt("return");case 3:e.prev=3,x(!0),n=t.filter((function(e){return b.includes(e.id)})),r=[],o=mn(n),e.prev=8,o.s();case 10:if((a=o.n()).done){e.next=21;break}return i=a.value,e.next=14,fetch("/cgi-bin/interfaces?featureId=".concat(i.id));case 14:return c=e.sent,e.next=17,c.json();case 17:l=e.sent,r.push(bn(bn({},i),{},{interfaces:0===l.code?l.data:[]}));case 19:e.next=10;break;case 21:e.next=26;break;case 23:e.prev=23,e.t0=e.catch(8),o.e(e.t0);case 26:return e.prev=26,o.f(),e.finish(26);case 29:s=1===r.length?r[0]:r,u=JSON.stringify(s,null,2),d=new Blob([u],{type:"application/json;charset=utf-8"}),p=URL.createObjectURL(d),f=1===r.length?"whistle-mock-feature-".concat(r[0].id,".json"):"whistle-mock-features-".concat(r.length,".json"),(h=document.createElement("a")).href=p,h.download=f,h.click(),URL.revokeObjectURL(p),Z.Ay.success("成功导出 ".concat(r.length," 个功能模块")),m(!1),e.next=47;break;case 43:e.prev=43,e.t1=e.catch(3),console.error("导出配置错误:",e.t1),Z.Ay.error("导出失败: "+e.t1.message);case 47:return e.prev=47,x(!1),e.finish(47);case 50:case"end":return e.stop()}}),e,null,[[3,43,47,50],[8,23,26,29]])})));return function(){return e.apply(this,arguments)}}(),ne=function(){var e=document.createElement("input");e.type="file",e.accept=".json",e.onchange=function(){var e=kn(wn().mark((function e(n){var t,r;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=n.target.files[0]){e.next=3;break}return e.abrupt("return");case 3:(r=new FileReader).onload=function(){var e=kn(wn().mark((function e(n){var t,r,o,a,i,c,l,s,u,d,p,f,m,h,b,y,g,v,x;return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,t=JSON.parse(n.target.result),r=Array.isArray(t)?t:[t],o=r.filter((function(e){return e&&e.name})),0!==o.length){e.next=7;break}return Z.Ay.error("无效的配置文件: 缺少功能名称"),e.abrupt("return");case 7:Z.Ay.loading({content:"正在导入功能配置...",key:"importInfo"}),a=0,i=0,c=0,l=0,s=mn(o),e.prev=13,s.s();case 15:if((u=s.n()).done){e.next=67;break}return d=u.value,e.prev=17,p={name:d.name,description:d.description||"",active:!1!==d.active},e.next=21,fetch("/cgi-bin/features",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(p)});case 21:return f=e.sent,e.next=24,f.json();case 24:if(0!==(m=e.sent).code){e.next=57;break}if(a++,h=m.data,!(Array.isArray(d.interfaces)&&d.interfaces.length>0)){e.next=55;break}b=mn(d.interfaces),e.prev=30,b.s();case 32:if((y=b.n()).done){e.next=47;break}return g=y.value,e.prev=34,v=bn(bn({},g),{},{featureId:h.id,id:void 0}),e.next=38,fetch("/cgi-bin/interfaces",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)});case 38:c++,e.next=45;break;case 41:e.prev=41,e.t0=e.catch(34),console.error("导入接口配置失败:",e.t0),l++;case 45:e.next=32;break;case 47:e.next=52;break;case 49:e.prev=49,e.t1=e.catch(30),b.e(e.t1);case 52:return e.prev=52,b.f(),e.finish(52);case 55:e.next=59;break;case 57:i++,console.error("导入功能失败:",m.message);case 59:e.next=65;break;case 61:e.prev=61,e.t2=e.catch(17),i++,console.error("导入功能错误:",e.t2);case 65:e.next=15;break;case 67:e.next=72;break;case 69:e.prev=69,e.t3=e.catch(13),s.e(e.t3);case 72:return e.prev=72,s.f(),e.finish(72);case 75:x=c>0||l>0?",共导入 ".concat(c," 个接口").concat(l>0?"(".concat(l," 个失败)"):""):"",Z.Ay.success({content:"导入完成:成功 ".concat(a," 个功能").concat(i>0?",失败 ".concat(i," 个功能"):"").concat(x),key:"importInfo",duration:3}),V(),e.next=84;break;case 80:e.prev=80,e.t4=e.catch(0),console.error("导入配置错误:",e.t4),Z.Ay.error("导入失败: "+e.t4.message);case 84:case"end":return e.stop()}}),e,null,[[0,80],[13,69,72,75],[17,61],[30,49,52,55],[34,41]])})));return function(n){return e.apply(this,arguments)}}(),r.readAsText(t);case 6:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),e.click()},te=function(e,n){U({current:e,pageSize:n})},re=function(e){U({viewMode:e,current:1})},oe=function(){var e,n=(e=t,function(e){if(Array.isArray(e))return xn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||vn(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).sort((function(e,n){var t,r;switch(_.sortBy){case"name":return t=e.name||"",r=n.name||"","ascend"===_.sortOrder?t.localeCompare(r,"zh-CN"):r.localeCompare(t,"zh-CN");case"createdAt":return t=new Date(e.createdAt||0).getTime(),r=new Date(n.createdAt||0).getTime(),"ascend"===_.sortOrder?t-r:r-t;case"interfaceCount":return t=e.interfaceCount||0,r=n.interfaceCount||0,"ascend"===_.sortOrder?t-r:r-t;case"active":return t=e.active?1:0,r=n.active?1:0,"ascend"===_.sortOrder?t-r:r-t;default:return 0}})),r=(_.current-1)*_.pageSize,o=r+_.pageSize;return n.slice(r,o)};return r.createElement(fe,null,r.createElement("div",{className:"page-container"},r.createElement("div",{className:"page-title-bar"},r.createElement("div",{className:"title-section"},r.createElement("div",{className:"title-with-badge"},r.createElement("h1",{className:"page-title"},"功能模块管理")),r.createElement("div",{className:"page-description"},"创建和管理功能模块,为每个功能配置独立的接口")),r.createElement("div",{className:"page-actions"},r.createElement(S.Ay,{type:"primary",icon:r.createElement(cn.A,null),onClick:function(){return W()}},"新建功能"),r.createElement(S.Ay,{type:"primary",icon:r.createElement(rn.A,null),onClick:ne,style:{backgroundColor:"#52c41a",borderColor:"#52c41a"}},"导入功能"),r.createElement(S.Ay,{type:"primary",icon:r.createElement(ln.A,null),onClick:function(){0!==t.length?(y(t.map((function(e){return e.id}))),m(!0)):Z.Ay.warning("暂无可导出的功能模块")},disabled:0===t.length,style:0===t.length?void 0:{backgroundColor:"#fa8c16",borderColor:"#fa8c16"}},"导出功能"),E&&r.createElement(S.Ay,{type:"primary",icon:r.createElement(ke.A,null),onClick:function(){return O(!0)},style:{backgroundColor:"#0891b2",borderColor:"#0891b2"}},"WebDAV"))),t.length>0&&!T&&r.createElement(he.A,{className:"control-panel-card",style:{marginBottom:24}},r.createElement(Ze.A,{gutter:[24,16],align:"middle"},r.createElement(Je.A,{xs:24,sm:12,md:8,lg:6},r.createElement("div",{className:"stats-section"},r.createElement("div",{className:"stats-item"},r.createElement("span",{className:"stats-number"},t.length),r.createElement("span",{className:"stats-label"},"功能模块")),r.createElement("div",{className:"stats-item"},r.createElement("span",{className:"stats-number"},t.filter((function(e){return e.active})).length),r.createElement("span",{className:"stats-label"},"已启用")),r.createElement("div",{className:"stats-item"},r.createElement("span",{className:"stats-number"},t.reduce((function(e,n){return e+(n.interfaceCount||0)}),0)),r.createElement("span",{className:"stats-label"},"接口总数")))),r.createElement(Je.A,{xs:24,sm:12,md:8,lg:9},r.createElement("div",{className:"sort-controls"},r.createElement("div",{className:"control-group"},r.createElement("span",{className:"control-label"},r.createElement(sn.A,null)," 排序方式"),r.createElement(Qe.A,{value:_.sortBy,onChange:function(e){U({sortBy:e,current:1})},style:{width:120},size:"middle"},r.createElement(Qe.A.Option,{value:"name"},"名称"),r.createElement(Qe.A.Option,{value:"createdAt"},"创建时间"),r.createElement(Qe.A.Option,{value:"interfaceCount"},"接口数量"),r.createElement(Qe.A.Option,{value:"active"},"状态")),r.createElement(Qe.A,{value:_.sortOrder,onChange:function(e){U({sortOrder:e,current:1})},style:{width:80},size:"middle"},r.createElement(Qe.A.Option,{value:"ascend"},"升序"),r.createElement(Qe.A.Option,{value:"descend"},"降序"))))),r.createElement(Je.A,{xs:24,sm:12,md:4,lg:3},r.createElement("div",{className:"view-mode-controls"},r.createElement(S.Ay.Group,null,r.createElement($e.A,{title:"卡片视图"},r.createElement(S.Ay,{type:"card"===_.viewMode?"primary":"default",icon:r.createElement(j.A,null),onClick:function(){return re("card")}})),r.createElement($e.A,{title:"列表视图"},r.createElement(S.Ay,{type:"list"===_.viewMode?"primary":"default",icon:r.createElement(un.A,null),onClick:function(){return re("list")}}))))),r.createElement(Je.A,{xs:24,sm:24,md:12,lg:6},r.createElement("div",{className:"pagination-controls"},r.createElement("div",{className:"control-group"},r.createElement("span",{className:"control-label"},"每页显示"),r.createElement(Qe.A,{value:_.pageSize,onChange:function(e){U({pageSize:e,current:1})},style:{width:80},size:"middle"},r.createElement(Qe.A.Option,{value:8},"8"),r.createElement(Qe.A.Option,{value:12},"12"),r.createElement(Qe.A.Option,{value:16},"16"),r.createElement(Qe.A.Option,{value:24},"24")),r.createElement("span",{className:"page-info"},"第 ",(_.current-1)*_.pageSize+1,"-",Math.min(_.current*_.pageSize,t.length)," 条")))))),r.createElement(he.A,{className:"feature-list-card"},T?r.createElement("div",{className:"loading-state"},r.createElement(F.A,{size:"large"}),r.createElement("div",{className:"loading-text"},"正在加载功能模块...")):t.length>0?r.createElement(r.Fragment,null,"card"===_.viewMode?r.createElement(Ze.A,{gutter:[20,20],className:"feature-grid"},oe().map((function(e){return function(e){var n=e.createdAt?new Date(e.createdAt).toLocaleDateString():"未知日期";return r.createElement(Je.A,{xs:24,sm:12,md:8,lg:6,key:e.id,style:{marginBottom:16}},r.createElement(Ke.A.Ribbon,{text:e.active?"已启用":"已禁用",color:e.active?"#52c41a":"#f5222d",style:{display:"block"}},r.createElement(he.A,{className:"feature-card ".concat(e.active?"":"inactive-feature"),onClick:function(n){var t=n.target;t.closest(".ant-switch")||t.closest(".feature-name .ant-switch")||t.closest(".ant-card-actions")||t.closest(".ant-card-actions li")||$(e)},style:{cursor:"pointer"},actions:[r.createElement($e.A,{title:"管理接口"},r.createElement(C.A,{key:"interfaces",onClick:function(n){n.stopPropagation(),$(e)}})),r.createElement($e.A,{title:"编辑功能"},r.createElement(nn.A,{key:"edit",onClick:function(n){n.stopPropagation(),W(e)}})),r.createElement($e.A,{title:"删除功能"},r.createElement(tn.A,{key:"delete",onClick:function(n){n.stopPropagation(),K(e.id)}})),r.createElement($e.A,{title:"导出配置"},r.createElement(rn.A,{key:"export",onClick:function(n){n.stopPropagation(),Q(e)}}))]},r.createElement("div",{className:"feature-card-content"},r.createElement("div",{className:"feature-name"},r.createElement(Sn,{level:4,ellipsis:{tooltip:e.name}},e.name),r.createElement(Xe.A,{checked:e.active,onChange:function(n,t){t.stopPropagation(),J(e.id,e.active)},size:"small",onClick:function(){event.stopPropagation()}})),r.createElement(Ln,{className:"feature-description",ellipsis:{rows:2,expandable:!1,tooltip:e.description}},e.description||"无描述"),r.createElement("div",{className:"feature-stat"},r.createElement("span",null,r.createElement(on.A,null)," ",e.interfaceCount||0," 个接口"),r.createElement("span",{className:"feature-date"},r.createElement(an.A,null)," ",n))))))}(e)}))):(G=[{title:"状态",dataIndex:"active",key:"active",width:100,render:function(e,n){return r.createElement(Xe.A,{checked:e,onChange:function(t,r){r.stopPropagation(),J(n.id,e)},checkedChildren:"启用",unCheckedChildren:"禁用"})}},{title:"功能名称",dataIndex:"name",key:"name",ellipsis:{tooltip:!0},render:function(e){return r.createElement(An,{strong:!0,style:{fontSize:"14px"}},e)}},{title:"功能描述",dataIndex:"description",key:"description",ellipsis:{tooltip:!0},render:function(e){return r.createElement(An,{type:"secondary"},e||"无描述")}},{title:"接口数量",dataIndex:"interfaceCount",key:"interfaceCount",width:100,align:"center",render:function(e){return r.createElement(Ke.A,{count:e||0,showZero:!0,style:{backgroundColor:"#1677ff"}})}},{title:"创建时间",dataIndex:"createdAt",key:"createdAt",width:120,render:function(e){return r.createElement(An,{type:"secondary"},e?new Date(e).toLocaleDateString():"未知日期")}},{title:"操作",key:"action",width:200,fixed:"right",render:function(e,n){return r.createElement(L.A,{size:"small"},r.createElement($e.A,{title:"管理接口"},r.createElement(S.Ay,{type:"link",size:"small",icon:r.createElement(C.A,null),onClick:function(e){e.stopPropagation(),$(n)}},"接口")),r.createElement($e.A,{title:"编辑"},r.createElement(S.Ay,{type:"link",size:"small",icon:r.createElement(nn.A,null),onClick:function(e){e.stopPropagation(),W(n)}})),r.createElement($e.A,{title:"导出"},r.createElement(S.Ay,{type:"link",size:"small",icon:r.createElement(rn.A,null),onClick:function(e){e.stopPropagation(),Q(n)}})),r.createElement($e.A,{title:"删除"},r.createElement(S.Ay,{type:"link",size:"small",danger:!0,icon:r.createElement(tn.A,null),onClick:function(e){e.stopPropagation(),K(n.id)}})))}}],r.createElement(X.A,{columns:G,dataSource:oe(),rowKey:"id",pagination:!1,onRow:function(e){return{onClick:function(){return $(e)},style:{cursor:"pointer"}}},rowClassName:function(e){return e.active?"":"inactive-row"}})),t.length>_.pageSize&&r.createElement("div",{className:"pagination-wrapper"},r.createElement(en.A,{current:_.current,pageSize:_.pageSize,total:t.length,onChange:te,onShowSizeChange:te,showSizeChanger:!1,showQuickJumper:!0,showTotal:function(e,n){return"第 ".concat(n[0],"-").concat(n[1]," 条,共 ").concat(e," 个功能模块")},size:"default",className:"custom-pagination"}))):r.createElement(ye.A,{className:"custom-empty",image:r.createElement("div",{className:"empty-image"},r.createElement(C.A,{style:{fontSize:64,color:"#d9d9d9"}})),description:r.createElement("div",{className:"empty-description"},r.createElement("div",{className:"empty-title"},"暂无功能模块"),r.createElement("div",{className:"empty-subtitle"},"创建您的第一个功能模块,开始管理接口"))},r.createElement("div",{className:"empty-actions"},r.createElement(S.Ay,{type:"primary",icon:r.createElement(cn.A,null),onClick:function(){return W()}},"创建新功能"),r.createElement(S.Ay,{icon:r.createElement(rn.A,null),onClick:ne},"导入功能"))))),r.createElement(R.A,{title:u?"编辑功能":"新建功能",open:c,onCancel:q,footer:null,destroyOnClose:!0,width:500},r.createElement(ge.A,{form:z,layout:"vertical",onFinish:H,initialValues:{name:"",description:"",active:!0}},r.createElement(ge.A.Item,{name:"name",label:"功能名称",rules:[{required:!0,message:"请输入功能名称"}]},r.createElement(xe.A,{placeholder:"请输入功能名称"})),r.createElement(ge.A.Item,{name:"description",label:"功能描述"},r.createElement(In,{placeholder:"请输入功能描述(可选)",autoSize:{minRows:3,maxRows:6}})),r.createElement("div",{className:"form-actions"},r.createElement(S.Ay,{onClick:q},"取消"),r.createElement(S.Ay,{type:"primary",htmlType:"submit",loading:T},"确定")))),r.createElement(R.A,{title:"导出功能",open:f,onCancel:function(){return m(!1)},footer:null,destroyOnClose:!0,width:520},r.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12}},r.createElement(be.A,{indeterminate:b.length>0&&b.length<t.length,checked:t.length>0&&b.length===t.length,onChange:function(e){return y(e.target.checked?t.map((function(e){return e.id})):[])}},"全选"),r.createElement(An,{type:"secondary"},"已选择 ",b.length," / ",t.length)),r.createElement("div",{style:{maxHeight:360,overflowY:"auto",border:"1px solid #f0f0f0",borderRadius:8,padding:"4px 12px"}},r.createElement(be.A.Group,{value:b,onChange:function(e){return y(e)},style:{width:"100%"}},t.map((function(e){return r.createElement("div",{key:e.id,style:{padding:"8px 0",borderBottom:"1px solid #fafafa"}},r.createElement(be.A,{value:e.id,style:{width:"100%"}},r.createElement("span",{style:{fontWeight:500}},e.name),r.createElement("span",{style:{color:"#999",marginLeft:8,fontSize:12}},e.interfaceCount||0," 个接口")))})))),r.createElement("div",{className:"form-actions",style:{marginTop:16}},r.createElement(S.Ay,{onClick:function(){return m(!1)}},"取消"),r.createElement(S.Ay,{type:"primary",loading:v,disabled:0===b.length,onClick:ee},"导出 (",b.length,")"))),r.createElement(He,{open:I,onClose:function(){return O(!1)},onPulled:kn(wn().mark((function e(){return wn().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,V();case 2:return e.next=4,Y();case 4:case"end":return e.stop()}}),e)})))}))};var Cn=t(8603),Nn=t(8073),Tn=t(6143),Pn=t(696),zn=t(5710),Mn=t(7046),_n=t(2877),Rn=t(3108),Fn=t(4103),Dn=t(1348),Un=t(4034),Bn={};Bn.styleTagTransform=y(),Bn.setAttributes=f(),Bn.insert=d().bind(null,"head"),Bn.domAPI=s(),Bn.insertStyleElement=h(),c()(Un.A,Bn),Un.A&&Un.A.locals&&Un.A.locals;var Gn=t(5901),Vn=t(961),Wn=t(6552),qn=t(5225),Yn=t(6008),Hn=t(9822),Jn=t(9197),Kn=t(234),$n=t(2630),Xn=t(1295),Zn=t(8027),Qn=t(3829);function et(e){return et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},et(e)}function nt(){nt=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==et(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(et(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function tt(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function rt(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){tt(a,r,o,i,c,"next",e)}function c(e){tt(a,r,o,i,c,"throw",e)}i(void 0)}))}}var ot=function(){var e=rt(nt().mark((function e(){var n;return nt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ce.A.get("/_flush_cache");case 3:return n=e.sent,e.abrupt("return",n.data);case 7:throw e.prev=7,e.t0=e.catch(0),console.error("刷新缓存失败:",e.t0),e.t0;case 11:case"end":return e.stop()}}),e,null,[[0,7]])})));return function(){return e.apply(this,arguments)}}(),at=function(){var e=rt(nt().mark((function e(){return nt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,ot();case 3:e.next=8;break;case 5:e.prev=5,e.t0=e.catch(0),console.error("刷新缓存失败,可能需要等待缓存自动过期:",e.t0);case 8:case"end":return e.stop()}}),e,null,[[0,5]])})));return function(){return e.apply(this,arguments)}}(),it=function(e,n){if(n&&n.includes("json"))try{var t=JSON.parse(e);return JSON.stringify(t,null,2)}catch(n){return e}return e},ct=function(){return(0,Qn.A)()};function lt(e){return lt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},lt(e)}function st(e){return function(e){if(Array.isArray(e))return ht(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||mt(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ut(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function dt(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?ut(Object(t),!0).forEach((function(n){pt(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ut(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function pt(e,n,t){return(n=function(e){var n=function(e){if("object"!=lt(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=lt(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==lt(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ft(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||mt(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function mt(e,n){if(e){if("string"==typeof e)return ht(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?ht(e,n):void 0}}function ht(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var bt=xe.A.TextArea,yt=Qe.A.Option;const gt=function(e){var n=e.form,t=e.responses,o=e.activeResponseId,a=e.onPreview,i=e.enableSorting,c=void 0!==i&&i,l=n.getFieldValue,s=n.setFieldsValue,u=ft((0,r.useState)(!1),2),d=u[0],p=u[1],f=ft((0,r.useState)(""),2),m=f[0],h=f[1],b=ft((0,r.useState)(!1),2),y=b[0],g=b[1],v=ft((0,r.useState)(!1),2),x=v[0],w=v[1],E=ft((0,r.useState)((function(){var e=localStorage.getItem("responseParamMatcherEnabled");return null===e||"false"!==e})),2),k=E[0],A=E[1];(0,r.useEffect)((function(){var e=function(){var e=localStorage.getItem("responseParamMatcherEnabled");A(null===e||"false"!==e)};return window.addEventListener("storage",e),function(){return window.removeEventListener("storage",e)}}),[]);var I=t.findIndex((function(e){return e.id===o})),O=I>=0?t[I]:null,j=ft((0,r.useState)((function(){return Array.isArray(t)?t.map((function(e){return dt({},e)})):[]})),2),C=j[0],N=j[1];(0,r.useEffect)((function(){N(Array.isArray(t)?t.map((function(e){return dt({},e)})):[])}),[t]);var T=function(){g(!y)},P=function(){var e=ct(),n=l("responses")||[];if(!Array.isArray(n))try{"string"==typeof n&&(n=JSON.parse(n))}catch(e){n=[]}Array.isArray(n)||(n=[]);var t={id:e,name:"响应 ".concat(n.length+1),description:"",content:'{\n "code": 0,\n "message": "success",\n "data": {}\n}',paramMatchers:[]},r=[].concat(st(n),[t]);s({responses:r,activeResponseId:e})},z=function(e){s({activeResponseId:e}),p(!1)},M=function(){if(o&&m.trim()){var e=(l("responses")||[]).map((function(e){return e.id===o?dt(dt({},e),{},{name:m.trim()}):e}));s({responses:e})}p(!1),h("")},_=function(e){if(I>=0){var n=st(l("responses")||[]);n[I]=dt(dt({},n[I]),{},{content:e}),s({responses:n})}},R=function(e){if(I>=0){var n=st(l("responses")||[]);n[I]=dt(dt({},n[I]),{},{paramMatchers:e}),s({responses:n})}},F=function(){var e=O&&O.paramMatchers||[];R([].concat(st(e),[{paramPath:"",paramValue:"",matchType:"exact"}]))},D=function(e,n,t){var r=(O&&O.paramMatchers||[]).map((function(r,o){return o===e?dt(dt({},r),{},pt({},n,t)):r}));R(r)};return Array.isArray(t)&&0!==t.length?r.createElement(he.A,{title:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Yn.A,null),r.createElement("span",null,"响应内容编辑"),r.createElement(Ke.A,{count:t.length,style:{backgroundColor:"#52c41a"}})),extra:r.createElement(L.A,{size:"small"},c&&r.createElement(S.Ay,{type:"default",icon:r.createElement(Jn.A,null),onClick:function(){return w(!x)},size:"small",style:{display:"flex",alignItems:"center",gap:"4px"}},"排序"),r.createElement(S.Ay,{type:"default",icon:r.createElement(Hn.A,null),onClick:P,size:"small",style:{display:"flex",alignItems:"center",gap:"4px"}},"添加响应"),r.createElement(S.Ay,{type:"default",icon:r.createElement(Kn.A,null),onClick:function(){O?a&&a():Z.Ay.error("未找到有效的响应内容")},size:"small",style:{display:"flex",alignItems:"center",gap:"4px",borderColor:"#52c41a",color:"#52c41a"}},"预览"),r.createElement(S.Ay,{type:"default",icon:r.createElement($n.A,null),onClick:function(){if(O&&O.content)try{var e=JSON.parse(O.content),n=JSON.stringify(e,null,2);_(n),Z.Ay.success("JSON已格式化")}catch(e){Z.Ay.error("无效的JSON格式,无法格式化")}else Z.Ay.warning("没有可格式化的JSON内容")},size:"small",style:{display:"flex",alignItems:"center",gap:"4px",borderColor:"#fa8c16",color:"#fa8c16"}},"格式化JSON")),style:{marginBottom:16},bodyStyle:{padding:"16px"}},c&&x&&Array.isArray(C)&&C.length>1&&r.createElement("div",{style:{marginBottom:12}},r.createElement(Gn.ReactSortable,{list:C,setList:function(e){N(e),s({responses:e})},animation:150,ghostClass:"sortable-ghost",style:{display:"flex",gap:8,overflowX:"auto",paddingBottom:4}},C.map((function(e){return r.createElement("div",{key:e.id,className:"sortable-chip".concat(e.id===o?" sortable-chip-active":""),onClick:function(){return z(e.id)},title:e.name||"未命名响应"},e.name||"未命名响应")})))),r.createElement("div",{style:{marginBottom:"16px"}},r.createElement(Ze.A,{gutter:12,align:"middle"},r.createElement(Je.A,{span:20},r.createElement("div",{style:{marginBottom:"8px"}},r.createElement("label",{style:{fontSize:"12px",color:"#666",fontWeight:"bold"}},"选择响应 / 编辑名称")),r.createElement("div",{style:{position:"relative"}},d?r.createElement(xe.A.Group,{compact:!0},r.createElement(xe.A,{style:{width:"calc(100% - 80px)"},value:m,onChange:function(e){return h(e.target.value)},onPressEnter:M,onBlur:M,placeholder:"输入响应名称",autoFocus:!0}),r.createElement(S.Ay,{style:{width:"40px"},type:"primary",icon:r.createElement(Xn.A,null),onClick:M}),r.createElement(S.Ay,{style:{width:"40px"},icon:r.createElement(tn.A,null),onClick:function(){p(!1),h("")}})):r.createElement(xe.A.Group,{compact:!0},r.createElement(Qe.A,{style:{width:"calc(100% - 40px)"},placeholder:"选择要编辑的响应",value:o,onChange:z},t.map((function(e,n){return r.createElement(yt,{key:e.id,value:e.id},e.name||"响应 ".concat(n+1))}))),r.createElement($e.A,{title:"编辑响应名称"},r.createElement(S.Ay,{style:{width:"40px"},icon:r.createElement(nn.A,null),onClick:function(){O&&(h(O.name||""),p(!0))},disabled:!O}))))),r.createElement(Je.A,{span:4},r.createElement("div",{style:{marginBottom:"8px"}},r.createElement("label",{style:{fontSize:"12px",color:"#666",fontWeight:"bold"}},"操作")),r.createElement($e.A,{title:"删除当前响应"},r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null),onClick:function(){return o&&function(e){var n=l("responses")||[];if(n.length<=1)Z.Ay.warning("至少需要保留一个响应");else{var t,r=n.filter((function(n){return n.id!==e})),a=o;e===o&&(a=null===(t=r[0])||void 0===t?void 0:t.id),s({responses:r,activeResponseId:a})}}(o)},disabled:t.length<=1||!O,style:{width:"100%"}},"删除"))))),O&&k&&function(){if(!O)return null;var e=O.paramMatchers||[];return r.createElement("div",{style:{marginBottom:"12px"}},r.createElement(Wn.A,{orientation:"left",orientationMargin:0,style:{margin:"0 0 10px 0",fontSize:"12px"}},r.createElement(L.A,{size:6},r.createElement(Rn.A,{style:{color:"#1677ff"}}),r.createElement("span",{style:{fontWeight:"bold",color:"#333"}},"入参匹配规则"),e.length>0&&r.createElement(ve.A,{color:"blue",style:{fontSize:"11px",padding:"0 4px"}},e.length,"条"),r.createElement($e.A,{title:"满足所有规则时返回此响应;无规则的响应作为默认兜底。响应按列表顺序依次检查,第一个匹配的响应被返回。"},r.createElement(Dn.A,{style:{color:"#bbb",cursor:"help",fontSize:"12px"}})))),r.createElement("div",null,e.map((function(e,n){return r.createElement("div",{key:n,style:{display:"flex",gap:"8px",alignItems:"center",marginBottom:"8px"}},r.createElement(xe.A,{style:{flex:1},placeholder:"参数路径(如:userId 或 data.user.id)",value:e.paramPath||"",onChange:function(e){return D(n,"paramPath",e.target.value)},size:"small"}),r.createElement(xe.A,{style:{flex:1},placeholder:"期望值(如:123 或 admin)",value:e.paramValue||"",onChange:function(e){return D(n,"paramValue",e.target.value)},size:"small"}),r.createElement(Qe.A,{style:{width:90},value:e.matchType||"exact",onChange:function(e){return D(n,"matchType",e)},size:"small"},r.createElement(yt,{value:"exact"},"精确匹配"),r.createElement(yt,{value:"contains"},"包含"),r.createElement(yt,{value:"regex"},"正则")),r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null),size:"small",onClick:function(){return function(e){var n=(O&&O.paramMatchers||[]).filter((function(n,t){return t!==e}));R(n)}(n)}}))})),r.createElement(S.Ay,{type:"dashed",size:"small",icon:r.createElement(cn.A,null),onClick:F,style:{width:"100%"}},"添加匹配规则"),0===e.length&&r.createElement("div",{style:{color:"#bbb",fontSize:"12px",marginTop:"6px",textAlign:"center"}},"无规则时此响应作为默认兜底响应")))}(),O&&r.createElement(r.Fragment,null,r.createElement("div",{style:{marginBottom:"8px"}},r.createElement("label",{style:{fontSize:"12px",color:"#666",fontWeight:"bold"}},"响应内容")),r.createElement("div",{style:{position:"relative"}},r.createElement(bt,{rows:26,placeholder:"请输入响应内容...",style:{fontFamily:'Monaco, Menlo, "Ubuntu Mono", monospace',fontSize:"13px",lineHeight:"1.5",minHeight:"620px"},value:O.content||"",onChange:function(e){return _(e.target.value)}}),r.createElement(S.Ay,{className:"textarea-fullscreen-btn",icon:r.createElement(Zn.A,null),onClick:T,size:"small",style:{position:"absolute",top:"8px",right:"12px",background:"rgba(255, 255, 255, 0.9)",border:"1px solid #d9d9d9",zIndex:10},title:"全屏编辑"}))),y&&O?Vn.createPortal(r.createElement("div",{className:"textarea-fullscreen-overlay",onKeyDown:function(e){"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),g(!1))},tabIndex:-1},r.createElement("div",{className:"textarea-fullscreen-header"},r.createElement(S.Ay,{icon:r.createElement(qn.A,null),onClick:T,size:"small",type:"text",style:{color:"#595959"}},"退出全屏 (ESC)")),r.createElement(bt,{className:"textarea-fullscreen-editor",autoFocus:!0,placeholder:"请输入响应内容...",value:O.content||"",onChange:function(e){return _(e.target.value)}})),document.body):null):r.createElement(he.A,{title:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Yn.A,null),r.createElement("span",null,"响应内容编辑")),style:{marginBottom:16},bodyStyle:{padding:"16px"}},r.createElement("div",{style:{textAlign:"center",padding:"40px 20px",borderRadius:"6px",border:"1px dashed #d9d9d9"}},r.createElement(zn.A,{style:{fontSize:"32px",color:"#bfbfbf",marginBottom:"12px"}}),r.createElement("div",{style:{color:"#999",marginBottom:"16px"}},"暂无响应数据"),r.createElement(S.Ay,{type:"primary",icon:r.createElement(Hn.A,null),onClick:P},"创建第一个响应")))};var vt=[{value:"application/json; charset=utf-8",label:"JSON"},{value:"text/plain; charset=utf-8",label:"纯文本"},{value:"text/html; charset=utf-8",label:"HTML"},{value:"application/xml; charset=utf-8",label:"XML"},{value:"application/javascript; charset=utf-8",label:"JavaScript"}],xt=[{value:"response",label:"模拟响应"},{value:"redirect",label:"重定向"},{value:"url_redirect",label:"URL重定向"}],wt=[{value:"200",label:"200 OK"},{value:"201",label:"201 Created"},{value:"204",label:"204 No Content"},{value:"400",label:"400 Bad Request"},{value:"401",label:"401 Unauthorized"},{value:"403",label:"403 Forbidden"},{value:"404",label:"404 Not Found"},{value:"500",label:"500 Internal Server Error"}],Et=[{value:"ALL",label:"所有方法"},{value:"GET",label:"GET"},{value:"POST",label:"POST"},{value:"PUT",label:"PUT"},{value:"DELETE",label:"DELETE"},{value:"PATCH",label:"PATCH"},{value:"HEAD",label:"HEAD"},{value:"OPTIONS",label:"OPTIONS"}];const kt=function(e){var n=e.visible,t=e.onCancel,o=e.previewContent;return r.createElement(R.A,{title:(null==o?void 0:o.title)||"预览响应内容",open:n,onCancel:t,footer:[r.createElement(S.Ay,{key:"close",onClick:t},"关闭")],width:600},(null==o?void 0:o.description)&&r.createElement("div",{style:{marginBottom:"16px",padding:"8px",borderRadius:"4px",borderLeft:"4px solid #00f0ff"}},r.createElement("div",{style:{fontWeight:"bold",marginBottom:"4px"}},"描述:"),r.createElement("div",{style:{opacity:.7}},o.description)),r.createElement("div",{style:{maxHeight:"60vh",overflow:"auto",padding:"16px",borderRadius:"4px",fontFamily:"'Share Tech Mono', monospace"}},r.createElement("pre",{style:{margin:0,whiteSpace:"pre-wrap",wordWrap:"break-word"}},null==o?void 0:o.content)))};function At(e){return At="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},At(e)}function St(){St=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==At(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(At(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function Lt(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function It(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||function(e,n){if(e){if("string"==typeof e)return Ot(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Ot(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ot(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}const jt=function(e){var n=e.visible,t=e.onCancel,o=e.interfaceItem,a=e.onSaved,i=It(ge.A.useForm(),1)[0],c=It((0,r.useState)(!1),2),l=c[0],s=c[1],u=It((0,r.useState)(null),2),d=u[0],p=u[1];(0,r.useEffect)((function(){if(n&&o){var e=Array.isArray(o.responses)?o.responses:[],t=o.activeResponseId||e[0]&&e[0].id||"";i.setFieldsValue({responses:e,activeResponseId:t})}}),[n,o]);var f=function(){var e=i.getFieldsValue(!0),n=Array.isArray(e.responses)?e.responses:[],t=n.find((function(n){return n.id===e.activeResponseId}))||n[0];if(t){var r="application/json; charset=utf-8",o=it(t.content||"",r);p({title:"预览: ".concat(t.name||"未命名响应"),content:o,contentType:r,description:""}),s(!0)}else Z.Ay.error("未找到有效的响应内容")},m=function(){var e,n=(e=St().mark((function e(){var n,r,c,l,s;return St().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,i.validateFields();case 3:if(n=i.getFieldsValue(!0),r={responses:Array.isArray(n.responses)?n.responses:[],activeResponseId:n.activeResponseId||n.responses&&n.responses[0]&&n.responses[0].id||""},o&&o.id){e.next=8;break}return Z.Ay.error("缺少接口ID,无法保存"),e.abrupt("return");case 8:return e.next=10,Ce.A.patch("/cgi-bin/interfaces/".concat(o.id),r);case 10:if(!(c=e.sent).data||0!==c.data.code){e.next=19;break}return Z.Ay.success("保存成功"),e.next=15,at();case 15:a&&a(),t&&t(),e.next=20;break;case 19:throw new Error((null===(l=c.data)||void 0===l?void 0:l.message)||"保存失败");case 20:e.next=28;break;case 22:if(e.prev=22,e.t0=e.catch(0),!e.t0||!e.t0.errorFields){e.next=26;break}return e.abrupt("return");case 26:console.error("保存失败",e.t0),Z.Ay.error((null===(s=e.t0.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.message)||e.t0.message||"保存失败");case 28:case"end":return e.stop()}}),e,null,[[0,22]])})),function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){Lt(a,r,o,i,c,"next",e)}function c(e){Lt(a,r,o,i,c,"throw",e)}i(void 0)}))});return function(){return n.apply(this,arguments)}}();return r.createElement(r.Fragment,null,r.createElement(Tn.A,{title:"数据管理",placement:"right",width:1040,open:n,onClose:t,destroyOnClose:!0,bodyStyle:{paddingBottom:80},footer:r.createElement("div",{style:{textAlign:"right"}},r.createElement(L.A,null,r.createElement(S.Ay,{onClick:t},"取消"),r.createElement(S.Ay,{type:"primary",onClick:m},"保存")))},r.createElement(ge.A,{form:i,layout:"vertical",initialValues:{responses:[],activeResponseId:""}},r.createElement(ge.A.Item,{name:"responses",hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{name:"activeResponseId",hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:!0},(function(e){var n=e.getFieldValue,t=n("responses")||[],o=n("activeResponseId")||t[0]&&t[0].id||"";return r.createElement(gt,{form:i,responses:t,activeResponseId:o,onPreview:f,enableSorting:!0})})))),r.createElement(kt,{visible:l,onCancel:function(){return s(!1)},previewContent:d}))};function Ct(e){return Ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ct(e)}function Nt(){Nt=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==Ct(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(Ct(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function Tt(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function Pt(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||function(e,n){if(e){if("string"==typeof e)return zt(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?zt(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function zt(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}const Mt=function(e){var n=e.visible,t=e.onCancel,o=e.interfaceItem,a=e.onSaved,i=Pt(ge.A.useForm(),1)[0],c=Pt((0,r.useState)(!1),2),l=c[0],s=c[1],u=Pt((0,r.useState)(null),2),d=u[0],p=u[1];(0,r.useEffect)((function(){if(n&&o){var e=Array.isArray(o.responses)?o.responses:[],t=o.activeResponseId||e[0]&&e[0].id||"";i.setFieldsValue({responses:e,activeResponseId:t})}}),[n,o]);var f=function(){var e=i.getFieldsValue(!0),n=Array.isArray(e.responses)?e.responses:[],t=n.find((function(n){return n.id===e.activeResponseId}))||n[0];if(t){var r="application/json; charset=utf-8",o=it(t.content||"",r);p({title:"预览: ".concat(t.name||"未命名响应"),content:o,contentType:r,description:""}),s(!0)}else Z.Ay.error("未找到有效的响应内容")},m=function(){var e,n=(e=Nt().mark((function e(){var n,r,c,l,s;return Nt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,i.validateFields();case 3:if(n=i.getFieldsValue(!0),r={responses:Array.isArray(n.responses)?n.responses:[],activeResponseId:n.activeResponseId||n.responses&&n.responses[0]&&n.responses[0].id||""},o&&o.id){e.next=8;break}return Z.Ay.error("缺少接口ID,无法保存"),e.abrupt("return");case 8:return e.next=10,Ce.A.patch("/cgi-bin/interfaces/".concat(o.id),r);case 10:if(!(c=e.sent).data||0!==c.data.code){e.next=19;break}return Z.Ay.success("保存成功"),e.next=15,at();case 15:a&&a(),t&&t(),e.next=20;break;case 19:throw new Error((null===(l=c.data)||void 0===l?void 0:l.message)||"保存失败");case 20:e.next=28;break;case 22:if(e.prev=22,e.t0=e.catch(0),!e.t0||!e.t0.errorFields){e.next=26;break}return e.abrupt("return");case 26:console.error("保存失败",e.t0),Z.Ay.error((null===(s=e.t0.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.message)||e.t0.message||"保存失败");case 28:case"end":return e.stop()}}),e,null,[[0,22]])})),function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){Tt(a,r,o,i,c,"next",e)}function c(e){Tt(a,r,o,i,c,"throw",e)}i(void 0)}))});return function(){return n.apply(this,arguments)}}();return r.createElement(r.Fragment,null,r.createElement(R.A,{title:"数据管理",open:n,onOk:m,onCancel:t,width:1040,destroyOnClose:!0,okText:"保存",cancelText:"取消",bodyStyle:{maxHeight:"80vh",overflow:"auto",padding:"24px"}},r.createElement(ge.A,{form:i,layout:"vertical",initialValues:{responses:[],activeResponseId:""}},r.createElement(ge.A.Item,{name:"responses",hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{name:"activeResponseId",hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:!0},(function(e){var n=e.getFieldValue,t=n("responses")||[],o=n("activeResponseId")||t[0]&&t[0].id||"";return r.createElement(gt,{form:i,responses:t,activeResponseId:o,onPreview:f,enableSorting:!0})})))),r.createElement(kt,{visible:l,onCancel:function(){return s(!1)},previewContent:d}))};var _t=["key","name"],Rt=["key","name"],Ft=["key","name"],Dt=["key","name"];function Ut(){return Ut=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},Ut.apply(null,arguments)}function Bt(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==n.indexOf(r))continue;t[r]=e[r]}return t}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],-1===n.indexOf(t)&&{}.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function Gt(e){return function(e){if(Array.isArray(e))return Zt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Xt(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vt(e){return Vt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vt(e)}function Wt(){Wt=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==Vt(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(Vt(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function qt(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function Yt(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){qt(a,r,o,i,c,"next",e)}function c(e){qt(a,r,o,i,c,"throw",e)}i(void 0)}))}}function Ht(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function Jt(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?Ht(Object(t),!0).forEach((function(n){Kt(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):Ht(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function Kt(e,n,t){return(n=function(e){var n=function(e){if("object"!=Vt(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=Vt(t))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Vt(n)?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function $t(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||Xt(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Xt(e,n){if(e){if("string"==typeof e)return Zt(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Zt(e,n):void 0}}function Zt(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var Qt=Qe.A.Option,er=xe.A.Search,nr=[{key:"active",title:"状态",required:!0},{key:"name",title:"名称",required:!0},{key:"group",title:"分组",required:!1},{key:"urlPattern",title:"URL匹配规则",required:!1},{key:"proxyType",title:"处理方式",required:!1},{key:"currentResponse",title:"当前响应",required:!1},{key:"responseDelay",title:"延迟(毫秒)",required:!1},{key:"httpStatus",title:"状态码",required:!1},{key:"contentType",title:"内容类型",required:!1},{key:"targetUrl",title:"目标URL",required:!1},{key:"customHeaders",title:"自定义头",required:!1},{key:"paramMatchers",title:"参数匹配",required:!1},{key:"httpMethod",title:"请求方法",required:!1},{key:"action",title:"操作",required:!0}];const tr=function(){var e=(0,a.g)().featureId,n=((0,a.W6)(),$t((0,r.useState)([]),2)),t=n[0],o=n[1],i=$t((0,r.useState)([]),2),c=i[0],l=i[1],s=$t((0,r.useState)(!1),2),u=(s[0],s[1]),d=$t((0,r.useState)(!1),2),p=d[0],f=d[1],m=$t((0,r.useState)(!1),2),h=m[0],b=m[1],y=$t((0,r.useState)(null),2),g=y[0],v=y[1],x=$t((0,r.useState)([]),2),w=x[0],E=x[1],k=$t((0,r.useState)(null),2),A=k[0],O=k[1],j=$t((0,r.useState)(!1),2),C=j[0],N=j[1],T=$t((0,r.useState)(!1),2),z=T[0],M=T[1],_=$t((0,r.useState)(!1),2),F=_[0],U=_[1],B=$t((0,r.useState)(!1),2),G=B[0],V=B[1],W=$t((0,r.useState)(!1),2),q=W[0],Y=W[1],H=$t((0,r.useState)(null),2),J=H[0],K=H[1],$=$t((0,r.useState)(!1),2),Q=$[0],ee=$[1],ne=$t((0,r.useState)(null),2),te=ne[0],re=ne[1],oe=$t((0,r.useState)(null),2),ae=oe[0],ie=oe[1],ce=$t((0,r.useState)(null),2),le=(ce[0],ce[1]),se=(0,r.useRef)(null),ue=$t((0,r.useState)(""),2),de=ue[0],pe=ue[1],me=$t((0,r.useState)([]),2),ye=me[0],we=me[1],ke=$t((0,r.useState)(!1),2),Ae=(ke[0],ke[1],$t((0,r.useState)("modal"),2)),Se=Ae[0],Le=Ae[1],Ie=$t((0,r.useState)("modal"),2),Oe=Ie[0],Ne=Ie[1],Te=$t((0,r.useState)(!0),2),Pe=Te[0],ze=Te[1],Me=$t((0,r.useState)(!0),2),_e=Me[0],Re=Me[1],Fe=$t(ge.A.useForm(),1)[0],De=(0,r.useState)((function(){var e=localStorage.getItem("interface-table-config"),n=nr.map((function(e){return e.key}));return e?JSON.parse(e):{sortOrder:null,sortField:null,pageSize:10,current:1,visibleColumns:n}})),Ue=$t(De,2),Be=Ue[0],Ge=Ue[1],Ve=function(e){var n=Jt(Jt({},Be),e);Ge(n),localStorage.setItem("interface-table-config",JSON.stringify(n))};(0,r.useEffect)((function(){qe()}),[]),(0,r.useEffect)((function(){g&&Ye()}),[g]),(0,r.useEffect)((function(){var e=function(){z&&rn()},n=function(){Je()},t=function(){var e;null===(e=se.current)||void 0===e||e.focus()};return window.addEventListener("shortcut-save",e),window.addEventListener("shortcut-new-interface",n),window.addEventListener("shortcut-focus-search",t),function(){window.removeEventListener("shortcut-save",e),window.removeEventListener("shortcut-new-interface",n),window.removeEventListener("shortcut-focus-search",t)}}),[z]),(0,r.useEffect)((function(){var e=localStorage.getItem("dataManagementDisplayMode");e&&Le(e);var n=function(){var e=localStorage.getItem("dataManagementDisplayMode");e&&Le(e)};return window.addEventListener("storage",n),function(){window.removeEventListener("storage",n)}}),[]),(0,r.useEffect)((function(){var e=localStorage.getItem("interfaceFormDisplayMode");e&&Ne(e);var n=function(){var e=localStorage.getItem("interfaceFormDisplayMode");e&&Ne(e)};return window.addEventListener("storage",n),function(){window.removeEventListener("storage",n)}}),[]),(0,r.useEffect)((function(){var e=function(){var e=localStorage.getItem("interfaceParamMatcherEnabled");ze(null===e||"false"!==e);var n=localStorage.getItem("responseParamMatcherEnabled");Re(null===n||"false"!==n)};return e(),window.addEventListener("storage",e),function(){return window.removeEventListener("storage",e)}}),[]);var We=t.find((function(e){return e.id===g})),qe=function(){var n=Yt(Wt().mark((function n(){var t,r,a,i,c,l,s;return Wt().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,f(!0),n.next=4,Ce.A.get("/cgi-bin/features");case 4:(t=n.sent).data&&0===t.data.code&&Array.isArray(t.data.data)?(a=t.data.data,o(a),i=localStorage.getItem("selectedFeatureId"),c=i&&a.find((function(e){return e.id===i}))?i:null,(l=e||c||(null===(r=a[0])||void 0===r?void 0:r.id))&&v(l)):(o([]),Z.Ay.warning("获取功能模块数据格式不正确")),n.next=13;break;case 8:n.prev=8,n.t0=n.catch(0),console.error("获取功能模块失败:",n.t0),Z.Ay.error((null===(s=n.t0.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.message)||"获取功能模块失败"),o([]);case 13:return n.prev=13,f(!1),n.finish(13);case 16:case"end":return n.stop()}}),n,null,[[0,8,13,16]])})));return function(){return n.apply(this,arguments)}}(),Ye=function(){var e=Yt(Wt().mark((function e(){var n,t,r;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(g){e.next=2;break}return e.abrupt("return");case 2:return e.prev=2,b(!0),e.next=6,Ce.A.get("/cgi-bin/interfaces?featureId=".concat(g));case 6:n=e.sent,console.log("获取接口列表响应:",n.data),n.data&&0===n.data.code&&Array.isArray(n.data.data)?(t=n.data.data.map((function(e){return console.log("处理接口 ".concat(e.name,":"),{hasResponses:!!e.responses,responsesLength:e.responses?e.responses.length:0,activeResponseId:e.activeResponseId}),Array.isArray(e.responses)||(e.responses=[]),e.responses=e.responses.map((function(e,n){return{id:e.id||"resp-".concat(n,"-").concat(Date.now()),name:e.name||"响应 ".concat(n+1),description:e.description||"",content:e.content||"{}",paramMatchers:Array.isArray(e.paramMatchers)?e.paramMatchers:[]}})),e})),l(t),console.log("处理后的接口列表:",t),console.log("接口分组信息:",t.map((function(e){return{id:e.id,name:e.name,group:e.group}}))),He(t)):(console.warn("接口数据格式不正确:",n.data),l([]),Z.Ay.warning("获取接口配置数据格式不正确")),e.next=16;break;case 11:e.prev=11,e.t0=e.catch(2),console.error("获取接口配置失败:",e.t0),Z.Ay.error((null===(r=e.t0.response)||void 0===r||null===(r=r.data)||void 0===r?void 0:r.message)||"获取接口配置失败"),l([]);case 16:return e.prev=16,b(!1),e.finish(16);case 19:case"end":return e.stop()}}),e,null,[[2,11,16,19]])})));return function(){return e.apply(this,arguments)}}(),He=function(e){var n=new Set;e.forEach((function(e){e.group&&n.add(e.group)}));var t=Array.from(n).sort();E(t),A&&!t.includes(A)&&O(null)},Je=function(){if(g){Fe.resetFields(),V(!1);var e=ct(),n=[{id:e,name:"默认响应",description:"",content:'{\n "code": 0,\n "message": "success",\n "data": {}\n}'}];console.log("创建新接口,初始化响应数据:",n),Fe.setFieldsValue({proxyType:"response",statusCode:"200",contentType:"application/json; charset=utf-8",responses:n,activeResponseId:e,httpMethod:"ALL",headerItems:[],paramMatchers:[],group:void 0}),le(e),re(null),M(!0)}else Z.Ay.warning("请先选择一个功能模块")},Ze=function(){var e=Yt(Wt().mark((function e(n){var t,r,o;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ce.A.delete("/cgi-bin/interfaces?id=".concat(n));case 3:if(!(t=e.sent).data||0!==t.data.code){e.next=10;break}Z.Ay.success("接口删除成功"),Ye(),at(),e.next=11;break;case 10:throw new Error((null===(r=t.data)||void 0===r?void 0:r.message)||"接口删除失败");case 11:e.next=17;break;case 13:e.prev=13,e.t0=e.catch(0),console.error("接口删除失败:",e.t0),Z.Ay.error((null===(o=e.t0.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.message)||e.t0.message||"接口删除失败");case 17:case"end":return e.stop()}}),e,null,[[0,13]])})));return function(n){return e.apply(this,arguments)}}(),en=function(){var e=Yt(Wt().mark((function e(n,t){var r,o,a;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ce.A.patch("/cgi-bin/interfaces/".concat(n),{active:!t});case 3:if(!(r=e.sent).data||0!==r.data.code){e.next=10;break}Z.Ay.success("接口".concat(t?"禁用":"启用","成功")),Ye(),at(),e.next=11;break;case 10:throw new Error((null===(o=r.data)||void 0===o?void 0:o.message)||"接口".concat(t?"禁用":"启用","失败"));case 11:e.next=17;break;case 13:e.prev=13,e.t0=e.catch(0),console.error("接口".concat(t?"禁用":"启用","失败:"),e.t0),Z.Ay.error((null===(a=e.t0.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.message)||e.t0.message||"接口".concat(t?"禁用":"启用","失败"));case 17:case"end":return e.stop()}}),e,null,[[0,13]])})));return function(n,t){return e.apply(this,arguments)}}(),rn=function(){var e=Yt(Wt().mark((function e(){var n,t,r,o,a,i,c,l,s,u,d,p;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Fe.validateFields();case 3:if(n=Fe.getFieldsValue(!0),console.log("表单提交数据:",n),t={},n.headerItems&&Array.isArray(n.headerItems)&&n.headerItems.forEach((function(e){e&&e.headerName&&(t[e.headerName]=e.headerValue)})),r=n.group,Array.isArray(r)&&(r=r.length>0?r[0]:""),o=(n.responses||(te?te.responses:[])).map((function(e){return Jt(Jt({},e),{},{paramMatchers:Array.isArray(e.paramMatchers)?e.paramMatchers.filter((function(e){return e&&e.paramPath&&e.paramValue})):[]})})),a={name:n.name||(te?te.name:""),group:r||(te?te.group:"")||"",urlPattern:n.pattern||(te?te.urlPattern:""),proxyType:n.proxyType||(te?te.proxyType:"response"),featureId:g,responses:o,activeResponseId:n.activeResponseId||(te?te.activeResponseId:null),httpStatus:parseInt(n.statusCode,10)||(te?te.httpStatus:200),contentType:n.contentType||(te?te.contentType:"application/json; charset=utf-8"),responseDelay:parseInt(n.responseDelay,10)||(te?te.responseDelay:0)||0,httpMethod:n.httpMethod||(te?te.httpMethod:"ALL"),active:!0},console.log("提交的分组值:",r),"redirect"!==n.proxyType&&"url_redirect"!==n.proxyType||(a.targetUrl=n.targetUrl,a.headers=t),i=Array.isArray(n.paramMatchers)?n.paramMatchers.filter((function(e){return e&&e.paramPath&&e.paramValue})):[],a.paramMatchers=i,console.log("提交接口数据:",a),!te){e.next=30;break}return e.next=19,Ce.A.put("/cgi-bin/interfaces?id=".concat(te.id),a);case 19:if(!(c=e.sent).data||0!==c.data.code){e.next=27;break}Z.Ay.success("接口更新成功"),M(!1),Ye(),at(),e.next=28;break;case 27:throw new Error((null===(l=c.data)||void 0===l?void 0:l.message)||"接口更新失败");case 28:e.next=43;break;case 30:return e.next=32,Ce.A.post("/cgi-bin/interfaces",a);case 32:if(!(s=e.sent).data||0!==s.data.code){e.next=42;break}Z.Ay.success("接口创建成功"),console.log("接口创建成功,返回数据:",s.data),console.log("返回的接口数据中的分组信息:",null===(u=s.data.data)||void 0===u?void 0:u.group),M(!1),Ye(),at(),e.next=43;break;case 42:throw new Error((null===(d=s.data)||void 0===d?void 0:d.message)||"接口创建失败");case 43:e.next=49;break;case 45:e.prev=45,e.t0=e.catch(0),console.error("表单提交失败:",e.t0),Z.Ay.error((null===(p=e.t0.response)||void 0===p||null===(p=p.data)||void 0===p?void 0:p.message)||e.t0.message||"操作失败");case 49:case"end":return e.stop()}}),e,null,[[0,45]])})));return function(){return e.apply(this,arguments)}}(),on=function(){M(!1),V(!1)},an=function(){var e=Fe.getFieldValue("responses")||[],n=Fe.getFieldValue("activeResponseId"),t=e.find((function(e){return e.id===n}));if(t){var r=Fe.getFieldValue("contentType")||"",o=it(t.content,r);ie({title:"预览: ".concat(t.name||"未命名响应"),content:o,description:"",contentType:r}),U(!0)}else Z.Ay.error("未找到有效的响应内容")},ln=function(){var e=Yt(Wt().mark((function e(n,t){var r,o,a;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Ce.A.patch("/cgi-bin/interfaces?id=".concat(n),{activeResponseId:t});case 3:if(0!==e.sent.data.code){e.next=10;break}return l(c.map((function(e){return e.id===n?Jt(Jt({},e),{},{activeResponseId:t}):e}))),o=null===(r=c.find((function(e){return e.id===n})))||void 0===r||null===(r=r.responses)||void 0===r?void 0:r.find((function(e){return e.id===t})),Z.Ay.success("已切换到响应: ".concat((null==o?void 0:o.name)||"未命名")),e.next=10,at();case 10:e.next=16;break;case 12:e.prev=12,e.t0=e.catch(0),console.error("切换响应失败:",e.t0),Z.Ay.error("切换响应失败: "+((null===(a=e.t0.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.message)||e.t0.message));case 16:case"end":return e.stop()}}),e,null,[[0,12]])})));return function(n,t){return e.apply(this,arguments)}}(),sn=function(){var e=c.filter((function(e){return!g||e.featureId===g}));if(A&&(e=e.filter((function(e){return e.group===A}))),de){var n=de.toLowerCase();return e.filter((function(e){return e.name&&e.name.toLowerCase().includes(n)||e.urlPattern&&e.urlPattern.toLowerCase().includes(n)}))}return e}(),un=function(){var e=Yt(Wt().mark((function e(n){var t,r;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(ye&&0!==ye.length){e.next=3;break}return Z.Ay.warning("请先选择要操作的接口"),e.abrupt("return");case 3:return e.prev=3,u(!0),t=ye.map((function(e){return Ce.A.patch("/cgi-bin/interfaces/".concat(e),{active:n})})),e.next=8,Promise.all(t);case 8:Z.Ay.success("已".concat(n?"启用":"禁用"," ").concat(ye.length," 个接口")),we([]),Ye(),at(),e.next=18;break;case 14:e.prev=14,e.t0=e.catch(3),console.error("批量操作失败:",e.t0),Z.Ay.error("批量操作失败: "+((null===(r=e.t0.response)||void 0===r||null===(r=r.data)||void 0===r?void 0:r.message)||e.t0.message));case 18:return e.prev=18,u(!1),e.finish(18);case 21:case"end":return e.stop()}}),e,null,[[3,14,18,21]])})));return function(n){return e.apply(this,arguments)}}(),dn=[{title:"状态",dataIndex:"active",key:"active",width:80,render:function(e,n){return r.createElement(Xe.A,{checked:!1!==e,onChange:function(t){return en(n.id,!1!==e)},size:"small"})}},{title:"名称",dataIndex:"name",key:"name",sorter:function(e,n){return e.name.localeCompare(n.name)},render:function(e){return r.createElement("span",{className:"interface-name"},e)}},{title:"分组",dataIndex:"group",key:"group",width:120,sorter:function(e,n){var t=e.group||"",r=n.group||"";return t.localeCompare(r)},render:function(e){return e?r.createElement(ve.A,{color:"blue",style:{cursor:"pointer"},onClick:function(){return O(e)}},e):r.createElement("span",{style:{color:"#999",fontStyle:"italic"}},"未分组")}},{title:"URL匹配规则",dataIndex:"urlPattern",key:"urlPattern",ellipsis:!0,render:function(e){return r.createElement("span",{className:"url-pattern"},e)}},{title:"处理方式",dataIndex:"proxyType",key:"proxyType",width:120,render:function(e){var n=xt.find((function(n){return n.value===e}));return r.createElement(Ke.A,{color:(null==n?void 0:n.color)||"#999",text:(null==n?void 0:n.label)||e})}},{title:"当前响应",dataIndex:"activeResponseId",key:"currentResponse",width:200,render:function(e,n){var t;return n.responses&&Array.isArray(n.responses)&&0!==n.responses.length?r.createElement(Qe.A,{value:e||(null===(t=n.responses[0])||void 0===t?void 0:t.id),style:{width:"100%"},onChange:function(e){return ln(n.id,e)},disabled:"response"!==n.proxyType},n.responses.map((function(e){return r.createElement(Qt,{key:e.id,value:e.id},e.name)}))):r.createElement("span",{className:"no-response"},"无响应数据")}},{title:"延迟(毫秒)",dataIndex:"responseDelay",key:"responseDelay",width:100,sorter:function(e,n){return(e.responseDelay||0)-(n.responseDelay||0)},render:function(e){var n=parseInt(e,10)||0;return r.createElement("span",{className:n>0?"delay-active":"delay-inactive"},n>0?n:"无延迟")}},{title:"状态码",dataIndex:"httpStatus",key:"httpStatus",width:100,render:function(e){var n=e||200,t="status-success";return n>=400?t="status-error":n>=300&&(t="status-warning"),r.createElement("span",{className:t},n)}},{title:"内容类型",dataIndex:"contentType",key:"contentType",width:120,sorter:function(e,n){var t=e.contentType||"",r=n.contentType||"";return t.localeCompare(r)},sortDirections:["ascend","descend"],render:function(e,n){if("response"!==n.proxyType)return"-";var t=vt.find((function(n){return n.value===e}));return t?t.label:e}},{title:"目标URL",dataIndex:"targetUrl",key:"targetUrl",ellipsis:!0,sorter:function(e,n){var t=e.targetUrl||"",r=n.targetUrl||"";return t.localeCompare(r)},sortDirections:["ascend","descend"],render:function(e,n){return"redirect"===n.proxyType||"url_redirect"===n.proxyType?e:"-"}},{title:"自定义头",dataIndex:"customHeaders",key:"customHeaders",width:100,sorter:function(e,n){return Object.keys(e.customHeaders||{}).length-Object.keys(n.customHeaders||{}).length},sortDirections:["ascend","descend"],render:function(e,n){if("redirect"!==n.proxyType&&"url_redirect"!==n.proxyType)return"-";var t=n.customHeaders||{},o=Object.keys(t).length;if(0===o)return"-";var a=Object.values(t).some((function(e){return e&&e.startsWith("@")}));return r.createElement($e.A,{title:r.createElement("div",null,Object.entries(t).map((function(e){var n=$t(e,2),t=n[0],o=n[1];return r.createElement("div",{key:t},t,": ",o,o&&o.startsWith("@")&&r.createElement("span",{style:{color:"#52c41a"}}," (随机)"))})))},r.createElement("span",{style:{color:"#1677ff"}},o,"个",a&&r.createElement("span",{style:{marginLeft:4}},"🎲")))}},{title:"参数匹配",dataIndex:"paramMatchers",key:"paramMatchers",width:120,render:function(e,n){if("response"!==n.proxyType)return"-";var t=Pe,o=_e,a=n.paramMatchers||[],i=t?a.filter((function(e){return e.paramPath})).length:0,c=o?(n.responses||[]).filter((function(e){return Array.isArray(e.paramMatchers)&&e.paramMatchers.filter((function(e){return e.paramPath})).length>0})):[],l=c.reduce((function(e,n){return e+n.paramMatchers.filter((function(e){return e.paramPath})).length}),0);if(0===i&&0===l)return"-";var s=r.createElement("div",{style:{maxWidth:280}},i>0&&r.createElement("div",{style:{marginBottom:c.length>0?8:0}},r.createElement("div",{style:{fontWeight:"bold",marginBottom:4,color:"#faad14"}},"接口级条件(",i,"条)"),a.filter((function(e){return e.paramPath})).map((function(e,n){return r.createElement("div",{key:n,style:{fontSize:"12px"}},e.paramPath,": ",e.paramValue,r.createElement("span",{style:{color:"#52c41a",marginLeft:4}},"(","exact"===e.matchType?"精确":"contains"===e.matchType?"包含":"正则",")"))}))),c.length>0&&r.createElement("div",null,r.createElement("div",{style:{fontWeight:"bold",marginBottom:4,color:"#1677ff"}},"响应级规则(共",l,"条)"),c.map((function(e,n){return r.createElement("div",{key:n,style:{marginBottom:4}},r.createElement("div",{style:{fontSize:"12px",color:"#aaa",marginBottom:2}},e.name,":"),e.paramMatchers.filter((function(e){return e.paramPath})).map((function(e,n){return r.createElement("div",{key:n,style:{fontSize:"12px",paddingLeft:8}},e.paramPath,": ",e.paramValue,r.createElement("span",{style:{color:"#52c41a",marginLeft:4}},"(","exact"===e.matchType?"精确":"contains"===e.matchType?"包含":"正则",")"))})))}))));return r.createElement($e.A,{title:s},r.createElement(L.A,{size:4,direction:"vertical",style:{lineHeight:1.4}},i>0&&r.createElement(ve.A,{color:"orange",style:{fontSize:"11px",padding:"0 4px"}},"接口:",i,"条"),l>0&&r.createElement(ve.A,{color:"blue",style:{fontSize:"11px",padding:"0 4px"}},"响应:",l,"条")))}},{title:"请求方法",dataIndex:"httpMethod",key:"httpMethod",width:120,sorter:function(e,n){var t=e.httpMethod||"",r=n.httpMethod||"";return t.localeCompare(r)},sortDirections:["ascend","descend"],render:function(e){var n=Et.find((function(n){return n.value===e}));return n?n.label:e}},{title:"操作",key:"action",width:220,render:function(e,n){return r.createElement("div",{className:"action-buttons"},r.createElement(S.Ay,{type:"text",icon:r.createElement(nn.A,null),onClick:function(){return function(e){if(e){console.log("编辑接口:",e),Fe.resetFields(),V(!1);var n=[],t="";if(e.responses&&Array.isArray(e.responses)&&e.responses.length>0)n=e.responses,t=e.activeResponseId||n[0].id;else if(e.responseContent){var r=ct();n=[{id:r,name:"默认响应",description:"",content:e.responseContent}],t=r}var o=[];e.headers&&"object"===Vt(e.headers)&&(o=Object.entries(e.headers).map((function(e){var n=$t(e,2);return{headerName:n[0],headerValue:n[1]}})));var a=e.group;Array.isArray(a)&&(a=a.length>0?a[0]:void 0),Fe.setFieldsValue({name:e.name,group:a||void 0,pattern:e.urlPattern,proxyType:e.proxyType||"response",statusCode:(e.httpStatus||e.statusCode||200).toString(),contentType:e.contentType||"application/json; charset=utf-8",responses:n,activeResponseId:t,httpMethod:e.httpMethod||e.method||"ALL",targetUrl:e.targetUrl||"",headerItems:o,paramMatchers:e.paramMatchers||[],responseDelay:e.responseDelay?e.responseDelay.toString():"0"}),console.log("编辑接口时设置的分组值:",a),le(t),re(e),M(!0)}else Z.Ay.warning("接口数据不完整,无法编辑")}(n)}}),"response"===n.proxyType&&r.createElement($e.A,{title:"数据管理"},r.createElement(S.Ay,{type:"text",icon:r.createElement(zn.A,null),onClick:function(){K(n),Y(!0)}})),r.createElement($e.A,{title:"复制新增"},r.createElement(S.Ay,{type:"text",icon:r.createElement(Mn.A,null),onClick:function(){return function(e){if(g)if(e){Fe.resetFields();var n=JSON.parse(JSON.stringify(e)),t=[],r="";if(Array.isArray(n.responses)&&n.responses.length>0){var o,a=new Map;t=n.responses.map((function(e){var n=ct();return a.set(e.id,n),{id:n,name:e.name||"未命名响应",description:e.description||"",content:e.content||"{}",paramMatchers:Array.isArray(e.paramMatchers)?e.paramMatchers.map((function(e){return Jt({},e)})):[]}})),r=a.get(n.activeResponseId)||(null===(o=t[0])||void 0===o?void 0:o.id)||""}else if(n.responseContent){var i=ct();t=[{id:i,name:"默认响应",description:"",content:n.responseContent}],r=i}var c=[];n.headers&&"object"===Vt(n.headers)&&(c=Object.entries(n.headers).map((function(e){var n=$t(e,2);return{headerName:n[0],headerValue:n[1]}})));var l=n.group;Array.isArray(l)&&(l=l.length>0?l[0]:void 0),Fe.setFieldsValue({name:"".concat(n.name||"未命名接口"," - 副本"),group:l||void 0,pattern:n.urlPattern,proxyType:n.proxyType||"response",statusCode:(n.httpStatus||n.statusCode||200).toString(),contentType:n.contentType||"application/json; charset=utf-8",responses:t,activeResponseId:r,httpMethod:n.httpMethod||n.method||"ALL",targetUrl:n.targetUrl||"",headerItems:c,paramMatchers:Array.isArray(n.paramMatchers)?n.paramMatchers:[],responseDelay:n.responseDelay?String(n.responseDelay):"0"}),le(r||null),re(null),V(!0),M(!0)}else Z.Ay.warning("接口数据不完整,无法复制");else Z.Ay.warning("请先选择一个功能模块")}(n)}})),r.createElement(Ee.A,{title:"确定要删除此接口吗?",onConfirm:function(){return Ze(n.id)},okText:"确定",cancelText:"取消"},r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null)})))}}],pn=Be.visibleColumns||nr.map((function(e){return e.key})),fn=dn.filter((function(e){return pn.includes(e.key)})),mn=function(){var e=Yt(Wt().mark((function e(n){var t,r,o;return Wt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,N(!0),e.next=4,Ce.A.patch("/cgi-bin/interfaces?active=".concat(n),{featureId:g,group:A});case 4:if(!(t=e.sent).data||0!==t.data.code){e.next=10;break}Z.Ay.success('分组 "'.concat(A,'" 中的接口已成功').concat(n?"启用":"禁用")),Ye(),e.next=11;break;case 10:throw new Error((null===(r=t.data)||void 0===r?void 0:r.message)||"批量操作失败");case 11:e.next=17;break;case 13:e.prev=13,e.t0=e.catch(0),console.error("批量操作失败:",e.t0),Z.Ay.error((null===(o=e.t0.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.message)||e.t0.message||"批量操作失败");case 17:return e.prev=17,N(!1),e.finish(17);case 20:case"end":return e.stop()}}),e,null,[[0,13,17,20]])})));return function(n){return e.apply(this,arguments)}}();return r.createElement(fe,null,r.createElement("div",{className:"interface-management-container"},!t.length&&r.createElement(D.A,{message:"未找到功能模块",description:"请先在模拟数据页面创建功能模块,然后再添加接口",type:"warning",showIcon:!0,style:{marginBottom:16}}),!1===(null==We?void 0:We.active)&&r.createElement(D.A,{message:"功能模块已禁用",description:"当前功能模块已被禁用,所有关联接口不会生效。您可以在模拟数据页面启用此功能模块。",type:"warning",showIcon:!0,style:{marginBottom:16}}),r.createElement(he.A,{className:"interface-control-panel"},r.createElement("div",{className:"control-panel-header"},r.createElement("div",{className:"control-left"},r.createElement("div",{className:"feature-selector"},r.createElement("span",null,"功能模块:"),r.createElement(Qe.A,{value:g,onChange:function(e){v(e),localStorage.setItem("selectedFeatureId",e),Ve({current:1})},style:{width:200},placeholder:"选择功能模块",loading:p,dropdownMatchSelectWidth:!1},(t||[]).map((function(e){return r.createElement(Qt,{key:e.id,value:e.id},e.name,!1===e.active&&r.createElement("span",{style:{color:"#ff4d4f",marginLeft:8}},"(已禁用)"))})))),r.createElement(er,{ref:se,placeholder:"搜索接口名称或URL",onSearch:function(e){pe(e)},value:de,onChange:function(e){return pe(e.target.value)},style:{width:220,marginLeft:12},enterButton:r.createElement(_n.A,null),allowClear:!0}),r.createElement(Cn.A,{overlay:r.createElement(I.A,{selectedKeys:A?[A]:["ALL_GROUPS"],onClick:function(e){var n=e.key;O("ALL_GROUPS"===n||n===A?null:n)}},r.createElement(I.A.Item,{key:"ALL_GROUPS"},"全部分组"),w.map((function(e){return r.createElement(I.A.Item,{key:e},e," (",c.filter((function(n){return n.group===e})).length,")")}))),trigger:["click"],disabled:0===w.length},r.createElement(S.Ay,{style:{marginLeft:12},icon:r.createElement(Rn.A,null)},A?"分组: ".concat(A):"分组筛选",r.createElement(Fn.A,null)))),r.createElement("div",{className:"control-right"},r.createElement(L.A,null,r.createElement($e.A,{title:"刷新数据"},r.createElement(S.Ay,{icon:r.createElement(je.A,null),onClick:function(){Ye(),Z.Ay.success("数据已刷新")},loading:h})),r.createElement(S.Ay,{type:"primary",icon:r.createElement(cn.A,null),onClick:Je,disabled:!g||!1===(null==We?void 0:We.active)},"添加接口")))),r.createElement("div",{className:"control-panel-stats"},r.createElement("div",{className:"stats-left"},r.createElement(L.A,{size:"large"},A&&r.createElement("span",{className:"stat-item"},r.createElement("span",{className:"stat-label"},"当前分组:"),r.createElement(ve.A,{color:"blue"},A)),r.createElement("span",{className:"stat-item"},de?r.createElement(Ke.A,{count:'搜索"'.concat(de,'" - ').concat(sn.length,"个结果"),style:{backgroundColor:"#108ee9"}}):r.createElement(Ke.A,{count:"共 ".concat(sn.length," 个接口"),style:{backgroundColor:"#52c41a"}})))),r.createElement("div",{className:"stats-right"},ye.length>0&&r.createElement(L.A,null,r.createElement("span",{className:"selected-count"},"已选择 ",ye.length," 项"),r.createElement(Ee.A,{title:"确定要批量启用选中的接口吗?",onConfirm:function(){return un(!0)},okText:"确定",cancelText:"取消"},r.createElement(S.Ay,{size:"small",type:"primary"},"批量启用")),r.createElement(Ee.A,{title:"确定要批量禁用选中的接口吗?",onConfirm:function(){return un(!1)},okText:"确定",cancelText:"取消"},r.createElement(S.Ay,{size:"small",danger:!0},"批量禁用"))),A&&r.createElement(L.A,{style:{marginLeft:ye.length>0?16:0}},r.createElement(Ee.A,{title:'确定要启用分组 "'.concat(A,'" 中的所有接口吗?'),onConfirm:function(){return mn(!0)},okText:"确定",cancelText:"取消"},r.createElement(S.Ay,{type:"primary",size:"small",loading:C},"分组启用")),r.createElement(Ee.A,{title:'确定要禁用分组 "'.concat(A,'" 中的所有接口吗?'),onConfirm:function(){return mn(!1)},okText:"确定",cancelText:"取消"},r.createElement(S.Ay,{danger:!0,size:"small",loading:C},"分组禁用"))),r.createElement(Nn.A,{title:"自定义显示列",trigger:"click",open:Q,onOpenChange:function(e){ee(e)},content:r.createElement("div",{style:{width:280}},r.createElement("div",{style:{marginBottom:12}},r.createElement(L.A,null,r.createElement(S.Ay,{size:"small",onClick:function(){var e=nr.map((function(e){return e.key}));Ve({visibleColumns:e})}},"全选"),r.createElement(S.Ay,{size:"small",onClick:function(){var e=nr.map((function(e){return e.key}));Ve({visibleColumns:e})}},"重置"))),r.createElement(be.A.Group,{value:Be.visibleColumns||nr.map((function(e){return e.key})),onChange:function(e){var n=nr.filter((function(e){return e.required})).map((function(e){return e.key})),t=Gt(new Set([].concat(Gt(n),Gt(e))));Ve({visibleColumns:t})},style:{width:"100%"}},r.createElement("div",{style:{display:"flex",flexDirection:"column",gap:"8px"}},nr.map((function(e){return r.createElement(be.A,{key:e.key,value:e.key,disabled:e.required,style:{width:"100%",color:e.required?"#999":void 0}},e.title,e.required&&r.createElement("span",{style:{color:"#999",fontSize:"12px",marginLeft:4}},"(必须)"))})))))},r.createElement($e.A,{title:"自定义表格显示列"},r.createElement(S.Ay,{icon:r.createElement(P.A,null),type:"text",size:"small",className:"inline-column-settings-btn",style:{marginLeft:ye.length>0||A?16:0}},"列设置")))))),r.createElement(he.A,{className:"list-container-card",bordered:!1,bodyStyle:{padding:0}},r.createElement("div",{className:"interface-list-container"},r.createElement(X.A,{columns:fn,dataSource:sn,rowKey:"id",loading:h,onChange:function(e,n,t){console.log("表格变化:",{pagination:e,filters:n,sorter:t});var r={sortField:t.field||null,sortOrder:t.order||null,current:e.current,pageSize:e.pageSize};Ve(r)},rowSelection:{selectedRowKeys:ye,onChange:function(e){we(e)}},size:"middle",pagination:{current:Be.current,pageSize:Be.pageSize,showSizeChanger:!0,showQuickJumper:!0,showTotal:function(e,n){return"共 ".concat(e," 个接口,显示第 ").concat(n[0],"-").concat(n[1]," 个")},pageSizeOptions:["10","20","50","100"],size:"default"},locale:{emptyText:"暂无接口配置"},sortDirections:["ascend","descend"],className:"interface-table"}))),"drawer"===Oe?r.createElement(Tn.A,{title:r.createElement("div",{style:{fontSize:"18px",fontWeight:600,color:"#262626",display:"flex",alignItems:"center",gap:"8px"}},r.createElement("span",null,te?"编辑接口":G?"复制新增接口":"添加接口"),r.createElement(Ke.A,{count:"配置向导",style:{backgroundColor:"#f0f9ff",color:"#1677ff",fontSize:"11px",fontWeight:"normal"}})),placement:"right",width:1040,open:z,onClose:on,destroyOnClose:!0,bodyStyle:{padding:"0",overflowY:"auto"},footer:r.createElement("div",{style:{textAlign:"right"}},r.createElement(L.A,null,r.createElement(S.Ay,{onClick:on},"取消"),r.createElement(S.Ay,{type:"primary",onClick:rn},te?"保存":"创建"))),className:"interface-drawer"},r.createElement("div",{style:{padding:"24px"}},r.createElement(ge.A,{form:Fe,layout:"vertical",initialValues:{name:"",group:"",pattern:"",proxyType:"response",statusCode:"200",contentType:"application/json; charset=utf-8",responses:[],httpMethod:"ALL",targetUrl:"",headerItems:[],paramMatchers:[],responseDelay:"0"}},r.createElement(Pn.A,{defaultActiveKey:te&&"response"===te.proxyType?["3"]:["1","2","3"],style:{marginBottom:"16px"},ghost:!0},r.createElement(Pn.A.Panel,{header:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Ke.A,{count:"1",style:{backgroundColor:"#1677ff"}}),r.createElement("span",null,"基础信息")),key:"1"},r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"name",label:"接口名称",rules:[{required:!0,message:"请输入接口名称"}]},r.createElement(xe.A,{placeholder:"请输入接口名称"}))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"group",label:"分组",tooltip:"为接口设置分组,便于管理和批量操作"},r.createElement(Qe.A,{placeholder:"选择或创建分组",showSearch:!0,allowClear:!0,style:{width:"100%"},mode:"tags",maxTagCount:"responsive",maxTagTextLength:10,onChange:function(e){if(Array.isArray(e)&&e.length>0){var n=""===e[0]?void 0:e[0];Fe.setFieldsValue({group:n})}},onInputKeyDown:function(e){"Enter"===e.key&&e.stopPropagation()}},Array.from(new Set(c.map((function(e){return e.group})).filter(Boolean))).map((function(e){return r.createElement(Qt,{key:e,value:e},e)}))))))),r.createElement(Pn.A.Panel,{header:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Ke.A,{count:"2",style:{backgroundColor:"#1677ff"}}),r.createElement("span",null,"URL配置")),key:"2"},r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"pattern",label:"URL匹配规则",rules:[{required:!0,message:"请输入URL匹配规则"},function(e){var n=e.getFieldValue;return{validator:function(e,t){var r=n("proxyType");if(!t)return Promise.resolve();if("url_redirect"===r)try{return new URL(t),Promise.resolve()}catch(e){return Promise.reject(new Error("URL重定向模式下,URL匹配规则必须是完整的URL"))}return"redirect"===r?t.startsWith("http://")||t.startsWith("https://")?Promise.resolve():Promise.reject(new Error("重定向模式下,URL匹配规则必须以http://或https://开头")):Promise.resolve()}}}]},r.createElement(xe.A,{placeholder:"根据选择的处理方式输入相应格式的URL"}))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"proxyType",label:"处理方式",rules:[{required:!0,message:"请选择处理方式"}]},r.createElement(Qe.A,{onChange:function(){return Fe.setFieldsValue({pattern:""})}},xt.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)})))))),r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"httpMethod",label:"请求方法",rules:[{required:!0,message:"请选择请求方法"}]},r.createElement(Qe.A,null,Et.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)}))))),r.createElement("div",{style:{flex:1}}))),r.createElement(Pn.A.Panel,{header:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Ke.A,{count:"3",style:{backgroundColor:"#1677ff"}}),r.createElement("span",null,"高级配置")),key:"3"},r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:function(e,n){return e.proxyType!==n.proxyType}},(function(e){var n=e.getFieldValue,t=(e.setFieldsValue,n("proxyType"));return"response"===t?r.createElement(r.Fragment,null,r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"statusCode",label:"状态码",rules:[{required:!0,message:"请选择状态码"}]},r.createElement(Qe.A,null,wt.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)}))))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"contentType",label:"内容类型",rules:[{required:!0,message:"请选择内容类型"}]},r.createElement(Qe.A,null,vt.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)}))))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"responseDelay",label:"延迟响应(毫秒)",rules:[{pattern:/^\d*$/,message:"请输入有效的数字"}]},r.createElement(xe.A,{placeholder:"例如:500"})))),Pe&&r.createElement(ge.A.Item,{label:"接口匹配条件",tooltip:"接口级入参匹配:用于区分同一URL下的不同接口定义。可为每条规则指定响应内容,匹配时直接返回该响应;不指定则走响应级匹配逻辑。"},r.createElement(ge.A.List,{name:"paramMatchers"},(function(e,n){var t=n.add,o=n.remove;return r.createElement(r.Fragment,null,e.map((function(e){var n=e.key,t=e.name,a=Bt(e,_t);return r.createElement("div",{key:n,style:{display:"flex",gap:"8px",alignItems:"center",marginBottom:"8px"}},r.createElement(ge.A.Item,Ut({},a,{name:[t,"paramPath"],rules:[{required:!0,message:"请输入参数路径"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"参数路径(如:userId 或 data.user.id)"})),r.createElement(ge.A.Item,Ut({},a,{name:[t,"paramValue"],rules:[{required:!0,message:"请输入期望值"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"期望值(如:123 或 admin)"})),r.createElement(ge.A.Item,Ut({},a,{name:[t,"matchType"],style:{width:90,margin:0},initialValue:"exact"}),r.createElement(Qe.A,null,r.createElement(Qt,{value:"exact"},"精确匹配"),r.createElement(Qt,{value:"contains"},"包含"),r.createElement(Qt,{value:"regex"},"正则"))),r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:!0},(function(e){var n=(0,e.getFieldValue)("responses")||[];return r.createElement(ge.A.Item,Ut({},a,{name:[t,"targetResponseId"],style:{width:130,margin:0}}),r.createElement(Qe.A,{allowClear:!0,placeholder:"指定响应(可选)"},n.filter((function(e){return e&&e.id})).map((function(e){return r.createElement(Qt,{key:e.id,value:e.id},e.name||"未命名")}))))})),r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null),onClick:function(){return o(t)}}))})),r.createElement(S.Ay,{type:"dashed",onClick:function(){return t()},icon:r.createElement(cn.A,null),style:{width:"100%"}},"添加参数匹配规则"))}))),r.createElement(ge.A.Item,{name:"responses",initialValue:[],hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{name:"activeResponseId",hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:!0},(function(e){var n=e.getFieldValue,t=n("responses")||[],o=n("activeResponseId");if(!Array.isArray(t))try{t=JSON.parse(t)}catch(e){t=[]}return r.createElement(gt,{form:Fe,responses:t,activeResponseId:o,onPreview:an})}))):"redirect"===t||"url_redirect"===t?r.createElement(r.Fragment,null,r.createElement(ge.A.Item,{name:"targetUrl",label:"重定向目标URL",rules:[{required:!0,message:"请输入重定向目标URL"},{validator:function(e,n){if(!n)return Promise.resolve();try{return new URL(n),Promise.resolve()}catch(e){return Promise.reject(new Error("请输入有效的URL格式"))}}}],tooltip:"重定向的目标URL,必须是完整的URL格式"},r.createElement(xe.A,{placeholder:"例如:https://api.example.com/users"})),r.createElement(ge.A.Item,{label:"自定义请求头"},r.createElement(ge.A.List,{name:"headerItems"},(function(e,n){var t=n.add,o=n.remove;return r.createElement(r.Fragment,null,e.map((function(e){var n=e.key,t=e.name,a=Bt(e,Rt);return r.createElement("div",{key:n,style:{display:"flex",gap:"8px",alignItems:"center",marginBottom:"8px"}},r.createElement(ge.A.Item,Ut({},a,{name:[t,"headerName"],rules:[{required:!0,message:"请输入请求头名称"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"请求头名称(如:Authorization)"})),r.createElement(ge.A.Item,Ut({},a,{name:[t,"headerValue"],rules:[{required:!0,message:"请输入请求头值"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"请求头值(如:Bearer token123)"})),r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null),onClick:function(){return o(t)}}))})),r.createElement(S.Ay,{type:"dashed",onClick:function(){return t()},icon:r.createElement(cn.A,null),style:{width:"100%",marginTop:"8px"}},"添加请求头"))})))):null}))))))):r.createElement(R.A,{title:r.createElement("div",{style:{fontSize:"18px",fontWeight:600,color:"#262626",display:"flex",alignItems:"center",gap:"8px"}},r.createElement("span",null,te?"编辑接口":G?"复制新增接口":"添加接口"),r.createElement(Ke.A,{count:"配置向导",style:{backgroundColor:"#f0f9ff",color:"#1677ff",fontSize:"11px",fontWeight:"normal"}})),open:z,onOk:rn,onCancel:on,width:1200,destroyOnClose:!0,okText:te?"保存":"创建",cancelText:"取消",bodyStyle:{maxHeight:"75vh",overflow:"auto",padding:"0"},className:"interface-modal"},r.createElement("div",{style:{padding:"24px"}},r.createElement(ge.A,{form:Fe,layout:"vertical",initialValues:{name:"",group:"",pattern:"",proxyType:"response",statusCode:"200",contentType:"application/json; charset=utf-8",responses:[],httpMethod:"ALL",targetUrl:"",headerItems:[],paramMatchers:[],responseDelay:"0"}},r.createElement(Pn.A,{defaultActiveKey:te&&"response"===te.proxyType?["3"]:["1","2","3"],style:{marginBottom:"16px"},ghost:!0},r.createElement(Pn.A.Panel,{header:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Ke.A,{count:"1",style:{backgroundColor:"#1677ff"}}),r.createElement("span",null,"基础信息")),key:"1"},r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"name",label:"接口名称",rules:[{required:!0,message:"请输入接口名称"}]},r.createElement(xe.A,{placeholder:"请输入接口名称"}))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"group",label:"分组",tooltip:"为接口设置分组,便于管理和批量操作"},r.createElement(Qe.A,{placeholder:"选择或创建分组",showSearch:!0,allowClear:!0,style:{width:"100%"},mode:"tags",maxTagCount:"responsive",maxTagTextLength:10,onChange:function(e){if(Array.isArray(e)&&e.length>0){var n=""===e[0]?void 0:e[0];Fe.setFieldsValue({group:n})}},onInputKeyDown:function(e){"Enter"===e.key&&e.stopPropagation()}},Array.from(new Set(c.map((function(e){return e.group})).filter(Boolean))).map((function(e){return r.createElement(Qt,{key:e,value:e},e)}))))))),r.createElement(Pn.A.Panel,{header:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Ke.A,{count:"2",style:{backgroundColor:"#1677ff"}}),r.createElement("span",null,"URL配置")),key:"2"},r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"pattern",label:"URL匹配规则",rules:[{required:!0,message:"请输入URL匹配规则"},function(e){var n=e.getFieldValue;return{validator:function(e,t){var r=n("proxyType");if(!t)return Promise.resolve();if("url_redirect"===r)try{return new URL(t),Promise.resolve()}catch(e){return Promise.reject(new Error("URL重定向模式下,URL匹配规则必须是完整的URL(包括http://或https://)"))}if("redirect"===r)return t.startsWith("http://")||t.startsWith("https://")?Promise.resolve():Promise.reject(new Error("重定向模式下,URL匹配规则必须以http://或https://开头"));if("response"===r){if(t.startsWith("/")&&t.endsWith("/"))try{return new RegExp(t.slice(1,-1)),Promise.resolve()}catch(e){return Promise.reject(new Error("无效的正则表达式格式"))}return t.includes("*")?/^[a-zA-Z0-9\-_/.*]+$/.test(t)?Promise.resolve():Promise.reject(new Error("通配符URL格式不正确")):/^[a-zA-Z0-9\-_/]+$/.test(t)?Promise.resolve():Promise.reject(new Error("URL路径格式不正确"))}return Promise.resolve()}}}],tooltip:{title:r.createElement(r.Fragment,null,r.createElement("div",null,"不同处理方式下URL匹配规则要求:"),r.createElement("ul",{style:{margin:"5px 0 0 15px",padding:0}},r.createElement("li",null,r.createElement("b",null,"模拟响应:")," 支持路径格式如 /api/users,通配符如 /api/*,正则如 /\\/api\\/\\d+/"),r.createElement("li",null,r.createElement("b",null,"重定向:")," 必须以http://或https://开头,例如:https://example.com/api"),r.createElement("li",null,r.createElement("b",null,"URL重定向:")," 必须是完整URL,包括http://或https://,例如:https://example.com/api/users"))),overlayStyle:{maxWidth:"450px"}}},r.createElement(xe.A,{placeholder:"根据选择的处理方式输入相应格式的URL"}))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"proxyType",label:"处理方式",rules:[{required:!0,message:"请选择处理方式"}],tooltip:{title:r.createElement(r.Fragment,null,r.createElement("div",null,"不同处理方式的规则说明:"),r.createElement("ul",{style:{margin:"5px 0 0 15px",padding:0}},r.createElement("li",null,r.createElement("b",null,"模拟响应:")," 返回您定义的响应内容"),r.createElement("li",null,r.createElement("b",null,"重定向:")," 将请求重定向到其他URL,URL匹配规则必须以http://或https://开头"),r.createElement("li",null,r.createElement("b",null,"URL重定向:")," 完全匹配URL时重定向,URL匹配规则必须是完整URL"))),overlayStyle:{maxWidth:"450px"}}},r.createElement(Qe.A,{onChange:function(e){Fe.setFieldsValue({pattern:""});var n=document.querySelector('input[placeholder="根据选择的处理方式输入相应格式的URL"]');n&&("response"===e?n.placeholder="例如:/api/users,/api/users/*,/api\\/users\\/\\d+/":"redirect"===e?n.placeholder="例如:https://example.com/api":"url_redirect"===e&&(n.placeholder="例如:https://example.com/api/users"))}},xt.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)})))))),r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"httpMethod",label:"请求方法",rules:[{required:!0,message:"请选择请求方法"}]},r.createElement(Qe.A,null,Et.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)}))))),r.createElement("div",{style:{flex:1}}))),r.createElement(Pn.A.Panel,{header:r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px"}},r.createElement(Ke.A,{count:"3",style:{backgroundColor:"#1677ff"}}),r.createElement("span",null,"高级配置")),key:"3"},r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:function(e,n){return e.proxyType!==n.proxyType}},(function(e){var n=e.getFieldValue,t=(e.setFieldsValue,n("proxyType"));return"response"===t?r.createElement(r.Fragment,null,r.createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"statusCode",label:"状态码",rules:[{required:!0,message:"请选择状态码"}]},r.createElement(Qe.A,null,wt.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)}))))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"contentType",label:"内容类型",rules:[{required:!0,message:"请选择内容类型"}]},r.createElement(Qe.A,null,vt.map((function(e){return r.createElement(Qt,{key:e.value,value:e.value},e.label)}))))),r.createElement("div",{style:{flex:1}},r.createElement(ge.A.Item,{name:"responseDelay",label:"延迟响应(毫秒)",tooltip:"设置接口响应延迟时间,单位为毫秒",rules:[{pattern:/^\d*$/,message:"请输入有效的数字"},{validator:function(e,n){return!n||parseInt(n,10)<=6e4?Promise.resolve():Promise.reject(new Error("延迟时间不能超过60秒(60000毫秒)"))}}]},r.createElement(xe.A,{placeholder:"例如:500"})))),Pe&&r.createElement(ge.A.Item,{label:"接口匹配条件",tooltip:"接口级入参匹配:用于区分同一URL下的不同接口定义。可为每条规则指定响应内容,匹配时直接返回该响应;不指定则走响应级匹配逻辑。支持嵌套属性路径,如:a.b.c"},r.createElement(ge.A.List,{name:"paramMatchers"},(function(e,n){var t=n.add,o=n.remove;return r.createElement(r.Fragment,null,e.map((function(e){var n=e.key,t=e.name,a=Bt(e,Ft);return r.createElement("div",{key:n,style:{display:"flex",gap:"8px",alignItems:"center",marginBottom:"8px"}},r.createElement(ge.A.Item,Ut({},a,{name:[t,"paramPath"],rules:[{required:!0,message:"请输入参数路径"},{pattern:/^[a-zA-Z_$][a-zA-Z0-9_$.]*$/,message:"请输入有效的参数路径,如:userId 或 data.user.id"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"参数路径(如:userId 或 data.user.id)"})),r.createElement(ge.A.Item,Ut({},a,{name:[t,"paramValue"],rules:[{required:!0,message:"请输入期望值"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"期望值(如:123 或 admin)"})),r.createElement(ge.A.Item,Ut({},a,{name:[t,"matchType"],style:{width:100,margin:0},initialValue:"exact"}),r.createElement(Qe.A,{placeholder:"匹配类型"},r.createElement(Qt,{value:"exact"},"精确匹配"),r.createElement(Qt,{value:"contains"},"包含"),r.createElement(Qt,{value:"regex"},"正则"))),r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:!0},(function(e){var n=(0,e.getFieldValue)("responses")||[];return r.createElement(ge.A.Item,Ut({},a,{name:[t,"targetResponseId"],style:{width:140,margin:0}}),r.createElement(Qe.A,{allowClear:!0,placeholder:"指定响应(可选)"},n.filter((function(e){return e&&e.id})).map((function(e){return r.createElement(Qt,{key:e.id,value:e.id},e.name||"未命名")}))))})),r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null),onClick:function(){return o(t)}}))})),r.createElement("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginTop:"8px"}},r.createElement(S.Ay,{type:"dashed",onClick:function(){return t()},icon:r.createElement(cn.A,null),style:{flex:1}},"添加参数匹配规则"),r.createElement(Nn.A,{content:r.createElement("div",{style:{maxWidth:"300px"}},r.createElement("div",{style:{marginBottom:"8px",fontWeight:"bold"}},"匹配规则说明:"),r.createElement("div",{style:{lineHeight:"1.6"}},r.createElement("div",null,"• ",r.createElement("strong",null,"精确匹配"),":参数值完全相等"),r.createElement("div",null,"• ",r.createElement("strong",null,"包含"),":参数值包含指定内容"),r.createElement("div",null,"• ",r.createElement("strong",null,"正则"),":参数值符合正则表达式"),r.createElement("div",null,"• ",r.createElement("strong",null,"嵌套路径"),":使用点号分隔,如 data.user.id"))),title:"参数匹配规则",trigger:"click",placement:"top"},r.createElement(S.Ay,{type:"text",icon:r.createElement(Dn.A,null),style:{color:"#999",padding:"4px"},size:"small"}))))}))),r.createElement(ge.A.Item,{name:"responses",initialValue:[],hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{name:"activeResponseId",hidden:!0},r.createElement(xe.A,null)),r.createElement(ge.A.Item,{noStyle:!0,shouldUpdate:!0},(function(e){var n=e.getFieldValue,t=n("responses")||[],o=n("activeResponseId");if(!Array.isArray(t))try{"string"==typeof t&&(t=JSON.parse(t))}catch(e){t=[]}return r.createElement(gt,{form:Fe,responses:t,activeResponseId:o,onPreview:an})}))):"redirect"===t||"url_redirect"===t?r.createElement(r.Fragment,null,r.createElement(ge.A.Item,{name:"targetUrl",label:"重定向目标URL",rules:[{required:!0,message:"请输入重定向目标URL"},{validator:function(e,n){if(!n)return Promise.resolve();try{return new URL(n),Promise.resolve()}catch(e){return Promise.reject(new Error("请输入有效的URL格式(包括http://或https://)"))}}}],tooltip:"重定向的目标URL,必须是完整的URL格式"},r.createElement(xe.A,{placeholder:"例如:https://api.example.com/users"})),r.createElement(ge.A.Item,{label:"自定义请求头"},r.createElement(ge.A.List,{name:"headerItems"},(function(e,n){var t=n.add,o=n.remove;return r.createElement(r.Fragment,null,e.map((function(e){var n=e.key,t=e.name,a=Bt(e,Dt);return r.createElement("div",{key:n,style:{display:"flex",gap:"8px",alignItems:"center",marginBottom:"8px"}},r.createElement(ge.A.Item,Ut({},a,{name:[t,"headerName"],rules:[{required:!0,message:"请输入请求头名称"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"请求头名称(如:Authorization)"})),r.createElement(ge.A.Item,Ut({},a,{name:[t,"headerValue"],rules:[{required:!0,message:"请输入请求头值"}],style:{flex:1,margin:0}}),r.createElement(xe.A,{placeholder:"请求头值(如:Bearer token123)"})),r.createElement(S.Ay,{type:"text",danger:!0,icon:r.createElement(tn.A,null),onClick:function(){return o(t)}}))})),r.createElement(S.Ay,{type:"dashed",onClick:function(){return t()},icon:r.createElement(cn.A,null),style:{width:"100%",marginTop:"8px"}},"添加请求头"))})))):null}))))))),r.createElement(kt,{visible:F,onCancel:function(){return U(!1)},previewContent:ae}),"drawer"===Se?r.createElement(jt,{visible:q,onCancel:function(){Y(!1),K(null)},interfaceItem:J,onSaved:function(){Ye()}}):r.createElement(Mt,{visible:q,onCancel:function(){Y(!1),K(null)},interfaceItem:J,onSaved:function(){Ye()}})))};var rr=t(1019),or=t(770),ar=t(9218),ir={};function cr(e){return cr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},cr(e)}function lr(){lr=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==cr(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(cr(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function sr(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function ur(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||function(e,n){if(e){if("string"==typeof e)return dr(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?dr(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function dr(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}ir.styleTagTransform=y(),ir.setAttributes=f(),ir.insert=d().bind(null,"head"),ir.domAPI=s(),ir.insertStyleElement=h(),c()(ar.A,ir),ar.A&&ar.A.locals&&ar.A.locals;var pr=me.A.Text,fr=function(e){Ce.A.put("/cgi-bin/settings",e).catch((function(){}))};const mr=function(){var e=ur((0,r.useState)("modal"),2),n=e[0],t=e[1],o=ur((0,r.useState)("modal"),2),a=o[0],i=o[1],c=ur((0,r.useState)(!0),2),l=c[0],s=c[1],u=ur((0,r.useState)(!0),2),d=u[0],p=u[1],f=ur((0,r.useState)(!1),2),m=f[0],h=f[1],b=ur((0,r.useState)(!1),2),y=b[0],g=b[1],v=ur((0,r.useState)("light"),2),x=v[0],w=v[1];(0,r.useEffect)((function(){var e=localStorage.getItem("dataManagementDisplayMode");e&&t(e);var n=localStorage.getItem("interfaceFormDisplayMode");n&&i(n),Ce.A.get("/cgi-bin/settings").then((function(e){var n=e.data,t=!1!==n.interfaceParamMatcherEnabled,r=!1!==n.responseParamMatcherEnabled;s(t),p(r),h(1==n.webDavSyncEnabled),localStorage.setItem("interfaceParamMatcherEnabled",String(t)),localStorage.setItem("responseParamMatcherEnabled",String(r)),window.dispatchEvent(new Event("storage"))})).catch((function(){var e=localStorage.getItem("interfaceParamMatcherEnabled");null!==e&&s("false"!==e);var n=localStorage.getItem("responseParamMatcherEnabled");null!==n&&p("false"!==n)}));var r=localStorage.getItem("theme");if(r)w(r);else{var o=localStorage.getItem("cyberTheme"),a="false"===o?"light":"true"===o?"cyber":"light";w(a),localStorage.setItem("theme",a)}}),[]);var E=function(){var e,n=(e=lr().mark((function e(n){var t;return lr().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=m,h(n),g(!0),e.prev=3,e.next=6,Ce.A.put("/cgi-bin/settings",{webDavSyncEnabled:n});case 6:Z.Ay.success("WebDAV 同步功能已".concat(n?"开启":"关闭")),e.next=13;break;case 9:e.prev=9,e.t0=e.catch(3),h(t),Z.Ay.error("保存 WebDAV 同步设置失败");case 13:return e.prev=13,g(!1),e.finish(13);case 16:case"end":return e.stop()}}),e,null,[[3,9,13,16]])})),function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){sr(a,r,o,i,c,"next",e)}function c(e){sr(a,r,o,i,c,"throw",e)}i(void 0)}))});return function(e){return n.apply(this,arguments)}}(),k=function(e){"interface"!==e?R.A.info({title:"响应入参匹配规则说明",width:560,content:r.createElement("div",null,r.createElement("p",null,"用于在同一接口内,根据请求参数选择具体响应(响应级匹配)。"),r.createElement("p",null,"执行顺序与优先级:"),r.createElement("ul",null,r.createElement("li",null,"仅在“接口入参匹配”未直接确定目标响应时才会执行。"),r.createElement("li",null,"按响应配置顺序匹配,命中第一条规则即返回对应响应。"),r.createElement("li",null,"支持精确匹配、包含匹配、正则匹配。"),r.createElement("li",null,"若本开关关闭,则跳过响应级匹配,直接使用默认响应。")),r.createElement("p",null,"兜底逻辑:"),r.createElement("ul",null,r.createElement("li",null,"开启但未命中任一规则时,使用默认响应。"),r.createElement("li",null,"与接口级都关闭时,请求将直接返回默认响应。")))}):R.A.info({title:"接口入参匹配规则说明",width:560,content:r.createElement("div",null,r.createElement("p",null,"用于区分同一 URL 下的不同接口定义(接口级匹配)。"),r.createElement("p",null,"执行顺序与优先级:"),r.createElement("ul",null,r.createElement("li",null,"先进行 URL 匹配,命中多个接口时,按接口匹配条件顺序查找第一条命中规则。"),r.createElement("li",null,"若命中规则且配置了目标响应,则直接返回该响应(最高优先级)。"),r.createElement("li",null,"若命中规则但未配置目标响应,则进入“响应入参匹配”阶段继续判断。"),r.createElement("li",null,"若本开关关闭,则跳过接口级匹配,直接走“响应入参匹配”(若开启)。")),r.createElement("p",null,"兜底逻辑:"),r.createElement("ul",null,r.createElement("li",null,"若最终没有任何入参规则命中,系统返回默认响应。"),r.createElement("li",null,"支持嵌套参数路径,例如:data.user.id。")))})};return r.createElement(fe,null,r.createElement(rr.A,null),r.createElement("div",{className:"page-container"},r.createElement("div",{className:"page-title-bar"},r.createElement("div",null,r.createElement("h1",{className:"page-title"},"系统设置"),r.createElement("div",{className:"page-description"},"配置插件的全局设置项和界面选项"))),r.createElement(he.A,{title:"界面设置",className:"settings-card"},r.createElement("div",{className:"settings-item"},r.createElement("div",{className:"settings-item-header"},r.createElement("div",null,r.createElement("div",{className:"settings-item-title"},"数据管理交互"),r.createElement("div",{className:"settings-item-description"},"选择数据管理的显示方式")),r.createElement(L.A,null,r.createElement(pr,{type:"secondary"},"drawer"===n?"抽屉模式":"弹窗模式"),r.createElement(Xe.A,{checked:"drawer"===n,onChange:function(e){var n=e?"drawer":"modal";t(n),localStorage.setItem("dataManagementDisplayMode",n),window.dispatchEvent(new Event("storage"))}})))),r.createElement("div",{className:"settings-item"},r.createElement("div",{className:"settings-item-header"},r.createElement("div",null,r.createElement("div",{className:"settings-item-title"},"接口表单交互"),r.createElement("div",{className:"settings-item-description"},"选择添加/编辑接口的显示方式")),r.createElement(L.A,null,r.createElement(pr,{type:"secondary"},"drawer"===a?"抽屉模式":"弹窗模式"),r.createElement(Xe.A,{checked:"drawer"===a,onChange:function(e){var n=e?"drawer":"modal";i(n),localStorage.setItem("interfaceFormDisplayMode",n),window.dispatchEvent(new Event("storage"))}})))),r.createElement("div",{className:"settings-item"},r.createElement("div",{className:"settings-item-header"},r.createElement("div",null,r.createElement("div",{className:"settings-item-title"},"接口入参匹配",r.createElement(S.Ay,{type:"text",size:"small",className:"settings-help-icon",icon:r.createElement(Dn.A,null),onClick:function(){return k("interface")}})),r.createElement("div",{className:"settings-item-description"},"是否在接口编辑表单中显示「接口匹配条件」配置区域")),r.createElement(L.A,null,r.createElement(pr,{type:"secondary"},l?"已开启":"已关闭"),r.createElement(Xe.A,{checked:l,onChange:function(e){s(e),localStorage.setItem("interfaceParamMatcherEnabled",String(e)),fr({interfaceParamMatcherEnabled:e}),window.dispatchEvent(new Event("storage"))}})))),r.createElement("div",{className:"settings-item"},r.createElement("div",{className:"settings-item-header"},r.createElement("div",null,r.createElement("div",{className:"settings-item-title"},"响应入参匹配",r.createElement(S.Ay,{type:"text",size:"small",className:"settings-help-icon",icon:r.createElement(Dn.A,null),onClick:function(){return k("response")}})),r.createElement("div",{className:"settings-item-description"},"是否在响应内容编辑器中显示「入参匹配规则」配置区域")),r.createElement(L.A,null,r.createElement(pr,{type:"secondary"},d?"已开启":"已关闭"),r.createElement(Xe.A,{checked:d,onChange:function(e){p(e),localStorage.setItem("responseParamMatcherEnabled",String(e)),fr({responseParamMatcherEnabled:e}),window.dispatchEvent(new Event("storage"))}}))))),r.createElement(he.A,{title:"同步设置",className:"settings-card",style:{marginTop:24}},r.createElement("div",{className:"settings-item"},r.createElement("div",{className:"settings-item-header"},r.createElement("div",null,r.createElement("div",{className:"settings-item-title"},r.createElement(ke.A,{style:{marginRight:8}}),"WebDAV 同步"),r.createElement("div",{className:"settings-item-description"},"开启后,在功能模块管理页显示 WebDAV 入口;关闭不会清除已保存的连接配置")),r.createElement(L.A,null,r.createElement(pr,{type:"secondary"},m?"已开启":"已关闭"),r.createElement(Xe.A,{checked:m,loading:y,onChange:E}))))),r.createElement(he.A,{title:"主题设置",className:"settings-card",style:{marginTop:24}},r.createElement("div",{className:"settings-item"},r.createElement("div",{className:"settings-item-header"},r.createElement("div",null,r.createElement("div",{className:"settings-item-title"},"界面主题"),r.createElement("div",{className:"settings-item-description"},"选择插件的界面主题风格"))),r.createElement(or.Ay.Group,{value:x,onChange:function(e){var n=e.target.value;w(n),localStorage.setItem("theme",n),localStorage.setItem("cyberTheme",String("cyber"===n)),window.dispatchEvent(new Event("storage")),Z.Ay.success("".concat({light:"经典亮色",cyber:"赛博朋克",earth:"大地色系"}[n],"主题已开启"))},style:{marginTop:12}},r.createElement(L.A,{direction:"vertical"},r.createElement(or.Ay,{value:"light"},r.createElement(L.A,null,r.createElement("span",{style:{display:"inline-block",width:16,height:16,borderRadius:4,background:"#1890ff",verticalAlign:"middle",marginRight:4}}),"经典亮色 — Ant Design 默认亮色风格")),r.createElement(or.Ay,{value:"cyber"},r.createElement(L.A,null,r.createElement("span",{style:{display:"inline-block",width:16,height:16,borderRadius:4,background:"linear-gradient(135deg, #00f0ff, #00ff41)",verticalAlign:"middle",marginRight:4}}),"赛博朋克 — 深色霓虹科技风格")),r.createElement(or.Ay,{value:"earth"},r.createElement(L.A,null,r.createElement("span",{style:{display:"inline-block",width:16,height:16,borderRadius:4,background:"linear-gradient(135deg, #b87333, #d4a017)",verticalAlign:"middle",marginRight:4}}),"大地色系 — 暖色调自然舒适风格"))))))))};var hr=t(6544),br=t(6601),yr=t(8553),gr=t(4353),vr=t.n(gr);function xr(e){return xr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},xr(e)}function wr(){wr=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==xr(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(xr(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function Er(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function kr(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){Er(a,r,o,i,c,"next",e)}function c(e){Er(a,r,o,i,c,"throw",e)}i(void 0)}))}}function Ar(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||Sr(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Sr(e,n){if(e){if("string"==typeof e)return Lr(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Lr(e,n):void 0}}function Lr(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}const Ir=function(){var e=Ar((0,r.useState)(!0),2),n=e[0],t=e[1],o=Ar((0,r.useState)({}),2),a=o[0],i=o[1],c=Ar((0,r.useState)({topInterfaces:[],topFeatures:[]}),2),l=c[0],s=c[1],u=Ar((0,r.useState)({}),2),d=u[0],p=u[1],f=Ar((0,r.useState)([]),2),m=f[0],h=f[1],b=Ar((0,r.useState)(!1),2),y=b[0],g=b[1],v=Ar((0,r.useState)(null),2),x=v[0],w=v[1],E=Ar((0,r.useState)(""),2),k=E[0],A=E[1],S=(0,r.useCallback)(kr(wr().mark((function e(){var n,t,r,o,a,c;return wr().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.all([Ce.A.get("/cgi-bin/stats?type=overview"),Ce.A.get("/cgi-bin/stats?type=top"),Ce.A.get("/cgi-bin/stats?type=timeline")]);case 2:t=e.sent,r=Ar(t,3),o=r[0],a=r[1],c=r[2],i(o.data.data||{}),s(a.data.data||{topInterfaces:[],topFeatures:[]}),p((null===(n=c.data.data)||void 0===n?void 0:n.timeline)||{});case 10:case"end":return e.stop()}}),e)}))),[]),I=(0,r.useCallback)(function(){var e=kr(wr().mark((function e(n,t){var r,o,a;return wr().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return g(!0),e.prev=1,o=new URLSearchParams({type:"recent"}),n&&o.append("date",n),t&&o.append("url",t),e.next=7,Ce.A.get("/cgi-bin/stats?".concat(o.toString()));case 7:a=e.sent,h((null===(r=a.data.data)||void 0===r?void 0:r.logs)||[]),e.next=14;break;case 11:e.prev=11,e.t0=e.catch(1),console.error("加载最近记录失败:",e.t0);case 14:return e.prev=14,g(!1),e.finish(14);case 17:case"end":return e.stop()}}),e,null,[[1,11,14,17]])})));return function(n,t){return e.apply(this,arguments)}}(),[]),O=function(){var e=kr(wr().mark((function e(){var n;return wr().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t(!0),e.prev=1,e.next=4,S();case 4:return n=x?vr()(x).format("YYYY-MM-DD"):"",e.next=7,I(n,k);case 7:e.next=12;break;case 9:e.prev=9,e.t0=e.catch(1),console.error("加载统计数据失败:",e.t0);case 12:return e.prev=12,t(!1),e.finish(12);case 15:case"end":return e.stop()}}),e,null,[[1,9,12,15]])})));return function(){return e.apply(this,arguments)}}();(0,r.useEffect)((function(){O()}),[]);var j,P=[{title:"接口名称",dataIndex:"name",key:"name"},{title:"命中次数",dataIndex:"count",key:"count",width:120},{title:"占比",key:"percent",width:120,render:function(e,n){var t=a.totalHits||1,o=(n.count/t*100).toFixed(1);return r.createElement(Ke.A,{count:"".concat(o,"%"),style:{backgroundColor:"#52c41a"}})}}],z=[{title:"时间",dataIndex:"timestamp",key:"timestamp",width:180,render:function(e){return new Date(e).toLocaleString()}},{title:"方法",dataIndex:"method",key:"method",width:80},{title:"URL",dataIndex:"url",key:"url",ellipsis:!0},{title:"状态",dataIndex:"status",key:"status",width:80,render:function(e){return r.createElement(ve.A,{color:e>=200&&e<300?"success":"default"},e)}},{title:"模块",dataIndex:"featureName",key:"featureName",width:140},{title:"接口",dataIndex:"interfaceName",key:"interfaceName",width:160}],M=Object.entries(d).sort(),_=Math.max.apply(Math,(j=Object.values(d),function(e){if(Array.isArray(e))return Lr(e)}(j)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(j)||Sr(j)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).concat([1]));return r.createElement(fe,null,r.createElement("div",{className:"page-container"},r.createElement("div",{className:"page-title-bar"},r.createElement("div",null,r.createElement("h1",{className:"page-title"},"📊 请求统计"),r.createElement("div",{className:"page-description"},"查看 Mock 接口的命中情况、流量趋势和未覆盖接口"))),n?r.createElement(F.A,{size:"large",style:{display:"block",margin:"80px auto"}}):r.createElement(r.Fragment,null,r.createElement(Ze.A,{gutter:16,style:{marginBottom:24}},r.createElement(Je.A,{span:6},r.createElement(he.A,null,r.createElement(hr.A,{title:"今日命中",value:a.todayHits||0,prefix:r.createElement(T.A,null),valueStyle:{color:"#52c41a"}}))),r.createElement(Je.A,{span:6},r.createElement(he.A,null,r.createElement(hr.A,{title:"7日总请求",value:a.totalRequests||0,prefix:r.createElement(N.A,null)}))),r.createElement(Je.A,{span:6},r.createElement(he.A,null,r.createElement(hr.A,{title:"命中率",value:a.hitRate||0,suffix:"%",prefix:r.createElement(yr.A,null),valueStyle:{color:"#1890ff"}}))),r.createElement(Je.A,{span:6},r.createElement(he.A,null,r.createElement(hr.A,{title:"活跃接口 / 总数",value:"".concat(a.activeInterfaces||0," / ").concat(a.totalInterfaces||0),prefix:r.createElement(C.A,null)})))),r.createElement(he.A,{title:"📈 近7天命中趋势",style:{marginBottom:24}},0===M.length?r.createElement(ye.A,{description:"暂无数据"}):r.createElement("div",{style:{display:"flex",alignItems:"flex-end",height:160,gap:12,padding:"0 8px"}},M.map((function(e){var n=Ar(e,2),t=n[0],o=n[1];return r.createElement("div",{key:t,style:{flex:1,display:"flex",flexDirection:"column",alignItems:"center"}},r.createElement("div",{style:{fontSize:12,fontWeight:600,marginBottom:4}},o),r.createElement("div",{style:{width:"100%",height:"".concat(o/_*120,"px"),background:"#1890ff",borderRadius:"4px 4px 0 0",minHeight:o>0?4:0,transition:"height 0.3s"}}),r.createElement("div",{style:{fontSize:11,color:"#999",marginTop:4}},t.slice(5)))})))),r.createElement(Ze.A,{gutter:16,style:{marginBottom:24}},r.createElement(Je.A,{span:12},r.createElement(he.A,{title:"🏆 Top 10 命中接口"},0===l.topInterfaces.length?r.createElement(ye.A,{description:"暂无命中记录"}):r.createElement(X.A,{dataSource:l.topInterfaces,columns:P,rowKey:"id",pagination:!1,size:"small"}))),r.createElement(Je.A,{span:12},r.createElement(he.A,{title:"📦 Top 10 功能模块"},0===l.topFeatures.length?r.createElement(ye.A,{description:"暂无命中记录"}):r.createElement(X.A,{dataSource:l.topFeatures,columns:[{title:"模块名称",dataIndex:"name",key:"name"},{title:"命中次数",dataIndex:"count",key:"count",width:120}],rowKey:"id",pagination:!1,size:"small"})))),r.createElement(he.A,{title:"🕐 最近命中记录",extra:r.createElement(L.A,null,r.createElement(br.A,{placeholder:"筛选日期",value:x,onChange:function(e){w(e);var n=e?vr()(e).format("YYYY-MM-DD"):"";I(n,k)},allowClear:!0,style:{width:140}}),r.createElement(xe.A,{placeholder:"筛选 URL",value:k,onChange:function(e){var n=e.target.value;A(n);var t=x?vr()(x).format("YYYY-MM-DD"):"";I(t,n)},allowClear:!0,prefix:r.createElement(_n.A,null),style:{width:200}}))},y?r.createElement(F.A,{size:"small",style:{display:"block",margin:"40px auto"}}):0===m.length?r.createElement(ye.A,{description:"暂无记录"}):r.createElement(X.A,{dataSource:m,columns:z,rowKey:"id",pagination:!1,size:"small"})))))};var Or=t(277),jr=t(6325),Cr=t(5850),Nr=t(3903),Tr=t(7345);function Pr(e){return Pr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pr(e)}function zr(){zr=function(){return n};var e,n={},t=Object.prototype,r=t.hasOwnProperty,o=Object.defineProperty||function(e,n,t){e[n]=t.value},a="function"==typeof Symbol?Symbol:{},i=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",l=a.toStringTag||"@@toStringTag";function s(e,n,t){return Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}),e[n]}try{s({},"")}catch(e){s=function(e,n,t){return e[n]=t}}function u(e,n,t,r){var a=n&&n.prototype instanceof y?n:y,i=Object.create(a.prototype),c=new C(r||[]);return o(i,"_invoke",{value:L(e,t,c)}),i}function d(e,n,t){try{return{type:"normal",arg:e.call(n,t)}}catch(e){return{type:"throw",arg:e}}}n.wrap=u;var p="suspendedStart",f="suspendedYield",m="executing",h="completed",b={};function y(){}function g(){}function v(){}var x={};s(x,i,(function(){return this}));var w=Object.getPrototypeOf,E=w&&w(w(N([])));E&&E!==t&&r.call(E,i)&&(x=E);var k=v.prototype=y.prototype=Object.create(x);function A(e){["next","throw","return"].forEach((function(n){s(e,n,(function(e){return this._invoke(n,e)}))}))}function S(e,n){function t(o,a,i,c){var l=d(e[o],e,a);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"==Pr(u)&&r.call(u,"__await")?n.resolve(u.__await).then((function(e){t("next",e,i,c)}),(function(e){t("throw",e,i,c)})):n.resolve(u).then((function(e){s.value=e,i(s)}),(function(e){return t("throw",e,i,c)}))}c(l.arg)}var a;o(this,"_invoke",{value:function(e,r){function o(){return new n((function(n,o){t(e,r,n,o)}))}return a=a?a.then(o,o):o()}})}function L(n,t,r){var o=p;return function(a,i){if(o===m)throw Error("Generator is already running");if(o===h){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var c=r.delegate;if(c){var l=I(c,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===p)throw o=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=m;var s=d(n,t,r);if("normal"===s.type){if(o=r.done?h:f,s.arg===b)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(o=h,r.method="throw",r.arg=s.arg)}}}function I(n,t){var r=t.method,o=n.iterator[r];if(o===e)return t.delegate=null,"throw"===r&&n.iterator.return&&(t.method="return",t.arg=e,I(n,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=d(o,n.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,b;var i=a.arg;return i?i.done?(t[n.resultName]=i.value,t.next=n.nextLoc,"return"!==t.method&&(t.method="next",t.arg=e),t.delegate=null,b):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,b)}function O(e){var n={tryLoc:e[0]};1 in e&&(n.catchLoc=e[1]),2 in e&&(n.finallyLoc=e[2],n.afterLoc=e[3]),this.tryEntries.push(n)}function j(e){var n=e.completion||{};n.type="normal",delete n.arg,e.completion=n}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function N(n){if(n||""===n){var t=n[i];if(t)return t.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length)){var o=-1,a=function t(){for(;++o<n.length;)if(r.call(n,o))return t.value=n[o],t.done=!1,t;return t.value=e,t.done=!0,t};return a.next=a}}throw new TypeError(Pr(n)+" is not iterable")}return g.prototype=v,o(k,"constructor",{value:v,configurable:!0}),o(v,"constructor",{value:g,configurable:!0}),g.displayName=s(v,l,"GeneratorFunction"),n.isGeneratorFunction=function(e){var n="function"==typeof e&&e.constructor;return!!n&&(n===g||"GeneratorFunction"===(n.displayName||n.name))},n.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,s(e,l,"GeneratorFunction")),e.prototype=Object.create(k),e},n.awrap=function(e){return{__await:e}},A(S.prototype),s(S.prototype,c,(function(){return this})),n.AsyncIterator=S,n.async=function(e,t,r,o,a){void 0===a&&(a=Promise);var i=new S(u(e,t,r,o),a);return n.isGeneratorFunction(t)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},A(k),s(k,l,"Generator"),s(k,i,(function(){return this})),s(k,"toString",(function(){return"[object Generator]"})),n.keys=function(e){var n=Object(e),t=[];for(var r in n)t.push(r);return t.reverse(),function e(){for(;t.length;){var r=t.pop();if(r in n)return e.value=r,e.done=!1,e}return e.done=!0,e}},n.values=N,C.prototype={constructor:C,reset:function(n){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(j),!n)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(n){if(this.done)throw n;var t=this;function o(r,o){return c.type="throw",c.arg=n,t.next=r,o&&(t.method="next",t.arg=e),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],c=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),s=r.call(i,"finallyLoc");if(l&&s){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(e,n){for(var t=this.tryEntries.length-1;t>=0;--t){var o=this.tryEntries[t];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=n&&n<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=e,i.arg=n,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(e,n){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&n&&(this.next=n),b},finish:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.finallyLoc===e)return this.complete(t.completion,t.afterLoc),j(t),b}},catch:function(e){for(var n=this.tryEntries.length-1;n>=0;--n){var t=this.tryEntries[n];if(t.tryLoc===e){var r=t.completion;if("throw"===r.type){var o=r.arg;j(t)}return o}}throw Error("illegal catch attempt")},delegateYield:function(n,t,r){return this.delegate={iterator:N(n),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=e),b}},n}function Mr(e,n,t,r,o,a,i){try{var c=e[a](i),l=c.value}catch(e){return void t(e)}c.done?n(l):Promise.resolve(l).then(r,o)}function _r(e){return function(){var n=this,t=arguments;return new Promise((function(r,o){var a=e.apply(n,t);function i(e){Mr(a,r,o,i,c,"next",e)}function c(e){Mr(a,r,o,i,c,"throw",e)}i(void 0)}))}}function Rr(e){return function(e){if(Array.isArray(e))return Ur(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Dr(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Fr(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,i,c=[],l=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=a.call(t)).done)&&(c.push(r.value),c.length!==n);l=!0);}catch(e){s=!0,o=e}finally{try{if(!l&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||Dr(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Dr(e,n){if(e){if("string"==typeof e)return Ur(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Ur(e,n):void 0}}function Ur(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var Br=Qe.A.Option,Gr=xe.A.TextArea,Vr=["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"],Wr=[{key:"none",label:"None"},{key:"json",label:"JSON"},{key:"form",label:"x-www-form-urlencoded"},{key:"text",label:"Raw Text"}],qr=function(){try{var e=localStorage.getItem("sniffer-history");return e?JSON.parse(e):[]}catch(e){return[]}};const Yr=function(){var e,n=Fr((0,r.useState)(""),2),t=n[0],o=n[1],a=Fr((0,r.useState)("GET"),2),i=a[0],c=a[1],l=Fr((0,r.useState)("none"),2),s=l[0],u=l[1],d=Fr((0,r.useState)(""),2),p=d[0],f=d[1],m=Fr((0,r.useState)([{key:"",value:"",id:Date.now()}]),2),h=m[0],b=m[1],y=Fr((0,r.useState)([{key:"",value:"",id:Date.now()+1}]),2),g=y[0],v=y[1],x=Fr((0,r.useState)(!1),2),w=x[0],E=x[1],k=Fr((0,r.useState)(null),2),A=k[0],I=k[1],O=Fr((0,r.useState)(qr),2),j=O[0],N=O[1],P=Fr((0,r.useState)(!1),2),z=P[0],M=P[1],_=Fr((0,r.useState)(!1),2),R=_[0],F=_[1],D=Fr(ge.A.useForm(),1)[0],U=Fr((0,r.useState)([]),2),B=U[0],G=U[1];(0,r.useEffect)((function(){Ce.A.get("/cgi-bin/features").then((function(e){0===e.data.code&&G(e.data.data||[])})).catch((function(){}))}),[]),(0,r.useEffect)((function(){localStorage.setItem("sniffer-history",JSON.stringify(j.slice(0,100)))}),[j]);var V=function(e,n){n([].concat(Rr(e),[{key:"",value:"",id:Date.now()+Math.random()}]))},W=function(e,n,t){var r=Rr(e);r.splice(t,1),0===r.length&&r.push({key:"",value:"",id:Date.now()}),n(r)},q=function(e,n,t,r,o){var a=Rr(e);a[t][r]=o,n(a)},Y=function(e){var n={};return e.forEach((function(e){e.key&&void 0!==e.value&&(n[e.key]=e.value)})),n},H=function(){var e=_r(zr().mark((function e(){var n,r,o,a,c,l;return zr().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t.trim()){e.next=3;break}return Z.Ay.warning("请输入请求 URL"),e.abrupt("return");case 3:return E(!0),I(null),e.prev=5,n={url:t.trim(),method:i,headers:Y(g),queryParams:Y(h),body:"none"===s?void 0:p,bodyType:s},e.next=9,Ce.A.post("/cgi-bin/proxy-fetch",n);case 9:if(0!==(r=e.sent).data.code){e.next=18;break}a=r.data.data,I(a),c={id:Date.now().toString(),timestamp:(new Date).toISOString(),url:n.url,method:n.method,status:a.status,statusText:a.statusText,preview:(null===(o=a.body)||void 0===o?void 0:o.slice(0,200))||"",request:n},N((function(e){return[c].concat(Rr(e)).slice(0,100)})),Z.Ay.success("请求成功 ".concat(a.status)),e.next=19;break;case 18:throw new Error(r.data.message);case 19:e.next=24;break;case 21:e.prev=21,e.t0=e.catch(5),Z.Ay.error((null===(l=e.t0.response)||void 0===l||null===(l=l.data)||void 0===l?void 0:l.message)||e.t0.message||"请求失败");case 24:return e.prev=24,E(!1),e.finish(24);case 27:case"end":return e.stop()}}),e,null,[[5,21,24,27]])})));return function(){return e.apply(this,arguments)}}(),J=function(){var e=_r(zr().mark((function e(){var n,r,o,a,c;return zr().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,D.validateFields();case 3:return n=e.sent,r=(null==A?void 0:A.body)||"",o={name:n.name,urlPattern:n.urlPattern||t,proxyType:"response",httpMethod:i,httpStatus:(null==A?void 0:A.status)||200,contentType:"application/json; charset=utf-8",responseContent:r,responses:[{id:Date.now().toString(),name:"默认响应",description:"从接口嗅探导入",content:r,paramMatchers:[]}],activeResponseId:Date.now().toString(),active:!0},e.next=8,Ce.A.post("/cgi-bin/interfaces",o);case 8:if(0!==(a=e.sent).data.code){e.next=15;break}Z.Ay.success("Mock 接口创建成功"),F(!1),D.resetFields(),e.next=16;break;case 15:throw new Error(a.data.message);case 16:e.next=23;break;case 18:if(e.prev=18,e.t0=e.catch(0),!e.t0.errorFields){e.next=22;break}return e.abrupt("return");case 22:Z.Ay.error("创建失败: "+((null===(c=e.t0.response)||void 0===c||null===(c=c.data)||void 0===c?void 0:c.message)||e.t0.message));case 23:case"end":return e.stop()}}),e,null,[[0,18]])})));return function(){return e.apply(this,arguments)}}(),K=[{title:"Method",dataIndex:"method",key:"method",width:80,render:function(e){return r.createElement(ve.A,{color:"GET"===e?"blue":"POST"===e?"green":"default"},e)}},{title:"URL",dataIndex:"url",key:"url",ellipsis:!0,render:function(e){return r.createElement("span",{style:{fontSize:12}},e)}},{title:"Status",dataIndex:"status",key:"status",width:80,render:function(e){return r.createElement(ve.A,{color:e>=200&&e<300?"success":e>=400?"error":"default"},e)}},{title:"操作",key:"action",width:120,render:function(e,n){return r.createElement(L.A,null,r.createElement(S.Ay,{size:"small",onClick:function(){return function(e){var n=e.request||{};o(n.url||e.url||""),c(n.method||"GET"),u(n.bodyType||"none"),f(n.body||"");var t=Object.entries(n.queryParams||{}).map((function(e,n){var t=Fr(e,2);return{key:t[0],value:t[1],id:Date.now()+n}}));b(t.length?t:[{key:"",value:"",id:Date.now()}]);var r=Object.entries(n.headers||{}).map((function(e,n){var t=Fr(e,2);return{key:t[0],value:t[1],id:Date.now()+n+1e3}}));v(r.length?r:[{key:"",value:"",id:Date.now()+1e3}]),I({status:e.status,statusText:e.statusText,body:e.preview,headers:{}}),M(!1)}(n)}},"加载"),r.createElement(Ee.A,{title:"确定删除?",onConfirm:function(){return N((function(e){return e.filter((function(e){return e.id!==n.id}))}))}},r.createElement(S.Ay,{size:"small",danger:!0,icon:r.createElement(tn.A,null)})))}}];return r.createElement(fe,null,r.createElement("div",{className:"page-container"},r.createElement("div",{className:"page-title-bar"},r.createElement("div",null,r.createElement("h1",{className:"page-title"},r.createElement(C.A,null)," 接口嗅探"),r.createElement("div",{className:"page-description"},"像 Postman 一样发送真实请求,抓取响应后一键保存为 Mock 接口")),r.createElement(L.A,null,r.createElement(S.Ay,{icon:r.createElement(jr.A,null),onClick:function(){return M(!0)}},"历史记录 (",j.length,")"))),r.createElement(he.A,{style:{marginBottom:24}},r.createElement(Ze.A,{gutter:8,style:{marginBottom:16}},r.createElement(Je.A,{flex:"120px"},r.createElement(Qe.A,{value:i,onChange:c,style:{width:"100%"}},Vr.map((function(e){return r.createElement(Br,{key:e,value:e},e)})))),r.createElement(Je.A,{flex:"auto"},r.createElement(xe.A,{placeholder:"https://api.example.com/users",value:t,onChange:function(e){return o(e.target.value)},onPressEnter:H,style:{fontFamily:"monospace"},prefix:r.createElement(T.A,null)})),r.createElement(Je.A,{flex:"120px"},r.createElement(S.Ay,{type:"primary",icon:r.createElement(Cr.A,null),loading:w,onClick:H,block:!0},"发送"))),r.createElement(Or.A,{defaultActiveKey:"params"},r.createElement(Or.A.TabPane,{tab:r.createElement("span",null,r.createElement(Yn.A,null)," Query 参数"),key:"params"},r.createElement(L.A,{direction:"vertical",style:{width:"100%"}},h.map((function(e,n){return r.createElement(Ze.A,{gutter:8,key:e.id},r.createElement(Je.A,{span:8},r.createElement(xe.A,{placeholder:"参数名",value:e.key,onChange:function(e){return q(h,b,n,"key",e.target.value)}})),r.createElement(Je.A,{span:14},r.createElement(xe.A,{placeholder:"参数值",value:e.value,onChange:function(e){return q(h,b,n,"value",e.target.value)}})),r.createElement(Je.A,{span:2},r.createElement(S.Ay,{icon:r.createElement(tn.A,null),onClick:function(){return W(h,b,n)},disabled:1===h.length&&!e.key})))})),r.createElement(S.Ay,{type:"dashed",icon:r.createElement(cn.A,null),onClick:function(){return V(h,b)}},"添加参数"))),r.createElement(Or.A.TabPane,{tab:r.createElement("span",null,r.createElement(Yn.A,null)," Headers"),key:"headers"},r.createElement(L.A,{direction:"vertical",style:{width:"100%"}},g.map((function(e,n){return r.createElement(Ze.A,{gutter:8,key:e.id},r.createElement(Je.A,{span:8},r.createElement(xe.A,{placeholder:"Header 名",value:e.key,onChange:function(e){return q(g,v,n,"key",e.target.value)}})),r.createElement(Je.A,{span:14},r.createElement(xe.A,{placeholder:"Header 值",value:e.value,onChange:function(e){return q(g,v,n,"value",e.target.value)}})),r.createElement(Je.A,{span:2},r.createElement(S.Ay,{icon:r.createElement(tn.A,null),onClick:function(){return W(g,v,n)},disabled:1===g.length&&!e.key})))})),r.createElement(S.Ay,{type:"dashed",icon:r.createElement(cn.A,null),onClick:function(){return V(g,v)}},"添加 Header"))),r.createElement(Or.A.TabPane,{tab:r.createElement("span",null,r.createElement(Yn.A,null)," Body"),key:"body"},r.createElement(L.A,{direction:"vertical",style:{width:"100%"}},r.createElement(Qe.A,{value:s,onChange:u,style:{width:200}},Wr.map((function(e){return r.createElement(Br,{key:e.key,value:e.key},e.label)}))),"none"!==s&&r.createElement(Gr,{rows:8,placeholder:"json"===s?'{\n "name": "test"\n}':"form"===s?"name=test&age=18":"raw text...",value:p,onChange:function(e){return f(e.target.value)},style:{fontFamily:"monospace",fontSize:13}}))))),A&&r.createElement(he.A,{title:r.createElement(L.A,null,r.createElement("span",null,"响应结果"),r.createElement(ve.A,{color:A.status>=200&&A.status<300?"success":A.status>=400?"error":"default"},A.status," ",A.statusText)),extra:r.createElement(L.A,null,r.createElement(S.Ay,{size:"small",icon:r.createElement(Mn.A,null),onClick:function(){null!=A&&A.body&&(navigator.clipboard.writeText(A.body),Z.Ay.success("响应内容已复制"))}},"复制响应"),r.createElement(S.Ay,{size:"small",icon:r.createElement(Nr.A,null),type:"primary",onClick:function(){D.setFieldsValue({name:"",urlPattern:t}),F(!0)}},"保存为 Mock 接口"))},r.createElement(Or.A,{defaultActiveKey:"body"},r.createElement(Or.A.TabPane,{tab:"Body",key:"body"},r.createElement(Gr,{value:function(e){try{var n=JSON.parse(e);return JSON.stringify(n,null,2)}catch(n){return e}}(A.body),readOnly:!0,rows:16,style:{fontFamily:"monospace",fontSize:12,background:"#fafafa"}})),r.createElement(Or.A.TabPane,{tab:"Headers",key:"headers"},r.createElement("pre",{style:{background:"#fafafa",padding:16,borderRadius:4,fontSize:12}},JSON.stringify(A.headers,null,2))))),!A&&!w&&r.createElement(ye.A,{description:"输入 URL 并点击「发送」开始嗅探真实接口"})),r.createElement(Tn.A,{title:"历史记录",open:z,onClose:function(){return M(!1)},width:600,extra:r.createElement(Ee.A,{title:"确定清空全部历史?",onConfirm:function(){N([]),Z.Ay.success("历史记录已清空")}},r.createElement(S.Ay,{icon:r.createElement(Tr.A,null),danger:!0},"清空"))},r.createElement(X.A,{dataSource:j,columns:K,rowKey:"id",pagination:{pageSize:10},size:"small"})),r.createElement(Tn.A,{title:"保存为 Mock 接口",open:R,onClose:function(){return F(!1)},width:480,footer:r.createElement(L.A,{style:{float:"right"}},r.createElement(S.Ay,{onClick:function(){return F(!1)}},"取消"),r.createElement(S.Ay,{type:"primary",icon:r.createElement(Nr.A,null),onClick:J},"创建接口"))},r.createElement(ge.A,{form:D,layout:"vertical"},r.createElement(ge.A.Item,{name:"name",label:"接口名称",rules:[{required:!0,message:"请输入接口名称"}]},r.createElement(xe.A,{placeholder:"例如:获取用户列表"})),r.createElement(ge.A.Item,{name:"featureId",label:"所属功能模块",rules:[{required:!0,message:"请选择功能模块"}]},r.createElement(Qe.A,{placeholder:"选择功能模块"},B.map((function(e){return r.createElement(Br,{key:e.id,value:e.id},e.name)})))),r.createElement(ge.A.Item,{name:"urlPattern",label:"URL 匹配规则",rules:[{required:!0,message:"请输入匹配规则"}]},r.createElement(xe.A,{placeholder:"例如:/api/users 或 /api/users/*"})),r.createElement(ge.A.Item,{label:"请求方法"},r.createElement(ve.A,null,i)),r.createElement(ge.A.Item,{label:"响应状态码"},r.createElement(ve.A,null,null==A?void 0:A.status)),r.createElement(ge.A.Item,{label:"响应预览"},r.createElement(Gr,{value:null==A||null===(e=A.body)||void 0===e?void 0:e.slice(0,500),readOnly:!0,rows:6,style:{fontFamily:"monospace",fontSize:11,background:"#fafafa"}})))))};t(3363),t(1780);const Hr=function(){return r.createElement(o.I9,null,r.createElement("div",{className:"App"},r.createElement(a.dO,null,r.createElement(a.qh,{exact:!0,path:"/",component:jn}),r.createElement(a.qh,{exact:!0,path:"/interface",component:tr}),r.createElement(a.qh,{path:"/interface/:featureId",component:tr}),r.createElement(a.qh,{path:"/stats",component:Ir}),r.createElement(a.qh,{path:"/sniffer",component:Yr}),r.createElement(a.qh,{path:"/settings",component:mr}),r.createElement(a.rd,{to:"/"}))))}},1019:(e,n,t)=>{"use strict";t.d(n,{A:()=>i});var r=t(6540),o=t(1847),a=t(770);function i(){var e="legacy"===localStorage.getItem("mm-ui-version")?"legacy":"modern";return r.createElement("div",{style:{marginBottom:24}},r.createElement(o.A.Title,{level:5},"界面版本"),r.createElement(a.Ay.Group,{value:e,onChange:function(e){localStorage.setItem("mm-ui-version",e.target.value),window.location.reload()},options:[{value:"modern",label:"UI 3.0 工作台"},{value:"legacy",label:"经典 UI 2.0"}]}),r.createElement(o.A.Paragraph,{type:"secondary",style:{marginTop:8}},"切换后刷新页面,两个界面共用原有模块、接口和同步数据。此偏好仅保存在当前浏览器。"))}},1780:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>y});var r=t(5072),o=t.n(r),a=t(7825),i=t.n(a),c=t(7659),l=t.n(c),s=t(5056),u=t.n(s),d=t(540),p=t.n(d),f=t(1113),m=t.n(f),h=t(9709),b={};b.styleTagTransform=m(),b.setAttributes=u(),b.insert=l().bind(null,"head"),b.domAPI=i(),b.insertStyleElement=p(),o()(h.A,b);const y=h.A&&h.A.locals?h.A.locals:void 0},2497:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,".App {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif;\n height: 100%;\n width: 100%;\n}\n\n/* 页面容器样式 */\n.page-container {\n width: 100%;\n height: 100%;\n background-color: #fff;\n border-radius: 8px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\n padding: 24px;\n transition: all 0.3s;\n}\n\n/* 页面标题栏样式 */\n.page-title-bar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 24px;\n padding-bottom: 16px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.page-title {\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 20px;\n line-height: 32px;\n}\n\n.page-description {\n margin-top: 8px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n\n.page-actions {\n display: flex;\n gap: 12px;\n}\n\n/* 卡片样式 */\n.custom-card {\n border-radius: 8px;\n overflow: hidden;\n transition: all 0.3s;\n height: 100%;\n}\n\n.custom-card:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n transform: translateY(-3px);\n}\n\n/* 表格样式 */\n.custom-table {\n border-radius: 8px;\n overflow: hidden;\n}\n\n.custom-table .ant-table-thead > tr > th {\n background: #fafafa;\n font-weight: 600;\n}\n\n/* 表单样式 */\n.custom-form-item-label {\n font-weight: 500;\n color: rgba(0, 0, 0, 0.85);\n}\n\n.custom-form-item-hint {\n color: rgba(0, 0, 0, 0.45);\n font-size: 13px;\n margin-top: 4px;\n}\n\n/* 按钮样式 */\n.custom-button {\n border-radius: 4px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.custom-button-icon {\n margin-right: 8px;\n}\n\n/* 状态标签样式 */\n.status-tag {\n border-radius: 10px;\n padding: 2px 8px;\n font-size: 12px;\n line-height: 1.5;\n display: inline-flex;\n align-items: center;\n}\n\n.status-tag-success {\n background-color: #f6ffed;\n border: 1px solid #b7eb8f;\n color: #52c41a;\n}\n\n.status-tag-warning {\n background-color: #fffbe6;\n border: 1px solid #ffe58f;\n color: #faad14;\n}\n\n.status-tag-error {\n background-color: #fff2f0;\n border: 1px solid #ffccc7;\n color: #ff4d4f;\n}\n\n/* 动画效果 */\n.fade-in {\n animation: fadeIn 0.3s ease-in-out;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* 滚动条样式 */\n::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb {\n background: #c1c1c1;\n border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n background: #a8a8a8;\n}\n\n/* 响应式调整 */\n@media (max-width: 576px) {\n .page-container {\n padding: 16px;\n }\n \n .page-title-bar {\n flex-direction: column;\n align-items: flex-start;\n }\n \n .page-actions {\n margin-top: 16px;\n width: 100%;\n justify-content: flex-start;\n }\n}\n",""]);const c=i},2545:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,"/* 版本弹窗样式 */\n.version-modal .ant-modal-content {\n padding: 0;\n}\n\n.version-modal .ant-modal-header {\n padding: 16px 24px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.version-modal .ant-modal-body {\n padding: 0;\n max-height: 70vh;\n overflow-y: auto;\n}\n\n.version-modal-content {\n padding: 24px;\n}\n\n.version-modal-loading {\n text-align: center;\n padding: 40px;\n}\n\n.version-modal-loading p {\n margin-top: 16px;\n color: #666;\n}\n\n/* 版本号按钮样式 */\n.version-button {\n padding: 4px 8px;\n height: auto;\n border-radius: 4px;\n transition: background-color 0.3s ease;\n}\n\n.version-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.version-button:focus {\n background-color: rgba(0, 0, 0, 0.06);\n}\n\n/* Markdown 内容样式 */\n.version-markdown-content {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n line-height: 1.6;\n color: #333;\n}\n\n.version-markdown-content h1 {\n font-size: 24px;\n font-weight: 600;\n margin: 0 0 16px 0;\n padding-bottom: 8px;\n border-bottom: 1px solid #eee;\n color: #1890ff;\n}\n\n.version-markdown-content h2 {\n font-size: 20px;\n font-weight: 600;\n margin: 24px 0 12px 0;\n color: #262626;\n}\n\n.version-markdown-content h3 {\n font-size: 16px;\n font-weight: 600;\n margin: 16px 0 8px 0;\n color: #52c41a;\n}\n\n.version-markdown-content p {\n margin: 8px 0;\n color: #595959;\n}\n\n.version-markdown-content ul {\n padding-left: 20px;\n margin: 8px 0;\n}\n\n.version-markdown-content li {\n margin: 4px 0;\n color: #595959;\n}\n\n.version-markdown-content strong {\n font-weight: 600;\n color: #262626;\n}\n\n.version-markdown-content code {\n background-color: #f5f5f5;\n padding: 2px 4px;\n border-radius: 3px;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n font-size: 87%;\n}\n\n.version-markdown-content pre {\n background-color: #f6f8fa;\n padding: 16px;\n border-radius: 6px;\n overflow-x: auto;\n margin: 16px 0;\n}\n\n.version-markdown-content pre code {\n background-color: transparent;\n padding: 0;\n} ",""]);const c=i},2689:(e,n,t)=>{"use strict";t.d(n,{A:()=>p});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a),c=t(4417),l=t.n(c),s=new URL(t(3008),t.b),u=i()(o()),d=l()(s);u.push([e.id,`/* 基础样式 */\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n}\n\nbody {\n background-color: #f0f2f5;\n color: #000000d9;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.app-container {\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n}\n\n/* 顶部导航栏 */\n.header {\n background-color: #fff;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);\n height: 48px;\n display: flex;\n align-items: center;\n padding: 0 16px;\n z-index: 100;\n}\n\n.logo {\n font-weight: bold;\n font-size: 18px;\n color: #1890ff;\n margin-right: 24px;\n display: flex;\n align-items: center;\n}\n\n.logo-icon {\n margin-right: 8px;\n width: 24px;\n height: 24px;\n background-color: #1890ff;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n}\n\n.search {\n flex: 1;\n max-width: 320px;\n margin-right: 16px;\n}\n\n.search input {\n width: 100%;\n height: 32px;\n border-radius: 4px;\n border: 1px solid #d9d9d9;\n padding: 0 8px 0 32px;\n background-image: url(${d});\n background-repeat: no-repeat;\n background-position: 8px center;\n}\n\n.header-actions {\n display: flex;\n align-items: center;\n}\n\n.header-actions button {\n background: none;\n border: none;\n cursor: pointer;\n color: #595959;\n padding: 4px 8px;\n margin-left: 8px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n}\n\n.header-actions button:hover {\n background-color: #f5f5f5;\n color: #1890ff;\n}\n\n.header-actions button i {\n margin-right: 4px;\n}\n\n/* 主内容区域 */\n.main-container {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n/* 左侧导航 */\n.sidebar {\n width: 250px;\n background-color: #fff;\n border-right: 1px solid #f0f0f0;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.create-feature {\n padding: 16px;\n}\n\n.create-feature button {\n width: 100%;\n height: 36px;\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.create-feature button:hover {\n background-color: #40a9ff;\n}\n\n.feature-list {\n flex: 1;\n padding: 0 8px;\n overflow-y: auto;\n}\n\n.feature-item {\n padding: 8px 12px;\n margin-bottom: 4px;\n border-radius: 4px;\n cursor: pointer;\n}\n\n.feature-item:hover {\n background-color: #f5f5f5;\n}\n\n.feature-item.active {\n background-color: #e6f7ff;\n}\n\n.feature-link {\n display: flex;\n justify-content: space-between;\n align-items: center;\n text-decoration: none;\n color: #595959;\n}\n\n.feature-item.active .feature-link {\n color: #1890ff;\n}\n\n.feature-name {\n font-size: 14px;\n}\n\n.feature-count {\n background-color: #f0f0f0;\n color: #8c8c8c;\n font-size: 12px;\n padding: 2px 6px;\n border-radius: 10px;\n min-width: 20px;\n text-align: center;\n}\n\n.feature-item.active .feature-count {\n background-color: #1890ff;\n color: white;\n}\n\n/* 右侧内容区域 */\n.content {\n flex: 1;\n padding: 16px;\n overflow-y: auto;\n}\n\n.app-layout {\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n}\n\n.app-header {\n position: fixed;\n z-index: 100;\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 24px;\n height: 64px;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);\n}\n\n.header-left {\n display: flex;\n align-items: center;\n}\n\n.logo-container {\n display: flex;\n align-items: center;\n margin-right: 24px;\n}\n\n.logo-icon-group {\n position: relative;\n width: 32px;\n height: 32px;\n margin-right: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.logo-icon {\n font-size: 24px;\n color: #1890ff;\n}\n\n.logo-icon-primary {\n position: relative;\n z-index: 2;\n font-size: 22px;\n display: none;\n}\n\n.logo-icon-secondary {\n position: absolute;\n right: -6px;\n font-size: 16px;\n color: #52c41a;\n background: white;\n border-radius: 50%;\n box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);\n padding: 2px;\n}\n\n.logo-text {\n color: #1890ff;\n font-size: 18px;\n font-weight: 600;\n white-space: nowrap;\n background: linear-gradient(135deg, #1890ff, #52c41a);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n letter-spacing: -0.5px;\n}\n\n.collapse-button {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.header-right {\n display: flex;\n align-items: center;\n}\n\n.app-sider {\n overflow: auto;\n height: 100vh;\n position: fixed;\n left: 0;\n top: 64px;\n bottom: 0;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);\n z-index: 99;\n transition: all 0.2s;\n}\n\n.app-content-wrapper {\n margin-top: 64px;\n margin-left: 220px;\n padding: 0 24px 24px;\n transition: all 0.2s;\n}\n\n.app-content {\n padding: 24px;\n overflow: initial;\n min-height: calc(100vh - 64px - 48px - 32px);\n transition: all 0.3s;\n}\n\n.page-header {\n margin-bottom: 16px;\n}\n\n.app-breadcrumb {\n font-size: 14px;\n}\n\n/* 当侧边栏折叠时的样式调整 */\n.app-sider.ant-layout-sider-collapsed + .app-content-wrapper {\n margin-left: 80px;\n}\n\n/* 菜单项样式定制 */\n.ant-menu-item {\n border-radius: 4px;\n margin: 4px 0 !important;\n}\n\n.ant-menu-item-selected {\n font-weight: 500;\n}\n\n.ant-menu-inline .ant-menu-item::after {\n display: none;\n}\n\n/* 移动端响应式调整 */\n@media (max-width: 768px) {\n .app-sider {\n position: absolute;\n z-index: 100;\n box-shadow: 2px 0 8px rgba(0, 0, 0, 0.15);\n }\n \n .app-content-wrapper {\n margin-left: 0 !important;\n padding: 0 16px 16px;\n }\n \n .app-content {\n padding: 16px;\n }\n \n .logo-text {\n display: none;\n }\n \n .app-header {\n padding: 0 16px;\n }\n}\n\n/* 暗色主题适配 */\n.dark-theme .app-header,\n.dark-theme .app-sider {\n background-color: #141414 !important;\n border-color: #303030 !important;\n}\n\n.dark-theme .logo-text,\n.dark-theme .logo-icon-primary {\n color: #177ddc;\n}\n\n.dark-theme .logo-icon-secondary {\n color: #49aa19;\n background: #141414;\n} `,""]);const p=u},3008:e=>{"use strict";e.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 width=%2716%27 height=%2716%27%3E%3Cpath fill=%27%23999%27 d=%27M15.5 14h-.79l-.28-.27a6.5 6.5 0 0 0 1.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 0 0-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 0 0 5.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z%27/%3E%3C/svg%3E"},3014:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,'.mock-data-container {\n padding: 24px;\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\n}\n\n.header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 24px;\n padding-bottom: 16px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n/* 页面标题区域样式 */\n.title-section {\n flex: 1;\n}\n\n.title-with-badge {\n display: flex;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.page-title {\n margin: 0 !important;\n font-size: 24px;\n font-weight: 600;\n color: #262626;\n line-height: 1.2;\n}\n\n.page-description {\n color: #8c8c8c;\n font-size: 14px;\n line-height: 1.5;\n margin: 0;\n}\n\n/* 控制面板卡片样式 */\n.control-panel-card {\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n border: 1px solid #f0f0f0;\n}\n\n.control-panel-card .ant-card-body {\n padding: 20px 24px;\n}\n\n/* 统计信息区域 */\n.stats-section {\n display: flex;\n gap: 24px;\n align-items: center;\n}\n\n.stats-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n}\n\n.stats-number {\n font-size: 24px;\n font-weight: 600;\n color: #1890ff;\n line-height: 1;\n margin-bottom: 4px;\n}\n\n.stats-label {\n font-size: 12px;\n color: #8c8c8c;\n line-height: 1;\n}\n\n/* 控制组样式 */\n.control-group {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.control-label {\n font-size: 14px;\n color: #595959;\n white-space: nowrap;\n font-weight: 500;\n}\n\n.control-label .anticon {\n margin-right: 6px;\n color: #1890ff;\n}\n\n.page-info {\n font-size: 13px;\n color: #8c8c8c;\n white-space: nowrap;\n}\n\n/* 功能列表卡片样式 */\n.feature-list-card {\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n border: 1px solid #f0f0f0;\n min-height: 400px;\n}\n\n.feature-list-card .ant-card-body {\n padding: 24px;\n}\n\n.feature-grid {\n min-height: 300px;\n}\n\n.feature-card {\n position: relative;\n transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);\n height: 100%;\n display: flex;\n flex-direction: column;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n border: 1px solid #f0f0f0;\n cursor: pointer;\n background: #ffffff;\n}\n\n.feature-card:hover {\n transform: translateY(-4px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);\n border-color: #d9d9d9;\n}\n\n.feature-card:active {\n transform: translateY(-2px);\n}\n\n/* 添加卡片悬浮效果 */\n.feature-card::before {\n content: \'\';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: linear-gradient(135deg, rgba(24, 144, 255, 0.02), rgba(24, 144, 255, 0.04));\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: none;\n z-index: 1;\n}\n\n.feature-card:hover::before {\n opacity: 1;\n}\n\n/* 为卡片内容添加相对定位,确保在渐变层之上 */\n.feature-card .ant-card-body {\n position: relative;\n z-index: 2;\n padding: 20px;\n}\n\n.feature-card .ant-card-actions {\n position: relative;\n z-index: 2;\n border-top: 1px solid #f0f0f0;\n background: #fafafa;\n}\n\n.feature-card .ant-card-actions li {\n transition: all 0.2s ease;\n}\n\n.feature-card .ant-card-actions li:hover {\n background: #f0f0f0;\n}\n\n/* 不活跃功能卡片样式 */\n.feature-card.inactive-feature {\n opacity: 0.7;\n filter: grayscale(0.3);\n}\n\n.feature-card.inactive-feature:hover {\n opacity: 0.9;\n filter: grayscale(0.1);\n}\n\n.feature-card-content {\n padding: 16px;\n height: 140px;\n display: flex;\n flex-direction: column;\n}\n\n.feature-name {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n\n.feature-name h4 {\n margin: 0;\n font-size: 18px;\n color: #1890ff;\n font-weight: 600;\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.status-tag {\n font-size: 12px;\n padding: 2px 8px;\n border-radius: 10px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-weight: 500;\n}\n\n.status-tag.inactive {\n background-color: #fff1f0;\n color: #f5222d;\n border: 1px solid #ffa39e;\n}\n\n.status-tag.active {\n background-color: #f6ffed;\n color: #52c41a;\n border: 1px solid #b7eb8f;\n}\n\n.feature-description {\n color: #666;\n font-size: 14px;\n margin-bottom: 16px;\n flex: 1;\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n}\n\n.feature-stat {\n margin-top: auto;\n color: #8c8c8c;\n font-size: 13px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.feature-date {\n color: #999;\n font-size: 12px;\n}\n\n.inactive-feature {\n opacity: 0.75;\n background-color: #fafafa;\n}\n\n.inactive-feature .ant-card-meta-title {\n color: #999;\n}\n\n.empty-data {\n text-align: center;\n padding: 48px 0;\n background-color: #f9f9f9;\n border-radius: 8px;\n margin: 24px 0;\n}\n\n.loading {\n text-align: center;\n padding: 48px 0;\n}\n\n.mock-data-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n}\n\n.mock-data-header h2 {\n font-size: 18px;\n margin: 0;\n color: #1890ff;\n}\n\n.add-mock-btn {\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n padding: 8px 16px;\n cursor: pointer;\n transition: background-color 0.3s;\n}\n\n.add-mock-btn:hover {\n background-color: #40a9ff;\n}\n\n.mock-editor {\n background-color: #f9f9f9;\n border-radius: 8px;\n padding: 20px;\n margin-bottom: 20px;\n}\n\n.mock-form {\n display: flex;\n flex-direction: column;\n gap: 15px;\n}\n\n.form-row {\n display: flex;\n gap: 15px;\n}\n\n.method-select {\n width: 120px;\n}\n\n.path-input {\n flex: 1;\n}\n\n.form-group {\n display: flex;\n flex-direction: column;\n gap: 5px;\n}\n\n.form-group label {\n font-weight: 500;\n color: #333;\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n padding: 8px 12px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n font-size: 14px;\n transition: border-color 0.3s;\n font-family: inherit;\n}\n\n.form-group textarea {\n font-family: monospace;\n resize: vertical;\n min-height: 150px;\n}\n\n.form-group input:focus,\n.form-group select:focus,\n.form-group textarea:focus {\n border-color: #40a9ff;\n outline: none;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n.form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 10px;\n}\n\n.cancel-btn {\n padding: 8px 16px;\n background-color: #f5f5f5;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n cursor: pointer;\n transition: all 0.3s;\n}\n\n.cancel-btn:hover {\n background-color: #e6e6e6;\n}\n\n.save-btn {\n padding: 8px 16px;\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.3s;\n}\n\n.save-btn:hover {\n background-color: #40a9ff;\n}\n\n.mock-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.mock-table th,\n.mock-table td {\n padding: 12px 15px;\n text-align: left;\n border-bottom: 1px solid #eee;\n}\n\n.mock-table th {\n font-weight: 500;\n color: #666;\n background-color: #f9f9f9;\n}\n\n.mock-table tr.inactive {\n color: #999;\n background-color: #f9f9f9;\n}\n\n.mock-table tr:hover {\n background-color: #f5f5f5;\n}\n\n.toggle-switch {\n position: relative;\n display: inline-block;\n width: 40px;\n height: 20px;\n}\n\n.toggle-switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n transition: .4s;\n border-radius: 34px;\n}\n\n.toggle-slider:before {\n position: absolute;\n content: "";\n height: 16px;\n width: 16px;\n left: 2px;\n bottom: 2px;\n background-color: white;\n transition: .4s;\n border-radius: 50%;\n}\n\ninput:checked + .toggle-slider {\n background-color: #1890ff;\n}\n\ninput:checked + .toggle-slider:before {\n transform: translateX(20px);\n}\n\n.edit-btn,\n.delete-btn {\n padding: 5px 10px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 13px;\n margin-right: 5px;\n}\n\n.edit-btn {\n background-color: #f0f7ff;\n color: #1890ff;\n}\n\n.delete-btn {\n background-color: #fff0f0;\n color: #ff4d4f;\n}\n\n.edit-btn:hover {\n background-color: #e6f7ff;\n}\n\n.delete-btn:hover {\n background-color: #ffd4d4;\n}\n\n.empty-list {\n text-align: center;\n padding: 30px;\n color: #999;\n font-style: italic;\n background-color: #f9f9f9;\n border-radius: 4px;\n}\n\n.page-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 24px;\n padding-bottom: 16px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.page-header h1 {\n font-size: 24px;\n font-weight: 600;\n color: #1890ff;\n margin: 0;\n}\n\n.header-actions {\n display: flex;\n gap: 12px;\n}\n\n.add-button, .import-button {\n height: 36px;\n padding: 0 16px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n font-weight: 500;\n transition: all 0.3s;\n}\n\n.add-button {\n background-color: #1890ff;\n color: white;\n}\n\n.add-button:hover {\n background-color: #40a9ff;\n box-shadow: 0 4px 12px rgba(24, 144, 255, 0.2);\n}\n\n.import-button {\n background-color: #52c41a;\n color: white;\n}\n\n.import-button:hover {\n background-color: #73d13d;\n box-shadow: 0 4px 12px rgba(82, 196, 26, 0.2);\n}\n\n.feature-list-container {\n background-color: white;\n border-radius: 4px;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n.feature-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.feature-table th,\n.feature-table td {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.feature-table th {\n background-color: #fafafa;\n color: #8c8c8c;\n font-weight: 500;\n font-size: 14px;\n}\n\n.feature-table tr:hover {\n background-color: #fafafa;\n}\n\n.feature-table tr.inactive {\n color: #a6a6a6;\n background-color: #f9f9f9;\n}\n\n.action-buttons {\n display: flex;\n gap: 8px;\n}\n\n.edit-button,\n.delete-button,\n.interface-button,\n.export-button {\n border: none;\n border-radius: 4px;\n padding: 4px 8px;\n cursor: pointer;\n font-size: 12px;\n}\n\n.interface-button {\n background-color: #e6f7ff;\n color: #1890ff;\n}\n\n.interface-button:hover {\n background-color: #bae7ff;\n}\n\n.export-button {\n background-color: #f6ffed;\n color: #52c41a;\n}\n\n.export-button:hover {\n background-color: #d9f7be;\n}\n\n.edit-button {\n background-color: #f0f5ff;\n color: #597ef7;\n}\n\n.edit-button:hover {\n background-color: #d6e4ff;\n}\n\n.delete-button {\n background-color: #fff1f0;\n color: #f5222d;\n}\n\n.delete-button:hover {\n background-color: #ffccc7;\n}\n\n/* 切换开关样式 */\n.switch {\n position: relative;\n display: inline-block;\n width: 36px;\n height: 20px;\n}\n\n.switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n transition: .4s;\n border-radius: 20px;\n}\n\n.slider:before {\n position: absolute;\n content: "";\n height: 16px;\n width: 16px;\n left: 2px;\n bottom: 2px;\n background-color: white;\n transition: .4s;\n border-radius: 50%;\n}\n\ninput:checked + .slider {\n background-color: #1890ff;\n}\n\ninput:checked + .slider:before {\n transform: translateX(16px);\n}\n\n/* 空数据样式 */\n.empty-data {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 0;\n color: #8c8c8c;\n}\n\n.empty-icon {\n font-size: 48px;\n margin-bottom: 16px;\n color: #d9d9d9;\n}\n\n.empty-text {\n font-size: 16px;\n margin-bottom: 24px;\n color: #8c8c8c;\n}\n\n.empty-actions {\n display: flex;\n gap: 16px;\n}\n\n.create-button, .import-button-large {\n height: 36px;\n padding: 0 20px;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n border: none;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.create-button {\n background-color: #1890ff;\n color: white;\n}\n\n.create-button:hover {\n background-color: #40a9ff;\n}\n\n.import-button-large {\n background-color: #52c41a;\n color: white;\n}\n\n.import-button-large:hover {\n background-color: #73d13d;\n}\n\n/* 模态框样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: fadeIn 0.3s;\n}\n\n.modal {\n background-color: white;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\n width: 500px;\n max-width: 90%;\n max-height: 90vh;\n overflow-y: auto;\n animation: slideIn 0.3s;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes slideIn {\n from {\n transform: translateY(-20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.modal-header h2 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1890ff;\n}\n\n.close-button {\n background: none;\n border: none;\n font-size: 20px;\n color: #999;\n cursor: pointer;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n transition: all 0.3s;\n}\n\n.close-button:hover {\n background-color: #f5f5f5;\n color: #555;\n}\n\n.feature-form {\n padding: 24px;\n}\n\n.form-group {\n margin-bottom: 20px;\n}\n\n.form-group label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.checkbox-label {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n color: #333;\n cursor: pointer;\n}\n\n.form-group input[type="text"] {\n width: 100%;\n height: 40px;\n padding: 0 12px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n font-size: 14px;\n transition: all 0.3s;\n}\n\n.form-group input[type="text"]:focus {\n border-color: #40a9ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n outline: none;\n}\n\n.form-group input[type="checkbox"] {\n width: 16px;\n height: 16px;\n margin: 0;\n}\n\n.form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n margin-top: 24px;\n}\n\n.cancel-button {\n height: 40px;\n padding: 0 16px;\n background-color: white;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n transition: all 0.3s;\n}\n\n.cancel-button:hover {\n background-color: #f5f5f5;\n}\n\n.submit-button {\n height: 40px;\n padding: 0 24px;\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n transition: all 0.3s;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n/* 加载中样式 */\n/* 加载状态样式 */\n.loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n gap: 16px;\n}\n\n.loading-text {\n color: #8c8c8c;\n font-size: 16px;\n}\n\n/* 空状态样式 */\n.custom-empty {\n padding: 60px 20px;\n}\n\n.empty-image {\n margin-bottom: 16px;\n}\n\n.empty-description {\n margin-bottom: 24px;\n}\n\n.empty-title {\n font-size: 16px;\n font-weight: 500;\n color: #262626;\n margin-bottom: 8px;\n}\n\n.empty-subtitle {\n font-size: 14px;\n color: #8c8c8c;\n line-height: 1.5;\n}\n\n.empty-actions {\n display: flex;\n gap: 12px;\n justify-content: center;\n flex-wrap: wrap;\n}\n\n/* 分页组件样式 */\n.pagination-wrapper {\n margin-top: 32px;\n padding-top: 24px;\n border-top: 1px solid #f0f0f0;\n display: flex;\n justify-content: center;\n}\n\n.custom-pagination {\n display: flex;\n justify-content: center;\n}\n\n.custom-pagination .ant-pagination-total-text {\n color: #8c8c8c;\n font-size: 14px;\n}\n\n/* 响应式调整 */\n@media (max-width: 768px) {\n .mock-data-container {\n padding: 16px;\n }\n \n .page-title-bar {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n \n .page-actions {\n width: 100%;\n justify-content: flex-start;\n }\n \n .stats-section {\n justify-content: space-around;\n gap: 16px;\n }\n \n .control-group {\n justify-content: flex-start;\n }\n \n .control-panel-card .ant-card-body {\n padding: 16px;\n }\n \n .feature-list-card .ant-card-body {\n padding: 16px;\n }\n \n .feature-card-content {\n height: auto;\n }\n \n .form-actions {\n flex-direction: column;\n }\n \n .cancel-button, .submit-button {\n width: 100%;\n }\n \n .empty-actions {\n flex-direction: column;\n align-items: center;\n }\n \n .empty-actions .ant-btn {\n width: 200px;\n }\n}\n\n@media (max-width: 576px) {\n .stats-section {\n flex-direction: column;\n gap: 12px;\n align-items: stretch;\n }\n \n .stats-item {\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n background: #fafafa;\n border-radius: 6px;\n }\n \n .stats-number {\n font-size: 20px;\n }\n \n .stats-label {\n font-size: 13px;\n }\n \n .control-group {\n flex-direction: column;\n align-items: flex-start;\n gap: 8px;\n }\n \n .page-info {\n order: -1;\n font-weight: 500;\n }\n}\n\n/* 修复功能模块状态标记(ribbon)与按钮的重叠问题 */\n.ant-ribbon.ant-ribbon-placement-end {\n top: 5px; /* 向下调整 ribbon 位置 */\n right: 0px;\n z-index: 5;\n}\n\n/* 确保功能卡片右上角有足够空间容纳 ribbon */\n.ant-card-extra {\n margin-right: 70px; /* 为 ribbon 提供足够空间 */\n}\n\n/* 当屏幕宽度较小时调整 ribbon 位置 */\n@media (max-width: 576px) {\n .ant-ribbon.ant-ribbon-placement-end {\n top: 3px;\n z-index: 5;\n }\n \n .ant-card-extra {\n margin-right: 60px;\n }\n}\n\n/* 视图切换控制样式 */\n.view-mode-controls {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n}\n\n.view-mode-controls .ant-btn-group {\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);\n}\n\n/* 列表视图样式 */\n.feature-list-card .ant-table-wrapper {\n margin-top: 0;\n}\n\n.feature-list-card .ant-table {\n font-size: 14px;\n}\n\n.feature-list-card .ant-table-thead > tr > th {\n background-color: #fafafa;\n font-weight: 600;\n color: #262626;\n padding: 16px;\n}\n\n.feature-list-card .ant-table-tbody > tr > td {\n padding: 16px;\n}\n\n.feature-list-card .ant-table-tbody > tr:hover {\n background-color: #f5f5f5;\n}\n\n.feature-list-card .ant-table-tbody > tr.inactive-row {\n background-color: #fafafa;\n opacity: 0.7;\n}\n\n.feature-list-card .ant-table-tbody > tr.inactive-row:hover {\n background-color: #f0f0f0;\n}\n\n/* 列表视图中的操作按钮样式 */\n.feature-list-card .ant-btn-link {\n padding: 4px 8px;\n height: auto;\n}\n\n/* 响应式调整 */\n@media (max-width: 768px) {\n .view-mode-controls {\n justify-content: center;\n margin-top: 12px;\n }\n \n .feature-list-card .ant-table {\n font-size: 13px;\n }\n \n .feature-list-card .ant-table-thead > tr > th,\n .feature-list-card .ant-table-tbody > tr > td {\n padding: 12px 8px;\n }\n} ',""]);const c=i},3363:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>y});var r=t(5072),o=t.n(r),a=t(7825),i=t.n(a),c=t(7659),l=t.n(c),s=t(5056),u=t.n(s),d=t(540),p=t.n(d),f=t(1113),m=t.n(f),h=t(7702),b={};b.styleTagTransform=m(),b.setAttributes=u(),b.insert=l().bind(null,"head"),b.domAPI=i(),b.insertStyleElement=p(),o()(h.A,b);const y=h.A&&h.A.locals?h.A.locals:void 0},4034:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,"/* 全局样式变量 */\n:root {\n --primary-color: #1890ff;\n --primary-hover: #40a9ff;\n --primary-active: #096dd9;\n --success-color: #52c41a;\n --warning-color: #faad14;\n --error-color: #f5222d;\n --font-color: #262626;\n --text-secondary: #595959;\n --text-light: #8c8c8c;\n --border-color: #f0f0f0;\n --border-radius: 8px;\n --card-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n --transition-time: 0.3s;\n}\n\n\n/* 页面容器 */\n.interface-management-container {\n padding: 24px;\n min-height: calc(100vh - 120px);\n}\n\n/* 统一控制台 */\n.interface-control-panel {\n margin-bottom: 16px;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.control-panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.control-left {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.control-right {\n display: flex;\n align-items: center;\n}\n\n.feature-selector {\n display: flex;\n align-items: center;\n background: #f9f9f9;\n padding: 6px 12px;\n border-radius: var(--border-radius);\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);\n transition: all var(--transition-time);\n}\n\n.feature-selector:hover {\n box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);\n}\n\n.feature-selector span {\n margin-right: 8px;\n font-weight: 600;\n color: var(--text-secondary);\n font-size: 14px;\n}\n\n.control-panel-stats {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 0 8px 0;\n min-height: 40px;\n}\n\n.stats-left {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.stats-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.stat-item {\n display: inline-flex;\n align-items: center;\n font-size: 14px;\n}\n\n.stat-label {\n color: var(--text-secondary);\n margin-right: 6px;\n}\n\n.stat-value {\n font-weight: 600;\n color: var(--font-color);\n}\n\n.selected-count {\n font-weight: 600;\n color: var(--primary-color);\n font-size: 13px;\n}\n\n/* 旧版样式兼容 */\n.interface-header-card {\n margin-bottom: 16px;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n}\n\n.interface-management-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 0;\n}\n\n.feature-selector-container {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.interface-actions {\n display: flex;\n align-items: center;\n}\n\n.add-interface-button {\n background: linear-gradient(to right, var(--primary-color), var(--primary-hover));\n border: none;\n box-shadow: 0 2px 6px rgba(24, 144, 255, 0.25);\n transition: all var(--transition-time);\n}\n\n.add-interface-button:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 10px rgba(24, 144, 255, 0.4);\n}\n\n/* 分组筛选区域 */\n.filter-card {\n margin-bottom: 16px;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filter-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.filter-title {\n font-weight: 600;\n font-size: 15px;\n color: var(--text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.group-tags-container {\n margin-bottom: 12px;\n max-height: 120px;\n overflow-y: auto;\n padding: 8px 0;\n}\n\n.group-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.group-tag {\n cursor: pointer;\n user-select: none;\n transition: all 0.2s;\n padding: 6px 12px;\n font-size: 13px;\n}\n\n.group-tag:hover {\n transform: translateY(-2px);\n}\n\n.group-tag.active {\n font-weight: 600;\n}\n\n.group-actions {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n justify-content: flex-end;\n}\n\n.empty-groups {\n color: #999;\n font-style: italic;\n padding: 8px 0;\n}\n\n/* 接口列表区域 */\n.list-header-card {\n margin-bottom: 16px;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.list-header-info {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n\n.feature-info {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.feature-info .label {\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.feature-info .value {\n font-weight: 600;\n color: var(--font-color);\n}\n\n.group-badge {\n margin-left: 12px;\n}\n\n.interface-stats {\n font-size: 13px;\n}\n\n.selected-count {\n font-weight: 600;\n color: var(--primary-color);\n}\n\n.batch-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.list-container-card {\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n margin-bottom: 40px;\n}\n\n.interface-list-container {\n padding: 0;\n}\n\n/* 表格样式增强 */\n.interface-table th {\n background-color: #f5f7fa !important;\n font-weight: 600;\n padding: 12px 16px !important;\n color: #333;\n white-space: nowrap;\n}\n\n.interface-table td {\n padding: 12px 16px !important;\n white-space: nowrap;\n overflow: hidden;\n}\n\n/* 当前响应列需要 overflow: visible 以显示完整的下拉菜单 */\n.interface-table td.current-response-cell {\n overflow: visible !important;\n}\n\n/* 卡片视图样式 */\n.interface-card-view {\n padding-bottom: 20px;\n}\n\n.interface-card {\n border-radius: 8px;\n transition: all 0.3s;\n height: 100%;\n}\n\n.interface-card:hover {\n transform: translateY(-3px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n}\n\n.interface-card.inactive {\n background-color: #f5f5f5;\n border: 1px solid #e8e8e8;\n opacity: 0.8;\n}\n\n.interface-card-header {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 12px;\n position: relative;\n}\n\n.interface-card-title {\n font-weight: 600;\n font-size: 15px;\n margin-right: 40px;\n line-height: 1.4;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.interface-card-switch {\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.interface-card-group {\n cursor: pointer;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n align-self: flex-start;\n}\n\n.url-pattern-container {\n background: #f5f7fa;\n padding: 8px;\n border-radius: 4px;\n margin-bottom: 10px;\n}\n\n.interface-card .url-pattern {\n font-family: monospace;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: 12px;\n color: #333;\n}\n\n.interface-card-info {\n margin-bottom: 12px;\n}\n\n.info-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 4px;\n}\n\n.info-label {\n font-size: 12px;\n color: #666;\n}\n\n.status-badge {\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 12px;\n}\n\n.status-success {\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n color: #52c41a;\n}\n\n.status-warning {\n background: #fff7e6;\n border: 1px solid #ffd591;\n color: #faad14;\n}\n\n.status-error {\n background: #fff1f0;\n border: 1px solid #ffa39e;\n color: #f5222d;\n}\n\n.interface-card-actions {\n display: flex;\n justify-content: space-between;\n margin-top: 12px;\n gap: 8px;\n}\n\n.card-pagination {\n display: flex;\n justify-content: center;\n margin-top: 20px;\n padding: 0 16px 16px;\n}\n\n.test-interface-container {\n padding: 20px;\n background: #f9f9f9;\n border-radius: var(--border-radius);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);\n margin-top: 24px;\n}\n\n.test-result {\n margin-top: 24px;\n padding: 20px;\n border-radius: var(--border-radius);\n background-color: #fff;\n border: 1px solid var(--border-color);\n box-shadow: var(--card-shadow);\n}\n\n.result-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 1px solid var(--border-color);\n}\n\n.result-header h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--font-color);\n}\n\n.status {\n font-size: 14px;\n padding: 4px 12px;\n border-radius: 20px;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status.success {\n background-color: #f6ffed;\n border: 1px solid #b7eb8f;\n color: var(--success-color);\n}\n\n.status.error {\n background-color: #fff2f0;\n border: 1px solid #ffccc7;\n color: var(--error-color);\n}\n\n.result-content {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.result-item {\n display: flex;\n align-items: flex-start;\n padding: 8px 12px;\n background: #fafafa;\n border-radius: 6px;\n transition: background-color var(--transition-time);\n}\n\n.result-item:hover {\n background: #f0f0f0;\n}\n\n.result-item .label {\n font-weight: 600;\n width: 120px;\n flex-shrink: 0;\n color: var(--text-secondary);\n}\n\n.result-item .value {\n word-break: break-all;\n color: var(--font-color);\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n}\n\n.result-body {\n margin-top: 16px;\n}\n\n.result-body .label {\n font-weight: 600;\n margin-bottom: 12px;\n color: var(--text-secondary);\n}\n\n.result-body pre {\n margin: 0;\n padding: 16px;\n background-color: #f5f5f5;\n border-radius: var(--border-radius);\n max-height: 400px;\n overflow: auto;\n white-space: pre-wrap;\n word-wrap: break-word;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n font-size: 14px;\n line-height: 1.6;\n border: 1px solid #e8e8e8;\n}\n\n.result-error {\n color: var(--error-color);\n padding: 12px 16px;\n background-color: #fff2f0;\n border-radius: var(--border-radius);\n border-left: 4px solid var(--error-color);\n}\n\n.breadcrumb {\n display: flex;\n align-items: center;\n font-size: 14px;\n margin-bottom: 16px;\n}\n\n.breadcrumb .link {\n color: var(--primary-color);\n cursor: pointer;\n transition: color var(--transition-time);\n}\n\n.breadcrumb .link:hover {\n color: var(--primary-hover);\n text-decoration: underline;\n}\n\n.breadcrumb .separator {\n margin: 0 12px;\n color: #d9d9d9;\n}\n\n.breadcrumb .current {\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.add-button {\n background: linear-gradient(to right, var(--primary-color), var(--primary-hover));\n color: white;\n border: none;\n border-radius: var(--border-radius);\n padding: 0 20px;\n height: 40px;\n cursor: pointer;\n font-size: 15px;\n font-weight: 500;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all var(--transition-time);\n box-shadow: 0 2px 8px rgba(24, 144, 255, 0.35);\n}\n\n.add-button:hover {\n background: linear-gradient(to right, var(--primary-hover), var(--primary-active));\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(24, 144, 255, 0.5);\n}\n\n.feature-details {\n background-color: white;\n border-radius: var(--border-radius);\n box-shadow: var(--card-shadow);\n padding: 24px;\n margin-bottom: 24px;\n border-left: 4px solid var(--primary-color);\n}\n\n.feature-name {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-bottom: 12px;\n}\n\n.feature-name h1 {\n font-size: 22px;\n font-weight: 600;\n color: var(--font-color);\n margin: 0;\n}\n\n.status-badge {\n font-size: 13px;\n padding: 4px 12px;\n border-radius: 20px;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.status-badge.active {\n background-color: #f6ffed;\n color: var(--success-color);\n border: 1px solid #b7eb8f;\n}\n\n.status-badge.inactive {\n background-color: #fff1f0;\n color: var(--error-color);\n border: 1px solid #ffa39e;\n}\n\n.feature-description {\n color: var(--text-secondary);\n font-size: 15px;\n margin: 0;\n line-height: 1.6;\n}\n\n/* 重复的表格样式已移除,使用上面的统一定义 */\n\n.interface-table tr.inactive {\n color: var(--text-light);\n background-color: #f9f9f9;\n opacity: 0.7;\n}\n\n.url-pattern {\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n padding: 4px 8px;\n background: #f5f5f5;\n border-radius: 4px;\n display: inline-block;\n max-width: 300px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* 接口状态开关 */\n.status-switch {\n position: relative;\n display: inline-block;\n width: 48px;\n height: 24px;\n}\n\n.status-switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.status-switch .slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n transition: .4s;\n border-radius: 24px;\n}\n\n.status-switch .slider:before {\n position: absolute;\n content: \"\";\n height: 18px;\n width: 18px;\n left: 3px;\n bottom: 3px;\n background-color: white;\n transition: .4s;\n border-radius: 50%;\n}\n\n.status-switch input:checked + .slider {\n background-color: var(--success-color);\n}\n\n.status-switch input:checked + .slider:before {\n transform: translateX(24px);\n}\n\n/* 操作按钮 */\n.action-button {\n border: none;\n border-radius: 6px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n transition: all var(--transition-time);\n margin-right: 8px;\n}\n\n.test-button {\n background-color: #e6f7ff;\n color: var(--primary-color);\n border: 1px solid #91d5ff;\n}\n\n.test-button:hover {\n background-color: #bae7ff;\n}\n\n.edit-button {\n background-color: #fcf6bd;\n color: #d4b106;\n border: 1px solid #ffd666;\n}\n\n.edit-button:hover {\n background-color: #fff1b8;\n}\n\n.delete-button {\n background-color: #fff2f0;\n color: var(--error-color);\n border: 1px solid #ffccc7;\n}\n\n.delete-button:hover {\n background-color: #ffa39e;\n color: #fff;\n}\n\n/* 空状态 */\n.empty-data {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n background: #fafafa;\n border-radius: var(--border-radius);\n text-align: center;\n margin-top: 24px;\n}\n\n.empty-icon {\n font-size: 64px;\n color: #d9d9d9;\n margin-bottom: 24px;\n}\n\n.empty-text {\n color: var(--text-secondary);\n font-size: 16px;\n margin-bottom: 24px;\n}\n\n.create-interface-button {\n background: linear-gradient(to right, var(--primary-color), var(--primary-hover));\n color: white;\n border: none;\n border-radius: var(--border-radius);\n padding: 0 24px;\n height: 44px;\n cursor: pointer;\n font-size: 16px;\n font-weight: 500;\n display: flex;\n align-items: center;\n gap: 8px;\n transition: all var(--transition-time);\n box-shadow: 0 2px 8px rgba(24, 144, 255, 0.35);\n}\n\n.create-interface-button:hover {\n background: linear-gradient(to right, var(--primary-hover), var(--primary-active));\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(24, 144, 255, 0.5);\n}\n\n/* 加载状态 */\n.loading {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 40px;\n font-size: 16px;\n color: var(--text-secondary);\n}\n\n/* 错误容器样式 */\n.error-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n color: #8c8c8c;\n}\n\n.error-icon {\n font-size: 48px;\n margin-bottom: 16px;\n}\n\n.error-message {\n font-size: 16px;\n margin-bottom: 24px;\n}\n\n.back-button {\n height: 36px;\n padding: 0 20px;\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n.back-button:hover {\n background-color: #40a9ff;\n}\n\n/* 模态框样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n.modal {\n background-color: white;\n border-radius: 4px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n width: 600px;\n max-width: 90%;\n max-height: 90vh;\n overflow-y: auto;\n}\n\n.interface-modal {\n width: 700px;\n}\n\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.modal-header h2 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #262626;\n}\n\n.close-button {\n background: none;\n border: none;\n font-size: 20px;\n color: #8c8c8c;\n cursor: pointer;\n}\n\n.interface-form {\n padding: 16px;\n}\n\n.form-row {\n display: flex;\n gap: 16px;\n}\n\n.form-row .form-group {\n flex: 1;\n}\n\n.form-group {\n margin-bottom: 16px;\n}\n\n.form-group label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #262626;\n}\n\n.response-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.format-button {\n background-color: #f0f5ff;\n color: #597ef7;\n border: none;\n border-radius: 4px;\n padding: 4px 8px;\n cursor: pointer;\n font-size: 12px;\n}\n\n.format-button:hover {\n background-color: #d6e4ff;\n}\n\n.checkbox-label,\n.radio-label {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: normal;\n color: #262626;\n margin-bottom: 8px;\n}\n\n.radio-group {\n display: flex;\n gap: 24px;\n}\n\n.form-group input[type=\"text\"],\n.form-group input[type=\"number\"],\n.form-group select {\n width: 100%;\n height: 32px;\n padding: 0 12px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n font-size: 14px;\n}\n\n.form-group textarea {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n font-size: 14px;\n resize: vertical;\n font-family: monospace;\n}\n\n.help-text {\n font-size: 12px;\n color: #8c8c8c;\n margin-top: 4px;\n display: block;\n}\n\n.form-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n}\n\n.cancel-button {\n height: 32px;\n padding: 0 16px;\n background-color: white;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n.submit-button {\n height: 32px;\n padding: 0 16px;\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n/* 全屏TextArea样式 */\n.textarea-fullscreen-btn {\n position: absolute;\n top: 8px;\n right: 32px;\n background: rgba(255, 255, 255, 0.9);\n border: 1px solid #d9d9d9;\n z-index: 10;\n}\n\n.textarea-fullscreen-btn:hover {\n background: rgba(255, 255, 255, 1);\n border-color: #40a9ff;\n}\n\n.textarea-fullscreen-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: #1f1f1f;\n z-index: 1000;\n display: flex;\n flex-direction: column;\n}\n\n.textarea-fullscreen-header {\n padding: 12px 16px;\n border-bottom: 1px solid #333;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n}\n\n.textarea-fullscreen-editor {\n flex: 1;\n border: none !important;\n background: #1f1f1f !important;\n color: #ffffff !important;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace !important;\n font-size: 14px !important;\n line-height: 1.6 !important;\n resize: none !important;\n padding: 16px !important;\n outline: none !important;\n box-shadow: none !important;\n}\n\n.textarea-fullscreen-editor:focus {\n background: #1f1f1f !important;\n border: none !important;\n box-shadow: none !important;\n}\n\n/* 延迟时间样式 */\n.delay-active {\n color: #1890ff;\n font-weight: 500;\n}\n\n.delay-inactive {\n color: #999;\n font-style: italic;\n}\n\n/* 状态码样式 */\n.status-success {\n color: #52c41a;\n font-weight: 500;\n}\n\n.status-warning {\n color: #faad14;\n font-weight: 500;\n}\n\n.status-error {\n color: #f5222d;\n font-weight: 500;\n}\n\n/* 接口名称样式 */\n.interface-name {\n font-weight: 500;\n}\n\n/* URL模式样式 */\n.url-pattern {\n font-family: monospace;\n color: #333;\n}\n\n/* 无响应数据样式 */\n.no-response {\n color: #999;\n font-style: italic;\n}\n\n/* 内联列设置按钮样式 */\n.inline-column-settings-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n border-radius: 4px;\n border: 1px solid #d9d9d9;\n background: #ffffff;\n color: #666;\n font-size: 12px;\n transition: all 0.2s ease;\n}\n\n.inline-column-settings-btn:hover {\n border-color: #4096ff;\n background: #f0f9ff;\n color: #4096ff;\n}\n\n.inline-column-settings-btn:active {\n border-color: #1677ff;\n background: #e6f4ff;\n}\n\n/* 紧凑排序 Chips */\n.sortable-chip {\n display: inline-flex;\n align-items: center;\n padding: 2px 10px;\n height: 24px;\n border: 1px solid #e6e6e6;\n border-radius: 12px;\n background: #fff;\n font-size: 12px;\n color: #595959;\n cursor: move;\n user-select: none;\n white-space: nowrap;\n}\n\n.sortable-chip:hover {\n border-color: #bfbfbf;\n box-shadow: 0 1px 2px rgba(0,0,0,0.06);\n}\n\n.sortable-chip-active {\n background: #e6f7ff;\n border-color: #91d5ff;\n color: #1677ff;\n}\n\n.sortable-ghost {\n opacity: 0.6;\n}\n\n/* 接口弹窗样式 */\n.interface-modal .ant-modal-header {\n border-bottom: 1px solid #f0f0f0;\n padding: 16px 24px;\n margin-bottom: 0;\n}\n\n.interface-modal .ant-modal-body {\n padding: 0;\n}\n\n.interface-modal .ant-card {\n border: 1px solid #e8e8e8;\n border-radius: 8px;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);\n}\n\n.interface-modal .ant-card-head {\n background: #fafafa;\n border-bottom: 1px solid #f0f0f0;\n padding: 0 20px;\n min-height: 48px;\n}\n\n.interface-modal .ant-card-head-title {\n font-size: 14px;\n font-weight: 600;\n color: #262626;\n padding: 12px 0;\n}\n\n.interface-modal .ant-form-item-label > label {\n font-size: 13px;\n font-weight: 500;\n color: #434343;\n}\n\n.interface-modal .ant-form-item {\n margin-bottom: 16px;\n}\n\n.interface-modal .ant-input,\n.interface-modal .ant-select-selector {\n border-radius: 6px;\n border: 1px solid #d9d9d9;\n}\n\n.interface-modal .ant-input:focus,\n.interface-modal .ant-select-focused .ant-select-selector {\n border-color: #4096ff;\n box-shadow: 0 0 0 2px rgba(64, 150, 255, 0.1);\n}\n\n/* 接口弹窗中的折叠面板样式 */\n.interface-modal .ant-collapse {\n background: transparent;\n border: none;\n}\n\n.interface-modal .ant-collapse-item {\n margin-bottom: 16px;\n background: #ffffff;\n border: 1px solid #e8e8e8;\n border-radius: 8px;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);\n}\n\n.interface-modal .ant-collapse-header {\n background: #fafafa;\n border-bottom: 1px solid #f0f0f0;\n border-radius: 8px 8px 0 0 !important;\n padding: 16px 20px !important;\n font-size: 14px;\n font-weight: 600;\n color: #262626;\n}\n\n.interface-modal .ant-collapse-content {\n border-top: none;\n background: #ffffff;\n border-radius: 0 0 8px 8px;\n}\n\n.interface-modal .ant-collapse-content-box {\n padding: 20px;\n}\n\n.interface-modal .ant-collapse-arrow {\n color: #666 !important;\n font-size: 12px !important;\n}\n\n/* 参数匹配规则帮助按钮样式 */\n.interface-modal .ant-popover-inner-content {\n padding: 12px;\n}\n\n.interface-modal .ant-popover-title {\n font-weight: 600;\n color: #262626;\n padding: 8px 12px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n/* 分页器样式 */\n.interface-table .ant-pagination-options {\n margin-right: 16px;\n}\n\n/* 可调整列宽样式 */\n.column-resize-handle {\n position: absolute;\n right: -5px;\n top: 0;\n bottom: 0;\n width: 10px;\n cursor: col-resize;\n z-index: 1;\n user-select: none;\n}\n\n.column-resize-handle:hover {\n background-color: rgba(24, 144, 255, 0.2);\n}\n\n.column-resize-handle::after {\n content: '';\n position: absolute;\n right: 4px;\n top: 50%;\n transform: translateY(-50%);\n width: 2px;\n height: 20px;\n background-color: #d9d9d9;\n transition: background-color 0.3s;\n}\n\n.column-resize-handle:hover::after {\n background-color: #1890ff;\n}\n",""]);const c=i},7702:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,"/* ============================================================\n Whistle Mock Plugin - Cyberpunk Theme Override\n 覆盖 Ant Design 5 和项目自定义样式为赛博朋克风格\n ============================================================ */\n\n/* ── 全局背景与文字 ── */\nbody.cyber-theme, body.cyber-theme #root{\n background-color: #050508 !important;\n color: #e0e0e0 !important;\n font-family: 'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\nbody.cyber-theme{\n --primary-color: #00f0ff;\n --primary-hover: #33f3ff;\n --primary-active: #00c2cc;\n --success-color: #00ff41;\n --warning-color: #f0e800;\n --error-color: #ff4d4f;\n --font-color: #e0e0e0;\n --text-secondary: #a0a0a0;\n --text-light: #6b7280;\n --border-color: #1a1a2e;\n --border-radius: 6px;\n --card-shadow: 0 0 0 1px rgba(0, 240, 255, 0.1);\n --transition-time: 0.3s;\n --ant-color-primary: #00f0ff;\n --ant-color-primary-hover: #33f3ff;\n --ant-color-primary-active: #00c2cc;\n --ant-color-success: #00ff41;\n --ant-color-warning: #f0e800;\n --ant-color-error: #ff4d4f;\n --ant-color-info: #00f0ff;\n --ant-color-text: #e0e0e0;\n --ant-color-text-secondary: #a0a0a0;\n --ant-color-border: #1a1a2e;\n --ant-color-bg-base: #0a0a12;\n --ant-color-bg-container: #0f0f1a;\n --ant-color-bg-elevated: #141420;\n --ant-color-bg-layout: #0a0a12;\n background-color: #050508 !important;\n}\n\nbody.cyber-theme h1, body.cyber-theme h2, body.cyber-theme h3, body.cyber-theme h4, body.cyber-theme h5, body.cyber-theme h6{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme a{\n color: #00f0ff !important;\n}\nbody.cyber-theme a:hover{\n color: #33f3ff !important;\n}\n\n/* ── 滚动条 ── */\nbody.cyber-theme ::-webkit-scrollbar{\n width: 6px;\n height: 6px;\n}\nbody.cyber-theme ::-webkit-scrollbar-track{\n background: #0a0a12;\n}\nbody.cyber-theme ::-webkit-scrollbar-thumb{\n background: #1a1a2e;\n border-radius: 3px;\n}\nbody.cyber-theme ::-webkit-scrollbar-thumb:hover{\n background: #00f0ff;\n}\n\n/* ── Ant Design Layout ── */\nbody.cyber-theme .ant-layout{\n background: #0a0a12 !important;\n}\n\nbody.cyber-theme .ant-layout-header{\n background: #0f0f1a !important;\n border-bottom: 1px solid #1a1a2e !important;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) !important;\n}\n\nbody.cyber-theme .ant-layout-sider{\n background: #0f0f1a !important;\n border-right: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-layout-content{\n background: #0f0f1a !important;\n}\n\n/* ── Ant Menu ── */\nbody.cyber-theme .ant-menu{\n background: #0f0f1a !important;\n border-right: none !important;\n}\n\nbody.cyber-theme .ant-menu-item{\n color: #a0a0a0 !important;\n border-radius: 4px !important;\n margin: 4px 8px !important;\n}\n\nbody.cyber-theme .ant-menu-item:hover{\n color: #00f0ff !important;\n background: rgba(0, 240, 255, 0.08) !important;\n}\n\nbody.cyber-theme .ant-menu-item-selected{\n color: #00f0ff !important;\n background: rgba(0, 240, 255, 0.12) !important;\n font-weight: 500;\n}\n\nbody.cyber-theme .ant-menu-item-selected::after{\n display: none !important;\n}\n\nbody.cyber-theme .ant-menu-submenu-title{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-menu-submenu-selected > .ant-menu-submenu-title{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-menu-inline .ant-menu-item::after{\n display: none !important;\n}\n\n/* ── Ant Card ── */\nbody.cyber-theme .ant-card{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n border-radius: 6px !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-card:hover{\n border-color: rgba(0, 240, 255, 0.3) !important;\n box-shadow: 0 0 0 1px rgba(0, 240, 255, 0.1), 0 4px 16px rgba(0, 0, 0, 0.4) !important;\n}\n\nbody.cyber-theme .ant-card-head{\n background: #0f0f1a !important;\n border-bottom: 1px solid #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-card-body{\n background: #0f0f1a !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-card-meta-title{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-card-meta-description{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-card-actions{\n background: #0a0a12 !important;\n border-top: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-card-actions > li > span{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-card-actions > li > span:hover{\n color: #00f0ff !important;\n}\n\n/* ── Ant Button ── */\nbody.cyber-theme .ant-btn{\n border-radius: 4px !important;\n}\n\nbody.cyber-theme .ant-btn-primary{\n background: #00f0ff !important;\n border-color: #00f0ff !important;\n color: #050508 !important;\n font-weight: 500;\n}\n\nbody.cyber-theme .ant-btn-primary:hover{\n background: #33f3ff !important;\n border-color: #33f3ff !important;\n box-shadow: 0 0 12px rgba(0, 240, 255, 0.4) !important;\n}\n\nbody.cyber-theme .ant-btn-default{\n background: transparent !important;\n border-color: #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-btn-default:hover{\n border-color: #00f0ff !important;\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-btn-text{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-btn-text:hover{\n color: #00f0ff !important;\n background: rgba(0, 240, 255, 0.08) !important;\n}\n\nbody.cyber-theme .ant-btn-dangerous{\n background: transparent !important;\n border-color: #ff4d4f !important;\n color: #ff4d4f !important;\n}\n\nbody.cyber-theme .ant-btn-dangerous:hover{\n background: rgba(255, 77, 79, 0.1) !important;\n}\n\n/* ── Ant Table ── */\nbody.cyber-theme .ant-table{\n background: #0f0f1a !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-table-thead > tr > th{\n background: #141420 !important;\n color: #a0a0a0 !important;\n border-bottom: 1px solid #1a1a2e !important;\n font-weight: 600;\n}\n\nbody.cyber-theme .ant-table-tbody > tr > td{\n background: #0f0f1a !important;\n color: #e0e0e0 !important;\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-table-tbody > tr:hover > td{\n background: rgba(0, 240, 255, 0.05) !important;\n}\n\nbody.cyber-theme .ant-table-tbody > tr.ant-table-row-selected > td{\n background: rgba(0, 240, 255, 0.08) !important;\n}\n\nbody.cyber-theme .ant-table-cell{\n background: #0f0f1a !important;\n}\n\nbody.cyber-theme .ant-table-empty .ant-empty-description{\n color: #6b7280 !important;\n}\n\n/* ── Ant Modal ── */\nbody.cyber-theme .ant-modal-content{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n box-shadow: 0 0 0 1px rgba(0, 240, 255, 0.1), 0 16px 48px rgba(0, 0, 0, 0.6) !important;\n}\n\nbody.cyber-theme .ant-modal-header{\n background: #0f0f1a !important;\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-modal-title{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-modal-close-x{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-modal-close-x:hover{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-modal-footer{\n border-top: 1px solid #1a1a2e !important;\n}\n\n/* ── Ant Form ── */\nbody.cyber-theme .ant-form-item-label > label{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-input{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-input:hover{\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-input:focus{\n border-color: #00f0ff !important;\n box-shadow: 0 0 0 2px rgba(0, 240, 255, 0.15) !important;\n}\n\nbody.cyber-theme .ant-input::placeholder{\n color: #4a4a5a !important;\n}\n\nbody.cyber-theme .ant-input-affix-wrapper{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-input-affix-wrapper:hover{\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-input-affix-wrapper-focused{\n border-color: #00f0ff !important;\n box-shadow: 0 0 0 2px rgba(0, 240, 255, 0.15) !important;\n}\n\nbody.cyber-theme .ant-input-textarea{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\n/* ── Ant Select ── */\nbody.cyber-theme .ant-select-selector{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-select:hover .ant-select-selector{\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-select-focused .ant-select-selector{\n border-color: #00f0ff !important;\n box-shadow: 0 0 0 2px rgba(0, 240, 255, 0.15) !important;\n}\n\nbody.cyber-theme .ant-select-dropdown{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-select-item{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-select-item-option-active{\n background: rgba(0, 240, 255, 0.08) !important;\n}\n\nbody.cyber-theme .ant-select-item-option-selected{\n background: rgba(0, 240, 255, 0.12) !important;\n color: #00f0ff !important;\n font-weight: 500;\n}\n\n/* ── Ant Switch ── */\nbody.cyber-theme .ant-switch{\n background: #2a2a3e !important;\n}\n\nbody.cyber-theme .ant-switch-checked{\n background: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-switch-checked .ant-switch-inner{\n color: #050508 !important;\n}\n\n/* ── Ant Tag ── */\nbody.cyber-theme .ant-tag{\n background: rgba(0, 240, 255, 0.08) !important;\n border-color: rgba(0, 240, 255, 0.2) !important;\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-tag-green{\n background: rgba(0, 255, 65, 0.08) !important;\n border-color: rgba(0, 255, 65, 0.2) !important;\n color: #00ff41 !important;\n}\n\nbody.cyber-theme .ant-tag-red{\n background: rgba(255, 77, 79, 0.08) !important;\n border-color: rgba(255, 77, 79, 0.2) !important;\n color: #ff4d4f !important;\n}\n\nbody.cyber-theme .ant-tag-orange{\n background: rgba(240, 232, 0, 0.08) !important;\n border-color: rgba(240, 232, 0, 0.2) !important;\n color: #f0e800 !important;\n}\n\n/* ── Ant Badge ── */\nbody.cyber-theme .ant-badge-status-dot{\n box-shadow: 0 0 4px currentColor;\n}\n\n/* ── Ant Pagination ── */\nbody.cyber-theme .ant-pagination-item{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-pagination-item a{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-pagination-item:hover{\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-pagination-item:hover a{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-pagination-item-active{\n background: #00f0ff !important;\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-pagination-item-active a{\n color: #050508 !important;\n}\n\nbody.cyber-theme .ant-pagination-prev .ant-pagination-item-link, body.cyber-theme .ant-pagination-next .ant-pagination-item-link{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-pagination-prev:hover .ant-pagination-item-link, body.cyber-theme .ant-pagination-next:hover .ant-pagination-item-link{\n border-color: #00f0ff !important;\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-pagination-disabled .ant-pagination-item-link{\n color: #4a4a5a !important;\n}\n\n/* ── Ant Breadcrumb ── */\nbody.cyber-theme .ant-breadcrumb{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .ant-breadcrumb a{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-breadcrumb a:hover{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-breadcrumb-separator{\n color: #4a4a5a !important;\n}\n\nbody.cyber-theme .ant-breadcrumb li:last-child{\n color: #e0e0e0 !important;\n}\n\n/* ── Ant Popover / Tooltip ── */\nbody.cyber-theme .ant-popover-inner{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-popover-title{\n color: #e0e0e0 !important;\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-popover-inner-content{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-tooltip-inner{\n background: #141420 !important;\n border: 1px solid #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\n/* ── Ant Drawer ── */\nbody.cyber-theme .ant-drawer-content{\n background: #0f0f1a !important;\n border-left: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-drawer-header{\n background: #0f0f1a !important;\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-drawer-title{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-drawer-body{\n background: #0f0f1a !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-drawer-close{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-drawer-close:hover{\n color: #00f0ff !important;\n}\n\n/* ── Ant Alert ── */\nbody.cyber-theme .ant-alert{\n background: #0a0a12 !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-alert-info{\n background: rgba(0, 240, 255, 0.06) !important;\n border-color: rgba(0, 240, 255, 0.2) !important;\n}\n\nbody.cyber-theme .ant-alert-success{\n background: rgba(0, 255, 65, 0.06) !important;\n border-color: rgba(0, 255, 65, 0.2) !important;\n}\n\nbody.cyber-theme .ant-alert-warning{\n background: rgba(240, 232, 0, 0.06) !important;\n border-color: rgba(240, 232, 0, 0.2) !important;\n}\n\nbody.cyber-theme .ant-alert-error{\n background: rgba(255, 77, 79, 0.06) !important;\n border-color: rgba(255, 77, 79, 0.2) !important;\n}\n\nbody.cyber-theme .ant-alert-message{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-alert-description{\n color: #a0a0a0 !important;\n}\n\n/* ── Ant Radio / Checkbox ── */\nbody.cyber-theme .ant-radio-wrapper{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-radio-checked .ant-radio-inner{\n border-color: #00f0ff !important;\n background: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-radio-checked .ant-radio-inner::after{\n background: #050508 !important;\n}\n\nbody.cyber-theme .ant-checkbox-wrapper{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-checkbox-checked .ant-checkbox-inner{\n background: #00f0ff !important;\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-checkbox-checked .ant-checkbox-inner::after{\n border-color: #050508 !important;\n}\n\n/* ── Ant Divider ── */\nbody.cyber-theme .ant-divider{\n border-color: #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-divider-horizontal.ant-divider-with-text{\n color: #a0a0a0 !important;\n border-color: #1a1a2e !important;\n}\n\n/* ── Ant Dropdown / Menu ── */\nbody.cyber-theme .ant-dropdown-menu{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-dropdown-menu-item{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-dropdown-menu-item:hover{\n background: rgba(0, 240, 255, 0.08) !important;\n color: #00f0ff !important;\n}\n\n/* ── Ant Steps ── */\nbody.cyber-theme .ant-steps-item-title{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-steps-item-description{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .ant-steps-item-finish .ant-steps-item-icon{\n background: rgba(0, 240, 255, 0.1) !important;\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-steps-item-finish .ant-steps-item-icon .ant-steps-icon{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-steps-item-process .ant-steps-item-icon{\n background: #00f0ff !important;\n border-color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-steps-item-process .ant-steps-item-icon .ant-steps-icon{\n color: #050508 !important;\n}\n\n/* ── Ant Tabs ── */\nbody.cyber-theme .ant-tabs-tab{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-tabs-tab:hover{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-tabs-tab-active .ant-tabs-tab-btn{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-tabs-ink-bar{\n background: #00f0ff !important;\n}\n\nbody.cyber-theme .ant-tabs-content{\n color: #e0e0e0 !important;\n}\n\n/* ── Ant Collapse ── */\nbody.cyber-theme .ant-collapse{\n background: #0f0f1a !important;\n border-color: #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-collapse > .ant-collapse-item{\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-collapse-header{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-collapse-content{\n background: #0a0a12 !important;\n border-top: 1px solid #1a1a2e !important;\n color: #a0a0a0 !important;\n}\n\n/* ── Ant Descriptions ── */\nbody.cyber-theme .ant-descriptions-item-label{\n background: #141420 !important;\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-descriptions-item-content{\n background: #0f0f1a !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-descriptions-bordered .ant-descriptions-item-label, body.cyber-theme .ant-descriptions-bordered .ant-descriptions-item-content{\n border-color: #1a1a2e !important;\n}\n\n/* ── Ant List ── */\nbody.cyber-theme .ant-list{\n background: #0f0f1a !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-list-item{\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-list-empty-text{\n color: #6b7280 !important;\n}\n\n/* ── Ant Statistic ── */\nbody.cyber-theme .ant-statistic-title{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .ant-statistic-content{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .ant-statistic-content-value{\n color: #00f0ff !important;\n}\n\n/* ── Ant Empty ── */\nbody.cyber-theme .ant-empty-description{\n color: #6b7280 !important;\n}\n\n/* ── Ant Spin ── */\nbody.cyber-theme .ant-spin-dot-item{\n background: #00f0ff !important;\n}\n\n/* ── Ant Message ── */\nbody.cyber-theme .ant-message-notice-content{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n color: #e0e0e0 !important;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5) !important;\n}\n\n/* ── Ant Skeleton ── */\nbody.cyber-theme .ant-skeleton-title, body.cyber-theme .ant-skeleton-paragraph > li{\n background: #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-skeleton-button{\n background: #1a1a2e !important;\n}\n\nbody.cyber-theme .ant-skeleton-input{\n background: #1a1a2e !important;\n}\n\n/* ── 赛博朋克特殊效果 ── */\n\n/* 网格背景 */\nbody.cyber-theme .cyber-grid-bg{\n background-color: #050508;\n background-image:\n linear-gradient(rgba(0, 240, 255, 0.02) 1px, transparent 1px),\n linear-gradient(90deg, rgba(0, 240, 255, 0.02) 1px, transparent 1px);\n background-size: 40px 40px;\n}\n\n/* 发光文字 */\nbody.cyber-theme .text-glow-cyan{\n text-shadow: 0 0 8px rgba(0, 240, 255, 0.5);\n}\n\n/* 顶部装饰线 */\nbody.cyber-theme .cyber-top-line{\n position: relative;\n}\nbody.cyber-theme .cyber-top-line::before{\n content: '';\n position: absolute;\n top: 0;\n left: 20px;\n width: 40px;\n height: 2px;\n background: #00f0ff;\n}\n\n/* 霓虹边框 */\nbody.cyber-theme .cyber-border{\n border: 1px solid rgba(0, 240, 255, 0.2);\n box-shadow: inset 0 0 0 1px rgba(0, 240, 255, 0.05);\n}\n\n/* ── 项目自定义样式覆盖 ── */\n\n/* mock-data.css 覆盖 */\nbody.cyber-theme .mock-data-container{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n box-shadow: none !important;\n}\n\nbody.cyber-theme .feature-card{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n box-shadow: none !important;\n}\n\nbody.cyber-theme .feature-card:hover{\n border-color: rgba(0, 240, 255, 0.3) !important;\n box-shadow: 0 0 12px rgba(0, 240, 255, 0.1) !important;\n}\n\nbody.cyber-theme .feature-card::before{\n background: linear-gradient(135deg, rgba(0, 240, 255, 0.03), rgba(0, 240, 255, 0.06)) !important;\n}\n\nbody.cyber-theme .feature-card .ant-card-actions{\n background: #0a0a12 !important;\n border-top: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .feature-name h4{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .status-tag.active{\n background: rgba(0, 255, 65, 0.1) !important;\n border-color: rgba(0, 255, 65, 0.3) !important;\n color: #00ff41 !important;\n}\n\nbody.cyber-theme .status-tag.inactive{\n background: rgba(255, 77, 79, 0.1) !important;\n border-color: rgba(255, 77, 79, 0.3) !important;\n color: #ff4d4f !important;\n}\n\nbody.cyber-theme .feature-description{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .feature-stat{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .page-title{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .page-description{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .control-label{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .stats-number{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .stats-label{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .empty-data{\n background: #0a0a12 !important;\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .empty-icon{\n color: #2a2a3e !important;\n}\n\n/* interface-management.css 覆盖 */\nbody.cyber-theme .interface-management-container{\n background: #0f0f1a !important;\n}\n\nbody.cyber-theme .interface-control-panel, body.cyber-theme .interface-header-card, body.cyber-theme .filter-card, body.cyber-theme .list-header-card, body.cyber-theme .list-container-card{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n box-shadow: none !important;\n}\n\nbody.cyber-theme .control-panel-header{\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .feature-selector{\n background: #0a0a12 !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .feature-selector span{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .interface-table th{\n background: #141420 !important;\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .interface-table td{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .url-pattern-container{\n background: #0a0a12 !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .url-pattern{\n background: #0a0a12 !important;\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .interface-card{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .interface-card.inactive{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n opacity: 0.6;\n}\n\nbody.cyber-theme .interface-card-title{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .info-label{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .status-success{\n background: rgba(0, 255, 65, 0.1) !important;\n border-color: rgba(0, 255, 65, 0.3) !important;\n color: #00ff41 !important;\n}\n\nbody.cyber-theme .status-warning{\n background: rgba(240, 232, 0, 0.1) !important;\n border-color: rgba(240, 232, 0, 0.3) !important;\n color: #f0e800 !important;\n}\n\nbody.cyber-theme .status-error{\n background: rgba(255, 77, 79, 0.1) !important;\n border-color: rgba(255, 77, 79, 0.3) !important;\n color: #ff4d4f !important;\n}\n\nbody.cyber-theme .test-interface-container{\n background: #0a0a12 !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .test-result{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .result-item{\n background: #0a0a12 !important;\n}\n\nbody.cyber-theme .result-item:hover{\n background: #141420 !important;\n}\n\nbody.cyber-theme .result-item .label{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .result-item .value{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .result-body pre{\n background: #0a0a12 !important;\n border-color: #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .result-error{\n background: rgba(255, 77, 79, 0.08) !important;\n color: #ff4d4f !important;\n}\n\nbody.cyber-theme .breadcrumb .separator{\n color: #4a4a5a !important;\n}\n\nbody.cyber-theme .feature-details{\n background: #0f0f1a !important;\n border-left-color: #00f0ff !important;\n box-shadow: none !important;\n}\n\nbody.cyber-theme .feature-name h1{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .feature-description{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .add-button, body.cyber-theme .add-interface-button, body.cyber-theme .create-interface-button{\n background: linear-gradient(to right, #00c2cc, #00f0ff) !important;\n color: #050508 !important;\n box-shadow: 0 2px 8px rgba(0, 240, 255, 0.3) !important;\n}\n\nbody.cyber-theme .add-button:hover, body.cyber-theme .add-interface-button:hover, body.cyber-theme .create-interface-button:hover{\n background: linear-gradient(to right, #00f0ff, #33f3ff) !important;\n box-shadow: 0 4px 16px rgba(0, 240, 255, 0.4) !important;\n}\n\nbody.cyber-theme .edit-button{\n background: rgba(0, 240, 255, 0.08) !important;\n color: #00f0ff !important;\n border-color: rgba(0, 240, 255, 0.2) !important;\n}\n\nbody.cyber-theme .delete-button{\n background: rgba(255, 77, 79, 0.08) !important;\n color: #ff4d4f !important;\n border-color: rgba(255, 77, 79, 0.2) !important;\n}\n\nbody.cyber-theme .test-button{\n background: rgba(0, 240, 255, 0.08) !important;\n color: #00f0ff !important;\n border-color: rgba(0, 240, 255, 0.2) !important;\n}\n\nbody.cyber-theme .interface-button{\n background: rgba(0, 240, 255, 0.08) !important;\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .export-button{\n background: rgba(0, 255, 65, 0.08) !important;\n color: #00ff41 !important;\n}\n\nbody.cyber-theme .empty-data{\n background: #0a0a12 !important;\n}\n\nbody.cyber-theme .empty-icon{\n color: #2a2a3e !important;\n}\n\nbody.cyber-theme .empty-text{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .modal-overlay{\n background: rgba(0, 0, 0, 0.7) !important;\n}\n\nbody.cyber-theme .modal{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .modal-header{\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .modal-header h2{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .close-button{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .close-button:hover{\n background: #1a1a2e !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .form-group label{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .checkbox-label, body.cyber-theme .radio-label{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .help-text{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .format-button{\n background: rgba(0, 240, 255, 0.08) !important;\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .loading{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .error-container{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .back-button{\n background: #00f0ff !important;\n color: #050508 !important;\n}\n\n/* pagination */\nbody.cyber-theme .pagination-wrapper{\n border-top: 1px solid #1a1a2e !important;\n}\n\n/* app-layout.css 覆盖 */\nbody.cyber-theme .app-header{\n background: #0f0f1a !important;\n border-bottom: 1px solid #1a1a2e !important;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) !important;\n}\n\nbody.cyber-theme .logo-icon{\n color: #00f0ff !important;\n}\n\nbody.cyber-theme .logo-icon-secondary{\n color: #00ff41 !important;\n background: #0f0f1a !important;\n box-shadow: 0 0 4px rgba(0, 240, 255, 0.3) !important;\n}\n\nbody.cyber-theme .logo-text{\n background: linear-gradient(135deg, #00f0ff, #00ff41) !important;\n -webkit-background-clip: text !important;\n -webkit-text-fill-color: transparent !important;\n}\n\nbody.cyber-theme .app-sider{\n background: #0f0f1a !important;\n border-right: 1px solid #1a1a2e !important;\n box-shadow: 2px 0 8px rgba(0, 0, 0, 0.3) !important;\n}\n\nbody.cyber-theme .app-content-wrapper{\n background: #0a0a12 !important;\n}\n\nbody.cyber-theme .app-content{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .app-breadcrumb{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .version-button{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .version-button:hover{\n color: #00f0ff !important;\n background: rgba(0, 240, 255, 0.05) !important;\n}\n\n/* settings.css 等通用覆盖 */\nbody.cyber-theme .settings-container{\n background: #0f0f1a !important;\n}\n\n/* ── App.css 覆盖 ── */\nbody.cyber-theme .page-container{\n background-color: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n box-shadow: 0 0 0 1px rgba(0, 240, 255, 0.05) !important;\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .page-title-bar{\n border-bottom: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .page-title{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .page-description{\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .custom-card{\n background: #0f0f1a !important;\n border: 1px solid #1a1a2e !important;\n}\n\nbody.cyber-theme .custom-card:hover{\n box-shadow: 0 4px 16px rgba(0, 240, 255, 0.08) !important;\n border-color: rgba(0, 240, 255, 0.2) !important;\n}\n\nbody.cyber-theme .custom-table .ant-table-thead > tr > th{\n background: #141420 !important;\n color: #a0a0a0 !important;\n}\n\nbody.cyber-theme .custom-form-item-label{\n color: #e0e0e0 !important;\n}\n\nbody.cyber-theme .custom-form-item-hint{\n color: #6b7280 !important;\n}\n\nbody.cyber-theme .status-tag-success{\n background-color: rgba(0, 255, 65, 0.1) !important;\n border: 1px solid rgba(0, 255, 65, 0.3) !important;\n color: #00ff41 !important;\n}\n\nbody.cyber-theme .status-tag-warning{\n background-color: rgba(240, 232, 0, 0.1) !important;\n border: 1px solid rgba(240, 232, 0, 0.3) !important;\n color: #f0e800 !important;\n}\n\nbody.cyber-theme .status-tag-error{\n background-color: rgba(255, 77, 79, 0.1) !important;\n border: 1px solid rgba(255, 77, 79, 0.3) !important;\n color: #ff4d4f !important;\n}\n\n/* ── 响应式保持 ── */\n@media (max-width: 768px){\n body.cyber-theme .app-sider{\n box-shadow: 2px 0 8px rgba(0, 0, 0, 0.5) !important;\n }\n}\n",""]);const c=i},9218:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,'.settings-container {\n width: 100%;\n max-width: 900px;\n margin: 0 auto;\n background-color: #fff;\n border-radius: 8px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\n padding: 24px;\n}\n\n.settings-header {\n margin-bottom: 24px;\n padding-bottom: 16px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.settings-header h4 {\n margin-bottom: 8px;\n color: #1890ff;\n}\n\n.settings-card {\n margin-bottom: 20px;\n}\n\n.settings-card .ant-card-head {\n border-bottom: 1px solid #f0f0f0;\n padding-bottom: 0;\n}\n\n.settings-card .ant-card-head-title {\n font-size: 16px;\n font-weight: 500;\n}\n\n/* 设置项样式 */\n.settings-item {\n padding: 16px 0;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.settings-item:last-child {\n border-bottom: none;\n}\n\n.settings-item-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.settings-item-title {\n font-size: 14px;\n font-weight: 500;\n color: #262626;\n margin-bottom: 4px;\n display: inline-flex;\n align-items: center;\n gap: 2px;\n}\n\n.settings-item-description {\n font-size: 12px;\n color: #8c8c8c;\n line-height: 1.5;\n}\n\n.settings-help-icon {\n color: #8c8c8c;\n padding: 0;\n min-width: auto;\n height: auto;\n line-height: 1;\n}\n\n.settings-help-icon:hover {\n color: #1677ff;\n}\n\n.settings-section {\n margin-bottom: 32px;\n}\n\n.settings-section h2 {\n font-size: 16px;\n font-weight: 600;\n color: #262626;\n margin: 0 0 16px 0;\n padding-bottom: 8px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.setting-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 0;\n border-bottom: 1px solid #f5f5f5;\n}\n\n.setting-item:last-child {\n border-bottom: none;\n}\n\n.setting-label {\n display: flex;\n flex-direction: column;\n}\n\n.setting-label span:first-child {\n font-weight: 500;\n color: #262626;\n margin-bottom: 4px;\n}\n\n.setting-description {\n color: #999;\n font-size: 12px;\n margin-top: 4px;\n}\n\n.setting-control {\n display: flex;\n align-items: center;\n}\n\n.setting-control input[type="number"] {\n width: 100px;\n height: 32px;\n padding: 0 12px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n font-size: 14px;\n}\n\n/* 切换开关样式 */\n.switch {\n position: relative;\n display: inline-block;\n width: 36px;\n height: 20px;\n}\n\n.switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n transition: .4s;\n border-radius: 20px;\n}\n\n.slider:before {\n position: absolute;\n content: "";\n height: 16px;\n width: 16px;\n left: 2px;\n bottom: 2px;\n background-color: white;\n transition: .4s;\n border-radius: 50%;\n}\n\ninput:checked + .slider {\n background-color: #1890ff;\n}\n\ninput:checked + .slider:before {\n transform: translateX(16px);\n}\n\n.settings-actions {\n display: flex;\n justify-content: flex-end;\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n}\n\n.reset-button {\n height: 32px;\n padding: 0 16px;\n background-color: white;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n.save-button {\n height: 32px;\n padding: 0 16px;\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n.reset-button:disabled,\n.save-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.about-section {\n margin-top: 20px;\n}\n\n.about-content {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.plugin-info p {\n margin: 8px 0;\n}\n\n.plugin-description p {\n margin: 8px 0;\n color: #595959;\n line-height: 1.5;\n}\n\n/* 响应式调整 */\n@media (max-width: 768px) {\n .settings-container {\n padding: 16px;\n }\n \n .settings-actions {\n flex-direction: column;\n align-items: center;\n }\n \n .settings-actions button {\n width: 100%;\n margin-bottom: 8px;\n }\n} \n',""]);const c=i},9604:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,"/* 全局样式 */\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,\n 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n 'Noto Color Emoji';\n}\n\nhtml, body, #root {\n height: 100%;\n width: 100%;\n}\n\nbody {\n background-color: #f5f7fa;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\nbutton, input {\n font-size: 14px;\n}\n\na {\n color: #1890ff;\n text-decoration: none;\n transition: all 0.3s;\n}\n\na:hover {\n color: #40a9ff;\n}\n\n/* 辅助类 */\n.text-center {\n text-align: center;\n}\n\n.text-right {\n text-align: right;\n}\n\n.text-left {\n text-align: left;\n}\n\n.mb-0 {\n margin-bottom: 0;\n}\n\n.mb-1 {\n margin-bottom: 4px;\n}\n\n.mb-2 {\n margin-bottom: 8px;\n}\n\n.mb-3 {\n margin-bottom: 16px;\n}\n\n.mb-4 {\n margin-bottom: 24px;\n}\n\n.mt-0 {\n margin-top: 0;\n}\n\n.mt-1 {\n margin-top: 4px;\n}\n\n.mt-2 {\n margin-top: 8px;\n}\n\n.mt-3 {\n margin-top: 16px;\n}\n\n.mt-4 {\n margin-top: 24px;\n}\n\n.ml-1 {\n margin-left: 4px;\n}\n\n.ml-2 {\n margin-left: 8px;\n}\n\n.ml-3 {\n margin-left: 16px;\n}\n\n.mr-1 {\n margin-right: 4px;\n}\n\n.mr-2 {\n margin-right: 8px;\n}\n\n.mr-3 {\n margin-right: 16px;\n}\n\n.p-0 {\n padding: 0;\n}\n\n.p-1 {\n padding: 4px;\n}\n\n.p-2 {\n padding: 8px;\n}\n\n.p-3 {\n padding: 16px;\n}\n\n.p-4 {\n padding: 24px;\n}\n\n/* 弹性布局 */\n.d-flex {\n display: flex;\n}\n\n.align-center {\n align-items: center;\n}\n\n.justify-between {\n justify-content: space-between;\n}\n\n.justify-center {\n justify-content: center;\n}\n\n.flex-column {\n flex-direction: column;\n}\n\n.flex-wrap {\n flex-wrap: wrap;\n}\n\n.flex-1 {\n flex: 1;\n}\n\n/* 颜色 */\n.text-primary {\n color: #1890ff;\n}\n\n.text-success {\n color: #52c41a;\n}\n\n.text-warning {\n color: #faad14;\n}\n\n.text-danger {\n color: #ff4d4f;\n}\n\n.text-secondary {\n color: rgba(0, 0, 0, 0.45);\n}\n\n.bg-white {\n background-color: #fff;\n}\n\n.bg-light {\n background-color: #f5f7fa;\n}\n\n/* 滚动条样式 */\n::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n}\n\n::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb {\n background: #c1c1c1;\n border-radius: 3px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n background: #a8a8a8;\n} ",""]);const c=i},9660:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,'.webdav-sync-modal .ant-modal-content {\n display: flex;\n max-height: calc(100vh - 24px);\n flex-direction: column;\n overflow: hidden;\n padding: 0;\n}\n\n.webdav-sync-modal {\n top: 12px;\n max-width: calc(100vw - 32px);\n padding-bottom: 0;\n}\n\n.webdav-sync-modal-wrap {\n overflow: hidden;\n}\n\n.webdav-sync-modal .ant-modal-body {\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n\n.webdav-sync-modal .ant-modal-close {\n top: 12px;\n color: rgba(255, 255, 255, 0.86);\n}\n\n.webdav-sync-hero {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n gap: 12px;\n padding: 14px 20px;\n color: #fff;\n background:\n radial-gradient(circle at 85% 0%, rgba(56, 189, 248, 0.32), transparent 38%),\n linear-gradient(135deg, #102a43 0%, #0b7285 100%);\n}\n\n.webdav-sync-hero .ant-typography {\n margin: 0;\n color: inherit;\n}\n\n.webdav-sync-hero .ant-typography.ant-typography-secondary {\n color: rgba(255, 255, 255, 0.68);\n}\n\n.webdav-sync-hero-copy {\n min-width: 0;\n}\n\n.webdav-sync-hero-copy .ant-typography:last-child {\n font-size: 13px;\n white-space: nowrap;\n}\n\n.webdav-sync-hero-icon {\n display: flex;\n width: 40px;\n height: 40px;\n align-items: center;\n justify-content: center;\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 11px;\n background: rgba(255, 255, 255, 0.12);\n font-size: 20px;\n box-shadow: inset 0 1px rgba(255, 255, 255, 0.18);\n}\n\n.webdav-sync-kicker {\n display: block;\n margin-bottom: 1px !important;\n color: #67e8f9 !important;\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 0.18em;\n}\n\n.webdav-sync-grid {\n display: grid;\n grid-template-columns: minmax(0, 1.55fr) minmax(260px, 0.65fr);\n gap: 12px;\n padding: 12px;\n background: #f3f6f8;\n}\n\n.webdav-sync-error {\n margin: 10px 12px 0;\n padding: 8px 12px;\n}\n\n.webdav-sync-error .ant-alert-description {\n overflow-wrap: anywhere;\n}\n\n.webdav-sync-modal .ant-descriptions-item-label {\n width: 82px;\n white-space: nowrap;\n}\n\n.webdav-sync-modal .ant-descriptions-item-content {\n min-width: 0;\n}\n\n.webdav-sync-card,\n.webdav-sync-note,\n.webdav-sync-status-card,\n.webdav-sync-connection-card,\n.webdav-sync-module-card {\n border-radius: 10px;\n box-shadow: 0 5px 18px rgba(15, 42, 67, 0.06);\n}\n\n.webdav-sync-card .ant-card-body,\n.webdav-sync-note .ant-card-body {\n padding: 16px;\n}\n\n.webdav-sync-modal .ant-form-item {\n margin-bottom: 14px;\n}\n\n.webdav-sync-connected {\n display: grid;\n gap: 10px;\n padding: 12px;\n background: #f3f6f8;\n}\n\n.webdav-sync-connection-card .ant-card-body {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: end;\n gap: 12px;\n padding: 12px 16px;\n}\n\n.webdav-sync-connection-card .ant-descriptions {\n min-width: 0;\n}\n\n.webdav-sync-connection-card .ant-descriptions-header {\n margin-bottom: 8px;\n}\n\n.webdav-sync-connection-card .ant-descriptions-row > th,\n.webdav-sync-connection-card .ant-descriptions-row > td {\n padding-bottom: 6px;\n}\n\n.webdav-sync-form-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n}\n\n.webdav-sync-form-actions,\n.webdav-sync-form-actions .ant-space-item {\n display: flex;\n width: 100%;\n}\n\n.webdav-sync-form-actions .ant-btn {\n flex: 1;\n}\n\n.webdav-sync-note {\n color: #475569;\n background: linear-gradient(160deg, #ecfeff, #f8fafc 62%);\n}\n\n.webdav-sync-note-icon {\n display: block;\n margin-bottom: 10px;\n color: #0891b2;\n font-size: 24px;\n}\n\n.webdav-sync-file-tree,\n.webdav-sync-file-name {\n padding: 8px 10px;\n border-radius: 7px;\n color: #d8f3f5;\n background: #102a43;\n font-family: SFMono-Regular, Consolas, "Liberation Mono", monospace;\n font-size: 12px;\n line-height: 1.6;\n}\n\n.webdav-sync-break-all {\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n.webdav-sync-actions {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n margin-top: 22px;\n}\n\n.webdav-sync-actions .ant-btn {\n white-space: nowrap;\n}\n\n.webdav-sync-pull-button {\n border-color: #059669 !important;\n background: #059669 !important;\n}\n\n.webdav-sync-disconnect {\n padding-inline: 0;\n}\n\n.webdav-sync-module-grid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px;\n}\n\n.webdav-sync-module-card .ant-card-body {\n display: flex;\n height: min(440px, calc(100vh - 300px));\n min-height: 280px;\n flex-direction: column;\n padding: 14px;\n}\n\n.webdav-sync-module-header,\n.webdav-sync-select-all {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n\n.webdav-sync-module-header {\n align-items: flex-start;\n}\n\n.webdav-sync-module-header .ant-typography {\n margin: 0;\n}\n\n.webdav-sync-module-eyebrow {\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 0.14em;\n}\n\n.webdav-sync-select-all {\n margin-top: 8px;\n padding: 7px 10px;\n border-radius: 7px;\n background: #f8fafc;\n}\n\n.webdav-sync-module-list {\n min-height: 0;\n flex: 1;\n margin: 8px 0 10px;\n overflow: auto;\n overscroll-behavior: contain;\n}\n\n.webdav-sync-module-list .ant-checkbox-group {\n display: grid;\n gap: 5px;\n}\n\n.webdav-sync-module-option.ant-checkbox-wrapper {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n gap: 8px;\n margin-inline-start: 0;\n padding: 7px 9px;\n border: 1px solid #e6edf2;\n border-radius: 7px;\n background: #fff;\n}\n\n.webdav-sync-module-option .ant-checkbox + span {\n display: contents;\n padding-inline-start: 0;\n}\n\n.webdav-sync-module-name {\n min-width: 0;\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n.webdav-sync-module-count {\n color: #94a3b8;\n font-size: 12px;\n white-space: nowrap;\n}\n\n.webdav-sync-manual-note {\n padding: 8px 12px;\n border-radius: 8px;\n}\n\n.webdav-sync-manual-note .ant-alert-message {\n margin-bottom: 1px;\n}\n\n.webdav-sync-manual-note .ant-alert-description {\n font-size: 12px;\n line-height: 1.5;\n}\n\n.webdav-sync-status-title {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 16px;\n}\n\n.webdav-sync-status-title .ant-typography {\n margin: 0;\n}\n\n.webdav-sync-status-title > div > .ant-typography:first-child {\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 0.14em;\n}\n\n.webdav-sync-file-name {\n margin-bottom: 16px;\n line-height: 1.5;\n}\n\nbody.cyber-theme .webdav-sync-grid {\n background: #071116;\n}\n\nbody.cyber-theme .webdav-sync-connected {\n background: #071116;\n}\n\nbody.cyber-theme .webdav-sync-card,\nbody.cyber-theme .webdav-sync-note,\nbody.cyber-theme .webdav-sync-status-card,\nbody.cyber-theme .webdav-sync-connection-card,\nbody.cyber-theme .webdav-sync-module-card {\n border: 1px solid rgba(0, 240, 255, 0.2);\n background: #0b1c24;\n}\n\nbody.cyber-theme .webdav-sync-select-all,\nbody.cyber-theme .webdav-sync-module-option.ant-checkbox-wrapper {\n border-color: rgba(0, 240, 255, 0.18);\n background: #102730;\n}\n\nbody.earth-theme .webdav-sync-grid {\n background: #f0ebe3;\n}\n\nbody.earth-theme .webdav-sync-connected {\n background: #f0ebe3;\n}\n\nbody.earth-theme .webdav-sync-hero {\n background:\n radial-gradient(circle at 85% 0%, rgba(212, 160, 23, 0.3), transparent 38%),\n linear-gradient(135deg, #3d3630 0%, #8b5e3c 100%);\n}\n\n@media (max-width: 720px) {\n .webdav-sync-hero {\n grid-template-columns: auto 1fr;\n padding: 12px 14px;\n }\n\n .webdav-sync-hero > .ant-tag {\n grid-column: 2;\n justify-self: start;\n }\n\n .webdav-sync-hero-copy .ant-typography:last-child {\n white-space: normal;\n }\n\n .webdav-sync-grid,\n .webdav-sync-form-row,\n .webdav-sync-actions,\n .webdav-sync-module-grid,\n .webdav-sync-connection-card .ant-card-body {\n grid-template-columns: 1fr;\n }\n\n .webdav-sync-module-card .ant-card-body {\n height: auto;\n min-height: 300px;\n }\n\n .webdav-sync-module-list {\n max-height: 240px;\n }\n}\n',""]);const c=i},9709:(e,n,t)=>{"use strict";t.d(n,{A:()=>c});var r=t(1601),o=t.n(r),a=t(6314),i=t.n(a)()(o());i.push([e.id,"/* ============================================================\n Whistle Mock Plugin - Earth Tone Theme Override\n 覆盖 Ant Design 5 和项目自定义样式为大地色系风格\n ============================================================ */\n\n/* ── 全局背景与文字 ── */\nbody.earth-theme, body.earth-theme #root{\n background-color: #f0ebe3 !important;\n color: #3d3630 !important;\n font-family: 'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\nbody.earth-theme{\n --primary-color: #b87333;\n --primary-hover: #c9894d;\n --primary-active: #9a5f2a;\n --success-color: #6b8e23;\n --warning-color: #d4a017;\n --error-color: #c0392b;\n --font-color: #3d3630;\n --text-secondary: #6d6459;\n --text-light: #9e9488;\n --border-color: #e0d8cf;\n --border-radius: 6px;\n --card-shadow: 0 2px 8px rgba(61, 54, 48, 0.06);\n --transition-time: 0.3s;\n --ant-color-primary: #b87333;\n --ant-color-primary-hover: #c9894d;\n --ant-color-primary-active: #9a5f2a;\n --ant-color-success: #6b8e23;\n --ant-color-warning: #d4a017;\n --ant-color-error: #c0392b;\n --ant-color-info: #8d6e63;\n --ant-color-text: #3d3630;\n --ant-color-text-secondary: #6d6459;\n --ant-color-border: #e0d8cf;\n --ant-color-bg-base: #f0ebe3;\n --ant-color-bg-container: #fdfcfa;\n --ant-color-bg-elevated: #f5f0e8;\n --ant-color-bg-layout: #f0ebe3;\n background-color: #f0ebe3 !important;\n}\n\nbody.earth-theme h1, body.earth-theme h2, body.earth-theme h3, body.earth-theme h4, body.earth-theme h5, body.earth-theme h6{\n color: #3d3630 !important;\n}\n\nbody.earth-theme a{\n color: #b87333 !important;\n}\nbody.earth-theme a:hover{\n color: #c9894d !important;\n}\n\n/* ── 滚动条 ── */\nbody.earth-theme ::-webkit-scrollbar{\n width: 6px;\n height: 6px;\n}\nbody.earth-theme ::-webkit-scrollbar-track{\n background: #f0ebe3;\n}\nbody.earth-theme ::-webkit-scrollbar-thumb{\n background: #d5cdc2;\n border-radius: 3px;\n}\nbody.earth-theme ::-webkit-scrollbar-thumb:hover{\n background: #b87333;\n}\n\n/* ── Ant Design Layout ── */\nbody.earth-theme .ant-layout{\n background: #f0ebe3 !important;\n}\n\nbody.earth-theme .ant-layout-header{\n background: #fdfcfa !important;\n border-bottom: 1px solid #e0d8cf !important;\n box-shadow: 0 1px 4px rgba(61, 54, 48, 0.06) !important;\n}\n\nbody.earth-theme .ant-layout-sider{\n background: #f5f0e8 !important;\n border-right: 1px solid #e0d8cf !important;\n}\n\nbody.earth-theme .ant-layout-content{\n background: #fdfcfa !important;\n}\n\n/* ── Ant Menu ── */\nbody.earth-theme .ant-menu{\n background: #f5f0e8 !important;\n border-right: none !important;\n}\n\nbody.earth-theme .ant-menu-item{\n color: #6d6459 !important;\n border-radius: 4px !important;\n margin: 4px 8px !important;\n}\n\nbody.earth-theme .ant-menu-item:hover{\n color: #b87333 !important;\n background: rgba(184, 115, 51, 0.08) !important;\n}\n\nbody.earth-theme .ant-menu-item-selected{\n color: #b87333 !important;\n background: rgba(184, 115, 51, 0.12) !important;\n}\n\nbody.earth-theme .ant-menu-item-selected:hover{\n color: #b87333 !important;\n background: rgba(184, 115, 51, 0.16) !important;\n}\n\nbody.earth-theme .ant-menu-submenu-title{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-menu-submenu-selected > .ant-menu-submenu-title{\n color: #b87333 !important;\n}\n\n/* ── Ant Card ── */\nbody.earth-theme .ant-card{\n background: #fdfcfa !important;\n border: 1px solid #e0d8cf !important;\n border-radius: 6px !important;\n box-shadow: 0 2px 8px rgba(61, 54, 48, 0.06) !important;\n}\n\nbody.earth-theme .ant-card-bordered{\n border: 1px solid #e0d8cf !important;\n}\n\nbody.earth-theme .ant-card-head{\n background: #fdfcfa !important;\n border-bottom: 1px solid #e0d8cf !important;\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-card-body{\n background: #fdfcfa !important;\n color: #3d3630 !important;\n}\n\n/* ── Ant Button ── */\nbody.earth-theme .ant-btn{\n border-radius: 4px !important;\n}\n\nbody.earth-theme .ant-btn-primary{\n background: #b87333 !important;\n border-color: #b87333 !important;\n color: #ffffff !important;\n font-weight: 500;\n}\n\nbody.earth-theme .ant-btn-primary:hover{\n background: #c9894d !important;\n border-color: #c9894d !important;\n box-shadow: 0 2px 8px rgba(184, 115, 51, 0.3) !important;\n}\n\nbody.earth-theme .ant-btn-default{\n background: transparent !important;\n border-color: #e0d8cf !important;\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-btn-default:hover{\n border-color: #b87333 !important;\n color: #b87333 !important;\n}\n\nbody.earth-theme .ant-btn-text{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-btn-text:hover{\n color: #b87333 !important;\n background: rgba(184, 115, 51, 0.08) !important;\n}\n\nbody.earth-theme .ant-btn-dangerous{\n background: transparent !important;\n border-color: #c0392b !important;\n color: #c0392b !important;\n}\n\nbody.earth-theme .ant-btn-dangerous:hover{\n background: #c0392b !important;\n color: #ffffff !important;\n}\n\n/* ── Ant Table ── */\nbody.earth-theme .ant-table{\n background: #fdfcfa !important;\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-table-thead > tr > th{\n background: #f5f0e8 !important;\n color: #3d3630 !important;\n border-bottom: 1px solid #e0d8cf !important;\n font-weight: 600;\n}\n\nbody.earth-theme .ant-table-tbody > tr > td{\n border-bottom: 1px solid #e0d8cf !important;\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-table-tbody > tr:hover > td{\n background: rgba(184, 115, 51, 0.04) !important;\n}\n\nbody.earth-theme .ant-table-tbody > tr.ant-table-row-selected > td{\n background: rgba(184, 115, 51, 0.08) !important;\n}\n\n/* ── Ant Input / TextArea ── */\nbody.earth-theme .ant-input,\nbody.earth-theme .ant-input-affix-wrapper,\nbody.earth-theme .ant-input-textarea{\n background: #fdfcfa !important;\n border-color: #e0d8cf !important;\n color: #3d3630 !important;\n border-radius: 4px !important;\n}\n\nbody.earth-theme .ant-input:hover,\nbody.earth-theme .ant-input-affix-wrapper:hover{\n border-color: #c9894d !important;\n}\n\nbody.earth-theme .ant-input:focus,\nbody.earth-theme .ant-input-affix-wrapper:focus,\nbody.earth-theme .ant-input-focused,\nbody.earth-theme .ant-input-affix-wrapper-focused{\n border-color: #b87333 !important;\n box-shadow: 0 0 0 2px rgba(184, 115, 51, 0.1) !important;\n}\n\nbody.earth-theme .ant-input::placeholder,\nbody.earth-theme .ant-input-textarea::placeholder{\n color: #9e9488 !important;\n}\n\n/* ── Ant Select ── */\nbody.earth-theme .ant-select-selector{\n background: #fdfcfa !important;\n border-color: #e0d8cf !important;\n color: #3d3630 !important;\n border-radius: 4px !important;\n}\n\nbody.earth-theme .ant-select:hover .ant-select-selector{\n border-color: #c9894d !important;\n}\n\nbody.earth-theme .ant-select-focused .ant-select-selector{\n border-color: #b87333 !important;\n box-shadow: 0 0 0 2px rgba(184, 115, 51, 0.1) !important;\n}\n\nbody.earth-theme .ant-select-dropdown{\n background: #fdfcfa !important;\n border: 1px solid #e0d8cf !important;\n box-shadow: 0 4px 16px rgba(61, 54, 48, 0.1) !important;\n}\n\nbody.earth-theme .ant-select-item{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-select-item-option-selected{\n background: rgba(184, 115, 51, 0.12) !important;\n color: #b87333 !important;\n font-weight: 500;\n}\n\nbody.earth-theme .ant-select-item-option-active{\n background: rgba(184, 115, 51, 0.06) !important;\n}\n\n/* ── Ant Modal ── */\nbody.earth-theme .ant-modal-content{\n background: #fdfcfa !important;\n border: 1px solid #e0d8cf !important;\n box-shadow: 0 8px 32px rgba(61, 54, 48, 0.12) !important;\n}\n\nbody.earth-theme .ant-modal-header{\n background: #fdfcfa !important;\n border-bottom: 1px solid #e0d8cf !important;\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-modal-title{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-modal-close-x{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-modal-close-x:hover{\n color: #b87333 !important;\n}\n\n/* ── Ant Drawer ── */\nbody.earth-theme .ant-drawer-content{\n background: #fdfcfa !important;\n}\n\nbody.earth-theme .ant-drawer-header{\n background: #fdfcfa !important;\n border-bottom: 1px solid #e0d8cf !important;\n}\n\nbody.earth-theme .ant-drawer-title{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-drawer-close{\n color: #6d6459 !important;\n}\n\n/* ── Ant Tabs ── */\nbody.earth-theme .ant-tabs-tab{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-tabs-tab:hover{\n color: #b87333 !important;\n}\n\nbody.earth-theme .ant-tabs-tab-active{\n color: #b87333 !important;\n}\n\nbody.earth-theme .ant-tabs-ink-bar{\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-tabs-content{\n color: #3d3630 !important;\n}\n\n/* ── Ant Form ── */\nbody.earth-theme .ant-form-item-label > label{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-form-item-explain-error{\n color: #c0392b !important;\n}\n\n/* ── Ant Switch ── */\nbody.earth-theme .ant-switch-checked{\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-switch-checked:hover{\n background: #c9894d !important;\n}\n\n/* ── Ant Radio ── */\nbody.earth-theme .ant-radio-checked .ant-radio-inner{\n border-color: #b87333 !important;\n}\n\nbody.earth-theme .ant-radio-checked .ant-radio-inner::after{\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-radio-wrapper:hover .ant-radio,\nbody.earth-theme .ant-radio:hover .ant-radio-inner{\n border-color: #b87333 !important;\n}\n\n/* ── Ant Checkbox ── */\nbody.earth-theme .ant-checkbox-checked .ant-checkbox-inner{\n background: #b87333 !important;\n border-color: #b87333 !important;\n}\n\nbody.earth-theme .ant-checkbox-indeterminate .ant-checkbox-inner::after{\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-checkbox-wrapper:hover .ant-checkbox-inner,\nbody.earth-theme .ant-checkbox:hover .ant-checkbox-inner{\n border-color: #b87333 !important;\n}\n\n/* ── Ant Badge ── */\nbody.earth-theme .ant-badge-status-dot{\n box-shadow: 0 0 4px currentColor !important;\n}\n\n/* ── Ant Tag ── */\nbody.earth-theme .ant-tag{\n border-radius: 4px !important;\n}\n\nbody.earth-theme .ant-tag-green{\n color: #6b8e23 !important;\n background: rgba(107, 142, 35, 0.1) !important;\n border-color: rgba(107, 142, 35, 0.2) !important;\n}\n\nbody.earth-theme .ant-tag-blue{\n color: #8d6e63 !important;\n background: rgba(141, 110, 99, 0.1) !important;\n border-color: rgba(141, 110, 99, 0.2) !important;\n}\n\nbody.earth-theme .ant-tag-red{\n color: #c0392b !important;\n background: rgba(192, 57, 43, 0.1) !important;\n border-color: rgba(192, 57, 43, 0.2) !important;\n}\n\nbody.earth-theme .ant-tag-orange{\n color: #d4a017 !important;\n background: rgba(212, 160, 23, 0.1) !important;\n border-color: rgba(212, 160, 23, 0.2) !important;\n}\n\nbody.earth-theme .ant-tag-default{\n color: #6d6459 !important;\n background: #f5f0e8 !important;\n border-color: #e0d8cf !important;\n}\n\n/* ── Ant Divider ── */\nbody.earth-theme .ant-divider{\n border-top: 1px solid #e0d8cf !important;\n}\n\nbody.earth-theme .ant-divider-horizontal{\n margin: 16px 0 !important;\n}\n\n/* ── Ant Empty ── */\nbody.earth-theme .ant-empty-description{\n color: #9e9488 !important;\n}\n\n/* ── Ant Spin ── */\nbody.earth-theme .ant-spin-dot-item{\n background: #b87333 !important;\n}\n\n/* ── Ant Breadcrumb ── */\nbody.earth-theme .ant-breadcrumb{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-breadcrumb a{\n color: #9e9488 !important;\n}\n\nbody.earth-theme .ant-breadcrumb a:hover{\n color: #b87333 !important;\n}\n\nbody.earth-theme .ant-breadcrumb-separator{\n color: #d5cdc2 !important;\n}\n\n/* ── Ant Statistic ── */\nbody.earth-theme .ant-statistic-title{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .ant-statistic-content{\n color: #3d3630 !important;\n}\n\n/* ── Ant DatePicker / TimePicker ── */\nbody.earth-theme .ant-picker{\n background: #fdfcfa !important;\n border-color: #e0d8cf !important;\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-picker:hover{\n border-color: #c9894d !important;\n}\n\nbody.earth-theme .ant-picker-focused{\n border-color: #b87333 !important;\n box-shadow: 0 0 0 2px rgba(184, 115, 51, 0.1) !important;\n}\n\nbody.earth-theme .ant-picker-panel{\n background: #fdfcfa !important;\n border: 1px solid #e0d8cf !important;\n}\n\nbody.earth-theme .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner{\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner::before{\n border-color: #b87333 !important;\n}\n\n/* ── Ant Pagination ── */\nbody.earth-theme .ant-pagination-item-active{\n border-color: #b87333 !important;\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-pagination-item-active a{\n color: #ffffff !important;\n}\n\nbody.earth-theme .ant-pagination-item:hover{\n border-color: #b87333 !important;\n}\n\nbody.earth-theme .ant-pagination-item:hover a{\n color: #b87333 !important;\n}\n\n/* ── Ant Popover / Tooltip ── */\nbody.earth-theme .ant-popover-inner{\n background: #fdfcfa !important;\n border: 1px solid #e0d8cf !important;\n box-shadow: 0 4px 16px rgba(61, 54, 48, 0.1) !important;\n}\n\nbody.earth-theme .ant-tooltip-inner{\n background: #3d3630 !important;\n color: #fdfcfa !important;\n}\n\n/* ── Ant Dropdown ── */\nbody.earth-theme .ant-dropdown-menu{\n background: #fdfcfa !important;\n border: 1px solid #e0d8cf !important;\n box-shadow: 0 4px 16px rgba(61, 54, 48, 0.1) !important;\n}\n\nbody.earth-theme .ant-dropdown-menu-item{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-dropdown-menu-item:hover{\n background: rgba(184, 115, 51, 0.06) !important;\n color: #b87333 !important;\n}\n\n/* ── Ant Slider ── */\nbody.earth-theme .ant-slider-track{\n background: #b87333 !important;\n}\n\nbody.earth-theme .ant-slider-handle{\n border-color: #b87333 !important;\n}\n\nbody.earth-theme .ant-slider-handle:hover{\n border-color: #c9894d !important;\n}\n\n/* ── Ant Tree ── */\nbody.earth-theme .ant-tree{\n background: transparent !important;\n color: #3d3630 !important;\n}\n\nbody.earth-theme .ant-tree-node-content-wrapper:hover{\n background: rgba(184, 115, 51, 0.06) !important;\n}\n\nbody.earth-theme .ant-tree-node-selected{\n background: rgba(184, 115, 51, 0.12) !important;\n color: #b87333 !important;\n}\n\n/* ── 版本弹窗样式覆盖 ── */\nbody.earth-theme .version-markdown-content h1{\n color: #b87333 !important;\n border-bottom-color: #e0d8cf !important;\n}\n\nbody.earth-theme .version-markdown-content h2{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .version-markdown-content h3{\n color: #6b8e23 !important;\n}\n\nbody.earth-theme .version-markdown-content p,\nbody.earth-theme .version-markdown-content li{\n color: #6d6459 !important;\n}\n\nbody.earth-theme .version-markdown-content strong{\n color: #3d3630 !important;\n}\n\nbody.earth-theme .version-markdown-content code{\n background-color: #f5f0e8 !important;\n color: #b87333 !important;\n}\n\nbody.earth-theme .version-markdown-content pre{\n background-color: #f5f0e8 !important;\n}\n",""]);const c=i}}]);