diff --git a/assets/icons/sprite/123pan.svg b/assets/icons/sprite/123pan.svg
new file mode 100644
index 00000000..8f8e47f5
--- /dev/null
+++ b/assets/icons/sprite/123pan.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/360yunpan.svg b/assets/icons/sprite/360yunpan.svg
new file mode 100644
index 00000000..a3aa963a
--- /dev/null
+++ b/assets/icons/sprite/360yunpan.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/add-color.svg b/assets/icons/sprite/add-color.svg
new file mode 100644
index 00000000..52ff2a07
--- /dev/null
+++ b/assets/icons/sprite/add-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/add-ring.svg b/assets/icons/sprite/add-ring.svg
new file mode 100644
index 00000000..003eadb7
--- /dev/null
+++ b/assets/icons/sprite/add-ring.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/add.svg b/assets/icons/sprite/add.svg
new file mode 100644
index 00000000..552d11a8
--- /dev/null
+++ b/assets/icons/sprite/add.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/alipan.svg b/assets/icons/sprite/alipan.svg
new file mode 100644
index 00000000..0e0a466d
--- /dev/null
+++ b/assets/icons/sprite/alipan.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/alipay.svg b/assets/icons/sprite/alipay.svg
new file mode 100644
index 00000000..b5193a7b
--- /dev/null
+++ b/assets/icons/sprite/alipay.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/apple.svg b/assets/icons/sprite/apple.svg
new file mode 100644
index 00000000..43bb152f
--- /dev/null
+++ b/assets/icons/sprite/apple.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/approve.svg b/assets/icons/sprite/approve.svg
new file mode 100644
index 00000000..17b169b8
--- /dev/null
+++ b/assets/icons/sprite/approve.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/baidu.svg b/assets/icons/sprite/baidu.svg
new file mode 100644
index 00000000..0c0b3f63
--- /dev/null
+++ b/assets/icons/sprite/baidu.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/bilibili.svg b/assets/icons/sprite/bilibili.svg
new file mode 100644
index 00000000..4a1c3cea
--- /dev/null
+++ b/assets/icons/sprite/bilibili.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/book-color.svg b/assets/icons/sprite/book-color.svg
new file mode 100644
index 00000000..e19e2fb5
--- /dev/null
+++ b/assets/icons/sprite/book-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/cart-color.svg b/assets/icons/sprite/cart-color.svg
new file mode 100644
index 00000000..942ed5d5
--- /dev/null
+++ b/assets/icons/sprite/cart-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/check-circle.svg b/assets/icons/sprite/check-circle.svg
new file mode 100644
index 00000000..7ae585b6
--- /dev/null
+++ b/assets/icons/sprite/check-circle.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/circle.svg b/assets/icons/sprite/circle.svg
new file mode 100644
index 00000000..b9df65b8
--- /dev/null
+++ b/assets/icons/sprite/circle.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/close.svg b/assets/icons/sprite/close.svg
new file mode 100644
index 00000000..6a19aa5b
--- /dev/null
+++ b/assets/icons/sprite/close.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/comment-color.svg b/assets/icons/sprite/comment-color.svg
new file mode 100644
index 00000000..5bfeb66b
--- /dev/null
+++ b/assets/icons/sprite/comment-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/comment-fill.svg b/assets/icons/sprite/comment-fill.svg
new file mode 100644
index 00000000..240fc8f6
--- /dev/null
+++ b/assets/icons/sprite/comment-fill.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/comment.svg b/assets/icons/sprite/comment.svg
new file mode 100644
index 00000000..775bf38d
--- /dev/null
+++ b/assets/icons/sprite/comment.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/copy-color.svg b/assets/icons/sprite/copy-color.svg
new file mode 100644
index 00000000..18dfe712
--- /dev/null
+++ b/assets/icons/sprite/copy-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/ctfile.svg b/assets/icons/sprite/ctfile.svg
new file mode 100644
index 00000000..04965bff
--- /dev/null
+++ b/assets/icons/sprite/ctfile.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/d-email.svg b/assets/icons/sprite/d-email.svg
new file mode 100644
index 00000000..a43ce207
--- /dev/null
+++ b/assets/icons/sprite/d-email.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/d-qq.svg b/assets/icons/sprite/d-qq.svg
new file mode 100644
index 00000000..e71a2a4c
--- /dev/null
+++ b/assets/icons/sprite/d-qq.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/d-wechat.svg b/assets/icons/sprite/d-wechat.svg
new file mode 100644
index 00000000..b021710e
--- /dev/null
+++ b/assets/icons/sprite/d-wechat.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/d-weibo.svg b/assets/icons/sprite/d-weibo.svg
new file mode 100644
index 00000000..67f3ec6d
--- /dev/null
+++ b/assets/icons/sprite/d-weibo.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/deduct-points.svg b/assets/icons/sprite/deduct-points.svg
new file mode 100644
index 00000000..d5a9e1c1
--- /dev/null
+++ b/assets/icons/sprite/deduct-points.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/dingtalk.svg b/assets/icons/sprite/dingtalk.svg
new file mode 100644
index 00000000..5097befe
--- /dev/null
+++ b/assets/icons/sprite/dingtalk.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/douyin.svg b/assets/icons/sprite/douyin.svg
new file mode 100644
index 00000000..13403577
--- /dev/null
+++ b/assets/icons/sprite/douyin.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/extra-points.svg b/assets/icons/sprite/extra-points.svg
new file mode 100644
index 00000000..7e99f67e
--- /dev/null
+++ b/assets/icons/sprite/extra-points.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/facebook-color.svg b/assets/icons/sprite/facebook-color.svg
new file mode 100644
index 00000000..7bb5248f
--- /dev/null
+++ b/assets/icons/sprite/facebook-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/favorite.svg b/assets/icons/sprite/favorite.svg
new file mode 100644
index 00000000..46ea3174
--- /dev/null
+++ b/assets/icons/sprite/favorite.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/gift-color.svg b/assets/icons/sprite/gift-color.svg
new file mode 100644
index 00000000..ac030ea0
--- /dev/null
+++ b/assets/icons/sprite/gift-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/gift.svg b/assets/icons/sprite/gift.svg
new file mode 100644
index 00000000..572a952e
--- /dev/null
+++ b/assets/icons/sprite/gift.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/gitee.svg b/assets/icons/sprite/gitee.svg
new file mode 100644
index 00000000..49b03660
--- /dev/null
+++ b/assets/icons/sprite/gitee.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/google-color.svg b/assets/icons/sprite/google-color.svg
new file mode 100644
index 00000000..3713d295
--- /dev/null
+++ b/assets/icons/sprite/google-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/handbag.svg b/assets/icons/sprite/handbag.svg
new file mode 100644
index 00000000..f495f9d7
--- /dev/null
+++ b/assets/icons/sprite/handbag.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/home-color.svg b/assets/icons/sprite/home-color.svg
new file mode 100644
index 00000000..da43af98
--- /dev/null
+++ b/assets/icons/sprite/home-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/hot-fill.svg b/assets/icons/sprite/hot-fill.svg
new file mode 100644
index 00000000..055b6557
--- /dev/null
+++ b/assets/icons/sprite/hot-fill.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/hot.svg b/assets/icons/sprite/hot.svg
new file mode 100644
index 00000000..76bd7729
--- /dev/null
+++ b/assets/icons/sprite/hot.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/huawei.svg b/assets/icons/sprite/huawei.svg
new file mode 100644
index 00000000..b1ba661a
--- /dev/null
+++ b/assets/icons/sprite/huawei.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/img-lists.svg b/assets/icons/sprite/img-lists.svg
new file mode 100644
index 00000000..b4d79fba
--- /dev/null
+++ b/assets/icons/sprite/img-lists.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/lanzou.svg b/assets/icons/sprite/lanzou.svg
new file mode 100644
index 00000000..8e975486
--- /dev/null
+++ b/assets/icons/sprite/lanzou.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/left.svg b/assets/icons/sprite/left.svg
new file mode 100644
index 00000000..e256bd62
--- /dev/null
+++ b/assets/icons/sprite/left.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/like.svg b/assets/icons/sprite/like.svg
new file mode 100644
index 00000000..a8d327f9
--- /dev/null
+++ b/assets/icons/sprite/like.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/line-color.svg b/assets/icons/sprite/line-color.svg
new file mode 100644
index 00000000..7ef63dd2
--- /dev/null
+++ b/assets/icons/sprite/line-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/linkedin-color.svg b/assets/icons/sprite/linkedin-color.svg
new file mode 100644
index 00000000..5a727543
--- /dev/null
+++ b/assets/icons/sprite/linkedin-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/manual-service.svg b/assets/icons/sprite/manual-service.svg
new file mode 100644
index 00000000..f77bc5b3
--- /dev/null
+++ b/assets/icons/sprite/manual-service.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/medal-color.svg b/assets/icons/sprite/medal-color.svg
new file mode 100644
index 00000000..57eef466
--- /dev/null
+++ b/assets/icons/sprite/medal-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/menu.svg b/assets/icons/sprite/menu.svg
new file mode 100644
index 00000000..1ba8954d
--- /dev/null
+++ b/assets/icons/sprite/menu.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/menu_2.svg b/assets/icons/sprite/menu_2.svg
new file mode 100644
index 00000000..d4baf00a
--- /dev/null
+++ b/assets/icons/sprite/menu_2.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/merchant-color.svg b/assets/icons/sprite/merchant-color.svg
new file mode 100644
index 00000000..8a15bbe4
--- /dev/null
+++ b/assets/icons/sprite/merchant-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/minus.svg b/assets/icons/sprite/minus.svg
new file mode 100644
index 00000000..eb8cf2ac
--- /dev/null
+++ b/assets/icons/sprite/minus.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/money-color-2.svg b/assets/icons/sprite/money-color-2.svg
new file mode 100644
index 00000000..4da0057f
--- /dev/null
+++ b/assets/icons/sprite/money-color-2.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/money-color.svg b/assets/icons/sprite/money-color.svg
new file mode 100644
index 00000000..bf645087
--- /dev/null
+++ b/assets/icons/sprite/money-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/money.svg b/assets/icons/sprite/money.svg
new file mode 100644
index 00000000..07d62eb9
--- /dev/null
+++ b/assets/icons/sprite/money.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/msg-color.svg b/assets/icons/sprite/msg-color.svg
new file mode 100644
index 00000000..bfa6d49a
--- /dev/null
+++ b/assets/icons/sprite/msg-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/ontop-color.svg b/assets/icons/sprite/ontop-color.svg
new file mode 100644
index 00000000..0c85031b
--- /dev/null
+++ b/assets/icons/sprite/ontop-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/order-color.svg b/assets/icons/sprite/order-color.svg
new file mode 100644
index 00000000..96634558
--- /dev/null
+++ b/assets/icons/sprite/order-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/pan_baidu.svg b/assets/icons/sprite/pan_baidu.svg
new file mode 100644
index 00000000..a9282a3a
--- /dev/null
+++ b/assets/icons/sprite/pan_baidu.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/plate-fill.svg b/assets/icons/sprite/plate-fill.svg
new file mode 100644
index 00000000..f6a93bfb
--- /dev/null
+++ b/assets/icons/sprite/plate-fill.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/points-color.svg b/assets/icons/sprite/points-color.svg
new file mode 100644
index 00000000..78d57f12
--- /dev/null
+++ b/assets/icons/sprite/points-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/points.svg b/assets/icons/sprite/points.svg
new file mode 100644
index 00000000..e784be01
--- /dev/null
+++ b/assets/icons/sprite/points.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/post.svg b/assets/icons/sprite/post.svg
new file mode 100644
index 00000000..ba002d76
--- /dev/null
+++ b/assets/icons/sprite/post.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/poster-color.svg b/assets/icons/sprite/poster-color.svg
new file mode 100644
index 00000000..777e880b
--- /dev/null
+++ b/assets/icons/sprite/poster-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/posts.svg b/assets/icons/sprite/posts.svg
new file mode 100644
index 00000000..af148fcc
--- /dev/null
+++ b/assets/icons/sprite/posts.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/qq-color.svg b/assets/icons/sprite/qq-color.svg
new file mode 100644
index 00000000..b2e693f7
--- /dev/null
+++ b/assets/icons/sprite/qq-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/quark.svg b/assets/icons/sprite/quark.svg
new file mode 100644
index 00000000..6a0c4f70
--- /dev/null
+++ b/assets/icons/sprite/quark.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/quick-reply.svg b/assets/icons/sprite/quick-reply.svg
new file mode 100644
index 00000000..970b8b4e
--- /dev/null
+++ b/assets/icons/sprite/quick-reply.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/qzone-color.svg b/assets/icons/sprite/qzone-color.svg
new file mode 100644
index 00000000..926532e0
--- /dev/null
+++ b/assets/icons/sprite/qzone-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/reddit-color.svg b/assets/icons/sprite/reddit-color.svg
new file mode 100644
index 00000000..0500d6c5
--- /dev/null
+++ b/assets/icons/sprite/reddit-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/reply.svg b/assets/icons/sprite/reply.svg
new file mode 100644
index 00000000..e9ea4ceb
--- /dev/null
+++ b/assets/icons/sprite/reply.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/return.svg b/assets/icons/sprite/return.svg
new file mode 100644
index 00000000..e6536092
--- /dev/null
+++ b/assets/icons/sprite/return.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/right.svg b/assets/icons/sprite/right.svg
new file mode 100644
index 00000000..564a7dbc
--- /dev/null
+++ b/assets/icons/sprite/right.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/search.svg b/assets/icons/sprite/search.svg
new file mode 100644
index 00000000..c972e434
--- /dev/null
+++ b/assets/icons/sprite/search.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/security-color.svg b/assets/icons/sprite/security-color.svg
new file mode 100644
index 00000000..1f6718c5
--- /dev/null
+++ b/assets/icons/sprite/security-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/set.svg b/assets/icons/sprite/set.svg
new file mode 100644
index 00000000..91a3d0ca
--- /dev/null
+++ b/assets/icons/sprite/set.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/share.svg b/assets/icons/sprite/share.svg
new file mode 100644
index 00000000..2bd71200
--- /dev/null
+++ b/assets/icons/sprite/share.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/shop-color.svg b/assets/icons/sprite/shop-color.svg
new file mode 100644
index 00000000..c62e13b7
--- /dev/null
+++ b/assets/icons/sprite/shop-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/shopping-cart.svg b/assets/icons/sprite/shopping-cart.svg
new file mode 100644
index 00000000..cdbe2cb0
--- /dev/null
+++ b/assets/icons/sprite/shopping-cart.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/signout.svg b/assets/icons/sprite/signout.svg
new file mode 100644
index 00000000..27e6af55
--- /dev/null
+++ b/assets/icons/sprite/signout.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/signup.svg b/assets/icons/sprite/signup.svg
new file mode 100644
index 00000000..6a50734e
--- /dev/null
+++ b/assets/icons/sprite/signup.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/stars.svg b/assets/icons/sprite/stars.svg
new file mode 100644
index 00000000..dee1092a
--- /dev/null
+++ b/assets/icons/sprite/stars.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/tag-color.svg b/assets/icons/sprite/tag-color.svg
new file mode 100644
index 00000000..5d8b7ff3
--- /dev/null
+++ b/assets/icons/sprite/tag-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/tags.svg b/assets/icons/sprite/tags.svg
new file mode 100644
index 00000000..6c947ee4
--- /dev/null
+++ b/assets/icons/sprite/tags.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/telegram-color.svg b/assets/icons/sprite/telegram-color.svg
new file mode 100644
index 00000000..22b05d4b
--- /dev/null
+++ b/assets/icons/sprite/telegram-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/theme.svg b/assets/icons/sprite/theme.svg
new file mode 100644
index 00000000..85c377a0
--- /dev/null
+++ b/assets/icons/sprite/theme.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/tianyi.svg b/assets/icons/sprite/tianyi.svg
new file mode 100644
index 00000000..fa7c0839
--- /dev/null
+++ b/assets/icons/sprite/tianyi.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/ticket-color.svg b/assets/icons/sprite/ticket-color.svg
new file mode 100644
index 00000000..a6149ba4
--- /dev/null
+++ b/assets/icons/sprite/ticket-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/time.svg b/assets/icons/sprite/time.svg
new file mode 100644
index 00000000..264f9344
--- /dev/null
+++ b/assets/icons/sprite/time.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/topic.svg b/assets/icons/sprite/topic.svg
new file mode 100644
index 00000000..bd88595f
--- /dev/null
+++ b/assets/icons/sprite/topic.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/topping.svg b/assets/icons/sprite/topping.svg
new file mode 100644
index 00000000..a747d538
--- /dev/null
+++ b/assets/icons/sprite/topping.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/transit.svg b/assets/icons/sprite/transit.svg
new file mode 100644
index 00000000..f9b55007
--- /dev/null
+++ b/assets/icons/sprite/transit.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/translate.svg b/assets/icons/sprite/translate.svg
new file mode 100644
index 00000000..bde556be
--- /dev/null
+++ b/assets/icons/sprite/translate.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/trend-color.svg b/assets/icons/sprite/trend-color.svg
new file mode 100644
index 00000000..144959e5
--- /dev/null
+++ b/assets/icons/sprite/trend-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/twitter-color.svg b/assets/icons/sprite/twitter-color.svg
new file mode 100644
index 00000000..1beed8a3
--- /dev/null
+++ b/assets/icons/sprite/twitter-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/ucpan.svg b/assets/icons/sprite/ucpan.svg
new file mode 100644
index 00000000..4e24dbf1
--- /dev/null
+++ b/assets/icons/sprite/ucpan.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/user-auth.svg b/assets/icons/sprite/user-auth.svg
new file mode 100644
index 00000000..7ef3182c
--- /dev/null
+++ b/assets/icons/sprite/user-auth.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/user-color-2.svg b/assets/icons/sprite/user-color-2.svg
new file mode 100644
index 00000000..9bdd10bb
--- /dev/null
+++ b/assets/icons/sprite/user-color-2.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/user-color.svg b/assets/icons/sprite/user-color.svg
new file mode 100644
index 00000000..0fed4a5b
--- /dev/null
+++ b/assets/icons/sprite/user-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/user.svg b/assets/icons/sprite/user.svg
new file mode 100644
index 00000000..20c17048
--- /dev/null
+++ b/assets/icons/sprite/user.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/user_rp.svg b/assets/icons/sprite/user_rp.svg
new file mode 100644
index 00000000..be56639c
--- /dev/null
+++ b/assets/icons/sprite/user_rp.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/view.svg b/assets/icons/sprite/view.svg
new file mode 100644
index 00000000..c8a78b5f
--- /dev/null
+++ b/assets/icons/sprite/view.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/vip_1.svg b/assets/icons/sprite/vip_1.svg
new file mode 100644
index 00000000..14da28b7
--- /dev/null
+++ b/assets/icons/sprite/vip_1.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/vip_2.svg b/assets/icons/sprite/vip_2.svg
new file mode 100644
index 00000000..061e00db
--- /dev/null
+++ b/assets/icons/sprite/vip_2.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/vk-color.svg b/assets/icons/sprite/vk-color.svg
new file mode 100644
index 00000000..7ecb2819
--- /dev/null
+++ b/assets/icons/sprite/vk-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/wallet-color.svg b/assets/icons/sprite/wallet-color.svg
new file mode 100644
index 00000000..a9498afb
--- /dev/null
+++ b/assets/icons/sprite/wallet-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/wallet.svg b/assets/icons/sprite/wallet.svg
new file mode 100644
index 00000000..5c4f3aae
--- /dev/null
+++ b/assets/icons/sprite/wallet.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/weibo-color.svg b/assets/icons/sprite/weibo-color.svg
new file mode 100644
index 00000000..1aa72f4a
--- /dev/null
+++ b/assets/icons/sprite/weibo-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/weiyun.svg b/assets/icons/sprite/weiyun.svg
new file mode 100644
index 00000000..aa492af1
--- /dev/null
+++ b/assets/icons/sprite/weiyun.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/whatsapp-color.svg b/assets/icons/sprite/whatsapp-color.svg
new file mode 100644
index 00000000..11becb44
--- /dev/null
+++ b/assets/icons/sprite/whatsapp-color.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/xiaohongshu.svg b/assets/icons/sprite/xiaohongshu.svg
new file mode 100644
index 00000000..c4c66bb5
--- /dev/null
+++ b/assets/icons/sprite/xiaohongshu.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/xiaomi.svg b/assets/icons/sprite/xiaomi.svg
new file mode 100644
index 00000000..3f48e970
--- /dev/null
+++ b/assets/icons/sprite/xiaomi.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/xunlei.svg b/assets/icons/sprite/xunlei.svg
new file mode 100644
index 00000000..0a26fb17
--- /dev/null
+++ b/assets/icons/sprite/xunlei.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/yidongyun.svg b/assets/icons/sprite/yidongyun.svg
new file mode 100644
index 00000000..0b185d45
--- /dev/null
+++ b/assets/icons/sprite/yidongyun.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/sprite/zhihu.svg b/assets/icons/sprite/zhihu.svg
new file mode 100644
index 00000000..3aed1b33
--- /dev/null
+++ b/assets/icons/sprite/zhihu.svg
@@ -0,0 +1 @@
+
diff --git a/assets/js/runtime/svg-icon.js b/assets/js/runtime/svg-icon.js
index cdec16a9..169580b3 100644
--- a/assets/js/runtime/svg-icon.js
+++ b/assets/js/runtime/svg-icon.js
@@ -1,119 +1,121 @@
+/* Generated by tools/build-svg-sprite.mjs from assets/icons/sprite/*.svg — do not edit by hand. */
'use strict';
var aksrt_svgs = [];
-aksrt_svgs['like'] = '';
-aksrt_svgs['view'] = '';
-aksrt_svgs['comment'] = '';
-aksrt_svgs['time'] = '';
-aksrt_svgs['search'] = '';
-aksrt_svgs['tags'] = '';
-aksrt_svgs['right'] = '';
-aksrt_svgs['left'] = '';
-aksrt_svgs['reply'] = '';
-aksrt_svgs['circle'] = '';
-aksrt_svgs['add'] = '';
-aksrt_svgs['minus'] = '';
+aksrt_svgs['123pan'] = '';
+aksrt_svgs['360yunpan'] = '';
+aksrt_svgs['add-color'] = '';
aksrt_svgs['add-ring'] = '';
-aksrt_svgs['post'] = '';
-aksrt_svgs['favorite'] = '';
-aksrt_svgs['menu'] = '';
-aksrt_svgs['d-qq'] = '';
-aksrt_svgs['d-weibo'] = '';
-aksrt_svgs['d-wechat'] = '';
-aksrt_svgs['d-email'] = '';
-aksrt_svgs['user'] = '';
-aksrt_svgs['theme'] = '';
-aksrt_svgs['signout'] = '';
-aksrt_svgs['set'] = '';
-aksrt_svgs['signup'] = '';
-aksrt_svgs['user_rp'] = '';
-aksrt_svgs['close'] = '';
-aksrt_svgs['pan_baidu'] = '';
-aksrt_svgs['weiyun'] = '';
-aksrt_svgs['lanzou'] = '';
-aksrt_svgs['tianyi'] = '';
-aksrt_svgs['ctfile'] = '';
-aksrt_svgs['vip_2'] = '';
-aksrt_svgs['vip_1'] = '';
-aksrt_svgs['menu_2'] = '';
+aksrt_svgs['add'] = '';
+aksrt_svgs['alipan'] = '';
aksrt_svgs['alipay'] = '';
+aksrt_svgs['apple'] = '';
+aksrt_svgs['approve'] = '';
aksrt_svgs['baidu'] = '';
-aksrt_svgs['gitee'] = '';
+aksrt_svgs['bilibili'] = '';
+aksrt_svgs['book-color'] = '';
+aksrt_svgs['cart-color'] = '';
+aksrt_svgs['check-circle'] = '';
+aksrt_svgs['circle'] = '';
+aksrt_svgs['close'] = '';
+aksrt_svgs['comment-color'] = '';
aksrt_svgs['comment-fill'] = '';
+aksrt_svgs['comment'] = '';
+aksrt_svgs['copy-color'] = '';
+aksrt_svgs['ctfile'] = '';
+aksrt_svgs['d-email'] = '';
+aksrt_svgs['d-qq'] = '';
+aksrt_svgs['d-wechat'] = '';
+aksrt_svgs['d-weibo'] = '';
+aksrt_svgs['deduct-points'] = '';
+aksrt_svgs['dingtalk'] = '';
+aksrt_svgs['douyin'] = '';
+aksrt_svgs['extra-points'] = '';
+aksrt_svgs['facebook-color'] = '';
+aksrt_svgs['favorite'] = '';
+aksrt_svgs['gift-color'] = '';
+aksrt_svgs['gift'] = '';
+aksrt_svgs['gitee'] = '';
+aksrt_svgs['google-color'] = '';
+aksrt_svgs['handbag'] = '';
+aksrt_svgs['home-color'] = '';
aksrt_svgs['hot-fill'] = '';
aksrt_svgs['hot'] = '';
-aksrt_svgs['topping'] = '';
-aksrt_svgs['topic'] = '';
-aksrt_svgs['plate-fill'] = '<';
-aksrt_svgs['extra-points'] = '';
-aksrt_svgs['deduct-points'] = '';
-aksrt_svgs['share'] = '';
-aksrt_svgs['approve'] = '';
-aksrt_svgs['qzone-color'] = '';
-aksrt_svgs['qq-color'] = '';
-aksrt_svgs['weibo-color'] = '';
-aksrt_svgs['poster-color'] = '';
-aksrt_svgs['copy-color'] = '';
-aksrt_svgs['facebook-color'] = '';
-aksrt_svgs['twitter-color'] = '';
-aksrt_svgs['telegram-color'] = '';
-aksrt_svgs['whatsapp-color'] = '';
-aksrt_svgs['linkedin-color'] = '';
-aksrt_svgs['reddit-color'] = '';
-aksrt_svgs['line-color'] = '';
-aksrt_svgs['vk-color'] = '';
-aksrt_svgs['user-auth'] = '';
-aksrt_svgs['money'] = '';
-aksrt_svgs['money-color'] = '';
-aksrt_svgs['order-color'] = '';
-aksrt_svgs['user-color'] = '';
-aksrt_svgs['user-color-2'] = '';
-aksrt_svgs['gift-color'] = '';
-aksrt_svgs['security-color'] = '';
-aksrt_svgs['trend-color'] = '';
-aksrt_svgs['msg-color'] = '';
-aksrt_svgs['shop-color'] = '';
-aksrt_svgs['home-color'] = '';
-aksrt_svgs['add-color'] = '';
-aksrt_svgs['tag-color'] = ' ';
-aksrt_svgs['ontop-color'] = '';
-aksrt_svgs['comment-color'] = '';
-aksrt_svgs['wallet-color'] = '';
-aksrt_svgs['book-color'] = '';
-aksrt_svgs['posts'] = '';
-aksrt_svgs['points'] = '';
-aksrt_svgs['points-color'] = '';
-aksrt_svgs['money-color-2'] = '';
-aksrt_svgs['merchant-color'] = '';
-aksrt_svgs['medal-color'] = '';
-aksrt_svgs['dingtalk'] = '';
aksrt_svgs['huawei'] = '';
+aksrt_svgs['img-lists'] = '';
+aksrt_svgs['lanzou'] = '';
+aksrt_svgs['left'] = '';
+aksrt_svgs['like'] = '';
+aksrt_svgs['line-color'] = '';
+aksrt_svgs['linkedin-color'] = '';
+aksrt_svgs['manual-service'] = '';
+aksrt_svgs['medal-color'] = '';
+aksrt_svgs['menu'] = '';
+aksrt_svgs['menu_2'] = '';
+aksrt_svgs['merchant-color'] = '';
+aksrt_svgs['minus'] = '';
+aksrt_svgs['money-color-2'] = '';
+aksrt_svgs['money-color'] = '';
+aksrt_svgs['money'] = '';
+aksrt_svgs['msg-color'] = '';
+aksrt_svgs['ontop-color'] = '';
+aksrt_svgs['order-color'] = '';
+aksrt_svgs['pan_baidu'] = '';
+aksrt_svgs['plate-fill'] = '<';
+aksrt_svgs['points-color'] = '';
+aksrt_svgs['points'] = '';
+aksrt_svgs['post'] = '';
+aksrt_svgs['poster-color'] = '';
+aksrt_svgs['posts'] = '';
+aksrt_svgs['qq-color'] = '';
+aksrt_svgs['quark'] = '';
+aksrt_svgs['quick-reply'] = '';
+aksrt_svgs['qzone-color'] = '';
+aksrt_svgs['reddit-color'] = '';
+aksrt_svgs['reply'] = '';
+aksrt_svgs['return'] = '';
+aksrt_svgs['right'] = '';
+aksrt_svgs['search'] = '';
+aksrt_svgs['security-color'] = '';
+aksrt_svgs['set'] = '';
+aksrt_svgs['share'] = '';
+aksrt_svgs['shop-color'] = '';
+aksrt_svgs['shopping-cart'] = '';
+aksrt_svgs['signout'] = '';
+aksrt_svgs['signup'] = '';
+aksrt_svgs['stars'] = '';
+aksrt_svgs['tag-color'] = '';
+aksrt_svgs['tags'] = '';
+aksrt_svgs['telegram-color'] = '';
+aksrt_svgs['theme'] = '';
+aksrt_svgs['tianyi'] = '';
+aksrt_svgs['ticket-color'] = '';
+aksrt_svgs['time'] = '';
+aksrt_svgs['topic'] = '';
+aksrt_svgs['topping'] = '';
+aksrt_svgs['transit'] = '';
+aksrt_svgs['translate'] = '';
+aksrt_svgs['trend-color'] = '';
+aksrt_svgs['twitter-color'] = '';
+aksrt_svgs['ucpan'] = '';
+aksrt_svgs['user-auth'] = '';
+aksrt_svgs['user-color-2'] = '';
+aksrt_svgs['user-color'] = '';
+aksrt_svgs['user'] = '';
+aksrt_svgs['user_rp'] = '';
+aksrt_svgs['view'] = '';
+aksrt_svgs['vip_1'] = '';
+aksrt_svgs['vip_2'] = '';
+aksrt_svgs['vk-color'] = '';
+aksrt_svgs['wallet-color'] = '';
+aksrt_svgs['wallet'] = '';
+aksrt_svgs['weibo-color'] = '';
+aksrt_svgs['weiyun'] = '';
+aksrt_svgs['whatsapp-color'] = '';
+aksrt_svgs['xiaohongshu'] = '';
aksrt_svgs['xiaomi'] = '';
aksrt_svgs['xunlei'] = '';
-aksrt_svgs['123pan'] = '';
-aksrt_svgs['alipan'] = '';
-aksrt_svgs['quark'] = '';
-aksrt_svgs['360yunpan'] = '';
-aksrt_svgs['quick-reply'] = '';
-aksrt_svgs['xiaohongshu'] = '';
-aksrt_svgs['zhihu'] = '';
-aksrt_svgs['douyin'] = '';
-aksrt_svgs['bilibili'] = '';
-aksrt_svgs['manual-service'] = '';
-aksrt_svgs['cart-color'] = '';
-aksrt_svgs['stars'] = '';
-aksrt_svgs['check-circle'] = '';
-aksrt_svgs['shopping-cart'] = '';
-aksrt_svgs['img-lists'] = '';
-aksrt_svgs['wallet'] = '';
-aksrt_svgs['gift'] = '';
-aksrt_svgs['transit'] = '';
-aksrt_svgs['return'] = '';
-aksrt_svgs['handbag'] = '';
-aksrt_svgs['ucpan'] = '';
aksrt_svgs['yidongyun'] = '';
-aksrt_svgs['translate'] = '';
-aksrt_svgs['google-color'] = '';
-aksrt_svgs['apple'] = '';
+aksrt_svgs['zhihu'] = '';
function show_svg() {
jQuery('[data-svg]').each(function () {
diff --git a/inc/helpers/user-center-renderers/sidebar-nav.php b/inc/helpers/user-center-renderers/sidebar-nav.php
index 74e1a9ea..7e6f25af 100644
--- a/inc/helpers/user-center-renderers/sidebar-nav.php
+++ b/inc/helpers/user-center-renderers/sidebar-nav.php
@@ -41,7 +41,7 @@ $services = array_values(array_filter([
],
[
'label' => __('工单中心', 'aksrt'),
- 'icon' => 'manual-service',
+ 'icon' => 'ticket-color',
'url' => $tickets_url,
'tab' => 'tickets',
],
diff --git a/tests/widget-system/ticket-schema-contract.test.cjs b/tests/widget-system/ticket-schema-contract.test.cjs
index bb3c90fc..e6efff01 100644
--- a/tests/widget-system/ticket-schema-contract.test.cjs
+++ b/tests/widget-system/ticket-schema-contract.test.cjs
@@ -155,7 +155,7 @@ test('ticket panel is registered across the user-center wiring', () => {
const sidebar = read('inc/helpers/user-center-renderers/sidebar-nav.php');
assert.ok(sidebar.includes("'label' => __('工单中心', 'aksrt')"), 'sidebar label missing');
- assert.ok(sidebar.includes("'icon' => 'manual-service'"), 'sidebar icon should reuse the existing headset sprite');
+ assert.ok(sidebar.includes("'icon' => 'ticket-color'"), 'sidebar icon should use the built-in ticket sprite');
assert.ok(sidebar.includes("'tab' => 'tickets'"), 'sidebar tab key missing');
const helper = read('inc/helpers/aksrt-user-center.php');
diff --git a/tests/widget-system/user-center-sidebar-icons-contract.test.cjs b/tests/widget-system/user-center-sidebar-icons-contract.test.cjs
index 4a43c566..d73ac221 100644
--- a/tests/widget-system/user-center-sidebar-icons-contract.test.cjs
+++ b/tests/widget-system/user-center-sidebar-icons-contract.test.cjs
@@ -78,9 +78,13 @@ test('其余侧栏部件按参考主题选型替换为 sprite 图标', () => {
assert.match(creator, /class="mb10-sm zib-widget padding-10 flex1 pointer"/);
assert.match(creator, /flex ab jsb col-ml6/);
assert.match(creator, / {
const sprite = read('assets/js/runtime/svg-icon.js');
const keys = [
'trend-color', 'user-auth', 'order-color', 'msg-color', 'user-color', 'security-color',
- 'money-color-2', 'points-color', 'merchant-color', 'money-color', 'vip_1', 'time', 'menu', 'right',
+ 'money-color-2', 'points-color', 'merchant-color', 'money-color', 'vip_1', 'time', 'menu', 'right', 'ticket-color',
];
for (const key of keys) {
assert.match(sprite, new RegExp(`aksrt_svgs\\['${key}'\\]\\s*=`), `sprite key missing: ${key}`);
diff --git a/tools/build-svg-sprite.mjs b/tools/build-svg-sprite.mjs
new file mode 100644
index 00000000..f5ae077b
--- /dev/null
+++ b/tools/build-svg-sprite.mjs
@@ -0,0 +1,97 @@
+#!/usr/bin/env node
+/**
+ * Build the frontend SVG sprite from the single source of truth.
+ *
+ * Source: assets/icons/sprite/{key}.svg — one 1024x1024 icon per file.
+ * The file name (without .svg) is the sprite key used by
+ * aksrt_icon_markup('zibsvg-{key}') and