招聘会模块
This commit is contained in:
639
components/jobfair/signDialog.vue
Normal file
639
components/jobfair/signDialog.vue
Normal file
@@ -0,0 +1,639 @@
|
||||
<template>
|
||||
<view class="job-dialog">
|
||||
<view class="header-title">
|
||||
<image :src="`${imgBaseUrl}/jobfair/xb.png`" mode=""></image>
|
||||
<text>招聘会报名</text>
|
||||
</view>
|
||||
<view class="dialog-content">
|
||||
<view class="detail-item" v-if="type == 2">
|
||||
<view class="gw-label">选择展区展位:</view>
|
||||
<!-- 展位状态说明 -->
|
||||
<view class="status-description">
|
||||
<view class="status-title">
|
||||
<text>展位状态说明:</text>
|
||||
</view>
|
||||
<view class="status-item">
|
||||
<view class="status-color available"></view>
|
||||
<text class="status-text">未被占用</text>
|
||||
</view>
|
||||
<view class="status-item">
|
||||
<view class="status-color occupied"></view>
|
||||
<text class="status-text">已被占用</text>
|
||||
</view>
|
||||
<view class="status-item">
|
||||
<view class="status-color pending"></view>
|
||||
<text class="status-text">待审核占用</text>
|
||||
</view>
|
||||
<view class="status-item">
|
||||
<view class="status-color selected"></view>
|
||||
<text class="status-text">当前选中</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="gw-value">
|
||||
<view class="cd-detail" v-for="(item, index) in areaAndBoothList" :key="index">
|
||||
<view class="cd-name">{{ item.jobFairAreaName }}</view>
|
||||
<view class="cd-con">
|
||||
<view class="cd-con-item" :class="getBoothStatusClass(booth)"
|
||||
v-for="(booth, boothIndex) in item.boothList" :key="boothIndex"
|
||||
@click="selectBooth(booth, item.jobFairAreaId)">
|
||||
<text>{{ booth.jobFairBoothName }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="detail-item">
|
||||
<view class="gw-label">请选择招聘岗位:</view>
|
||||
<view class="gw-value">
|
||||
<view class="checkbox-group">
|
||||
<view class="checkbox-item job-item" v-for="(item, index) in jobList" :key="index"
|
||||
:class="{ 'checked': checkList.includes(item) }" @click="toggleJobSelection(item)">
|
||||
<view class="item-checkbox">
|
||||
<view class="checkbox-icon" :class="{ 'checked': checkList.includes(item) }">
|
||||
<text v-if="checkList.includes(item)">✓</text>
|
||||
</view>
|
||||
<view class="job-info">
|
||||
<view class="job-name">{{ item.jobTitle }}</view>
|
||||
<view class="salary">{{ item.salaryRange }}元/月</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="detail-item">
|
||||
<view class="gw-label">请上传招聘海报:</view>
|
||||
<view class="gw-value">
|
||||
<view v-if="imageUrl">
|
||||
<image v-if="imageUrl" :src="publicUrl + '/file/file/minio' + imageUrl" class="avatar"
|
||||
mode="aspectFit" />
|
||||
<button type="warn" class="del-icon" @click="imageUrl = ''" size="mini">删除</button>
|
||||
</view>
|
||||
<view v-else>
|
||||
<button @click="chooseImage" class="avatar-uploader transparent-btn" type="default">
|
||||
<view class="avatar-uploader-icon">+</view>
|
||||
</button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="btn-box">
|
||||
<button style="background: #409EFF;color: #fff;" @click="submitForm">提交</button>
|
||||
<button type="default" @click="closeDialog">取消</button>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import config from "@/config.js"
|
||||
import {
|
||||
ref,
|
||||
reactive,
|
||||
onMounted,
|
||||
nextTick,
|
||||
watch,
|
||||
inject
|
||||
} from 'vue';
|
||||
|
||||
const emit = defineEmits(['closePopup']);
|
||||
import {
|
||||
createRequest
|
||||
} from '@/utils/request.js';
|
||||
const {
|
||||
$api
|
||||
} = inject('globalFunction');
|
||||
|
||||
// 定义props
|
||||
const props = defineProps({
|
||||
// 招聘会类型1线上 2线下
|
||||
signType: {
|
||||
type: Number,
|
||||
default: 1
|
||||
},
|
||||
// 报名角色 ent企业 person个人
|
||||
signRole: {
|
||||
type: String,
|
||||
default: 'ent'
|
||||
},
|
||||
// 招聘会id
|
||||
jobFairId: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
});
|
||||
|
||||
// 监听props变化
|
||||
watch(() => props.signType, (newVal) => {
|
||||
type.value = newVal;
|
||||
});
|
||||
|
||||
// 响应式数据
|
||||
const checkList = ref([]);
|
||||
const imageUrl = ref('');
|
||||
const type = ref('');
|
||||
const id = ref('');
|
||||
const jobList = ref([]);
|
||||
const userId = ref('');
|
||||
const areaAndBoothList = ref([]);
|
||||
const jobFairAreaId = ref(null);
|
||||
const jobFairBoothId = ref(null);
|
||||
const avatarUploader = ref(null);
|
||||
|
||||
// 配置
|
||||
const publicUrl = config.LCBaseUrl;
|
||||
const imgBaseUrl = config.imgBaseUrl
|
||||
const uploadUrl = config.LCBaseUrl + "/file/file/upload";
|
||||
|
||||
// 方法
|
||||
const selectBooth = (booth, jobFairAreaIdVal) => {
|
||||
if (booth.status == 0) {
|
||||
jobFairBoothId.value = booth.jobFairBoothId;
|
||||
jobFairAreaId.value = jobFairAreaIdVal;
|
||||
}
|
||||
};
|
||||
|
||||
const submitForm = async () => {
|
||||
if (type.value == "2") {
|
||||
if (!jobFairBoothId.value || !jobFairAreaId.value) {
|
||||
uni.showToast({
|
||||
title: '请选择展区展位',
|
||||
icon: 'none'
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (checkList.value.length === 0) {
|
||||
uni.showToast({
|
||||
title: '请选择招聘岗位',
|
||||
icon: 'none'
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (!imageUrl.value) {
|
||||
uni.showToast({
|
||||
title: '请上传招聘海报',
|
||||
icon: 'none'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
$api.myRequest("/system/user/login/user/info", {}, "GET", 10100, {
|
||||
Authorization: `Bearer ${uni.getStorageSync("Padmin-Token")}`
|
||||
}).then((userInfo) => {
|
||||
let data = {}
|
||||
if (type.value == "2") {
|
||||
data = {
|
||||
jobFairId: id.value,
|
||||
enterpriseId: userInfo.info.userId,
|
||||
jobInfoList: checkList.value,
|
||||
poster: imageUrl.value,
|
||||
jobFairAreaId: jobFairAreaId.value,
|
||||
jobFairBoothId: jobFairBoothId.value,
|
||||
code: userInfo.info.entCreditCode
|
||||
};
|
||||
} else {
|
||||
data = {
|
||||
jobFairId: id.value,
|
||||
enterpriseId: userInfo.info.userId,
|
||||
jobInfoList: checkList.value,
|
||||
poster: imageUrl.value,
|
||||
code: userInfo.info.entCreditCode
|
||||
};
|
||||
}
|
||||
$api.myRequest("/jobfair/public/job-fair-sign-up-enterprise/sign-up", data, "post", 9100, {
|
||||
Authorization: `Bearer ${uni.getStorageSync("Padmin-Token")}`
|
||||
}).then((res) => {
|
||||
if (res.code === 200) {
|
||||
uni.showToast({
|
||||
title: '报名成功',
|
||||
icon: 'success'
|
||||
});
|
||||
closeDialog();
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: res.msg || '报名失败',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
});
|
||||
})
|
||||
};
|
||||
|
||||
const closeDialog = () => {
|
||||
checkList.value = [];
|
||||
imageUrl.value = '';
|
||||
jobFairBoothId.value = null;
|
||||
jobFairAreaId.value = null;
|
||||
emit('closePopup')
|
||||
};
|
||||
|
||||
const handleAvatarSuccess = (response) => {
|
||||
imageUrl.value = response.data.url;
|
||||
uni.showToast({
|
||||
title: '海报上传成功',
|
||||
icon: 'success'
|
||||
});
|
||||
};
|
||||
|
||||
const showDialog = (dialogType, dialogId) => {
|
||||
type.value = dialogType;
|
||||
id.value = dialogId;
|
||||
nextTick(() => {
|
||||
getJobList();
|
||||
if (type.value === "2") {
|
||||
getAreaAndBoothInfo();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 展区展位列表
|
||||
const getAreaAndBoothInfo = () => {
|
||||
const data = {
|
||||
jobFairId: props.jobFairId,
|
||||
}
|
||||
$api.myRequest("/jobfair/public/jobfair/area-and-booth-info-by-job-fair-id", data, "GET", 9100, {
|
||||
Authorization: `Bearer ${uni.getStorageSync("Padmin-Token")}`
|
||||
}).then((resData) => {
|
||||
areaAndBoothList.value = resData.data || [];
|
||||
});
|
||||
};
|
||||
|
||||
// 岗位列表
|
||||
const getJobList = () => {
|
||||
$api.myRequest("/system/user/login/user/info", {}, "GET", 10100, {
|
||||
Authorization: `Bearer ${uni.getStorageSync("Padmin-Token")}`
|
||||
}).then((userInfo) => {
|
||||
const data = {
|
||||
jobFairId: id.value,
|
||||
enterpriseId: userInfo.info.userId,
|
||||
pageNum: 1,
|
||||
pageSize: 1000,
|
||||
code: userInfo.info.entCreditCode
|
||||
}
|
||||
$api.myRequest("/jobfair/public/job-info/list", data, "GET", 9100, {
|
||||
Authorization: `Bearer ${uni.getStorageSync("Padmin-Token")}`
|
||||
}).then((resData) => {
|
||||
jobList.value = resData.data.list || [];
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const getBoothStatusClass = (booth) => {
|
||||
const s = booth.status || 0;
|
||||
if (s == 1) return "cd-con-item-checked";
|
||||
if (s == 2) return "cd-con-item-review";
|
||||
if (jobFairBoothId.value && jobFairBoothId.value == booth.jobFairBoothId)
|
||||
return "cd-con-item-mychecked";
|
||||
return "";
|
||||
};
|
||||
|
||||
// 选择图片
|
||||
const chooseImage = () => {
|
||||
uni.chooseImage({
|
||||
count: 1,
|
||||
sizeType: ['original', 'compressed'],
|
||||
sourceType: ['album', 'camera'],
|
||||
success: (res) => {
|
||||
const tempFilePath = res.tempFilePaths[0];
|
||||
uploadImage(tempFilePath);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 上传图片
|
||||
const uploadImage = (tempFilePath) => {
|
||||
uni.uploadFile({
|
||||
url: uploadUrl,
|
||||
filePath: tempFilePath,
|
||||
name: 'file',
|
||||
success: (uploadFileRes) => {
|
||||
try {
|
||||
const response = JSON.parse(uploadFileRes.data);
|
||||
handleAvatarSuccess(response);
|
||||
} catch (e) {
|
||||
uni.showToast({
|
||||
title: '上传失败,请重试',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('上传失败:', err);
|
||||
uni.showToast({
|
||||
title: '上传失败,请重试',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 切换岗位选择
|
||||
const toggleJobSelection = (item) => {
|
||||
const index = checkList.value.indexOf(item);
|
||||
if (index > -1) {
|
||||
checkList.value.splice(index, 1);
|
||||
} else {
|
||||
checkList.value.push(item);
|
||||
}
|
||||
};
|
||||
|
||||
// 暴露方法给父组件
|
||||
defineExpose({
|
||||
showDialog
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
setTimeout(() => {
|
||||
type.value = props.signType;
|
||||
if (props.jobFairId) {
|
||||
id.value = props.jobFairId;
|
||||
getJobList();
|
||||
if (props.signType == 2) {
|
||||
getAreaAndBoothInfo();
|
||||
}
|
||||
}
|
||||
}, 100);
|
||||
});
|
||||
|
||||
// 监听jobFairId变化
|
||||
watch(() => props.jobFairId, (newVal) => {
|
||||
if (newVal) {
|
||||
id.value = newVal;
|
||||
getJobList();
|
||||
if (type.value === 2) {
|
||||
getAreaAndBoothInfo();
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.del-icon {
|
||||
margin-left: 30rpx;
|
||||
}
|
||||
|
||||
.btn-box {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin-top: 30rpx;
|
||||
}
|
||||
|
||||
.btn-box button {
|
||||
padding: 0 80rpx;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
}
|
||||
|
||||
.avatar-uploader {
|
||||
border: 2rpx solid #0983ff;
|
||||
border-radius: 12rpx;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
width: 400rpx;
|
||||
height: 200rpx;
|
||||
}
|
||||
|
||||
.avatar-uploader-icon {
|
||||
font-size: 56rpx;
|
||||
color: #007AFF;
|
||||
line-height: 200rpx;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.job-dialog {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.dialog-content {
|
||||
padding: 0 20rpx;
|
||||
height: calc(100% - 17vh);
|
||||
overflow-y: auto;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.checkbox-group {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.checkbox-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-bottom: 2rpx solid #b5d3ff;
|
||||
padding: 30rpx 0;
|
||||
}
|
||||
|
||||
.job-item {
|
||||
width: 97%;
|
||||
}
|
||||
|
||||
.checkbox-icon {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
border: 2rpx solid #ddd;
|
||||
border-radius: 8rpx;
|
||||
margin-right: 20rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.checkbox-icon.checked {
|
||||
background-color: #409eff;
|
||||
border-color: #409eff;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.job-info {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.detail-item {
|
||||
margin-bottom: 40rpx;
|
||||
}
|
||||
|
||||
.detail-item .gw-label {
|
||||
font-size: 32rpx;
|
||||
color: #333333;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.detail-item .gw-value {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.detail-item .gw-value .cd-detail {
|
||||
width: 100%;
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
margin-bottom: 28rpx;
|
||||
margin-top: 28rpx;
|
||||
}
|
||||
|
||||
.detail-item .gw-value .cd-detail .cd-name {
|
||||
background: #d3e8ff;
|
||||
color: #0076d9;
|
||||
font-size: 40rpx;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
padding: 0 40rpx;
|
||||
border-radius: 16rpx;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.detail-item .gw-value .cd-detail .cd-name::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 10rpx;
|
||||
height: 100%;
|
||||
background: #349cfc;
|
||||
}
|
||||
|
||||
.detail-item .gw-value .cd-detail .cd-con {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
padding: 30rpx 40rpx;
|
||||
gap: 20rpx;
|
||||
}
|
||||
|
||||
.detail-item .gw-value .cd-detail .cd-con .cd-con-item {
|
||||
width: 80rpx;
|
||||
height: 80rpx;
|
||||
background: #67CFA7;
|
||||
line-height: 80rpx;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
border: 2rpx solid #ddd;
|
||||
border-radius: 20rpx;
|
||||
cursor: pointer;
|
||||
font-weight: 600;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
|
||||
.detail-item .gw-value .cd-detail .cd-con .cd-con-item-review {
|
||||
background-color: #F8BB92;
|
||||
}
|
||||
|
||||
.detail-item .gw-value .cd-detail .cd-con .cd-con-item-checked {
|
||||
background: #F6A1A1;
|
||||
}
|
||||
|
||||
.detail-item .gw-value .cd-detail .cd-con .cd-con-item-mychecked {
|
||||
background: #79BEFE;
|
||||
}
|
||||
|
||||
.item-checkbox {
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.job-name {
|
||||
font-size: 32rpx;
|
||||
color: #409eff;
|
||||
}
|
||||
|
||||
.salary {
|
||||
font-size: 32rpx;
|
||||
color: #ff6e27;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.header-title {
|
||||
font-size: 38rpx;
|
||||
font-weight: 600;
|
||||
color: #303133;
|
||||
padding: 20rpx;
|
||||
padding-bottom: 40rpx;
|
||||
background: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.header-title image {
|
||||
width: 14rpx;
|
||||
height: 33rpx;
|
||||
margin-right: 14rpx;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
width: 400rpx;
|
||||
height: 200rpx;
|
||||
border-radius: 12rpx;
|
||||
}
|
||||
|
||||
/* 展位状态说明样式 */
|
||||
.status-description {
|
||||
margin-top: 30rpx;
|
||||
padding: 20rpx;
|
||||
background-color: #f5f7fa;
|
||||
border-radius: 8rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.status-title {
|
||||
font-weight: bold;
|
||||
margin-bottom: 16rpx;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.status-item {
|
||||
width: 43%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 30rpx;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
|
||||
.status-color {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
margin-right: 16rpx;
|
||||
}
|
||||
|
||||
.status-color.available {
|
||||
background-color: #67CFA7;
|
||||
border: 2rpx solid #ddd;
|
||||
}
|
||||
|
||||
.status-color.occupied {
|
||||
background-color: #F6A1A1;
|
||||
}
|
||||
|
||||
.status-color.pending {
|
||||
background-color: #F8BB92;
|
||||
}
|
||||
|
||||
.status-color.selected {
|
||||
background-color: #79BEFE;
|
||||
}
|
||||
|
||||
.status-text {
|
||||
margin-right: 16rpx;
|
||||
}
|
||||
|
||||
/* 透明按钮样式 */
|
||||
.transparent-btn {
|
||||
background: transparent !important;
|
||||
border: 2rpx dashed #0983ff !important;
|
||||
}
|
||||
</style>
|
||||
@@ -7,10 +7,7 @@
|
||||
</template>
|
||||
<template #headerright>
|
||||
<view class="btn mar_ri10">
|
||||
<image
|
||||
src="@/static/icon/collect3.png"
|
||||
v-if="!companyInfo.isCollection"
|
||||
></image>
|
||||
<image src="@/static/icon/collect3.png" v-if="!companyInfo.isCollection"></image>
|
||||
<image src="@/static/icon/collect2.png" v-else></image>
|
||||
</view>
|
||||
</template>
|
||||
@@ -36,11 +33,8 @@
|
||||
</view>
|
||||
<view class="expand" @click="expand">
|
||||
<text>{{ isExpanded ? "收起" : "展开" }}</text>
|
||||
<image
|
||||
class="expand-img"
|
||||
:class="{ 'expand-img-active': !isExpanded }"
|
||||
src="@/static/icon/downs.png"
|
||||
></image>
|
||||
<image class="expand-img" :class="{ 'expand-img-active': !isExpanded }" src="@/static/icon/downs.png">
|
||||
</image>
|
||||
</view>
|
||||
<scroll-view scroll-y class="Detailscroll-view">
|
||||
<view class="views">
|
||||
@@ -48,7 +42,8 @@
|
||||
<template v-if="companyInfo.jobInfoList.length != 0">
|
||||
<view v-for="job in companyInfo.jobInfoList" :key="job.id">
|
||||
<!-- @click="navTo(`/packageA/pages/post/post?jobId=${JSON.stringify(job)}`)" -->
|
||||
<view class="cards" :style="getItemBackgroundStyle('bj2.png')">
|
||||
<!-- :style="getItemBackgroundStyle('bj2.png')" -->
|
||||
<view class="cards">
|
||||
<view class="card-company">
|
||||
<text class="company">{{ job.jobTitle }}</text>
|
||||
<view class="salary"> ¥{{ job.salaryRange }}/月 </view>
|
||||
@@ -68,10 +63,13 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class="card-companyName">
|
||||
<image :src="`${baseUrl}/jobfair/hd.png`" mode=""></image>
|
||||
{{ job.jobDescription }}
|
||||
</view>
|
||||
|
||||
<view class="deliver-box">
|
||||
<view class="deliver-btn" @click="deliverResume">
|
||||
简历投递
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
@@ -83,14 +81,34 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, inject, watch, ref, onMounted, computed } from "vue";
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app";
|
||||
import {
|
||||
reactive,
|
||||
inject,
|
||||
watch,
|
||||
ref,
|
||||
onMounted,
|
||||
computed
|
||||
} from "vue";
|
||||
import {
|
||||
onLoad,
|
||||
onShow
|
||||
} from "@dcloudio/uni-app";
|
||||
import dictLabel from "@/components/dict-Label/dict-Label.vue";
|
||||
import config from "@/config.js";
|
||||
import { storeToRefs } from "pinia";
|
||||
import {
|
||||
storeToRefs
|
||||
} from "pinia";
|
||||
import useLocationStore from "@/stores/useLocationStore";
|
||||
const { longitudeVal, latitudeVal } = storeToRefs(useLocationStore());
|
||||
const { $api, navTo, vacanciesTo, navBack } = inject("globalFunction");
|
||||
const {
|
||||
longitudeVal,
|
||||
latitudeVal
|
||||
} = storeToRefs(useLocationStore());
|
||||
const {
|
||||
$api,
|
||||
navTo,
|
||||
vacanciesTo,
|
||||
navBack
|
||||
} = inject("globalFunction");
|
||||
const isExpanded = ref(false);
|
||||
const pageState = reactive({
|
||||
page: 0,
|
||||
@@ -113,12 +131,38 @@ const getItemBackgroundStyle = (imageName) => ({
|
||||
|
||||
onLoad((options) => {
|
||||
companyInfo.value = JSON.parse(options.job);
|
||||
console.log(companyInfo.value, "companyInfo.value");
|
||||
});
|
||||
|
||||
function expand() {
|
||||
isExpanded.value = !isExpanded.value;
|
||||
}
|
||||
|
||||
function deliverResume() {
|
||||
const raw = uni.getStorageSync("Padmin-Token");
|
||||
const token = typeof raw === "string" ? raw.trim() : "";
|
||||
const headers = token ? {
|
||||
Authorization: raw.startsWith("Bearer ") ? raw : `Bearer ${token}`
|
||||
} : {};
|
||||
|
||||
$api.myRequest("/dashboard/auth/heart", {}, "POST", 10100, headers).then((resData1) => {
|
||||
if (resData1.code == 200) {
|
||||
$api.myRequest("/system/user/login/user/info", {}, "GET", 10100, headers).then((resData) => {
|
||||
$api.myRequest("/jobfair/public/job-fair-person-job/insert", {}, "GET", 9100, {
|
||||
"Content-Type": "application/json"
|
||||
}).then((data) => {
|
||||
if (data && data.code === 200) {
|
||||
$api.msg("简历投递成功");
|
||||
} else {
|
||||
$api.msg((data && data.msg) || "简历投递失败");
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
$api.msg('请先登录')
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
@@ -266,16 +310,18 @@ image {
|
||||
border-radius: 20rpx 20rpx 20rpx 20rpx;
|
||||
margin-top: 22rpx;
|
||||
padding-bottom: 18rpx;
|
||||
background: #f2f8fc;
|
||||
|
||||
.card-company {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
border-bottom: 1rpx solid #c2d7ea;
|
||||
|
||||
.company {
|
||||
font-weight: 600;
|
||||
font-size: 32rpx;
|
||||
color: #333333;
|
||||
color: #207AC7;
|
||||
}
|
||||
|
||||
.salary {
|
||||
@@ -287,13 +333,28 @@ image {
|
||||
}
|
||||
}
|
||||
|
||||
.deliver-box {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
margin-top: 5rpx;
|
||||
|
||||
.deliver-btn {
|
||||
padding: 10rpx 25rpx;
|
||||
background: #53ACFF;
|
||||
width: max-content;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
.card-companyName {
|
||||
font-weight: 400;
|
||||
font-size: 28rpx;
|
||||
color: #fff;
|
||||
margin-top: 23rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
image {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
@@ -305,11 +366,13 @@ image {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: 25rpx 0 35rpx;
|
||||
|
||||
image {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
margin-right: 8rpx;
|
||||
}
|
||||
|
||||
.jy {
|
||||
background: #D9EDFF;
|
||||
color: #0086FF;
|
||||
@@ -319,6 +382,7 @@ image {
|
||||
background: #FFF1D5;
|
||||
color: #FF7F01;
|
||||
}
|
||||
|
||||
.yd {
|
||||
background: #FFD8D8;
|
||||
color: #F83A3C;
|
||||
|
||||
@@ -105,16 +105,23 @@
|
||||
</view>
|
||||
<template #footer>
|
||||
<view class="footer" v-if="hasnext">
|
||||
<view class="btn-wq button-click" :class="{ 'btn-desbel': fairInfo.isCollection }"
|
||||
<view class="btn-wq button-click" :class="{ 'btn-desbel': fairInfo.isSignUp==1 }"
|
||||
@click="applyExhibitors">
|
||||
{{ fairInfo.isCollection ? '已预约招聘会' : '预约招聘会' }}
|
||||
{{ fairInfo.isSignUp==1 ? '已报名' : '报名招聘会' }}
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<uni-popup ref="CompanySignPopup" background-color="#fff" :mask-click="false">
|
||||
<view class="popup-content">
|
||||
<signDialog v-if="signDialogisshow" :signType="signType" :signRole="signRole"
|
||||
:jobFairId="fairInfo.jobFairId" @closePopup="closePopup"></signDialog>
|
||||
</view>
|
||||
</uni-popup>
|
||||
</AppLayout>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import signDialog from '@/components/jobfair/signDialog.vue';
|
||||
import config from "@/config.js"
|
||||
import {
|
||||
reactive,
|
||||
@@ -128,7 +135,6 @@
|
||||
onLoad,
|
||||
onShow
|
||||
} from '@dcloudio/uni-app';
|
||||
import dictLabel from '@/components/dict-Label/dict-Label.vue';
|
||||
import useLocationStore from '@/stores/useLocationStore';
|
||||
const {
|
||||
$api,
|
||||
@@ -148,6 +154,15 @@
|
||||
const fairInfo = ref({});
|
||||
const companyList = ref([]);
|
||||
const hasnext = ref(true);
|
||||
const userInfo = ref({});
|
||||
const signDialogisshow = ref(false)
|
||||
// 弹窗
|
||||
const signType = ref(1);
|
||||
// person个人 ent企业
|
||||
const signRole = ref('ent');
|
||||
const CompanySignPopup = ref(null)
|
||||
|
||||
const jobFairId = ref(null)
|
||||
|
||||
const baseUrl = config.imgBaseUrl
|
||||
const getItemBackgroundStyle = (imageName) => ({
|
||||
@@ -157,28 +172,59 @@
|
||||
backgroundRepeat: 'no-repeat'
|
||||
});
|
||||
onLoad((options) => {
|
||||
getCompanyInfo(options.jobFairId);
|
||||
jobFairId.value=options.jobFairId
|
||||
const raw = uni.getStorageSync("Padmin-Token");
|
||||
const token = typeof raw === "string" ? raw.trim() : "";
|
||||
const headers = token ? {
|
||||
Authorization: raw.startsWith("Bearer ") ? raw : `Bearer ${token}`
|
||||
} : {};
|
||||
|
||||
$api.myRequest("/dashboard/auth/heart", {}, "POST", 10100, headers).then((resData) => {
|
||||
if (resData.code == 200) {
|
||||
$api.myRequest("/system/user/login/user/info", {}, "GET", 10100, {
|
||||
Authorization: `Bearer ${uni.getStorageSync("Padmin-Token")}`
|
||||
}).then((userinfo) => {
|
||||
userInfo.value = userinfo
|
||||
getCompanyInfo(userInfo.value.info.userId, options.jobFairId);
|
||||
});
|
||||
} else {
|
||||
getCompanyInfo('', options.jobFairId);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function getCompanyInfo(id) {
|
||||
// $api.createRequest(`/app/fair/${id}`).then((resData) => {
|
||||
// fairInfo.value = resData.data;
|
||||
// companyList.value = resData.data.companyList;
|
||||
// hasAppointment();
|
||||
// });
|
||||
$api.myRequest('/jobfair/public/jobfair/detail', {
|
||||
jobFairId: id
|
||||
}).then((resData) => {
|
||||
console.log(resData, 'resData');
|
||||
function closePopup() {
|
||||
CompanySignPopup.value.close()
|
||||
getCompanyInfo(userInfo.value.info.userId, jobFairId.value)
|
||||
}
|
||||
|
||||
function getCompanyInfo(userId, id) {
|
||||
let data={}
|
||||
if (userInfo.value&&userInfo.value.userType == 'ent') {
|
||||
data={
|
||||
jobFairId: id,
|
||||
enterpriseId: userId,
|
||||
code:userInfo.value.info.entCreditCode
|
||||
}
|
||||
}else if(userInfo.value&&userInfo.value.userType == 'ent'){
|
||||
data={
|
||||
jobFairId: id,
|
||||
personId: userId,
|
||||
idCard:userInfo.value.info.personCardNo
|
||||
}
|
||||
}else{
|
||||
data={
|
||||
jobFairId: id,
|
||||
personId: userId
|
||||
}
|
||||
}
|
||||
$api.myRequest('/jobfair/public/jobfair/detail', data).then((resData) => {
|
||||
fairInfo.value = resData.data;
|
||||
console.log(fairInfo.value, 'fairInfo.value');
|
||||
// hasAppointment()
|
||||
});
|
||||
$api.myRequest('/jobfair/public/jobfair/enterprises-with-jobs-by-job-fair-id', {
|
||||
jobFairId: id
|
||||
}).then((resData) => {
|
||||
companyList.value = resData.data;
|
||||
// hasAppointment()
|
||||
});
|
||||
};
|
||||
|
||||
@@ -205,21 +251,56 @@
|
||||
isExpanded.value = !isExpanded.value;
|
||||
}
|
||||
|
||||
// 取消/收藏岗位
|
||||
// 报名招聘会
|
||||
function applyExhibitors() {
|
||||
const fairId = fairInfo.value.jobFairId;
|
||||
if (fairInfo.value.isCollection) {
|
||||
// $api.createRequest(`/app/fair/collection/${fairId}`, {}, 'DELETE').then((resData) => {
|
||||
// getCompanyInfo(fairId);
|
||||
// $api.msg('取消预约成功');
|
||||
// });
|
||||
$api.msg('已预约成功');
|
||||
if (fairInfo.value.isSignUp == 1) {
|
||||
$api.msg('请勿重复报名');
|
||||
return
|
||||
}
|
||||
const raw = uni.getStorageSync("Padmin-Token");
|
||||
const token = typeof raw === "string" ? raw.trim() : "";
|
||||
const headers = token ? {
|
||||
Authorization: raw.startsWith("Bearer ") ? raw : `Bearer ${token}`
|
||||
} : {};
|
||||
|
||||
$api.myRequest("/dashboard/auth/heart", {}, "POST", 10100, headers).then((resData) => {
|
||||
if (resData.code == 200) {
|
||||
if (userInfo.value.userType == 'ent') {
|
||||
// 企业
|
||||
signType.value = fairInfo.value.jobFairType;
|
||||
signRole.value = userInfo.userType;
|
||||
signDialogisshow.value = true
|
||||
CompanySignPopup.value.open()
|
||||
}else{
|
||||
$api.createRequest(`/app/fair/collection/${fairId}`, {}, 'POST').then((resData) => {
|
||||
getCompanyInfo(fairId);
|
||||
$api.msg('预约成功');
|
||||
$api.myRequest("/jobfair/public/job-fair-sign-up-person/sign-up", {
|
||||
personId: userInfo.value.info.userId,
|
||||
jobFairId: jobFairId.value,
|
||||
idCard:userInfo.value.info.personCardNo
|
||||
}, "POST", 9100, { "Content-Type": "application/json",...headers }).then((res) => {
|
||||
if (res.code === 200) {
|
||||
uni.showToast({
|
||||
title: '报名成功',
|
||||
icon: 'success'
|
||||
});
|
||||
getCompanyInfo(userInfo.value.info.userId, jobFairId.value)
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: res.msg || '报名失败',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
} else {
|
||||
$api.msg('请先登录');
|
||||
setTimeout(() => {
|
||||
uni.redirectTo({
|
||||
url: '/packageB/login'
|
||||
})
|
||||
}, 1000)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function parseDateTime(datetimeStr) {
|
||||
@@ -288,6 +369,12 @@
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.popup-content {
|
||||
width: 90vw;
|
||||
height: 80vh;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.btnback {
|
||||
width: 64rpx;
|
||||
height: 64rpx;
|
||||
@@ -528,6 +615,7 @@
|
||||
color: #333333;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
image {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
@@ -577,6 +665,7 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 20rpx;
|
||||
|
||||
image {
|
||||
width: 22rpx;
|
||||
height: 22rpx;
|
||||
|
||||
@@ -240,6 +240,7 @@ const applicants = ref([
|
||||
]);
|
||||
|
||||
onLoad((option) => {
|
||||
console.log(option, 'option');
|
||||
if (option.jobId) {
|
||||
initLoad(option);
|
||||
}
|
||||
|
||||
@@ -1,559 +0,0 @@
|
||||
<template>
|
||||
<AppLayout title="" :use-scroll-view="false">
|
||||
<template #headerleft>
|
||||
<view class="btnback">
|
||||
<image src="@/static/icon/back.png" @click="navBack"></image>
|
||||
</view>
|
||||
</template>
|
||||
<view class="content">
|
||||
<view class="content-top">
|
||||
<view class="companyinfo-left">
|
||||
<image src="@/static/icon/companyIcon.png" mode=""></image>
|
||||
</view>
|
||||
<view class="companyinfo-right">
|
||||
<view class="row1 line_2">{{ fairInfo?.name }}</view>
|
||||
<view class="row2">
|
||||
<text>{{ fairInfo.location }}</text>
|
||||
<convert-distance
|
||||
:alat="fairInfo.latitude"
|
||||
:along="fairInfo.longitude"
|
||||
:blat="latitudeVal"
|
||||
:blong="longitudeVal"
|
||||
></convert-distance>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="locations">
|
||||
<image class="location-img" src="/static/icon/mapLine.png"></image>
|
||||
<view class="location-info">
|
||||
<view class="info">
|
||||
<text class="info-title">{{ fairInfo.address }}</text>
|
||||
<text class="info-text">位置</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="conetent-info" :class="{ expanded: isExpanded }">
|
||||
<view class="info-title">内容描述</view>
|
||||
<view class="info-desirption">{{ fairInfo.description }}</view>
|
||||
<!-- <view class="info-title title2">公司地址</view>
|
||||
<view class="locationCompany"></view> -->
|
||||
<view class="company-times">
|
||||
<view class="info-title">内容描述</view>
|
||||
<view class="card-times">
|
||||
<view class="time-left">
|
||||
<view class="left-date">{{ parseDateTime(fairInfo.startTime).time }}</view>
|
||||
<view class="left-dateDay">{{ parseDateTime(fairInfo.startTime).date }}</view>
|
||||
</view>
|
||||
<view class="line"></view>
|
||||
<view class="time-center">
|
||||
<view class="center-date">
|
||||
{{ getTimeStatus(fairInfo.startTime, fairInfo.endTime).statusText }}
|
||||
</view>
|
||||
<view class="center-dateDay">
|
||||
{{ getHoursBetween(fairInfo.startTime, fairInfo.endTime) }}小时
|
||||
</view>
|
||||
</view>
|
||||
<view class="line"></view>
|
||||
<view class="time-right">
|
||||
<view class="left-date">{{ parseDateTime(fairInfo.endTime).time }}</view>
|
||||
<view class="left-dateDay">{{ parseDateTime(fairInfo.endTime).date }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="expand" @click="expand">
|
||||
<text>{{ isExpanded ? '收起' : '展开' }}</text>
|
||||
<image
|
||||
class="expand-img"
|
||||
:class="{ 'expand-img-active': !isExpanded }"
|
||||
src="@/static/icon/downs.png"
|
||||
></image>
|
||||
</view>
|
||||
<scroll-view scroll-y class="Detailscroll-view">
|
||||
<view class="views">
|
||||
<view class="Detail-title">
|
||||
<text class="title">参会单位({{ companyList.length }})</text>
|
||||
</view>
|
||||
<renderCompanys
|
||||
v-if="companyList.length"
|
||||
:list="companyList"
|
||||
:longitude="longitudeVal"
|
||||
:latitude="latitudeVal"
|
||||
></renderCompanys>
|
||||
<empty v-else pdTop="200"></empty>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
<template #footer>
|
||||
<view class="footer" v-if="hasnext">
|
||||
<view
|
||||
class="btn-wq button-click"
|
||||
:class="{ 'btn-desbel': fairInfo.isCollection }"
|
||||
@click="applyExhibitors"
|
||||
>
|
||||
{{ fairInfo.isCollection ? '已预约招聘会' : '预约招聘会' }}
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</AppLayout>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import point from '@/static/icon/point.png';
|
||||
import { reactive, inject, watch, ref, onMounted, computed } from 'vue';
|
||||
import { onLoad, onShow } from '@dcloudio/uni-app';
|
||||
import dictLabel from '@/components/dict-Label/dict-Label.vue';
|
||||
import useLocationStore from '@/stores/useLocationStore';
|
||||
const { $api, navTo, vacanciesTo, navBack } = inject('globalFunction');
|
||||
import { storeToRefs } from 'pinia';
|
||||
const { longitudeVal, latitudeVal } = storeToRefs(useLocationStore());
|
||||
|
||||
const isExpanded = ref(false);
|
||||
const fairInfo = ref({});
|
||||
const companyList = ref([]);
|
||||
const hasnext = ref(true);
|
||||
onLoad((options) => {
|
||||
getCompanyInfo(options.jobFairId);
|
||||
});
|
||||
|
||||
function getCompanyInfo(id) {
|
||||
$api.createRequest(`/app/fair/${id}`).then((resData) => {
|
||||
fairInfo.value = resData.data;
|
||||
companyList.value = resData.data.companyList;
|
||||
hasAppointment();
|
||||
});
|
||||
}
|
||||
|
||||
const hasAppointment = () => {
|
||||
const isTimePassed = (timeStr) => {
|
||||
const targetTime = new Date(timeStr.replace(/-/g, '/')).getTime(); // 兼容格式
|
||||
const now = Date.now();
|
||||
return now < targetTime;
|
||||
};
|
||||
|
||||
hasnext.value = isTimePassed(fairInfo.value.startTime);
|
||||
};
|
||||
|
||||
function openMap(lat, lng, name = '位置') {
|
||||
const isConfirmed = window.confirm('是否打开地图查看位置?');
|
||||
if (!isConfirmed) return;
|
||||
|
||||
// 使用高德地图或百度地图的 H5 链接打开
|
||||
const url = `https://uri.amap.com/marker?position=${lng},${lat}&name=${encodeURIComponent(name)}`;
|
||||
window.location.href = url;
|
||||
}
|
||||
|
||||
function expand() {
|
||||
isExpanded.value = !isExpanded.value;
|
||||
}
|
||||
|
||||
// 取消/收藏岗位
|
||||
function applyExhibitors() {
|
||||
const fairId = fairInfo.value.jobFairId;
|
||||
if (fairInfo.value.isCollection) {
|
||||
// $api.createRequest(`/app/fair/collection/${fairId}`, {}, 'DELETE').then((resData) => {
|
||||
// getCompanyInfo(fairId);
|
||||
// $api.msg('取消预约成功');
|
||||
// });
|
||||
$api.msg('已预约成功');
|
||||
} else {
|
||||
$api.createRequest(`/app/fair/collection/${fairId}`, {}, 'POST').then((resData) => {
|
||||
getCompanyInfo(fairId);
|
||||
$api.msg('预约成功');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function toIOSDate(input) {
|
||||
if (!input) return null;
|
||||
if (input instanceof Date) return isNaN(input.getTime()) ? null : input;
|
||||
if (typeof input === 'number') {
|
||||
const d = new Date(input);
|
||||
return isNaN(d.getTime()) ? null : d;
|
||||
}
|
||||
if (typeof input !== 'string') return null;
|
||||
let s = input.trim();
|
||||
if (/^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}(:\d{2})?$/.test(s)) {
|
||||
s = s.replace(' ', 'T');
|
||||
if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/.test(s)) {
|
||||
s = s + ':00';
|
||||
}
|
||||
}
|
||||
const d = new Date(s);
|
||||
return isNaN(d.getTime()) ? null : d;
|
||||
}
|
||||
|
||||
function parseDateTime(datetimeStr) {
|
||||
if (!datetimeStr) return { time: '', date: '' };
|
||||
|
||||
const dateObj = toIOSDate(datetimeStr);
|
||||
|
||||
if (isNaN(dateObj.getTime())) return { time: '', date: '' }; // 无效时间
|
||||
|
||||
const year = dateObj.getFullYear();
|
||||
const month = String(dateObj.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(dateObj.getDate()).padStart(2, '0');
|
||||
const hours = String(dateObj.getHours()).padStart(2, '0');
|
||||
const minutes = String(dateObj.getMinutes()).padStart(2, '0');
|
||||
|
||||
return {
|
||||
time: `${hours}:${minutes}`,
|
||||
date: `${year}年${month}月${day}日`,
|
||||
};
|
||||
}
|
||||
|
||||
function getTimeStatus(startTimeStr, endTimeStr) {
|
||||
const now = new Date();
|
||||
const startTime = toIOSDate(startTimeStr);
|
||||
const endTime = toIOSDate(endTimeStr);
|
||||
|
||||
if (!startTime || !endTime) {
|
||||
return { status: 1, statusText: '时间异常' };
|
||||
}
|
||||
|
||||
let status = 0;
|
||||
let statusText = '开始中';
|
||||
if (now < startTime) {
|
||||
status = 2;
|
||||
statusText = '待开始';
|
||||
} else if (now > endTime) {
|
||||
status = 1;
|
||||
statusText = '已过期';
|
||||
} else {
|
||||
status = 0;
|
||||
statusText = '进行中';
|
||||
}
|
||||
return { status, statusText };
|
||||
}
|
||||
|
||||
function getHoursBetween(startTimeStr, endTimeStr) {
|
||||
const start = toIOSDate(startTimeStr);
|
||||
const end = toIOSDate(endTimeStr);
|
||||
if (!start || !end) return 0;
|
||||
const diffMs = end - start;
|
||||
const diffHours = diffMs / (1000 * 60 * 60);
|
||||
return +diffHours.toFixed(2);
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.btnback{
|
||||
width: 64rpx;
|
||||
height: 64rpx;
|
||||
}
|
||||
.btn {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
width: 52rpx;
|
||||
height: 52rpx;
|
||||
}
|
||||
image {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
.content{
|
||||
height: 100%
|
||||
display: flex;
|
||||
flex-direction: column
|
||||
.content-top{
|
||||
padding: 28rpx
|
||||
padding-top: 50rpx
|
||||
display: flex
|
||||
flex-direction: row
|
||||
flex-wrap: nowrap
|
||||
.companyinfo-left{
|
||||
width: 96rpx;
|
||||
height: 96rpx;
|
||||
margin-right: 24rpx
|
||||
}
|
||||
.companyinfo-right{
|
||||
flex: 1
|
||||
.row1{
|
||||
font-weight: 500;
|
||||
font-size: 32rpx;
|
||||
color: #333333;
|
||||
font-family: 'PingFangSC-Medium', 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, 'Microsoft YaHei', sans-serif;
|
||||
}
|
||||
.row2{
|
||||
font-weight: 400;
|
||||
font-size: 28rpx;
|
||||
color: #6C7282;
|
||||
line-height: 45rpx;
|
||||
display: flex
|
||||
justify-content: space-between
|
||||
}
|
||||
}
|
||||
}
|
||||
.locations{
|
||||
padding: 0 28rpx
|
||||
height: 86rpx;
|
||||
position: relative
|
||||
margin-bottom: 36rpx
|
||||
.location-img{
|
||||
border-radius: 8rpx 8rpx 8rpx 8rpx;
|
||||
border: 2rpx solid #EFEFEF;
|
||||
}
|
||||
.location-info{
|
||||
position: absolute
|
||||
top: 0
|
||||
left: 0
|
||||
width: 100%
|
||||
height: 100%
|
||||
|
||||
.info{
|
||||
padding: 0 60rpx
|
||||
height: 100%
|
||||
display: flex
|
||||
align-items: center
|
||||
justify-content: space-between
|
||||
white-space: nowrap
|
||||
padding-top: rpx
|
||||
.info-title{
|
||||
font-weight: 600;
|
||||
font-size: 28rpx;
|
||||
color: #333333;
|
||||
}
|
||||
.info-text{
|
||||
font-weight: 400;
|
||||
font-size: 28rpx;
|
||||
color: #9B9B9B;
|
||||
position: relative;
|
||||
padding-right: 20rpx
|
||||
|
||||
}
|
||||
.info-text::before{
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 50%;
|
||||
content: '';
|
||||
width: 4rpx;
|
||||
height: 16rpx;
|
||||
border-radius: 2rpx
|
||||
background: #9B9B9B;
|
||||
transform: translate(0, -75%) rotate(-45deg)
|
||||
}
|
||||
|
||||
.info-text::after {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 50%;
|
||||
content: '';
|
||||
width: 4rpx;
|
||||
height: 16rpx;
|
||||
border-radius: 2rpx
|
||||
background: #9B9B9B;
|
||||
transform: translate(0, -25%) rotate(45deg)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
.conetent-info{
|
||||
padding: 0 28rpx
|
||||
overflow: hidden;
|
||||
max-height: 0rpx;
|
||||
transition: max-height 0.3s ease;
|
||||
.info-title{
|
||||
font-weight: 600;
|
||||
font-size: 28rpx;
|
||||
color: #000000;
|
||||
}
|
||||
.info-desirption{
|
||||
margin-top: 12rpx
|
||||
font-weight: 400;
|
||||
font-size: 28rpx;
|
||||
color: #495265;
|
||||
text-align: justified;
|
||||
}
|
||||
.title2{
|
||||
margin-top: 48rpx
|
||||
}
|
||||
}
|
||||
.company-times{
|
||||
padding-top: 40rpx
|
||||
.info-title{
|
||||
font-weight: 600;
|
||||
font-size: 28rpx;
|
||||
color: #000000;
|
||||
}
|
||||
}
|
||||
.expanded {
|
||||
max-height: 1000rpx; // 足够显示完整内容
|
||||
}
|
||||
.expand{
|
||||
display: flex
|
||||
flex-wrap: nowrap
|
||||
white-space: nowrap
|
||||
justify-content: center
|
||||
margin-bottom: 46rpx
|
||||
font-weight: 400;
|
||||
font-size: 28rpx;
|
||||
color: #256BFA;
|
||||
.expand-img{
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
}
|
||||
.expand-img-active{
|
||||
transform: rotate(180deg)
|
||||
}
|
||||
}
|
||||
}
|
||||
.Detailscroll-view{
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
background: #F4F4F4;
|
||||
.views{
|
||||
padding: 28rpx
|
||||
.Detail-title{
|
||||
font-weight: 600;
|
||||
font-size: 32rpx;
|
||||
color: #000000;
|
||||
position: relative;
|
||||
display: flex
|
||||
justify-content: space-between
|
||||
.title{
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
}
|
||||
.Detail-title::before{
|
||||
position: absolute
|
||||
content: '';
|
||||
left: -14rpx
|
||||
bottom: 0
|
||||
height: 16rpx;
|
||||
width: 108rpx;
|
||||
background: linear-gradient(to right, #CBDEFF, #FFFFFF);
|
||||
border-radius: 8rpx;
|
||||
z-index: 1;
|
||||
}
|
||||
.cards{
|
||||
padding: 32rpx;
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0,0,0,0.04);
|
||||
border-radius: 20rpx 20rpx 20rpx 20rpx;
|
||||
margin-top: 22rpx;
|
||||
.card-company{
|
||||
display: flex
|
||||
justify-content: space-between
|
||||
align-items: flex-start
|
||||
.company{
|
||||
font-weight: 500;
|
||||
font-size: 32rpx;
|
||||
color: #333333;
|
||||
}
|
||||
.salary{
|
||||
font-weight: 500;
|
||||
font-size: 28rpx;
|
||||
color: #4C6EFB;
|
||||
white-space: nowrap
|
||||
line-height: 48rpx
|
||||
}
|
||||
}
|
||||
.card-companyName{
|
||||
font-weight: 400;
|
||||
font-size: 28rpx;
|
||||
color: #6C7282;
|
||||
}
|
||||
.card-tags{
|
||||
display: flex
|
||||
flex-wrap: wrap
|
||||
.tag{
|
||||
width: fit-content;
|
||||
height: 30rpx;
|
||||
background: #F4F4F4;
|
||||
border-radius: 4rpx;
|
||||
padding: 6rpx 20rpx;
|
||||
line-height: 30rpx;
|
||||
font-weight: 400;
|
||||
font-size: 24rpx;
|
||||
color: #6C7282;
|
||||
text-align: center;
|
||||
margin-top: 14rpx;
|
||||
white-space: nowrap
|
||||
margin-right: 20rpx
|
||||
}
|
||||
}
|
||||
.card-bottom{
|
||||
margin-top: 32rpx
|
||||
display: flex
|
||||
justify-content: space-between
|
||||
font-size: 28rpx;
|
||||
color: #6C7282;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.card-times{
|
||||
display: flex;
|
||||
justify-content: space-between
|
||||
align-items: center
|
||||
padding: 24rpx 30rpx 10rpx 30rpx
|
||||
.time-left,
|
||||
.time-right{
|
||||
text-align: center
|
||||
.left-date{
|
||||
font-weight: 500;
|
||||
font-size: 48rpx;
|
||||
color: #333333;
|
||||
}
|
||||
.left-dateDay{
|
||||
font-weight: 400;
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
margin-top: 12rpx
|
||||
}
|
||||
}
|
||||
.line{
|
||||
width: 40rpx;
|
||||
height: 0rpx;
|
||||
border: 2rpx solid #D4D4D4;
|
||||
margin-top: 64rpx
|
||||
}
|
||||
.time-center{
|
||||
text-align: center;
|
||||
display: flex
|
||||
flex-direction: column
|
||||
justify-content: center
|
||||
align-items: center
|
||||
.center-date{
|
||||
font-weight: 400;
|
||||
font-size: 28rpx;
|
||||
color: #FF881A;
|
||||
padding-top: 10rpx
|
||||
}
|
||||
.center-dateDay{
|
||||
font-weight: 400;
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
margin-top: 6rpx
|
||||
line-height: 48rpx;
|
||||
width: 104rpx;
|
||||
height: 48rpx;
|
||||
background: #F9F9F9;
|
||||
border-radius: 8rpx 8rpx 8rpx 8rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
.footer{
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0rpx -4rpx 24rpx 0rpx rgba(11,44,112,0.12);
|
||||
border-radius: 0rpx 0rpx 0rpx 0rpx;
|
||||
padding: 40rpx 28rpx 20rpx 28rpx
|
||||
.btn-wq{
|
||||
height: 90rpx;
|
||||
background: #256BFA;
|
||||
border-radius: 12rpx 12rpx 12rpx 12rpx;
|
||||
font-weight: 500;
|
||||
font-size: 32rpx;
|
||||
color: #FFFFFF;
|
||||
text-align: center;
|
||||
line-height: 90rpx
|
||||
}
|
||||
.btn-desbel{
|
||||
background: #6697FB;
|
||||
box-shadow: 0rpx -4rpx 24rpx 0rpx rgba(11,44,112,0.12);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
1029
packageB/jobFair/detailCom.vue
Normal file
1029
packageB/jobFair/detailCom.vue
Normal file
File diff suppressed because it is too large
Load Diff
@@ -350,7 +350,8 @@
|
||||
"root": "packageB",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "jobFair/detail",
|
||||
// 我参与的招聘会详情
|
||||
"path" : "jobFair/detailCom",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : "招聘会详情",
|
||||
|
||||
@@ -4,73 +4,37 @@
|
||||
<!-- 顶部头部区域 -->
|
||||
<view class="container-header">
|
||||
<view class="header-top">
|
||||
<view
|
||||
class="header-btnLf button-click"
|
||||
@click="seemsg(1)"
|
||||
:class="{ active: state.current === 1 }"
|
||||
>
|
||||
<view class="header-btnLf button-click" @click="seemsg(1)" :class="{ active: state.current === 1 }">
|
||||
线上招聘会
|
||||
</view>
|
||||
<view
|
||||
class="header-btnLf button-click"
|
||||
@click="seemsg(2)"
|
||||
:class="{ active: state.current === 2 }"
|
||||
>
|
||||
<view class="header-btnLf button-click" @click="seemsg(2)" :class="{ active: state.current === 2 }">
|
||||
线下招聘会
|
||||
</view>
|
||||
<view
|
||||
class="header-btnLf button-click"
|
||||
@click="seemsg(3)"
|
||||
:class="{ active: state.current === 3 }"
|
||||
>
|
||||
<view class="header-btnLf button-click" @click="seemsg(3)" :class="{ active: state.current === 3 }">
|
||||
我参与的
|
||||
</view>
|
||||
<view
|
||||
class="header-btnLf button-click"
|
||||
@click="navTo('/packageB/login')"
|
||||
>
|
||||
<view class="header-btnLf button-click" @click="navTo('/packageB/login')">
|
||||
登录
|
||||
</view>
|
||||
</view>
|
||||
<view class="header-input btn-feel">
|
||||
<uni-icons
|
||||
class="iconsearch"
|
||||
color="#666666"
|
||||
type="search"
|
||||
size="18"
|
||||
@click="getFair('refresh')"
|
||||
></uni-icons>
|
||||
<input
|
||||
class="input"
|
||||
placeholder="招聘会"
|
||||
placeholder-class="inputplace"
|
||||
v-model="pageState.jobFairTitle"
|
||||
/>
|
||||
<uni-icons class="iconsearch" color="#666666" type="search" size="18"
|
||||
@click="getFair('refresh')"></uni-icons>
|
||||
<input class="input" placeholder="招聘会" placeholder-class="inputplace"
|
||||
v-model="pageState.jobFairTitle" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 主体内容区域 -->
|
||||
<view class="container-main">
|
||||
<scroll-view
|
||||
scroll-y
|
||||
class="main-scroll"
|
||||
@scrolltolower="handleScrollToLower"
|
||||
>
|
||||
<scroll-view scroll-y class="main-scroll" @scrolltolower="handleScrollToLower">
|
||||
<view class="cards" v-if="fairList.length">
|
||||
<view
|
||||
class="card press-button"
|
||||
v-for="(item, index) in fairList"
|
||||
:key="index"
|
||||
@click="
|
||||
navTo(
|
||||
'/packageA/pages/exhibitors/exhibitors?jobFairId=' +
|
||||
item.jobFairId
|
||||
)
|
||||
"
|
||||
>
|
||||
<view class="card press-button" v-for="(item, index) in fairList" :key="index"
|
||||
@click="goDetail(item.jobFairId)">
|
||||
<view class="card-title">
|
||||
{{ item.jobFairTitle }}
|
||||
<view class="center-date" :style="{ color: getTimeStatus(item.jobFairStartTime, item.jobFairEndTime).color }">
|
||||
<view class="center-date"
|
||||
:style="{ color: getTimeStatus(item.jobFairStartTime, item.jobFairEndTime).color,borderColor: getTimeStatus(item.jobFairStartTime, item.jobFairEndTime).color }">
|
||||
{{ getTimeStatus(item.jobFairStartTime, item.jobFairEndTime).statusText }}
|
||||
</view>
|
||||
</view>
|
||||
@@ -79,38 +43,31 @@
|
||||
</view>
|
||||
<view class="card-times">
|
||||
<view class="time-left">
|
||||
<view class="left-date">{{
|
||||
parseDateTime(item.jobFairStartTime).time
|
||||
}}</view>
|
||||
<view class="left-dateDay">{{
|
||||
parseDateTime(item.jobFairStartTime).date
|
||||
}}</view>
|
||||
<view class="left-date">
|
||||
{{parseDateTime(item.jobFairStartTime).time}}
|
||||
</view>
|
||||
<view class="left-dateDay">
|
||||
{{parseDateTime(item.jobFairStartTime).date}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="line"></view>
|
||||
<view class="time-center">
|
||||
<view class="center-dateDay">
|
||||
{{
|
||||
getHoursBetween(
|
||||
item.jobFairStartTime,
|
||||
item.jobFairEndTime
|
||||
)
|
||||
}}小时
|
||||
{{getHoursBetween(item.jobFairStartTime,item.jobFairEndTime)}}小时
|
||||
</view>
|
||||
</view>
|
||||
<view class="line"></view>
|
||||
<view class="time-right">
|
||||
<view class="left-date">{{
|
||||
parseDateTime(item.jobFairEndTime).time
|
||||
}}</view>
|
||||
<view class="left-dateDay">{{
|
||||
parseDateTime(item.jobFairEndTime).date
|
||||
}}</view>
|
||||
<view class="left-date">
|
||||
{{parseDateTime(item.jobFairEndTime).time}}
|
||||
</view>
|
||||
<view class="left-dateDay">
|
||||
{{parseDateTime(item.jobFairEndTime).date}}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="recommend-card-line"></view>
|
||||
<view class="card-footer"
|
||||
>内容简介:{{ item.jobFairIntroduction || "暂无" }}</view
|
||||
>
|
||||
<view class="card-footer">内容简介:{{ item.jobFairIntroduction || "暂无" }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<empty v-else pdTop="200"></empty>
|
||||
@@ -120,25 +77,43 @@
|
||||
<CustomTabBar :currentPage="1" />
|
||||
|
||||
<!-- 微信授权登录弹窗 -->
|
||||
<WxAuthLogin
|
||||
ref="wxAuthLoginRef"
|
||||
@success="handleLoginSuccess"
|
||||
></WxAuthLogin>
|
||||
<WxAuthLogin ref="wxAuthLoginRef" @success="handleLoginSuccess"></WxAuthLogin>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, inject, watch, ref, onMounted, onUnmounted } from "vue";
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app";
|
||||
import {
|
||||
reactive,
|
||||
inject,
|
||||
watch,
|
||||
ref,
|
||||
onMounted,
|
||||
onUnmounted
|
||||
} from "vue";
|
||||
import {
|
||||
onLoad,
|
||||
onShow
|
||||
} from "@dcloudio/uni-app";
|
||||
import useLocationStore from "@/stores/useLocationStore";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { tabbarManager } from "@/utils/tabbarManager";
|
||||
import {
|
||||
storeToRefs
|
||||
} from "pinia";
|
||||
import {
|
||||
tabbarManager
|
||||
} from "@/utils/tabbarManager";
|
||||
import WxAuthLogin from "@/components/WxAuthLogin/WxAuthLogin.vue";
|
||||
import config from "@/config.js";
|
||||
const { longitudeVal, latitudeVal } = storeToRefs(useLocationStore());
|
||||
const {
|
||||
longitudeVal,
|
||||
latitudeVal
|
||||
} = storeToRefs(useLocationStore());
|
||||
const wxAuthLoginRef = ref(null);
|
||||
const { $api, navTo, cloneDeep } = inject("globalFunction");
|
||||
const {
|
||||
$api,
|
||||
navTo,
|
||||
cloneDeep
|
||||
} = inject("globalFunction");
|
||||
const isLogin = ref(false);
|
||||
const weekList = ref([]);
|
||||
const fairList = ref([]);
|
||||
@@ -193,6 +168,14 @@ const handleLoginSuccess = () => {
|
||||
// 可以在这里添加登录成功后的处理逻辑
|
||||
};
|
||||
|
||||
function goDetail(jobFairId){
|
||||
if(state.current != 3){
|
||||
navTo('/packageA/pages/exhibitors/exhibitors?jobFairId=' + jobFairId)
|
||||
}else{
|
||||
navTo('/packageB/jobFair/detailCom?jobFairId=' + jobFairId)
|
||||
}
|
||||
}
|
||||
|
||||
function toSelectDate() {
|
||||
navTo("/packageA/pages/selectDate/selectDate", {
|
||||
query: {
|
||||
@@ -222,13 +205,10 @@ function changeSwiperMsgType(e) {
|
||||
|
||||
function seemsg(index) {
|
||||
state.current = index;
|
||||
console.log(index, "index");
|
||||
|
||||
if (index != 3) {
|
||||
getFair("refresh");
|
||||
} else {
|
||||
if (!isLogin.value) {
|
||||
// 未登录则先触发心跳与登录流程
|
||||
getHeart();
|
||||
return;
|
||||
}
|
||||
@@ -260,32 +240,30 @@ const handleScrollToLower = () => {
|
||||
function getHeart() {
|
||||
const raw = uni.getStorageSync("Padmin-Token");
|
||||
const token = typeof raw === "string" ? raw.trim() : "";
|
||||
const headers = token
|
||||
? { Authorization: raw.startsWith("Bearer ") ? raw : `Bearer ${token}` }
|
||||
: {};
|
||||
const headers = token ? {
|
||||
Authorization: raw.startsWith("Bearer ") ? raw : `Bearer ${token}`
|
||||
} : {};
|
||||
|
||||
$api
|
||||
.myRequest("/dashboard/auth/heart", {}, "POST", 10100, headers)
|
||||
.then((resData) => {
|
||||
$api.myRequest("/dashboard/auth/heart", {}, "POST", 10100, headers).then((resData) => {
|
||||
if (resData.code == 200) {
|
||||
isLogin.value = true;
|
||||
getUser();
|
||||
} else {
|
||||
isLogin.value = false;
|
||||
$api.msg('请先登录')
|
||||
getFair("refresh");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function getUser() {
|
||||
const raw = uni.getStorageSync("Padmin-Token");
|
||||
const token = typeof raw === "string" ? raw.trim() : "";
|
||||
const headers = token
|
||||
? { Authorization: raw.startsWith("Bearer ") ? raw : `Bearer ${token}` }
|
||||
: {};
|
||||
const headers = token ? {
|
||||
Authorization: raw.startsWith("Bearer ") ? raw : `Bearer ${token}`
|
||||
} : {};
|
||||
|
||||
return $api
|
||||
.myRequest("/system/user/login/user/info", {}, "GET", 10100, headers)
|
||||
.then((resData) => {
|
||||
return $api.myRequest("/system/user/login/user/info", {}, "GET", 10100, headers).then((resData) => {
|
||||
// 正确映射响应为用户信息(优先使用 data 字段)
|
||||
const data = resData?.data ?? resData;
|
||||
userInfo.value = data || {};
|
||||
@@ -293,6 +271,7 @@ function getUser() {
|
||||
return userInfo.value;
|
||||
});
|
||||
}
|
||||
|
||||
function getMyFair(type = "add") {
|
||||
if (type === "refresh") {
|
||||
pageState.pageNum = 1;
|
||||
@@ -307,15 +286,22 @@ function getMyFair(type = "add") {
|
||||
jobFairTitle: pageState.jobFairTitle,
|
||||
};
|
||||
if (isLogin.value) {
|
||||
console.log(userInfo, 'userInfo');
|
||||
if (userInfo.value.userType == "ent") {
|
||||
params.enterpriseId = userInfo.value.info.userId;
|
||||
$api.myRequest("/jobfair/public/jobfair/enterprise/my-sign-up-job-fair", params).then((resData) => {
|
||||
if (type === "add") {
|
||||
const reslist = resData.data.list;
|
||||
fairList.value = fairList.value.concat(reslist);
|
||||
} else {
|
||||
fairList.value = resData.data.list;
|
||||
}
|
||||
pageState.total = resData.data.total;
|
||||
pageState.maxPage = resData.data.pages;
|
||||
});
|
||||
} else {
|
||||
params.personId = userInfo.value.info.userId;
|
||||
}
|
||||
}
|
||||
$api
|
||||
.myRequest("/jobfair/public/jobfair/enterprise/my-sign-up-job-fair", params)
|
||||
.then((resData) => {
|
||||
$api.myRequest("/jobfair/public/jobfair/person/my-sign-up-job-fair", params).then((resData) => {
|
||||
if (type === "add") {
|
||||
const reslist = resData.data.list;
|
||||
fairList.value = fairList.value.concat(reslist);
|
||||
@@ -326,6 +312,13 @@ function getMyFair(type = "add") {
|
||||
pageState.maxPage = resData.data.pages;
|
||||
});
|
||||
}
|
||||
console.log(params, 'params');
|
||||
} else {
|
||||
$api.msg('请先登录');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function getFair(type = "add") {
|
||||
if (type === "refresh") {
|
||||
pageState.pageNum = 1;
|
||||
@@ -414,7 +407,11 @@ function getTimeStatus(startTimeStr, endTimeStr) {
|
||||
const endTime = toIOSDate(endTimeStr);
|
||||
|
||||
if (!startTime || !endTime) {
|
||||
return { status: 1, statusText: "时间异常", color: "#999999" };
|
||||
return {
|
||||
status: 1,
|
||||
statusText: "时间异常",
|
||||
color: "#999999"
|
||||
};
|
||||
}
|
||||
|
||||
// 判断状态:0 开始中,1 过期,2 未开始
|
||||
@@ -463,7 +460,10 @@ const selectDate = (item) => {
|
||||
getFair("refresh");
|
||||
};
|
||||
|
||||
function getNextDates({ startDate = "", count = 6 }) {
|
||||
function getNextDates({
|
||||
startDate = "",
|
||||
count = 6
|
||||
}) {
|
||||
const baseDate = startDate ? toIOSDate(startDate) || new Date() : new Date(); // 指定起点或今天
|
||||
const dates = [];
|
||||
const dayNames = ["日", "一", "二", "三", "四", "五", "六"];
|
||||
@@ -654,7 +654,11 @@ function getNextDates({ startDate = "", count = 6 }) {
|
||||
font-size: 34rpx;
|
||||
color: #005eb6;
|
||||
text-align: center;
|
||||
position relative
|
||||
position relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
width: 120rpx;
|
||||
@@ -665,12 +669,16 @@ function getNextDates({ startDate = "", count = 6 }) {
|
||||
bottom: -14rpx;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.center-date {
|
||||
font-weight: 400;
|
||||
font-size: 28rpx;
|
||||
color: #ff881a;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
font-size: 24rpx;
|
||||
// position: absolute;
|
||||
// right: 0;
|
||||
// top: 0;
|
||||
border: 1rpx solid;
|
||||
padding: 5rpx 10rpx;
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -715,7 +723,7 @@ function getNextDates({ startDate = "", count = 6 }) {
|
||||
width: 40rpx;
|
||||
height: 2rpx;
|
||||
background: #7BB6FF;
|
||||
margin-top: 64rpx;
|
||||
margin-top: 7rpx;
|
||||
}
|
||||
|
||||
.cards .card-times .time-center {
|
||||
|
||||
@@ -593,8 +593,6 @@ const { columnCount, columnSpace } = useColumnCount(() => {
|
||||
const getCompanyInfo = () => {
|
||||
try {
|
||||
const cachedUserInfo = uni.getStorageSync('userInfo') || {};
|
||||
console.log('缓存中的userInfo:', cachedUserInfo);
|
||||
|
||||
// 重置企业信息
|
||||
companyInfo.name = '';
|
||||
companyInfo.avatar = '';
|
||||
|
||||
Reference in New Issue
Block a user