jack 8 kuukautta sitten
sitoutus
7a4538fc3f

BIN
.DS_Store


+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml

+ 94 - 0
.idea/inspectionProfiles/Project_Default.xml

@@ -0,0 +1,94 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
+      <Languages>
+        <language minSize="62" name="Python" />
+      </Languages>
+    </inspection_tool>
+    <inspection_tool class="PyPackageRequirementsInspection" enabled="false" level="WARNING" enabled_by_default="false">
+      <option name="ignoredPackages">
+        <value>
+          <list size="74">
+            <item index="0" class="java.lang.String" itemvalue="blinker" />
+            <item index="1" class="java.lang.String" itemvalue="kaitaistruct" />
+            <item index="2" class="java.lang.String" itemvalue="rsa" />
+            <item index="3" class="java.lang.String" itemvalue="selenium-wire" />
+            <item index="4" class="java.lang.String" itemvalue="bs4" />
+            <item index="5" class="java.lang.String" itemvalue="canvas" />
+            <item index="6" class="java.lang.String" itemvalue="jieba" />
+            <item index="7" class="java.lang.String" itemvalue="async-timeout" />
+            <item index="8" class="java.lang.String" itemvalue="Brotli" />
+            <item index="9" class="java.lang.String" itemvalue="cryptography" />
+            <item index="10" class="java.lang.String" itemvalue="h2" />
+            <item index="11" class="java.lang.String" itemvalue="pyasn1" />
+            <item index="12" class="java.lang.String" itemvalue="zstandard" />
+            <item index="13" class="java.lang.String" itemvalue="redis" />
+            <item index="14" class="java.lang.String" itemvalue="pyOpenSSL" />
+            <item index="15" class="java.lang.String" itemvalue="charset-normalizer" />
+            <item index="16" class="java.lang.String" itemvalue="ping3" />
+            <item index="17" class="java.lang.String" itemvalue="yarl" />
+            <item index="18" class="java.lang.String" itemvalue="pycryptodome" />
+            <item index="19" class="java.lang.String" itemvalue="PyExecJS" />
+            <item index="20" class="java.lang.String" itemvalue="pyparsing" />
+            <item index="21" class="java.lang.String" itemvalue="aiosignal" />
+            <item index="22" class="java.lang.String" itemvalue="httpx" />
+            <item index="23" class="java.lang.String" itemvalue="exceptiongroup" />
+            <item index="24" class="java.lang.String" itemvalue="pymongo" />
+            <item index="25" class="java.lang.String" itemvalue="selenium" />
+            <item index="26" class="java.lang.String" itemvalue="anyio" />
+            <item index="27" class="java.lang.String" itemvalue="aiohttp" />
+            <item index="28" class="java.lang.String" itemvalue="importlib-metadata" />
+            <item index="29" class="java.lang.String" itemvalue="httpcore" />
+            <item index="30" class="java.lang.String" itemvalue="idna" />
+            <item index="31" class="java.lang.String" itemvalue="chardet" />
+            <item index="32" class="java.lang.String" itemvalue="python-stdnum" />
+            <item index="33" class="java.lang.String" itemvalue="pydot" />
+            <item index="34" class="java.lang.String" itemvalue="num2words" />
+            <item index="35" class="java.lang.String" itemvalue="python-dateutil" />
+            <item index="36" class="java.lang.String" itemvalue="pyserial" />
+            <item index="37" class="java.lang.String" itemvalue="libsass" />
+            <item index="38" class="java.lang.String" itemvalue="pyopenssl" />
+            <item index="39" class="java.lang.String" itemvalue="passlib" />
+            <item index="40" class="java.lang.String" itemvalue="zeep" />
+            <item index="41" class="java.lang.String" itemvalue="mock" />
+            <item index="42" class="java.lang.String" itemvalue="typing_extensions" />
+            <item index="43" class="java.lang.String" itemvalue="pyee" />
+            <item index="44" class="java.lang.String" itemvalue="fastapi" />
+            <item index="45" class="java.lang.String" itemvalue="starlette" />
+            <item index="46" class="java.lang.String" itemvalue="uvicorn" />
+            <item index="47" class="java.lang.String" itemvalue="websockets" />
+            <item index="48" class="java.lang.String" itemvalue="pydantic-settings" />
+            <item index="49" class="java.lang.String" itemvalue="pydantic" />
+            <item index="50" class="java.lang.String" itemvalue="alembic" />
+            <item index="51" class="java.lang.String" itemvalue="greenlet" />
+            <item index="52" class="java.lang.String" itemvalue="cairosvg" />
+            <item index="53" class="java.lang.String" itemvalue="asyncpg" />
+            <item index="54" class="java.lang.String" itemvalue="sqlalchemy-utils" />
+            <item index="55" class="java.lang.String" itemvalue="cython" />
+            <item index="56" class="java.lang.String" itemvalue="mypy" />
+            <item index="57" class="java.lang.String" itemvalue="qrcode" />
+            <item index="58" class="java.lang.String" itemvalue="black" />
+            <item index="59" class="java.lang.String" itemvalue="python-dotenv" />
+            <item index="60" class="java.lang.String" itemvalue="pypdf" />
+            <item index="61" class="java.lang.String" itemvalue="python-multipart" />
+            <item index="62" class="java.lang.String" itemvalue="xlsxwriter" />
+            <item index="63" class="java.lang.String" itemvalue="sqlalchemy" />
+            <item index="64" class="java.lang.String" itemvalue="pyicu" />
+            <item index="65" class="java.lang.String" itemvalue="svgwrite" />
+            <item index="66" class="java.lang.String" itemvalue="apscheduler" />
+            <item index="67" class="java.lang.String" itemvalue="python-jose" />
+            <item index="68" class="java.lang.String" itemvalue="asyncer" />
+            <item index="69" class="java.lang.String" itemvalue="python-barcode" />
+            <item index="70" class="java.lang.String" itemvalue="pillow" />
+            <item index="71" class="java.lang.String" itemvalue="psycopg2-binary" />
+            <item index="72" class="java.lang.String" itemvalue="helium" />
+            <item index="73" class="java.lang.String" itemvalue="pydantic_core" />
+          </list>
+        </value>
+      </option>
+    </inspection_tool>
+    <inspection_tool class="SqlDialectInspection" enabled="false" level="WARNING" enabled_by_default="false" />
+    <inspection_tool class="SqlNoDataSourceInspection" enabled="false" level="WARNING" enabled_by_default="false" />
+  </profile>
+</component>

