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 7813455b
authored
Mar 19, 2025
by
陈岩
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
feat: 抓拍记录->聚类结果 新增抓拍记录功能
1 parent
437fc71d
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
275 additions
and
28 deletions
src/views/SnapshotCluster/ClusterResult/ClusterResult.vue
src/views/SnapshotCluster/ClusterResult/ClusterResultApi.js
src/views/SnapshotCluster/ClusterResult/components/AddEditSnapshotClusterDialog.vue
src/views/SnapshotCluster/ClusterResult/ClusterResult.vue
View file @
7813455
...
@@ -230,6 +230,8 @@
...
@@ -230,6 +230,8 @@
<!--
<span
class=
"expandWord"
@
click=
'updatePersonInfoByGroup(person)'
>
类型修正
</span>
-->
<!--
<span
class=
"expandWord"
@
click=
'updatePersonInfoByGroup(person)'
>
类型修正
</span>
-->
<span
class=
"expandWord"
@
click=
'uploadGroupData(person)'
>
上传数据
</span>
<span
class=
"expandWord"
@
click=
'uploadGroupData(person)'
>
上传数据
</span>
<span
class=
"expandWord"
@
click=
'searchPersonInfoByGroup(person)'
>
搜索
</span>
<span
class=
"expandWord"
@
click=
'searchPersonInfoByGroup(person)'
>
搜索
</span>
<span
class=
"expandWord"
@
click=
'handleAddSnapshotCluster(person.person_unid)'
>
新增抓拍
</span>
<!--
<span
class=
"expandWord"
@
click=
'searchPersonInfoByGroup(person)'
>
添加
</span>
-->
<!--
<span
class=
"expandWord"
@
click=
'searchPersonInfoByGroup(person)'
>
添加
</span>
-->
<el-checkbox
class=
"checkBox"
v-model=
"person.checked"
@
change=
'checkChange(person)'
></el-checkbox>
<el-checkbox
class=
"checkBox"
v-model=
"person.checked"
@
change=
'checkChange(person)'
></el-checkbox>
...
@@ -310,6 +312,8 @@
...
@@ -310,6 +312,8 @@
<PersonGroupMover
ref=
'personGroupMoverRef'
:data-params=
"currentSearchCondition"
:data-list=
"dataList"
@
refresh=
"handleRefresh"
/>
<PersonGroupMover
ref=
'personGroupMoverRef'
:data-params=
"currentSearchCondition"
:data-list=
"dataList"
@
refresh=
"handleRefresh"
/>
<AddPersonnelPool
ref=
'personnelPoolRef'
:data-params=
"currentSearchCondition"
@
refresh=
"handleRefresh"
/>
<AddPersonnelPool
ref=
'personnelPoolRef'
:data-params=
"currentSearchCondition"
@
refresh=
"handleRefresh"
/>
<PersonGroupDialog
ref=
'personGroupDialogRef'
:query-form=
"queryForm"
@
refresh=
"handleRefresh"
/>
<PersonGroupDialog
ref=
'personGroupDialogRef'
:query-form=
"queryForm"
@
refresh=
"handleRefresh"
/>
<AddEditSnapshotClusterDialog
ref=
"addEditSnapshotClusterRef"
/>
</template>
</template>
<
script
>
<
script
>
...
@@ -329,9 +333,11 @@ import UploadGroupDataEditor from "./UploadGroupDataEditor.vue";
...
@@ -329,9 +333,11 @@ import UploadGroupDataEditor from "./UploadGroupDataEditor.vue";
import
PersonGroupDialog
from
"./PersonGroupDialog.vue"
;
import
PersonGroupDialog
from
"./PersonGroupDialog.vue"
;
import
PersonGroupMover
from
"./PersonGroupMover.vue"
;
import
PersonGroupMover
from
"./PersonGroupMover.vue"
;
import
AddPersonnelPool
from
"./AddPersonnelPool.vue"
;
import
AddPersonnelPool
from
"./AddPersonnelPool.vue"
;
import
AddEditSnapshotClusterDialog
from
'./components/AddEditSnapshotClusterDialog.vue'
export
default
{
export
default
{
components
:{
components
:{
AddEditSnapshotClusterDialog
,
PersonGroupEditor
,
PersonGroupEditor
,
UploadGroupDataEditor
,
UploadGroupDataEditor
,
PersonGroupDialog
,
PersonGroupDialog
,
...
@@ -341,9 +347,56 @@ export default {
...
@@ -341,9 +347,56 @@ export default {
DetailDialog
,
DetailDialog
,
PersonnelDialog
,
PersonnelDialog
,
DetailDialogComparison
,
DetailDialogComparison
,
singleImgComparisonDialog
singleImgComparisonDialog
,
},
},
setup
()
{
setup
()
{
// 新增抓拍记录功能
const
addEditSnapshotClusterRef
=
ref
()
const
handleAddSnapshotCluster
=
(
personUnid
)
=>
{
const
optionsMap
=
{
personTypeList
:
personTypeList
.
value
,
ageList
:
childAdultAgeOptions
.
value
,
genderList
:
genderOptions
.
value
,
directionList
:[{
label
:
'出'
,
value
:
-
1
},{
label
:
'进'
,
value
:
1
},{
label
:
'横穿'
,
value
:
0
},{
label
:
'过店'
,
value
:
2
},{
label
:
'关注'
,
value
:
7
},{
label
:
'触达'
,
value
:
8
}],
mallList
:
plazaList
.
value
,
gateList
:
gateList
.
value
,
accountList
:
accountList
.
value
}
const
submitForm
=
{
personType
:
undefined
,
age
:
undefined
,
gender
:
undefined
,
direction
:
undefined
,
countdate
:
moment
(
queryForm
.
date
).
format
(
'YYYY-MM-DD'
),
counttime
:
undefined
,
mallId
:
queryForm
.
plaza_id
,
gateId
:
queryForm
.
gate_id
,
accountId
:
queryForm
.
account_id
,
personUnid
}
addEditSnapshotClusterRef
.
value
?.
initDialog
(
submitForm
,
optionsMap
)
}
// scalar
// scalar
const
dataSources
=
ref
(
0
)
const
dataSources
=
ref
(
0
)
const
pageNum
=
ref
(
1
)
const
pageNum
=
ref
(
1
)
...
@@ -1310,6 +1363,8 @@ export default {
...
@@ -1310,6 +1363,8 @@ export default {
__main
()
__main
()
return
{
return
{
addEditSnapshotClusterRef
,
handleAddSnapshotCluster
,
// scalar
// scalar
dataSources
,
dataSources
,
isLoading
,
isLoading
,
...
...
src/views/SnapshotCluster/ClusterResult/ClusterResultApi.js
View file @
7813455
...
@@ -224,34 +224,43 @@ class ClusterResultApi {
...
@@ -224,34 +224,43 @@ class ClusterResultApi {
)
)
}
}
// 搜索左侧图片列表
// 搜索左侧图片列表
getAllfacePic
(
data
)
{
getAllfacePic
(
data
)
{
return
axiosInstance
.
request
(
return
axiosInstance
.
request
(
{
{
method
:
'GET'
,
method
:
'GET'
,
url
:
`/faceRecognitions/facePic`
,
url
:
`/faceRecognitions/facePic`
,
params
:
filterEmptyValueInObject
(
params
:
filterEmptyValueInObject
(
data
data
)
)
}
}
)
)
}
}
// 搜索左侧图片点击20条记录列表
// 搜索左侧图片点击20条记录列表
getAllFaceQuerPic
(
data
)
{
getAllFaceQuerPic
(
data
)
{
return
axiosInstance
.
request
(
return
axiosInstance
.
request
(
// {
// {
// method: 'GET',
// method: 'GET',
// url: `/faceRecognitions/querFaceRecogniton`,
// url: `/faceRecognitions/querFaceRecogniton`,
// params: filterEmptyValueInObject(
// params: filterEmptyValueInObject(
// data
// data
// )
// )
// }
// }
{
{
method
:
'POST'
,
method
:
'POST'
,
url
:
`/faceRecognitions/querFaceRecogniton`
,
url
:
`/faceRecognitions/querFaceRecogniton`
,
data
:
data
data
:
data
}
}
)
)
}
}
addFaceRecognitionsApi
(
data
)
{
return
axiosInstance
.
request
(
{
method
:
'POST'
,
url
:
'/faceRecognitions/addRecord'
,
data
}
)
}
}
}
...
...
src/views/SnapshotCluster/ClusterResult/components/AddEditSnapshotClusterDialog.vue
0 → 100644
View file @
7813455
<
template
>
<a-modal
v-model:visible=
"visible"
title=
"新增抓拍记录"
:width=
"800"
@
ok=
"handleSubmitData"
>
<a-form
ref=
"formRef"
:model=
"submitForm"
:rules=
"formRules"
labelAlign=
"right"
>
<a-row>
<a-col
:span=
"12"
>
<a-form-item
label=
"集团"
name=
"accountId"
>
<strong>
{{
filterMapName
(
submitForm
.
accountId
,
optionsMap
[
'accountList'
])
}}
</strong>
</a-form-item>
</a-col>
<a-col
:span=
"12"
>
<a-form-item
label=
"广场"
name=
"mallId"
>
<strong>
{{
filterMapName
(
submitForm
.
mallId
,
optionsMap
[
'mallList'
])
}}
</strong>
</a-form-item>
</a-col>
<a-col
:span=
"12"
>
<a-form-item
label=
"出入口地点"
name=
"gateId"
>
<a-select
v-model:value=
"submitForm.gateId"
placeholder=
"请选择"
optionFilterProp=
"label"
show-search
:options=
"optionsMap['gateList']"
/>
</a-form-item>
</a-col>
<a-col
:span=
"12"
>
<a-form-item
label=
"人员类型"
name=
"personType"
>
<a-select
v-model:value=
"submitForm.personType"
placeholder=
"请选择"
optionFilterProp=
"label"
show-search
:options=
"optionsMap['personTypeList']"
/>
</a-form-item>
</a-col>
<a-col
:span=
"12"
>
<a-form-item
label=
"方向"
name=
"direction"
>
<a-select
v-model:value=
"submitForm.direction"
placeholder=
"请选择"
optionFilterProp=
"label"
show-search
:options=
"optionsMap['directionList']"
/>
</a-form-item>
</a-col>
<a-col
:span=
"12"
></a-col>
<a-col
:span=
"12"
>
<a-form-item
label=
"性别"
name=
"gender"
>
<a-select
v-model:value=
"submitForm.gender"
placeholder=
"请选择"
optionFilterProp=
"label"
show-search
:options=
"optionsMap['genderList']"
/>
</a-form-item>
</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-form-item>
</a-col>
<a-col
:span=
"12"
>
<a-form-item
label=
"所属统计日期"
name=
"countdate"
>
<a-date-picker
v-model:value=
"submitForm.countdate"
format=
"YYYY-MM-DD"
valueFormat=
"YYYY-MM-DD"
:allowClear=
"false"
style=
"width: 100%"
/>
</a-form-item>
</a-col>
<a-col
:span=
"12"
>
<a-form-item
label=
"抓拍时间"
name=
"counttime"
>
<a-date-picker
v-model:value=
"submitForm.counttime"
show-time
format=
"YYYY-MM-DD HH:mm:ss"
valueFormat=
"YYYY-MM-DD HH:mm:ss"
:allowClear=
"false"
style=
"width: 100%"
/>
</a-form-item>
</a-col>
<a-col
:span=
"24"
>
<a-form-item
label=
"是否是新人"
>
<a-radio-group
v-model:value=
"isNewPerson"
>
<a-radio
:value=
"false"
>
否
</a-radio>
<a-radio
:value=
"true"
>
是
</a-radio>
</a-radio-group>
</a-form-item>
</a-col>
<a-col
:span=
"24"
v-if=
"!isNewPerson"
>
<a-form-item
label=
"人Id"
name=
"personUnid"
>
<a-input
v-model:value=
"submitForm.personUnid"
placeholder=
"请输入"
/>
</a-form-item>
</a-col>
</a-row>
</a-form>
</a-modal>
</
template
>
<
script
setup
>
import
{
defineExpose
,
ref
}
from
'vue'
import
{
cloneDeep
}
from
'lodash'
import
{
message
}
from
'ant-design-vue'
import
clusterResultApi
from
'../ClusterResultApi'
const
submitForm
=
ref
({})
const
optionsMap
=
ref
({})
const
visible
=
ref
(
false
)
const
isNewPerson
=
ref
(
false
)
/**
* 表单校验相关
*/
const
formRef
=
ref
()
const
formRules
=
{
gateId
:
[{
required
:
true
,
message
:
'请选择出入口地点'
}],
personType
:
[{
required
:
true
,
message
:
'请选择人员类型'
}],
direction
:
[{
required
:
true
,
message
:
'请选择方向'
}],
age
:
[{
required
:
true
,
message
:
'请选择年龄'
}],
gender
:
[{
required
:
true
,
message
:
'请选择性别'
}],
countdate
:
[{
required
:
true
,
message
:
'请选择所属统计日期'
}],
counttime
:
[{
required
:
true
,
message
:
'请选择抓拍时间'
}],
personUnid
:
[{
required
:
true
,
message
:
'请输入人Id'
}]
}
// 提交数据
const
handleSubmitData
=
async
()
=>
{
try
{
await
formRef
.
value
.
validate
()
const
params
=
{
...
submitForm
.
value
,
countdate
:
`
${
submitForm
.
value
.
countdate
}
00:00:00`
,
personUnid
:
isNewPerson
.
value
?
''
:
submitForm
.
value
.
personUnid
,
}
const
res
=
await
clusterResultApi
.
addFaceRecognitionsApi
(
params
)
if
(
res
.
msg_code
===
200
)
{
message
.
success
(
"提交成功,当前不会修正统计数据,需手动刷新"
)
visible
.
value
=
false
}
else
{
message
.
error
(
res
.
msg_info
||
'请求异常'
)
}
}
catch
(
e
)
{
console
.
log
(
e
)
}
}
// 初始化弹窗
const
initDialog
=
(
form
,
selectOptionsMap
)
=>
{
submitForm
.
value
=
cloneDeep
(
form
)
optionsMap
.
value
=
selectOptionsMap
visible
.
value
=
true
}
// 筛选固定值字段
const
filterMapName
=
(
id
,
list
)
=>
{
return
list
.
find
(
item
=>
item
.
value
===
id
)?.
label
||
'--'
}
defineExpose
({
initDialog
})
</
script
>
<
style
scoped
lang=
"less"
>
:deep
(
.ant-col.ant-form-item-label
)
{
width
:
120px
;
}
//
确保选择框宽度充满容器
.ant-select
,
.ant-picker
{
width
:
100%
;
}
</
style
>
\ No newline at end of file
\ No newline at end of file
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