Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
najiu-skynet-admin
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
najiu-frontend
najiu-skynet-admin
Commits
4c1b5376
Commit
4c1b5376
authored
Oct 26, 2021
by
朱松文
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
智能检索模块
parent
188150e5
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
323 additions
and
90 deletions
+323
-90
index.vue
src/components/MyVideo/index.vue
+12
-3
index.vue
src/components/myDialog/index.vue
+64
-0
main.ts
src/main.ts
+8
-5
CameraService.ts
src/service/CameraService.ts
+14
-0
index.vue
src/views/aiSearch/index.vue
+189
-24
index.vue
src/views/dashboard/index.vue
+5
-17
index.vue
src/views/sysSetting/index.vue
+31
-41
No files found.
src/components/MyVideo/index.vue
View file @
4c1b5376
<
template
>
<
template
>
<video
id=
"najiu-player"
class=
"video-js"
muted
preload=
"auto"
>
<video
id=
"najiu-player"
class=
"video-js"
muted
preload=
"auto"
>
<source
ref=
"videoSource"
:src=
"videoUrl
"
type=
"video/mp4"
/>
<source
ref=
"videoSource"
src=
"//vjs.zencdn.net/(…)oceans324.mp4
"
type=
"video/mp4"
/>
<p
class=
"vjs-no-js"
>
当前浏览器不支持视频播放
</p>
<p
class=
"vjs-no-js"
>
当前浏览器不支持视频播放
</p>
</video>
</video>
</
template
>
</
template
>
...
@@ -23,13 +23,12 @@ require("../../../node_modules/video.js/dist/lang/zh-CN");
...
@@ -23,13 +23,12 @@ require("../../../node_modules/video.js/dist/lang/zh-CN");
export
default
class
MyVideo
extends
Vue
{
export
default
class
MyVideo
extends
Vue
{
@
Prop
()
private
src
!
:
string
;
@
Prop
()
private
src
!
:
string
;
@
Prop
()
private
width
!
:
number
;
@
Prop
()
private
width
!
:
number
;
@
Prop
()
private
showCloseButton
!
:
boolean
;
player
=
null
;
player
=
null
;
videoUrl
=
""
;
dogTrack
=
null
;
dogTrack
=
null
;
mounted
()
{
mounted
()
{
this
.
videoUrl
=
this
.
src
;
const
_this
=
this
;
const
_this
=
this
;
this
.
$nextTick
(()
=>
{
this
.
$nextTick
(()
=>
{
this
.
player
=
videojs
(
this
.
player
=
videojs
(
...
@@ -58,12 +57,21 @@ export default class MyVideo extends Vue {
...
@@ -58,12 +57,21 @@ export default class MyVideo extends Vue {
{
name
:
"
subsCapsButton
"
},
{
name
:
"
subsCapsButton
"
},
{
name
:
"
audioTrackButton
"
},
{
name
:
"
audioTrackButton
"
},
{
name
:
"
fullscreenToggle
"
},
{
name
:
"
fullscreenToggle
"
},
{
name
:
"
BigPlayButton
"
},
],
],
},
},
},
},
function
onPlayerReady
()
{
function
onPlayerReady
()
{
// const myContainer = this.addChild("MyContainer");
// const myContainer = this.addChild("MyContainer");
this
.
addChild
(
"
DogTrack
"
);
this
.
addChild
(
"
DogTrack
"
);
console
.
log
(
"
showCloseButton
"
,
_this
.
showCloseButton
);
if
(
_this
.
showCloseButton
)
{
this
.
addChild
(
"
CloseButton
"
);
this
.
getChild
(
"
CloseButton
"
).
on
(
"
close
"
,
function
()
{
_this
.
$emit
(
"
closeVideo
"
,
this
);
});
}
_this
.
dogTrack
=
this
.
getChild
(
"
DogTrack
"
);
_this
.
dogTrack
=
this
.
getChild
(
"
DogTrack
"
);
this
.
play
();
this
.
play
();
}
}
...
@@ -74,6 +82,7 @@ export default class MyVideo extends Vue {
...
@@ -74,6 +82,7 @@ export default class MyVideo extends Vue {
}
}
onSrcChange
(
videoSrc
:
string
)
{
onSrcChange
(
videoSrc
:
string
)
{
console
.
log
(
"
videosrc
"
,
videoSrc
);
this
.
player
.
src
(
videoSrc
);
this
.
player
.
src
(
videoSrc
);
this
.
player
.
play
();
this
.
player
.
play
();
}
}
...
...
src/components/myDialog/index.vue
0 → 100644
View file @
4c1b5376
<
template
>
<div
class=
"my-dialog"
>
<el-dialog
title=
"提示信息"
:visible.sync=
"isShow"
width=
"450px"
>
<slot></slot>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
class=
"btn"
type=
"info"
@
click=
"isShow = false"
>
取 消
</el-button>
<el-button
class=
"btn"
type=
"primary"
@
click=
"handleConfirm"
>
确 定
</el-button>
</span>
</el-dialog>
</div>
</
template
>
<
script
lang=
'ts'
>
import
{
Vue
,
Component
,
Prop
}
from
"
vue-property-decorator
"
;
@
Component
export
default
class
MyDialog
extends
Vue
{
isShow
=
false
;
show
()
{
this
.
isShow
=
true
;
}
hide
()
{
this
.
isShow
=
false
;
}
handleConfirm
()
{
this
.
$emit
(
"
onConfirm
"
);
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.my-dialog
{
::v-deep
{
.el-dialog__body
{
padding
:
20px
70px
;
}
.el-dialog__header
{
background-color
:
#333e5d
;
}
.el-dialog__title
{
color
:
#d7d7d7
;
}
.el-dialog__close
{
font-size
:
20px
;
color
:
#d7d7d7
;
}
.el-dialog__body
,
.el-dialog__footer
{
background-color
:
$item-background-color
;
}
.el-input__inner
{
color
:
#d7d7d7
;
background-color
:
$item-background-color
;
}
.el-form-item__content
{
text-align
:
right
;
}
.el-pagination__total
{
color
:
#d7d7d7
;
}
}
}
</
style
>
\ No newline at end of file
src/main.ts
View file @
4c1b5376
...
@@ -3,7 +3,7 @@ import App from "./App.vue";
...
@@ -3,7 +3,7 @@ import App from "./App.vue";
import
router
from
"
./router
"
;
import
router
from
"
./router
"
;
import
store
from
"
./store
"
;
import
store
from
"
./store
"
;
import
"
@/utils/rem
"
;
import
"
@/utils/rem
"
;
import
{
Message
,
Table
,
TableColumn
,
Button
,
Dialog
,
Form
,
FormItem
,
Input
,
InputNumber
,
Pagination
,
Loading
,
DatePicker
,
Empty
,
Tooltip
}
from
'
element-ui
'
;
import
{
Message
,
Table
,
TableColumn
,
Button
,
Dialog
,
Form
,
FormItem
,
Input
,
InputNumber
,
Pagination
,
Loading
,
DatePicker
,
Empty
,
Tooltip
,
Select
,
Option
,
OptionGroup
}
from
'
element-ui
'
;
Vue
.
config
.
productionTip
=
false
;
Vue
.
config
.
productionTip
=
false
;
...
@@ -13,13 +13,16 @@ Vue.use(Button)
...
@@ -13,13 +13,16 @@ Vue.use(Button)
Vue
.
use
(
Dialog
)
Vue
.
use
(
Dialog
)
Vue
.
use
(
Form
)
Vue
.
use
(
Form
)
Vue
.
use
(
FormItem
)
Vue
.
use
(
FormItem
)
Vue
.
use
(
Input
)
;
Vue
.
use
(
Input
)
Vue
.
use
(
InputNumber
)
;
Vue
.
use
(
InputNumber
)
Vue
.
use
(
Pagination
)
;
Vue
.
use
(
Pagination
)
Vue
.
use
(
DatePicker
)
Vue
.
use
(
DatePicker
)
Vue
.
use
(
Loading
)
;
Vue
.
use
(
Loading
)
Vue
.
use
(
Empty
)
Vue
.
use
(
Empty
)
Vue
.
use
(
Tooltip
)
Vue
.
use
(
Tooltip
)
Vue
.
use
(
Select
)
Vue
.
use
(
Option
)
Vue
.
use
(
OptionGroup
)
Vue
.
prototype
.
$loading
=
Loading
.
service
;
Vue
.
prototype
.
$loading
=
Loading
.
service
;
Vue
.
prototype
.
$message
=
Message
;
Vue
.
prototype
.
$message
=
Message
;
...
...
src/service/CameraService.ts
View file @
4c1b5376
...
@@ -80,3 +80,17 @@ export function convertLabelInfo(data: TrackData[]) {
...
@@ -80,3 +80,17 @@ export function convertLabelInfo(data: TrackData[]) {
console
.
log
(
`标识文件大小:
${
data
.
length
}
行,处理耗时:
${
new
Date
().
getTime
()
-
now
}
毫秒`
)
console
.
log
(
`标识文件大小:
${
data
.
length
}
行,处理耗时:
${
new
Date
().
getTime
()
-
now
}
毫秒`
)
return
[
dogIds
,
trackData
]
return
[
dogIds
,
trackData
]
}
}
export
async
function
addTrackData
(
dog
,
player
)
{
try
{
const
track
=
await
getLabelInfo
(
dog
.
labelFileName
);
const
[
dogIds
,
trackData
]
=
convertLabelInfo
(
track
);
player
.
onTrackDataChange
(
dogIds
,
trackData
,
dog
.
id
);
}
catch
(
err
)
{
this
.
$message
.
error
(
"
下载标识文件失败
"
);
console
.
log
(
`%c-下载标识文件失败:
${
err
}
`
,
"
color: red; background: yellow;
"
);
}
}
\ No newline at end of file
src/views/aiSearch/index.vue
View file @
4c1b5376
...
@@ -7,47 +7,70 @@
...
@@ -7,47 +7,70 @@
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-label"
>
时间起:
</div>
<div
class=
"col-label"
>
时间起:
</div>
<div>
<div>
<el-
input
v-model=
"queryData.beginDate"
></el-input
>
<el-
date-picker
v-model=
"queryData.beginTime"
type=
"date"
placeholder=
"时间起"
></el-date-picker
>
</div>
</div>
</div>
</div>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-label"
>
时间止:
</div>
<div
class=
"col-label"
>
时间止:
</div>
<div>
<div>
<el-
input
v-model=
"queryData.endDate"
></el-input
>
<el-
date-picker
v-model=
"queryData.endTime"
type=
"date"
placeholder=
"时间止"
></el-date-picker
>
</div>
</div>
</div>
</div>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-label"
>
犬只品种:
</div>
<div
class=
"col-label"
>
犬只品种:
</div>
<div>
<div>
<el-input
v-model=
"queryData.
endDate
"
></el-input>
<el-input
v-model=
"queryData.
dogBreeds
"
></el-input>
</div>
</div>
</div>
</div>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-label"
>
犬只毛色:
</div>
<div
class=
"col-label"
>
犬只毛色:
</div>
<div>
<div>
<el-input
v-model=
"queryData.
endDate
"
></el-input>
<el-input
v-model=
"queryData.
dogColor
"
></el-input>
</div>
</div>
</div>
</div>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-label"
>
犬只体型:
</div>
<div
class=
"col-label"
>
犬只体型:
</div>
<div>
<div>
<el-input
v-model=
"queryData.endDate"
></el-input>
<el-select
v-model=
"queryData.dogSize"
clearable
placeholder=
"请选择"
>
<el-option
v-for=
"item in dogSizeList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</div>
</div>
</div>
</div>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-label"
>
是否牵狗绳:
</div>
<div
class=
"col-label"
>
是否牵狗绳:
</div>
<div>
<div>
<el-input
v-model=
"queryData.endDate"
></el-input>
<el-select
v-model=
"queryData.withRope"
clearable
placeholder=
"请选择"
>
<el-option
v-for=
"item in [
{label:'是',value:true},{label:'否',value:false}]"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
</div>
</div>
</div>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-label"
>
摄像头:
</div>
<div
class=
"col-label"
>
摄像头:
</div>
<div>
<div>
<el-input
v-model=
"queryData.endDate"
></el-input>
<el-select
v-model=
"queryData.cameraList"
filterable
multiple
placeholder=
"请选择"
>
<el-option-group
v-for=
"group in cameraGroup"
:key=
"group.label"
:label=
"group.label"
>
<el-option
v-for=
"item in group.options"
:key=
"item.cameraId"
:label=
"item.cameraName"
:value=
"item.cameraId"
></el-option>
</el-option-group>
</el-select>
</div>
</div>
</div>
</div>
<div
class=
"btn-container"
>
<div
class=
"btn-container"
>
<el-button
class=
"btn"
type=
"primary
"
>
查询
</el-button>
<el-button
@
click=
"handleQuery"
class=
"btn"
type=
"primary"
:disabled=
"disbaled
"
>
查询
</el-button>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -66,15 +89,17 @@
...
@@ -66,15 +89,17 @@
<img
:src=
"scope.row.dogImageFileName"
alt
/>
<img
:src=
"scope.row.dogImageFileName"
alt
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"
name"
label=
"摄像头名称"
width=
"14
0"
></el-table-column>
<el-table-column
prop=
"
cameraName"
label=
"摄像头名称"
width=
"30
0"
></el-table-column>
<el-table-column
prop=
"startTimeInDay"
label=
"源视频起始时间"
width=
"180"
></el-table-column>
<el-table-column
prop=
"startTimeInDay"
label=
"源视频起始时间"
width=
"180"
></el-table-column>
<el-table-column
prop=
"videoLen"
label=
"识别时长"
:formatter=
"formatterVideoLen"
width=
"120"
></el-table-column>
<el-table-column
prop=
"videoLen"
label=
"识别时长"
:formatter=
"formatterVideoLen"
width=
"120"
></el-table-column>
<el-table-column
prop=
"dogBreeds"
label=
"品种"
width=
"120"
></el-table-column>
<el-table-column
prop=
"dogBreeds"
label=
"品种"
width=
"120"
></el-table-column>
<el-table-column
label=
"体型"
width=
"120"
></el-table-column>
<el-table-column
prop=
"dogSize"
label=
"体型"
width=
"120"
></el-table-column>
<el-table-column
prop=
"dogColor"
label=
"毛色"
width=
"120"
></el-table-column>
<el-table-column
prop=
"dogColor"
label=
"毛色"
width=
"120"
></el-table-column>
<el-table-column
prop=
"withRopeRatio"
:formatter=
"isRope"
label=
"是否牵狗绳"
width=
"120"
></el-table-column>
<el-table-column
prop=
"withRopeRatio"
:formatter=
"isRope"
label=
"是否牵狗绳"
width=
"120"
></el-table-column>
<el-table-column
label=
"操作"
>
<el-table-column
label=
"操作"
>
<el-button
type=
"text"
@
click=
"handleEdit(item)"
>
播放
</el-button>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
@
click=
"handleEdit(scope.row)"
>
播放
</el-button>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
</div>
</div>
...
@@ -88,36 +113,122 @@
...
@@ -88,36 +113,122 @@
></el-pagination>
></el-pagination>
</div>
</div>
</div>
</div>
<MyDialog
ref=
"myDialog"
>
<div>
<div
class=
"dialog-content"
>
<Icon
name=
"jinggao"
iconClass
/>
<span>
开始日期不能大于结束日期
</span>
</div>
</div>
</MyDialog>
<div
class=
"player-container"
v-show=
"showVideo"
>
<div
class=
"video-box"
>
<MyVideo
ref=
"my-video"
:showCloseButton=
"true"
@
closeVideo=
"handleCloseVideo"
/>
</div>
</div>
</div>
</div>
</template>
</template>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
>
import
BaseVue
from
"
@/types/baseVue
"
;
import
BaseVue
from
"
@/types/baseVue
"
;
import
{
Component
}
from
"
vue-property-decorator
"
;
import
{
Component
,
Watch
}
from
"
vue-property-decorator
"
;
import
{
pageDogInfo
}
from
"
@/service/CameraService
"
;
import
{
pageDogInfo
,
getCameraDogFormate
,
addTrackData
,
}
from
"
@/service/CameraService
"
;
import
{
convertMilliSecondToTime
,
isRope
}
from
"
@/utils/timeHelper
"
;
import
{
convertMilliSecondToTime
,
isRope
}
from
"
@/utils/timeHelper
"
;
import
MyDialog
from
"
@/components/myDialog/index.vue
"
;
import
Icon
from
"
@/components/Icon/index.vue
"
;
import
MyVideo
from
"
@/components/MyVideo/index.vue
"
;
@
Component
({})
@
Component
({
components
:
{
MyDialog
,
Icon
,
MyVideo
}
})
export
default
class
AiSearch
extends
BaseVue
{
export
default
class
AiSearch
extends
BaseVue
{
queryData
=
{
queryData
=
{
beginTime
:
""
,
endTime
:
""
,
cameraList
:
[],
dogBreeds
:
""
,
dogColor
:
""
,
dogSize
:
""
,
withRope
:
""
,
current
:
1
,
current
:
1
,
beginDate
:
""
,
endDate
:
""
,
size
:
10
,
size
:
10
,
};
};
dogs
=
[];
dogs
=
[];
total
=
0
;
total
=
0
;
dogSizeList
=
[
{
label
:
"
大型犬
"
,
value
:
"
大型犬
"
},
{
label
:
"
中型犬
"
,
value
:
"
中型犬
"
},
{
label
:
"
小型犬
"
,
value
:
"
小型犬
"
},
];
myDialog
:
any
;
cameraGroup
:
any
[]
=
[];
disbaled
=
true
;
showVideo
=
false
;
myVideo
:
any
;
@
Watch
(
"
queryData
"
,
{
deep
:
true
})
queryDataChange
(
newVal
:
any
)
{
const
keys
=
Object
.
keys
(
newVal
);
let
flag
=
true
;
for
(
let
i
=
0
;
i
<
keys
.
length
;
i
++
)
{
const
key
=
keys
[
i
];
const
val
=
newVal
[
key
];
const
typeStr
=
typeof
val
;
console
.
log
(
"
aaa
"
,
key
,
val
,
typeStr
);
if
(
key
===
"
current
"
||
key
===
"
size
"
||
(
key
===
"
cameraList
"
&&
val
.
length
===
0
)
)
{
continue
;
}
if
(
val
)
{
flag
=
false
;
break
;
}
}
this
.
disbaled
=
flag
;
}
async
created
()
{
async
created
()
{
this
.
query
();
const
data
=
await
getCameraDogFormate
({});
if
(
data
)
{
Object
.
keys
(
data
).
forEach
((
key
)
=>
{
this
.
cameraGroup
.
push
({
label
:
key
,
options
:
[...
data
[
key
]]
});
});
}
}
mounted
()
{
this
.
$nextTick
(()
=>
{
this
.
myDialog
=
this
.
$refs
[
"
myDialog
"
];
this
.
myVideo
=
this
.
$refs
[
"
my-video
"
];
});
}
async
query
()
{
const
rp
=
await
pageDogInfo
({
const
rp
=
await
pageDogInfo
({
...
this
.
queryData
,
...
this
.
queryData
,
});
});
this
.
dogs
=
rp
.
data
.
records
;
this
.
dogs
=
rp
.
data
.
records
;
console
.
log
(
"
dogs
"
,
this
.
dogs
);
this
.
total
=
rp
.
data
.
total
;
this
.
total
=
rp
.
data
.
total
;
}
}
handleCurrentChange
()
{
handleQuery
()
{
console
.
log
(
"
handleCurrentChange
"
);
console
.
log
(
"
query
"
,
this
.
queryData
);
if
(
this
.
queryData
.
beginTime
&&
this
.
queryData
.
endTime
)
{
if
(
this
.
queryData
.
beginTime
>
this
.
queryData
.
endTime
)
{
this
.
myDialog
.
show
();
return
;
}
}
this
.
queryData
.
current
=
1
;
this
.
query
();
}
handleCurrentChange
(
val
)
{
this
.
queryData
.
current
=
val
;
this
.
query
();
}
}
getTableRowClass
({
rowIndex
})
{
getTableRowClass
({
rowIndex
})
{
return
rowIndex
%
2
===
0
?
"
even-row
"
:
"
odd-row
"
;
return
rowIndex
%
2
===
0
?
"
even-row
"
:
"
odd-row
"
;
...
@@ -128,6 +239,16 @@ export default class AiSearch extends BaseVue {
...
@@ -128,6 +239,16 @@ export default class AiSearch extends BaseVue {
isRope
(
row
)
{
isRope
(
row
)
{
return
isRope
(
row
.
withRopeRatio
);
return
isRope
(
row
.
withRopeRatio
);
}
}
async
handleEdit
(
data
)
{
this
.
myVideo
.
onSrcChange
(
data
.
fileName
);
//添加标识文件
await
addTrackData
(
data
,
this
.
myVideo
);
this
.
showVideo
=
true
;
}
handleCloseVideo
()
{
this
.
showVideo
=
false
;
this
.
myVideo
.
player
.
pause
();
}
}
}
</
script
>
</
script
>
...
@@ -136,16 +257,44 @@ export default class AiSearch extends BaseVue {
...
@@ -136,16 +257,44 @@ export default class AiSearch extends BaseVue {
display
:
grid
;
display
:
grid
;
grid-template-columns
:
335px
minmax
(
500px
,
1fr
);
grid-template-columns
:
335px
minmax
(
500px
,
1fr
);
color
:
#fff
;
color
:
#fff
;
gap
:
10
px
;
gap
:
5
px
;
.row
{
.row
{
.col-label
{
.col-label
{
padding
:
5px
0
;
padding
:
15px
0
8px
0
;
}
}
.player-container
{
position
:
fixed
;
top
:
0
;
right
:
0
;
bottom
:
0
;
left
:
0
;
overflow
:
auto
;
margin
:
0
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
z-index
:
100
;
background
:
rgba
(
$color
:
#000000
,
$alpha
:
0
.5
);
.video-box
{
width
:
1064px
;
height
:
598px
;
}
}
.dialog-content
{
font-size
:
16px
;
font-weight
:
700
;
.icon-jinggao
{
font-size
:
20px
;
padding-right
:
5px
;
color
:
red
;
}
}
}
}
.search-container
{
.search-container
{
border
:
$border-color
;
border
:
$border-color
;
margin-top
:
10
px
;
margin-top
:
5
px
;
background-color
:
$item-background-color
;
background-color
:
$item-background-color
;
padding-bottom
:
20px
;
padding-bottom
:
20px
;
.search-title
{
.search-title
{
...
@@ -159,7 +308,7 @@ export default class AiSearch extends BaseVue {
...
@@ -159,7 +308,7 @@ export default class AiSearch extends BaseVue {
p
{
p
{
font-size
:
13px
;
font-size
:
13px
;
color
:
$theme-blue
;
color
:
$theme-blue
;
padding
:
15px
0
;
padding
:
15px
0
0
0
;
}
}
}
}
.btn-container
{
.btn-container
{
...
@@ -170,8 +319,9 @@ export default class AiSearch extends BaseVue {
...
@@ -170,8 +319,9 @@ export default class AiSearch extends BaseVue {
}
}
}
}
.data-container
{
.data-container
{
margin-top
:
10
px
;
margin-top
:
5
px
;
background-color
:
$item-background-color
;
background-color
:
$item-background-color
;
border
:
$border-color
;
.result-title
{
.result-title
{
font-size
:
15px
;
font-size
:
15px
;
padding
:
5px
5px
5px
30px
;
padding
:
5px
5px
5px
30px
;
...
@@ -225,6 +375,14 @@ export default class AiSearch extends BaseVue {
...
@@ -225,6 +375,14 @@ export default class AiSearch extends BaseVue {
background-color
:
$theme-blue
;
background-color
:
$theme-blue
;
border-color
:
$theme-blue
;
border-color
:
$theme-blue
;
}
}
.el-button--primary.is-disabled
,
.el-button--primary.is-disabled
:active
,
.el-button--primary.is-disabled
:focus
,
.el-button--primary.is-disabled
:hover
{
color
:
#fff
;
background-color
:
#a0cfff
;
border-color
:
#a0cfff
;
}
.el-table
.cell
,
.el-table
.cell
,
.el-table--border
.el-table__cell
:first-child
.cell
{
.el-table--border
.el-table__cell
:first-child
.cell
{
display
:
flex
;
display
:
flex
;
...
@@ -271,5 +429,12 @@ export default class AiSearch extends BaseVue {
...
@@ -271,5 +429,12 @@ export default class AiSearch extends BaseVue {
border
:
$border-color
;
border
:
$border-color
;
}
}
}
}
.el-date-editor.el-input
,
.el-date-editor.el-input__inner
{
width
:
100%
;
}
.el-select
{
width
:
100%
;
}
}
}
</
style
>
</
style
>
src/views/dashboard/index.vue
View file @
4c1b5376
...
@@ -23,7 +23,7 @@
...
@@ -23,7 +23,7 @@
</div>
</div>
</div>
</div>
<div
id=
"player-container"
class=
"player"
ref=
"player-container"
>
<div
id=
"player-container"
class=
"player"
ref=
"player-container"
>
<MyVideo
ref=
"my-video"
v-if=
"width > 0 "
:
src=
"videoUrl"
:
width=
"width"
/>
<MyVideo
ref=
"my-video"
v-if=
"width > 0 "
:width=
"width"
/>
</div>
</div>
<div
class=
"video-list"
>
<div
class=
"video-list"
>
<div
class=
"title"
>
犬只记录
</div>
<div
class=
"title"
>
犬只记录
</div>
...
@@ -69,6 +69,7 @@ import {
...
@@ -69,6 +69,7 @@ import {
pageDogInfo
,
pageDogInfo
,
getLabelInfo
,
getLabelInfo
,
convertLabelInfo
,
convertLabelInfo
,
addTrackData
,
}
from
"
@/service/CameraService
"
;
}
from
"
@/service/CameraService
"
;
// import dogTrackData from "@/mock/trackData";
// import dogTrackData from "@/mock/trackData";
...
@@ -78,7 +79,6 @@ export default class Dashboard extends BaseVue {
...
@@ -78,7 +79,6 @@ export default class Dashboard extends BaseVue {
dogData
:
DogData
[]
=
[];
dogData
:
DogData
[]
=
[];
width
=
0
;
width
=
0
;
height
=
0
;
height
=
0
;
videoUrl
=
""
;
queryCameryParam
=
{
queryCameryParam
=
{
beginTime
:
""
,
beginTime
:
""
,
cameraName
:
""
,
cameraName
:
""
,
...
@@ -123,27 +123,15 @@ export default class Dashboard extends BaseVue {
...
@@ -123,27 +123,15 @@ export default class Dashboard extends BaseVue {
if
(
!
dog
)
return
;
if
(
!
dog
)
return
;
console
.
log
(
"
dogInfo
"
,
dog
);
console
.
log
(
"
dogInfo
"
,
dog
);
this
.
currentDogId
=
dog
.
id
;
this
.
currentDogId
=
dog
.
id
;
this
.
videoUrl
=
dog
.
fileName
;
//dog.videoUrl;
const
this_
=
this
;
const
this_
=
this
;
//用异步是为了防止my-vidoe控件还没有挂载好
//用异步是为了防止my-vidoe控件还没有挂载好
setTimeout
(
async
()
=>
{
setTimeout
(
async
()
=>
{
//play video
//play video
const
myVideo
=
this_
.
$refs
[
"
my-video
"
];
const
myVideo
=
this_
.
$refs
[
"
my-video
"
];
//@ts-ignore
//@ts-ignore
myVideo
.
onSrcChange
(
this_
.
videoUrl
);
myVideo
.
onSrcChange
(
dog
.
fileName
);
try
{
//添加标识文件
const
track
=
await
getLabelInfo
(
dog
.
labelFileName
);
await
addTrackData
(
dog
,
myVideo
);
const
[
dogIds
,
trackData
]
=
convertLabelInfo
(
track
);
// const [dogIds, trackData] = convertLabelInfo(dogTrackData);
//@ts-ignore
myVideo
.
onTrackDataChange
(
dogIds
,
trackData
,
dog
.
id
);
}
catch
(
err
)
{
this
.
$message
.
error
(
"
下载标识文件失败
"
);
console
.
log
(
`%c-下载标识文件失败:
${
err
}
`
,
"
color: red; background: yellow;
"
);
}
},
100
);
},
100
);
}
}
...
...
src/views/sysSetting/index.vue
View file @
4c1b5376
...
@@ -95,8 +95,7 @@
...
@@ -95,8 +95,7 @@
</el-form-item>
</el-form-item>
</el-form>
</el-form>
</el-dialog>
</el-dialog>
<div
class=
"delDialog"
>
<MyDialog
ref=
"delDialog"
@
onConfirm=
"handleConfirmDel"
>
<el-dialog
title=
"提示信息"
:visible.sync=
"dialogDelVisible"
width=
"450px"
>
<div>
<div>
<div
class=
"confirm-del"
>
<div
class=
"confirm-del"
>
<Icon
name=
"jinggao"
iconClass
/>
<Icon
name=
"jinggao"
iconClass
/>
...
@@ -104,12 +103,7 @@
...
@@ -104,12 +103,7 @@
</div>
</div>
<div>
确认后此接口将被彻底删除。
</div>
<div>
确认后此接口将被彻底删除。
</div>
</div>
</div>
<span
slot=
"footer"
class=
"dialog-footer"
>
</MyDialog>
<el-button
class=
"btn"
type=
"info"
@
click=
"dialogDelVisible = false"
>
取 消
</el-button>
<el-button
class=
"btn"
type=
"primary"
@
click=
"handleConfirmDel"
>
确 定
</el-button>
</span>
</el-dialog>
</div>
</div>
</div>
</
template
>
</
template
>
...
@@ -125,17 +119,17 @@ import BaseVue from "@/types/baseVue";
...
@@ -125,17 +119,17 @@ import BaseVue from "@/types/baseVue";
import
{
CameraData
}
from
"
./data
"
;
import
{
CameraData
}
from
"
./data
"
;
import
Icon
from
"
@/components/Icon/index.vue
"
;
import
Icon
from
"
@/components/Icon/index.vue
"
;
import
Search
from
"
./components/search.vue
"
;
import
Search
from
"
./components/search.vue
"
;
import
MyDialog
from
"
@/components/myDialog/index.vue
"
;
@
Component
({
components
:
{
Icon
,
Search
}
})
@
Component
({
components
:
{
Icon
,
Search
,
MyDialog
}
})
export
default
class
SysSetting
extends
BaseVue
{
export
default
class
SysSetting
extends
BaseVue
{
cameraData
=
[];
cameraData
=
[];
dialogVisible
=
false
;
dialogVisible
=
false
;
isDisabled
=
false
;
isDisabled
=
false
;
dialogDelVisible
=
false
;
currentId
=
""
;
currentId
=
""
;
total
=
0
;
total
=
0
;
form
:
CameraData
=
{};
form
:
CameraData
=
{};
aaaa
=
""
;
delDialog
:
any
;
formRules
=
{
formRules
=
{
cameraName
:
[
cameraName
:
[
...
@@ -194,6 +188,12 @@ export default class SysSetting extends BaseVue {
...
@@ -194,6 +188,12 @@ export default class SysSetting extends BaseVue {
this
.
queryCamera
();
this
.
queryCamera
();
}
}
mounted
()
{
this
.
$nextTick
(()
=>
{
this
.
delDialog
=
this
.
$refs
[
"
delDialog
"
];
});
}
async
submitForm
(
formName
)
{
async
submitForm
(
formName
)
{
this
.
isDisabled
=
true
;
this
.
isDisabled
=
true
;
//@ts-ignore
//@ts-ignore
...
@@ -252,7 +252,7 @@ export default class SysSetting extends BaseVue {
...
@@ -252,7 +252,7 @@ export default class SysSetting extends BaseVue {
async
handleDel
(
id
:
string
):
Promise
<
void
>
{
async
handleDel
(
id
:
string
):
Promise
<
void
>
{
this
.
currentId
=
id
;
this
.
currentId
=
id
;
this
.
d
ialogDelVisible
=
true
;
this
.
d
elDialog
.
show
()
;
}
}
handleClean
():
void
{
handleClean
():
void
{
this
.
queryData
.
groupName
=
""
;
this
.
queryData
.
groupName
=
""
;
...
@@ -266,7 +266,7 @@ export default class SysSetting extends BaseVue {
...
@@ -266,7 +266,7 @@ export default class SysSetting extends BaseVue {
this
.
$message
(
"
删除数据失败
"
);
this
.
$message
(
"
删除数据失败
"
);
return
;
return
;
}
}
this
.
d
ialogDelVisible
=
false
;
this
.
d
elDialog
.
hide
()
;
this
.
queryCamera
();
this
.
queryCamera
();
}
}
...
@@ -305,7 +305,7 @@ export default class SysSetting extends BaseVue {
...
@@ -305,7 +305,7 @@ export default class SysSetting extends BaseVue {
margin
:
0
auto
;
margin
:
0
auto
;
max-width
:
1905px
;
max-width
:
1905px
;
min-width
:
1650px
;
min-width
:
1650px
;
padding
:
10
px
;
padding
:
5
px
;
.add
{
.add
{
height
:
50px
;
height
:
50px
;
...
@@ -355,8 +355,15 @@ export default class SysSetting extends BaseVue {
...
@@ -355,8 +355,15 @@ export default class SysSetting extends BaseVue {
}
}
}
}
::v-deep
{
::v-deep
{
.el-dialog__header
{
.el-input__inner
{
background-color
:
#333e5d
;
color
:
#d7d7d7
;
background-color
:
$item-background-color
;
}
.el-form-item__content
{
text-align
:
right
;
}
.el-pagination__total
{
color
:
#d7d7d7
;
}
}
.el-dialog__title
{
.el-dialog__title
{
color
:
#d7d7d7
;
color
:
#d7d7d7
;
...
@@ -369,18 +376,8 @@ export default class SysSetting extends BaseVue {
...
@@ -369,18 +376,8 @@ export default class SysSetting extends BaseVue {
.el-dialog__footer
{
.el-dialog__footer
{
background-color
:
$item-background-color
;
background-color
:
$item-background-color
;
}
}
.el-input__inner
{
.el-dialog__header
{
color
:
#d7d7d7
;
background-color
:
#333e5d
;
background-color
:
$item-background-color
;
}
.el-dialog__body
{
padding-right
:
70px
;
}
.el-form-item__content
{
text-align
:
right
;
}
.el-pagination__total
{
color
:
#d7d7d7
;
}
}
}
}
.confirm-del
{
.confirm-del
{
...
@@ -392,12 +389,5 @@ export default class SysSetting extends BaseVue {
...
@@ -392,12 +389,5 @@ export default class SysSetting extends BaseVue {
color
:
red
;
color
:
red
;
}
}
}
}
.delDialog
{
::v-deep
{
.el-dialog__body
{
padding
:
20px
70px
;
}
}
}
}
}
</
style
>
</
style
>
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