IndexStats.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <template>
  2. <SimplePageContentLoader :loader="statsData">
  3. <div class="d-flex row">
  4. <div
  5. class="col-12 col-md-6 col-lg-4 col-xl-4"
  6. v-for="(stat,key) in statsData.content.value"
  7. :key="key"
  8. >
  9. <div :class="`main-card-box type${stat.type}`">
  10. <div class="content">
  11. <h4>{{ stat.title || '\u200b' }}</h4>
  12. <div class="descs">
  13. <a
  14. v-for="(data, key2) in stat.datas"
  15. :class="['box', {'long': data.long}]"
  16. :key="key2"
  17. :href="data.link"
  18. >
  19. <h5>{{ data.title }}</h5>
  20. <p>{{ data.value }}
  21. <span v-if="data.valueExtra">{{ data.valueExtra }}</span>
  22. </p>
  23. </a>
  24. </div>
  25. </div>
  26. </div>
  27. </div>
  28. </div>
  29. </SimplePageContentLoader>
  30. </template>
  31. <script setup lang="ts">
  32. import { GetContentListParams } from '~/api/CommonContent';
  33. import SeminarContent from '~/api/inheritor/SeminarContent';
  34. import UnmoveableContent from '~/api/inheritor/UnmoveableContent';
  35. import IndexContent from '~/api/introduction/IndexContent';
  36. import { useSSrSimpleDataLoader } from '~/composeable/SimpleDataLoader';
  37. const router = useRouter();
  38. const statsData = await useSSrSimpleDataLoader('stats', async () => {
  39. const data = (await IndexContent.getStats());
  40. const semiCount = (await SeminarContent.getContentList(new GetContentListParams(), 1, 1)).total;
  41. const unmoveableCount = (await UnmoveableContent.getContentList(new GetContentListParams(), 1, 1)).total;
  42. let sumInheritor = 0;
  43. let sumProject = 0;
  44. const topLevelProject = data.ichData.find((p: any) => p.level_text == '人类非遗')?.total || 0;
  45. return [
  46. {
  47. title: '非遗代表性项目',
  48. type: '1',
  49. datas: data.ichData.filter((p: any) => [ '国家级', '省级', '市级' ].includes(p.level_text)).map((item: any) => {
  50. sumProject += item.total;
  51. return {
  52. title: item.level_text,
  53. value: item.total + ' 项',
  54. valueExtra: (item.level_text == '国家级' ? ` (其中${topLevelProject}项为人类非遗)` : ''),
  55. long: item.level_text == '国家级',
  56. link: router.resolve({ path: '/inheritor/projects', query: { level: item.level } }).href,
  57. }
  58. }).concat([
  59. {
  60. title: `目前厦门市非遗项目市级以上共有${sumProject}项`,
  61. value: '',
  62. long: true,
  63. }
  64. ])
  65. },
  66. {
  67. title: '非遗代表性传承人',
  68. type: '2',
  69. datas: data.inheritorData.filter((p: any) => [ '国家级', '省级', '市级'/* , '区县级' */ ].includes(p.title)).map((item: any) => {
  70. sumInheritor += item.total;
  71. return {
  72. title: item.title,
  73. value: item.total,
  74. link: router.resolve({ path: '/inheritor/inheritor', query: { level: item.level } }).href
  75. }
  76. }).concat([
  77. {
  78. title: '',
  79. value: '',
  80. }
  81. ], [
  82. {
  83. title: `目前厦门市非遗传承人市级以上共有${sumInheritor}人`,
  84. value: '',
  85. long: true,
  86. }
  87. ]),
  88. },
  89. {
  90. title: '其他传承项目',
  91. type: '1',
  92. datas: [
  93. {
  94. title: '传习所',
  95. value: semiCount,
  96. link: router.resolve({ path: '/inheritor/seminar' }).href,
  97. },
  98. {
  99. title: '传统村落',
  100. value: data.villageData[0]?.total ?? 0,
  101. link: router.resolve({ path: '/village/' }).href,
  102. },
  103. {
  104. title: '文物古迹',
  105. value: unmoveableCount,
  106. link: router.resolve({ path: '/inheritor/unmoveable' }).href,
  107. },
  108. ],
  109. },
  110. /*{
  111. title: '不可移动文物',
  112. type: '3',
  113. datas: data.crData.map((item: any) => {
  114. return {
  115. title: item.title,
  116. value: item.total
  117. }
  118. })
  119. },
  120. {
  121. title: '闽南文化重要相关文物古迹',
  122. type: '2',
  123. datas: data.minnanCr.map((item: any) => {
  124. return {
  125. title: item.title,
  126. value: item.total
  127. }
  128. })
  129. },
  130. {
  131. title: '重要相关历史风貌区',
  132. type: '1',
  133. datas: data.historyData.map((item: any) => {
  134. return {
  135. title: item.title,
  136. value: item.total
  137. }
  138. })
  139. },
  140. {
  141. title: '传习中心',
  142. type: '3',
  143. datas: data.ichCenter.map((item: any) => {
  144. return {
  145. title: item.title,
  146. value: item.total
  147. }
  148. })
  149. },*/
  150. ];
  151. });
  152. </script>