first commit

This commit is contained in:
belugaQAQ 2025-10-27 22:59:00 +08:00
commit 59f051e5a2
30 changed files with 8549 additions and 0 deletions

27
README.md Normal file
View File

@ -0,0 +1,27 @@
# sticky-homework-2
The Site is generated using [vuepress](https://vuepress.vuejs.org/) and [vuepress-theme-plume](https://github.com/pengzhanbo/vuepress-theme-plume)
## Install
```sh
npm i
```
## Usage
```sh
# start dev server
npm run docs:dev
# build for production
npm run docs:build
# preview production build in local
npm run docs:preview
# update vuepress and theme
npm run vp-update
```
## Documents
- [vuepress](https://vuepress.vuejs.org/)
- [vuepress-theme-plume](https://theme-plume.vuejs.press/)

27
README.zh-CN.md Normal file
View File

@ -0,0 +1,27 @@
# sticky-homework-2
网站使用 [vuepress](https://vuepress.vuejs.org/) 和 [vuepress-theme-plume](https://github.com/pengzhanbo/vuepress-theme-plume) 构建生成。
## Install
```sh
npm i
```
## Usage
```sh
# 启动开发服务
npm run docs:dev
# 构建生产包
npm run docs:build
# 本地预览生产服务
npm run docs:preview
# 更新 vuepress 和主题
npm run vp-update
```
## 文档
- [vuepress](https://vuepress.vuejs.org/)
- [vuepress-theme-plume](https://theme-plume.vuejs.press/)

22
docs/.vuepress/client.ts Normal file
View File

@ -0,0 +1,22 @@
import { defineClientConfig } from 'vuepress/client'
// import RepoCard from 'vuepress-theme-plume/features/RepoCard.vue'
// import NpmBadge from 'vuepress-theme-plume/features/NpmBadge.vue'
// import NpmBadgeGroup from 'vuepress-theme-plume/features/NpmBadgeGroup.vue'
// import Swiper from 'vuepress-theme-plume/features/Swiper.vue'
// import CustomComponent from './theme/components/Custom.vue'
// import './theme/styles/custom.css'
export default defineClientConfig({
enhance({ app }) {
// built-in components
// app.component('RepoCard', RepoCard)
// app.component('NpmBadge', NpmBadge)
// app.component('NpmBadgeGroup', NpmBadgeGroup)
// app.component('Swiper', Swiper) // you should install `swiper`
// your custom components
// app.component('CustomComponent', CustomComponent)
},
})

View File

@ -0,0 +1,72 @@
/**
* @see https://theme-plume.vuejs.press/guide/collection/ 查看文档了解配置详情。
*
* Collections `.vuepress/plume.config.ts`
*
* Collections vuepress vuepress
* Collections Collection Markdown permalink
*
* collection type `post`
*
*
* collection type `doc`
*
* Markdown permalink
* Collection link `collection.link`
*
*/
/**
* IDE
*
* - `defineCollections` collection
* - `defineCollection` collection
*
* `defineCollection` collection `defineCollections`
*/
import { defineCollection, defineCollections } from 'vuepress-theme-plume'
const blog = defineCollection({
// post 类型,这里用于实现 博客功能
type: 'post',
// 文档集合所在目录,相对于 `docs`
dir: 'blog',
// 文档标题,它将用于在页面的面包屑导航中显示
title: 'Blog',
// 文章列表页的链接,如果 `linkPrefix` 未定义,它也将作为 相关的文章的 permalink 的前缀
link: '/blog/',
// linkPrefix: '/article/', // 相关文章的链接前缀
// postList: true, // 是否启用文章列表页
// tags: true, // 是否启用标签页
// archives: true, // 是否启用归档页
// categories: true, // 是否启用分类页
// postCover: 'right', // 文章封面位置
// pagination: 15, // 每页显示文章数量
})
const demoDoc = defineCollection({
// doc 类型,该类型带有侧边栏
type: 'doc',
// 文档集合所在目录,相对于 `docs`
dir: 'guide',
// `dir` 所指向的目录中的所有 markdown 文件,其 permalink 需要以 `linkPrefix` 配置作为前缀
// 如果 前缀不一致,则无法生成侧边栏。
// 所以请确保 markdown 文件的 permalink 都以 `linkPrefix` 开头
linkPrefix: '/guide',
// 文档标题,它将用于在页面的面包屑导航中显示
title: 'guide',
// 手动配置侧边栏结构
sidebar: ['', 'subject', 'tag', 'use', 'title', 'color'],
// 根据文件结构自动生成侧边栏
//sidebar: 'auto',
})
/**
* collections
* (blog )
* (demoDoc )
*/
export default defineCollection([
blog,
demoDoc,
])

168
docs/.vuepress/config.ts Normal file
View File

@ -0,0 +1,168 @@
/**
*
* - @see https://theme-plume.vuejs.press/config/intro/ 配置说明
* - @see https://theme-plume.vuejs.press/config/theme/ 主题配置项
*
* vuepress
* vuepress `.vuepress/config.ts`
*
*
*/
import { viteBundler } from '@vuepress/bundler-vite'
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
base: '/',
lang: 'zh-CN',
title: 'StickyHomework2',
description: '一款支持富文本的桌面作业贴工具',
head: [
// 配置站点图标
['link', { rel: 'icon', type: 'image/png', href: 'https://theme-plume.vuejs.press/favicon-32x32.png' }],
],
bundler: viteBundler(),
shouldPrefetch: false, // 站点较大,页面数量较多时,不建议启用
theme: plumeTheme({
/* 添加您的部署域名, 有助于 SEO, 生成 sitemap */
// hostname: 'https://your_site_url',
/* 文档仓库配置,用于 editLink */
// docsRepo: '',
// docsDir: 'docs',
// docsBranch: '',
/* 页内信息 */
// editLink: true,
// lastUpdated: true,
// contributors: true,
// changelog: false,
/**
*
* @see https://theme-plume.vuejs.press/config/basic/#cache
*/
cache: 'filesystem',
/**
* markdown frontmatter
* @see https://theme-plume.vuejs.press/config/basic/#autofrontmatter
*/
// autoFrontmatter: {
// permalink: true, // 是否生成永久链接
// createTime: true, // 是否生成创建时间
// title: true, // 是否生成标题
// },
/* 本地搜索, 默认启用 */
search: { provider: 'local' },
/**
* Algolia DocSearch
* search false
* @see https://theme-plume.vuejs.press/config/plugins/search/#algolia-docsearch
*/
// search: {
// provider: 'algolia',
// appId: '',
// apiKey: '',
// indices: [''],
// },
/**
* Shiki
* @see https://theme-plume.vuejs.press/config/plugins/code-highlight/
*/
// codeHighlighter: {
// twoslash: true, // 启用 twoslash
// whitespace: true, // 启用 空格/Tab 高亮
// lineNumbers: true, // 启用行号
// },
/* 文章字数统计、阅读时间,设置为 false 则禁用 */
// readingTime: true,
/**
* markdown
* @see https://theme-plume.vuejs.press/config/markdown/
*/
// markdown: {
// abbr: true, // 启用 abbr 语法 *[label]: content
// annotation: true, // 启用 annotation 语法 [+label]: content
// pdf: true, // 启用 PDF 嵌入 @[pdf](/xxx.pdf)
// caniuse: true, // 启用 caniuse 语法 @[caniuse](feature_name)
// plot: true, // 启用隐秘文本语法 !!xxxx!!
// bilibili: true, // 启用嵌入 bilibili视频 语法 @[bilibili](bid)
// youtube: true, // 启用嵌入 youtube视频 语法 @[youtube](video_id)
// artPlayer: true, // 启用嵌入 artPlayer 本地视频 语法 @[artPlayer](url)
// audioReader: true, // 启用嵌入音频朗读功能 语法 @[audioReader](url)
// icon: { provider: 'iconify' }, // 启用内置图标语法 ::icon-name::
// table: true, // 启用表格增强容器语法 ::: table
// codepen: true, // 启用嵌入 codepen 语法 @[codepen](user/slash)
// replit: true, // 启用嵌入 replit 语法 @[replit](user/repl-name)
// codeSandbox: true, // 启用嵌入 codeSandbox 语法 @[codeSandbox](id)
// jsfiddle: true, // 启用嵌入 jsfiddle 语法 @[jsfiddle](user/id)
// npmTo: true, // 启用 npm-to 容器 ::: npm-to
// demo: true, // 启用 demo 容器 ::: demo
// repl: { // 启用 代码演示容器
// go: true, // ::: go-repl
// rust: true, // ::: rust-repl
// kotlin: true, // ::: kotlin-repl
// python: true, // ::: python-repl
// },
// math: { // 启用数学公式
// type: 'katex',
// },
// chartjs: true, // 启用 chart.js
// echarts: true, // 启用 ECharts
// mermaid: true, // 启用 mermaid
// flowchart: true, // 启用 flowchart
// image: {
// figure: true, // 启用 figure
// lazyload: true, // 启用图片懒加载
// mark: true, // 启用图片标记
// size: true, // 启用图片大小
// },
// include: true, // 在 Markdown 文件中导入其他 markdown 文件内容
// imageSize: 'local', // 启用 自动填充 图片宽高属性,避免页面抖动
// },
/**
*
* @see https://theme-plume.vuejs.press/guide/features/watermark/
*/
// watermark: true,
/**
* comments
* @see https://theme-plume.vuejs.press/guide/features/comments/
*/
// comment: {
// provider: '', // "Artalk" | "Giscus" | "Twikoo" | "Waline"
// comment: true,
// repo: '',
// repoId: '',
// category: '',
// categoryId: '',
// mapping: 'pathname',
// reactionsEnabled: true,
// inputPosition: 'top',
// },
/**
*
* @see https://theme-plume.vuejs.press/guide/features/replace-assets/
*/
// replaceAssets: 'https://cdn.example.com',
/**
*
* @see https://theme-plume.vuejs.press/guide/features/encryption/
*/
// encrypt: {},
}),
})

18
docs/.vuepress/navbar.ts Normal file
View File

@ -0,0 +1,18 @@
/**
* @see https://theme-plume.vuejs.press/config/navigation/ 查看文档了解配置详情
*
* Navbar `.vuepress/plume.config.ts`
*/
import { defineNavbarConfig } from 'vuepress-theme-plume'
export default defineNavbarConfig([
{ text: '首页', link: '/' },
{ text: '博客', link: '/blog/' },
{ text: '标签', link: '/blog/tags/' },
{ text: '归档', link: '/blog/archives/' },
{
text: '笔记',
items: [{ text: '示例', link: '/guide/README.md' }]
},
])

View File

@ -0,0 +1,81 @@
/**
*
* - @see https://theme-plume.vuejs.press/config/intro/ 配置说明
* - @see https://theme-plume.vuejs.press/config/theme/ 主题配置项
*
* vuepress
*
* `.vuepress/config.ts`
*
* `.vuepress/config.ts`
*/
import { defineThemeConfig } from 'vuepress-theme-plume'
import navbar from './navbar'
import collections from './collections'
/**
* @see https://theme-plume.vuejs.press/config/basic/
*/
export default defineThemeConfig({
logo: 'https://theme-plume.vuejs.press/plume.png',
appearance: true, // 配置 深色模式
social: [
{ icon: 'github', link: '/' },
],
// navbarSocialInclude: ['github'], // 允许显示在导航栏的 social 社交链接
// aside: true, // 页内侧边栏, 默认显示在右侧
// outline: [2, 3], // 页内大纲, 默认显示 h2, h3
/**
*
* @see https://theme-plume.vuejs.press/guide/features/copyright/
*/
// copyright: true,
// prevPage: true, // 是否启用上一页链接
// nextPage: true, // 是否启用下一页链接
// createTime: true, // 是否显示文章创建时间
/* 站点页脚 */
// footer: {
// message: 'Power by <a target="_blank" href="https://v2.vuepress.vuejs.org/">VuePress</a> & <a target="_blank" href="https://theme-plume.vuejs.press">vuepress-theme-plume</a>',
// copyright: '',
// },
/**
* @see https://theme-plume.vuejs.press/config/basic/#profile
*/
profile: {
avatar: 'https://theme-plume.vuejs.press/plume.png',
name: 'StickyHomework2',
description: '一款支持富文本的桌面作业贴工具',
// circle: true,
// location: '',
// organization: '',
},
navbar,
collections,
/**
*
* @see https://theme-plume.vuejs.press/guide/features/bulletin/
*/
// bulletin: {
// layout: 'top-right',
// contentType: 'markdown',
// title: '公告板标题',
// content: '公告板内容',
// },
/* 过渡动画 @see https://theme-plume.vuejs.press/config/basic/#transition */
// transition: {
// page: true, // 启用 页面间跳转过渡动画
// postList: true, // 启用 博客文章列表过渡动画
// appearance: 'fade', // 启用 深色模式切换过渡动画, 或配置过渡动画类型
// },
})

View File

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 72 72">
<path fill="#5086a1" d="M42.334 49.147a29.945 29.945 0 0 1-19.338-8.151c-8.014-7.365-8.378-18.076-8.533-22.649l-.022-.627a2.904 2.904 0 0 1 3.457-2.951c17.005 3.355 21.695 16.324 22.056 17.4a49.543 49.543 0 0 1 3.574 15.922a1 1 0 0 1-.967 1.052c-.029.001-.106.004-.227.004" />
<path fill="#8cccd5" d="M44.436 55.316c-11.646 0-17.376-6.974-17.653-7.354a1 1 0 0 1 .262-1.424a11.103 11.103 0 0 1 12.774-1.574c-1.465-9.078 1.877-13.568 2.031-13.77a.998.998 0 0 1 .75-.39a.97.97 0 0 1 .78.325c8.944 9.771 8.793 16.532 7.908 19.691c-.034.14-1.062 4.092-4.772 4.406c-.711.062-1.405.09-2.08.09" />
<g fill="none" stroke="#333" stroke-linecap="round" stroke-linejoin="round" stroke-width="1">
<path d="M55.184 57.69S34.96 45.877 23.097 24.206m22.131 30.096c-11.93.46-17.628-6.88-17.628-6.88" />
<path d="M40.528 42.483c-.56-7.195 2.116-10.679 2.116-10.679c8.834 9.654 8.406 16.162 7.681 18.747m-13.311-3.129a30.15 30.15 0 0 1-13.341-7.162c-8.072-7.419-8.067-18.241-8.232-22.577a1.903 1.903 0 0 1 2.264-1.932C34.694 19.103 39.02 32.528 39.02 32.528" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

View File

@ -0,0 +1,11 @@
<script setup lang="ts">
import { ref } from 'vue'
const message = ref('Hello World!')
</script>
<template>
<div class="my-custom-content">
{{ message }}
</div>
</template>

6
docs/.vuepress/theme/shim.d.ts vendored Normal file
View File

@ -0,0 +1,6 @@
declare module '*.vue' {
import type { ComponentOptions } from 'vue'
const comp: ComponentOptions
export default comp
}

View File

@ -0,0 +1,59 @@
:root
{
--vp-home-hero-name-color: transparent;
--vp-home-hero-name-background: linear-gradient(120deg, var(--vp-c-purple-1) 30%, var(--vp-c-brand-2));
--vp-home-hero-tagline: var(--vp-c-text-2);
--vp-home-hero-text: var(--vp-c-text-1);
--vp-home-hero-image-background-image: linear-gradient(-45deg, var(--vp-c-brand-soft) 50%, var(--vp-c-brand-2) 50%);
--vp-home-hero-image-filter: blur(44px);
--vp-image-height: 326px;
--vp-image-width: 580px;
/** 主题颜色 */
/*
--vp-c-brand-1: #5086a1;
--vp-c-brand-2: #6aa1b7;
--vp-c-brand-3: #8cccd5;
--vp-c-brand-soft: rgba(131, 208, 218, 0.314);
*/
/** 背景颜色 */
/*
--vp-c-bg: #fff;
--vp-c-bg-alt: #f6f6f7;
--vp-c-bg-elv: #fff;
--vp-c-bg-soft: #f6f6f7;
*/
/** 文本颜色 */
/*
--vp-c-text-1: rgba(60, 60, 67);
--vp-c-text-2: rgba(60, 60, 67, 0.78);
--vp-c-text-3: rgba(60, 60, 67, 0.56);
*/
}
/** 深色模式 */
[data-theme="dark"] {
/*
--vp-c-brand-1: #8cccd5;
--vp-c-brand-2: #6aa1b7;
--vp-c-brand-3: #5086a1;
--vp-c-brand-soft: rgba(131, 208, 218, 0.314);
*/
/*
--vp-c-bg: #1b1b1f;
--vp-c-bg-alt: #161618;
--vp-c-bg-elv: #202127;
--vp-c-bg-soft: #202127;
*/
/*
--vp-c-text-1: rgba(255, 255, 245, 0.86);
--vp-c-text-2: rgba(235, 235, 245, 0.6);
--vp-c-text-3: rgba(235, 235, 245, 0.38);
*/
}

118
docs/README.md Normal file
View File

@ -0,0 +1,118 @@
---
home: true
config:
-
type: doc-hero
hero:
name: StickyHomeworks2
text: 你的下一款作业贴软件
tagline: 专为电教委与老师设计的桌面端富文本作业管理工具<br>让作业记录更清晰·学习更有条理
image: /stickyhomeworks2-icon256.png
actions:
-
theme: brand
text: 查看文档 →
link: /guide/
-
theme: alt
text: Github
link: https://github.com/zji573432-cpu/StickyHomeworks2
-
type: image-text
title: 丰富全面的功能
image: /sh.png
width: 590px
list:
-
title: 📝​富文本编辑​
description: 像写Markdown一样记录作业详情美观优雅
-
title: 📚​科目分组
description: 按学科整理作业,井井有条不混乱
-
title: 🏷️​智能标签
description: 为作业添加标签,精准筛选,快速定位
-
title: 🗂️​自动清理
description: 过期作业自动提醒或清理,界面更清爽
-
title: 🖼️​导出截图
description: 一键导出作业内容为图片,分享或打印超方便
-
title: 🔍全局缩放
description: 界面大小随心调,看清每一个细节
-
type: features
features:
- title: 开机自启
icon: ic:round-restart-alt
details: 电脑开机时自动运行软件
- title: 窗口置底
icon: ic:twotone-filter-none
details: 将窗口置于底端,防止阻碍信息获取
- title: 窗口标题
icon: ic:twotone-font-download
details: 自定义软件窗口名,使得软件更显眼
- title: 最大面板宽度
icon: ic:twotone-video-label
details: 每列作业的最大宽度,超过即换行
- title: 界面缩放
icon: ic:round-plus-minus-alt
details: 界面过小或过大时,适当调整
- title: 背景不透明度
icon: ic:twotone-opacity
details: 当软件遮挡信息时,调整背景的可视度
- title: 应用主题
icon: ic:twotone-nightlight
details: 切换深浅色背景与字色
- title: 主题色来源
icon: ic:twotone-format-color-fill
details: 自动从来源获取新的主题色
- title: 主题色
icon: ic:twotone-color-lens
details: 调节标题栏和标签的颜色
- title: 科目
icon: ic:twotone-book
details: 各科作业的主要分类
- title: 标签
icon: ic:twotone-bookmark
details: 对作业的二次分类
- title: 更新
icon: icon-park-twotone:update-rotation
details: 有了更新妈妈再也不怕我的Github上不去了
-
type: text-image
title: “独一无二” 的自定义功能
image: /sh.png
width: 590px
list:
-
title: 深色模式​
description: 切换深浅色背景与字色,护眼又美观
-
title: 主题色切换
description: 让你的作业贴多姿多彩
-
title: 背景不透明度
description: 既不遮挡信息,又能凸显你的壁纸
-
title: 更多
description: 仍有更多的设置等着你去发现
-
type: 'custom'
---
![](/wrc.png) **HelloWRC**
~~软件作者,写代码巨水~~(划掉)

View File

@ -0,0 +1,10 @@
---
title: 自定义组件
tags:
- 预览
- 组件
createTime: 2025/10/26 21:43:33
permalink: /blog/6yiy84ti/
---
<CustomComponent />

View File

@ -0,0 +1,410 @@
---
title: Markdown
tags:
- markdown
createTime: 2025/10/26 21:43:33
permalink: /blog/4l7fs9yx/
---
## 标题H2
### 标题H3
#### 标题H4
##### 标题H5
###### 标题H6
## 标题2 Badge <Badge type="tip" text="Badge" />
### 标题3 Badge <Badge type="warning" text="Badge" />
#### 标题4 Badge <Badge type="danger" text="Badge" />
正文内容。
`@property` CSS at-rule是 [CSS Houdini API](https://developer.mozilla.org/zh-CN/docs/Web/Guide/Houdini)
的一部分,它允许开发者显式地定义他们的 [CSS 自定义属性](https://developer.mozilla.org/zh-CN/docs/Web/CSS/--*),
允许进行属性类型检查、设定默认值以及定义该自定义属性是否可以被继承。
`@property` 的出现,极大的增强了 CSS 的能力。
加粗:**加粗文字**
斜体: _斜体文字_
~~删除文字~~
内容 ==标记==
数学表达式: $-(2^{n-1})$ ~ $2^{n-1} -1$
$\frac {\partial^r} {\partial \omega^r} \left(\frac {y^{\omega}} {\omega}\right)
= \left(\frac {y^{\omega}} {\omega}\right) \left\{(\log y)^r + \sum_{i=1}^r \frac {(-1)^ Ir \cdots (r-i+1) (\log y)^{ri}} {\omega^i} \right\}$
19^th^
H~2~O
::: center
内容居中
:::
::: right
内容右对齐
:::
- 无序列表1
- 无序列表2
- 无序列表3
1. 有序列表1
2. 有序列表2
3. 有序列表3
- [ ] 任务列表1
- [ ] 任务列表2
- [x] 任务列表3
- [x] 任务列表4
| Tables | Are | Cool |
| ------------- |:-------------:| -----:|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
> 引用内容
>
> 引用内容
[链接](/)
[外部链接](https://github.com/pengzhanbo)
![plume](/plume.svg)
**Badge**
- <Badge type="info" text="info badge" />
- <Badge type="tip" text="tip badge" />
- <Badge type="warning" text="warning badge" />
- <Badge type="danger" text="danger badge" />
**图标:**
- home - <Icon name="material-symbols:home" color="currentColor" size="1em" />
- vscode - <Icon name="skill-icons:vscode-dark" size="2em" />
- twitter - <Icon name="skill-icons:twitter" size="2em" />
**demo wrapper**
::: demo-wrapper title="示例" no-padding height="200px"
<style scoped>
.open-door {
display: flex;
gap: 20px;
padding: 20px;
}
.open-door .main {
background: #ccc;
}
</style>
<div class="open-door">
<div class="main">main</div>
<div class="aside">aside</div>
</div>
:::
**代码:**
```js whitespace
const a = 1
const b = 2
const c = a + b
// [!code word:obj]
const obj = {
toLong: {
deep: {
deep: {
deep: {
value: 'this is to long text. this is to long text. this is to long text. this is to long text.', // [!code highlight]
}
}
}
}
}
```
**Code Blocks TwoSlash**
```ts twoslash
// @errors: 2339
const welcome = 'Tudo bem gente?'
const words = welcome.contains(' ')
```
```ts twoslash
import express from 'express'
const app = express()
app.get('/', (req, res) => {
res.send
})
app.listen(3000)
```
```ts twoslash
import { createHighlighter } from 'shiki'
const highlighter = await createHighlighter({ themes: ['nord'], langs: ['javascript'] })
// @log: Custom log message
const a = 1
// @error: Custom error message
const b = 1
// @warn: Custom warning message
const c = 1
// @annotate: Custom annotation message
```
```ts twoslash
// @errors: 2540
interface Todo {
title: string
}
const todo: Readonly<Todo> = {
title: 'Delete inactive users'.toUpperCase(),
// ^?
}
todo.title = 'Hello'
Number.parseInt('123', 10)
// ^|
//
//
```
```vue twoslash
<script setup lang="ts">
import { ref } from 'vue'
const count = ref(0)
</script>
<template>
<p>{{ count }}</p>
</template>
```
**代码分组:**
::: code-tabs
@tab tab1
```js
const a = 1
const b = 2
const c = a + b
```
@tab tab2
```ts
const a: number = 1
const b: number = 2
const c: number = a + b
```
:::
**代码块高亮:**
```ts
function foo() {
const a = 1 // [!code highlight]
console.log(a)
const b = 2 // [!code ++]
const c = 3 // [!code --]
console.log(a + b + c) // [!code error]
console.log(a + b) // [!code warning]
}
```
**代码块聚焦:**
```ts
function foo() {
const a = 1 // [!code focus]
}
```
::: tip 仅标题
:::
::: note 注释
注释内容 [link](https://github.com/pengzhanbo) `inline code`
```js
const a = 1
const b = 2
const c = a + b
```
:::
::: info 信息
信息内容 [link](https://github.com/pengzhanbo) `inline code`
```js
const a = 1
const b = 2
const c = a + b
```
:::
::: tip 提示
提示内容 [link](https://github.com/pengzhanbo) `inline code`
```js
const a = 1
const b = 2
const c = a + b
```
:::
::: warning 警告
警告内容 [link](https://github.com/pengzhanbo) `inline code`
```js
const a = 1
const b = 2
const c = a + b
```
:::
::: caution 错误
错误内容 [link](https://github.com/pengzhanbo) `inline code`
```js
const a = 1
const b = 2
const c = a + b
```
:::
::: important 重要
重要内容 [link](https://github.com/pengzhanbo) `inline code`
```js
const a = 1
const b = 2
const c = a + b
```
:::
::: details 详细标题
这里是内容。
:::
**GFM alert**
> [!note]
> note
> [!info]
> info
> [!tip]
> tip
> [!warning]
> warning
> [!caution]
> caution
> [!important]
> important
**代码演示:**
:::: demo title="常规示例" desc="一个常规示例"
::: code-tabs
@tab HTML
```html
<div id="app">
<h3>vuepress-theme-plume</h3>
</div>
```
@tab Javascript
```js
const a = 'So Awesome!'
const app = document.querySelector('#app')
app.appendChild(window.document.createElement('small')).textContent = a
```
@tab CSS
```css
#app {
font-size: 2em;
text-align: center;
}
```
:::
::::
**选项卡:**
::: tabs
@tab 标题1
内容区块
@tab 标题2
内容区块
:::
:::: warning
::: tabs
@tab 标题1
内容区块
@tab 标题2
内容区块
:::
::::
**脚注:**
脚注 1 链接[^first]。
脚注 2 链接[^second]。
行内的脚注^[行内脚注文本] 定义。
重复的页脚定义[^second]。
[^first]: 脚注 **可以包含特殊标记**
也可以由多个段落组成
[^second]: 脚注文字。

8
docs/demo/README.md Normal file
View File

@ -0,0 +1,8 @@
---
title: Demo
createTime: 2025/10/26 21:43:33
permalink: /demo/
---
- [bar](./bar.md)
- [foo](./foo.md)

7
docs/demo/bar.md Normal file
View File

@ -0,0 +1,7 @@
---
title: bar
createTime: 2025/10/26 21:43:33
permalink: /demo/arh1gv46/
---
[foo](./foo.md)

7
docs/demo/foo.md Normal file
View File

@ -0,0 +1,7 @@
---
title: foo
createTime: 2025/10/26 21:43:33
permalink: /demo/detb1ivi/
---
[bar](./bar.md)

25
docs/guide/README.md Normal file
View File

@ -0,0 +1,25 @@
---
title: 你好!
icon: ic:twotone-waving-hand
author: ClassisBand
isOriginal: true
date: 2025-08-30T00:00:00.000Z
createTime: 2025/10/26 23:24:40
permalink: /guide/
---
### 欢迎来到StickyHomework2文档页面
::: important
一定要先看文档再向群内人员提问!!!
在接下来的文档中我将会使用Sh2来称呼StickyHomework2
:::
你可以在这里找到StickyHomework2的使用教程
图片看不清可以点击放大
请在侧边栏里寻找您需要的内容吧!
> 当然,你也可以在下面插眼()

84
docs/guide/color.md Normal file
View File

@ -0,0 +1,84 @@
---
title: 外观设置
icon: ic:twotone-color-lens
author: ClassisBand
isOriginal: true
date: 2025-08-30T00:00:00.000Z
createTime: 2025/10/26 23:24:40
permalink: /guide/m9i0taaq/
---
## 基本
### 》界面缩放
当主界面文本过大或过小时,可以调节该设置
众所周知,左小右大()
<br>
### 》背景不透明度
该设置用于在壁纸遮挡的情况下,调节该设置可以浅露壁纸
左调露出的壁纸越深,右调露出的壁纸越浅
![例子](https://tc.z.wiki/autoupload/f/FxstySYErTfw4f01iNJcONiO_OyvX7mIgxFBfDMDErs/sh2/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_2025-08-30_142143.png)
<br>
## 主题
### 》应用主题
该设置用于调节深浅模式
可以根据喜好调节
<br>
### 》主题色来源
调整该设置将改变以下主题色设置
#### >(自定义)第一主题色
调整该设置将改变应用的所有主题色部分
#### >(自定义)第二主题色
~~实际上没用~~
<br>
#### >(系统壁纸)启用自动提取主题色
当你经常更换壁纸或使用大幅度变化的动态壁纸时可以启用该设置
#### >(系统壁纸)自动提取主题色间隔
基于上面自动提取主题色设置,改变该设置提取主题色的间隔会随之改变
#### >(系统壁纸)启用兼容模式
当提取主题色时出现错误,可以启用该选项,**不支持动态壁纸!!!**
#### >(系统壁纸)壁纸层窗口类名
正常情况下不用调整,当你在使用动态壁纸时
点击![](https://tc-new.z.wiki/autoupload/f/FxstySYErTfw4f01iNJcONiO_OyvX7mIgxFBfDMDErs/sh2/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_2025-08-30_145656.png)按钮,选择你所用的壁纸软件(没有的话可以刷新一下)
![例子](https://tc.z.wiki/autoupload/f/FxstySYErTfw4f01iNJcONiO_OyvX7mIgxFBfDMDErs/sh2/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_2025-08-30_145913.png)
#### >(系统壁纸)取色亮度波峰
调整该设置会影响到取色的亮度与准确性,建议不用修改
<br>
#### >(系统)
则系统主题色

21
docs/guide/subject.md Normal file
View File

@ -0,0 +1,21 @@
---
title: 科目
icon: ic:twotone-bookmark
author: ClassisBand
isOriginal: true
date: 2025-08-30T00:00:00.000Z
createTime: 2025/10/26 23:24:40
permalink: /guide/j3xsucyk/
---
::: info 科目是使用Sh2的第一步它将用分类作业
:::
### 添加科目
你可以在 **应用设置/科目** 中找到它
点击右上角的 **添加科目** 输入并确认,你的科目便添加好了
![科目添加](https://tc-new.z.wiki/autoupload/f/FxstySYErTfw4f01iNJcONiO_OyvX7mIgxFBfDMDErs/sh2/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_2025-08-30_102813.png/webp)

17
docs/guide/tag.md Normal file
View File

@ -0,0 +1,17 @@
---
title: 标签
icon: ic:twotone-discount
author: ClassisBand
isOriginal: true
date: 2025-08-30T00:00:00.000Z
createTime: 2025/10/26 23:24:40
permalink: /guide/f1f1krbk/
---
### 添加标签
你可以在 **应用设置/标签** 中找到它
点击右上角的 **添加标签** 输入并确认,你的标签便添加好了
![添加标签](https://tc-new.z.wiki/autoupload/f/FxstySYErTfw4f01iNJcONiO_OyvX7mIgxFBfDMDErs/sh2/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_2025-08-30_104322.png)

34
docs/guide/title.md Normal file
View File

@ -0,0 +1,34 @@
---
title: 基本设置
icon: ic:twotone-video-label
author: ClassisBand
isOriginal: true
date: 2025-08-30T00:00:00.000Z
createTime: 2025/10/26 23:24:40
permalink: /guide/bottlptf/
---
### 开机自启
开机后自动启动
<br>
### 窗口置底
将窗口置于底端,在学校内建议启用,防止影响教学
<br>
### 自定义窗口标题
修改后将更改主界面的标题
![例子](https://tc-new.z.wiki/autoupload/f/FxstySYErTfw4f01iNJcONiO_OyvX7mIgxFBfDMDErs/sh2/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_2025-08-30_134425.png)
<br>
### 最大面板宽度
该设置会调节作业每列的宽度

79
docs/guide/use.md Normal file
View File

@ -0,0 +1,79 @@
---
title: 添加作业
icon: ic:twotone-feed
author: ClassisBand
isOriginal: true
date: 2025-08-30T00:00:00.000Z
createTime: 2025/10/26 23:24:40
permalink: /guide/2jbrbocg/
---
## 添加作业
::: important 关键功能,若有问题先仔细看一遍!!!
:::
在主界面 **点击右上角的添加按钮(+)或者点击下方的添加作业按钮**
![添加作业按钮](https://tc.z.wiki/autoupload/f/FxstySYErTfw4f01iNJcONiO_OyvX7mIgxFBfDMDErs/sh2/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_2025-08-30_103330.png)
点击之后我们能看见编辑器窗口
![编辑作业详情](https://tc-new.z.wiki/autoupload/f/FxstySYErTfw4f01iNJcONiO_OyvX7mIgxFBfDMDErs/sh2/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_2025-08-30_111350.png)
## 编辑器功能
- **科目**
- 即分类,区分各类作业
- **截至日期**
- 用于自动删除功能,当到指定日期时会自动删除
- **标签**
- 可以设置我们前面设置的标签,精准识别作业状态
- **文本设置区**
- ~~表情~~(未实现)
- 可以添加俏皮的emoji
- ~~图片~~(未实现)
- 可以添加图片来补充说明
- ~~链接~~(未实现)
- 可以添加链接来补充说明
- 快捷工具栏
- 撤回
- 复制
- 剪贴
- 粘贴
- 颜色
- 为文本添加颜色,更好的区分
- 去除颜色
- 顾名思义,去除颜色
- 快捷颜色
- 添加后可快速为文本添加颜色
<br>
## 基础使用
### 》科目
点击科目编辑窗,使他展开
![编辑科目](https://tc-new.z.wiki/autoupload/f/FxstySYErTfw4f01iNJcONiO_OyvX7mIgxFBfDMDErs/sh2/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_2025-08-30_125909.png)
再点击你所需要的科目便可
<br>
### 》文本
在正常情况下,新建作业项是默认输入模式的
若非正常情况,可以点击编辑按钮![编辑按钮](https://tc.z.wiki/autoupload/f/FxstySYErTfw4f01iNJcONiO_OyvX7mIgxFBfDMDErs/sh2/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_2025-08-30_131616.png),再点击未输入的空白项来输入
<br>
### 》重新编辑
若想重新编辑已输入的作业项,可以点击作业项使它展开
再点击编辑按钮![编辑按钮](https://tc.z.wiki/autoupload/f/FxstySYErTfw4f01iNJcONiO_OyvX7mIgxFBfDMDErs/sh2/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE_2025-08-30_131616.png),再次编辑作业

13
docs/help/help-github.md Normal file
View File

@ -0,0 +1,13 @@
---
title: 通过代码帮助
icon: ic:round-code
author: ClassisBand
isOriginal: true
date: 2025-08-30
---
## 如果你有WPF能力的话
## 欢迎在Github提交代码
### https://github.com/zji573432-cpu/StickyHomeworks2

13
docs/help/issues.md Normal file
View File

@ -0,0 +1,13 @@
---
title: 提交issues
icon: ic:twotone-bug-report
author: ClassisBand
isOriginal: true
date: 2025-08-30
---
## 如果你在使用过程中发现了一些Bug
## 放心,那不是特性
## 欢迎提交issues https://github.com/zji573432-cpu/StickyHomeworks2/issues

7179
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

25
package.json Normal file
View File

@ -0,0 +1,25 @@
{
"name": "sticky-homework-2",
"type": "module",
"version": "1.0.0",
"description": "一款支持富文本的桌面作业贴工具",
"license": "MIT",
"scripts": {
"docs:build": "vuepress build docs --clean-cache --clean-temp",
"docs:dev": "vuepress dev docs",
"docs:dev-clean": "vuepress dev docs --clean-cache --clean-temp",
"docs:preview": "http-server docs/.vuepress/dist",
"vp-update": "npx vp-update"
},
"devDependencies": {
"@vuepress/bundler-vite": "2.0.0-rc.26",
"http-server": "^14.1.1",
"typescript": "^5.9.3",
"vue": "^3.5.22",
"vuepress": "2.0.0-rc.26",
"vuepress-theme-plume": "1.0.0-rc.174"
},
"engines": {
"node": "^20.6.0 || >=22.0.0"
}
}