189 lines
5.5 KiB
JavaScript
189 lines
5.5 KiB
JavaScript
import {
|
|
defineStore
|
|
} from 'pinia';
|
|
import {
|
|
reactive,
|
|
ref,
|
|
} from 'vue'
|
|
import {
|
|
createRequest
|
|
} from "../utils/request";
|
|
|
|
// 静态树 O(1) 超快查询!!!!!
|
|
let IndustryMap = null
|
|
// 构建索引
|
|
function buildIndex(tree) {
|
|
const map = new Map();
|
|
|
|
function traverse(nodes) {
|
|
for (const node of nodes) {
|
|
map.set(node.id, node);
|
|
if (node.children && node.children.length) {
|
|
traverse(node.children);
|
|
}
|
|
}
|
|
}
|
|
traverse(tree);
|
|
return map;
|
|
}
|
|
const useDictStore = defineStore("dict", () => {
|
|
// 定义状态
|
|
const complete = ref(false)
|
|
const state = reactive({
|
|
education: [],
|
|
experience: [],
|
|
area: [],
|
|
scale: [],
|
|
isPublish: [],
|
|
sex: [],
|
|
affiliation: [],
|
|
industry: [],
|
|
nature: [],
|
|
noticeType: []
|
|
})
|
|
// political_affiliation
|
|
const getDictData = async (dictType, dictName) => {
|
|
try {
|
|
if (dictType && dictName) {
|
|
return getDictSelectOption(dictType).then((data) => {
|
|
state[dictName] = data
|
|
return data
|
|
})
|
|
}
|
|
const [education, experience, area, scale, sex, affiliation, nature, noticeType] =
|
|
await Promise.all([
|
|
getDictSelectOption('education'),
|
|
getDictSelectOption('experience'),
|
|
getDictSelectOption('area', true),
|
|
getDictSelectOption('scale'),
|
|
getDictSelectOption('app_sex'),
|
|
getDictSelectOption('political_affiliation'),
|
|
getDictSelectOption('company_nature'),
|
|
getDictSelectOption('sys_notice_type'),
|
|
]);
|
|
|
|
state.education = education;
|
|
state.experience = experience;
|
|
state.area = area;
|
|
state.scale = scale;
|
|
state.sex = sex;
|
|
state.affiliation = affiliation;
|
|
state.nature = nature
|
|
state.noticeType = noticeType
|
|
complete.value = true
|
|
getIndustryDict() // 获取行业
|
|
} catch (error) {
|
|
console.error('Error fetching dictionary data:', error);
|
|
}
|
|
};
|
|
|
|
async function getIndustryDict() {
|
|
if (state.industry.length) return
|
|
const resp = await createRequest(`/app/common/industry/treeselect`);
|
|
if (resp.code === 200 && resp.data) {
|
|
state.industry = resp.data
|
|
IndustryMap = buildIndex(resp.data);
|
|
}
|
|
return [];
|
|
}
|
|
|
|
function industryLabel(dictType, value) {
|
|
switch (dictType) {
|
|
case 'industry':
|
|
if (!IndustryMap) return
|
|
const data = IndustryMap.get(Number(value))?.label || ''
|
|
return data
|
|
}
|
|
return null
|
|
}
|
|
|
|
function dictLabel(dictType, value) {
|
|
if (state[dictType]) {
|
|
for (let i = 0; i < state[dictType].length; i++) {
|
|
let element = state[dictType][i];
|
|
if (element.value === value) {
|
|
return element.label
|
|
}
|
|
}
|
|
}
|
|
return ''
|
|
}
|
|
|
|
function oneDictData(dictType, value) {
|
|
if (!value) {
|
|
return state[dictType]
|
|
}
|
|
if (state[dictType]) {
|
|
for (let i = 0; i < state[dictType].length; i++) {
|
|
let element = state[dictType][i];
|
|
if (element.value === value) {
|
|
return element
|
|
}
|
|
}
|
|
}
|
|
return null
|
|
}
|
|
|
|
function getTransformChildren(dictType, title = '', key = '') {
|
|
if (dictType) {
|
|
return {
|
|
label: title,
|
|
key: key || dictType,
|
|
options: state[dictType],
|
|
}
|
|
}
|
|
return null
|
|
}
|
|
|
|
|
|
async function getDictSelectOption(dictType, isDigital) {
|
|
const resp = await createRequest(`/app/common/dict/${dictType}`);
|
|
if (resp.code === 200 && resp.data) {
|
|
const options = resp.data.map((item) => {
|
|
return {
|
|
text: item.dictLabel,
|
|
label: item.dictLabel,
|
|
value: isDigital ? Number(item.dictValue) : item.dictValue,
|
|
key: item.dictCode,
|
|
listClass: item.listClass,
|
|
status: item.listClass,
|
|
};
|
|
});
|
|
return options;
|
|
}
|
|
return [];
|
|
}
|
|
|
|
async function getDictValueEnum(dictType, isDigital) {
|
|
const resp = await createRequest(`/app/common/dict/${dictType}`);
|
|
if (resp.code === 200 && resp.data) {
|
|
const opts = {};
|
|
resp.data.forEach((item) => {
|
|
opts[item.dictValue] = {
|
|
text: item.dictLabel,
|
|
label: item.dictLabel,
|
|
value: isDigital ? Number(item.dictValue) : item.dictValue,
|
|
key: item.dictCode,
|
|
listClass: item.listClass,
|
|
status: item.listClass,
|
|
};
|
|
});
|
|
return opts;
|
|
} else {
|
|
return {};
|
|
}
|
|
}
|
|
|
|
// 导入
|
|
return {
|
|
getDictData,
|
|
dictLabel,
|
|
oneDictData,
|
|
complete,
|
|
getDictSelectOption,
|
|
getTransformChildren,
|
|
industryLabel
|
|
}
|
|
})
|
|
|
|
export default useDictStore; |