招聘会

parent 14c8c24a
......@@ -7,6 +7,9 @@ export const getArticleDetailApi = id => instance.post(`/article/detail/${id}`);
//获取文章i详情
export const getArticleTypesApi = type => instance.post(`/article/category/list/${type}`);
//招聘会报名状态
export const registerStatus = articleId => instance.post(`/jobFair/register/status/${articleId}`);
// 参加招聘会
export const jobFairRegisterApi = params => instance.post(`/jobFair/register`, params);
......@@ -67,6 +67,7 @@ function navigateTo(url) {
width: 202rpx;
height: 114rpx;
margin-left: 24rpx;
border-radius: 8rpx;
}
.title {
margin-bottom: 16rpx;
......@@ -92,6 +93,7 @@ function navigateTo(url) {
.video-img {
height: 100%;
height: 294rpx;
border-radius: 8rpx;
z-index: 0;
}
.play-icon {
......
......@@ -10,7 +10,8 @@
"path": "pages/recommend/index",
"style": {
"navigationBarTitleText": "推荐",
"navigationStyle": "custom"
"navigationStyle": "custom",
"disableSwipeBack": true
}
},
{
......
......@@ -14,21 +14,50 @@
</div>
</div>
<div class="content" v-html="data.content"></div>
<wd-tabbar
v-if="data.type == 3"
custom-style="display: flex;justify-content: center !important;z-index:1;"
fixed
placeholder
safeAreaInsetBottom
>
<wd-button @tap="next" :disabled="data.bmStutas || !data.bm" round="false" class="foot-btn">{{
!data.bmStutas && data.bm ? "立即报名" : data.bmStutas ? "已报名" : "报名结束"
}}</wd-button>
</wd-tabbar>
</div>
</template>
<script setup>
import { getArticleDetailApi } from "@/api/article.js";
import { getArticleDetailApi, registerStatus } from "@/api/article.js";
import evn from "@/utils/config.js";
import { ref } from "vue";
import dayjs from "dayjs";
const data = ref({});
let articleId = ref(null);
onLoad(({ id }) => {
articleId.value = id;
const currentTime = Date.now();
getArticleDetailApi(id).then(res => {
console.log(res);
data.value = res.data;
// 选择 btnTxt 的值
if (currentTime >= res.data.registerStartTime && currentTime <= res.data.registerEndTime) {
data.value.bm = true; // 当前时间在开始时间和结束时间之间
} else {
data.value.bm = false;
}
});
registerStatus(id).then(Res => {
data.value.bmStutas = Res.data;
});
});
function next() {
xma.navigateTo({
url: `/pages/signUp/index?articleId=${articleId.value}`
});
}
</script>
<style lang="scss" scoped>
......@@ -67,5 +96,16 @@ onLoad(({ id }) => {
}
}
}
.foot-btn {
position: fixed;
display: flex;
align-items: center;
justify-content: center;
width: 622rpx;
height: 80rpx;
color: #ffffff;
background: #1f86ff;
border-radius: 12rpx;
}
}
</style>
......@@ -19,13 +19,23 @@ import { getArticleListApi, getArticleTypesApi } from "@/api/article.js";
import { reactive, ref } from "vue";
const contentHeight = ref("100rpx");
const active = ref("");
const typeList = ref([{ id: "", name: "全部" }]);
const typeList = ref([
{ id: "", name: "全部" },
{ id: "aaaa", name: "招聘会" }
]);
getArticleTypesApi(2).then(res => {
typeList.value.push(...res.data);
});
const changeType = type => {
active.value = type.id;
refresh().then(res => {
if (type.name == "招聘会") {
params.value.type = 3;
params.value.categoryId = "";
} else {
params.value.type = 2;
params.value.categoryId = type.id;
}
feedbackListFn();
});
};
......@@ -95,7 +105,6 @@ onPullDownRefresh(() => {
onReachBottom(() => {
feedbackListFn();
});
changeType({ id: "" });
</script>
<style lang="scss" scoped>
......
<template>
<div class="page">
<div class="title">添加岗位信息{{ formData.positionList.length + 1 }}</div>
<div class="title">添加岗位信息{{ pinias.formData.positionList.length + 1 }}</div>
<div class="form">
<div class="grid">
<formItem full title="岗位名称">
......@@ -79,8 +79,8 @@
<view class="wrapper flex-center">
<view class="block" @click.stop="">
<img src="@/static/image/signUp.png" alt="" />
<p>您已填写{{ formData.companyName }}</p>
<p>招聘岗位{{ formData.positionList.length }}</p>
<p>您已填写{{ pinias.formData.companyName }}</p>
<p>招聘岗位{{ pinias.formData.positionList.length }}</p>
<div class="btn">
<button class="b1" @click="show = false">继续提交</button>
<button class="b2" @click="submit">提交报名</button>
......@@ -100,8 +100,9 @@ import { ref } from "vue";
import { getEumData } from "@/utils/utils";
import formItem from "./formItem.vue";
import { useStore } from "./store";
const pinias = useStore();
import { jobFairRegisterApi } from "@/api/article";
const { formData } = useStore();
const show = ref(false);
const postItem = ref({
jobName: "",
......@@ -117,12 +118,12 @@ const postItem = ref({
});
/* 年龄 */
const age = ref([]);
const ageText = ref("");
const ageText = ref("不限");
const ageColumns = ref([]);
const changeAge = ({ selectedItem, resolve, finish }) => {
if (selectedItem.next) {
const temp = [];
for (let i = 1; i < 50; i++) {
for (let i = 16; i < 50; i++) {
temp.push({
value: i + selectedItem.value,
label: i + selectedItem.value + "岁",
......@@ -131,6 +132,9 @@ const changeAge = ({ selectedItem, resolve, finish }) => {
resolve(temp);
}
} else {
postItem.value.minAgeRequirement = 0;
postItem.value.maxAgeRequirement = 0;
ageText.value = "不限";
finish();
}
};
......@@ -143,18 +147,19 @@ const confirmAge = ({ value, selectedItems }) => {
} else {
postItem.value.minAgeRequirement = 0;
postItem.value.maxAgeRequirement = 0;
ageText.value = "不限";
}
ageText.value = selectedItems.map(v => v.label).join("~");
};
const initAgeColumns = () => {
const temp = [
{
value: "不限",
value: 0,
label: "不限",
next: false
}
];
for (let i = 1; i < 50; i++) {
for (let i = 16; i < 50; i++) {
temp.push({
value: i,
label: i + "岁",
......@@ -167,7 +172,7 @@ initAgeColumns();
/* 学历 */
const educationColumns = ref([]);
const educationText = ref("");
const educationText = ref("不限");
const initEducationColumns = async () => {
educationColumns.value = await getEumData("EnumEducationRequirement");
};
......@@ -203,6 +208,7 @@ const confirmSalary = ({ value, selectedItems }) => {
} else {
postItem.value.minSalary = 0;
postItem.value.maxSalary = 0;
salaryText.value = "面议";
}
salaryText.value = selectedItems.map(v => v.label).join("~");
};
......@@ -255,17 +261,25 @@ const addPost = () => {
});
return;
}
formData.positionList.push(postItem.value);
if (pinias.formData.positionList.length == 0) {
let arr = [];
arr.push(postItem.value);
pinias.setFormDataKey("positionList", arr);
} else {
pinias.setFormDataKey("positionList", [...pinias.formData.positionList, postItem.value]);
}
/* 数据清空 */
postItem.value = {
jobName: "",
recruitmentNumber: "",
educationRequirement: "",
socialInsurance: "",
accommodation: "",
skills: "",
ageText: "",
salaryText: ""
recruitmentNumber: 1,
minAgeRequirement: 0,
maxAgeRequirement: 0,
educationRequirement: "0",
minSalary: 0,
maxSalary: 0,
socialInsurance: "1",
accommodation: "0",
skills: ""
};
ageText.value = "";
salaryText.value = "";
......@@ -275,20 +289,96 @@ const addPost = () => {
};
/* 提交 */
const openMask = () => {
if (formData.positionList.length < 1) {
console.log("postItem.value", postItem.value);
if (
validateForm(postItem.value, [
"accommodation",
"educationRequirement",
"jobName",
"maxAgeRequirement",
"maxSalary",
"minAgeRequirement",
"minSalary",
"recruitmentNumber",
"skills",
"socialInsurance"
])
) {
if (pinias.formData.positionList.length == 0) {
let arr = [];
arr.push(postItem.value);
pinias.setFormDataKey("positionList", arr);
show.value = true;
} else {
pinias.setFormDataKey("positionList", [...pinias.formData.positionList, postItem.value]);
show.value = true;
}
}
};
const validateForm = (formData, requiredFields) => {
for (const field of requiredFields) {
const value = formData[field];
// 排除 0 和 "0" 的值,不作为空值校验
if (value === undefined || value === null || value === "") {
uni.showToast({
title: "请添加职位信息",
icon: "none"
title: `请填写完整`,
icon: "none",
duration: 2000
});
return;
return false;
}
show.value = true;
}
return true;
};
const submit = () => {
console.log(formData);
jobFairRegisterApi(formData).then(res => {
console.log(pinias.formData);
if (
validateForm(postItem.value, [
"accommodation",
"educationRequirement",
"jobName",
"maxAgeRequirement",
"maxSalary",
"minAgeRequirement",
"minSalary",
"recruitmentNumber",
"skills",
"socialInsurance"
])
) {
console.log("pinias", pinias);
pinias.resetForm();
return;
jobFairRegisterApi(pinias.formData).then(res => {
if (res.code == 200) {
postItem.value = {
jobName: "",
recruitmentNumber: 1,
minAgeRequirement: 0,
maxAgeRequirement: 0,
educationRequirement: "0",
minSalary: 0,
maxSalary: 0,
socialInsurance: "1",
accommodation: "0",
skills: ""
};
ageText.value = "";
salaryText.value = "";
age.value = [];
salary.value = [];
pinias.resetForm();
xma.reLaunch({
url: "/pages/recommend/index"
});
}
console.log(res);
});
}
};
</script>
......
<template>
<div class="page">
<NavBar :showIcon="true" :showTitle="true" title="岗位信息" backgroundBox="#FFFFFF"></NavBar>
<div class="title">填写企业信息</div>
<div class="form">
<formItem title="企业(单位)名称">
<input type="text" v-model="formData.companyName" placeholder="请填写单位名称" />
<input type="text" v-model="pinias.formData.companyName" placeholder="请填写单位名称" />
</formItem>
<formItem title="单位联系人">
<input type="text" v-model="formData.contactPerson" placeholder="请填写联系人" />
<input type="text" v-model="pinias.formData.contactPerson" placeholder="请填写联系人" />
</formItem>
<formItem title="联系电话">
<input type="text" v-model="formData.contactPhone" placeholder="请填联系电话" />
<input type="text" v-model="pinias.formData.contactPhone" placeholder="请填联系电话" />
</formItem>
<formItem title="企业(单位)简介">
<textarea type="text" v-model="formData.companyIntro" placeholder="请输入简介" />
<textarea type="text" v-model="pinias.formData.companyIntro" placeholder="请输入简介" />
</formItem>
</div>
<div class="footer">
......@@ -25,11 +26,12 @@
import { ref } from "vue";
import formItem from "./formItem.vue";
import { useStore } from "./store";
const { formData, setFormDataKey } = useStore();
setFormDataKey("articleId", "580953961662623744");
const pinias = useStore();
onLoad(options => {
pinias.setFormDataKey("articleId", options.articleId);
});
const next = () => {
const { companyName, contactPerson, contactPhone, companyIntro } = formData;
const { companyName, contactPerson, contactPhone, companyIntro } = pinias.formData;
if (companyName && contactPerson && contactPhone && companyIntro) {
uni.navigateTo({
url: "/pages/signUp/addPost"
......
import { defineStore } from "pinia";
import { ref } from "vue";
export const useStore = defineStore("signUpStore", {
state: () => ({
formData: {
export const useStore = defineStore("useStore",()=> {
let formData = ref({
articleId: "",
companyName: "",
companyIntro: "",
contactPerson: "",
contactPhone: "",
positionList: []
})
function setFormDataKey(key, data) {
console.log('keykeykey',key,data);
formData.value[key] = data;
}
}),
actions: {
setFormDataKey(key, data) {
this.formData[key] = data;
function resetForm() {
formData.value.articleId=""
formData.value.companyName=""
formData.value.companyIntro=""
formData.value.contactPerson=""
formData.value.contactPhone=""
formData.value.positionList=[]
}
return {
formData,
setFormDataKey,
resetForm
}
});
......@@ -18,22 +18,22 @@
<view class="content">
<view class="name" v-if="step === 1">
<view class="t1">企业信息</view>
<input type="text" v-model="formData.name" placeholder="请输入企业名称" />
<input type="text" v-model="pinias.formData.name" placeholder="请输入企业名称" />
</view>
<view class="name" v-if="step === 2">
<view class="t1">信用代码</view>
<input type="text" v-model="formData.creditCode" placeholder="请输入信用代码" />
<input type="text" v-model="pinias.formData.creditCode" placeholder="请输入信用代码" />
</view>
<view class="image-upload" v-if="step === 3">
<view class="t1">营业执照照片</view>
<view class="t2">注:执照信息清晰可见,照片内容真实有效,不做任何修改,大小不超过10M</view>
<image v-if="formData.licensePath" :src="evn.APP_IMAGE_BASE_API + formData.licensePath" mode="" />
<image v-if="pinias.formData.licensePath" :src="evn.APP_IMAGE_BASE_API + pinias.formData.licensePath" mode="" />
<image v-else @click="showPopout = true" src="@/static/image/businessLicense/businessLicenseUpload.png" mode="" />
</view>
</view>
<view class="btn-wrap flex-center">
<button v-if="step < 3" class="bottom-btn" @tap="nextStep">下一步</button>
<template v-if="step === 3 && !!formData.licensePath">
<template v-if="step === 3 && !!pinias.formData.licensePath">
<button class="reupload" @tap="showPopout = true">重新上传</button>
<button class="next" @tap="nextStep">下一步</button>
</template>
......@@ -66,22 +66,27 @@
import { ref } from "vue";
import evn from "@/utils/config";
import { uploadFiles } from "@/utils/fileUpload";
import { useDefineStore } from "./store";
const pinias = useDefineStore();
onLoad(() => {
console.log(uni);
});
const { formData, setFormDataKey } = useDefineStore();
const step = ref(1);
const name = ref("");
const showPopout = ref(false);
onShow(() => {
step.value = 1;
});
const nextStep = () => {
let flag = false;
switch (step.value) {
case 1:
if (!formData.name) flag = true;
if (!pinias.formData.name) flag = true;
break;
case 2:
if (!formData.creditCode) flag = true;
if (!pinias.formData.creditCode) flag = true;
break;
case 3:
wx.navigateTo({
......@@ -107,7 +112,7 @@ const chooseImage = sourceType => {
count: 1,
success: async ({ tempFiles }) => {
const res = await uploadFiles(tempFiles);
setFormDataKey("licensePath", res[0].key);
pinias.setFormDataKey("licensePath", res[0].key);
showPopout.value = false;
}
});
......
import { defineStore } from "pinia";
import { ref } from "vue";
export const useDefineStore = defineStore("businessLicense", {
state: () => ({
formData: {
export const useDefineStore = defineStore("useDefineStore", ()=>{
let formData=ref ({
name: "",
creditCode: "",
licensePath: "",
licenseValidityPeriod: ""
}
}),
actions: {
setFormDataKey(key, data) {
})
function setFormDataKey(key, data) {
this.formData[key] = data;
}
return {
formData,
setFormDataKey
}
});
<template>
<div class="page">
<NavBar backgroundBox="#FFFFFF" :showIcon="true" :showTitle="true" title="企业信息"></NavBar>
<view class="image-wrap">
<image v-if="formData.licensePath" :src="evn.APP_IMAGE_BASE_API + formData.licensePath" mode="" />
<view>注:接受拍摄复印件,黑白复印需要加盖公章,大小不超过10M</view>
......
......@@ -98,20 +98,21 @@ const navList = reactive([
removeToken();
},
text: "退出登录"
},
{
icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
url: "/pages/login/test",
fn: () => {
removeToken();
},
text: "退出登录(去测试登录)"
},
{
icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
url: "/pages/user/businessLicense/fillIn",
text: "企业认证"
}
// {
// icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
// url: "/pages/user/businessLicense/fillIn",
// text: "企业认证"
// },
// {
// icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
// url: "/pages/login/test",
// fn: () => {
// removeToken();
// },
// text: "退出登录(去测试登录)"
// }
//
]);
/* 个人信息 */
const userInfo = ref({});
......
import axios from "axios";
import { getToken } from "@/utils/token";
const baseURL = "https://lygsh-api.wjzpgz.com/";
// const baseURL = "http://192.168.11.179:8080/";
import { getToken,removeToken } from "@/utils/token";
// const baseURL = "https://lygsh-api.wjzpgz.com/";
const baseURL = "http://192.168.11.179:8080/";
// 创建一个 axios 实例
const instance = axios.create({
baseURL, // 设置基础 URL
......@@ -38,7 +38,30 @@ instance.interceptors.request.use(
instance.interceptors.response.use(
response => {
// 在这里可以对响应数据进行预处理
function handleError(message) {
removeToken();
xma.showToast({
title: message,
icon: "none",
duration: 1900,
});
setTimeout(() => {
xma.reLaunch({
url: "/pages/login/index",
});
}, 2000);
}
let { code } = response.data;
console.log('response.data', response.data);
if (code == 200) {
return response.data;
} else if (code == 9) {
// handleError("登录已过期");
} else if (code == 2) {
handleError("登录超时");
}
},
error => {
// 处理响应错误
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment