项目 8 智慧校园管理平台:5 个任务的示例、自绘素材、WisdomCampus 数据库
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s

- 示例 p8-t1…t5(代码逐个累加):主界面、校园环境界面、环境采集与分析(路灯手动 / 自动控制、
  LED 推送、自动推送火情、7 天温度图表)、校园安防(入侵提示、摄像机方向、拍照入库)、历史图片
  (按日期查询、左右切换),各有评分规则
- 按书补全参考工程里空着的"推送LED信息""自动控制",给"自动推送火情"绑定 CheckedChanged
  (书上第 23 步写成了 ch_autoLamp);任务 5 每次查询前清空 Keys
- 素材:项目 8 的 20 多张图片全部自绘,名字和尺寸与教材一致(project8.py 生成 SVG,
  build-gallery.sh 渲染成 PNG;源文件移到 svg/)
- 数据库 WisdomCampus 按教材的表结构建(EnvironmentData、SecurityData、Users),预置 7 天环境数据
- 测试:参考答案全部通过;没绑定"自动推送火情"、开灯换错背景图片时报出对应原因
- 文档:教材 8 个项目全部有示例,共 23 个

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-10-23 15:15:00 +08:00
1 parent b20db5721e
commit 65a1b3a81e
109 files changed
+7807 -9

No files matched your search

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 60 60">
<circle cx="30" cy="30" r="27" fill="#000000" opacity="0.45"/>
<path d="M19 35 L30 23 L41 35" fill="none" stroke="#ffffff" stroke-width="5" stroke-linecap="round" stroke-linejoin="round" transform="rotate(270 30 30)"/>
</svg>

After

Width:  |  Height:  |  Size: 316 B

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 60 60">
<circle cx="30" cy="30" r="27" fill="#000000" opacity="0.45"/>
<path d="M19 35 L30 23 L41 35" fill="none" stroke="#ffffff" stroke-width="5" stroke-linecap="round" stroke-linejoin="round" transform="rotate(90 30 30)"/>
</svg>

After

Width:  |  Height:  |  Size: 315 B

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="555" height="670" viewBox="0 0 555 670">
<rect x="8" y="8" width="539" height="654" rx="12" fill="#14304f" opacity="0.88"/>
<rect x="8" y="8" width="539" height="654" rx="12" fill="none" stroke="#7fb3e6" stroke-width="2" opacity="0.6"/>
<rect x="24" y="22" width="507" height="4" rx="2" fill="#4fa3ff" opacity="0.8"/>
</svg>

After

Width:  |  Height:  |  Size: 380 B

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="425" height="670" viewBox="0 0 425 670">
<rect x="8" y="8" width="409" height="654" rx="12" fill="#14304f" opacity="0.88"/>
<rect x="8" y="8" width="409" height="654" rx="12" fill="none" stroke="#7fb3e6" stroke-width="2" opacity="0.6"/>
<rect x="24" y="22" width="377" height="4" rx="2" fill="#4fa3ff" opacity="0.8"/>
</svg>

After

Width:  |  Height:  |  Size: 380 B

