feat: footer better, font
This commit is contained in:
12
components.d.ts
vendored
12
components.d.ts
vendored
@@ -15,6 +15,7 @@ declare module 'vue' {
|
||||
AnimatePresence: typeof import('motion-v')['AnimatePresence']
|
||||
AnimText: typeof import('./src/components/special/AnimText.vue')['default']
|
||||
AuthDialog: typeof import('./src/components/dialog/AuthDialog.vue')['default']
|
||||
BiliBiliIcon: typeof import('./src/components/icon/BiliBiliIcon.vue')['default']
|
||||
Button: typeof import('./src/components/ui/button/Button.vue')['default']
|
||||
Calendar: typeof import('./src/components/ui/calendar/Calendar.vue')['default']
|
||||
CalendarCell: typeof import('./src/components/ui/calendar/CalendarCell.vue')['default']
|
||||
@@ -30,12 +31,16 @@ declare module 'vue' {
|
||||
CalendarPrevButton: typeof import('./src/components/ui/calendar/CalendarPrevButton.vue')['default']
|
||||
ChangeLanguageDropdownButton: typeof import('./src/components/button/ChangeLanguageDropdownButton.vue')['default']
|
||||
ChangeThemeDropdownButton: typeof import('./src/components/button/ChangeThemeDropdownButton.vue')['default']
|
||||
CurtainReveal: typeof import('./src/components/layout/CurtainReveal.vue')['default']
|
||||
DatePicker: typeof import('./src/components/date-picker/DatePicker.vue')['default']
|
||||
DatePickerDisplayCard: typeof import('./src/components/card/DatePickerDisplayCard.vue')['default']
|
||||
DevelopProgressCard: typeof import('./src/components/card/DevelopProgressCard.vue')['default']
|
||||
DevelopProgressDiagram: typeof import('./src/components/diagram/DevelopProgressDiagram.vue')['default']
|
||||
DouYinIcon: typeof import('./src/components/icon/DouYinIcon.vue')['default']
|
||||
ElButton: typeof import('element-plus/es')['ElButton']
|
||||
FooterBar: typeof import('./src/components/layout/FooterBar.vue')['default']
|
||||
FooterBarV2: typeof import('./src/components/layout/FooterBarV2.vue')['default']
|
||||
LogoIcon: typeof import('./src/components/icon/LogoIcon.vue')['default']
|
||||
NativeSelect: typeof import('./src/components/ui/native-select/NativeSelect.vue')['default']
|
||||
NativeSelectOptGroup: typeof import('./src/components/ui/native-select/NativeSelectOptGroup.vue')['default']
|
||||
NativeSelectOption: typeof import('./src/components/ui/native-select/NativeSelectOption.vue')['default']
|
||||
@@ -44,6 +49,7 @@ declare module 'vue' {
|
||||
PopoverAnchor: typeof import('./src/components/ui/popover/PopoverAnchor.vue')['default']
|
||||
PopoverContent: typeof import('./src/components/ui/popover/PopoverContent.vue')['default']
|
||||
PopoverTrigger: typeof import('./src/components/ui/popover/PopoverTrigger.vue')['default']
|
||||
RedBookIcon: typeof import('./src/components/icon/RedBookIcon.vue')['default']
|
||||
RouterLink: typeof import('vue-router')['RouterLink']
|
||||
RouterView: typeof import('vue-router')['RouterView']
|
||||
UserAuthNavButton: typeof import('./src/components/button/UserAuthNavButton.vue')['default']
|
||||
@@ -55,6 +61,7 @@ declare global {
|
||||
const AnimatePresence: typeof import('motion-v')['AnimatePresence']
|
||||
const AnimText: typeof import('./src/components/special/AnimText.vue')['default']
|
||||
const AuthDialog: typeof import('./src/components/dialog/AuthDialog.vue')['default']
|
||||
const BiliBiliIcon: typeof import('./src/components/icon/BiliBiliIcon.vue')['default']
|
||||
const Button: typeof import('./src/components/ui/button/Button.vue')['default']
|
||||
const Calendar: typeof import('./src/components/ui/calendar/Calendar.vue')['default']
|
||||
const CalendarCell: typeof import('./src/components/ui/calendar/CalendarCell.vue')['default']
|
||||
@@ -70,12 +77,16 @@ declare global {
|
||||
const CalendarPrevButton: typeof import('./src/components/ui/calendar/CalendarPrevButton.vue')['default']
|
||||
const ChangeLanguageDropdownButton: typeof import('./src/components/button/ChangeLanguageDropdownButton.vue')['default']
|
||||
const ChangeThemeDropdownButton: typeof import('./src/components/button/ChangeThemeDropdownButton.vue')['default']
|
||||
const CurtainReveal: typeof import('./src/components/layout/CurtainReveal.vue')['default']
|
||||
const DatePicker: typeof import('./src/components/date-picker/DatePicker.vue')['default']
|
||||
const DatePickerDisplayCard: typeof import('./src/components/card/DatePickerDisplayCard.vue')['default']
|
||||
const DevelopProgressCard: typeof import('./src/components/card/DevelopProgressCard.vue')['default']
|
||||
const DevelopProgressDiagram: typeof import('./src/components/diagram/DevelopProgressDiagram.vue')['default']
|
||||
const DouYinIcon: typeof import('./src/components/icon/DouYinIcon.vue')['default']
|
||||
const ElButton: typeof import('element-plus/es')['ElButton']
|
||||
const FooterBar: typeof import('./src/components/layout/FooterBar.vue')['default']
|
||||
const FooterBarV2: typeof import('./src/components/layout/FooterBarV2.vue')['default']
|
||||
const LogoIcon: typeof import('./src/components/icon/LogoIcon.vue')['default']
|
||||
const NativeSelect: typeof import('./src/components/ui/native-select/NativeSelect.vue')['default']
|
||||
const NativeSelectOptGroup: typeof import('./src/components/ui/native-select/NativeSelectOptGroup.vue')['default']
|
||||
const NativeSelectOption: typeof import('./src/components/ui/native-select/NativeSelectOption.vue')['default']
|
||||
@@ -84,6 +95,7 @@ declare global {
|
||||
const PopoverAnchor: typeof import('./src/components/ui/popover/PopoverAnchor.vue')['default']
|
||||
const PopoverContent: typeof import('./src/components/ui/popover/PopoverContent.vue')['default']
|
||||
const PopoverTrigger: typeof import('./src/components/ui/popover/PopoverTrigger.vue')['default']
|
||||
const RedBookIcon: typeof import('./src/components/icon/RedBookIcon.vue')['default']
|
||||
const RouterLink: typeof import('vue-router')['RouterLink']
|
||||
const RouterView: typeof import('vue-router')['RouterView']
|
||||
const UserAuthNavButton: typeof import('./src/components/button/UserAuthNavButton.vue')['default']
|
||||
|
||||
@@ -29,6 +29,7 @@ export default defineConfig({
|
||||
{ text: "图表", link: "/cli-feature/chart" },
|
||||
{ text: "辅助工具", link: "/cli-feature/radash" },
|
||||
{ text: "动画", link: "/cli-feature/motion" },
|
||||
{ text: "字体", link: "/cli-feature/font" },
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
53
docs/cli-feature/font.md
Normal file
53
docs/cli-feature/font.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# 字体
|
||||
|
||||
## 自定义字体
|
||||
|
||||
脚手架提供了两种自定义字体
|
||||
|
||||
- [HarmonyOS_Sans_Regular.woff2](https://developer.huawei.com/consumer/cn/design/resource-V1/)
|
||||
- [LXGWBright-Regular.woff2](https://github.com/lxgw/LxgwWenKai)
|
||||
|
||||
## 使用字体
|
||||
|
||||
您可以通过 tailwindcss 的类来调整局部字体,例如:
|
||||
|
||||
```html
|
||||
<div class="font-Harmony">
|
||||
这是 Harmony 字体
|
||||
</div>
|
||||
|
||||
<div class="font-LXGW">
|
||||
这是落霞孤鹜字体
|
||||
</div>
|
||||
```
|
||||
|
||||
您可以在 `style.css` 中定义全局字体,例如:
|
||||
|
||||
```css
|
||||
@plugin "daisyui/theme" {
|
||||
name: "light";
|
||||
--color-primary: #5092d4;
|
||||
--color-secondary: #bfd7f1;
|
||||
--color-accent: #76b9ef;
|
||||
/* 自定义字体在 App.vue 中加载 */
|
||||
--font-sans: '"Harmony", "Microsoft YaHei", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"';
|
||||
}
|
||||
```
|
||||
|
||||
如果您需要其他自定义字体,请在 `App.vue` 中定义 font-face,例如:
|
||||
|
||||
```vue
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: "LXGW";
|
||||
src: url("/fonts/LXGWBright-Regular.woff2") format("woff2");
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
</style>
|
||||
```
|
||||
|
||||
## 后续目标
|
||||
|
||||
后续我们将推出能够实时修改全局字体的组件
|
||||
BIN
public/contact/wechat.png
Normal file
BIN
public/contact/wechat.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 96 KiB |
BIN
public/fonts/HarmonyOS_Sans_Regular.woff2
Normal file
BIN
public/fonts/HarmonyOS_Sans_Regular.woff2
Normal file
Binary file not shown.
BIN
public/fonts/LXGWBright-Regular.woff2
Normal file
BIN
public/fonts/LXGWBright-Regular.woff2
Normal file
Binary file not shown.
20
src/App.vue
20
src/App.vue
@@ -14,4 +14,22 @@ onMounted(() => {
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
<style>
|
||||
/* 接触 scoped 开启全局模式加载字体 */
|
||||
|
||||
@font-face {
|
||||
font-family: "LXGW";
|
||||
src: url("/fonts/LXGWBright-Regular.woff2") format("woff2");
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Harmony";
|
||||
src: url("/fonts/HarmonyOS_Sans_Regular.woff2") format("woff2");
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
</style>
|
||||
|
||||
22
src/assets/logo.svg
Normal file
22
src/assets/logo.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" width="100%" height="100%">
|
||||
<g fill="none" stroke="#000000" stroke-width="8" stroke-linejoin="miter" stroke-linecap="square">
|
||||
|
||||
<!-- Bottom horizontal line has been removed -->
|
||||
|
||||
<!-- Left Angle Bracket < ─ farther left + shorter -->
|
||||
<polyline points="60,80 30,100 60,120" />
|
||||
|
||||
<!-- Right Angle Bracket > ─ farther right + shorter -->
|
||||
<polyline points="140,80 170,100 140,120" />
|
||||
|
||||
<!-- Ladder Vertical Rails ─ unchanged width -->
|
||||
<line x1="80" y1="50" x2="80" y2="150" />
|
||||
<line x1="120" y1="50" x2="120" y2="150" />
|
||||
|
||||
<!-- Ladder Rungs ─ unchanged -->
|
||||
<line x1="80" y1="75" x2="120" y2="75" />
|
||||
<line x1="80" y1="100" x2="120" y2="100" />
|
||||
<line x1="80" y1="125" x2="120" y2="125" />
|
||||
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 827 B |
21
src/components/icon/BiliBiliIcon.vue
Normal file
21
src/components/icon/BiliBiliIcon.vue
Normal file
@@ -0,0 +1,21 @@
|
||||
<script setup lang="ts"></script>
|
||||
|
||||
<template>
|
||||
<svg
|
||||
height="2500"
|
||||
viewBox="51.2 51.2 921.6 921.6"
|
||||
width="2500"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<g fill="#f16c8d">
|
||||
<path
|
||||
d="m729.329 373.95c-9.795-5.945-19.062-6.785-19.144-6.785l-1.065-.05c-57.2-3.866-121.165-5.832-190.126-5.832l-13.988.005c-68.956 0-132.925 1.96-190.12 5.831l-1.066.052c-.082 0-9.349.84-19.144 6.784-15.047 9.129-24.273 25.948-27.417 49.97-10.071 76.913-4.383 173.65.19 251.393 2.938 49.966 33.407 62.459 85.048 67.149 10.782.988 69.089 5.867 159.508 5.893v-.005c90.42-.02 148.726-4.905 159.514-5.888 51.64-4.69 82.11-17.183 85.043-67.15 4.577-77.741 10.26-174.479.19-251.391-3.15-24.028-12.376-40.848-27.423-49.977zm-390.99 172.718a23.65 23.65 0 0 1 -31.687-10.845 23.68 23.68 0 0 1 10.844-31.687c2.038-1.004 50.693-24.725 110.541-43.065a23.68 23.68 0 1 1 13.88 45.292c-56.294 17.25-103.111 40.074-103.577 40.305zm268.898 35.886c-.44 2.232-11.269 54.64-50.939 54.64-21.442 0-36.1-14.049-44.984-26.772-8.694 12.708-22.805 26.772-42.655 26.772-35.533 0-50.135-48.266-51.681-53.77a11.366 11.366 0 0 1 21.878-6.17c2.75 9.652 14.13 37.202 29.798 37.202 16.374 0 28.892-23.644 31.985-31.928a11.372 11.372 0 0 1 10.65-7.388h.06a11.376 11.376 0 0 1 10.63 7.506c.107.286 11.965 31.815 34.314 31.815 20.864 0 28.565-35.952 28.641-36.32a11.346 11.346 0 0 1 13.358-8.94 11.361 11.361 0 0 1 8.945 13.353zm110.116-46.736a23.68 23.68 0 0 1 -31.683 10.844c-.47-.23-47.472-23.116-103.572-40.31a23.69 23.69 0 0 1 -15.708-29.583 23.67 23.67 0 0 1 29.578-15.703c59.848 18.34 108.498 42.061 110.551 43.065a23.68 23.68 0 0 1 10.834 31.687z"
|
||||
/>
|
||||
<path
|
||||
d="m849.92 51.2h-675.84c-67.866 0-122.88 55.014-122.88 122.88v675.84c0 67.87 55.014 122.88 122.88 122.88h675.84c67.87 0 122.88-55.01 122.88-122.88v-675.84c0-67.86-55.01-122.88-122.88-122.88zm-36.603 627.45c-2.626 44.58-21.821 78.634-55.516 98.49-25.682 15.134-54.175 19.486-81.137 21.938-32.455 2.95-92.718 6.098-164.664 6.119-71.941-.02-132.209-3.164-164.664-6.119-26.962-2.452-55.455-6.804-81.132-21.939-33.695-19.855-52.89-53.903-55.51-98.483-4.706-80.133-10.574-179.855.194-262.108 10.654-81.383 70.102-104.976 100.612-106.168a2482.642 2482.642 0 0 1 81.423-4.086c-7.536-8.535-19.88-23.322-28.815-38.114-13.737-22.737 8.53-41.687 8.53-41.687s23.68-20.367 44.528 5.213c15.698 19.266 38.38 55.997 48.62 72.954l53.207-.215c13.26 0 26.332.072 39.22.215 10.24-16.957 32.92-53.683 48.619-72.954 20.843-25.58 44.528-5.213 44.528-5.213s22.262 18.95 8.525 41.687c-8.934 14.792-21.279 29.579-28.815 38.114 28.36.978 55.562 2.34 81.423 4.08 30.515 1.198 89.958 24.791 100.613 106.174 10.778 82.248 4.915 181.97.21 262.103z"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
48
src/components/icon/DouYinIcon.vue
Normal file
48
src/components/icon/DouYinIcon.vue
Normal file
@@ -0,0 +1,48 @@
|
||||
<script setup lang="ts"></script>
|
||||
|
||||
<template>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
t="1772042599876"
|
||||
class="icon"
|
||||
viewBox="0 0 1024 1024"
|
||||
version="1.1"
|
||||
p-id="1645"
|
||||
width="200"
|
||||
height="200"
|
||||
>
|
||||
<path
|
||||
d="M855.52032 0H165.44032A165.696 165.696 0 0 0 0.00032 165.92v689.376a165.696 165.696 0 0 0 165.344 166.016h690.272a165.696 165.696 0 0 0 165.408-165.984V166.016A165.76 165.76 0 0 0 855.52032 0z"
|
||||
fill="#170B1A"
|
||||
p-id="1646"
|
||||
/>
|
||||
<path
|
||||
d="M511.42432 302.08c0.576-64.32 0-128.576 0.576-192.832h131.392c-0.576 11.328 1.152 22.72 2.88 33.6h-96.704v522.24a124.8 124.8 0 0 1-16 63.68 107.84 107.84 0 0 1-83.008 52.864 111.424 111.424 0 0 1-63.168-13.12 108.416 108.416 0 0 1-36.928-32.96c33.536 18.816 77.312 17.088 109.76-3.968A111.68 111.68 0 0 0 512.00032 638.272c-0.576-112.064-0.576-224.128-0.576-336.192z m216.768-36.992c18.176 11.392 38.656 20.48 59.712 25.024 12.544 2.88 25.024 4.032 38.08 4.032v29.568a187.36 187.36 0 0 1-97.792-58.56v-0.064z"
|
||||
fill="#25F4EE"
|
||||
p-id="1647"
|
||||
/>
|
||||
<path
|
||||
d="M274.75232 428.928a238.016 238.016 0 0 1 159.36-33.6v31.36c-14.72 0.576-29.376 2.272-43.84 5.12a249.44 249.44 0 0 0-97.92 43.84c-31.232 23.296-55.104 55.104-71.68 90.368a243.424 243.424 0 0 0-23.296 108.16c0 40.96 11.392 80.768 30.72 116.608 9.152 16.448 19.392 32.384 33.024 45.44a233.44 233.44 0 0 1-68.288-75.072 246.24 246.24 0 0 1-33.6-131.392 250.144 250.144 0 0 1 35.904-120 240.352 240.352 0 0 1 79.616-80.832z"
|
||||
fill="#25F4EE"
|
||||
p-id="1648"
|
||||
/>
|
||||
<path
|
||||
d="M549.56832 142.784h97.28c3.392 18.752 10.24 36.416 18.752 53.504 13.632 26.176 33.024 49.472 58.048 64.832 1.664 1.152 2.88 2.304 3.968 3.968a186.688 186.688 0 0 0 98.432 58.56c0.576 34.176 0 68.864 0 103.04a308.16 308.16 0 0 1-180.928-57.472c0 81.92 0 163.84 0.576 245.76 0 10.816 0.576 21.632 0 32.96a268.8 268.8 0 0 1-35.264 113.792 247.392 247.392 0 0 1-68.288 77.44 219.296 219.296 0 0 1-124.608 42.56c-22.72 0.64-45.44-0.512-67.648-5.632a243.52 243.52 0 0 1-87.04-38.08l-1.728-1.728a202.464 202.464 0 0 1-33.024-45.504 244.32 244.32 0 0 1-30.72-116.672 245.6 245.6 0 0 1 23.36-108.096c16.512-35.2 40.96-67.072 71.68-90.432a249.44 249.44 0 0 1 141.632-48.896c0.576 13.12 0 26.176 0.576 38.656v66.56a94.176 94.176 0 0 0-51.776-1.728 128.32 128.32 0 0 0-55.68 27.328c-9.824 8.448-17.952 18.688-23.936 30.144a112.16 112.16 0 0 0-11.392 63.744c2.432 21.216 11.168 41.216 25.024 57.472 9.088 11.328 21.056 19.904 33.024 27.84 9.664 13.632 22.144 25.024 36.928 33.024 19.392 10.24 41.536 14.72 63.168 13.12 34.112-2.304 65.984-23.36 83.072-52.992a124.8 124.8 0 0 0 15.936-63.68c1.152-175.232 0.576-349.312 0.576-523.392z"
|
||||
fill="#FFFFFF"
|
||||
p-id="1649"
|
||||
/>
|
||||
<path
|
||||
d="M646.84832 142.784c11.328 0.576 22.72 0 34.688 0 0 38.08 11.968 76.224 34.112 107.52 2.88 3.968 5.76 7.36 8.576 10.816-25.088-15.36-44.992-38.656-58.048-64.832a214.208 214.208 0 0 1-19.328-53.504z m179.2 180.928c12.48 2.88 24.96 3.968 38.08 3.968v132.544c-64.832 0.576-129.664-21.056-182.592-59.136v262.784a229.76 229.76 0 0 1-5.696 59.2 244.32 244.32 0 0 1-96.704 147.328c-25.92 18.56-55.36 31.744-86.464 38.656a240.448 240.448 0 0 1-113.792-1.664 239.776 239.776 0 0 1-115.52-69.44 234.016 234.016 0 0 0 87.104 38.08c22.144 5.184 44.928 6.336 67.648 5.76a219.296 219.296 0 0 0 124.608-42.688 254.784 254.784 0 0 0 68.288-77.376 269.024 269.024 0 0 0 35.2-113.792 319.072 319.072 0 0 0 0-32.96c-0.512-81.92-0.512-163.84-0.512-245.76a308.16 308.16 0 0 0 180.928 57.472c-0.576-34.176 0-68.8-0.576-102.976z"
|
||||
fill="#FE2C55"
|
||||
p-id="1650"
|
||||
/>
|
||||
<path
|
||||
d="M434.62432 426.112c12.544 0 25.6 0.576 38.08 2.24v136a103.872 103.872 0 0 0-57.408-2.304c-35.84 8-65.984 35.264-78.528 70.016-12.48 34.112-7.36 73.92 14.208 102.912a119.552 119.552 0 0 1-32.96-27.84 107.328 107.328 0 0 1-25.024-57.472 112.16 112.16 0 0 1 11.392-63.68c5.632-11.392 14.208-21.632 23.872-30.208 15.936-13.632 35.84-22.144 55.744-27.264a94.176 94.176 0 0 1 51.776 1.664V463.68c-1.152-11.36-0.576-24.48-1.152-37.536v-0.032z"
|
||||
fill="#FE2C55"
|
||||
p-id="1651"
|
||||
/>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
37
src/components/icon/LogoIcon.vue
Normal file
37
src/components/icon/LogoIcon.vue
Normal file
@@ -0,0 +1,37 @@
|
||||
<script setup lang="ts"></script>
|
||||
|
||||
<template>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 200 200"
|
||||
stroke="currentColor"
|
||||
width="100%"
|
||||
height="100%"
|
||||
>
|
||||
<g
|
||||
fill="none"
|
||||
stroke-width="8"
|
||||
stroke-linejoin="miter"
|
||||
stroke-linecap="square"
|
||||
>
|
||||
<!-- Bottom horizontal line has been removed -->
|
||||
|
||||
<!-- Left Angle Bracket < ─ farther left + shorter -->
|
||||
<polyline points="60,80 30,100 60,120" />
|
||||
|
||||
<!-- Right Angle Bracket > ─ farther right + shorter -->
|
||||
<polyline points="140,80 170,100 140,120" />
|
||||
|
||||
<!-- Ladder Vertical Rails ─ unchanged width -->
|
||||
<line x1="80" y1="50" x2="80" y2="150" />
|
||||
<line x1="120" y1="50" x2="120" y2="150" />
|
||||
|
||||
<!-- Ladder Rungs ─ unchanged -->
|
||||
<line x1="80" y1="75" x2="120" y2="75" />
|
||||
<line x1="80" y1="100" x2="120" y2="100" />
|
||||
<line x1="80" y1="125" x2="120" y2="125" />
|
||||
</g>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
46
src/components/icon/RedBookIcon.vue
Normal file
46
src/components/icon/RedBookIcon.vue
Normal file
@@ -0,0 +1,46 @@
|
||||
<script setup lang="ts"></script>
|
||||
|
||||
<template>
|
||||
<svg
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
width="256"
|
||||
height="256"
|
||||
viewBox="0 0 256 256"
|
||||
sodipodi:docname="XiaohongshuLOGO.png"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<defs id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="2.6914062"
|
||||
inkscape:cx="127.81422"
|
||||
inkscape:cy="128"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="928"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g1"
|
||||
/>
|
||||
<g inkscape:groupmode="layer" inkscape:label="Image" id="g1">
|
||||
<path
|
||||
style="fill: #ff2842; stroke: none"
|
||||
d="M 29,0.33332825 C 13.959937,3.4666748 1.5356731,15.204498 0,31 -1.586103,47.314209 0,64.597672 0,81 v 102 c 0,18.76035 -4.7369685,44.19888 7.3333335,60 C 20.372129,260.06897 44.156731,256 63,256 h 111 35 c 5.78276,0 12.33244,0.84741 18,-0.33333 15.0401,-3.13336 27.46432,-14.87115 29,-30.66667 1.58612,-16.31419 0,-33.59769 0,-50 V 73 C 256,54.239685 260.73697,28.801102 248.66667,13 235.62787,-4.0689697 211.84329,0 193,0 H 82 47 C 41.217228,0 34.667561,-0.84741211 29,0.33332825 M 120,91 l -7,19 h 12 l -10,24 9,1 c -0.98794,2.68155 -2.31718,7.73317 -4.33334,9.83334 C 118.18945,146.3721 115.92654,146 114,146 c -4.35942,0 -13.16798,1.80539 -15.5,-3 -1.069664,-2.20416 0.465553,-4.98451 1.333336,-7 1.813624,-4.21228 4.222554,-8.51549 5.166664,-13 -2.17548,0 -4.92464,0.42967 -7,-0.33333 -7.778526,-2.85974 0.874031,-15.36435 2.66666,-19.66667 1.25875,-3.020981 2.75652,-9.584732 5.5,-11.5 C 110.01874,88.810822 115.88325,90.674988 120,91 m -79,63 c 2.750713,0 6.837379,0.81721 8.5,-2 1.769028,-2.99753 0.5,-9.58963 0.5,-13 V 106 C 50,102.90659 48.438198,93.464493 51.166668,91.5 53.41069,89.884308 62.832935,90.226166 63.833332,93 65.47065,97.539825 64,105.16241 64,110 v 32 c 0,5.48389 0.949112,11.8645 -1.333332,17 -2.177158,4.89861 -12.303417,9.27243 -17.333336,5.5 C 43.120155,162.84012 41.545292,156.59013 41,154 M 193,91 v 5 c 3.72887,0 8.4108,-0.763367 12,0.333328 11.97635,3.659424 11,15.422502 11,25.666672 1.99706,0 4.04419,-0.15562 6,0.33333 11.49335,2.87334 10,14.36401 10,23.66667 0,4.95615 0.93086,10.82184 -2.33333,15 -3.59567,4.60246 -9.48195,4 -14.66667,4 -1.6116,0 -4.26318,0.51051 -5.66667,-0.5 -2.62326,-1.88875 -3.78159,-7.50485 -4.33333,-10.5 3.28711,0 9.2179,1.12517 11.83333,-1.33334 C 219.9164,149.76859 218.65411,138.43454 215,136.5 c -1.93661,-1.02527 -4.88672,-0.5 -7,-0.5 h -15 v 29 h -14 v -29 h -14 v -14 h 14 v -12 h -9 V 96 h 9 v -5 h 14 m -32,5 v 14 h -8 v 42 h 13 v 13 H 120 L 125.33334,152.5 138,152 v -42 h -8 V 96 h 31 m 57,14 c 0,-2.84204 -0.51608,-6.25871 0.33333,-9 3.34434,-10.793121 19.61577,-2.093994 11.5,6.83333 -0.92279,1.01507 -2.54419,1.51106 -3.83333,1.83334 C 223.43948,110.30679 220.61993,110 218,110 M 41,110 36.833332,147 30,159 24,143 27,110 h 14 m 46,0 3,33 -6,15 h -2 c -5.366936,-8.49765 -6.053299,-17.26251 -7,-27 -0.672195,-6.91406 -2,-14.04004 -2,-21 h 14 m 106,0 v 12 h 9 v -12 h -9 m -75,42 -5,13 H 91 L 96.333336,151.5 104,151.66666 Z"
|
||||
id="path1"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
@@ -4,7 +4,7 @@
|
||||
<div>
|
||||
<footer class="footer sm:footer-horizontal bg-base-300 items-center p-4">
|
||||
<aside class="grid-flow-col items-center">
|
||||
<img src="@/assets/hucky.png" alt="hucky" class="h-18" />
|
||||
<img src="@/assets/logo.svg" alt="hucky" class="h-18" />
|
||||
<p>Copyright © {{ new Date().getFullYear() }} - All right reserved</p>
|
||||
</aside>
|
||||
<nav class="grid-flow-col gap-4 md:place-self-center md:justify-self-end">
|
||||
|
||||
118
src/components/layout/FooterBarV2.vue
Normal file
118
src/components/layout/FooterBarV2.vue
Normal file
@@ -0,0 +1,118 @@
|
||||
<script setup lang="ts">
|
||||
import BiliBiliIcon from "../icon/BiliBiliIcon.vue";
|
||||
import DouYinIcon from "../icon/DouYinIcon.vue";
|
||||
import LogoIcon from "../icon/LogoIcon.vue";
|
||||
import RedBookIcon from "../icon/RedBookIcon.vue";
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<footer
|
||||
class="fixed bottom-0 left-0 w-full z-[-1] pt-16 pb-10 px-6 md:px-12 lg:px-20 text-sm font-[LXGW] h-102"
|
||||
>
|
||||
<!-- Background overlay -->
|
||||
<div
|
||||
class="absolute inset-0 bg-gradient-to-t from-(--color-primary)/50 via-(--color-primary)/20 to-(--color-base-200) pointer-events-none"
|
||||
/>
|
||||
|
||||
<div
|
||||
class="relative max-w-7xl mx-auto grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-10 md:gap-6"
|
||||
>
|
||||
<!-- Left column - Logo + slogan -->
|
||||
<div class="space-y-4">
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="text-4xl font-bold tracking-tight">
|
||||
<LogoIcon class="h-16" />
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-lg font-medium tracking-wide">Hucky</div>
|
||||
<div class="text-xs text-gray-500">专注于开发体验提升</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-lg">重塑下一代前端脚手架</div>
|
||||
</div>
|
||||
|
||||
<!-- Middle scattered contact blocks -->
|
||||
<div class="space-y-8 md:space-y-10 lg:col-start-2">
|
||||
<!-- Email & resume -->
|
||||
<div>
|
||||
<div class="mb-1 text-gray-500">简历投递:</div>
|
||||
<a href="mailto:w56038009@outlook.com" class="font-bold underline">
|
||||
w56038009@outlook.com
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- WeChat / phone -->
|
||||
<div>
|
||||
<div class="mb-1 text-gray-500">业务联系:(微信)</div>
|
||||
<div class="font-bold">gushen622140</div>
|
||||
<!-- QR Code area -->
|
||||
<div class="mt-3">
|
||||
<div
|
||||
class="inline-block bg-white/10 backdrop-blur-sm rounded-lg border border-white/10"
|
||||
>
|
||||
<img src="/contact/wechat.png" alt="wechat" class="h-22" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Phone & address (right side feel) -->
|
||||
<div class="lg:hidden">
|
||||
<div class="font-bold">15381666371</div>
|
||||
<div class="text-gray-500 mt-1 text-xs leading-relaxed">
|
||||
浙江省金华市婺城区迎宾大道 667 号浙江师范大学<br />
|
||||
667, Zhejiang Normal University<br />
|
||||
Jinhua, Zhejiang, China
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Right column - Phone + Address (desktop layout) -->
|
||||
<div class="hidden lg:block space-y-2">
|
||||
<div>
|
||||
<div class="font-bold text-lg">15381666371</div>
|
||||
</div>
|
||||
<div class="text-gray-500 leading-relaxed text-xs">
|
||||
浙江省金华市婺城区迎宾大道 667 号浙江师范大学<br />
|
||||
667, Zhejiang Normal University<br />
|
||||
Jinhua, Zhejiang, China
|
||||
</div>
|
||||
<div class="flex mt-4 gap-2">
|
||||
<a
|
||||
title="小红书"
|
||||
href="https://www.xiaohongshu.com/user/profile/61cf083b000000001000c7b2"
|
||||
target="_blank"
|
||||
rel="nofollow"
|
||||
>
|
||||
<RedBookIcon class="h-6 w-6" />
|
||||
</a>
|
||||
<a
|
||||
title="B站"
|
||||
href="https://space.bilibili.com/34875940"
|
||||
target="_blank"
|
||||
rel="nofollow"
|
||||
>
|
||||
<BiliBiliIcon class="h-6 w-6" />
|
||||
</a>
|
||||
<a
|
||||
title="抖音"
|
||||
href="https://www.douyin.com/user/MS4wLjABAAAAf6Q5VoHL_UfFQE8fmH3mgYCgL0tGxlpoSMLM9ZcKbpY"
|
||||
target="_blank"
|
||||
rel="nofollow"
|
||||
>
|
||||
<DouYinIcon class="h-6 w-6" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bottom legal line -->
|
||||
<div class="mt-8 text-xs text-gray-500 text-center md:text-left">
|
||||
<div class="max-w-7xl mx-auto px-6 md:px-0">
|
||||
Copyright © 2026 sunway.icu | 备案号:浙ICP备2023010223号 |
|
||||
增值电信业务经营许可证:浙B2-20110004
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</template>
|
||||
|
||||
<style scoped></style>
|
||||
@@ -6,6 +6,7 @@ import { throttle } from "radash";
|
||||
import { AnimatePresence, motion } from "motion-v";
|
||||
import { navigateTo } from "@/utils/navigator";
|
||||
import UserAuthNavButton from "../button/UserAuthNavButton.vue";
|
||||
import LogoIcon from "../icon/LogoIcon.vue";
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ import { motion } from "motion-v";
|
||||
:while-hover="{ scale: 1.1 }"
|
||||
@click="
|
||||
navigateTo(
|
||||
'https://www.douyin.com/user/MS4wLjABAAAAf6Q5VoHL_UfFQE8fmH3mgYCgL0tGxlpoSMLM9ZcKbpY?from_tab_name=main',
|
||||
'https://www.douyin.com/user/MS4wLjABAAAAf6Q5VoHL_UfFQE8fmH3mgYCgL0tGxlpoSMLM9ZcKbpY',
|
||||
)
|
||||
"
|
||||
>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script lang="ts" setup>
|
||||
import DatePickerDisplayCard from "@/components/card/DatePickerDisplayCard.vue";
|
||||
import DevelopProgressCard from "@/components/card/DevelopProgressCard.vue";
|
||||
import FooterBar from "@/components/layout/FooterBar.vue";
|
||||
import FooterBarV2 from "@/components/layout/FooterBarV2.vue";
|
||||
import NavBar from "@/components/menu/NavBar.vue";
|
||||
import AnimText from "@/components/special/AnimText.vue";
|
||||
import { navigateTo } from "@/utils/navigator";
|
||||
@@ -39,57 +39,60 @@ const progress = ref([
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="bg-base-200">
|
||||
<div class="h-screen flex flex-col">
|
||||
<NavBar class="fixed top-0 left-0 z-10" />
|
||||
<!-- 同高度占位颜色叠加 -->
|
||||
<div class="h-16 bg-base-300" />
|
||||
<div class="hero flex-1">
|
||||
<div class="hero-content text-center">
|
||||
<div class="max-w-md">
|
||||
<!-- <h1 class="text-5xl font-bold">{{ $t("home.welcome") }}</h1> -->
|
||||
<h1 class="text-5xl font-bold">
|
||||
<AnimText text="home.welcome" />
|
||||
</h1>
|
||||
<div class="py-6">
|
||||
<!-- {{ $t("home.intro_line1") }}<br />
|
||||
<div>
|
||||
<div class="bg-base-200">
|
||||
<div class="h-screen flex flex-col">
|
||||
<NavBar class="fixed top-0 left-0 z-10" />
|
||||
<!-- 同高度占位颜色叠加 -->
|
||||
<div class="h-16 bg-base-300" />
|
||||
<div class="hero flex-1">
|
||||
<div class="hero-content text-center">
|
||||
<div class="max-w-md">
|
||||
<!-- <h1 class="text-5xl font-bold">{{ $t("home.welcome") }}</h1> -->
|
||||
<h1 class="text-5xl font-bold">
|
||||
<AnimText text="home.welcome" />
|
||||
</h1>
|
||||
<div class="py-6">
|
||||
<!-- {{ $t("home.intro_line1") }}<br />
|
||||
{{ $t("home.intro_line2") }}<br />
|
||||
{{ $t("home.intro_line3") }} -->
|
||||
<AnimText text="home.intro_line1" /><br />
|
||||
<AnimText text="home.intro_line2" /><br />
|
||||
<AnimText text="home.intro_line3" />
|
||||
<AnimText text="home.intro_line1" /><br />
|
||||
<AnimText text="home.intro_line2" /><br />
|
||||
<AnimText text="home.intro_line3" />
|
||||
</div>
|
||||
<button
|
||||
class="btn btn-primary"
|
||||
@click="navigateTo('http://localhost:5174')"
|
||||
>
|
||||
<!-- {{ $t("home.read_doc") }} -->
|
||||
<AnimText text="home.read_doc" />
|
||||
</button>
|
||||
</div>
|
||||
<button
|
||||
class="btn btn-primary"
|
||||
@click="navigateTo('http://localhost:5174')"
|
||||
>
|
||||
<!-- {{ $t("home.read_doc") }} -->
|
||||
<AnimText text="home.read_doc" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-4">
|
||||
<h1 class="text-4xl font-bold mb-12 ml-10">脚手架开发进度</h1>
|
||||
<div class="w-full grid grid-cols-3 gap-4 justify-items-center">
|
||||
<DevelopProgressCard
|
||||
v-for="item in progress"
|
||||
:key="item.title"
|
||||
:completed="item.completed"
|
||||
:pending="item.pending"
|
||||
:title="item.title"
|
||||
:intro="item.intro"
|
||||
/>
|
||||
<div class="p-4">
|
||||
<h1 class="text-4xl font-bold mb-12 ml-10">脚手架开发进度</h1>
|
||||
<div class="w-full grid grid-cols-3 gap-4 justify-items-center">
|
||||
<DevelopProgressCard
|
||||
v-for="item in progress"
|
||||
:key="item.title"
|
||||
:completed="item.completed"
|
||||
:pending="item.pending"
|
||||
:title="item.title"
|
||||
:intro="item.intro"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-4">
|
||||
<h1 class="text-4xl font-bold mb-12 ml-10">组件演示</h1>
|
||||
<div class="w-full grid grid-cols-3 gap-4 justify-items-center">
|
||||
<DatePickerDisplayCard />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-4">
|
||||
<h1 class="text-4xl font-bold mb-12 ml-10">组件演示</h1>
|
||||
<div class="w-full grid grid-cols-3 gap-4 justify-items-center">
|
||||
<DatePickerDisplayCard />
|
||||
</div>
|
||||
</div>
|
||||
<FooterBar />
|
||||
<div class="h-102 bg-transparent z-5" />
|
||||
<FooterBarV2 />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@import "tailwindcss";
|
||||
@import "tw-animate-css";
|
||||
|
||||
@plugin "@iconify/tailwind4";
|
||||
|
||||
@custom-variant dark (&:is(.dark *));
|
||||
@@ -12,6 +13,8 @@
|
||||
--color-primary: #5092d4;
|
||||
--color-secondary: #bfd7f1;
|
||||
--color-accent: #76b9ef;
|
||||
/* 自定义字体在 App.vue 中加载 */
|
||||
--font-sans: '"Harmony", "Microsoft YaHei", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"';
|
||||
}
|
||||
|
||||
/* Custom Scrollbar Styles */
|
||||
|
||||
Reference in New Issue
Block a user