diff --git a/web-ui/components.d.ts b/web-ui/components.d.ts
index b6cbf09d4926278565afa94b577f480f47731aab..7a83e47d37bf379261489b7b42e67815083ae3f0 100644
--- a/web-ui/components.d.ts
+++ b/web-ui/components.d.ts
@@ -4,6 +4,7 @@
declare module 'vue' {
export interface GlobalComponents {
+ AppContent: typeof import('./src/components/AppContent.vue')['default']
AppFooter: typeof import('./src/components/AppFooter.vue')['default']
AppHeader: typeof import('./src/components/AppHeader.vue')['default']
ElOption: typeof import('element-plus/es')['ElOption']
diff --git a/web-ui/pnpm-lock.yaml b/web-ui/pnpm-lock.yaml
index 2a8da15a47fefd393552be1784c376bc57d2fbf6..645a81da90cbc636624e665f1f46eea07a6fd12c 100644
--- a/web-ui/pnpm-lock.yaml
+++ b/web-ui/pnpm-lock.yaml
@@ -1,4 +1,4 @@
-lockfileVersion: 5.3
+lockfileVersion: 5.4
specifiers:
'@types/lodash-es': ^4.17.6
@@ -29,18 +29,18 @@ dependencies:
axios: 0.26.1
element-plus: 2.2.0_vue@3.2.33
normalize.css: 8.0.1
- pinia: 2.0.14_typescript@4.6.4+vue@3.2.33
+ pinia: 2.0.14_ytvqwwdyss532bvoq2clv4ed5m
vue: 3.2.33
vue-router: 4.0.13_vue@3.2.33
devDependencies:
'@types/lodash-es': 4.17.6
'@types/node': 17.0.34
- '@typescript-eslint/eslint-plugin': 5.24.0_b7082f82c31c8938795d79ce8f1e88a5
- '@typescript-eslint/parser': 5.24.0_eslint@8.15.0+typescript@4.6.4
+ '@typescript-eslint/eslint-plugin': 5.24.0_w4ec7awddsetq6k5phhi6huiuu
+ '@typescript-eslint/parser': 5.24.0_hcfsmds2fshutdssjqluwm76uu
'@vitejs/plugin-vue': 2.3.3_vite@2.9.9+vue@3.2.33
- '@vue/eslint-config-prettier': 7.0.0_eslint@8.15.0+prettier@2.6.2
- '@vue/eslint-config-typescript': 10.0.0_7f105dc3ebd31cec885fdbbd30d5cc4c
+ '@vue/eslint-config-prettier': 7.0.0_bppm6sp3oxoychvfagx6tcd7pe
+ '@vue/eslint-config-typescript': 10.0.0_p4if3q7l2moozcc73o6tbvomjq
eslint: 8.15.0
eslint-plugin-vue: 8.7.1_eslint@8.15.0
prettier: 2.6.2
@@ -61,12 +61,13 @@ packages:
/@babel/helper-validator-identifier/7.16.7:
resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/parser/7.17.12:
resolution: {integrity: sha512-FLzHmN9V3AJIrWfOpvRlZCeVg/WLdicSnTMsLur6uDj9TT8ymUlG9XxURdW/XvuygK+2CW0poOJABdA4m/YKxA==}
engines: {node: '>=6.0.0'}
hasBin: true
+ dependencies:
+ '@babel/types': 7.17.12
/@babel/types/7.17.12:
resolution: {integrity: sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==}
@@ -74,7 +75,6 @@ packages:
dependencies:
'@babel/helper-validator-identifier': 7.16.7
to-fast-properties: 2.0.0
- dev: true
/@ctrl/tinycolor/3.4.1:
resolution: {integrity: sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==}
@@ -207,7 +207,7 @@ packages:
'@types/node': 17.0.34
dev: true
- /@typescript-eslint/eslint-plugin/5.24.0_b7082f82c31c8938795d79ce8f1e88a5:
+ /@typescript-eslint/eslint-plugin/5.24.0_w4ec7awddsetq6k5phhi6huiuu:
resolution: {integrity: sha512-6bqFGk6wa9+6RrU++eLknKyDqXU1Oc8nyoLu5a1fU17PNRJd9UBr56rMF7c4DRaRtnarlkQ4jwxUbvBo8cNlpw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -218,10 +218,10 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/parser': 5.24.0_eslint@8.15.0+typescript@4.6.4
+ '@typescript-eslint/parser': 5.24.0_hcfsmds2fshutdssjqluwm76uu
'@typescript-eslint/scope-manager': 5.24.0
- '@typescript-eslint/type-utils': 5.24.0_eslint@8.15.0+typescript@4.6.4
- '@typescript-eslint/utils': 5.24.0_eslint@8.15.0+typescript@4.6.4
+ '@typescript-eslint/type-utils': 5.24.0_hcfsmds2fshutdssjqluwm76uu
+ '@typescript-eslint/utils': 5.24.0_hcfsmds2fshutdssjqluwm76uu
debug: 4.3.4
eslint: 8.15.0
functional-red-black-tree: 1.0.1
@@ -234,7 +234,7 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/parser/5.24.0_eslint@8.15.0+typescript@4.6.4:
+ /@typescript-eslint/parser/5.24.0_hcfsmds2fshutdssjqluwm76uu:
resolution: {integrity: sha512-4q29C6xFYZ5B2CXqSBBdcS0lPyfM9M09DoQLtHS5kf+WbpV8pBBhHDLNhXfgyVwFnhrhYzOu7xmg02DzxeF2Uw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -262,7 +262,7 @@ packages:
'@typescript-eslint/visitor-keys': 5.24.0
dev: true
- /@typescript-eslint/type-utils/5.24.0_eslint@8.15.0+typescript@4.6.4:
+ /@typescript-eslint/type-utils/5.24.0_hcfsmds2fshutdssjqluwm76uu:
resolution: {integrity: sha512-uGi+sQiM6E5CeCZYBXiaIvIChBXru4LZ1tMoeKbh1Lze+8BO9syUG07594C4lvN2YPT4KVeIupOJkVI+9/DAmQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -272,7 +272,7 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/utils': 5.24.0_eslint@8.15.0+typescript@4.6.4
+ '@typescript-eslint/utils': 5.24.0_hcfsmds2fshutdssjqluwm76uu
debug: 4.3.4
eslint: 8.15.0
tsutils: 3.21.0_typescript@4.6.4
@@ -307,7 +307,7 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/utils/5.24.0_eslint@8.15.0+typescript@4.6.4:
+ /@typescript-eslint/utils/5.24.0_hcfsmds2fshutdssjqluwm76uu:
resolution: {integrity: sha512-K05sbWoeCBJH8KXu6hetBJ+ukG0k2u2KlgD3bN+v+oBKm8adJqVHpSSLHNzqyuv0Lh4GVSAUgZ5lB4icmPmWLw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@@ -432,20 +432,18 @@ packages:
magic-string: 0.25.9
postcss: 8.4.13
source-map: 0.6.1
- dev: false
/@vue/compiler-ssr/3.2.33:
resolution: {integrity: sha512-XQh1Xdk3VquDpXsnoCd7JnMoWec9CfAzQDQsaMcSU79OrrO2PNR0ErlIjm/mGq3GmBfkQjzZACV+7GhfRB8xMQ==}
dependencies:
'@vue/compiler-dom': 3.2.33
'@vue/shared': 3.2.33
- dev: false
/@vue/devtools-api/6.1.4:
resolution: {integrity: sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==}
dev: false
- /@vue/eslint-config-prettier/7.0.0_eslint@8.15.0+prettier@2.6.2:
+ /@vue/eslint-config-prettier/7.0.0_bppm6sp3oxoychvfagx6tcd7pe:
resolution: {integrity: sha512-/CTc6ML3Wta1tCe1gUeO0EYnVXfo3nJXsIhZ8WJr3sov+cGASr6yuiibJTL6lmIBm7GobopToOuB3B6AWyV0Iw==}
peerDependencies:
eslint: '>= 7.28.0'
@@ -453,25 +451,29 @@ packages:
dependencies:
eslint: 8.15.0
eslint-config-prettier: 8.5.0_eslint@8.15.0
- eslint-plugin-prettier: 4.0.0_440b30a60bbe5bb6e3ad0057150b2782
+ eslint-plugin-prettier: 4.0.0_iqftbjqlxzn3ny5nablrkczhqi
prettier: 2.6.2
dev: true
- /@vue/eslint-config-typescript/10.0.0_7f105dc3ebd31cec885fdbbd30d5cc4c:
+ /@vue/eslint-config-typescript/10.0.0_p4if3q7l2moozcc73o6tbvomjq:
resolution: {integrity: sha512-F94cL8ug3FaYXlCfU5/wiGjk1qeadmoBpRGAOBq+qre3Smdupa59dd6ZJrsfRODpsMPyTG7330juMDsUvpZ3Rw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
eslint-plugin-vue: ^8.0.1
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
dependencies:
- '@typescript-eslint/eslint-plugin': 5.24.0_b7082f82c31c8938795d79ce8f1e88a5
- '@typescript-eslint/parser': 5.24.0_eslint@8.15.0+typescript@4.6.4
+ '@typescript-eslint/eslint-plugin': 5.24.0_w4ec7awddsetq6k5phhi6huiuu
+ '@typescript-eslint/parser': 5.24.0_hcfsmds2fshutdssjqluwm76uu
eslint: 8.15.0
eslint-plugin-vue: 8.7.1_eslint@8.15.0
+ typescript: 4.6.4
vue-eslint-parser: 8.3.0_eslint@8.15.0
transitivePeerDependencies:
- supports-color
- - typescript
dev: true
/@vue/reactivity-transform/3.2.33:
@@ -482,7 +484,6 @@ packages:
'@vue/shared': 3.2.33
estree-walker: 2.0.2
magic-string: 0.25.9
- dev: false
/@vue/reactivity/3.2.33:
resolution: {integrity: sha512-62Sq0mp9/0bLmDuxuLD5CIaMG2susFAGARLuZ/5jkU1FCf9EDbwUuF+BO8Ub3Rbodx0ziIecM/NsmyjardBxfQ==}
@@ -494,7 +495,6 @@ packages:
dependencies:
'@vue/reactivity': 3.2.33
'@vue/shared': 3.2.33
- dev: false
/@vue/runtime-dom/3.2.33:
resolution: {integrity: sha512-LSrJ6W7CZTSUygX5s8aFkraDWlO6K4geOwA3quFF2O+hC3QuAMZt/0Xb7JKE3C4JD4pFwCSO7oCrZmZ0BIJUnw==}
@@ -502,7 +502,6 @@ packages:
'@vue/runtime-core': 3.2.33
'@vue/shared': 3.2.33
csstype: 2.6.20
- dev: false
/@vue/server-renderer/3.2.33_vue@3.2.33:
resolution: {integrity: sha512-4jpJHRD4ORv8PlbYi+/MfP8ec1okz6rybe36MdpkDrGIdEItHEUyaHSKvz+ptNEyQpALmmVfRteHkU9F8vxOew==}
@@ -512,7 +511,6 @@ packages:
'@vue/compiler-ssr': 3.2.33
'@vue/shared': 3.2.33
vue: 3.2.33
- dev: false
/@vue/shared/3.2.33:
resolution: {integrity: sha512-UBc1Pg1T3yZ97vsA2ueER0F6GbJebLHYlEi4ou1H5YL4KWvMOOWwpYo9/QpWq93wxKG6Wo13IY74Hcn/f7c7Bg==}
@@ -740,6 +738,8 @@ packages:
snapdragon-node: 2.1.1
split-string: 3.1.0
to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
dev: true
/braces/3.0.2:
@@ -930,7 +930,6 @@ packages:
/csstype/2.6.20:
resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==}
- dev: false
/dayjs/1.11.2:
resolution: {integrity: sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw==}
@@ -938,6 +937,11 @@ packages:
/debug/2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
dependencies:
ms: 2.0.0
dev: true
@@ -1071,7 +1075,7 @@ packages:
escape-html: 1.0.3
lodash: 4.17.21
lodash-es: 4.17.21
- lodash-unified: 1.0.2_da03a4540fbd16bbaafbb96724306afd
+ lodash-unified: 1.0.2_3ib2ivapxullxkx3xftsimdk7u
memoize-one: 6.0.0
normalize-wheel-es: 1.1.2
vue: 3.2.33
@@ -1335,7 +1339,7 @@ packages:
eslint: 8.15.0
dev: true
- /eslint-plugin-prettier/4.0.0_440b30a60bbe5bb6e3ad0057150b2782:
+ /eslint-plugin-prettier/4.0.0_iqftbjqlxzn3ny5nablrkczhqi:
resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==}
engines: {node: '>=6.0.0'}
peerDependencies:
@@ -1506,6 +1510,8 @@ packages:
regex-not: 1.0.2
snapdragon: 0.8.2
to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
dev: true
/extend-shallow/2.0.1:
@@ -1535,6 +1541,8 @@ packages:
regex-not: 1.0.2
snapdragon: 0.8.2
to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
dev: true
/fast-deep-equal/3.1.3:
@@ -2107,7 +2115,7 @@ packages:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
dev: false
- /lodash-unified/1.0.2_da03a4540fbd16bbaafbb96724306afd:
+ /lodash-unified/1.0.2_3ib2ivapxullxkx3xftsimdk7u:
resolution: {integrity: sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g==}
peerDependencies:
'@types/lodash-es': '*'
@@ -2137,7 +2145,6 @@ packages:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
dependencies:
sourcemap-codec: 1.4.8
- dev: false
/magic-string/0.26.2:
resolution: {integrity: sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==}
@@ -2195,6 +2202,8 @@ packages:
regex-not: 1.0.2
snapdragon: 0.8.2
to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
dev: true
/micromatch/4.0.5:
@@ -2258,6 +2267,8 @@ packages:
regex-not: 1.0.2
snapdragon: 0.8.2
to-regex: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
dev: true
/natural-compare/1.4.0:
@@ -2372,7 +2383,7 @@ packages:
engines: {node: '>=8.6'}
dev: true
- /pinia/2.0.14_typescript@4.6.4+vue@3.2.33:
+ /pinia/2.0.14_ytvqwwdyss532bvoq2clv4ed5m:
resolution: {integrity: sha512-0nPuZR4TetT/WcLN+feMSjWJku3SQU7dBbXC6uw+R6FLQJCsg+/0pzXyD82T1FmAYe0lsx+jnEDQ1BLgkRKlxA==}
peerDependencies:
'@vue/composition-api': ^1.4.0
@@ -2772,6 +2783,8 @@ packages:
source-map: 0.5.7
source-map-resolve: 0.5.3
use: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
dev: true
/source-map-js/1.0.2:
@@ -2895,6 +2908,8 @@ packages:
posthtml-svg-mode: 1.0.3
query-string: 4.3.4
traverse: 0.6.6
+ transitivePeerDependencies:
+ - supports-color
dev: true
/svgo/2.8.0:
@@ -2918,7 +2933,6 @@ packages:
/to-fast-properties/2.0.0:
resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=}
engines: {node: '>=4'}
- dev: true
/to-object-path/0.3.0:
resolution: {integrity: sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=}
@@ -2990,7 +3004,6 @@ packages:
resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==}
engines: {node: '>=4.2.0'}
hasBin: true
- dev: true
/union-value/1.0.1:
resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
@@ -3349,7 +3362,6 @@ packages:
'@vue/runtime-dom': 3.2.33
'@vue/server-renderer': 3.2.33_vue@3.2.33
'@vue/shared': 3.2.33
- dev: false
/webpack-virtual-modules/0.4.3:
resolution: {integrity: sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==}
diff --git a/web-ui/src/assets/footer-img/atom-mo.png b/web-ui/src/assets/footer-img/atom-mo.png
deleted file mode 100644
index 9aa3dda40b4e97203e1e1d3f019f720dc6783651..0000000000000000000000000000000000000000
Binary files a/web-ui/src/assets/footer-img/atom-mo.png and /dev/null differ
diff --git a/web-ui/src/assets/footer-img/atom-pc.png b/web-ui/src/assets/footer-img/atom-pc.png
deleted file mode 100644
index a5feafdd08c47ed32452b9ad23364bf28f1df44d..0000000000000000000000000000000000000000
Binary files a/web-ui/src/assets/footer-img/atom-pc.png and /dev/null differ
diff --git a/web-ui/src/assets/footer-img/footer-logo2.svg b/web-ui/src/assets/footer-img/footer-logo2.svg
deleted file mode 100644
index 3023ab1a3288d82157f84cff4cc68dc3cf861fc1..0000000000000000000000000000000000000000
--- a/web-ui/src/assets/footer-img/footer-logo2.svg
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
\ No newline at end of file
diff --git a/web-ui/src/assets/footer-img/qrcode.png b/web-ui/src/assets/footer-img/qrcode.png
deleted file mode 100644
index ea524b978506fb77676aee485d468f2af3abd51a..0000000000000000000000000000000000000000
Binary files a/web-ui/src/assets/footer-img/qrcode.png and /dev/null differ
diff --git a/web-ui/src/assets/footer/51cto.png b/web-ui/src/assets/footer/51cto.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad23c8864144205ec040b464cd9f27ce63d2a2d8
Binary files /dev/null and b/web-ui/src/assets/footer/51cto.png differ
diff --git a/web-ui/src/assets/footer/atom-logo.png b/web-ui/src/assets/footer/atom-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e7589c44ee9927abb9d95aee92a7c1132dab068
Binary files /dev/null and b/web-ui/src/assets/footer/atom-logo.png differ
diff --git a/web-ui/src/assets/footer/atom-logo.svg b/web-ui/src/assets/footer/atom-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0cce03d0379659ecc5f3ec9113f747633ec0f287
--- /dev/null
+++ b/web-ui/src/assets/footer/atom-logo.svg
@@ -0,0 +1,16 @@
+
+
\ No newline at end of file
diff --git a/web-ui/src/assets/footer/bilibili.png b/web-ui/src/assets/footer/bilibili.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7c07526ce6be5b436aa14774af78ff29c9a407b
Binary files /dev/null and b/web-ui/src/assets/footer/bilibili.png differ
diff --git a/web-ui/src/assets/footer/code-xzs.png b/web-ui/src/assets/footer/code-xzs.png
new file mode 100644
index 0000000000000000000000000000000000000000..e78a9836a8e294921ad2da821bdb9daa384e87d9
Binary files /dev/null and b/web-ui/src/assets/footer/code-xzs.png differ
diff --git a/web-ui/src/assets/footer/code-zgz.png b/web-ui/src/assets/footer/code-zgz.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba38aaee5973fac8246cfa37ff0f1d5bc92e193d
Binary files /dev/null and b/web-ui/src/assets/footer/code-zgz.png differ
diff --git a/web-ui/src/assets/footer/csdn.png b/web-ui/src/assets/footer/csdn.png
new file mode 100644
index 0000000000000000000000000000000000000000..f4fd71d08f709f03832ceb8889154d75b2556ff0
Binary files /dev/null and b/web-ui/src/assets/footer/csdn.png differ
diff --git a/web-ui/src/assets/footer/footer-bg-mo.png b/web-ui/src/assets/footer/footer-bg-mo.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e527ca485015a15ad0fb0f497ef9f43053092d8
Binary files /dev/null and b/web-ui/src/assets/footer/footer-bg-mo.png differ
diff --git a/web-ui/src/assets/footer/footer-bg.png b/web-ui/src/assets/footer/footer-bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..7d1337c78284795708a7108be3999001a2adc279
Binary files /dev/null and b/web-ui/src/assets/footer/footer-bg.png differ
diff --git a/web-ui/src/assets/footer/footer-bg1.png b/web-ui/src/assets/footer/footer-bg1.png
new file mode 100644
index 0000000000000000000000000000000000000000..be4dbf4cecb7cbceac40a69a74f6b631c637129f
Binary files /dev/null and b/web-ui/src/assets/footer/footer-bg1.png differ
diff --git a/web-ui/src/assets/footer/footer-logo1.png b/web-ui/src/assets/footer/footer-logo1.png
new file mode 100644
index 0000000000000000000000000000000000000000..80f97536b255acb11f11412c2ee3b3a836e21a43
Binary files /dev/null and b/web-ui/src/assets/footer/footer-logo1.png differ
diff --git a/web-ui/src/assets/footer/footer-logo2.png b/web-ui/src/assets/footer/footer-logo2.png
new file mode 100644
index 0000000000000000000000000000000000000000..a7a1f28ff53132ca991eb82e7ee5a0f9af2498a9
Binary files /dev/null and b/web-ui/src/assets/footer/footer-logo2.png differ
diff --git a/web-ui/src/assets/footer/img-gzh.png b/web-ui/src/assets/footer/img-gzh.png
new file mode 100644
index 0000000000000000000000000000000000000000..afc3f345e603e73aa297c656ee2e15b085945b18
Binary files /dev/null and b/web-ui/src/assets/footer/img-gzh.png differ
diff --git a/web-ui/src/assets/footer/img-xzs.png b/web-ui/src/assets/footer/img-xzs.png
new file mode 100644
index 0000000000000000000000000000000000000000..de17acbd32440e608d227645a2d9b4425cb0bda8
Binary files /dev/null and b/web-ui/src/assets/footer/img-xzs.png differ
diff --git a/web-ui/src/assets/footer/infoq.png b/web-ui/src/assets/footer/infoq.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1d02c1e374b67d79b2594713da02e353d529696
Binary files /dev/null and b/web-ui/src/assets/footer/infoq.png differ
diff --git a/web-ui/src/assets/footer/juejin.png b/web-ui/src/assets/footer/juejin.png
new file mode 100644
index 0000000000000000000000000000000000000000..245b8384eb0c7994cc42984ed749dd5046344017
Binary files /dev/null and b/web-ui/src/assets/footer/juejin.png differ
diff --git a/web-ui/src/assets/footer/logo.svg b/web-ui/src/assets/footer/logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..291baca7d896b6d9ed122e9574f880cc9da48463
--- /dev/null
+++ b/web-ui/src/assets/footer/logo.svg
@@ -0,0 +1,29 @@
+
+
\ No newline at end of file
diff --git a/web-ui/src/assets/footer/oschina.png b/web-ui/src/assets/footer/oschina.png
new file mode 100644
index 0000000000000000000000000000000000000000..1551d3b87509c33f0a7b1259581bfb9e9ccdd8ad
Binary files /dev/null and b/web-ui/src/assets/footer/oschina.png differ
diff --git a/web-ui/src/components/AppContent.vue b/web-ui/src/components/AppContent.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c6390b5e2bb9b183d8789c357926ec152fb77d83
--- /dev/null
+++ b/web-ui/src/components/AppContent.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
diff --git a/web-ui/src/components/AppFooter.vue b/web-ui/src/components/AppFooter.vue
index 361ad52f6f346a95f888016a1cd58fde69e49ba6..5933a492874a0ae3096f3813454a32447bcb7818 100644
--- a/web-ui/src/components/AppFooter.vue
+++ b/web-ui/src/components/AppFooter.vue
@@ -1,199 +1,495 @@
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/web-ui/src/main.ts b/web-ui/src/main.ts
index 4854bb3b958ff6606a9ef98402f50d852fb862c6..abc858580c38df66fd1ea7183132a998b6a96ec0 100644
--- a/web-ui/src/main.ts
+++ b/web-ui/src/main.ts
@@ -1,14 +1,15 @@
-import 'virtual:svg-icons-register';
-import '@/shared/styles/base.scss';
-import '@/shared/styles/mixin.scss';
-import { createApp } from 'vue';
-import { createPinia } from 'pinia';
-import App from './App.vue';
-import { router } from './router';
-import SvgIcon from '@/components/SvgIcon.vue';
-
-const app = createApp(App);
-app.use(router);
-app.use(createPinia());
-app.component('SvgIcon', SvgIcon);
-app.mount('#app');
+import 'virtual:svg-icons-register';
+import '@/shared/styles/base.scss';
+import '@/shared/styles/mixin.scss';
+import '@/shared/styles/var.scss';
+import { createApp } from 'vue';
+import { createPinia } from 'pinia';
+import App from './App.vue';
+import { router } from './router';
+import SvgIcon from '@/components/SvgIcon.vue';
+
+const app = createApp(App);
+app.use(router);
+app.use(createPinia());
+app.component('SvgIcon', SvgIcon);
+app.mount('#app');
diff --git a/web-ui/src/shared/styles/_color.scss b/web-ui/src/shared/styles/_color.scss
new file mode 100644
index 0000000000000000000000000000000000000000..924c296729df675cb164de372b20bbacaf098f4a
--- /dev/null
+++ b/web-ui/src/shared/styles/_color.scss
@@ -0,0 +1,181 @@
+// 颜色
+:root {
+ /**
+ * 基础色盘
+ */
+
+ // 克莱因蓝
+ --o-color-kleinblue1: #000412;
+ --o-color-kleinblue2: #000827;
+ --o-color-kleinblue3: #0c2360;
+ --o-color-kleinblue4: #00288d;
+ --o-color-kleinblue5: #002fa7;
+ --o-color-kleinblue6: #0d3cb4;
+ --o-color-kleinblue7: #2555cd;
+ --o-color-kleinblue8: #406fe7;
+ --o-color-kleinblue9: #5988ff;
+ --o-color-kleinblue10: #b2c0e4;
+
+ // 中性色
+ --o-color-neutral1: #121212;
+ --o-color-neutral2: #151515;
+ --o-color-neutral3: #2d2d2d;
+ --o-color-neutral4: #3f3f3f;
+ --o-color-neutral5: #555555;
+ --o-color-neutral6: #707070;
+ --o-color-neutral7: #848484;
+ --o-color-neutral8: #999999;
+ --o-color-neutral9: #b2b2b2;
+ --o-color-neutral10: #cccccc;
+ --o-color-neutral11: #e5e5e5;
+
+ // 红色
+ --o-color-red1: #850d09;
+ --o-color-red2: #b4110c;
+ --o-color-red3: #e4160f;
+ --o-color-red4: #f13b35;
+ --o-color-red5: #f3524d;
+ --o-color-red6: #ff5f5a;
+ --o-color-red7: #ff7873;
+ --o-color-red8: #ff928d;
+ --o-color-red9: #ffaba6;
+ --o-color-red10: #ffd2af;
+
+ // 黄色
+ --o-color-yellow1: #754c01;
+ --o-color-yellow2: #a86d01;
+ --o-color-yellow3: #dabe01;
+ --o-color-yellow4: #feaa11;
+ --o-color-yellow5: #feb32a;
+ --o-color-yellow6: #ffc037;
+ --o-color-yellow7: #ffd950;
+ --o-color-yellow8: #fff36a;
+ --o-color-yellow9: #ffff83;
+ --o-color-yellow10: #ffe1aa;
+
+ // 绿色
+ --o-color-green1: #1f370f;
+ --o-color-green2: #355f1a;
+ --o-color-green3: #4b8725;
+ --o-color-green4: #62af30;
+ --o-color-green5: #6dc335;
+ --o-color-green6: #7ad042;
+ --o-color-green7: #93e95b;
+ --o-color-green8: #adff75;
+ --o-color-green9: #c6ff8e;
+ --o-color-green10: #c5e7ae;
+
+ // 橙色
+ --o-color-orange1: #9b370e;
+ --o-color-orange2: #b54f00;
+ --o-color-orange3: #e86600;
+ --o-color-orange4: #ff801c;
+ --o-color-orange5: #ff8e36;
+ --o-color-orange6: #ff9b43;
+ --o-color-orange7: #ffb45c;
+ --o-color-orange8: #ffce76;
+ --o-color-orange9: #ffcf8f;
+ --o-color-orange10: #ffd2af;
+
+ // 灰蓝色
+ --o-color-greyblue1: #e5e8f0;
+ --o-color-greyblue2: #f7f8fa;
+ --o-color-greyblue3: #f5f6f8;
+
+ // 灰黑色
+ --o-color-greyblack1: #1e1e1e;
+ --o-color-greyblack2: #242424;
+ --o-color-greyblack3: #2e2e2e;
+ --o-color-greyblack4: #383838;
+
+ // 白色
+ --o-color-white: #ffffff;
+
+ // 黑色
+ --o-color-black: #000000;
+
+ // 透明
+ --o-color-transparent: transparent;
+
+ /**
+ * 状态颜色 && 功能颜色
+ */
+
+ // 成功色
+ --o-color-success1: var(--o-color-green5); // normal
+ --o-color-success2: var(--o-color-green7); // hover
+ --o-color-success3: var(--o-color-green10); // disabled
+
+ // 告警色
+ --o-color-warning1: var(--o-color-orange5); // normal
+ --o-color-warning2: var(--o-color-orange7); // hover
+ --o-color-warning3: var(--o-color-orange10); // disabled
+
+ // 错误色
+ --o-color-error1: var(--o-color-red5); // normal
+ --o-color-error2: var(--o-color-red7); // hover
+ --o-color-error3: var(--o-color-red10); // disabled
+
+ // 品牌色
+ --o-color-brand1: var(--o-color-kleinblue5); // 常规、文字
+ --o-color-brand2: var(--o-color-kleinblue8); // 悬浮
+ --o-color-brand3: var(--o-color-kleinblue4); // 确认
+ --o-color-brand4: var(--o-color-kleinblue6); // 特殊场景
+ --o-color-brand5: var(--o-color-kleinblue10); // 一般禁用
+ --o-color-brand6: var(
+ --o-color-kleinblue10
+ ); // 文字禁用,暂和一般禁用保持一致
+
+ // 文字颜色
+ --o-color-text1: var(--o-color-black); // 强调/正文标题 黑色
+ --o-color-text2: var(--o-color-white); // 强调/正文标题 白色
+ --o-color-text3: var(--o-color-neutral4); // 次强调/正文标题
+ --o-color-text4: var(--o-color-neutral6); // 次要信息/正文
+ --o-color-text5: var(--o-color-neutral11); // 置灰信息
+ --o-color-text-secondary: var(--o-color-neutral6); // 次级文字颜色
+
+ // 背景色
+ --o-color-bg1: var(--o-color-greyblue3); // 整体背景色
+ --o-color-bg2: var(--o-color-white); // 一级容器背景色
+ --o-color-bg3: var(--o-color-greyblue2); // 二级容器背景色
+ --o-color-bg4: var(--o-color-greyblue1); // 三级容器背景色
+ --o-color-bg5: var(--o-color-white); // 弹出框、tooltip背景色
+ --o-color-bg6: rgba(0, 0, 0, 0.5); // 蒙层
+ --o-color-bg-secondary: var(--o-color-neutral11); // 次级颜色背景颜色
+
+ // 链接色
+ --o-color-link1: var(--o-color-kleinblue5); // 常规
+ --o-color-link2: var(--o-color-kleinblue8); // 悬浮
+ --o-color-link3: var(--o-color-kleinblue4); // 点击
+ --o-color-link4: var(--o-color-kleinblue6); // 特殊场景
+ --o-color-link5: var(--o-color-kleinblue10); // 一般禁用
+ --o-color-link6: var(--o-color-kleinblue10); // 文字禁用,暂和一般禁用保持一致
+
+ // 边框颜色
+ --o-color-border1: var(--o-color-neutral6);
+ --o-color-border2: var(--o-color-neutral11);
+ --o-color-border3: var(--o-color-kleinblue5);
+
+ // 分割线颜色
+ --o-color-division1: var(--o-color-neutral11);
+
+ // 填充色,用于阴影容器背景
+ --o-color-fill1: var(
+ --o-color-white
+ ); // SL1 一级投影容器背景,应用于默认状态的卡片、楼层、导航栏、组件里局部投影背景等
+ --o-color-fill2: var(
+ --o-color-white
+ ); // SL2 二级投影容器背景,应用于卡片、组件里局部投影等
+ --o-color-fill2_hover: var(
+ --o-color-white
+ ); // SL2-hover 升起投影容器背景,应用于悬停状态的卡片等,是SL2的激活态
+ --o-color-fill3: var(
+ --o-color-white
+ ); // SL3 三级投影容器背景,应用于一级投影上的卡片、组件等
+ --o-color-fill4: var(
+ --o-color-white
+ ); // SL4 覆盖阴影容器背景,应用于信息提示【tips、活动进入按钮等】等投影容器
+ --o-color-fill5: var(
+ --o-color-white
+ ); // SL5 弹出阴影容器背景,应用于模态弹窗投影
+}
diff --git a/web-ui/src/shared/styles/_font.scss b/web-ui/src/shared/styles/_font.scss
new file mode 100644
index 0000000000000000000000000000000000000000..56116fef4f7959919bfd44ce074a6761428aaa17
--- /dev/null
+++ b/web-ui/src/shared/styles/_font.scss
@@ -0,0 +1,26 @@
+// 字体
+:root {
+ // 字体font-size
+ --o-font-size-h1: 64px;
+ --o-font-size-h2: 54px;
+ --o-font-size-h3: 36px;
+ --o-font-size-h4: 28px;
+ --o-font-size-h5: 24px;
+ --o-font-size-h6: 20px;
+ --o-font-size-h7: 18px;
+ --o-font-size-h8: 16px;
+ --o-font-size-text: 14px;
+ --o-font-size-tip: 12px;
+
+ // 字体line-height
+ --o-line-height-h1: 84px;
+ --o-line-height-h2: 76px;
+ --o-line-height-h3: 48px;
+ --o-line-height-h4: 36px;
+ --o-line-height-h5: 32px;
+ --o-line-height-h6: 28px;
+ --o-line-height-h7: 26px;
+ --o-line-height-h8: 24px;
+ --o-line-height-text: 22px;
+ --o-line-height-tip: 18px;
+}
diff --git a/web-ui/src/shared/styles/_shadow.scss b/web-ui/src/shared/styles/_shadow.scss
new file mode 100644
index 0000000000000000000000000000000000000000..78dcd8d96a0a483060378c3cdb1dd4e6b7e80178
--- /dev/null
+++ b/web-ui/src/shared/styles/_shadow.scss
@@ -0,0 +1,9 @@
+// 阴影,注:SL2有hover投影
+:root {
+ --o-shadow-l1: 0 1px 5px rgba(45, 47, 51, 0.1); // SL1 一级投影,应用于楼层、导航栏、组件里局部投影等,
+ --o-shadow-l2: 0 1px 5px rgba(45, 47, 51, 0.1); // SL2-normal 二级投影,应用于卡片、组件里局部投影等
+ --o-shadow-l2_hover: 0 6px 18px rgba(0, 47, 167, 0.14); // SL2-hover 升起投影,应用于悬停状态的卡片等,是SL2的激活态
+ --o-shadow-l3: 0 6px 18px rgba(45, 47, 51, 0.14); // SL3 三级投影,应用于一级投影上的卡片、组件等
+ --o-shadow-l4: 0 10px 32px rgba(45, 47, 51, 0.18); // SL4 覆盖阴影,应用于信息提示【tips、活动进入按钮等】等投影
+ --o-shadow-l5: 0 12px 42px rgba(45, 47, 51, 0.24); // SL5 弹出阴影,应用于模态弹窗投影
+}
diff --git a/web-ui/src/shared/styles/_spacing.scss b/web-ui/src/shared/styles/_spacing.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e3dcd5bfbe1370420420c90af1683fed7df3393f
--- /dev/null
+++ b/web-ui/src/shared/styles/_spacing.scss
@@ -0,0 +1,13 @@
+// 间距
+:root {
+ --o-spacing-h1: 64px;
+ --o-spacing-h2: 40px;
+ --o-spacing-h3: 32px;
+ --o-spacing-h4: 24px;
+ --o-spacing-h5: 16px;
+ --o-spacing-h6: 12px;
+ --o-spacing-h7: 10px;
+ --o-spacing-h8: 8px;
+ --o-spacing-h9: 6px;
+ --o-spacing-h10: 4px;
+}
diff --git a/web-ui/src/shared/styles/var.scss b/web-ui/src/shared/styles/var.scss
new file mode 100644
index 0000000000000000000000000000000000000000..c7242722c856dd379092fd4ea79825a664a01b7b
--- /dev/null
+++ b/web-ui/src/shared/styles/var.scss
@@ -0,0 +1,4 @@
+@import './_color.scss';
+@import './_shadow.scss';
+@import './_font.scss';
+@import './_spacing.scss';