selfMeetingList.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <template>
  2. <van-nav-bar
  3. fixed
  4. title="私设聚会点"
  5. left-text=""
  6. right-text="上报"
  7. left-arrow
  8. @click-left="onClickLeft"
  9. @click-right="onClickRight"
  10. />
  11. <div class="main">
  12. <van-search v-model="value" shape="round" placeholder="请输入搜索关键词" />
  13. <van-tabs
  14. v-model:active="active"
  15. title-inactive-color="#bdbdbd"
  16. title-active-color="#36a7f3"
  17. @click-tab="onClickTab"
  18. >
  19. <van-tab title="未审核" name="0">
  20. <van-list
  21. v-model:loading="loading"
  22. :finished="finished"
  23. finished-text="没有更多了"
  24. @load="onLoad"
  25. >
  26. <van-swipe-cell
  27. v-for="item in list"
  28. :key="item"
  29. :before-close="beforeClose"
  30. >
  31. <div class="list_item" @click="goInfo(item.id)">
  32. <div class="item-left">
  33. <p style="color: #c4c4c4">{{ item.partyTime }}</p>
  34. <p style="color: red">待审核</p>
  35. </div>
  36. <van-cell is-link>
  37. <template #title>
  38. <p>地点:{{ item.placeSelectName }}</p>
  39. <p>相关人员:{{ item.relatedPersons.name }}</p>
  40. <p>频次:{{ item.frequency }}</p>
  41. </template>
  42. </van-cell>
  43. </div>
  44. <template #right>
  45. <van-button square type="danger" text="删除" class="button" />
  46. <van-button
  47. square
  48. type="primary"
  49. text="修改"
  50. class="button"
  51. @click="updateItem(item)"
  52. />
  53. </template>
  54. </van-swipe-cell>
  55. </van-list>
  56. </van-tab>
  57. <van-tab title="已审核" name="1">
  58. <van-list
  59. v-model:loading="loading"
  60. :finished="finished"
  61. finished-text="没有更多了"
  62. @load="onLoad"
  63. >
  64. <van-swipe-cell
  65. v-for="item in list"
  66. :key="item"
  67. :before-close="beforeClose"
  68. >
  69. <div class="list_item" @click="goInfo(item.id)">
  70. <div class="item-left">
  71. <p style="color: #c4c4c4">{{ item.partyTime }}</p>
  72. <p style="color: red">已审核</p>
  73. </div>
  74. <van-cell is-link>
  75. <template #title>
  76. <p>地点:{{ item.placeSelectName }}</p>
  77. <p>相关人员:{{ item.relatedPersons.name }}</p>
  78. <p>频次:{{ item.frequency }}</p>
  79. </template>
  80. </van-cell>
  81. </div>
  82. </van-swipe-cell>
  83. </van-list>
  84. </van-tab>
  85. </van-tabs>
  86. </div>
  87. </template>
  88. <script>
  89. import { ref } from "vue";
  90. import PrivatePartyPointService from "@/api/privateparty/PrivatePartyPointService";
  91. import { useRouter } from "vue-router";
  92. export default {
  93. name: "placeActivityList",
  94. setup() {
  95. const onClickLeft = () => {
  96. history.back();
  97. };
  98. // 上报
  99. const onClickRight = () => {
  100. router.push("/selfMeeting");
  101. };
  102. const value = ref("");
  103. // 切换
  104. let active = ref(0);
  105. const onClickTab = (val) => {
  106. // 清空列表数据
  107. finished.value = false;
  108. list.value = [];
  109. // 重新加载数据
  110. // 将 loading 设置为 true,表示处于加载状态
  111. loading.value = true;
  112. if (val.name == 0) {
  113. onLoad(0);
  114. } else {
  115. onLoad(1);
  116. }
  117. };
  118. // 列表
  119. let list = ref([]);
  120. const loading = ref(false);
  121. const finished = ref(false);
  122. let index = 0;
  123. const onLoad = (val) => {
  124. // 异步更新数据
  125. new PrivatePartyPointService()
  126. .list({
  127. current: index + 1,
  128. size: 10,
  129. assessment: val ? val : 0,
  130. })
  131. .then((res) => {
  132. list.value.push(...res.records);
  133. // 加载状态结束
  134. loading.value = false;
  135. // 数据全部加载完成
  136. if (res.records.length < 10) {
  137. finished.value = true;
  138. }
  139. index++;
  140. });
  141. };
  142. // 删除确认
  143. const beforeClose = ({ position }) => {
  144. switch (position) {
  145. case "left":
  146. case "cell":
  147. case "outside":
  148. return true;
  149. case "right":
  150. return new Promise((resolve) => {
  151. showConfirmDialog({
  152. title: "确定删除吗?",
  153. }).then(resolve);
  154. });
  155. }
  156. };
  157. let router = useRouter();
  158. // 修改跳转
  159. const updateItem = (val) => {
  160. router.push({
  161. path: "/selfMeeting",
  162. query: { id: val.id },
  163. });
  164. };
  165. // 详情跳转
  166. const goInfo = (val) => {
  167. router.push({
  168. path: "/selfMeetingInfo",
  169. query: { id: val },
  170. });
  171. };
  172. return {
  173. active,
  174. onClickTab,
  175. onClickLeft,
  176. list,
  177. onLoad,
  178. loading,
  179. finished,
  180. value,
  181. onClickRight,
  182. beforeClose,
  183. updateItem,
  184. goInfo,
  185. };
  186. },
  187. };
  188. </script >
  189. <style scope>
  190. .main {
  191. background: #fff;
  192. position: relative;
  193. top: 40px;
  194. }
  195. .van-list {
  196. height: 80%;
  197. margin-top: 5px;
  198. }
  199. .list_item {
  200. display: flex;
  201. background: #fff;
  202. }
  203. .item-left {
  204. text-align: center;
  205. width: 30%;
  206. font-size: 12px;
  207. border-right: 1px solid #eee;
  208. }
  209. .button {
  210. height: 100%;
  211. }
  212. </style>