Compare commits

..

20 Commits

Author SHA1 Message Date
wangyan 566b1ae944 feat(video):重构视频监控模块并优化实时预览功能
- 移除旧的 DahuaVideoController 控制器及相关接口
- 在 NetSDKService 中实现基于 FFmpeg 的实时流转码与推送逻辑
- 新增对 H.264 和 HEVC 编码格式的识别与动态转码支持
- 实现 FLV 流封装及 WebSocket 推送机制
- 添加 WebSocket 会话管理与多用户连接跟踪
- 更新平台视频管理控制器中的通道标识字段
- 配置文件中增加大华设备连接参数- 调整日志级别为 debug 以便于开发调试
- 完善资源清理逻辑,确保登出时释放所有相关句柄和进程
2025-10-30 09:49:12 +08:00
wangyan 54ca5e9e4c feat(video): 实现后台转码视频播放功能
- 新增“播放后台转码视频”按钮,用于启动转码并播放HLS流- 替换原有大华设备直接播放逻辑为调用后端转码接口
- 引入HLS.js库以支持HLS流播放,并增加错误处理机制
- 修改播放器组件,移除默认控制栏,增加定时检测转码进度逻辑
- 实现转码开始与停止接口调用,增强播放流程的可控性
- 更新弹窗标题与关闭逻辑,优化用户体验
- 调整视频播放器样式,提升视觉效果与兼容性
2025-10-20 17:52:44 +08:00
wangyan b269359715 feat(video): 实现大华设备视频预览功能
- 修改后端控制器路径从 /api/video为 /dahuaVideo
- 更新登录接口使用固定测试凭证
- 实现基于 StreamingResponseBody 的视频流传输
- 前端移除转码相关逻辑,集成大华播放器组件
- 添加设备登录和预览启动/停止接口
-优化视频播放器组件支持大华流媒体播放
- 调整播放器UI增加控制按钮和错误处理- 修复视频播放错误提示和资源释放逻辑
2025-10-20 17:21:06 +08:00
wangyan 93dac9ab39 fix(video): 移除无效的视频播放代码
- 删除了已注释的视频播放器弹窗逻辑
- 清理了不再使用的预览接口调用代码
- 简化了视频转码失败的错误处理流程
2025-10-20 11:53:41 +08:00
wangyan 0888a98ed2 feat(dust): 添加传感器数据接入标识字段
- 在传感器管理页面表单中新增"数据接入标识"输入项
- 更新 dust_device_sensor 表结构,添加 DATA_ACCESS_CODE 字段
- 修改 MyBatis 映射文件,支持 DATA_ACCESS_CODE 的增删改查操作
- 调整设备传感器关联查询,包含新增的 DATA_ACCESS_CODE 字段
- 优化 dust_device 表查询条件,移除冗余的 DEVICE_TYPE 模糊匹配
2025-10-20 11:49:40 +08:00
853931625@qq.com 925d219e35 修改粉尘模块bug 2025-10-17 17:41:54 +08:00
wangyan 9c4f408256 搬运龙钢修复bug 2025-10-17 16:26:41 +08:00
wangyan 88d1e485f2 Merge remote-tracking branch 'origin/dev' into dev 2025-10-16 09:45:36 +08:00
wangyan dae8de2d5d feat(dahua): 更新大华视频控制器并优化动态库加载逻辑
- 将 VideoController重命名为 DahuaVideoController以明确功能归属
- 优化 LibraryLoad 类中的动态库加载逻辑,支持从资源和文件系统双重加载- 增强异常处理信息提示,便于调试和问题排查
- 添加 dynamic-lib-load.xml 配置文件,定义不同平台所需的动态库列表- 更新 SMB 配置信息,调整文件存储路径及访问地址- 注释掉前端视频播放相关代码,预留后续开发接口
2025-10-16 09:41:27 +08:00
853931625@qq.com 16cf0e8b69 新增 粉尘模块 2025-10-15 13:33:39 +08:00
wangyan eff8e5bcad ```
feat(env): 更新开发与生产环境配置中的服务地址

将 .env 和 .env.production 中的文件服务地址、API 基础路径等配置,
以及后端 application-local.properties 中的数据源、Redis 地址等相关配置,
统一更新为新的服务器 IP 和端口,确保本地和生产环境正确连接新部署的服务。
同时更新了视频播放地址以匹配新的流媒体服务地址。
```
2025-09-27 14:47:12 +08:00
wangyan 9abb9eadeb fix(video_manager): 更新转码视频播放地址
将转码视频的播放地址从本地开发地址更新为实际部署地址,确保视频能够正常播放。
2025-09-25 15:32:07 +08:00
songwenxuan 9a02e6fbeb 修复时间展示错误 2025-09-25 15:09:52 +08:00
songwenxuan 7ab401f0a4 修复视频文件报错 2025-09-24 22:01:55 +08:00
wangyan 2d5a73478f ```
feat(env): 更新开发环境和生产环境的文件服务地址

- 修改 `.env` 中的 `VITE_FILE_URL` 地址为新文件服务器地址- 更新 `.env.development` 中的 `VITE_BASE_URL`、`VITE_ON_LINE_WEB_SOCKET_URL` 和 `VITE_LEARNING_WEB_SOCKET_URL` 为新的开发环境地址- 调整视频播放组件中环境变量获取方式,增强兼容性和安全性
- 修改视频转码接口返回的视频路径前缀,适配新的存储目录结构-优化 Java 后端 FFmpeg 路径获取逻辑,Linux 环境下优先使用系统安装路径
- 更新 HLS 输出路径至 `/mnt/file/hls/` 目录,统一管理转码文件
```
2025-09-24 21:59:08 +08:00
songwenxuan 8d890cb357 视频接收 2025-09-24 20:09:25 +08:00
songwenxuan 783a8b2425 解决打不了包的问题 2025-09-21 10:04:55 +08:00
songwenxuan 738010ef96 首页样式更改为山西新泰钢铁 2025-09-15 15:24:20 +08:00
wangyan 227b1bc1aa 企业名称脱敏 2025-09-10 09:06:36 +08:00
wangyan 47cfc3e898 初始化 2025-09-09 09:31:59 +08:00
1619 changed files with 250355 additions and 1 deletions

