details.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <template>
  2. <div class="details main-background main-background-type0">
  3. <div class="nav-placeholder">
  4. </div>
  5. <!-- 表单 -->
  6. <section class="main-section">
  7. <div class="content">
  8. <div class="title left-right">
  9. <a-button :icon="h(ArrowLeftOutlined)" class="mb-3" @click="router.back()">返回</a-button>
  10. <h2>{{ querys.name }}</h2>
  11. <span style="width:50px;"></span>
  12. </div>
  13. <img class="head-img w-100 radius-base" src="https://mn.wenlvti.net/app_static/xiangan/banner_dig_1.jpg"/>
  14. <div class="mt-2 p-2 bg-primary radius-s rounded-3 d-flex flex-row align-center">
  15. <div class="flex-one d-flex flex-row justify-center align-baseline">
  16. <div class="label">已认领:</div>
  17. <div class="size-l ml-2 color-primary">
  18. {{ querys.name }}
  19. <span class="size-base">Lv.{{ querys.level }}</span>
  20. </div>
  21. </div>
  22. <div class="flex-one d-flex flex-row justify-center align-baseline">
  23. <div class="label">文化积分:</div>
  24. <div class="size-l ml-2 color-primary">{{ querys.points }}</div>
  25. </div>
  26. </div>
  27. <TaskList>
  28. <Alert
  29. v-if="!isAdmin && isEmpty"
  30. class="mt-3"
  31. type="warning"
  32. showIcon
  33. message="您当前没有可完成的任务, 请联系管理员认领可采编栏目"
  34. />
  35. <TaskItem
  36. title="随手记"
  37. desc="写随手记,记录下村庄文化发现和思考,自动分类。也可点击下方进入指定的分类采集信息"
  38. icon="icon-task-summary"
  39. :enabled="canCollect('collect')"
  40. @click="goForm('collect', 1)"
  41. />
  42. <TaskItem
  43. title="村落概况"
  44. desc="探索村落的历史渊源与发生轨迹"
  45. icon="icon-task-summary"
  46. :enabled="canCollect('village')"
  47. @click="navTo('task/summary', nextPageData)"
  48. />
  49. <TaskItem
  50. title="历史文化"
  51. desc="传承百年文化遗产和精神财富"
  52. icon="icon-task-history"
  53. :enabled="canCollect('cultural')"
  54. @click="navTo('task/history', nextPageData)"
  55. />
  56. <TaskItem
  57. title="非物质文化遗产项目"
  58. desc="维护文化多样性"
  59. icon="icon-task-custom-1"
  60. :enabled="canCollect('ich')"
  61. @click="goForm('ich', 0)"
  62. />
  63. <TaskItem
  64. title="环境格局"
  65. desc="感受自然人文环境之美"
  66. icon="icon-task-environment"
  67. :enabled="canCollect('environment')"
  68. @click="navTo('task/environment', nextPageData)"
  69. />
  70. <TaskItem
  71. title="传统建筑"
  72. desc="领略古建筑的独特魅力"
  73. icon="icon-task-building"
  74. :enabled="canCollect('building')"
  75. @click="navTo('task/building', nextPageData)"
  76. />
  77. <TaskItem
  78. title="民俗文化"
  79. desc="体验民间传统习俗与节庆"
  80. icon="icon-task-custom"
  81. :enabled="canCollect('folk_culture')"
  82. @click="navTo('task/custom', nextPageData)"
  83. />
  84. <TaskItem
  85. title="美食物产"
  86. desc="正宗、传统地方特色美食"
  87. icon="icon-task-food"
  88. :enabled="canCollect('food_product')"
  89. @click="navTo('task/food', nextPageData)"
  90. />
  91. <TaskItem
  92. title="物产资源"
  93. desc="特定地域的植物、矿物或手工艺"
  94. icon="icon-task-mine"
  95. :enabled="canCollect('food_product')"
  96. @click="navTo('task/mine', nextPageData)"
  97. />
  98. <TaskItem
  99. title="旅游路线"
  100. desc="体验独特的文化魅力"
  101. icon="icon-task-trip"
  102. :enabled="canCollect('route')"
  103. @click="navTo('task/trip', nextPageData)"
  104. />
  105. </TaskList>
  106. </div>
  107. </section>
  108. </div>
  109. </template>
  110. <script setup lang="ts">
  111. import { useLoadQuerys } from '@imengyu/imengyu-web-shared';
  112. import { computed, h } from 'vue';
  113. import { useRouter } from 'vue-router';
  114. import { ArrowLeftOutlined } from '@ant-design/icons-vue';
  115. import { useCollectStore } from '@/stores/collect';
  116. import { useTaskEntryForm } from './composeable/TaskEntryForm';
  117. import { useAuthStore } from '@/stores/auth';
  118. import TaskList from './components/TaskList.vue';
  119. import TaskItem from './components/TaskItem.vue';
  120. import { Alert } from 'ant-design-vue';
  121. const authStore = useAuthStore();
  122. const router = useRouter();
  123. const { querys } = useLoadQuerys({
  124. id: 0,
  125. name: '',
  126. points: 0,
  127. level: 0,
  128. villageVolunteerId: 0,
  129. });
  130. const nextPageData = computed(() => ({
  131. villageId: querys.value.id,
  132. villageVolunteerId: querys.value.villageVolunteerId,
  133. }));
  134. const { isAdmin } = useAuthStore();
  135. const { canCollect, isEmpty } = useCollectStore();
  136. const { goForm } = useTaskEntryForm();
  137. function navTo(path: string, data: any) {
  138. router.push({
  139. path,
  140. query: data,
  141. })
  142. }
  143. </script>
  144. <style lang="scss" scoped>
  145. @use '../assets/scss/colors.scss' as *;
  146. .head-img {
  147. height: 160px;
  148. object-fit: cover;
  149. }
  150. </style>