index.vue 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <template>
  2. <div class="layout-padding">
  3. <div class="!overflow-auto px-1">
  4. <!-- 头部筛选区域 -->
  5. <div class="el-card p-9">
  6. <div class="flex justify-between">
  7. <Title :title="t('addUser.analytics')" />
  8. <div class="">
  9. <el-button type="primary">{{ t('addUser.growth') }}</el-button>
  10. <el-button type="primary">{{ t('addUser.ai') }}</el-button>
  11. </div>
  12. </div>
  13. <div class="mt-2">
  14. <el-row shadow="hover" class="ml10">
  15. <el-form :inline="true" :model="formData" ref="queryRef">
  16. <el-form-item>
  17. <el-date-picker
  18. v-model="formData.time"
  19. type="daterange"
  20. value-format="YYYY-MM-DD"
  21. @change="query"
  22. class="!w-[250px]"
  23. start-placeholder="开始时间"
  24. end-placeholder="结束时间"
  25. />
  26. </el-form-item>
  27. <el-form-item>
  28. <FilterSelect v-model="formData.channel" type="channel" @change="query" class="!w-[180px] ml-2" />
  29. </el-form-item>
  30. <el-form-item>
  31. <FilterSelect v-model="formData.version" type="version" @change="query" class="!w-[180px] ml-2" />
  32. </el-form-item>
  33. </el-form>
  34. </el-row>
  35. </div>
  36. </div>
  37. <!-- 新增趋势模块 -->
  38. <div class="mt-3">
  39. <AddTrend :form-data="formData" @query="query" />
  40. </div>
  41. <!-- 用户质量模块 -->
  42. <div class="mt-3">
  43. <UserQuality :form-data="formData" @query="query" />
  44. </div>
  45. </div>
  46. </div>
  47. </template>
  48. <script setup lang="ts">
  49. import { ref, defineAsyncComponent } from 'vue';
  50. import { useI18n } from 'vue-i18n';
  51. import dayjs from 'dayjs';
  52. const { t } = useI18n();
  53. const Title = defineAsyncComponent(() => import('/@/components/Title/index.vue'));
  54. const FilterSelect = defineAsyncComponent(() => import('/@/components/common/filter-select.vue'));
  55. const AddTrend = defineAsyncComponent(() => import('./components/AddTrend.vue'));
  56. const UserQuality = defineAsyncComponent(() => import('./components/UserQuality.vue'));
  57. // 计算默认时间范围(半个月前到今天)
  58. const getDefaultDateRange = () => {
  59. const endDate = dayjs();
  60. const startDate = endDate.subtract(15, 'day');
  61. return [startDate.format('YYYY-MM-DD'), endDate.format('YYYY-MM-DD')];
  62. };
  63. const formData = ref<Record<string, any>>({
  64. time: getDefaultDateRange(), // 时间范围
  65. });
  66. const query = () => {
  67. console.log(formData.value);
  68. };
  69. </script>
  70. <style lang="scss" scoped>
  71. .el-form-item--default {
  72. margin-bottom: 0;
  73. }
  74. .el-form.el-form--inline .el-form-item--default.el-form-item:last-of-type,
  75. .el-form.el-form--inline .el-form-item--small.el-form-item:last-of-type {
  76. margin-bottom: 0 !important;
  77. }
  78. </style>