index.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <template>
  2. <fs-page class="fs-page-custom" v-loading='loading'>
  3. <fs-crud ref="crudRef" v-bind="crudBinding">
  4. <template #search-left>
  5. <DateRangePicker v-model="dateRange"></DateRangePicker>
  6. </template>
  7. <template v-for="field of Object.keys(BaseColumn)" #[`cell_${field}`]="scope">
  8. <DataCompare
  9. :field="field"
  10. :value="scope.row[field]"
  11. :prev-val="scope.row[`prev${field}`]"
  12. :gap-val="scope.row[`gap${field}`]"
  13. :date-range="dateRange"
  14. :show-compare="showCompare"/>
  15. </template>
  16. <template #toolbar-left>
  17. <div>
  18. <span>数据对比 </span>
  19. <el-switch v-model="showCompare" size="small" />
  20. </div>
  21. </template>
  22. </fs-crud>
  23. </fs-page>
  24. </template>
  25. <script lang="ts" setup>
  26. import { ref, onMounted, Ref, watch } from 'vue'
  27. import { useFs, FsPage } from '@fast-crud/fast-crud'
  28. import { createCrudOptions } from './crud'
  29. import { usePublicData } from '/@/stores/publicData'
  30. import { storeToRefs } from 'pinia'
  31. import DateRangePicker from '/@/components/DateRangePicker/index.vue'
  32. import { GetList } from './api'
  33. import { BaseColumn } from '/@/views/adManage/utils/commonTabColumn.js'
  34. import { LocationQueryValue } from 'vue-router'
  35. import DataCompare from '/@/components/dataCompare/index.vue'
  36. defineOptions({
  37. name: "Placement"
  38. })
  39. const publicData = usePublicData()
  40. const { dateRange } = storeToRefs(publicData)
  41. interface Props {
  42. campaignId: LocationQueryValue | LocationQueryValue[]
  43. }
  44. const props = defineProps<Props>()
  45. const loading = ref(true)
  46. const showCompare = ref(false)
  47. const fetchData = async () => {
  48. loading.value = true
  49. const resp = await GetList({
  50. campaignId: props.campaignId,
  51. startDate: dateRange.value[0],
  52. endDate: dateRange.value[1]
  53. })
  54. crudExpose.setTableData(resp.data)
  55. loading.value = false
  56. }
  57. const context = { fetchData }
  58. const { crudBinding, crudRef, crudExpose } = useFs({ createCrudOptions, context })
  59. onMounted(async () => {
  60. await fetchData()
  61. })
  62. watch(
  63. dateRange,
  64. async () => await fetchData()
  65. )
  66. </script>
  67. <style scoped>
  68. .red {
  69. color: red;
  70. }
  71. .green {
  72. color: #1cbc0e;
  73. }
  74. </style>