| | |
| | | <script lang="ts" setup> |
| | | import { computed, onActivated, onMounted, ref } from 'vue'; |
| | | import type { Ref } from 'vue'; |
| | | |
| | | import { Page } from '..\..\..\packages\effects\common-ui\src'; |
| | | import { computed, onActivated, onMounted, ref, watch } from 'vue'; |
| | | |
| | | import { Page } from '@vben/common-ui'; |
| | | |
| | | import { Badge, Card, List } from 'ant-design-vue'; |
| | | import { automaticApproval } from '#/store/audit-policy'; |
| | | |
| | | import { getFollowClueCount } from '#/api/crm/clue'; |
| | | import { |
| | |
| | | receivableAuditCount, |
| | | receivablePlanRemindCount, |
| | | ); |
| | | const visibleLeftSides = computed(() => leftSides.filter((item) => |
| | | !automaticApproval.value || !['contractAudit', 'receivableAudit'].includes(item.menu), |
| | | )); |
| | | watch(automaticApproval, (automatic) => { |
| | | if (automatic && ['contractAudit', 'receivableAudit'].includes(leftMenu.value)) { |
| | | leftMenu.value = 'customerTodayContact'; |
| | | } |
| | | }); |
| | | |
| | | const currentComponent = computed(() => { |
| | | const components = { |
| | |
| | | leftMenu.value = item.menu; |
| | | } |
| | | |
| | | /** 获取数量 */ |
| | | async function getCount() { |
| | | customerTodayContactCount.value = await getTodayContactCustomerCount(); |
| | | customerPutPoolRemindCount.value = await getPutPoolRemindCustomerCount(); |
| | | customerFollowCount.value = await getFollowCustomerCount(); |
| | | clueFollowCount.value = await getFollowClueCount(); |
| | | contractAuditCount.value = await getAuditContractCount(); |
| | | contractRemindCount.value = await getRemindContractCount(); |
| | | receivableAuditCount.value = await getAuditReceivableCount(); |
| | | receivablePlanRemindCount.value = await getReceivablePlanRemindCount(); |
| | | /** 独立加载各类数量,单个接口失败不阻断其他待办。 */ |
| | | let countRequest: Promise<void> | undefined; |
| | | function getCount() { |
| | | if (countRequest) return countRequest; |
| | | const requests: [Ref<number>, () => Promise<number>][] = [ |
| | | [customerTodayContactCount, getTodayContactCustomerCount], |
| | | [customerPutPoolRemindCount, getPutPoolRemindCustomerCount], |
| | | [customerFollowCount, getFollowCustomerCount], |
| | | [clueFollowCount, getFollowClueCount], |
| | | [contractRemindCount, getRemindContractCount], |
| | | [receivablePlanRemindCount, getReceivablePlanRemindCount], |
| | | ]; |
| | | if (!automaticApproval.value) { |
| | | requests.push( |
| | | [contractAuditCount, getAuditContractCount], |
| | | [receivableAuditCount, getAuditReceivableCount], |
| | | ); |
| | | } |
| | | countRequest = Promise.allSettled( |
| | | requests.map(async ([count, request]) => { |
| | | count.value = await request(); |
| | | }), |
| | | ).then(() => undefined).finally(() => { |
| | | countRequest = undefined; |
| | | }); |
| | | return countRequest; |
| | | } |
| | | |
| | | /** 激活时 */ |
| | |
| | | <Page auto-content-height> |
| | | <div class="flex h-full w-full"> |
| | | <Card class="w-1/5"> |
| | | <List item-layout="horizontal" :data-source="leftSides"> |
| | | <List item-layout="horizontal" :data-source="visibleLeftSides"> |
| | | <template #renderItem="{ item }"> |
| | | <List.Item |
| | | @click="sideClick(item)" |
| | |
| | | </template> |
| | | </List> |
| | | </Card> |
| | | <component class="ml-4 w-4/5" :is="currentComponent" /> |
| | | <component class="ml-4 w-4/5" :is="currentComponent" @refresh="getCount" /> |
| | | </div> |
| | | </Page> |
| | | </template> |