Merge branch 'main'

This commit is contained in:
francis-fh
2026-07-23 21:57:56 +08:00
3 changed files with 91 additions and 80 deletions

View File

@@ -26,6 +26,24 @@
<view class="filter-right"> <view class="filter-right">
<!-- 内容区域 --> <!-- 内容区域 -->
<view class="filter-content"> <view class="filter-content">
<!-- 薪资 -->
<view v-if="activeTab === 'salary'" class="content-section">
<radio-group @change="(e) => handleSelect('salary', e)">
<label
v-for="option in salaryOptions"
:key="option.value"
class="radio-item"
:class="{ checked: selectedValues['salary'] === String(option.value) }"
>
<radio
:value="String(option.value)"
:checked="selectedValues['salary'] === String(option.value)"
/>
<text class="option-label">{{ option.label }}</text>
</label>
</radio-group>
</view>
<!-- 学历要求 --> <!-- 学历要求 -->
<view v-if="activeTab === 'education'" class="content-section"> <view v-if="activeTab === 'education'" class="content-section">
<radio-group @change="(e) => handleSelect('education', e)"> <radio-group @change="(e) => handleSelect('education', e)">
@@ -62,24 +80,6 @@
</radio-group> </radio-group>
</view> </view>
<!-- 薪资 -->
<view v-if="activeTab === 'salary'" class="content-section">
<radio-group @change="(e) => handleSelect('salary', e)">
<label
v-for="option in salaryOptions"
:key="option.value"
class="radio-item"
:class="{ checked: selectedValues['salary'] === String(option.value) }"
>
<radio
:value="String(option.value)"
:checked="selectedValues['salary'] === String(option.value)"
/>
<text class="option-label">{{ option.label }}</text>
</label>
</radio-group>
</view>
<!-- 公司规模 --> <!-- 公司规模 -->
<view v-if="activeTab === 'scale'" class="content-section"> <view v-if="activeTab === 'scale'" class="content-section">
<radio-group @change="(e) => handleSelect('scale', e)"> <radio-group @change="(e) => handleSelect('scale', e)">
@@ -169,16 +169,16 @@ const getJobTypeData = () => {
// 标签页数据 // 标签页数据
const tabs = [ const tabs = [
{ key: 'salary', label: '薪资' },
{ key: 'education', label: '学历要求' }, { key: 'education', label: '学历要求' },
{ key: 'experience', label: '工作经验' }, { key: 'experience', label: '工作经验' },
{ key: 'salary', label: '薪资' },
{ key: 'scale', label: '公司规模' }, { key: 'scale', label: '公司规模' },
{ key: 'jobType', label: '岗位类型' }, { key: 'jobType', label: '岗位类型' },
{ key: 'area', label: '地区' } { key: 'area', label: '地区' }
]; ];
// 当前激活的标签 // 当前激活的标签
const activeTab = ref('education'); const activeTab = ref('salary');
// 存储已选中的值 // 存储已选中的值
const selectedValues = reactive({ const selectedValues = reactive({

View File

@@ -847,6 +847,28 @@ onUnmounted(() => {
uni.$off('citySelected'); uni.$off('citySelected');
}); });
const isFourLevelLinkagePurview = ref(false);
const getIsFourLevelLinkagePurview = () => {
let userInfo = uni.getStorageSync('userInfo');
if (userInfo) {
$api.myRequest(
'/auth/login2/ks',
{ userid: userInfo.dwUserid, idcardno: userInfo.idCard },
'POST',
9100,
{}
).then((res) => {
if (res.code == 200) {
uni.setStorageSync('fourLevelLinkage-token', res.data.access_token);
let roleIdList = ['103', '106', '107'];
if (res.data.roleIdList.some((item) => roleIdList.includes(item))) {
isFourLevelLinkagePurview.value = true;
}
}
});
}
};
onShow(() => { onShow(() => {
// 页面显示时获取最新的企业信息 // 页面显示时获取最新的企业信息
getCompanyInfo(); getCompanyInfo();
@@ -1458,27 +1480,6 @@ const toggleJobStatus = (job) => {
$api.msg(isCurrentlyUp ? '下架失败,请重试' : '上架失败,请重试'); $api.msg(isCurrentlyUp ? '下架失败,请重试' : '上架失败,请重试');
}); });
}; };
const isFourLevelLinkagePurview = ref(false);
const getIsFourLevelLinkagePurview = () => {
let userInfo = uni.getStorageSync('userInfo');
if (userInfo) {
$api.myRequest(
'/auth/login2/ks',
{ userid: userInfo.dwUserid, idcardno: userInfo.idCard },
'POST',
9100,
{}
).then((res) => {
if (res.code == 200) {
uni.setStorageSync('fourLevelLinkage-token', res.data.access_token);
let roleIdList = ['103', '106', '107'];
if (res.data.roleIdList.some((item) => roleIdList.includes(item))) {
isFourLevelLinkagePurview.value = true;
}
}
});
}
};
function dataToImg(data) { function dataToImg(data) {
const result = data.map((item) => ({ const result = data.map((item) => ({
...item, ...item,

View File

@@ -11,6 +11,8 @@ import {
// 静态树 O(1) 超快查询!!!!! // 静态树 O(1) 超快查询!!!!!
let IndustryMap = null let IndustryMap = null
// 复用同一批字典请求,避免 App 启动和页面组件同时初始化时产生竞态。
let dictDataPromise = null
// 构建索引 // 构建索引
function buildIndex(tree) { function buildIndex(tree) {
const map = new Map(); const map = new Map();
@@ -50,9 +52,13 @@ const useDictStore = defineStore("dict", () => {
return data return data
}) })
} }
if (complete.value) return if (complete.value) return Promise.resolve()
if (dictLoading.value) return // App.vue 会在启动时加载字典,页面组件也可能同时加载。
// 不能在请求进行中直接 return否则调用方会把当时的空 state 复制下来。
if (dictDataPromise) return dictDataPromise
dictLoading.value = true dictLoading.value = true
dictDataPromise = (async () => {
try { try {
const [education, experience, area, scale, sex, affiliation, nature, noticeType] = const [education, experience, area, scale, sex, affiliation, nature, noticeType] =
await Promise.all([ await Promise.all([
@@ -89,7 +95,11 @@ const useDictStore = defineStore("dict", () => {
state.noticeType = []; state.noticeType = [];
} finally { } finally {
dictLoading.value = false dictLoading.value = false
dictDataPromise = null
} }
})()
return dictDataPromise
}; };
async function getIndustryDict() { async function getIndustryDict() {