update 2026-09-04 23:37:45

This commit is contained in:
action
2026-09-04 23:37:45 +08:00
parent b37f8cba7c
commit d0a6e27e6e
44 changed files with 572 additions and 39 deletions
+23
View File
@@ -0,0 +1,23 @@
#
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=iStoreRouter
PKG_VERSION:=0.6.7
LUCI_DEPENDS:=+luci-app-quickstart +luci-app-store +luci-lib-taskd
LUCI_EXTRA_DEPENDS:=luci-lib-taskd (>=1.0.15)
LUCI_MINIFY_CSS:=0
LUCI_MINIFY_JS:=0
define Package/luci-app-istorerouter/conffiles
/etc/config/istorerouter
/www/luci-static/istorerouter/image/bg.gif
endef
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature
@@ -0,0 +1,6 @@
var p=(y,d,a)=>new Promise((i,n)=>{var s=o=>{try{c(a.next(o))}catch(e){n(e)}},f=o=>{try{c(a.throw(o))}catch(e){n(e)}},c=o=>o.done?i(o.value):Promise.resolve(o.value).then(s,f);c((a=a.apply(y,d)).next())});import{_ as w,d as x,r as b,x as E,P as F,o as _,c as m,f as r,h as g,F as k,e as L,t as h,g as B,w as D,Q as G,s as T,i as v,T as S}from"./index.js";const I=r("div",{class:"label-name"},[r("span",null,"\u9009\u62E9\u8F6F\u4EF6\u6E90 ")],-1),C={class:"label-value"},V={class:"label-flex"},N=["value"],M={class:"label-btns"},P=["disabled"],j={key:0,class:"label-msg"},q=x({__name:"index",setup(y){return p(this,null,function*(){let d,a;const i=b(!1),n=b(""),s=E({softsourceListIfo:[],softSource:{},currSoftSource:{}}),f=()=>p(this,null,function*(){var o,e,u;try{const t=yield v.Guide.SoftSourceList.GET();if((o=t==null?void 0:t.data)!=null&&o.result){const l=(e=t==null?void 0:t.data)==null?void 0:e.result;s.softsourceListIfo=l.softSourceList||[]}}catch(t){console.log(t)}try{const t=yield v.Guide.GetSoftSource.GET();if((u=t==null?void 0:t.data)!=null&&u.result){const l=t.data.result;s.softSource=l.softSource,s.currSoftSource=l.softSource}}catch(t){console.log(t)}});[d,a]=F(()=>f()),yield d,a();const c=()=>p(this,null,function*(){const o=S.Loading("\u6B63\u5728\u5207\u6362\u4E2D...");i.value=!0;try{const e=yield v.Guide.SoftSource.POST({softSourceIdentity:s.softSource.identity});if(e!=null&&e.data){const{result:u,error:t,success:l}=e.data;t&&S.Warning(t),(e.data.success||0)==0&&(S.Success("\u5207\u6362\u6210\u529F"),yield f())}}catch(e){S.Error(`${e}`)}finally{i.value=!1,o.Close()}});return(o,e)=>(_(),m("form",{class:"form-container",onSubmit:B(c,["prevent"])},[I,r("div",C,[g(` <select v-model="opkg.softSource.identity">
<option value="">\u8BF7\u9009\u62E9\u8F6F\u4EF6\u6E90</option>
<option v-for="item in opkg.softsourceListIfo" :value="item.identity">
{{ item.name }}
</option>
</select> `),(_(!0),m(k,null,L(s.softsourceListIfo,u=>(_(),m("label",V,[D(r("input",{type:"radio",value:u.identity,"onUpdate:modelValue":e[0]||(e[0]=t=>s.softSource.identity=t)},null,8,N),[[G,s.softSource.identity,void 0,{trim:!0}]]),T(" "+h(u.name),1)]))),256))]),r("div",M,[r("button",{class:"sumbit",disabled:i.value},"\u4FDD\u5B58",8,P)]),n.value?(_(),m("div",j,[r("span",null,h(n.value),1)])):g("v-if",!0)],32))})}});var Q=w(q,[]);export{Q as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
var p=(D,c,d)=>new Promise((l,e)=>{var u=o=>{try{r(d.next(o))}catch(a){e(a)}},i=o=>{try{r(d.throw(o))}catch(a){e(a)}},r=o=>o.done?l(o.value):Promise.resolve(o.value).then(u,i);r((d=d.apply(D,c)).next())});import{_ as x,d as y,r as h,x as F,P,o as m,c as _,f as n,w as v,y as k,F as N,j as g,h as I,t as S,g as B,i as w,T as E}from"./index.js";const C=n("div",{class:"label-name"},[n("span",null,"DNS\u9009\u9879")],-1),A={class:"label-value"},T=n("option",{value:"auto"},"\u4F7F\u7528\u8FD0\u8425\u5546\u63D0\u4F9B\u7684DNS",-1),V=n("option",{value:"manual"},"\u81EA\u5B9A\u4E49DNS",-1),G=[T,V],M=n("div",{class:"label-name"},[n("span",null,"DNS\u670D\u52A1\u5668\u5730\u5740")],-1),U={class:"label-value"},j=n("div",{class:"label-name"}," \u5907\u7528DNS\u670D\u52A1\u5668\u5730\u5740 ",-1),q={class:"label-value"},L={class:"label-btns"},O=["disabled"],z={key:1,class:"label-msg"},H=y({__name:"index",setup(D){return p(this,null,function*(){let c,d;const l=h(""),e=F({interfaceName:"",dnsProto:"auto",manualDnsIp:[]}),u=F({dns1:"",dns2:""}),i=h(!1),r=()=>p(this,null,function*(){i.value=!0;try{const a=yield w.Guide.DnsConfig.GET();if(a!=null&&a.data){const{result:t}=a.data;if(t){e.dnsProto=t.dnsProto,e.manualDnsIp=t.manualDnsIp||[];for(let s=0;s<e.manualDnsIp.length;s++){s==0?u.dns1=e.manualDnsIp[s]:s==1&&(u.dns2=e.manualDnsIp[s]);break}}}}catch(a){l.value=a}i.value=!1});[c,d]=P(()=>r()),yield c,d();const o=()=>p(this,null,function*(){let a={};switch(e.dnsProto){case"auto":break;case"manual":a.manualDnsIp=[],e.manualDnsIp!=null&&e.manualDnsIp.length>0?a.manualDnsIp=e.manualDnsIp:(a.manualDnsIp.push(u.dns1),u.dns2&&a.manualDnsIp.push(u.dns2));break}a.dnsProto=e.dnsProto,a.interfaceName=e.interfaceName;const t=E.Loading("\u914D\u7F6E\u4E2D...");try{const s=yield w.Guide.DnsConfig.POST(a);if(s!=null&&s.data){const{success:f,error:b}=s==null?void 0:s.data;b&&(l.value=b),(f==null||f==0)&&(l.value="\u914D\u7F6E\u6210\u529F")}}catch(s){l.value=s}t.Close()});return(a,t)=>(m(),_("form",{class:"form-container",onSubmit:B(o,["prevent"])},[C,n("div",A,[v(n("select",{"onUpdate:modelValue":t[0]||(t[0]=s=>e.dnsProto=s)},[...G],512),[[k,e.dnsProto]])]),e.dnsProto=="manual"?(m(),_(N,{key:0},[M,n("div",U,[v(n("input",{type:"text",placeholder:"\u8BF7\u8F93\u5165 dns \u5730\u5740","onUpdate:modelValue":t[1]||(t[1]=s=>u.dns1=s),required:""},null,512),[[g,u.dns1,void 0,{trim:!0}]])]),j,n("div",q,[v(n("input",{type:"text",placeholder:"\u8BF7\u8F93\u5165\u5907\u7528 dns \u5730\u5740","onUpdate:modelValue":t[2]||(t[2]=s=>u.dns2=s)},null,512),[[g,u.dns2,void 0,{trim:!0}]])])],64)):I("v-if",!0),n("div",L,[n("button",{class:"sumbit",disabled:i.value},"\u4FDD\u5B58",8,O)]),l.value?(m(),_("div",z,[n("span",null,S(l.value),1)])):I("v-if",!0)],32))})}});var Q=x(H,[]);export{Q as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as o,d as r,E as e,o as u,A as i,B as c,Y as t,G as l}from"./index.js";const p=r({__name:"index",setup(_){const a=[{name:"disk",title:"\u6211\u7684\u78C1\u76D8",path:"/router/disk"},{name:"disk-raid",title:"\u78C1\u76D8\u9635\u5217",fn:()=>{t({full:!1,title:"\u78C1\u76D8\u9635\u5217",src:"/cgi-bin/luci/admin/nas/raid"})}},{name:"disk-smart",title:"S.M.A.R.T",fn:()=>{t({full:!1,title:"S.M.A.R.T",src:"/cgi-bin/luci/admin/nas/smart"})}}];return(d,m)=>{const s=e("router-loading"),n=e("layout-page");return u(),i(n,{menus:a},{default:c(()=>[l(s)]),_:1})}}});var k=o(p,[]);export{k as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
var m=(r,v,l)=>new Promise((i,_)=>{var F=a=>{try{c(l.next(a))}catch(u){_(u)}},h=a=>{try{c(l.throw(a))}catch(u){_(u)}},c=a=>a.done?i(a.value):Promise.resolve(a.value).then(F,h);c((l=l.apply(r,v)).next())});import{_ as C,d as y,x as k,P as E,a as x,o as n,c as o,f as e,t as d,F as A,a4 as S,a5 as B,p as b,q as w,i as N}from"./index.js";const D=r=>(b("data-v-647a938c"),r=r(),w(),r),$={id:"page",class:"page-container"},I=D(()=>e("div",{class:"notice_info"},[e("li",null," \u52A8\u6001 DNS \uFF08DDNS\uFF09\u8BA9\u60A8\u5373\u4F7F\u5728\u6CA1\u6709\u9759\u6001 IP \u5730\u5740\u7684\u60C5\u51B5\u4E0B\uFF0C\u4ECD\u53EF\u5C06\u670D\u52A1\u5668\u8FDE\u540C\u7ED1\u5B9A\u7684\u57DF\u540D\u6620\u5C04\u81F3\u516C\u7F51\u4E0A\u3002 "),e("li",null," \u5982\u679C\u60A8\u6CA1\u6709\u516C\u7F51 IP \u8BF7\u4F7F\u7528 DDNSTO \uFF0C\u521D\u6B21\u4F7F\u7528 DDNSTO \u9700\u8981\u521D\u59CB\u5316\u914D\u7F6E ")],-1)),P={class:"text-container"},T={class:"text-container_item"},O=D(()=>e("div",{class:"text-container_item_title"},[e("span",null,"DDNSTO\uFF1A")],-1)),q={class:"text-container_item_flex"},G={class:"text-container_item_block"},j=["href"],V={key:0,class:"domain"},z={key:1,class:"domain"},H={class:"text-container_item"},J=D(()=>e("div",{class:"text-container_item_title"},[e("span",null,"myddns_ipv4\uFF1A")],-1)),K={class:"text-container_item_flex"},L={class:"text-container_item_block"},M=["href"],Q={key:1,class:"domain"},R={class:"text-container_item"},U=D(()=>e("div",{class:"text-container_item_title"},[e("span",null,"myddns_ipv6\uFF1A")],-1)),W={class:"text-container_item_flex"},X={class:"text-container_item_block"},Y=["href"],Z={key:1,class:"domain"},tt=y({__name:"index",setup(r){return m(this,null,function*(){let v,l;k({ipv4:"",ipv6:""});const i=k({ddnstoDomain:"",ipv4Domain:"",ipv6Domain:""}),_=k({install:!0,error:null}),F=()=>m(this,null,function*(){yield Promise.all([h()])}),h=()=>m(this,null,function*(){try{const t=yield N.Guide.Ddns.GET(),{result:s,error:p}=t.data;if(p)throw p;s&&(i.ddnstoDomain=s.ddnstoDomain,i.ipv4Domain=s.ipv4Domain,i.ipv6Domain=s.ipv6Domain)}catch(t){console.log(t)}});[v,l]=E(()=>F()),yield v,l();const c=x(()=>i.ddnstoDomain),a=x(()=>{const t=i.ipv4Domain;return t!=null&&t!=""&&t!="Stopped"?{url:`http://${t}`,title:t,ok:!0}:{url:`http://${t}`,title:"\u672A\u914D\u7F6E",ok:!1}}),u=x(()=>{const t=i.ipv6Domain;return t!=null&&t!=""&&t!="Stopped"?{url:`http://${t}`,title:t,ok:!0}:{url:`http://${t}`,title:"\u672A\u914D\u7F6E",ok:!1}}),g=()=>{S({domain:c.value,callback:t=>{}})},f=t=>{B({setup:t,callback:s=>{switch(t){case"ipv4":i.ipv4Domain=s.domain;break;case"ipv6":i.ipv6Domain=s.domain;break}}})};return(t,s)=>(n(),o("div",$,[I,e("div",P,[e("div",T,[O,e("div",q,[e("div",G,[_.install?(n(),o("a",{key:0,href:c.value,target:"_blank",class:"domain"},d(c.value),9,j)):(n(),o(A,{key:1},[_.error?(n(),o("a",V,d(_.error),1)):(n(),o("a",z,"\u672A\u5B89\u88C5"))],64)),e("a",{class:"setting",onClick:s[0]||(s[0]=p=>g())},"\u5FEB\u901F\u914D\u7F6E")])])]),e("div",H,[J,e("div",K,[e("div",L,[a.value.ok?(n(),o("a",{key:0,href:a.value.url,target:"_blank",class:"domain"},d(a.value.title),9,M)):(n(),o("a",Q,d(a.value.title),1)),e("a",{class:"setting",onClick:s[1]||(s[1]=p=>f("ipv4"))},"\u5FEB\u901F\u914D\u7F6E")])])]),e("div",R,[U,e("div",W,[e("div",X,[u.value.ok?(n(),o("a",{key:0,href:u.value.url,target:"_blank",class:"domain"},d(u.value.title),9,Y)):(n(),o("a",Z,d(u.value.title),1)),e("a",{class:"setting",onClick:s[2]||(s[2]=p=>f("ipv6"))},"\u5FEB\u901F\u914D\u7F6E")])])])])]))})}});var at=C(tt,[["__scopeId","data-v-647a938c"]]);export{at as default};
@@ -0,0 +1 @@
import{d as p,r as _,m as f,o as t,A as v,B as m,H as g,_ as y,c as s,h as l,f as a,t as h,G as b,I as C,J as k,K as x}from"./index.js";const w={key:0,id:"app-dialog"},B={key:0,class:"app-dialog_bg"},V={key:0,class:"app-dialog_header"},S={class:"app-dialog_body"},I=p({__name:"index",props:{title:{type:String},bg:{type:Boolean,default:!0},width:{type:String},beforeClose:{type:Function}},emits:["change","update:modelValue","handleClose"],setup(e,{emit:r}){const n=e,o=_(!1),i=r,c=()=>{n.beforeClose&&n.beforeClose()===!1||(o.value=!1,i("update:modelValue",!1),i("handleClose"))};return f(()=>{o.value=!0}),(u,d)=>(t(),v(g,{name:"dialog1"},{default:m(()=>[o.value?(t(),s("div",w,[e.bg?(t(),s("div",B)):l("v-if",!0),a("div",{class:"app-dialog_container",style:x({width:e.width})},[e.title!==void 0?(t(),s("div",V,[a("span",null,h(e.title),1),a("button",{class:"close",onClick:d[0]||(d[0]=N=>c())},[b(C)])])):l("v-if",!0),a("div",S,[k(u.$slots,"default",{},void 0,!0)])],4)])):l("v-if",!0)]),_:3}))}});var j=y(I,[["__scopeId","data-v-c4ccf04a"]]);export{j as d};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
var r=(c,m,i)=>new Promise((E,t)=>{var n=l=>{try{o(i.next(l))}catch(v){t(v)}},s=l=>{try{o(i.throw(l))}catch(v){t(v)}},o=l=>l.done?E(l.value):Promise.resolve(l.value).then(n,s);o((i=i.apply(c,m)).next())});import{_ as V,d as T,D as I,r as f,x as k,P as M,o as w,c as b,f as u,w as _,Q as h,s as D,j as x,h as y,t as U,g as q,p as G,q as N,i as B,T as A}from"./index.js";const p=c=>(G("data-v-ed7c3c9c"),c=c(),N(),c),j=p(()=>u("p",null,[D(" \u6B22\u8FCE\u4F7F\u7528\u5FEB\u901F\u7F51\u7EDC\u914D\u7F6E\u5411\u5BFC\uFF0C\u8BF7\u9009\u62E9\u4E00\u79CD\u8FDE\u63A5\u65B9\u5F0F\u4EE5\u5F00\u59CB\u8054\u7F51\uFF0C\u6216\u4F7F\u7528\u5DE6\u4FA7\u83DC\u5355\u8FDB\u884C\u8054\u7F51\u914D\u7F6E "),u("br"),D(" \u6CA1\u627E\u5230\u60F3\u8981\u7684\u914D\u7F6E\uFF1F\u8BF7\u4F7F\u7528 "),u("a",{href:"/cgi-bin/luci/admin/network/network",target:"_blank"},"\u9AD8\u7EA7\u6A21\u5F0F")],-1)),L=p(()=>u("div",{class:"label-name"},[u("span",null,"\u8054\u7F51\u65B9\u5F0F")],-1)),O={class:"label-value"},Q={class:"label-flex"},R={style:{display:"none"}},z={key:0,class:"ul-container"},H=p(()=>u("div",{class:"ul-container_title"},[u("span",null,"\u62E8\u53F7\u8054\u7F51\u914D\u7F6E")],-1)),J=p(()=>u("div",{class:"label-value"},null,-1)),K=p(()=>u("div",{class:"label-name"},[u("span",null,"\u8D26\u53F7")],-1)),W={class:"label-value"},X=p(()=>u("div",{class:"label-name"},[u("span",null,"\u5BC6\u7801")],-1)),Y={class:"label-value"},Z={key:1,class:"label-btns"},$=["disabled"],uu={key:2,class:"label-msg"},eu=T({__name:"index",setup(c){return r(this,null,function*(){let m,i;const E=I(),t=f(""),n=f(!1),s=f(""),o=k({account:"",password:""}),l=k({wanProto:"dhcp",dnsProto:"auto",staticIp:"",subnetMask:"",manualDnsIp:[],gateway:""}),v=()=>r(this,null,function*(){n.value=!0;try{const d=yield B.Guide.Pppoe.GET(),{result:e}=d.data;e&&(o.account=e.account||"",o.password=e.password||"")}catch(d){s.value=d}t.value=yield E.getAsyncNetworkProto,n.value=!1});[m,i]=M(()=>v()),yield m,i();const g=()=>r(this,null,function*(){switch(t.value){case"pppoe":yield P();break;case"dhcp":yield S();break;default:s.value="\u627E\u4E0D\u5230\u4F60\u8981\u7684\u914D\u7F6E";break}}),P=()=>r(this,null,function*(){if(o.account==""){s.value="\u8D26\u53F7\u4E0D\u80FD\u4E3A\u7A7A";return}if(o.password==""){s.value="\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A";return}n.value=!0;const d=A.Loading("\u4FDD\u5B58\u4E2D...");try{const e=yield B.Guide.Pppoe.POST({account:o.account,password:o.password});if(e.data){const{error:a,success:F}=e.data;a&&(s.value=a),(F==null||F==0)&&(s.value="\u914D\u7F6E\u5B8C\u6210")}}catch(e){s.value=e}finally{}n.value=!1,d.Close()}),S=()=>r(this,null,function*(){const d={wanProto:l.wanProto,dnsProto:l.dnsProto};n.value=!0;const e=A.Loading("\u4FDD\u5B58\u4E2D...");try{const a=yield B.Guide.ClientModel.POST(d);if(a!=null&&a.data){const{success:F,error:C}=a==null?void 0:a.data;C&&(s.value=C),(F==null||F==0)&&(s.value="\u914D\u7F6E\u5B8C\u6210")}}catch(a){s.value=a}n.value=!1,e.Close()});return(d,e)=>(w(),b("form",{class:"form-container",onSubmit:q(g,["prevent"])},[j,L,u("div",O,[u("div",Q,[u("label",null,[_(u("input",{type:"radio",value:"pppoe","onUpdate:modelValue":e[0]||(e[0]=a=>t.value=a)},null,512),[[h,t.value]]),D("\u8D26\u53F7\u5BC6\u7801")]),u("label",null,[_(u("input",{type:"radio",value:"dhcp","onUpdate:modelValue":e[1]||(e[1]=a=>t.value=a)},null,512),[[h,t.value]]),D("\u81EA\u52A8\u8054\u7F51")]),u("label",R,[_(u("input",{type:"radio",value:"static",hidden:"true","onUpdate:modelValue":e[2]||(e[2]=a=>t.value=a)},null,512),[[h,t.value]]),D("\u7F51\u5173\u8054\u7F51")])])]),t.value=="pppoe"?(w(),b("ul",z,[H,J,K,u("div",W,[_(u("input",{type:"text",placeholder:"\u5BBD\u5E26\u8D26\u53F7","onUpdate:modelValue":e[3]||(e[3]=a=>o.account=a),required:""},null,512),[[x,o.account,void 0,{trim:!0}]])]),X,u("div",Y,[_(u("input",{type:"password",placeholder:"\u5BBD\u5E26\u5BC6\u7801","onUpdate:modelValue":e[4]||(e[4]=a=>o.password=a),required:""},null,512),[[x,o.password,void 0,{trim:!0}]])])])):y("v-if",!0),t.value=="pppoe"||t.value=="dhcp"?(w(),b("div",Z,[u("button",{class:"sumbit",disabled:n.value},"\u4FDD\u5B58",8,$)])):y("v-if",!0),s.value?(w(),b("div",uu,[u("span",null,U(s.value),1)])):y("v-if",!0)],32))})}});var su=V(eu,[["__scopeId","data-v-ed7c3c9c"]]);export{su as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
var c=(d,b,r)=>new Promise((E,t)=>{var n=l=>{try{o(r.next(l))}catch(v){t(v)}},s=l=>{try{o(r.throw(l))}catch(v){t(v)}},o=l=>l.done?E(l.value):Promise.resolve(l.value).then(n,s);o((r=r.apply(d,b)).next())});import{_ as V,d as T,D as I,r as f,x as A,P as M,o as m,c as w,f as u,w as _,Q as h,s as D,j as k,h as y,t as U,g as q,p as G,q as N,i as B,T as x}from"./index.js";const p=d=>(G("data-v-0b184c1c"),d=d(),N(),d),j=p(()=>u("p",null,[D(" \u6B22\u8FCE\u4F7F\u7528\u5FEB\u901F\u7F51\u7EDC\u914D\u7F6E\u5411\u5BFC\uFF0C\u8BF7\u9009\u62E9\u4E00\u79CD\u8FDE\u63A5\u65B9\u5F0F\u4EE5\u5F00\u59CB\u8054\u7F51\uFF0C\u6216\u4F7F\u7528\u5DE6\u4FA7\u83DC\u5355\u8FDB\u884C\u8054\u7F51\u914D\u7F6E "),u("br"),D(" \u6CA1\u627E\u5230\u60F3\u8981\u7684\u914D\u7F6E\uFF1F\u8BF7\u4F7F\u7528 "),u("a",{href:"/cgi-bin/luci/admin/network/network",target:"_blank"},"\u9AD8\u7EA7\u6A21\u5F0F")],-1)),L=p(()=>u("div",{class:"label-name"},[u("span",null,"\u8054\u7F51\u65B9\u5F0F")],-1)),O={class:"label-value"},Q={class:"label-flex"},R={style:{display:"none"}},z={key:0,class:"ul-container"},H=p(()=>u("div",{class:"ul-container_title"},[u("span",null,"\u62E8\u53F7\u8054\u7F51\u914D\u7F6E")],-1)),J=p(()=>u("div",{class:"label-value"},null,-1)),K=p(()=>u("div",{class:"label-name"},[u("span",null,"\u8D26\u53F7")],-1)),W={class:"label-value"},X=p(()=>u("div",{class:"label-name"},[u("span",null,"\u5BC6\u7801")],-1)),Y={class:"label-value"},Z={key:1,class:"label-btns"},$=["disabled"],uu={key:2,class:"label-msg"},eu=T({__name:"index",setup(d){return c(this,null,function*(){let b,r;const E=I(),t=f(""),n=f(!1),s=f(""),o=A({account:"",password:""}),l=A({wanProto:"dhcp",dnsProto:"auto",staticIp:"",subnetMask:"",manualDnsIp:[],gateway:""}),v=()=>c(this,null,function*(){n.value=!0;try{const i=yield B.Guide.Pppoe.GET(),{result:e}=i.data;e&&(o.account=e.account||"",o.password=e.password||"")}catch(i){s.value=i}t.value=yield E.getAsyncNetworkProto,n.value=!1});[b,r]=M(()=>v()),yield b,r();const g=()=>c(this,null,function*(){switch(t.value){case"pppoe":yield P();break;case"dhcp":yield S();break;default:s.value="\u627E\u4E0D\u5230\u4F60\u8981\u7684\u914D\u7F6E";break}}),P=()=>c(this,null,function*(){if(o.account==""){s.value="\u8D26\u53F7\u4E0D\u80FD\u4E3A\u7A7A";return}if(o.password==""){s.value="\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A";return}n.value=!0;const i=x.Loading("\u4FDD\u5B58\u4E2D...");try{const e=yield B.Guide.Pppoe.POST({account:o.account,password:o.password});if(e.data){const{error:a,success:F}=e.data;a&&(s.value=a),(F==null||F==0)&&(s.value="\u914D\u7F6E\u5B8C\u6210")}}catch(e){s.value=e}finally{}n.value=!1,i.Close()}),S=()=>c(this,null,function*(){const i={wanProto:l.wanProto,dnsProto:l.dnsProto};n.value=!0;const e=x.Loading("\u4FDD\u5B58\u4E2D...");try{const a=yield B.Guide.ClientModel.POST(i);if(a!=null&&a.data){const{success:F,error:C}=a==null?void 0:a.data;C&&(s.value=C),(F==null||F==0)&&(s.value="\u914D\u7F6E\u5B8C\u6210")}}catch(a){s.value=a}n.value=!1,e.Close()});return(i,e)=>(m(),w("form",{class:"form-container",onSubmit:q(g,["prevent"])},[j,L,u("div",O,[u("div",Q,[u("label",null,[_(u("input",{type:"radio",value:"pppoe","onUpdate:modelValue":e[0]||(e[0]=a=>t.value=a)},null,512),[[h,t.value]]),D("\u8D26\u53F7\u5BC6\u7801")]),u("label",null,[_(u("input",{type:"radio",value:"dhcp","onUpdate:modelValue":e[1]||(e[1]=a=>t.value=a)},null,512),[[h,t.value]]),D("\u81EA\u52A8\u8054\u7F51")]),u("label",R,[_(u("input",{type:"radio",value:"static",hidden:"true","onUpdate:modelValue":e[2]||(e[2]=a=>t.value=a)},null,512),[[h,t.value]]),D("\u7F51\u5173\u8054\u7F51")])])]),t.value=="pppoe"?(m(),w("ul",z,[H,J,K,u("div",W,[_(u("input",{type:"text",placeholder:"\u5BBD\u5E26\u8D26\u53F7","onUpdate:modelValue":e[3]||(e[3]=a=>o.account=a),required:""},null,512),[[k,o.account,void 0,{trim:!0}]])]),X,u("div",Y,[_(u("input",{type:"password",placeholder:"\u5BBD\u5E26\u5BC6\u7801","onUpdate:modelValue":e[4]||(e[4]=a=>o.password=a),required:""},null,512),[[k,o.password,void 0,{trim:!0}]])])])):y("v-if",!0),t.value=="pppoe"||t.value=="dhcp"?(m(),w("div",Z,[u("button",{class:"sumbit",disabled:n.value},"\u4FDD\u5B58",8,$)])):y("v-if",!0),s.value?(m(),w("div",uu,[u("span",null,U(s.value),1)])):y("v-if",!0)],32))})}});var su=V(eu,[["__scopeId","data-v-0b184c1c"]]);export{su as default};
@@ -0,0 +1 @@
import{_ as r,d as a,E as e,o as u,A as p,B as s,G as i}from"./index.js";const c=a({__name:"index",setup(_){const t=[{name:"index",title:"\u7F51\u7EDC\u914D\u7F6E",path:"/router/network"},{name:"pppoe",title:"\u62E8\u53F7\u8FDE\u63A5",path:"/router/network/pppoe"},{name:"dhcp",title:"DHCP\u8FDE\u63A5",path:"/router/network/dhcp"},{name:"gateway",title:"\u65C1\u8DEF\u7531\u8FDE\u63A5",path:"/router/network/gateway"},{name:"intranet",title:"\u5185\u7F51\u914D\u7F6E",path:"/router/network/intranet"},{name:"dns",title:"DNS\u914D\u7F6E",path:"/router/network/dns"}];return(l,d)=>{const o=e("router-loading"),n=e("layout-page");return u(),p(n,{menus:t},{default:s(()=>[i(o)]),_:1})}}});var w=r(c,[]);export{w as default};
@@ -0,0 +1,48 @@
import{_ as r,d as u,D as i,a as d,r as h,o as t,c as e,f as n,h as s,F as p,e as _,t as a}from"./index.js";const v={class:"ul-container"},m={class:"ul-container_body"},b={class:"page-table"},f=n("colgroup",null,[n("col"),n("col"),n("col"),n("col")],-1),g=n("thead",null,[n("tr",null,[n("th",null,"Mac"),n("th",null,"IPv4"),n("th",null,"IPv6"),n("th")])],-1),k=n("th",null,null,-1),x=n("th",null,null,-1),B=u({__name:"index",setup(y){const o=i(),c=d(()=>o.device.devices);return h(),(P,C)=>(t(),e("main",null,[n("ul",v,[s(` <div class="ul-container_title">
<span>DHCP\u8BBE\u5907</span>
</div> `),n("div",m,[n("table",b,[f,g,n("tbody",null,[(t(!0),e(p,null,_(c.value,l=>(t(),e("tr",null,[n("th",null,a(l.mac),1),n("th",null,a(l.ipv4addr),1),k,x]))),256))])])])]),s(` <ul class="ul-container">
<div class="ul-container_title">
<span>\u5C40\u57DF\u7F51\u8BBE\u5907</span>
</div>
<div class="ul-container_body">
<table class="page-table">
<colgroup>
<col>
<col>
<col>
<col>
</colgroup>
<thead>
<tr>
<th>Mac</th>
<th>IPv4</th>
<th>IPv6</th>
<th></th>
</tr>
</thead>
<tbody>
<template v-for="(k, mac) in hosts">
<tr>
<th>
{{ mac }}
</th>
<th>
<span v-for="item in k.ipaddrs">
{{ item }}
<br>
</span>
</th>
<th>
<span v-for="item in k.ip6addrs">
{{ item }}
<br>
</span>
</th>
<th></th>
</tr>
</template>
</tbody>
</table>
</div>
</ul> `)]))}});var F=r(B,[]);export{F as default};
@@ -0,0 +1 @@
var d=(_,c,l)=>new Promise((t,e)=>{var n=o=>{try{i(l.next(o))}catch(u){e(u)}},p=o=>{try{i(l.throw(o))}catch(u){e(u)}},i=o=>o.done?t(o.value):Promise.resolve(o.value).then(n,p);i((l=l.apply(_,c)).next())});import{_ as E,d as h,r as v,x as F,P as y,o as m,c as D,f as a,w,j as b,t as x,h as A,g as C,i as B,T as g}from"./index.js";const k=a("div",{class:"label-info"}," \u8BF7\u786E\u4FDD\u60A8\u5DF2\u5C06\u8DEF\u7531 WAN \u53E3\u8FDE\u63A5\u5230\u5149\u732B ",-1),T=a("div",{class:"label-name"},[a("span",null,"\u8D26\u53F7")],-1),P={class:"label-value"},S=a("div",{class:"label-name"},[a("span",null,"\u5BC6\u7801")],-1),V={class:"label-value"},q={class:"label-btns"},G=["disabled"],N={key:0,class:"label-msg"},j=h({__name:"index",setup(_){return d(this,null,function*(){let c,l;const t=v(""),e=F({account:"",password:""}),n=v(!1),p=v(!1),i=()=>d(this,null,function*(){n.value=!0;try{const u=yield B.Guide.Pppoe.GET(),{result:s}=u.data;s&&(e.account=s.account||"",e.password=s.password||"")}catch(u){t.value=u}finally{}n.value=!1,p.value=!0});[c,l]=y(()=>i()),yield c,l();const o=()=>d(this,null,function*(){if(e.account==""){t.value="\u8D26\u53F7\u4E0D\u80FD\u4E3A\u7A7A";return}if(e.password==""){t.value="\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A";return}n.value=!0;const u=g.Loading("\u4FDD\u5B58\u4E2D...");try{const s=yield B.Guide.Pppoe.POST({account:e.account,password:e.password});if(s.data){const{error:r,success:f}=s.data;r&&(t.value=r),(f==null||f==0)&&(t.value="\u914D\u7F6E\u5B8C\u6210")}}catch(s){t.value=s}finally{}n.value=!1,u.Close()});return(u,s)=>(m(),D("form",{class:"form-container",onSubmit:C(o,["prevent"])},[k,T,a("div",P,[w(a("input",{type:"text",placeholder:"\u5BBD\u5E26\u8D26\u53F7","onUpdate:modelValue":s[0]||(s[0]=r=>e.account=r),required:""},null,512),[[b,e.account,void 0,{trim:!0}]])]),S,a("div",V,[w(a("input",{type:"password",placeholder:"\u5BBD\u5E26\u5BC6\u7801","onUpdate:modelValue":s[1]||(s[1]=r=>e.password=r),required:""},null,512),[[b,e.password,void 0,{trim:!0}]])]),a("div",q,[a("button",{class:"sumbit",disabled:n.value},"\u4FDD\u5B58",8,G)]),t.value?(m(),D("div",N,[a("span",null,x(t.value),1)])):A("v-if",!0)],32))})}});var L=E(j,[]);export{L as default};
@@ -0,0 +1 @@
import{_ as n,d as p,$ as l,a as o,E as a,o as i,A as c,B as d,a0 as m,G as _}from"./index.js";const E=p({__name:"index",setup(b){const e=l(),t=o(()=>m(e.localApps||[],e.remoteApps||[],e.appsExpand,{tab:"all"})),u=o(()=>[{name:"istore-store",title:"\u5E94\u7528\u5546\u5E97",path:"/router/istore"},{name:"istore-installed",title:`\u5DF2\u5B89\u88C5 (${t.value.counts.installed})`,path:"/router/istore/installed"},{name:"istore-upgradable",title:`\u53EF\u5347\u7EA7 (${t.value.counts.upgradable})`,path:"/router/istore/upgradable"},{name:"istore-upload",title:"\u79BB\u7EBF\u5B89\u88C5",path:"/router/istore/upload"},{name:"istore-backup",title:"\u5907\u4EFD\u6062\u590D",path:"/router/istore/backup"},{name:"istore-source",title:"\u8F6F\u4EF6\u6E90",path:"/router/istore/source"}]);return(h,x)=>{const r=a("router-loading"),s=a("layout-page");return i(),c(s,{menus:u.value},{default:d(()=>[_(r)]),_:1},8,["menus"])}}});var g=n(E,[]);export{g as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as o,E as r,o as n,c as t,G as s}from"./index.js";const a={},c={id:"page",class:"page-container"};function _(i,p){const e=r("router-loading");return n(),t("div",c,[s(e)])}var l=o(a,[["render",_]]);export{l as default};
@@ -0,0 +1 @@
var h=Object.defineProperty;var F=Object.getOwnPropertySymbols;var C=Object.prototype.hasOwnProperty,x=Object.prototype.propertyIsEnumerable;var v=(l,s,u)=>s in l?h(l,s,{enumerable:!0,configurable:!0,writable:!0,value:u}):l[s]=u,b=(l,s)=>{for(var u in s||(s={}))C.call(s,u)&&v(l,u,s[u]);if(F)for(var u of F(s))x.call(s,u)&&v(l,u,s[u]);return l};var E=(l,s,u)=>new Promise((c,d)=>{var r=n=>{try{a(u.next(n))}catch(o){d(o)}},t=n=>{try{a(u.throw(n))}catch(o){d(o)}},a=n=>n.done?c(n.value):Promise.resolve(n.value).then(r,t);a((u=u.apply(l,s)).next())});import{_ as y,d as A,r as D,x as w,o as m,c as _,f as e,w as i,j as p,Q as B,s as f,t as g,h as V,g as k,R as I,T as M,i as N}from"./index.js";const P=I('<div class="label-info"> \u65C1\u8DEF\u7531\u6A21\u5F0F\uFF0C\u4E5F\u53EB\u5355\u81C2\u8DEF\u7531\u6A21\u5F0F\u3002\u60A8\u53EF\u4EE5\u7528\u4E0A\u4E00\u7EA7\u8DEF\u7531\u62E8\u53F7\uFF0C\u7136\u540E\u7531\u8BE5\u8BBE\u5907\u6765\u5B9E\u73B0\u4E00\u4E9B\u9AD8\u7EA7\u529F\u80FD\u3002 </div><div class="label-name"><span>LAN \u63A5\u53E3\u914D\u7F6E\u65B9\u5F0F</span></div><div class="label-value"><select disabled><option> \u65C1\u8DEF\u7531\u6A21\u5F0F\u4EC5\u652F\u6301\u9759\u6001IP\u5730\u5740 </option></select></div><div class="label-name"><span>IP \u5730\u5740\uFF08\u8BF7\u548C\u4E0A\u4E00\u6B65\u8BB0\u5F55\u7684\u4E3B\u8DEF\u7531\u5730\u5740\u5728\u540C\u4E00\u7F51\u6BB5\uFF09</span></div>',4),S={class:"label-value"},U=e("div",{class:"label-name"},[e("span",null,"\u5B50\u7F51\u63A9\u7801")],-1),q={class:"label-value"},L=e("div",{class:"label-name"},[e("span",null,"\u7F51\u5173\u5730\u5740")],-1),T={class:"label-value"},H=e("div",{class:"label-name"},[e("span",null,"DNS\u670D\u52A1\u5668")],-1),R={class:"label-value"},j=e("div",{class:"label-name"},[e("span",null,"\u662F\u5426\u63D0\u4F9B DHCP\uFF08\u5982\u679C\u662F\u63D0\u4F9B DHCP\uFF0C\u5219\u9700\u8981\u5173\u95ED\u4E3B\u8DEF\u7531 DHCP\uFF09")],-1),G={class:"label-value"},O={class:"label-flex"},Q={class:"label-btns"},z=["disabled"],J={key:0,class:"label-msg"},K=A({__name:"index",setup(l){const s=D(""),u=w({subnetMask:"255.255.255.0",staticDnsIp:"223.5.5.5",staticLanIp:"",gateway:"",enableDhcp:!0}),c=D(!1),d=()=>E(this,null,function*(){const r=b({},u),t=M.Loading("\u914D\u7F6E\u4E2D...");try{const a=yield N.Guide.GatewayRouter.POST(r);if(a!=null&&a.data){const{success:n,error:o}=a==null?void 0:a.data;o&&(s.value=o),(n==null||n==0)&&(s.value="\u914D\u7F6E\u6210\u529F")}}catch(a){s.value=a}t.Close()});return(r,t)=>(m(),_("form",{class:"form-container",onSubmit:k(d,["prevent"])},[P,e("div",S,[i(e("input",{type:"text",placeholder:"ip\u5730\u5740","onUpdate:modelValue":t[0]||(t[0]=a=>u.staticLanIp=a),required:""},null,512),[[p,u.staticLanIp,void 0,{trim:!0}]])]),U,e("div",q,[i(e("input",{type:"text",placeholder:"\u5B50\u7F51\u63A9\u7801\u5730\u5740","onUpdate:modelValue":t[1]||(t[1]=a=>u.subnetMask=a),required:""},null,512),[[p,u.subnetMask,void 0,{trim:!0}]])]),L,e("div",T,[i(e("input",{type:"text",placeholder:"\u7F51\u5173\u5730\u5740","onUpdate:modelValue":t[2]||(t[2]=a=>u.gateway=a),required:""},null,512),[[p,u.gateway,void 0,{trim:!0}]])]),H,e("div",R,[i(e("input",{type:"text",placeholder:"dns\u670D\u52A1\u5668\u5730\u5740","onUpdate:modelValue":t[3]||(t[3]=a=>u.staticDnsIp=a),required:""},null,512),[[p,u.staticDnsIp,void 0,{trim:!0}]])]),j,e("div",G,[e("div",O,[e("label",null,[i(e("input",{type:"radio",value:!1,"onUpdate:modelValue":t[4]||(t[4]=a=>u.enableDhcp=a)},null,512),[[B,u.enableDhcp]]),f("\u5173\u95ED")]),e("label",null,[i(e("input",{type:"radio",value:!0,"onUpdate:modelValue":t[5]||(t[5]=a=>u.enableDhcp=a)},null,512),[[B,u.enableDhcp]]),f("\u542F\u7528")])])]),e("div",Q,[e("button",{class:"sumbit",disabled:c.value},"\u4FDD\u5B58",8,z)]),s.value?(m(),_("div",J,[e("span",null,g(s.value),1)])):V("v-if",!0)],32))}});var Y=y(K,[]);export{Y as default};
@@ -0,0 +1 @@
var p=(o,u,s)=>new Promise((h,c)=>{var f=r=>{try{t(s.next(r))}catch(l){c(l)}},x=r=>{try{t(s.throw(r))}catch(l){c(l)}},t=r=>r.done?h(r.value):Promise.resolve(r.value).then(f,x);t((s=s.apply(o,u)).next())});import{_ as w,d as v,x as B,P as m,M as g,o as i,c as a,f as e,F as k,e as y,s as _,t as n,p as A,q as C,i as M}from"./index.js";const d=o=>(A("data-v-2e3223f5"),o=o(),C(),o),D={class:"page-table"},F=d(()=>e("colgroup",null,[e("col"),e("col"),e("col"),e("col"),e("col"),e("col")],-1)),E=d(()=>e("thead",null,[e("tr",null,[e("th",null," \u72B6\u6001 "),e("th",null," \u63A5\u53E3 "),e("th",null," \u7C7B\u578B "),e("th",null," mac "),e("th",null," \u63A5\u6536 "),e("th",null," \u53D1\u9001 ")])],-1)),b={class:"flex-icon"},N=d(()=>e("svg",{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:v":"https://vecta.io/nano",width:"48",height:"38",viewBox:"0 0 12.7 10.05"},[e("defs",null,[e("filter",{id:"A","color-interpolation-filters":"sRGB"},[e("feColorMatrix",{result:"A",values:"2 -0.5 -0.5 0 0 -0.5 2 -0.5 0 0 -0.5 -0.5 2 0 0 0 0 0 1 0 "}),e("feColorMatrix",{values:"0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"}),e("feColorMatrix",{in:"A",values:"2 -0.5 -0.5 0 0 -0.5 2 -0.5 0 0 -0.5 -0.5 2 0 0 0 0 0 1 0 "})]),e("path",{id:"B",d:"M80.56 75.75h3.91v22.79h-3.91z"})]),e("g",{transform:"translate(0 -286.95)"},[e("rect",{x:".21",y:"287.25",width:"12.33",height:"9.5",ry:".57",fill:"#e6e6e6",stroke:"#e6e6e6","stroke-linejoin":"round","stroke-width":".37","paint-order":"normal"}),e("path",{transform:"matrix(.105 0 0 .0989 -6.0834 280.6)",d:"M73.96 75.66h89.41c2.31 0 4.17 1.86 4.17 4.17v52.65h-21.74v9.41h-8.69v12.59h-36.87v-12.59h-8.69v-9.41H69.79V79.83c0-2.31 1.86-4.17 4.17-4.17z",fill:"#999",filter:"url(#A)",stroke:"#999","stroke-width":"2.5"}),e("g",{transform:"matrix(.1048 0 0 .1048 -6.0999 280.7)",fill:"#fff",filter:"url(#A)",stroke:"#fff"},[e("use",{"xlink:href":"#B"}),e("use",{"xlink:href":"#B",x:"73.04"}),e("use",{"xlink:href":"#B",x:"52.17"}),e("use",{"xlink:href":"#B",x:"41.74"}),e("use",{"xlink:href":"#B",x:"31.3"}),e("use",{"xlink:href":"#B",x:"20.87"}),e("use",{"xlink:href":"#B",x:"10.43"}),e("use",{"xlink:href":"#B",x:"62.61"})]),e("rect",{x:"1.24",y:"294.55",width:"1.6",height:"1.38",ry:".11",fill:"#ccc",stroke:"#ccc","stroke-width":".22","paint-order":"normal"})])],-1)),S=d(()=>e("svg",{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",width:"48",height:"38",viewBox:"0 0 12.7 10.05","xmlns:v":"https://vecta.io/nano"},[e("defs",null,[e("filter",{id:"A","color-interpolation-filters":"sRGB"},[e("feColorMatrix",{result:"A",values:"2 -0.5 -0.5 0 0 -0.5 2 -0.5 0 0 -0.5 -0.5 2 0 0 0 0 0 1 0 "}),e("feColorMatrix",{values:"0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"}),e("feColorMatrix",{in:"A",values:"2 -0.5 -0.5 0 0 -0.5 2 -0.5 0 0 -0.5 -0.5 2 0 0 0 0 0 1 0 "})]),e("path",{id:"B",d:"M80.56 75.75h3.91v22.79h-3.91z"})]),e("g",{transform:"translate(-.03 -287.07)"},[e("rect",{x:".24",y:"287.36",width:"12.33",height:"9.5",ry:".57",fill:"#e6e6e6",stroke:"#e6e6e6","stroke-linejoin":"round","stroke-width":".37","paint-order":"normal"}),e("path",{transform:"matrix(.105 0 0 .0989 -6.0532 280.72)",d:"M73.96 75.66h89.41c2.31 0 4.17 1.86 4.17 4.17v52.65h-21.74v9.41h-8.69v12.59h-36.87v-12.59h-8.69v-9.41H69.79V79.83c0-2.31 1.86-4.17 4.17-4.17z",fill:"#4d4d4d",filter:"url(#A)",stroke:"#4d4d4d","stroke-width":"2.5"}),e("g",{transform:"matrix(.1048 0 0 .1048 -6.0697 280.81)",fill:"#fff",filter:"url(#A)",stroke:"#fff"},[e("use",{"xlink:href":"#B"}),e("use",{"xlink:href":"#B",x:"73.04"}),e("use",{"xlink:href":"#B",x:"52.17"}),e("use",{"xlink:href":"#B",x:"41.74"}),e("use",{"xlink:href":"#B",x:"31.3"}),e("use",{"xlink:href":"#B",x:"20.87"}),e("use",{"xlink:href":"#B",x:"10.43"}),e("use",{"xlink:href":"#B",x:"62.61"})]),e("rect",{x:"1.27",y:"294.67",width:"1.6",height:"1.38",ry:".11",fill:"#55d400",stroke:"#55d400","stroke-width":".22","paint-order":"normal"})])],-1)),j=v({__name:"index",setup(o){return p(this,null,function*(){let u,s;const h=B({ports:[]}),c=t=>{switch(t){case"full":return"\u5168\u53CC\u5DE5";case"half":return"\u534A\u53CC\u5DE5"}};let f=!1;const x=()=>p(this,null,function*(){try{const t=yield M.Network.PortList.GET();if(t!=null&&t.data){const{result:r}=t==null?void 0:t.data;r&&(h.ports=r.ports||[])}}catch(t){console.log(t)}setTimeout(()=>{f||x()},1e4)});return[u,s]=m(()=>x()),yield u,s(),g(()=>{f=!0}),(t,r)=>(i(),a("table",D,[F,E,e("tbody",null,[(i(!0),a(k,null,y(h.ports,l=>(i(),a("tr",null,[e("th",b,[l.linkState=="DOWN"?(i(),a(k,{key:0},[N,_("\u672A\u8FDE\u63A5 ")],64)):(i(),a(k,{key:1},[S,_(" \u5DF2\u8FDE\u63A5 ")],64))]),e("th",null,n(l.name)+"\uFF08"+n(l.interfaceNames.join(",").toLocaleUpperCase())+"\uFF09 ",1),e("th",null,n(c(l.duplex)),1),e("th",null,n(l.macAddress||"--"),1),e("th",null,n(l.rx_packets||"--"),1),e("th",null,n(l.tx_packets||"--"),1)]))),256))])]))})}});var L=w(j,[["__scopeId","data-v-2e3223f5"]]);export{L as default};
@@ -0,0 +1 @@
{"en":{"download":"Download","monitor":"Monitor","multimedia":"Multimedia","nas":"NAS","net":"Net","networking":"Networking","service":"Service","system":"System","tool":"Tool"}}
@@ -0,0 +1 @@
{"zh-CN":{"download":"下载","monitor":"监控","multimedia":"多媒体","nas":"NAS","net":"网络","networking":"组网","service":"服务","system":"系统","tool":"工具"}}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,152 @@
module("luci.controller.istorerouter", package.seeall)
function index()
if luci.sys.call("pgrep quickstart >/dev/null") == 0 then
entry({"admin", "istorerouter"}, call("istorerouter_template")).leaf = true
if nixio.fs.access("/usr/lib/lua/luci/view/istorerouter/main_dev.htm") then
entry({"admin", "istorerouter_dev"}, call("istorerouter_template_dev")).leaf = true
end
else
entry({"admin", "istorerouter"}, call("redirect_fallback")).leaf = true
end
entry({"admin", "istorerouter_api","status"}, call("istorerouter_api_status"))
entry({"admin", "istorerouter_api","update"}, call("istorerouter_api_update"))
entry({"admin", "istorerouter_api","upload-bg"}, call("istorerouter_api_uploadbg"))
end
local function user_id()
local jsonc = require "luci.jsonc"
local json_parse = jsonc.parse
local fs = require "nixio.fs"
local data = fs.readfile("/etc/.app_store.id")
local id
if data ~= nil then
id = json_parse(data)
end
if id == nil then
fs.unlink("/etc/.app_store.id")
id = {arch="",uid=""}
end
id.version = (fs.readfile("/etc/.app_store.version") or "?"):gsub("[\r\n]", "")
return id
end
function get_config_data()
local uci = require "luci.model.uci".cursor()
local model = uci:get_first("istorerouter", "istorerouter", "model")
local enabled = uci:get_first("istorerouter", "istorerouter", "enabled")
local data = {
model = model,
enabled = enabled,
}
return data
end
local function static_cache_tag()
local fs = require "nixio.fs"
local stat = fs.stat("/www/luci-static/istorerouter/index.js")
return stat and stat.mtime or os.time()
end
function get_params()
local config = get_config_data()
local data = {
prefix=luci.dispatcher.build_url(unpack({"admin", "istorerouter"})),
id=user_id(),
model = config.model,
cache_tag = static_cache_tag(),
}
return data
end
function get_dev_params()
local config = get_config_data()
local data = {
prefix=luci.dispatcher.build_url(unpack({"admin", "istorerouter_dev"})),
id=user_id(),
model = config.model,
cache_tag = static_cache_tag(),
}
return data
end
function redirect_fallback()
luci.http.redirect(luci.dispatcher.build_url("admin","status"))
end
function istorerouter_template()
luci.template.render("istorerouter/main", get_params())
end
function istorerouter_template_dev()
luci.template.render("istorerouter/main_dev", get_dev_params())
end
function istorerouter_api_status()
local result = get_config_data()
luci.http.prepare_content("application/json")
luci.http.write_json({
success = 0,
result = result,
})
end
function istorerouter_api_update()
local http = require "luci.http"
local jsonc = require "luci.jsonc"
local uci = require "luci.model.uci".cursor()
local content = http.content()
local json_parse = jsonc.parse
local req = json_parse(content)
local data = {
}
if req == nil or next(req) == nil then
data.error = "invalid request"
else
uci:set("istorerouter","@istorerouter[0]","model", req.model)
uci:commit("istorerouter")
data.success = 0
end
http.prepare_content("application/json")
http.write_json(data)
end
function istorerouter_api_uploadbg()
local uci = require "uci"
local x = uci.cursor()
local fd
local path
local finished = false
local tmpdir = "/www/luci-static/istorerouter/image"
local filename = ""
luci.http.setfilehandler(
function(meta, chunk, eof)
if not fd then
filename = meta.file
path = tmpdir .. "/bg.gif"
fd = io.open(path, "w")
end
if chunk then
fd:write(chunk)
end
if eof then
fd:close()
finished = true
end
end
)
luci.http.formvalue("file")
local result = {
filename = filename
}
local data = {
success = finished,
result = result
}
luci.http.prepare_content("application/json")
luci.http.write_json(data)
end
@@ -0,0 +1,4 @@
<%
local istorerouter = require "luci.controller.istorerouter"
istorerouter.istorerouter_template()
%>
@@ -0,0 +1,60 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0" /> -->
<!-- <meta name="viewport" content="width=1400, initial-scale=1.0" /> -->
<meta name="viewport" content="width=1100" />
<title><%=luci.sys.hostname()%></title>
</head>
<body>
<script src="<%=url('admin/translations', luci.i18n.context.lang)%><%# ?v=PKG_VERSION %>"></script>
<script src="<%=resource%>/cbi.js<%# ?v=PKG_VERSION %>"></script>
<script type="text/javascript" src="<%=resource%>/promis.min.js<%# ?v=PKG_VERSION %>"></script>
<script type="text/javascript" src="<%=resource%>/luci.js<%# ?v=PKG_VERSION %>"></script>
<%+tasks/embed%>
<script>
(function(){
var pathe_prefix = "<%=prefix%>"
window.istoreRouterVer = "<%# PKG_VERSION %>"
window.HostName = "<%=luci.sys.hostname()%>"
window.path_base = pathe_prefix
window.token = "<%=token%>"
window.model = "<%=model%>"
window.device_id = {
arch:"<%=id.arch%>",
uid:"<%=id.uid%>",
version:"<%=id.version%>"
}
})();
</script>
<%
local luci_main = type(luci.config) == "table" and type(luci.config.main) == "table" and luci.config.main or {}
-%>
<script type="text/javascript">
L = new LuCI(<%= luci.http.write_json({
token = token,
media = media,
resource = resource,
scriptname = luci.http.getenv("SCRIPT_NAME"),
pathinfo = luci.http.getenv("PATH_INFO"),
documentroot = luci.http.getenv("DOCUMENT_ROOT"),
requestpath = luci.dispatcher.context.requestpath,
dispatchpath = luci.dispatcher.context.path,
pollinterval = luci_main.pollinterval or 5,
ubuspath = luci_main.ubuspath or '/ubus/',
sessionid = luci.dispatcher.context.authsession,
nodespec = luci.dispatcher.context.dispatched,
apply_rollback = math.max(applyconf and applyconf.rollback or 90, 30),
apply_holdoff = math.max(applyconf and applyconf.holdoff or 4, 1),
apply_timeout = math.max(applyconf and applyconf.timeout or 5, 1),
apply_display = math.max(applyconf and applyconf.display or 1.5, 1),
rollback_token = rollback_token
}) %>);
</script>
<div id="app"></div>
<link rel="stylesheet" href="/luci-static/istorerouter/style.css?v=<%=cache_tag%>">
<script type="module" crossorigin src="/luci-static/istorerouter/index.js?v=<%=cache_tag%>"></script>
</body>
</html>
@@ -0,0 +1,63 @@
<%
local ver = require "luci.version"
-%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0" /> -->
<meta name="viewport" content="width=1100" />
<title></title>
</head>
<body>
<script src="<%=url('admin/translations', luci.i18n.context.lang)%><%# ?v=PKG_VERSION %>"></script>
<script src="<%=resource%>/cbi.js<%# ?v=PKG_VERSION %>"></script>
<script type="text/javascript" src="<%=resource%>/promis.min.js<%# ?v=PKG_VERSION %>"></script>
<script type="text/javascript" src="<%=resource%>/luci.js<%# ?v=PKG_VERSION %>"></script>
<%+tasks/embed%>
<script>
(function(){
var pathe_prefix = "<%=prefix%>"
window.istoreRouterVer = "<%# PKG_VERSION %>"
window.HostName = "<%=luci.sys.hostname()%>"
window.path_base = pathe_prefix
window.token = "<%=token%>"
window.model = "<%=model%>"
window.device_id = {
arch:"<%=id.arch%>",
uid:"<%=id.uid%>",
version:"<%=id.version%>"
}
})();
</script>
<%
local luci_main = type(luci.config) == "table" and type(luci.config.main) == "table" and luci.config.main or {}
-%>
<script type="text/javascript">
L = new LuCI(<%= luci.http.write_json({
token = token,
media = media,
resource = resource,
scriptname = luci.http.getenv("SCRIPT_NAME"),
pathinfo = luci.http.getenv("PATH_INFO"),
documentroot = luci.http.getenv("DOCUMENT_ROOT"),
requestpath = luci.dispatcher.context.requestpath,
dispatchpath = luci.dispatcher.context.path,
pollinterval = luci_main.pollinterval or 5,
ubuspath = luci_main.ubuspath or '/ubus/',
sessionid = luci.dispatcher.context.authsession,
nodespec = luci.dispatcher.context.dispatched,
apply_rollback = math.max(applyconf and applyconf.rollback or 90, 30),
apply_holdoff = math.max(applyconf and applyconf.holdoff or 4, 1),
apply_timeout = math.max(applyconf and applyconf.timeout or 5, 1),
apply_display = math.max(applyconf and applyconf.display or 1.5, 1),
rollback_token = rollback_token
}) %>);
</script>
<div id="app"></div>
<script type="module" src="http://localhost:3000/src/main.ts"></script>
</body>
</html>
@@ -0,0 +1,3 @@
config istorerouter
option 'enabled' '1'
option 'model' 'router'
@@ -0,0 +1,4 @@
#!/bin/sh
rm -f /tmp/luci-indexcache
exit 0
@@ -0,0 +1,9 @@
{
"admin/istorerouter": {
"order": 0,
"action": {
"type": "template",
"path": "istorerouter/index"
}
}
}
@@ -857,14 +857,16 @@ acl_node() {
unset _error_log_file
continue
fi
local run_new_dnsmasq=1
local DNSMASQ_TUN_DNS="127.0.0.1#${dns_listen_port}"
local DNSMASQ_DEFAULT_DNS="${AUTO_DNS}"
local DNSMASQ_LOCAL_DNS="${LOCAL_DNS:-${AUTO_DNS}}"
[ -n "${DIRECT_DNS_DNSMASQ_SERVER}" ] && DNSMASQ_LOCAL_DNS="${DIRECT_DNS_DNSMASQ_SERVER}"
if [ "${flag}" = "default" ]; then
set_cache_var "GLOBAL_SOCKS_server" "127.0.0.1:$socks_port"
set_cache_var "ACL_GLOBAL_node" "$node"
local RUN_NEW_DNSMASQ=$(config_n_get @global[0] dns_redirect 1)
local DNSMASQ_DEFAULT_DNS="${AUTO_DNS}"
local DNSMASQ_LOCAL_DNS="${LOCAL_DNS:-${AUTO_DNS}}"
local DNSMASQ_TUN_DNS="127.0.0.1#${dns_listen_port}"
if [ "${RUN_NEW_DNSMASQ}" == "0" ]; then
run_new_dnsmasq=$(config_n_get @global[0] dns_redirect 1)
if [ "${run_new_dnsmasq}" != "1" ]; then
#Rewrite the default DNS service configuration
#Modify the default dnsmasq service
lua $APP_PATH/helper_dnsmasq.lua stretch
@@ -882,21 +884,16 @@ acl_node() {
uci -q commit dhcp
lua $APP_PATH/helper_dnsmasq.lua logic_restart
else
#Run a copy dnsmasq instance, DNS hijack for that need proxy devices.
dnsmasq_port=$(get_new_port auto)
run_copy_dnsmasq flag="default" listen_port=${dnsmasq_port} local_dns="${DNSMASQ_LOCAL_DNS}" tun_dns="${DNSMASQ_TUN_DNS}" default_dns="${DNSMASQ_DEFAULT_DNS}"
#dhcp.leases to hosts
$APP_PATH/lease2hosts.sh > /dev/null 2>&1 &
log 2 "Dnsmasq[${dnsmasq_port}]:(127.0.0.1:${dns_listen_port})"
fi
else
fi
[ "${run_new_dnsmasq}" == "1" ] && {
#Run a copy dnsmasq instance, DNS hijack for that need proxy devices.
dnsmasq_port=$(get_new_port auto)
run_copy_dnsmasq flag="${flag}" listen_port=${dnsmasq_port} local_dns="${LOCAL_DNS:-${AUTO_DNS}}" tun_dns="127.0.0.1#${dns_listen_port}" default_dns="${AUTO_DNS}"
#dhcp.leases to hostsMore actions
run_copy_dnsmasq flag="${flag}" listen_port=${dnsmasq_port} local_dns="${DNSMASQ_LOCAL_DNS}" tun_dns="${DNSMASQ_TUN_DNS}" default_dns="${DNSMASQ_DEFAULT_DNS}"
#dhcp.leases to hosts
$APP_PATH/lease2hosts.sh > /dev/null 2>&1 &
log 2 "Dnsmasq[${dnsmasq_port}]:(127.0.0.1:${dns_listen_port})"
fi
}
rm -f ${TMP_ACL_PATH}/acl_node_${nid}
done
}
@@ -1030,6 +1027,7 @@ get_direct_dns() {
DIRECT_DNS_PROTO="${direct_dns_protocol}"
DIRECT_DNS_SERVER=$(echo ${result} | awk '{print $1}')
DIRECT_DNS_PORT=$(echo ${result} | awk '{print $2}')
[ "${DIRECT_DNS_PROTO}" = "udp" ] && DIRECT_DNS_DNSMASQ_SERVER="${DIRECT_DNS_SERVER}#${DIRECT_DNS_PORT}"
RETURN_DNS="${RETURN_DNS},${DIRECT_DNS_SERVER}#${DIRECT_DNS_PORT}#${DIRECT_DNS_PROTO}"
}
fi
@@ -140,6 +140,10 @@ function copy_instance(var)
end
end
tinsert(conf_lines, "port=" .. LISTEN_PORT)
--dhcp.leases to hostsMore actions
local hosts = api.CACHE_PATH .. "/dhcp-hosts"
sys.call("touch " .. hosts)
tinsert(conf_lines, "addn-hosts=" .. hosts)
if TMP_DNSMASQ_PATH then
sys.call("rm -rf " .. TMP_DNSMASQ_PATH .. "/*passwall2*")
end
@@ -159,7 +163,6 @@ function add_rule(var)
local FLAG = var["FLAG"]
local TMP_DNSMASQ_PATH = var["TMP_DNSMASQ_PATH"]
local DNSMASQ_CONF_FILE = var["DNSMASQ_CONF_FILE"]
local LISTEN_PORT = var["LISTEN_PORT"]
local DEFAULT_DNS = var["DEFAULT_DNS"]
local LOCAL_DNS = var["LOCAL_DNS"]
local TUN_DNS = var["TUN_DNS"]
@@ -317,20 +320,6 @@ function add_rule(var)
if DNSMASQ_CONF_FILE ~= "nil" then
local conf_lines = {}
if LISTEN_PORT then
--Copy dnsmasq instance
conf_lines = copy_instance({
["LISTEN_PORT"] = LISTEN_PORT,
["TMP_DNSMASQ_PATH"] = TMP_DNSMASQ_PATH,
["return"] = "1"
})
--dhcp.leases to hostsMore actions
local hosts = api.CACHE_PATH .. "/dhcp-hosts"
sys.call("touch " .. hosts)
tinsert(conf_lines, "addn-hosts=" .. hosts)
else
--Modify the default dnsmasq service
end
tinsert(conf_lines, string.format("conf-dir=%s", TMP_DNSMASQ_PATH))
if dnsmasq_default_dns then
for s in string.gmatch(dnsmasq_default_dns, '[^' .. "," .. ']+') do
+1 -1
View File
@@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI shared OpenWrt auth bridge for LinkEase apps
LUCI_PKGARCH:=all
PKG_VERSION:=1.0.0
PKG_VERSION:=1.0.1
PKG_RELEASE:=1
include $(TOPDIR)/feeds/luci/luci.mk
@@ -40,6 +40,50 @@ local function authority_host(authority)
return authority:match("^([^:]+)") or authority
end
local function valid_authority(authority)
return authority and authority ~= "" and authority:match("^[A-Za-z0-9%._%-%[%]:]+$") ~= nil
end
local function request_authority()
local http = require "luci.http"
local forwarded_host = http.getenv("HTTP_X_FORWARDED_HOST") or ""
local request_host = http.getenv("HTTP_HOST") or ""
if valid_authority(forwarded_host) then
return forwarded_host
end
if valid_authority(request_host) then
return request_host
end
return ""
end
local function request_scheme()
local http = require "luci.http"
local forwarded_proto = http.getenv("HTTP_X_FORWARDED_PROTO") or ""
if forwarded_proto == "https" then
return "https"
end
if http.getenv("HTTPS") == "on" then
return "https"
end
return "http"
end
local function absolute_luci_url(path)
if not path or path == "" or path:match("^https?://") then
return path
end
local authority = request_authority()
if authority == "" then
return path
end
return request_scheme() .. "://" .. authority .. path
end
local function valid_apps_return(value)
if not value or value == "" then
return false
@@ -62,7 +106,7 @@ local function valid_apps_return(value)
local http = require "luci.http"
local uci = require "luci.model.uci".cursor()
local request_host = http.getenv("HTTP_HOST") or ""
local request_host = request_authority()
local lan_host = uci:get("network", "lan", "ipaddr") or ""
local authority_host_value = authority_host(authority)
@@ -135,7 +179,7 @@ end
local function auth_finish_url()
local dispatcher = require "luci.dispatcher"
return dispatcher.build_url("admin", "services", "linkease_auth", "auth_finish")
return absolute_luci_url(dispatcher.build_url("admin", "services", "linkease_auth", "auth_finish"))
end
function linkease_auth()
+2 -2
View File
@@ -12,13 +12,13 @@ PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
include $(INCLUDE_DIR)/package.mk
GEOIP_VER:=202608050239
GEOIP_VER:=202609040609
GEOIP_FILE:=geoip.dat.$(GEOIP_VER)
define Download/geoip
URL:=https://github.com/v2fly/geoip/releases/download/$(GEOIP_VER)/
URL_FILE:=geoip.dat
FILE:=$(GEOIP_FILE)
HASH:=c67bd077eb102cec74fab759b73d17f99275f56af10a87c14d9fd983508f5ce1
HASH:=1cba1f0982cf62502fa079c66047c3d0c608196da5b3305671e68f60e917a482
endef
GEOSITE_VER:=20260904020013
+3 -3
View File
@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=v2rayA
PKG_VERSION:=2.4.16
PKG_VERSION:=2.4.17
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/v2rayA/v2rayA/tar.gz/v$(PKG_VERSION)?
PKG_HASH:=209885554640bc01999272279ee65c456ed7093055b7ee580cb3251b55af711f
PKG_HASH:=0965204ef0be8c4dacbd5e18a1c07b49f55f3c1d006c594f6f33a095eeb791da
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/service
PKG_LICENSE:=AGPL-3.0-only
@@ -60,7 +60,7 @@ define Download/v2raya-web
URL:=https://github.com/v2rayA/v2rayA/releases/download/v$(PKG_VERSION)/
URL_FILE:=web.tar.gz
FILE:=$(WEB_FILE)
HASH:=992a7eb21d5ecef1d94ed763114812d6082d1732bed5505349134133b33502f4
HASH:=19f475b43a95bcc6f71fa6228c6aaeffeaffffb9b061c8909d507001a26ca76d
endef
define Build/Prepare