@@ -0,0 +1,78 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="748" viewBox="0 0 1440 748">
<defs>
<linearGradient id="sky" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#5aa7ea"/><stop offset="1" stop-color="#cfe8fb"/></linearGradient>
<linearGradient id="lawn" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#8cc66d"/><stop offset="1" stop-color="#5f9e45"/></linearGradient>
</defs>
<rect width="1440" height="748" fill="url(#sky)"/>
<circle cx="1260" cy="120" r="60" fill="#fff3b0" opacity="0.9"/>
<g fill="#ffffff" opacity="0.85">
<ellipse cx="260" cy="120" rx="90" ry="30"/><ellipse cx="320" cy="105" rx="60" ry="28"/>
<ellipse cx="880" cy="90" rx="110" ry="32"/><ellipse cx="950" cy="80" rx="70" ry="28"/>
</g>
<g opacity="0.55" fill="#9fb8cf">
<rect x="40" y="300" width="160" height="260"/><rect x="1230" y="280" width="180" height="280"/><rect x="230" y="340" width="120" height="220"/>
</g>
<rect x="380" y="260" width="680" height="300" fill="#f2e3c9"/>
<rect x="372" y="246" width="696" height="16" fill="#b36b45"/>
<rect x="404.9" y="278.0" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="518.3" y="278.0" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="631.6" y="278.0" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="744.9" y="278.0" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="858.3" y="278.0" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="971.6" y="278.0" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="404.9" y="345.5" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="518.3" y="345.5" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="631.6" y="345.5" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="744.9" y="345.5" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="858.3" y="345.5" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="971.6" y="345.5" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="404.9" y="413.0" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="518.3" y="413.0" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="631.6" y="413.0" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="744.9" y="413.0" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="858.3" y="413.0" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="971.6" y="413.0" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="404.9" y="480.5" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="518.3" y="480.5" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="631.6" y="480.5" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="744.9" y="480.5" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="858.3" y="480.5" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="971.6" y="480.5" width="63.5" height="37.1" fill="#cfe3f5"/>
<rect x="660" y="190" width="120" height="70" fill="#f2e3c9"/><rect x="650" y="178" width="140" height="16" fill="#b36b45"/>
<circle cx="720" cy="225" r="20" fill="#ffffff" stroke="#8a6a4a" stroke-width="4"/>
<rect x="680" y="470" width="80" height="90" fill="#8a6a4a"/>
<rect x="1080" y="360" width="220" height="200" fill="#e8d6bd"/>
<rect x="1072" y="346" width="236" height="16" fill="#b36b45"/>
<rect x="1092.1" y="378.0" width="30.8" height="31.2" fill="#cfe3f5"/>
<rect x="1147.1" y="378.0" width="30.8" height="31.2" fill="#cfe3f5"/>
<rect x="1202.1" y="378.0" width="30.8" height="31.2" fill="#cfe3f5"/>
<rect x="1257.1" y="378.0" width="30.8" height="31.2" fill="#cfe3f5"/>
<rect x="1092.1" y="434.7" width="30.8" height="31.2" fill="#cfe3f5"/>
<rect x="1147.1" y="434.7" width="30.8" height="31.2" fill="#cfe3f5"/>
<rect x="1202.1" y="434.7" width="30.8" height="31.2" fill="#cfe3f5"/>
<rect x="1257.1" y="434.7" width="30.8" height="31.2" fill="#cfe3f5"/>
<rect x="1092.1" y="491.3" width="30.8" height="31.2" fill="#cfe3f5"/>
<rect x="1147.1" y="491.3" width="30.8" height="31.2" fill="#cfe3f5"/>
<rect x="1202.1" y="491.3" width="30.8" height="31.2" fill="#cfe3f5"/>
<rect x="1257.1" y="491.3" width="30.8" height="31.2" fill="#cfe3f5"/>
<rect x="150" y="380" width="210" height="180" fill="#e8d6bd"/>
<rect x="142" y="366" width="226" height="16" fill="#b36b45"/>
<rect x="161.6" y="398.0" width="29.4" height="27.5" fill="#cfe3f5"/>
<rect x="214.1" y="398.0" width="29.4" height="27.5" fill="#cfe3f5"/>
<rect x="266.6" y="398.0" width="29.4" height="27.5" fill="#cfe3f5"/>
<rect x="319.1" y="398.0" width="29.4" height="27.5" fill="#cfe3f5"/>
<rect x="161.6" y="448.0" width="29.4" height="27.5" fill="#cfe3f5"/>
<rect x="214.1" y="448.0" width="29.4" height="27.5" fill="#cfe3f5"/>
<rect x="266.6" y="448.0" width="29.4" height="27.5" fill="#cfe3f5"/>
<rect x="319.1" y="448.0" width="29.4" height="27.5" fill="#cfe3f5"/>
<rect x="161.6" y="498.0" width="29.4" height="27.5" fill="#cfe3f5"/>
<rect x="214.1" y="498.0" width="29.4" height="27.5" fill="#cfe3f5"/>
<rect x="266.6" y="498.0" width="29.4" height="27.5" fill="#cfe3f5"/>
<rect x="319.1" y="498.0" width="29.4" height="27.5" fill="#cfe3f5"/>
<rect x="0" y="560" width="1440" height="188" fill="url(#lawn)"/>
<path d="M560 748 L680 560 L760 560 L880 748 Z" fill="#d9c9a8"/>
<rect x="113.4" y="600" width="13.200000000000001" height="66.0" fill="#7a5230"/><circle cx="120" cy="567.0" r="52.800000000000004" fill="#4f9a45"/><circle cx="84.8" cy="594.5" r="37.400000000000006" fill="#4f9a45"/><circle cx="155.2" cy="594.5" r="37.400000000000006" fill="#468c3e"/><rect x="324.6" y="620" width="10.8" height="54.0" fill="#7a5230"/><circle cx="330" cy="593.0" r="43.2" fill="#4f9a45"/><circle cx="301.2" cy="615.5" r="30.6" fill="#4f9a45"/><circle cx="358.8" cy="615.5" r="30.6" fill="#468c3e"/><rect x="1124.0" y="610" width="12.0" height="60.0" fill="#7a5230"/><circle cx="1130" cy="580.0" r="48.0" fill="#4f9a45"/><circle cx="1098.0" cy="605.0" r="34.0" fill="#4f9a45"/><circle cx="1162.0" cy="605.0" r="34.0" fill="#468c3e"/><rect x="1342.8" y="600" width="14.399999999999999" height="72.0" fill="#7a5230"/><circle cx="1350" cy="564.0" r="57.599999999999994" fill="#4f9a45"/><circle cx="1311.6" cy="594.0" r="40.8" fill="#4f9a45"/><circle cx="1388.4" cy="594.0" r="40.8" fill="#468c3e"/>
<g fill="#3f8a3a"><ellipse cx="480" cy="572" rx="90" ry="22"/><ellipse cx="960" cy="572" rx="90" ry="22"/></g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28">
<circle cx="14" cy="14" r="13" fill="#ffffff" stroke="#aab3bf" stroke-width="1"/>
<path d="M8 16.5 L14 10 L20 16.5" fill="none" stroke="#5b6472" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" transform="rotate(180 14 14)"/>
</svg>