+ 6 - 0
.idea/inspectionProfiles/profiles_settings.xml

@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="USE_PROJECT_PROFILE" value="false" />
+    <version value="1.0" />
+  </settings>
+</component>

+ 7 - 0
.idea/misc.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Black">
+    <option name="sdkName" value="web3_tools_nicegui" />
+  </component>
+  <component name="ProjectRootManager" version="2" project-jdk-name="web3_tools_nicegui" project-jdk-type="Python SDK" />
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/web3_tools_nicegui.iml" filepath="$PROJECT_DIR$/.idea/web3_tools_nicegui.iml" />
+    </modules>
+  </component>
+</project>

+ 16 - 0
.idea/vcs.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="IssueNavigationConfiguration">
+    <option name="links">
+      <list>
+        <IssueNavigationLink>
+          <option name="issueRegexp" value="\bodoo/(\w+)#(\d+)" />
+          <option name="linkRegexp" value="https://github.com/odoo/$1/issues/$2" />
+        </IssueNavigationLink>
+      </list>
+    </option>
+  </component>
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>

+ 8 - 0
.idea/web3_tools_nicegui.iml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="jdk" jdkName="web3_tools_nicegui" jdkType="Python SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 16 - 0
main.py

@@ -0,0 +1,16 @@
+from nicegui import ui
+from pages.clash_tools.clash_local import run_clash_local
+
+
+@ui.page('/')
+def index():
+    ui.button('Clash Tools', on_click=lambda: ui.navigate.to('/clash_local', new_tab=True))
+
+
+def main():
+    # 启动 NiceGUI 应用
+    ui.run(port=48345)
+
+
+if __name__ in {"__main__", "__mp_main__"}:
+    main()

+ 1 - 0
pages/__init__.py

@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-

BIN
pages/__pycache__/__init__.cpython-312.pyc


+ 1 - 0
pages/clash_tools/__init__.py

@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-

BIN
pages/clash_tools/__pycache__/__init__.cpython-312.pyc


BIN
pages/clash_tools/__pycache__/clash_local.cpython-312.pyc


+ 49 - 0
pages/clash_tools/clash_local.py

@@ -0,0 +1,49 @@
+from nicegui import ui
+
+# 全局变量声明
+output_text = None
+
+
+def handle_check_now_node():
+    """处理 'check now node' 按钮点击事件"""
+    global output_text
+    print("Check Now Node button clicked")
+    # 模拟检测结果
+    results = [
+        "Node 1: OK",
+        "Node 2: Failed",
+        "Node 3: OK",
+        "Node 4: OK",
+        "Node 5: Failed",
+        "Node 6: OK",
+        "Node 7: OK",
+        "Node 8: Failed",
+        "Node 9: OK",
+        "Node 10: OK"
+    ]
+    # 更新文本框内容
+    if output_text is not None:
+        output_text.value = "\n".join(results)
+    else:
+        print("Error: output_text is not initialized")
+
+
+def handle_switch_node():
+    """处理 'switch ip' 按钮点击事件"""
+    print("Switch IP button clicked")
+
+
+@ui.page('/clash_local')
+def run_clash_local():
+    ui.button('返回主页', on_click=lambda: ui.navigate.to('/', new_tab=False))
+    with ui.row().classes("mx-auto"):
+        ui.button("Check Now Node", on_click=handle_check_now_node).classes("mt-1")
+        ui.button("Switch Node", on_click=handle_switch_node).classes("mt-1")
+
+        ui.label("Filter Node").classes("text-lg font-bold text-blue-500 mt-4")
+        filter_input = ui.input(value="JP").classes("w-96")
+
+    with ui.row().classes("w-4/5 mx-auto"):
+        with ui.column().classes("w-4/5 mx-auto"):
+            ui.label("Output").classes("text-lg font-bold text-blue-500 mt-8 mb-4")
+            ui.textarea().classes("w-full h-96 text-sm overflow-auto")

+ 1 - 0
src/__init__.py

@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-

+ 1 - 0
utils/__init__.py

@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-