瀏覽代碼

fix: 专家会议

master
yxhc 1 天之前
父節點
當前提交
b395c245df
共有 6 個文件被更改,包括 432 次插入508 次删除
  1. +0
    -1
      src/pages/expertManage/reviewMeeting/addMeeting/components/RefillDialog.vue
  2. +56
    -439
      src/pages/expertManage/reviewMeeting/addMeeting/components/RefillDialogCopy.vue
  3. +318
    -0
      src/pages/expertManage/reviewMeeting/addMeeting/components/avoidCom.vue
  4. +24
    -50
      src/pages/expertManage/reviewMeeting/addMeeting/components/ruleFormCom.vue
  5. +4
    -2
      src/pages/expertManage/reviewMeeting/addMeeting/index.vue
  6. +30
    -16
      src/pages/expertManage/reviewMeeting/meetingDetail/index.vue

+ 0
- 1
src/pages/expertManage/reviewMeeting/addMeeting/components/RefillDialog.vue 查看文件

@@ -409,7 +409,6 @@ const handleExpertRegion = ($event, index) => {
}) || []
}

// 假设组件有两个 props:title 和 content
const { detailData } = defineProps({
detailData: Object
})


+ 56
- 439
src/pages/expertManage/reviewMeeting/addMeeting/components/RefillDialogCopy.vue 查看文件

@@ -1,460 +1,77 @@
<template>
<el-card class="mb-16" shadow="never">
<template #header>
<div class="card-header">
<span>抽取信息</span>
</div>
<el-dialog
:model-value="visible"
title="续抽"
width="840px"
destroy-on-close
@close="visible= false"
>
<rule-form-com ref="ruleFormComRef" v-model="rules" />
<avoid-com ref="avoidConRef" />
<template #footer>
<el-button type="primary" size="small" @click="confirm">
确定
</el-button>
<el-button size="small" @click="visible=false">
关闭
</el-button>
</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-dialog>

<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
import RuleFormCom from '@/pages/expertManage/reviewMeeting/addMeeting/components/ruleFormCom.vue'
import { ref, defineModel, watch, nextTick } from 'vue'
import { continueInviteDisposable } from '@/http/apis/expertManage/reviewMeeting'
import { useRoute } from 'vue-router'
import AvoidCom from '@/pages/expertManage/reviewMeeting/addMeeting/components/avoidCom.vue'
const { detailData } = defineProps({
detailData: Object
})
const ruleFormComRef = ref()
const avoidConRef = ref()

const industrySectorRes = await getDictionaryTree({ rootTagCodeList: ['industry_sector'] })
industrySectorTree.value = copeDictionaryData(industrySectorRes)[0].children
const rules = ref([{}])

getDictionaryData('technical_expertise')
getDictionaryData('industry_sector')
getDictionaryData('expert_source')
getDictionaryData('good_at')
getDictionaryData('other')
const visible = defineModel({
type: Boolean,
default: false
})
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 route = useRoute()
function confirm () {
ruleFormComRef.value.handleParmas()
const postData = {
meetingId: route.query.id,
avoidRule: avoidConRef.value.getAvoidRule(),
randomRules: ruleFormComRef.value.handleParmas()
}
continueInviteDisposable(postData)
visible.value = false
emits('refresh')
}

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

// 使用深度监听
const emits = defineEmits(['refresh'])
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]]
if (newVal && visible) {
const list = []
newVal.randomRules.forEach(item => {
let json = {}
if (item.formEditJson)json = JSON.parse(item.formEditJson)
list.push({
... json,
id: item.id
})
})
} else if (item.technicalExpertise.length === 3) {
list.push({
expertTag: 'technical_expertise',
tagCodes: [item.technicalExpertise[2].split('##')[1]]
nextTick(() => {
rules.value = list
avoidConRef.value.setNewData(newVal)
})
}
}

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'])
// { deep: true }
)

</script>
<style scoped lang="less">


+ 318
- 0
src/pages/expertManage/reviewMeeting/addMeeting/components/avoidCom.vue 查看文件

@@ -0,0 +1,318 @@
<script setup>
import { reactive, ref } from 'vue'
import { storeToRefs } from 'pinia'
import store from '@/store'
import AddExpertDialog from '@/pages/expertManage/reviewMeeting/addMeeting/components/addExpertDialog.vue'
import OrgTree from '@/components/orgTree/index.vue'
const userInfo = storeToRefs(store.userStore).userInfo || {}