After

Width:  |  Height:  |  Size: 338 B

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28">
<circle cx="14" cy="14" r="13" fill="#2f7fe0" stroke="#aab3bf" stroke-width="1"/>
<path d="M8 16.5 L14 10 L20 16.5" fill="none" stroke="#ffffff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" transform="rotate(180 14 14)"/>
</svg>

After

Width:  |  Height:  |  Size: 338 B

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28">
<circle cx="14" cy="14" r="13" fill="#ffffff" stroke="#aab3bf" stroke-width="1"/>
<path d="M8 16.5 L14 10 L20 16.5" fill="none" stroke="#5b6472" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" transform="rotate(270 14 14)"/>
</svg>

After

Width:  |  Height:  |  Size: 338 B

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28">
<circle cx="14" cy="14" r="13" fill="#2f7fe0" stroke="#aab3bf" stroke-width="1"/>
<path d="M8 16.5 L14 10 L20 16.5" fill="none" stroke="#ffffff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" transform="rotate(270 14 14)"/>
</svg>

After

Width:  |  Height:  |  Size: 338 B

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28">
<circle cx="14" cy="14" r="13" fill="#ffffff" stroke="#aab3bf" stroke-width="1"/>
<path d="M8 16.5 L14 10 L20 16.5" fill="none" stroke="#5b6472" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" transform="rotate(90 14 14)"/>
</svg>

After

Width:  |  Height:  |  Size: 337 B

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28">
<circle cx="14" cy="14" r="13" fill="#2f7fe0" stroke="#aab3bf" stroke-width="1"/>
<path d="M8 16.5 L14 10 L20 16.5" fill="none" stroke="#ffffff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" transform="rotate(90 14 14)"/>
</svg>

After

Width:  |  Height:  |  Size: 337 B

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28">
<circle cx="14" cy="14" r="13" fill="#ffffff" stroke="#aab3bf" stroke-width="1"/>
<path d="M8 16.5 L14 10 L20 16.5" fill="none" stroke="#5b6472" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" transform="rotate(0 14 14)"/>
</svg>

After

Width:  |  Height:  |  Size: 336 B

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 28 28">
<circle cx="14" cy="14" r="13" fill="#2f7fe0" stroke="#aab3bf" stroke-width="1"/>
<path d="M8 16.5 L14 10 L20 16.5" fill="none" stroke="#ffffff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" transform="rotate(0 14 14)"/>
</svg>

After

Width:  |  Height:  |  Size: 336 B

