243 lines
5.8 KiB
Vue
Raw Normal View History

2024-11-05 10:07:15 +08:00
<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>