list.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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"
  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. <div class="bw-vue-list">
  22. <div class="list-content">
  23. <ion-list>
  24. <div v-for="(record,key) in dataList" :key="key" detail>
  25. <ion-item-sliding>
  26. <ion-item>
  27. <ion-label>
  28. <div class="multi-title">
  29. <h2>{{ record.jobUserName }}</h2>
  30. <h2>{{ record.professionName }}</h2>
  31. </div>
  32. <p>人才类型:{{ record.jobUserTypeStr }}</p>
  33. <div class="multi-title">
  34. <p>
  35. 工作年限:{{ record.workYear }}
  36. </p>
  37. <p>
  38. 求职类型:{{ record.jobHuntTypeStr }}
  39. </p>
  40. </div>
  41. <p>月薪要求:{{ record.minSalary }}至{{ record.maxSalary }}元</p>
  42. </ion-label>
  43. <ion-avatar @click="onRecommendJob(record);$event.preventDefault();$event.stopPropagation();"
  44. aria-hidden="true" class="container" slot="end">
  45. <ion-button size="small" fill="outline">推荐</ion-button>
  46. </ion-avatar>
  47. </ion-item>
  48. <ion-item-options>
  49. <ion-item-option color="danger" @click="onDel(record.jobHuntID)">
  50. <ion-icon :icon="trashOutline"></ion-icon>
  51. </ion-item-option>
  52. </ion-item-options>
  53. </ion-item-sliding>
  54. </div>
  55. </ion-list>
  56. </div>
  57. </div>
  58. <b-empty v-if="dataList.length<=0" :loading="loading"/>
  59. <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
  60. <ion-infinite-scroll-content
  61. :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
  62. loadingSpinner="bubbles">
  63. </ion-infinite-scroll-content>
  64. </ion-infinite-scroll>
  65. </ion-content>
  66. </ion-page>
  67. </template>
  68. <script lang="ts">
  69. import {computed, defineComponent, reactive, ref} from 'vue';
  70. import dayjs from "dayjs";
  71. import {useRoute, useRouter} from "vue-router";
  72. import {arrowBackOutline,trashOutline} from 'ionicons/icons';
  73. import {alertController, IonIcon, onIonViewDidEnter} from '@ionic/vue';
  74. import BEmpty from "@/components/empty.vue";
  75. import {getJobHuntList, deleteJobHuntAndRecommendMgt} from '@/api/jobHuntInfo/index'
  76. export default defineComponent({
  77. name: 'RecommendCompanyPostList',
  78. components: {IonIcon, BEmpty},
  79. setup() {
  80. const router = useRouter();
  81. const route = useRoute();
  82. const total = ref(10);
  83. const loading = ref(true);
  84. const pagination = computed(() => ({
  85. total: total,
  86. current: searchParams.pageIndex,
  87. pageSize: searchParams.pageSize
  88. }));
  89. const searchParams = reactive({
  90. pageIndex: 1,
  91. pageSize: 5,
  92. jobUserName: '',
  93. });
  94. const dataList = ref<any>([]);
  95. const loadData = async function () {
  96. loading.value = true;
  97. getJobHuntList(searchParams).then(data => {
  98. dataList.value = dataList.value.concat(data.list);
  99. total.value = data.total;
  100. })
  101. loading.value = false;
  102. }
  103. const reload = () => {
  104. dataList.value = [];
  105. searchParams.pageIndex = 1;
  106. loadData();
  107. }
  108. const onScroll = (e: any) => {
  109. setTimeout(() => {
  110. e.target.complete();
  111. if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
  112. searchParams.pageIndex += 1;
  113. loadData();
  114. }
  115. }, 500);
  116. }
  117. const onRecommendJob = (item: any) => {
  118. router.push({
  119. path: './recommend', query: {
  120. reload: 1,
  121. professionID: item.professionID,
  122. professionName: item.professionName,
  123. jobHuntID: item.jobHuntID,
  124. jobUserName: item.jobUserName,
  125. type: 0,
  126. parentProfessionID: item.parentProfessionID,
  127. cultureRank: item.cultureRank,
  128. workYear: item.workYear,
  129. minSalary: item.minSalary,
  130. maxSalary: item.maxSalary
  131. }
  132. });
  133. }
  134. const onDel = async (id: any) => {
  135. const alert = await alertController.create({
  136. header: '提示!',
  137. message: '是否确认删除?',
  138. buttons: [
  139. {
  140. text: '取消',
  141. role: 'cancel'
  142. },
  143. {
  144. text: '确认删除',
  145. handler: () => {
  146. deleteJobHuntAndRecommendMgt(id).then(result => {
  147. if (result)
  148. reload();
  149. });
  150. }
  151. }
  152. ],
  153. });
  154. await alert.present();
  155. }
  156. const onBack = () => {
  157. router.push('../../');
  158. }
  159. onIonViewDidEnter(() => {
  160. if (route.query.reload) reload();
  161. });
  162. return {
  163. arrowBackOutline,
  164. trashOutline,
  165. router,
  166. total,
  167. loading,
  168. dataList,
  169. pagination,
  170. searchParams,
  171. loadData,
  172. onBack,
  173. onRecommendJob,
  174. onDel,
  175. onScroll,
  176. reload,
  177. dayjs,
  178. }
  179. }, created() {
  180. this.loadData();
  181. }
  182. });
  183. </script>