@@ -0,0 +1,79 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="716" viewBox="0 0 1440 716">
<defs><linearGradient id="sky" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#2b3d66"/><stop offset="1" stop-color="#e8a76b"/></linearGradient></defs>
<rect width="1440" height="716" fill="url(#sky)"/>
<circle cx="1180" cy="110" r="36" fill="#fff6c8"/>
<rect x="80" y="220" width="560" height="330" fill="#e9d8bf"/>
<rect x="72" y="206" width="576" height="16" fill="#b36b45"/>
<rect x="97.6" y="238.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="177.6" y="238.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="257.6" y="238.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="337.6" y="238.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="417.6" y="238.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="497.6" y="238.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="577.6" y="238.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="97.6" y="298.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="177.6" y="298.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="257.6" y="298.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="337.6" y="298.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="417.6" y="298.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="497.6" y="298.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="577.6" y="298.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="97.6" y="358.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="177.6" y="358.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="257.6" y="358.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="337.6" y="358.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="417.6" y="358.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="497.6" y="358.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="577.6" y="358.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="97.6" y="418.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="177.6" y="418.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="257.6" y="418.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="337.6" y="418.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="417.6" y="418.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="497.6" y="418.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="577.6" y="418.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="97.6" y="478.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="177.6" y="478.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="257.6" y="478.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="337.6" y="478.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="417.6" y="478.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="497.6" y="478.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="577.6" y="478.0" width="44.8" height="33.0" fill="#ffd37a"/>
<rect x="760" y="260" width="580" height="290" fill="#dcc7a8"/>
<rect x="752" y="246" width="596" height="16" fill="#b36b45"/>
<rect x="778.2" y="278.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="861.1" y="278.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="943.9" y="278.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1026.8" y="278.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1109.7" y="278.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1192.5" y="278.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1275.4" y="278.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="778.2" y="343.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="861.1" y="343.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="943.9" y="343.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1026.8" y="343.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1109.7" y="343.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1192.5" y="343.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1275.4" y="343.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="778.2" y="408.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="861.1" y="408.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="943.9" y="408.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1026.8" y="408.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1109.7" y="408.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1192.5" y="408.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1275.4" y="408.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="778.2" y="473.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="861.1" y="473.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="943.9" y="473.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1026.8" y="473.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1109.7" y="473.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1192.5" y="473.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="1275.4" y="473.0" width="46.4" height="35.8" fill="#ffd37a"/>
<rect x="0" y="550" width="1440" height="40" fill="#7fb06a"/>
<rect x="0" y="590" width="1440" height="126" fill="#5b6472"/>
<g fill="#f8fafc"><rect x="30" y="648" width="70" height="8"/><rect x="170" y="648" width="70" height="8"/><rect x="310" y="648" width="70" height="8"/><rect x="450" y="648" width="70" height="8"/><rect x="590" y="648" width="70" height="8"/><rect x="730" y="648" width="70" height="8"/><rect x="870" y="648" width="70" height="8"/><rect x="1010" y="648" width="70" height="8"/><rect x="1150" y="648" width="70" height="8"/><rect x="1290" y="648" width="70" height="8"/><rect x="1430" y="648" width="70" height="8"/></g>
<rect x="180" y="380" width="12" height="260" fill="#4b5563"/><path d="M186 386 Q186 356 226 356 H250" stroke="#4b5563" stroke-width="10" fill="none"/><rect x="236" y="348" width="44" height="16" rx="5" fill="#374151"/><path d="M240 364 L200 640 H320 L276 364 Z" fill="#fff3b0" opacity="0.35"/><ellipse cx="258" cy="366" rx="22" ry="7" fill="#fff8d0"/><rect x="520" y="380" width="12" height="260" fill="#4b5563"/><path d="M526 386 Q526 356 566 356 H590" stroke="#4b5563" stroke-width="10" fill="none"/><rect x="576" y="348" width="44" height="16" rx="5" fill="#374151"/><path d="M580 364 L540 640 H660 L616 364 Z" fill="#fff3b0" opacity="0.35"/><ellipse cx="598" cy="366" rx="22" ry="7" fill="#fff8d0"/><rect x="860" y="380" width="12" height="260" fill="#4b5563"/><path d="M866 386 Q866 356 906 356 H930" stroke="#4b5563" stroke-width="10" fill="none"/><rect x="916" y="348" width="44" height="16" rx="5" fill="#374151"/><path d="M920 364 L880 640 H1000 L956 364 Z" fill="#fff3b0" opacity="0.35"/><ellipse cx="938" cy="366" rx="22" ry="7" fill="#fff8d0"/><rect x="1200" y="380" width="12" height="260" fill="#4b5563"/><path d="M1206 386 Q1206 356 1246 356 H1270" stroke="#4b5563" stroke-width="10" fill="none"/><rect x="1256" y="348" width="44" height="16" rx="5" fill="#374151"/><path d="M1260 364 L1220 640 H1340 L1296 364 Z" fill="#fff3b0" opacity="0.35"/><ellipse cx="1278" cy="366" rx="22" ry="7" fill="#fff8d0"/>
<rect x="695.2" y="560" width="9.600000000000001" height="48.0" fill="#7a5230"/><circle cx="700" cy="536.0" r="38.400000000000006" fill="#3f7f45"/><circle cx="674.4" cy="556.0" r="27.200000000000003" fill="#3f7f45"/><circle cx="725.6" cy="556.0" r="27.200000000000003" fill="#468c3e"/><rect x="1384.6" y="560" width="10.8" height="54.0" fill="#7a5230"/><circle cx="1390" cy="533.0" r="43.2" fill="#3f7f45"/><circle cx="1361.2" cy="555.5" r="30.6" fill="#3f7f45"/><circle cx="1418.8" cy="555.5" r="30.6" fill="#468c3e"/>
</svg>

