UNPKG

relax-life-kit

Version:
359 lines (261 loc) 9.32 kB
# Electron 放松一下功能组件 这是一个独立的放松一下功能组件,可以在任何 Electron + Vue 3 项目中使用。 ## 鸣谢 项目中示例视频 API 地址取自[遇见 Api](https://api.yujn.cn/), 良心站长,共收录了 370 个接口(截止 20250729 统计), 并且还在持续更新维护中,大家觉得不错可以多多支持 ## 🎯 功能特性 - 🎥 随机视频播放 - 💾 视频下载保存 - 🎨 水墨涟漪动画效果 - 📱 响应式设计 - ⚙️ 高度可配置 - 🔧 **Ant Design Vue 可选依赖** - 支持无 Ant Design Vue 的项目 ## 👀 大致效果 ![大致效果](./example/imgs/2025-07-31_17.22.49.gif) ## 📦 安装 ```bash npm install relax-life-kit ``` ### 可选依赖 如果你想要更好的 UI 体验,可以安装 Ant Design Vue: ```bash npm install ant-design-vue @ant-design/icons-vue ``` **注意**:即使不安装 Ant Design Vue,组件也能正常工作,会自动使用降级样式。 ## 🚀 快速开始 ### 1. 主进程设置 在主进程的 `index.js` 中注册 IPC 处理程序: ```javascript import { registerRelaxIpc } from "relax-life-kit"; app.whenReady().then(() => { // 注册放松一下的IPC处理程序 registerRelaxIpc({ filePrefix: "放松一下", // 可选:自定义文件前缀 }); // 其他初始化代码... }); ``` ### 2. 渲染进程使用 #### 在 `Electron Vue` 组件中使用: ```vue <template> <div> <!-- 触发按钮 --> <relax-button :loading="getRedirectUrlLoading" @click="handleRelaxClick" /> <!-- 放松抽屉 --> <relax-drawer v-model:open="relaxOpen" v-model:get-redirect-url-loading="getRedirectUrlLoading" title="😎 放松一下,劳逸结合" video-api-url="https://api.yujn.cn/api/zzxjj.php?type=video" /> </div> </template> <script setup> import { RelaxDrawer, RelaxButton, useRelax } from "relax-life-kit"; // 使用组合式函数管理状态 const { relaxOpen, getRedirectUrlLoading, openRelax } = useRelax(); // 处理点击事件 const handleRelaxClick = () => { openRelax(); }; // 或者使用 ref 内部方法打开 const relaxDrawerRef = ref(null); const open = () => { relaxDrawerRef.value?.handleOpenRelax(); }; </script> ``` #### 在 `Web Vue` ```vue <script setup lang="ts"> import { RelaxDrawer, RelaxButton, useRelax } from "relax-life-kit"; // 使用组合式函数管理状态 const { relaxOpen, getRedirectUrlLoading, openRelax } = useRelax(); </script> <template> <div> <!-- 触发按钮 --> <relax-button :loading="getRedirectUrlLoading" @click="openRelax" /> <!-- 放松抽屉 --> <relax-drawer v-model:open="relaxOpen" v-model:get-redirect-url-loading="getRedirectUrlLoading" title="😎 放松一下,劳逸结合" video-api-url="https://api.yujn.cn/api/zzxjj.php?type=video" /> </div> </template> ``` ### 3. 样式引入 在 渲染层 main.js 文件中引入必要的样式: ```js import "relax-life-kit/dist/relax-life-kit.css"; ``` ## 🔧 兼容性说明 ### 无 Ant Design Vue 依赖 如果你的项目没有安装 Ant Design Vue,组件会自动使用降级方案: - 使用原生 HTML 元素替代 Ant Design Vue 组件 - 提供完整的降级样式,保持视觉效果 - 所有功能正常工作 ### 检查依赖可用性 ```javascript import { checkAntdAvailability } from "relax-life-kit"; // 检查 Ant Design Vue 是否可用 if (checkAntdAvailability()) { console.log("Ant Design Vue 可用"); } else { console.log("使用降级样式"); } ``` ### 手动控制降级 ```javascript import { createFallbackComponent } from "relax-life-kit"; // 创建降级按钮组件 const FallbackButton = createFallbackComponent("Button", { type: "primary", loading: false, }); ``` ## 📚 API 文档 ### RelaxDrawer 组件 #### Props | 属性名 | 类型 | 默认值 | 说明 | | --------------------- | ------- | ---------------------------------------------- | ----------------- | | open | Boolean | false | 控制抽屉显示/隐藏 | | getRedirectUrlLoading | Boolean | false | 加载状态 | | title | String | "😎 放松一下,劳逸结合" | 抽屉标题 | | videoApiUrl | String | "https://api.yujn.cn/api/zzxjj.php?type=video" | 视频 API 地址 | #### Events | 事件名 | 参数 | 说明 | | ---------------------------- | ------- | ------------ | | update:open | Boolean | 抽屉状态变化 | | update:getRedirectUrlLoading | Boolean | 加载状态变化 | ### RelaxButton 组件 #### Props | 属性名 | 类型 | 默认值 | 说明 | | -------- | --------------- | ---------- | ------------- | | loading | Boolean | false | 加载状态 | | icon | String | '🧘‍♀️' | 按钮图标/文本 | | title | String | '放松一下' | 按钮提示文本 | | fontSize | [String Number] | icon 大小 | #### Events | 事件名 | 参数 | 说明 | | ------ | ---- | ------------ | | click | - | 按钮点击事件 | ### useRelax 组合式函数 #### 返回值 | 属性名 | 类型 | 说明 | | --------------------- | ------------ | ------------ | | relaxOpen | Ref<Boolean> | 抽屉显示状态 | | getRedirectUrlLoading | Ref<Boolean> | 加载状态 | | openRelax | Function | 打开放松功能 | | closeRelax | Function | 关闭放松功能 | | setLoading | Function | 设置加载状态 | ### registerRelaxIpc 主进程函数 #### 参数 | 参数名 | 类型 | 默认值 | 说明 | | ------------------ | ------ | ---------- | -------------- | | options | Object | {} | 配置选项 | | options.filePrefix | String | '放松一下' | 保存文件的前缀 | ### 兼容性工具函数 | 函数名 | 说明 | | ----------------------- | ---------------------------- | | checkAntdAvailability | 检查 Ant Design Vue 是否可用 | | getAntdComponent | 获取 Ant Design Vue 组件 | | createFallbackComponent | 创建降级组件 | | fallbackStyles | 降级样式字符串 | ## 🎨 自定义配置 ### 更换视频源 ```vue <relax-drawer video-api-url="你的视频API地址" /> ``` ### 自定义文件保存前缀 ```javascript registerRelaxIpc({ filePrefix: "我的视频", }); ``` ### 自定义按钮样式 ```vue <relax-button icon="🎬" title="观看视频" /> ``` ## 🔧 高级用法 ### 手动控制状态 ```vue <script setup> import { useRelax } from "relax-life-kit"; const { relaxOpen, getRedirectUrlLoading, openRelax, closeRelax, setLoading } = useRelax(); // 手动打开 const handleOpen = () => { openRelax(); }; // 手动关闭 const handleClose = () => { closeRelax(); }; // 手动设置加载状态 const handleLoading = (loading) => { setLoading(loading); }; </script> ``` ### 使用水墨涟漪效果 ```vue <script setup> import { createInkRipple } from "relax-life-kit"; const handleClick = async () => { await createInkRipple(); // 其他操作... }; </script> ``` ### 兼容性处理 ```vue <script setup> import { checkAntdAvailability, createFallbackComponent } from "relax-life-kit"; // 检查依赖可用性 const hasAntd = checkAntdAvailability(); // 创建降级组件 const CustomButton = createFallbackComponent("Button", { type: "primary", size: "large", }); </script> ``` ## 📁 文件结构 ``` relax-life-kit/ ├── src/ │ ├── main/ │ │ └── relaxManager.js # 主进程IPC处理 │ └── renderer/ │ ├── components/ │ │ ├── RelaxDrawer.vue # 主要抽屉组件 │ │ └── RelaxButton.vue # 触发按钮组件 │ ├── composables/ │ │ └── useRelax.js # 状态管理 │ ├── utils/ │ │ ├── inkRipple.js # 水墨涟漪工具 │ │ └── compatibility.js # 兼容性工具 │ └── styles/ │ ├── inkRipple.scss # 水墨涟漪样式 │ └── fallback.css # 降级样式 ├── index.js # 主入口文件 ├── package.json # 包配置 └── README.md # 使用说明 ``` ## ⚠️ 注意事项 1. **依赖要求**:确保项目中已安装 Vue 3 2. **可选依赖**:Ant Design Vue 和图标包是可选的,不安装也能正常工作 3. **网络连接**:需要网络连接来获取随机视频 4. **文件权限**:视频保存功能需要用户选择保存目录 5. **样式依赖**:需要引入相应的 CSS 动画样式 6. **Electron 版本**:建议使用 Electron 20+ 版本 7. **兼容性**:组件会自动检测 Ant Design Vue 是否可用,并提供降级方案 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## ✨ 许可证 MIT License