243 lines
5.8 KiB
Vue
243 lines
5.8 KiB
Vue
![]() |
<template>
|
|||
|
<view class="job-page">
|
|||
|
<view class="basic tn-p">
|
|||
|
<view class="title tn-text-2xl tn-text-bold">
|
|||
|
{{jobData.title}}
|
|||
|
</view>
|
|||
|
<view class="tn-flex tn-flex-center-between tn-pt-xs tn-pb-xs tn-text-lg">
|
|||
|
<view class="needs">
|
|||
|
招聘人数:{{jobData.needs}}
|
|||
|
</view>
|
|||
|
<view class="salary tn-text-bold">
|
|||
|
工资待遇:{{jobData.salary}}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
|
|||
|
<view class="tn-flex tn-flex-center-between tn-text-lg">
|
|||
|
<view class="degree">
|
|||
|
学历要求:{{jobData.degree}}
|
|||
|
</view>
|
|||
|
<view class="seniority">
|
|||
|
工作经验:{{jobData.seniority}}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
|
|||
|
<view class="welfare tn-flex tn-flex-wrap tn-pt-sm">
|
|||
|
<view class="tag-item tn-mr-xs" v-for="(item,index) in jobData.tags" :key="index">
|
|||
|
<TnTag font-size="28rpx" text-color="#fff" bg-color="#24ba97">{{item.name}}</TnTag>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
|
|||
|
<view class="desc tn-p tn-mt-sm">
|
|||
|
<view class="subtitle tn-pt-sm tn-pb-sm">
|
|||
|
<TnTitle mode="vLine" assist-color="#24ba97" title="岗位详情"></TnTitle>
|
|||
|
</view>
|
|||
|
<view class="content tn-mt tn-mb tn-text-lg">
|
|||
|
<mp-html :content="htmlNodes" />
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
|
|||
|
<view class="companyInfo tn-p tn-mt-sm">
|
|||
|
<view class="subtitle tn-pt-sm tn-pb-sm">
|
|||
|
<TnTitle mode="vLine" assist-color="#24ba97" title="企业信息"></TnTitle>
|
|||
|
</view>
|
|||
|
|
|||
|
<view class="info tn-flex tn-flex-center-between tn-mt">
|
|||
|
<view class="logo tn-w-1-3" style="height: 200rpx;">
|
|||
|
<image :src="companyData.logo?companyData.logo:noimage" style="width: 100%;height: 100%;"/>
|
|||
|
</view>
|
|||
|
<view class="text-info tn-w-2-3 tn-text-lg ">
|
|||
|
<view class="companyName tn-flex tn-pt-xs tn-pb-xs" @click="toCompany(companyData.companyId)">
|
|||
|
<view class="tn-w-1-6 tn-text-center">
|
|||
|
<TnIcon name="home-fill" color="#fa3534" size="42"/>
|
|||
|
</view>
|
|||
|
<view class="tn-w-5-6">
|
|||
|
{{companyData.name}}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="address tn-flex tn-pt-xs tn-pb-xs" >
|
|||
|
<view class="tn-w-1-6 tn-text-center">
|
|||
|
<TnIcon name="map-fill" color="#fa3534" size="42"/>
|
|||
|
</view>
|
|||
|
<view class="tn-w-5-6">
|
|||
|
{{companyData.address}}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="phone tn-flex tn-pt-xs tn-pb-xs" @click="call(companyData.phone)">
|
|||
|
<view class="tn-w-1-6 tn-text-center">
|
|||
|
<TnIcon name="tel-circle-fill" color="#fa3534" size="42"/>
|
|||
|
</view>
|
|||
|
<view class="tn-w-5-6">
|
|||
|
{{companyData.hr}}:{{companyData.phone}}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
|
|||
|
<view class="relative tn-p tn-mt-sm" >
|
|||
|
<view class="subtitle tn-pt-sm tn-pb-sm">
|
|||
|
<TnTitle mode="vLine" assist-color="#24ba97" title="相关招聘"></TnTitle>
|
|||
|
</view>
|
|||
|
<view class="item tn-pt-sm tn-pb-sm" v-for="(item,index) in relative" :key="index" @click="toJob(item.jobId)">
|
|||
|
<view class="title-time tn-flex tn-flex-center-between tn-pt-xs tn-pb-xs">
|
|||
|
<view class="title tn-text-xl tn-text-bold">
|
|||
|
{{item.title}}
|
|||
|
</view>
|
|||
|
<view class="time">
|
|||
|
{{dayjs(Date.parse(item.createTime)).locale('zh-cn').fromNow()}}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
|
|||
|
<view class="info tn-flex tn-flex-center-between tn-pt-xs tn-pb-xs">
|
|||
|
<view class="needs">
|
|||
|
<span>招聘人数:</span>{{item.needs}}
|
|||
|
</view>
|
|||
|
<view class="salary tn-text-bold tn-text-lg">
|
|||
|
{{item.salary}}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script lang="ts" setup>
|
|||
|
|
|||
|
import { onMounted, ref } from 'vue';
|
|||
|
import request from '@/utils/request';
|
|||
|
import { onLoad } from "@dcloudio/uni-app";
|
|||
|
import TnTag from '@/uni_modules/tuniaoui-vue3/components/tag/src/tag.vue'
|
|||
|
import dayjs from "dayjs";
|
|||
|
import 'dayjs/locale/zh-cn'
|
|||
|
import relativeTime from "dayjs/plugin/relativeTime";
|
|||
|
dayjs.extend(relativeTime)
|
|||
|
|
|||
|
const noimage = ref('/static/noimage.png')
|
|||
|
|
|||
|
const jobId = ref()
|
|||
|
|
|||
|
const htmlNodes = ref('')
|
|||
|
|
|||
|
const relative = ref([])
|
|||
|
|
|||
|
const companyData = ref<{
|
|||
|
hr?:string,
|
|||
|
phone?:string,
|
|||
|
address?:string,
|
|||
|
logo?:string,
|
|||
|
companyId?:number,
|
|||
|
name?:string
|
|||
|
}>({})
|
|||
|
|
|||
|
const jobData = ref<{
|
|||
|
title?:string,
|
|||
|
degree?:string,
|
|||
|
tags?:any,
|
|||
|
needs?:number,
|
|||
|
salary?:string,
|
|||
|
seniority?:string
|
|||
|
}>({})
|
|||
|
|
|||
|
const getJobDetail = (jobId:number) => {
|
|||
|
request({
|
|||
|
url:'/employ/job/'+jobId,
|
|||
|
method:'GET'
|
|||
|
}).then((res)=>{
|
|||
|
let htmlString = res.data.data.description.replace(/\\/g, "").replace(/<img/g, "<img style=\"width:100%;height:auto\"");
|
|||
|
htmlNodes.value = htmlString
|
|||
|
companyData.value = res.data.data.company
|
|||
|
jobData.value = res.data.data
|
|||
|
relative.value = res.data.data.relative
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
const call = (phone:string) => {
|
|||
|
uni.makePhoneCall({
|
|||
|
phoneNumber: phone
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
const toJob = (jobId:number) => {
|
|||
|
uni.navigateTo({
|
|||
|
url:'/pages/employ/jobs/index?jobId='+ jobId
|
|||
|
})
|
|||
|
}
|
|||
|
const toCompany = (id:number) => {
|
|||
|
uni.navigateTo({
|
|||
|
url:'/pages/employ/company/index?companyId='+ id
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
onMounted(()=>{
|
|||
|
getJobDetail(jobId.value)
|
|||
|
})
|
|||
|
|
|||
|
onLoad((options) => {
|
|||
|
jobId.value = options.jobId
|
|||
|
})
|
|||
|
|
|||
|
</script>
|
|||
|
|
|||
|
<style lang="scss" scoped>
|
|||
|
.job-page{
|
|||
|
background-color: #f5f5f5;
|
|||
|
.subtitle {
|
|||
|
border-bottom: 1rpx solid #e8e8e8;
|
|||
|
}
|
|||
|
.basic{
|
|||
|
background-color: #fff;
|
|||
|
color: #444;
|
|||
|
.title {
|
|||
|
color: #000;
|
|||
|
line-height: 2em;
|
|||
|
}
|
|||
|
.salary {
|
|||
|
color: #24ba97;
|
|||
|
line-height: 2em;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.desc {
|
|||
|
background-color: #fff;
|
|||
|
color: #444444;
|
|||
|
}
|
|||
|
|
|||
|
.companyInfo {
|
|||
|
background-color: #fff;
|
|||
|
color: #444;
|
|||
|
}
|
|||
|
.relative {
|
|||
|
background-color: #fff;
|
|||
|
color: #444444;
|
|||
|
.item{
|
|||
|
border-bottom: 1rpx solid #e8e8e8;
|
|||
|
.title-time{
|
|||
|
.title{
|
|||
|
color: #444;
|
|||
|
}
|
|||
|
.time{
|
|||
|
text-align: right;
|
|||
|
color: #888;
|
|||
|
font-style: italic;
|
|||
|
font-size: 26rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.info{
|
|||
|
.needs{
|
|||
|
font-size: 28rpx;
|
|||
|
color: #888;
|
|||
|
}
|
|||
|
.salary{
|
|||
|
text-align: right;
|
|||
|
font-size: 32rpx;
|
|||
|
color: #24ba97;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
</style>
|