After

Width:  |  Height:  |  Size: 7.5 KiB

@@ -0,0 +1,79 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="716" viewBox="0 0 1440 716">
<defs><linearGradient id="sky" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#6bb0ea"/><stop offset="1" stop-color="#d6ecfb"/></linearGradient></defs>
<rect width="1440" height="716" fill="url(#sky)"/>
<circle cx="1220" cy="110" r="50" fill="#fff3b0" opacity="0.9"/>
<rect x="80" y="220" width="560" height="330" fill="#e9d8bf"/>
<rect x="72" y="206" width="576" height="16" fill="#b36b45"/>
<rect x="97.6" y="238.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="177.6" y="238.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="257.6" y="238.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="337.6" y="238.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="417.6" y="238.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="497.6" y="238.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="577.6" y="238.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="97.6" y="298.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="177.6" y="298.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="257.6" y="298.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="337.6" y="298.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="417.6" y="298.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="497.6" y="298.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="577.6" y="298.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="97.6" y="358.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="177.6" y="358.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="257.6" y="358.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="337.6" y="358.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="417.6" y="358.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="497.6" y="358.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="577.6" y="358.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="97.6" y="418.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="177.6" y="418.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="257.6" y="418.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="337.6" y="418.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="417.6" y="418.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="497.6" y="418.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="577.6" y="418.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="97.6" y="478.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="177.6" y="478.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="257.6" y="478.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="337.6" y="478.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="417.6" y="478.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="497.6" y="478.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="577.6" y="478.0" width="44.8" height="33.0" fill="#cfe3f5"/>
<rect x="760" y="260" width="580" height="290" fill="#dcc7a8"/>
<rect x="752" y="246" width="596" height="16" fill="#b36b45"/>
<rect x="778.2" y="278.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="861.1" y="278.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="943.9" y="278.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1026.8" y="278.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1109.7" y="278.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1192.5" y="278.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1275.4" y="278.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="778.2" y="343.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="861.1" y="343.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="943.9" y="343.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1026.8" y="343.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1109.7" y="343.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1192.5" y="343.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1275.4" y="343.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="778.2" y="408.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="861.1" y="408.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="943.9" y="408.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1026.8" y="408.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1109.7" y="408.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1192.5" y="408.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1275.4" y="408.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="778.2" y="473.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="861.1" y="473.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="943.9" y="473.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1026.8" y="473.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1109.7" y="473.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1192.5" y="473.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="1275.4" y="473.0" width="46.4" height="35.8" fill="#cfe3f5"/>
<rect x="0" y="550" width="1440" height="40" fill="#7fb06a"/>
<rect x="0" y="590" width="1440" height="126" fill="#5b6472"/>
<g fill="#f8fafc"><rect x="30" y="648" width="70" height="8"/><rect x="170" y="648" width="70" height="8"/><rect x="310" y="648" width="70" height="8"/><rect x="450" y="648" width="70" height="8"/><rect x="590" y="648" width="70" height="8"/><rect x="730" y="648" width="70" height="8"/><rect x="870" y="648" width="70" height="8"/><rect x="1010" y="648" width="70" height="8"/><rect x="1150" y="648" width="70" height="8"/><rect x="1290" y="648" width="70" height="8"/><rect x="1430" y="648" width="70" height="8"/></g>
<rect x="180" y="380" width="12" height="260" fill="#4b5563"/><path d="M186 386 Q186 356 226 356 H250" stroke="#4b5563" stroke-width="10" fill="none"/><rect x="236" y="348" width="44" height="16" rx="5" fill="#374151"/><ellipse cx="258" cy="366" rx="18" ry="5" fill="#9ca3af"/><rect x="520" y="380" width="12" height="260" fill="#4b5563"/><path d="M526 386 Q526 356 566 356 H590" stroke="#4b5563" stroke-width="10" fill="none"/><rect x="576" y="348" width="44" height="16" rx="5" fill="#374151"/><ellipse cx="598" cy="366" rx="18" ry="5" fill="#9ca3af"/><rect x="860" y="380" width="12" height="260" fill="#4b5563"/><path d="M866 386 Q866 356 906 356 H930" stroke="#4b5563" stroke-width="10" fill="none"/><rect x="916" y="348" width="44" height="16" rx="5" fill="#374151"/><ellipse cx="938" cy="366" rx="18" ry="5" fill="#9ca3af"/><rect x="1200" y="380" width="12" height="260" fill="#4b5563"/><path d="M1206 386 Q1206 356 1246 356 H1270" stroke="#4b5563" stroke-width="10" fill="none"/><rect x="1256" y="348" width="44" height="16" rx="5" fill="#374151"/><ellipse cx="1278" cy="366" rx="18" ry="5" fill="#9ca3af"/>
<rect x="695.2" y="560" width="9.600000000000001" height="48.0" fill="#7a5230"/><circle cx="700" cy="536.0" r="38.400000000000006" fill="#3f7f45"/><circle cx="674.4" cy="556.0" r="27.200000000000003" fill="#3f7f45"/><circle cx="725.6" cy="556.0" r="27.200000000000003" fill="#468c3e"/><rect x="1384.6" y="560" width="10.8" height="54.0" fill="#7a5230"/><circle cx="1390" cy="533.0" r="43.2" fill="#3f7f45"/><circle cx="1361.2" cy="555.5" r="30.6" fill="#3f7f45"/><circle cx="1418.8" cy="555.5" r="30.6" fill="#468c3e"/>
</svg>

