Merge pull request 'fix: 修复问题' (#215) from fix/bug into test

Reviewed-on: #215
pull/218/head^2
刘释隆 1 year ago
commit 2246792839

@ -42,7 +42,7 @@
"vue3snippets.enable-compile-vue-file-on-did-save-code": true, "vue3snippets.enable-compile-vue-file-on-did-save-code": true,
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint", "editor.defaultFormatter": "rvest.vs-code-prettier-eslint",
"[vue]": { "[vue]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint" "editor.defaultFormatter": "Wscats.vue"
}, },
"editor.formatOnSaveMode": "modifications" "editor.formatOnSaveMode": "modifications"
} }

9
components.d.ts vendored

@ -11,6 +11,7 @@ declare module 'vue' {
BasicModal: typeof import('./src/components/Modal/BasicModal.vue')['default'] BasicModal: typeof import('./src/components/Modal/BasicModal.vue')['default']
DataHeader: typeof import('./src/components/DataHeader/index.vue')['default'] DataHeader: typeof import('./src/components/DataHeader/index.vue')['default']
NAvatar: typeof import('naive-ui')['NAvatar'] NAvatar: typeof import('naive-ui')['NAvatar']
NBackTop: typeof import('naive-ui')['NBackTop']
NButton: typeof import('naive-ui')['NButton'] NButton: typeof import('naive-ui')['NButton']
NCard: typeof import('naive-ui')['NCard'] NCard: typeof import('naive-ui')['NCard']
NCheckbox: typeof import('naive-ui')['NCheckbox'] NCheckbox: typeof import('naive-ui')['NCheckbox']
@ -21,8 +22,11 @@ declare module 'vue' {
NDialogProvider: typeof import('naive-ui')['NDialogProvider'] NDialogProvider: typeof import('naive-ui')['NDialogProvider']
NDivider: typeof import('naive-ui')['NDivider'] NDivider: typeof import('naive-ui')['NDivider']
NDropdown: typeof import('naive-ui')['NDropdown'] NDropdown: typeof import('naive-ui')['NDropdown']
NEllipsis: typeof import('naive-ui')['NEllipsis']
NEmpty: typeof import('naive-ui')['NEmpty']
NForm: typeof import('naive-ui')['NForm'] NForm: typeof import('naive-ui')['NForm']
NFormItem: typeof import('naive-ui')['NFormItem'] NFormItem: typeof import('naive-ui')['NFormItem']
NGi: typeof import('naive-ui')['NGi']
NGrid: typeof import('naive-ui')['NGrid'] NGrid: typeof import('naive-ui')['NGrid']
NGridItem: typeof import('naive-ui')['NGridItem'] NGridItem: typeof import('naive-ui')['NGridItem']
NImage: typeof import('naive-ui')['NImage'] NImage: typeof import('naive-ui')['NImage']
@ -31,6 +35,7 @@ declare module 'vue' {
NModal: typeof import('naive-ui')['NModal'] NModal: typeof import('naive-ui')['NModal']
NNotificationProvider: typeof import('naive-ui')['NNotificationProvider'] NNotificationProvider: typeof import('naive-ui')['NNotificationProvider']
NotPassed: typeof import('./src/components/NotPassed.vue')['default'] NotPassed: typeof import('./src/components/NotPassed.vue')['default']
NPopconfirm: typeof import('naive-ui')['NPopconfirm']
NPopover: typeof import('naive-ui')['NPopover'] NPopover: typeof import('naive-ui')['NPopover']
NPopselect: typeof import('naive-ui')['NPopselect'] NPopselect: typeof import('naive-ui')['NPopselect']
NProgress: typeof import('naive-ui')['NProgress'] NProgress: typeof import('naive-ui')['NProgress']
@ -40,7 +45,11 @@ declare module 'vue' {
NSpace: typeof import('naive-ui')['NSpace'] NSpace: typeof import('naive-ui')['NSpace']
NSpin: typeof import('naive-ui')['NSpin'] NSpin: typeof import('naive-ui')['NSpin']
NSwitch: typeof import('naive-ui')['NSwitch'] NSwitch: typeof import('naive-ui')['NSwitch']
NTabPane: typeof import('naive-ui')['NTabPane']
NTabs: typeof import('naive-ui')['NTabs']
NTag: typeof import('naive-ui')['NTag'] NTag: typeof import('naive-ui')['NTag']
NTimeline: typeof import('naive-ui')['NTimeline']
NTimelineItem: typeof import('naive-ui')['NTimelineItem']
NTooltip: typeof import('naive-ui')['NTooltip'] NTooltip: typeof import('naive-ui')['NTooltip']
NUpload: typeof import('naive-ui')['NUpload'] NUpload: typeof import('naive-ui')['NUpload']
NUploadDragger: typeof import('naive-ui')['NUploadDragger'] NUploadDragger: typeof import('naive-ui')['NUploadDragger']

@ -53,7 +53,8 @@ const saveHandler = debounce(() => {
备注信息 备注信息
</div> </div>
<SvgIcon <SvgIcon
size="24" size="20"
color="#000000"
name="close-none-border" name="close-none-border"
class="close_box" class="close_box"
@click="emit('close')" @click="emit('close')"

@ -33,13 +33,25 @@ Object.keys(asideMap).forEach((key) => {
extraCustomConfig.push(key) extraCustomConfig.push(key)
}) })
function showModal() { function showModal(type: boolean = true) {
show.value = true show.value = type
// //
const config = finalStore.getSystemConfig const config = finalStore.getSystemConfig
const customConfig = finalStore.getCustomConfig const customConfig = finalStore.getCustomConfig
if (config == null || customConfig == null) if (config == null || customConfig == null)
return return
//
if (!type) {
const { showList, hideList } = generatList(config, customConfig)
onList.value = showList
offList.value = hideList
//
checkAll.value = hideList.every(item => item.checked)
//
offKeyword.value = ''
onKeyword.value = ''
return
}
if (tempList.value.length > 0 && isEqual(tempList.value, finalStore.getFilterConfig)) if (tempList.value.length > 0 && isEqual(tempList.value, finalStore.getFilterConfig))
return return
const { showList, hideList } = generatList(config, customConfig) const { showList, hideList } = generatList(config, customConfig)
@ -221,6 +233,19 @@ async function handleSumbit(e: MouseEvent) {
function onCheckAllChange(value) { function onCheckAllChange(value) {
const ids: string[] = [] const ids: string[] = []
if (value) {
offList.value.forEach((v) => {
if (!v.checked)
onList.value.push(v)
})
}
else {
onList.value = offList.value.filter(v => v.fix)
offList.value.map(v => ({
...v,
checked: v.fix,
}))
}
for (const item of offList.value) { for (const item of offList.value) {
if (!item.fix) { if (!item.fix) {
@ -228,7 +253,6 @@ function onCheckAllChange(value) {
ids.push(item.id) ids.push(item.id)
} }
} }
selectIds.value = value ? ids : [] selectIds.value = value ? ids : []
} }
@ -478,7 +502,7 @@ onMounted(() => {
<n-button <n-button
secondary secondary
style="margin-left: 15px; border: 1px solid #cad2dd" style="margin-left: 15px; border: 1px solid #cad2dd"
@click="closeModal" @click="showModal(false)"
> >
取消 取消
</n-button> </n-button>

@ -3,7 +3,6 @@ import { difference } from 'lodash-es'
import { computed, onMounted, ref, watch } from 'vue' import { computed, onMounted, ref, watch } from 'vue'
import { VueDraggable } from 'vue-draggable-plus' import { VueDraggable } from 'vue-draggable-plus'
import { getAllfieldList, getfieldList, savefield } from '@/api/home/filter' import { getAllfieldList, getfieldList, savefield } from '@/api/home/filter'
import { ColumnsMap } from '@/config/final'
import { useUser } from '@/store/modules/user' import { useUser } from '@/store/modules/user'
const props = defineProps({ const props = defineProps({
@ -39,8 +38,8 @@ onMounted(async () => {
*/ */
const userFieldFixed = useList.userFieldFixed?.split(',') const userFieldFixed = useList.userFieldFixed?.split(',')
const userFieldUnFixed = useList.userFieldUnFixed?.split(',') const userFieldUnFixed = useList.userFieldUnFixed?.split(',')
const mustList = [] const mustList: any[] = []
allList?.map((v) => { allList?.forEach((v) => {
const item = { const item = {
name: v.fieldDesc, name: v.fieldDesc,
id: v.name, id: v.name,
@ -73,67 +72,6 @@ const selectCount = computed(() => {
return `显示字段(共${onList.value.length}个)` return `显示字段(共${onList.value.length}个)`
}) })
function generatList() {
const keys = Object.keys(ColumnsMap)
// const showStr = 'name'
// const showKeys = showStr.split(',').map((key: string) => key.toLowerCase())
for (const key of keys) {
const { title, fixed, fixLeft, width } = ColumnsMap[key]
const item = {
id: key,
title,
fix: fixed,
checked: ColumnsMap[key].fixed,
width,
}
if (!fixed)
offList.value.push(item)
if (fixLeft)
fixLeftList.value.push(item)
}
// showList = showKeys.reduce((acc, key) => {
// const config = {
// id: key,
// title: ColumnsMap[key].name || '',
// fix: ColumnsMap[key].fixed,
// }
// return [...acc, config]
// }, [])
const fixedList = generateDefaultList()
const filterList = fixedList.filter((item) => {
return !item.fixLeft
})
onList.value.unshift(...filterList)
offList.value.unshift(...fixedList)
}
function generateDefaultList() {
return Object.keys(ColumnsMap).reduce((acc, key) => {
const { title, fixed, fixLeft, width } = ColumnsMap[key]
if (fixed) {
const config = {
id: key,
title,
fix: true,
checked: true,
fixLeft,
width,
}
return [...acc, config]
}
else {
return acc
}
}, [])
}
const show = ref(false) const show = ref(false)
const checkAll = ref(false) const checkAll = ref(false)
@ -152,10 +90,10 @@ async function handleSumbit(e: MouseEvent) {
const userInfo = userStore.getUserInfo const userInfo = userStore.getUserInfo
let userFieldFixed = '' let userFieldFixed = ''
let userFieldUnFixed = '' let userFieldUnFixed = ''
fixLeftList.value.map((v) => { fixLeftList.value.forEach((v) => {
userFieldFixed += `${v.id},` userFieldFixed += `${v.id},`
}) })
onList.value.map((v) => { onList.value.forEach((v) => {
userFieldUnFixed += `${v.id},` userFieldUnFixed += `${v.id},`
}) })
userFieldFixed = userFieldFixed.slice(0, userFieldFixed.length - 1) userFieldFixed = userFieldFixed.slice(0, userFieldFixed.length - 1)
@ -207,7 +145,7 @@ function onCheckAllChange(value) {
} }
} }
if (value) { if (value) {
offList.value.map((v) => { offList.value.forEach((v) => {
if (!v.checked) if (!v.checked)
onList.value.push(v) onList.value.push(v)
}) })
@ -215,7 +153,7 @@ function onCheckAllChange(value) {
else { else {
onList.value = [] onList.value = []
fixLeftList.value = [] fixLeftList.value = []
offList.value.map((v) => { offList.value.forEach((v) => {
if (v.fix) if (v.fix)
fixLeftList.value.push(v) fixLeftList.value.push(v)
}) })
@ -330,21 +268,21 @@ function removeHandler(id: string, type: 'fix' | 'unfix') {
offList.value[index].checked = false offList.value[index].checked = false
} }
else { else {
index == fixLeftList.value.findIndex(v => v.id == id) index = fixLeftList.value.findIndex(v => v.id == id)
fixLeftList.value[index].checked = false fixLeftList.value[index].checked = false
} }
} }
const indeterminate = computed(() => { const indeterminate = computed(() => {
let baseNum = 0
offList.value.map((v) => {
if (v.fix)
baseNum += 1
})
return ( return (
onList.value.length + fixLeftList.value.length - baseNum > 0 onList.value.length
&& offList.value.length - baseNum + fixLeftList.value.length
> onList.value.length + fixLeftList.value.length - baseNum - offList.value.filter(v => v.fix).length
> 0
&& offList.value.length - offList.value.filter(v => v.fix).length
> onList.value.length
+ fixLeftList.value.length
- offList.value.filter(v => v.fix).length
) )
}) })
</script> </script>
@ -553,8 +491,7 @@ const indeterminate = computed(() => {
.textbtnStyle { .textbtnStyle {
cursor: pointer; cursor: pointer;
color: #507AFD; color: #507afd;
} }
.drag-wrapper { .drag-wrapper {
@ -615,7 +552,7 @@ const indeterminate = computed(() => {
::v-deep(.n-button--info-type) { ::v-deep(.n-button--info-type) {
background: #507afd !important; background: #507afd !important;
} }
::v-deep(.n-button--default-type){ ::v-deep(.n-button--default-type) {
border: 1px solid #cad2dd !important; border: 1px solid #cad2dd !important;
} }
// ::v-deep(.n-card__content){ // ::v-deep(.n-card__content){

@ -166,20 +166,20 @@ function handleCheck(rowKeys: DataTableRowKey[]) {
} }
function select(key: number, id: string) { function select(key: number, id: string) {
if (key == 1) { if (key == 1)
editSelection(id) editSelection(id)
}
else { else
const modalInst = modal.create({ deleteSelection(id)
title: '确认提示', // const modalInst = modal.create({
content: '确认删除该条过滤条件吗?', // title: "",
positiveText: '确定', // content: "?",
negativeText: '取消', // positiveText: "",
preset: 'dialog', // negativeText: "",
onPositiveClick: () => deleteSelection(id), // preset: "dialog",
onNegativeClick: () => modalInst.destroy(), // onPositiveClick: () => deleteSelection(id),
}) // onNegativeClick: () => modalInst.destroy(),
} // });
} }
function editSelection(id = '') { function editSelection(id = '') {

@ -302,6 +302,7 @@ defineExpose({
v-model:value="formValue.name" v-model:value="formValue.name"
:style="{ width: '780px' }" :style="{ width: '780px' }"
placeholder="请输入过滤名称" placeholder="请输入过滤名称"
maxlength="15"
@keydown.enter.prevent @keydown.enter.prevent
/> />
</n-form-item> </n-form-item>

File diff suppressed because it is too large Load Diff

@ -1,16 +1,16 @@
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, ref, reactive, unref, computed,watch } from "vue"; import { computed, onMounted, reactive, ref, unref, watch } from 'vue'
import { useRoute, useRouter } from "vue-router"; import { useRoute, useRouter } from 'vue-router'
import testImg from "@/assets/images/test.png"; import { chunk } from 'lodash-es'
import { chunk } from "lodash-es"; import { useDialog, useMessage } from 'naive-ui'
import type { RowData } from "@/config/final"; import { RepeatModal, RepeatTaskTableModal } from '../comp'
import { getFinalList } from "@/api/final"; import testImg from '@/assets/images/test.png'
import { useFinal } from "@/store/modules/final"; import type { RowData } from '@/config/final'
import { formatToDateHMS } from "@/utils/dateUtil"; import { getFinalList } from '@/api/final'
import { useMessage, useDialog } from "naive-ui"; import { useFinal } from '@/store/modules/final'
import { audit } from "@/api/task/task"; import { formatToDateHMS } from '@/utils/dateUtil'
import NotPassed from "@/components/Approval/NotPassed.vue"; import { audit } from '@/api/task/task'
import { RepeatModal, RepeatTaskTableModal } from "../comp"; import NotPassed from '@/components/Approval/NotPassed.vue'
const emit = defineEmits(['changeShow']) const emit = defineEmits(['changeShow'])
const dialog = useDialog() const dialog = useDialog()
@ -93,11 +93,11 @@ async function initData(
const asideParmas = unref(finalStore.getAsideValue) const asideParmas = unref(finalStore.getAsideValue)
// 使使 // 使使
// let params = filterId ? { userSearchId: filterId } : asideParmas // let params = filterId ? { userSearchId: filterId } : asideParmas
let params = asideParmas; let params = asideParmas
if(params?.izshowall==false){ if (params?.izshowall == false)
params.isFail=false params.isFail = false
}
params = params?.izshowall ? {isFail:true} : params; params = params?.izshowall ? { isFail: true } : params
const result = await getFinalList({ const result = await getFinalList({
sortorder: sortorder.value, sortorder: sortorder.value,
@ -107,22 +107,21 @@ async function initData(
taskName, taskName,
...params, ...params,
}); })
const { data, pageCount, totalCount } = result; const { data, pageCount, totalCount } = result
console.log(data, pageCount, totalCount); console.log(data, pageCount, totalCount)
//tableData.value = tableData.value.concat(data); // tableData.value = tableData.value.concat(data);
tableData.value = data; tableData.value = data
console.log(tableData.value); console.log(tableData.value)
total.value = totalCount; total.value = totalCount
pagination.page = page; pagination.page = page
pagination.pageCount = Math.ceil(totalCount / pageSize); pagination.pageCount = Math.ceil(totalCount / pageSize)
loading.value = false; loading.value = false
tableData.value.forEach((item) => { tableData.value.forEach((item) => {
item.showcheck = false; item.showcheck = false
if (isValidTimestamp(item.fromuptime)) { if (isValidTimestamp(item.fromuptime))
item.fromuptime = formatToDateHMS(item.fromuptime); item.fromuptime = formatToDateHMS(item.fromuptime)
} })
});
tableData.value = chunk(tableData.value, 4) tableData.value = chunk(tableData.value, 4)
} }
@ -177,15 +176,14 @@ async function query(
// tableData.value = tableData.value.concat(data); // tableData.value = tableData.value.concat(data);
tableData.value = newlist tableData.value = newlist
// console.log(tableData.value); // console.log(tableData.value);
total.value = totalCount; total.value = totalCount
pagination.page = page; pagination.page = page
pagination.pageCount = Math.ceil(totalCount / pageSize); pagination.pageCount = Math.ceil(totalCount / pageSize)
loading.value = false; loading.value = false
tableData.value.forEach((item) => { tableData.value.forEach((item) => {
if (isValidTimestamp(item.fromuptime)) { if (isValidTimestamp(item.fromuptime))
item.fromuptime = formatToDateHMS(item.fromuptime); item.fromuptime = formatToDateHMS(item.fromuptime)
} })
});
tableData.value = chunk(tableData.value, 4) tableData.value = chunk(tableData.value, 4)
} }
@ -403,39 +401,44 @@ function checkBottom() {
}, 500) }, 500)
} }
function changesort(sortnamex) { function changesort(sortnamex) {
if (sortorder.value == "asc" && sortnamex == "submit_date_timestamp") { if (sortorder.value == 'asc' && sortnamex == 'submit_date_timestamp') {
sortorder.value = "desc"; sortorder.value = 'desc'
sortname.value = "submit_date_timestamp"; sortname.value = 'submit_date_timestamp'
}else if (sortorder.value == "desc" && sortnamex == "submit_date_timestamp") { }
sortorder.value = "asc"; else if (sortorder.value == 'desc' && sortnamex == 'submit_date_timestamp') {
sortname.value = "submit_date_timestamp"; sortorder.value = 'asc'
} else if (sortorder.value == "desc" && sortnamex == "similarity_score") { sortname.value = 'submit_date_timestamp'
sortorder.value = "asc"; }
sortname.value = "similarity_score"; else if (sortorder.value == 'desc' && sortnamex == 'similarity_score') {
} else if (sortorder.value == "asc" && sortnamex == "similarity_score") { sortorder.value = 'asc'
sortorder.value = "desc"; sortname.value = 'similarity_score'
sortname.value = "similarity_score"; }
} else if (sortorder.value == "asc" && sortnamex == "field1") { else if (sortorder.value == 'asc' && sortnamex == 'similarity_score') {
sortorder.value = "desc"; sortorder.value = 'desc'
sortname.value = "field1"; sortname.value = 'similarity_score'
} else if (sortorder.value == "desc" && sortnamex == "field1") { }
sortorder.value = "asc"; else if (sortorder.value == 'asc' && sortnamex == 'field1') {
sortname.value = "field1"; sortorder.value = 'desc'
} sortname.value = 'field1'
initData(1, 20); }
num=1 else if (sortorder.value == 'desc' && sortnamex == 'field1') {
sortorder.value = 'asc'
sortname.value = 'field1'
}
initData(1, 20)
num = 1
} }
watch( watch(
() => finalStore.asideValue, () => finalStore.asideValue,
(newVal, oldVal) => { (newVal, oldVal) => {
initData(1, 20); initData(1, 20)
}, },
{ deep: true } { deep: true },
); )
defineExpose({ defineExpose({
initData, initData,
}); })
</script> </script>
<template> <template>
@ -530,16 +533,13 @@ defineExpose({
<div class="wrapper-settings"> <div class="wrapper-settings">
<div> <div>
<div @click="changesort('submit_date_timestamp')"> <div @click="changesort('submit_date_timestamp')">
<span>提报时间排序</span <span>提报时间排序</span><SvgIcon style="margin-left: 6px" name="sort" size="13" />
><SvgIcon style="margin-left: 6px" name="sort" size="13" />
</div> </div>
<div @click="changesort('similarity_score')"> <div @click="changesort('similarity_score')">
<span>相似度排序</span <span>相似度排序</span><SvgIcon style="margin-left: 6px" name="sort" size="13" />
><SvgIcon style="margin-left: 6px" name="sort" size="13" />
</div> </div>
<div @click="changesort('field1')"> <div @click="changesort('field1')">
<span>提报人排序</span <span>提报人排序</span><SvgIcon style="margin-left: 6px" name="sort" size="13" />
><SvgIcon style="margin-left: 6px" name="sort" size="13" />
</div> </div>
</div> </div>
<div style="width: 3vw"> <div style="width: 3vw">
@ -552,7 +552,7 @@ defineExpose({
/> />
</div> </div>
</div> </div>
<div :class="tableData.length>4?'cotnet_wrapeer':'cotnet_wrapeertwo'" @scroll="checkBottom" ref="scrollContainer"> <div ref="scrollContainer" :class="tableData.length > 4 ? 'cotnet_wrapeer' : 'cotnet_wrapeertwo'" @scroll="checkBottom">
<div <div
v-for="(sitem, sindex) in tableData" v-for="(sitem, sindex) in tableData"
:key="sindex" :key="sindex"
@ -590,12 +590,14 @@ defineExpose({
: `background:url(${item.imgUrl});background-size:100% 100%;background-repeat: no-repeat;` : `background:url(${item.imgUrl});background-size:100% 100%;background-repeat: no-repeat;`
" "
@click="goDetail(item)" @click="goDetail(item)"
><div class="percent" v-if="item.similarityscore != -1"> >
<div v-if="item.similarityscore != -1" class="percent">
<SvgIcon size="30" :name="item.similarityscore == 100 ? 'error_tag' : 'tag'" /> <SvgIcon size="30" :name="item.similarityscore == 100 ? 'error_tag' : 'tag'" />
<div class="val"> <div class="val">
{{ `${item.similarityscore}%` }} {{ `${item.similarityscore}%` }}
</div> </div>
</div></div> </div>
</div>
<div v-show="item.states == 2" class="check_box"> <div v-show="item.states == 2" class="check_box">
<n-checkbox <n-checkbox
size="medium" size="medium"
@ -611,8 +613,8 @@ defineExpose({
</n-ellipsis> </n-ellipsis>
</div> </div>
<div class="date"> <div class="date">
<n-ellipsis style="max-width: 100%" <n-ellipsis style="max-width: 100%">
>{{ item.fromuptime }} {{ item.fromuptime }}
</n-ellipsis> </n-ellipsis>
</div> </div>
<div class="tag_box"> <div class="tag_box">

@ -200,8 +200,7 @@ function favoriteHandler(event: MouseEvent, item: any) {
data.value.forEach((v, index) => { data.value.forEach((v, index) => {
if (v.id == id) if (v.id == id)
sort(v.id, 0) sort(v.id, 0)
else else sort(v.id, index + 1)
sort(v.id, index + 1)
}) })
inputHandler(ruleForm.keyword) inputHandler(ruleForm.keyword)
@ -216,8 +215,7 @@ const rules = {
validator(_rule, value) { validator(_rule, value) {
if (value.length >= 2) if (value.length >= 2)
return true return true
else else return new Error('搜索关键字最少为两个')
return new Error('搜索关键字最少为两个')
}, },
}, },
], ],
@ -277,6 +275,8 @@ defineExpose({
> >
<template #trigger> <template #trigger>
<div class="wrapper-left-dropdown" @click="showClick"> <div class="wrapper-left-dropdown" @click="showClick">
<n-tooltip trigger="hover">
<template #trigger>
<span <span
style=" style="
color: #333333; color: #333333;
@ -285,6 +285,10 @@ defineExpose({
font-weight: 600; font-weight: 600;
" "
>{{ currentlySelectedAdvanced }}</span> >{{ currentlySelectedAdvanced }}</span>
</template>
{{ currentlySelectedAdvanced }}
</n-tooltip>
<SvgIcon <SvgIcon
:style="{ marginLeft: '5px' }" :style="{ marginLeft: '5px' }"
name="down" name="down"

@ -48,6 +48,8 @@ function showModal() {
} }
function closeModal() { function closeModal() {
offKeyword.value = ''
onKeyword.value = ''
show.value = false show.value = false
} }

@ -8,132 +8,138 @@ import {
reactive, reactive,
ref, ref,
unref, unref,
} from "vue"; } from 'vue'
import { NDataTable } from "naive-ui"; import { NDataTable, useModal } from 'naive-ui'
import type { DataTableColumns, DataTableRowKey } from "naive-ui"; import type { DataTableColumns, DataTableRowKey } from 'naive-ui'
import type { SortableEvent } from "sortablejs"; import type { SortableEvent } from 'sortablejs'
import Sortable from "sortablejs"; import Sortable from 'sortablejs'
import { debounce } from "lodash-es"; import { debounce } from 'lodash-es'
import Action from "../Action.vue"; import selection from 'naive-ui/es/_internal/selection'
import { deleteCondition, getConditionList, sort } from "@/api/home/filter"; import Action from '../Action.vue'
import type { FilterSearchParam } from "/#/api"; import { deleteCondition, getConditionList, sort } from '@/api/home/filter'
import selection from "naive-ui/es/_internal/selection"; import type { FilterSearchParam } from '/#/api'
import SvgIcon from "@/components/Icon/SvgIcon.vue"; import SvgIcon from '@/components/Icon/SvgIcon.vue'
import { useModal } from "naive-ui"; defineOptions({ name: 'FilterModal' })
const modal = useModal();
defineOptions({ name: "FilterModal" });
const $message = window["$message"];
const props = defineProps({ const props = defineProps({
type: { type: {
type: Number, type: Number,
default: () => 0, default: () => 0,
}, },
}); })
const emit = defineEmits<{ const emit = defineEmits<{
(e: "showNewFilter"): void; (e: 'showNewFilter'): void
(e: "editFilter", filter: any): void; (e: 'editFilter', filter: any): void
(e: "handleOk", item: any): void; (e: 'handleOk', item: any): void
}>(); }>()
const show = ref(false); const modal = useModal()
const $message = window.$message
const show = ref(false)
const tableData = ref<Array<RowData>>([])
const keyword = ref('')
const cardStyle = { const cardStyle = {
width: "808px", 'width': '808px',
height: "840px", 'height': '840px',
"--n-padding-bottom": "10px", '--n-padding-bottom': '10px',
"--n-padding-left": "10px", '--n-padding-left': '10px',
}; }
interface RowData { interface RowData {
id: string; id: string
searchname: string; searchname: string
createby: string; createby: string
createtime: string; createtime: string
updateby: string; updateby: string
updatetime: string; updatetime: string
} }
function sortData(row) { function sortData(row) {
console.log("sortData", row); console.log('sortData', row)
if (row.order == "descend") { if (row.order == 'descend') {
tableData.value.sort( tableData.value.sort(
(a, b) => (a, b) =>
new Date(a[row.columnKey]).getTime() - new Date(b[row.columnKey]).getTime() new Date(a[row.columnKey]).getTime() - new Date(b[row.columnKey]).getTime(),
); )
} else if (row.order == "ascend") { }
else if (row.order == 'ascend') {
tableData.value.sort( tableData.value.sort(
(a, b) => (a, b) =>
new Date(b[row.columnKey]).getTime() - new Date(a[row.columnKey]).getTime() new Date(b[row.columnKey]).getTime() - new Date(a[row.columnKey]).getTime(),
); )
} else { }
else {
tableData.value.sort( tableData.value.sort(
(a, b) => Number((a as any).reorder) - Number((b as any).reorder) (a, b) => Number((a as any).reorder) - Number((b as any).reorder),
); )
} }
} }
const columns: DataTableColumns<RowData> = [ const columns: DataTableColumns<RowData> = [
{ {
type: "selection", type: 'selection',
}, },
{ {
title: "操作", title: '操作',
key: "action", key: 'action',
render(row) { render(row) {
return h(Action, { return h(Action, {
options: [ options: [
{ label: "编辑", key: 1 }, { label: '编辑', key: 1 },
{ label: "删除", key: 2 }, { label: '删除', key: 2 },
], ],
id: row.id, id: row.id,
select, select,
}); })
}, },
}, },
// j // j
{ {
title: "名称", title: '名称',
key: "searchname", key: 'searchname',
ellipsis: { ellipsis: {
tooltip: true, tooltip: true,
}, },
}, },
{ {
title: "创建者", title: '创建者',
key: "createby", key: 'createby',
}, },
{ {
title: "创建时间", title: '创建时间',
key: "createtime", key: 'createtime',
width: 180, width: 180,
renderSorterIcon: ({ order }) => { renderSorterIcon: ({ order }) => {
if (order === false) return h(SvgIcon, { name: "sort-2" }); if (order === false)
if (order === "ascend") return h(SvgIcon, { name: "sort-1" }); return h(SvgIcon, { name: 'sort-2' })
if (order === "descend") return h(SvgIcon, { name: "sort-3" }); if (order === 'ascend')
return h(SvgIcon, { name: 'sort-1' })
if (order === 'descend')
return h(SvgIcon, { name: 'sort-3' })
}, },
sorter: (row1, row2) => { sorter: (row1, row2) => {
// tableData.value.sort( // tableData.value.sort(
// (a, b) => new Date(a?.createtime).getTime() - new Date(b?.createtime).getTime() // (a, b) => new Date(a?.createtime).getTime() - new Date(b?.createtime).getTime()
// ); // );
return new Date(row1?.createtime).getTime() - new Date(row2?.createtime).getTime(); return new Date(row1?.createtime).getTime() - new Date(row2?.createtime).getTime()
}, },
}, },
{ {
title: "更新者", title: '更新者',
key: "updateby", key: 'updateby',
}, },
{ {
title: "更新时间", title: '更新时间',
key: "updatetime", key: 'updatetime',
width: 180, width: 180,
}, },
]; ]
const total = ref(0); const total = ref(0)
const loading = ref(true); const loading = ref(true)
const pagination = reactive({ const pagination = reactive({
page: 1, page: 1,
pageCount: 1, pageCount: 1,
@ -141,83 +147,82 @@ const pagination = reactive({
showSizePicker: true, showSizePicker: true,
pageSizes: [ pageSizes: [
{ {
label: "10 每页", label: '10 每页',
value: 10, value: 10,
}, },
{ {
label: "15 每页", label: '15 每页',
value: 15, value: 15,
}, },
{ {
label: "30 每页", label: '30 每页',
value: 30, value: 30,
}, },
{ {
label: "50 每页", label: '50 每页',
value: 50, value: 50,
}, },
], ],
showQuickJumper: true, showQuickJumper: true,
prefix: () => `${total.value} 条数据`, prefix: () => `${total.value} 条数据`,
}); })
const tableData = ref<Array<RowData>>([]);
const keyword = ref("");
async function query(page: number, pageSize: number) { async function query(page: number, pageSize: number) {
const searchParam: FilterSearchParam = { const searchParam: FilterSearchParam = {
search_searchname: { value: keyword.value, op: "like", type: "string" }, search_searchname: { value: keyword.value, op: 'like', type: 'string' },
}; }
const result = await getConditionList( const result = await getConditionList(
{ pageNo: page, pageSize }, { pageNo: page, pageSize },
searchParam, searchParam,
props.type props.type,
); )
const { data, pageCount, total: totalCount } = result; const { data, pageCount, total: totalCount } = result
tableData.value = data; tableData.value = data
pagination.page = page; pagination.page = page
total.value = totalCount; total.value = totalCount
pagination.pageCount = pageCount; pagination.pageCount = pageCount
loading.value = false; loading.value = false
} }
function afterLeave() { function afterLeave() {
pagination.page = 1; pagination.page = 1
pagination.pageCount = 1; pagination.pageCount = 1
pagination.pageSize = 10; pagination.pageSize = 10
} }
const selectionIds = ref<DataTableRowKey[]>([]); const selectionIds = ref<DataTableRowKey[]>([])
const rowKey = (row: RowData) => row.id; const rowKey = (row: RowData) => row.id
function rowProps(row: RowData) { function rowProps(row: RowData) {
return { return {
"data-id": row.id, 'data-id': row.id,
}; }
} }
function handleCheck(rowKeys: DataTableRowKey[]) { function handleCheck(rowKeys: DataTableRowKey[]) {
selectionIds.value = rowKeys; selectionIds.value = rowKeys
} }
function select(key: number, id: string) { function select(key: number, id: string) {
switch (key) { switch (key) {
case 1: case 1:
editSelection(id); editSelection(id)
break; break
case 2: case 2:
const modalInst = modal.create({ deleteSelection(id)
title: "确认提示", // const modalInst = modal.create({
content: "确认删除该条过滤条件吗?", // title: "",
positiveText: "确定", // content: "?",
negativeText: "取消", // positiveText: "",
preset: "dialog", // negativeText: "",
onPositiveClick: () => deleteSelection(id), // preset: "dialog",
onNegativeClick: () => modalInst.destroy(), // onPositiveClick: () => deleteSelection(id),
}); // onNegativeClick: () => modalInst.destroy(),
break; // });
break
default: default:
break; break
} }
} }
@ -227,145 +232,149 @@ function editSelection(id) {
// $message.error(""); // $message.error("");
// return; // return;
// } // }
const selectedId = id; const selectedId = id
const selectedFilter = tableData.value.find((item: any) => { const selectedFilter = tableData.value.find((item: any) => {
return item.id === selectedId; return item.id === selectedId
}); })
emit("editFilter", selectedFilter); emit('editFilter', selectedFilter)
closeModal(); closeModal()
} }
function deleteSelection(id = "") { function deleteSelection(id = '') {
if (selectionIds.value.length === 0) { if (selectionIds.value.length === 0) {
deleteCondition({ ids: id }).then(() => { deleteCondition({ ids: id }).then(() => {
query(pagination.page, pagination.pageSize); query(pagination.page, pagination.pageSize)
}); })
return; return
} }
const modalInst = modal.create({ const modalInst = modal.create({
title: "确认提示", title: '确认提示',
content: "确认删除所选过滤条件吗?", content: '确认删除所选过滤条件吗?',
positiveText: "确定", positiveText: '确定',
negativeText: "取消", negativeText: '取消',
preset: "dialog", preset: 'dialog',
onPositiveClick: () => onPositiveClick: () =>
deleteCondition({ ids: selectionIds.value.join(",") }).then(() => { deleteCondition({ ids: selectionIds.value.join(',') }).then(() => {
selectionIds.value = []; selectionIds.value = []
query(pagination.page, pagination.pageSize); query(pagination.page, pagination.pageSize)
}), }),
onNegativeClick: () => modalInst.destroy(), onNegativeClick: () => modalInst.destroy(),
}); })
} }
async function handlePageChange(currentPage) { async function handlePageChange(currentPage) {
if (loading.value) return; if (loading.value)
pagination.page = currentPage; return
const { pageSize } = pagination; pagination.page = currentPage
await query(currentPage, pageSize); const { pageSize } = pagination
await query(currentPage, pageSize)
} }
async function handlePageSizeChange(currentPageSize) { async function handlePageSizeChange(currentPageSize) {
if (loading.value) return; if (loading.value)
return
const { page } = pagination; const { page } = pagination
pagination.pageSize = currentPageSize; pagination.pageSize = currentPageSize
await query(page, currentPageSize); await query(page, currentPageSize)
} }
function handleClick() { function handleClick() {
emit("showNewFilter"); emit('showNewFilter')
closeModal(); closeModal()
} }
let sortTable: Sortable | null = null; let sortTable: Sortable | null = null
const tableRef = ref<InstanceType<typeof NDataTable>>(); const tableRef = ref<InstanceType<typeof NDataTable>>()
async function showModal() { async function showModal() {
show.value = true; show.value = true
const { page, pageSize } = pagination; const { page, pageSize } = pagination
await query(page, pageSize); await query(page, pageSize)
nextTick(() => { nextTick(() => {
if (sortTable !== null) destory(); if (sortTable !== null)
destory()
const el: HTMLDivElement = tableRef.value?.$el;
const tbody: HTMLElement | null = el.querySelector("tbody.n-data-table-tbody")!; const el: HTMLDivElement = tableRef.value?.$el
if (tbody) sortTable = Sortable.create(tbody, { onEnd, onMove }); const tbody: HTMLElement | null = el.querySelector('tbody.n-data-table-tbody')!
}); if (tbody)
sortTable = Sortable.create(tbody, { onEnd, onMove })
})
} }
let relatedId = ""; let relatedId = ''
let insertafter = false; let insertafter = false
// TODO: bug // TODO: bug
function onEnd(event: SortableEvent) { function onEnd(event: SortableEvent) {
const data = unref(tableData); const data = unref(tableData)
const oldElem = data[event.oldIndex!]; const oldElem = data[event.oldIndex!]
data.splice(event.oldIndex!, 1); data.splice(event.oldIndex!, 1)
data.splice(event.newIndex!, 0, oldElem); data.splice(event.newIndex!, 0, oldElem)
const dragId = oldElem.id; const dragId = oldElem.id
const index = data.findIndex((item) => { const index = data.findIndex((item) => {
return item.id === relatedId; return item.id === relatedId
}); })
// -1+1 // -1+1
const order = insertafter ? index - 1 : index + 1; const order = insertafter ? index - 1 : index + 1
// console.log('dragid:', dragId, 'order:', order) // console.log('dragid:', dragId, 'order:', order)
sort(dragId, order); sort(dragId, order)
} }
function onMove(evt: any) { function onMove(evt: any) {
relatedId = evt.related?.dataset?.id; relatedId = evt.related?.dataset?.id
insertafter = evt.willInsertAfter; insertafter = evt.willInsertAfter
// console.log(`${evt.dragged.dataset.id},${evt.related}`, 'insertafter', evt.willInsertAfter) // console.log(`${evt.dragged.dataset.id},${evt.related}`, 'insertafter', evt.willInsertAfter)
} }
function destory() { function destory() {
sortTable && sortTable.destroy(); sortTable && sortTable.destroy()
sortTable = null; sortTable = null
} }
onUnmounted(() => { onUnmounted(() => {
destory(); destory()
}); })
function closeModal() { function closeModal() {
selectionIds.value = []; selectionIds.value = []
show.value = false; show.value = false
} }
defineExpose({ defineExpose({
showModal, showModal,
query, query,
pagination, pagination,
}); })
const inputHandler = debounce((word) => { const inputHandler = debounce((word) => {
keyword.value = word; keyword.value = word
query(1, 5); query(1, 5)
}, 300); }, 300)
const showSearch = computed(() => { const showSearch = computed(() => {
return selectionIds.value.length > 0; return selectionIds.value.length > 0
}); })
const handleOk = () => { function handleOk() {
if (selectionIds.value.length > 1) { if (selectionIds.value.length > 1) {
$message.error("只能选择一条筛选条件"); $message.error('只能选择一条筛选条件')
return; return
} }
if (selectionIds.value.length == 1) { if (selectionIds.value.length == 1) {
const selectedId = selectionIds.value[0]; const selectedId = selectionIds.value[0]
let item = tableData.value.find((v) => v.id == selectedId); const item = tableData.value.find(v => v.id == selectedId)
emit("handleOk", item); emit('handleOk', item)
} }
if (selectionIds.value.length == 0) { if (selectionIds.value.length == 0)
emit("handleOk", ""); emit('handleOk', '')
}
closeModal(); closeModal()
}; }
</script> </script>
<template> <template>
@ -374,9 +383,9 @@ const handleOk = () => {
v-model:show="show" v-model:show="show"
transform-origin="center" transform-origin="center"
display-directive="if" display-directive="if"
@after-leave="afterLeave"
:mask-closable="false" :mask-closable="false"
class="modal_wrapper" class="modal_wrapper"
@after-leave="afterLeave"
> >
<n-card <n-card
:style="cardStyle" :style="cardStyle"
@ -396,8 +405,7 @@ const handleOk = () => {
'font-weight': '600', 'font-weight': '600',
}" }"
class="wrapper-info-title" class="wrapper-info-title"
>基本信息</span >基本信息</span>
>
</div> </div>
</div> </div>
@ -429,13 +437,11 @@ const handleOk = () => {
</n-button> </n-button>
</div> </div>
<div class="msg"> <div class="msg">
<span <span>已选中
>已选中
<span style="color: #507afd; font-size: 16px">{{ <span style="color: #507afd; font-size: 16px">{{
selectionIds.length selectionIds.length
}}</span> }}</span>
</span </span>
>
<a @click="selectionIds = []">清空</a> <a @click="selectionIds = []">清空</a>
</div> </div>
</div> </div>

@ -300,10 +300,9 @@ async function oneCheck() {
asideVal.upUserName = searchValue.value asideVal.upUserName = searchValue.value
if (asideVal.izyear && asideVal.izyear.length == 2) { if (asideVal.izyear && asideVal.izyear.length == 2) {
asideVal.izyear asideVal.izyear = `${dayjs(asideVal.izyear[0]).format('YYYY/MM/DD')}-${dayjs(
= `${dayjs(asideVal.izyear[0]).format('YYYY/MM/DD') asideVal.izyear[1],
}-${ ).format('YYYY/MM/DD')}`
dayjs(asideVal.izyear[1]).format('YYYY/MM/DD')}`
} }
if (asideVal.izsimilarity && typeof asideVal.izsimilarity != 'string') if (asideVal.izsimilarity && typeof asideVal.izsimilarity != 'string')
asideVal.izsimilarity = asideVal.izsimilarity.join('-') asideVal.izsimilarity = asideVal.izsimilarity.join('-')
@ -327,8 +326,7 @@ async function oneCheck() {
if (checkTaskStatus.value === 2 || checkTaskStatus.value === 3) { if (checkTaskStatus.value === 2 || checkTaskStatus.value === 3) {
if (checkTaskStatus.value === 2) if (checkTaskStatus.value === 2)
message.success('任务执行完毕,正在刷新数据...') message.success('任务执行完毕,正在刷新数据...')
else else message.error('查询异常')
message.error('查询异常')
tasksLoadingModal.closeOnlyModal() tasksLoadingModal.closeOnlyModal()
configStore.setTimeNum(100) configStore.setTimeNum(100)
@ -566,8 +564,7 @@ function refresh(val?: any) {
isRefresh.value = false isRefresh.value = false
if (checkTaskStatus.value === 2) if (checkTaskStatus.value === 2)
message.success('任务执行完毕,正在刷新数据...') message.success('任务执行完毕,正在刷新数据...')
else else message.error('查询异常')
message.error('查询异常')
if (timer.value) if (timer.value)
clearInterval(timer.value) clearInterval(timer.value)
@ -771,7 +768,15 @@ defineExpose({
{{ item.imgName }} {{ item.imgName }}
</n-tooltip> </n-tooltip>
</div> </div>
<div class="icon-wrap" @click="previewHandler(index, $event)"> <div
class="icon-wrap"
@click="
($event) => {
previewHandler(index, $event);
hideDownload($event);
}
"
>
<SvgIcon <SvgIcon
size="13" size="13"
name="magnifying-2" name="magnifying-2"

@ -1002,7 +1002,9 @@ function sortHandler(orderby: 'similarityScore' | 'createdate') {
class="img-wrapper" class="img-wrapper"
:style="{ :style="{
// 'background-image': `url(${item.serverThumbnailUrl ? item.serverThumbnailUrl : item.imgUrl})`, // 'background-image': `url(${item.serverThumbnailUrl ? item.serverThumbnailUrl : item.imgUrl})`,
background: `url(${item.serverThumbnailUrl ? item.serverThumbnailUrl : item.imgUrl}), url(${bgLoadingImg})`, background: `url(${
item.serverThumbnailUrl ? item.serverThumbnailUrl : item.imgUrl
}), url(${bgLoadingImg})`,
}" }"
/> />
<div class="small-mark" /> <div class="small-mark" />
@ -1228,7 +1230,9 @@ function sortHandler(orderby: 'similarityScore' | 'createdate') {
class="img-wrapper" class="img-wrapper"
:style="{ :style="{
// 'background-image': `url(${item.serverThumbnailUrl ? item.serverThumbnailUrl : item.imgUrl})`, // 'background-image': `url(${item.serverThumbnailUrl ? item.serverThumbnailUrl : item.imgUrl})`,
background: `url(${item.serverThumbnailUrl ? item.serverThumbnailUrl : item.imgUrl}), url(${bgLoadingImg})`, background: `url(${
item.serverThumbnailUrl ? item.serverThumbnailUrl : item.imgUrl
}), url(${bgLoadingImg})`,
}" }"
@mouseover="overTaskHandelr(item)" @mouseover="overTaskHandelr(item)"
@mouseleave="leaveTaskHandler" @mouseleave="leaveTaskHandler"

@ -459,7 +459,15 @@ const moreThanSix = computed(() => {
</div> </div>
<template #footer> <template #footer>
<div class="wrapper-footer"> <div class="wrapper-footer">
<n-button type="info" @click="handleSumbit"> <n-button
type="info"
@click="
($event) => {
handleSumbit($event);
getData();
}
"
>
确定 确定
</n-button> </n-button>
<n-button <n-button

@ -305,6 +305,7 @@ defineExpose({
v-model:value="formValue.name" v-model:value="formValue.name"
:style="{ width: '780px' }" :style="{ width: '780px' }"
placeholder="请输入过滤名称" placeholder="请输入过滤名称"
maxlength="15"
@keydown.enter.prevent @keydown.enter.prevent
/> />
</n-form-item> </n-form-item>

@ -17,10 +17,7 @@ import {
import PictureInfo from '../components/PictureInfo.vue' import PictureInfo from '../components/PictureInfo.vue'
import ConfrimModal from '../modal/ConfrimModal.vue' import ConfrimModal from '../modal/ConfrimModal.vue'
import { audit, dubiousfileyd } from '@/api/task/task' import { audit, dubiousfileyd } from '@/api/task/task'
import { import { getPictureSimilarityList, getTaskDetailInfo } from '@/api/work/work'
getPictureSimilarityList,
getTaskDetailInfo,
} from '@/api/work/work'
import NotPassed from '@/components/Approval/NotPassed.vue' import NotPassed from '@/components/Approval/NotPassed.vue'
import { TASK_STATUS_OBJ } from '@/enums/index' import { TASK_STATUS_OBJ } from '@/enums/index'
import { useWorkOrder } from '@/store/modules/workOrder' import { useWorkOrder } from '@/store/modules/workOrder'
@ -38,7 +35,11 @@ const dialog = useDialog()
const totalCount = ref(0) const totalCount = ref(0)
let _imagesload: any let _imagesload: any
const bgLoadingImg = ref(bgLoading) const bgLoadingImg = ref(bgLoading)
const imgbigshow = ref(true)
function changeimgbigshow() {
imgbigshow.value = !imgbigshow.value
}
function setBatch(value: boolean) { function setBatch(value: boolean) {
if (value && batch.value) if (value && batch.value)
batch.value = !value batch.value = !value
@ -333,9 +334,7 @@ function onEsc(event: KeyboardEvent) {
const currentKTime = Date.now() const currentKTime = Date.now()
if (currentKTime - keyXLastTime < 500) if (currentKTime - keyXLastTime < 500)
handleRejectMainImage() handleRejectMainImage()
else keyXLastTime = currentKTime
else
keyXLastTime = currentKTime
} }
} }
@ -624,7 +623,10 @@ defineExpose({
<!-- 左侧大图 图片信息 --> <!-- 左侧大图 图片信息 -->
<div <div
class="left" class="left"
:style="{ 'background-image': `url(${taskDetailInfo?.imgurl})` }" :style="{
'background-image': `url(${taskDetailInfo?.imgurl})`,
'flex': imgbigshow ? '0.6' : '1',
}"
@click="previewHandler" @click="previewHandler"
@mouseover="showAction" @mouseover="showAction"
@mouseleave="leaveTaskHandler" @mouseleave="leaveTaskHandler"
@ -729,7 +731,39 @@ defineExpose({
/> />
</div> </div>
</div> </div>
<PictureInfo :task-detail-info="taskDetailInfo" />
<!-- 缩放线 -->
<div
v-show="isFullScreen"
:style="{
position: 'fixed',
zIndex: 169,
background: 'rgb(80, 122, 253)',
right: imgbigshow ? '46%' : '16px',
marginTop: '5px',
width: '2px',
height: '350px',
}"
/>
<div
v-show="isFullScreen"
class="aside-collapse-btn"
:style="{
position: 'fixed',
right: imgbigshow ? '45%' : '0px',
top: '155px',
cursor: 'pointer',
zIndex: 170,
}"
>
<SvgIcon
:name="false ? 'expand-cir' : 'collapse-cir'"
size="40"
@click="changeimgbigshow"
/>
</div>
<PictureInfo v-show="imgbigshow" :task-detail-info="taskDetailInfo" />
</div> </div>
<div <div
style="display: flex; justify-content: space-between; padding: 12px 0px 3px 0" style="display: flex; justify-content: space-between; padding: 12px 0px 3px 0"
@ -800,7 +834,11 @@ defineExpose({
> >
<div <div
class="img-wrapper" class="img-wrapper"
:style="{ background: `url(${item?.serverThumbnailUrl ? item.serverThumbnailUrl : item.imgurl}), url(${bgLoadingImg})` }" :style="{
background: `url(${
item?.serverThumbnailUrl ? item.serverThumbnailUrl : item.imgurl
}), url(${bgLoadingImg})`,
}"
/> />
<div class="time-wrapper"> <div class="time-wrapper">
<div class="time"> <div class="time">

Loading…
Cancel
Save