4
.env Normal file
View File

@ -0,0 +1,4 @@
VITE_PROXY=/api
#VITE_FILE_URL=http://183.251.104.38:10110/file/
VITE_FILE_URL=http://172.16.70.226:7811/file/
VITE_TEMPLATE_URL=http://183.251.104.38:10110/file

12
.env.development Normal file
View File

@ -0,0 +1,12 @@
VITE_BASE=/
# VITE_BASE_URL=http://192.168.0.25:8095/
VITE_BASE_URL=http://192.168.4.40:8095/
#websocket t掉线
VITE_ON_LINE_WEB_SOCKET_URL=ws://192.168.4.40:8869
#websocket 在线学习
VITE_LEARNING_WEB_SOCKET_URL=ws://192.168.4.40:8899
#websocket 大华设备视频
VITE_DAHUA_WEB_SOCKET_URL=ws://192.168.4.40:8866

15
.env.production Normal file
View File

@ -0,0 +1,15 @@
VITE_BASE=/dist
#VITE_BASE_URL=http://10.199.64.27:8520/integrated_yjb/
VITE_BASE_URL=http://172.16.70.226:8081/sx_yjb/
#VITE_BASE_URL=https://qaaqwh.qhdsafety.com/integrated_whb/
#websocket t掉线
VITE_ON_LINE_WEB_SOCKET_URL=ws://172.16.70.226:8869
# VITE_ON_LINE_WEB_SOCKET_URL=wss://qaaqwh.qhdsafety.com/disconnected/
#websocket 在线学习
VITE_LEARNING_WEB_SOCKET_URL=ws://172.16.70.226:8899
#VITE_LEARNING_WEB_SOCKET_URL=wss://qaaqwh.qhdsafety.com/onlinelearning/
#websocket 大华设备视频
VITE_DAHUA_WEB_SOCKET_URL=ws://172.16.70.226:8866

5
.eslintignore Normal file
View File

@ -0,0 +1,5 @@
public
dist
package.json
!.prettierrc.cjs
env.d.ts

55
.eslintrc.cjs Normal file
View File