After

Width:  |  Height:  |  Size: 7.2 KiB

@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="226" height="54" viewBox="0 0 226 54">
<g transform="translate(8,7)">
<circle cx="20" cy="20" r="19" fill="#ffffff" opacity="0.95"/>
<path d="M7 27 L20 10 L33 27 Z" fill="#3593ed"/>
<rect x="13" y="22" width="14" height="9" fill="#3593ed"/>
<rect x="18" y="25" width="4" height="6" fill="#ffffff"/>
</g>
<text x="56" y="37" font-family="Source Han Sans CN, Noto Sans CJK SC, sans-serif" font-size="27" font-weight="bold" fill="#ffffff" letter-spacing="3">智慧校园</text>
</svg>

After

Width:  |  Height:  |  Size: 553 B

@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="180" height="210" viewBox="0 0 180 210">
<rect x="6" y="6" width="168" height="198" rx="18" fill="#2e9e5b"/>
<rect x="6" y="6" width="168" height="198" rx="18" fill="#ffffff" opacity="0.08"/>
<g transform="translate(90,82)" fill="#ffffff" stroke="#ffffff">
<rect x="-6" y="10" width="12" height="40" stroke="none"/>
<circle cx="0" cy="-12" r="34" stroke="none"/><circle cx="-26" cy="8" r="22" stroke="none"/><circle cx="26" cy="8" r="22" stroke="none"/>
<path d="M-4 -2 L0 -30 L4 -2" fill="#2e9e5b" stroke="none"/></g>
<text x="90" y="178" font-family="Source Han Sans CN, Noto Sans CJK SC, sans-serif" font-size="24" font-weight="bold" fill="#ffffff" text-anchor="middle">校园环境</text>
</svg>

