detail.vue 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <template>
  2. <div class="w-full h-full">
  3. <van-tabs v-model:active="tabActive" swipe-threshold="3">
  4. <van-tab title="客户信息" name="客户信息">
  5. <CustomerInfo :info="infoData" />
  6. </van-tab>
  7. <van-tab title="相关任务" name="相关任务">
  8. <RelatedTasks :infoList="relatedTasksList" />
  9. </van-tab>
  10. <van-tab title="相关联系人" name="相关联系人">
  11. <RelatedContacts :infoList="relatedContactsList" />
  12. </van-tab>
  13. <van-tab title="相关商机" name="相关商机">
  14. <RelatedBusinessOpportunities :infoList="relatedBusinessOpportunitiesList" />
  15. </van-tab>
  16. <van-tab title="相关销售订单" name="相关销售订单">
  17. <RelatedSalesOrders :infoList="relatedSalesOrdersList" />
  18. </van-tab>
  19. </van-tabs>
  20. </div>
  21. </template>
  22. <script setup>
  23. import { ref, onActivated, watch } from 'vue';
  24. import { useLifecycle } from '@hooks/useCommon.js';
  25. import { OBTAIN_CUSTOMER_DETAILS } from "@hooks/useApi"
  26. import requests from "@common/requests";
  27. import CustomerInfo from './customerInfo.vue';
  28. import RelatedTasks from '../tasks/relatedTasks.vue';
  29. import RelatedContacts from '../contacts/relatedContacts.vue';
  30. import RelatedBusinessOpportunities from '../business/relatedBusinessOpportunities.vue';
  31. import RelatedSalesOrders from '../order/relatedSalesOrders.vue';
  32. const props = defineProps({
  33. info: {
  34. type: Object,
  35. required: true,
  36. default: () => ({})
  37. }
  38. })
  39. const tabActive = ref('客户信息');
  40. const relatedTasksList = ref([]);
  41. const relatedContactsList = ref([]);
  42. const relatedBusinessOpportunitiesList = ref([]);
  43. const relatedSalesOrdersList = ref([]);
  44. const infoData = ref(props.info)
  45. const timeout = ref(null);
  46. watch(() => props.info, (newValue) => {
  47. tabActive.value = '客户信息';
  48. processingData(newValue.id)
  49. })
  50. function getDetailedData(id) {
  51. requests.post(OBTAIN_CUSTOMER_DETAILS, { id }).then(({ data }) => {
  52. infoData.value = data || {}
  53. relatedTasksList.value = data.tasks || []
  54. relatedContactsList.value = data.contacts || []
  55. relatedBusinessOpportunitiesList.value = data.businessOpportunitys || []
  56. relatedSalesOrdersList.value = data.salesOrders || []
  57. })
  58. }
  59. function processingData(id) {
  60. clearTimeout(timeout.value);
  61. timeout.value = setTimeout(() => {
  62. getDetailedData(id)
  63. }, 100);
  64. }
  65. useLifecycle({
  66. init: () => {
  67. tabActive.value = '客户信息';
  68. processingData(props.info.id)
  69. },
  70. load: () => {
  71. tabActive.value = '客户信息';
  72. processingData(props.info.id)
  73. },
  74. unload: () => {
  75. clearTimeout(timeout.value)
  76. }
  77. });
  78. </script>
  79. <style lang='scss' scoped>
  80. /* 样式代码 */
  81. </style>