const ruleForm = reactive({
expertInviteRule: {
inviteType: 1,
randomRules: [{ expertDicts: [], expertTags: [] }],
appointRule: {},
avoidRule: {
avoidUnitIdList: [{ 'organizationCode': 'GO_ff70e47bae684fdba0d64f4acab85661', 'name': '杭州宁达科技有限公司' }, { 'organizationCode': 'GO_13e5ef6615ae4b1293c4811b58e52955', 'name': '发改委' }, { 'organizationCode': 'GO_c50ee049114146dd80a8e1bb82812cd9', 'name': '委领导' }],
avoidOrgIdList: [],
expertIds: [],
avoidType: userInfo.value.regionName === '市本级' ? 2 : 1
}
},
meetingBasicInfo: {
isInnerProject: true
}
})
const setNewData = (data) => {
console.log('11111111111111')
console.log(data)
ruleForm.expertInviteRule.avoidRule.avoidType = data.avoidInfo.avoidType

if (data.avoidInfo.expert && Array.isArray(data.avoidInfo.experts)) {
ruleForm.expertInviteRule.avoidRule.expertIds = data.avoidInfo.experts.map(item => {
return {
...item,
expertName: item.name
}
})
}
if (data.avoidInfo.avoidUnitIds && Array.isArray(data.avoidInfo.avoidUnitIds)) {
const list = []
data.avoidInfo.avoidUnitIds.forEach((item, index) => {
list.push({
organizationCode: item,
name: data.avoidInfo.avoidUnits[index]
})
})
ruleForm.expertInviteRule.avoidRule.avoidUnitIdList = list
}

ruleForm.expertInviteRule.avoidRule.weekInviteCount = data.avoidInfo.weekInviteCount
}
defineExpose({
getAvoidRule, setNewData
})
function getAvoidRule () {
const ruleFormClone = JSON.parse(JSON.stringify(ruleForm))
// 处理回避单位数据
ruleFormClone.expertInviteRule.avoidRule.avoidUnitIdList = ruleFormClone.expertInviteRule.avoidRule.avoidUnitIdList.map(ele => {
return ele.organizationCode
})
// // 处理回避条线数据
// ruleFormClone.expertInviteRule.avoidRule.avoidOrgIdList = ruleFormClone.expertInviteRule.avoidRule.avoidOrgIdList.map(ele => {
// return ele.businessStripCode
// })
// 处理回避专家数据
ruleFormClone.expertInviteRule.avoidRule.expertIds = ruleFormClone.expertInviteRule.avoidRule.expertIds.map(ele => {
return ele.userId
})
return ruleFormClone.expertInviteRule.avoidRule
}

// 添加指定抽取专家弹窗
const selectExpertType = ref()
const unitUserDialogData = reactive({
visible: false,
// orgCode: route.query.orgCode || userInfo.value.orgCode,
data: []
})
const addAvoidanceExpert = () => {
selectExpertType.value = 2
unitUserDialogData.visible = true
unitUserDialogData.data = ruleForm.expertInviteRule.avoidRule?.expertIds || []
}
// 删除回避单位
const delTag = (index) => {
ruleForm.expertInviteRule.avoidRule.avoidUnitIdList.splice(index, 1)
}
const getUserData = (data) => {
if (selectExpertType.value === 1) {
ruleForm.expertInviteRule.appointRule.expertIdList = data.map(i => {
return {
id: i.userId,
name: i.expertName
}
})
} else {
ruleForm.expertInviteRule.avoidRule.expertIds = data
}
unitUserDialogData.visible = false
}
const orgProps = reactive({
unitVisible: false,
showCheckbox: false,
data: undefined
})
const showOrgTree = () => {
orgProps.unitVisible = true
orgProps.showCheckbox = true
orgProps.defaultProps = {
children: 'children',
label: 'title',
value: 'key',
isLeaf: 'isLeaf'
}
orgProps.type = 'UNIT'
orgProps.data = ruleForm.expertInviteRule.avoidRule.avoidUnitIdList && ruleForm.expertInviteRule.avoidRule.avoidUnitIdList.map(i => {
return {
key: i.organizationCode,
title: i.name
}
}) || []
}
// 添加回避条线
const title = ref()
const showLineTree = () => {
title.value = '回避条线'
orgProps.defaultProps = {
children: 'records',
label: 'businessStripName',
value: 'businessStripCode',
isLeaf: 'isLeaf'
}
orgProps.type = 'LINE'
orgProps.unitVisible = true
orgProps.showCheckbox = true
orgProps.data = ruleForm.expertInviteRule.avoidRule.avoidOrgIdList && ruleForm.expertInviteRule.avoidRule.avoidOrgIdList.map(i => i) || []
}

