@@ -1,6 +1,7 @@ | |||||
<script setup name="App"> | <script setup name="App"> | ||||
// import store from '@/store' | // import store from '@/store' | ||||
// console.log(store.menuStore.menuArr) | // console.log(store.menuStore.menuArr) | ||||
// import Updater from '@/utils/updater' | // import Updater from '@/utils/updater' | ||||
// import { ElMessageBox } from 'element-plus' | // import { ElMessageBox } from 'element-plus' | ||||
// | // | ||||
@@ -275,7 +275,12 @@ const | |||||
declareAmount: data.declareAmount, | declareAmount: data.declareAmount, | ||||
annualPlanAmount: data.annualPlanAmount | annualPlanAmount: data.annualPlanAmount | ||||
} | } | ||||
const baseProjBasis = formData.value.baseProjBasis ? JSON.parse(JSON.stringify(formData.value.baseProjBasis)) : [] | |||||
let baseProjBasis = [] | |||||
try { | |||||
baseProjBasis = formData.value.baseProjBasis ? JSON.parse(JSON.stringify(formData.value.baseProjBasis)) : [] | |||||
} catch (e) { | |||||
baseProjBasis = [] | |||||
} | |||||
if (data?.baseProjBasis?.split(';')?.length) { | if (data?.baseProjBasis?.split(';')?.length) { | ||||
const dataIds = data?.baseProjBasis?.split(';') | const dataIds = data?.baseProjBasis?.split(';') | ||||
buildBasisTableData.value && buildBasisTableData.value.forEach(item => { | buildBasisTableData.value && buildBasisTableData.value.forEach(item => { | ||||
@@ -655,7 +655,7 @@ async function reuseItem (data) { | |||||
nextTick(() => { | nextTick(() => { | ||||
setData() | setData() | ||||
}) | }) | ||||
}, 200) | |||||
}, 300) | |||||
} | } | ||||
function changeProjectTypeResetForm () { | function changeProjectTypeResetForm () { | ||||
// nextTick(() => { | // nextTick(() => { | ||||
@@ -6,10 +6,12 @@ | |||||
destroy-on-close | destroy-on-close | ||||
@close="visible= false" | @close="visible= false" | ||||
> | > | ||||
<rule-form-com ref="ruleFormComRef" v-model="rules" /> | |||||
<avoid-com ref="avoidConRef" /> | |||||
<el-form ref="ruleFormRef" :model="rules"> | |||||
<rule-form-com ref="ruleFormComRef" v-model="rules" /> | |||||
<avoid-com ref="avoidConRef" /> | |||||
</el-form> | |||||
<template #footer> | <template #footer> | ||||
<el-button type="primary" size="small" @click="confirm"> | |||||
<el-button type="primary" size="small" @click="checkForm"> | |||||
确定 | 确定 | ||||
</el-button> | </el-button> | ||||
<el-button size="small" @click="visible=false"> | <el-button size="small" @click="visible=false"> | ||||
@@ -22,15 +24,18 @@ | |||||
<script setup> | <script setup> | ||||
import RuleFormCom from '@/pages/expertManage/reviewMeeting/addMeeting/components/ruleFormCom.vue' | import RuleFormCom from '@/pages/expertManage/reviewMeeting/addMeeting/components/ruleFormCom.vue' | ||||
import { ref, defineModel, watch, nextTick } from 'vue' | import { ref, defineModel, watch, nextTick } from 'vue' | ||||
import { continueInviteDisposable } from '@/http/apis/expertManage/reviewMeeting' | |||||
import { continueInviteDisposable, randomInviteExpect } from '@/http/apis/expertManage/reviewMeeting' | |||||
import { useRoute } from 'vue-router' | import { useRoute } from 'vue-router' | ||||
import AvoidCom from '@/pages/expertManage/reviewMeeting/addMeeting/components/avoidCom.vue' | import AvoidCom from '@/pages/expertManage/reviewMeeting/addMeeting/components/avoidCom.vue' | ||||
const { detailData } = defineProps({ | |||||
detailData: Object | |||||
import { ElMessageBox } from 'element-plus' | |||||
// import { ElMessageBox } from 'element-plus' | |||||
const { detailData, mettingDetail } = defineProps({ | |||||
detailData: Object, | |||||
mettingDetail: Object | |||||
}) | }) | ||||
const ruleFormComRef = ref() | const ruleFormComRef = ref() | ||||
const avoidConRef = ref() | const avoidConRef = ref() | ||||
const ruleFormRef = ref() | |||||
const rules = ref([{}]) | const rules = ref([{}]) | ||||
const visible = defineModel({ | const visible = defineModel({ | ||||
@@ -38,25 +43,70 @@ const visible = defineModel({ | |||||
default: false | default: false | ||||
}) | }) | ||||
const route = useRoute() | const route = useRoute() | ||||
function confirm () { | |||||
async function checkForm () { | |||||
// await continueInviteDisposable(postData) | |||||
// visible.value = false | |||||
// emits('refresh') | |||||
ruleFormRef.value.validate(async (valid, fields) => { | |||||
console.log(valid) | |||||
if (valid) { | |||||
console.log('sad') | |||||
await confirm() | |||||
} | |||||
}) | |||||
} | |||||
async function confirm () { | |||||
ruleFormComRef.value.handleParmas() | ruleFormComRef.value.handleParmas() | ||||
const postData = { | const postData = { | ||||
meetingId: route.query.id, | meetingId: route.query.id, | ||||
avoidRule: avoidConRef.value.getAvoidRule(), | avoidRule: avoidConRef.value.getAvoidRule(), | ||||
randomRules: ruleFormComRef.value.handleParmas() | randomRules: ruleFormComRef.value.handleParmas() | ||||
} | } | ||||
continueInviteDisposable(postData) | |||||
visible.value = false | |||||
emits('refresh') | |||||
const res = await randomInviteExpect({ | |||||
meetingBasicInfo: { | |||||
name: mettingDetail.meetingName, | |||||
startTime: mettingDetail.startTime, | |||||
endTime: mettingDetail.endTime | |||||
}, | |||||
expertInviteRule: postData | |||||
}) | |||||
const total = postData.randomRules.reduce((accumulator, currentItem) => { | |||||
return accumulator + currentItem.count | |||||
}, 0) | |||||
console.log(total) | |||||
if (res.data.canInvite < total) { | |||||
ElMessageBox.confirm('当前可邀请专家数量不足,是否继续邀请?', '提示', { | |||||
confirmButtonText: '确定', | |||||
cancelButtonText: '取消', | |||||
type: 'warning' | |||||
}).then(async () => { | |||||
// 继续邀请 | |||||
console.log('继续') | |||||
await continueInviteDisposable(postData) | |||||
visible.value = false | |||||
emits('refresh') | |||||
}) | |||||
} else { | |||||
await continueInviteDisposable(postData) | |||||
visible.value = false | |||||
emits('refresh') | |||||
} | |||||
// console.log(mettingDetail) | |||||
// await continueInviteDisposable(postData) | |||||
// visible.value = false | |||||
// emits('refresh') | |||||
} | } | ||||
const emits = defineEmits(['refresh']) | const emits = defineEmits(['refresh']) | ||||
watch( | watch( | ||||
() => detailData, | |||||
() => visible.value, | |||||
(newVal, oldVal) => { | (newVal, oldVal) => { | ||||
if (newVal && visible) { | |||||
if (newVal) { | |||||
const list = [] | const list = [] | ||||
newVal.randomRules.forEach(item => { | |||||
detailData.randomRules.forEach(item => { | |||||
let json = {} | let json = {} | ||||
if (item.formEditJson)json = JSON.parse(item.formEditJson) | if (item.formEditJson)json = JSON.parse(item.formEditJson) | ||||
list.push({ | list.push({ | ||||
@@ -66,7 +116,8 @@ watch( | |||||
}) | }) | ||||
nextTick(() => { | nextTick(() => { | ||||
rules.value = list | rules.value = list | ||||
avoidConRef.value.setNewData(newVal) | |||||
console.log(rules) | |||||
avoidConRef.value.setNewData(detailData) | |||||
}) | }) | ||||
} | } | ||||
} | } | ||||
@@ -1,10 +1,7 @@ | |||||
<script setup> | <script setup> | ||||
import { reactive, ref } from 'vue' | import { reactive, ref } from 'vue' | ||||
import { storeToRefs } from 'pinia' | |||||
import store from '@/store' | |||||
import AddExpertDialog from '@/pages/expertManage/reviewMeeting/addMeeting/components/addExpertDialog.vue' | import AddExpertDialog from '@/pages/expertManage/reviewMeeting/addMeeting/components/addExpertDialog.vue' | ||||
import OrgTree from '@/components/orgTree/index.vue' | import OrgTree from '@/components/orgTree/index.vue' | ||||
const userInfo = storeToRefs(store.userStore).userInfo || {} | |||||
const ruleForm = reactive({ | const ruleForm = reactive({ | ||||
expertInviteRule: { | expertInviteRule: { | ||||
@@ -15,7 +12,7 @@ const ruleForm = reactive({ | |||||
avoidUnitIdList: [{ 'organizationCode': 'GO_ff70e47bae684fdba0d64f4acab85661', 'name': '杭州宁达科技有限公司' }, { 'organizationCode': 'GO_13e5ef6615ae4b1293c4811b58e52955', 'name': '发改委' }, { 'organizationCode': 'GO_c50ee049114146dd80a8e1bb82812cd9', 'name': '委领导' }], | avoidUnitIdList: [{ 'organizationCode': 'GO_ff70e47bae684fdba0d64f4acab85661', 'name': '杭州宁达科技有限公司' }, { 'organizationCode': 'GO_13e5ef6615ae4b1293c4811b58e52955', 'name': '发改委' }, { 'organizationCode': 'GO_c50ee049114146dd80a8e1bb82812cd9', 'name': '委领导' }], | ||||
avoidOrgIdList: [], | avoidOrgIdList: [], | ||||
expertIds: [], | expertIds: [], | ||||
avoidType: userInfo.value.regionName === '市本级' ? 2 : 1 | |||||
avoidType: 3 | |||||
} | } | ||||
}, | }, | ||||
meetingBasicInfo: { | meetingBasicInfo: { | ||||
@@ -23,8 +20,6 @@ const ruleForm = reactive({ | |||||
} | } | ||||
}) | }) | ||||
const setNewData = (data) => { | const setNewData = (data) => { | ||||
console.log('11111111111111') | |||||
console.log(data) | |||||
ruleForm.expertInviteRule.avoidRule.avoidType = data.avoidInfo.avoidType | ruleForm.expertInviteRule.avoidRule.avoidType = data.avoidInfo.avoidType | ||||
if (data.avoidInfo.expert && Array.isArray(data.avoidInfo.experts)) { | if (data.avoidInfo.expert && Array.isArray(data.avoidInfo.experts)) { | ||||
@@ -46,7 +41,9 @@ const setNewData = (data) => { | |||||
ruleForm.expertInviteRule.avoidRule.avoidUnitIdList = list | ruleForm.expertInviteRule.avoidRule.avoidUnitIdList = list | ||||
} | } | ||||
ruleForm.expertInviteRule.avoidRule.weekInviteCount = data.avoidInfo.weekInviteCount | |||||
if (data.avoidInfo.weekInviteCount) { | |||||
ruleForm.expertInviteRule.avoidRule.weekInviteCount = data.avoidInfo.weekInviteCount | |||||
} | |||||
} | } | ||||
defineExpose({ | defineExpose({ | ||||
getAvoidRule, setNewData | getAvoidRule, setNewData | ||||
@@ -284,7 +281,7 @@ const closeTag3 = (index) => { | |||||
</div> | </div> | ||||
</el-form-item> | </el-form-item> | ||||
<el-form-item label="回避条线"> | |||||
<el-form-item v-if="false" label="回避条线"> | |||||
<el-select v-model="ruleForm.expertInviteRule.avoidRule.avoidOrgIdList" multiple> | <el-select v-model="ruleForm.expertInviteRule.avoidRule.avoidOrgIdList" multiple> | ||||
<el-option | <el-option | ||||
v-for="(item,index) in lineListData" | v-for="(item,index) in lineListData" | ||||
@@ -36,13 +36,12 @@ | |||||
<el-form-item | <el-form-item | ||||
label="邀请数量" | label="邀请数量" | ||||
:label-width="100" | :label-width="100" | ||||
:prop="`randomRules${index}.count`" | |||||
:rules="getRule(index)" | |||||
> | > | ||||
<!-- :prop="`randomRules[${index}].count`"--> | |||||
<!-- :rules=" [--> | |||||
<!-- { required: true, message: ' ', trigger: 'blur' }--> | |||||
<!-- ]"--> | |||||
<el-input-number | <el-input-number | ||||
v-model="rulesItem.count" | |||||
v-model="randomRules[index].count" | |||||
placeholder="请输入" | placeholder="请输入" | ||||
:min="1" | :min="1" | ||||
:controls="false" | :controls="false" | ||||
@@ -56,7 +55,7 @@ | |||||
<el-col :span="8"> | <el-col :span="8"> | ||||
<el-form-item label="其他标签" :label-width="100"> | <el-form-item label="其他标签" :label-width="100"> | ||||
<el-select | <el-select | ||||
v-model="rulesItem.otherTag" | |||||
v-model="randomRules[index].otherTag" | |||||
class="w-full" | class="w-full" | ||||
clearable | clearable | ||||
placeholder="请选择" | placeholder="请选择" | ||||
@@ -237,6 +236,7 @@ const randomRules = defineModel({ | |||||
} | } | ||||
] | ] | ||||
}) | }) | ||||
// const randomRules = ref([ | // const randomRules = ref([ | ||||
// { | // { | ||||
// // other##信息安全##5200000 | // // other##信息安全##5200000 | ||||
@@ -358,7 +358,8 @@ function getExpertRegionList (item) { | |||||
if (item.expertRegionList && Array.isArray(item.expertRegionList) && item.expertRegionList.length > 0) { | if (item.expertRegionList && Array.isArray(item.expertRegionList) && item.expertRegionList.length > 0) { | ||||
return item.expertRegionList.map(i => { | return item.expertRegionList.map(i => { | ||||
return { | return { | ||||
expertRegionCode: i[1].split('##')[0], expertRegionLevel: i[1].split('##')[2] | |||||
regionCode: i[1].split('##')[0], regionLevel: i[1].split('##')[2] | |||||
// expertRegionCode: i[1].split('##')[0], expertRegionLevel: i[1].split('##')[2] | |||||
} | } | ||||
}) | }) | ||||
} | } | ||||
@@ -447,7 +448,21 @@ function getExpertDicts (item) { | |||||
} | } | ||||
return list | return list | ||||
} | } | ||||
function getRule (index) { | |||||
// if (randomRules.value[index].count){ | |||||
// return | |||||
// } | |||||
return [ | |||||
{ required: true, message: ``, trigger: 'blur', | |||||
validator (rule, value, callback) { | |||||
if (randomRules.value[index].count) { | |||||
callback() | |||||
} else { | |||||
callback(new Error('')) | |||||
} | |||||
} } | |||||
] | |||||
} | |||||
</script> | </script> | ||||
<style scoped lang="less"> | <style scoped lang="less"> | ||||
@@ -6,7 +6,6 @@ import AddProjectDialog from './components/addProjectDialog.vue' | |||||
import ruleFormCom from './components/ruleFormCom.vue' | import ruleFormCom from './components/ruleFormCom.vue' | ||||
import { createMeeting, randomInviteExpect } from '@/http/apis/expertManage/reviewMeeting' | import { createMeeting, randomInviteExpect } from '@/http/apis/expertManage/reviewMeeting' | ||||
import { getBusinessstripLine } from '@/http/apis/commonApi' | import { getBusinessstripLine } from '@/http/apis/commonApi' | ||||
import { storeToRefs } from 'pinia' | |||||
import store from '@/store' | import store from '@/store' | ||||
import { useRouter } from 'vue-router' | import { useRouter } from 'vue-router' | ||||
import getTimeDiffer from '@/utils/getTimeDiffer.js' | import getTimeDiffer from '@/utils/getTimeDiffer.js' | ||||
@@ -14,7 +13,6 @@ import { ElMessageBox } from 'element-plus' | |||||
// import AvoidCom from '@/pages/expertManage/reviewMeeting/addMeeting/components/avoidCom.vue' | // import AvoidCom from '@/pages/expertManage/reviewMeeting/addMeeting/components/avoidCom.vue' | ||||
const { meetingTypeOptions, projectTypeOptions } = store.dictStore.globalDicts || {} | const { meetingTypeOptions, projectTypeOptions } = store.dictStore.globalDicts || {} | ||||
const { proxy } = getCurrentInstance(), | const { proxy } = getCurrentInstance(), | ||||
userInfo = storeToRefs(store.userStore).userInfo || {}, | |||||
router = useRouter(), | router = useRouter(), | ||||
ruleFormRef = ref(), | ruleFormRef = ref(), | ||||
ruleFormComRef = ref(), | ruleFormComRef = ref(), | ||||
@@ -27,7 +25,7 @@ const { proxy } = getCurrentInstance(), | |||||
avoidUnitIdList: [], | avoidUnitIdList: [], | ||||
avoidOrgIdList: [], | avoidOrgIdList: [], | ||||
expertIds: [], | expertIds: [], | ||||
avoidType: userInfo.value.regionName === '市本级' ? 2 : 1 | |||||
avoidType: 3 | |||||
} | } | ||||
}, | }, | ||||
@@ -35,6 +33,7 @@ const { proxy } = getCurrentInstance(), | |||||
isInnerProject: true | isInnerProject: true | ||||
} | } | ||||
}), | }), | ||||
randomRules = ref([{}]), | |||||
// 列表数据 | // 列表数据 | ||||
column = reactive([ | column = reactive([ | ||||
{ | { | ||||
@@ -610,7 +609,7 @@ onMounted(async () => { | |||||
v-if="ruleForm.expertInviteRule.inviteType == 1" | v-if="ruleForm.expertInviteRule.inviteType == 1" | ||||
:gutter="20" | :gutter="20" | ||||
> | > | ||||
<rule-form-com ref="ruleFormComRef" /> | |||||
<rule-form-com ref="ruleFormComRef" v-model="randomRules" /> | |||||
</el-row> | </el-row> | ||||
<el-row | <el-row | ||||
v-else | v-else | ||||
@@ -674,7 +673,7 @@ onMounted(async () => { | |||||
<el-col> | <el-col> | ||||
<el-form-item label="部门、条线回避规则" prop="expertInviteRule.avoidRule.avoidType"> | <el-form-item label="部门、条线回避规则" prop="expertInviteRule.avoidRule.avoidType"> | ||||
<el-select v-model="ruleForm.expertInviteRule.avoidRule.avoidType"> | <el-select v-model="ruleForm.expertInviteRule.avoidRule.avoidType"> | ||||
<el-option :value="1" label="回避单位" /> | |||||
<!-- <el-option :value="1" label="回避单位" />--> | |||||
<el-option :value="2" label="回避条线" /> | <el-option :value="2" label="回避条线" /> | ||||
<el-option :value="3" label="不回避" /> | <el-option :value="3" label="不回避" /> | ||||
</el-select> | </el-select> | ||||
@@ -772,7 +771,7 @@ onMounted(async () => { | |||||
</div> | </div> | ||||
</el-form-item> | </el-form-item> | ||||
<el-form-item label="回避条线"> | |||||
<el-form-item v-if="false" label="回避条线"> | |||||
<el-select v-model="ruleForm.expertInviteRule.avoidRule.avoidOrgIdList" multiple> | <el-select v-model="ruleForm.expertInviteRule.avoidRule.avoidOrgIdList" multiple> | ||||
<el-option | <el-option | ||||
v-for="(item,index) in lineListData" | v-for="(item,index) in lineListData" | ||||
@@ -463,10 +463,44 @@ function refresh () { | |||||
getInviteExpertList() | getInviteExpertList() | ||||
}, 1000) | }, 1000) | ||||
} | } | ||||
function getLzyx () { | |||||
if (ruleDialogData.data?.intentionRegions && Array.isArray(ruleDialogData.data?.intentionRegions)) { | |||||
return ruleDialogData.data?.intentionRegions?.map(i => { | |||||
if (i && i.regionName) { | |||||
return i.regionName | |||||
} else { | |||||
return '' | |||||
} | |||||
}).join('-') | |||||
} else { | |||||
return '-' | |||||
} | |||||
} | |||||
function getZjjb () { | |||||
if (ruleDialogData.data?.expertRegions && Array.isArray(ruleDialogData.data?.expertRegions)) { | |||||
return ruleDialogData.data?.expertRegions?.map(i => { | |||||
if (i && i.regionName) { | |||||
return i.regionName | |||||
} else { | |||||
return '' | |||||
} | |||||
}).join('-') | |||||
} else { | |||||
return '-' | |||||
} | |||||
} | |||||
// ruleDialogData.data?.expertRegions?.map(i=>i.regionName).join('-') | |||||
</script> | </script> | ||||
<template> | <template> | ||||
<refill-dialog v-model="refillDialogData.refillDialogVisible" :detail-data="refillDialogData.inviteRuleDetail" @refresh="refresh" /> | |||||
<refill-dialog | |||||
v-model="refillDialogData.refillDialogVisible" | |||||
:metting-detail="basicInfo" | |||||
:detail-data="refillDialogData.inviteRuleDetail" | |||||
@refresh="refresh" | |||||
/> | |||||
<el-card class="box-card"> | <el-card class="box-card"> | ||||
<template #header> | <template #header> | ||||
<div class="card-header"> | <div class="card-header"> | ||||
@@ -565,7 +599,7 @@ function refresh () { | |||||
<span>抽取情况</span> | <span>抽取情况</span> | ||||
<div> | <div> | ||||
<el-button | <el-button | ||||
v-if="basicInfo.invitedStopped||basicInfo.inviteStatus" | |||||
v-if="(basicInfo.invitedStopped||basicInfo.inviteStatus)&&basicInfo.status===1" | |||||
class="button" | class="button" | ||||
type="primary" | type="primary" | ||||
plain | plain | ||||
@@ -751,7 +785,9 @@ function refresh () { | |||||
type="primary" | type="primary" | ||||
@click="reText(1)" | @click="reText(1)" | ||||
>重发短信</el-button> | >重发短信</el-button> | ||||
<el-dropdown v-if="basicInfo.status===1&&basicInfo.confirmedRoster" class="ml-12" @command="handleCommand"> | |||||
<!-- v-if="basicInfo.status===1&&basicInfo.confirmedRoster"--> | |||||
<!-- 还没对接好先隐藏--> | |||||
<el-dropdown v-if="false" class="ml-12" @command="handleCommand"> | |||||
<el-button type="primary" plain> | <el-button type="primary" plain> | ||||
导出<el-icon class="el-icon--right"><arrow-down /></el-icon> | 导出<el-icon class="el-icon--right"><arrow-down /></el-icon> | ||||
</el-button> | </el-button> | ||||
@@ -811,7 +847,7 @@ function refresh () { | |||||
{{ ruleDialogData.data?.expertDicts?.find(i=>i.expertDict==='expert_type')?.dictCodes.join('、')||'-' }} | {{ ruleDialogData.data?.expertDicts?.find(i=>i.expertDict==='expert_type')?.dictCodes.join('、')||'-' }} | ||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="履职意向:"> | <el-descriptions-item label="履职意向:"> | ||||
{{ ruleDialogData.data?.intentionRegions?.map(i=>i?.regionName).join('-') }} | |||||
{{ getLzyx() }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="专家来源:"> | <el-descriptions-item label="专家来源:"> | ||||
{{ ruleDialogData.data?.expertTags?.find(i=>i.expertTag==='expert_source')?.tagCodes.join('、')||'-' }} | {{ ruleDialogData.data?.expertTags?.find(i=>i.expertTag==='expert_source')?.tagCodes.join('、')||'-' }} | ||||
@@ -832,7 +868,7 @@ function refresh () { | |||||
{{ ruleDialogData.data?.expertTags?.find(i=>i.expertTag==='other')?.tagCodes.join('、')||'-' }} | {{ ruleDialogData.data?.expertTags?.find(i=>i.expertTag==='other')?.tagCodes.join('、')||'-' }} | ||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="专家级别:"> | <el-descriptions-item label="专家级别:"> | ||||
{{ ruleDialogData.data?.expertRegions?.map(i=>i.regionName).join('-') }} | |||||
{{ getZjjb() }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="邀请数量:"> | <el-descriptions-item label="邀请数量:"> | ||||
{{ ruleDialogData.data.count }} | {{ ruleDialogData.data.count }} | ||||