@@ -27,7 +27,7 @@ const { proxy } = getCurrentInstance(), | |||||
Cookie.remove('token') | Cookie.remove('token') | ||||
localStorage.clear() | localStorage.clear() | ||||
router.push('/login') | router.push('/login') | ||||
window.location.reload() | |||||
// window.location.reload() | |||||
}, | }, | ||||
// 申请权限 | // 申请权限 | ||||
apply = () => { | apply = () => { | ||||
@@ -6,6 +6,8 @@ export const createMeeting = data => http.post('/api/v1/meeting/create', data) / | |||||
export const randomInviteExpect = data => http.post('/api/v1/meeting/random-invite-expect', data) // 新建会议java | export const randomInviteExpect = data => http.post('/api/v1/meeting/random-invite-expect', data) // 新建会议java | ||||
export const continueInviteDisposable = data => http.post('/api/v1/meeting/continueInvite-disposable', data) // 一次性续抽专家 | |||||
export const meetingList = params => http.get('/api/v1/meeting/manager/meetingList', { params }) // 评审会议列表 | export const meetingList = params => http.get('/api/v1/meeting/manager/meetingList', { params }) // 评审会议列表 | ||||
export const meetingBasicInfo = meetingId => http.get(`/api/v1/meeting/basicInfo/${meetingId}`) // 会议详情-基本信息 | export const meetingBasicInfo = meetingId => http.get(`/api/v1/meeting/basicInfo/${meetingId}`) // 会议详情-基本信息 | ||||
@@ -13,7 +13,7 @@ | |||||
label="抽取规则" | label="抽取规则" | ||||
> | > | ||||
<el-card | <el-card | ||||
v-for="(ele,index) in ExtractionRule" | |||||
v-for="(ele,index) in ruleForm.expertInviteRule.randomRules" | |||||
:key="index" | :key="index" | ||||
class="box-card w-full mb-8" | class="box-card w-full mb-8" | ||||
> | > | ||||
@@ -24,7 +24,7 @@ | |||||
type="danger" | type="danger" | ||||
plain | plain | ||||
icon="Delete" | icon="Delete" | ||||
:disabled="ExtractionRule.length === 1" | |||||
:disabled="ruleForm.expertInviteRule.randomRules.length === 1" | |||||
@click="delExtractionRule(index)" | @click="delExtractionRule(index)" | ||||
> | > | ||||
删除规则 | 删除规则 | ||||
@@ -75,7 +75,7 @@ | |||||
<el-col :span="8"> | <el-col :span="8"> | ||||
<el-form-item label="专家级别" :label-width="100"> | <el-form-item label="专家级别" :label-width="100"> | ||||
<el-cascader | <el-cascader | ||||
v-model="ruleForm.expertInviteRule.randomRules[index].expertRegionLists" | |||||
v-model="zjjb" | |||||
clearable | clearable | ||||
:options="regionTree" | :options="regionTree" | ||||
placeholder="请选择" | placeholder="请选择" | ||||
@@ -111,10 +111,10 @@ | |||||
<el-col :span="8"> | <el-col :span="8"> | ||||
<el-form-item label="履职意向" :label-width="100"> | <el-form-item label="履职意向" :label-width="100"> | ||||
<el-cascader | <el-cascader | ||||
v-model="lzyx" | |||||
:options="regionTree" | :options="regionTree" | ||||
class="w-full" | class="w-full" | ||||
clearable | clearable | ||||
@change="handleExpertIntentionWorkRegions($event,index)" | |||||
/> | /> | ||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
@@ -182,24 +182,24 @@ | |||||
<el-col :span="8"> | <el-col :span="8"> | ||||
<el-form-item label="技术专长" :label-width="100"> | <el-form-item label="技术专长" :label-width="100"> | ||||
<el-cascader | <el-cascader | ||||
v-model="textZc" | |||||
:options="technicalExpertiseTree" | :options="technicalExpertiseTree" | ||||
placeholder="请选择" | placeholder="请选择" | ||||
class="w-full" | class="w-full" | ||||
clearable | clearable | ||||
@change="handleRandomRulesTags($event, index)" | @change="handleRandomRulesTags($event, index)" | ||||
@visible-change="getDictionaryData('technical_expertise')" | |||||
/> | /> | ||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
<el-col :span="8"> | <el-col :span="8"> | ||||
<el-form-item label="行业领域" :label-width="100"> | <el-form-item label="行业领域" :label-width="100"> | ||||
<el-cascader | <el-cascader | ||||
v-model="hyly" | |||||
:options="industrySectorTree" | :options="industrySectorTree" | ||||
placeholder="请选择" | placeholder="请选择" | ||||
class="w-full" | class="w-full" | ||||
clearable | clearable | ||||
@change="handleRandomRulesTags($event, index)" | @change="handleRandomRulesTags($event, index)" | ||||
@visible-change="getDictionaryData('industry_sector')" | |||||
/> | /> | ||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
@@ -215,10 +215,12 @@ | |||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
</el-row> | </el-row> | ||||
<el-button @click="submit">测试</el-button> | |||||
</el-card> | </el-card> | ||||
</template> | </template> | ||||
<script setup> | <script setup> | ||||
import { getCurrentInstance, onMounted, reactive, ref } from 'vue' | |||||
import { getCurrentInstance, onMounted, reactive, ref, watch } from 'vue' | |||||
import { storeToRefs } from 'pinia' | import { storeToRefs } from 'pinia' | ||||
import store from '@/store' | import store from '@/store' | ||||
const { dictList } = storeToRefs(store.dictStore) | const { dictList } = storeToRefs(store.dictStore) | ||||
@@ -226,8 +228,8 @@ const regionTree = ref([]) | |||||
const regionProps = ref({ multiple: true }) | const regionProps = ref({ multiple: true }) | ||||
import { getDictionaryTree } from '@/http/apis/expertManage/expertStore' | import { getDictionaryTree } from '@/http/apis/expertManage/expertStore' | ||||
import { districtList } from '@/http/apis/commonApi' | import { districtList } from '@/http/apis/commonApi' | ||||
import { continueInviteDisposable } from '@/http/apis/expertManage/reviewMeeting' | |||||
const { proxy } = getCurrentInstance() | const { proxy } = getCurrentInstance() | ||||
const ExtractionRule = ref([0]) | |||||
const userInfo = storeToRefs(store.userStore).userInfo || {} | const userInfo = storeToRefs(store.userStore).userInfo || {} | ||||
const ruleForm = reactive({ | const ruleForm = reactive({ | ||||
expertInviteRule: { | expertInviteRule: { | ||||
@@ -252,6 +254,12 @@ onMounted(async () => { | |||||
const regionRes = [] | const regionRes = [] | ||||
regionRes.push(res.data) | regionRes.push(res.data) | ||||
regionTree.value = copeData(regionRes) | regionTree.value = copeData(regionRes) | ||||
const technicalExpertiseRes = await getDictionaryTree({ rootTagCodeList: ['technical_expertise'] }) | |||||
technicalExpertiseTree.value = copeDictionaryData(technicalExpertiseRes)[0].children | |||||
const industrySectorRes = await getDictionaryTree({ rootTagCodeList: ['industry_sector'] }) | |||||
industrySectorTree.value = copeDictionaryData(industrySectorRes)[0].children | |||||
}) | }) | ||||
const copeData = (val) => { | const copeData = (val) => { | ||||
const data = val.map((item) => { | const data = val.map((item) => { | ||||
@@ -272,16 +280,15 @@ const addExtractionRule = () => { | |||||
proxy.$message.warning('最多添加5个规则') | proxy.$message.warning('最多添加5个规则') | ||||
return | return | ||||
} | } | ||||
ExtractionRule.value.push(ExtractionRule.value.length) | |||||
ruleForm.expertInviteRule.randomRules.push({ expertDicts: [], expertTags: [] }) | ruleForm.expertInviteRule.randomRules.push({ expertDicts: [], expertTags: [] }) | ||||
} | } | ||||
const delExtractionRule = (index) => { | const delExtractionRule = (index) => { | ||||
ruleForm.expertInviteRule.randomRules.splice(index, 1) | ruleForm.expertInviteRule.randomRules.splice(index, 1) | ||||
ExtractionRule.value.splice(index, 1) | |||||
} | } | ||||
// 处理抽取规则标签数据expertTags | // 处理抽取规则标签数据expertTags | ||||
const handleRandomRulesTags = ($event, index) => { | const handleRandomRulesTags = ($event, index) => { | ||||
console.log($event, index) | |||||
let tagGeneralType // 级联选择器标签总类型 | let tagGeneralType // 级联选择器标签总类型 | ||||
let tagType // select选择器标签总类型 | let tagType // select选择器标签总类型 | ||||
let dictObj | let dictObj | ||||
@@ -293,10 +300,12 @@ const handleRandomRulesTags = ($event, index) => { | |||||
tagGeneralType = $event[0].split('##')[0] | tagGeneralType = $event[0].split('##')[0] | ||||
tagType = $event[$event.length - 1].split('##')[0] | tagType = $event[$event.length - 1].split('##')[0] | ||||
dictObj = { tagGeneralType, tagCodes: [$event[$event.length - 1].split('##')[2]], expertTag: tagGeneralType } | dictObj = { tagGeneralType, tagCodes: [$event[$event.length - 1].split('##')[2]], expertTag: tagGeneralType } | ||||
console.log(tagGeneralType, tagType, dictObj) | |||||
} else { // 处理select选择器,字符串型数据 | } else { // 处理select选择器,字符串型数据 | ||||
tagType = $event.split('##')[0] | tagType = $event.split('##')[0] | ||||
dictObj = { tagType, tagCodes: [$event.split('##')[2]], expertTag: tagType } | dictObj = { tagType, tagCodes: [$event.split('##')[2]], expertTag: tagType } | ||||
} | } | ||||
if (!ruleForm.expertInviteRule.randomRules[index].expertTags)ruleForm.expertInviteRule.randomRules[index].expertTags = [] | |||||
if (ruleForm.expertInviteRule.randomRules[index].expertTags.length === 0) { | if (ruleForm.expertInviteRule.randomRules[index].expertTags.length === 0) { | ||||
ruleForm.expertInviteRule.randomRules[index].expertTags.push(dictObj) | ruleForm.expertInviteRule.randomRules[index].expertTags.push(dictObj) | ||||
} else { | } else { | ||||
@@ -324,6 +333,7 @@ const handleRandomRulesDictionary = ($event, index) => { | |||||
} | } | ||||
const dictType = $event.split('##')[1] | const dictType = $event.split('##')[1] | ||||
const dictObj = { dictCodes: [$event.split('##')[0]], expertDict: dictType } | const dictObj = { dictCodes: [$event.split('##')[0]], expertDict: dictType } | ||||
if (!ruleForm.expertInviteRule.randomRules[index].expertDicts)ruleForm.expertInviteRule.randomRules[index].expertDicts = [] | |||||
if (ruleForm.expertInviteRule.randomRules[index].expertDicts.length === 0) { | if (ruleForm.expertInviteRule.randomRules[index].expertDicts.length === 0) { | ||||
ruleForm.expertInviteRule.randomRules[index].expertDicts.push(dictObj) | ruleForm.expertInviteRule.randomRules[index].expertDicts.push(dictObj) | ||||
} else { | } else { | ||||
@@ -334,18 +344,19 @@ const handleRandomRulesDictionary = ($event, index) => { | |||||
} | } | ||||
} | } | ||||
// 处理履职意向数据 | // 处理履职意向数据 | ||||
const handleExpertIntentionWorkRegions = ($event, index) => { | |||||
let regionArr = [] | |||||
if (!$event) { | |||||
regionArr = [] | |||||
} else { | |||||
regionArr = $event.pop().split('##') | |||||
} | |||||
const regionCode = regionArr?.[0] | |||||
const regionLevel = regionArr?.[2] | |||||
ruleForm.expertInviteRule.randomRules[index].intentionRegionCode = regionCode | |||||
ruleForm.expertInviteRule.randomRules[index].intentionRegionLevel = regionLevel | |||||
} | |||||
// const handleExpertIntentionWorkRegions = ($event, index) => { | |||||
// console.log($event) | |||||
// let regionArr = [] | |||||
// if (!$event) { | |||||
// regionArr = [] | |||||
// } else { | |||||
// regionArr = $event.pop().split('##') | |||||
// } | |||||
// const regionCode = regionArr?.[0] | |||||
// const regionLevel = regionArr?.[2] | |||||
// ruleForm.expertInviteRule.randomRules[index].intentionRegionCode = regionCode | |||||
// ruleForm.expertInviteRule.randomRules[index].intentionRegionLevel = regionLevel | |||||
// } | |||||
// 各种字典数据 | // 各种字典数据 | ||||
const technicalExpertiseTree = ref([])// 技术专长 | const technicalExpertiseTree = ref([])// 技术专长 | ||||
const industrySectorTree = ref([])// 行业领域 | const industrySectorTree = ref([])// 行业领域 | ||||
@@ -387,7 +398,6 @@ const copeDictionaryData = (val) => { // 处理字典数据的方法 | |||||
}) | }) | ||||
return data | return data | ||||
} | } | ||||
// 处理专家层级数据 | // 处理专家层级数据 | ||||
const handleExpertRegion = ($event, index) => { | const handleExpertRegion = ($event, index) => { | ||||
console.log(ruleForm.expertInviteRule.randomRules[index].expertRegionLists) | console.log(ruleForm.expertInviteRule.randomRules[index].expertRegionLists) | ||||
@@ -398,6 +408,107 @@ const handleExpertRegion = ($event, index) => { | |||||
} | } | ||||
}) || [] | }) || [] | ||||
} | } | ||||
// 假设组件有两个 props:title 和 content | |||||
const { detailData } = defineProps({ | |||||
detailData: Object | |||||
}) | |||||
console.log(detailData) | |||||
// randomRules | |||||
// 使用深度监听 | |||||
watch( | |||||
() => detailData, | |||||
(newVal, oldVal) => { | |||||
if (newVal && newVal.randomRules && newVal.randomRules) { | |||||
// ruleForm.expertInviteRule.randomRules = newVal.randomRules | |||||
// console.log(ruleForm.expertInviteRule.randomRules) | |||||
ruleForm.expertInviteRule.randomRules = handleParmas(newVal.randomRules) | |||||
console.log(ruleForm.expertInviteRule.randomRules) | |||||
} | |||||
}, | |||||
{ deep: true } | |||||
) | |||||
function handleParmas (randomRules) { | |||||
console.log(randomRules) | |||||
return randomRules.map(item => { | |||||
return { | |||||
...item, | |||||
count: item.count, | |||||
// 其它标签 | |||||
otherTag: item.expertTags.find(i => i.expertTag === 'other').tagCodes || undefined, | |||||
// 擅长方向 | |||||
goodAt: item.expertTags.find(i => i.expertTag === 'good_at').tagCodes || undefined, | |||||
// 内外围 | |||||
expertType: item.expertDicts.find(i => i.expertDict === 'expert_type').dictCodes || undefined, | |||||
// 职称级别 | |||||
professionalLevel: item.expertDicts.find(i => i.expertDict === 'title_level').dictCodes || undefined, | |||||
// 专家来源 | |||||
expertSource: item.expertTags.find(i => i.expertTag === 'expert_source').tagCodes || undefined, | |||||
// 履职意向 | |||||
intentionRegionCode: item.intentionRegionCode || undefined, | |||||
intentionRegionLevel: item.intentionRegionLevel || undefined, | |||||
// 专家级别 | |||||
expertRegionLists: item.expertRegionList || [], | |||||
// 技术专长 | |||||
technical_expertise: item.expertTags.find(i => i.expertTag === 'technical_expertise').tagCodes || undefined, | |||||
// 行业领域 | |||||
industry_sector: item.expertTags.find(i => i.expertTag === 'industry_sector').tagCodes || undefined | |||||
} | |||||
}) | |||||
} | |||||
function submit () { | |||||
console.log(ruleForm.expertInviteRule.randomRules) | |||||
const ruleFormClone = JSON.parse(JSON.stringify(ruleForm)) | |||||
ruleFormClone.expertInviteRule.randomRules.forEach(element => { | |||||
element['inviteType'] = ruleFormClone.expertInviteRule.inviteType | |||||
Object.keys(element).forEach(item => { | |||||
switch (item) { | |||||
case 'expertSource': | |||||
delete element[item] | |||||
break | |||||
case 'expertType': | |||||
delete element[item] | |||||
break | |||||
case 'goodAt': | |||||
delete element[item] | |||||
break | |||||
case 'otherTag': | |||||
delete element[item] | |||||
break | |||||
case 'professionalLevel': | |||||
delete element[item] | |||||
break | |||||
case 'expertRegionLists': | |||||
delete element[item] | |||||
break | |||||
default: | |||||
break | |||||
} | |||||
}) | |||||
}) | |||||
console.log(detailData) | |||||
const postData = { | |||||
meetingId: 56, | |||||
avoidRule: detailData.avoidInfo, | |||||
randomRules: ruleFormClone.expertInviteRule.randomRules | |||||
} | |||||
console.log(postData) | |||||
if (postData.xxx) { | |||||
continueInviteDisposable(postData) | |||||
} | |||||
console.log(lzyx.value) | |||||
} | |||||
const textZc = ref(['technical_expertise##计算机科学技术##3020000', '3020000##人工智能##3020200', '3020200##机器翻译##3020203']) | |||||
const zjjb = ref([['330500##湖州市##2', '330503##南浔区##3'], ['330500##湖州市##2', '330521##德清县##3']]) | |||||
const lzyx = ref(['330500##湖州市##2', '330521##德清县##3']) | |||||
const hyly = ref(['industry_sector##制造业##4030000', '4030000##酒、饮料及精制茶制造业##4030300']) | |||||
</script> | </script> | ||||
<style scoped lang="less"> | <style scoped lang="less"> | ||||
@@ -0,0 +1,462 @@ | |||||
<template> | |||||
<el-card class="mb-16" shadow="never"> | |||||
<template #header> | |||||
<div class="card-header"> | |||||
<span>抽取信息</span> | |||||
</div> | |||||
</template> | |||||
<el-row | |||||
:gutter="20" | |||||
> | |||||
<el-col :span="24"> | |||||
<el-form-item | |||||
label="抽取规则" | |||||
> | |||||
<el-card | |||||
v-for="(rulesItem,index) in randomRules" | |||||
:key="index" | |||||
class="box-card w-full mb-8" | |||||
> | |||||
<template #header> | |||||
<div class="card-header flex justify-between"> | |||||
<span>规则{{ index + 1 }}</span> | |||||
<el-button | |||||
type="danger" | |||||
plain | |||||
icon="Delete" | |||||
:disabled="randomRules.length === 1" | |||||
@click="delExtractionRule(index)" | |||||
> | |||||
删除规则 | |||||
</el-button> | |||||
</div> | |||||
</template> | |||||
<el-row class="mt-8" :gutter="10"> | |||||
<el-col :span="8"> | |||||
<el-form-item | |||||
label="邀请数量" | |||||
:label-width="100" | |||||
:prop="`expertInviteRule.randomRules[${index}].count`" | |||||
:rules=" [ | |||||
{ required: true, message: ' ', trigger: 'blur' } | |||||
]" | |||||
> | |||||
<el-input-number | |||||
v-model="rulesItem.count" | |||||
placeholder="请输入" | |||||
:min="1" | |||||
:controls="false" | |||||
:step="1" | |||||
step-strictly | |||||
/> | |||||
</el-form-item> | |||||
</el-col> | |||||
</el-row> | |||||
<el-row :gutter="10" class="mt-8"> | |||||
<el-col :span="8"> | |||||
<el-form-item label="其他标签" :label-width="100"> | |||||
<el-select | |||||
v-model="rulesItem.otherTag" | |||||
class="w-full" | |||||
clearable | |||||
placeholder="请选择" | |||||
> | |||||
<el-option | |||||
v-for="item in otherTree" | |||||
:key="item.value" | |||||
:label="item.label" | |||||
:value="item.label" | |||||
/> | |||||
</el-select> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="8"> | |||||
<el-form-item label="专家级别" :label-width="100"> | |||||
<el-cascader | |||||
v-model="rulesItem.expertRegionList" | |||||
clearable | |||||
:options="regionTree" | |||||
placeholder="请选择" | |||||
class="w-full" | |||||
:props="regionProps" | |||||
/> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="8"> | |||||
<el-form-item label="内外围" :label-width="100"> | |||||
<el-select | |||||
v-model="rulesItem.expertType" | |||||
placeholder="请选择" | |||||
class="w-full" | |||||
clearable | |||||
> | |||||
<el-option | |||||
v-for="(item,order) in dictList && | |||||
dictList.length && | |||||
dictList.find(i => i.dictionaryName === 'expert_type') | |||||
.dictionaryList" | |||||
:key="order" | |||||
:label="item.describe" | |||||
:value="item.describe" | |||||
/> | |||||
</el-select> | |||||
</el-form-item> | |||||
</el-col> | |||||
</el-row> | |||||
<el-row :gutter="10" class="mt-8"> | |||||
<el-col :span="8"> | |||||
<el-form-item label="履职意向" :label-width="100"> | |||||
<el-cascader | |||||
v-model="rulesItem.intentionRegion" | |||||
:options="regionTree" | |||||
class="w-full" | |||||
clearable | |||||
/> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="8"> | |||||
<el-form-item label="专家来源" :label-width="100"> | |||||
<el-select | |||||
v-model="rulesItem.expertSource" | |||||
class="w-full" | |||||
placeholder="请选择" | |||||
clearable | |||||
> | |||||
<el-option | |||||
v-for="(item,order) in expertSource" | |||||
:key="order" | |||||
:label="item.label" | |||||
:value="item.label" | |||||
/> | |||||
</el-select> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="8"> | |||||
<el-form-item label="职称级别" :label-width="100"> | |||||
<el-select | |||||
v-model="rulesItem.professionalLevel" | |||||
class="w-full" | |||||
placeholder="请选择" | |||||
clearable | |||||
> | |||||
<el-option | |||||
v-for="(item,order) in dictList && | |||||
dictList.length && | |||||
dictList.find(i => i.dictionaryName === 'title_level') | |||||
.dictionaryList" | |||||
:key="order" | |||||
:label="item.describe" | |||||
:value="item.describe" | |||||
/> | |||||
</el-select> | |||||
</el-form-item> | |||||
</el-col> | |||||
</el-row> | |||||
<el-row :gutter="10" class="mt-8"> | |||||
<el-col :span="8"> | |||||
<el-form-item label="擅长方向" :label-width="100"> | |||||
<el-select | |||||
v-model="rulesItem.goodAt" | |||||
class="w-full" | |||||
placeholder="请选择" | |||||
clearable | |||||
> | |||||
<el-option | |||||
v-for="(item,order) in goodAtTree" | |||||
:key="order" | |||||
:label="item.label" | |||||
:value="item.label" | |||||
/> | |||||
</el-select> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="8"> | |||||
<el-form-item label="技术专长" :label-width="100"> | |||||
<el-cascader | |||||
v-model="rulesItem.technicalExpertise" | |||||
:options="technicalExpertiseTree" | |||||
placeholder="请选择" | |||||
class="w-full" | |||||
clearable | |||||
/> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="8"> | |||||
<el-form-item label="行业领域" :label-width="100"> | |||||
<el-cascader | |||||
v-model="rulesItem.industrySector" | |||||
:options="industrySectorTree" | |||||
placeholder="请选择" | |||||
class="w-full" | |||||
clearable | |||||
/> | |||||
</el-form-item> | |||||
</el-col> | |||||
</el-row> | |||||
</el-card> | |||||
<el-button | |||||
class="w-full" | |||||
type="primary" | |||||
icon="plus" | |||||
plain | |||||
@click="addExtractionRule" | |||||
>添加规则 | |||||
</el-button> | |||||
</el-form-item> | |||||
</el-col> | |||||
</el-row> | |||||
<el-button @click="handleParmas">测试</el-button> | |||||
</el-card> | |||||
</template> | |||||
<script setup> | |||||
import { getCurrentInstance, onMounted, ref, watch } from 'vue' | |||||
import { storeToRefs } from 'pinia' | |||||
import store from '@/store' | |||||
const { dictList } = storeToRefs(store.dictStore) | |||||
const regionTree = ref([]) | |||||
const regionProps = ref({ multiple: true }) | |||||
import { getDictionaryTree } from '@/http/apis/expertManage/expertStore' | |||||
import { districtList } from '@/http/apis/commonApi' | |||||
// import { continueInviteDisposable } from '@/http/apis/expertManage/reviewMeeting' | |||||
const { proxy } = getCurrentInstance() | |||||
const randomRules = ref([ | |||||
{ | |||||
// other##信息安全##5200000 | |||||
count: '', | |||||
otherTag: '', | |||||
expertRegionList: [], | |||||
expertType: '', | |||||
intentionRegion: {}, | |||||
expertSource: '', | |||||
professionalLevel: '', | |||||
goodAt: '', | |||||
technicalExpertise: '', | |||||
industrySector: '' | |||||
} | |||||
]) | |||||
onMounted(async () => { | |||||
// 获取履职意向数据 | |||||
const res = await districtList({ regionCode: 330500, regionLevel: 2 }) | |||||
const regionRes = [] | |||||
regionRes.push(res.data) | |||||
regionTree.value = copeData(regionRes) | |||||
const technicalExpertiseRes = await getDictionaryTree({ rootTagCodeList: ['technical_expertise'] }) | |||||
technicalExpertiseTree.value = copeDictionaryData(technicalExpertiseRes)[0].children | |||||
const industrySectorRes = await getDictionaryTree({ rootTagCodeList: ['industry_sector'] }) | |||||
industrySectorTree.value = copeDictionaryData(industrySectorRes)[0].children | |||||
getDictionaryData('technical_expertise') | |||||
getDictionaryData('industry_sector') | |||||
getDictionaryData('expert_source') | |||||
getDictionaryData('good_at') | |||||
getDictionaryData('other') | |||||
}) | |||||
const copeData = (val) => { | |||||
const data = val.map((item) => { | |||||
const deptData = {} | |||||
deptData.value = item.unionCode | |||||
deptData.label = item.name | |||||
if (item.children && item.children.length) { | |||||
deptData.children = item.children.map((v) => ({ value: v.unionCode, label: v.name })) | |||||
const childrenData = copeData(item.children) | |||||
deptData.children = [...childrenData] | |||||
} | |||||
return deptData | |||||
}) | |||||
return data | |||||
} | |||||
const addExtractionRule = () => { | |||||
if (randomRules.value.length >= 5) { | |||||
proxy.$message.warning('最多添加5个规则') | |||||
return | |||||
} | |||||
randomRules.value.push({}) | |||||
} | |||||
const delExtractionRule = (index) => { | |||||
randomRules.value.splice(index, 1) | |||||
} | |||||
// 各种字典数据 | |||||
const technicalExpertiseTree = ref([])// 技术专长 | |||||
const industrySectorTree = ref([])// 行业领域 | |||||
const expertSource = ref([])// 专家来源 | |||||
const goodAtTree = ref([])// 擅长 | |||||
const otherTree = ref([])// 其他标签 | |||||
// 获取各种字典数据 | |||||
const getDictionaryData = async (params) => { | |||||
if (params === 'technical_expertise' && technicalExpertiseTree.value.length === 0) { | |||||
const technicalExpertiseRes = await getDictionaryTree({ rootTagCodeList: [params] }) | |||||
technicalExpertiseTree.value = copeDictionaryData(technicalExpertiseRes)[0].children | |||||
} else if (params === 'industry_sector' && industrySectorTree.value.length === 0) { | |||||
const industrySectorRes = await getDictionaryTree({ rootTagCodeList: [params] }) | |||||
industrySectorTree.value = copeDictionaryData(industrySectorRes)[0].children | |||||
} else if (params === 'expert_source' && expertSource.value.length === 0) { | |||||
const expertSourceRes = await getDictionaryTree({ rootTagCodeList: [params] }) | |||||
expertSource.value = copeDictionaryData(expertSourceRes)[0].children | |||||
} else if (params === 'good_at' && goodAtTree.value.length === 0) { | |||||
const goodAtRes = await getDictionaryTree({ rootTagCodeList: [params] }) | |||||
goodAtTree.value = copeDictionaryData(goodAtRes)[0].children | |||||
} else if (params === 'other' && otherTree.value.length === 0) { | |||||
const otherRes = await getDictionaryTree({ rootTagCodeList: [params] }) | |||||
otherTree.value = copeDictionaryData(otherRes)[0].children | |||||
} | |||||
} | |||||
const copeDictionaryData = (val) => { // 处理字典数据的方法 | |||||
const data = val?.map((item) => { | |||||
const deptData = {} | |||||
deptData.value = item.parentCode + '##' + item.unionCode | |||||
deptData.label = item.tagName | |||||
// deptData.isLeaf = false | |||||
if (item.children && item.children.length) { | |||||
deptData.children = item.children.map((v) => ({ value: v.parentCode + '##' + v.unionCode, label: v.tagName })) | |||||
const childrenData = copeDictionaryData(item.children) | |||||
deptData.children = [...childrenData] | |||||
} | |||||
return deptData | |||||
}) | |||||
return data | |||||
} | |||||
const { detailData } = defineProps({ | |||||
detailData: Object | |||||
}) | |||||
console.log(detailData) | |||||
// randomRules | |||||
// 使用深度监听 | |||||
watch( | |||||
() => detailData, | |||||
(newVal, oldVal) => { | |||||
if (newVal && newVal.randomRules && newVal.randomRules) { | |||||
// ruleForm.expertInviteRule.randomRules = newVal.randomRules | |||||
// console.log(ruleForm.expertInviteRule.randomRules) | |||||
// ruleForm.expertInviteRule.randomRules = handleParmas(newVal.randomRules) | |||||
showData() | |||||
} | |||||
}, | |||||
{ deep: true } | |||||
) | |||||
function showData () { | |||||
} | |||||
function handleParmas () { | |||||
const postdata = randomRules.value.map(item => { | |||||
return { | |||||
count: item.count, | |||||
expertDicts: getExpertDicts(item), | |||||
expertRegionList: getExpertRegionList(item), | |||||
...getIntentionRegion(item), | |||||
expertTags: getExpertTags(item), | |||||
formEditJson: JSON.stringify(item) | |||||
} | |||||
}) | |||||
console.log(postdata) | |||||
} | |||||
function getExpertRegionList (item) { | |||||
if (item.expertRegionList && Array.isArray(item.expertRegionList) && item.expertRegionList.length > 0) { | |||||
return item.expertRegionList.map(i => { | |||||
return { | |||||
regionCode: i[1].split('##')[0], regionLevel: i[1].split('##')[2] | |||||
} | |||||
}) | |||||
} | |||||
return [] | |||||
} | |||||
function getIntentionRegion (item) { | |||||
// ["330500##湖州市##2","330503##南浔区##3"] | |||||
if (item.intentionRegion && Array.isArray(item.intentionRegion) && item.intentionRegion.length > 1) { | |||||
return { | |||||
intentionRegionCode: item.intentionRegion[1].split('##')[0], | |||||
intentionRegionLevel: item.intentionRegion[1].split('##')[2] | |||||
} | |||||
} else { | |||||
return {} | |||||
} | |||||
} | |||||
function getExpertTags (item) { | |||||
const list = [] | |||||
if (item.otherTag) { | |||||
list.push({ | |||||
expertTag: 'other', | |||||
tagCodes: [item.otherTag] | |||||
}) | |||||
} | |||||
if (item.expertSource) { | |||||
list.push({ | |||||
expertTag: 'expert_source', | |||||
tagCodes: [item.expertSource] | |||||
}) | |||||
} | |||||
if (item.goodAt) { | |||||
list.push({ | |||||
expertTag: 'good_at', | |||||
tagCodes: [item.goodAt] | |||||
}) | |||||
} | |||||
// expert_source | |||||
// ["industry_sector##制造业##4030000","4030000##酒、饮料及精制茶制造业##4030300"] | |||||
if (item.industrySector && Array.isArray(item.industrySector) && item.industrySector.length > 1) { | |||||
list.push({ | |||||
expertTag: 'industry_sector', | |||||
tagCodes: [item.industrySector[1].split('##')[1]] | |||||
}) | |||||
} | |||||
if (item.technicalExpertise && Array.isArray(item.technicalExpertise) && item.technicalExpertise.length > 1) { | |||||
if (item.technicalExpertise.length === 2) { | |||||
list.push({ | |||||
expertTag: 'technical_expertise', | |||||
tagCodes: [item.technicalExpertise[1].split('##')[1]] | |||||
}) | |||||
} else if (item.technicalExpertise.length === 3) { | |||||
list.push({ | |||||
expertTag: 'technical_expertise', | |||||
tagCodes: [item.technicalExpertise[2].split('##')[1]] | |||||
}) | |||||
} | |||||
} | |||||
return list | |||||
} | |||||
function getExpertDicts (item) { | |||||
const list = [] | |||||
if (item.expertType) { | |||||
list.push({ | |||||
expertDict: 'expert_type', | |||||
dictCodes: [item.expertType] | |||||
}) | |||||
} | |||||
if (item.professionalLevel) { | |||||
list.push({ | |||||
expertDict: 'title_level', | |||||
dictCodes: [item.professionalLevel] | |||||
}) | |||||
} | |||||
return list | |||||
} | |||||
// const textZc = ref(['technical_expertise##计算机科学技术##3020000', '3020000##人工智能##3020200', '3020200##机器翻译##3020203']) | |||||
// const zjjb = ref([['330500##湖州市##2', '330503##南浔区##3'], ['330500##湖州市##2', '330521##德清县##3']]) | |||||
// const lzyx = ref(['330500##湖州市##2', '330521##德清县##3']) | |||||
// const hyly = ref(['industry_sector##制造业##4030000', '4030000##酒、饮料及精制茶制造业##4030300']) | |||||
</script> | |||||
<style scoped lang="less"> | |||||
</style> |
@@ -270,25 +270,24 @@ const { proxy } = getCurrentInstance(), | |||||
ruleFormClone.meetingBasicInfo.times = undefined | ruleFormClone.meetingBasicInfo.times = undefined | ||||
loading.value = true | loading.value = true | ||||
// const res = await randomInviteExpect(ruleFormClone) | |||||
// const total = ruleFormClone.expertInviteRule.randomRules.reduce((accumulator, currentItem) => { | |||||
// return accumulator + currentItem.count | |||||
// }, 0) | |||||
// console.log(total) | |||||
// if (res.data.canInvite < total) { | |||||
// ElMessageBox.confirm('当前可邀请专家数量不足,是否继续邀请?', '提示', { | |||||
// confirmButtonText: '确定', | |||||
// cancelButtonText: '取消', | |||||
// type: 'warning' | |||||
// }).then(() => { | |||||
// // 继续邀请 | |||||
// console.log('继续') | |||||
// addMetting(ruleFormClone) | |||||
// }) | |||||
// } else { | |||||
// await addMetting(ruleFormClone) | |||||
// } | |||||
await addMetting(ruleFormClone) | |||||
const res = await randomInviteExpect(ruleFormClone) | |||||
const total = ruleFormClone.expertInviteRule.randomRules.reduce((accumulator, currentItem) => { | |||||
return accumulator + currentItem.count | |||||
}, 0) | |||||
console.log(total) | |||||
if (res.data.canInvite < total) { | |||||
ElMessageBox.confirm('当前可邀请专家数量不足,是否继续邀请?', '提示', { | |||||
confirmButtonText: '确定', | |||||
cancelButtonText: '取消', | |||||
type: 'warning' | |||||
}).then(() => { | |||||
// 继续邀请 | |||||
console.log('继续') | |||||
addMetting(ruleFormClone) | |||||
}) | |||||
} else { | |||||
await addMetting(ruleFormClone) | |||||
} | |||||
} else { | } else { | ||||
console.log('error submit!', fields) | console.log('error submit!', fields) | ||||
} | } | ||||
@@ -448,11 +448,11 @@ onMounted(async () => { | |||||
const res = await districtList() | const res = await districtList() | ||||
regionTree.value.push(res.data) | regionTree.value.push(res.data) | ||||
}) | }) | ||||
// import RefillDialog from '@/pages/expertManage/reviewMeeting/addMeeting/components/RefillDialog.vue' | |||||
import RefillDialog from '@/pages/expertManage/reviewMeeting/addMeeting/components/RefillDialogCopy.vue' | |||||
</script> | </script> | ||||
<template> | <template> | ||||
<!-- <refill-dialog />--> | |||||
<refill-dialog :detail-data="inviteRuleDetail" /> | |||||
<el-card class="box-card"> | <el-card class="box-card"> | ||||
<template #header> | <template #header> | ||||
<div class="card-header"> | <div class="card-header"> | ||||