list.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <template>
  2. <ion-page class="list-page company-list-page">
  3. <ion-header class="header-theme2">
  4. <ion-toolbar>
  5. <ion-buttons slot="start">
  6. <ion-icon :icon="arrowBackOutline" @click="onBack"></ion-icon>
  7. </ion-buttons>
  8. <ion-title>推荐信息管理</ion-title>
  9. </ion-toolbar>
  10. </ion-header>
  11. <ion-content>
  12. <ion-item class="search-item">
  13. <ion-input placeholder="姓名" class="custom"
  14. v-model="searchParams.name"
  15. style="border: 1px solid #f2f2f5;border-radius: 14px;--padding-start: 10px;height: 35px;"></ion-input>
  16. <ion-button slot="end"
  17. style="height: 33px;width: 70px;margin-left: 10px;--box-shadow: none;--border-radius: 14px;"
  18. @click="reload">搜索
  19. </ion-button>
  20. </ion-item>
  21. <ion-list class="list-content">
  22. <ion-item v-for="(record,key) in dataList" :key="key" detail @click="onDetail(record.recommendMgtID)">
  23. <ion-label>
  24. <h2>{{ record.name }}</h2>
  25. <ion-label style="display: flex;justify-content: space-between;">
  26. <p>求职岗位:{{ record.professionName }}</p>
  27. <p>{{ record.entryStateName }}</p>
  28. </ion-label>
  29. <p>招聘企业:{{ record.companyName }}</p>
  30. <ion-label style="display: flex;justify-content: space-between;">
  31. <p>联系电话:{{ record.userMobile }}</p>
  32. <p>企业电话:{{ record.companyMobile }}</p>
  33. </ion-label>
  34. <p>
  35. 推送时间:{{ dayjs(record.createTime).format('YYYY-MM-DD') }}
  36. </p>
  37. </ion-label>
  38. </ion-item>
  39. </ion-list>
  40. <b-empty v-if="dataList.length<=0" :loading="loading"/>
  41. <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
  42. <ion-infinite-scroll-content
  43. :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
  44. loadingSpinner="bubbles">
  45. </ion-infinite-scroll-content>
  46. </ion-infinite-scroll>
  47. </ion-content>
  48. </ion-page>
  49. </template>
  50. <script lang="ts">
  51. import {computed, defineComponent, reactive, ref} from 'vue';
  52. import dayjs from "dayjs";
  53. import {useRoute, useRouter} from "vue-router";
  54. import {arrowBackOutline} from 'ionicons/icons';
  55. import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
  56. import BEmpty from "@/components/empty.vue";
  57. import {getList, setEntryState} from '@/api/recommendmgt/index'
  58. export default defineComponent({
  59. name: 'recommendMgtList',
  60. components: {IonIcon, BEmpty},
  61. setup() {
  62. const router = useRouter();
  63. const route = useRoute();
  64. const total = ref(10);
  65. const loading = ref(true);
  66. const pagination = computed(() => ({
  67. total: total,
  68. current: searchParams.pageIndex,
  69. pageSize: searchParams.pageSize
  70. }));
  71. const searchParams = reactive({
  72. pageIndex: 1,
  73. pageSize: 5,
  74. name: '',
  75. });
  76. const dataList = ref<any>([]);
  77. const loadData = async function () {
  78. loading.value = true;
  79. getList(searchParams).then(data => {
  80. dataList.value = dataList.value.concat(data.list);
  81. total.value = data.total;
  82. })
  83. loading.value = false;
  84. }
  85. const reload = () => {
  86. dataList.value = [];
  87. searchParams.pageIndex = 1;
  88. loadData();
  89. }
  90. const onScroll = (e: any) => {
  91. setTimeout(() => {
  92. e.target.complete();
  93. if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
  94. searchParams.pageIndex += 1;
  95. loadData();
  96. }
  97. }, 500);
  98. }
  99. const onDetail = (recommendMgtID: any) => {
  100. router.push({path: './detail', query: {reload: 1, id: recommendMgtID,status: 1}});
  101. }
  102. const onBack = () => {
  103. router.push('../');
  104. }
  105. onIonViewDidEnter(() => {
  106. if (route.query.reload) reload();
  107. });
  108. return {
  109. arrowBackOutline,
  110. router,
  111. total,
  112. loading,
  113. dataList,
  114. pagination,
  115. searchParams,
  116. onBack,
  117. onDetail,
  118. onScroll,
  119. loadData,
  120. reload,
  121. dayjs,
  122. }
  123. }, created() {
  124. this.loadData();
  125. }
  126. });
  127. </script>
  128. <style lang="less">
  129. .custom {
  130. --placeholder-color: gray;
  131. //--placeholder-font-style: italic;
  132. --placeholder-opacity: 1;
  133. }
  134. .company-list-page {
  135. .list-content {
  136. margin: 0px 15px !important;
  137. background-color: white !important;
  138. border-radius: 0 !important;
  139. ion-item {
  140. margin-top: 10px;
  141. font-size: 14px;
  142. border: 1px solid rgb(242, 242, 245);
  143. p {
  144. font-size: 12px;
  145. }
  146. }
  147. }
  148. }
  149. .container {
  150. display: flex;
  151. justify-content: center; /* 水平居中 */
  152. align-items: center; /* 垂直居中 */
  153. }
  154. </style>