|
|
|
@ -1,21 +1,4 @@
|
|
|
|
|
<script lang="ts" setup>
|
|
|
|
|
import {
|
|
|
|
|
createPackage,
|
|
|
|
|
getCheckDuplicateStatus,
|
|
|
|
|
getLastCheckNo,
|
|
|
|
|
getPictureList,
|
|
|
|
|
oneClickCheckTaskPackage,
|
|
|
|
|
queryPageListByCheckNo,
|
|
|
|
|
removeCheckDuplicate,
|
|
|
|
|
} from "@/api/home/main";
|
|
|
|
|
import avatar from "@/assets/images/avatar.jpg";
|
|
|
|
|
import { timeOptions, viewOptions } from "@/config/home";
|
|
|
|
|
import { useWindowSizeFn } from "@/hooks/event/useWindowSizeFn";
|
|
|
|
|
import { useConfig } from "@/store/modules/asideConfig";
|
|
|
|
|
import { getViewportOffset } from "@/utils/domUtils";
|
|
|
|
|
import { hideDownload } from "@/utils/image";
|
|
|
|
|
import emitter from "@/utils/mitt";
|
|
|
|
|
import { getImgUrl } from "@/utils/urlUtils";
|
|
|
|
|
import { EllipsisHorizontal, EyeOutline as EyeOutlineIcon } from "@vicons/ionicons5";
|
|
|
|
|
import { Download as DownloadIcon, Upload as UploadIcon } from "@vicons/tabler";
|
|
|
|
|
import { Icon } from "@vicons/utils";
|
|
|
|
@ -38,6 +21,7 @@ import {
|
|
|
|
|
unref,
|
|
|
|
|
watch,
|
|
|
|
|
} from "vue";
|
|
|
|
|
import axios from "axios";
|
|
|
|
|
import CheckingTaskModal from "./modal/CheckingTaskModal.vue";
|
|
|
|
|
import FinishPackageModal from "./modal/FinishPackageModal.vue";
|
|
|
|
|
import GeneratePackageModal from "./modal/GeneratePackageModal.vue";
|
|
|
|
@ -47,8 +31,27 @@ import QueryRepeatedTasksModal from "./modal/QueryRepeatedTasksModal.vue";
|
|
|
|
|
import type { PictureSortParam } from "/#/api";
|
|
|
|
|
import defaultAvatar from "@/assets/icons/avatar.svg";
|
|
|
|
|
import baseImg from "@/assets/images/baseImg.png";
|
|
|
|
|
import axios from "axios";
|
|
|
|
|
import { getImgUrl } from "@/utils/urlUtils";
|
|
|
|
|
import emitter from "@/utils/mitt";
|
|
|
|
|
import { hideDownload } from "@/utils/image";
|
|
|
|
|
import { getViewportOffset } from "@/utils/domUtils";
|
|
|
|
|
import { useConfig } from "@/store/modules/asideConfig";
|
|
|
|
|
import { useWindowSizeFn } from "@/hooks/event/useWindowSizeFn";
|
|
|
|
|
import { timeOptions, viewOptions } from "@/config/home";
|
|
|
|
|
import avatar from "@/assets/images/avatar.jpg";
|
|
|
|
|
import {
|
|
|
|
|
createPackage,
|
|
|
|
|
getCheckDuplicateStatus,
|
|
|
|
|
getLastCheckNo,
|
|
|
|
|
getPictureList,
|
|
|
|
|
oneClickCheckTaskPackage,
|
|
|
|
|
queryPageListByCheckNo,
|
|
|
|
|
removeCheckDuplicate,
|
|
|
|
|
} from "@/api/home/main";
|
|
|
|
|
|
|
|
|
|
const listData = ref<any[]>([]);
|
|
|
|
|
const timer = ref();
|
|
|
|
|
const showClose = ref(false);
|
|
|
|
|
const deviceHeight = ref(600);
|
|
|
|
|
let _masonry: null | Masonry = null;
|
|
|
|
|
let _imagesload: any;
|
|
|
|
@ -97,9 +100,11 @@ const listStyle = computed(() => {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const layout = debounce(() => {
|
|
|
|
|
if (masonryRef.value == null || el.value == null) return;
|
|
|
|
|
if (masonryRef.value == null || el.value == null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (_masonry !== null) (_masonry as any).addItems();
|
|
|
|
|
if (_masonry !== null)
|
|
|
|
|
(_masonry as any).addItems();
|
|
|
|
|
|
|
|
|
|
_masonry = new Masonry(masonryRef.value as any, {
|
|
|
|
|
itemSelector: ".grid-item",
|
|
|
|
@ -113,7 +118,8 @@ const layout = debounce(() => {
|
|
|
|
|
|
|
|
|
|
_imagesload.on("done", (instance) => {
|
|
|
|
|
(_masonry as any).layout();
|
|
|
|
|
if (!el.value) return;
|
|
|
|
|
if (!el.value)
|
|
|
|
|
return;
|
|
|
|
|
loading.value = false;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
@ -128,7 +134,7 @@ useInfiniteScroll(
|
|
|
|
|
() => {
|
|
|
|
|
loadMore();
|
|
|
|
|
},
|
|
|
|
|
{ distance: 10, canLoadMore: () => canloadMore }
|
|
|
|
|
{ distance: 10, canLoadMore: () => canloadMore },
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
onUpdated(() => {
|
|
|
|
@ -152,8 +158,8 @@ const viewLabel = computed(() => {
|
|
|
|
|
return item?.label;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
let isAllowDownload = ref(true);
|
|
|
|
|
let calNum = ref(0);
|
|
|
|
|
const isAllowDownload = ref(true);
|
|
|
|
|
const calNum = ref(0);
|
|
|
|
|
const searchValue = ref("");
|
|
|
|
|
const isInitSeaerch = ref(false); // 是否初始化搜索
|
|
|
|
|
|
|
|
|
@ -176,18 +182,17 @@ watch(
|
|
|
|
|
listData.value = more;
|
|
|
|
|
isInitSeaerch.value = false;
|
|
|
|
|
// configStore.setSearchValue("");
|
|
|
|
|
} else {
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
isInitSeaerch.value = true;
|
|
|
|
|
pagination.pageNo = 0;
|
|
|
|
|
const more = await featchList();
|
|
|
|
|
listData.value = more;
|
|
|
|
|
isInitSeaerch.value = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const listData = ref<any[]>([]);
|
|
|
|
|
|
|
|
|
|
async function featchList(userSearchId?: string) {
|
|
|
|
|
loading.value = true;
|
|
|
|
|
try {
|
|
|
|
@ -206,15 +211,15 @@ async function featchList(userSearchId?: string) {
|
|
|
|
|
data: [],
|
|
|
|
|
total: 0,
|
|
|
|
|
};
|
|
|
|
|
let sortObj: any = {}; // rao start
|
|
|
|
|
if (sortBy.orderbyvalue == "pictureResult") {
|
|
|
|
|
const sortObj: any = {}; // rao start
|
|
|
|
|
if (sortBy.orderbyvalue == "pictureResult")
|
|
|
|
|
sortObj.ordertype = sortBy.orderbyname;
|
|
|
|
|
} else if (sortBy.orderbyvalue == "fromuptime") {
|
|
|
|
|
else if (sortBy.orderbyvalue == "fromuptime")
|
|
|
|
|
sortObj.orderByTime = sortBy.orderbyname;
|
|
|
|
|
}
|
|
|
|
|
if (params["izsimilarity"] && typeof params["izsimilarity"] != "string") {
|
|
|
|
|
params["izsimilarity"] = params["izsimilarity"].join("-");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (params.izsimilarity && typeof params.izsimilarity != "string")
|
|
|
|
|
params.izsimilarity = params.izsimilarity.join("-");
|
|
|
|
|
|
|
|
|
|
// rao end
|
|
|
|
|
|
|
|
|
|
if (checkTaskStatus.value === 2 && isRefresh) {
|
|
|
|
@ -226,7 +231,8 @@ async function featchList(userSearchId?: string) {
|
|
|
|
|
checkDuplicateNo: checkDuplicateNo.value,
|
|
|
|
|
upUserName: searchValue,
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
result = await getPictureList({
|
|
|
|
|
...pagination,
|
|
|
|
|
...contentParams,
|
|
|
|
@ -253,14 +259,16 @@ async function featchList(userSearchId?: string) {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return list;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
}
|
|
|
|
|
catch (error) {
|
|
|
|
|
canloadMore = false;
|
|
|
|
|
return [];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function loadMore() {
|
|
|
|
|
if (loading.value || el.value == null) return;
|
|
|
|
|
if (loading.value || el.value == null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
const more = await featchList();
|
|
|
|
|
// if(isInitSeaerch.value) {
|
|
|
|
@ -272,15 +280,15 @@ async function loadMore() {
|
|
|
|
|
|
|
|
|
|
const gridHeight = computed(() => {
|
|
|
|
|
let height = "";
|
|
|
|
|
if (viewMode.value === "masonry") {
|
|
|
|
|
if (viewMode.value === "masonry")
|
|
|
|
|
height = "";
|
|
|
|
|
} else if (viewMode.value === "horizontalVersion") {
|
|
|
|
|
else if (viewMode.value === "horizontalVersion")
|
|
|
|
|
height = "145px";
|
|
|
|
|
} else if (viewMode.value === "verticalVersion") {
|
|
|
|
|
else if (viewMode.value === "verticalVersion")
|
|
|
|
|
height = "300px";
|
|
|
|
|
} else if (viewMode.value === "3:4") {
|
|
|
|
|
else if (viewMode.value === "3:4")
|
|
|
|
|
height = "240px";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return height;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
@ -290,52 +298,53 @@ async function oneCheck() {
|
|
|
|
|
console.log("searchValue", asideVal, searchValue.value);
|
|
|
|
|
|
|
|
|
|
if (asideVal.izyear && asideVal.izyear.length == 2) {
|
|
|
|
|
asideVal.izyear =
|
|
|
|
|
dayjs(asideVal.izyear[0]).format("YYYY/MM/DD") +
|
|
|
|
|
"-" +
|
|
|
|
|
dayjs(asideVal.izyear[1]).format("YYYY/MM/DD");
|
|
|
|
|
}
|
|
|
|
|
if (asideVal["izsimilarity"] && typeof asideVal["izsimilarity"] != "string") {
|
|
|
|
|
asideVal["izsimilarity"] = asideVal["izsimilarity"].join("-");
|
|
|
|
|
asideVal.izyear
|
|
|
|
|
= `${dayjs(asideVal.izyear[0]).format("YYYY/MM/DD")
|
|
|
|
|
}-${
|
|
|
|
|
dayjs(asideVal.izyear[1]).format("YYYY/MM/DD")}`;
|
|
|
|
|
}
|
|
|
|
|
if (asideVal.izsimilarity && typeof asideVal.izsimilarity != "string")
|
|
|
|
|
asideVal.izsimilarity = asideVal.izsimilarity.join("-");
|
|
|
|
|
|
|
|
|
|
const tasksLoadingModal = queryRepeatedTasksModalRef.value as any;
|
|
|
|
|
|
|
|
|
|
console.log("calNum.value111111111111111", calNum.value, checkTaskStatus.value);
|
|
|
|
|
if (calNum.value == 0 && isRefresh.value) {
|
|
|
|
|
if (timer.value) {
|
|
|
|
|
if (timer.value)
|
|
|
|
|
clearInterval(timer.value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
timer.value = setInterval(() => {
|
|
|
|
|
console.log("calNum.value2222222222222", calNum.value, checkTaskStatus.value);
|
|
|
|
|
if (checkDuplicateNo.value) {
|
|
|
|
|
getCheckDuplicateStatus(checkDuplicateNo.value).then((res) => {
|
|
|
|
|
if (res.code === "OK") {
|
|
|
|
|
checkTaskStatus.value = res.data.status;
|
|
|
|
|
if (calNum.value < 90) {
|
|
|
|
|
if (calNum.value < 90)
|
|
|
|
|
calNum.value = calNum.value + 10;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
configStore.setTimeNum(calNum.value);
|
|
|
|
|
if (checkTaskStatus.value === 2 || checkTaskStatus.value === 3) {
|
|
|
|
|
if (checkTaskStatus.value === 2) {
|
|
|
|
|
if (checkTaskStatus.value === 2)
|
|
|
|
|
message.success("任务执行完毕,正在刷新数据...");
|
|
|
|
|
} else {
|
|
|
|
|
else
|
|
|
|
|
message.error("查询异常");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tasksLoadingModal.closeOnlyModal();
|
|
|
|
|
configStore.setTimeNum(100);
|
|
|
|
|
if (timer.value) {
|
|
|
|
|
if (timer.value)
|
|
|
|
|
clearInterval(timer.value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
configStore.setTimeNum(0);
|
|
|
|
|
}, 1000);
|
|
|
|
|
reset();
|
|
|
|
|
loadMore();
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (timer.value) {
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
if (timer.value)
|
|
|
|
|
clearInterval(timer.value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
@ -347,13 +356,14 @@ async function oneCheck() {
|
|
|
|
|
tasksLoadingModal.showModal();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
//调用查重任务开启流程
|
|
|
|
|
// 调用查重任务开启流程
|
|
|
|
|
oneClickCheckTaskPackage(asideVal).then((res) => {
|
|
|
|
|
if (res.code === "OK") {
|
|
|
|
|
checkDuplicateNo.value = res.data.checkDuplicateNo;
|
|
|
|
|
checkTaskStatus.value = res.data.status;
|
|
|
|
|
tasksLoadingModal.showModal(); // 暂时rao
|
|
|
|
|
} else {
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
message.error(res.message || "查重失败");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
@ -367,13 +377,13 @@ async function showAddPackage() {
|
|
|
|
|
modal.showModal();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//查重任务加载提示框,关闭回调
|
|
|
|
|
// 查重任务加载提示框,关闭回调
|
|
|
|
|
async function tasksLoadingCloseCallback() {
|
|
|
|
|
const checkingTaskModal = checkingTaskModalRef.value as any;
|
|
|
|
|
checkingTaskModal.showModal();
|
|
|
|
|
if (isRefresh.value) {
|
|
|
|
|
if (isRefresh.value)
|
|
|
|
|
refresh(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function showLoginSuccessModal() {
|
|
|
|
@ -398,7 +408,7 @@ async function commitHandler(settingParam) {
|
|
|
|
|
packageIdRef.value = res.data.id;
|
|
|
|
|
modal.closeModal();
|
|
|
|
|
finishModal.showModal();
|
|
|
|
|
//清空查重任务状态和编号
|
|
|
|
|
// 清空查重任务状态和编号
|
|
|
|
|
checkDuplicateNo.value = "";
|
|
|
|
|
checkTaskStatus.value = null;
|
|
|
|
|
}
|
|
|
|
@ -418,9 +428,9 @@ onMounted(() => {
|
|
|
|
|
// });
|
|
|
|
|
// 一件键重——获取任务编号
|
|
|
|
|
getLastCheckNo().then((res) => {
|
|
|
|
|
if (res.code === "OK") {
|
|
|
|
|
if (res.code === "OK")
|
|
|
|
|
checkDuplicateNo.value = res.data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
nextTick(() => {
|
|
|
|
|
computeListHeight();
|
|
|
|
@ -442,7 +452,7 @@ watch(
|
|
|
|
|
(newVal, oldVal) => {
|
|
|
|
|
refreshHandler();
|
|
|
|
|
},
|
|
|
|
|
{ deep: true }
|
|
|
|
|
{ deep: true },
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
function reset() {
|
|
|
|
@ -459,7 +469,8 @@ function reset() {
|
|
|
|
|
async function refreshHandler(filtersearchId?: any) {
|
|
|
|
|
reset();
|
|
|
|
|
|
|
|
|
|
if (filtersearchId) filterId = filtersearchId;
|
|
|
|
|
if (filtersearchId)
|
|
|
|
|
filterId = filtersearchId;
|
|
|
|
|
|
|
|
|
|
nextTick(() => {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
@ -468,7 +479,7 @@ async function refreshHandler(filtersearchId?: any) {
|
|
|
|
|
() => {
|
|
|
|
|
loadMore();
|
|
|
|
|
},
|
|
|
|
|
{ distance: 10, canLoadMore: () => canloadMore }
|
|
|
|
|
{ distance: 10, canLoadMore: () => canloadMore },
|
|
|
|
|
);
|
|
|
|
|
}, 300);
|
|
|
|
|
});
|
|
|
|
@ -497,9 +508,8 @@ async function downloadImage(item) {
|
|
|
|
|
cache: "default",
|
|
|
|
|
});
|
|
|
|
|
// 检查响应状态码,确保请求成功
|
|
|
|
|
if (!response.ok) {
|
|
|
|
|
if (!response.ok)
|
|
|
|
|
throw new Error(`HTTP error! Status: ${response.status}`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 读取 Blob 数据
|
|
|
|
|
const blob = await response.blob();
|
|
|
|
@ -519,7 +529,8 @@ async function downloadImage(item) {
|
|
|
|
|
// 清理
|
|
|
|
|
URL.revokeObjectURL(link.href);
|
|
|
|
|
document.body.removeChild(link);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
}
|
|
|
|
|
catch (error) {
|
|
|
|
|
console.error("下载图片时发生错误:", error);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -532,8 +543,6 @@ function previewHandler(index: number, event: MouseEvent) {
|
|
|
|
|
(imageRef.value?.[index] as any).click();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const timer = ref();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 检查查重状态
|
|
|
|
|
*/
|
|
|
|
@ -551,35 +560,36 @@ function refresh(val?: any) {
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
(checkTaskStatus.value === 2 || checkTaskStatus.value === 3) &&
|
|
|
|
|
isRefresh.value
|
|
|
|
|
(checkTaskStatus.value === 2 || checkTaskStatus.value === 3)
|
|
|
|
|
&& isRefresh.value
|
|
|
|
|
) {
|
|
|
|
|
configStore.setTimeNum(100);
|
|
|
|
|
checkingTaskModal.closeModal();
|
|
|
|
|
isRefresh.value = false;
|
|
|
|
|
if (checkTaskStatus.value === 2) {
|
|
|
|
|
if (checkTaskStatus.value === 2)
|
|
|
|
|
message.success("任务执行完毕,正在刷新数据...");
|
|
|
|
|
} else {
|
|
|
|
|
else
|
|
|
|
|
message.error("查询异常");
|
|
|
|
|
}
|
|
|
|
|
if (timer.value) {
|
|
|
|
|
|
|
|
|
|
if (timer.value)
|
|
|
|
|
clearInterval(timer.value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
reset();
|
|
|
|
|
loadMore();
|
|
|
|
|
configStore.setTimeNum(0);
|
|
|
|
|
} else if (checkTaskStatus.value === 1) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else if (checkTaskStatus.value === 1) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 取消查重任务
|
|
|
|
|
*/
|
|
|
|
|
function cancel(val) {
|
|
|
|
|
function cancel() {
|
|
|
|
|
if (checkTaskStatus.value === 1) {
|
|
|
|
|
removeCheckDuplicate(checkDuplicateNo.value).then((res) => {
|
|
|
|
|
if (res.code === "OK") {
|
|
|
|
@ -591,13 +601,13 @@ function cancel(val) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const renderIcon = (icon: Component) => {
|
|
|
|
|
function renderIcon(icon: Component) {
|
|
|
|
|
return () => {
|
|
|
|
|
return h(NIcon, null, {
|
|
|
|
|
default: () => h(icon),
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const dropdownOptions = ref([
|
|
|
|
|
{
|
|
|
|
@ -617,10 +627,10 @@ const dropdownOptions = ref([
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
const loadImgOver = (item) => {
|
|
|
|
|
function loadImgOver(item) {
|
|
|
|
|
console.log("loadImgOver", item);
|
|
|
|
|
setTimeout(() => (item.loadOver = true), 2000);
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
defineExpose({
|
|
|
|
|
showLoginSuccessModal,
|
|
|
|
@ -671,7 +681,7 @@ defineExpose({
|
|
|
|
|
<div class="dropdown">
|
|
|
|
|
<!-- <span>{{ viewLabel || '请选择' }}</span> -->
|
|
|
|
|
<span>视图</span>
|
|
|
|
|
<SvgIcon class="gap" name="arrow-botton" size="14" />
|
|
|
|
|
<SvgIcon class="gap" name="arrow-botton" size="16" />
|
|
|
|
|
</div>
|
|
|
|
|
</n-popselect>
|
|
|
|
|
<div
|
|
|
|
@ -679,21 +689,20 @@ defineExpose({
|
|
|
|
|
@click="sortHandler('fromuptime')"
|
|
|
|
|
>
|
|
|
|
|
<span>时间排序</span>
|
|
|
|
|
<SvgIcon style="margin-left: 8px" name="sort" size="12" />
|
|
|
|
|
<SvgIcon style="margin-left: 8px" name="sort" size="16" />
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
style="margin-left: 15px; cursor: pointer; color: #323233"
|
|
|
|
|
@click="sortHandler('pictureResult')"
|
|
|
|
|
>
|
|
|
|
|
<span>相似度排序</span>
|
|
|
|
|
<SvgIcon style="margin-left: 8px" name="sort" size="12" />
|
|
|
|
|
<SvgIcon style="margin-left: 8px" name="sort" size="16" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<span style="font-size: 16px; color: #333"
|
|
|
|
|
>共
|
|
|
|
|
<span style="color: #507afd; font-weight: 500">{{ totalCount }}</span> 项</span
|
|
|
|
|
>
|
|
|
|
|
<span style="font-size: 16px; color: #333">共
|
|
|
|
|
<span style="color: #507afd; font-weight: 500">{{ totalCount }}</span> 项</span>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<n-spin :show="loading">
|
|
|
|
|
<div ref="el" class="scroll" :style="listStyle">
|
|
|
|
|
<!-- <n-scrollbar :on-scroll="scrollHandler"> -->
|
|
|
|
@ -709,16 +718,22 @@ defineExpose({
|
|
|
|
|
class="wrapper-content-item-img" :class="{ 'wrapper-content-item-img-fit': viewMode !== 'masonry' }"
|
|
|
|
|
:src="item.imgUrl"
|
|
|
|
|
> -->
|
|
|
|
|
|
|
|
|
|
<n-image
|
|
|
|
|
ref="imageRef"
|
|
|
|
|
class="img"
|
|
|
|
|
:img-props="{ onClick: hideDownload }"
|
|
|
|
|
:img-props="{
|
|
|
|
|
onClick: ($event) => {
|
|
|
|
|
hideDownload($event);
|
|
|
|
|
showClose = true;
|
|
|
|
|
},
|
|
|
|
|
}"
|
|
|
|
|
:class="{
|
|
|
|
|
'img-fit': viewMode === 'horizontalVersion',
|
|
|
|
|
'img-full': viewMode === '3:4' || viewMode === 'verticalVersion',
|
|
|
|
|
}"
|
|
|
|
|
:preview-src="item.imgUrl"
|
|
|
|
|
:src="item.thumburl"
|
|
|
|
|
ref="imageRef"
|
|
|
|
|
/>
|
|
|
|
|
<!-- @load="loadImgOver(item)" -->
|
|
|
|
|
<!-- <n-image
|
|
|
|
@ -731,13 +746,13 @@ defineExpose({
|
|
|
|
|
v-show="!item.loadOver"
|
|
|
|
|
/> -->
|
|
|
|
|
|
|
|
|
|
<div class="percent" v-if="item.similar != -1">
|
|
|
|
|
<div v-if="item.similar != -1" class="percent">
|
|
|
|
|
<SvgIcon size="42" :name="item.similar == 100 ? 'error_tag' : 'tag'" />
|
|
|
|
|
<div class="val">
|
|
|
|
|
{{ `${item.similar}%` }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="glass" v-if="isAllowDownload">
|
|
|
|
|
<div v-if="isAllowDownload" class="glass">
|
|
|
|
|
<SvgIcon
|
|
|
|
|
size="16"
|
|
|
|
|
name="download"
|
|
|
|
@ -753,7 +768,9 @@ defineExpose({
|
|
|
|
|
<template #trigger>
|
|
|
|
|
<span>{{ item.imgName }}</span>
|
|
|
|
|
</template>
|
|
|
|
|
{{ item.imgName }}
|
|
|
|
|
<span
|
|
|
|
|
style="font-size: 12px; margin-top: 4px; margin-bottom: 16px"
|
|
|
|
|
>{{ item.imgName }}</span>
|
|
|
|
|
</n-tooltip>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="icon-wrap" @click="previewHandler(index, $event)">
|
|
|
|
@ -787,11 +804,14 @@ defineExpose({
|
|
|
|
|
<GeneratePackageModal ref="generateModalRef" />
|
|
|
|
|
<QueryRepeatedTasksModal
|
|
|
|
|
ref="queryRepeatedTasksModalRef"
|
|
|
|
|
@closeCallback="tasksLoadingCloseCallback"
|
|
|
|
|
@close-callback="tasksLoadingCloseCallback"
|
|
|
|
|
/>
|
|
|
|
|
<LoginSuccessModal ref="LoginSuccessModalRef" />
|
|
|
|
|
<FinishPackageModal ref="finishPackageModal" :id="packageIdRef" />
|
|
|
|
|
<FinishPackageModal :id="packageIdRef" ref="finishPackageModal" />
|
|
|
|
|
<CheckingTaskModal ref="checkingTaskModalRef" @refresh="refresh" @cancel="cancel" />
|
|
|
|
|
<!-- <div class="close_box" v-show="showClose" @click="showClose = false">
|
|
|
|
|
<SvgIcon size="24" name="close-none-border" />
|
|
|
|
|
</div> -->
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
@ -914,6 +934,7 @@ defineExpose({
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
position: relative;
|
|
|
|
|
transition: 0.5s;
|
|
|
|
|
margin: 0 6px 10px 6px;
|
|
|
|
|
|
|
|
|
|
.glass {
|
|
|
|
|
position: absolute;
|
|
|
|
@ -940,7 +961,9 @@ defineExpose({
|
|
|
|
|
border-radius: 7px;
|
|
|
|
|
|
|
|
|
|
.img-name {
|
|
|
|
|
width: 70%;
|
|
|
|
|
// width: 70%;
|
|
|
|
|
width: 15px;
|
|
|
|
|
height: 15px;
|
|
|
|
|
color: #fff;
|
|
|
|
|
/* 设置文本溢出时的样式为省略号 */
|
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
@ -1026,4 +1049,10 @@ defineExpose({
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.close_box {
|
|
|
|
|
position: absolute;
|
|
|
|
|
right: 10%;
|
|
|
|
|
top: 20%;
|
|
|
|
|
z-index: 10000000000000000000;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|