This commit is contained in:
francis_fh
2026-01-22 12:57:03 +08:00
6 changed files with 357 additions and 53 deletions

View File

@@ -323,46 +323,59 @@
const deliveringJobs = reactive({}); const deliveringJobs = reactive({});
// 岗位投递 // 岗位投递
function deliverResume(job) { function deliverResume(job) {
if(deliveringJobs[job.jobId]) return uni.showModal({
deliveringJobs[job.jobId] = true title: "提示",
const raw = uni.getStorageSync("Padmin-Token"); content: "请确认是否投递简历?",
const token = typeof raw === "string" ? raw.trim() : ""; showCancel: true,
const headers = token ? { confirmText: "确定",
Authorization: raw.startsWith("Bearer ") ? raw : `Bearer ${token}` cancelText: "取消",
} : {}; success: (res) => {
if(res.confirm){
$api.myRequest("/dashboard/auth/heart", {}, "POST", 10100, headers).then((resData1) => { if(deliveringJobs[job.jobId]) return
if (resData1.code == 200) { deliveringJobs[job.jobId] = true
$api.myRequest("/system/user/login/user/info", {}, "GET", 10100, headers).then((resData) => { const raw = uni.getStorageSync("Padmin-Token");
$api.myRequest("/jobfair/public/job-fair-person-job/insert", { const token = typeof raw === "string" ? raw.trim() : "";
jobFairId: job.jobFairId, // 招聘会id const headers = token ? {
personId: resData.info.userId, // 当前登录用户id Authorization: raw.startsWith("Bearer ") ? raw : `Bearer ${token}`
enterpriseId: job.companyId, // 企业id } : {};
jobId: job.jobId, // 岗位id
idCard:resData.info.personCardNo $api.myRequest("/dashboard/auth/heart", {}, "POST", 10100, headers).then((resData1) => {
}, "post", 9100, { if (resData1.code == 200) {
"Content-Type": "application/json" $api.myRequest("/system/user/login/user/info", {}, "GET", 10100, headers).then((resData) => {
}).then((data) => { $api.myRequest("/jobfair/public/job-fair-person-job/insert", {
if (data && data.code === 200) { jobFairId: job.jobFairId, // 招聘会id
$api.msg("简历投递成功"); personId: resData.info.userId, // 当前登录用户id
if (!job.jobFairPersonJob) { enterpriseId: job.companyId, // 企业id
job.jobFairPersonJob = {}; jobId: job.jobId, // 岗位id
} idCard:resData.info.personCardNo
job.jobFairPersonJob.status = "1"; }, "post", 9100, {
getList(false); "Content-Type": "application/json"
}).then((data) => {
if (data && data.code === 200) {
$api.msg("简历投递成功");
if (!job.jobFairPersonJob) {
job.jobFairPersonJob = {};
}
job.jobFairPersonJob.status = "1";
getList(false);
} else {
$api.msg((data && data.msg) || "简历投递失败");
}
deliveringJobs[job.jobId] = false
});
});
} else { } else {
$api.msg((data && data.msg) || "简历投递失败"); $api.msg('请先登录');
deliveringJobs[job.jobId] =false
} }
deliveringJobs[job.jobId] = false }).catch(() => {
deliveringJobs[job.jobId] =false;
}); });
}); }
} else {
$api.msg('请先登录');
deliveringJobs[job.jobId] =false
} }
}).catch(() => { })
deliveringJobs[job.jobId] =false;
});
} }
// 提交面试邀请 // 提交面试邀请

View File

@@ -109,7 +109,7 @@
<div>题号</div> <div>题号</div>
<div style="font-size: 40rpx;" @click="clones()">×</div> <div style="font-size: 40rpx;" @click="clones()">×</div>
</div> </div>
<div class="questionNums"> <div class="questionNums" style = "height:77vh;overflow: auto;">
<div class="questions" :class="item.whether=='正确'?'questionCorrect':item.whether=='错误'?'questionError':questionIndex==(index+1)?'questionsActive':''" @click="switchs(index)" v-for="(item,index) in problemList" :key="index">{{index+1}}</div> <div class="questions" :class="item.whether=='正确'?'questionCorrect':item.whether=='错误'?'questionError':questionIndex==(index+1)?'questionsActive':''" @click="switchs(index)" v-for="(item,index) in problemList" :key="index">{{index+1}}</div>
</div> </div>
</div> </div>

