Commit 7813455b by 陈岩

feat: 抓拍记录->聚类结果 新增抓拍记录功能

1 parent 437fc71d
......@@ -230,6 +230,8 @@
<!-- <span class="expandWord" @click='updatePersonInfoByGroup(person)'>类型修正</span> -->
<span class="expandWord" @click='uploadGroupData(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> -->
<el-checkbox class="checkBox" v-model="person.checked" @change='checkChange(person)'></el-checkbox>
......@@ -310,6 +312,8 @@
<PersonGroupMover ref='personGroupMoverRef' :data-params="currentSearchCondition" :data-list="dataList" @refresh="handleRefresh" />
<AddPersonnelPool ref='personnelPoolRef' :data-params="currentSearchCondition" @refresh="handleRefresh" />
<PersonGroupDialog ref='personGroupDialogRef' :query-form="queryForm" @refresh="handleRefresh" />
<AddEditSnapshotClusterDialog ref="addEditSnapshotClusterRef" />
</template>
<script>
......@@ -329,9 +333,11 @@ import UploadGroupDataEditor from "./UploadGroupDataEditor.vue";
import PersonGroupDialog from "./PersonGroupDialog.vue";
import PersonGroupMover from "./PersonGroupMover.vue";
import AddPersonnelPool from "./AddPersonnelPool.vue";
import AddEditSnapshotClusterDialog from './components/AddEditSnapshotClusterDialog.vue'
export default {
components:{
AddEditSnapshotClusterDialog,
PersonGroupEditor,
UploadGroupDataEditor,
PersonGroupDialog,
......@@ -341,9 +347,56 @@ export default {
DetailDialog,
PersonnelDialog,
DetailDialogComparison,
singleImgComparisonDialog
singleImgComparisonDialog,
},
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
const dataSources = ref(0)
const pageNum = ref(1)
......@@ -1310,6 +1363,8 @@ export default {
__main()
return {
addEditSnapshotClusterRef,
handleAddSnapshotCluster,
// scalar
dataSources,
isLoading,
......
......@@ -252,6 +252,15 @@ class ClusterResultApi {
}
)
}
addFaceRecognitionsApi(data) {
return axiosInstance.request(
{
method: 'POST',
url: '/faceRecognitions/addRecord',
data
}
)
}
}
......
<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
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!