feat: 移除同步状态

This commit is contained in:
rd
2025-07-14 18:08:39 +08:00
parent 82dd82ec70
commit a5811cdda4
4 changed files with 60 additions and 46 deletions

View File

@ -346,3 +346,8 @@ export const postBatchSyncMediaAccountData = (params: {}) => {
export const getMediaAccountSyncStatus = (params = {}) => { export const getMediaAccountSyncStatus = (params = {}) => {
return Http.get('/v1/media-accounts/sync-status', params); return Http.get('/v1/media-accounts/sync-status', params);
}; };
// 媒体账号-移除同步状态
export const deleteSyncStatus = (id: string) => {
return Http.delete(`/v1/media-accounts/${id}/sync-status`);
};

View File

@ -4,8 +4,6 @@
--> -->
<template> <template>
<div class="card-container"> <div class="card-container">
<!-- <a-spin class="w-100% h-100%"> -->
<a-spin <a-spin
v-for="(item, index) in dataSource" v-for="(item, index) in dataSource"
:key="index" :key="index"
@ -89,34 +87,19 @@
<template #default>{{ getBtnText(item) }}</template> <template #default>{{ getBtnText(item) }}</template>
</a-button> </a-button>
</a-dropdown> </a-dropdown>
</div>
<!-- <img :src="icon3" width="16" height="16" class="mr-8px cursor-pointer" @click="openDelete(item)" /> </div>
<a-button <div v-if="item.status === 2" class="mask">
v-if="showPauseButton(item.status)" <div class="flex items-center mb-16px box">
class="w-64px search-btn mr-8px" <img :src="icon3" width="16" height="16" class="mr-8px" />
size="mini" <span class="name !mb-0">更新数据失败</span>
@click="handlePause(item)" </div>
> <div class="flex items-center">
<template #default>暂停同步</template> <a-button class="search-btn mr-8px" size="mini" @click="onDeleteSyncStatus(item)">取消</a-button>
</a-button> <a-button class="search-btn" size="mini" @click="syncData(item)">重新更新</a-button>
<a-tooltip v-if="isAbnormalStatus(item.status)" :content="getTooltipText(item.status)">
<a-button class="w-64px search-btn mr-8px" size="mini" @click="handleReauthorize(item)">
<template #default>重新授权</template>
</a-button>
</a-tooltip>
<template v-else>
<a-button class="w-64px search-btn mr-8px" size="mini" @click="handleReauthorize(item)">
<template #default>{{ isUnauthorizedStatus(item.status) ? '去授权' : '重新授权' }}</template>
</a-button>
</template>
<a-button class="w-40px search-btn" size="mini" @click="openEdit(item)">
<template #default>编辑</template>
</a-button> -->
</div> </div>
</div> </div>
</a-spin> </a-spin>
<!-- </div> -->
<PauseAccountPatchModal ref="pauseAccountPatchModalRef" @success="emits('update')" /> <PauseAccountPatchModal ref="pauseAccountPatchModalRef" @success="emits('update')" />
<ReauthorizeAccountModal ref="reauthorizeAccountModalRef" @update="emits('update')" /> <ReauthorizeAccountModal ref="reauthorizeAccountModalRef" @update="emits('update')" />
<AuthorizedAccountModal ref="authorizedAccountModalRef" @update="emits('update')" /> <AuthorizedAccountModal ref="authorizedAccountModalRef" @update="emits('update')" />
@ -127,6 +110,7 @@
import { defineProps, ref, computed, inject } from 'vue'; import { defineProps, ref, computed, inject } from 'vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { STATUS_LIST, EnumStatus } from '@/views/property-marketing/media-account/components/status-select/constants'; import { STATUS_LIST, EnumStatus } from '@/views/property-marketing/media-account/components/status-select/constants';
import { deleteSyncStatus } from '@/api/all/propertyMarketing';
import PauseAccountPatchModal from './pause-account-patch'; import PauseAccountPatchModal from './pause-account-patch';
import StatusBox from '../status-box'; import StatusBox from '../status-box';
@ -135,6 +119,7 @@ import AuthorizedAccountModal from '../authorized-account-modal';
import icon1 from '@/assets/img/media-account/icon-dy.png'; import icon1 from '@/assets/img/media-account/icon-dy.png';
import icon2 from '@/assets/img/media-account/icon-xhs.png'; import icon2 from '@/assets/img/media-account/icon-xhs.png';
import icon3 from '@/assets/img/media-account/icon-warn.png';
// import icon3 from '@/assets/img/media-account/icon-delete.png'; // import icon3 from '@/assets/img/media-account/icon-delete.png';
const props = defineProps({ const props = defineProps({
@ -266,6 +251,11 @@ const getBtnText = (item) => {
const goDetail = (item) => { const goDetail = (item) => {
router.push(`/media-account/detail/${item.id}`); router.push(`/media-account/detail/${item.id}`);
}; };
const onDeleteSyncStatus = async (item) => {
await deleteSyncStatus(item.id);
item.status = 1;
};
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">

View File

@ -17,6 +17,7 @@
padding: 12px 16px 16px; padding: 12px 16px 16px;
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;
position: relative;
.name { .name {
color: var(--Text-1, #211f24); color: var(--Text-1, #211f24);
font-family: $font-family-medium; font-family: $font-family-medium;
@ -78,6 +79,23 @@
margin-bottom: 8px; margin-bottom: 8px;
} }
} }
.mask {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
text-align: center;
background-color: rgba(255, 255, 255, 0.8);
transition: opacity 0.1s cubic-bezier(0, 0, 1, 1);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.name {
font-family: $font-family-regular;
}
}
.operate-row { .operate-row {
display: flex; display: flex;
@ -86,7 +104,7 @@
padding-top: 8px; padding-top: 8px;
} }
&.checked { &.checked {
border: 1px solid var(--Brand-6, #6D4CFE); border: 1px solid var(--Brand-6, #6d4cfe);
} }
} }
} }

View File

@ -278,12 +278,8 @@ const handleDelete = (item) => {
const handleCloseTip = () => { const handleCloseTip = () => {
selectedItems.value = []; selectedItems.value = [];
}; };
const startSyncDataPolling = () => {
startSyncData.value = true;
clearSyncDataTimer();
// 先立即执行一次 // 先立即执行一次
const poll = async () => { const getAsyncStatus = async () => {
const { code, data } = await getMediaAccountSyncStatus(); const { code, data } = await getMediaAccountSyncStatus();
if (code === 200) { if (code === 200) {
syncMediaAccounts.value = data; syncMediaAccounts.value = data;
@ -297,8 +293,13 @@ const startSyncDataPolling = () => {
} }
} }
}; };
poll();
syncDataTimer = setInterval(poll, 3000); const startSyncDataPolling = () => {
startSyncData.value = true;
clearSyncDataTimer();
getAsyncStatus();
syncDataTimer = setInterval(getAsyncStatus, 3000);
}; };
const handleSyncData = async (item) => { const handleSyncData = async (item) => {