index.vue 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <script lang="ts" setup>
  2. import { storeToRefs } from 'pinia'
  3. import { Ref, onBeforeMount, provide, ref } from 'vue'
  4. import DateRangePicker from '/@/components/DateRangePicker/index.vue'
  5. import { usePublicData } from '/@/stores/publicData'
  6. import { GetAllPortfolios } from '/@/views/adManage/portfolios/api'
  7. import Audiences from '/@/views/adManage/sd/audiences/index.vue'
  8. import Campaigns from '/@/views/adManage/sd/campaigns/index.vue'
  9. import MatchedDelivery from '/@/views/adManage/sd/matchedDelivery/index.vue'
  10. import PromoteProducts from '/@/views/adManage/sd/promoteProducts/index.vue'
  11. import Targets from '/@/views/adManage/sd/targets/index.vue'
  12. // const shopInfo = useShopInfo()
  13. const publicData = usePublicData()
  14. const selectedPortfolios: Ref<string[]> = ref([])
  15. const portfolios: Ref<Portfolio[]> = ref([])
  16. const { dateRange } = storeToRefs(publicData)
  17. provide('dateRange', dateRange)
  18. const tabActiveName = ref('Campaigns')
  19. const tabsComponents: any = {
  20. Campaigns,
  21. Targets,
  22. Audiences,
  23. MatchedDelivery,
  24. PromoteProducts,
  25. }
  26. const tabs = [
  27. { label: '广告活动', name: 'Campaigns' },
  28. { label: '商品投放', name: 'Targets' },
  29. { label: '受众', name: 'Audiences' },
  30. { label: '匹配的投放', name: 'MatchedDelivery' },
  31. { label: '推广商品', name: 'PromoteProducts' },
  32. ]
  33. const searchItem = ref('')
  34. const filterItem = ref('')
  35. provide('searchItem', searchItem)
  36. // 防止搜索框内容变化时,搜索框内容不更新
  37. function handleSearchChange() {
  38. searchItem.value = filterItem.value
  39. }
  40. onBeforeMount(async () => {
  41. const resp: APIResponseData = await GetAllPortfolios()
  42. portfolios.value = resp.data
  43. })
  44. </script>
  45. <template>
  46. <div class="asj-container">
  47. <div class="public-search">
  48. <el-input v-model="filterItem" @change="handleSearchChange" style="width: 500px" placeholder="请输入搜索内容"></el-input>
  49. <DateRangePicker v-model="dateRange"></DateRangePicker>
  50. <el-select
  51. v-model="selectedPortfolios"
  52. placeholder="广告组合"
  53. clearable
  54. multiple
  55. style="width: 200px"
  56. collapse-tags
  57. collapse-tags-tooltip
  58. :max-collapse-tags="3"
  59. disabled="true"
  60. >
  61. <el-option v-for="info of portfolios" :label="info.name" :value="info.portfolioId"></el-option>
  62. </el-select>
  63. </div>
  64. <div class="asj-tabs">
  65. <div v-for="tab of tabs" :key="tab.name" :class="['asj-tab', { active: tabActiveName === tab.name }]" @click="tabActiveName = tab.name">
  66. {{ tab.label }}
  67. </div>
  68. </div>
  69. <component :is="tabsComponents[tabActiveName]"></component>
  70. </div>
  71. </template>
  72. <style scoped>
  73. ::v-deep(.el-table .el-table__header-wrapper .cell) {
  74. border-right: 1px solid rgb(218, 221, 223);
  75. }
  76. ::v-deep(.el-table__footer-wrapper .el-table__footer tr) {
  77. background-color: #f5f7fa;
  78. }
  79. </style>