diff --git a/src/pages/expertManage/reviewMeeting/addMeeting/components/ruleFormCom.vue b/src/pages/expertManage/reviewMeeting/addMeeting/components/ruleFormCom.vue new file mode 100644 index 0000000..ebd4c91 --- /dev/null +++ b/src/pages/expertManage/reviewMeeting/addMeeting/components/ruleFormCom.vue @@ -0,0 +1,480 @@ + + + diff --git a/src/pages/expertManage/reviewMeeting/addMeeting/index.vue b/src/pages/expertManage/reviewMeeting/addMeeting/index.vue index f4a708b..cbea587 100644 --- a/src/pages/expertManage/reviewMeeting/addMeeting/index.vue +++ b/src/pages/expertManage/reviewMeeting/addMeeting/index.vue @@ -3,19 +3,21 @@ import { reactive, ref, onMounted, getCurrentInstance } from 'vue' import OrgTree from '@/components/orgTree/index.vue' import AddExpertDialog from './components/addExpertDialog.vue' import AddProjectDialog from './components/addProjectDialog.vue' -import { getDictionaryTree } from '@/http/apis/expertManage/expertStore' +import ruleFormCom from './components/ruleFormCom.vue' import { createMeeting, randomInviteExpect } from '@/http/apis/expertManage/reviewMeeting' -import { districtList, getBusinessstripLine } from '@/http/apis/commonApi' +import { getBusinessstripLine } from '@/http/apis/commonApi' import { storeToRefs } from 'pinia' import store from '@/store' import { useRouter } from 'vue-router' import getTimeDiffer from '@/utils/getTimeDiffer.js' import { ElMessageBox } from 'element-plus' -const { dictList } = storeToRefs(store.dictStore), { meetingTypeOptions, projectTypeOptions } = store.dictStore.globalDicts || {} +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, @@ -33,58 +35,6 @@ const { proxy } = getCurrentInstance(), isInnerProject: true } }), - // 处理抽取规则字典数据expertDicts - handleRandomRulesDictionary = ($event, index) => { - if (!$event) { - ruleForm.expertInviteRule.randomRules[index].expertDicts = [] - return - } - const dictType = $event.split('##')[1] - const dictObj = { dictCodes: [$event.split('##')[0]], expertDict: dictType } - if (ruleForm.expertInviteRule.randomRules[index].expertDicts.length === 0) { - ruleForm.expertInviteRule.randomRules[index].expertDicts.push(dictObj) - } else { - const order = ruleForm.expertInviteRule.randomRules[index].expertDicts.findIndex(i => i.expertDict === dictType) - if (order !== -1) { ruleForm.expertInviteRule.randomRules[index].expertDicts.splice(order, 1, dictObj) } else { - ruleForm.expertInviteRule.randomRules[index].expertDicts.push(dictObj) - } - } - }, - // 处理抽取规则标签数据expertTags - handleRandomRulesTags = ($event, index) => { - let tagGeneralType // 级联选择器标签总类型 - let tagType // select选择器标签总类型 - let dictObj - if (!$event) { - dictObj = undefined - ruleForm.expertInviteRule.randomRules[index].expertTags = [] - return - } else if (Array.isArray($event)) { // 处理级联选择器,数组型数据 - tagGeneralType = $event[0].split('##')[0] - tagType = $event[$event.length - 1].split('##')[0] - dictObj = { tagGeneralType, tagCodes: [$event[$event.length - 1].split('##')[2]], expertTag: tagGeneralType } - } else { // 处理select选择器,字符串型数据 - tagType = $event.split('##')[0] - dictObj = { tagType, tagCodes: [$event.split('##')[2]], expertTag: tagType } - } - if (ruleForm.expertInviteRule.randomRules[index].expertTags.length === 0) { - ruleForm.expertInviteRule.randomRules[index].expertTags.push(dictObj) - } else { - if (Array.isArray($event)) { - // (级联选择器数组型)判断选择的数据是否已经存在,若存在替换之前的数据,否则直接添加当前数据 - const order = ruleForm.expertInviteRule.randomRules[index].expertTags.findIndex(i => i.tagGeneralType === tagGeneralType) - if (order !== -1) { ruleForm.expertInviteRule.randomRules[index].expertTags.splice(order, 1, dictObj) } else { - ruleForm.expertInviteRule.randomRules[index].expertTags.push(dictObj) - } - } else { - // (select选择器字符串型)同理 - const order = ruleForm.expertInviteRule.randomRules[index].expertTags.findIndex(i => i.tagType === tagType) - if (order !== -1) { ruleForm.expertInviteRule.randomRules[index].expertTags.splice(order, 1, dictObj) } else { - ruleForm.expertInviteRule.randomRules[index].expertTags.push(dictObj) - } - } - } - }, // 列表数据 column = reactive([ { @@ -205,33 +155,7 @@ const { proxy } = getCurrentInstance(), // 处理随机抽取规则数据 if (ruleForm.expertInviteRule.inviteType === 1) { delete ruleFormClone.expertInviteRule.appointRule // 随机抽取,删除指定抽取空对象 - 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 - } - }) - }) + ruleFormClone.expertInviteRule.randomRules = ruleFormComRef.value.handleParmas() } else { // 处理指定抽取规则数据 delete ruleFormClone.expertInviteRule.randomRules // 指定抽取,删除随机抽取空对象 ruleFormClone.expertInviteRule.appointRule['inviteType'] = ruleFormClone.expertInviteRule.inviteType @@ -420,109 +344,7 @@ const { proxy } = getCurrentInstance(), selectExpertType.value = 2 unitUserDialogData.visible = true unitUserDialogData.data = ruleForm.expertInviteRule.avoidRule?.expertIds || [] - }, - // 添加/删除抽取规则 - ExtractionRule = ref([0]), - addExtractionRule = () => { - if (ruleForm.expertInviteRule.randomRules.length >= 5) { - proxy.$message.warning('最多添加5个规则') - return - } - ExtractionRule.value.push(ExtractionRule.value.length) - ruleForm.expertInviteRule.randomRules.push({ expertDicts: [], expertTags: [] }) - }, - delExtractionRule = (index) => { - ruleForm.expertInviteRule.randomRules.splice(index, 1) - ExtractionRule.value.splice(index, 1) } -// 各种字典数据 -const technicalExpertiseTree = ref([])// 技术专长 -const industrySectorTree = ref([])// 行业领域 -const expertSource = ref([])// 专家来源 -const goodAtTree = ref([])// 擅长 -const otherTree = ref([])// 其他标签 -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 handleExpertRegion = ($event, index) => { - console.log(ruleForm.expertInviteRule.randomRules[index].expertRegionLists) - ruleForm.expertInviteRule.randomRules[index].expertRegionList = ruleForm.expertInviteRule.randomRules[index].expertRegionLists?.map(i => { - return { - regionCode: i[i.length - 1]?.split('##')[0], - regionLevel: i[i.length - 1]?.split('##')[2] * 1 - } - }) || [] - // let regionArr = [] - // if (!$event) { - // regionArr = [] - // } else { - // regionArr = $event.pop().split('##') - // } - // const regionCode = regionArr?.[0] - // const regionLevel = regionArr?.[2] - // ruleForm.expertInviteRule.randomRules[index].expertRegionCode = regionCode - // ruleForm.expertInviteRule.randomRules[index].expertRegionLevel = regionLevel -} -// 处理履职意向数据 -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 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 regionTree = ref([]) -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 isInnerProjectChange = (val) => { if (val) { @@ -535,42 +357,36 @@ const isInnerProjectChange = (val) => { changeType = () => { ruleForm.meetingBasicInfo.projectIdList = [] }, - regionProps = ref({ multiple: true }), lineListData = ref([]), getLineList = async () => { const res = await getBusinessstripLine() lineListData.value = res.data } onMounted(async () => { - // 获取履职意向数据 - const res = await districtList({ regionCode: 330500, regionLevel: 2 }) - const regionRes = [] - regionRes.push(res.data) - regionTree.value = copeData(regionRes) getLineList() }) -async function beforeSubmit () { - const xx = '{"expertInviteRule":{"inviteType":1,"randomRules":[{"expertDicts":[{"dictCodes":["300000"],"expertDict":"expert_type"},{"dictCodes":["900001"],"expertDict":"title_level"}],"expertTags":[{"tagType":"other","tagCodes":["5300000"],"expertTag":"other"},{"tagType":"expert_source","tagCodes":["1020000"],"expertTag":"expert_source"},{"tagGeneralType":"industry_sector","tagCodes":["4040300"],"expertTag":"industry_sector"},{"tagGeneralType":"technical_expertise","tagCodes":["3010102"],"expertTag":"technical_expertise"},{"tagType":"good_at","tagCodes":["2010000"],"expertTag":"good_at"}],"count":12,"expertRegionList":[{"regionCode":"330502","regionLevel":3}],"intentionRegionCode":"330500","intentionRegionLevel":"3","inviteType":1}],"avoidRule":{"avoidUnitIdList":["GO_3bc86256687a4884ae410af00682b762"],"avoidOrgIdList":[],"expertIds":[172],"avoidType":2,"weekInviteCount":1}},"meetingBasicInfo":{"isInnerProject":true,"name":"测试","type":"2","projectIdList":[{"buildOrg":"发改委","createOn":"2024-08-21 17:12","declaredAmount":20,"id":1000,"projectCode":"33050000020240100074","projectName":"725预审撤回测试","projectType":"02","projectYear":2024}],"meetingUsageTime":2,"judgesAttendanceTime":"2024-09-15 00:00","meetingAddress":"111","connecter":"的","contact":"18181818181","innerProjects":[{"projectId":1000,"projectCode":"33050000020240100074"}],"startTime":"2024-09-15 00:00","endTime":"2024-09-18 00:00"}}\n' - - const postData = JSON.parse(xx) - - const res = await randomInviteExpect(postData) - const total = postData.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('继续') - }) - } -} +// async function beforeSubmit () { +// const xx = '{"expertInviteRule":{"inviteType":1,"randomRules":[{"expertDicts":[{"dictCodes":["300000"],"expertDict":"expert_type"},{"dictCodes":["900001"],"expertDict":"title_level"}],"expertTags":[{"tagType":"other","tagCodes":["5300000"],"expertTag":"other"},{"tagType":"expert_source","tagCodes":["1020000"],"expertTag":"expert_source"},{"tagGeneralType":"industry_sector","tagCodes":["4040300"],"expertTag":"industry_sector"},{"tagGeneralType":"technical_expertise","tagCodes":["3010102"],"expertTag":"technical_expertise"},{"tagType":"good_at","tagCodes":["2010000"],"expertTag":"good_at"}],"count":12,"expertRegionList":[{"regionCode":"330502","regionLevel":3}],"intentionRegionCode":"330500","intentionRegionLevel":"3","inviteType":1}],"avoidRule":{"avoidUnitIdList":["GO_3bc86256687a4884ae410af00682b762"],"avoidOrgIdList":[],"expertIds":[172],"avoidType":2,"weekInviteCount":1}},"meetingBasicInfo":{"isInnerProject":true,"name":"测试","type":"2","projectIdList":[{"buildOrg":"发改委","createOn":"2024-08-21 17:12","declaredAmount":20,"id":1000,"projectCode":"33050000020240100074","projectName":"725预审撤回测试","projectType":"02","projectYear":2024}],"meetingUsageTime":2,"judgesAttendanceTime":"2024-09-15 00:00","meetingAddress":"111","connecter":"的","contact":"18181818181","innerProjects":[{"projectId":1000,"projectCode":"33050000020240100074"}],"startTime":"2024-09-15 00:00","endTime":"2024-09-18 00:00"}}\n' +// +// const postData = JSON.parse(xx) +// +// const res = await randomInviteExpect(postData) +// const total = postData.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('继续') +// }) +// } +// } @@ -792,212 +608,7 @@ async function beforeSubmit () { v-if="ruleForm.expertInviteRule.inviteType == 1" :gutter="20" > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 添加规则 - - + 返回 - 测试 +