feat: 设置进度条颜色跟随主色

master
绝弹 2023-09-22 20:37:14 +08:00
parent 446698c27e
commit 8b551a72be
30 changed files with 285 additions and 11469 deletions

View File

@ -1,13 +0,0 @@
{
"hash": "f14be980",
"browserHash": "16a0d7a2",
"optimized": {
"vue": {
"src": "../../../../node_modules/.pnpm/vue@3.3.4/node_modules/vue/dist/vue.runtime.esm-bundler.js",
"file": "vue.js",
"fileHash": "e275f4f9",
"needsInterop": false
}
},
"chunks": {}
}

View File

@ -1,3 +0,0 @@
{
"type": "module"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,139 +0,0 @@
import { defineConfig } from "vitepress";
/**
*
* @see https://vitepress.dev/reference/site-config
*/
export default defineConfig({
lang: "zh-CN",
title: "AppnifyVUE",
description: "一位前端开发者的博客",
/**
*
* @see https://vitepress.dev/reference/default-theme-config
*/
themeConfig: {
logo: "/favicon.ico",
search: {
provider: "local",
options: {
translations: {
button: {
buttonText: "搜索",
buttonAriaLabel: "搜索",
},
modal: {
noResultsText: "没有找到结果",
resetButtonTitle: "重置搜索",
footer: {
selectText: "选择",
navigateText: "移动",
closeText: "关闭",
},
},
},
},
},
outline: {
label: "本篇目录",
},
nav: [
{
text: "首页",
link: "/",
},
{
text: "项目概览",
link: "/overview/",
},
{
text: "开发文档",
link: '/dev'
},
{
text: '关于',
link: '/about'
},
],
sidebar: {
"/front-end/": [
{
text: "基础知识",
items: [
{
text: "HTML中的标签有多少个?",
link: "/front-end/a",
},
{
text: "Runtime API示例",
link: "/front-end/b",
},
],
},
{
text: '工具类库',
items: [
{
text: 'Lodash在日常开发中有用的函数'
}
]
},
{
text: 'vue',
items: [
{
text: '如何将.vue文件编译成js文件?'
}
]
},
{
text: '浏览器',
items: [
{
text: '浏览器Console面板中有用的调试技巧',
},
{
text: '如何利用EJS模板引擎辅助生成代码?',
link: '/front-end/ejs-generate-code'
},
{
text: '项目中的字典常量应该如何维护?'
},
{
text: '从new xx()和new xx的区别聊聊JS中操作符的优先级问题',
link: '/front-end/js-operator-priority'
},
{
text: 'TailwindCSS中一些有意思的用法和实现'
},
{
text: '函数柯里化是什么如何实现它?'
},
{
text: '写一个VITE插件: 根据配置加载不同后缀的文件'
}
]
}
],
},
socialLinks: [
{
icon: "github",
link: "https://github.com/juetan",
},
],
docFooter: {
prev: "上一篇",
next: "下一篇",
},
footer: {
message: "© 2023 JueTan",
copyright: "绝弹博客 版权所有",
},
},
markdown: {
theme: "github-dark-dimmed",
lineNumbers: true,
},
});

View File

@ -1,20 +0,0 @@
import { h } from 'vue'
import Theme from 'vitepress/theme'
import './style.css'
import { EnhanceAppContext } from 'vitepress'
/**
*
* @see https://vitepress.dev/guide/custom-theme
*/
export default {
...Theme,
Layout: () => {
return h(Theme.Layout, null, {
// https://vitepress.dev/guide/extending-default-theme#layout-slots
})
},
enhanceApp({ app, router, siteData }: EnhanceAppContext) {
// ...
}
}

View File

@ -1,96 +0,0 @@
/**
* Customize default theme styling by overriding CSS variables:
* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
*/
/**
* Colors
* -------------------------------------------------------------------------- */
:root {
--vp-c-brand: #09f;
--vp-c-brand-light: #0099ffe0;
--vp-c-brand-lighter: #0099ffa0;
--vp-c-brand-lightest: #0099ffc0;
--vp-c-brand-dark: #535bf2;
--vp-c-brand-darker: #454ce1;
--vp-c-brand-dimm: rgba(100, 108, 255, 0.08);
--vp-sidebar-bg-color: transparent;
--vp-nav-height: 56px;
}
/* :root {
--vp-c-brand: #646cff;
--vp-c-brand-light: #747bff;
--vp-c-brand-lighter: #9499ff;
--vp-c-brand-lightest: #bcc0ff;
--vp-c-brand-dark: #535bf2;
--vp-c-brand-darker: #454ce1;
--vp-c-brand-dimm: rgba(100, 108, 255, 0.08);
--vp-sidebar-bg-color: transparent;
} */
/**
* Component: Button
* -------------------------------------------------------------------------- */
:root {
--vp-button-brand-border: var(--vp-c-brand-light);
--vp-button-brand-text: var(--vp-c-white);
--vp-button-brand-bg: var(--vp-c-brand);
--vp-button-brand-hover-border: var(--vp-c-brand-light);
--vp-button-brand-hover-text: var(--vp-c-white);
--vp-button-brand-hover-bg: var(--vp-c-brand-light);
--vp-button-brand-active-border: var(--vp-c-brand-light);
--vp-button-brand-active-text: var(--vp-c-white);
--vp-button-brand-active-bg: var(--vp-button-brand-bg);
}
/**
* Component: Home
* -------------------------------------------------------------------------- */
:root {
--vp-home-hero-name-color: transparent;
--vp-home-hero-name-background: -webkit-linear-gradient(120deg, #bd34fe 30%, #41d1ff);
--vp-home-hero-image-background-image: linear-gradient(-45deg, #bd34fe 50%, #47caff 50%);
--vp-home-hero-image-filter: blur(40px);
}
@media (min-width: 640px) {
:root {
--vp-home-hero-image-filter: blur(56px);
}
}
@media (min-width: 960px) {
:root {
--vp-home-hero-image-filter: blur(72px);
}
.VPContent .VPDoc {
padding: 20px 0 40px;
}
.VPDoc .container > .content {
background: #fff;
padding: 28px 24px;
box-shadow: 0 0 8px #f1f3f5;
border: 1px solid #f1f3f5;
border-radius: 4px;
}
}
/**
* Component: Custom Block
* -------------------------------------------------------------------------- */
:root {
--vp-custom-block-tip-border: var(--vp-c-brand);
--vp-custom-block-tip-text: var(--vp-c-brand-darker);
--vp-custom-block-tip-bg: var(--vp-c-brand-dimm);
}
.dark {
--vp-custom-block-tip-border: var(--vp-c-brand);
--vp-custom-block-tip-text: var(--vp-c-brand-lightest);
--vp-custom-block-tip-bg: var(--vp-c-brand-dimm);
}

View File

@ -1,49 +0,0 @@
---
outline: deep
---
# Runtime API Examples
This page demonstrates usage of some of the runtime APIs provided by VitePress.
The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files:
```md
<script setup>
import { useData } from 'vitepress'
const { theme, page, frontmatter } = useData()
</script>
## Results
### Theme Data
<pre>{{ theme }}</pre>
### Page Data
<pre>{{ page }}</pre>
### Page Frontmatter
<pre>{{ frontmatter }}</pre>
```
<script setup>
import { useData } from 'vitepress'
const { site, theme, page, frontmatter, localeIndex } = useData()
</script>
## 输出结果
### 主题数据
{{localeIndex}}
<pre>{{ theme }}</pre>
### 页面数据
<pre>{{ page }}</pre>
### 页面前置数据
<pre>{{ frontmatter }}</pre>
## 更多
Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata).

View File

@ -1,19 +0,0 @@
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
hero:
name: "Appnify"
text: ""
tagline: 基于 vue3 + vite 的后台管理系统模板
actions:
- theme: brand
text: 概览
link: /markdown-examples
- theme: alt
text: 开发文档
link: /api-examples
image:
src: /assets/td.svg
alt: page
---

View File

@ -1,85 +0,0 @@
# Markdown语法示例
This page demonstrates some of the built-in markdown extensions provided by VitePress.
## Syntax Highlighting
VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting:
**Input**
````
```js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
````
**Output**
```js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
## Custom Containers
**Input**
```md
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: danger
This is a dangerous warning.
:::
::: details
This is a details block.
:::
```
**Output**
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: danger
This is a dangerous warning.
:::
::: details
This is a details block.
:::
## More
Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown).

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@ -43,7 +43,6 @@
"vite-plugin-mock": "^3.0.0", "vite-plugin-mock": "^3.0.0",
"vite-plugin-pages": "^0.28.0", "vite-plugin-pages": "^0.28.0",
"vite-plugin-style-import": "^2.0.0", "vite-plugin-style-import": "^2.0.0",
"vitepress": "1.0.0-beta.1",
"vue": "^3.3.4", "vue": "^3.3.4",
"vue-router": "^4.2.4", "vue-router": "^4.2.4",
"vue-tsc": "^1.8.11" "vue-tsc": "^1.8.11"

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 79 KiB

View File

@ -25,7 +25,7 @@ export const config = {
{{ icon: () => <IconRefresh></IconRefresh>, default: () => "重置" }} {{ icon: () => <IconRefresh></IconRefresh>, default: () => "重置" }}
</Button> </Button>
)} )}
<Button type="primary" loading={tableRef?.loading.value} onClick={() => tableRef?.loadData()}> <Button type="primary" loading={tableRef?.loading.value} onClick={() => tableRef?.reloadData()}>
{{ icon: () => <IconSearch></IconSearch>, default: () => "查询" }} {{ icon: () => <IconSearch></IconSearch>, default: () => "查询" }}
</Button> </Button>
</div> </div>

