@yinuo-ngm/server 1.0.16 → 1.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/app.js +3 -15
- package/lib/common/editor.js +2 -2
- package/lib/env.d.ts +1 -0
- package/lib/env.js +1 -0
- package/lib/plugins/error-handler.plugin.d.ts +2 -2
- package/lib/plugins/error-handler.plugin.js +97 -93
- package/lib/plugins/ws/topics/nginx.ws.js +2 -1
- package/lib/plugins/ws/topics/svn.ws.d.ts +2 -1
- package/lib/plugins/ws/topics/svn.ws.js +3 -2
- package/lib/plugins/ws/topics/syslog.ws.d.ts +1 -1
- package/lib/plugins/ws/topics/task.ws.d.ts +2 -1
- package/lib/plugins/ws/topics/task.ws.js +2 -1
- package/lib/plugins/ws/ws.context.d.ts +1 -1
- package/lib/plugins/ws/ws.plugin.js +4 -3
- package/lib/plugins/ws/ws.router.d.ts +2 -2
- package/lib/plugins/ws/ws.router.js +8 -7
- package/lib/routes/api-client/collection.routes.js +8 -6
- package/lib/routes/api-client/env.routes.js +4 -3
- package/lib/routes/api-client/history.routes.js +3 -2
- package/lib/routes/api-client/hub-token.routes.js +11 -11
- package/lib/routes/api-client/request.routes.js +7 -6
- package/lib/routes/api-client/send.routes.js +3 -2
- package/lib/routes/config.routes.js +5 -5
- package/lib/routes/hub.routes.js +10 -10
- package/lib/routes/nginx/nginx-lifecycle.routes.js +4 -0
- package/lib/routes/nginx/nginx-route.context.js +23 -7
- package/lib/routes/nginx/nginx-server.routes.js +158 -6
- package/lib/routes/node-version.routes.js +7 -7
- package/lib/routes/project.routes.js +9 -9
- package/lib/routes/rss.routes.js +3 -3
- package/lib/routes/sprite-browse.routes.js +2 -1
- package/lib/routes/sprite.routes.js +3 -3
- package/lib/routes/static-files.routes.js +7 -7
- package/lib/routes/svn.routes.js +5 -3
- package/lib/routes/system.routes.js +20 -1
- package/lib/routes/task.routes.js +4 -4
- package/package.json +13 -6
- package/www/3rdpartylicenses.txt +52 -52
- package/www/browser/chunk-2L7NUOMX.js +2 -0
- package/www/browser/chunk-2NZJ7CN2.js +20 -0
- package/www/browser/{chunk-SPRWNZHF.js → chunk-3CM4SKDO.js} +2 -2
- package/www/browser/{chunk-EEVPZGEY.js → chunk-3I7BQCXS.js} +1 -1
- package/www/browser/{chunk-DXF7BVK5.js → chunk-3M56F2S2.js} +1 -1
- package/www/browser/chunk-3OHBKMAA.js +1 -0
- package/www/browser/{chunk-4KETC6EB.js → chunk-3XNNQFWR.js} +1 -1
- package/www/browser/chunk-4BRW6LCZ.js +4 -0
- package/www/browser/{chunk-HGONFYP6.js → chunk-4LBSLURA.js} +1 -1
- package/www/browser/{chunk-BYEU6KGP.js → chunk-4X42HB6N.js} +1 -1
- package/www/browser/chunk-5DYX4DUX.js +11 -0
- package/www/browser/chunk-6SYVDN5L.js +1 -0
- package/www/browser/{chunk-XJ5KZQNN.js → chunk-6YYNHZ2A.js} +1 -1
- package/www/browser/{chunk-G2W3B7TJ.js → chunk-75W3GVSO.js} +1 -1
- package/www/browser/{chunk-76TVIB33.js → chunk-7U44RF5F.js} +1 -1
- package/www/browser/{chunk-WD4IAQR3.js → chunk-AELTP6YN.js} +1 -1
- package/www/browser/chunk-AMXRL4GR.js +1 -0
- package/www/browser/chunk-AV2ZODEH.js +1 -0
- package/www/browser/chunk-AZ6SIMYH.js +1 -0
- package/www/browser/chunk-B3C35ET3.js +2 -0
- package/www/browser/chunk-BTQIUVTQ.js +1 -0
- package/www/browser/chunk-CN5J4WNO.js +1 -0
- package/www/browser/{chunk-N4LRZJBP.js → chunk-D2ODDESN.js} +1 -1
- package/www/browser/{chunk-O2EYEF7J.js → chunk-DE6E23ET.js} +1 -1
- package/www/browser/{chunk-SVQWPHF5.js → chunk-DIJPUYIA.js} +1 -1
- package/www/browser/{chunk-SYCNSLAW.js → chunk-DLGJD6YU.js} +4 -4
- package/www/browser/{chunk-JHMEKUZ5.js → chunk-EEDA5U4V.js} +1 -1
- package/www/browser/chunk-FK6Z4HLL.js +1 -0
- package/www/browser/chunk-FL6GDGHW.js +1 -0
- package/www/browser/{chunk-HRXCR3IN.js → chunk-FXCG34QS.js} +1 -1
- package/www/browser/{chunk-UJOHBN2Y.js → chunk-H2USFIYR.js} +1 -1
- package/www/browser/chunk-H5HGMOE6.js +1 -0
- package/www/browser/chunk-HB3HECPD.js +1 -0
- package/www/browser/{chunk-INL2PELS.js → chunk-HDNG236Q.js} +1 -1
- package/www/browser/{chunk-WF2QTF5L.js → chunk-HJTXXSMC.js} +1 -1
- package/www/browser/{chunk-LQ5OXSW7.js → chunk-HUMCWAKJ.js} +1 -1
- package/www/browser/chunk-IKB3EQCP.js +2 -0
- package/www/browser/{chunk-TMX5TTV3.js → chunk-K7PESFPY.js} +1 -1
- package/www/browser/{chunk-T3KK7ZXB.js → chunk-KRYMOHYF.js} +1 -1
- package/www/browser/{chunk-SQQNR223.js → chunk-M4QRBV3K.js} +1 -1
- package/www/browser/chunk-N2PELLMM.js +30 -0
- package/www/browser/{chunk-ACAZUX6C.js → chunk-ONXBYGIG.js} +1 -1
- package/www/browser/{chunk-JZULA5JV.js → chunk-OSBDR36P.js} +1 -1
- package/www/browser/chunk-OZCK4XVV.js +1 -0
- package/www/browser/{chunk-GDWS2L66.js → chunk-QJP5F735.js} +1 -1
- package/www/browser/{chunk-2X3MRS27.js → chunk-RGOYDY7H.js} +1 -1
- package/www/browser/{chunk-B6MBYCXI.js → chunk-UJKK4A7Y.js} +1 -1
- package/www/browser/{chunk-ZNTJRLVH.js → chunk-WD2EKZQC.js} +1 -1
- package/www/browser/{chunk-L5D75AMV.js → chunk-WUA5JFDD.js} +1 -1
- package/www/browser/chunk-XLFHB7RS.js +3 -0
- package/www/browser/{chunk-JU3TEDBV.js → chunk-YNW4HEJO.js} +1 -1
- package/www/browser/{chunk-RW2JPJV7.js → chunk-ZTDLWBW5.js} +1 -1
- package/www/browser/index.html +1 -1
- package/www/browser/main-N64WJCHX.js +34 -0
- package/www/browser/chunk-2BZRE4G7.js +0 -1
- package/www/browser/chunk-5T5KA5PG.js +0 -1
- package/www/browser/chunk-6CGHNKJI.js +0 -1
- package/www/browser/chunk-7J24TP36.js +0 -1
- package/www/browser/chunk-CZ5AZ3VW.js +0 -1
- package/www/browser/chunk-DW7F5PEA.js +0 -1
- package/www/browser/chunk-HHBPULJW.js +0 -2
- package/www/browser/chunk-KVFR7GFV.js +0 -20
- package/www/browser/chunk-L7TMCSHV.js +0 -1
- package/www/browser/chunk-MVQTKINJ.js +0 -1
- package/www/browser/chunk-OMDHJIUB.js +0 -1
- package/www/browser/chunk-OWUAAOHW.js +0 -2
- package/www/browser/chunk-PIK5YPIB.js +0 -1
- package/www/browser/chunk-RHLQRQDK.js +0 -9
- package/www/browser/chunk-S3SJ4VVM.js +0 -11
- package/www/browser/chunk-SIVPP74B.js +0 -0
- package/www/browser/chunk-UFY3FLDK.js +0 -1
- package/www/browser/chunk-UQGCUFNM.js +0 -1
- package/www/browser/chunk-UXXWRMM6.js +0 -1
- package/www/browser/chunk-UZRJGJTD.js +0 -2
- package/www/browser/chunk-WI67LAOV.js +0 -4
- package/www/browser/chunk-WNCM6QKB.js +0 -1
- package/www/browser/chunk-YETDFSQE.js +0 -1
- package/www/browser/chunk-YMTC5GZK.js +0 -1
- package/www/browser/chunk-YVZHJ76K.js +0 -1
- package/www/browser/main-6LN5C22E.js +0 -34
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import{a as At,b as Ut}from"./chunk-ACAZUX6C.js";import{a as Ot,e as Lt,f as Vt}from"./chunk-RW2JPJV7.js";import{a as Le,b as Ve}from"./chunk-INL2PELS.js";import{b as Bt,c as It,d as Rt}from"./chunk-HGONFYP6.js";import{a as Ie,b as Re,c as Ae,d as Ue,e as We}from"./chunk-SVQWPHF5.js";import{a as _e,b as he}from"./chunk-GDWS2L66.js";import{a as ze,b as Me,c as Ne}from"./chunk-ZNTJRLVH.js";import"./chunk-YVZHJ76K.js";import"./chunk-SIVPP74B.js";import{a as Be,b as xe}from"./chunk-WD4IAQR3.js";import"./chunk-HRXCR3IN.js";import"./chunk-DW7F5PEA.js";import"./chunk-KVFR7GFV.js";import{a as Ft,c as kt,d as pe,e as ue,f as fe}from"./chunk-4KETC6EB.js";import{b as Te,c as Ee,e as Tt}from"./chunk-JU3TEDBV.js";import{g as Ke,h as Ye,k as Qe,l as Ge}from"./chunk-BYEU6KGP.js";import{b as Dt}from"./chunk-5T5KA5PG.js";import{d as Pt,e as R}from"./chunk-UXXWRMM6.js";import{Eb as Y,Fa as I,Ga as D,Gb as U,Hb as Pe,Jb as De,Kb as W,Lb as Fe,Mb as Ze,Oa as F,Pa as k,Qb as Je,Ra as O,Sa as L,Ub as $,Zb as ie,ac as oe,dc as ke,fc as Oe,gc as Et}from"./chunk-SPRWNZHF.js";import"./chunk-HFZLJHYR.js";import"./chunk-L5D75AMV.js";import{g as je,n as T,u as qe}from"./chunk-T3KK7ZXB.js";import{$b as V,Ac as we,Ec as St,Fb as N,Fc as He,Gc as A,Ha as p,Ic as wt,Jc as c,Kc as C,Lb as te,Lc as G,M as Ct,Mc as zt,Nc as v,Oa as ve,Oc as y,Pc as S,Wb as z,Xc as de,Yb as M,Zb as le,_b as ce,a as E,ac as B,b as j,bc as g,cc as o,cd as Mt,dc as r,ec as x,fc as q,gc as K,hc as vt,ic as J,jc as X,kb as ut,lc as P,na as $e,nb as l,ra as bt,rc as m,sa as b,sb as ne,td as Nt,uc as d,vc as yt,wc as ft,ya as u,yc as ye,z as w,za as f,zc as Se}from"./chunk-WI67LAOV.js";var Q=class s{http=b(Pt);baseUrl="/api/nginx";async getStatus(){return await w(this.http.get(`${this.baseUrl}/status`))}async getStats(){return await w(this.http.get(`${this.baseUrl}/stats`))}async bind(e){return await w(this.http.post(`${this.baseUrl}/bind`,{path:e}))}async unbind(){return await w(this.http.post(`${this.baseUrl}/unbind`,{}))}async start(){return await w(this.http.post(`${this.baseUrl}/start`,{}))}async stop(){return await w(this.http.post(`${this.baseUrl}/stop`,{}))}async reload(){return await w(this.http.post(`${this.baseUrl}/reload`,{}))}async test(){return await w(this.http.post(`${this.baseUrl}/test`,{}))}async getConfig(){return await w(this.http.get(`${this.baseUrl}/config`))}async updateConfig(e){return await w(this.http.put(`${this.baseUrl}/config`,{content:e}))}async validateConfig(e){return await w(this.http.post(`${this.baseUrl}/config/validate`,{content:e}))}async getConfigFiles(){return await w(this.http.get(`${this.baseUrl}/config/files`))}async getConfigFile(e){let t=new qe().set("filePath",e);return await w(this.http.get(`${this.baseUrl}/config/file`,t))}async updateConfigFile(e,t){return await w(this.http.put(`${this.baseUrl}/config/file`,{filePath:e,content:t}))}async getServers(){return await w(this.http.get(`${this.baseUrl}/servers`))}async getServer(e){return await w(this.http.get(`${this.baseUrl}/servers/${e}`))}async createServer(e){return await w(this.http.post(`${this.baseUrl}/servers`,e))}async updateServer(e,t){return await w(this.http.put(`${this.baseUrl}/servers/${e}`,t))}async deleteServer(e){return await w(this.http.delete(`${this.baseUrl}/servers/${e}`))}async enableServer(e){return await w(this.http.patch(`${this.baseUrl}/servers/${e}/enable`,{}))}async disableServer(e){return await w(this.http.patch(`${this.baseUrl}/servers/${e}/disable`,{}))}async getUpstreams(){return await w(this.http.get(`${this.baseUrl}/upstreams`))}async saveUpstreams(e){return await w(this.http.put(`${this.baseUrl}/upstreams`,{upstreams:e}))}async getSslCertificates(){return await w(this.http.get(`${this.baseUrl}/ssl/certificates`))}async saveSslCertificates(e){return await w(this.http.put(`${this.baseUrl}/ssl/certificates`,{certificates:e}))}async getTrafficConfig(){return await w(this.http.get(`${this.baseUrl}/traffic`))}async saveTrafficConfig(e){return await w(this.http.put(`${this.baseUrl}/traffic`,e))}async getPerformanceConfig(){return await w(this.http.get(`${this.baseUrl}/performance`))}async savePerformanceConfig(e){return await w(this.http.put(`${this.baseUrl}/performance`,e))}async getModuleSettings(){return await w(this.http.get(`${this.baseUrl}/module/settings`))}async saveModuleSettings(e){return await w(this.http.put(`${this.baseUrl}/module/settings`,e))}async getErrorLogs(e=100){let t=new qe().set("tail",e.toString());return await w(this.http.get(`${this.baseUrl}/logs/error`,t))}async getAccessLogs(e=100){let t=new qe().set("tail",e.toString());return await w(this.http.get(`${this.baseUrl}/logs/access`,t))}async getLogsInfo(){return await w(this.http.get(`${this.baseUrl}/logs/info`))}static \u0275fac=function(t){return new(t||s)};static \u0275prov=$e({token:s,factory:s.\u0275fac,providedIn:"root"})};function Wt(){let s=window;if(!s.monaco)return;let e=s.monaco;e.languages.getLanguages().some(t=>t.id==="nginx")||(e.languages.register({id:"nginx",extensions:[".conf"],aliases:["Nginx"]}),e.languages.setMonarchTokensProvider("nginx",{tokenizer:{root:[[/#.*$/,"comment"],[/^\s*(http|server|events|stream|upstream|location|map|geo|types|if|in|limit_except|split_clients|match)\b/,"keyword.control"],[/\b(root|index|try_files|alias|return|rewrite|proxy_pass|fastcgi_pass|scgi_pass|uwsgi_pass|include|set|add_header|expires|proxy_set_header|fastcgi_param|listen|server_name|error_page|default_server|upstream|zone|least_conn|ip_hash|keepalive|keepalive_requests|keepalive_timeout|worker_processes|worker_connections|use|multi_accept|accept_mutex|sendfile|tcp_nopush|tcp_nodelay|reset_timedout|resolver|resolver_timeout|client_max_body_size|client_body_buffer|gzip|gunzip|gzip_types|gzip_comp_level|gzip_vary|open_file_cache|open_file_cache_valid|open_file_cache_min_uses|log_format|access_log|error_log|pid|user|group|daemon|master_process|worker_rlimit_nofile|worker_rlimit_core|worker_shutdown|load_module|types|default_type|server_tokens|aio|directio|sendfile_max_chunk|proxy_buffering|proxy_buffer_size|proxy_buffers|proxy_busy_buffers_size|proxy_temp_path|proxy_temp_file_write_size|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_temp_path|fastcgi_temp_file_write_size|fastcgi_cache|fastcgi_cache_key|fastcgi_cache_path|fastcgi_cache_valid|fastcgi_cache_use_stale|fastcgi_no_cache|fastcgi_cache_bypass|fastcgi_ignore_headers|fastcgi_intercept_errors|fastcgi_next_upstream|fastcgi_next_upstream_tries|fastcgi_connect_timeout|fastcgi_send_timeout|fastcgi_read_timeout|proxy_connect_timeout|proxy_send_timeout|proxy_read_timeout|proxy_ignore_client_abort|proxy_hide_header|proxy_pass_header|proxy_redirect|proxy_cookie_domain|proxy_cookie_path|proxy_set_header|proxy_http_version|proxy_force_ranges|proxy_cache|proxy_cache_key|proxy_cache_path|proxy_cache_valid|proxy_cache_use_stale|proxy_cache_background_update|proxy_cache_lock|proxy_cache_lock_timeout|proxy_no_cache|proxy_cache_bypass|proxy_ignore_headers|proxy_intercept_errors|proxy_next_upstream|proxy_next_upstream_tries|proxy_next_upstream_timeout|proxy_store|proxy_store_access|auth_basic|auth_basic_user_file|satisfy|allow|deny|limit_req|limit_req_zone|limit_req_status|limit_conn|limit_conn_zone|limit_conn_status|return|rewrite|break|set|if|set_by_lua|access_by_lua|content_by_lua|header_filter_by_lua|body_filter_by_lua|log_by_lua|rewrite_by_lua|init_by_lua|init_worker_by_lua|ssl_certificate|ssl_certificate_key|ssl_session_cache|ssl_session_timeout|ssl_protocols|ssl_ciphers|ssl_prefer_server_ciphers|ssl_verify_client|ssl_client_certificate|ssl_trusted_certificate|ssl_crl|real_ip_header|set_real_ip_from|geo|geoip_country|geoip_city|memcached_pass|memcached_connect_timeout|memcached_send_timeout|memcached_read_timeout|grpc_pass|grpc_connect_timeout|grpc_send_timeout|grpc_read_timeout|grpc_buffer_size|websocket|websocket_connect_timeout|websocket_send_timeout|websocket_read_timeout|websocket_ping_interval|websocket_ping_timeout|concat|concat_types|secure_link|secure_link_md5|add_before_body|add_after_body|addition_types|image_filter|xslt_stylesheet|xslt_types|random_index|geo|map|perl|perl_modules|perl_require|perl_handler|slice|mp4|mp4_buffer_size|mp4_max_buffer_size|flv|ogmp|status|status_format|check|check_http_send|check_http_expect_alive|check_shm_size|check_status|upstream_conf|js_set|js_content|js_header_filter_by_lua|js_body_filter_by_lua|js_log_by_lua|js_access_by_lua|js_content_by_lua|js_rewrite_by_lua|js_preread_by_lua|influxdb|set_|add_|proxy_|fastcgi_|uwsgi_|scgi_|grpc_|limit_|auth_|secure_|websocket_|ssl_|real_|memcached_|grpc_|proxy_next_upstream_tries|proxy_next_upstream_timeout)\b/,"keyword.directive"],[/\b(on|off|yes|no|true|false|default|none|any|auto|inline|upstream|down|backup|weight|max_fails|fail_timeout)\b/,"keyword.value"],[/\b\d+[kKmMgG]?\b/,"number"],[/"[^"]*"/,"string"],[/'[^']*'/,"string"],[/\$[a-zA-Z_][a-zA-Z0-9_]*/,"variable"],[/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d+)?\b/,"number"],[/\b\d{1,5}\b/,"number"]]}}),e.editor.defineTheme("nginx-theme",{base:"vs",inherit:!0,rules:[{token:"comment",foreground:"6A9955",fontStyle:"italic"},{token:"keyword.control",foreground:"0000FF",fontStyle:"bold"},{token:"keyword.directive",foreground:"795E26"},{token:"keyword.value",foreground:"0000FF"},{token:"string",foreground:"A31515"},{token:"number",foreground:"098658"},{token:"variable",foreground:"001188"}]}))}var Jt=["editorShell"];function Xt(s,e){s&1&&x(0,"nz-icon",7)}function en(s,e){if(s&1&&x(0,"nz-option",9),s&2){let t=e.$implicit,n=d();g("nzValue",t)("nzLabel",n.getFileLabel(t))}}function tn(s,e){s&1&&(x(0,"nz-icon",25),o(1,"span"),c(2,"\u914D\u7F6E\u9A8C\u8BC1\u901A\u8FC7"),r())}function nn(s,e){s&1&&(x(0,"nz-icon",26),o(1,"span"),c(2,"\u914D\u7F6E\u9A8C\u8BC1\u5931\u8D25"),r())}function on(s,e){if(s&1&&(o(0,"div",27),c(1),r()),s&2){let t=e.$implicit;l(),C(t)}}function rn(s,e){if(s&1&&(o(0,"div",23),V(1,on,2,1,"div",27,le),r()),s&2){let t,n=d(2);l(),B((t=n.validationResult())==null?null:t.errors)}}function an(s,e){if(s&1&&(o(0,"div",28),c(1),r()),s&2){let t=e.$implicit;l(),C(t)}}function sn(s,e){if(s&1&&(o(0,"div",24),V(1,an,2,1,"div",28,le),r()),s&2){let t,n=d(2);l(),B((t=n.validationResult())==null?null:t.warnings)}}function ln(s,e){if(s&1&&(o(0,"div",22),z(1,tn,3,0)(2,nn,3,0),z(3,rn,3,0,"div",23),z(4,sn,3,0,"div",24),r()),s&2){let t,n,i,a,_=d();A("error",!((t=_.validationResult())!=null&&t.valid)),l(),M((n=_.validationResult())!=null&&n.valid?1:2),l(2),M(!((i=_.validationResult())==null||i.errors==null)&&i.errors.length?3:-1),l(),M(!((a=_.validationResult())==null||a.warnings==null)&&a.warnings.length?4:-1)}}var Xe=class s{refreshToken=0;editorShellRef;nginxService=b(Q);message=b(R);config=p(null);configFiles=p([]);selectedFilePath=p("");originalContent=p("");editorContent=p("");filesLoading=p(!1);loading=p(!0);saving=p(!1);validating=p(!1);validationResult=p(null);editorHeight=p(520);editorOptions={language:"nginx"};mainConfigPath="";diffEditor=null;resizeObserver=null;async ngOnInit(){await this.loadConfig(!0),await this.loadConfigFiles()}ngAfterViewInit(){this.setupEditorHeightObserver(),this.updateEditorHeight()}ngOnChanges(e){let t=e.refreshToken;t&&!t.firstChange&&this.loadConfigFiles()}ngOnDestroy(){this.resizeObserver?.disconnect(),this.resizeObserver=null}onCodeEditorInitialized(e){Wt(),this.isDiffEditor(e)&&(this.diffEditor=e),this.scheduleLayout()}onEditorContentChange(e){this.editorContent.set(String(e??""))}async loadConfig(e=!1){this.loading.set(!0);try{let t=this.selectedFilePath(),n=e||!t||this.isSamePath(t,this.mainConfigPath||t),i=n?await this.nginxService.getConfig():await this.nginxService.getConfigFile(t);if(i.success&&i.config){let a=i.config.content||"";this.config.set(i.config),this.originalContent.set(a),this.editorContent.set(a),this.validationResult.set(null),this.selectedFilePath.set(i.config.mainConfigPath||t),(n||!this.mainConfigPath)&&(this.mainConfigPath=i.config.mainConfigPath),this.mergeConfigFiles([i.config.mainConfigPath]),this.updateEditorHeight(),this.scheduleLayout()}else this.message.error(i.error||"\u52A0\u8F7D\u914D\u7F6E\u5931\u8D25")}catch(t){this.message.error("\u52A0\u8F7D\u914D\u7F6E\u5931\u8D25: "+t.message)}finally{this.loading.set(!1)}}async saveConfig(){let e=this.selectedFilePath()||this.config()?.mainConfigPath||"";if(!e){this.message.error("\u672A\u9009\u62E9\u914D\u7F6E\u6587\u4EF6");return}this.saving.set(!0);try{let t=this.getCurrentEditorContent(),i=this.isSamePath(e,this.mainConfigPath||e)?await this.nginxService.updateConfig(t):await this.nginxService.updateConfigFile(e,t);i.success?(this.message.success("\u4FDD\u5B58\u6210\u529F"),await this.loadConfig(),await this.loadConfigFiles()):this.message.error(i.error||"\u4FDD\u5B58\u5931\u8D25")}catch(t){this.message.error("\u4FDD\u5B58\u5931\u8D25: "+t.message)}finally{this.saving.set(!1)}}async validateConfig(){this.validating.set(!0);try{let e=await this.nginxService.validateConfig(this.getCurrentEditorContent());this.validationResult.set(e),e.valid?this.message.success("\u914D\u7F6E\u9A8C\u8BC1\u901A\u8FC7"):this.message.error("\u914D\u7F6E\u9A8C\u8BC1\u5931\u8D25")}catch(e){this.message.error("\u9A8C\u8BC1\u5931\u8D25: "+e.message)}finally{this.validating.set(!1)}}async loadConfigFiles(){this.filesLoading.set(!0);try{let e=await this.nginxService.getConfigFiles();if(e.success){let t=e.files||[],n=this.buildFileList(t);this.configFiles.set(n);let i=this.selectedFilePath();i&&n.length&&!n.some(a=>this.isSamePath(a,i))&&(this.selectedFilePath.set(n[0]),await this.loadConfig())}else this.message.error(e.error||"\u52A0\u8F7D\u6587\u4EF6\u5217\u8868\u5931\u8D25")}catch(e){this.message.error("\u52A0\u8F7D\u6587\u4EF6\u5217\u8868\u5931\u8D25: "+e.message)}finally{this.filesLoading.set(!1)}}async onSelectConfigFile(e){let t=String(e||"").trim();!t||this.isSamePath(t,this.selectedFilePath())||(this.selectedFilePath.set(t),await this.loadConfig())}getFileLabel(e){let n=String(e||"").replace(/\\/g,"/").split("/");return n[n.length-1]||e}hasUnsavedChanges(){return this.getCurrentEditorContent()!==this.originalContent()}restoreFromOriginal(){let e=this.originalContent(),t=this.diffEditor?.getModel()?.modified;t&&t.setValue(e),this.editorContent.set(e),this.validationResult.set(null),this.scheduleLayout(),this.message.success("\u5DF2\u8FD8\u539F\u5230\u5DF2\u52A0\u8F7D\u7248\u672C")}getCurrentEditorContent(){let e=this.diffEditor?.getModel()?.modified;return e?e.getValue():this.editorContent()}mergeConfigFiles(e){let t=this.buildFileList([...this.configFiles(),...e]);this.configFiles.set(t)}buildFileList(e){let t=new Map;for(let i of e){let a=this.normalizePath(i);a&&(t.has(a)||t.set(a,i))}let n=Array.from(t.values());if(n.sort((i,a)=>i.localeCompare(a)),this.mainConfigPath){let i=n.findIndex(a=>this.isSamePath(a,this.mainConfigPath));if(i>0){let[a]=n.splice(i,1);n.unshift(a)}i<0&&n.unshift(this.mainConfigPath)}return n}isSamePath(e,t){return this.normalizePath(e)===this.normalizePath(t)}normalizePath(e){return String(e||"").trim().replace(/\\/g,"/").toLowerCase()}scheduleLayout(){setTimeout(()=>{try{this.updateEditorHeight(),this.syncDiffEditorHeight(),this.diffEditor?.layout()}catch{}},0)}setupEditorHeightObserver(){let e=this.editorShellRef?.nativeElement;!e||typeof ResizeObserver>"u"||(this.resizeObserver?.disconnect(),this.resizeObserver=new ResizeObserver(()=>{this.updateEditorHeight(),setTimeout(()=>{this.syncDiffEditorHeight(),this.diffEditor?.layout()},0)}),this.resizeObserver.observe(e))}updateEditorHeight(){let e=this.editorShellRef?.nativeElement;if(!e){this.editorHeight.set(520);return}let t=e.clientHeight>0?e.clientHeight:0,n=Math.max(520,t);this.editorHeight()!==n&&this.editorHeight.set(n)}syncDiffEditorHeight(){let e=this.diffEditor?.getContainerDomNode();if(!e)return;let t=`${this.editorHeight()}px`;e.style.height=t;let n=e.querySelector(".monaco-diff-editor");n&&(n.style.height=t,n.style.minHeight="520px")}isDiffEditor(e){return typeof e.getOriginalEditor=="function"}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx-config-editor"]],viewQuery:function(t,n){if(t&1&&ye(Jt,7),t&2){let i;Se(i=we())&&(n.editorShellRef=i.first)}},inputs:{refreshToken:"refreshToken"},features:[ve],decls:31,vars:17,consts:[["editorShell",""],[1,"config-editor"],[1,"editor-toolbar"],[1,"toolbar-left"],[1,"file-info"],["nzType","file-text","nzTheme","outline"],[1,"file-path"],["nzType","lock","nzTheme","outline","nz-tooltip","","nzTooltipTitle","\u914D\u7F6E\u6587\u4EF6\u53EA\u8BFB\uFF0C\u53EF\u80FD\u9700\u8981\u7BA1\u7406\u5458\u6743\u9650"],["nzPlaceHolder","\u9009\u62E9\u914D\u7F6E\u6587\u4EF6",1,"file-selector",3,"ngModelChange","ngModel","nzDisabled"],[3,"nzValue","nzLabel"],["nz-button","","nzType","default",3,"click","nzLoading"],["nzType","reload","nzTheme","outline"],[1,"editor-actions"],["nz-button","",3,"click","nzLoading"],["nz-button","","nzType","default","nz-popconfirm","","nzPopconfirmTitle","\u786E\u8BA4\u8FD8\u539F\u4E3A\u5F53\u524D\u5DF2\u52A0\u8F7D\u7248\u672C\uFF1F","nzPopconfirmPlacement","top",3,"nzOnConfirm","disabled"],["nzType","rollback","nzTheme","outline"],["nzType","check-circle","nzTheme","outline"],["nz-button","","nzType","primary",3,"click","nzLoading","disabled"],["nzType","save","nzTheme","outline"],[1,"editor-container"],["nzEditorMode","diff",1,"code-editor",3,"ngModelChange","nzEditorInitialized","ngModel","nzOriginalText","nzEditorOption","nzLoading"],[1,"validation-result",3,"error"],[1,"validation-result"],[1,"error-list"],[1,"warning-list"],["nzType","check-circle","nzTheme","outline",1,"success-icon"],["nzType","close-circle","nzTheme","outline",1,"error-icon"],[1,"error-item"],[1,"warning-item"]],template:function(t,n){if(t&1){let i=P();o(0,"div",1)(1,"div",2)(2,"div",3)(3,"div",4),x(4,"nz-icon",5),o(5,"span",6),c(6),r(),z(7,Xt,1,0,"nz-icon",7),r(),o(8,"nz-select",8),m("ngModelChange",function(_){return u(i),f(n.onSelectConfigFile(_))}),V(9,en,1,2,"nz-option",9,ce),r(),o(11,"button",10),m("click",function(){return u(i),f(n.loadConfigFiles())}),x(12,"nz-icon",11),c(13," \u5237\u65B0\u6587\u4EF6\u5217\u8868 "),r()(),o(14,"div",12)(15,"button",13),m("click",function(){return u(i),f(n.loadConfig())}),x(16,"nz-icon",11),c(17," \u5237\u65B0 "),r(),o(18,"button",14),m("nzOnConfirm",function(){return u(i),f(n.restoreFromOriginal())}),x(19,"nz-icon",15),c(20," \u8FD8\u539F "),r(),o(21,"button",13),m("click",function(){return u(i),f(n.validateConfig())}),x(22,"nz-icon",16),c(23," \u9A8C\u8BC1 "),r(),o(24,"button",17),m("click",function(){return u(i),f(n.saveConfig())}),x(25,"nz-icon",18),c(26," \u4FDD\u5B58 "),r()()(),o(27,"div",19,0)(29,"nz-code-editor",20),m("ngModelChange",function(_){return u(i),f(n.onEditorContentChange(_))})("nzEditorInitialized",function(_){return u(i),f(n.onCodeEditorInitialized(_))}),r()(),z(30,ln,5,5,"div",21),r()}if(t&2){let i,a,_;l(6),C(((i=n.config())==null?null:i.mainConfigPath)||"\u672A\u52A0\u8F7D"),l(),M(((a=n.config())==null?null:a.isWritable)===!1?7:-1),l(),g("ngModel",n.selectedFilePath())("nzDisabled",n.loading()||!n.configFiles().length),l(),B(n.configFiles()),l(2),g("nzLoading",n.filesLoading()),l(4),g("nzLoading",n.loading()),l(3),g("disabled",!n.hasUnsavedChanges()),l(3),g("nzLoading",n.validating()),l(3),g("nzLoading",n.saving())("disabled",!((_=n.config())!=null&&_.isWritable)),l(5),He("height",n.editorHeight(),"px"),g("ngModel",n.editorContent())("nzOriginalText",n.originalContent())("nzEditorOption",n.editorOptions)("nzLoading",n.loading()),l(),M(n.validationResult()?30:-1)}},dependencies:[T,$,U,W,L,O,F,k,Ut,At,D,I,Ve,Le,fe,pe,ue,Et,ke],styles:['.config-editor[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;border:1px solid #f0f0f0;border-radius:8px;overflow:hidden}.editor-toolbar[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:12px 16px;background:#fafafa;border-bottom:1px solid #f0f0f0}.editor-toolbar[_ngcontent-%COMP%] .toolbar-left[_ngcontent-%COMP%]{min-width:0;flex:1;display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;gap:10px}.editor-toolbar[_ngcontent-%COMP%] .file-info[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-size:var(--nginx-font-size-base, 14px);min-width:0}.editor-toolbar[_ngcontent-%COMP%] .file-info[_ngcontent-%COMP%] .file-path[_ngcontent-%COMP%]{font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace);color:#000000a6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.editor-toolbar[_ngcontent-%COMP%] .file-selector[_ngcontent-%COMP%]{width:min(560px,100%)}.editor-toolbar[_ngcontent-%COMP%] .editor-actions[_ngcontent-%COMP%]{display:flex;gap:8px;flex-shrink:0}.editor-container[_ngcontent-%COMP%]{flex:1;min-height:520px;position:relative}.code-editor[_ngcontent-%COMP%]{display:block;min-height:520px;width:100%;border:1px solid #d9d9d9}.validation-result[_ngcontent-%COMP%]{padding:12px 16px;background:#f6ffed;border-top:1px solid #b7eb8f;display:flex;align-items:center;gap:8px}.validation-result.error[_ngcontent-%COMP%]{background:#fff2f0;border-top-color:#ffccc7}.validation-result[_ngcontent-%COMP%] .success-icon[_ngcontent-%COMP%]{color:#52c41a}.validation-result[_ngcontent-%COMP%] .error-icon[_ngcontent-%COMP%]{color:#ff4d4f}.validation-result[_ngcontent-%COMP%] .error-list[_ngcontent-%COMP%], .validation-result[_ngcontent-%COMP%] .warning-list[_ngcontent-%COMP%]{margin-top:8px;width:100%}.validation-result[_ngcontent-%COMP%] .error-list[_ngcontent-%COMP%] .error-item[_ngcontent-%COMP%], .validation-result[_ngcontent-%COMP%] .warning-list[_ngcontent-%COMP%] .error-item[_ngcontent-%COMP%]{color:#ff4d4f;font-size:var(--nginx-font-size-sm, 12px);padding:4px 0;font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)}.validation-result[_ngcontent-%COMP%] .error-list[_ngcontent-%COMP%] .warning-item[_ngcontent-%COMP%], .validation-result[_ngcontent-%COMP%] .warning-list[_ngcontent-%COMP%] .warning-item[_ngcontent-%COMP%]{color:#faad14;font-size:var(--nginx-font-size-sm, 12px);padding:4px 0;font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)}[_nghost-%COMP%] nz-code-editor.code-editor.ant-code-editor{width:100%;min-height:520px!important;display:block}[_nghost-%COMP%] nz-code-editor.code-editor .monaco-diff-editor{min-height:520px}']})};var cn=["logBody"];function dn(s,e){s&1&&(vt(0,"span",8),c(1," \u5B9E\u65F6 "))}function mn(s,e){if(s&1&&c(0),s&2){let t=d();G(" ",t.status," ")}}function gn(s,e){s&1&&(q(0,"div",6),c(1,"\u6682\u65E0\u65E5\u5FD7"),K())}function pn(s,e){if(s&1&&(q(0,"div",7)(1,"span",9),c(2),K(),q(3,"span",10),c(4),K(),q(5,"span",11),c(6),K()()),s&2){let t=e.$implicit,n=d();l(2),C(t.time),l(),wt(n.getLevelClass(t.level)),l(),G(" ",n.getLevelLabel(t.level)," "),l(2),C(t.msg)}}var be=class s{title="error.log";status="";statusTone="default";showRealtime=!1;maxHeight=0;logs=[];logBody;scrollToBottom(){this.logBody&&(this.logBody.nativeElement.scrollTop=this.logBody.nativeElement.scrollHeight)}getLevelClass(e){return e}getLevelLabel(e){return{info:"INFO",warn:"WARN",error:"ERR",ok:"OK"}[e]??e.toUpperCase()}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx-log-viewer"]],viewQuery:function(t,n){if(t&1&&ye(cn,5),t&2){let i;Se(i=we())&&(n.logBody=i.first)}},inputs:{title:"title",status:"status",statusTone:"statusTone",showRealtime:"showRealtime",maxHeight:"maxHeight",logs:"logs"},decls:12,vars:13,consts:[["logBody",""],[1,"log-panel"],[1,"log-header"],[1,"log-header-title"],[1,"log-header-status"],[1,"log-body"],[1,"log-empty"],[1,"log-line"],[1,"realtime-dot"],[1,"log-time"],[1,"log-level"],[1,"log-msg"]],template:function(t,n){t&1&&(q(0,"div",1)(1,"div",2)(2,"span",3),c(3),K(),q(4,"span",4),z(5,dn,2,0)(6,mn,1,1),K()(),q(7,"div",5,0),z(9,gn,2,0,"div",6),V(10,pn,7,5,"div",7,le),K()()),t&2&&(l(3),C(n.title),l(),A("realtime",n.showRealtime)("status-ok",n.statusTone==="ok")("status-warn",n.statusTone==="warn")("status-error",n.statusTone==="error"),l(),M(n.showRealtime?5:6),l(2),He("max-height",n.maxHeight,"px"),l(2),M(n.logs.length===0?9:-1),l(),B(n.logs))},dependencies:[T,D],styles:['[_nghost-%COMP%]{display:block}.log-panel[_ngcontent-%COMP%]{background:#1b2332;border-radius:6px;overflow:hidden}.log-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;background:#00000026}.log-header-title[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#fff6}.log-header-status[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:#ffffff80;font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace);font-weight:600;display:flex;align-items:center;gap:5px}.log-header-status.realtime[_ngcontent-%COMP%], .log-header-status.status-ok[_ngcontent-%COMP%]{color:#3dd68c}.log-header-status.status-warn[_ngcontent-%COMP%]{color:#f7ba1e}.log-header-status.status-error[_ngcontent-%COMP%]{color:#ef5350}.realtime-dot[_ngcontent-%COMP%]{width:6px;height:6px;border-radius:50%;background:#3dd68c;animation:_ngcontent-%COMP%_pulse 2s ease-in-out infinite}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1}50%{opacity:.4}}.log-body[_ngcontent-%COMP%]{padding:10px 14px;max-height:180px;overflow-y:auto;font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace);font-size:var(--nginx-font-size-sm, 12px);line-height:1.8}.log-body[_ngcontent-%COMP%]::-webkit-scrollbar{width:6px}.log-body[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:transparent}.log-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:#333944;border-radius:3px}.log-empty[_ngcontent-%COMP%]{padding:16px 0;font-size:var(--nginx-font-size-sm, 12px);color:#ffffff59;text-align:center;font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)}.log-line[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:10px;cursor:default}.log-time[_ngcontent-%COMP%]{color:#ffffff80;flex-shrink:0;min-width:46px}.log-level[_ngcontent-%COMP%]{font-weight:700;flex-shrink:0;width:32px}.log-level.info[_ngcontent-%COMP%]{color:#165dff}.log-level.warn[_ngcontent-%COMP%]{color:#ff7d00}.log-level.error[_ngcontent-%COMP%]{color:#ef5350}.log-level.ok[_ngcontent-%COMP%]{color:#3dd68c}.log-msg[_ngcontent-%COMP%]{color:#ffffff8c;flex:1;word-break:break-all;white-space:pre-wrap}']})};var et=class s{nginxService=b(Q);wsClient=b(Dt);message=b(R);wsSub;logViewerComponent;activeLogTab=p("error");isConnected=p(!1);loading=p(!1);errorLogs=p([]);accessLogs=p([]);currentLogs=p([]);maxLogLines=500;statusText=p("\u672A\u8FDE\u63A5");statusTone=p("default");ngOnInit(){this.setupWsSubscription(),this.loadInitialLogs()}ngOnDestroy(){this.unsubscribeWs(),this.wsSub?.unsubscribe()}switchLogTab(e){this.activeLogTab.set(e),this.updateCurrentLogs(),this.isConnected()&&(this.unsubscribeWs(),this.subscribeWs(e))}scrollToBottom(){this.logViewerComponent?.scrollToBottom()}async refreshLogs(){await this.loadInitialLogs(),this.message.success("\u65E5\u5FD7\u5DF2\u5237\u65B0")}clearLogs(){this.activeLogTab()==="error"?this.errorLogs.set([]):this.accessLogs.set([]),this.updateCurrentLogs()}setupWsSubscription(){this.wsClient.stateChanges().subscribe(e=>{let t=e==="open";this.isConnected.set(t),this.statusText.set(t?"\u5DF2\u8FDE\u63A5":e==="connecting"?"\u8FDE\u63A5\u4E2D...":"\u672A\u8FDE\u63A5"),this.statusTone.set(t?"ok":"default"),t&&this.subscribeWs(this.activeLogTab())}),this.wsSub=this.wsClient.messages().pipe(Ct(e=>e.op==="nginx.log.append"||e.op==="nginx.log.tail")).subscribe(e=>{e.op==="nginx.log.tail"?(this.handleLogTail(e),setTimeout(()=>{this.scrollToBottom()},100)):e.op==="nginx.log.append"&&this.handleLogAppend(e)}),this.wsClient.connect()}subscribeWs(e){this.wsClient.send({op:"sub",topic:"nginx",logType:e,tail:50})}unsubscribeWs(){this.wsClient.send({op:"unsub",topic:"nginx"})}handleLogTail(e){let t=e.lines.map(n=>this.parseLogLine(n));e.logType==="error"?this.errorLogs.set(t):this.accessLogs.set(t),this.updateCurrentLogs()}handleLogAppend(e){let t=this.parseLogLine(e.line),n=e.logType===this.activeLogTab();e.logType==="error"?this.errorLogs.update(i=>{let a=[...i,t];return a.length>this.maxLogLines?a.slice(-this.maxLogLines):a}):this.accessLogs.update(i=>{let a=[...i,t];return a.length>this.maxLogLines?a.slice(-this.maxLogLines):a}),n&&this.updateCurrentLogs()}updateCurrentLogs(){let t=this.activeLogTab()==="error"?this.errorLogs():this.accessLogs();this.currentLogs.set(t)}async loadInitialLogs(){this.loading.set(!0);try{let[e,t]=await Promise.all([this.nginxService.getErrorLogs(100),this.nginxService.getAccessLogs(100)]);e.success&&e.lines&&this.errorLogs.set(e.lines.map(n=>this.parseLogLine(n))),t.success&&t.lines&&this.accessLogs.set(t.lines.map(n=>this.parseLogLine(n))),this.updateCurrentLogs()}catch(e){this.message.error("\u52A0\u8F7D\u65E5\u5FD7\u5931\u8D25: "+e.message)}finally{this.loading.set(!1)}}parseLogLine(e){let t=e.match(/^(\d{4}\/\d{2}\/\d{2}\s+\d{2}:\d{2}:\d{2})/),n=e.match(/\[(error|warn|notice|info|crit|alert|emerg)\]/i),i="";if(t)i=t[1].split(/\s+/)[1]||t[1];else{let _=e.match(/(\d{2}:\d{2}:\d{2})/);i=_?_[1]:new Date().toLocaleTimeString("zh-CN",{hour12:!1})}let a="info";if(n){let _=n[1].toLowerCase();_==="error"||_==="crit"||_==="alert"||_==="emerg"?a="error":_==="warn"&&(a="warn")}return{time:i,level:a,msg:e}}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx-secondary-logs-tab"]],viewQuery:function(t,n){if(t&1&&ye(be,5),t&2){let i;Se(i=we())&&(n.logViewerComponent=i.first)}},decls:14,vars:10,consts:[[1,"panel-header-row","compact"],[1,"log-tabs"],[1,"log-tab",3,"click"],[1,"log-actions"],["nz-button","","nzType","default",1,"log-action-btn",3,"click"],["nzType","vertical-align-bottom","nzTheme","outline"],["nz-button","","nzType","default",3,"click"],["nzType","reload","nzTheme","outline"],["nzType","delete","nzTheme","outline"],[3,"title","showRealtime","status","statusTone","logs","maxHeight"]],template:function(t,n){t&1&&(o(0,"div",0)(1,"div",1)(2,"button",2),m("click",function(){return n.switchLogTab("error")}),c(3," error.log "),r(),o(4,"button",2),m("click",function(){return n.switchLogTab("access")}),c(5," access.log "),r()(),o(6,"div",3)(7,"button",4),m("click",function(){return n.scrollToBottom()}),x(8,"nz-icon",5),r(),o(9,"button",6),m("click",function(){return n.refreshLogs()}),x(10,"nz-icon",7),r(),o(11,"button",4),m("click",function(){return n.clearLogs()}),x(12,"nz-icon",8),r()()(),x(13,"app-nginx-log-viewer",9)),t&2&&(l(2),A("active",n.activeLogTab()==="error"),l(2),A("active",n.activeLogTab()==="access"),l(9),g("title",n.activeLogTab()==="error"?"error.log":"access.log")("showRealtime",n.isConnected())("status",n.statusText())("statusTone",n.statusTone())("logs",n.currentLogs())("maxHeight",400))},dependencies:[T,L,O,F,k,D,I,be],styles:["[_nghost-%COMP%]{display:block}.panel-header-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:12px}.panel-header-row.compact[_ngcontent-%COMP%]{margin-bottom:10px}.log-tabs[_ngcontent-%COMP%]{display:flex;gap:0}.log-tab[_ngcontent-%COMP%]{background:transparent;color:var(--text-3);font-size:var(--nginx-font-size-sm, 12px);font-weight:500;padding:6px 12px;cursor:pointer;transition:all .12s ease;border:none;border-bottom:2px solid transparent;margin-bottom:-1px}.log-tab[_ngcontent-%COMP%]:hover{color:var(--text-2)}.log-tab.active[_ngcontent-%COMP%]{color:var(--blue);border-bottom-color:var(--blue);font-weight:600}.log-actions[_ngcontent-%COMP%]{display:flex;gap:4px}.log-action-btn[_ngcontent-%COMP%] nz-icon[_ngcontent-%COMP%]{font-size:12px}"]})};var ee=class s{constructor(e){this.nginxService=e}upstreams=p([]);sslCertificates=p([]);trafficConfig=p({rateLimitEnabled:!1,rateLimit:"",connLimitEnabled:!1,connLimit:0,blacklistIps:[]});performanceConfig=p({gzipEnabled:!1,gzipTypes:"",keepaliveTimeout:"",workerProcesses:"",sendfile:!1,tcpNopush:!1});moduleSettings=p({backupRetention:5,configBackupRetention:20});upstreamsLoading=p(!1);sslLoading=p(!1);trafficLoading=p(!1);performanceLoading=p(!1);settingsLoading=p(!1);async loadUpstreams(){this.upstreamsLoading.set(!0);try{let e=await this.nginxService.getUpstreams();return e.success&&e.upstreams&&this.upstreams.set(e.upstreams),e}finally{this.upstreamsLoading.set(!1)}}async saveUpstreams(e){let t=await this.nginxService.saveUpstreams(e);return t.success&&this.upstreams.set(e.map(n=>E({},n))),t}async loadSslCertificates(){this.sslLoading.set(!0);try{let e=await this.nginxService.getSslCertificates();return e.success&&e.certificates&&this.sslCertificates.set(e.certificates.map(t=>E({},t))),e}finally{this.sslLoading.set(!1)}}async saveSslCertificates(e){let t=await this.nginxService.saveSslCertificates(e);return t.success&&this.sslCertificates.set(e.map(n=>E({},n))),t}async loadTrafficConfig(){this.trafficLoading.set(!0);try{let e=await this.nginxService.getTrafficConfig();return e.success&&e.traffic&&this.trafficConfig.set(j(E({},e.traffic),{connLimit:Math.max(0,Number(e.traffic.connLimit??0))})),e}finally{this.trafficLoading.set(!1)}}async saveTrafficConfig(e){let t=await this.nginxService.saveTrafficConfig(e);return t.success&&this.trafficConfig.set(E({},e)),t}async loadPerformanceConfig(){this.performanceLoading.set(!0);try{let e=await this.nginxService.getPerformanceConfig();return e.success&&e.performance&&this.performanceConfig.set(E({},e.performance)),e}finally{this.performanceLoading.set(!1)}}async savePerformanceConfig(e){let t=await this.nginxService.savePerformanceConfig(e);return t.success&&this.performanceConfig.set(E({},e)),t}async loadModuleSettings(){this.settingsLoading.set(!0);try{let e=await this.nginxService.getModuleSettings();return e.success&&e.settings&&this.moduleSettings.set({backupRetention:Math.max(1,Number(e.settings.backupRetention??5)),configBackupRetention:Math.max(1,Number(e.settings.configBackupRetention??20))}),e}finally{this.settingsLoading.set(!1)}}async saveModuleSettings(e){let t=await this.nginxService.saveModuleSettings(e);return t.success&&t.settings&&this.moduleSettings.set({backupRetention:Math.max(1,Number(t.settings.backupRetention??5)),configBackupRetention:Math.max(1,Number(t.settings.configBackupRetention??20))}),t}static \u0275fac=function(t){return new(t||s)(bt(Q))};static \u0275prov=$e({token:s,factory:s.\u0275fac,providedIn:"root"})};var tt=class s{moduleStore=b(ee);message=b(R);saving=p(!1);dirty=p(!1);config=p({gzipEnabled:!1,gzipTypes:"",keepaliveTimeout:"",workerProcesses:"",sendfile:!1,tcpNopush:!1});async ngOnInit(){await this.load()}async load(){try{let e=await this.moduleStore.loadPerformanceConfig();e.success&&e.performance?(this.config.set(E({},this.moduleStore.performanceConfig())),this.dirty.set(!1)):this.message.error(e.error||"\u52A0\u8F7D\u6027\u80FD\u914D\u7F6E\u5931\u8D25")}catch(e){this.message.error("\u52A0\u8F7D\u6027\u80FD\u914D\u7F6E\u5931\u8D25: "+e.message)}}setBoolean(e,t){this.config.update(n=>j(E({},n),{[e]:t})),this.markDirty()}markDirty(){this.dirty.set(!0)}async save(){let e=j(E({},this.config()),{gzipTypes:this.config().gzipTypes.trim(),keepaliveTimeout:this.config().keepaliveTimeout.trim(),workerProcesses:this.config().workerProcesses.trim()});this.saving.set(!0);try{let t=await this.moduleStore.savePerformanceConfig(e);t.success?(this.message.success("\u6027\u80FD\u4F18\u5316\u914D\u7F6E\u5DF2\u4FDD\u5B58"),this.dirty.set(!1),await this.load()):this.message.error(t.error||"\u4FDD\u5B58\u6027\u80FD\u914D\u7F6E\u5931\u8D25")}catch(t){this.message.error("\u4FDD\u5B58\u6027\u80FD\u914D\u7F6E\u5931\u8D25: "+t.message)}finally{this.saving.set(!1)}}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx-secondary-perf-tab"]],decls:53,vars:8,consts:[[1,"panel-header-row"],[1,"panel-tip"],["nz-button","","nzType","primary",3,"click","nzLoading","disabled"],["nzType","save","nzTheme","outline"],[1,"setting-row"],[1,"setting-label"],[1,"setting-desc"],[1,"setting-ctrl"],["nzSize","small","name","gzipEnabled",3,"ngModelChange","ngModel"],["placeholder","65s",1,"setting-input",3,"ngModelChange","ngModel"],["placeholder","auto",1,"setting-input",3,"ngModelChange","ngModel"],["nzSize","small","name","sendfile",3,"ngModelChange","ngModel"],["nzSize","small","name","tcpNopush",3,"ngModelChange","ngModel"],[1,"setting-row","no-border"],[1,"full-width"],["rows","3",1,"setting-textarea","mono",3,"ngModelChange","ngModel"]],template:function(t,n){t&1&&(o(0,"div",0)(1,"span",1),c(2,"\u6027\u80FD\u4F18\u5316\u914D\u7F6E"),r(),o(3,"button",2),m("click",function(){return n.save()}),x(4,"nz-icon",3),c(5," \u4FDD\u5B58 "),r()(),o(6,"div",4)(7,"div")(8,"div",5),c(9,"Gzip \u538B\u7F29"),r(),o(10,"div",6),c(11,"\u662F\u5426\u542F\u7528 gzip"),r()(),o(12,"div",7)(13,"nz-switch",8),m("ngModelChange",function(a){return n.setBoolean("gzipEnabled",a)}),r()()(),o(14,"div",4)(15,"div")(16,"div",5),c(17,"Keepalive \u8D85\u65F6"),r(),o(18,"div",6),c(19,"keepalive_timeout"),r()(),o(20,"div",7)(21,"input",9),S("ngModelChange",function(a){return y(n.config().keepaliveTimeout,a)||(n.config().keepaliveTimeout=a),a}),m("ngModelChange",function(){return n.markDirty()}),r()()(),o(22,"div",4)(23,"div")(24,"div",5),c(25,"Worker \u8FDB\u7A0B"),r(),o(26,"div",6),c(27,"worker_processes"),r()(),o(28,"div",7)(29,"input",10),S("ngModelChange",function(a){return y(n.config().workerProcesses,a)||(n.config().workerProcesses=a),a}),m("ngModelChange",function(){return n.markDirty()}),r()()(),o(30,"div",4)(31,"div")(32,"div",5),c(33,"sendfile"),r(),o(34,"div",6),c(35,"\u9759\u6001\u6587\u4EF6\u96F6\u62F7\u8D1D"),r()(),o(36,"div",7)(37,"nz-switch",11),m("ngModelChange",function(a){return n.setBoolean("sendfile",a)}),r()()(),o(38,"div",4)(39,"div")(40,"div",5),c(41,"tcp_nopush"),r(),o(42,"div",6),c(43,"\u4F18\u5316\u5927\u6587\u4EF6\u4F20\u8F93"),r()(),o(44,"div",7)(45,"nz-switch",12),m("ngModelChange",function(a){return n.setBoolean("tcpNopush",a)}),r()()(),o(46,"div",13)(47,"div",14)(48,"div",5),c(49,"Gzip Types"),r(),o(50,"div",6),c(51,"\u7A7A\u683C\u5206\u9694 MIME \u5217\u8868"),r(),o(52,"textarea",15),S("ngModelChange",function(a){return y(n.config().gzipTypes,a)||(n.config().gzipTypes=a),a}),m("ngModelChange",function(){return n.markDirty()}),r()()()),t&2&&(l(3),g("nzLoading",n.saving())("disabled",!n.dirty()),l(10),g("ngModel",n.config().gzipEnabled),l(8),v("ngModel",n.config().keepaliveTimeout),l(8),v("ngModel",n.config().workerProcesses),l(8),g("ngModel",n.config().sendfile),l(8),g("ngModel",n.config().tcpNopush),l(7),v("ngModel",n.config().gzipTypes))},dependencies:[T,$,Y,U,W,L,O,F,k,D,I,he,_e],styles:['[_nghost-%COMP%]{display:block}.panel-header-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:12px}.panel-tip[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-3)}.setting-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--border-light)}.setting-row.no-border[_ngcontent-%COMP%]{border-bottom:none}.setting-label[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);font-weight:600;color:var(--text-1)}.setting-desc[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-3);margin-top:2px}.setting-ctrl[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.setting-input[_ngcontent-%COMP%]{width:110px;padding:5px 8px;border-radius:4px;border:1px solid var(--border);background:var(--bg-input);color:var(--text-2);font-size:var(--nginx-font-size-sm, 12px);text-align:center;font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace);outline:none}.setting-input[_ngcontent-%COMP%]:focus, .setting-textarea[_ngcontent-%COMP%]:focus{border-color:var(--blue);box-shadow:0 0 0 2px var(--blue-border)}.setting-textarea[_ngcontent-%COMP%]{width:100%;margin-top:8px;border:1px solid var(--border);border-radius:6px;background:var(--bg-input);color:var(--text-2);font-size:var(--nginx-font-size-sm, 12px);padding:8px 10px;resize:vertical;outline:none}.mono[_ngcontent-%COMP%]{font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)}']})};var nt=class s{moduleStore=b(ee);message=b(R);instance=null;configFileCount=0;unbind=new ne;backupRetention=p(5);configBackupRetention=p(20);retentionDirty=p(!1);saving=p(!1);async ngOnInit(){try{let e=await this.moduleStore.loadModuleSettings();e.success&&e.settings&&(this.backupRetention.set(Math.max(1,Number(e.settings.backupRetention??5))),this.configBackupRetention.set(Math.max(1,Number(e.settings.configBackupRetention??20))))}catch{}}setBackupRetention(e){let t=Number(e),n=Number.isFinite(t)?Math.max(1,Math.trunc(t)):1;this.backupRetention.set(n),this.retentionDirty.set(!0)}setConfigBackupRetention(e){let t=Number(e),n=Number.isFinite(t)?Math.max(1,Math.trunc(t)):1;this.configBackupRetention.set(n),this.retentionDirty.set(!0)}async saveBackupRetention(){this.saving.set(!0);try{let e=await this.moduleStore.saveModuleSettings({backupRetention:this.backupRetention(),configBackupRetention:this.configBackupRetention()});e.success&&e.settings?(this.backupRetention.set(Math.max(1,Number(e.settings.backupRetention??5))),this.configBackupRetention.set(Math.max(1,Number(e.settings.configBackupRetention??20))),this.retentionDirty.set(!1),this.message.success("\u5907\u4EFD\u4FDD\u7559\u6570\u91CF\u5DF2\u4FDD\u5B58")):this.message.error(e.error||"\u4FDD\u5B58\u5907\u4EFD\u4FDD\u7559\u6570\u91CF\u5931\u8D25")}catch(e){this.message.error("\u4FDD\u5B58\u5907\u4EFD\u4FDD\u7559\u6570\u91CF\u5931\u8D25: "+e.message)}finally{this.saving.set(!1)}}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx-secondary-settings-tab"]],inputs:{instance:"instance",configFileCount:"configFileCount"},outputs:{unbind:"unbind"},decls:58,vars:7,consts:[[1,"setting-row"],[1,"setting-label"],[1,"setting-desc"],[1,"setting-ctrl"],[1,"mono","strong"],["nz-input","","type","number","min","1",1,"retention-input","mono",3,"ngModelChange","ngModel"],["nz-button","","nzType","default",3,"click","disabled"],[1,"danger-box"],[1,"setting-label","danger"],[1,"setting-row","danger-row"],["nz-button","","nzDanger","","nzType","default",3,"click"]],template:function(t,n){t&1&&(o(0,"div",0)(1,"div")(2,"div",1),c(3,"Nginx \u8DEF\u5F84"),r(),o(4,"div",2),c(5,"\u53EF\u6267\u884C\u6587\u4EF6\u4F4D\u7F6E"),r()(),o(6,"div",3)(7,"span",4),c(8),r()()(),o(9,"div",0)(10,"div")(11,"div",1),c(12,"\u914D\u7F6E\u6587\u4EF6"),r(),o(13,"div",2),c(14,"\u4E3B\u914D\u7F6E\u8DEF\u5F84"),r()(),o(15,"div",3)(16,"span",4),c(17),r()()(),o(18,"div",0)(19,"div")(20,"div",1),c(21,"\u914D\u7F6E\u6587\u4EF6\u6570"),r(),o(22,"div",2),c(23,"\u6839\u636E include \u6307\u4EE4\u89E3\u6790"),r()(),o(24,"div",3)(25,"span",4),c(26),r()()(),o(27,"div",0)(28,"div")(29,"div",1),c(30,"\u72B6\u6001\u5907\u4EFD\u4FDD\u7559\u6570"),r(),o(31,"div",2),c(32,".ngm-nginx-module.json.backup-* \u6700\u591A\u4FDD\u7559\u6570\u91CF"),r()(),o(33,"div",3)(34,"input",5),m("ngModelChange",function(a){return n.setBackupRetention(a)}),r(),o(35,"button",6),m("click",function(){return n.saveBackupRetention()}),c(36," \u4FDD\u5B58 "),r()()(),o(37,"div",0)(38,"div")(39,"div",1),c(40,"\u914D\u7F6E\u5907\u4EFD\u4FDD\u7559\u6570"),r(),o(41,"div",2),c(42,"*.conf.backup-* \u6700\u591A\u4FDD\u7559\u6570\u91CF"),r()(),o(43,"div",3)(44,"input",5),m("ngModelChange",function(a){return n.setConfigBackupRetention(a)}),r(),o(45,"button",6),m("click",function(){return n.saveBackupRetention()}),c(46," \u4FDD\u5B58 "),r()()(),o(47,"div",7)(48,"div",8),c(49,"\u5371\u9669\u64CD\u4F5C"),r(),o(50,"div",9)(51,"div")(52,"div",1),c(53,"\u89E3\u7ED1\u5B9E\u4F8B"),r(),o(54,"div",2),c(55,"\u4E0D\u5F71\u54CD Nginx \u670D\u52A1\u672C\u8EAB"),r()(),o(56,"button",10),m("click",function(){return n.unbind.emit()}),c(57," \u89E3\u7ED1 "),r()()()),t&2&&(l(8),C((n.instance==null?null:n.instance.path)||"-"),l(9),C((n.instance==null?null:n.instance.configPath)||"-"),l(9),C(n.configFileCount),l(8),g("ngModel",n.backupRetention()),l(),g("disabled",!n.retentionDirty()||n.saving()),l(9),g("ngModel",n.configBackupRetention()),l(),g("disabled",!n.retentionDirty()||n.saving()))},dependencies:[T,$,Y,Ze,U,Je,W,L,O,F,k,oe,ie],styles:['.setting-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--border-light)}.setting-row[_ngcontent-%COMP%]:last-child{border-bottom:none}.setting-row.danger-row[_ngcontent-%COMP%]{padding:6px 0 0;border-bottom:none}.setting-label[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);font-weight:600;color:var(--text-1)}.setting-label.danger[_ngcontent-%COMP%]{color:var(--red);margin-bottom:4px}.setting-desc[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-3);margin-top:2px}.setting-ctrl[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.retention-input[_ngcontent-%COMP%]{width:92px}.mono[_ngcontent-%COMP%]{font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)}.mono.strong[_ngcontent-%COMP%]{color:var(--text-1);font-weight:600}.danger-box[_ngcontent-%COMP%]{margin-top:8px;padding:10px 12px;border:1px solid rgba(245,63,63,.2);background:var(--red-bg);border-radius:6px}@media (max-width: 768px){.setting-row[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}}']})};var fn=(s,e)=>e.id;function xn(s,e){s&1&&(o(0,"div",9),c(1,"\u6682\u65E0 SSL \u8BC1\u4E66\u914D\u7F6E\uFF0C\u70B9\u51FB\u201C\u65B0\u589E\u8BC1\u4E66\u201D\u5F00\u59CB\u7EF4\u62A4"),r())}function _n(s,e){if(s&1){let t=P();o(0,"div",12)(1,"div",13)(2,"div",14),c(3),r(),o(4,"span",15),c(5),r()(),o(6,"div",16)(7,"div",17)(8,"span",18),c(9,"\u5230\u671F\u65F6\u95F4"),r(),o(10,"span",19),c(11),r()(),o(12,"div",17)(13,"span",18),c(14,"\u81EA\u52A8\u7EED\u671F"),r(),o(15,"span",20),c(16),r()(),o(17,"div",21)(18,"span",18),c(19,"\u8BC1\u4E66\u8DEF\u5F84"),r(),o(20,"span",19),c(21),r()(),o(22,"div",21)(23,"span",18),c(24,"\u79C1\u94A5\u8DEF\u5F84"),r(),o(25,"span",19),c(26),r()()(),o(27,"div",22)(28,"button",23),m("click",function(){let i=u(t).$implicit,a=d(2);return f(a.openEditDrawer(i))}),c(29,"\u7F16\u8F91"),r(),o(30,"button",24),m("click",function(){let i=u(t).$implicit,a=d(2);return f(a.removeRow(i.id))}),c(31,"\u5220\u9664"),r()()()}if(s&2){let t=e.$implicit,n=d(2);l(3),C(t.domain),l(),g("ngClass",t.status),l(),C(n.statusText(t.status)),l(6),C(t.expireAt||"-"),l(5),C(t.autoRenew?"\u5DF2\u542F\u7528":"\u672A\u542F\u7528"),l(5),C(t.certPath||"-"),l(5),C(t.keyPath||"-")}}function hn(s,e){if(s&1&&V(0,_n,32,7,"div",12,fn),s&2){let t=d();B(t.rows())}}function Cn(s,e){if(s&1){let t=P();J(0),o(1,"div",25)(2,"form",26)(3,"nz-form-item")(4,"nz-form-label",27),c(5,"\u57DF\u540D"),r(),o(6,"nz-form-control")(7,"input",28),S("ngModelChange",function(i){u(t);let a=d();return y(a.drawerForm.domain,i)||(a.drawerForm.domain=i),f(i)}),r()()(),o(8,"div",29)(9,"nz-form-item")(10,"nz-form-label"),c(11,"\u72B6\u6001"),r(),o(12,"nz-form-control")(13,"nz-select",30),S("ngModelChange",function(i){u(t);let a=d();return y(a.drawerForm.status,i)||(a.drawerForm.status=i),f(i)}),x(14,"nz-option",31)(15,"nz-option",32)(16,"nz-option",33)(17,"nz-option",34),r()()(),o(18,"nz-form-item")(19,"nz-form-label"),c(20,"\u5230\u671F\u65F6\u95F4"),r(),o(21,"nz-form-control")(22,"input",35),S("ngModelChange",function(i){u(t);let a=d();return y(a.drawerForm.expireAt,i)||(a.drawerForm.expireAt=i),f(i)}),r()()()(),o(23,"nz-form-item")(24,"nz-form-label"),c(25,"\u81EA\u52A8\u7EED\u671F"),r(),o(26,"nz-form-control")(27,"nz-switch",36),S("ngModelChange",function(i){u(t);let a=d();return y(a.drawerForm.autoRenew,i)||(a.drawerForm.autoRenew=i),f(i)}),r()()(),o(28,"nz-form-item")(29,"nz-form-label",27),c(30,"\u8BC1\u4E66\u8DEF\u5F84"),r(),o(31,"nz-form-control")(32,"input",37),S("ngModelChange",function(i){u(t);let a=d();return y(a.drawerForm.certPath,i)||(a.drawerForm.certPath=i),f(i)}),r()()(),o(33,"nz-form-item")(34,"nz-form-label",27),c(35,"\u79C1\u94A5\u8DEF\u5F84"),r(),o(36,"nz-form-control")(37,"input",38),S("ngModelChange",function(i){u(t);let a=d();return y(a.drawerForm.keyPath,i)||(a.drawerForm.keyPath=i),f(i)}),r()()()()(),o(38,"div",39)(39,"button",3),m("click",function(){u(t);let i=d();return f(i.closeDrawer())}),c(40,"\u53D6\u6D88"),r(),o(41,"button",40),m("click",function(){u(t);let i=d();return f(i.submitDrawer())}),c(42,"\u786E\u5B9A"),r()(),X()}if(s&2){let t=d();l(7),v("ngModel",t.drawerForm.domain),l(6),v("ngModel",t.drawerForm.status),l(9),v("ngModel",t.drawerForm.expireAt),l(5),v("ngModel",t.drawerForm.autoRenew),l(5),v("ngModel",t.drawerForm.certPath),l(5),v("ngModel",t.drawerForm.keyPath)}}var ot=class s{moduleStore=b(ee);message=b(R);loading=p(!1);saving=p(!1);dirty=p(!1);rows=p([]);drawerVisible=p(!1);editingId=p(null);drawerForm=this.createEmptyForm();async ngOnInit(){await this.loadData()}async loadData(){this.loading.set(!0);try{let e=await this.moduleStore.loadSslCertificates();e.success&&e.certificates?(this.rows.set(this.moduleStore.sslCertificates().map(t=>E({},t))),this.dirty.set(!1)):this.message.error(e.error||"\u52A0\u8F7D SSL \u914D\u7F6E\u5931\u8D25")}catch(e){this.message.error("\u52A0\u8F7D SSL \u914D\u7F6E\u5931\u8D25: "+e.message)}finally{this.loading.set(!1)}}openCreateDrawer(){this.editingId.set(null),this.drawerForm=this.createEmptyForm(),this.drawerVisible.set(!0)}openEditDrawer(e){this.editingId.set(e.id),this.drawerForm={domain:e.domain,certPath:e.certPath,keyPath:e.keyPath,expireAt:e.expireAt,status:e.status,autoRenew:e.autoRenew},this.drawerVisible.set(!0)}closeDrawer(){this.drawerVisible.set(!1)}submitDrawer(){let e=this.drawerForm.domain.trim();if(!e){this.message.warning("\u8BC1\u4E66\u57DF\u540D\u4E0D\u80FD\u4E3A\u7A7A");return}if(!this.drawerForm.certPath.trim()){this.message.warning("\u8BC1\u4E66\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A");return}if(!this.drawerForm.keyPath.trim()){this.message.warning("\u79C1\u94A5\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A");return}if(this.drawerForm.expireAt.trim()&&!this.isValidDateString(this.drawerForm.expireAt.trim())){this.message.warning("\u5230\u671F\u65F6\u95F4\u683C\u5F0F\u65E0\u6548\uFF0C\u8BF7\u4F7F\u7528 YYYY-MM-DD");return}let t={id:this.editingId()||this.makeId(),domain:e,certPath:this.drawerForm.certPath.trim(),keyPath:this.drawerForm.keyPath.trim(),expireAt:this.drawerForm.expireAt.trim(),status:this.normalizeStatus(this.drawerForm.status),autoRenew:this.drawerForm.autoRenew};if(this.rows().find(i=>this.editingId()&&i.id===this.editingId()?!1:this.buildSslUniqueKey(i)===this.buildSslUniqueKey(t))){this.message.warning("\u8BC1\u4E66\u57DF\u540D + \u8BC1\u4E66\u8DEF\u5F84 + \u79C1\u94A5\u8DEF\u5F84\u91CD\u590D");return}this.editingId()?this.rows.update(i=>i.map(a=>a.id===t.id?t:a)):this.rows.update(i=>[...i,t]),this.markDirty(),this.closeDrawer()}removeRow(e){this.rows.update(t=>t.filter(n=>n.id!==e)),this.markDirty()}markDirty(){this.dirty.set(!0)}statusText(e){switch(e){case"valid":return"\u6709\u6548";case"expiring":return"\u5373\u5C06\u8FC7\u671F";case"expired":return"\u5DF2\u8FC7\u671F";default:return"\u5F85\u63A5\u5165"}}async saveAll(){let e=[],t=new Set;for(let n of this.rows()){let i=n.domain.trim();if(!i){this.message.warning("\u8BC1\u4E66\u57DF\u540D\u4E0D\u80FD\u4E3A\u7A7A");return}let a=n.certPath.trim(),_=n.keyPath.trim();if(!a){this.message.warning(`\u57DF\u540D "${i}" \u7684\u8BC1\u4E66\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A`);return}if(!_){this.message.warning(`\u57DF\u540D "${i}" \u7684\u79C1\u94A5\u8DEF\u5F84\u4E0D\u80FD\u4E3A\u7A7A`);return}let h=n.expireAt.trim();if(h&&!this.isValidDateString(h)){this.message.warning(`\u57DF\u540D "${i}" \u7684\u5230\u671F\u65F6\u95F4\u683C\u5F0F\u65E0\u6548\uFF0C\u8BF7\u4F7F\u7528 YYYY-MM-DD`);return}let ge=this.buildSslUniqueKey({domain:i,certPath:a,keyPath:_});if(t.has(ge)){this.message.warning(`\u68C0\u6D4B\u5230\u91CD\u590D\u8BC1\u4E66\u8BB0\u5F55: ${i}`);return}t.add(ge),e.push(j(E({},n),{id:n.id||this.makeId(),domain:i,certPath:a,keyPath:_,expireAt:h,status:this.normalizeStatus(n.status)}))}this.saving.set(!0);try{let n=await this.moduleStore.saveSslCertificates(e);n.success?(this.message.success("SSL \u914D\u7F6E\u5DF2\u4FDD\u5B58"),this.dirty.set(!1),await this.loadData()):this.message.error(n.error||"\u4FDD\u5B58 SSL \u914D\u7F6E\u5931\u8D25")}catch(n){this.message.error("\u4FDD\u5B58 SSL \u914D\u7F6E\u5931\u8D25: "+n.message)}finally{this.saving.set(!1)}}normalizeStatus(e){return e==="valid"||e==="expiring"||e==="expired"||e==="pending"?e:"pending"}makeId(){return`ssl-${Date.now()}-${Math.random().toString(16).slice(2,8)}`}isValidDateString(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;let[t,n,i]=e.split("-").map(_=>Number(_));if(!Number.isInteger(t)||!Number.isInteger(n)||!Number.isInteger(i))return!1;let a=new Date(Date.UTC(t,n-1,i));return a.getUTCFullYear()===t&&a.getUTCMonth()===n-1&&a.getUTCDate()===i}buildSslUniqueKey(e){return`${e.domain.trim().toLowerCase()}|${e.certPath.trim().toLowerCase()}|${e.keyPath.trim().toLowerCase()}`}createEmptyForm(){return{domain:"",certPath:"",keyPath:"",expireAt:"",status:"pending",autoRenew:!1}}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx-secondary-ssl-tab"]],decls:16,vars:8,consts:[[1,"panel-header-row"],[1,"panel-tip"],[1,"header-actions"],["nz-button","","nzType","default",3,"click"],["nzType","plus","nzTheme","outline"],["nz-button","","nzType","primary",3,"click","nzLoading","disabled"],["nzType","save","nzTheme","outline"],[3,"nzSpinning"],[1,"ssl-cards"],[1,"empty-row"],[3,"nzOnClose","nzVisible","nzTitle","nzWidth","nzPlacement"],[4,"nzDrawerContent"],[1,"ssl-card"],[1,"card-head"],[1,"card-domain","mono"],[1,"status-badge",3,"ngClass"],[1,"meta-list"],[1,"meta-item"],[1,"meta-label"],[1,"meta-value","mono"],[1,"meta-value"],[1,"meta-item","block"],[1,"card-actions"],["nz-button","","nzType","default","nzSize","small",3,"click"],["nz-button","","nzType","default","nzDanger","","nzSize","small",3,"click"],[1,"drawer-body"],["nz-form","","nzLayout","vertical"],["nzRequired",""],["nz-input","","name","sslDomain","placeholder","example.com",1,"mono",3,"ngModelChange","ngModel"],[1,"form-grid"],["name","sslStatus",3,"ngModelChange","ngModel"],["nzValue","valid","nzLabel","\u6709\u6548"],["nzValue","expiring","nzLabel","\u5373\u5C06\u8FC7\u671F"],["nzValue","expired","nzLabel","\u5DF2\u8FC7\u671F"],["nzValue","pending","nzLabel","\u5F85\u63A5\u5165"],["nz-input","","name","sslExpireAt","placeholder","YYYY-MM-DD",1,"mono",3,"ngModelChange","ngModel"],["name","sslAutoRenew",3,"ngModelChange","ngModel"],["nz-input","","name","sslCertPath","placeholder","/etc/nginx/ssl/fullchain.pem",1,"mono",3,"ngModelChange","ngModel"],["nz-input","","name","sslKeyPath","placeholder","/etc/nginx/ssl/privkey.pem",1,"mono",3,"ngModelChange","ngModel"],[1,"drawer-footer"],["nz-button","","nzType","primary",3,"click"]],template:function(t,n){t&1&&(o(0,"div",0)(1,"span",1),c(2,"\u7BA1\u7406 SSL \u8BC1\u4E66\u4E0E\u5230\u671F\u72B6\u6001"),r(),o(3,"div",2)(4,"button",3),m("click",function(){return n.openCreateDrawer()}),x(5,"nz-icon",4),c(6," \u65B0\u589E\u8BC1\u4E66 "),r(),o(7,"button",5),m("click",function(){return n.saveAll()}),x(8,"nz-icon",6),c(9," \u4FDD\u5B58 "),r()()(),o(10,"nz-spin",7)(11,"div",8),z(12,xn,2,0,"div",9)(13,hn,2,0),r()(),o(14,"nz-drawer",10),m("nzOnClose",function(){return n.closeDrawer()}),te(15,Cn,43,6,"ng-container",11),r()),t&2&&(l(7),g("nzLoading",n.saving())("disabled",!n.dirty()),l(3),g("nzSpinning",n.loading()),l(2),M(n.rows().length?13:12),l(2),g("nzVisible",n.drawerVisible())("nzTitle",n.editingId()?"\u7F16\u8F91\u8BC1\u4E66":"\u65B0\u589E\u8BC1\u4E66")("nzWidth",500)("nzPlacement","right"))},dependencies:[T,je,$,Fe,Y,U,Pe,W,De,L,O,F,k,Ne,Me,ze,We,Ee,Te,Re,Ie,Ue,Ae,D,I,oe,ie,fe,pe,ue,xe,Be,he,_e],styles:['[_nghost-%COMP%]{display:block}.panel-header-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:12px}.panel-tip[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-3)}.header-actions[_ngcontent-%COMP%]{display:flex;gap:8px}.ssl-cards[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:10px}.ssl-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:10px;border:1px solid var(--border-light);border-radius:6px;padding:10px;background:#fff}.card-head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid var(--border-light);padding-bottom:8px}.card-domain[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-base, 14px);color:var(--text-1);font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;height:24px;border-radius:12px;padding:0 10px;font-size:var(--nginx-font-size-sm, 12px);line-height:24px;border:1px solid transparent;white-space:nowrap}.status-badge.valid[_ngcontent-%COMP%]{color:var(--green);border-color:#00b42a33;background:var(--green-bg)}.status-badge.expiring[_ngcontent-%COMP%]{color:var(--orange);border-color:#ff7d0033;background:var(--orange-bg)}.status-badge.expired[_ngcontent-%COMP%]{color:var(--red);border-color:#f53f3f33;background:var(--red-bg)}.status-badge.pending[_ngcontent-%COMP%]{color:var(--text-2);border-color:var(--border);background:var(--bg-input)}.meta-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;flex:1}.meta-item[_ngcontent-%COMP%]{display:grid;grid-template-columns:80px 1fr;gap:8px;min-width:0}.meta-item.block[_ngcontent-%COMP%]{grid-template-columns:1fr}.meta-label[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-3);font-weight:600}.meta-value[_ngcontent-%COMP%]{color:var(--text-1);font-size:var(--nginx-font-size-sm, 12px);min-width:0;word-break:break-all}.mono[_ngcontent-%COMP%]{font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)}.card-actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:8px}.drawer-body[_ngcontent-%COMP%]{padding:0 24px 16px}.form-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:12px}.drawer-footer[_ngcontent-%COMP%]{position:absolute;bottom:0;left:0;right:0;padding:12px 24px;border-top:1px solid rgba(0,0,0,.06);display:flex;justify-content:flex-end;gap:8px;background:#fff}.empty-row[_ngcontent-%COMP%]{grid-column:1 / -1;border:1px dashed var(--border);border-radius:6px;color:var(--text-3);font-size:var(--nginx-font-size-sm, 12px);text-align:center;padding:20px 12px;background:#fff}@media (max-width: 992px){.panel-header-row[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}.header-actions[_ngcontent-%COMP%]{width:100%}.form-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}']})};var rt=class s{loading=!1;logs=[];runTest=new ne;static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx-secondary-test-tab"]],inputs:{loading:"loading",logs:"logs"},outputs:{runTest:"runTest"},decls:7,vars:5,consts:[[1,"panel-header-row"],[1,"panel-tip"],["nz-button","","nzType","default","nzSize","small",1,"run-test-btn",3,"click","nzLoading"],["nzType","check-circle","nzTheme","outline"],["statusTone","ok",3,"title","status","logs","maxHeight"]],template:function(t,n){t&1&&(o(0,"div",0)(1,"span",1),c(2,"\u9A8C\u8BC1 Nginx \u914D\u7F6E\u6587\u4EF6\u8BED\u6CD5\u6B63\u786E\u6027"),r(),o(3,"button",2),m("click",function(){return n.runTest.emit()}),x(4,"nz-icon",3),c(5," \u6267\u884C\u68C0\u6D4B "),r()(),x(6,"app-nginx-log-viewer",4)),t&2&&(l(3),g("nzLoading",n.loading),l(3),g("title","\u7ED3\u679C")("status","\u2713 syntax is ok")("logs",n.logs)("maxHeight",180))},dependencies:[T,L,O,F,k,D,I,be],styles:["[_nghost-%COMP%]{display:block}.panel-header-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:12px}.panel-tip[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-base, 14px);color:var(--text-2)}.run-test-btn[_ngcontent-%COMP%]{background:var(--green);color:#fff;border-color:var(--green);font-weight:600;min-height:28px;padding-inline:10px}.run-test-btn[_ngcontent-%COMP%]:hover, .run-test-btn[_ngcontent-%COMP%]:focus{background:#00a122;border-color:#00a122;color:#fff}@media (max-width: 992px){.panel-header-row[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}}"]})};var at=class s{moduleStore=b(ee);message=b(R);saving=p(!1);dirty=p(!1);config=p({rateLimitEnabled:!1,rateLimit:"",connLimitEnabled:!1,connLimit:0,blacklistIps:[]});blacklistText=p("");async ngOnInit(){await this.load()}async load(){try{let e=await this.moduleStore.loadTrafficConfig();if(e.success&&e.traffic){let t=this.moduleStore.trafficConfig();this.config.set(j(E({},t),{connLimit:Math.max(0,Number(t.connLimit??0))})),this.blacklistText.set((t.blacklistIps||[]).join(`
|
|
2
|
-
`)),this.dirty.set(!1)}else this.message.error(e.error||"\u52A0\u8F7D\u6D41\u91CF\u914D\u7F6E\u5931\u8D25")}catch(e){this.message.error("\u52A0\u8F7D\u6D41\u91CF\u914D\u7F6E\u5931\u8D25: "+e.message)}}setRateLimitEnabled(e){this.config.update(t=>j(E({},t),{rateLimitEnabled:e})),this.markDirty()}setConnLimitEnabled(e){this.config.update(t=>j(E({},t),{connLimitEnabled:e})),this.markDirty()}setBlacklistText(e){this.blacklistText.set(e||""),this.markDirty()}markDirty(){this.dirty.set(!0)}async save(){let e=j(E({},this.config()),{rateLimit:this.config().rateLimit.trim(),connLimit:this.config().connLimitEnabled?Math.max(1,Number(this.config().connLimit||1)):Math.max(0,Number(this.config().connLimit||0)),blacklistIps:this.blacklistText().split(/[\n,]/).map(t=>t.trim()).filter(Boolean)});this.saving.set(!0);try{let t=await this.moduleStore.saveTrafficConfig(e);t.success?(this.message.success("\u6D41\u91CF\u63A7\u5236\u914D\u7F6E\u5DF2\u4FDD\u5B58"),this.dirty.set(!1),await this.load()):this.message.error(t.error||"\u4FDD\u5B58\u6D41\u91CF\u63A7\u5236\u914D\u7F6E\u5931\u8D25")}catch(t){this.message.error("\u4FDD\u5B58\u6D41\u91CF\u63A7\u5236\u914D\u7F6E\u5931\u8D25: "+t.message)}finally{this.saving.set(!1)}}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx-secondary-traffic-tab"]],decls:31,vars:7,consts:[[1,"panel-header-row"],[1,"panel-tip"],["nz-button","","nzType","primary",3,"click","nzLoading","disabled"],["nzType","save","nzTheme","outline"],[1,"setting-row"],[1,"setting-label"],[1,"setting-desc"],[1,"setting-ctrl"],["placeholder","20r/s",1,"setting-input",3,"ngModelChange","ngModel"],["name","rateLimitEnabled","nzSize","small",3,"ngModelChange","ngModel"],["type","number","min","1",1,"setting-input",3,"ngModelChange","ngModel"],["name","connLimitEnabled","nzSize","small",3,"ngModelChange","ngModel"],[1,"setting-row","no-border"],[1,"full-width"],["rows","4","placeholder",`192.168.1.10
|
|
3
|
-
10.10.10.5`,1,"setting-textarea","mono",3,"ngModelChange","ngModel"]],template:function(t,n){t&1&&(o(0,"div",0)(1,"span",1),c(2,"\u6D41\u91CF\u63A7\u5236\u7B56\u7565"),r(),o(3,"button",2),m("click",function(){return n.save()}),x(4,"nz-icon",3),c(5," \u4FDD\u5B58 "),r()(),o(6,"div",4)(7,"div")(8,"div",5),c(9,"\u8BF7\u6C42\u9650\u6D41"),r(),o(10,"div",6),c(11,"\u6BCF\u4E2A IP \u6BCF\u79D2\u6700\u5927\u8BF7\u6C42\u6570"),r()(),o(12,"div",7)(13,"input",8),S("ngModelChange",function(a){return y(n.config().rateLimit,a)||(n.config().rateLimit=a),a}),m("ngModelChange",function(){return n.markDirty()}),r(),o(14,"nz-switch",9),m("ngModelChange",function(a){return n.setRateLimitEnabled(a)}),r()()(),o(15,"div",4)(16,"div")(17,"div",5),c(18,"\u8FDE\u63A5\u9650\u5236"),r(),o(19,"div",6),c(20,"\u5355 IP \u6700\u5927\u5E76\u53D1\u8FDE\u63A5\u6570"),r()(),o(21,"div",7)(22,"input",10),S("ngModelChange",function(a){return y(n.config().connLimit,a)||(n.config().connLimit=a),a}),m("ngModelChange",function(){return n.markDirty()}),r(),o(23,"nz-switch",11),m("ngModelChange",function(a){return n.setConnLimitEnabled(a)}),r()()(),o(24,"div",12)(25,"div",13)(26,"div",5),c(27,"\u9ED1\u540D\u5355 IP"),r(),o(28,"div",6),c(29,"\u9017\u53F7\u6216\u6362\u884C\u5206\u9694"),r(),o(30,"textarea",14),m("ngModelChange",function(a){return n.setBlacklistText(a)}),r()()()),t&2&&(l(3),g("nzLoading",n.saving())("disabled",!n.dirty()),l(10),v("ngModel",n.config().rateLimit),l(),g("ngModel",n.config().rateLimitEnabled),l(8),v("ngModel",n.config().connLimit),l(),g("ngModel",n.config().connLimitEnabled),l(7),g("ngModel",n.blacklistText()))},dependencies:[T,$,Y,Ze,U,Je,W,L,O,F,k,D,I,he,_e],styles:['[_nghost-%COMP%]{display:block}.panel-header-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:12px}.panel-tip[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-3)}.setting-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--border-light)}.setting-row.no-border[_ngcontent-%COMP%]{border-bottom:none}.setting-label[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);font-weight:600;color:var(--text-1)}.setting-desc[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-3);margin-top:2px}.setting-ctrl[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.setting-input[_ngcontent-%COMP%]{width:110px;padding:5px 8px;border-radius:4px;border:1px solid var(--border);background:var(--bg-input);color:var(--text-2);font-size:var(--nginx-font-size-sm, 12px);text-align:center;font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace);outline:none}.setting-input[_ngcontent-%COMP%]:focus, .setting-textarea[_ngcontent-%COMP%]:focus{border-color:var(--blue);box-shadow:0 0 0 2px var(--blue-border)}.setting-textarea[_ngcontent-%COMP%]{width:100%;margin-top:8px;border:1px solid var(--border);border-radius:6px;background:var(--bg-input);color:var(--text-2);font-size:var(--nginx-font-size-sm, 12px);padding:8px 10px;resize:vertical;outline:none}.mono[_ngcontent-%COMP%]{font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)}']})};var bn=(s,e)=>e.id,vn=(s,e)=>e+"-"+s;function yn(s,e){s&1&&(o(0,"div",17),x(1,"nz-icon",20),o(2,"p"),c(3,"\u6682\u65E0 Upstream \u914D\u7F6E"),r()())}function Sn(s,e){if(s&1&&(o(0,"span",27),c(1),r()),s&2){let t=e.$implicit;l(),C(t)}}function wn(s,e){if(s&1){let t=P();o(0,"div",22)(1,"div",9)(2,"span",23),c(3),r()(),o(4,"div",10)(5,"span",24),c(6),r()(),o(7,"div",11)(8,"span",25),c(9),r()(),o(10,"div",12)(11,"div",26),V(12,Sn,2,1,"span",27,vn),r()(),o(14,"div",13)(15,"span",28),c(16),r()(),o(17,"div",14)(18,"div",29)(19,"button",30),m("click",function(){let i=u(t).$implicit,a=d(2);return f(a.openEditDrawer(i))}),x(20,"nz-icon",31),r(),o(21,"button",32),m("click",function(){let i=u(t).$implicit,a=d(2);return f(a.removeRow(i.id))}),x(22,"nz-icon",33),r()()()()}if(s&2){let t=e.$implicit,n=d(2);A("readonly-row",t.readonly),l(3),C(t.name),l(2),A("managed",t.managed),g("title",n.sourceHint(t)),l(),G(" ",n.sourceLabel(t)," "),l(3),C(t.strategy),l(3),B(t.nodes),l(4),C(t.nodes.length),l(3),g("disabled",t.readonly),l(2),g("disabled",t.readonly)}}function zn(s,e){if(s&1&&V(0,wn,23,11,"div",21,bn),s&2){let t=d();B(t.rows())}}function Mn(s,e){if(s&1){let t=P();J(0),o(1,"div",34)(2,"form",35)(3,"nz-form-item")(4,"nz-form-label",36),c(5,"\u540D\u79F0"),r(),o(6,"nz-form-control")(7,"input",37),S("ngModelChange",function(i){u(t);let a=d();return y(a.drawerForm.name,i)||(a.drawerForm.name=i),f(i)}),r()()(),o(8,"nz-form-item")(9,"nz-form-label",36),c(10,"\u7B56\u7565"),r(),o(11,"nz-form-control")(12,"nz-select",38),S("ngModelChange",function(i){u(t);let a=d();return y(a.drawerForm.strategy,i)||(a.drawerForm.strategy=i),f(i)}),x(13,"nz-option",39)(14,"nz-option",40)(15,"nz-option",41)(16,"nz-option",42),r()()(),o(17,"nz-form-item")(18,"nz-form-label",36),c(19,"\u8282\u70B9\uFF08\u9017\u53F7\u6216\u6362\u884C\u5206\u9694\uFF09"),r(),o(20,"nz-form-control")(21,"textarea",43),S("ngModelChange",function(i){u(t);let a=d();return y(a.drawerForm.nodesText,i)||(a.drawerForm.nodesText=i),f(i)}),r()()()()(),o(22,"div",44)(23,"button",3),m("click",function(){u(t);let i=d();return f(i.closeDrawer())}),c(24,"\u53D6\u6D88"),r(),o(25,"button",45),m("click",function(){u(t);let i=d();return f(i.submitDrawer())}),c(26,"\u786E\u5B9A"),r()(),X()}if(s&2){let t=d();l(7),v("ngModel",t.drawerForm.name),l(5),v("ngModel",t.drawerForm.strategy),l(9),v("ngModel",t.drawerForm.nodesText)}}var st=class s{moduleStore=b(ee);message=b(R);loading=p(!1);saving=p(!1);dirty=p(!1);rows=p([]);drawerVisible=p(!1);editingId=p(null);drawerForm=this.createEmptyForm();async ngOnInit(){await this.loadData()}async loadData(){this.loading.set(!0);try{let e=await this.moduleStore.loadUpstreams();e.success&&e.upstreams?(this.rows.set(this.moduleStore.upstreams().map(t=>({id:t.id,name:t.name,strategy:t.strategy,nodes:(t.nodes||[]).map(n=>n.trim()).filter(Boolean),sourceFile:t.sourceFile||"",managed:t.managed!==!1,readonly:t.readonly===!0||t.managed===!1}))),this.dirty.set(!1)):this.message.error(e.error||"\u52A0\u8F7D Upstream \u5931\u8D25")}catch(e){this.message.error("\u52A0\u8F7D Upstream \u5931\u8D25: "+e.message)}finally{this.loading.set(!1)}}openCreateDrawer(){this.editingId.set(null),this.drawerForm=this.createEmptyForm(),this.drawerVisible.set(!0)}openEditDrawer(e){if(e.readonly){this.message.info("\u8BE5 Upstream \u6765\u81EA\u5916\u90E8\u914D\u7F6E\u6587\u4EF6\uFF0C\u5F53\u524D\u4E3A\u53EA\u8BFB\u5C55\u793A");return}this.editingId.set(e.id),this.drawerForm={name:e.name,strategy:e.strategy,nodesText:e.nodes.join(", ")},this.drawerVisible.set(!0)}closeDrawer(){this.drawerVisible.set(!1)}submitDrawer(){let e=this.drawerForm.name.trim();if(!e){this.message.warning("Upstream \u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");return}let t=this.parseNodes(this.drawerForm.nodesText);if(!t.length){this.message.warning(`Upstream "${e}" \u81F3\u5C11\u9700\u8981\u4E00\u4E2A\u8282\u70B9`);return}let n={id:this.editingId()||this.makeId(),name:e,strategy:this.drawerForm.strategy,nodes:t,sourceFile:"",managed:!0,readonly:!1};this.editingId()?this.rows.update(i=>i.map(a=>a.id===n.id?j(E({},n),{sourceFile:a.sourceFile,managed:a.managed,readonly:a.readonly}):a)):this.rows.update(i=>[...i,n]),this.markDirty(),this.closeDrawer()}removeRow(e){if(this.rows().find(n=>n.id===e)?.readonly){this.message.info("\u8BE5 Upstream \u6765\u81EA\u5916\u90E8\u914D\u7F6E\u6587\u4EF6\uFF0C\u5F53\u524D\u4E0D\u53EF\u5220\u9664");return}this.rows.update(n=>n.filter(i=>i.id!==e)),this.markDirty()}markDirty(){this.dirty.set(!0)}async saveAll(){let e=[];for(let t of this.rows()){if(t.readonly)continue;let n=t.name.trim();if(!n){this.message.warning("Upstream \u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");return}if(!/^[a-zA-Z0-9._-]+$/.test(n)){this.message.warning(`Upstream \u540D\u79F0\u4E0D\u5408\u6CD5: ${n}`);return}let i=(t.nodes||[]).map(a=>a.trim()).filter(Boolean);if(!i.length){this.message.warning(`Upstream "${n}" \u81F3\u5C11\u9700\u8981\u4E00\u4E2A\u8282\u70B9`);return}e.push({id:t.id,name:n,strategy:t.strategy,nodes:i,sourceFile:t.sourceFile,managed:!0,readonly:!1})}this.saving.set(!0);try{let t=await this.moduleStore.saveUpstreams(e);t.success?(this.message.success("Upstream \u914D\u7F6E\u5DF2\u4FDD\u5B58"),this.dirty.set(!1),await this.loadData()):this.message.error(t.error||"\u4FDD\u5B58 Upstream \u5931\u8D25")}catch(t){this.message.error("\u4FDD\u5B58 Upstream \u5931\u8D25: "+t.message)}finally{this.saving.set(!1)}}makeId(){return`upstream-${Date.now()}-${Math.random().toString(16).slice(2,8)}`}parseNodes(e){return e.split(/[,;\n]/).map(t=>t.trim()).filter(Boolean)}createEmptyForm(){return{name:"",strategy:"round-robin",nodesText:""}}sourceLabel(e){let n=(e.sourceFile||"").replace(/\\/g,"/");return n.split("/").pop()||n||(e.managed?"\u6258\u7BA1\u6587\u4EF6":"\u5916\u90E8\u6587\u4EF6")}sourceHint(e){return e.sourceFile?`${e.managed?"\u6258\u7BA1":"\u5916\u90E8"}: ${e.sourceFile}`:e.managed?"\u6258\u7BA1 upstream\uFF08\u6765\u6E90\u672A\u89E3\u6790\uFF09":"\u5916\u90E8 upstream\uFF08\u6765\u6E90\u672A\u89E3\u6790\uFF09"}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx-secondary-upstream-tab"]],decls:30,vars:8,consts:[[1,"list-header"],[1,"panel-tip"],[1,"header-actions"],["nz-button","","nzType","default",3,"click"],["nzType","plus","nzTheme","outline"],["nz-button","","nzType","primary",3,"click","nzLoading","disabled"],["nzType","save","nzTheme","outline"],[1,"upstream-grid-shell"],[1,"upstream-grid-head"],[1,"cell","name-col"],[1,"cell","source-col"],[1,"cell","strategy-col"],[1,"cell","nodes-col"],[1,"cell","count-col"],[1,"cell","action-col"],[3,"nzSpinning"],[1,"upstream-grid-body"],[1,"empty-state"],[3,"nzOnClose","nzVisible","nzTitle","nzWidth","nzPlacement"],[4,"nzDrawerContent"],["nzType","cluster","nzTheme","outline",1,"empty-icon"],[1,"upstream-grid-row",3,"readonly-row"],[1,"upstream-grid-row"],[1,"upstream-name","mono"],[1,"source-badge",3,"title"],[1,"strategy-pill","mono"],[1,"nodes-wrap"],[1,"node-chip","mono"],[1,"node-count"],[1,"row-actions"],["nz-button","","nzSize","small","nzType","link",3,"click","disabled"],["nzType","edit","nzTheme","outline"],["nz-button","","nzSize","small","nzType","link","nzDanger","",3,"click","disabled"],["nzType","delete","nzTheme","outline"],[1,"drawer-body"],["nz-form","","nzLayout","vertical"],["nzRequired",""],["nz-input","","name","upstreamName","placeholder","\u4F8B\u5982 backend_cluster",1,"mono",3,"ngModelChange","ngModel"],["name","upstreamStrategy",3,"ngModelChange","ngModel"],["nzValue","round-robin","nzLabel","round-robin"],["nzValue","least_conn","nzLabel","least_conn"],["nzValue","ip_hash","nzLabel","ip_hash"],["nzValue","hash","nzLabel","hash"],["nz-input","","rows","5","name","upstreamNodes","placeholder","127.0.0.1:3001, 127.0.0.1:3002",1,"mono",3,"ngModelChange","ngModel"],[1,"drawer-footer"],["nz-button","","nzType","primary",3,"click"]],template:function(t,n){t&1&&(o(0,"div",0)(1,"span",1),c(2,"\u7BA1\u7406\u540E\u7AEF\u670D\u52A1\u96C6\u7FA4\u7684\u8D1F\u8F7D\u5747\u8861\u914D\u7F6E"),r(),o(3,"div",2)(4,"button",3),m("click",function(){return n.openCreateDrawer()}),x(5,"nz-icon",4),c(6," \u65B0\u589E Upstream "),r(),o(7,"button",5),m("click",function(){return n.saveAll()}),x(8,"nz-icon",6),c(9," \u4FDD\u5B58 "),r()()(),o(10,"div",7)(11,"div",8)(12,"div",9),c(13,"UPSTREAM \u540D\u79F0"),r(),o(14,"div",10),c(15,"\u6765\u6E90"),r(),o(16,"div",11),c(17,"\u7B56\u7565"),r(),o(18,"div",12),c(19,"\u8282\u70B9"),r(),o(20,"div",13),c(21,"\u8282\u70B9\u6570"),r(),o(22,"div",14),c(23,"\u64CD\u4F5C"),r()(),o(24,"nz-spin",15)(25,"div",16),z(26,yn,4,0,"div",17)(27,zn,2,0),r()()(),o(28,"nz-drawer",18),m("nzOnClose",function(){return n.closeDrawer()}),te(29,Mn,27,3,"ng-container",19),r()),t&2&&(l(7),g("nzLoading",n.saving())("disabled",!n.dirty()),l(17),g("nzSpinning",n.loading()),l(2),M(!n.loading()&&!n.rows().length?26:27),l(2),g("nzVisible",n.drawerVisible())("nzTitle",n.editingId()?"\u7F16\u8F91 Upstream":"\u65B0\u589E Upstream")("nzWidth",460)("nzPlacement","right"))},dependencies:[T,$,Fe,Y,U,Pe,W,De,L,O,F,k,Ne,Me,ze,We,Ee,Te,Re,Ie,Ue,Ae,D,I,oe,ie,fe,pe,ue,xe,Be],styles:['[_nghost-%COMP%]{display:block}.list-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}.panel-tip[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-3)}.header-actions[_ngcontent-%COMP%]{display:flex;gap:8px;flex-shrink:0}.upstream-grid-shell[_ngcontent-%COMP%]{border:none;border-radius:0;overflow:hidden}.upstream-grid-head[_ngcontent-%COMP%], .upstream-grid-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(180px,1fr) minmax(150px,.9fr) minmax(130px,.7fr) minmax(220px,1.6fr) 88px 116px;align-items:center;column-gap:8px;padding:0 12px}.upstream-grid-head[_ngcontent-%COMP%]{min-height:42px;background:#fafafa;border-bottom:1px solid rgba(0,0,0,.06)}.upstream-grid-head[_ngcontent-%COMP%] .cell[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:#00000073;text-transform:uppercase;letter-spacing:.4px;font-weight:700}.upstream-grid-body[_ngcontent-%COMP%]{background:#fff}.upstream-grid-row[_ngcontent-%COMP%]{min-height:58px;border-bottom:1px solid rgba(0,0,0,.05);transition:background .12s ease}.upstream-grid-row[_ngcontent-%COMP%]:last-child{border-bottom:none}.upstream-grid-row[_ngcontent-%COMP%]:hover{background:#00000005}.readonly-row[_ngcontent-%COMP%]{background:#00000004}.cell[_ngcontent-%COMP%]{min-width:0}.row-actions[_ngcontent-%COMP%]{display:flex;gap:4px;justify-content:flex-end}.upstream-name[_ngcontent-%COMP%]{display:inline-block;font-size:var(--nginx-font-size-base, 14px);font-weight:600;color:var(--text-1);word-break:break-all}.strategy-pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;height:22px;border-radius:11px;padding:0 10px;font-size:var(--nginx-font-size-sm, 12px);line-height:22px;color:var(--text-2);background:var(--bg-input);border:1px solid var(--border-light)}.source-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;max-width:100%;height:22px;padding:0 8px;border-radius:4px;background:#0000000a;color:var(--text-3);border:1px solid rgba(0,0,0,.08);font-size:var(--nginx-font-size-sm, 12px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.source-badge.managed[_ngcontent-%COMP%]{background:#165dff14;color:#165dff;border-color:#165dff33}.nodes-wrap[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:6px;padding:8px 0}.node-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:4px;border:1px solid rgba(22,93,255,.2);background:#165dff14;color:#165dff;font-size:var(--nginx-font-size-sm, 12px);max-width:100%;word-break:break-all}.node-count[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-base, 14px);color:var(--text-2);font-weight:600}.action-col[_ngcontent-%COMP%]{justify-self:end}.empty-state[_ngcontent-%COMP%]{text-align:center;padding:48px 0}.empty-state[_ngcontent-%COMP%] .empty-icon[_ngcontent-%COMP%]{font-size:48px;color:#0003;margin-bottom:16px}.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:#0006;margin:0}.mono[_ngcontent-%COMP%]{font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)}.drawer-body[_ngcontent-%COMP%]{padding:0 24px 16px}.drawer-footer[_ngcontent-%COMP%]{position:absolute;bottom:0;left:0;right:0;padding:12px 24px;border-top:1px solid rgba(0,0,0,.06);display:flex;justify-content:flex-end;gap:8px;background:#fff}']})};var Nn=["*",[["","nginxCardActions",""]]],Tn=["*","[nginxCardActions]"];function En(s,e){if(s&1&&(q(0,"span",5),c(1),K()),s&2){let t=d(2);l(),C(t.subtitle)}}function Pn(s,e){if(s&1&&(q(0,"div",1)(1,"div",3)(2,"span",4),c(3),K(),z(4,En,2,1,"span",5),K(),q(5,"div",6),ft(6,1),K()()),s&2){let t=d();l(3),C(t.title),l(),M(t.subtitle?4:-1)}}var lt=class s{accent="blue";showHeader=!1;title="";subtitle="";noBodyPadding=!1;static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx-section-card"]],inputs:{accent:"accent",showHeader:"showHeader",title:"title",subtitle:"subtitle",noBodyPadding:"noBodyPadding"},ngContentSelectors:Tn,decls:4,vars:9,consts:[[1,"card"],[1,"card-header"],[1,"card-body"],[1,"card-header-left"],[1,"card-title"],[1,"card-subtitle"],[1,"card-actions"]],template:function(t,n){t&1&&(yt(Nn),q(0,"section",0),z(1,Pn,7,2,"div",1),q(2,"div",2),ft(3),K()()),t&2&&(A("card-blue",n.accent==="blue")("card-green",n.accent==="green")("card-orange",n.accent==="orange"),l(),M(n.showHeader?1:-1),l(),A("no-padding",n.noBodyPadding))},styles:["[_nghost-%COMP%]{display:block}.card[_ngcontent-%COMP%]{background:var(--bg-white);border:1px solid var(--border);border-left-width:3px;border-radius:8px;box-shadow:var(--shadow-card);margin-bottom:14px;overflow:hidden;border-left-color:transparent}.card.card-blue[_ngcontent-%COMP%]{border-left-color:var(--blue)}.card.card-green[_ngcontent-%COMP%]{border-left-color:var(--green)}.card.card-orange[_ngcontent-%COMP%]{border-left-color:var(--orange)}.card-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px 12px 20px;border-bottom:1px solid var(--border-light);gap:10px}.card-header-left[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;min-width:0}.card-title[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-base, 14px);font-weight:700;color:var(--text-1)}.card-subtitle[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-3)}.card-actions[_ngcontent-%COMP%]{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}.card-body[_ngcontent-%COMP%]{padding:14px 18px}.card-body.no-padding[_ngcontent-%COMP%]{padding:0}@media (max-width: 768px){.card-header[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}.card-actions[_ngcontent-%COMP%]{width:100%}}"]})};var ht=()=>[","," "];function Dn(s,e){if(s&1&&x(0,"nz-option",12),s&2){let t=e.$implicit;g("nzValue",t)("nzLabel",t)}}function Fn(s,e){if(s&1&&x(0,"nz-option",12),s&2){let t=e.$implicit;g("nzValue",t)("nzLabel",t)}}function kn(s,e){if(s&1&&x(0,"nz-option",12),s&2){let t=e.$implicit;g("nzValue",t)("nzLabel",t)}}function On(s,e){if(s&1){let t=P();o(0,"div",23)(1,"div",28)(2,"span"),c(3),r(),o(4,"button",29),m("nzOnConfirm",function(){let i=u(t).$index,a=d(2);return f(a.removeLocation(i))}),x(5,"nz-icon",30),r()(),o(6,"div",31)(7,"input",32),S("ngModelChange",function(i){let a=u(t).$implicit;return y(a.path,i)||(a.path=i),f(i)}),r(),o(8,"input",33),S("ngModelChange",function(i){let a=u(t).$implicit;return y(a.proxyPass,i)||(a.proxyPass=i),f(i)}),r()(),o(9,"textarea",34),S("ngModelChange",function(i){let a=u(t).$implicit;return y(a.rawConfig,i)||(a.rawConfig=i),f(i)}),r()()}if(s&2){let t=e.$implicit,n=e.$index;l(3),G("Location ",n+1),l(4),v("ngModel",t.path),g("name","locationPath"+n),l(),v("ngModel",t.proxyPass),g("name","locationProxy"+n),l(),v("ngModel",t.rawConfig),g("name","locationExtra"+n)}}function Ln(s,e){if(s&1){let t=P();o(0,"nz-form-item")(1,"nz-form-label",4),c(2,"SSL \u8BC1\u4E66\u8DEF\u5F84"),r(),o(3,"nz-form-control",35)(4,"input",36),S("ngModelChange",function(i){u(t);let a=d(2);return y(a.formData.sslCert,i)||(a.formData.sslCert=i),f(i)}),r()()(),o(5,"nz-form-item")(6,"nz-form-label",4),c(7,"SSL \u79C1\u94A5\u8DEF\u5F84"),r(),o(8,"nz-form-control",37)(9,"input",38),S("ngModelChange",function(i){u(t);let a=d(2);return y(a.formData.sslKey,i)||(a.formData.sslKey=i),f(i)}),r()()()}if(s&2){let t=d(2);l(4),v("ngModel",t.formData.sslCert),l(5),v("ngModel",t.formData.sslKey)}}function Vn(s,e){if(s&1){let t=P();J(0),o(1,"div",2)(2,"form",3)(3,"nz-form-item")(4,"nz-form-label",4),c(5,"Server \u540D\u79F0"),r(),o(6,"nz-form-control",5)(7,"input",6),S("ngModelChange",function(i){u(t);let a=d();return y(a.formData.name,i)||(a.formData.name=i),f(i)}),r()()(),o(8,"nz-form-item")(9,"nz-form-label",4),c(10,"\u57DF\u540D"),r(),o(11,"nz-form-control")(12,"div",7)(13,"nz-select",8),S("ngModelChange",function(i){u(t);let a=d();return y(a.formData.protocol,i)||(a.formData.protocol=i),f(i)}),x(14,"nz-option",9)(15,"nz-option",10),r(),o(16,"nz-select",11),S("ngModelChange",function(i){u(t);let a=d();return y(a.domainValues,i)||(a.domainValues=i),f(i)}),m("ngModelChange",function(){u(t);let i=d();return f(i.syncDomains())}),V(17,Dn,1,2,"nz-option",12,ce),r(),o(19,"nz-select",13),S("ngModelChange",function(i){u(t);let a=d();return y(a.listenValues,i)||(a.listenValues=i),f(i)}),V(20,Fn,1,2,"nz-option",12,ce),r()()(),o(22,"div",14),c(23,"\u57DF\u540D\u548C\u7AEF\u53E3\u5747\u652F\u6301\u591A\u4E2A\u503C\uFF0C\u4F8B\u5982\uFF1Alocalhost, 127.0.0.1 / 80, 443"),r()(),o(24,"nz-form-item")(25,"nz-form-label",15),c(26,"\u6839\u76EE\u5F55"),r(),o(27,"nz-form-control")(28,"div",16)(29,"input",17),S("ngModelChange",function(i){u(t);let a=d();return y(a.formData.root,i)||(a.formData.root=i),f(i)}),r(),o(30,"nz-select",18),S("ngModelChange",function(i){u(t);let a=d();return y(a.indexValues,i)||(a.indexValues=i),f(i)}),m("ngModelChange",function(){u(t);let i=d();return f(i.syncIndex())}),V(31,kn,1,2,"nz-option",12,ce),r()()(),o(33,"div",14),c(34,"\u6839\u76EE\u5F55\u793A\u4F8B\uFF1AD:\\dist\\www\uFF1B\u9ED8\u8BA4\u9996\u9875\u793A\u4F8B\uFF1Aindex.html, index.htm"),r()(),o(35,"nz-form-item")(36,"nz-form-label",19),c(37,"Location \u89C4\u5219"),r(),o(38,"nz-form-control")(39,"div",20)(40,"button",21),m("click",function(){u(t);let i=d();return f(i.addLocation("empty"))}),x(41,"span",22),c(42," \u65B0\u589E\u89C4\u5219 "),r()(),V(43,On,10,7,"div",23,le),r(),o(45,"div",14),c(46,"\u5E38\u89C1\u573A\u666F\uFF1A`location /api/` + `proxy_pass http://127.0.0.1:6808;`"),r()(),z(47,Ln,10,2),o(48,"nz-form-item")(49,"nz-form-label"),c(50,"\u81EA\u5B9A\u4E49\u914D\u7F6E\u7247\u6BB5"),r(),o(51,"nz-form-control")(52,"textarea",24),S("ngModelChange",function(i){u(t);let a=d();return y(a.formData.extraConfig,i)||(a.formData.extraConfig=i),f(i)}),r()(),o(53,"div",14),c(54,"\u7528\u4E8E\u8865\u5145\u9AD8\u7EA7\u6307\u4EE4\uFF08`location` \u5E38\u89C4\u573A\u666F\u5EFA\u8BAE\u5728\u4E0A\u9762\u7684 Location \u89C4\u5219\u4E2D\u914D\u7F6E\uFF09"),r()()()(),o(55,"div",25)(56,"button",26),m("click",function(){u(t);let i=d();return f(i.onClose())}),c(57,"\u53D6\u6D88"),r(),o(58,"button",27),m("click",function(){u(t);let i=d();return f(i.save())}),c(59,"\u4FDD\u5B58"),r()(),X()}if(s&2){let t=d();l(7),v("ngModel",t.formData.name),l(6),v("ngModel",t.formData.protocol),l(3),v("ngModel",t.domainValues),g("nzTokenSeparators",de(14,ht)),l(),B(t.commonDomainOptions),l(2),v("ngModel",t.listenValues),g("nzTokenSeparators",de(15,ht)),l(),B(t.commonListenOptions),l(5),g("nzTooltipIcon","question-circle"),l(4),v("ngModel",t.formData.root),l(),v("ngModel",t.indexValues),g("nzTokenSeparators",de(16,ht)),l(),B(t.commonIndexOptions),l(5),g("nzTooltipIcon","question-circle"),l(7),B(t.formData.locations),l(4),M(t.formData.protocol==="https"?47:-1),l(5),v("ngModel",t.formData.extraConfig),l(6),g("nzLoading",t.saving())}}var ct=class s{visible=!1;mode="create";editingServer=null;duplicateSourceServer=null;visibleChange=new ne;saved=new ne;nginxService=b(Q);message=b(R);cdr=b(Nt);resetTimer=null;visibleEmitTimer=null;saving=p(!1);commonListenOptions=["80","443","8080","8443"];commonDomainOptions=["127.0.0.1","localhost","example.com"];commonIndexOptions=["index.html"];listenValues=[];domainValues=["127.0.0.1"];indexValues=["index.html"];formData={name:"",listen:[],domains:["127.0.0.1"],root:"",index:["index.html"],locations:[],ssl:!1,protocol:"http",enabled:!0,sslCert:"",sslKey:"",extraConfig:""};get drawerTitle(){return this.mode==="copy"?"\u590D\u5236 Server ":this.mode==="edit"?"\u7F16\u8F91 Server ":"\u65B0\u589E Server "}ngOnChanges(e){let t="visible"in e,n="mode"in e,i="editingServer"in e,a="duplicateSourceServer"in e;(t&&this.visible||n&&this.visible&&!e.mode?.firstChange||i&&this.visible&&!e.editingServer?.firstChange||a&&this.visible&&!e.duplicateSourceServer?.firstChange)&&this.scheduleResetForm()}ngOnDestroy(){this.resetTimer&&(clearTimeout(this.resetTimer),this.resetTimer=null),this.visibleEmitTimer&&(clearTimeout(this.visibleEmitTimer),this.visibleEmitTimer=null)}scheduleResetForm(){this.resetTimer&&clearTimeout(this.resetTimer),this.resetTimer=setTimeout(()=>{this.resetTimer=null,this.resetForm(),this.cdr.detectChanges()},0)}emitVisibleChange(e){this.visibleEmitTimer&&clearTimeout(this.visibleEmitTimer),this.visibleEmitTimer=setTimeout(()=>{this.visibleEmitTimer=null,this.visibleChange.emit(e)},0)}resetForm(){if(this.editingServer){let e=this.parseListenValues(this.editingServer.listen);this.formData={name:this.editingServer.name,listen:e.length?e:["80"],domains:[...this.editingServer.domains||[]],root:this.editingServer.root||"",index:[...this.editingServer.index?.length?this.editingServer.index:["index.html"]],locations:this.editingServer.locations.map(t=>E({},t)),ssl:this.editingServer.ssl,protocol:this.editingServer.ssl?"https":"http",enabled:this.editingServer.enabled,sslCert:this.editingServer.sslCert||"",sslKey:this.editingServer.sslKey||"",extraConfig:this.editingServer.extraConfig||""},this.listenValues=[...this.formData.listen],this.domainValues=[...this.formData.domains||[]],this.indexValues=[...this.formData.index||["index.html"]]}else if(this.duplicateSourceServer){let e=this.parseListenValues(this.duplicateSourceServer.listen);this.formData={name:this.makeCopyName(this.duplicateSourceServer.name),listen:e.length?e:[],domains:[...this.duplicateSourceServer.domains||["127.0.0.1"]],root:this.duplicateSourceServer.root||"",index:[...this.duplicateSourceServer.index?.length?this.duplicateSourceServer.index:["index.html"]],locations:this.duplicateSourceServer.locations.map(t=>E({},t)),ssl:this.duplicateSourceServer.ssl,protocol:this.duplicateSourceServer.ssl?"https":"http",enabled:this.duplicateSourceServer.enabled,sslCert:this.duplicateSourceServer.sslCert||"",sslKey:this.duplicateSourceServer.sslKey||"",extraConfig:this.duplicateSourceServer.extraConfig||""},this.listenValues=[...this.formData.listen],this.domainValues=[...this.formData.domains||[]],this.indexValues=[...this.formData.index||["index.html"]]}else this.formData={name:"",listen:[],domains:["127.0.0.1"],root:"",index:["index.html"],locations:[],ssl:!1,protocol:"http",enabled:!0,sslCert:"",sslKey:"",extraConfig:""},this.listenValues=[],this.domainValues=["127.0.0.1"],this.indexValues=["index.html"]}makeCopyName(e){let t=String(e||"").trim();return t?`${t}-copy`:"server-copy"}syncDomains(){this.formData.domains=(this.domainValues||[]).flatMap(e=>e.split(/[,\s]+/)).map(e=>e.trim()).filter(e=>e.length>0).filter((e,t,n)=>n.indexOf(e)===t)}onClose(){this.emitVisibleChange(!1)}syncIndex(){let e=(this.indexValues||[]).flatMap(t=>String(t||"").split(/[,\s]+/)).map(t=>t.trim()).filter(Boolean).filter((t,n,i)=>i.indexOf(t)===n);this.indexValues=e.length?e:["index.html"],this.formData.index=[...this.indexValues]}addLocation(e="empty"){let t=[...this.formData.locations||[]];e==="api"?t.push({path:"/api/",proxyPass:"http://127.0.0.1:6808"}):t.push({path:"",proxyPass:""}),this.formData.locations=t}removeLocation(e){let t=[...this.formData.locations||[]];t.splice(e,1),this.formData.locations=t}previewConfig(){this.syncListen(),this.syncDomains(),this.syncIndex(),this.normalizeLocations(),this.message.info("\u914D\u7F6E\u9884\u89C8\u529F\u80FD\u5F00\u53D1\u4E2D")}async save(){if(!this.formData.name.trim()){this.message.warning("\u8BF7\u8F93\u5165 Server \u540D\u79F0");return}if(this.syncDomains(),!this.formData.domains?.length){this.message.warning("\u8BF7\u81F3\u5C11\u586B\u5199\u4E00\u4E2A\u57DF\u540D");return}if(this.syncListen(),!this.formData.listen.length){this.message.warning("\u8BF7\u81F3\u5C11\u586B\u5199\u4E00\u4E2A\u76D1\u542C\u7AEF\u53E3");return}if(this.formData.protocol==="https"){if(!this.formData.sslCert?.trim()){this.message.warning("\u8BF7\u586B\u5199 SSL \u8BC1\u4E66\u8DEF\u5F84");return}if(!this.formData.sslKey?.trim()){this.message.warning("\u8BF7\u586B\u5199 SSL \u79C1\u94A5\u8DEF\u5F84");return}}this.syncIndex(),this.normalizeLocations(),this.saving.set(!0);try{let e=this.mode==="edit"&&!!this.editingServer,t;e&&this.editingServer?t=await this.nginxService.updateServer(this.editingServer.id,this.formData):t=await this.nginxService.createServer(this.formData),t.success?(this.message.success(e?"Server \u5DF2\u66F4\u65B0":"Server \u5DF2\u521B\u5EFA"),this.saved.emit(),this.emitVisibleChange(!1)):this.message.error(t.error||"\u64CD\u4F5C\u5931\u8D25")}catch(e){this.message.error("\u64CD\u4F5C\u5931\u8D25: "+this.extractErrorMessage(e))}finally{this.saving.set(!1)}}syncListen(){let e=[];for(let t of this.listenValues||[]){let n=String(t||"").trim();if(!n)continue;let i=Number(n);if(!Number.isInteger(i)||i<1||i>65535){this.message.warning(`\u76D1\u542C\u7AEF\u53E3 "${n}" \u65E0\u6548\uFF0C\u8BF7\u8F93\u5165 1-65535 \u7684\u6574\u6570`);continue}let a=String(i);e.includes(a)||e.push(a)}this.listenValues=e,this.formData.listen=[...e]}parseListenValues(e){let t=[];for(let n of e||[]){let i=String(n||"").match(/\d+/);if(!i)continue;let a=Number(i[0]);if(!Number.isInteger(a)||a<1||a>65535)continue;let _=String(a);t.includes(_)||t.push(_)}return t}normalizeLocations(){let e=i=>{let a=String(i||"").trim();return a||void 0},t=i=>{if(Array.isArray(i)){let h=i.map(ge=>String(ge||"").trim()).filter(Boolean);return h.length?h:void 0}let a=String(i||"").trim();if(!a)return;let _=a.split(/\s+/).map(h=>h.trim()).filter(Boolean);return _.length?_:void 0},n=(this.formData.locations||[]).map(i=>{let a=String(i.path||"").trim()||"/",_=e(i.proxyPass),h=e(i.root),ge=t(i.index),gt=t(i.tryFiles),pt=e(i.rawConfig);return{path:a,proxyPass:_,root:h,index:ge,tryFiles:gt,rawConfig:pt}}).filter(i=>!!(i.proxyPass||i.root||i.index?.length||i.tryFiles?.length||i.rawConfig));this.formData.locations=n}extractErrorMessage(e){let t=e;return t?.error?.error?.message||t?.error?.message||t?.message||"\u8BF7\u6C42\u5931\u8D25"}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx-server-drawer"]],inputs:{visible:"visible",mode:"mode",editingServer:"editingServer",duplicateSourceServer:"duplicateSourceServer"},outputs:{visibleChange:"visibleChange",saved:"saved"},features:[ve],decls:2,vars:6,consts:[[3,"nzOnClose","nzVisible","nzPlacement","nzWidth","nzTitle","nzClosable","nzMaskClosable"],[4,"nzDrawerContent"],[1,"drawer-body"],["nz-form","","nzLayout","vertical"],["nzRequired",""],["nzHasFeedback","","nzErrorTip","\u8BF7\u8F93\u5165 Server \u540D\u79F0"],["nz-input","","name","serverName","placeholder","\u4F8B\u5982\uFF1Amain-site",3,"ngModelChange","ngModel"],["nz-input-group","","nzCompact","",1,"domain-row-wrapper"],["name","protocol","nzPlaceHolder","HTTP",1,"domain-row-protocol",3,"ngModelChange","ngModel"],["nzValue","http","nzLabel","HTTP"],["nzValue","https","nzLabel","HTTPS"],["nzMode","tags","name","domains","nzPlaceHolder","\u53EF\u8F93\u5165\u6216\u9009\u62E9\u591A\u4E2A\u57DF\u540D",1,"domain-row-domain",3,"ngModelChange","ngModel","nzTokenSeparators"],[3,"nzValue","nzLabel"],["nzMode","tags","name","listenPort","nzPlaceHolder","\u7AEF\u53E3",1,"domain-row-listen",3,"ngModelChange","ngModel","nzTokenSeparators"],[1,"field-hint"],["nzTooltipTitle","\u9759\u6001\u8D44\u6E90\u6839\u76EE\u5F55\uFF0C\u901A\u5E38\u7528\u4E8E\u63D0\u4F9B\u9759\u6001\u6587\u4EF6\u670D\u52A1\uFF0C\u5982index.html\u6240\u5728\u76EE\u5F55",3,"nzTooltipIcon"],["nz-input-group","","nzCompact","",1,"root-row-wrapper"],["nz-input","","name","root","placeholder","\u5982\uFF1AD:\\\\dist\\\\www",1,"mono-input","root-row-root",3,"ngModelChange","ngModel"],["nzMode","tags","name","serverIndex","nzPlaceHolder","\u9ED8\u8BA4\u9996\u9875",1,"root-row-index",3,"ngModelChange","ngModel","nzTokenSeparators"],["nzTooltipTitle","\u7528\u4E8E\u5B9A\u4E49\u8BF7\u6C42\u8DEF\u5F84\u7684\u5904\u7406\u89C4\u5219\uFF0C\u5982 API \u4EE3\u7406\u670D\u52A1\u6216\u9759\u6001\u8D44\u6E90\u8DEF\u5F84",3,"nzTooltipIcon"],[1,"location-toolbar"],["nz-button","","nzType","default","type","button",3,"click"],["nz-icon","","nzType","plus"],[1,"location-item"],["nz-input","","name","extraConfig","rows","4","placeholder",`# \u5728\u6B64\u6DFB\u52A0\u81EA\u5B9A\u4E49 nginx \u914D\u7F6E
|
|
4
|
-
location /api {
|
|
5
|
-
proxy_pass http://backend_cluster;
|
|
6
|
-
}`,1,"mono-textarea",3,"ngModelChange","ngModel"],[1,"drawer-footer"],["nz-button","","nzType","default",3,"click"],["nz-button","","nzType","primary",3,"click","nzLoading"],[1,"location-item-head"],["nz-button","","nzType","link","nzDanger","","type","button","nz-tooltip","\u5220\u9664","nz-popconfirm","","nzPopconfirmTitle","\u786E\u5B9A\u8981\u5220\u9664\u8FD9\u4E2A Location \u89C4\u5219\u5417\uFF1F","nzPopconfirmOkText","\u5220\u9664","nzPopconfirmCancelText","\u53D6\u6D88",3,"nzOnConfirm"],["nzType","delete"],[1,"location-grid"],["nz-input","","placeholder","/api/",3,"ngModelChange","ngModel","name"],["nz-input","","placeholder","http://127.0.0.1:6808",1,"mono-input",3,"ngModelChange","ngModel","name"],["nz-input","","rows","3","placeholder",`\u989D\u5916 location \u6307\u4EE4\uFF0C\u5982\uFF1A
|
|
7
|
-
proxy_http_version 1.1;
|
|
8
|
-
proxy_set_header Upgrade $http_upgrade;
|
|
9
|
-
proxy_set_header Connection "upgrade";`,1,"mono-textarea","location-extra-textarea",3,"ngModelChange","ngModel","name"],["nzHasFeedback","","nzErrorTip","\u8BF7\u586B\u5199 SSL \u8BC1\u4E66\u8DEF\u5F84"],["nz-input","","name","sslCert","placeholder","/etc/nginx/ssl/cert.pem",1,"mono-input",3,"ngModelChange","ngModel"],["nzHasFeedback","","nzErrorTip","\u8BF7\u586B\u5199 SSL \u79C1\u94A5\u8DEF\u5F84"],["nz-input","","name","sslKey","placeholder","/etc/nginx/ssl/key.pem",1,"mono-input",3,"ngModelChange","ngModel"]],template:function(t,n){t&1&&(o(0,"nz-drawer",0),m("nzOnClose",function(){return n.onClose()}),te(1,Vn,60,17,"ng-container",1),r()),t&2&&g("nzVisible",n.visible)("nzPlacement","right")("nzWidth",520)("nzTitle",n.drawerTitle)("nzClosable",!0)("nzMaskClosable",!0)},dependencies:[T,$,Fe,Y,U,Pe,W,De,L,O,F,k,Ne,Me,ze,We,Ee,Te,Re,Ie,Ue,Ae,D,I,oe,ie,fe,pe,ue,Oe,ke,Ve,Le],styles:["[_nghost-%COMP%]{display:block}.drawer-body[_ngcontent-%COMP%]{padding:0 24px 16px}.mono-textarea[_ngcontent-%COMP%]{resize:none}.domain-row-wrapper[_ngcontent-%COMP%], .root-row-wrapper[_ngcontent-%COMP%]{display:flex;width:100%}.domain-row-protocol[_ngcontent-%COMP%]{width:90px;flex:0 0 90px}.domain-row-domain[_ngcontent-%COMP%]{flex:1 1 auto;min-width:0;margin-left:-1px}.domain-row-listen[_ngcontent-%COMP%]{width:100px;flex:0 0 100px;margin-left:-1px}.root-row-root[_ngcontent-%COMP%]{flex:1 1 auto;min-width:0}.root-row-index[_ngcontent-%COMP%]{width:140px;flex:0 0 140px;margin-left:-1px}.field-hint[_ngcontent-%COMP%]{margin-top:4px;font-size:12px;opacity:.7}.location-toolbar[_ngcontent-%COMP%]{display:flex;gap:8px;margin-bottom:10px}.location-item[_ngcontent-%COMP%]{border:1px solid rgba(0,0,0,.08);border-radius:8px;padding:10px;background:#fafafa;margin-bottom:10px}.location-item-head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.location-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:160px 1fr;gap:8px}.location-extra-textarea[_ngcontent-%COMP%]{margin-top:8px}.drawer-footer[_ngcontent-%COMP%]{position:absolute;bottom:0;left:0;right:0;padding:12px 24px;border-top:1px solid rgba(0,0,0,.06);display:flex;justify-content:flex-end;gap:8px;background:#fff}@media (max-width: 640px){.domain-row-wrapper[_ngcontent-%COMP%], .root-row-wrapper[_ngcontent-%COMP%]{flex-wrap:wrap;gap:8px}.domain-row-protocol[_ngcontent-%COMP%], .domain-row-domain[_ngcontent-%COMP%], .domain-row-listen[_ngcontent-%COMP%], .root-row-root[_ngcontent-%COMP%], .root-row-index[_ngcontent-%COMP%]{width:100%;flex:1 1 100%;margin-left:0}}"]})};var In=()=>[],Rn=()=>({nzDanger:!0}),An=(s,e)=>e.id;function Un(s,e){if(s&1){let t=P();o(0,"div",1)(1,"div",18)(2,"button",19),m("click",function(){u(t);let i=d();return f(i.importServer())}),x(3,"nz-icon",20),c(4," \u5BFC\u5165 "),r(),o(5,"button",21),m("click",function(){u(t);let i=d();return f(i.openDrawer(null))}),x(6,"nz-icon",22),c(7," \u65B0\u589E Server "),r()()()}}function Wn(s,e){s&1&&(o(0,"div",14),x(1,"nz-icon",23),o(2,"p"),c(3,"\u6682\u65E0 Server \u914D\u7F6E"),r()())}function $n(s,e){if(s&1&&(o(0,"span",39),c(1),r()),s&2){let t=d().$implicit;l(),G(":",t," ssl")}}function Hn(s,e){if(s&1&&(o(0,"span",40),c(1),r()),s&2){let t=d().$implicit;l(),G(":",t)}}function jn(s,e){if(s&1&&z(0,$n,2,1,"span",39)(1,Hn,2,1,"span",40),s&2){let t=e.$implicit,n=d().$implicit;M(t==="443"||n.ssl?0:1)}}function qn(s,e){if(s&1&&(o(0,"a",41),c(1),r()),s&2){let t=e.$implicit;g("href",t,ut),l(),G(" ",t," ")}}function Kn(s,e){if(s&1&&(o(0,"div",30),V(1,qn,2,2,"a",41,ce),r()),s&2){let t=d().$implicit,n=d(2);l(),B(n.getAccessUrls(t))}}function Yn(s,e){s&1&&(o(0,"span",29),c(1,"\u2014"),r())}function Qn(s,e){if(s&1&&(o(0,"a",42),c(1),r()),s&2){let t=e.$implicit;g("href",t.proxyPass,ut),l(),G(" ",t.proxyPass," ")}}function Gn(s,e){if(s&1&&(o(0,"div",31),V(1,Qn,2,2,"a",42,ce),r()),s&2){let t=d().$implicit;l(),B(t.locations)}}function Zn(s,e){s&1&&(o(0,"span",29),c(1,"\u2014"),r())}function Jn(s,e){if(s&1){let t=P();o(0,"div",25)(1,"div",4)(2,"nz-switch",26),m("ngModelChange",function(i){let a=u(t).$implicit,_=d(2);return f(_.toggleServer(a.id,i))}),r()(),o(3,"div",5)(4,"div",27),x(5,"nz-icon",28),c(6),r()(),o(7,"div",6),V(8,jn,2,1,null,null,le),r(),o(10,"div",7)(11,"span",29),c(12),r()(),o(13,"div",8),z(14,Kn,3,0,"div",30)(15,Yn,2,0,"span",29),r(),o(16,"div",9),z(17,Gn,3,0,"div",31)(18,Zn,2,0,"span",29),r(),o(19,"div",10)(20,"span",32),c(21),r()(),o(22,"div",11)(23,"div",33)(24,"button",34),m("click",function(){let i=u(t).$implicit,a=d(2);return f(a.openDrawer(i))}),x(25,"nz-icon",35),r(),o(26,"button",34),m("click",function(){let i=u(t).$implicit,a=d(2);return f(a.copyServer(i))}),x(27,"nz-icon",36),r(),o(28,"button",37),m("nzOnConfirm",function(){let i=u(t).$implicit,a=d(2);return f(a.deleteServer(i))}),x(29,"nz-icon",38),r()()()()}if(s&2){let t=e.$implicit,n=d(2);A("disabled-row",!t.enabled),l(2),g("ngModel",t.enabled),l(4),G(" ",t.name," "),l(2),B(t.listen),l(4),C((t.domains||de(11,In)).join(", ")||"\u2014"),l(2),M(n.getAccessUrls(t).length?14:15),l(3),M(t.locations?17:18),l(3),g("title",t.root||""),l(),C(t.root||"\u2014"),l(7),g("nzPopconfirmTitle","\u5220\u9664\u540E\u65E0\u6CD5\u6062\u590D\uFF0C\u786E\u8BA4\u5220\u9664"+t.name+"\u5417\uFF1F")("nzOkButtonProps",de(12,Rn))}}function Xn(s,e){if(s&1&&V(0,Jn,30,13,"div",24,An),s&2){let t=d();B(t.servers())}}function ei(s,e){if(s&1&&(J(0),o(1,"pre",43),c(2),r(),X()),s&2){let t=d();l(2),C(t.viewingConfig())}}var dt=class s{showToolbar=!0;openCreateToken=0;summaryChange=new ne;serverListMutated=new ne;nginxService=b(Q);message=b(R);modal=b(Ke);servers=p([]);loading=p(!1);drawerVisible=!1;editingServer=p(null);duplicateSourceServer=p(null);drawerMode=p("create");configModalVisible=!1;viewingConfig=p("");ngOnInit(){this.loadServers()}ngOnChanges(e){let t=e.openCreateToken;t&&!t.firstChange&&this.openDrawer(null)}async loadServers(){this.loading.set(!0);try{let e=await this.nginxService.getServers();e.success&&e.servers&&(this.servers.set(e.servers),this.summaryChange.emit({total:e.servers.length,enabled:e.servers.filter(t=>t.enabled).length}))}catch(e){this.message.error("\u52A0\u8F7D\u5931\u8D25: "+e.message)}finally{this.loading.set(!1)}}openDrawer(e){this.duplicateSourceServer.set(null),this.editingServer.set(e),this.drawerMode.set(e?"edit":"create"),this.drawerVisible=!0}openCopyDrawer(e){this.editingServer.set(null),this.duplicateSourceServer.set(e),this.drawerMode.set("copy"),this.drawerVisible=!0}onDrawerVisibleChange(e){this.drawerVisible=e,e||(this.editingServer.set(null),this.duplicateSourceServer.set(null),this.drawerMode.set("create"))}onSaved(){this.loadServers(),this.serverListMutated.emit()}importServer(){this.message.info("\u5BFC\u5165\u529F\u80FD\u5F00\u53D1\u4E2D")}async toggleServer(e,t){try{let n=t?await this.nginxService.enableServer(e):await this.nginxService.disableServer(e);n.success?(this.message.success(t?"\u5DF2\u542F\u7528":"\u5DF2\u7981\u7528"),await this.loadServers(),this.serverListMutated.emit()):this.message.error(n.error||"\u64CD\u4F5C\u5931\u8D25")}catch(n){this.message.error("\u64CD\u4F5C\u5931\u8D25: "+n.message)}}copyServer(e){this.openCopyDrawer(e),this.message.info("\u590D\u5236 Server - \u8BF7\u4FEE\u6539\u540E\u4FDD\u5B58")}async deleteServer(e){try{let t=await this.nginxService.deleteServer(e.id);t.success?(this.message.success("\u5DF2\u5220\u9664"),this.loadServers(),this.serverListMutated.emit()):this.message.error(t.error||"\u5220\u9664\u5931\u8D25")}catch(t){this.message.error("\u5220\u9664\u5931\u8D25: "+t.message)}}getAccessUrls(e){return this.buildAccessUrls(e)}buildAccessUrls(e){let t=e.ssl?"https":"http",n=this.extractPorts(e.listen),i=this.extractHosts(e),a=n[0]??(e.ssl?443:80);return i.length?i.map(_=>this.buildUrl(t,_,a)).filter(Boolean).slice(0,6):[]}extractPorts(e){let t=new Set;for(let n of e||[]){let i=this.parseListenPort(n);i!==null&&t.add(i)}return Array.from(t.values()).sort((n,i)=>n-i)}parseListenPort(e){let t=String(e||"").trim();if(!t||/^unix:/i.test(t))return null;let n=t.split(/\s+/)[0]||"",i=n;/^\[[^\]]+\]:\d+$/.test(n)?i=n.replace(/^.*\]:/,""):n.includes(":")&&(i=n.slice(n.lastIndexOf(":")+1));let a=Number(i);return!Number.isInteger(a)||a<1||a>65535?null:a}extractHosts(e){let t=new Set;for(let n of e.domains||[]){let i=String(n||"").trim();!i||i==="_"||i==="*"||t.add(i)}if(!t.size){let n=this.parseListenHost(e.listen?.[0]||"");n&&t.add(n)}return t.size||t.add("127.0.0.1"),Array.from(t.values())}parseListenHost(e){let t=String(e||"").trim();if(!t||/^unix:/i.test(t))return null;let n=t.split(/\s+/)[0]||"";if(/^\[[^\]]+\]:\d+$/.test(n)){let i=n.slice(1,n.indexOf("]")).trim();return this.normalizeHost(i)}if(n.includes(":")){let i=n.slice(0,n.lastIndexOf(":")).trim();return this.normalizeHost(i)}return null}normalizeHost(e){return!e||e==="*"||e==="0.0.0.0"||e==="::"||e==="[::]"?null:e}buildUrl(e,t,n){let i=this.normalizeHostForUrl(t);return i?`${e}://${i}${e==="http"&&n===80||e==="https"&&n===443?"":`:${n}`}`:""}normalizeHostForUrl(e){let t=String(e||"").trim();return t?t.includes(":")&&!t.startsWith("[")&&!t.endsWith("]")?`[${t}]`:t:""}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx-server-list"]],inputs:{showToolbar:"showToolbar",openCreateToken:"openCreateToken"},outputs:{summaryChange:"summaryChange",serverListMutated:"serverListMutated"},features:[ve],decls:27,vars:9,consts:[[1,"server-list"],[1,"list-header"],[1,"server-grid-shell"],[1,"server-grid-head"],[1,"cell","status-col"],[1,"cell"],[1,"cell","listen-col"],[1,"cell","domain-col"],[1,"cell","access-col"],[1,"cell","proxy-col"],[1,"cell","root-col"],[1,"cell","action-col"],[3,"nzSpinning"],[1,"server-grid-body"],[1,"empty-state"],[3,"visibleChange","saved","visible","mode","editingServer","duplicateSourceServer"],["nzTitle","Server \u914D\u7F6E","nzWidth","800px",3,"nzVisibleChange","nzOnCancel","nzVisible","nzFooter"],[4,"nzModalContent"],[1,"header-left"],["nz-button","","nzType","default",3,"click"],["nzType","upload","nzTheme","outline"],["nz-button","","nzType","primary",3,"click"],["nzType","plus","nzTheme","outline"],["nzType","inbox","nzTheme","outline",1,"empty-icon"],[1,"server-grid-row",3,"disabled-row"],[1,"server-grid-row"],["nzSize","small",3,"ngModelChange","ngModel"],[1,"server-name"],["nzType","file","nzTheme","outline",1,"conf-icon"],[1,"server-domain"],[1,"access-links"],[1,"proxy-links"],[1,"server-root",3,"title"],[1,"row-actions"],["nz-button","","nzType","link","nzSize","small",3,"click"],["nzType","edit","nzTheme","outline"],["nzType","copy","nzTheme","outline"],["nz-button","","nzDanger","","nzType","link","nzSize","small","nz-popconfirm","","nzPopconfirmOkText","\u5220\u9664","nzPopconfirmCancelText","\u53D6\u6D88",3,"nzOnConfirm","nzPopconfirmTitle","nzOkButtonProps"],["nzType","delete","nzTheme","outline"],[1,"server-listen","ssl"],[1,"server-listen"],["target","_blank","rel","noopener noreferrer",1,"access-link",3,"href"],["target","_blank","rel","noopener noreferrer",1,"proxy-link",3,"href"],[1,"config-preview"]],template:function(t,n){t&1&&(o(0,"div",0),z(1,Un,8,0,"div",1),o(2,"div",2)(3,"div",3)(4,"div",4),c(5,"\u72B6\u6001"),r(),o(6,"div",5),c(7,"Server \u540D\u79F0"),r(),o(8,"div",6),c(9,"\u76D1\u542C\u7AEF\u53E3"),r(),o(10,"div",7),c(11,"\u57DF\u540D"),r(),o(12,"div",8),c(13,"\u8BBF\u95EE\u5730\u5740"),r(),o(14,"div",9),c(15,"\u8F6C\u53D1\u5730\u5740"),r(),o(16,"div",10),c(17,"\u6839\u76EE\u5F55"),r(),o(18,"div",11),c(19,"\u64CD\u4F5C"),r()(),o(20,"nz-spin",12)(21,"div",13),z(22,Wn,4,0,"div",14)(23,Xn,2,0),r()()()(),o(24,"app-nginx-server-drawer",15),m("visibleChange",function(a){return n.onDrawerVisibleChange(a)})("saved",function(){return n.onSaved()}),r(),o(25,"nz-modal",16),S("nzVisibleChange",function(a){return y(n.configModalVisible,a)||(n.configModalVisible=a),a}),m("nzOnCancel",function(){return n.configModalVisible=!1}),te(26,ei,3,1,"ng-container",17),r()),t&2&&(l(),M(n.showToolbar?1:-1),l(19),g("nzSpinning",n.loading()),l(2),M(!n.loading()&&!n.servers().length?22:23),l(2),g("visible",n.drawerVisible)("mode",n.drawerMode())("editingServer",n.editingServer())("duplicateSourceServer",n.duplicateSourceServer()),l(),v("nzVisible",n.configModalVisible),g("nzFooter",null))},dependencies:[T,$,U,W,L,O,F,k,D,I,Ge,Qe,Ye,xe,Be,Oe,he,_e,Ve,Le,ct],styles:['.server-list[_ngcontent-%COMP%] .list-header[_ngcontent-%COMP%]{display:flex;align-items:center;margin-bottom:16px}.server-list[_ngcontent-%COMP%] .list-header[_ngcontent-%COMP%] .header-left[_ngcontent-%COMP%]{display:flex;gap:8px}.server-grid-shell[_ngcontent-%COMP%]{border:none;border-radius:0;overflow:hidden}.server-grid-head[_ngcontent-%COMP%], .server-grid-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:72px minmax(160px,1.1fr) minmax(130px,.8fr) minmax(150px,1fr) minmax(220px,1.2fr) minmax(220px,1.2fr) minmax(180px,1fr) 120px;align-items:center;column-gap:8px;padding:0 12px}.server-grid-head[_ngcontent-%COMP%]{min-height:42px;background:#fafafa;border-bottom:1px solid rgba(0,0,0,.06)}.server-grid-head[_ngcontent-%COMP%] .cell[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:#00000073;text-transform:uppercase;letter-spacing:.4px;font-weight:700}.server-grid-body[_ngcontent-%COMP%]{background:#fff}.server-grid-row[_ngcontent-%COMP%]{min-height:56px;border-bottom:1px solid rgba(0,0,0,.05);transition:background .12s ease}.server-grid-row[_ngcontent-%COMP%]:last-child{border-bottom:none}.server-grid-row[_ngcontent-%COMP%]:hover{background:#00000005}.cell[_ngcontent-%COMP%]{min-width:0}.action-col[_ngcontent-%COMP%]{justify-self:end}.server-name[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-weight:500;font-size:var(--nginx-font-size-base, 14px)}.conf-icon[_ngcontent-%COMP%]{color:#00000059;flex-shrink:0}.server-listen[_ngcontent-%COMP%]{font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace);font-size:var(--nginx-font-size-sm, 12px);color:#e5a832;background:#e5a8321f;padding:2px 8px;border-radius:4px;margin-right:4px}.server-listen.ssl[_ngcontent-%COMP%]{color:#5ea6f7;background:#5ea6f71f}.server-domain[_ngcontent-%COMP%]{font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace);font-size:var(--nginx-font-size-sm, 12px);color:#0000008c}.server-root[_ngcontent-%COMP%]{font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace);font-size:var(--nginx-font-size-sm, 12px);color:#0006;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.access-link[_ngcontent-%COMP%], .proxy-link[_ngcontent-%COMP%]{font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace);font-size:var(--nginx-font-size-sm, 12px);color:var(--blue);text-decoration:none;display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.access-link[_ngcontent-%COMP%]:hover, .proxy-link[_ngcontent-%COMP%]:hover{text-decoration:underline}.access-links[_ngcontent-%COMP%], .proxy-links[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px}.row-actions[_ngcontent-%COMP%]{display:flex;gap:4px;justify-content:flex-end}.empty-state[_ngcontent-%COMP%]{text-align:center;padding:48px 0}.empty-state[_ngcontent-%COMP%] .empty-icon[_ngcontent-%COMP%]{font-size:48px;color:#0003;margin-bottom:16px}.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:#0006;margin:0}@media (max-width: 1100px){.server-grid-head[_ngcontent-%COMP%]{display:none}.server-grid-row[_ngcontent-%COMP%]{grid-template-columns:1fr;gap:8px;padding:12px;align-items:stretch}.status-col[_ngcontent-%COMP%], .listen-col[_ngcontent-%COMP%], .domain-col[_ngcontent-%COMP%], .access-col[_ngcontent-%COMP%], .proxy-col[_ngcontent-%COMP%], .root-col[_ngcontent-%COMP%], .action-col[_ngcontent-%COMP%]{justify-self:start}.action-col[_ngcontent-%COMP%]{width:100%}.row-actions[_ngcontent-%COMP%]{opacity:1}}.config-preview[_ngcontent-%COMP%]{background:#f6ffed;border:1px solid #b7eb8f;border-radius:4px;padding:16px;margin:0;font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace);font-size:var(--nginx-font-size-base, 14px);line-height:1.6;overflow-x:auto;white-space:pre-wrap}']})};var mt=class s{label="";value="-";sub="";toneClass="";static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx-stat-card"]],inputs:{label:"label",value:"value",sub:"sub",toneClass:"toneClass"},decls:7,vars:4,consts:[[1,"stat-card"],[1,"stat-label"],[1,"stat-value",3,"ngClass"],[1,"stat-sub"]],template:function(t,n){t&1&&(o(0,"div",0)(1,"div",1),c(2),r(),o(3,"div",2),c(4),r(),o(5,"div",3),c(6),r()()),t&2&&(l(2),C(n.label),l(),g("ngClass",n.toneClass),l(),C(n.value),l(2),C(n.sub))},dependencies:[T,je],styles:['[_nghost-%COMP%]{display:block}.stat-card[_ngcontent-%COMP%]{background:var(--bg-white);border:1px solid var(--border);border-radius:8px;padding:14px;box-shadow:var(--shadow-card);transition:all .14s ease}.stat-card[_ngcontent-%COMP%]:hover{box-shadow:var(--shadow-hover);transform:translateY(-1px)}.stat-label[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-3);font-weight:600;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}.stat-value[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-kpi, 22px);line-height:1.1;font-weight:800;color:var(--text-1);font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace);margin-bottom:4px}.stat-value.green[_ngcontent-%COMP%]{color:var(--green)}.stat-value.blue[_ngcontent-%COMP%]{color:var(--blue)}.stat-value.purple[_ngcontent-%COMP%]{color:var(--purple)}.stat-value.orange[_ngcontent-%COMP%]{color:var(--orange)}.stat-value.red[_ngcontent-%COMP%]{color:var(--red)}.stat-sub[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-3);font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)}']})};var ti=()=>({padding:"0"});function ni(s,e){if(s&1){let t=P();o(0,"span",6),x(1,"span",7),c(2),r(),o(3,"button",8),m("click",function(){u(t);let i=d();return f(i.refreshAll())}),x(4,"nz-icon",9),c(5," \u5237\u65B0 "),r(),o(6,"button",10),m("click",function(){u(t);let i=d();return f(i.switchSecondaryTab("settings"))}),x(7,"nz-icon",11),r()}if(s&2){let t,n,i=d();A("running",(t=i.status())==null?null:t.isRunning),l(2),zt(" ",((n=i.instance())==null?null:n.version)||"unknown"," \xB7 ",i.pidText," "),l(),g("nzLoading",i.configLoading())}}function ii(s,e){if(s&1){let t=P();o(0,"button",14),m("click",function(){u(t);let i=d(2);return f(i.showBindModal())}),c(1,"\u7ED1\u5B9A Nginx"),r()}}function oi(s,e){if(s&1&&(o(0,"nz-layout",3)(1,"nz-content",12)(2,"nz-empty",13),te(3,ii,2,0,"ng-template",null,0,Mt),r()()()),s&2){let t=St(4);l(2),g("nzNotFoundContent","\u8BF7\u5148\u7ED1\u5B9A\u672C\u5730 Nginx \u5B9E\u4F8B")("nzNotFoundFooter",t)}}function ri(s,e){if(s&1&&(o(0,"div",40),x(1,"app-nginx-config-editor",52),r()),s&2){let t=d(2);l(),g("refreshToken",t.configEditorRefreshToken())}}function ai(s,e){s&1&&x(0,"app-nginx-secondary-upstream-tab")}function si(s,e){s&1&&x(0,"app-nginx-secondary-ssl-tab")}function li(s,e){s&1&&x(0,"app-nginx-secondary-traffic-tab")}function ci(s,e){s&1&&x(0,"app-nginx-secondary-perf-tab")}function di(s,e){s&1&&x(0,"app-nginx-secondary-logs-tab")}function mi(s,e){if(s&1){let t=P();o(0,"app-nginx-secondary-test-tab",53),m("runTest",function(){u(t);let i=d(2);return f(i.testConfig())}),r()}if(s&2){let t=d(2);g("loading",t.loading())("logs",t.recentLogs())}}function gi(s,e){if(s&1){let t=P();o(0,"app-nginx-secondary-settings-tab",54),m("unbind",function(){u(t);let i=d(2);return f(i.unbind())}),r()}if(s&2){let t=d(2);g("instance",t.instance())("configFileCount",t.configFiles().length)}}function pi(s,e){if(s&1){let t=P();o(0,"nz-layout",3)(1,"nz-content",15)(2,"div",16),x(3,"app-nginx-stat-card",17)(4,"app-nginx-stat-card",18)(5,"app-nginx-stat-card",19)(6,"app-nginx-stat-card",20),r(),o(7,"div",21)(8,"div",22)(9,"span",23),c(10,"\u670D\u52A1\u63A7\u5236"),r(),o(11,"button",24),m("click",function(){u(t);let i=d();return f(i.startNginx())}),x(12,"nz-icon",25),c(13," \u542F\u52A8 "),r(),o(14,"button",24),m("click",function(){u(t);let i=d();return f(i.stopNginx())}),x(15,"nz-icon",26),c(16," \u505C\u6B62 "),r(),o(17,"button",24),m("click",function(){u(t);let i=d();return f(i.reloadNginx())}),x(18,"nz-icon",9),c(19," \u91CD\u8F7D "),r(),o(20,"button",27),m("click",function(){u(t);let i=d();return f(i.testConfig())}),x(21,"nz-icon",28),c(22," \u68C0\u6D4B "),r()(),o(23,"span",29),c(24),r()(),o(25,"app-nginx-section-card",30),J(26,31),o(27,"button",27),m("click",function(){u(t);let i=d();return f(i.importServer())}),x(28,"nz-icon",32),c(29," \u5BFC\u5165 "),r(),o(30,"button",14),m("click",function(){u(t);let i=d();return f(i.requestCreateServer())}),x(31,"nz-icon",33),c(32," \u65B0\u589E Server "),r(),X(),o(33,"app-nginx-server-list",34),m("summaryChange",function(i){u(t);let a=d();return f(a.onServerSummaryChange(i))})("serverListMutated",function(){u(t);let i=d();return f(i.onServerListMutated())}),r()(),o(34,"app-nginx-section-card",35)(35,"button",36),m("click",function(){u(t);let i=d();return f(i.toggleConfigExpanded())}),o(36,"div",37)(37,"span",38),c(38,"\u914D\u7F6E\u6587\u4EF6"),r()(),x(39,"nz-icon",39),r(),z(40,ri,2,1,"div",40),r(),o(41,"app-nginx-section-card",41)(42,"nz-tabs",42),m("nzSelectedIndexChange",function(i){u(t);let a=d();return f(a.onSecondaryTabIndexChange(i))}),o(43,"nz-tab",43),z(44,ai,1,0,"app-nginx-secondary-upstream-tab"),r(),o(45,"nz-tab",44),z(46,si,1,0,"app-nginx-secondary-ssl-tab"),r(),o(47,"nz-tab",45),z(48,li,1,0,"app-nginx-secondary-traffic-tab"),r(),o(49,"nz-tab",46),z(50,ci,1,0,"app-nginx-secondary-perf-tab"),r(),o(51,"nz-tab",47),z(52,di,1,0,"app-nginx-secondary-logs-tab"),r(),o(53,"nz-tab",48),z(54,mi,1,2,"app-nginx-secondary-test-tab",49),r(),o(55,"nz-tab",50),z(56,gi,1,2,"app-nginx-secondary-settings-tab",51),r()()()()()}if(s&2){let t,n,i,a,_,h=d();l(3),g("value",h.serviceStatusText)("toneClass",(t=h.status())!=null&&t.isRunning?"green":"red")("sub",h.pidText),l(),g("value",h.uptimeText)("sub",h.uptimeSubText),l(),g("value",h.activeConnectionText)("sub",h.activeConnectionSubText),l(),g("value",h.serverSummary().total)("sub",h.enabledServerText),l(5),g("disabled",h.controlling()||((n=h.status())==null?null:n.isRunning)),l(3),g("disabled",h.controlling()||!((i=h.status())!=null&&i.isRunning)),l(3),g("disabled",h.controlling()||!((a=h.status())!=null&&a.isRunning)),l(7),C(((_=h.instance())==null?null:_.path)||"-"),l(),g("showHeader",!0)("noBodyPadding",!0),l(8),g("showToolbar",!1)("openCreateToken",h.openServerDrawerToken()),l(),g("noBodyPadding",!0),l(),A("open",h.configExpanded()),l(5),M(h.configExpanded()?40:-1),l(),g("noBodyPadding",!0),l(),g("nzSelectedIndex",h.secondaryTabIndex()),l(2),M(h.secondaryTab()==="upstream"?44:-1),l(2),M(h.secondaryTab()==="ssl"?46:-1),l(2),M(h.secondaryTab()==="traffic"?48:-1),l(2),M(h.secondaryTab()==="perf"?50:-1),l(2),M(h.secondaryTab()==="logs"?52:-1),l(2),M(h.secondaryTab()==="test"?54:-1),l(2),M(h.secondaryTab()==="settings"?56:-1)}}function ui(s,e){if(s&1){let t=P();J(0),o(1,"div",55)(2,"div",56),x(3,"nz-icon",57),r(),o(4,"div",58),c(5,"\u7ED1\u5B9A\u672C\u5730 Nginx"),r(),o(6,"div",59),c(7," \u6307\u5B9A\u672C\u673A Nginx \u53EF\u6267\u884C\u6587\u4EF6\u8DEF\u5F84\uFF0C\u5B8C\u6210\u5B9E\u4F8B\u7ED1\u5B9A\u540E\u5373\u53EF\u4F7F\u7528\u53EF\u89C6\u5316\u7BA1\u7406\u529F\u80FD "),r(),o(8,"div",60)(9,"input",61),S("ngModelChange",function(i){u(t);let a=d();return y(a.bindPath,i)||(a.bindPath=i),f(i)}),m("keyup.enter",function(){u(t);let i=d();return f(i.bindNginx())}),r(),o(10,"button",27),m("click",function(){u(t);let i=d();return f(i.showPathHint())}),x(11,"nz-icon",62),c(12," \u6D4F\u89C8 "),r()(),o(13,"button",63),m("click",function(){u(t);let i=d();return f(i.bindNginx())}),x(14,"nz-icon",57),c(15," \u7ED1\u5B9A Nginx "),r()(),X()}if(s&2){let t=d();l(9),v("ngModel",t.bindPath),l(4),g("nzLoading",t.binding())("disabled",!t.bindPath.trim())}}var Qt=class s{nginxService=b(Q);message=b(R);modal=b(Ke);instance=p(null);status=p(null);loading=p(!1);binding=p(!1);controlling=p(!1);bindModalVisible=!1;bindPath="";secondaryTab=p("upstream");configExpanded=p(!1);openServerDrawerToken=p(0);configEditorRefreshToken=p(0);configLoading=p(!1);configFiles=p([]);serverSummary=p({total:0,enabled:0});recentLogs=p([]);runtimeDisplay=p("-");runtimeStartedAtLabel=p("-");runtimeBaseSeconds=null;runtimeBaseTimestamp=0;runtimeRafId=null;runtimeRenderBucket=null;secondaryTabs=[{id:"upstream",label:"Upstream \u7BA1\u7406"},{id:"ssl",label:"SSL \u8BC1\u4E66"},{id:"traffic",label:"\u6D41\u91CF\u63A7\u5236"},{id:"perf",label:"\u6027\u80FD\u4F18\u5316"},{id:"logs",label:"\u65E5\u5FD7"},{id:"test",label:"\u914D\u7F6E\u68C0\u6D4B"},{id:"settings",label:"\u8BBE\u7F6E"}];async ngOnInit(){await this.loadStatus(),await this.loadConfigFiles()}ngOnDestroy(){this.stopRuntimeTicker()}switchSecondaryTab(e){this.secondaryTab.set(e)}onSecondaryTabIndexChange(e){let t=this.secondaryTabs[e];t&&this.secondaryTab.set(t.id)}secondaryTabIndex(){let e=this.secondaryTabs.findIndex(t=>t.id===this.secondaryTab());return e>=0?e:0}toggleConfigExpanded(){this.configExpanded.update(e=>!e)}requestCreateServer(){this.openServerDrawerToken.update(e=>e+1)}importServer(){this.message.info("\u5BFC\u5165\u529F\u80FD\u5F00\u53D1\u4E2D")}onServerSummaryChange(e){this.serverSummary.set(e)}onServerListMutated(){this.loadConfigFiles(),this.configExpanded()&&this.configEditorRefreshToken.update(e=>e+1)}get serviceStatusText(){return this.status()?.isRunning?"\u8FD0\u884C\u4E2D":"\u5DF2\u505C\u6B62"}get uptimeText(){return this.status()?.isRunning&&(this.runtimeDisplay()||this.status()?.uptime)||"-"}get uptimeSubText(){if(!this.status()?.isRunning)return"\u670D\u52A1\u672A\u8FD0\u884C";let e=this.runtimeStartedAtLabel();return e&&e!=="-"?`\u5F00\u59CB\u65F6\u95F4 ${e}`:"\u5F00\u59CB\u65F6\u95F4\u672A\u77E5"}get pidText(){return this.status()?.pid?`PID ${this.status()?.pid}`:"\u672A\u68C0\u6D4B\u5230 PID"}get activeConnectionText(){let e=this.status()?.activeConnections;return Number.isFinite(e)?String(e):this.status()?.isRunning?"N/A":"-"}get activeConnectionSubText(){let e=this.status()?.activeConnections;return this.status()?.isRunning?Number.isFinite(e)?"ESTABLISHED TCP \u8FDE\u63A5\u6570":"\u5F53\u524D\u73AF\u5883\u6682\u4E0D\u53EF\u7528":"\u670D\u52A1\u672A\u8FD0\u884C"}get enabledServerText(){let e=this.serverSummary();return`${e.enabled} \u542F\u7528 / ${Math.max(e.total-e.enabled,0)} \u7981\u7528`}async refreshAll(){await Promise.all([this.loadStatus(),this.loadConfigFiles()]),this.message.success("\u72B6\u6001\u5DF2\u5237\u65B0")}async loadStatus(){this.loading.set(!0);try{let e=await this.nginxService.getStats();if(e.success&&e.status){this.instance.set(e.instance||null),this.status.set(e.status),this.syncRuntimeState(e.status),e.serverSummary&&this.serverSummary.set({total:e.serverSummary.total,enabled:e.serverSummary.enabled});return}let t=await this.nginxService.getStatus();this.instance.set(t.instance),this.status.set(t.status),this.syncRuntimeState(t.status)}catch{}finally{this.loading.set(!1)}}async loadConfigFiles(){this.configLoading.set(!0);try{let e=await this.nginxService.getConfigFiles();this.configFiles.set(e.success?e.files||[]:[])}catch{this.configFiles.set([])}finally{this.configLoading.set(!1)}}showBindModal(){this.bindPath=this.getBindPathCandidates()[0]||"",this.bindModalVisible=!0}showPathHint(){this.message.info("\u5F53\u524D\u7248\u672C\u8BF7\u624B\u52A8\u8F93\u5165\u8DEF\u5F84\uFF0C\u6587\u4EF6\u6D4F\u89C8\u9009\u62E9\u80FD\u529B\u540E\u7EED\u63A5\u5165")}autoDetectBindPath(){let e=this.getBindPathCandidates();if(!e.length){this.message.warning("\u672A\u8BC6\u522B\u5230\u53EF\u7528\u7684\u9ED8\u8BA4\u8DEF\u5F84\uFF0C\u8BF7\u624B\u52A8\u8F93\u5165");return}this.bindPath=e[0],this.message.success(`\u5DF2\u586B\u5145\u8DEF\u5F84\uFF1A${this.bindPath}`)}async bindNginx(){if(!this.bindPath.trim()){this.message.warning("\u8BF7\u8F93\u5165 Nginx \u8DEF\u5F84");return}this.binding.set(!0);try{let e=await this.nginxService.bind(this.bindPath.trim());e.success&&e.instance?(this.instance.set(e.instance),this.bindModalVisible=!1,this.message.success("\u7ED1\u5B9A\u6210\u529F"),await this.refreshAll()):this.message.error(e.error||"\u7ED1\u5B9A\u5931\u8D25")}catch(e){this.message.error("\u7ED1\u5B9A\u5931\u8D25: "+e.message)}finally{this.binding.set(!1)}}unbind(){this.modal.confirm({nzTitle:"\u786E\u8BA4\u89E3\u7ED1",nzContent:"\u89E3\u7ED1\u540E\u5C06\u65E0\u6CD5\u7BA1\u7406 Nginx\uFF0C\u662F\u5426\u7EE7\u7EED\uFF1F",nzOkText:"\u89E3\u7ED1",nzOkType:"primary",nzOnOk:async()=>{try{await this.nginxService.unbind(),this.instance.set(null),this.status.set(null),this.syncRuntimeState(null),this.serverSummary.set({total:0,enabled:0}),this.configFiles.set([]),this.message.success("\u89E3\u7ED1\u6210\u529F")}catch(e){this.message.error("\u89E3\u7ED1\u5931\u8D25: "+e.message)}}})}async startNginx(){if(!this.controlling()){this.controlling.set(!0),this.loading.set(!0);try{let e=await this.nginxService.start();e.success?(this.appendLog("ok","nginx start executed"),this.message.success("\u542F\u52A8\u6210\u529F"),await this.loadStatus()):this.message.error(e.error||"\u542F\u52A8\u5931\u8D25")}catch(e){this.message.error("\u542F\u52A8\u5931\u8D25: "+e.message)}finally{this.loading.set(!1),this.controlling.set(!1)}}}async stopNginx(){if(!this.controlling()){this.controlling.set(!0),this.loading.set(!0);try{let e=await this.nginxService.stop();e.success?(this.appendLog("warn","nginx stop executed"),this.message.success("\u505C\u6B62\u6210\u529F"),await this.loadStatus()):this.message.error(e.error||"\u505C\u6B62\u5931\u8D25")}catch(e){this.message.error("\u505C\u6B62\u5931\u8D25: "+e.message)}finally{this.loading.set(!1),this.controlling.set(!1)}}}async reloadNginx(){if(!this.controlling()){this.controlling.set(!0),this.loading.set(!0);try{let e=await this.nginxService.reload();e.success?(this.appendLog("ok","nginx reload executed"),this.message.success("\u91CD\u8F7D\u6210\u529F"),await this.loadStatus()):this.message.error(e.error||"\u91CD\u8F7D\u5931\u8D25")}catch(e){this.message.error("\u91CD\u8F7D\u5931\u8D25: "+e.message)}finally{this.loading.set(!1),this.controlling.set(!1)}}}async restartNginx(){if(!this.controlling()){this.controlling.set(!0),this.loading.set(!0);try{let e=await this.nginxService.stop();if(!e.success){this.message.error("\u91CD\u542F\u5931\u8D25: "+(e.error||"\u505C\u6B62\u5931\u8D25"));return}let t=await this.nginxService.start();t.success?(this.appendLog("info","nginx restart executed"),this.message.success("\u91CD\u542F\u6210\u529F"),await this.loadStatus()):this.message.error("\u91CD\u542F\u5931\u8D25: "+(t.error||"\u542F\u52A8\u5931\u8D25"))}catch(e){this.message.error("\u91CD\u542F\u5931\u8D25: "+e.message)}finally{this.loading.set(!1),this.controlling.set(!1)}}}async testConfig(){this.loading.set(!0);try{let e=await this.nginxService.test();e.valid?(this.appendLog("ok","configuration test passed"),this.message.success("\u914D\u7F6E\u9A8C\u8BC1\u901A\u8FC7"),e.warnings?.length&&e.warnings.forEach(t=>this.message.warning(t))):(this.appendLog("error","configuration test failed"),this.message.error("\u914D\u7F6E\u9A8C\u8BC1\u5931\u8D25"),e.errors?.forEach(t=>this.message.error(t)))}catch(e){this.message.error("\u6D4B\u8BD5\u5931\u8D25: "+e.message)}finally{this.loading.set(!1)}}appendLog(e,t){let n=new Date().toLocaleTimeString("zh-CN",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"});this.recentLogs.update(i=>[{time:n,level:e,msg:t},...i].slice(0,120))}getBindPathCandidates(){let e=typeof navigator<"u"?navigator.userAgent.toLowerCase():"";return e.includes("windows")?["C:\\nginx\\nginx.exe","D:\\nginx\\nginx.exe"]:e.includes("mac")?["/opt/homebrew/bin/nginx","/usr/local/bin/nginx"]:["/usr/sbin/nginx","/usr/local/nginx/sbin/nginx","/usr/local/bin/nginx"]}syncRuntimeState(e){if(!e?.isRunning){this.stopRuntimeTicker(),this.runtimeBaseSeconds=null,this.runtimeBaseTimestamp=0,this.runtimeDisplay.set("-"),this.runtimeStartedAtLabel.set("-");return}let t=this.parseUptimeSeconds(e.uptime);if(t===null){this.stopRuntimeTicker(),this.runtimeBaseSeconds=null,this.runtimeBaseTimestamp=0,this.runtimeDisplay.set(e.uptime||"-"),this.runtimeStartedAtLabel.set("-");return}this.runtimeBaseSeconds=t,this.runtimeBaseTimestamp=Date.now(),this.runtimeRenderBucket=null;let n=new Date(this.runtimeBaseTimestamp-t*1e3);this.runtimeStartedAtLabel.set(this.formatDateTime(n)),this.updateRuntimeDisplay(),this.startRuntimeTicker()}startRuntimeTicker(){if(typeof window>"u"||this.runtimeRafId!==null)return;let e=()=>{if(this.runtimeBaseSeconds===null||!this.status()?.isRunning){this.stopRuntimeTicker();return}this.updateRuntimeDisplay(),this.runtimeRafId=window.requestAnimationFrame(e)};this.runtimeRafId=window.requestAnimationFrame(e)}stopRuntimeTicker(){typeof window>"u"||(this.runtimeRafId!==null&&(window.cancelAnimationFrame(this.runtimeRafId),this.runtimeRafId=null),this.runtimeRenderBucket=null)}updateRuntimeDisplay(){if(this.runtimeBaseSeconds===null)return;let e=this.runtimeBaseSeconds+Math.max(0,Math.floor((Date.now()-this.runtimeBaseTimestamp)/1e3)),n=e>=86400?Math.floor(e/60):e;this.runtimeRenderBucket!==n&&(this.runtimeRenderBucket=n,this.runtimeDisplay.set(this.formatElapsed(e)))}parseUptimeSeconds(e){let t=String(e||"").trim();if(!t)return null;let n=t.match(/^(\d+)\s*d\s*(\d{1,2}):(\d{1,2}):(\d{1,2})$/i);if(n){let i=Number(n[1]),a=Number(n[2]),_=Number(n[3]),h=Number(n[4]);return i*86400+a*3600+_*60+h}if(n=t.match(/^(\d+)-(\d{1,2}):(\d{1,2}):(\d{1,2})$/),n){let i=Number(n[1]),a=Number(n[2]),_=Number(n[3]),h=Number(n[4]);return i*86400+a*3600+_*60+h}if(n=t.match(/^(\d{1,2}):(\d{1,2}):(\d{1,2})$/),n){let i=Number(n[1]),a=Number(n[2]),_=Number(n[3]);return i*3600+a*60+_}if(n=t.match(/^(\d{1,2}):(\d{1,2})$/),n){let i=Number(n[1]),a=Number(n[2]);return i*60+a}return null}formatElapsed(e){let t=Math.max(0,Math.floor(e));if(t>=86400){let gt=Math.floor(t/86400),pt=Math.floor(t%86400/3600),Gt=Math.floor(t%3600/60);return`${gt}\u5929 ${pt}\u5C0F\u65F6 ${Gt}\u5206\u949F`}let n=Math.floor(t/3600),i=Math.floor(t%3600/60),a=t%60,_=String(n).padStart(2,"0"),h=String(i).padStart(2,"0"),ge=String(a).padStart(2,"0");return`${_}:${h}:${ge}`}formatDateTime(e){let t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0"),a=String(e.getHours()).padStart(2,"0"),_=String(e.getMinutes()).padStart(2,"0"),h=String(e.getSeconds()).padStart(2,"0");return`${t}-${n}-${i} ${a}:${_}:${h}`}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=N({type:s,selectors:[["app-nginx"]],decls:7,vars:12,consts:[["bindFooter",""],[3,"title","loading","isFullscreen","isOverflowYAuto"],["ngProjectAs","actions",5,["actions"]],[1,"console-shell"],[3,"nzVisibleChange","nzOnCancel","nzVisible","nzFooter","nzWidth","nzCentered","nzBodyStyle"],[4,"nzModalContent"],[1,"top-status"],[1,"status-dot"],["nz-button","","nzType","default",3,"click","nzLoading"],["nzType","reload","nzTheme","outline"],["nz-button","","nzType","text","nz-tooltip","","nzTooltipTitle","\u8BBE\u7F6E",3,"click"],["nzType","setting","nzTheme","outline"],[1,"unbound-content"],["nzNotFoundImage","simple",3,"nzNotFoundContent","nzNotFoundFooter"],["nz-button","","nzType","primary",3,"click"],[1,"console-content"],[1,"stats-row"],["label","\u670D\u52A1\u72B6\u6001",3,"value","toneClass","sub"],["label","\u8FD0\u884C\u65F6\u957F","toneClass","blue",3,"value","sub"],["label","\u6D3B\u8DC3\u8FDE\u63A5","toneClass","purple",3,"value","sub"],["label","Server \u5757","toneClass","orange",3,"value","sub"],[1,"service-control-row"],[1,"service-control-left"],[1,"service-control-label"],["nz-button","","nzType","default",3,"click","disabled"],["nzType","caret-right","nzTheme","outline"],["nzType","pause","nzTheme","outline"],["nz-button","","nzType","default",3,"click"],["nzType","check-circle","nzTheme","outline"],[1,"service-control-path","mono"],["accent","blue","title","\u57FA\u7840\u914D\u7F6E","subtitle","Server \u7BA1\u7406",3,"showHeader","noBodyPadding"],["nginxCardActions",""],["nzType","upload","nzTheme","outline"],["nzType","plus","nzTheme","outline"],[3,"summaryChange","serverListMutated","showToolbar","openCreateToken"],["accent","green",3,"noBodyPadding"],["type","button",1,"config-summary",3,"click"],[1,"config-summary-left"],[1,"config-title"],["nzType","down","nzTheme","outline",1,"expand-icon"],[1,"config-expanded"],["accent","orange",3,"noBodyPadding"],[1,"secondary-tabset",3,"nzSelectedIndexChange","nzSelectedIndex"],["nzTitle","Upstream \u7BA1\u7406"],["nzTitle","SSL \u8BC1\u4E66"],["nzTitle","\u6D41\u91CF\u63A7\u5236"],["nzTitle","\u6027\u80FD\u4F18\u5316"],["nzTitle","\u65E5\u5FD7"],["nzTitle","\u914D\u7F6E\u68C0\u6D4B"],[3,"loading","logs"],["nzTitle","\u8BBE\u7F6E"],[3,"instance","configFileCount"],[3,"refreshToken"],[3,"runTest","loading","logs"],[3,"unbind","instance","configFileCount"],[1,"bind-modal"],[1,"bind-icon"],["nzType","link","nzTheme","outline"],[1,"bind-title"],[1,"bind-desc"],[1,"bind-input-group"],["nz-input","","placeholder","/usr/local/nginx/sbin/nginx",1,"mono","bind-path-input",3,"ngModelChange","keyup.enter","ngModel"],["nzType","folder-open","nzTheme","outline"],["nz-button","","nzType","primary",1,"bind-submit-btn",3,"click","nzLoading","disabled"]],template:function(t,n){t&1&&(o(0,"app-page-layout",1),J(1,2),z(2,ni,8,5),X(),z(3,oi,5,2,"nz-layout",3)(4,pi,57,30,"nz-layout",3),o(5,"nz-modal",4),S("nzVisibleChange",function(a){return y(n.bindModalVisible,a)||(n.bindModalVisible=a),a}),m("nzOnCancel",function(){return n.bindModalVisible=!1}),te(6,ui,16,3,"ng-container",5),r()()),t&2&&(g("title","Nginx \u7BA1\u7406")("loading",n.loading())("isFullscreen",!0)("isOverflowYAuto",!1),l(2),M(n.instance()?2:-1),l(),M(n.instance()?4:3),l(2),v("nzVisible",n.bindModalVisible),g("nzFooter",null)("nzWidth",560)("nzCentered",!0)("nzBodyStyle",de(11,ti)))},dependencies:[T,$,Y,U,W,L,O,F,k,D,I,oe,ie,Vt,Lt,Ot,Ge,Qe,Ye,xe,Rt,It,Bt,kt,Ft,Oe,ke,Tt,Xe,st,ot,at,tt,et,rt,nt,lt,dt,mt],styles:['[_nghost-%COMP%]{--nginx-font-size-sm: 12px;--nginx-font-size-base: 14px;--nginx-font-size-kpi: 22px;--nginx-font-family-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;--bg-page: #f5f7fa;--bg-white: #ffffff;--bg-hover: #f8f9fc;--bg-input: #f7f8fa;--border: #e8ebf0;--border-light: #eef1f5;--text-1: #1d2129;--text-2: #4e5969;--text-3: #86909c;--text-4: #c9cdd4;--blue: #165dff;--blue-bg: #f2f6ff;--blue-border: rgba(22, 93, 255, .15);--green: #00b42a;--green-bg: #f2fff6;--green-border: rgba(0, 180, 42, .15);--red: #f53f3f;--red-bg: #fff2f2;--orange: #ff7d00;--orange-bg: #fff7e8;--orange-border: rgba(255, 125, 0, .15);--purple: #722ed1;--shadow-card: 0 1px 4px rgba(0, 0, 0, .04);--shadow-hover: 0 4px 12px rgba(0, 0, 0, .06)}.console-shell[_ngcontent-%COMP%]{height:100%;background:var(--bg-page)}.console-content[_ngcontent-%COMP%]{padding:18px 20px 30px;overflow-y:auto}.unbound-content[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:100%}.stats-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px}.service-control-row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#f2f3f5;border:1px solid #e5e6eb;border-radius:6px;padding:10px 12px;margin-bottom:14px}.service-control-left[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.service-control-label[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-2);font-weight:600;margin-right:2px}.service-control-path[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-3);padding:4px 8px;border:1px solid #dcdfe5;border-radius:4px;background:#f7f8fa}.config-title[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-base, 14px);font-weight:700;color:var(--text-1)}.config-summary[_ngcontent-%COMP%]{width:100%;display:flex;align-items:center;justify-content:space-between;padding:10px 16px 10px 20px;border:none;background:#fff;cursor:pointer;text-align:left;transition:background .12s ease}.config-summary[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.config-summary.open[_ngcontent-%COMP%] .expand-icon[_ngcontent-%COMP%]{transform:rotate(180deg)}.config-summary-left[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;min-width:0}.expand-icon[_ngcontent-%COMP%]{color:var(--text-3);transition:transform .2s ease}.config-expanded[_ngcontent-%COMP%]{border-top:1px solid var(--border-light)}.mono[_ngcontent-%COMP%]{font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)}.mono.strong[_ngcontent-%COMP%]{color:var(--text-1);font-weight:600}.mono.dim[_ngcontent-%COMP%]{color:var(--text-2);font-size:var(--nginx-font-size-sm, 12px)}.bind-modal[_ngcontent-%COMP%]{padding:32px;text-align:center}.bind-icon[_ngcontent-%COMP%]{width:56px;height:56px;margin:0 auto 18px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--blue);background:var(--blue-bg);border:1px solid var(--blue-border);font-size:24px}.bind-title[_ngcontent-%COMP%]{font-size:18px;font-weight:700;color:var(--text-1);margin-bottom:8px}.bind-desc[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);line-height:1.7;color:var(--text-3);margin-bottom:22px}.bind-input-group[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-bottom:12px}.bind-path-input[_ngcontent-%COMP%]{flex:1}.bind-or[_ngcontent-%COMP%]{font-size:var(--nginx-font-size-sm, 12px);color:var(--text-3);margin-bottom:12px}.bind-auto-detect[_ngcontent-%COMP%]{width:100%;margin-bottom:16px;border:1px solid var(--border);border-radius:6px;background:var(--bg-input);cursor:pointer;padding:10px 12px;display:flex;align-items:center;gap:10px;transition:all .12s ease;text-align:left}.bind-auto-detect[_ngcontent-%COMP%]:hover{border-color:var(--blue);box-shadow:0 0 0 2px var(--blue-border);background:#fff}.bind-auto-detect[_ngcontent-%COMP%] .anticon[_ngcontent-%COMP%]{font-size:16px;color:var(--blue)}.bind-auto-detect-text[_ngcontent-%COMP%]{min-width:0}.bind-auto-detect-title[_ngcontent-%COMP%]{color:var(--text-1);font-size:var(--nginx-font-size-base, 14px);font-weight:600}.bind-auto-detect-hint[_ngcontent-%COMP%]{margin-top:2px;color:var(--text-3);font-size:var(--nginx-font-size-sm, 12px)}.bind-submit-btn[_ngcontent-%COMP%]{width:100%;height:36px;font-size:var(--nginx-font-size-base, 14px);display:inline-flex;align-items:center;justify-content:center}@media (max-width: 768px){.bind-modal[_ngcontent-%COMP%]{padding:20px 16px}.bind-input-group[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch}}[_nghost-%COMP%] .top-status{display:inline-flex;align-items:center;gap:6px;font-size:var(--nginx-font-size-sm, 12px);font-family:var(--nginx-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace);color:var(--red);background:var(--red-bg);border:1px solid rgba(245,63,63,.2);border-radius:16px;padding:4px 10px}[_nghost-%COMP%] .top-status.running{color:var(--green);background:var(--green-bg);border-color:var(--green-border)}[_nghost-%COMP%] .top-status .status-dot{width:6px;height:6px;border-radius:50%;background:currentColor;animation:_ngcontent-%COMP%_pulse 2s ease-in-out infinite}[_nghost-%COMP%] .secondary-tabset .ant-tabs-nav{margin:0;padding:0 16px;border-bottom:1px solid var(--border-light)}[_nghost-%COMP%] .secondary-tabset .ant-tabs-content-holder{padding:14px 18px}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1}50%{opacity:.35}}@media (max-width: 1280px){.stats-row[_ngcontent-%COMP%]{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 992px){.service-control-row[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}}@media (max-width: 768px){.console-content[_ngcontent-%COMP%]{padding:12px}.stats-row[_ngcontent-%COMP%]{grid-template-columns:1fr}.config-summary-left[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}}']})};export{Qt as NginxComponent};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{j as on}from"./chunk-YMTC5GZK.js";import{f as nn}from"./chunk-RW2JPJV7.js";import{e as sn}from"./chunk-SVQWPHF5.js";import{a as rn,b as Ie}from"./chunk-GDWS2L66.js";import{a as an}from"./chunk-B6MBYCXI.js";import"./chunk-G2W3B7TJ.js";import"./chunk-PIK5YPIB.js";import"./chunk-YVZHJ76K.js";import"./chunk-WD4IAQR3.js";import{f as tn}from"./chunk-HRXCR3IN.js";import{a as yn}from"./chunk-KVFR7GFV.js";import{d as De,e as Ne,f as Se}from"./chunk-4KETC6EB.js";import{e as Kt,g as Jt,h as Gt}from"./chunk-JU3TEDBV.js";import{a as en}from"./chunk-UQGCUFNM.js";import{g as $t,h as At,i as Lt,k as Qt,l as Wt}from"./chunk-BYEU6KGP.js";import{d as Xt,e as Yt}from"./chunk-UXXWRMM6.js";import{$b as Ht,Eb as Me,Fa as ee,Ga as $,Gb as re,Ha as et,Ia as tt,Kb as se,L as B,Ma as Ft,Na as Rt,Oa as ze,Pa as ve,Ra as Ee,Sa as be,Ub as le,Va as Te,Vb as Ut,Wb as we,Xb as Zt,Zb as ce,a as Ot,ac as Z,c as Pt,dc as nt,fb as jt,fc as me,gb as Bt,la as Xe,ma as Vt,ra as Ye,sa as kt,sb as qt,ua as ae}from"./chunk-SPRWNZHF.js";import"./chunk-HFZLJHYR.js";import{h as Ge}from"./chunk-L5D75AMV.js";import{i as It,n as O}from"./chunk-T3KK7ZXB.js";import{$b as N,Ac as U,Ba as Ct,Bb as xt,Ca as gt,Da as _e,Ec as Mt,Fb as w,Fc as ye,Gb as Q,Gc as de,Ha as I,Hb as zt,Jc as m,Kc as V,Lb as J,Lc as F,Nc as Ze,Oa as Ue,Oc as He,Pc as Ke,Ra as he,Ub as vt,Wb as y,X as ut,Xc as Y,Yb as x,Yc as wt,Zb as Et,a as H,ac as S,b as K,bc as f,cc as s,cd as Dt,dc as l,e as hn,ea as qe,ec as T,f as We,g as dt,hd as j,ic as G,id as Nt,jc as X,lc as v,m as mt,na as ft,nb as p,nd as Je,oa as L,r as ie,rc as C,s as P,sa as u,sb as b,tb as _t,td as xe,uc as r,vb as ht,vc as bt,wc as Tt,xd as oe,ya as _,yb as yt,yc as W,yd as St,z as ge,za as h,zc as q}from"./chunk-WI67LAOV.js";var it=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275dir=zt({type:t,selectors:[["button","nz-trans-button",""]],hostVars:8,hostBindings:function(i,o){i&2&&ye("border","0")("background","transparent")("padding","0")("line-height","inherit")}})}return t})(),ot=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Q({type:t});static \u0275inj=L({})}return t})();function vn(t,n){if(t&1&&(G(0),T(1,"nz-icon",2),X()),t&2){let e=n.$implicit;p(),f("nzType",e)}}var En=["textarea"];function bn(t,n){if(t&1){let e=v();s(0,"textarea",2,0),C("blur",function(){_(e);let o=r();return h(o.confirm())}),l(),s(2,"button",3),C("click",function(){_(e);let o=r();return h(o.confirm())}),T(3,"nz-icon",4),l()}}function Tn(t,n){if(t&1&&(G(0),T(1,"nz-icon",7),X()),t&2){let e=n.$implicit;p(),f("nzType",e)}}function Mn(t,n){if(t&1){let e=v();s(0,"button",5),C("click",function(){_(e);let o=r();return h(o.onClick())}),J(1,Tn,2,1,"ng-container",6),l()}if(t&2){let e=r();f("nzTooltipTitle",e.tooltip===null?null:e.tooltip||(e.locale==null?null:e.locale.edit)),p(),f("nzStringTemplateOutlet",e.icon)}}var wn=["ellipsisContainer"],Dn=["expandable"],Nn=["contentTemplate"],Sn=["*"],In=t=>({content:t});function On(t,n){t&1&&Tt(0)}function Pn(t,n){if(t&1&&(y(0,On,1,0),m(1)),t&2){let e=n.content;x(e?-1:0),p(),F(" ",e," ")}}function Vn(t,n){}function kn(t,n){if(t&1&&m(0),t&2){let e=r(3);F(" ",e.nzSuffix," ")}}function Fn(t,n){if(t&1&&(J(0,Vn,0,0,"ng-template",5),y(1,kn,1,1)),t&2){let e=r(2),i=Mt(1);f("ngTemplateOutlet",i)("ngTemplateOutletContext",wt(3,In,e.nzContent)),p(),x(e.nzSuffix?1:-1)}}function Rn(t,n){if(t&1&&m(0),t&2){let e=r(3);F(" ",e.ellipsisStr," ")}}function jn(t,n){if(t&1&&m(0),t&2){let e=r(3);F(" ",e.nzSuffix," ")}}function Bn(t,n){if(t&1){let e=v();s(0,"a",7,2),C("click",function(){_(e);let o=r(3);return h(o.onExpand())}),m(2),l()}if(t&2){let e=r(3);p(2),F(" ",e.locale==null?null:e.locale.expand," ")}}function $n(t,n){if(t&1&&(T(0,"span",null,1),y(2,Rn,1,1),y(3,jn,1,1),y(4,Bn,3,1,"a",6)),t&2){let e=r(2);p(2),x(e.isEllipsis?2:-1),p(),x(e.nzSuffix?3:-1),p(),x(e.nzExpandable&&e.isEllipsis?4:-1)}}function An(t,n){if(t&1&&y(0,Fn,2,5)(1,$n,5,3),t&2){let e=r();x(e.expanded||!e.hasOperationsWithEllipsis&&e.nzEllipsisRows===1&&!e.hasEllipsisObservers||e.canCssEllipsis||e.nzSuffix&&e.expanded?0:1)}}function Ln(t,n){if(t&1){let e=v();s(0,"nz-text-edit",8),C("endEditing",function(o){_(e);let a=r();return h(a.onEndEditing(o))})("startEditing",function(){_(e);let o=r();return h(o.onStartEditing())}),l()}if(t&2){let e=r();f("text",e.nzContent)("icon",e.nzEditIcon)("tooltip",e.nzEditTooltip)}}function Qn(t,n){if(t&1){let e=v();s(0,"nz-text-copy",9),C("textCopy",function(o){_(e);let a=r();return h(a.onTextCopy(o))}),l()}if(t&2){let e=r();f("text",e.copyText)("tooltips",e.nzCopyTooltips)("icons",e.nzCopyIcons)}}var at=(()=>{class t{cdr=u(xe);clipboard=u(an);i18n=u(Te);destroyRef=u(_e);copied=!1;copyId;locale;nativeElement=u(he).nativeElement;copyTooltip=null;copedTooltip=null;copyIcon="copy";copedIcon="check";text;tooltips;icons=["copy","check"];textCopy=new b;constructor(){this.destroyRef.onDestroy(()=>{clearTimeout(this.copyId)})}ngOnInit(){this.i18n.localeChange.pipe(B(this.destroyRef)).subscribe(()=>{this.locale=this.i18n.getLocaleData("Text"),this.updateTooltips(),this.cdr.markForCheck()})}ngOnChanges(e){let{tooltips:i,icons:o}=e;i&&this.updateTooltips(),o&&this.updateIcons()}onClick(){if(this.copied)return;this.copied=!0,this.cdr.detectChanges();let e=this.text;this.textCopy.emit(e),this.clipboard.copy(e),this.onCopied()}onCopied(){clearTimeout(this.copyId),this.copyId=setTimeout(()=>{this.copied=!1,this.cdr.detectChanges()},3e3)}updateTooltips(){if(this.tooltips===null)this.copedTooltip=null,this.copyTooltip=null;else if(Array.isArray(this.tooltips)){let[e,i]=this.tooltips;this.copyTooltip=e||this.locale?.copy,this.copedTooltip=i||this.locale?.copied}else this.copyTooltip=this.locale?.copy,this.copedTooltip=this.locale?.copied;this.cdr.markForCheck()}updateIcons(){let[e,i]=this.icons;this.copyIcon=e,this.copedIcon=i,this.cdr.markForCheck()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=w({type:t,selectors:[["nz-text-copy"]],inputs:{text:"text",tooltips:"tooltips",icons:"icons"},outputs:{textCopy:"textCopy"},exportAs:["nzTextCopy"],features:[Ue],decls:2,vars:4,consts:[["type","button","nz-tooltip","","nz-trans-button","",1,"ant-typography-copy",3,"click","nzTooltipTitle"],[4,"nzStringTemplateOutlet"],[3,"nzType"]],template:function(i,o){i&1&&(s(0,"button",0),C("click",function(){return o.onClick()}),J(1,vn,2,1,"ng-container",1),l()),i&2&&(de("ant-typography-copy-success",o.copied),f("nzTooltipTitle",o.copied?o.copedTooltip:o.copyTooltip),p(),f("nzStringTemplateOutlet",o.copied?o.copedIcon:o.copyIcon))},dependencies:[me,nt,ot,it,$,ee,tt,et],encapsulation:2,changeDetection:0})}return t})(),rt=(()=>{class t{ngZone=u(_t);cdr=u(xe);i18n=u(Te);destroyRef=u(_e);editing=!1;locale;text;icon="edit";tooltip;startEditing=new b;endEditing=new b(!0);set textarea(e){this.textarea$.next(e)}autosizeDirective;beforeText;currentText;nativeElement=u(he).nativeElement;textarea$=new mt(null);injector=u(Ct);ngOnInit(){this.i18n.localeChange.pipe(B(this.destroyRef)).subscribe(()=>{this.locale=this.i18n.getLocaleData("Text"),this.cdr.markForCheck()}),this.textarea$.pipe(qe(e=>Ye(e?.nativeElement,"keydown")),B(this.destroyRef)).subscribe(e=>{e.keyCode!==27&&e.keyCode!==13||this.ngZone.run(()=>{e.keyCode===27?this.onCancel():this.onEnter(e),this.cdr.markForCheck()})}),this.textarea$.pipe(qe(e=>Ye(e?.nativeElement,"input")),B(this.destroyRef)).subscribe(e=>{this.currentText=e.target.value})}onClick(){this.beforeText=this.text,this.currentText=this.beforeText,this.editing=!0,this.startEditing.emit(),this.focusAndSetValue()}confirm(){this.editing=!1,this.endEditing.emit(this.currentText)}onEnter(e){e.stopPropagation(),e.preventDefault(),this.confirm()}onCancel(){this.currentText=this.beforeText,this.confirm()}focusAndSetValue(){let{injector:e}=this;ht(()=>{this.textarea$.pipe(ut(i=>i!=null),B(this.destroyRef)).subscribe(i=>{i.nativeElement.focus(),i.nativeElement.value=this.currentText||"",this.autosizeDirective.resizeToFitContent(),this.cdr.markForCheck()})},{injector:e})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=w({type:t,selectors:[["nz-text-edit"]],viewQuery:function(i,o){if(i&1&&(W(En,5),W(we,5)),i&2){let a;q(a=U())&&(o.textarea=a.first),q(a=U())&&(o.autosizeDirective=a.first)}},inputs:{text:"text",icon:"icon",tooltip:"tooltip"},outputs:{startEditing:"startEditing",endEditing:"endEditing"},exportAs:["nzTextEdit"],decls:2,vars:1,consts:[["textarea",""],["nz-tooltip","","nz-trans-button","",1,"ant-typography-edit",3,"nzTooltipTitle"],["nz-input","","nzAutosize","",3,"blur"],["nz-trans-button","",1,"ant-typography-edit-content-confirm",3,"click"],["nzType","enter"],["nz-tooltip","","nz-trans-button","",1,"ant-typography-edit",3,"click","nzTooltipTitle"],[4,"nzStringTemplateOutlet"],[3,"nzType"]],template:function(i,o){i&1&&y(0,bn,4,0)(1,Mn,2,2,"button",1),i&2&&x(o.editing?0:1)},dependencies:[Z,ce,we,ot,it,$,ee,me,nt,tt,et],encapsulation:2,changeDetection:0})}return t})(),Wn="typography",qn="ant-typography-expand",Un=(()=>{var k;let t,n=[],e=[],i,o=[],a=[],E,D=[],z=[],R,fe=[],Ce=[],lt,ct=[],pt=[];return k=class{_nzModuleName=Wn;nzConfigService=u(kt);el=u(he).nativeElement;cdr=u(xe);viewContainerRef=u(xt);renderer=u(yt);platform=u(Pt);i18n=u(Te);resizeService=u(qt);directionality=u(Ot);document=u(gt);destroyRef=u(_e);nzCopyable=!1;nzEditable=!1;nzDisabled=!1;nzExpandable=!1;nzEllipsis=!1;nzCopyTooltips=P(this,n,void 0);nzCopyIcons=(P(this,e),P(this,o,["copy","check"]));nzEditTooltip=(P(this,a),P(this,D,void 0));nzEditIcon=(P(this,z),P(this,fe,"edit"));nzContent=P(this,Ce);nzEllipsisRows=P(this,ct,1);nzType=P(this,pt);nzCopyText;nzSuffix;nzContentChange=new b;nzCopy=new b;nzExpandChange=new b;nzOnEllipsis=new b;textEditRef;textCopyRef;ellipsisContainer;expandableBtn;contentTemplate;locale;expandableBtnElementCache=null;editing=!1;ellipsisText;cssEllipsis=!1;isEllipsis=!0;expanded=!1;ellipsisStr="...";dir="ltr";get hasEllipsisObservers(){return this.nzOnEllipsis.observers.length>0}get canCssEllipsis(){return this.nzEllipsis&&this.cssEllipsis&&!this.expanded&&!this.hasEllipsisObservers}get hasOperationsWithEllipsis(){return(this.nzCopyable||this.nzEditable||this.nzExpandable)&&this.nzEllipsis}viewInit=!1;requestId=-1;windowResizeSubscription=dt.EMPTY;get copyText(){return typeof this.nzCopyText=="string"?this.nzCopyText:this.nzContent}constructor(){this.destroyRef.onDestroy(()=>{this.expandableBtnElementCache=null,this.windowResizeSubscription.unsubscribe()})}onTextCopy(g){this.nzCopy.emit(g)}onStartEditing(){this.editing=!0}onEndEditing(g){this.editing=!1,this.nzContentChange.emit(g),this.nzContent===g&&this.renderOnNextFrame(),this.cdr.markForCheck()}onExpand(){this.isEllipsis=!1,this.expanded=!0,this.nzExpandChange.emit(),this.nzOnEllipsis.emit(!1)}canUseCSSEllipsis(){return this.nzEditable||this.nzCopyable||this.nzExpandable||this.nzSuffix||this.hasEllipsisObservers?!1:this.nzEllipsisRows===1?Xe("textOverflow"):Xe("webkitLineClamp")}renderOnNextFrame(){Bt(this.requestId),!(!this.viewInit||!this.nzEllipsis||this.nzEllipsisRows<0||this.expanded||!this.platform.isBrowser)&&(this.requestId=jt(()=>this.syncEllipsis()))}getOriginContentViewRef(){let g=this.viewContainerRef.createEmbeddedView(this.contentTemplate,{content:this.nzContent});return g.detectChanges(),{viewRef:g,removeView:()=>this.viewContainerRef.remove(this.viewContainerRef.indexOf(g))}}syncEllipsis(){if(this.cssEllipsis)return;let{viewRef:g,removeView:d}=this.getOriginContentViewRef(),c=[this.textCopyRef,this.textEditRef].filter(ne=>ne&&ne.nativeElement).map(ne=>ne.nativeElement),M=this.getExpandableBtnElement();M&&c.push(M);let{contentNodes:Le,text:Qe,ellipsis:pe}=Vt(this.el,this.nzEllipsisRows,g.rootNodes,c,this.ellipsisStr,this.nzSuffix);d(),this.ellipsisText=Qe,pe!==this.isEllipsis&&(this.isEllipsis=pe,this.nzOnEllipsis.emit(pe));let te=this.ellipsisContainer.nativeElement;for(;te.firstChild;)this.renderer.removeChild(te,te.firstChild);Le.forEach(ne=>{this.renderer.appendChild(te,ne.cloneNode(!0))}),this.cdr.markForCheck()}getExpandableBtnElement(){if(this.nzExpandable){let g=this.locale?this.locale.expand:"",d=this.expandableBtnElementCache;if(!d||d.innerText===g){let c=this.document.createElement("a");c.className=qn,c.innerText=g,this.expandableBtnElementCache=c}return this.expandableBtnElementCache}else return this.expandableBtnElementCache=null,null}renderAndSubscribeWindowResize(){this.platform.isBrowser&&(this.windowResizeSubscription.unsubscribe(),this.cssEllipsis=this.canUseCSSEllipsis(),this.renderOnNextFrame(),this.windowResizeSubscription=this.resizeService.connect().pipe(B(this.destroyRef)).subscribe(()=>this.renderOnNextFrame()))}ngOnInit(){this.i18n.localeChange.pipe(B(this.destroyRef)).subscribe(()=>{this.locale=this.i18n.getLocaleData("Text"),this.cdr.markForCheck()}),this.directionality.change?.pipe(B(this.destroyRef)).subscribe(g=>{this.dir=g,this.cdr.detectChanges()}),this.dir=this.directionality.value}ngAfterViewInit(){this.viewInit=!0,this.renderAndSubscribeWindowResize()}ngOnChanges(g){let{nzCopyable:d,nzEditable:c,nzExpandable:M,nzEllipsis:Le,nzContent:Qe,nzEllipsisRows:pe,nzSuffix:te}=g;(d||c||M||Le||Qe||pe||te)&&this.nzEllipsis&&(this.expanded?this.windowResizeSubscription.unsubscribe():this.renderAndSubscribeWindowResize())}},(()=>{let g=typeof Symbol=="function"&&Symbol.metadata?Object.create(null):void 0;t=[ae()],i=[ae()],E=[ae()],R=[ae()],lt=[ae()],ie(null,null,t,{kind:"field",name:"nzCopyTooltips",static:!1,private:!1,access:{has:d=>"nzCopyTooltips"in d,get:d=>d.nzCopyTooltips,set:(d,c)=>{d.nzCopyTooltips=c}},metadata:g},n,e),ie(null,null,i,{kind:"field",name:"nzCopyIcons",static:!1,private:!1,access:{has:d=>"nzCopyIcons"in d,get:d=>d.nzCopyIcons,set:(d,c)=>{d.nzCopyIcons=c}},metadata:g},o,a),ie(null,null,E,{kind:"field",name:"nzEditTooltip",static:!1,private:!1,access:{has:d=>"nzEditTooltip"in d,get:d=>d.nzEditTooltip,set:(d,c)=>{d.nzEditTooltip=c}},metadata:g},D,z),ie(null,null,R,{kind:"field",name:"nzEditIcon",static:!1,private:!1,access:{has:d=>"nzEditIcon"in d,get:d=>d.nzEditIcon,set:(d,c)=>{d.nzEditIcon=c}},metadata:g},fe,Ce),ie(null,null,lt,{kind:"field",name:"nzEllipsisRows",static:!1,private:!1,access:{has:d=>"nzEllipsisRows"in d,get:d=>d.nzEllipsisRows,set:(d,c)=>{d.nzEllipsisRows=c}},metadata:g},ct,pt),g&&Object.defineProperty(k,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:g})})(),We(k,"\u0275fac",function(d){return new(d||k)}),We(k,"\u0275cmp",w({type:k,selectors:[["nz-typography"],["","nz-typography",""],["p","nz-paragraph",""],["span","nz-text",""],["h1","nz-title",""],["h2","nz-title",""],["h3","nz-title",""],["h4","nz-title",""]],viewQuery:function(d,c){if(d&1&&(W(rt,5),W(at,5),W(wn,5),W(Dn,5),W(Nn,5)),d&2){let M;q(M=U())&&(c.textEditRef=M.first),q(M=U())&&(c.textCopyRef=M.first),q(M=U())&&(c.ellipsisContainer=M.first),q(M=U())&&(c.expandableBtn=M.first),q(M=U())&&(c.contentTemplate=M.first)}},hostVars:26,hostBindings:function(d,c){d&2&&(ye("-webkit-line-clamp",c.canCssEllipsis&&c.nzEllipsisRows>1?c.nzEllipsisRows:null),de("ant-typography",!c.editing)("ant-typography-rtl",c.dir==="rtl")("ant-typography-edit-content",c.editing)("ant-typography-secondary",c.nzType==="secondary")("ant-typography-warning",c.nzType==="warning")("ant-typography-danger",c.nzType==="danger")("ant-typography-success",c.nzType==="success")("ant-typography-disabled",c.nzDisabled)("ant-typography-ellipsis",c.nzEllipsis&&!c.expanded)("ant-typography-single-line",c.nzEllipsis&&c.nzEllipsisRows===1)("ant-typography-ellipsis-single-line",c.canCssEllipsis&&c.nzEllipsisRows===1)("ant-typography-ellipsis-multiple-line",c.canCssEllipsis&&c.nzEllipsisRows>1))},inputs:{nzCopyable:[2,"nzCopyable","nzCopyable",oe],nzEditable:[2,"nzEditable","nzEditable",oe],nzDisabled:[2,"nzDisabled","nzDisabled",oe],nzExpandable:[2,"nzExpandable","nzExpandable",oe],nzEllipsis:[2,"nzEllipsis","nzEllipsis",oe],nzCopyTooltips:"nzCopyTooltips",nzCopyIcons:"nzCopyIcons",nzEditTooltip:"nzEditTooltip",nzEditIcon:"nzEditIcon",nzContent:"nzContent",nzEllipsisRows:[2,"nzEllipsisRows","nzEllipsisRows",St],nzType:"nzType",nzCopyText:"nzCopyText",nzSuffix:"nzSuffix"},outputs:{nzContentChange:"nzContentChange",nzCopy:"nzCopy",nzExpandChange:"nzExpandChange",nzOnEllipsis:"nzOnEllipsis"},exportAs:["nzTypography"],features:[Ue],ngContentSelectors:Sn,decls:5,vars:3,consts:[["contentTemplate",""],["ellipsisContainer",""],["expandable",""],[3,"text","icon","tooltip"],[3,"text","tooltips","icons"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"ant-typography-expand"],[1,"ant-typography-expand",3,"click"],[3,"endEditing","startEditing","text","icon","tooltip"],[3,"textCopy","text","tooltips","icons"]],template:function(d,c){d&1&&(bt(),J(0,Pn,2,2,"ng-template",null,0,Dt),y(2,An,2,1),y(3,Ln,1,3,"nz-text-edit",3),y(4,Qn,1,3,"nz-text-copy",4)),d&2&&(p(2),x(c.editing?-1:2),p(),x(c.nzEditable?3:-1),p(),x(c.nzCopyable&&!c.editing?4:-1))},dependencies:[It,rt,at],encapsulation:2,changeDetection:0})),k})(),pn=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=Q({type:t});static \u0275inj=L({imports:[Un,at,rt]})}return t})();var ue=hn(yn());function Jn(t,n){if(t&1){let e=v();s(0,"div",0)(1,"span",1),m(2,"\u6709\u672A\u4FDD\u5B58\u66F4\u6539"),l(),s(3,"button",2),C("click",function(){_(e);let o=r();return h(o.diff.emit())}),m(4,"Diff"),l(),s(5,"button",2),C("click",function(){_(e);let o=r();return h(o.reset.emit())}),m(6,"\u91CD\u7F6E"),l(),s(7,"button",3),C("click",function(){_(e);let o=r();return h(o.save.emit())}),m(8,"\u4FDD\u5B58"),l()()}}var Oe=class t{dirty=!1;diff=new b;reset=new b;save=new b;static \u0275fac=function(e){return new(e||t)};static \u0275cmp=w({type:t,selectors:[["app-config-change-bar-component"]],inputs:{dirty:"dirty"},outputs:{diff:"diff",reset:"reset",save:"save"},decls:1,vars:1,consts:[[1,"change-bar"],[1,"hint"],["nz-button","",3,"click"],["nz-button","","nzType","primary",3,"click"]],template:function(e,i){e&1&&y(0,Jn,9,0,"div",0),e&2&&x(i.dirty?0:-1)},dependencies:[O,be,Ee,ze,ve],styles:[".change-bar[_ngcontent-%COMP%]{width:100%;padding:10px 20px;display:flex;justify-content:flex-end;align-items:center;gap:10px;box-shadow:0 -2px 8px #0000000f;background:var(--app-component-bg);border:1px solid var(--app-border-color)}.hint[_ngcontent-%COMP%]{margin-right:auto;opacity:.75}"]})};var Gn=(t,n)=>n.id;function Xn(t,n){if(t&1){let e=v();s(0,"div",6),C("click",function(){let o=_(e).$implicit,a=r();return h(a.selectDomain(o))}),s(1,"div",7)(2,"div",8),T(3,"nz-icon",9),l(),s(4,"div",10)(5,"div",11),m(6),l(),s(7,"div",12),m(8),l()()()()}if(t&2){let e=n.$implicit,i=r();de("active",e.id===i.activeDomainId()),p(3),f("nzType",e.icon||"setting"),p(3),V(e.label),p(2),V(e.description)}}var Ve=class t{keyword=I("");nodes=Je([]);activeDomainId=Je("");domainSelect=new b;selectDomain(n){this.domainSelect.emit(n.id)}filtered=j(()=>{let n=this.keyword().trim().toLowerCase();return n?this.nodes().map(e=>K(H({},e),{children:(e.children??[]).filter(i=>(i.label??"").toLowerCase().includes(n)||(i.relPath??"").toLowerCase().includes(n))})).filter(e=>(e.children?.length??0)>0):this.nodes()});static \u0275fac=function(e){return new(e||t)};static \u0275cmp=w({type:t,selectors:[["app-config-nav-component"]],inputs:{nodes:[1,"nodes"],activeDomainId:[1,"activeDomainId"]},outputs:{domainSelect:"domainSelect"},decls:8,vars:1,consts:[[1,"list"],[1,"topbar"],["nzInputPrefix","","nzType","search",1,"search-icon"],["nz-input","","placeholder","",3,"ngModelChange","ngModel"],[1,"items"],[1,"item",3,"active"],[1,"item",3,"click"],[1,"row"],[1,"icon"],["nzTheme","outline",1,"project-suffix-icon",3,"nzType"],[1,"info"],[1,"name"],[1,"description"]],template:function(e,i){e&1&&(s(0,"div",0)(1,"div",1)(2,"nz-input-wrapper"),T(3,"nz-icon",2),s(4,"input",3),C("ngModelChange",function(a){return i.keyword.set(a)}),l()()(),s(5,"div",4),N(6,Xn,9,5,"div",5,Gn),l()()),e&2&&(p(4),f("ngModel",i.keyword()),p(2),S(i.filtered()))},dependencies:[O,le,Me,re,se,Z,ce,Ht,Zt,$,ee],styles:[".list[_ngcontent-%COMP%]{height:100%;width:100%;display:flex;flex-direction:column}.list[_ngcontent-%COMP%] .topbar[_ngcontent-%COMP%]{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;padding:10px 16px}.list[_ngcontent-%COMP%] .topbar[_ngcontent-%COMP%] nz-input-wrapper[_ngcontent-%COMP%]{width:100%;border-radius:18px}.list[_ngcontent-%COMP%] .items[_ngcontent-%COMP%]{flex:1 1 auto;overflow:auto;height:0;display:flex;flex-direction:column;gap:8px;padding:8px}.list[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%]{border-radius:3px;padding:10px;cursor:pointer}.list[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%]:hover, .list[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item.active[_ngcontent-%COMP%]{background:var(--app-primary-2)}.list[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .row[_ngcontent-%COMP%]{display:flex;gap:10px;align-items:center;overflow:hidden;justify-content:space-between}.list[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .row[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%]{font-size:42px;flex:0 0 auto;position:relative}.list[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .row[_ngcontent-%COMP%] .info[_ngcontent-%COMP%]{flex:1 1 auto;display:flex;flex-direction:column;gap:4px;overflow:hidden}.list[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .row[_ngcontent-%COMP%] .info[_ngcontent-%COMP%] .name[_ngcontent-%COMP%]{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list[_ngcontent-%COMP%] .items[_ngcontent-%COMP%] .item[_ngcontent-%COMP%] .row[_ngcontent-%COMP%] .info[_ngcontent-%COMP%] .description[_ngcontent-%COMP%]{font-size:13px;color:var(--app-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}"]})};function ke(t,n){return n.split(".").reduce((e,i)=>e?e[i]:void 0,t)}function mn(t,n,e){let i=n.split("."),o=i.pop(),a=t;for(let E of i)a[E]??={},a=a[E];a[o]=e}function un(t){return t.sort((n,e)=>(n.domain?.nav?.order??0)-(e.domain?.nav?.order??0)).map(n=>({id:n.domain.id,type:"domain",label:n.domain.label,icon:n.domain.icon,description:n.domain.description,children:(n.docs??[]).map(e=>({id:e.spec.id,type:"doc",label:e.spec.title,docId:e.spec.id,relPath:e.chosen?.relPath,codec:e.chosen?.codec,exists:e.exists}))}))}var fn=t=>t!=null&&typeof t=="object"&&!Array.isArray(t);function Fe(t,n,e,i=""){if(e===void 0)return[];if(!fn(e))return[{scope:t,target:n,path:i||"/",value:e}];let o=[],a=Object.keys(e);if(a.length===0)return o.push({scope:t,target:n,path:i||"/",value:{}}),o;for(let E of a){let D=i?`${i}.${E}`:E,z=e[E];fn(z)?o.push(...Fe(t,n,z,D)):o.push({scope:t,target:n,path:D,value:z})}return o}var Cn=(t,n)=>n.value,ei=(t,n)=>n.key;function ti(t,n){if(t&1&&(s(0,"div",3),m(1),l()),t&2){let e=r();p(),F(" ",e.item.desc," ")}}function ni(t,n){if(t&1){let e=v();s(0,"input",8),C("ngModelChange",function(o){_(e);let a=r();return h(a.emit(o))}),l()}if(t&2){let e=r();f("ngModel",e.value)}}function ii(t,n){if(t&1){let e=v();s(0,"input",8),C("ngModelChange",function(o){_(e);let a=r();return h(a.emit(o))}),l()}if(t&2){let e=r();f("ngModel",e.value)}}function oi(t,n){if(t&1&&(s(0,"span"),m(1),l()),t&2){let e=r();p(),V(e.value)}}function ai(t,n){if(t&1&&(s(0,"nz-space",6),T(1,"nz-icon",9),s(2,"span"),m(3),l()()),t&2){let e=r();p(3),V(e.value)}}function ri(t,n){if(t&1){let e=v();s(0,"nz-switch",10),C("ngModelChange",function(o){_(e);let a=r();return h(a.emit(o))}),l()}if(t&2){let e=r();f("ngModel",e.value)}}function si(t,n){if(t&1&&T(0,"nz-option",11),t&2){let e=n.$implicit;f("nzValue",e.value)("nzLabel",e.label)}}function li(t,n){if(t&1){let e=v();s(0,"nz-select",10),C("ngModelChange",function(o){_(e);let a=r();return h(a.emit(o))}),N(1,si,1,2,"nz-option",11,Cn),l()}if(t&2){let e=r();f("ngModel",e.value),p(),S(e.options)}}function ci(t,n){if(t&1&&(s(0,"span"),m(1),l()),t&2){let e=r().$index;p(),V(e+1)}}function pi(t,n){t&1&&T(0,"nz-icon",12)}function di(t,n){if(t&1&&(T(0,"nz-icon",9),s(1,"span"),m(2),l(),y(3,pi,1,0,"nz-icon",12)),t&2){let e=n.$implicit,i=r().$implicit,o=r(3);p(2),F(" ",i==null?null:i[e.key]," "),p(),x(e!==o.arrayFields()[o.arrayFields().length-1]?3:-1)}}function mi(t,n){if(t&1&&(s(0,"nz-space"),y(1,ci,2,1,"span"),N(2,di,4,2,null,null,ei),l()),t&2){let e=r(3);p(),x(e.arrayValue().length>1?1:-1),p(),S(e.arrayFields())}}function ui(t,n){if(t&1&&N(0,mi,4,1,"nz-space",null,Et),t&2){let e=r(2);S(e.arrayValue())}}function fi(t,n){t&1&&(s(0,"span"),m(1,"\u6570\u7EC4\u7C7B\u578B\u914D\u7F6E\u9879\uFF0C\u6682\u4E0D\u652F\u6301\u8868\u5355\u7F16\u8F91"),l())}function Ci(t,n){if(t&1&&y(0,ui,2,0)(1,fi,2,0,"span"),t&2){let e=r();x(e.isArrayObjectEditor()?0:1)}}function gi(t,n){if(t&1&&(s(0,"nz-space")(1,"span",2),m(2),l(),s(3,"span",14),m(4),l()()),t&2){let e=n.$implicit;p(2),F("",e.label,":"),p(2),V(e.value)}}function _i(t,n){if(t&1&&(s(0,"div",13),N(1,gi,5,2,"nz-space",null,Cn),l()),t&2){let e=r(2);p(),S(e.objectKv())}}function hi(t,n){if(t&1&&y(0,_i,3,0,"div",13),t&2){let e=r();x(e.isObjectEditor()?0:-1)}}var Re=class t{item;value;valueChange=new b;options=[];emit(n){this.valueChange.emit(n)}isObjectEditor(){return this.item?.type==="object"}objectKv(){let n=this.value??{};return Object.values(n).map((e,i)=>typeof e=="string"?{label:Object.keys(n)[i],value:e}:{label:Object.keys(n)[i],value:JSON.stringify(e)})}isArrayObjectEditor(){return this.item?.type==="array"&&this.item?.item?.type==="object"&&Array.isArray(this.item?.item?.fields)&&this.item.item.fields.length>0}arrayFields(){return this.item?.item?.fields??[]}arrayValue(){return Array.isArray(this.value)?this.value:[]}addRow(){let n=this.arrayFields(),e={};for(let o of n)o.key&&(e[o.key]=o.default??"");let i=[...this.arrayValue(),e];this.emit(i)}removeRow(n){let i=this.arrayValue().filter((o,a)=>a!==n);this.emit(i)}updateCell(n,e,i){let a=this.arrayValue().map((E,D)=>D!==n?E:K(H({},E??{}),{[e]:i}));this.emit(a)}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=w({type:t,selectors:[["app-config-item-component"]],inputs:{item:"item",value:"value",options:"options"},outputs:{valueChange:"valueChange"},decls:14,vars:3,consts:[[1,"config-item"],[1,"meta"],[1,"label"],[1,"desc"],[1,"control"],["nz-input","",3,"ngModel"],["nzAlign","center"],[3,"ngModel"],["nz-input","",3,"ngModelChange","ngModel"],["nzType","file","nzTheme","fill"],[3,"ngModelChange","ngModel"],[3,"nzValue","nzLabel"],["nzType","arrow-right","nzTheme","outline"],[1,"kv"],[1,"value"]],template:function(e,i){if(e&1&&(s(0,"div",0)(1,"div",1)(2,"div",2),m(3),l(),y(4,ti,2,1,"div",3),l(),s(5,"div",4),y(6,ni,1,1,"input",5)(7,ii,1,1,"input",5)(8,oi,2,1,"span")(9,ai,4,1,"nz-space",6)(10,ri,1,1,"nz-switch",7)(11,li,3,1,"nz-select",7)(12,Ci,2,1)(13,hi,1,1),l()()),e&2){let o;p(3),V(i.item.label),p(),x(i.item.desc?4:-1),p(2),x((o=i.item.type)==="input"?6:o==="path"?7:o==="string"?8:o==="file"?9:o==="boolean"?10:o==="select"?11:o==="array"?12:o==="object"?13:-1)}},dependencies:[O,le,Me,re,se,$,ee,Ie,rn,Z,ce,Se,De,Ne,Rt,Ft,on],styles:[".config-item[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px}.config-item[_ngcontent-%COMP%]:hover{background:var(--app-primary-2)}.config-item[_ngcontent-%COMP%] .meta[_ngcontent-%COMP%] .label[_ngcontent-%COMP%]{font-weight:500;opacity:.75}.config-item[_ngcontent-%COMP%] .meta[_ngcontent-%COMP%] .desc[_ngcontent-%COMP%]{font-size:14px;margin-top:4px;opacity:.55}.config-item[_ngcontent-%COMP%] .control[_ngcontent-%COMP%]{min-width:200px;max-width:600px;width:60%}.config-item[_ngcontent-%COMP%] .control[_ngcontent-%COMP%] input[nz-input][_ngcontent-%COMP%], .config-item[_ngcontent-%COMP%] .control[_ngcontent-%COMP%] nz-select[_ngcontent-%COMP%]{width:100%}.config-item[_ngcontent-%COMP%] .control[_ngcontent-%COMP%] .kv[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:6px;width:100%}"]})};var st=()=>[],yi=(t,n)=>n.id,gn=(t,n)=>n.key;function xi(t,n){if(t&1){let e=v();s(0,"app-config-item-component",3),C("valueChange",function(o){let a=_(e).$implicit,E=r(5);return h(E.onValueChange(o,a))}),l()}if(t&2){let e=n.$implicit,i=r(2).$implicit,o=r(3);f("item",e)("options",e.options||o.options[e.optionsRef==null?null:e.optionsRef.key]||Y(3,st))("value",o.getChild(e,i))}}function zi(t,n){if(t&1&&N(0,xi,1,4,"app-config-item-component",4,gn),t&2){let e=r().$implicit;S(e.children)}}function vi(t,n){if(t&1){let e=v();s(0,"app-config-item-component",3),C("valueChange",function(o){let a=_(e).$implicit,E=r(3);return h(E.onValueChange(o,a))}),l(),y(1,zi,2,0)}if(t&2){let e=n.$implicit,i=r(3);f("item",e)("options",e.options||i.options[e.optionsRef==null?null:e.optionsRef.key]||Y(4,st))("value",i.get(e)),p(),x(e.children!=null&&e.children.length?1:-1)}}function Ei(t,n){if(t&1&&(s(0,"section",1)(1,"h3",2),m(2),l(),N(3,vi,2,5,null,null,gn),l()),t&2){let e=n.$implicit;vt("id",e.id),p(2),V(e.label),p(),S(e.items)}}function bi(t,n){if(t&1&&N(0,Ei,5,2,"section",1,yi),t&2){let e=r().schema.sections||Y(0,st);S(e)}}function Ti(t,n){t&1&&(s(0,"div",0),m(1," \u8BE5\u914D\u7F6E\u6682\u4E0D\u652F\u6301\u8868\u5355\u6A21\u5F0F\uFF08\u53EF\u5207\u6362 Raw / \u6216\u7A0D\u540E\u5B9E\u73B0 provider\uFF09 "),l())}var je=class t{schema;vm;options={};vmChange=new b;get(n){let e=ke(this.vm,n.key);return e??n.default}getChild(n,e){let i=this.get(e);if(i==null||i==="")return n.default;let o=this.resolveDynamicPath(n.key,e.key,i),a=ke(this.vm,o);return a??n.default}onValueChange(n,e){let i=this.resolvePathForWrite(e);this.update(i,n)}resolvePathForWrite(n){let e=n.key||"",i=e.match(/<([^>]+)>/);if(!i)return e;let o=i[1],a=ke(this.vm,o);return this.resolveDynamicPath(e,o,a)}resolveDynamicPath(n,e,i){let o=`<${e}>`;return n.replace(o,String(i??""))}update(n,e){let i=structuredClone(this.vm);mn(i,n,e),this.vmChange.emit(i)}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=w({type:t,selectors:[["app-config-section-component"]],inputs:{schema:"schema",vm:"vm",options:"options"},outputs:{vmChange:"vmChange"},decls:2,vars:1,consts:[[1,"empty"],[1,"section"],[1,"section-title"],[3,"valueChange","item","options","value"],[3,"item","options","value"]],template:function(e,i){e&1&&y(0,bi,2,1)(1,Ti,2,0,"div",0),e&2&&x(i.schema?0:1)},dependencies:[O,Re],styles:[".section[_ngcontent-%COMP%]{padding:0}.section[_ngcontent-%COMP%]:last-child{border-bottom:none}.section-title[_ngcontent-%COMP%]{margin:0 0 10px;font-size:24px;opacity:.85;font-weight:500;padding:0 16px}.empty[_ngcontent-%COMP%]{padding:12px 14px}"]})};var Be=class t{api=u(Xt);getCatalog(n){return this.api.get(`/api/config/catalog/${n}`)}openInEditor(n,e){return this.api.post(`/api/config/openInEditor/${n}/${encodeURIComponent(e)}`,{})}writeDomainSchema(n,e,i){return this.api.post(`/api/config/writeSchema/${n}/${e}`,{vm:i})}getDomainSchemas(n,e){return this.api.get(`/api/config/getDomainSchema/${n}/${e}`)}diffDomainSchema(n,e,i){return this.api.post(`/api/config/diffSchema/${n}/${e}`,{vm:i})}static \u0275fac=function(e){return new(e||t)};static \u0275prov=ft({token:t,factory:t.\u0275fac,providedIn:"root"})};var Mi=["class","component"],wi=()=>({}),Di=()=>[],Ni=(t,n)=>n.docId;function Si(t,n){if(t&1&&T(0,"nz-option",13),t&2){let e=n.$implicit;f("nzLabel",e.title)("nzValue",e.docId)}}function Ii(t,n){if(t&1){let e=v();G(0),s(1,"div",11)(2,"label"),m(3,"\u9009\u62E9\u914D\u7F6E\u6587\u4EF6"),l(),s(4,"nz-select",12),Ke("ngModelChange",function(o){_(e);let a=r();return He(a.selectedDocId,o)||(a.selectedDocId=o),h(o)}),N(5,Si,1,2,"nz-option",13,Ni),l()(),X()}if(t&2){let e=r();p(4),Ze("ngModel",e.selectedDocId),p(),S(e.activeDocsMeta()||Y(1,Di))}}function Oi(t,n){if(t&1){let e=v();G(0),s(1,"button",14),C("click",function(){_(e);let o=r();return h(o.openConfig())}),m(2," \u6253\u5F00\u914D\u7F6E\u6587\u4EF6 "),l(),X()}if(t&2){let e=r();p(),f("disabled",!e.selectedDocId())}}var $e=class t{api=u(Be);projectContext=u(en);msg=u(Yt);modal=u($t);projectId=j(()=>this.projectContext.currentProjectId()||"");loading=I(!1);isModalVisible=I(!1);catalog=I(null);navNodes=j(()=>un(this.catalog()??[]));activeDomainId=I(null);selectedDocId=I(null);docStates=I({});domainSchema=I(null);domainVM=I(null);baselineDomainVM=I(null);activeDomain=j(()=>{let n=this.activeDomainId();return(this.catalog()??[]).find(e=>e.domain.id===n)??null});activeDocs=j(()=>this.activeDomain()?.docs??[]);activeDocsMeta=j(()=>{let n=this.activeDomain();return n?(n.docs??[]).map(e=>({docId:e.spec.id,title:e.spec.title,exists:e.exists,relPath:e.chosen?.relPath,codec:e.chosen?.codec})):[]});domainDirty=j(()=>{let n=this.baselineDomainVM(),e=this.domainVM();return!n||!e?!1:!ue.isEqual(n,e)});constructor(){Nt(()=>{this.projectId()&&this.getCatalog()})}getCatalog(){let n=this.projectId();n&&(this.loading.set(!0),this.api.getCatalog(n).subscribe({next:e=>{this.catalog.set(e);let i=e[0]?.domain?.id??"";i&&(this.activeDomainId.set(i),this.loadDomainSchema(i))},error:e=>{console.error(e),this.msg.error("\u52A0\u8F7D\u914D\u7F6E\u76EE\u5F55\u5931\u8D25")},complete:()=>this.loading.set(!1)}))}onDomainSelect(n){this.activeDomainId.set(n),n==="angular"?this.loadDomainSchema(n):this.domainVM.set(null)}async loadDomainSchema(n){let e=this.projectId();if(e){this.loading.set(!0);try{let i=await ge(this.api.getDomainSchemas(e,n));this.domainSchema.set(i),this.domainVM.set(i.vm),this.baselineDomainVM.set(ue.cloneDeep(i.vm))}catch(i){console.error(i),this.msg.error("\u52A0\u8F7D\u914D\u7F6E\u6A21\u578B\u5931\u8D25"),this.domainVM.set(null),this.baselineDomainVM.set(null)}finally{this.loading.set(!1)}}}async onDiff(){let n=this.projectId(),e=this.activeDomainId(),i=this.domainVM();if(!(!n||!e||!i)){this.loading.set(!0);try{let o=await ge(this.api.diffDomainSchema(n,e,i)),a=o?.docPatch??{},E=o?.filePatch??[],D=[];for(let[z,R]of Object.entries(a))D.push(...Fe("doc",z,R));for(let z of E)D.push(...Fe("file",z.relPath,z.patch));if(D.length===0){this.msg.info("\u6CA1\u6709\u53EF\u5199\u56DE\u7684\u53D8\u66F4");return}D.sort((z,R)=>{if(z.scope!==R.scope)return z.scope.localeCompare(R.scope);let fe=`${z.target}:${z.path}`,Ce=`${R.target}:${R.path}`;return fe.localeCompare(Ce)}),this.modal.create({nzTitle:"\u53D8\u66F4",nzContent:`
|
|
2
|
-
<div style="max-height:60vh; overflow:auto;">
|
|
3
|
-
${D.map(z=>`
|
|
4
|
-
<div style="padding:8px 0; border-bottom:1px solid #f0f0f0;">
|
|
5
|
-
<div style="font-weight:600;">[${z.scope}] ${z.target}</div>
|
|
6
|
-
<div style="opacity:.85; margin-top:4px;">${z.path}</div>
|
|
7
|
-
<pre style="margin:6px 0;">after : ${this.safeStringify(z.value)}</pre>
|
|
8
|
-
</div>
|
|
9
|
-
`).join("")}
|
|
10
|
-
</div>
|
|
11
|
-
`,nzFooter:null,nzWidth:900})}catch(o){console.error(o),this.msg.error("\u751F\u6210 Diff \u5931\u8D25")}finally{this.loading.set(!1)}}}safeStringify(n){try{return JSON.stringify(n,null,2)}catch{return String(n)}}onReset(){let n=this.baselineDomainVM();n&&(this.domainVM.set(ue.cloneDeep(n)),this.msg.success("\u5DF2\u91CD\u7F6E\u4E3A\u672A\u4FEE\u6539\u72B6\u6001"))}onRawChange(n){let e=this.docStates(),i=e[n.docId];if(!i)return;let o=i.baselineRaw??"",a=n.raw!==o;this.docStates.set(K(H({},e),{[n.docId]:K(H({},i),{raw:n.raw,dirty:a})}))}onValuesChange(n){}async saveActive(){let n=this.projectId(),e=this.activeDomainId(),i=this.domainVM();if(!(!n||!e||!i)){this.loading.set(!0);try{await ge(this.api.writeDomainSchema(n,e,i)),this.msg.success("\u4FDD\u5B58\u6210\u529F"),await this.loadDomainSchema(e)}catch(o){console.error(o),this.msg.error("\u4FDD\u5B58\u5931\u8D25")}finally{this.loading.set(!1)}}}openConfig(){if(!this.selectedDocId()){this.msg.warning("\u8BF7\u5148\u9009\u62E9\u914D\u7F6E\u6587\u4EF6");return}this.api.openInEditor(this.projectId(),this.selectedDocId()).subscribe(n=>{this.msg.success("\u5DF2\u5728\u9ED8\u8BA4\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\u8BE5\u914D\u7F6E\u6587\u4EF6"),this.isModalVisible.set(!1)})}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=w({type:t,selectors:[["app-project-conf",8,"component"]],attrs:Mi,decls:13,vars:11,consts:[[3,"title","loading"],["ngProjectAs","actions",5,["actions"]],["nz-button","","nzType","primary",3,"click"],[1,"panel"],[3,"domainSelect","nodes","activeDomainId"],[1,"content"],[3,"vmChange","schema","vm","options"],[3,"diff","reset","save","dirty"],["nzTitle","\u914D\u7F6E",3,"nzVisibleChange","nzOnCancel","nzVisible","nzMaskClosable"],[4,"nzModalContent"],[4,"nzModalFooter"],[1,"modal-body"],["nzPlaceHolder","\u8BF7\u9009\u62E9\u914D\u7F6E\u6587\u4EF6",2,"width","100%",3,"ngModelChange","ngModel"],[3,"nzLabel","nzValue"],["nz-button","","nzType","primary",3,"click","disabled"]],template:function(e,i){if(e&1&&(s(0,"app-page-layout",0),G(1,1),s(2,"button",2),C("click",function(){return i.isModalVisible.set(!0)}),m(3,"\u6253\u5F00\u914D\u7F6E\u6587\u4EF6"),l(),T(4,"app-ng-devtool"),X(),s(5,"div",3)(6,"app-config-nav-component",4),C("domainSelect",function(a){return i.onDomainSelect(a)}),l(),s(7,"div",5)(8,"app-config-section-component",6),C("vmChange",function(a){return i.domainVM.set(a)}),l(),s(9,"app-config-change-bar-component",7),C("diff",function(){return i.onDiff()})("reset",function(){return i.onReset()})("save",function(){return i.saveActive()}),l()()()(),s(10,"nz-modal",8),Ke("nzVisibleChange",function(a){return He(i.isModalVisible,a)||(i.isModalVisible=a),a}),C("nzOnCancel",function(){return i.isModalVisible.set(!1)}),J(11,Ii,7,2,"ng-container",9)(12,Oi,3,1,"ng-container",10),l()),e&2){let o,a;f("title","\u9879\u76EE\u914D\u7F6E")("loading",i.loading()),p(6),f("nodes",i.navNodes())("activeDomainId",i.activeDomainId()??""),p(2),f("schema",(o=i.domainSchema())==null?null:o.schema)("vm",i.domainVM())("options",((a=i.domainSchema())==null?null:a.options)??Y(10,wi)),p(),f("dirty",i.domainDirty()),p(),Ze("nzVisible",i.isModalVisible),f("nzMaskClosable",!1)}},dependencies:[O,le,re,se,Ut,nn,tn,sn,Z,Se,De,Ne,Ie,be,Ee,ze,ve,pn,Jt,me,Gt,$,Ve,Oe,Wt,Qt,Lt,At,je,Kt],styles:[".panel[_ngcontent-%COMP%]{border-radius:10px;box-shadow:0 2px 8px #0000000f;display:flex}.panel[_ngcontent-%COMP%] app-config-nav-component[_ngcontent-%COMP%]{flex:0 0 300px}.panel[_ngcontent-%COMP%] .content[_ngcontent-%COMP%]{flex:1 1 auto;display:flex;flex-direction:column;padding:8px 16px}.panel[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] app-config-section-component[_ngcontent-%COMP%]{flex:1 1 auto;overflow:hidden}.panel[_ngcontent-%COMP%] .content[_ngcontent-%COMP%] app-config-change-bar-component[_ngcontent-%COMP%]{flex:0 0 auto;position:sticky;bottom:0}"]})};var Pi=[{path:"",component:$e}],Ae=class t{static \u0275fac=function(e){return new(e||t)};static \u0275mod=Q({type:t});static \u0275inj=L({imports:[Ge.forChild(Pi),Ge]})};var _n=class t{static \u0275fac=function(e){return new(e||t)};static \u0275mod=Q({type:t});static \u0275inj=L({imports:[O,Ae]})};export{_n as ConfigurationModule};
|
|
File without changes
|