Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
ai-yunshou-vue
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
AI云守
ai-yunshou-vue
Commits
9bc5f65a
Commit
9bc5f65a
authored
Aug 28, 2024
by
胡占生
🇨🇳
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 算法列表编辑,在线体验案例图片/视频优化修复,视频预览,实时预警对接
parent
96f0dca9
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
231 additions
and
115 deletions
+231
-115
src/api/algorithmList/index.js
src/api/algorithmList/index.js
+10
-0
src/components/ImgVideoUpload/index.vue
src/components/ImgVideoUpload/index.vue
+63
-51
src/views/algorithmControl/components/form.vue
src/views/algorithmControl/components/form.vue
+41
-17
src/views/algorithmControl/index.vue
src/views/algorithmControl/index.vue
+4
-4
src/views/algorithmList/components/details.vue
src/views/algorithmList/components/details.vue
+76
-19
src/views/deviceControl/index.vue
src/views/deviceControl/index.vue
+6
-11
src/views/videoControl/pointControl/components/drawPoint.vue
src/views/videoControl/pointControl/components/drawPoint.vue
+16
-4
src/views/videoControl/videoPreview/index.vue
src/views/videoControl/videoPreview/index.vue
+15
-9
No files found.
src/api/algorithmList/index.js
View file @
9bc5f65a
...
@@ -30,6 +30,16 @@ export function listAlg(query) {
...
@@ -30,6 +30,16 @@ export function listAlg(query) {
})
})
}
}
// 查询算法文件列表
export
function
listAlgFile
(
query
)
{
return
request
({
url
:
'
/yunshou/aiAlgorithmFile/list
'
,
method
:
'
get
'
,
params
:
query
})
}
// 查询算法列表x详情
// 查询算法列表x详情
export
function
detailAlg
(
id
)
{
export
function
detailAlg
(
id
)
{
return
request
({
return
request
({
...
...
src/components/ImgVideoUpload/index.vue
View file @
9bc5f65a
<
template
>
<
template
>
<div
class=
"component-upload-image"
>
<div
class=
"component-upload-image"
>
<div
class=
"media-list"
v-for=
"(item, index) in fileList"
:key=
"index"
>
<div
v-if=
"isImgLayout"
>
<el-image
<div
class=
"media-list"
v-for=
"(item, index) in fileList"
:key=
"index"
>
class=
"media-file image-file"
<el-image
v-if=
"getFileType(item.name)=='img'"
class=
"media-file image-file"
:src=
"baseUrl+item.url"
v-if=
"getFileType(item.name)=='img'"
></el-image>
:src=
"item.url"
<video
></el-image>
class=
"media-file video-file"
<video
v-if=
"getFileType(item.name)=='video'"
class=
"media-file video-file"
:src=
"baseUrl+item.url"
v-if=
"getFileType(item.name)=='video'"
controls
:src=
"item.url"
></video>
controls
<i
></video>
class=
"el-icon-zoom-in zoom-in-file"
<div
class=
"upload_operate"
>
v-if=
"getFileType(item.name)=='img'"
<el-icon
style=
"cursor: pointer;"
@
click=
"handlePictureCardPreview(item)"
><ZoomIn
/></el-icon>
@
click=
"handlePreview(item)"
<el-icon
@
click=
"handleDelete(item)"
style=
"margin-left: 1rem; cursor: pointer;"
><DeleteFilled
/></el-icon>
></i>
</div>
<i
</div>
class=
"el-icon-delete-solid delete-file"
@
click=
"handleDelete(item)"
></i>
</div>
</div>
<el-upload
<el-upload
multiple
multiple
:action=
"uploadImgUrl"
:action=
"uploadImgUrl"
list-type=
"picture-card
"
:list-type=
"isImgLayout?'picture-card':''
"
:on-success=
"handleUploadSuccess"
:on-success=
"handleUploadSuccess"
:before-upload=
"handleBeforeUpload"
:before-upload=
"handleBeforeUpload"
:limit=
"limit"
:limit=
"limit"
...
@@ -38,7 +36,10 @@
...
@@ -38,7 +36,10 @@
:on-preview=
"handlePictureCardPreview"
:on-preview=
"handlePictureCardPreview"
:class=
"
{ hide: fileList.length >= limit }"
:class=
"
{ hide: fileList.length >= limit }"
>
>
<el-icon
class=
"avatar-uploader-icon"
><plus
/></el-icon>
<el-icon
v-if=
"isImgLayout"
class=
"avatar-uploader-icon"
><plus
/></el-icon>
<el-button
type=
"primary"
v-else
>
上传本地文件
<el-icon
class=
"el-icon--left"
><Upload
/></el-icon>
</el-button>
</el-upload>
</el-upload>
<!-- 上传提示 -->
<!-- 上传提示 -->
<div
class=
"el-upload__tip"
v-if=
"showTip"
>
<div
class=
"el-upload__tip"
v-if=
"showTip"
>
...
@@ -56,9 +57,16 @@
...
@@ -56,9 +57,16 @@
v-model=
"dialogVisible"
v-model=
"dialogVisible"
title=
"预览"
title=
"预览"
width=
"800px"
width=
"800px"
style=
"text-align: center;"
append-to-body
append-to-body
>
>
<video
v-if=
"getFileType(dialogImageUrl)=='video'"
:src=
"dialogImageUrl"
controls
></video>
<img
<img
v-else
:src=
"dialogImageUrl"
:src=
"dialogImageUrl"
style=
"display: block; max-width: 100%; margin: 0 auto"
style=
"display: block; max-width: 100%; margin: 0 auto"
/>
/>
...
@@ -90,6 +98,11 @@ const props = defineProps({
...
@@ -90,6 +98,11 @@ const props = defineProps({
isShowTip
:
{
isShowTip
:
{
type
:
Boolean
,
type
:
Boolean
,
default
:
true
default
:
true
},
// 是否按照 照片墙布局
isImgLayout
:
{
type
:
Boolean
,
default
:
true
},
},
// 是否显示提示
// 是否显示提示
defaultUrl
:
{
defaultUrl
:
{
...
@@ -124,7 +137,6 @@ watch(() => props.modelValue, val => {
...
@@ -124,7 +137,6 @@ watch(() => props.modelValue, val => {
if
(
typeof
item
===
"
string
"
)
{
if
(
typeof
item
===
"
string
"
)
{
if
(
item
.
indexOf
(
baseUrl
)
===
-
1
)
{
if
(
item
.
indexOf
(
baseUrl
)
===
-
1
)
{
item
=
{
name
:
baseUrl
+
item
,
url
:
baseUrl
+
item
};
item
=
{
name
:
baseUrl
+
item
,
url
:
baseUrl
+
item
};
console
.
log
(
"
🚀 ~ watch ~ item:
"
,
item
)
}
else
{
}
else
{
item
=
{
name
:
item
,
url
:
item
};
item
=
{
name
:
item
,
url
:
item
};
}
}
...
@@ -207,7 +219,6 @@ function uploadedSuccessfully() {
...
@@ -207,7 +219,6 @@ function uploadedSuccessfully() {
uploadList
.
value
=
[];
uploadList
.
value
=
[];
number
.
value
=
0
;
number
.
value
=
0
;
emit
(
"
update:modelValue
"
,
listToString
(
fileList
.
value
));
emit
(
"
update:modelValue
"
,
listToString
(
fileList
.
value
));
console
.
log
(
"
🚀 ~ handleDelete ~ listToString(fileList.value):
"
,
listToString
(
fileList
.
value
))
proxy
.
$modal
.
closeLoading
();
proxy
.
$modal
.
closeLoading
();
}
}
}
}
...
@@ -237,10 +248,9 @@ function listToString(list, separator) {
...
@@ -237,10 +248,9 @@ function listToString(list, separator) {
}
}
// 判断当前文件类型
// 判断当前文件类型
function
getFileType
(
fileName
)
{
function
getFileType
(
fileName
)
{
console
.
log
(
"
🚀 ~ getFileType ~ fileName:
"
,
fileName
)
const
videoType
=
[
'
mp4
'
,
'
avi
'
,
'
mov
'
,
'
wmv
'
,
'
flv
'
,
'
mkv
'
,
'
rmvb
'
,
'
3gp
'
,
'
mpg
'
,
'
mpeg
'
,
'
webm
'
]
const
videoType
=
[
'
mp4
'
,
'
avi
'
,
'
mov
'
,
'
wmv
'
,
'
flv
'
,
'
mkv
'
,
'
rmvb
'
,
'
3gp
'
,
'
mpg
'
,
'
mpeg
'
,
'
webm
'
]
const
ImgType
=
[
'
jpg
'
,
'
jpeg
'
,
'
png
'
,
'
gif
'
,
'
bmp
'
,
'
tiff
'
,
'
webp
'
,]
const
ImgType
=
[
'
jpg
'
,
'
jpeg
'
,
'
png
'
,
'
gif
'
,
'
bmp
'
,
'
tiff
'
,
'
webp
'
,]
let
fileType
=
fileName
.
split
(
"
.
"
)
[
1
]
;
let
fileType
=
fileName
.
split
(
"
.
"
)
.
pop
()
;
if
(
videoType
.
includes
(
fileType
))
{
if
(
videoType
.
includes
(
fileType
))
{
return
"
video
"
;
return
"
video
"
;
...
@@ -260,10 +270,10 @@ function getFileType(fileName) {
...
@@ -260,10 +270,10 @@ function getFileType(fileName) {
.media-list
{
.media-list
{
position
:
relative
;
position
:
relative
;
}
}
.media-list
:hover
.delete-file
,
//
.media-list:hover .delete-file,
.media-list
:hover
.zoom-in-file
{
//
.media-list:hover .zoom-in-file {
display
:
inline-block
;
//
display: inline-block;
}
//
}
.media-file
{
.media-file
{
width
:
148px
;
width
:
148px
;
height
:
148px
;
height
:
148px
;
...
@@ -277,28 +287,30 @@ function getFileType(fileName) {
...
@@ -277,28 +287,30 @@ function getFileType(fileName) {
}
}
// .audio-file {}
// .audio-file {}
.delete-file
{
.delete-file
{
cursor
:
pointer
;
width
:
20px
;
height
:
20px
;
display
:
none
;
font-size
:
24px
;
color
:
#f56c6c
;
position
:
absolute
;
top
:
5%
;
right
:
15%
;
z-index
:
100
;
}
}
.zoom-in-file
{
.zoom-in-file
{
cursor
:
pointer
;
width
:
20px
;
}
height
:
20px
;
display
:
none
;
.upload_operate
{
font-size
:
24px
;
align-items
:
center
;
color
:
#009ad6
;
background-color
:
var
(
--
el-overlay-color-lighter
);
position
:
absolute
;
color
:
#fff
;
top
:
5%
;
cursor
:
default
;
right
:
38%
;
display
:
inline-flex
;
z-index
:
100
;
font-size
:
20px
;
height
:
148px
;
width
:
148px
;
justify-content
:
center
;
left
:
0
;
opacity
:
0
;
position
:
absolute
;
top
:
0
;
transition
:
opacity
var
(
--
el-transition-duration
);
}
.upload_operate
:hover
{
opacity
:
1
;
}
}
// .el-upload--picture-card 控制加号部分
// .el-upload--picture-card 控制加号部分
:deep
(
.hide
.el-upload--picture-card
)
{
:deep
(
.hide
.el-upload--picture-card
)
{
...
...
src/views/algorithmControl/components/form.vue
View file @
9bc5f65a
...
@@ -92,7 +92,7 @@
...
@@ -92,7 +92,7 @@
</el-col>
</el-col>
</el-row>
</el-row>
<el-card class="left-list">
<el-card class="left-list">
<el-table :data="
post
List" >
<el-table :data="
wrap
List" >
<el-table-column label="文件名称" align="center" prop="postId" />
<el-table-column label="文件名称" align="center" prop="postId" />
<el-table-column label="状态" align="center" prop="postCode" />
<el-table-column label="状态" align="center" prop="postCode" />
<el-table-column label="MD5核对结果" align="center" prop="postName" />
<el-table-column label="MD5核对结果" align="center" prop="postName" />
...
@@ -162,14 +162,14 @@
...
@@ -162,14 +162,14 @@
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
<
!-- <
el-row :gutter="10" class="mb8" style="justify-content: space-between;">
<el-row
:gutter=
"10"
class=
"mb8"
style=
"justify-content: space-between;"
>
<el-col
:span=
"1.5"
>
<el-col
:span=
"1.5"
>
<div
class=
"form-title"
style=
"display: flex;justify-content: flex-start;align-items: center;"
>
<div
class=
"form-title"
style=
"display: flex;justify-content: flex-start;align-items: center;"
>
<span>
算法维护
</span>
<span>
算法维护
</span>
</div>
</div>
</el-col>
</el-col>
<el-col
:span=
"6.8"
style=
"display: flex;"
>
<el-col
:span=
"6.8"
style=
"display: flex;"
>
<el-button
<
!-- <
el-button
type="primary"
type="primary"
plain
plain
icon="Search"
icon="Search"
...
@@ -180,7 +180,7 @@
...
@@ -180,7 +180,7 @@
plain
plain
icon="Refresh"
icon="Refresh"
@click="handleUpdate"
@click="handleUpdate"
>版本更新</el-button>
>版本更新</el-button>
-->
<el-button
<el-button
type=
"success"
type=
"success"
plain
plain
...
@@ -190,11 +190,22 @@
...
@@ -190,11 +190,22 @@
</el-col>
</el-col>
</el-row>
</el-row>
<el-card
class=
"left-list"
>
<el-card
class=
"left-list"
>
<el-table :data="postList" >
<el-table
:data=
"wrapList"
>
<el-table-column label="文件名称" align="center" prop="postId" />
<el-table-column
type=
"expand"
>
<el-table-column label="状态" align="center" prop="postCode" />
<
template
#default
="
props
"
>
<el-table-column label="MD5核对结果" align="center" prop="postName" />
<div
m=
"4"
>
<el-table-column label="文件大小" align="center" prop="postSort" />
<p
m=
"t-0 b-2"
>
State:
{{
props
+
'
props.row.state
'
}}
</p>
<p
m=
"t-0 b-2"
>
City:
{{
'
props.row.city
'
}}
</p>
<p
m=
"t-0 b-2"
>
Address:
{{
'
props.row.address
'
}}
</p>
<p
m=
"t-0 b-2"
>
Zip:
{{
'
props.row.zip
'
}}
</p>
<h3>
Family
</h3>
</div>
</
template
>
</el-table-column>
<el-table-column
label=
"文件名称"
align=
"center"
prop=
"algorithmName"
/>
<el-table-column
label=
"状态"
align=
"center"
prop=
"algorithmStatus"
/>
<el-table-column
label=
"MD5核对结果"
align=
"center"
prop=
"md5Result"
/>
<el-table-column
label=
"文件大小"
align=
"center"
prop=
"fileSize"
/>
<el-table-column
label=
"进度"
align=
"center"
prop=
"postSort"
/>
<el-table-column
label=
"进度"
align=
"center"
prop=
"postSort"
/>
<el-table-column
label=
"操作"
width=
"180"
align=
"center"
class-name=
"small-padding fixed-width"
>
<el-table-column
label=
"操作"
width=
"180"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
#default
="
scope
"
>
<
template
#default
="
scope
"
>
...
@@ -203,7 +214,7 @@
...
@@ -203,7 +214,7 @@
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
</el-card>
-->
</el-card>
</el-tab-pane>
</el-tab-pane>
<el-tab-pane
label=
"算法详情"
name=
"算法详情"
>
<el-tab-pane
label=
"算法详情"
name=
"算法详情"
>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-row
:gutter=
"10"
class=
"mb8"
>
...
@@ -214,7 +225,7 @@
...
@@ -214,7 +225,7 @@
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"130px"
label=
"算法Banner"
prop=
"algorithmBanner"
>
<el-form-item
label-width=
"130px"
label=
"算法Banner"
prop=
"algorithmBanner"
>
<ImageUpload
:modelValue=
"form.algorithmBanner"
:limit=
'1'
:fileSize=
"5"
@
update:modelValue=
"get
ImageUrl
"
/>
<ImageUpload
:modelValue=
"form.algorithmBanner"
:limit=
'1'
:fileSize=
"5"
@
update:modelValue=
"get
AlgorithmBanner
"
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
...
@@ -252,7 +263,7 @@
...
@@ -252,7 +263,7 @@
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"130px"
label=
"banner上算法视频"
prop=
"algorithmBannerVideo"
>
<el-form-item
label-width=
"130px"
label=
"banner上算法视频"
prop=
"algorithmBannerVideo"
>
<Im
ageUpload
:modelValue=
"form.algorithmBannerVideo"
:limit=
'1'
:fileSize=
"30"
@
update:modelValue=
"getImageUrl
"
/>
<Im
gVideoUpload
:modelValue=
"form.algorithmBannerVideo"
:fileType=
"['rmvb', 'avi', 'mp4']"
:limit=
'1'
:fileSize=
"100"
:isShowTip=
"true"
@
update:modelValue=
"getAlgorithmBannerVideo
"
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
...
@@ -264,7 +275,7 @@
...
@@ -264,7 +275,7 @@
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-form-item
label-width=
"130px"
label=
"在线体验案例图片/视频"
prop=
"algorithmBannerVideo"
>
<el-form-item
label-width=
"130px"
label=
"在线体验案例图片/视频"
prop=
"algorithmBannerVideo"
>
<ImgVideoUpload
:fileType=
"['png', 'jpg', 'mp4']"
:limit=
'5'
:fileSize=
"20"
:isShowTip=
"true"
/>
<ImgVideoUpload
:
modelValue=
"form.algorithmBannerVideo"
:
fileType=
"['png', 'jpg', 'mp4']"
:limit=
'5'
:fileSize=
"20"
:isShowTip=
"true"
/>
<!-- <ImageUpload :modelValue="form.algorithmBannerVideo" :limit='1' :fileSize="30" @update:modelValue="getImageUrl"/> -->
<!-- <ImageUpload :modelValue="form.algorithmBannerVideo" :limit='1' :fileSize="30" @update:modelValue="getImageUrl"/> -->
</el-form-item>
</el-form-item>
</el-col>
</el-col>
...
@@ -443,12 +454,11 @@
...
@@ -443,12 +454,11 @@
</template>
</template>
<
script
setup
>
<
script
setup
>
import
{
addAlg
,
updateAlg
,
detailAlg
}
from
"
@/api/algorithmList/index.js
"
;
import
{
addAlg
,
updateAlg
,
detailAlg
,
listAlgFile
}
from
"
@/api/algorithmList/index.js
"
;
import
{
listScene
,
detailScene
,
addScene
,
updateScene
,
deleteScene
}
from
"
@/api/algorithmList/scene.js
"
;
import
{
listScene
,
detailScene
,
addScene
,
updateScene
,
deleteScene
}
from
"
@/api/algorithmList/scene.js
"
;
import
{
listBoundary
,
detailBoundary
,
addBoundary
,
updateBoundary
,
deleteBoundary
}
from
"
@/api/algorithmList/boundary.js
"
;
import
{
listBoundary
,
detailBoundary
,
addBoundary
,
updateBoundary
,
deleteBoundary
}
from
"
@/api/algorithmList/boundary.js
"
;
const
{
proxy
}
=
getCurrentInstance
();
const
{
proxy
}
=
getCurrentInstance
();
const
{
algorithm_scen
,
algorithm_case
}
=
proxy
.
useDict
(
"
algorithm_scen
"
,
"
algorithm_case
"
);
const
{
algorithm_scen
,
algorithm_case
}
=
proxy
.
useDict
(
"
algorithm_scen
"
,
"
algorithm_case
"
);
console
.
log
(
"
🚀 ~ algorithm_case:
"
,
algorithm_case
)
const
emit
=
defineEmits
();
const
emit
=
defineEmits
();
const
open
=
ref
(
false
);
const
open
=
ref
(
false
);
const
openScene
=
ref
(
false
);
const
openScene
=
ref
(
false
);
...
@@ -458,7 +468,15 @@ const title = ref("");
...
@@ -458,7 +468,15 @@ const title = ref("");
const
titleScene
=
ref
(
""
);
const
titleScene
=
ref
(
""
);
const
titleBoundary
=
ref
(
""
);
const
titleBoundary
=
ref
(
""
);
const
activeName
=
ref
(
"
基础信息
"
);
const
activeName
=
ref
(
"
基础信息
"
);
const
postList
=
ref
([]);
const
wrapList
=
ref
([
{
algorithmId
:
'
1
'
,
algorithmStatus
:
'
1
'
,
fileSize
:
'
500M
'
,
md5Result
:
'
一致
'
,
algorithmName
:
'
火焰算法
'
,
}
]);
const
sceneList
=
ref
([]);
const
sceneList
=
ref
([]);
const
boundaryList
=
ref
([]);
const
boundaryList
=
ref
([]);
const
ids
=
ref
([]);
const
ids
=
ref
([]);
...
@@ -486,6 +504,12 @@ const { queryParams, form, formScene,formBoundary, rules } = toRefs(data);
...
@@ -486,6 +504,12 @@ const { queryParams, form, formScene,formBoundary, rules } = toRefs(data);
function
getImageUrl
(
url
){
function
getImageUrl
(
url
){
form
.
value
.
cardImg
=
url
form
.
value
.
cardImg
=
url
}
}
function
getAlgorithmBannerVideo
(
url
){
form
.
value
.
algorithmBannerVideo
=
url
}
function
getAlgorithmBanner
(
url
){
form
.
value
.
algorithmBanner
=
url
}
function
getBoundaryImageUrl
(
url
){
function
getBoundaryImageUrl
(
url
){
formBoundary
.
value
.
caseFile
=
url
formBoundary
.
value
.
caseFile
=
url
}
}
...
@@ -693,7 +717,7 @@ function submitBoundaryRefForm() {
...
@@ -693,7 +717,7 @@ function submitBoundaryRefForm() {
proxy
.
$modal
.
msgSuccess
(
"
新增成功
"
);
proxy
.
$modal
.
msgSuccess
(
"
新增成功
"
);
openBoundary
.
value
=
false
;
openBoundary
.
value
=
false
;
getBoundaryList
()
getBoundaryList
()
});
});
}
}
}
}
});
});
...
...
src/views/algorithmControl/index.vue
View file @
9bc5f65a
...
@@ -80,11 +80,11 @@
...
@@ -80,11 +80,11 @@
</el-row>
</el-row>
<el-table
v-loading=
"loading"
:data=
"algList"
@
selection-change=
"handleSelectionChange"
>
<el-table
v-loading=
"loading"
:data=
"algList"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
label=
"算法名称"
width=
"1
00"
align=
"center"
prop=
"algorithmNam
e"
/>
<el-table-column
label=
"算法名称"
width=
"1
50"
align=
"center"
prop=
"algorithmName"
:show-overflow-tooltip=
"tru
e"
/>
<el-table-column
label=
"算法英文"
align=
"center"
prop=
"algorithmEnglish"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"算法英文"
align=
"center"
prop=
"algorithmEnglish"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"硬件平台"
align=
"center"
prop=
"algorithmPlat"
>
<el-table-column
label=
"硬件平台"
align=
"center"
width=
"100"
prop=
"algorithmPlat"
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"算法场景"
align=
"center"
prop=
"applicationScenarios"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"算法场景"
align=
"center"
width=
"100"
prop=
"applicationScenarios"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"卡片文案"
align=
"center"
prop=
"cardCopywriting"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"卡片文案"
align=
"center"
prop=
"cardCopywriting"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"操作"
align=
"center"
width=
"200"
class-name=
"small-padding fixed-width"
>
<el-table-column
label=
"操作"
align=
"center"
width=
"200"
class-name=
"small-padding fixed-width"
>
<template
#default
="
scope
"
>
<template
#default
="
scope
"
>
...
@@ -155,7 +155,7 @@
...
@@ -155,7 +155,7 @@
const
{
queryParams
,
form
,
rules
}
=
toRefs
(
data
);
const
{
queryParams
,
form
,
rules
}
=
toRefs
(
data
);
/**
查询定时
任务列表 */
/** 任务列表 */
function
getList
()
{
function
getList
()
{
loading
.
value
=
true
;
loading
.
value
=
true
;
listAlg
(
proxy
.
addDateRange
(
queryParams
.
value
,
dateRange
.
value
)).
then
(
response
=>
{
listAlg
(
proxy
.
addDateRange
(
queryParams
.
value
,
dateRange
.
value
)).
then
(
response
=>
{
...
...
src/views/algorithmList/components/details.vue
View file @
9bc5f65a
...
@@ -13,14 +13,19 @@
...
@@ -13,14 +13,19 @@
<el-row
:gutter=
"10"
>
<el-row
:gutter=
"10"
>
<el-col
:xs=
"24"
:sm=
"24"
:md=
"24"
:lg=
"24"
>
<el-col
:xs=
"24"
:sm=
"24"
:md=
"24"
:lg=
"24"
>
<el-card
class=
"right-list"
>
<el-card
class=
"right-list"
>
<div
class=
"backcolor"
style=
"height: 350px;width: 100%; padding: 10px;"
>
<div
class=
"backcolor"
v-if=
"videoLoading"
:style=
"backImg"
>
<div
style=
"width: 500px;"
>
<div
style=
"width: 500px;"
>
<h2
style=
"font-weight: 700;font-style: normal;font-size: 28px;color: #FFFFFF;"
>
{{
form
.
algorithmName
}}
</h2>
<h2
style=
"font-weight: 700;font-style: normal;font-size: 28px;color: #FFFFFF;"
>
{{
form
.
algorithmName
}}
</h2>
<p
style=
"font-weight: 700;font-style: normal;font-size: 17px;color: rgba(255, 255, 255, 0.6);line-height: 21px;"
>
<p
style=
"font-weight: 700;font-style: normal;font-size: 17px;color: rgba(255, 255, 255, 0.6);line-height: 21px;"
>
{{
form
.
cardCopywriting
}}
{{
form
.
cardCopywriting
}}
</p>
</p>
</div>
</div>
<ImagePreview
style=
"width: 400px;height: 225px;"
:src=
"form.cardImg"
/>
<div
style=
"width: 400px;height: 225px;"
>
<video
v-if=
"videoLoading"
controls
ref=
"videoEle"
class=
"drawImg"
>
<source
:src=
"backVideo"
type=
"video/mp4"
/>
</video>
</div>
<!--
<ImagePreview
:src=
"form.cardImg"
/>
-->
</div>
</div>
...
@@ -45,34 +50,50 @@
...
@@ -45,34 +50,50 @@
<div
class=
"form-title"
style=
"display: flex;justify-content: flex-start;align-items: center;"
>
<div
class=
"form-title"
style=
"display: flex;justify-content: flex-start;align-items: center;"
>
<span>
算法试用
</span>
<span>
算法试用
</span>
</div>
</div>
<div
style=
"background-color: #E6F3FF;display: grid;grid-template-columns: 1fr 2fr 2fr; gap: 16px;padding: 16px;"
>
<div
style=
"background-color: #E6F3FF;display: grid;grid-template-columns: 1fr 2fr 2fr; gap: 16px;padding: 16px;
min-height: 650px;
"
>
<el-card
>
<el-card
style=
"position: relative;"
>
<div
class=
"upload-box"
>
<div
class=
"upload-box"
>
<div
style=
"height: 100px;"
v-for=
"item in invalidList"
:key=
"item.id"
>
<div
style=
"height: 130px;width: 100%; margin: 5px; overflow: hidden;cursor: pointer;"
<img
height=
"100%"
:src=
"'http://192.168.4.206'+item.caseFile"
alt=
""
>
v-for=
"item in invalidList"
:key=
"item.id"
@
click=
"handBuiltImg(item.caseFile)"
>
<img
width=
"100%"
:src=
"'http://192.168.4.206'+item.caseFile"
alt=
""
>
</div>
</div>
ww
<ImgVideoUpload
style=
"position: absolute;bottom: 5px;left: 26%;"
:modelValue=
"uploadUrl"
:fileType=
"['png', 'jpg', 'mp4']"
:isImgLayout=
"false"
:limit=
'5'
:fileSize=
"20"
:isShowTip=
"false"
@
update:modelObj=
"getImgObj"
/>
<!-- <ImageUpload :limit='1' :fileSize="5" :isShowTip="false" @update:modelObj="getImgObj"/> -->
<!-- <ImageUpload :limit='1' :fileSize="5" :isShowTip="false" @update:modelObj="getImgObj"/> -->
</div>
</div>
</el-card>
</el-card>
<el-card
>
<el-card
>
原始数据
原始数据
<div
class=
"img-box"
v-if=
"nowImg.length==0"
>
<div
class=
"img-box"
v-if=
"nowImg.length==0"
>
<img
src=
"@/assets/images/default.png"
height=
"
100%
"
/>
<img
src=
"@/assets/images/default.png"
height=
"
350px
"
/>
</div>
</div>
<div
class=
"img-box"
v-else
>
<div
class=
"img-box"
v-else
>
<
img
:src=
"nowImg"
height=
"100%"
/>
<
ImagePreview
:src=
"nowImg"
height=
"100%"
/>
</div>
</div>
<el-button
type=
"primary"
plain
>
开始识别
</el-button>
</el-card>
</el-card>
<el-card
>
<el-card
>
算法识别结果
算法识别结果
<div
class=
"img-box"
v-if=
"outFilePath.length==0"
>
<div
class=
"img-box"
v-if=
"outFilePath.length==0"
>
<div>
{{ resultStr }}
</div>
<div>
{{ resultStr }}
</div>
<img
src=
"@/assets/images/default.png"
height=
"
100%
"
/>
<img
src=
"@/assets/images/default.png"
height=
"
350px
"
/>
</div>
</div>
<div
class=
"img-box"
v-else
>
<div
class=
"img-box"
v-else
>
<ImagePreview
:src=
"outFilePath"
height=
"100%"
/>
<ImagePreview
:src=
"outFilePath"
height=
"100%"
/>
</div>
</div>
<div
style=
"display: flex;justify-content: space-between;"
>
<el-button
type=
"primary"
plain
>
重置区域
</el-button>
<el-button
type=
"primary"
plain
>
下载识别视频
</el-button>
</div>
</el-card>
</el-card>
</div>
</div>
<div
class=
"form-title"
style=
"display: flex;justify-content: flex-start;align-items: center;"
>
<div
class=
"form-title"
style=
"display: flex;justify-content: flex-start;align-items: center;"
>
...
@@ -88,8 +109,8 @@
...
@@ -88,8 +109,8 @@
<img
src=
"@/assets/images/default.png"
height=
"100%"
/>
<img
src=
"@/assets/images/default.png"
height=
"100%"
/>
</div>
</div>
<div
class=
"img-box gird-layout"
v-else
>
<div
class=
"img-box gird-layout"
v-else
>
<div
v-for=
"item in effectiveList"
:key=
"item.id"
>
<div
class=
"img-item"
v-for=
"item in effectiveList"
:key=
"item.id"
>
<ImagePreview
style=
"
width: 400px;height: 225px
;"
:src=
"item.caseFile"
/>
<ImagePreview
style=
"
height: 100%
;"
:src=
"item.caseFile"
/>
</div>
</div>
</div>
</div>
</el-card>
</el-card>
...
@@ -102,8 +123,8 @@
...
@@ -102,8 +123,8 @@
<img
src=
"@/assets/images/default.png"
height=
"100%"
/>
<img
src=
"@/assets/images/default.png"
height=
"100%"
/>
</div>
</div>
<div
class=
"img-box gird-layout"
v-else
>
<div
class=
"img-box gird-layout"
v-else
>
<div
v-for=
"item in invalidList"
:key=
"item.id"
>
<div
class=
"img-item"
v-for=
"item in invalidList"
:key=
"item.id"
>
<ImagePreview
style=
"
width: 400px;height: 225px
;"
:src=
"item.caseFile"
/>
<ImagePreview
style=
"
height: 100%
;"
:src=
"item.caseFile"
/>
</div>
</div>
</div>
</div>
</el-card>
</el-card>
...
@@ -128,10 +149,15 @@ const nowImg=ref('')
...
@@ -128,10 +149,15 @@ const nowImg=ref('')
const
{
roleId
}
=
route
.
params
const
{
roleId
}
=
route
.
params
const
{
proxy
}
=
getCurrentInstance
();
const
{
proxy
}
=
getCurrentInstance
();
const
algFormRef
=
ref
(
null
)
const
algFormRef
=
ref
(
null
)
const
uploadUrl
=
ref
(
''
)
const
videoLoading
=
ref
(
false
)
const
backImg
=
ref
({})
const
backVideo
=
ref
({})
const
applicationList
=
ref
([])
const
applicationList
=
ref
([])
const
effectiveList
=
ref
([])
const
effectiveList
=
ref
([])
const
invalidList
=
ref
([])
const
invalidList
=
ref
([])
const
nowText
=
ref
(
'
算法详情
'
)
const
nowText
=
ref
(
'
算法详情
'
)
const
baseUrl
=
'
http://192.168.4.206
'
const
data
=
reactive
({
const
data
=
reactive
({
form
:
{},
form
:
{},
queryParams
:
{
queryParams
:
{
...
@@ -148,9 +174,16 @@ const data = reactive({
...
@@ -148,9 +174,16 @@ const data = reactive({
const
{
queryParams
,
form
,
rules
}
=
toRefs
(
data
);
const
{
queryParams
,
form
,
rules
}
=
toRefs
(
data
);
function
getDetials
(){
function
getDetials
(){
videoLoading
.
value
=
false
detailAlg
(
roleId
).
then
(
res
=>
{
detailAlg
(
roleId
).
then
(
res
=>
{
console
.
log
(
res
)
console
.
log
(
res
)
form
.
value
=
res
.
data
form
.
value
=
res
.
data
const
banner
=
new
URL
(
judgeImgUrl
(
res
.
data
.
algorithmBanner
))
backImg
.
value
=
{
backgroundImage
:
`url(
${
banner
}
)`
,
}
backVideo
.
value
=
judgeImgUrl
(
res
.
data
.
algorithmBannerVideo
)
videoLoading
.
value
=
true
})
})
listScene
({
algorithmId
:
roleId
}).
then
(
res
=>
{
listScene
({
algorithmId
:
roleId
}).
then
(
res
=>
{
applicationList
.
value
=
res
.
rows
applicationList
.
value
=
res
.
rows
...
@@ -164,7 +197,21 @@ function getImgObj(obj){
...
@@ -164,7 +197,21 @@ function getImgObj(obj){
nowImg
.
value
=
obj
.
url
nowImg
.
value
=
obj
.
url
handeUpload
(
obj
)
handeUpload
(
obj
)
}
}
function
judgeImgUrl
(
item
){
if
(
item
&&
item
!=
null
){
if
(
item
.
indexOf
(
baseUrl
)
===
-
1
)
{
return
baseUrl
+
item
}
else
{
return
item
}
}
else
{
return
'
http://192.168.4.206/profile/upload/2024/08/28/banner%20background_20240828095250A003.png
'
}
}
function
handBuiltImg
(
item
){
nowImg
.
value
=
item
}
getDetials
()
getDetials
()
</
script
>
</
script
>
...
@@ -173,13 +220,14 @@ getDetials()
...
@@ -173,13 +220,14 @@ getDetials()
.upload-box
{
.upload-box
{
// width: 500px;
// width: 500px;
height
:
365px
;
border-radius
:
5px
;
border-radius
:
5px
;
text-align
:
center
;
display
:
flex
;
flex-direction
:
column
;
align-items
:
center
;
}
}
.img-box
{
.img-box
{
// width: 500px;
// width: 500px;
height
:
365px
;
min-
height
:
365px
;
// border: 1px solid #d8dce5;
// border: 1px solid #d8dce5;
border-radius
:
5px
;
border-radius
:
5px
;
text-align
:
center
;
text-align
:
center
;
...
@@ -248,8 +296,12 @@ getDetials()
...
@@ -248,8 +296,12 @@ getDetials()
justify-content
:
space-between
;
justify-content
:
space-between
;
}
}
.backcolor
{
.backcolor
{
height
:
350px
;
width
:
100%
;
padding
:
10px
;
border-radius
:
10px
;
border-radius
:
10px
;
background-image
:
linear-gradient
(
to
right
,
#6f86d6
0%
,
#48c6ef
100%
);
background-image
:
linear-gradient
(
to
right
,
#6f86d6
0%
,
#48c6ef
100%
);
background-size
:
100%
350px
;
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
justify-content
:
space-around
;
justify-content
:
space-around
;
...
@@ -292,9 +344,14 @@ getDetials()
...
@@ -292,9 +344,14 @@ getDetials()
}
}
.gird-layout
{
.gird-layout
{
display
:
grid
;
display
:
grid
;
grid-template-columns
:
repeat
(
auto-fill
,
minmax
(
1
0
0px
,
1fr
));
grid-template-columns
:
repeat
(
auto-fill
,
minmax
(
1
5
0px
,
1fr
));
gap
:
16px
;
gap
:
16px
;
padding
:
16px
;
padding
:
16px
;
}
}
.img-item
{
border
:
1px
solid
#279bda
;
width
:
150px
;
height
:
150px
;
}
</
style
>
</
style
>
src/views/deviceControl/index.vue
View file @
9bc5f65a
...
@@ -111,8 +111,8 @@
...
@@ -111,8 +111,8 @@
</el-table-column>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
width=
"200"
class-name=
"small-padding fixed-width"
>
<el-table-column
label=
"操作"
align=
"center"
width=
"200"
class-name=
"small-padding fixed-width"
>
<
template
#default
="
scope
"
>
<
template
#default
="
scope
"
>
<el-tooltip
content=
"禁用
"
placement=
"top"
>
<el-tooltip
:content=
"scope.row.isOpen === '0'? '禁用' : '启用'
"
placement=
"top"
>
<el-button
link
type=
"primary"
icon=
"Edit"
@
click=
"handleUpdat
e(scope.row)"
v-hasPermi=
"['monitor:job:edit']"
></el-button>
<el-button
link
type=
"primary"
:icon=
"scope.row.isOpen === '0'? 'Close' : 'Check'"
@
click=
"handleStatusChang
e(scope.row)"
v-hasPermi=
"['monitor:job:edit']"
></el-button>
</el-tooltip>
</el-tooltip>
<el-tooltip
content=
"修改"
placement=
"top"
>
<el-tooltip
content=
"修改"
placement=
"top"
>
<el-button
link
type=
"primary"
icon=
"Edit"
@
click=
"handleUpdate(scope.row)"
v-hasPermi=
"['monitor:job:edit']"
></el-button>
<el-button
link
type=
"primary"
icon=
"Edit"
@
click=
"handleUpdate(scope.row)"
v-hasPermi=
"['monitor:job:edit']"
></el-button>
...
@@ -179,7 +179,7 @@
...
@@ -179,7 +179,7 @@
</template>
</template>
<
script
setup
name=
"Job"
>
<
script
setup
name=
"Job"
>
import
{
listDevice
,
deleteDevice
,
addDevice
,
updateDevice
,
detailDevice
}
from
"
@/api/yunshou/device
"
;
import
{
listDevice
,
deleteDevice
,
addDevice
,
updateDevice
,
detailDevice
,
updateStatusDevice
}
from
"
@/api/yunshou/device
"
;
const
router
=
useRouter
();
const
router
=
useRouter
();
const
{
proxy
}
=
getCurrentInstance
();
const
{
proxy
}
=
getCurrentInstance
();
const
{
sys_job_group
,
sys_job_status
}
=
proxy
.
useDict
(
"
sys_job_group
"
,
"
sys_job_status
"
);
const
{
sys_job_group
,
sys_job_status
}
=
proxy
.
useDict
(
"
sys_job_group
"
,
"
sys_job_status
"
);
...
@@ -269,20 +269,15 @@
...
@@ -269,20 +269,15 @@
// 任务状态修改
// 任务状态修改
function
handleStatusChange
(
row
)
{
function
handleStatusChange
(
row
)
{
let
text
=
row
.
status
===
"
0
"
?
"
启用
"
:
"
停
用
"
;
let
text
=
row
.
isOpen
===
"
0
"
?
"
禁用
"
:
"
启
用
"
;
proxy
.
$modal
.
confirm
(
'
确认要"
'
+
text
+
'
""
'
+
row
.
jobName
+
'
"任务
吗?
'
).
then
(
function
()
{
proxy
.
$modal
.
confirm
(
'
确认要"
'
+
text
+
'
""
'
+
row
.
deviceName
+
'
"设备
吗?
'
).
then
(
function
()
{
return
changeJobStatus
(
row
.
id
,
row
.
status
);
return
updateStatusDevice
({
id
:
row
.
id
,
status
:
row
.
status
}
);
}).
then
(()
=>
{
}).
then
(()
=>
{
proxy
.
$modal
.
msgSuccess
(
text
+
"
成功
"
);
proxy
.
$modal
.
msgSuccess
(
text
+
"
成功
"
);
}).
catch
(
function
()
{
}).
catch
(
function
()
{
row
.
status
=
row
.
status
===
"
0
"
?
"
1
"
:
"
0
"
;
row
.
status
=
row
.
status
===
"
0
"
?
"
1
"
:
"
0
"
;
});
});
}
}
/** 新增按钮操作 */
/** 新增按钮操作 */
function
handleAdd
()
{
function
handleAdd
()
{
...
...
src/views/videoControl/pointControl/components/drawPoint.vue
View file @
9bc5f65a
...
@@ -176,15 +176,15 @@
...
@@ -176,15 +176,15 @@
</el-col>
</el-col>
</el-row>
</el-row>
</el-dialog>
</el-dialog>
<el-dialog
title=
"算法配置"
v-model=
"aiAlgorithm.visible.value"
width=
"3
0%"
>
<el-dialog
:title=
"unref(aiAlgorithm.form).algorithmName"
v-model=
"aiAlgorithm.visible.value"
width=
"5
0%"
>
<el-form
<el-form
ref=
"algorithmManage.formRef"
ref=
"algorithmManage.formRef"
:model=
"aiAlgorithm.form"
:model=
"aiAlgorithm.form"
label-width=
"
8
0px"
label-width=
"
16
0px"
>
>
<el-form-item
label=
"算法名称"
prop=
"algorithmName"
>
<
!-- <
el-form-item label="算法名称" prop="algorithmName">
<el-input v-model="unref(aiAlgorithm.form).algorithmName" readonly />
<el-input v-model="unref(aiAlgorithm.form).algorithmName" readonly />
</el-form-item>
</el-form-item>
-->
<el-form-item
label=
"告警间隔"
prop=
"alarmInterval"
>
<el-form-item
label=
"告警间隔"
prop=
"alarmInterval"
>
<el-input
<el-input
placeholder=
"单位/秒"
placeholder=
"单位/秒"
...
@@ -203,6 +203,18 @@
...
@@ -203,6 +203,18 @@
<el-form-item
label=
"标签阈值"
prop=
"labelThreshold"
>
<el-form-item
label=
"标签阈值"
prop=
"labelThreshold"
>
<el-input
v-model=
"unref(aiAlgorithm.form).labelThreshold"
/>
<el-input
v-model=
"unref(aiAlgorithm.form).labelThreshold"
/>
</el-form-item>
</el-form-item>
<el-table
:data=
"wrapList"
>
<el-table-column
label=
"识别标签"
align=
"center"
prop=
"md5Result"
/>
<el-table-column
label=
"标签阈值"
align=
"center"
prop=
"fileSize"
/>
<el-table-column
label=
"状态"
align=
"center"
prop=
"postSort"
/>
<el-table-column
label=
"操作"
width=
"180"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
#default
="
scope
"
>
<el-button
link
type=
"primary"
icon=
"Edit"
@
click=
"handleUpdate(scope.row)"
v-hasPermi=
"['system:post:edit']"
>
修改
</el-button>
<!--
<el-button
link
type=
"primary"
icon=
"Delete"
@
click=
"handleDelete(scope.row)"
v-hasPermi=
"['system:post:remove']"
>
删除
</el-button>
-->
</
template
>
</el-table-column>
</el-table>
<div
class=
"right"
>
<div
class=
"right"
>
<el-button
type=
"primary"
@
click=
"sureConfig"
>
确认
</el-button>
<el-button
type=
"primary"
@
click=
"sureConfig"
>
确认
</el-button>
<el-button
type=
"primary"
plain
@
click=
"aiAlgorithm.toClose"
<el-button
type=
"primary"
plain
@
click=
"aiAlgorithm.toClose"
...
...
src/views/videoControl/videoPreview/index.vue
View file @
9bc5f65a
...
@@ -79,14 +79,14 @@
...
@@ -79,14 +79,14 @@
shadow=
"hover"
shadow=
"hover"
>
>
<
template
v-slot:default
>
<
template
v-slot:default
>
<
img
src=
"@/assets/images/default.pn
g"
style=
"width: 100%"
/>
<
ImagePreview
:src=
"item.alarmIm
g"
style=
"width: 100%"
/>
<el-form
:model=
"form"
label-width=
"100px"
>
<el-form
:model=
"form"
label-width=
"100px"
>
<el-form-item
label=
"预警设备:"
>
{{
form
.
title
}}
</el-form-item>
<
!--
<
el-form-item
label=
"预警设备:"
>
{{
form
.
title
}}
</el-form-item>
<el-form-item
label=
"登录信息:"
>
{{
form
.
title
}}
</el-form-item>
<el-form-item
label=
"登录信息:"
>
{{
form
.
title
}}
</el-form-item>
<el-form-item
label=
"预警区域:"
>
{{
form
.
title
}}
</el-form-item>
<el-form-item
label=
"预警区域:"
>
{{
form
.
title
}}
</el-form-item>
-->
<el-form-item
label=
"预警类型:"
>
{{
form
.
titl
e
}}
</el-form-item>
<el-form-item
label=
"预警类型:"
>
{{
item
.
alarmTyp
e
}}
</el-form-item>
<el-form-item
label=
"预警时间:"
>
{{
form
.
title
}}
</el-form-item>
<el-form-item
label=
"预警时间:"
>
{{
parseTime
(
item
.
alarmTime
)
}}
</el-form-item>
<el-form-item
label=
"预警等级:"
><el-tag
:type=
"'danger'"
effect=
"dark"
>
{{
'
一
级预警
'
}}
</el-tag></el-form-item>
<el-form-item
label=
"预警等级:"
><el-tag
:type=
"'danger'"
effect=
"dark"
>
{{
item
.
alarmLevelId
+
'
级预警
'
}}
</el-tag></el-form-item>
</el-form>
</el-form>
</
template
>
</
template
>
</el-card>
</el-card>
...
@@ -103,13 +103,14 @@ import { ArrowDown } from "@element-plus/icons-vue";
...
@@ -103,13 +103,14 @@ import { ArrowDown } from "@element-plus/icons-vue";
import
{
Search
}
from
"
@element-plus/icons-vue
"
;
import
{
Search
}
from
"
@element-plus/icons-vue
"
;
import
'
@/utils/jsmpeg.min
'
import
'
@/utils/jsmpeg.min
'
import
{
listAiRegionManage
}
from
"
@/api/videoControl/videoPreview
"
;
import
{
listAiRegionManage
}
from
"
@/api/videoControl/videoPreview
"
;
import
{
listAlarm
}
from
"
@/api/alarmControl/index.js
"
;
import
{
onMounted
,
reactive
,
ref
,
}
from
"
vue
"
;
import
{
onMounted
,
reactive
,
ref
,
}
from
"
vue
"
;
const
{
proxy
}
=
getCurrentInstance
();
const
{
proxy
}
=
getCurrentInstance
();
const
algFormRef
=
ref
(
null
);
const
algFormRef
=
ref
(
null
);
const
nowText
=
ref
(
"
视频预览
"
);
const
nowText
=
ref
(
"
视频预览
"
);
const
deptName
=
ref
(
""
);
const
deptName
=
ref
(
""
);
const
deptOptions
=
ref
(
undefined
);
const
deptOptions
=
ref
(
undefined
);
const
algorithmList
=
re
active
([
const
algorithmList
=
re
f
([
{
{
name
:
"
我的算法
"
,
name
:
"
我的算法
"
,
value
:
1
,
value
:
1
,
...
@@ -183,8 +184,13 @@ function getTreeData() {
...
@@ -183,8 +184,13 @@ function getTreeData() {
deptOptions
.
value
=
res
.
data
deptOptions
.
value
=
res
.
data
})
})
}
}
function
getWaringData
()
{
listAlarm
().
then
((
res
)
=>
{
algorithmList
.
value
=
res
.
rows
})
}
getTreeData
()
getTreeData
()
getWaringData
()
function
getVideos
(){
function
getVideos
(){
let
canvas
=
document
.
getElementById
(
'
video
'
)
let
canvas
=
document
.
getElementById
(
'
video
'
)
let
url
=
'
rtsp://192.168.20.211:554/av0_0
'
let
url
=
'
rtsp://192.168.20.211:554/av0_0
'
...
@@ -275,7 +281,7 @@ function handleDelete(row) {
...
@@ -275,7 +281,7 @@ function handleDelete(row) {
min-height
:
700px
;
min-height
:
700px
;
.alg-list
{
.alg-list
{
display
:
grid
;
display
:
grid
;
grid-template-columns
:
repeat
(
auto-fill
,
minmax
(
180px
,
1fr
));
grid-template-columns
:
repeat
(
minmax
(
180px
,
1fr
));
gap
:
16px
;
gap
:
16px
;
.el-card
{
.el-card
{
border
:
1px
soild
#ff6700
;
border
:
1px
soild
#ff6700
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment