shelterSource.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <!--庇护场所-->
  2. <template>
  3. <van-list
  4. v-model:loading="loading"
  5. v-model:error="error"
  6. error-text="请求失败,点击重新加载"
  7. :finished="finished"
  8. finished-text="没有更多任务了"
  9. class="list"
  10. @load="getList"
  11. >
  12. <div
  13. v-for="(item, index) in taskData"
  14. :key="item.id"
  15. class="event-list-item"
  16. >
  17. <div class="item-title">
  18. <div class="item-title-text">庇护场所采集任务</div>
  19. <div class="item-title-control">
  20. <van-button type="primary" @click="handleView(item)">
  21. 上报
  22. </van-button>
  23. </div>
  24. </div>
  25. <div class="item-content">
  26. <div class="item-data">
  27. <div class="item-left">
  28. <i class="icon4" />
  29. <div class="item-data-label">采集周期:</div>
  30. </div>
  31. <div class="item-data-value">{{ get_task_cycle(item.cycle) }}</div>
  32. </div>
  33. <div class="item-data">
  34. <div class="item-left">
  35. <i class="icon4" />
  36. <div class="item-data-label">采集范围:</div>
  37. </div>
  38. <div class="item-data-value">{{ get_task_range(item.task_range) }}</div>
  39. </div>
  40. <div class="item-data">
  41. <div class="item-left">
  42. <i class="icon4" />
  43. <div class="item-data-label">要求采集时间:</div>
  44. </div>
  45. <div class="item-data-value">{{ item.task_time }}</div>
  46. </div>
  47. </div>
  48. </div>
  49. </van-list>
  50. </template>
  51. <script setup lang="ts">
  52. import { ref, reactive, toRefs } from "vue";
  53. import { useRouter } from "vue-router";
  54. import { getTaskList } from "@/api/rescueManagement";
  55. const router = useRouter();
  56. const total = ref(0);
  57. const loading = ref(false);
  58. const error = ref(false);
  59. const finished = ref(false);
  60. const data = reactive({
  61. queryParams: {
  62. type: '0', // 庇护场所采集任务
  63. page: 0,
  64. pageSize: 10
  65. }
  66. });
  67. // 巡查周期选项
  68. const cycleOptions = [
  69. { value: '', label: '全部' },
  70. { value: '0', label: '每年' },
  71. { value: '1', label: '每月' },
  72. { value: '2', label: '每周' },
  73. { value: '3', label: '每日' },
  74. { value: '4', label: '一次' }
  75. ];
  76. const rangeOptions = {
  77. '0': '市级',
  78. '1': '区县级',
  79. '2': '镇街级',
  80. '3': '村居级'
  81. };
  82. const get_task_cycle = (cycle: String) => {
  83. return cycleOptions.find(item => item.value == cycle).label
  84. }
  85. const get_task_range = (range) => {
  86. return rangeOptions[range]
  87. }
  88. const { queryParams } = toRefs(data);
  89. const taskData = ref([]);
  90. async function getList() {
  91. loading.value = true;
  92. queryParams.value.page++;
  93. getTaskList(queryParams.value)
  94. .then(res => {
  95. var items = res.data || [];
  96. total.value = res.total;
  97. if (queryParams.value.page == 1) {
  98. taskData.value = [];
  99. }
  100. items.forEach(val => {
  101. taskData.value.push(val);
  102. });
  103. if (queryParams.value.pageSize * queryParams.value.page >= total.value) {
  104. finished.value = true;
  105. } else {
  106. finished.value = false;
  107. }
  108. })
  109. .catch(() => {
  110. error.value = true;
  111. finished.value = false;
  112. })
  113. .finally(() => {
  114. loading.value = false;
  115. });
  116. }
  117. const handleView = (item) => {
  118. router.push("/rescueGatherResultAdd?id="+item.id+"&type="+item.type+"&area_code="+item.area_code);
  119. }
  120. </script>
  121. <style lang="scss" scoped>
  122. .list {
  123. height: calc(100vh - 102px);
  124. overflow-y: auto;
  125. }
  126. .van-doc-block__title {
  127. color: var(--van-doc-text-color-4);
  128. margin: 0;
  129. padding: 32px 16px 16px;
  130. font-size: 14px;
  131. font-weight: 400;
  132. line-height: 16px;
  133. }
  134. .event-list-item {
  135. position: relative;
  136. margin: 16px 16px 0;
  137. background: #ffffff;
  138. border-radius: 4px;
  139. border: 0.5px solid #eaedf7;
  140. box-shadow: 0 0 4px 0 #4554661a;
  141. &:first-child {
  142. margin-top: 0;
  143. }
  144. .item-title {
  145. display: flex;
  146. align-items: center;
  147. justify-content: space-between;
  148. min-height: 46px;
  149. background-image: linear-gradient(180deg, #f3f7fd 0%, #ffffff 100%);
  150. padding: 0 12px;
  151. .item-title-text {
  152. font-size: 16px;
  153. color: #414f64;
  154. font-weight: 600;
  155. }
  156. .item-title-control {
  157. display: inline-flex;
  158. justify-content: center;
  159. align-items: center;
  160. }
  161. .van-button {
  162. width: 73px;
  163. height: 24px;
  164. padding: 0;
  165. }
  166. }
  167. .item-content {
  168. padding: 0 12px 12px;
  169. }
  170. .item-data {
  171. font-size: 14px;
  172. display: flex;
  173. flex-direction: row;
  174. align-items: flex-start;
  175. justify-content: start;
  176. line-height: 26px;
  177. .item-left {
  178. display: flex;
  179. align-items: center;
  180. flex-shrink: 0;
  181. }
  182. .item-data-label {
  183. flex-shrink: 0;
  184. color: #414f64;
  185. }
  186. .item-data-value {
  187. color: #414f64;
  188. }
  189. }
  190. }
  191. .van-dropdown-menu {
  192. :deep(.van-dropdown-menu__bar) {
  193. background: transparent;
  194. box-shadow: none;
  195. }
  196. }
  197. </style>