Files
ks-app-employment-service/stores/useUserStore.js
FengHui 3e408d5740 111
2026-04-14 11:39:36 +08:00

187 lines
5.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {
defineStore
} from 'pinia';
import {
ref
} from 'vue'
import {
createRequest
} from '@/utils/request';
import similarityJobs from '@/utils/similarity_Job.js';
import {
UUID
} from "@/lib/uuid-min.js";
import {
useReadMsg
} from '@/stores/useReadMsg';
// 简历完成度计算
function getResumeCompletionPercentage(resume) {
const requiredFields = [
'name',
'age',
'sex',
'birthDate',
'education',
'politicalAffiliation',
'phone',
'salaryMin',
'salaryMax',
'area',
'status',
'jobTitleId',
'jobTitle',
];
const totalFields = requiredFields.length;
let filledFields = requiredFields.filter((field) => {
const value = resume[field];
return value !== null && value !== '' && !(Array.isArray(value) && value.length === 0);
}).length;
return ((filledFields / totalFields) * 100).toFixed(0) + '%';
}
const useUserStore = defineStore("user", () => {
// 定义状态
const hasLogin = ref(false)
// const openId = ref('')
const userInfo = ref({});
const role = ref({});
const token = ref('')
const resume = ref({})
const Completion = ref('0%')
const seesionId = ref(uni.getStorageSync('seesionId') || '')
const login = (value) => {
hasLogin.value = true;
userInfo.value = value;
openId.value = value.wxOpenId;
token.value = value.token;
uni.setStorage({
key: 'token',
data: value.token
});
}
const logOut = (showLoginModal = true) => {
hasLogin.value = false;
token.value = ''
resume.value = {}
userInfo.value = {}
role.value = {}
uni.removeStorageSync('userInfo')
uni.removeStorageSync('token')
uni.removeStorageSync('Padmin-Token')
// 如果需要显示登录弹窗,则通过事件通知页面显示微信登录弹窗
// if (showLoginModal) {
// // 通过 uni.$emit 发送全局事件,通知页面显示登录弹窗
// uni.$emit('showLoginModal');
// }
//#ifdef H5
// 跳转到首页
window.location.href = 'https://www.xjksly.cn/mechine-single-vue/';
//#endif
uni.reLaunch({
url: '/pages/index/index'
});
}
const getUserInfo = () => {
return new Promise((reslove, reject) => {
createRequest('/getInfo', {}, 'get').then((userInfo) => {
setUserInfo(userInfo);
reslove(userInfo)
});
})
}
const getUserResume = () => {
return new Promise((reslove, reject) => {
createRequest('/app/user/resume', {}, 'get').then((resume) => {
Completion.value = getResumeCompletionPercentage(resume.data)
similarityJobs.setUserInfo(resume.data)
setUserInfo(resume);
reslove(resume)
}).catch((error) => {
// 对于企业用户,简历接口可能失败,但这不应该阻止登录流程
// 记录错误但不reject让登录流程继续
console.warn('获取简历信息失败,可能是企业用户或无简历信息:', error);
// 返回一个空的简历对象,让登录流程继续
reslove({ data: {} });
});
})
}
const loginSetToken = async (value) => {
token.value = value
uni.setStorageSync('token', value);
// 获取消息列表
// useReadMsg().fetchMessages()
// 获取用户信息
return getUserResume()
}
const setUserInfo = (values) => {
userInfo.value = values.data;
resume.value = values.data; // 将用户信息同时存储到resume中
// role.value = values.role;
hasLogin.value = true;
// 模拟添加用户类型字段,实际项目中应该从接口获取
// if (!userInfo.value.userType) {
// userInfo.value.userType = 1; // 默认设置为求职者用户
// }
// 持久化存储用户信息到本地缓存
uni.setStorageSync('userInfo', values.data);
}
const tokenlogin = (token) => {
createRequest('/app/login', {
token
}).then((resData) => {
onsole.log(resData)
})
}
const initSeesionId = () => {
const seesionIdVal = UUID.generate()
uni.setStorageSync('seesionId', seesionIdVal);
seesionId.value = seesionIdVal
}
// 从本地缓存恢复用户信息
const restoreUserInfo = () => {
const cachedUserInfo = uni.getStorageSync('userInfo');
const cachedToken = uni.getStorageSync('token');
if (cachedUserInfo && cachedToken) {
userInfo.value = cachedUserInfo;
resume.value = cachedUserInfo;
token.value = cachedToken;
hasLogin.value = true;
Completion.value = getResumeCompletionPercentage(cachedUserInfo);
return true;
}
return false;
}
// 导入
return {
hasLogin,
userInfo,
token,
resume,
login,
logOut,
loginSetToken,
getUserResume,
initSeesionId,
seesionId,
Completion,
restoreUserInfo
}
})
export default useUserStore;