View File

@@ -126,10 +126,11 @@ function getDataList(type = 'add') {
pageSize:pageSize.value, pageSize:pageSize.value,
pageNum:pageNum.value pageNum:pageNum.value
} }
$api.myRequest('/train/public/trainVideo/trainVideoList', params).then((resData) => { $api.myRequest('/train/public/trainQuestion/getQuestionTypes', params).then((resData) => {
dataList.value=dataList.value.concat(resData.rows) dataList.value=dataList.value.concat(resData.rows)
totalNum.value=resData.total totalNum.value=resData.total
}); });
} }
} }

View File

@@ -1,10 +1,10 @@
let baseUrl = "" // let baseUrl = ""
// #ifdef MP-WEIXIN // // #ifdef MP-WEIXIN
// 编译项目因为使用插件lime-echartechart文件过大需要非压缩代码方式编译不然会很慢发布的时候才压缩代码方式编译 // // 编译项目因为使用插件lime-echartechart文件过大需要非压缩代码方式编译不然会很慢发布的时候才压缩代码方式编译
baseUrl = 'https://www.xjksly.cn/career' // 生产环境 // baseUrl = 'https://www.xjksly.cn/career' // 生产环境
// #endif // // #endif
export { // export {
baseUrl // baseUrl
} // }

View File

@@ -1,5 +1,5 @@
import { baseUrl} from './config.js' // const baseUrl = "https://localhost:7026/career";
const baseUrl = "https://www.xjksly.cn/career";
const request = {} const request = {}
const headers = {} const headers = {}

View File

