|
|
|
@ -109,7 +109,7 @@ function reset() {
|
|
|
|
|
loading.value = false
|
|
|
|
|
canloadMore = true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
console.log(listData)
|
|
|
|
|
async function refreshHandler() {
|
|
|
|
|
reset()
|
|
|
|
|
|
|
|
|
@ -250,10 +250,11 @@ const propertys = computed(() => {
|
|
|
|
|
return v
|
|
|
|
|
})
|
|
|
|
|
function overTaskHandelr(item: any) {
|
|
|
|
|
if (item?.historyStates === 2 || item?.historyStates == 3) {
|
|
|
|
|
overTask.value = null
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
// console.log(item, 'item')
|
|
|
|
|
// if (item?.historyStates === 2 || item?.historyStates == 3) {
|
|
|
|
|
// overTask.value = null
|
|
|
|
|
// return
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
if (validate([item]) == null && batch.value === false)
|
|
|
|
|
overTask.value = item
|
|
|
|
@ -614,140 +615,139 @@ defineExpose({
|
|
|
|
|
<SvgIcon v-if="[1].includes(taskDetailInfo.historyStates)" style="cursor: pointer; margin-left: 30px" name="t2" @click.stop="handleRejectMainImage" />
|
|
|
|
|
<SvgIcon v-if="[1, 2, 3].includes(taskDetailInfo.historyStates)" style="cursor: pointer; margin-left: 30px" name="t9" @click.stop="handleRejectdubiousfileyd" />
|
|
|
|
|
</div>
|
|
|
|
|
<PictureInfo :task-detail-info="taskDetailInfo" />
|
|
|
|
|
</div>
|
|
|
|
|
<PictureInfo :task-detail-info="taskDetailInfo" />
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
style="display: flex; justify-content: space-between; padding: 12px 0px 3px 0"
|
|
|
|
|
>
|
|
|
|
|
<div>
|
|
|
|
|
<span
|
|
|
|
|
style="font-size: 18px; font-weight: Medium;color: #333333;font-family: PingFang SC, PingFang SC-Medium;"
|
|
|
|
|
>任务包图片</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
style="display: flex; justify-content: space-between; padding: 12px 0px 3px 0"
|
|
|
|
|
>
|
|
|
|
|
<div>
|
|
|
|
|
<span
|
|
|
|
|
style="font-size: 18px; font-weight: Medium;color: #333333;font-family: PingFang SC, PingFang SC-Medium;"
|
|
|
|
|
>任务包图片</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
style="
|
|
|
|
|
style="
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
margin-right: 25px;
|
|
|
|
|
color: #323233;
|
|
|
|
|
"
|
|
|
|
|
>
|
|
|
|
|
<div style="cursor: pointer" @click="sortHandler('createdate')">
|
|
|
|
|
<span>时间排序</span>
|
|
|
|
|
<SvgIcon
|
|
|
|
|
v-show="selectedSortName !== 'createdate'"
|
|
|
|
|
style="margin-left: 5px"
|
|
|
|
|
name="sort"
|
|
|
|
|
size="12"
|
|
|
|
|
/>
|
|
|
|
|
<SvgIcon
|
|
|
|
|
v-show="selectedSortName === 'createdate'"
|
|
|
|
|
style="margin-left: 5px"
|
|
|
|
|
name="active-sort"
|
|
|
|
|
size="12"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
style="margin-left: 15px; cursor: pointer"
|
|
|
|
|
@click="sortHandler('similarityScore')"
|
|
|
|
|
>
|
|
|
|
|
<span>相似度排序</span>
|
|
|
|
|
<SvgIcon
|
|
|
|
|
v-show="selectedSortName !== 'similarityScore'"
|
|
|
|
|
style="margin-left: 5px"
|
|
|
|
|
name="sort"
|
|
|
|
|
size="12"
|
|
|
|
|
/>
|
|
|
|
|
<SvgIcon
|
|
|
|
|
v-show="selectedSortName === 'similarityScore'"
|
|
|
|
|
style="margin-left: 5px"
|
|
|
|
|
name="active-sort"
|
|
|
|
|
size="12"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
>
|
|
|
|
|
<div style="cursor: pointer" @click="sortHandler('createdate')">
|
|
|
|
|
<span>时间排序</span>
|
|
|
|
|
<SvgIcon
|
|
|
|
|
v-show="selectedSortName !== 'createdate'"
|
|
|
|
|
style="margin-left: 5px"
|
|
|
|
|
name="sort"
|
|
|
|
|
size="12"
|
|
|
|
|
/>
|
|
|
|
|
<SvgIcon
|
|
|
|
|
v-show="selectedSortName === 'createdate'"
|
|
|
|
|
style="margin-left: 5px"
|
|
|
|
|
name="active-sort"
|
|
|
|
|
size="12"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="wrapper-list">
|
|
|
|
|
<div
|
|
|
|
|
v-for="(item, index) in listData"
|
|
|
|
|
:key="index"
|
|
|
|
|
:class="{ 'item-selected': item === selectTask }"
|
|
|
|
|
class="grid-item"
|
|
|
|
|
@click="handleSelect(item)"
|
|
|
|
|
@mouseover="overTaskHandelr(item)"
|
|
|
|
|
@mouseleave="leaveTaskHandler"
|
|
|
|
|
style="margin-left: 15px; cursor: pointer"
|
|
|
|
|
@click="sortHandler('similarityScore')"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
class="img-wrapper"
|
|
|
|
|
:style="{ 'background-image': `url(${item.imgurl})` }"
|
|
|
|
|
<span>相似度排序</span>
|
|
|
|
|
<SvgIcon
|
|
|
|
|
v-show="selectedSortName !== 'similarityScore'"
|
|
|
|
|
style="margin-left: 5px"
|
|
|
|
|
name="sort"
|
|
|
|
|
size="12"
|
|
|
|
|
/>
|
|
|
|
|
<div class="time-wrapper">
|
|
|
|
|
<div class="time">
|
|
|
|
|
<SvgIcon color="#FFF" size="16" name="camera" />
|
|
|
|
|
<span class="current-time">{{
|
|
|
|
|
item.photoDateTimestamp
|
|
|
|
|
? formatToDateHMS(Number(item.photoDateTimestamp) || 0)
|
|
|
|
|
: "-"
|
|
|
|
|
}}</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="time">
|
|
|
|
|
<SvgIcon color="#FFF" size="16" name="save" />
|
|
|
|
|
<span class="current-time">{{
|
|
|
|
|
item.submitDateTimestamp
|
|
|
|
|
? formatToDateHMS(Number(item.submitDateTimestamp) || 0)
|
|
|
|
|
: "-"
|
|
|
|
|
}}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="check">
|
|
|
|
|
<n-checkbox
|
|
|
|
|
v-show="batch && item.historyStates !== 2 && item.historyStates !== 3"
|
|
|
|
|
v-model:checked="item.checked"
|
|
|
|
|
@click.stop
|
|
|
|
|
@update:checked="onCheckChange($event, item)"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="percent" :class="{ 'percent-red': item?.maxSimilarity >= 100 }">
|
|
|
|
|
<SvgIcon size="42" :name="item.maxSimilarity == 100 ? 'error_tag' : 'tag'" />
|
|
|
|
|
<div class="val">
|
|
|
|
|
{{ item?.maxSimilarity && Number(item?.maxSimilarity).toFixed(0)
|
|
|
|
|
}}<span class="percent-unit">%</span>
|
|
|
|
|
</div>
|
|
|
|
|
<SvgIcon
|
|
|
|
|
v-show="selectedSortName === 'similarityScore'"
|
|
|
|
|
style="margin-left: 5px"
|
|
|
|
|
name="active-sort"
|
|
|
|
|
size="12"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="wrapper-list">
|
|
|
|
|
<div
|
|
|
|
|
v-for="(item, index) in listData"
|
|
|
|
|
:key="index"
|
|
|
|
|
:class="{ 'item-selected': item === selectTask }"
|
|
|
|
|
class="grid-item"
|
|
|
|
|
@click="handleSelect(item)"
|
|
|
|
|
@mouseover="overTaskHandelr(item)"
|
|
|
|
|
@mouseleave="leaveTaskHandler"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
class="img-wrapper"
|
|
|
|
|
:style="{ 'background-image': `url(${item.imgurl})` }"
|
|
|
|
|
/>
|
|
|
|
|
<div class="time-wrapper">
|
|
|
|
|
<div class="time">
|
|
|
|
|
<SvgIcon color="#FFF" size="16" name="camera" />
|
|
|
|
|
<span class="current-time">{{
|
|
|
|
|
item.photoDateTimestamp
|
|
|
|
|
? formatToDateHMS(Number(item.photoDateTimestamp) || 0)
|
|
|
|
|
: "-"
|
|
|
|
|
}}</span>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div v-if="item.historyStates === 2" class="pass-status">
|
|
|
|
|
<SvgIcon name="pass-icon" style="width: 52; height: 24px" />
|
|
|
|
|
<div class="time">
|
|
|
|
|
<SvgIcon color="#FFF" size="16" name="save" />
|
|
|
|
|
<span class="current-time">{{
|
|
|
|
|
item.submitDateTimestamp
|
|
|
|
|
? formatToDateHMS(Number(item.submitDateTimestamp) || 0)
|
|
|
|
|
: "-"
|
|
|
|
|
}}</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else-if="item.historyStates === 3" class="pass-status">
|
|
|
|
|
<SvgIcon name="no-pass-icon" style="width: 52; height: 24px" />
|
|
|
|
|
</div>
|
|
|
|
|
<div class="check">
|
|
|
|
|
<n-checkbox
|
|
|
|
|
v-show="batch && item.historyStates !== 2 && item.historyStates !== 3"
|
|
|
|
|
v-model:checked="item.checked"
|
|
|
|
|
@click.stop
|
|
|
|
|
@update:checked="onCheckChange($event, item)"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="percent" :class="{ 'percent-red': item?.maxSimilarity >= 100 }">
|
|
|
|
|
<SvgIcon size="42" :name="item.maxSimilarity == 100 ? 'error_tag' : 'tag'" />
|
|
|
|
|
<div class="val">
|
|
|
|
|
{{ item?.maxSimilarity && Number(item?.maxSimilarity).toFixed(0)
|
|
|
|
|
}}<span class="percent-unit">%</span>
|
|
|
|
|
</div>
|
|
|
|
|
<SvgIcon v-if="[1, 2, 3].includes(taskDetailInfo.historyStates)" style="cursor: pointer; margin-left: 30px" name="t9" @click.stop="handleRejectdubiousfileyd" />
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="item.historyStates === 2" class="pass-status">
|
|
|
|
|
<SvgIcon name="pass-icon" style="width: 52; height: 24px" />
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else-if="item.historyStates === 3" class="pass-status">
|
|
|
|
|
<SvgIcon name="no-pass-icon" style="width: 52; height: 24px" />
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div v-show="overTask && overTask.id === item.id" class="action">
|
|
|
|
|
<SvgIcon style="cursor: pointer" name="t1" @click.stop="approvalHandler" />
|
|
|
|
|
<SvgIcon
|
|
|
|
|
style="cursor: pointer; margin-left: 40px"
|
|
|
|
|
name="t2"
|
|
|
|
|
@click.stop="singleRejectHandler(item)"
|
|
|
|
|
/>
|
|
|
|
|
<SvgIcon v-if="[1, 2, 3].includes(taskDetailInfo.historyStates)" style="cursor: pointer; margin-left: 30px" name="t9" @click.stop="handleRejectdubiousfileyd" />
|
|
|
|
|
</div>
|
|
|
|
|
<div v-show="overTask && overTask.id === item.id" class="action">
|
|
|
|
|
<SvgIcon v-if="item.historyStates === 1" style="cursor: pointer" name="t1" @click.stop="approvalHandler" />
|
|
|
|
|
<SvgIcon
|
|
|
|
|
v-if="[1, 3].includes(item.historyStates)"
|
|
|
|
|
style="cursor: pointer; margin-left: 40px"
|
|
|
|
|
name="t2"
|
|
|
|
|
@click.stop="singleRejectHandler(item)"
|
|
|
|
|
/>
|
|
|
|
|
<SvgIcon style="cursor: pointer; margin-left: 30px" name="t9" @click.stop="handleRejectdubiousfileyd" />
|
|
|
|
|
</div>
|
|
|
|
|
<n-back-top :listen-to="wrapperListRef" :bottom="220" :visibility-height="10">
|
|
|
|
|
<div
|
|
|
|
|
style="
|
|
|
|
|
</div>
|
|
|
|
|
<n-back-top :listen-to="wrapperListRef" :bottom="220" :visibility-height="10">
|
|
|
|
|
<div
|
|
|
|
|
style="
|
|
|
|
|
width: 100px;
|
|
|
|
|
height: 40px;
|
|
|
|
|
line-height: 40px;
|
|
|
|
|
text-align: center;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
"
|
|
|
|
|
>
|
|
|
|
|
回到顶部
|
|
|
|
|
</div>
|
|
|
|
|
</n-back-top>
|
|
|
|
|
</div>
|
|
|
|
|
>
|
|
|
|
|
回到顶部
|
|
|
|
|
</div>
|
|
|
|
|
</n-back-top>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</n-spin>
|
|
|
|
|