@ -0,0 +1,55 @@
module.exports = {
env: {
browser: true,
es2021: true,
node: true
},
extends: [
"plugin:vue/vue3-recommended",
"standard",
"@vue/prettier",
"eslint:recommended"
],
parserOptions: {
ecmaVersion: "latest",
sourceType: "module"
},
plugins: ["vue"],
rules: {
"no-console": "warn",
"vue/multi-word-component-names": "off",
"vue/no-v-html": "off",
"vue/require-default-prop": "off",
"camelcase": "off",
"eqeqeq": "error",
"vue/no-template-shadow": "error",
"vue/attribute-hyphenation": "off",
"vue/html-end-tags": "error",
"vue/eqeqeq": "error",
"vue/component-name-in-template-casing": ["error", "kebab-case"],
"vue/enforce-style-attribute": [
"error",
{ "allow": ["scoped", "module"] }
],
"vue/v-on-event-hyphenation": ["error", "always",{
"autofix": true,
}],
"vue/require-explicit-emits": "error",
"no-unused-vars": [
"error",
{ vars: "all", args: "after-used", ignoreRestSiblings: false }
],
"linebreak-style": ["off",'windows'],
"no-restricted-properties": [
"error",
{ "object": "Object", "property": "assign"}
],
"no-debugger": 0
},
globals: {
BMapGL: "readonly",
JSEncrypt: "readonly",
Aliplayer: "readonly",
AliyunUpload: "readonly",
}
};

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

4
.prettierrc.cjs Normal file
View File

@ -0,0 +1,4 @@
module.exports = {
extends: ["@vue/prettier", "plugin:prettier/recommended"],
endOfLine: "crlf",
};

26
env.d.ts vendored Normal file
View File

@ -0,0 +1,26 @@
interface ImportMetaEnv {
// Auto generate by env-parse
readonly VITE_PROXY: string
/**
* VITE_FILE_URL=http://183.251.104.38:10110/file/
*/
readonly VITE_FILE_URL: string
readonly VITE_TEMPLATE_URL: string
readonly VITE_BASE: string
/**
* VITE_BASE_URL=http://192.168.0.25:8095/
*/
readonly VITE_BASE_URL: string
/**
* websocket t线
*/
readonly VITE_ON_LINE_WEB_SOCKET_URL: string
/**
* websocket 线
*/
readonly VITE_LEARNING_WEB_SOCKET_URL: string
/**
* websocket
*/
readonly VITE_DAHUA_WEB_SOCKET_URL: string
}

29
index.html Normal file
View File

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
<title>新泰安全管理系统</title>
</head>
<body>
<div id="app"></div>
<noscript>
<strong>很抱歉如果没有启用JavaScript网站无法正常工作请启用JavaScript使其正常工作。</strong>
</noscript>
<script type="text/javascript"
src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=OElqFYoKiAH8KFtph8ftLKF5NlNrbCUr"></script>
<script type="text/javascript" src="/jsencrypt.min.js"></script>
<script type="module" src="/src/main.js"></script>
<link rel="stylesheet" href="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/skins/default/aliplayer-min.css" />
<link rel="stylesheet" type="text/css" href="/lib/Cesium/Widgets/widgets.css" />
<script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/apsara-media-box/imp-web-player/2.16.3/aliplayer-min.js"></script>
<script src="/aliyun-upload-sdk-1.5.6/lib/es6-promise.min.js"></script>
<script src="/aliyun-upload-sdk-1.5.6/lib/aliyun-oss-sdk-6.17.1.min.js"></script>
<script src="/aliyun-upload-sdk-1.5.6/aliyun-upload-sdk-1.5.6.min.js"></script>
<script src="/lib/Cesium/Cesium.js"></script>
<script src="/lib/truf/truf.min.js"></script>
<script src="/lib/Cesium/CustomCesium.js"></script>
</body>
</html>

10
jsconfig.json Normal file
View File

@ -0,0 +1,10 @@
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": [
"src/*"
]
}
}
}

7996
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

80
package.json Normal file
View File