View File

@ -1,5 +1,6 @@
import NProgress from 'nprogress'; import NProgress from 'nprogress';
import 'nprogress/nprogress.css'; import 'nprogress/nprogress.css';
import './nprogress.css';
NProgress.configure({ NProgress.configure({
showSpinner: false, showSpinner: false,
@ -8,3 +9,4 @@ NProgress.configure({
}); });
export { NProgress }; export { NProgress };

View File

@ -0,0 +1,7 @@
#nprogress .bar {
background: rgb(var(--primary-5));
}
#nprogress .peg {
box-shadow: 0 0 10px rgb(var(--primary-5)), 0 0 5px rgb(var(--primary-5));
}

View File

@ -0,0 +1,239 @@
<svg
viewBox="0 0 400 300"
fill="none"
xmlns="http://www.w3.org/2000/svg"
class="w-[280px]"
>
<path
d="M55.92 169.384c-1.7-2.38-3.14-4.82-4.3-7.31-2.37-5.06-3.62-10.31-3.62-15.7 0-36.68 57.86-66.96 132.69-71.46M297.606 91.128c33.29 13.22 54.46 33.06 54.46 55.25 0 10.3-4.57 20.1-12.79 28.97M196.192 74.356c1.28-.01 2.56-.02 3.84-.02 24.71 0 48.05 2.79 68.67 7.75"
stroke="#31333A"
stroke-width="2.126"
/>
<path
d="M315.532 118.444c12.36 7.6 21.59 16.4 26.77 25.97M201.24 110.279c83.97 0 152.03 32.25 152.03 72.04 0 39.79-68.06 72.04-152.03 72.04-35.63 0-68.41-5.81-94.32-15.54-15.97-5.99-29.33-13.47-39.16-21.99-11.83-10.25-18.55-22.01-18.55-34.51 0-22.37 21.52-42.36 55.28-55.57 2.1-.83 4.25-1.62 6.44-2.39"
stroke="#31333A"
stroke-width="2.126"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M126.986 201.18h128.76c6.56 0 11.88-5.33 11.88-11.89V57.88c0-6.56-5.32-11.88-11.88-11.88h-128.76c-3.15 0-6.18 1.25-8.41 3.48a11.899 11.899 0 0 0-3.48 8.41v131.4c0 3.15 1.25 6.18 3.48 8.41 2.23 2.23 5.26 3.48 8.41 3.48Z"
fill="#DCDDDD"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M126.975 46h128.77c6.56 0 11.89 5.32 11.89 11.89v9.24h-152.54v-9.24c0-6.57 5.32-11.89 11.88-11.89Z"
fill="#999"
/>
<path
d="M136.064 99.007c12.54-2.76 26.01-4.74 40.13-5.79M64.414 131.78c9.47-8.83 22.67-16.61 38.62-22.88"
stroke="#31333A"
stroke-width="2.126"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M62.193 127.069c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5Z"
fill="#31333A"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M147.693 73.57c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5Z"
fill="#fff"
/>
<path
d="M147.693 73.57c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5Z"
stroke="#31333A"
stroke-width="2.126"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="m89.926 158.793 6.93 12h-13.86l6.93-12Z"
fill="#5578EC"
/>
<path
d="m96.856 170.793-6.93-12-6.93 12h13.86Z"
stroke="#3351E5"
stroke-width="2.126"
/>
<path
d="M259.143 237.095c-15.48 2.52-41.5 4.94-58.78 4.94-18.54 0-39.27-2.06-55.7-4.94M112.663 228.745c-2.15-.73-4.25-1.48-6.32-2.25-.42-.16-.84-.32-1.25-.48-15.42-5.9-28.34-13.21-37.91-21.51M332.263 202.087c-8.42 7.24-19.07 13.93-31.48 19.79-1.75.83-3.54 1.64-5.36 2.43"
stroke="#31333A"
stroke-width="2.126"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="m137.509 224.27-2.07 4.53c-.13.28-.11.61.05.88l2.56 4.28c.4.67-.14 1.51-.92 1.42l-4.95-.57a.94.94 0 0 0-.82.32l-3.28 3.76c-.51.59-1.48.33-1.63-.44l-.99-4.88a.945.945 0 0 0-.56-.68l-4.59-1.96a.944.944 0 0 1-.09-1.69l4.34-2.45a.97.97 0 0 0 .48-.74l.44-4.97c.07-.78 1-1.14 1.58-.61l3.67 3.37c.23.21.55.3.85.23l4.86-1.12c.77-.17 1.4.6 1.07 1.32Z"
fill="#fff"
/>
<path
d="m135.439 228.8 2.07-4.53a.945.945 0 0 0-1.07-1.32l-4.86 1.12a.95.95 0 0 1-.85-.23l-3.67-3.37a.944.944 0 0 0-1.58.61l-.44 4.97a.97.97 0 0 1-.48.74l-4.34 2.45a.944.944 0 0 0 .09 1.69l4.59 1.96c.29.12.49.37.56.68l.99 4.88c.15.77 1.12 1.03 1.63.44l3.28-3.76c.2-.24.51-.35.82-.32l4.95.57c.78.09 1.32-.75.92-1.42l-2.56-4.28a.947.947 0 0 1-.05-.88Z"
stroke="#31333A"
stroke-width="2.126"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="m335.832 196.284 8.478-1.554-1.554-8.479-8.479 1.555 1.555 8.478Z"
fill="#5578EC"
/>
<path
d="m343.99 187.106-8.475 1.553 1.17 6.384 8.475-1.554-1.17-6.383Z"
stroke="#3351E5"
stroke-width="2.126"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M136.863 209.542h128.76c6.56 0 11.88-5.33 11.88-11.89V66.242c0-6.56-5.32-11.88-11.88-11.88h-128.76c-3.15 0-6.18 1.25-8.41 3.48a11.899 11.899 0 0 0-3.48 8.41v131.4c0 3.15 1.25 6.18 3.48 8.41 2.23 2.23 5.26 3.48 8.41 3.48Z"
fill="#fff"
/>
<path
d="M278.57 55.425H126.036v153.05H278.57V55.425Z"
stroke="#31333A"
stroke-width="2.126"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M136.853 54.362h128.77c6.56 0 11.88 5.32 11.88 11.89v9.24h-152.53v-9.24c0-6.57 5.32-11.89 11.88-11.89Z"
fill="#5578EC"
/>
<path
d="M265.623 54.362h-128.77c-6.56 0-11.88 5.32-11.88 11.89v9.24h152.53v-9.24c0-6.57-5.32-11.89-11.88-11.89Z"
stroke="#3351E5"
stroke-width="2.126"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M132.492 64.922a5.695 5.695 0 1 1 11.39.01 5.695 5.695 0 0 1-11.39-.01ZM148.833 64.922a5.695 5.695 0 1 1 11.39.01 5.695 5.695 0 0 1-11.39-.01ZM165.176 64.922a5.695 5.695 0 1 1 11.39.011 5.695 5.695 0 0 1-11.39-.01Z"
fill="#fff"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M145.772 162.308h110.93v-6.85h-110.93v6.85ZM145.772 173.204h110.93v-6.85h-110.93v6.85ZM145.772 184.1h62.4v-6.85h-62.4v6.85Z"
fill="#C6C6C5"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M212.883 107.575c.27-.3.74-.32 1.05-.05a23.046 23.046 0 0 1 5.85 26.13c-4.66 4.52-11.57 6.95-18.89 5.98-1.96-.26-3.82-.75-5.57-1.43-.26-.11-.53-.21-.79-.33-.02 0-.04-.01-.06-.02a23.175 23.175 0 0 1-10.98-10.25c-.04-.06-.06-.12-.1-.18-1.61-3.32-2.29-7.05-1.79-10.88.18-1.32.49-2.6.93-3.81 2.58 1.13 5.31 1.89 8.11 2.25 6.06.81 11.8-.23 16.26-2.56a18.35 18.35 0 0 0 5.94-4.81l.04-.04Z"
fill="#fff"
/>
<path
d="M213.933 107.525a.752.752 0 0 0-1.05.05l-.04.04c-1.62 2-3.64 3.64-5.94 4.81-4.46 2.33-10.2 3.37-16.26 2.56-2.8-.36-5.53-1.12-8.11-2.25a18.45 18.45 0 0 0-.93 3.81c-.5 3.83.18 7.56 1.79 10.88.04.06.06.12.1.18 2.39 4.48 6.22 8.12 10.98 10.25.02.01.04.02.06.02.26.12.53.22.79.33 1.75.68 3.61 1.17 5.57 1.43 7.32.97 14.23-1.46 18.89-5.98a23.046 23.046 0 0 0-5.85-26.13Z"
stroke="#31333A"
stroke-width=".992"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M214.277 108.303c-.55-.47-1.38-.4-1.84.15-1.57 1.8-3.46 3.28-5.58 4.37-4.47 2.34-10.21 3.37-16.27 2.56-1.13-.15-2.25-.36-3.36-.64a26.29 26.29 0 0 0-2.77 8.76c-.26 1.93-.3 3.89-.13 5.83a22.908 22.908 0 0 1-3.65-15.77c.05-.41.12-.81.19-1.21-.51-.27-1.02-.55-1.5-.84-.59-.36-1.16-.74-1.71-1.14-.48-.35-.82-.85-.98-1.42a2.71 2.71 0 0 1 1.85-3.36c1.92-.56 3.89-.91 5.89-1.04 6.78-10.3 20.4-13.55 31.11-7.45a23.125 23.125 0 0 1 11.51 23.13c-.71 5.42-3.34 10.4-7.4 14.06 3.86-8.9 1.75-19.27-5.3-25.94a.265.265 0 0 0-.06-.05Z"
fill="#31333A"
/>
<path
d="M212.437 108.453c.46-.55 1.29-.62 1.84-.15.02.01.04.03.06.05 7.05 6.67 9.16 17.04 5.3 25.94 4.06-3.66 6.69-8.64 7.4-14.06a23.125 23.125 0 0 0-11.51-23.13c-10.71-6.1-24.33-2.85-31.11 7.45-2 .13-3.97.48-5.89 1.04a2.71 2.71 0 0 0-1.85 3.36c.16.57.5 1.07.98 1.42.55.4 1.12.78 1.71 1.14.48.29.99.57 1.5.84-.07.4-.14.8-.19 1.21-.74 5.52.55 11.13 3.65 15.77-.17-1.94-.13-3.9.13-5.83.4-3.06 1.34-6.02 2.77-8.76 1.11.28 2.23.49 3.36.64 6.06.81 11.8-.22 16.27-2.56 2.12-1.09 4.01-2.57 5.58-4.37Z"
stroke="#31333A"
/>
<path
d="m194.061 126.161 3.34-3.6M193.931 122.69l3.6 3.34M208.133 126.305l3.34-3.6M208.002 122.835l3.6 3.34M181.607 116.548c-1.479 11.132 7.154 21.47 19.288 23.082 12.123 1.611 23.157-6.112 24.636-17.245 1.481-11.142-7.153-21.479-19.276-23.09-12.133-1.613-23.167 6.111-24.648 17.253Z"
stroke="#31333A"
stroke-width="2.126"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="m169.931 103.186-9.09-.09v.07l-16.32 21.59.49 4.83 15.56.16-.07 7.12 9.08.09.07-7.12 3.96.04.06-6.07-3.95-.04.21-20.58Zm-9.192 9.971-.16-.02-1.01 1.73-7.24 8.72 8.31.08.1-10.51ZM247.096 136.867l9.09.09.07-7.12 3.95.04.07-6.07-3.95-.04.21-20.58-9.09-.09v.07l-16.32 21.59.49 4.83 15.56.16-.08 7.12Zm.248-23.7-.16-.03-1.01 1.73-7.24 8.72 8.3.08.11-10.5Z"
fill="#31333A"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M264.771 220.051c-5.87 3.29-13 4.45-20.09 2.69-14.71-3.64-23.72-18.37-20.12-32.9 3.6-14.54 18.43-23.37 33.14-19.73 14.71 3.64 23.71 18.37 20.12 32.9-1.03 4.18-3 7.88-5.61 10.95l16.29 18.45.81-3.28 2.35 1.24-1.08 4.39-7.35 5.5-18.46-20.21Z"
fill="#3351E5"
/>
<path
d="M244.681 222.741c7.09 1.76 14.22.6 20.09-2.69l18.46 20.21 7.35-5.5 1.08-4.39-2.35-1.24-.81 3.28-16.29-18.45c2.61-3.07 4.58-6.77 5.61-10.95 3.59-14.53-5.41-29.26-20.12-32.9-14.71-3.64-29.54 5.19-33.14 19.73-3.6 14.53 5.41 29.26 20.12 32.9Z"
stroke="#3351E5"
stroke-width=".992"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M277.111 200.513c-.8 3.23-2.25 6.15-4.17 8.66l18.72 21.2-7.34 5.5-18.61-20.37c-5.79 3.37-13.02 4.57-20.26 2.78-14.19-3.51-23.02-17.16-19.72-30.48 3.29-13.33 17.47-21.28 31.66-17.77 14.18 3.51 23.01 17.16 19.72 30.48Z"
fill="#5578EC"
/>
<path
d="M272.941 209.173c1.92-2.51 3.37-5.43 4.17-8.66 3.29-13.32-5.54-26.97-19.72-30.48-14.19-3.51-28.37 4.44-31.66 17.77-3.3 13.32 5.53 26.97 19.72 30.48 7.24 1.79 14.47.59 20.26-2.78l18.61 20.37 7.34-5.5-18.72-21.2Z"
stroke="#3351E5"
stroke-width=".992"
/>
<path
d="M258.139 169.99c-.06-.01-.11-.03-.16-.04-11.16-2.76-22.31 1.57-28.17 10.03a26.8 26.8 0 0 0-4.66 9.77c-3.6 14.54 5.41 29.27 20.12 32.91 7.09 1.75 14.22.6 20.09-2.69l18.46 20.21 7.35-5.5 1.08-4.39-17.21-19.48c1.5-2.37 2.66-5.01 3.37-7.88 3.6-14.53-5.41-29.27-20.12-32.9a.833.833 0 0 0-.15-.04Z"
stroke="#31333A"
stroke-width="2"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M232.624 189.502c-2.44 9.862 3.998 19.943 14.375 22.51 10.387 2.57 20.782-3.347 23.222-13.21 2.44-9.862-4-19.934-14.387-22.503-10.377-2.567-20.77 3.34-23.21 13.203Z"
fill="#fff"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M235.672 205.485c-3.227-4.276-4.582-9.782-3.237-15.222 2.44-9.863 12.833-15.77 23.21-13.203 6.397 1.582 11.297 6.01 13.547 11.482-2.625-3.478-6.491-6.141-11.152-7.294-10.378-2.567-20.77 3.34-23.21 13.203-.938 3.792-.564 7.617.842 11.034Z"
fill="#E7E7E7"
/>
<path
d="M232.624 189.502c-2.44 9.862 3.998 19.943 14.375 22.51 10.387 2.57 20.782-3.347 23.222-13.21 2.44-9.862-4-19.934-14.387-22.503-10.377-2.567-20.77 3.34-23.21 13.203Z"
stroke="#31333A"
stroke-width="2"
/>
<path
d="M250.303 204.983s-4.05.08-6.64-1.6c-2.59-1.67-2.95-3.98-2.95-3.98"
stroke="#31333A"
stroke-width="2.126"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="m287.587 249.187-16.93-18.84c-1.36-1.52-.21-4.8 2.59-7.31l3.38-3.03c2.79-2.52 6.17-3.32 7.54-1.8l16.93 18.84c1.37 1.53.21 4.8-2.59 7.31l-3.38 3.04c-2.79 2.51-6.17 3.31-7.54 1.79Z"
fill="#DCDDDD"
/>
<path
d="m270.657 230.347 16.93 18.84c1.37 1.52 4.75.72 7.54-1.79l3.38-3.04c2.8-2.51 3.96-5.78 2.59-7.31l-16.93-18.84c-1.37-1.52-4.75-.72-7.54 1.8l-3.38 3.03c-2.8 2.51-3.95 5.79-2.59 7.31Z"
stroke="#31333A"
stroke-width="2.126"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="m298.505 244.358-3.37 3.03c-2.8 2.52-6.18 3.32-7.54 1.8l-1.38-1.54 13.51-12.13 1.37 1.53c1.37 1.52.21 4.8-2.59 7.31Z"
fill="#0D1D38"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="m287.587 249.186-16.93-18.84c-1.36-1.52-.21-4.8 2.59-7.31l.85-.76 21.88 24.36-.85.76c-2.79 2.51-6.17 3.31-7.54 1.79Z"
fill="#DCDDDD"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M281.843 220.296c.82-.74 1.81-.97 2.21-.53l15.48 17.24c.4.44.06 1.4-.76 2.13-.81.73-1.8.97-2.2.52l-15.48-17.23c-.4-.44-.06-1.4.75-2.13Z"
fill="#fff"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M180.431 108.9a3.55 3.55 0 1 0 .002 7.102 3.55 3.55 0 0 0-.002-7.102Z"
fill="#31333A"
/>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -2,7 +2,7 @@
<div class="w-full h-full flex justify-center items-center p-4"> <div class="w-full h-full flex justify-center items-center p-4">
<div class="flex flex-col md:flex-row items-center"> <div class="flex flex-col md:flex-row items-center">
<div> <div>
<img src="@/assets/404.svg" alt="404" class="w-[320px]" /> <img src="./image-404.svg" alt="404" class="w-[320px]" />
</div> </div>
<div class="slide-in-bottom"> <div class="slide-in-bottom">
<h1 class="text-3xl font-bold my-0">404</h1> <h1 class="text-3xl font-bold my-0">404</h1>