After

Width:  |  Height:  |  Size: 769 B

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="180" height="210" viewBox="0 0 180 210">
<rect x="6" y="6" width="168" height="198" rx="18" fill="#2f7fe0"/>
<rect x="6" y="6" width="168" height="198" rx="18" fill="#ffffff" opacity="0.08"/>
<g transform="translate(90,82)" fill="#ffffff" stroke="#ffffff">
<path d="M0 -48 L40 -32 V2 C40 28 20 44 0 52 C-20 44 -40 28 -40 2 V-32 Z" stroke="none"/>
<path d="M-16 0 L-4 12 L18 -14" fill="none" stroke="#2f7fe0" stroke-width="9" stroke-linecap="round" stroke-linejoin="round"/></g>
<text x="90" y="178" font-family="Source Han Sans CN, Noto Sans CJK SC, sans-serif" font-size="24" font-weight="bold" fill="#ffffff" text-anchor="middle">校园安防</text>
</svg>

After

Width:  |  Height:  |  Size: 724 B

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="180" height="210" viewBox="0 0 180 210">
<rect x="6" y="6" width="168" height="198" rx="18" fill="#e2803a"/>
<rect x="6" y="6" width="168" height="198" rx="18" fill="#ffffff" opacity="0.08"/>
<g transform="translate(90,82)" fill="#ffffff" stroke="#ffffff">
<path d="M-10 -44 H-40 V44 H-10" fill="none" stroke-width="10" stroke-linejoin="round"/>
<path d="M-12 0 H40 M22 -18 L40 0 L22 18" fill="none" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/></g>
<text x="90" y="178" font-family="Source Han Sans CN, Noto Sans CJK SC, sans-serif" font-size="24" font-weight="bold" fill="#ffffff" text-anchor="middle">退 出</text>
</svg>

After

Width:  |  Height:  |  Size: 713 B

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="280" height="280" viewBox="0 0 280 280">
<g fill="none" stroke="#c9ced6" stroke-width="10" stroke-linejoin="round" stroke-linecap="round">
<rect x="40" y="70" width="160" height="110" rx="14"/>
<path d="M200 105 L245 80 V170 L200 145"/>
<path d="M90 180 L80 225 M150 180 L160 225 M65 225 H175"/>
</g>
<circle cx="120" cy="125" r="26" fill="none" stroke="#c9ced6" stroke-width="10"/>
</svg>

After

Width:  |  Height:  |  Size: 457 B

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500">
<defs><radialGradient id="pad" cx="0.5" cy="0.45" r="0.6"><stop offset="0" stop-color="#f4f6f9"/><stop offset="1" stop-color="#c7cdd6"/></radialGradient></defs>
<circle cx="250" cy="250" r="240" fill="url(#pad)" stroke="#aab3bf" stroke-width="6"/>
<circle cx="250" cy="250" r="95" fill="#e9edf2" stroke="#aab3bf" stroke-width="4"/>
<circle cx="250" cy="250" r="40" fill="#d4dae2"/>
</svg>

After

Width:  |  Height:  |  Size: 487 B

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="24" viewBox="0 0 48 24">
<rect x="1" y="2" width="46" height="20" rx="10" fill="#c7cbd1" stroke="#a9aeb6" stroke-width="1"/>
<text x="33" y="16.5" font-family="Arial, Helvetica, sans-serif" font-size="10" font-weight="bold" fill="#ffffff" text-anchor="middle">OFF</text>
<circle cx="12" cy="12" r="8" fill="#ffffff"/>
</svg>

After

Width:  |  Height:  |  Size: 390 B

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="24" viewBox="0 0 48 24">
<rect x="1" y="2" width="46" height="20" rx="10" fill="#34c759" stroke="#24a148" stroke-width="1"/>
<text x="15" y="16.5" font-family="Arial, Helvetica, sans-serif" font-size="10" font-weight="bold" fill="#ffffff" text-anchor="middle">ON</text>
<circle cx="36" cy="12" r="8" fill="#ffffff"/>
</svg>

After

Width:  |  Height:  |  Size: 389 B

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36">
<rect x="2" y="2" width="32" height="32" rx="4" fill="#e81123"/>
<path d="M12 12 L24 24 M24 12 L12 24" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 259 B