Commit a8e9e79c by 李君

Merge branch 'master' of http://git.keliuyun.com:55676/luoxinlin/vion-tools

# Conflicts:
#	src/Request/PublicAxiosInstance.js
#	src/router/index.js
#	src/views/Main/Main.vue
2 parents 33a77b27 1b1ea748
...@@ -53,6 +53,10 @@ const menuRoute = [ ...@@ -53,6 +53,10 @@ const menuRoute = [
path: 'DataReplay', path: 'DataReplay',
component: () => import("@/views/DataReplay/DataReplay.vue"), component: () => import("@/views/DataReplay/DataReplay.vue"),
}, },
{
path: 'Featurematching',
component: () => import("@/views/Featurematching/Featurematching.vue")
},
{ {
path: 'equipmentDataRetransmission', path: 'equipmentDataRetransmission',
component: () => import("@/views/equipmentDataRetransmission/equipmentDataRetransmission.vue"), component: () => import("@/views/equipmentDataRetransmission/equipmentDataRetransmission.vue"),
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<a-input-number v-model:value="queryForm.maxPic" :min="0" style="width: 100px"/> <a-input-number v-model:value="queryForm.maxPic" :min="0" style="width: 100px"/>
</a-form-item> </a-form-item>
<a-form-item style="padding: 5px 0"> <a-form-item style="padding: 5px 0">
<a-button type="primary" @click="confirmSearch" :loading="isLoading">查询</a-button> <a-button type="primary" @click="clickSearch" :loading="isLoading">查询</a-button>
</a-form-item> </a-form-item>
</a-form> </a-form>
<div v-loading="isLoading"> <div v-loading="isLoading">
...@@ -354,7 +354,10 @@ ...@@ -354,7 +354,10 @@
} }
) )
} }
const clickSearch = function() {
pageNum.value = 1
confirmSearch()
}
const confirmSearch = function() { const confirmSearch = function() {
const rawData = toRaw(queryForm) const rawData = toRaw(queryForm)
if(rawData.minPic>rawData.maxPic){ if(rawData.minPic>rawData.maxPic){
...@@ -670,6 +673,7 @@ ...@@ -670,6 +673,7 @@
onPlazaChange, onPlazaChange,
onZoneChange, onZoneChange,
confirmSearch, confirmSearch,
clickSearch,
formatDirection, formatDirection,
formatPersonType, formatPersonType,
dragStart, dragStart,
......
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
<a-time-picker v-model:value="queryForm.endTime" style="width: 100px" /> <a-time-picker v-model:value="queryForm.endTime" style="width: 100px" />
</a-form-item> </a-form-item>
<a-form-item style="padding: 5px 0"> <a-form-item style="padding: 5px 0">
<a-button type="primary" @click="confirmSearch" :loading="isLoading">查询</a-button> <a-button type="primary" @click="clickSearch" :loading="isLoading">查询</a-button>
</a-form-item> </a-form-item>
</a-form> </a-form>
<div v-loading="isLoading"> <div v-loading="isLoading">
...@@ -407,7 +407,10 @@ ...@@ -407,7 +407,10 @@
} }
) )
} }
const clickSearch = function() {
pageNum.value = 1
confirmSearch()
}
const confirmSearch = function() { const confirmSearch = function() {
isLoading.value = true isLoading.value = true
const rawData = toRaw(queryForm) const rawData = toRaw(queryForm)
...@@ -715,7 +718,8 @@ ...@@ -715,7 +718,8 @@
openImage, openImage,
deleteImage, deleteImage,
addImage, addImage,
fullScreen fullScreen,
clickSearch
} }
} }
} }
......
<template>
<a-form :model="queryForm" layout="inline">
<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"
: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.picType" style="width: 230px">
<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">
<el-input-number class="thresholdInput" size="small" :controls='false' :min="1" :max="100" v-model="queryForm.customScore "></el-input-number>
</a-form-item>
<a-form-item label="选择日期:" style="padding: 5px 0">
<a-date-picker v-model:value="queryForm.countdate" style="width: 280px"/>
</a-form-item>
<a-form-item label="选择文件:" style="padding: 5px 0">
<a-upload :file-list="fileList" :before-upload="beforeUpload" :multiple="false" @remove="handleRemove" action=''>
<a-button>
<upload-outlined></upload-outlined>
选择文件
</a-button>
</a-upload>
{{fileName}}
</a-form-item>
<a-form-item style="padding: 5px 0">
<a-button type="primary" @click="queryData">搜索</a-button>
</a-form-item>
</a-form>
<div v-loading="isLoading">
<div class="resultContent" :style="{'height':contentHeight+'px'}">
<el-row :gutter="20">
<el-col :span="3" v-for="item in resultList">
<div class="itemBox">
<div>{{ item.id }}</div>
<el-image :src="item.picture_url"
:fit="'fill'"
class="single-image">
</el-image>
<p class="featureNum">{{item.featureNum?(item.featureNum).toFixed(2):0}}</p>
</div>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
import {reactive, ref, toRaw} from 'vue'
import {ElMessage} from 'element-plus'
import moment from 'moment'
import snapshotRecordApi from '@/views/SnapshotCluster/SnapshotRecord/SnapshotRecordApi'
import {isArray} from '@/PublicUtil/Judgment'
import {formatDate, formatTime} from '@/PublicUtil/PublicUtil'
import api from '@/views/Featurematching/api'
import ResultDisplay from '@/component/ResultDisplay/ResultDisplay'
export default {
components: {
ResultDisplay,
},
setup() {
const resultList = ref([])
// sequence
const accountList = ref([])
const plazaList = ref([])
const isLoading = ref(false)
const queryForm = reactive(
{
account_id: [],
plaza_id: [],
picType: '1',
countdate: moment(moment().format('YYYY-MM-DD'), 'YYYY-MM-DD'),
customScore:75,
feature:''
}
)
const fileList = ([]);
const fileName = ref('')
const beforeUpload= function(file) {
fileName.value = file.name
fileList.value = file;
return false;
};
const handleRemove=function(file) {
const index = fileList.value.indexOf(file);
const newFileList = fileList.value.slice();
newFileList.splice(index, 1);
fileList.value = newFileList;
};
const onAccountChange = function() {
getPlazaList()
}
const getPlazaList = function() {
queryForm.plaza_id = []
plazaList.value = []
snapshotRecordApi.getPlazaList(
{
account_id: queryForm.account_id.toString()
}
).then(
(r) => {
if (isArray(r))
{
for (const item of r)
{
plazaList.value.push(
{
value: item.id,
label: item.name,
}
)
}
}
}
)
}
const getAccountList = function() {
queryForm.account_id = []
accountList.value = []
snapshotRecordApi.getAccountList().then(
(r) => {
if (isArray(r))
{
for (const item of r)
{
accountList.value.push(
{
value: item.id,
label: item.name,
}
)
}
}
}
)
}
const queryData = function() {
const rawData = toRaw(queryForm)
isLoading.value= true
// const data = {
// plaza_id: rawData.plaza_id,
// feature: rawData.feature,
// pic_type : rawData.picType,
// countdate: moment(rawData.countdate).format('YYYY-MM-DD'),
// ip:window._baseImgUrl,
// customScore:rawData.customScore
// }
const formData = new FormData();
formData.append('featureFile',fileList.value)
formData.append('plaza_id',rawData.plaza_id)
formData.append('pic_type',rawData.picType)
formData.append('countdate',moment(rawData.countdate).format('YYYY-MM-DD'))
formData.append('ip',window._baseImgUrl)
formData.append('customScore',rawData.customScore)
api.getFindByFeature(formData).then((r) => {
if(r.msg_code==200 ){
if(r.data && r.data.length>0){
r.data.forEach(item=>{
if (item.picture_url) {
item.picture_url = window._baseImgUrl + item.picture_url
}
})
resultList.value = r.data
}
}else{
ElMessage({
message: r.msg_info,
type: 'warning'
});
}
isLoading.value= false
}
)
}
const __main = function() {
getAccountList()
}
__main()
return {
// sequence
accountList,
plazaList,
resultList,
fileList,
queryForm,
fileName,
onAccountChange,
queryData,
beforeUpload,
handleRemove,
isLoading
}
}
}
</script>
<style scoped>
.single-image{
width: 200px;
height: 300px;
}
.itemBox{
position: relative;
margin: 0 5px;
cursor: pointer;
}
.featureNum{
position: absolute;
top: 25px;
left: 15px;
color: red;
font-weight: 900;
font-size: 16px;
}
</style>
import axiosInstance from "@/Request/PublicAxiosInstance"
class FeatureResultApi {
getFindByFeature(data) {
return axiosInstance.request(
{
method: 'POST',
url: `/feature/findByFeature`,
data: data
}
)
}
}
const featureResultApi = new FeatureResultApi()
export default featureResultApi
\ No newline at end of file \ No newline at end of file
...@@ -97,6 +97,13 @@ ...@@ -97,6 +97,13 @@
<span style="padding: 0 5px">设备数据重传</span> <span style="padding: 0 5px">设备数据重传</span>
</div> </div>
</a-menu-item> </a-menu-item>
<a-menu-item :key="'/Main/Featurematching'">
<div class="flex-vertical-center">
<img :src="require('./Icons/2.svg')" style="height: auto;width:20px"/>
<span style="padding: 0 5px">特征匹配</span>
</div>
</a-menu-item>
</a-menu> </a-menu>
</el-aside> </el-aside>
<el-main> <el-main>
......
...@@ -96,7 +96,7 @@ ...@@ -96,7 +96,7 @@
<a-input v-model:value="queryForm.maxPic" style="width: 129px"/> <a-input v-model:value="queryForm.maxPic" style="width: 129px"/>
</a-form-item> </a-form-item>
<a-form-item style="padding: 5px 0"> <a-form-item style="padding: 5px 0">
<a-button type="primary" @click="confirmSearch" :loading="isLoading">查询</a-button> <a-button type="primary" @click="clickSearch" :loading="isLoading">查询</a-button>
</a-form-item> </a-form-item>
<a-form-item style="padding: 5px 0"> <a-form-item style="padding: 5px 0">
<a-button type="primary" @click="comparativeFun">特征对比</a-button> <a-button type="primary" @click="comparativeFun">特征对比</a-button>
...@@ -396,7 +396,10 @@ export default { ...@@ -396,7 +396,10 @@ export default {
} }
) )
} }
const clickSearch = function() {
pageNum.value = 1
confirmSearch()
}
const confirmSearch = function() { const confirmSearch = function() {
isLoading.value = true isLoading.value = true
const rawData = toRaw(queryForm) const rawData = toRaw(queryForm)
...@@ -456,6 +459,7 @@ export default { ...@@ -456,6 +459,7 @@ export default {
}) })
dataList.value = r.data.persons dataList.value = r.data.persons
total.value = r.data.pageNum total.value = r.data.pageNum
document.getElementsByClassName('resultContent')[0].scrollTop = 0
} }
) )
} }
...@@ -678,6 +682,7 @@ export default { ...@@ -678,6 +682,7 @@ export default {
singleComparativeFun, singleComparativeFun,
formatGender, formatGender,
downloadTrajectoryFile, downloadTrajectoryFile,
clickSearch,
// ref // ref
// imgModelRef, // imgModelRef,
DetailDialogRef, DetailDialogRef,
......
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
<a-time-picker v-model:value="queryForm.endTime" style="width: 140px"/> <a-time-picker v-model:value="queryForm.endTime" style="width: 140px"/>
</a-form-item> </a-form-item>
<a-form-item style="padding: 5px 0"> <a-form-item style="padding: 5px 0">
<a-button type="primary" @click="confirmSearch" :loading="isLoading">查询</a-button> <a-button type="primary" @click="clickSearch" :loading="isLoading">查询</a-button>
</a-form-item> </a-form-item>
<a-form-item style="padding: 5px 0"> <a-form-item style="padding: 5px 0">
<a-button type="primary" @click="comparativeFun">特征对比验证</a-button> <a-button type="primary" @click="comparativeFun">特征对比验证</a-button>
...@@ -416,6 +416,7 @@ export default { ...@@ -416,6 +416,7 @@ export default {
}) })
dataList.value = r.data.persons dataList.value = r.data.persons
total.value = r.data.pageNum total.value = r.data.pageNum
document.getElementsByClassName('resultContent')[0].scrollTop = 0
} }
) )
} }
...@@ -498,6 +499,10 @@ export default { ...@@ -498,6 +499,10 @@ export default {
} }
DetailDialogRef.value.initDialog(currobj.value,parmas); DetailDialogRef.value.initDialog(currobj.value,parmas);
} }
const clickSearch = function() {
pageNum.value = 1
confirmSearch()
}
const contentHeight = ref(0) const contentHeight = ref(0)
const __main = function() { const __main = function() {
getAccountList() getAccountList()
...@@ -536,6 +541,7 @@ export default { ...@@ -536,6 +541,7 @@ export default {
handleClick, handleClick,
comparativeFun, comparativeFun,
formatGender, formatGender,
clickSearch,
// ref // ref
DetailDialogRef, DetailDialogRef,
imgModelRef imgModelRef
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!