diff --git a/README.md b/README.md index ece6f772..652b97bd 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,8 @@ - [小智安卓端](https://github.com/TOM88812/xiaozhi-android-client) - [小智电脑端](https://github.com/Huang-junsen/py-xiaozhi) +如果你是一名软件开发者,这里有一份[《致开发者的公开信》](docs/contributor_open_letter.md),欢迎加入! + --- ## 警告 ⚠️ @@ -230,14 +232,9 @@ server: 本项目支持以下三种部署方式,您可根据实际需求选择。 -本项目的文档主要是`文字版本`的教程,如果你想要`视频版本` -的教程,您可以学习一下[这个大佬的手把手教程](https://www.bilibili.com/video/BV1gePuejEvT)。 - -如果你能把`文字版本的教程`和`视频版本的教程`结合起来一起看,可以让你更快上手。 - 1. [Docker 快速部署](./docs/Deployment.md) -适合快速体验的普通用户,不需过多环境配置。缺点是,拉取镜像有点慢。 +适合快速体验的普通用户,不需过多环境配置。缺点是,拉取镜像有点慢。视频教程可参考[美女大佬教你Docker部署](https://www.bilibili.com/video/BV1RNQnYDE5t) 2. [借助 Docker 环境运行部署](./docs/Deployment.md#%E6%96%B9%E5%BC%8F%E4%BA%8C%E5%80%9F%E5%8A%A9docker%E7%8E%AF%E5%A2%83%E8%BF%90%E8%A1%8C%E9%83%A8%E7%BD%B2) @@ -247,7 +244,7 @@ server: 适合熟悉`Conda` 环境或希望从零搭建运行环境的用户。 -对于对响应速度要求较高的场景,推荐使用本地源码运行方式以降低额外开销。 +对于对响应速度要求较高的场景,推荐使用本地源码运行方式以降低额外开销。视频教程可参考[帅哥大佬教你源码部署](https://www.bilibili.com/video/BV1GvQWYZEd2) ### 二、[固件编译](./docs/firmware-build.md) @@ -376,4 +373,4 @@ VAD: Star History Chart - \ No newline at end of file + diff --git a/docs/Deployment.md b/docs/Deployment.md index 97a11c84..94b6e363 100644 --- a/docs/Deployment.md +++ b/docs/Deployment.md @@ -93,7 +93,7 @@ docker logs -f xiaozhi-esp32-server ``` docker stop xiaozhi-esp32-server docker rm xiaozhi-esp32-server -docker rmi ghcr.nju.edu.cn/xinnan-tech/xiaozhi-esp32-server:latest +docker rmi ghcr.nju.edu.cn/xinnan-tech/xiaozhi-esp32-server:server_latest ``` 3、重新按docker方式部署 @@ -117,7 +117,7 @@ docker run -it --name xiaozhi-env --restart always --security-opt seccomp:unconf -p 8000:8000 \ -p 8002:8002 \ -v ./:/app \ - kalicyh/poetry:v3.10_xiaozhi + kalicyh/python:xiaozhi ``` 然后就和正常开发一样了 @@ -127,29 +127,13 @@ docker run -it --name xiaozhi-env --restart always --security-opt seccomp:unconf 在刚刚的打开的终端运行 ```sh -poetry install --no-root -``` - -```sh -apt-get update -apt-get install -y --no-install-recommends libopus0 ffmpeg -``` - -速度慢可以尝试使用清华镜像 - -```sh -echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list -echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list -echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware" >> /etc/apt/sources.list -echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list -apt-get update -apt-get install -y --no-install-recommends libopus0 ffmpeg +pip install -r requirements.txt ``` ## 6.运行项目 ```sh -poetry run python app.py +python app.py ``` # 方式三:本地源码运行 @@ -299,14 +283,14 @@ LLM: 以下是一些常见问题,供参考: -[1、为什么我说的话,小智识别出来很多韩文、日文、英文](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) +[1、为什么我说的话,小智识别出来很多韩文、日文、英文](../README.md#1%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%AF%B4%E7%9A%84%E8%AF%9D%E5%B0%8F%E6%99%BA%E8%AF%86%E5%88%AB%E5%87%BA%E6%9D%A5%E5%BE%88%E5%A4%9A%E9%9F%A9%E6%96%87%E6%97%A5%E6%96%87%E8%8B%B1%E6%96%87) -[2、为什么会出现“TTS 任务出错 文件不存在”?](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) +[2、为什么会出现“TTS 任务出错 文件不存在”?](../README.md#1%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%AF%B4%E7%9A%84%E8%AF%9D%E5%B0%8F%E6%99%BA%E8%AF%86%E5%88%AB%E5%87%BA%E6%9D%A5%E5%BE%88%E5%A4%9A%E9%9F%A9%E6%96%87%E6%97%A5%E6%96%87%E8%8B%B1%E6%96%87) -[3、TTS 经常失败,经常超时](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) +[3、TTS 经常失败,经常超时](../README.md#1%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%AF%B4%E7%9A%84%E8%AF%9D%E5%B0%8F%E6%99%BA%E8%AF%86%E5%88%AB%E5%87%BA%E6%9D%A5%E5%BE%88%E5%A4%9A%E9%9F%A9%E6%96%87%E6%97%A5%E6%96%87%E8%8B%B1%E6%96%87) -[4、如何提高小智对话响应速度?](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) +[4、如何提高小智对话响应速度?](../README.md#1%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%AF%B4%E7%9A%84%E8%AF%9D%E5%B0%8F%E6%99%BA%E8%AF%86%E5%88%AB%E5%87%BA%E6%9D%A5%E5%BE%88%E5%A4%9A%E9%9F%A9%E6%96%87%E6%97%A5%E6%96%87%E8%8B%B1%E6%96%87) -[5、我说话很慢,停顿时小智老是抢话](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) +[5、我说话很慢,停顿时小智老是抢话](../README.md#1%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%AF%B4%E7%9A%84%E8%AF%9D%E5%B0%8F%E6%99%BA%E8%AF%86%E5%88%AB%E5%87%BA%E6%9D%A5%E5%BE%88%E5%A4%9A%E9%9F%A9%E6%96%87%E6%97%A5%E6%96%87%E8%8B%B1%E6%96%87) -[6、我想通过小智控制电灯、空调、远程开关机等操作](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) +[6、我想通过小智控制电灯、空调、远程开关机等操作](../README.md#1%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%AF%B4%E7%9A%84%E8%AF%9D%E5%B0%8F%E6%99%BA%E8%AF%86%E5%88%AB%E5%87%BA%E6%9D%A5%E5%BE%88%E5%A4%9A%E9%9F%A9%E6%96%87%E6%97%A5%E6%96%87%E8%8B%B1%E6%96%87) diff --git a/docs/contributor_open_letter.md b/docs/contributor_open_letter.md new file mode 100644 index 00000000..1be3da28 --- /dev/null +++ b/docs/contributor_open_letter.md @@ -0,0 +1,51 @@ +# 致开发者的公开信 + +"春江水暖鸭先知,正是河豚欲上时!" + +亲爱的朋友,今天,我怀着无比真挚的心情,向热爱AI技术与创新的你发出这封公开信。 + +我们的开源项目 **xiaozhi-esp32-server** 正处在发展的阶段,它承载着我们对智能硬件和低成本民用贾维斯解决方案的美好憧憬,也希望借助每一位开发者的智慧,共同开创技术的新局面。 + +## 项目目标 + +1. **民用低成本贾维斯解决方案** + +2. **智能联动周边硬件的解决方案** + +## 加入我们 + +我们热忱欢迎志同道合的朋友加入,共同为项目贡献力量。参与方式如下: + +### 1、成为普通贡献者 + +Fork 项目,提交 PR,由开发者审核后合入主分支。 + +### 2、成为开发者 + +当你累计提交 3 次有效 PR 后,可以联系群主申请成为开发者,群主将邀请你加入独立的开发者群,共同探讨项目未来。 + +## 开发者开发流程 + +1. **创建新分支** + 每个功能点请以新分支方式开发,分支名称应简洁明了,让人一眼看出所实现的功能,避免功能撞车。 + +2. **提交 PR 审核** + 功能开发完成后,请在 GitHub 上提交 PR,由其他开发者审核,审核通过后合并入主分支。 + +## 功能点的来源 + +- **创新的点子与功能** + 你的每一个灵感都可能成为项目的突破点,欢迎大胆提出前沿的创意与功能建议。 + +- **代码优化** + 如果你发现代码中存在改进的空间,欢迎提交优化方案,让我们的代码更加高效、易读。 + +- **解决 Issues 问题** + Issues 中有很多问题需要解决,我们一同完善、打造产品。 + +亲爱的开发者们, +每一次提交、每一份建议,都是对我们共同梦想的加持。每一代人有每一代人的使命,让我们共同书写智能生活的新篇章! + +期待与你携手前行,共创未来。 + +John,2025.3.11,广州 \ No newline at end of file diff --git a/main/README.md b/main/README.md index 2e164954..6f330023 100644 --- a/main/README.md +++ b/main/README.md @@ -3,7 +3,7 @@ # 项目目录介绍 当你看到这份文件的时候,这个这个项目还没完善好。我们还有很多东西要做。 -如果你会开发,我们非常欢迎您的加入。 +如果你是一名软件开发者,这里有一份[《致开发者的公开信》](../docs/contributor_open_letter.md),欢迎归队! ``` xiaozhi-esp32-server diff --git a/main/manager-api/src/main/java/xiaozhi/AdminApplication.java b/main/manager-api/src/main/java/xiaozhi/AdminApplication.java index 87edd510..8a96edb2 100644 --- a/main/manager-api/src/main/java/xiaozhi/AdminApplication.java +++ b/main/manager-api/src/main/java/xiaozhi/AdminApplication.java @@ -8,6 +8,6 @@ public class AdminApplication { public static void main(String[] args) { SpringApplication.run(AdminApplication.class, args); - System.out.println("http://localhost:8002/xiaozhi-esp32-api/doc.html"); + System.out.println("http://localhost:8002/xiaozhi-esp32-api/api/v1/doc.html"); } } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/exception/ErrorCode.java b/main/manager-api/src/main/java/xiaozhi/common/exception/ErrorCode.java index 1c1c09f5..e2e5de5d 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/exception/ErrorCode.java +++ b/main/manager-api/src/main/java/xiaozhi/common/exception/ErrorCode.java @@ -22,24 +22,24 @@ public interface ErrorCode { int CAPTCHA_ERROR = 10007; int SUB_MENU_EXIST = 10008; int PASSWORD_ERROR = 10009; + int SUPERIOR_DEPT_ERROR = 10011; int SUPERIOR_MENU_ERROR = 10012; int DATA_SCOPE_PARAMS_ERROR = 10013; int DEPT_SUB_DELETE_ERROR = 10014; int DEPT_USER_DELETE_ERROR = 10015; + int UPLOAD_FILE_EMPTY = 10019; int TOKEN_NOT_EMPTY = 10020; int TOKEN_INVALID = 10021; int ACCOUNT_LOCK = 10022; + int OSS_UPLOAD_FILE_ERROR = 10024; + int REDIS_ERROR = 10027; int JOB_ERROR = 10028; int INVALID_SYMBOL = 10029; - - // 密码相关错误码 int PASSWORD_LENGTH_ERROR = 10030; int PASSWORD_WEAK_ERROR = 10031; int DEL_MYSELF_ERROR = 10032; - // 验证码错误 - int VERIFICATION_CODE = 10033; } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java b/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java index 678c546e..29f6b706 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java @@ -69,6 +69,7 @@ public class ShiroConfig { filterMap.put("/captcha", "anon"); filterMap.put("/favicon.ico", "anon"); filterMap.put("/mobile/**", "anon"); + filterMap.put("/user/**", "anon"); filterMap.put("/**", "oauth2"); shiroFilter.setFilterChainDefinitionMap(filterMap); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java b/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java index 82051dab..85c5952b 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java @@ -2,41 +2,37 @@ package xiaozhi.modules.security.controller; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import xiaozhi.common.exception.ErrorCode; -import xiaozhi.common.redis.RedisUtils; -import xiaozhi.common.utils.PropertiesUtils; +import xiaozhi.common.exception.RenException; import xiaozhi.common.utils.Result; import xiaozhi.common.validator.AssertUtils; import xiaozhi.modules.security.dto.LoginDTO; +import xiaozhi.modules.security.password.PasswordUtils; import xiaozhi.modules.security.service.CaptchaService; import xiaozhi.modules.security.service.SysUserTokenService; -import xiaozhi.modules.sys.service.SysParamsService; +import xiaozhi.modules.sys.dto.SysUserDTO; import xiaozhi.modules.sys.service.SysUserService; import java.io.IOException; /** - * 登录 + * 登录控制层 */ +@Tag(name = "登录管理") @AllArgsConstructor @RestController +@RequestMapping("/user") @Tag(name = "登录管理") public class LoginController { private final SysUserService sysUserService; private final SysUserTokenService sysUserTokenService; private final CaptchaService captchaService; - private final RedisUtils redisUtils; - private final SysParamsService sysParamsService; - private final PropertiesUtils propertiesUtils; - @GetMapping("captcha") + + @GetMapping("/captcha") @Operation(summary = "验证码") public void captcha(HttpServletResponse response, String uuid) throws IOException { //uuid不能为空 @@ -46,10 +42,46 @@ public class LoginController { captchaService.create(response, uuid); } - @PostMapping("login") + @PostMapping("/login") @Operation(summary = "登录") - public Result login(HttpServletRequest request, @RequestBody LoginDTO login) { - return sysUserTokenService.createToken(1L); + public Result login( @RequestBody LoginDTO login) { + // 验证是否正确输入验证码 + boolean validate = captchaService.validate(login.getCaptchaId(), login.getCaptcha()); + if (!validate) { + throw new RenException("验证码错误,请重新获取"); + } + // 按照用户名获取用户 + SysUserDTO userDTO = sysUserService.getByUsername(login.getUsername()); + // 判断用户是否存在 + if (userDTO == null) { + throw new RenException("请检测用户和密码是否输入错误"); + } + // 判断密码是否正确,不一样则进入if + if (!PasswordUtils.matches(login.getPassword(), userDTO.getPassword())) { + throw new RenException("请检测用户和密码是否输入错误"); + } + return sysUserTokenService.createToken(userDTO.getId()); + } + + @PostMapping("/register") + @Operation(summary = "注册") + public Result register(@RequestBody LoginDTO login) { + // 验证是否正确输入验证码 + boolean validate = captchaService.validate(login.getCaptchaId(), login.getCaptcha()); + if (!validate) { + throw new RenException("验证码错误,请重新获取"); + } + // 按照用户名获取用户 + SysUserDTO userDTO = sysUserService.getByUsername(login.getUsername()); + if (userDTO != null){ + throw new RenException("此手机号码已经注册过"); + } + userDTO = new SysUserDTO(); + userDTO.setUsername(login.getUsername()); + userDTO.setPassword(login.getPassword()); + sysUserService.save(userDTO); + return new Result(); + } } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/dto/LoginDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/security/dto/LoginDTO.java index 67f50f19..2fc0d3b2 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/dto/LoginDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/dto/LoginDTO.java @@ -13,7 +13,7 @@ import java.io.Serializable; @Schema(description = "登录表单") public class LoginDTO implements Serializable { - @Schema(description = "用户名", required = true) + @Schema(description = "手机号码") @NotBlank(message = "{sysuser.username.require}") private String username; @@ -27,6 +27,6 @@ public class LoginDTO implements Serializable { @Schema(description = "唯一标识") @NotBlank(message = "{sysuser.uuid.require}") - private String uuid; + private String captchaId; } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysUserController.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysUserController.java index 2f030fff..ea3e6f82 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysUserController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysUserController.java @@ -80,7 +80,6 @@ public class SysUserController { //效验数据 ValidatorUtils.validateEntity(dto); String newPassword = dto.getNewPassword(); - String password = dto.getPassword(); //密码的强度 if (newPassword == null || newPassword.length() < 8) { diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java index 288c4cc0..8427fd09 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java @@ -38,23 +38,6 @@ public interface SysUserService extends BaseService { */ void updatePassword(Long id, String newPassword); - /** - * 根据部门ID,查询用户数 - */ - int getCountByDeptId(Long deptId); - - /** - * 根据部门ID,查询用户Id列表 - */ - List getUserIdListByDeptId(List deptIdList); - - /** - * 删除用户缓存 - * - * @param userId - */ - void deleteUserCache(Long userId); - /** * 验证密码强度 * @@ -63,5 +46,4 @@ public interface SysUserService extends BaseService { */ boolean isStrongPassword(String newPassword); - String getName(Long creator); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java index c9960b07..1828039b 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java @@ -1,25 +1,23 @@ package xiaozhi.modules.sys.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import xiaozhi.common.exception.ErrorCode; import xiaozhi.common.exception.RenException; import xiaozhi.common.page.PageData; -import xiaozhi.common.redis.RedisKeys; import xiaozhi.common.redis.RedisUtils; import xiaozhi.common.service.impl.BaseServiceImpl; -import xiaozhi.common.user.UserDetail; import xiaozhi.common.utils.ConvertUtils; import xiaozhi.modules.security.password.PasswordUtils; -import xiaozhi.modules.security.user.SecurityUser; import xiaozhi.modules.sys.dao.SysUserDao; import xiaozhi.modules.sys.dto.SysUserDTO; import xiaozhi.modules.sys.entity.SysUserEntity; import xiaozhi.modules.sys.enums.SuperAdminEnum; import xiaozhi.modules.sys.service.SysUserService; -import lombok.AllArgsConstructor; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.List; @@ -86,7 +84,13 @@ public class SysUserServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); + return baseDao.selectCount(queryWrapper); } - @Override - public List getUserIdListByDeptId(List deptIdList) { - return baseDao.getUserIdListByDeptId(deptIdList); - } - - @Override - public void deleteUserCache(Long userId) { - // 删除缓存 - redisUtils.delete(RedisKeys.getUserInfoKey(userId)); - redisUtils.delete(RedisKeys.getDataScopeListKey(userId)); - redisUtils.delete(RedisKeys.getSysUserName(userId)); - } @Override public boolean isStrongPassword(String password) { @@ -165,17 +157,4 @@ public class SysUserServiceImpl extends BaseServiceImpl - - - - \ No newline at end of file diff --git a/main/manager-web/package-lock.json b/main/manager-web/package-lock.json index f3044557..5af654f0 100644 --- a/main/manager-web/package-lock.json +++ b/main/manager-web/package-lock.json @@ -8,14 +8,14 @@ "name": "xiaozhi", "version": "0.1.0", "dependencies": { - "axios": "^1.8.1", "element-ui": "^2.15.14", "flyio": "^0.6.14", "normalize.css": "^8.0.1", "vue": "^2.6.14", "vue-axios": "^3.5.2", "vue-router": "^3.6.5", - "vuex": "^3.6.2" + "vuex": "^3.6.2", + "xiaozhi": "file:" }, "devDependencies": { "@vue/cli-plugin-router": "~5.0.0", @@ -325,48 +325,6 @@ "@parcel/watcher-win32-x64": "2.5.1" } }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@parcel/watcher-darwin-x64": { "version": "2.5.1", "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", @@ -388,216 +346,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@polka/url": { "version": "1.0.0-next.28", "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.28.tgz", @@ -1777,6 +1525,7 @@ "resolved": "https://registry.npmmirror.com/axios/-/axios-1.8.2.tgz", "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==", "license": "MIT", + "peer": true, "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -3488,6 +3237,7 @@ "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", + "peer": true, "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -3934,6 +3684,7 @@ "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.2.tgz", "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "license": "MIT", + "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -4256,6 +4007,7 @@ "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", + "peer": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -7031,7 +6783,8 @@ "version": "1.1.0", "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/pseudomap": { "version": "1.0.2", @@ -9405,6 +9158,10 @@ } } }, + "node_modules/xiaozhi": { + "resolved": "", + "link": true + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", diff --git a/main/manager-web/package.json b/main/manager-web/package.json index 05c696ca..fddf19aa 100644 --- a/main/manager-web/package.json +++ b/main/manager-web/package.json @@ -7,14 +7,14 @@ "build": "vue-cli-service build" }, "dependencies": { - "axios": "^1.8.1", "element-ui": "^2.15.14", "flyio": "^0.6.14", "normalize.css": "^8.0.1", "vue": "^2.6.14", "vue-axios": "^3.5.2", "vue-router": "^3.6.5", - "vuex": "^3.6.2" + "vuex": "^3.6.2", + "xiaozhi": "file:" }, "devDependencies": { "@vue/cli-plugin-router": "~5.0.0", diff --git a/main/manager-web/public/favicon.ico b/main/manager-web/public/favicon.ico index df36fcfb..5f285a58 100644 Binary files a/main/manager-web/public/favicon.ico and b/main/manager-web/public/favicon.ico differ diff --git a/main/manager-web/public/index.html b/main/manager-web/public/index.html index 3e5a1396..40f0613c 100644 --- a/main/manager-web/public/index.html +++ b/main/manager-web/public/index.html @@ -5,7 +5,7 @@ - <%= htmlWebpackPlugin.options.title %> + 小智-智控台