Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation
This project
Loading...
Sign in
罗鑫霖
/
vion-tools
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 6578b62b
authored
Jul 23, 2025
by
陈岩
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
feat: 调整抓拍聚类年龄选项
1 parent
a32b352b
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
634 additions
and
492 deletions
src/views/DataRepair/DataRepairApi.js
src/views/SnapshotCluster/ClusterResult/ClusterResult.vue
src/views/SnapshotCluster/ClusterResult/components/AddEditSnapshotClusterDialog.vue
src/views/SnapshotCluster/SnapshotRecord/SnapshotRecord.vue
src/views/SnapshotCluster/SnapshotRecord/SnapshotRecordApi.js
src/views/SystemLog/index.vue
src/views/DataRepair/DataRepairApi.js
View file @
6578b62
...
...
@@ -47,11 +47,12 @@ class DataRepairApi {
{
method
:
'POST'
,
url
:
`/simulation/reid`
,
timeout
:
5
*
60
*
1000
,
data
}
)
}
}
const
dataRepairApi
=
new
DataRepairApi
()
...
...
src/views/SnapshotCluster/ClusterResult/ClusterResult.vue
View file @
6578b62
...
...
@@ -117,11 +117,11 @@
mode=
"multiple"
:maxTagCount=
"1"
style=
"width: 240px"
>
<a-select-option
v-for=
"item in childAdultAgeOptions"
:key=
"item.value
"
:value=
"item.value
"
>
{{
item
.
label
}}
</a-select-option>
<a-select-option
v-for=
"item in childAdultAgeOptions"
:key=
"item.ageStr
"
:value=
"item.ageStr
"
>
{{
item
.
nameCn
}}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item
label=
"性别:"
style=
"padding: 5px 0"
>
...
...
@@ -214,7 +214,7 @@
>
<el-button
type=
"text"
:disabled=
"!isMultipleOperation"
>
删除
</el-button>
</a-popconfirm>
</a-form-item>
</a-form>
...
...
@@ -279,7 +279,7 @@
<div
class=
"direction"
:class=
"'direction'+item.direction"
>
方向:{{ formatDirection(item.direction) }}
</div>
<div>
地点:{{ item.gate_name }}
</div>
<div
style=
"width:100%;overflow:hidden;text-overflow:ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;"
>
商品类型:{{ formatProduct(item.productId)}}
</div>
<div
style=
"width:100%;overflow:hidden;text-overflow:ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;"
>
机位号:{{ formatPosition(item.channelProductId)}}
</div>
<div>
持续时间:{{ item.duration!==null
&&
item.duration!==undefined
&&
item.duration>=0?item.duration+'秒':'--' }}
</div>
</div>
...
...
@@ -336,6 +336,7 @@ import PersonGroupDialog from "./PersonGroupDialog.vue";
import
PersonGroupMover
from
"./PersonGroupMover.vue"
;
import
AddPersonnelPool
from
"./AddPersonnelPool.vue"
;
import
AddEditSnapshotClusterDialog
from
'./components/AddEditSnapshotClusterDialog.vue'
import
snapshotRecordApi
from
"@/views/SnapshotCluster/SnapshotRecord/SnapshotRecordApi"
;
export
default
{
components
:{
...
...
@@ -490,6 +491,7 @@ export default {
const
onAccountChange
=
function
()
{
getProductList
(
1
)
getPlazaList
(
1
)
getChildAdultAgeOptions
()
}
const
onPlazaChange
=
function
()
{
...
...
@@ -658,8 +660,8 @@ export default {
}
})
}
const
getAccountList
=
function
()
{
queryForm
.
account_id
=
''
...
...
@@ -685,6 +687,7 @@ export default {
}
getPlazaList
()
getProductList
()
getChildAdultAgeOptions
()
}
}
}
...
...
@@ -727,7 +730,7 @@ export default {
maxPic
:
rawData
.
maxPic
,
page
:
pageNum
.
value
-
1
,
pageSize
:
pageSize
.
value
,
age
:
rawData
.
childAdult
?
rawData
.
childAdult
.
toString
():
''
,
age
Dis
:
rawData
.
childAdult
?
rawData
.
childAdult
.
toString
():
''
,
gender
:
rawData
.
gender
?
rawData
.
gender
.
toString
():
''
,
receptionType
:
rawData
.
receptionType
?
rawData
.
receptionType
:
0
,
sortType
:
rawData
.
sortType
?
rawData
.
sortType
:
0
,
...
...
@@ -796,14 +799,27 @@ export default {
return
(
personTypeList
.
value
.
filter
(
v
=>
v
.
value
==
val
)[
0
]
||
{
label
:
'--'
}).
label
}
const
childAdultAgeOptions
=
ref
([
{
value
:
0
,
label
:
'婴儿'
},
{
value
:
1
,
label
:
'儿童'
},
{
value
:
2
,
label
:
'少年'
},
{
value
:
3
,
label
:
'青年'
},
{
value
:
4
,
label
:
'中年'
},
{
value
:
5
,
label
:
'老年'
},
{
value
:
-
1
,
label
:
'未知'
},
//
{ value: 0, label: '婴儿' },
//
{ value: 1, label: '儿童' },
//
{ value: 2, label: '少年' },
//
{ value: 3, label: '青年' },
//
{ value: 4, label: '中年' },
//
{ value: 5, label: '老年' },
//
{ value: -1, label: '未知' },
])
const
getChildAdultAgeOptions
=
async
()
=>
{
try
{
queryForm
.
childAdult
=
[]
const
res
=
await
snapshotRecordApi
.
getAgeDistributionConfig
(
queryForm
.
account_id
)
childAdultAgeOptions
.
value
=
res
||
[]
}
catch
(
e
)
{
console
.
log
(
e
)
}
}
const
childAdultOptions
=
ref
([
{
value
:
0
,
label
:
'儿童'
},
{
value
:
1
,
label
:
'成人'
},
...
...
@@ -899,7 +915,7 @@ export default {
}
)
}
}
const
reqPersonType
=
(
val
)
=>
{
personTypeList
.
value
=
[]
...
...
@@ -956,7 +972,7 @@ export default {
return
}
}
// 上传数据
const
uploadGroupDataEditorRef
=
ref
();
const
uploadGroupData
=
function
(
data
)
{
...
...
@@ -1072,7 +1088,7 @@ export default {
})
return
}
const
strIdList
=
selectedPersonList
.
value
.
map
(
item
=>
item
.
unid
)
const
rawData
=
toRaw
(
queryForm
)
const
params
=
{
...
...
src/views/SnapshotCluster/ClusterResult/components/AddEditSnapshotClusterDialog.vue
View file @
6578b62
...
...
@@ -59,13 +59,23 @@
</a-col>
<a-col
:span=
"12"
>
<a-form-item
label=
"年龄"
name=
"age"
>
<a-select
v-model:value=
"submitForm.age"
placeholder=
"请选择"
optionFilterProp=
"label"
show-search
:options=
"optionsMap['ageList']"
/>
<a-select
v-model:value=
"submitForm.age"
show-search
placeholder=
"请选择"
style=
"width: 240px"
>
<a-select-option
v-for=
"item in optionsMap['ageList']"
:key=
"item.ageStr"
:value=
"item.minAge"
>
{{
item
.
nameCn
}}
</a-select-option>
</a-select>
<!--
<a-select-->
<!-- v-model:value="submitForm.age"-->
<!-- optionFilterProp="label"-->
<!-- -->
<!-- :options=""-->
<!-- />-->
</a-form-item>
</a-col>
<a-col
:span=
"12"
>
...
...
@@ -159,6 +169,7 @@ const handleSubmitData = async () => {
const
initDialog
=
(
form
,
selectOptionsMap
)
=>
{
submitForm
.
value
=
cloneDeep
(
form
)
optionsMap
.
value
=
selectOptionsMap
console
.
log
(
optionsMap
,
'-=s=s=s==s'
)
visible
.
value
=
true
}
...
...
@@ -180,4 +191,4 @@ defineExpose({
.ant-select
,
.ant-picker
{
width
:
100%
;
}
</
style
>
\ No newline at end of file
</
style
>
src/views/SnapshotCluster/SnapshotRecord/SnapshotRecord.vue
View file @
6578b62
<
template
>
<a-form
:model=
"queryForm"
layout=
"inline"
:label-col=
"
{ style: { width: '70px' } }">
<a-form-item
label=
"集团:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.account_id"
style=
"width: 280px"
@
change=
"onAccountChange"
:options=
"accountList"
optionFilterProp=
"label"
show-search
>
</a-select>
</a-form-item>
<a-form-item
label=
"广场:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.plaza_id"
style=
"width: 280px"
@
change=
"onPlazaChange"
:options=
"plazaList"
optionFilterProp=
"label"
show-search
>
</a-select>
</a-form-item>
<a-form-item
label=
"出入类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.type"
style=
"width: 280px"
>
<a-select-option
:value=
"0"
>
全场
</a-select-option>
<a-select-option
:value=
"1"
>
广场出入口
</a-select-option>
<a-select-option
:value=
"2"
>
楼层出入口
</a-select-option>
<a-select-option
:value=
"3"
>
店铺出入口
</a-select-option>
<a-select-option
:value=
"4"
>
其他
</a-select-option>
</a-select>
</a-form-item>
<a-form-item
label=
"区域信息:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.zone_id"
style=
"width: 280px"
mode=
"multiple"
:maxTagCount=
"1"
@
change=
"onZoneChange"
:options=
"zoneList"
optionFilterProp=
"label"
show-search
>
</a-select>
</a-form-item>
<a-form-item
label=
"监控点:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.gate_id"
style=
"width: 280px"
mode=
"multiple"
:maxTagCount=
"1"
:options=
"gateList"
optionFilterProp=
"label"
show-search
>
</a-select>
</a-form-item>
<a-form-item
label=
"事件类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.direction"
mode=
"multiple"
:maxTagCount=
"1"
style=
"width: 280px"
>
<a-select-option
:value=
"1"
>
进
</a-select-option>
<a-select-option
:value=
"-1"
>
出
</a-select-option>
<a-select-option
:value=
"0"
>
横穿
</a-select-option>
<a-select-option
:value=
"2"
>
过店
</a-select-option>
<a-select-option
:value=
"4"
>
从左到右
</a-select-option>
<a-select-option
:value=
"5"
>
从右到左
</a-select-option>
<a-select-option
:value=
"7"
>
关注
</a-select-option>
<a-select-option
:value=
"8"
>
触达
</a-select-option>
</a-select>
</a-form-item>
<a-form-item
label=
"抓拍类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.picType"
style=
"width: 280px"
>
<a-select-option
:value=
"1"
>
半身照
</a-select-option>
<a-select-option
:value=
"2"
>
全身照
</a-select-option>
</a-select>
</a-form-item>
<a-form-item
label=
"商品类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.productId"
mode=
"multiple"
:options=
"productList"
optionFilterProp=
"label"
:maxTagCount=
"1"
style=
"width: 280px"
>
</a-select>
</a-form-item>
<a-form-item
label=
"机位号:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.positionId"
mode=
"multiple"
:options=
"positionList"
optionFilterProp=
"label"
:maxTagCount=
"1"
style=
"width: 280px"
>
</a-select>
</a-form-item>
<a-form-item
label=
"人员类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.personType"
mode=
"multiple"
:options=
"personTypeList"
optionFilterProp=
"label"
:maxTagCount=
"1"
style=
"width: 280px"
>
</a-select>
</a-form-item>
<!--
<a-form-item
label=
"年龄类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.childAdult"
mode=
"multiple"
:maxTagCount=
"1"
style=
"width: 280px"
>
<a-select-option
:value=
"1"
>
成人
</a-select-option>
<a-select-option
:value=
"0"
>
儿童
</a-select-option>
<a-select-option
:value=
"-1"
>
未知
</a-select-option>
</a-select>
</a-form-item>
-->
<a-form-item
label=
"年龄类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.childAdult"
mode=
"multiple"
:maxTagCount=
"1"
style=
"width: 240px"
>
<a-select-option
v-for=
"item in childAdultAgeOptions"
:key=
"item.value
"
:value=
"item.value
"
>
{{
item
.
label
}}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item
label=
"性别:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.gender"
mode=
"multiple"
:maxTagCount=
"1"
style=
"width: 240px"
>
<a-select-option
v-for=
"item in genderOptions"
:key=
"item.value"
:value=
"item.value"
>
{{
item
.
label
}}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item
label=
"选择日期:"
style=
"padding: 5px 0"
>
<a-date-picker
v-model:value=
"queryForm.date"
:format=
"'YYYY-MM-DD'"
:allowClear=
"false"
style=
"width: 280px"
/>
</a-form-item>
<a-form-item
label=
"选择时间:"
style=
"padding: 5px 0"
>
<a-time-picker
format=
"HH:mm:ss"
valueFormat=
"HH:mm:ss"
v-model:value=
"queryForm.startTime"
style=
"width: 140px"
/>
<a-time-picker
format=
"HH:mm:ss"
valueFormat=
"HH:mm:ss"
v-model:value=
"queryForm.endTime"
style=
"width: 140px"
/>
</a-form-item>
<a-form-item
style=
"padding: 5px 0"
>
<a-button
type=
"primary"
@
click=
"clickSearch"
:loading=
"isLoading"
>
查询
</a-button>
</a-form-item>
<a-form-item
style=
"padding: 5px 0"
>
<a-button
type=
"primary"
@
click=
"comparativeFun"
>
特征对比验证
</a-button>
</a-form-item>
<a-form-item
style=
"padding: 5px 0"
>
<a-button
type=
"primary"
@
click=
"singleComparativeFun"
>
单张特征对比
</a-button>
</a-form-item>
<a-form-item
style=
"padding: 5px 0"
>
<a-button
type=
"primary"
@
click=
"batchesResultFun"
>
同组客流
</a-button>
</a-form-item>
<a-form
:model=
"queryForm"
layout=
"inline"
:label-col=
"
{ style: { width: '70px' } }">
<a-form-item
label=
"集团:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.account_id"
style=
"width: 280px"
@
change=
"onAccountChange"
:options=
"accountList"
optionFilterProp=
"label"
show-search
>
</a-select>
</a-form-item>
<a-form-item
label=
"广场:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.plaza_id"
style=
"width: 280px"
@
change=
"onPlazaChange"
:options=
"plazaList"
optionFilterProp=
"label"
show-search
>
</a-select>
</a-form-item>
<a-form-item
label=
"出入类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.type"
style=
"width: 280px"
>
<a-select-option
:value=
"0"
>
全场
</a-select-option>
<a-select-option
:value=
"1"
>
广场出入口
</a-select-option>
<a-select-option
:value=
"2"
>
楼层出入口
</a-select-option>
<a-select-option
:value=
"3"
>
店铺出入口
</a-select-option>
<a-select-option
:value=
"4"
>
其他
</a-select-option>
</a-select>
</a-form-item>
<a-form-item
label=
"区域信息:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.zone_id"
style=
"width: 280px"
mode=
"multiple"
:maxTagCount=
"1"
@
change=
"onZoneChange"
:options=
"zoneList"
optionFilterProp=
"label"
show-search
>
</a-select>
</a-form-item>
<a-form-item
label=
"监控点:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.gate_id"
style=
"width: 280px"
mode=
"multiple"
:maxTagCount=
"1"
:options=
"gateList"
optionFilterProp=
"label"
show-search
>
</a-select>
</a-form-item>
<a-form-item
label=
"事件类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.direction"
mode=
"multiple"
:maxTagCount=
"1"
style=
"width: 280px"
>
<a-select-option
:value=
"1"
>
进
</a-select-option>
<a-select-option
:value=
"-1"
>
出
</a-select-option>
<a-select-option
:value=
"0"
>
横穿
</a-select-option>
<a-select-option
:value=
"2"
>
过店
</a-select-option>
<a-select-option
:value=
"4"
>
从左到右
</a-select-option>
<a-select-option
:value=
"5"
>
从右到左
</a-select-option>
<a-select-option
:value=
"7"
>
关注
</a-select-option>
<a-select-option
:value=
"8"
>
触达
</a-select-option>
</a-select>
</a-form-item>
<a-form-item
label=
"抓拍类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.picType"
style=
"width: 280px"
>
<a-select-option
:value=
"1"
>
半身照
</a-select-option>
<a-select-option
:value=
"2"
>
全身照
</a-select-option>
</a-select>
</a-form-item>
<a-form-item
label=
"商品类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.productId"
mode=
"multiple"
:options=
"productList"
optionFilterProp=
"label"
:maxTagCount=
"1"
style=
"width: 280px"
>
</a-select>
</a-form-item>
<a-form-item
label=
"机位号:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.positionId"
mode=
"multiple"
:options=
"positionList"
optionFilterProp=
"label"
:maxTagCount=
"1"
style=
"width: 280px"
>
</a-select>
</a-form-item>
<a-form-item
label=
"人员类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.personType"
mode=
"multiple"
:options=
"personTypeList"
optionFilterProp=
"label"
:maxTagCount=
"1"
style=
"width: 280px"
>
</a-select>
</a-form-item>
<!--
<a-form-item
label=
"年龄类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.childAdult"
mode=
"multiple"
:maxTagCount=
"1"
style=
"width: 280px"
>
<a-select-option
:value=
"1"
>
成人
</a-select-option>
<a-select-option
:value=
"0"
>
儿童
</a-select-option>
<a-select-option
:value=
"-1"
>
未知
</a-select-option>
</a-select>
</a-form-item>
-->
<a-form-item
label=
"年龄类型:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.childAdult"
mode=
"multiple"
:maxTagCount=
"1"
style=
"width: 240px"
>
<a-select-option
v-for=
"item in childAdultAgeOptions"
:key=
"item.ageStr
"
:value=
"item.ageStr
"
>
{{
item
.
nameCn
}}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item
label=
"性别:"
style=
"padding: 5px 0"
>
<a-select
v-model:value=
"queryForm.gender"
mode=
"multiple"
:maxTagCount=
"1"
style=
"width: 240px"
>
<a-select-option
v-for=
"item in genderOptions"
:key=
"item.value"
:value=
"item.value"
>
{{
item
.
label
}}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item
label=
"选择日期:"
style=
"padding: 5px 0"
>
<a-date-picker
v-model:value=
"queryForm.date"
:format=
"'YYYY-MM-DD'"
:allowClear=
"false"
style=
"width: 280px"
/>
</a-form-item>
<a-form-item
label=
"选择时间:"
style=
"padding: 5px 0"
>
<a-time-picker
format=
"HH:mm:ss"
valueFormat=
"HH:mm:ss"
v-model:value=
"queryForm.startTime"
style=
"width: 140px"
/>
<a-time-picker
format=
"HH:mm:ss"
valueFormat=
"HH:mm:ss"
v-model:value=
"queryForm.endTime"
style=
"width: 140px"
/>
</a-form-item>
<a-form-item
style=
"padding: 5px 0"
>
<a-button
type=
"primary"
@
click=
"clickSearch"
:loading=
"isLoading"
>
查询
</a-button>
</a-form-item>
<a-form-item
style=
"padding: 5px 0"
>
<a-button
type=
"primary"
@
click=
"comparativeFun"
>
特征对比验证
</a-button>
</a-form-item>
<a-form-item
style=
"padding: 5px 0"
>
<a-button
type=
"primary"
@
click=
"singleComparativeFun"
>
单张特征对比
</a-button>
</a-form-item>
<a-form-item
style=
"padding: 5px 0"
>
<a-button
type=
"primary"
@
click=
"batchesResultFun"
>
同组客流
</a-button>
</a-form-item>
<a-form-item
style=
"padding: 5px 0"
>
<a-button
type=
"primary"
:loading=
"allImagesLoading"
@
click=
"loadAllImages"
>
加载当页图片
</a-button>
</a-form-item>
<a-form-item
style=
"padding: 5px 0"
>
<a-button
type=
"primary"
@
click=
"confirmSearch"
>
刷新
</a-button>
</a-form-item>
</a-form>
</a-form>
<div
v-loading=
"isLoading"
>
<div
class=
"resultContent"
:style=
"
{'height':contentHeight+'px'}">
<el-row
v-for=
"row in pagedTableDataList"
>
<el-col
:span=
"3"
v-for=
"item in row"
>
<div
style=
"margin: 0 5px;cursor: pointer;"
@
click=
"handleClick(item)"
:class=
"currentItemId==item.id?'actived':''"
>
<div
style=
""
>
<div
v-loading=
"isLoading"
>
<div
class=
"resultContent"
:style=
"
{'height':contentHeight+'px'}">
<el-row
v-for=
"row in pagedTableDataList"
>
<el-col
:span=
"3"
v-for=
"item in row"
>
<div
style=
"margin: 0 5px;cursor: pointer;"
@
click=
"handleClick(item)"
:class=
"currentItemId==item.id?'actived':''"
>
<div
style=
""
>
<span
@
click=
"downloadTrajectoryFile(item.track_url)"
class=
"downBtn"
>
轨迹
</span>
<span
@
click=
"downloadFile(item.features_url)"
class=
"downBtn downBtn1"
>
<span
@
click=
"downloadFile(item.features_url)"
class=
"downBtn downBtn1"
>
特征
</span>
<a-popconfirm
title=
"删除后无法恢复,确认删除吗?"
ok-text=
"是"
cancel-text=
"否"
@
confirm=
"handleDeleteFileConfirm(item)"
>
<a-popconfirm
title=
"删除后无法恢复,确认删除吗?"
ok-text=
"是"
cancel-text=
"否"
@
confirm=
"handleDeleteFileConfirm(item)"
>
<span
style=
"margin-right: 10px"
class=
"downBtn downBtn1"
@
click=
"handleDeleteFile(item, $event)"
>
删除
</span>
</a-popconfirm>
</div>
<el-image
:src=
"item.picture_url"
:fit=
"'fill'"
class=
"single-image"
:style=
"
{'height':imgHeight+'px'}">
<template
#
error
>
<div
class=
"image-slot"
>
{{
dataSources
==
1
?
'去加载'
:
'加载失败'
}}
</div>
</
template
>
</el-image>
<div
@
click=
"personUnidClick(item.person_unid)"
>
人id: {{ item.person_unid }}
</div>
<div>
时间:{{ item.counttime }}
</div>
<div>
人员类型:{{ personTypeStr(item.person_type)}}({{ formatChildAdult(item.childAdult) }})
</div>
<div>
<span>
性别:{{ formatGender(item.gender) }}({{item.age}})
</span>
<a-popover
v-if=
"item.personLabel"
trigger=
"click"
>
<
template
#
content
>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.hairStyle!==null&&item.personLabel.hairStyle!==undefined"
><span>
发型:
</span><span>
{{
hairStyleStr
(
item
.
personLabel
.
hairStyle
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.hairColor!==null&&item.personLabel.hairColor!==undefined"
><span>
发色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
hairColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.hat!==null&&item.personLabel.hat!==undefined"
><span>
帽子:
</span><span>
{{
hatStr
(
item
.
personLabel
.
hat
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.hatColor!==null&&item.personLabel.hatColor!==undefined"
><span>
帽子颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
hatColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.glasses!==null&&item.personLabel.glasses!==undefined"
><span>
眼镜:
</span><span>
{{
glassesStr
(
item
.
personLabel
.
glasses
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.mask!==null&&item.personLabel.mask!==undefined"
><span>
口罩:
</span><span>
{{
maskStr
(
item
.
personLabel
.
mask
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.earring!==null&&item.personLabel.earring!==undefined"
><span>
耳饰:
</span><span>
{{
earringStr
(
item
.
personLabel
.
earring
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.jacketType!==null&&item.personLabel.jacketType!==undefined"
><span>
上装种类:
</span><span>
{{
jacketTypeStr
(
item
.
personLabel
.
jacketType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.jacketColor!==null&&item.personLabel.jacketColor!==undefined"
><span>
上装颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
jacketColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.bottomsType!==null&&item.personLabel.bottomsType!==undefined"
><span>
下装种类:
</span><span>
{{
bottomsTypeStr
(
item
.
personLabel
.
bottomsType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.bottomsColor!==null&&item.personLabel.bottomsColor!==undefined"
><span>
下装颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
bottomsColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.suitType!==null&&item.personLabel.suitType!==undefined"
><span>
套装种类:
</span><span>
{{
suitTypeStr
(
item
.
personLabel
.
suitType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.suitColor!==null&&item.personLabel.suitColor!==undefined"
><span>
套装颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
suitColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.clothingBrand!==null&&item.personLabel.clothingBrand!==undefined"
><span>
文字与LOGO:
</span><span>
{{
clothingBrandStr
(
item
.
personLabel
.
clothingBrand
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.necklace!==null&&item.personLabel.necklace!==undefined"
><span>
佩戴项链:
</span><span>
{{
necklaceStr
(
item
.
personLabel
.
necklace
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.watch!==null&&item.personLabel.watch!==undefined"
><span>
佩戴手表:
</span><span>
{{
watchStr
(
item
.
personLabel
.
watch
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.bracelet!==null&&item.personLabel.bracelet!==undefined"
><span>
佩戴手链:
</span><span>
{{
braceletStr
(
item
.
personLabel
.
bracelet
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.phone!==null&&item.personLabel.phone!==undefined"
><span>
手持手机:
</span><span>
{{
phoneStr
(
item
.
personLabel
.
phone
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.shoeType!==null&&item.personLabel.shoeType!==undefined"
><span>
鞋子类型:
</span><span>
{{
shoeTypeStr
(
item
.
personLabel
.
shoeType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.shoeColor!==null&&item.personLabel.shoeColor!==undefined"
><span>
鞋子颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
shoeColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.rucksackType!==null&&item.personLabel.rucksackType!==undefined"
><span>
背包类型:
</span><span>
{{
rucksackTypeStr
(
item
.
personLabel
.
rucksackType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.rucksackColor!==null&&item.personLabel.rucksackColor!==undefined"
><span>
背包颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
rucksackColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.handbagType!==null&&item.personLabel.handbagType!==undefined"
><span>
拎包类型:
</span><span>
{{
handbagTypeStr
(
item
.
personLabel
.
handbagType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.handbagColor!==null&&item.personLabel.handbagColor!==undefined"
><span>
拎包颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
handbagColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.shoppingBagType!==null&&item.personLabel.shoppingBagType!==undefined"
><span>
提袋类型:
</span><span>
{{
shoppingBagTypeStr
(
item
.
personLabel
.
shoppingBagType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.shoppingBagColor!==null&&item.personLabel.shoppingBagColor!==undefined"
><span>
提袋颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
shoppingBagColor
)
}}
</span></div>
</
template
>
<span
style=
"margin-right: 10px;"
class=
"downBtn downBtn1"
>
标签
</span>
</a-popover>
</div>
<div
class=
"direction"
:class=
"'direction'+item.direction"
>
方向:{{ formatDirection(item.direction) }}
</div>
<div>
地点:{{ item.gate_name }}
</div>
<div
style=
"width:100%;overflow:hidden;text-overflow:ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;"
>
商品类型:{{ formatProduct(item.productId)}}
</div>
<div
style=
"width:100%;overflow:hidden;text-overflow:ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;"
>
机位号:{{ formatPosition(item.channelProductId)}}
</div>
<div>
持续时间:{{ item.duration!==null
&&
item.duration!==undefined
&&
item.duration>=0?item.duration+'秒':'--' }}
</div>
</div>
</el-col>
</el-row>
</div>
<a-pagination
v-model:current=
"pageNum"
v-model:pageSize=
"pageSize"
:total=
"total"
:show-total=
"total => `共 ${total} 条`"
:pageSizeOptions=
"['24', '48', '96', '192']"
@
change=
"onPageNumChange"
@
showSizeChange=
"onPageSizeChange"
show-size-changer
show-quick-jumper
style=
"text-align:center;margin-top: 10px;"
/>
</a-popconfirm>
</div>
<el-image
:src=
"item.picture_url"
:fit=
"'fill'"
class=
"single-image"
:style=
"
{'height':imgHeight+'px'}">
<template
#
error
>
<div
class=
"image-slot"
>
{{
dataSources
==
1
?
'去加载'
:
'加载失败'
}}
</div>
</
template
>
</el-image>
<div
@
click=
"personUnidClick(item.person_unid)"
>
人id: {{ item.person_unid }}
</div>
<div>
时间:{{ item.counttime }}
</div>
<div>
人员类型:{{ personTypeStr(item.person_type)}}({{ formatChildAdult(item.childAdult) }})
</div>
<div>
<span>
性别:{{ formatGender(item.gender) }}({{item.age}})
</span>
<a-popover
v-if=
"item.personLabel"
trigger=
"click"
>
<
template
#
content
>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.hairStyle!==null&&item.personLabel.hairStyle!==undefined"
><span>
发型:
</span><span>
{{
hairStyleStr
(
item
.
personLabel
.
hairStyle
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.hairColor!==null&&item.personLabel.hairColor!==undefined"
><span>
发色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
hairColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.hat!==null&&item.personLabel.hat!==undefined"
><span>
帽子:
</span><span>
{{
hatStr
(
item
.
personLabel
.
hat
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.hatColor!==null&&item.personLabel.hatColor!==undefined"
><span>
帽子颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
hatColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.glasses!==null&&item.personLabel.glasses!==undefined"
><span>
眼镜:
</span><span>
{{
glassesStr
(
item
.
personLabel
.
glasses
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.mask!==null&&item.personLabel.mask!==undefined"
><span>
口罩:
</span><span>
{{
maskStr
(
item
.
personLabel
.
mask
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.earring!==null&&item.personLabel.earring!==undefined"
><span>
耳饰:
</span><span>
{{
earringStr
(
item
.
personLabel
.
earring
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.jacketType!==null&&item.personLabel.jacketType!==undefined"
><span>
上装种类:
</span><span>
{{
jacketTypeStr
(
item
.
personLabel
.
jacketType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.jacketColor!==null&&item.personLabel.jacketColor!==undefined"
><span>
上装颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
jacketColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.bottomsType!==null&&item.personLabel.bottomsType!==undefined"
><span>
下装种类:
</span><span>
{{
bottomsTypeStr
(
item
.
personLabel
.
bottomsType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.bottomsColor!==null&&item.personLabel.bottomsColor!==undefined"
><span>
下装颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
bottomsColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.suitType!==null&&item.personLabel.suitType!==undefined"
><span>
套装种类:
</span><span>
{{
suitTypeStr
(
item
.
personLabel
.
suitType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.suitColor!==null&&item.personLabel.suitColor!==undefined"
><span>
套装颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
suitColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.clothingBrand!==null&&item.personLabel.clothingBrand!==undefined"
><span>
文字与LOGO:
</span><span>
{{
clothingBrandStr
(
item
.
personLabel
.
clothingBrand
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.necklace!==null&&item.personLabel.necklace!==undefined"
><span>
佩戴项链:
</span><span>
{{
necklaceStr
(
item
.
personLabel
.
necklace
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.watch!==null&&item.personLabel.watch!==undefined"
><span>
佩戴手表:
</span><span>
{{
watchStr
(
item
.
personLabel
.
watch
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.bracelet!==null&&item.personLabel.bracelet!==undefined"
><span>
佩戴手链:
</span><span>
{{
braceletStr
(
item
.
personLabel
.
bracelet
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.phone!==null&&item.personLabel.phone!==undefined"
><span>
手持手机:
</span><span>
{{
phoneStr
(
item
.
personLabel
.
phone
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.shoeType!==null&&item.personLabel.shoeType!==undefined"
><span>
鞋子类型:
</span><span>
{{
shoeTypeStr
(
item
.
personLabel
.
shoeType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.shoeColor!==null&&item.personLabel.shoeColor!==undefined"
><span>
鞋子颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
shoeColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.rucksackType!==null&&item.personLabel.rucksackType!==undefined"
><span>
背包类型:
</span><span>
{{
rucksackTypeStr
(
item
.
personLabel
.
rucksackType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.rucksackColor!==null&&item.personLabel.rucksackColor!==undefined"
><span>
背包颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
rucksackColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.handbagType!==null&&item.personLabel.handbagType!==undefined"
><span>
拎包类型:
</span><span>
{{
handbagTypeStr
(
item
.
personLabel
.
handbagType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.handbagColor!==null&&item.personLabel.handbagColor!==undefined"
><span>
拎包颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
handbagColor
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.shoppingBagType!==null&&item.personLabel.shoppingBagType!==undefined"
><span>
提袋类型:
</span><span>
{{
shoppingBagTypeStr
(
item
.
personLabel
.
shoppingBagType
)
}}
</span></div>
<div
class=
"person-tag-one"
v-if=
"item.personLabel.shoppingBagColor!==null&&item.personLabel.shoppingBagColor!==undefined"
><span>
提袋颜色:
</span><span>
{{
jacketColorStr
(
item
.
personLabel
.
shoppingBagColor
)
}}
</span></div>
</
template
>
<span
style=
"margin-right: 10px;"
class=
"downBtn downBtn1"
>
标签
</span>
</a-popover>
</div>
<div
class=
"direction"
:class=
"'direction'+item.direction"
>
方向:{{ formatDirection(item.direction) }}
</div>
<div>
地点:{{ item.gate_name }}
</div>
<div
style=
"width:100%;overflow:hidden;text-overflow:ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;"
>
商品类型:{{ formatProduct(item.productId)}}
</div>
<div
style=
"width:100%;overflow:hidden;text-overflow:ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;"
>
机位号:{{ formatPosition(item.channelProductId)}}
</div>
<div>
持续时间:{{ item.duration!==null
&&
item.duration!==undefined
&&
item.duration>=0?item.duration+'秒':'--' }}
</div>
</div>
</el-col>
</el-row>
</div>
<!-- <imgDialog ref='imgModelRef'></imgDialog> -->
<DetailDialog
ref=
"DetailDialogRef"
/>
<batchesResultDialog
ref=
"batchesResultDialogRef"
/>
<singleImgComparisonDialog
ref=
"singleImgComparisonRef"
></singleImgComparisonDialog>
<a-pagination
v-model:current=
"pageNum"
v-model:pageSize=
"pageSize"
:total=
"total"
:show-total=
"total => `共 ${total} 条`"
:pageSizeOptions=
"['24', '48', '96', '192']"
@
change=
"onPageNumChange"
@
showSizeChange=
"onPageSizeChange"
show-size-changer
show-quick-jumper
style=
"text-align:center;margin-top: 10px;"
/>
</div>
<!-- <imgDialog ref='imgModelRef'></imgDialog> -->
<DetailDialog
ref=
"DetailDialogRef"
/>
<batchesResultDialog
ref=
"batchesResultDialogRef"
/>
<singleImgComparisonDialog
ref=
"singleImgComparisonRef"
></singleImgComparisonDialog>
</template>
<
script
>
...
...
@@ -358,6 +358,8 @@ export default {
const
onAccountChange
=
function
()
{
getPlazaList
(
1
)
getProductList
(
1
)
// 获取当前集团的年龄分裂
getChildAdultAgeOptions
()
}
const
onPlazaChange
=
function
()
{
...
...
@@ -551,6 +553,7 @@ export default {
}
getPlazaList
()
getProductList
()
getChildAdultAgeOptions
()
}
}
}
...
...
@@ -599,7 +602,7 @@ export default {
endTime
:
formatDate
(
rawData
.
date
)
+
' '
+
rawData
.
endTime
,
page
:
pageNum
.
value
-
1
,
pageSize
:
pageSize
.
value
,
age
:
rawData
.
childAdult
?
rawData
.
childAdult
.
toString
():
''
,
age
Dis
:
rawData
.
childAdult
?
rawData
.
childAdult
.
toString
():
''
,
gender
:
rawData
.
gender
?
rawData
.
gender
.
toString
():
''
,
}
)
...
...
@@ -663,14 +666,25 @@ export default {
return
(
positionList
.
value
.
filter
(
v
=>
v
.
value
==
val
)[
0
]
||
{
label
:
'--'
}).
label
}
const
childAdultAgeOptions
=
ref
([
{
value
:
0
,
label
:
'婴儿'
},
{
value
:
1
,
label
:
'儿童'
},
{
value
:
2
,
label
:
'少年'
},
{
value
:
3
,
label
:
'青年'
},
{
value
:
4
,
label
:
'中年'
},
{
value
:
5
,
label
:
'老年'
},
{
value
:
-
1
,
label
:
'未知'
},
//
{ value: 0, label: '婴儿' },
//
{ value: 1, label: '儿童' },
//
{ value: 2, label: '少年' },
//
{ value: 3, label: '青年' },
//
{ value: 4, label: '中年' },
//
{ value: 5, label: '老年' },
//
{ value: -1, label: '未知' },
])
const
getChildAdultAgeOptions
=
async
()
=>
{
try
{
queryForm
.
childAdult
=
[]
const
res
=
await
snapshotRecordApi
.
getAgeDistributionConfig
(
queryForm
.
account_id
)
childAdultAgeOptions
.
value
=
res
||
[]
}
catch
(
e
)
{
console
.
log
(
e
)
}
}
const
childAdultOptions
=
ref
([
{
value
:
0
,
label
:
'儿童'
},
{
value
:
1
,
label
:
'成人'
},
...
...
@@ -1591,6 +1605,7 @@ export default {
genderOptions
,
loadAllImages
,
allImagesLoading
,
getChildAdultAgeOptions
}
}
}
...
...
src/views/SnapshotCluster/SnapshotRecord/SnapshotRecordApi.js
View file @
6578b62
...
...
@@ -135,6 +135,15 @@ class SnapshotRecordApi {
}
)
}
// 获取集团配置下年龄分类
getAgeDistributionConfig
(
id
)
{
return
axiosInstance
.
request
(
{
method
:
'GET'
,
url
:
`/accounts/ageDistributionConfig?accountId=
${
id
}
`
,
}
)
}
}
const
snapshotRecordApi
=
new
SnapshotRecordApi
()
...
...
src/views/SystemLog/index.vue
View file @
6578b62
...
...
@@ -26,7 +26,7 @@
>
</a-select>
</a-form-item>
<a-form-item
label=
"选择日期:"
style=
"padding: 5px 0"
>
<a-date-picker
v-model:value=
"queryForm.date"
:format=
"'YYYY-MM-DD'"
style=
"width: 280px"
/>
</a-form-item>
...
...
@@ -43,7 +43,7 @@
</a-form-item>
</a-form>
<!--
<a-table
:dataSource=
"dataList"
v-loading=
"isLoading"
:rowKey=
"dataList => dataList.id"
:columns=
"columns"
:pagination=
"false"
:scroll=
"
{ y: contentHeight }">
</a-table>
-->
<el-table
:data=
"dataList"
...
...
@@ -88,218 +88,308 @@
/>
<!-- <moreDialog ref='moreDialogRef'></moreDialog> -->
</template>
<!--<template>-->
<!-- <a-form :model="queryForm" layout="inline" :label-col="{ style: { width: '80px' } }">-->
<!-- <!– <a-form-item label="apptype:" style="padding: 5px 0">-->
<!-- <a-select v-model:value="queryForm.apptype"-->
<!-- style="width: 280px"-->
<!-- :options="apptypeList"-->
<!-- optionFilterProp="label"-->
<!-- >-->
<!-- </a-select>-->
<!-- </a-form-item> –>-->
<!-- <a-form-item label="服务名称:" style="padding: 5px 0">-->
<!-- <a-select v-model:value="queryForm.appname"-->
<!-- style="width: 280px"-->
<!-- :options="appnameList"-->
<!-- optionFilterProp="label"-->
<!-- >-->
<!-- </a-select>-->
<!-- </a-form-item>-->
<!-- <a-form-item label="日志等级:" style="padding: 5px 0">-->
<!-- <a-select v-model:value="queryForm.levels"-->
<!-- style="width: 280px"-->
<!-- mode="multiple"-->
<!-- :maxTagCount="1"-->
<!-- :options="levelList"-->
<!-- optionFilterProp="label"-->
<!-- >-->
<!-- </a-select>-->
<!-- </a-form-item>-->
<!-- -->
<!-- <a-form-item label="选择日期:" style="padding: 5px 0">-->
<!-- <a-date-picker v-model:value="queryForm.date" :format="'YYYY-MM-DD'" style="width: 280px"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item label="选择时间:" style="padding: 5px 0">-->
<!-- <a-time-picker v-model:value="queryForm.startTime" style="width: 140px"/>-->
<!-- <a-time-picker v-model:value="queryForm.endTime" style="width: 140px"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item label="内容:" style="padding: 5px 0">-->
<!-- <a-input v-model:value="queryForm.content_like" placeholder="请输入内容" style="width: 280px"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item style="padding: 5px 0">-->
<!-- <a-button type="primary" @click="confirmSearch(1)" :loading="isLoading">查询</a-button>-->
<!-- <!– <a-button type="primary" @click="confirmSearch1">弹框</a-button> –>-->
<!-- </a-form-item>-->
<!-- </a-form>-->
<!-- <!– <a-table :dataSource="dataList" v-loading="isLoading" :rowKey="dataList => dataList.id" :columns="columns" :pagination="false" :scroll="{ y: contentHeight }">-->
<!-- -->
<!-- </a-table> –>-->
<!-- <el-table-->
<!-- :data="dataList"-->
<!-- v-loading="isLoading"-->
<!-- :rowKey="id"-->
<!-- :height="contentHeight"-->
<!-- style="width: 100%">-->
<!-- <el-table-column-->
<!-- prop="time"-->
<!-- label="时间"-->
<!-- width="180">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="thread"-->
<!-- label="线程号"-->
<!-- width="180">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="location"-->
<!-- label="日志位置"-->
<!-- width="300">-->
<!-- </el-table-column>-->
<!-- <el-table-column-->
<!-- prop="content"-->
<!-- label="日志内容">-->
<!-- <template #default="{ row }">-->
<!-- <p v-html="stringFormatter(row.content)"></p>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- </el-table>-->
<!-- <a-pagination-->
<!-- v-model:current="pageNum"-->
<!-- v-model:pageSize="pageSize"-->
<!-- :total="total"-->
<!-- :show-total="total => `共 ${total} 条`"-->
<!-- :pageSizeOptions="['20', '50', '100']"-->
<!-- @change="onPageNumChange"-->
<!-- @showSizeChange="onPageSizeChange"-->
<!-- show-size-changer-->
<!-- show-quick-jumper-->
<!-- style="text-align:center"-->
<!-- />-->
<!-- <!– <moreDialog ref='moreDialogRef'></moreDialog> –>-->
<!--</template>-->
<
script
>
import
{
reactive
,
ref
,
toRaw
}
from
'vue'
import
moment
from
'moment'
import
SystemLogApi
from
'@/views/SystemLog/SystemLog.js'
import
{
isArray
}
from
'@/PublicUtil/Judgment'
import
{
filterEmptyValueInObject
,
formatDate
,
formatTime
}
from
'@/PublicUtil/PublicUtil'
import
{
PlusOutlined
}
from
'@ant-design/icons-vue'
import
moreDialog
from
'./moreDialog.vue'
export
default
{
components
:
{
PlusOutlined
,
VNodes
:
(
_
,
{
attrs
})
=>
{
return
attrs
.
vnodes
},
moreDialog
},
setup
()
{
const
columns
=
ref
([
{
title
:
'时间'
,
dataIndex
:
'time'
,
align
:
'center'
,
width
:
220
},
{
title
:
'线程号'
,
dataIndex
:
'thread'
,
align
:
'center'
,
width
:
120
},
{
title
:
'日志位置'
,
dataIndex
:
'location'
,
align
:
'center'
,
width
:
300
},
{
title
:
'日志内容'
,
dataIndex
:
'content'
,
align
:
'center'
,
customRender
:({
text
,
record
})
=>
{
const
rawData
=
toRaw
(
queryForm
)
if
(
rawData
.
content_like
&&
rawData
.
content_like
!==
''
)
{
text
=
text
.
split
(
rawData
.
content_like
).
join
(
"<span style='color:red;'>"
+
rawData
.
content_like
+
"</span>"
)
// console.log(str)
// let pHtml = document.createElement("p");
return
(
<
p
v
-
html
=
'str'
>
{
text
}
<
/p>
)
}
else
{
return
text
}
}
},
// {
// title: '日志标识',
// dataIndex: 'id',
// align: 'center',
// }
])
//ref
const
moreDialogRef
=
ref
()
// scalar
const
isLoading
=
ref
(
false
)
const
isSuspended
=
ref
(
false
)
const
pageNum
=
ref
(
1
)
const
pageSize
=
ref
(
20
)
const
total
=
ref
()
// sequence
const
dataList
=
ref
([])
const
apptypeList
=
ref
([{
value
:
'store'
,
label
:
'store'
,
},{
value
:
'mall'
,
label
:
'mall'
,
}])
const
appnameList
=
ref
([{
value
:
'process'
,
label
:
'process'
,
},{
value
:
'receive'
,
label
:
'receive'
,
},{
value
:
'report'
,
label
:
'report'
,
},{
value
:
'openapi'
,
label
:
'openapi'
,
}])
const
levelList
=
ref
([{
value
:
'info'
,
label
:
'info'
,
},{
value
:
'error'
,
label
:
'error'
,
},{
value
:
'debug'
,
label
:
'debug'
,
},{
value
:
'warn'
,
label
:
'warn'
,
}])
const
queryForm
=
reactive
(
{
// apptype:'store',
appname
:
'process'
,
levels
:
[
'info'
,
'error'
,
'debug'
,
'warn'
],
content_like
:
''
,
date
:
moment
(
moment
().
format
(
'YYYY-MM-DD'
),
'YYYY-MM-DD'
),
startTime
:
moment
(
'00:00:00'
,
'HH:mm:ss'
),
endTime
:
moment
(
'23:59:59'
,
'HH:mm:ss'
),
}
)
const
onPageNumChange
=
function
(
num
)
{
pageNum
.
value
=
num
confirmSearch
()
}
const
onPageSizeChange
=
function
(
current
,
size
)
{
pageNum
.
value
=
1
pageSize
.
value
=
size
confirmSearch
()
}
const
confirmSearch
=
function
(
val
){
isLoading
.
value
=
true
const
rawData
=
toRaw
(
queryForm
)
pageNum
.
value
=
val
?
1
:
pageNum
.
value
const
data
=
filterEmptyValueInObject
(
{
// apptype: rawData.apptype,
appname
:
rawData
.
appname
,
levels
:
rawData
.
levels
?
rawData
.
levels
.
toString
():
null
,
content_like
:
rawData
.
content_like
,
startTime
:
formatDate
(
rawData
.
date
)
+
' '
+
formatTime
(
rawData
.
startTime
),
endTime
:
formatDate
(
rawData
.
date
)
+
' '
+
formatTime
(
rawData
.
endTime
),
page
:
pageNum
.
value
,
pageSize
:
pageSize
.
value
,
}
)
SystemLogApi
.
getLogSelect
(
data
).
then
(
(
r
)
=>
{
isLoading
.
value
=
false
dataList
.
value
=
[]
if
(
r
.
code
==
200
){
// r.forEach((item,index)=>{
// item.index = index+1
// })
if
(
r
.
data
){
dataList
.
value
=
r
.
data
.
list
total
.
value
=
r
.
data
.
total
}
}
}
)
}
const
stringFormatter
=
function
(
text
){
const
rawData
=
toRaw
(
queryForm
)
if
(
rawData
.
content_like
&&
rawData
.
content_like
!==
''
)
{
let
str
=
text
.
split
(
rawData
.
content_like
).
join
(
"<span style='color:red;'>"
+
rawData
.
content_like
+
"</span>"
)
return
str
}
else
{
return
text
}
}
const
contentHeight
=
ref
(
0
)
const
__main
=
function
()
{
contentHeight
.
value
=
window
.
innerHeight
-
230
// confirmSearch()
}
const
confirmSearch1
=
function
(){
moreDialogRef
.
value
.
initDialog
();
}
__main
()
return
{
// scalar
isLoading
,
pageNum
,
pageSize
,
total
,
contentHeight
,
// sequence
apptypeList
,
appnameList
,
levelList
,
dataList
,
queryForm
,
columns
,
// function
confirmSearch
,
confirmSearch1
,
stringFormatter
,
onPageNumChange
,
onPageSizeChange
,
//ref
moreDialogRef
}
}
}
<
/
script
>
<
!--<script>--
>
<!--import {reactive, ref, toRaw} from 'vue'-->
<!--import moment from 'moment'-->
<!--import SystemLogApi from '@/views/SystemLog/SystemLog.js'-->
<!--import {isArray} from '@/PublicUtil/Judgment'-->
<!--import {filterEmptyValueInObject, formatDate, formatTime} from '@/PublicUtil/PublicUtil'-->
<!--import {PlusOutlined} from '@ant-design/icons-vue'-->
<!--import moreDialog from './moreDialog.vue'-->
<!--export default {-->
<!-- components: {-->
<!-- PlusOutlined,-->
<!-- VNodes: (_, {attrs}) => {-->
<!-- return attrs.vnodes-->
<!-- },-->
<!-- moreDialog-->
<!-- },-->
<!-- setup() {-->
<!-- const columns = ref([-->
<!-- {-->
<!-- title: '时间',-->
<!-- dataIndex: 'time',-->
<!-- align: 'center',-->
<!-- width: 220-->
<!-- },-->
<!-- {-->
<!-- title: '线程号',-->
<!-- dataIndex: 'thread',-->
<!-- align: 'center',-->
<!-- width: 120-->
<!-- },-->
<!-- {-->
<!-- title: '日志位置',-->
<!-- dataIndex: 'location',-->
<!-- align: 'center',-->
<!-- width: 300-->
<!-- },-->
<!-- {-->
<!-- title: '日志内容',-->
<!-- dataIndex: 'content',-->
<!-- align: 'center',-->
<!-- customRender:({text,record})=>{-->
<!-- const rawData = toRaw(queryForm)-->
<!-- if (rawData.content_like && rawData.content_like !== '') {-->
<!-- text = text.split(rawData.content_like).join("<span style='color:red;'>" + rawData.content_like + "</span>")-->
<!-- // console.log(str)-->
<!-- // let pHtml = document.createElement("p");-->
<!-- return (<p v-html='str'>{text}</p>)-->
<!-- }else{-->
<!-- return text-->
<!-- }-->
<!-- }-->
<!-- },-->
<!-- // {-->
<!-- // title: '日志标识',-->
<!-- // dataIndex: 'id',-->
<!-- // align: 'center',-->
<!-- // }-->
<!-- ])-->
<!-- //ref-->
<!-- const moreDialogRef = ref()-->
<!-- // scalar-->
<!-- const isLoading = ref(false)-->
<!-- const isSuspended = ref(false)-->
<!-- const pageNum = ref(1)-->
<!-- const pageSize = ref(20)-->
<!-- const total = ref()-->
<!-- // sequence-->
<!-- const dataList = ref([])-->
<!-- const apptypeList = ref([{-->
<!-- value: 'store',-->
<!-- label: 'store',-->
<!-- },{-->
<!-- value: 'mall',-->
<!-- label: 'mall',-->
<!-- }])-->
<!-- const appnameList = ref([{-->
<!-- value: 'process',-->
<!-- label: 'process',-->
<!-- },{-->
<!-- value: 'receive',-->
<!-- label: 'receive',-->
<!-- },{-->
<!-- value: 'report',-->
<!-- label: 'report',-->
<!-- },{-->
<!-- value: 'openapi',-->
<!-- label: 'openapi',-->
<!-- }])-->
<!-- const levelList = ref([{-->
<!-- value: 'info',-->
<!-- label: 'info',-->
<!-- },{-->
<!-- value: 'error',-->
<!-- label: 'error',-->
<!-- },{-->
<!-- value: 'debug',-->
<!-- label: 'debug',-->
<!-- },{-->
<!-- value: 'warn',-->
<!-- label: 'warn',-->
<!-- }])-->
<!-- const queryForm = reactive(-->
<!-- {-->
<!-- // apptype:'store',-->
<!-- appname: 'process',-->
<!-- levels: ['info','error','debug','warn'],-->
<!-- content_like: '',-->
<!-- date: moment(moment().format('YYYY-MM-DD'), 'YYYY-MM-DD'),-->
<!-- startTime: moment('00:00:00', 'HH:mm:ss'),-->
<!-- endTime: moment('23:59:59', 'HH:mm:ss'),-->
<!-- }-->
<!-- )-->
<!-- const onPageNumChange = function(num) {-->
<!-- pageNum.value = num-->
<!-- confirmSearch()-->
<!-- }-->
<!-- -->
<!-- const onPageSizeChange = function(current, size) {-->
<!-- pageNum.value = 1-->
<!-- pageSize.value = size-->
<!-- confirmSearch()-->
<!-- }-->
<!-- const confirmSearch = function(val){-->
<!-- isLoading.value = true-->
<!-- const rawData = toRaw(queryForm)-->
<!-- pageNum.value = val?1:pageNum.value-->
<!-- const data = filterEmptyValueInObject(-->
<!-- {-->
<!-- // apptype: rawData.apptype,-->
<!-- appname: rawData.appname,-->
<!-- levels: rawData.levels?rawData.levels.toString():null,-->
<!-- content_like: rawData.content_like,-->
<!-- startTime: formatDate(rawData.date) + ' ' + formatTime(rawData.startTime),-->
<!-- endTime: formatDate(rawData.date) + ' ' + formatTime(rawData.endTime),-->
<!-- page: pageNum.value,-->
<!-- pageSize: pageSize.value,-->
<!-- }-->
<!-- )-->
<!-- SystemLogApi.getLogSelect(data).then(-->
<!-- (r) => {-->
<!-- isLoading.value = false-->
<!-- dataList.value = []-->
<!-- if(r.code==200){-->
<!-- // r.forEach((item,index)=>{-->
<!-- // item.index = index+1-->
<!-- // })-->
<!-- if(r.data){-->
<!-- dataList.value = r.data.list-->
<!-- total.value = r.data.total-->
<!-- }-->
<!-- -->
<!-- }-->
<!-- -->
<!-- }-->
<!-- )-->
<!-- }-->
<!-- const stringFormatter = function(text){-->
<!-- const rawData = toRaw(queryForm)-->
<!-- if (rawData.content_like && rawData.content_like !== '') {-->
<!-- let str = text.split(rawData.content_like).join("<span style='color:red;'>" + rawData.content_like + "</span>")-->
<!-- return str-->
<!-- }else{-->
<!-- return text-->
<!-- }-->
<!-- }-->
<!-- const contentHeight = ref(0)-->
<!-- const __main = function() {-->
<!-- contentHeight.value = window.innerHeight - 230-->
<!-- // confirmSearch()-->
<!-- }-->
<!-- const confirmSearch1 = function(){-->
<!-- moreDialogRef.value.initDialog();-->
<!-- }-->
<!-- __main()-->
<!-- return {-->
<!-- // scalar-->
<!-- isLoading,-->
<!-- pageNum,-->
<!-- pageSize,-->
<!-- total,-->
<!-- contentHeight,-->
<!-- // sequence-->
<!-- apptypeList,-->
<!-- appnameList,-->
<!-- levelList,-->
<!-- dataList,-->
<!-- queryForm,-->
<!-- columns,-->
<!-- // function-->
<!-- confirmSearch,-->
<!-- confirmSearch1,-->
<!-- stringFormatter,-->
<!-- onPageNumChange,-->
<!-- onPageSizeChange,-->
<!-- //ref-->
<!-- moreDialogRef-->
<!-- }-->
<!-- }-->
<!--}-->
<
!--</script>--
>
<
style
lang=
"less"
scoped
>
.success
{
color
:
#26ff29
;
}
//
/
deep
/
.el-table
{
//
th,tr{
//
background-color
:
#fafafa
;
//
}
//
}
.failed
{
color
:
red
;
}
<
/
style
>
<
!--<style lang="less" scoped>--
>
<!-- .success {-->
<!-- color: #26ff29;-->
<!-- }-->
<!-- // /deep/.el-table{-->
<!-- // th,tr{-->
<!-- // background-color: #fafafa;-->
<!-- // }-->
<!-- // }-->
<!-- .failed {-->
<!-- color: red;-->
<!-- }-->
<
!--</style>--
>
Write
Preview
Markdown
is supported
Attach a file
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 post a comment