View File

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 79 KiB

View File

@ -15,8 +15,8 @@
<div <div
class="login-box w-[960px] h-[560px] relative mx-4 grid md:grid-cols-2 rounded overflow-hidden border border-blue-100" class="login-box w-[960px] h-[560px] relative mx-4 grid md:grid-cols-2 rounded overflow-hidden border border-blue-100"
> >
<div class="relative hidden md:block w-full h-full overflow-hidden bg-[rgb(var(--primary-6))] px-4"> <div class="login-left relative hidden md:block w-full h-full overflow-hidden bg-[rgb(var(--primary-6))] px-4">
<img src="@/assets/td.svg" :alt="appStore.title" class="w-full h-full select-none" /> <!-- <img src="./image-br.svg" :alt="appStore.title" class="w-full h-full select-none" /> -->
</div> </div>
<div class="relative p-20 px-8 md:px-14 bg-white shadow-sm"> <div class="relative p-20 px-8 md:px-14 bg-white shadow-sm">
<div class="text-2xl">欢迎登陆</div> <div class="text-2xl">欢迎登陆</div>
@ -115,11 +115,14 @@ const onSubmitForm = async () => {
<style lang="less" scoped> <style lang="less" scoped>
.page-login { .page-login {
background-image: url(@/assets/bg-login.jpg); background-image: url(./image-bg.jpg);
} }
.login-box { .login-box {
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.1); box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.1);
} }
.login-left {
background: rgb(var(--primary-6)) url(/src/pages/_login/image-br.svg) no-repeat center center/90% auto;
}
</style> </style>
<route lang="json"> <route lang="json">