const closeTag2 = (tag) => {
ruleForm.expertInviteRule.avoidRule.expertIds.splice(ruleForm.expertInviteRule.avoidRule.expertIds.indexOf(tag), 1)
}
const getOrgData = (data) => {
if (title.value === '回避条线') {
ruleForm.expertInviteRule.avoidRule.avoidOrgIdList = data.map(i => i)
} else {
ruleForm.expertInviteRule.avoidRule.avoidUnitIdList = data.map(i => ({ organizationCode: i.key, name: i.title }))
}
}

const closeOrg = () => {
title.value = undefined
orgProps.unitVisible = false
}
const closeTag3 = (index) => {
ruleForm.expertInviteRule.avoidRule.avoidOrgIdList.splice(index, 1)
}

</script>

<template>
<add-expert-dialog
:visible="unitUserDialogData.visible"
:org-code="unitUserDialogData.orgCode"
:data="unitUserDialogData.data"
:select-expert-type="selectExpertType"
@get-user-data="getUserData"
@close="unitUserDialogData.visible = false"
/>

<org-tree
:visible="orgProps.unitVisible"
:show-checkbox="orgProps.showCheckbox"
:default-data="orgProps.data"
:title="title"
:type="orgProps.type"
:default-props="orgProps.defaultProps"
@close="closeOrg"
@get-select-unit="getOrgData"
/>
<el-card shadow="never">
<template #header>
<div class="card-header">
<span>回避信息</span>
</div>
</template>
<el-row>
<el-col>
<el-form-item label="部门、条线回避规则" prop="avoidRule.avoidType">
<el-select v-model="ruleForm.expertInviteRule.avoidRule.avoidType">
<el-option :value="1" label="回避单位" />
<el-option :value="2" label="回避条线" />
<el-option :value="3" label="不回避" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="回避单位"
>
<div class="flex flex-col items-start">
<el-button
type="primary"
size="small"
icon="Plus"
@click="showOrgTree"
>
添加回避单位
</el-button>
<p>
<el-tag
v-for="(item,index) in ruleForm.expertInviteRule.avoidRule.avoidUnitIdList"
:key="index"
class="mr-8"
closable
@close="delTag(index)"
>
{{ item.name }}
</el-tag>
</p>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="回避专家"
>
<div class="flex flex-col items-start">
<el-button
type="primary"
class="button-new-tag ml-1"
size="small"
icon="Plus"
@click="addAvoidanceExpert"
>
添加回避专家
</el-button>
<p>
<el-tag
v-for="tag in ruleForm.expertInviteRule.avoidRule.expertIds"
:key="tag"
class="mx-1"
closable
:disable-transitions="false"
@close="closeTag2(tag)"
>
{{ tag.expertName }}
</el-tag>
</p>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
v-if="false"
label="回避条线"
>
<div class="flex flex-col items-start">
<el-button
type="primary"
class="button-new-tag ml-1"
size="small"
icon="Plus"
@click="showLineTree"
>
添加回避条线
</el-button>
<p>
<el-tag
v-for="(tag,index) in ruleForm.expertInviteRule.avoidRule.avoidOrgIdList"
:key="tag"
class="mx-1"
closable
:disable-transitions="false"
@close="closeTag3(index)"
>
{{ tag.businessStripName }}
</el-tag>
</p>

</div>
</el-form-item>
<el-form-item label="回避条线">
<el-select v-model="ruleForm.expertInviteRule.avoidRule.avoidOrgIdList" multiple>
<el-option
v-for="(item,index) in lineListData"
:key="index"
:label="item.businessStripName"
:value="item.businessStripCode"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="一周内参与">
<el-input-number
v-model="ruleForm.expertInviteRule.avoidRule.weekInviteCount"
placeholder="请输入"
:min="0"
:controls="false"
style="width: 100px !important;"
/>
<div style="fontSize:14px; color:#666666; lineHeight:2em">次的专家不再抽取</div>
</el-form-item>
</el-col>
</el-row>
</el-card>
</template>

<style scoped lang="less">

</style>

