details.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  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. <div class="task-list">
  28. <div v-if="canCollect('village')" class="item">
  29. <i class="iconfont icon-task-summary"></i>
  30. <div class="info">
  31. <div class="title">村落概况</div>
  32. <div class="desc">探索村落的历史渊源与发生轨迹</div>
  33. </div>
  34. <a-button type="primary" @click="navTo('task/summary', nextPageData)">去完成</a-button>
  35. </div>
  36. <div v-if="canCollect('cultural')" class="item">
  37. <i class="iconfont icon-task-history"></i>
  38. <div class="info">
  39. <div class="title">历史文化</div>
  40. <div class="desc">传承百年文化遗产和精神财富</div>
  41. </div>
  42. <a-button type="primary" @click="navTo('task/history', nextPageData)">
  43. 去完成
  44. </a-button>
  45. </div>
  46. <div v-if="canCollect('ich')" class="item">
  47. <i class="iconfont icon-task-custom-1"></i>
  48. <div class="info">
  49. <div class="title">非物质文化遗产项目</div>
  50. <div class="desc">维护文化多样性</div>
  51. </div>
  52. <a-button type="primary" @click="goForm('ich', 0)">
  53. 填写
  54. </a-button>
  55. </div>
  56. <div v-if="canCollect('environment')" class="item">
  57. <i class="iconfont icon-task-environment"></i>
  58. <div class="info">
  59. <div class="title">环境格局</div>
  60. <div class="desc">感受自然人文环境之美</div>
  61. </div>
  62. <a-button type="primary" @click="navTo('task/environment', nextPageData)">
  63. 去完成
  64. </a-button>
  65. </div>
  66. <div v-if="canCollect('building')" class="item">
  67. <i class="iconfont icon-task-building"></i>
  68. <div class="info">
  69. <div class="title">传统建筑</div>
  70. <div class="desc">领略古建筑的独特魅力</div>
  71. </div>
  72. <a-button type="primary" @click="navTo('task/building', nextPageData)">
  73. 去完成
  74. </a-button>
  75. </div>
  76. <div v-if="canCollect('folk_culture')" class="item">
  77. <i class="iconfont icon-task-custom"></i>
  78. <div class="info">
  79. <div class="title">民俗文化</div>
  80. <div class="desc">体验民间传统习俗与节庆</div>
  81. </div>
  82. <a-button type="primary" @click="navTo('task/custom', nextPageData)">
  83. 去完成
  84. </a-button>
  85. </div>
  86. <div v-if="canCollect('food_product')" class="item">
  87. <i class="iconfont icon-task-food"></i>
  88. <div class="info">
  89. <div class="title">美食物产</div>
  90. <div class="desc">正宗、传统地方特色美食</div>
  91. </div>
  92. <a-button type="primary" @click="navTo('task/food', nextPageData)">
  93. 去完成
  94. </a-button>
  95. </div>
  96. <div v-if="canCollect('food_product')" class="item">
  97. <i class="iconfont icon-task-mine"></i>
  98. <div class="info">
  99. <div class="title">物产资源</div>
  100. <div class="desc">特定地域的植物、矿物或手工艺</div>
  101. </div>
  102. <a-button type="primary" @click="navTo('task/mine', nextPageData)">
  103. 去完成
  104. </a-button>
  105. </div>
  106. <div v-if="canCollect('route')" class="item">
  107. <i class="iconfont icon-task-trip"></i>
  108. <div class="info">
  109. <div class="title">旅游路线</div>
  110. <div class="desc">体验独特的文化魅力</div>
  111. </div>
  112. <a-button type="primary" @click="navTo('task/trip', nextPageData)">
  113. 去完成
  114. </a-button>
  115. </div>
  116. <div v-if="!isAdmin && isEmpty" class="item">
  117. <i class="iconfont icon-task-summary"></i>
  118. <div class="info">
  119. <div class="title">您当前没有可完成的任务</div>
  120. <div class="desc">请联系管理员认领可采编栏目</div>
  121. </div>
  122. </div>
  123. <!-- <div class="item">
  124. <i class="iconfont icon-task-other"></i>
  125. <div class="info">
  126. <div class="title">其他</div>
  127. <div class="desc">更多文化传承相关信息</div>
  128. </div>
  129. <a-button type="primary" disabled @click="navTo('task/other', nextPageData)">
  130. 待开放
  131. </a-button>
  132. </div> -->
  133. </div>
  134. </div>
  135. </section>
  136. </div>
  137. </template>
  138. <script setup lang="ts">
  139. import { useLoadQuerys } from '@imengyu/imengyu-web-shared';
  140. import { computed, h } from 'vue';
  141. import { useRouter } from 'vue-router';
  142. import { ArrowLeftOutlined } from '@ant-design/icons-vue';
  143. import { useCollectStore } from '@/stores/collect';
  144. import { useTaskEntryForm } from './composeable/TaskEntryForm';
  145. import { useAuthStore } from '@/stores/auth';
  146. const router = useRouter();
  147. const { querys } = useLoadQuerys({
  148. id: 0,
  149. name: '',
  150. points: 0,
  151. level: 0,
  152. villageVolunteerId: 0,
  153. });
  154. const nextPageData = computed(() => ({
  155. villageId: querys.value.id,
  156. villageVolunteerId: querys.value.villageVolunteerId,
  157. }));
  158. const { isAdmin } = useAuthStore();
  159. const { canCollect, isEmpty } = useCollectStore();
  160. const { goForm } = useTaskEntryForm();
  161. function navTo(path: string, data: any) {
  162. router.push({
  163. path,
  164. query: data,
  165. })
  166. }
  167. </script>
  168. <style lang="scss" scoped>
  169. @use '../assets/scss/colors.scss' as *;
  170. .head-img {
  171. height: 160px;
  172. object-fit: cover;
  173. }
  174. </style>