View File

@ -9,7 +9,7 @@
<a-checkbox>全部选择</a-checkbox> <a-checkbox>全部选择</a-checkbox>
</template> </template>
</a-card> </a-card>
<a-modal :visible="true" :width="1280" :title="'选择素材'" title-align="start" :closable="false"> <a-modal v-model:visible="state.visible" :width="1280" :title="'选择素材'" title-align="start" :closable="false">
<div class="w-full h-[600px] flex gap-4"> <div class="w-full h-[600px] flex gap-4">
<div class="w-64 p-2 pr-4 border"> <div class="w-64 p-2 pr-4 border">
<a-input-search placeholder="请输入关键字"></a-input-search> <a-input-search placeholder="请输入关键字"></a-input-search>
@ -63,6 +63,7 @@ for (const item of items) {
const state = reactive({ const state = reactive({
menus: items, menus: items,
visible: true
}); });
const indeter = (items: any[]) => { const indeter = (items: any[]) => {
@ -83,26 +84,17 @@ const onItemChange = (item: any, menu: any) => {
}; };
const table = useTable({ const table = useTable({
data: async (model, paging) => { data: items,
return api.role.getRoles();
},
columns: [ columns: [
{ {
title: "角色名称", title: "角色名称",
dataIndex: "username", dataIndex: "title",
width: 180, width: 180,
render({ record }) {
return (
<div class="flex flex-col overflow-hidden">
<span>{record.name}</span>
<span class="text-gray-400 text-xs truncate">{record.slug}</span>
</div>
);
},
}, },
{ {
title: "角色描述", title: "类型",
dataIndex: "description", dataIndex: "description",
render: () => <a-tag color="blue">菜单</a-tag>,
}, },
{ {
title: "创建时间", title: "创建时间",

View File

@ -7,7 +7,7 @@
<div class="mt-1 text-gray-400">用户上传的图片视频音频等素材可用于文章图文视频等内容的编辑</div> <div class="mt-1 text-gray-400">用户上传的图片视频音频等素材可用于文章图文视频等内容的编辑</div>
</div> </div>
<div class="text-sm text-gray-400"> <div class="text-sm text-gray-400">
<a-button type="primary"> <a-button type="primary" @click="visible = true">
<template #icon> <template #icon>
<i class="icon-park-outline-add"></i> <i class="icon-park-outline-add"></i>
</template> </template>
@ -138,6 +138,20 @@
<div class="mt-4 flex justify-end"> <div class="mt-4 flex justify-end">
<a-pagination :total="232" :show-total="true"></a-pagination> <a-pagination :total="232" :show-total="true"></a-pagination>
</div> </div>
<a-modal v-model:visible="visible" title="修改密码" :width="432" :footer="false" title-align="start">
<a-form :model="{}" layout="vertical">
<a-form-item label="原密码">
<a-input placeholder="请输入原密码"></a-input>
</a-form-item>
<a-form-item label="新密码">
<a-input placeholder="请输入新密码"></a-input>
</a-form-item>
<a-form-item label="确认新密码">
<a-input placeholder="请再次输入新密码"></a-input>
</a-form-item>
<a-button type="primary" class="w-full mt-2">修改密码</a-button>
</a-form>
</a-modal>
</template> </template>
</bread-page> </bread-page>
</template> </template>
@ -145,6 +159,8 @@
<script setup lang="tsx"> <script setup lang="tsx">
import { Modal } from "@arco-design/web-vue"; import { Modal } from "@arco-design/web-vue";
const visible = ref(false)
const onRowActionsSelect = () => { const onRowActionsSelect = () => {
Modal.open({ Modal.open({
title: "提示", title: "提示",

View File

@ -1,229 +1,14 @@
<template> <template>
<div class="m-4 p-4 bg-white"> <div></div>
<Table v-bind="table">
<template #action>
<a-button @click="model.visible = true">
<template #icon>
<i class="icon-park-outline-download"></i>
</template>
导出
</a-button>
<a-button @click="model.visible = true">
<template #icon>
<i class="icon-park-outline-upload"></i>
</template>
导入
</a-button>
</template>
</Table>
<a-modal title="导出为文件" v-model:visible="model.visible" title-align="start">
<a-form :model="{}" layout="vertical" class="export-form">
<a-form-item label="文件名">
<a-input v-model="model.filename" placeholder="请输入"></a-input>
</a-form-item>
<a-form-item label="文件类型">
<div class="grid gap-2">
<div
v-for="item in exportTypes"
@click="model.exportType = item.name"
class="w-full flex justify-between items-center gap-4 rounded py-2 px-4 cursor-pointer bg-[var(--color-fill-2)] hover:bg-[var(--color-fill-3)]"
:class="{
'!border-brand-500': model.exportType === item.name,
}"
>
<div class="flex items-center gap-2 rounded">
<div class="">
<i :class="item.icon" class="text-2xl text-brand-500"></i>
</div>
<div>
<div class="text-slate-900">
{{ item.label }}
</div>
<div class="text-slate-500 text-xs">
{{ item.description }}
</div>
</div>
</div>
<div>
<a-radio v-model="model.exportType" :value="item.name" class="mt-1"></a-radio>
</div>
</div>
</div>
</a-form-item>
</a-form>
</a-modal>
<a-modal title="导入类型" :visible="false" title-align="start">
<a-alert> 请按照 <a-link>上传模板</a-link> </a-alert>
<a-upload draggable class="mt-4"></a-upload>
</a-modal>
</div>
</template> </template>
<script setup lang="tsx" name="PostPage"> <script setup lang="tsx"></script>
import { api } from "@/api";
import { Table, useTable } from "@/components";
import { dayjs } from "@/libs";
const table = useTable({ <style lang="less"></style>
data: async (model, paging) => {
return api.post.getPosts({ ...model, ...paging });
},
columns: [
{
title: "文章名称",
dataIndex: "title",
width: 240,
},
{
title: "文章描述",
dataIndex: "description",
},
{
title: "创建时间",
dataIndex: "createdAt",
width: 200,
render: ({ record }) => dayjs(record.createdAt).format(),
},
{
title: "操作",
type: "dropdown",
width: 140,
dropdowns: [
{
type: "modify",
text: "修改",
icon: "icon-park-outline-edit",
},
{
type: "delete",
text: "删除",
icon: "icon-park-outline-delete",
onClick: ({ record }) => {
return api.post.delPost(record.id);
},
doptionProps: {
class: "!text-red-500 !hover-bg-red-50",
},
},
],
},
],
search: {
formProps: {
layout: 'inline',
},
items: [
{
extend: "title",
required: false,
},
{
extend: "title",
required: false,
},
{
extend: "title",
required: false,
},
{
extend: "title",
required: false,
},
{
extend: "title",
required: false,
},
],
},
create: {
title: "新建文章",
modalProps: {
width: 580,
maskClosable: false,
},
formProps: {
layout: "vertical",
},
items: [
{
field: "title",
label: "文章名称",
type: "input",
required: true,
},
{
field: "slug",
label: "文章标识",
type: "input",
},
{
field: "description",
label: "文章描述",
type: "input",
},
{
field: "content",
label: "文章内容",
type: "textarea",
},
],
submit: ({ model }) => {
return api.post.addPost(model);
},
},
modify: {
extend: true,
title: "修改文章",
submit: ({ model }) => {
return api.post.updatePost(model.id, model);
},
},
});
const exportTypes = [
{
name: "excel",
icon: "icon-park-outline-file-excel",
label: "Excel格式",
description: "导出为 .xlsx 文件",
},
{
name: "csv",
icon: "icon-park-outline-file-code",
label: "CSV格式",
description: "导出为 .csv 文件",
},
{
name: "text",
icon: "icon-park-outline-file-text",
label: "TEXT格式",
description: "导出为 .txt 文件",
},
];
const model = reactive({
visible: false,
exportType: "excel",
filename: dayjs().format("文件YYYYMMDDHHmmss"),
});
</script>
<style lang="less">
.export-form {
.arco-form-item-content {
display: block;
}
}
</style>
<route lang="json"> <route lang="json">
{ {
"meta": { "meta": {
"sort": 10300,
"title": "文章管理",
"icon": "icon-park-outline-document-folder"
},
"parentMeta": {
"sort": 10300, "sort": 10300,
"title": "内容管理", "title": "内容管理",
"icon": "icon-park-outline-document-folder" "icon": "icon-park-outline-document-folder"

View File

@ -22,7 +22,7 @@ const after: NavigationHookAfter = function (to) {
setTimeout(() => { setTimeout(() => {
appStore.setPageLoading(false); appStore.setPageLoading(false);
routeMap.set(to.fullPath, true); routeMap.set(to.fullPath, true);
}, 200); }, 500);
}; };
export const progressGuard = { export const progressGuard = {

View File

@ -1,7 +1,5 @@
@import url("@arco-design/web-vue/es/index.less"); @import url("@arco-design/web-vue/es/index.less");
// @blue-6: #09f;
@arcoblue-6:#08f; @arcoblue-6:#08f;
body { body {

View File

@ -17,6 +17,8 @@ body {
#app { #app {
width: 100%; width: 100%;
height: 100%; height: 100%;
min-width: 1440px;
min-height: 900px;
} }
h1 { h1 {