# interact-video
**Repository Path**: mrwang8034/interact-video
## Basic Information
- **Project Name**: interact-video
- **Description**: 有灵交互虚拟人 是一个基于 Vue3、Vite3、TypeScript、Pinia、Vant、 Windi CSS、Electron的项目。
它拥有自动注册路由、自动注册全局组件、IPC 通信及白名单、全局窗口管理、版本自动更新等功能。
可输出H5项目和桌面客户端
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2024-06-13
- **Last Updated**: 2024-12-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# XMOV 有灵交互虚拟人
## 简介
有灵交互虚拟人 是一个基于 Vue3、Vite3、TypeScript、Pinia、Vant、 Windi CSS、Electron的项目。
它拥有自动注册路由、自动注册全局组件、IPC 通信及白名单、全局窗口管理、版本自动更新等功能。
可输出H5项目和桌面客户端
## 开始
1. `git clone http://git.xmov.ai/x-force/interact-video.git`
2. `cd vue3-electron-template`
3. `yarn`
4. `yarn dev`
## 目录
```text
interact-video
├─ .vscode // vscode 插件和设置
│ ├─ extensions.json // vscode 推荐的插件
│ └─ settings.json // vscode 配置(在该项目中生效,可以复制到用户配置文件中)
├─ dockerfiles // 服务器部署文件/nginx配置文件
├─ electron // electron 相关配置
├─ env // 环境文件目录
├─ index.html
├─ package.json // npm 依赖描述文件
├─ public // 公共目录(文件夹里面的资源打包后会在根目录下)
├─ README.md // 项目介绍文档
├─ set-package-env.js // 打包后环境变量配置文件
├─ src
│ ├─ @types // TS类型定义文件
│ ├─ apis // api接口文件存放目录
│ ├─ assets // 静态资源
│ │ ├─ apng // APNG存放目录
│ │ ├─ icons // svg-icon存放目录
│ │ ├─ images // 图片存放目录
│ │ ├─ music // 音频文件存放目录
│ │ ├─ styles // 公共样式存放目录
│ │ ├─ svga // svga文件存放目录
│ ├─ components // 全局组件
│ │ ├─ common // 公共组件
│ │ ├─ desktop // 大屏端相关组件
│ │ ├─ h5 // H5端相关组件
│ │ └─ pc // PC端相关组件
│ ├─ hooks // 组合式的函数hooks(状态从函数里面产生)
│ ├─ libs // 本地包存放目录
│ ├─ main.ts // 项目入口ts文件
│ ├─ router // 项目路由
│ ├─ store // 项目状态管理目录
│ ├─ typings // TS类型声明文件(*.d.ts)
│ ├─ utils // 项目插件管理目录
│ │─ views // 页面
│ │ ├─ h5 // H5页面
│ │ │ └─ index.vue
│ │ ├─ pc // PC页面
│ │ │ └─ index.vue
│ │ └─ smart // 大屏页面
│ │ └─ index.vue
│ └─ App.vue // vue文件入口
├─ electron-builder.json5 // electron 打包配置文件
├─ .eslintignore //忽略eslint检查的配置文件
├─ .eslintrc.js // eslint 配置文件
├─ .gitignore // 忽略 git 提交的配置文件
├─ .gitlab-ci.yml // gitLab ci/cd 配置文件
├─ tsconfig.json // TS 配置
├─ vite.config.ts // vite配置
├─ windi.config.ts // 原子 css 框架 windicss 配置
└─ yarn.lock // npm 包管理器 yarn 依赖锁定文件
```
## 功能模块
### 自动注册组件/路由
- 自动注册 src/components,src/biz-components 目录下 vue 文件为全局组件,自动引入。
- 自动注册 src/view 目录下 vue 文件中 defineOptions 声明了 isRouter: true 的组件为路由。
```ts
defineOptions({
name: 'Home',
isRouter: true,
// layout: 'MainLayout'
})
```
### IPC 通信
```ts
import { useRenderIpc } from '@/hooks'
const { ipcSend, ipcInvoke, ipcReceive } = useRenderIpc()
// 渲染进程 -> 主进程
ipcSend('white-channel', params)
ipcMain.on("white-channel", (event, params) => {
console.log(params)
})
// 渲染进程 -> 主进程 -> 渲染进程
ipcInvoke('white-channel', params).then((data) => {
console.log(data)
})
ipcMain.handle("white-channel", (event, params) => {
console.log(params)
return data
})
// 主进程 -> 渲染进程
win.webContent.send("white-channel", data)
ipcReceive('white-channel', (data) => {
console.log(data)
})
```
> 说明:1. 示例中 ipc 通信的 white-channel 需要在目录:electron/preload/white-channel.ts 中进行类型声明。
2. 示例中 ipcMain 需要在目录:electron/main/ipc-event 内挂载。
### 窗口管理
- 全局窗口集合
```ts
import ElecWindows from "./electron-windows"
const elecWindows = ElecWindows.getElecWindows()
console.log(`windows group: ${elecWindows.group}`)
// windows group: { '1': { route: '', isMultiWindow: false, isMainWin: true } }
```
- 创建窗口
```ts
// 渲染进程创建
ipcSend('window-new', windowParams)
// 主进程创建
import ElecWindows from "./electron-windows"
const elecWindows = ElecWindows.getElecWindows()
elecWindows.createWindow(windowParams)
```
> 说明:通过 ElecWindows 类统一管理应用窗口,系统托盘等;更方便的查找,关闭,配置窗口。
## npm scripts
```json
{
// 本地运行(H5-dev环境, .env.development)
"dev": "node set-package-env.js h5 development && vite --mode development --open",
// 本地运行(PC-dev环境, .env.development)
"dev:pc": "node set-package-env.js pc development && vite --mode development --open",
// 本地运行(大屏-dev环境, .env.development)
"dev:smart": "node set-package-env.js smart development && vite --mode development",
// 构建打包(H5-生产环境, .env.production)
"build:prod": "node set-package-env.js h5 production && vite build --mode production",
// 构建打包(PC-生产环境, .env.production)
"build:prod-pc": "node set-package-env.js pc production && vite build --mode production",
// 构建打包(大屏-生产环境, .env.production)
"build:prod-smart": "node set-package-env.js smart production && vite build --mode production && electron-builder",
// 构建打包(H5-开发环境, .env.dev)
"build:dev": "node set-package-env.js h5 dev && vite build --mode dev",
// 构建打包(PC-开发环境, .env.dev)
"build:dev-pc": "node set-package-env.js pc dev && vite build --mode dev",
// 构建打包(大屏-开发环境, .env.dev)
"build:dev-smart": "node set-package-env.js smart dev && vite build --mode dev && electron-builder",
// 构建打包(H5-测试环境, .env.test)
"build:test": "node set-package-env.js h5 test && vite build --mode test",
// 构建打包(PC-测试环境, .env.test)
"build:test-pc": "node set-package-env.js pc test && vite build --mode test",
// 构建打包(大屏-测试环境, .env.test)
"build:test-smart": "node set-package-env.js smart test && vite build --mode test && electron-builder",
// 本地环境预览构建后的dist
"preview": "vite preview",
// vue文件的ts检查
"typecheck": "vue-tsc --noEmit --skipLibCheck",
// 检测代码是否符合eslint规范并自动修复
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix"
}
```
> 说明:打包时通过重写 package-env.ts 文件,设置打包后环境变量;打包后读取 packageEnv 环境变量,进行差异化操作。