+ 24
- 50
src/pages/expertManage/reviewMeeting/addMeeting/components/ruleFormCom.vue 查看文件

@@ -65,7 +65,7 @@
v-for="item in otherTree"
:key="item.value"
:label="item.label"
:value="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
@@ -97,7 +97,7 @@
.dictionaryList"
:key="order"
:label="item.describe"
:value="item.describe"
:value="item.dictionaryCode"
/>
</el-select>
</el-form-item>
@@ -126,7 +126,7 @@
v-for="(item,order) in expertSource"
:key="order"
:label="item.label"
:value="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
@@ -146,7 +146,7 @@
.dictionaryList"
:key="order"
:label="item.describe"
:value="item.describe"
:value="item.dictionaryCode"
/>
</el-select>
</el-form-item>
@@ -165,7 +165,7 @@
v-for="(item,order) in goodAtTree"
:key="order"
:label="item.label"
:value="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
@@ -205,12 +205,10 @@
</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 { getCurrentInstance, onMounted, ref } from 'vue'
import { storeToRefs } from 'pinia'
import store from '@/store'

@@ -262,17 +260,11 @@ onMounted(async () => {
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')
await getDictionaryData('technical_expertise')
await getDictionaryData('industry_sector')
await getDictionaryData('expert_source')
await getDictionaryData('good_at')
await getDictionaryData('other')
})
const copeData = (val) => {
const data = val.map((item) => {
@@ -341,30 +333,6 @@ const copeDictionaryData = (val) => { // 处理字典数据的方法
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 () {

}

defineExpose({
handleParmas
})
@@ -373,6 +341,7 @@ function handleParmas () {
const postdata = randomRules.value.map(item => {
return {
inviteType: 1,
id: item.id || '',
count: item.count,
expertDicts: getExpertDicts(item),
expertRegionList: getExpertRegionList(item),
@@ -412,21 +381,24 @@ function getExpertTags (item) {
const list = []
if (item.otherTag) {
list.push({
'tagType': 'other',
expertTag: 'other',
tagCodes: [item.otherTag]
tagCodes: [item.otherTag.split('##')[2]]
})
}
if (item.expertSource) {
list.push({
tagType: 'other',
expertTag: 'expert_source',
tagCodes: [item.expertSource]
tagCodes: [item.expertSource.split('##')[2]]
})
}

if (item.goodAt) {
list.push({
'tagType': 'good_at',
expertTag: 'good_at',
tagCodes: [item.goodAt]
tagCodes: [item.goodAt.split('##')[2]]
})
}

@@ -435,25 +407,27 @@ function getExpertTags (item) {
// ["industry_sector##制造业##4030000","4030000##酒、饮料及精制茶制造业##4030300"]
if (item.industrySector && Array.isArray(item.industrySector) && item.industrySector.length > 1) {
list.push({
'tagGeneralType': 'industry_sector',
expertTag: 'industry_sector',
tagCodes: [item.industrySector[1].split('##')[1]]
tagCodes: [item.industrySector[1].split('##')[2]]
})
}

if (item.technicalExpertise && Array.isArray(item.technicalExpertise) && item.technicalExpertise.length > 1) {
if (item.technicalExpertise.length === 2) {
list.push({
'tagGeneralType': 'technical_expertise',
expertTag: 'technical_expertise',
tagCodes: [item.technicalExpertise[1].split('##')[1]]
tagCodes: [item.technicalExpertise[1].split('##')[2]]
})
} else if (item.technicalExpertise.length === 3) {
list.push({
'tagGeneralType': 'technical_expertise',
expertTag: 'technical_expertise',
tagCodes: [item.technicalExpertise[2].split('##')[1]]
tagCodes: [item.technicalExpertise[2].split('##')[2]]
})
}
}

return list
}



+ 4
- 2
src/pages/expertManage/reviewMeeting/addMeeting/index.vue 查看文件

@@ -11,13 +11,13 @@ import store from '@/store'
import { useRouter } from 'vue-router'
import getTimeDiffer from '@/utils/getTimeDiffer.js'
import { ElMessageBox } from 'element-plus'
// import AvoidCom from '@/pages/expertManage/reviewMeeting/addMeeting/components/avoidCom.vue'
const { meetingTypeOptions, projectTypeOptions } = store.dictStore.globalDicts || {}
const { proxy } = getCurrentInstance(),
userInfo = storeToRefs(store.userStore).userInfo || {},
router = useRouter(),
ruleFormRef = ref(),
ruleFormComRef = ref(),
randowRules = ref([{}]),
ruleForm = reactive({
expertInviteRule: {
inviteType: 1,
@@ -400,6 +400,8 @@ onMounted(async () => {
label-suffix=":"
scroll-to-error
>

<!-- <avoid-com />-->
<el-card class="mb-16" shadow="never">
<template #header>
<div class="card-header">
@@ -608,7 +610,7 @@ onMounted(async () => {
v-if="ruleForm.expertInviteRule.inviteType == 1"
:gutter="20"
>
<rule-form-com ref="ruleFormComRef" v-model="randowRules" />
<rule-form-com ref="ruleFormComRef" />
</el-row>
<el-row
v-else


+ 30
- 16
src/pages/expertManage/reviewMeeting/meetingDetail/index.vue 查看文件

@@ -361,15 +361,18 @@ const { proxy } = getCurrentInstance(),
reloadLoaing.value = false
},
// 随机邀请人数是否足够
getIsEnough = () => {
if (!inviteExpertListData.value.inviteStatistics) return false
if (inviteExpertListData.value.inviteStatistics.filter(i => i.agreeCnt !== i.inviteCnt)?.length) {
return true
}
return false
},
// getIsEnough = () => {
// if (!inviteExpertListData.value.inviteStatistics) return false
// if (inviteExpertListData.value.inviteStatistics.filter(i => i.agreeCnt !== i.inviteCnt)?.length) {
// return true
// }
// return false
// },
// 续抽
continueInvites = () => {
refillDialogData.value.refillDialogVisible = true
refillDialogData.value.inviteRuleDetail = inviteRuleDetail.value
if (refillDialogData.value.refillDialogVisible) return
proxy.$messageBox
.confirm('续抽后,将重新通知已拒绝参会的专家们,确定继续吗?', '提示!', {
type: 'warning'
@@ -449,10 +452,21 @@ onMounted(async () => {
regionTree.value.push(res.data)
})
import RefillDialog from '@/pages/expertManage/reviewMeeting/addMeeting/components/RefillDialogCopy.vue'

const refillDialogData = ref({
refillDialogVisible: false,
inviteRuleDetail: {}
})
function refresh () {
setTimeout(() => {
getDetail()
getInviteExpertList()
}, 1000)
}
</script>

<template>
<refill-dialog :detail-data="inviteRuleDetail" />
<refill-dialog v-model="refillDialogData.refillDialogVisible" :detail-data="refillDialogData.inviteRuleDetail" @refresh="refresh" />
<el-card class="box-card">
<template #header>
<div class="card-header">
@@ -558,18 +572,18 @@ import RefillDialog from '@/pages/expertManage/reviewMeeting/addMeeting/componen
@click="toAppointInvite"
>转为指定抽取</el-button>
<el-button
v-if="basicInfo.status===1&&(basicInfo.invitedStopped||basicInfo.inviteStatus)&&getIsEnough()"
v-if="!basicInfo.confirmedRoster"
class="button"
type="primary"
plain
@click="continueInvites"
>续抽</el-button>
<!-- <el-button-->
<!-- v-if="basicInfo.status===1&&(basicInfo.invitedStopped||basicInfo.inviteStatus)&&!basicInfo.confirmedRoster"-->
<!-- class="button"-->
<!-- type="primary"-->
<!-- @click="reText(3)"-->
<!-- >确认召开会议</el-button>-->
<el-button
v-if="!basicInfo.confirmedRoster"
class="button"
type="primary"
@click="reText(3)"
>确认召开会议</el-button>
</div>
</div>
</template>
@@ -797,7 +811,7 @@ import RefillDialog from '@/pages/expertManage/reviewMeeting/addMeeting/componen
{{ ruleDialogData.data?.expertDicts?.find(i=>i.expertDict==='expert_type')?.dictCodes.join('、')||'-' }}
</el-descriptions-item>
<el-descriptions-item label="履职意向:">
{{ ruleDialogData.data?.intentionRegions?.map(i=>i.regionName).join('-') }}
{{ ruleDialogData.data?.intentionRegions?.map(i=>i?.regionName).join('-') }}
</el-descriptions-item>
<el-descriptions-item label="专家来源:">
{{ ruleDialogData.data?.expertTags?.find(i=>i.expertTag==='expert_source')?.tagCodes.join('、')||'-' }}


Loading…
取消
儲存