projects.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <template>
  2. <!-- 文化传承 - 非遗项目 -->
  3. <CommonListPage
  4. :title="'非遗项目'"
  5. :prevPage="{ title: '保护传承' }"
  6. :dropDownNames="dropdownNames"
  7. :pageSize="8"
  8. :load="loadData"
  9. :loadDetail="loadDetail"
  10. :tagsData="tagsData"
  11. showTableSwitch
  12. :tableSwitchOptions="{
  13. title: '项目名称',
  14. }"
  15. :defaultSelectTag="tagsData[0].id"
  16. detailsPage="/inheritor/intangible-detail"
  17. />
  18. </template>
  19. <script setup lang="ts">
  20. import CommonContent, { GetContentListParams } from '@/api/CommonContent';
  21. import ProjectsContent from '@/api/inheritor/ProjectsContent';
  22. import type { DropDownNames } from '@/components/content/CommonListPage.vue';
  23. import { onMounted, ref } from 'vue';
  24. import { useRoute } from 'vue-router';
  25. async function loadDetail(id: number, _item: any) {
  26. const item = await ProjectsContent.getContentDetail(id);
  27. item.addItems = [
  28. { name: '非遗级别', text: item.levelText, span: 12 },
  29. { name: '非遗类别', text: item.ichTypeText, span: 12 },
  30. { name: '地区', text: item.district, span: 12 },
  31. { name: '批次', text: item.batchText, span: 12 },
  32. ];
  33. return item;
  34. }
  35. async function loadData(
  36. page: number,
  37. pageSize: number,
  38. selectedTag: number,
  39. searchText: string,
  40. dropDownValues: number[]
  41. ) {
  42. const res = await ProjectsContent.getContentList(new GetContentListParams().setSelfValues({
  43. ichType: selectedTag == 0 ? undefined: selectedTag,
  44. level: dropDownValues[0] == 0 ? undefined: dropDownValues[0],
  45. region: dropDownValues[1] == 0 ? undefined: dropDownValues[1],
  46. keywords: searchText,
  47. }), page, pageSize);
  48. return {
  49. page: page,
  50. total: res.total,
  51. data: res.list.map((item, index) => {
  52. return {
  53. id: item.id,
  54. title: item.title ?? '!!title!!',
  55. desc: item.desc,
  56. image: item.image,
  57. addItems: [
  58. { name: '非遗级别', text: item.levelText, span: 12 },
  59. { name: '非遗类别', text: item.ichTypeText, span: 12 },
  60. { name: '地区', text: item.district, span: 12 },
  61. { name: '批次', text: item.batchText, span: 12 },
  62. ],
  63. };
  64. }),
  65. }
  66. }
  67. const dropdownNames = ref<DropDownNames[]>([]);
  68. //子分类
  69. const tagsData = ref([
  70. { id: 0, name: '全部' },
  71. ]);
  72. const route = useRoute();
  73. onMounted(async () => {
  74. tagsData.value = tagsData.value.concat((await CommonContent.getCategoryList(4)).map((item) => ({
  75. id: item.id,
  76. name: item.title,
  77. })));
  78. const levels = await CommonContent.getCategoryList(2);
  79. dropdownNames.value.push({
  80. options: [{
  81. id: 0,
  82. name: '全部'
  83. }].concat(levels.map((item) => ({
  84. id: item.id,
  85. name: item.title,
  86. }))),
  87. defaultSelectedValue: route.query.level ? Number(route.query.level) : 0,
  88. });
  89. dropdownNames.value.push({
  90. options: [{
  91. id: 0,
  92. name: '全部'
  93. }].concat((await CommonContent.getCategoryList(1)).map((item) => ({
  94. id: item.id,
  95. name: item.title,
  96. }))),
  97. defaultSelectedValue: 0,
  98. });
  99. })
  100. </script>
  101. <style>
  102. </style>