index.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <template>
  2. <fs-page class="fs-page-custom">
  3. <fs-crud ref="crudRef" v-bind="crudBinding">
  4. <template #header-middle>
  5. <el-tabs v-model="tabActiveName" class="chart-tabs" type="border-card">
  6. <el-tab-pane label="数据趋势" name="dataTendency">
  7. <DataTendencyChart
  8. v-if="tabActiveName === 'dataTendency'"
  9. :query="queryParams"
  10. :fetchCard="getCardData"
  11. :fetch-line-month="getLineMonthData"
  12. :fetch-line-week="getLineWeekData"
  13. :fetchLine="getLineData">
  14. </DataTendencyChart>
  15. </el-tab-pane>
  16. <el-tab-pane label="广告结构" name="adStruct">
  17. <AdStructChart v-if="tabActiveName === 'adStruct'"/>
  18. </el-tab-pane>
  19. <el-tab-pane label="散点视图" name="scatterView" :lazy="true"></el-tab-pane>
  20. </el-tabs>
  21. </template>
  22. <template #cell_campaignName="scope">
  23. <el-tooltip effect="dark" :content="scope.row.campaignName" placement="top">
  24. <el-link type="primary" :underline="false" @click="jumpGroup(scope.row)">
  25. <div class="en-text">{{ scope.row.campaignName }}</div>
  26. </el-link>
  27. </el-tooltip>
  28. </template>
  29. <template #cell_MissedImpressions="scope">
  30. {{ scope.row.MissedImpressionsLower ?? '0' }} ~ {{ scope.row.MissedImpressionsUpper ?? '0' }}
  31. </template>
  32. <template #cell_MissedClicks="scope">
  33. {{ scope.row.MissedClicksLower ?? '0' }} ~ {{ scope.row.MissedClicksUpper ?? '0' }}
  34. </template>
  35. <template #cell_MissedSales="scope">
  36. {{ scope.row.MissedSalesLower ?? '0' }} ~ {{ scope.row.MissedSalesUpper ?? '0' }}
  37. </template>
  38. <template v-for="field of Object.keys(SbBaseColumn)" #[`cell_${field}`]="scope">
  39. <DataCompare
  40. :field="field"
  41. :value="scope.row[field]"
  42. :prev-val="scope.row[`prev${field}`]"
  43. :gap-val="scope.row[`gap${field}`]"
  44. :date-range="dateRange"
  45. :show-compare="showCompare"/>
  46. </template>
  47. <template #toolbar-left>
  48. <div class="campare-switch">
  49. <span>数据对比 </span>
  50. <el-switch v-model="showCompare" size="small" />
  51. </div>
  52. </template>
  53. </fs-crud>
  54. </fs-page>
  55. </template>
  56. <script lang="ts" setup>
  57. import {onMounted, ref, watch} from 'vue'
  58. import {FsPage, useFs} from '@fast-crud/fast-crud'
  59. import {createCrudOptions} from './crud'
  60. import {useRouter} from 'vue-router'
  61. import DataTendencyChart from '/@/views/adManage/sb/chartComponents/dataTendency.vue'
  62. import {useShopInfo} from '/@/stores/shopInfo'
  63. import AdStructChart from './chartComponents/adStruct.vue'
  64. import {getCardData, getLineData, getLineMonthData, getLineWeekData} from '../campaigns/api'
  65. import {usePublicData} from '/@/stores/publicData'
  66. import {storeToRefs} from 'pinia'
  67. import {SbBaseColumn} from '/@/views/adManage/utils/commonTabColumn'
  68. import DataCompare from '/@/components/dataCompare/index.vue'
  69. const tabActiveName = ref('dataTendency')
  70. const shopInfo = useShopInfo()
  71. const publicData = usePublicData()
  72. const {dateRange} = storeToRefs(publicData)
  73. const {profile} = storeToRefs(shopInfo)
  74. const queryParams = ref({
  75. profileId: profile.value.profile_id,
  76. dateRange
  77. })
  78. const {crudBinding, crudRef, crudExpose} = useFs({createCrudOptions, context: queryParams})
  79. const router = useRouter()
  80. const showCompare = ref(false)
  81. const jumpGroup = (row: any) => {
  82. router.push({
  83. name: 'CampaignDetail',
  84. query: {id: row.id, campaignId: row.campaignId, tagsViewName: row.campaignName},
  85. })
  86. }
  87. onMounted(() => {
  88. crudExpose.doRefresh()
  89. })
  90. watch(queryParams, () => {
  91. crudExpose.doRefresh()
  92. }, { deep: true })
  93. </script>
  94. <style lang="scss" scoped>
  95. .chart-tabs {
  96. margin: 5px 0;
  97. .el-tabs__nav {
  98. padding-left: 0 !important;
  99. }
  100. }
  101. .campare-switch {
  102. flex: none;
  103. }
  104. ::v-deep(.el-table__footer-wrapper td.el-table__cell:nth-child(n+2):nth-child(-n+4) .cell) {
  105. display: none;
  106. }
  107. .en-text {
  108. max-width: 100%;
  109. font-size: 13px;
  110. font-weight: 420;
  111. word-break: break-word;
  112. overflow: hidden;
  113. text-overflow: ellipsis;
  114. white-space: normal;
  115. display: -webkit-box;
  116. -webkit-line-clamp: 1;
  117. -webkit-box-orient: vertical;
  118. }
  119. ::v-deep(.el-table__footer-wrapper) {
  120. border: 0;
  121. }
  122. ::v-deep(.el-table .el-table__footer-wrapper .cell) {
  123. font-weight: 600;
  124. }
  125. .text-range {
  126. color: #808184;
  127. }
  128. </style>