@@ -22,9 +22,65 @@
@click="getFair('refresh')"></uni-icons> @click="getFair('refresh')"></uni-icons>
<input class="input" placeholder="招聘会" placeholder-class="inputplace" <input class="input" placeholder="招聘会" placeholder-class="inputplace"
v-model="pageState.jobFairTitle" /> v-model="pageState.jobFairTitle" />
<view class="btn-feel" v-show="state.current != 3" @click="openFilter">筛选</view>
</view> </view>
</view> </view>
<uni-popup
ref="selectFilterModel"
type="bottom"
borderRadius="10px 10px 0 0"
background-color="#FFFFFF"
class="popup-fix"
>
<view class="popup-content">
<view class="popup-list">
<view class="content-wrapper">
<!-- 左侧筛选类别 -->
<!-- <scroll-view class="filter-nav" scroll-y>
<view
v-for="(item, index) in filterOptions"
:key="index"
class="nav-item button-click"
:class="{ active: activeTab === item.key }"
@click="scrollTo(item.key)"
>
{{ item.label }}
</view>
</scroll-view> -->
<!-- 右侧筛选内容 -->
<scroll-view class="filter-content" :scroll-into-view="activeTab" scroll-y>
<view v-for="(item, index) in filterOptions" :key="index">
<view class="content-item">
<view class="item-title" :id="item.key">{{ item.label }}</view>
<radio-group class="check-content" @change="handleSelect">
<label
v-for="option in item.options"
:key="option.value"
class="checkbox-item button-click"
:class="{
checkedstyle: selectedValues === String(option.value),
}"
>
<radio
style="display: none"
:value="String(option.value)"
:checked="selectedValues === String(option.value)"
/>
<text class="option-label">{{ option.label }}</text>
</label>
</radio-group>
</view>
</view>
</scroll-view>
</view>
</view>
<view class="popup-bottom">
<view class="btn-cancel btn-feel" @click="cleanup">重置</view>
<view class="btn-confirm btn-feel" @click="confirm">确认</view>
</view>
</view>
</uni-popup>
<!-- 主体内容区域 --> <!-- 主体内容区域 -->
<view class="container-main"> <view class="container-main">
<scroll-view scroll-y class="main-scroll" :class="{fullHeightScroll:!showTabar}" @scrolltolower="handleScrollToLower"> <scroll-view scroll-y class="main-scroll" :class="{fullHeightScroll:!showTabar}" @scrolltolower="handleScrollToLower">
@@ -151,10 +207,57 @@
onShow(() => { onShow(() => {
// 更新自定义tabbar选中状态 // 更新自定义tabbar选中状态
tabbarManager.updateSelected(1); tabbarManager.updateSelected(1);
getoptions();
});// });//
//筛选
const filterOptions = ref([]);
const activeTab = ref('');
const selectFilterModel = ref(null);
const selectedValues = ref(null);
function openFilter() {
selectFilterModel.value?.open();
}
const scrollTo = (key) => {
activeTab.value = key;
};
const handleSelect = (e) => {
selectedValues.value = e.detail.value
};
function cleanup(){
selectedValues.value = null
confirm()
}
function confirm(){
getFair("refresh");
selectFilterModel.value?.close();
}
function getoptions() {
let headers = {
'Content-Type': 'application/x-www-form-urlencoded',
}
let params = {
dictType:'administrative_division',
dictParentValue:'653100000000',
childFlag:'1',
}
filterOptions.value = [{
label: '所在区域',
key: 'area',
options: []
}];
$api.myRequest('/system/public/dict/data/getByParentValue',params,'POST',9100,headers).then(res=>{
if (res.code == 200) {
filterOptions.value[0].options = res.data.map(item=>{
return {
label: item.dictLabel,
value: item.dictValue,
}
})
}
})
activeTab.value = 'area';
}
async function thirdLogin(needToast){ async function thirdLogin(needToast){
let form={} let form={}
if (uni.getStorageSync('userInfo') && (uni.getStorageSync('userInfo').isCompanyUser=='1' || uni.getStorageSync('userInfo').isCompanyUser=='2')) { if (uni.getStorageSync('userInfo') && (uni.getStorageSync('userInfo').isCompanyUser=='1' || uni.getStorageSync('userInfo').isCompanyUser=='2')) {
@@ -339,11 +442,27 @@
// 正确映射响应为用户信息(优先使用 data 字段) // 正确映射响应为用户信息(优先使用 data 字段)
const data = resData?.data ?? resData; const data = resData?.data ?? resData;
userInfo.value = data || {}; userInfo.value = data || {};
if(data?.info?.entCreditCode && data?.info?.userId){
updateEnterpriseId({
unifiedSocialCreditCode: data?.info?.entCreditCode,
userId: data?.info?.userId,
})
}
getFair("refresh"); getFair("refresh");
return userInfo.value; return userInfo.value;
}); });
} }
function updateEnterpriseId(params){
const headers = {
'Content-Type':'application/json'
}
return $api.myRequest("/jobfair/public/job-fair-sign-up-enterprise/update-enterprise-id", params, "POST", 9100, headers).then((resData) => {
if(resData.code == 200 && resData.data !=0){
state.current = 3
getMyFair("refresh");
}
});
}
function getMyFair(type = "add") { function getMyFair(type = "add") {
if (type === "refresh") { if (type === "refresh") {
pageState.pageNum = 1; pageState.pageNum = 1;
@@ -404,6 +523,7 @@
pageSize: pageState.pageSize, pageSize: pageState.pageSize,
jobFairTitle: pageState.jobFairTitle, jobFairTitle: pageState.jobFairTitle,
jobFairType: state.current, jobFairType: state.current,
dictValue: selectedValues.value,
}; };
if (isLogin.value) { if (isLogin.value) {
if (userInfo.value.userType == "ent") { if (userInfo.value.userType == "ent") {
@@ -561,7 +681,168 @@
return dates; return dates;
} }
</script> </script>
<style lang="scss" scoped>
.popup-fix {
z-index: 9999 !important;
}
.popup-content {
color: #000000;
height: 70vh;
padding-bottom: 20rpx;
}
.popup-bottom {
padding: 40rpx 28rpx 20rpx 28rpx;
display: flex;
justify-content: space-between;
.btn-cancel {
font-weight: 400;
font-size: 32rpx;
color: #666d7f;
line-height: 90rpx;
width: 33%;
min-width: 222rpx;
height: 90rpx;
background: #f5f5f5;
border-radius: 12rpx 12rpx 12rpx 12rpx;
text-align: center;
}
.btn-confirm {
font-weight: 400;
font-size: 32rpx;
color: #ffffff;
text-align: center;
width: 67%;
height: 90rpx;
margin-left: 28rpx;
line-height: 90rpx;
background: #256bfa;
min-width: 444rpx;
border-radius: 12rpx 12rpx 12rpx 12rpx;
}
}
.popup-list {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
justify-content: space-evenly;
height: calc(77vh - 100rpx - 150rpx);
overflow: hidden;
.picker-view {
width: 100%;
height: 500rpx;
margin-top: 20rpx;
.uni-picker-view-mask {
background: rgba(0, 0, 0, 0);
}
.item {
line-height: 84rpx;
height: 84rpx;
text-align: center;
font-weight: 400;
font-size: 32rpx;
color: #cccccc;
}
.item-active {
color: #333333;
}
.uni-picker-view-indicator:after {
border-color: #e3e3e3;
}
.uni-picker-view-indicator:before {
border-color: #e3e3e3;
}
}
// .list {
// .row {
// font-weight: 400;
// font-size: 32rpx;
// color: #333333;
// line-height: 84rpx;
// text-align: center;
// }
// }
}
.content-wrapper {
flex: 1;
display: flex;
overflow: hidden;
height: 100%;
}
.filter-nav {
width: 200rpx;
background-color: #ffffff;
.nav-item {
height: 100rpx;
line-height: 100rpx;
text-align: center;
font-weight: 400;
font-size: 28rpx;
color: #666d7f;
&.active {
font-weight: 500;
font-size: 28rpx;
color: #256bfa;
}
}
}
.filter-content {
flex: 1;
padding: 20rpx;
background-color: #f6f6f6;
.content-item {
margin-top: 30rpx;
.item-title {
font-weight: 400;
font-size: 28rpx;
color: #333333;
margin-bottom: 15rpx;
}
}
.content-item:first-child {
margin-top: 0rpx;
}
.check-content {
display: grid;
gap: 16rpx;
grid-template-columns: repeat(auto-fill, minmax(300rpx, 1fr));
place-items: stretch;
.checkbox-item {
display: flex;
align-items: center;
text-align: center;
background-color: #d9d9d9;
min-width: 0;
padding: 0 10rpx;
height: 80rpx;
background: #e8eaee;
border-radius: 12rpx 12rpx 12rpx 12rpx;
.option-label {
font-size: 28rpx;
width: 100%;
white-space: nowrap;
overflow: hidden;
}
}
.checkedstyle {
height: 76rpx;
background: rgba(37, 107, 250, 0.06);
border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 2rpx solid #256bfa;
color: #256bfa;
}
}
}
</style>
<style scoped lang="stylus"> <style scoped lang="stylus">
.app-custom-root { .app-custom-root {
position: fixed; position: fixed;
@@ -623,6 +904,8 @@
padding: 0 24rpx; padding: 0 24rpx;
width: calc(100% - 48rpx); width: calc(100% - 48rpx);
position: relative; position: relative;
display: flex;
align-items: center;
} }
.app-container .container-header .header-input .iconsearch { .app-container .container-header .header-input .iconsearch {
@@ -638,6 +921,7 @@
background: #ffffff; background: #ffffff;
border-radius: 75rpx; border-radius: 75rpx;
font-size: 28rpx; font-size: 28rpx;
flex:1
} }
.app-container .container-header .header-input .inputplace { .app-container .container-header .header-input .inputplace {
@@ -645,7 +929,13 @@
font-size: 28rpx; font-size: 28rpx;
color: #b5b5b5; color: #b5b5b5;
} }
.app-container .container-header .header-input .btn-feel {
font-weight: 400;
font-size: 28rpx;
text-align: center;
color: #484444;
width: 80rpx;
}
.app-container .container-header .header-date { .app-container .container-header .header-date {
padding: 28rpx; padding: 28rpx;
display: flex; display: flex;