@ -0,0 +1,80 @@
{
"name": "vue3_template",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"lint": "eslint --ext .js,.vue --fix src .prettierrc.cjs"
},
"dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"@icon-park/vue-next": "^1.4.2",
"@vueuse/core": "^9.13.0",
"@vueuse/integrations": "^10.7.1",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"animate.css": "^4.1.1",
"autofit.js": "^3.0.7",
"axios": "^1.6.3",
"dayjs": "^1.11.10",
"echarts": "^5.4.3",
"element-plus": "^2.6.1",
"flv.js": "^1.6.2",
"hls.js": "^1.6.13",
"html2canvas": "^1.4.1",
"jspdf": "^2.5.1",
"lodash-es": "^4.17.21",
"mitt": "^3.0.1",
"mp4box": "^0.5.2",
"mpegts.js": "^1.8.0",
"nanoid": "^5.0.4",
"normalize.css": "^8.0.1",
"pako": "^2.1.0",
"pinia": "^2.1.7",
"pinia-plugin-persistedstate": "^3.2.1",
"qrcode": "^1.5.3",
"qs": "^6.11.2",
"relation-graph": "^2.1.24",
"throttle-debounce": "^5.0.0",
"v-viewer": "^3.0.11",
"vant": "^4.8.4",
"vue": "^3.4.3",
"vue-countup-v3": "^1.4.1",
"vue-draggable-plus": "^0.3.4",
"vue-esign": "^1.1.4",
"vue-router": "^4.2.5",
"vue3-pdfjs": "^0.1.6",
"vue3-print-nb": "^0.1.4",
"vue3-puzzle-vcode": "^1.1.5",
"vue3-seamless-scroll": "^2.0.1"
},
"devDependencies": {
"@our-patches/postcss-px-to-viewport": "^1.2.0",
"@types/node": "^18.19.4",
"@vitejs/plugin-basic-ssl": "^1.0.2",
"@vitejs/plugin-vue": "^4.6.2",
"@vue/eslint-config-prettier": "^7.1.0",
"autoprefixer": "^10.4.16",
"eslint": "^8.56.0",
"eslint-config-prettier": "^8.10.0",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-n": "^15.7.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-vue": "^9.19.2",
"prettier": "^2.8.8",
"sass": "^1.69.0",
"unplugin-auto-import": "^0.12.2",
"unplugin-vue-components": "^0.22.12",
"vite": "^4.5.1",
"vite-plugin-enhance-log": "^0.5.2",
"vite-plugin-env-parse": "^1.0.12",
"vite-plugin-eslint": "^1.8.1",
"vite-plugin-remove-console": "^2.2.0",
"vue-eslint-parser": "^9.3.2"
}
}

22
postcss.config.cjs Normal file
View File

@ -0,0 +1,22 @@
const path = require('path')
module.exports = {
plugins: {
autoprefixer: {
overrideBrowserslist: ['Android 4.1', 'iOS 7.1', 'Chrome > 31', 'ff > 31', 'ie >= 8', '> 1%'],
grid: true,
},
// '@our-patches/postcss-px-to-viewport': {
// unitToConvert: 'px',
// viewportWidth: 1920,
// unitPrecision: 3,
// viewportUnit: 'vw',
// selectorBlackList: ['.ignore', '.hairlines'],
// minPixelValue: 1,
// mediaQuery: false,
// exclude: [/^node_modules$/],
// include: [/BI/],
// landscapeUnit: 'vw',
// landscapeWidth: 750,
// }
},
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

3
public/jsencrypt.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TileMap version="1.0.0" tilemapservice="http://tms.osgeo.org/1.0.0">
<Title>NE2_HR_LC_SR_W_DR_recolored.tif</Title>
<Abstract></Abstract>
<SRS>EPSG:4326</SRS>
<BoundingBox miny="-90.00000000000000" minx="-180.00000000000000" maxy="90.00000000000000" maxx="180.00000000000000"/>
<Origin y="-90.00000000000000" x="-180.00000000000000"/>
<TileFormat width="256" height="256" mime-type="image/jpg" extension="jpg"/>
<TileSets profile="geodetic">
<TileSet href="0" units-per-pixel="0.70312500000000" order="0"/>
<TileSet href="1" units-per-pixel="0.35156250000000" order="1"/>
<TileSet href="2" units-per-pixel="0.17578125000000" order="2"/>
</TileSets>
</TileMap>

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Some files were not shown because too many files have changed in this diff Show More