list.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <template>
  2. <ion-page class="list-page recommend-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.jobUserName" style="border: 1px solid #f2f2f5;border-radius: 14px;--padding-start: 10px;height: 35px;"></ion-input>
  15. <ion-button slot="end" style="height: 33px;width: 70px;margin-left: 10px;--box-shadow: none;--border-radius: 14px;" @click="reload" >搜索
  16. </ion-button>
  17. </ion-item>
  18. <ion-list class="list-content">
  19. <ion-item v-for="(record,key) in dataList" :key="key">
  20. <ion-label>
  21. <ion-label style="display: flex;justify-content: space-between;">
  22. <h2>{{ record.jobUserName}}</h2>
  23. <h2>{{ record.professionName }}</h2>
  24. </ion-label>
  25. <p>人才类型:{{record.jobUserTypeStr}}</p>
  26. <ion-label style="display: flex;justify-content: space-between;">
  27. <p>
  28. 工作年限:{{ record.workYear }}
  29. </p>
  30. <p>
  31. 求职类型:{{ record.jobHuntTypeStr }}
  32. </p>
  33. </ion-label>
  34. <p>月薪要求:{{ record.minSalary }}至{{ record.maxSalary }}元</p>
  35. </ion-label>
  36. <ion-avatar @click="onRecommendJob(record);$event.preventDefault();$event.stopPropagation();" aria-hidden="true" class="container" slot="end">
  37. <p style="font-size: 14px !important;">推荐</p>
  38. </ion-avatar>
  39. </ion-item>
  40. </ion-list>
  41. <b-empty v-if="dataList.length<=0" :loading="loading"/>
  42. <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
  43. <ion-infinite-scroll-content
  44. :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
  45. loadingSpinner="bubbles">
  46. </ion-infinite-scroll-content>
  47. </ion-infinite-scroll>
  48. </ion-content>
  49. </ion-page>
  50. </template>
  51. <script lang="ts">
  52. import {computed, defineComponent, reactive, ref} from 'vue';
  53. import dayjs from "dayjs";
  54. import {useRoute, useRouter} from "vue-router";
  55. import {arrowBackOutline} from 'ionicons/icons';
  56. import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
  57. import BEmpty from "@/components/empty.vue";
  58. import {getJobHuntList} from '@/api/jobHuntInfo/index'
  59. export default defineComponent({
  60. name: 'RecommendCompanyPostList',
  61. components: {IonIcon, BEmpty},
  62. setup() {
  63. const router = useRouter();
  64. const route = useRoute();
  65. const total = ref(10);
  66. const loading = ref(true);
  67. const pagination = computed(() => ({
  68. total: total,
  69. current: searchParams.pageIndex,
  70. pageSize: searchParams.pageSize
  71. }));
  72. const searchParams = reactive({
  73. pageIndex: 1,
  74. pageSize: 5,
  75. jobUserName: '',
  76. });
  77. const dataList = ref<any>([]);
  78. const loadData = async function () {
  79. loading.value = true;
  80. getJobHuntList(searchParams).then(data => {
  81. dataList.value = dataList.value.concat(data.list);
  82. total.value = data.total;
  83. })
  84. loading.value = false;
  85. }
  86. const reload = () => {
  87. dataList.value = [];
  88. searchParams.pageIndex = 1;
  89. loadData();
  90. }
  91. const onScroll = (e: any) => {
  92. setTimeout(() => {
  93. e.target.complete();
  94. if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
  95. searchParams.pageIndex += 1;
  96. loadData();
  97. }
  98. }, 500);
  99. }
  100. const onRecommendJob = (item: any) =>{
  101. router.push({path: './recommend', query: {reload: 1,professionID:item.professionID,professionName:item.professionName,jobHuntID:item.jobHuntID,jobUserName:item.jobUserName,type:0}});
  102. }
  103. const onBack = () => {
  104. router.push('../../');
  105. }
  106. onIonViewDidEnter(() => {
  107. if(route.query.reload)reload();
  108. });
  109. return {
  110. arrowBackOutline,
  111. router,
  112. total,
  113. loading,
  114. dataList,
  115. pagination,
  116. searchParams,
  117. onBack,
  118. onRecommendJob,
  119. onScroll,
  120. loadData,
  121. reload,
  122. dayjs,
  123. }
  124. },created() {
  125. this.loadData();
  126. }
  127. });
  128. </script>
  129. <style lang="less">
  130. .custom{
  131. --placeholder-color: gray;
  132. --placeholder-opacity: 0.5;
  133. }
  134. .recommend-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>