浏览代码

feat: APP招聘会列表与详情页

zhangying 11 月之前
父节点
当前提交
3aff959d34

+ 23 - 0
h5app/src/api/jobFair/index.ts

@@ -0,0 +1,23 @@
+import {request} from "@/utils/request";
+
+export function getJobFairList(params: any) {
+    return request(
+        {
+            url: 'jobFairs/getList',
+            method: 'get',
+            params: params,
+        },
+        {isNew: true},
+    );
+}
+
+export function getJobFairById(jobFairID: any) {
+    return request(
+        {
+            url: 'jobFairs/getById',
+            method: 'get',
+            params: {jobFairID},
+        },
+        {isNew: true},
+    );
+}

二进制
h5app/src/assets/icon/zph1.png


+ 8 - 0
h5app/src/router/index.ts

@@ -54,6 +54,14 @@ const routes: Array<RouteRecordRaw> = [
                 path: 'tabMain/jobhunt/jobHuntEdit',
                 component: () => import('@/views/pages/jobhunt/jobHuntEdit.vue')
             },
+            {
+                path: 'tabMain/jobFair/list',
+                component: () => import('@/views/pages/jobFair/list.vue')
+            },
+            {
+                path: 'tabMain/jobFair/detail',
+                component: () => import('@/views/pages/jobFair/detail.vue')
+            },
             {
                 path: 'tabMain/jobhunt/recommend/list',
                 component: () => import('@/views/pages/jobhunt/recommend/list.vue')

+ 128 - 0
h5app/src/views/pages/jobFair/detail.vue

@@ -0,0 +1,128 @@
+<template>
+  <ion-page class="list-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="onBack"></ion-icon>
+        </ion-buttons>
+        <ion-title>招聘会详情信息</ion-title>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <div class="bw-vue-form">
+        <div class="form-title">招聘会详情</div>
+        <div class="form-detail">
+          <ion-label>招聘会名称</ion-label>
+          <ion-text>{{ jobFair.dataModel.name }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>主办单位</ion-label>
+          <ion-text>{{ jobFair.dataModel.zbUnit }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>承办单位</ion-label>
+          <ion-text>{{ jobFair.dataModel.cbUnit }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>招聘会地址</ion-label>
+          <ion-text>{{ jobFair.dataModel.address }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>企业数量</ion-label>
+          <ion-text>{{ dayjs(jobFair.dataModel.startTime).format("YYYY-MM-DD") }} -
+            {{ dayjs(jobFair.dataModel.endTime).format("YYYY-MM-DD") }}
+          </ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>联系人</ion-label>
+          <ion-text>{{ jobFair.dataModel.userName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>联系电话</ion-label>
+          <ion-text>{{ jobFair.dataModel.userMrobile }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>所属县区</ion-label>
+          <ion-text>{{ jobFair.dataModel.regionName }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>摊位数</ion-label>
+          <ion-text>{{ jobFair.dataModel.boothCount }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>展位数量</ion-label>
+          <ion-text>{{ jobFair.dataModel.displayCount }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>是否制作海报</ion-label>
+          <ion-text>{{ jobFair.dataModel.isMake ? '是' : '否' }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>乘车路线</ion-label>
+          <ion-text>{{ jobFair.dataModel.carLine }}</ion-text>
+        </div>
+        <div class="form-detail">
+          <ion-label>招聘会描述</ion-label>
+          <ion-text>{{ jobFair.dataModel.jobFariDesc }}</ion-text>
+        </div>
+      </div>
+    </ion-content>
+  </ion-page>
+</template>
+
+<script setup lang="ts">
+import {arrowBackOutline} from "ionicons/icons";
+import {useRoute, useRouter} from "vue-router";
+import {reactive, ref} from "vue";
+import dayjs from "dayjs";
+import {onIonViewDidEnter} from "@ionic/vue";
+import {getPostByID} from "@/api/post";
+import {getJobFairById} from "@/api/jobFair";
+
+const router = useRouter();
+const route = useRoute();
+
+const jobFair = reactive({
+  dataModel: {
+    jobfairsID: "",
+    name: "",
+    zbUnit: "",
+    cbUnit: "",
+    address: "",
+    companyCount: "",
+    startTime: "",
+    endTime: "",
+    userName: "",
+    userMrobile: "",
+    regionName: "",
+    boothCount: "",
+    displayCount: "",
+    isMake: "",
+    longitude: "",
+    latitude: "",
+    carLine: "",
+    jobFariDesc: ""
+  }
+})
+const loading = ref(false);
+
+function onBack() {
+  router.go(-1)
+}
+
+const loadData = async function (id: any) {
+  loading.value = true;
+  getJobFairById(id).then((data: any) => {
+    jobFair.dataModel = data
+  })
+  loading.value = false;
+}
+
+onIonViewDidEnter(() => {
+  loadData(route.query.id);
+});
+</script>
+
+<style scoped>
+
+</style>

+ 124 - 0
h5app/src/views/pages/jobFair/list.vue

@@ -0,0 +1,124 @@
+<template>
+  <ion-page class="list-page jobuser-list-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="onBack"></ion-icon>
+        </ion-buttons>
+        <ion-title>招聘会查看</ion-title>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <ion-item class="search-item">
+        <ion-input placeholder="请输入招聘会名称" class="custom"
+                   v-model="searchParams.name"
+                   style="border: 1px solid #f2f2f5;border-radius: 14px;--padding-start: 10px;height: 35px;"></ion-input>
+        <ion-button slot="end"
+                    style="height: 33px;width: 70px;margin-left: 10px;--box-shadow: none;--border-radius: 14px;"
+                    @click="reload">搜索
+        </ion-button>
+      </ion-item>
+      <div class="bw-vue-list">
+        <div class="list-content">
+          <ion-list>
+            <ion-item v-for="(record,key) in jobFairList" :key="key" detail @click="onDetail(record.jobfairsID)">
+              <ion-label>
+                <div class="multi-title">
+                  <h2>{{ record.name }}</h2>
+                </div>
+                <p>
+                  主办单位:{{ record.zbUnit }}
+                </p>
+                <p>
+                  招聘会地址:{{ record.address }}
+                </p>
+                <p>
+                  招聘会时间:{{ dayjs(record.startTime).format('YYYY-MM-DD') }}
+                  至
+                  {{ dayjs(record.endTime).format('YYYY-MM-DD') }}
+                </p>
+              </ion-label>
+            </ion-item>
+          </ion-list>
+        </div>
+      </div>
+      <b-empty v-if="jobFairList.length<=0" :loading="bodyLoading"/>
+      <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
+        <ion-infinite-scroll-content
+            :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
+            loadingSpinner="bubbles">
+        </ion-infinite-scroll-content>
+      </ion-infinite-scroll>
+    </ion-content>
+  </ion-page>
+</template>
+
+<script setup lang="ts">
+import {IonIcon, onIonViewDidEnter} from "@ionic/vue";
+import {arrowBackOutline} from "ionicons/icons";
+import {useRouter} from "vue-router";
+import {computed, reactive, ref} from "vue";
+import {getJobFairList} from "@/api/jobFair";
+import dayjs from "dayjs";
+import BEmpty from "@/components/empty.vue";
+
+const router = useRouter()
+
+const jobFairList = ref<Array<any>>([])
+const searchParams = reactive({
+  pageIndex: 1,
+  pageSize: 5,
+  name: "",
+  nowDate: "",
+})
+const total = ref(0);
+const pagination = computed(() => ({
+  total: total,
+  current: searchParams.pageIndex,
+  pageSize: searchParams.pageSize
+}));
+const bodyLoading = ref(false);
+
+function loadData() {
+  bodyLoading.value = true;
+  searchParams.nowDate = dayjs(new Date()).format("YYYY-MM-DD");
+  getJobFairList(searchParams).then((result: any) => {
+    jobFairList.value = result.list;
+    total.value = result.total;
+  }).finally(() => {
+    bodyLoading.value = false;
+  })
+}
+
+function reload() {
+  jobFairList.value = [];
+  searchParams.pageIndex = 1;
+  loadData();
+}
+
+function onBack() {
+  router.go(-1)
+}
+
+const onScroll = (e: any) => {
+  setTimeout(() => {
+    e.target.complete();
+    if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
+      searchParams.pageIndex += 1;
+      loadData();
+    }
+  }, 500);
+}
+
+function onDetail(jobfairId: any) {
+  router.push({path: './detail', query: {reload: 1, id: jobfairId}});
+}
+
+onIonViewDidEnter(() => {
+  reload()
+})
+</script>
+
+<style scoped>
+
+</style>

+ 6 - 0
h5app/src/views/sapp/tabWork.vue

@@ -128,6 +128,12 @@
              </a>
 
 
+             <a class="tool-item box-line" @click="router.push('/tabs/tabMain/jobFair/list')">
+               <div class="tool-img">
+                 <img src="@/assets/icon/zph1.png">
+               </div>
+               <div class="tool-title">招聘会</div>
+             </a>
              <a class="tool-item box-line"  @click="router.push('/tabs/tabWork/work/track/index')">
                <div class="tool-img">
                  <img src="@/assets/icon/dk1.png">

+ 1 - 1
src/main/resources/mapping/cquery/JobFairsCQuery.xml

@@ -22,7 +22,7 @@
             and jobFairs.EndTime   <![CDATA[ <= ]]>  #{endDate}
         </if>
         <if test="nowDate!=null">
-            and jobFairs.EndTime   <![CDATA[ <= ]]>  #{nowDate}
+            and jobFairs.EndTime   <![CDATA[ >= ]]>  #{nowDate}
         </if>
         order by jobFairs.EndTime desc
     </select>