Selaa lähdekoodia

fix: bug

master
yxhc 5 päivää sitten
vanhempi
commit
f9e1650d5e
16 muutettua tiedostoa jossa 565 lisäystä ja 108 poistoa
  1. BIN
      dist.zip
  2. +5
    -1
      src/components/tableList/index.vue
  3. +3
    -0
      src/http/apis/expertManage/reviewMeeting.js
  4. +6
    -21
      src/pages/declareManage/projectDeclare/declarePage/components/basicInfo.vue
  5. +1
    -0
      src/pages/declareManage/projectDeclare/declarePage/index.vue
  6. +1
    -1
      src/pages/declareManage/projectDeclare/index.vue
  7. +404
    -0
      src/pages/expertManage/reviewMeeting/addMeeting/components/RefillDialog.vue
  8. +57
    -9
      src/pages/expertManage/reviewMeeting/addMeeting/index.vue
  9. +17
    -11
      src/pages/expertManage/reviewMeeting/meetingDetail/index.vue
  10. +7
    -6
      src/pages/login/index.vue
  11. +3
    -1
      src/pages/projectStoreManage/components/planList.vue
  12. +3
    -3
      src/pages/projectStoreManage/projectStore/projectDetail/components/basicInfo.vue
  13. +3
    -3
      src/pages/projectStoreManage/projectStore/projectDetail/components/implementationPlan.vue
  14. +8
    -5
      src/pages/toDoCenter/components/todoList.vue
  15. +45
    -45
      src/store/modules/dictionaries.js
  16. +2
    -2
      vite.config.js

BIN
dist.zip Näytä tiedosto


+ 5
- 1
src/components/tableList/index.vue Näytä tiedosto

@@ -104,7 +104,11 @@ onMounted(() => {
const tableDom = document.querySelector('#out-table')
emits('handleTable', tableDom)
})
defineExpose({ tableRef, pageParams, setRadio, toggleRowSelect, getSelectRows })

function clearSelection () {
tableRef.value.clearSelection()
}
defineExpose({ tableRef, pageParams, setRadio, toggleRowSelect, getSelectRows, clearSelection })
</script>

<template>


+ 3
- 0
src/http/apis/expertManage/reviewMeeting.js Näytä tiedosto

@@ -3,6 +3,9 @@ import http from '@/http'
export const getReviewMeetingList = params => http.get('/api/v1/meeting/listReviewProject', { params }) // 会议评审列表java
export const getMeetingProjectList = params => http.get('/api/v1/meeting/option/project', { params }) // 评审会议项目列表java
export const createMeeting = data => http.post('/api/v1/meeting/create', data) // 新建会议java

export const randomInviteExpect = data => http.post('/api/v1/meeting/random-invite-expect', data) // 新建会议java

export const meetingList = params => http.get('/api/v1/meeting/manager/meetingList', { params }) // 评审会议列表

export const meetingBasicInfo = meetingId => http.get(`/api/v1/meeting/basicInfo/${meetingId}`) // 会议详情-基本信息


+ 6
- 21
src/pages/declareManage/projectDeclare/declarePage/components/basicInfo.vue Näytä tiedosto

@@ -120,7 +120,6 @@ const
{ required: true, message: '请选择上级主管单位', trigger: 'change' }
],
buildDuration: [{ required: true, message: '请选择建设起止年限', trigger: 'change' }],
templateType: [{ required: true, message: '请选择绩效评价类型', trigger: 'change' }],
buildLevel: [{ required: true, message: '请选择建设层级', trigger: 'change' }],
lowestLevel: [{ required: true, message: '请选择贯通层级', trigger: 'change' }],
baseProjBasis: [{ required: true, message: '请选择立项依据', trigger: 'change' }],
@@ -220,7 +219,8 @@ const
// 回显
setFormData = (data) => {
formData.value = {
baseProjIsConfidentiality: data.baseProjIsConfidentiality || '01',
// baseProjIsConfidentiality: data.baseProjIsConfidentiality || '01',
baseProjIsConfidentiality: '01',
projectName: data.projectName,
projectType: data.projectType ? data.projectType : '01',
isFirst: data.isFirst,
@@ -240,7 +240,6 @@ const
higherSuperOrgCode: data.higherSuperOrgCode,
higherSuperOrg: data.higherSuperOrg,
buildDuration: data.beginTime && data.endTime ? [data.beginTime, data.endTime] : [],
templateType: data.templateType,
buildLevel: data.buildLevel,
lowestLevel: data.lowestLevel,
buildBasis: undefined,
@@ -395,8 +394,10 @@ const
isDisabledCreditCode = ref({}),
getCode = async (name, code) => {
const res = await getOrganizationByCode(code || userInfo.value.empPosUnitCode)
isDisabledCreditCode.value[name] = !!res.data.unifiedSocialCreditCode
formData.value[name] = res.data.unifiedSocialCreditCode || formData.value[name]
if (res.data && res.data.unifiedSocialCreditCode) {
isDisabledCreditCode.value[name] = !!res.data.unifiedSocialCreditCode
formData.value[name] = res.data.unifiedSocialCreditCode || formData.value[name]
}
},
// 选择负责人、联系人
userDialogData = reactive({
@@ -787,22 +788,6 @@ function changeProjectType () {
</el-col>
<template v-if="formData.baseProjIsConfidentiality==='01'">
<el-col :span="24">
<el-form-item label="绩效评价类型" prop="templateType">
<el-radio-group
v-model="formData.templateType"
:disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)"
>
<el-radio
v-for="(v,k) in templateTypeListData"
:key="k"
:label="v.id"
>
{{ v.name }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="建设层级" prop="buildLevel">
<el-radio-group v-model="formData.buildLevel">
<el-radio


+ 1
- 0
src/pages/declareManage/projectDeclare/declarePage/index.vue Näytä tiedosto

@@ -625,6 +625,7 @@ async function reuseItem (data) {
buildOrgName,
orgCreditCode,
...annualPaymentFormData,
baseProjIsConfidentiality: '02',
// 新项目不应该有状态
status: undefined
}


+ 1
- 1
src/pages/declareManage/projectDeclare/index.vue Näytä tiedosto

@@ -441,7 +441,7 @@ onMounted(async () => {
</el-row>

<el-dialog v-model="dialogVideVisible" title="项目申报教学视频" width="800">
<video src="http://www.heletech.com.cn/img/%E5%AE%98%E7%BD%91%E4%BB%8B%E7%BB%8D.mp4" controls></video>
<video style="width: 100%;" src="http://www.heletech.com.cn/img/%E5%AE%98%E7%BD%91%E4%BB%8B%E7%BB%8D.mp4" controls></video>
</el-dialog>
</template>
<style lang='less' scoped>


+ 404
- 0
src/pages/expertManage/reviewMeeting/addMeeting/components/RefillDialog.vue Näytä tiedosto

@@ -0,0 +1,404 @@
<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="(ele,index) in ExtractionRule"
: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="ExtractionRule.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="ruleForm.expertInviteRule.randomRules[index].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="ruleForm.expertInviteRule.randomRules[index].otherTag"
class="w-full"
clearable
placeholder="请选择"
@change="handleRandomRulesTags($event, index)"
@visible-change="getDictionaryData('other')"
>
<el-option
v-for="item in otherTree"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="专家级别" :label-width="100">
<el-cascader
v-model="ruleForm.expertInviteRule.randomRules[index].expertRegionLists"
clearable
:options="regionTree"
placeholder="请选择"
class="w-full"
:props="regionProps"
@change="handleExpertRegion($event, index)"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="内外围" :label-width="100">
<el-select
v-model="ruleForm.expertInviteRule.randomRules[index].expertType"
placeholder="请选择"
class="w-full"
clearable
@change="handleRandomRulesDictionary($event, index)"
>
<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.dictionaryCode+'##'+item.dictionaryType"
/>
</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
:options="regionTree"
class="w-full"
clearable
@change="handleExpertIntentionWorkRegions($event,index)"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="专家来源" :label-width="100">
<el-select
v-model="ruleForm.expertInviteRule.randomRules[index].expertSource"
class="w-full"
placeholder="请选择"
clearable
@change="handleRandomRulesTags($event, index)"
@visible-change="getDictionaryData('expert_source')"
>
<el-option
v-for="(item,order) in expertSource"
:key="order"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="职称级别" :label-width="100">
<el-select
v-model="ruleForm.expertInviteRule.randomRules[index].professionalLevel"
class="w-full"
placeholder="请选择"
clearable
@change="handleRandomRulesDictionary($event, index)"
>
<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.dictionaryCode+'##'+item.dictionaryType"
/>
</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="ruleForm.expertInviteRule.randomRules[index].goodAt"
class="w-full"
placeholder="请选择"
clearable
@change="handleRandomRulesTags($event, index)"
@visible-change="getDictionaryData('good_at')"
>
<el-option
v-for="(item,order) in goodAtTree"
:key="order"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="技术专长" :label-width="100">
<el-cascader
:options="technicalExpertiseTree"
placeholder="请选择"
class="w-full"
clearable
@change="handleRandomRulesTags($event, index)"
@visible-change="getDictionaryData('technical_expertise')"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="行业领域" :label-width="100">
<el-cascader
:options="industrySectorTree"
placeholder="请选择"
class="w-full"
clearable
@change="handleRandomRulesTags($event, index)"
@visible-change="getDictionaryData('industry_sector')"
/>
</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-card>
</template>
<script setup>
import { getCurrentInstance, onMounted, reactive, ref } 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'
const { proxy } = getCurrentInstance()
const ExtractionRule = ref([0])
const userInfo = storeToRefs(store.userStore).userInfo || {}
const ruleForm = reactive({
expertInviteRule: {
inviteType: 1,
randomRules: [{ expertDicts: [], expertTags: [] }],
appointRule: {},
avoidRule: {
avoidUnitIdList: [],
avoidOrgIdList: [],
expertIds: [],
avoidType: userInfo.value.regionName === '市本级' ? 2 : 1
}
},
meetingBasicInfo: {
isInnerProject: true
}
})

onMounted(async () => {
// 获取履职意向数据
const res = await districtList({ regionCode: 330500, regionLevel: 2 })
const regionRes = []
regionRes.push(res.data)
regionTree.value = copeData(regionRes)
})
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 (ruleForm.expertInviteRule.randomRules.length >= 5) {
proxy.$message.warning('最多添加5个规则')
return
}
ExtractionRule.value.push(ExtractionRule.value.length)
ruleForm.expertInviteRule.randomRules.push({ expertDicts: [], expertTags: [] })
}
const delExtractionRule = (index) => {
ruleForm.expertInviteRule.randomRules.splice(index, 1)
ExtractionRule.value.splice(index, 1)
}

// 处理抽取规则标签数据expertTags
const 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)
}
}
}
}

// 处理抽取规则字典数据expertDicts
const 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)
}
}
}
// 处理履职意向数据
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 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 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
}
}) || []
}
</script>
<style scoped lang="less">

</style>

+ 57
- 9
src/pages/expertManage/reviewMeeting/addMeeting/index.vue Näytä tiedosto

@@ -4,12 +4,13 @@ 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 { createMeeting } from '@/http/apis/expertManage/reviewMeeting'
import { createMeeting, randomInviteExpect } from '@/http/apis/expertManage/reviewMeeting'
import { districtList, 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 { proxy } = getCurrentInstance(),
userInfo = storeToRefs(store.userStore).userInfo || {},
@@ -268,19 +269,41 @@ const { proxy } = getCurrentInstance(),
ruleFormClone.meetingBasicInfo.endTime = ruleFormClone.meetingBasicInfo.times?.[1] || undefined
ruleFormClone.meetingBasicInfo.times = undefined
loading.value = true
try {
await createMeeting(ruleFormClone)
proxy.$message.success('提交成功!')
loading.value = false
router.go(-1)
} catch (e) {
loading.value = false
}

// 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)
} else {
console.log('error submit!', fields)
}
})
},
addMetting = async (ruleFormClone) => {
try {
await createMeeting(ruleFormClone)
proxy.$message.success('提交成功!')
loading.value = false
router.go(-1)
} catch (e) {
loading.value = false
}
},
// 添加项目
projectDialogData = reactive({
visible: false,
@@ -527,6 +550,29 @@ onMounted(async () => {
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('继续')
})
}
}

</script>

<template>
@@ -1150,6 +1196,8 @@ onMounted(async () => {
提交
</el-button>
<el-button @click="router.go(-1)">返回</el-button>
<el-button @click="beforeSubmit">测试</el-button>

</div>
</el-form>
<org-tree


+ 17
- 11
src/pages/expertManage/reviewMeeting/meetingDetail/index.vue Näytä tiedosto

@@ -129,7 +129,7 @@ const { proxy } = getCurrentInstance(),
label: '是否参加',
key: 'confirmedAttend',
prop: 'confirmedAttend',
render: row => h('span', `${row.noticeStatus === '已通知' && row.confirmedAttend ? '确认参加' : row.noticeStatus === '已通知' && !row.confirmedAttend ? '拒绝参加' : '-'}`)
render: row => h('span', row.status === 3 ? '是' : row.status === 4 || row.status === 5 || row.status === 7 ? '否' : '-')
},
{
label: '专家请假',
@@ -137,16 +137,10 @@ const { proxy } = getCurrentInstance(),
slot: 'leaved'
},
{
label: '语音通知状态',
key: 'noticeStatus',
prop: 'noticeStatus',
width: '200'
},
{
label: '语音通知时间',
key: 'noticeTime',
prop: 'noticeTime',
width: '200'
label: '操作',
slot: 'action',
width: '180',
fixed: 'right'
}
]),
column4 = reactive([
@@ -368,6 +362,7 @@ const { proxy } = getCurrentInstance(),
},
// 随机邀请人数是否足够
getIsEnough = () => {
if (!inviteExpertListData.value.inviteStatistics) return false
if (inviteExpertListData.value.inviteStatistics.filter(i => i.agreeCnt !== i.inviteCnt)?.length) {
return true
}
@@ -453,9 +448,11 @@ onMounted(async () => {
const res = await districtList()
regionTree.value.push(res.data)
})
// import RefillDialog from '@/pages/expertManage/reviewMeeting/addMeeting/components/RefillDialog.vue'
</script>

<template>
<!-- <refill-dialog />-->
<el-card class="box-card">
<template #header>
<div class="card-header">
@@ -642,6 +639,15 @@ onMounted(async () => {
<template #ruleId="{ scope }">
<a @click="viewRule(scope.row.ruleId)">规则{{ inviteRuleDetail?.randomRules?.findIndex(i => i.id === scope.row.ruleId)+1||'' }}</a>
</template>
<template #action="{ scope }">
<div v-if="!scope.row.status">
<a @click="confirmExpert(scope.row,true)">参会</a>
<a @click="confirmExpert(scope.row,false)">不参会</a>
</div>
<div v-else>
<span>-</span>
</div>
</template>
</table-list>
</el-card>
</template>


+ 7
- 6
src/pages/login/index.vue Näytä tiedosto

@@ -147,12 +147,13 @@ const getVerificationCodeFunc = async () => {
}
}
onMounted(() => {
var device = navigator.userAgent.toLowerCase()
if (/ipad|iphone|midp|rv:1.2.3.4|ucweb|android|windows ce|windows mobile/.test(device)) {
window.location.href = appName === '浙政钉' ? 'http://60.188.225.145:8090/' : 'http://lsmobile.ningdatech.com/'
} else {
autoLogin()
}
// var device = navigator.userAgent.toLowerCase()
// if (/ipad|iphone|midp|rv:1.2.3.4|ucweb|android|windows ce|windows mobile/.test(device)) {
// window.location.href = appName === '浙政钉' ? 'http://60.188.225.145:8090/' : 'http://lsmobile.ningdatech.com/'
// } else {
// autoLogin()
// }
autoLogin()
})
</script>



+ 3
- 1
src/pages/projectStoreManage/components/planList.vue Näytä tiedosto

@@ -223,10 +223,12 @@ onMounted(async () => {
})

function tabChange () {
getTableData()
reset()
column.value = columnType[queryProjectType.value]
// 清空选择的项目
selectProject.value = []

tableListRef.value.clearSelection()
}

const operationVisible = ref(false)


+ 3
- 3
src/pages/projectStoreManage/projectStore/projectDetail/components/basicInfo.vue Näytä tiedosto

@@ -269,9 +269,9 @@ onMounted(() => {
<!-- <el-descriptions-item label="财政编码">-->
<!-- {{ detailData.financialCode || '-' }}-->
<!-- </el-descriptions-item>-->
<el-descriptions-item label="绩效评价类型">
{{ templateTypeListData?.find(i => i.id === detailData.templateType)?.name || "-" }}
</el-descriptions-item>
<!-- <el-descriptions-item label="绩效评价类型">-->
<!-- {{ templateTypeListData?.find(i => i.id === detailData.templateType)?.name || "-" }}-->
<!-- </el-descriptions-item>-->
<el-descriptions-item
label="是否临时增补项目"
:span="2"


+ 3
- 3
src/pages/projectStoreManage/projectStore/projectDetail/components/implementationPlan.vue Näytä tiedosto

@@ -12,9 +12,9 @@ defineProps({
<el-descriptions-item label="项目开工时间">
{{ detailData.operation?.projectStartDate?.split(' ')[0]||'-' }}
</el-descriptions-item>
<el-descriptions-item label="初验时间">
{{ detailData.operation?.initialInspectionDate?.split(' ')[0]||'-' }}
</el-descriptions-item>
<!-- <el-descriptions-item label="初验时间">-->
<!-- {{ detailData.operation?.initialInspectionDate?.split(' ')[0]||'-' }}-->
<!-- </el-descriptions-item>-->
<el-descriptions-item label="试运行开始时间">
{{ detailData.operation?.startTrialOperationDate?.split(' ')[0]||'-' }}
</el-descriptions-item>


+ 8
- 5
src/pages/toDoCenter/components/todoList.vue Näytä tiedosto

@@ -49,7 +49,7 @@ const route = useRoute(),
const res = await toDoCenterList(props.state, {
...pageParams,
...searchForm,
isTemporaryAugment: activeName.value,
// isTemporaryAugment: activeName.value,
createOnMin: searchForm.times?.[0],
createOnMax: searchForm.times?.[1],
times: undefined,
@@ -138,10 +138,13 @@ onMounted(async () => {
</el-card>
<el-card class="w-full mt-8 tab-card">
<template #header>
<div class="flex justify-between items-center">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane :label="`非增补项目${notAppendNum&&route.name==='waitMeToHandle'?`(${notAppendNum})`:''}`" name="0" />
<el-tab-pane :label="`增补项目${appendNum&&route.name==='waitMeToHandle'?`(${appendNum})`:''}`" name="1" />
<div class="flex justify-between items-center p-5">
<el-tabs
v-model="activeName"
@tab-click="handleClick"
>
<el-tab-pane v-if="false" :label="`非增补项目${notAppendNum&&route.name==='waitMeToHandle'?`(${notAppendNum})`:''}`" name="0" />
<el-tab-pane v-if="false" :label="`增补项目${appendNum&&route.name==='waitMeToHandle'?`(${appendNum})`:''}`" name="1" />
</el-tabs>
<el-button
type="primary"


+ 45
- 45
src/store/modules/dictionaries.js Näytä tiedosto

@@ -366,52 +366,52 @@ export const useDictStore = defineStore('dictionaries', {
color: 'danger',
code: 10002
},
{
name: '待预审',
color: 'warning',
code: 10003
},
{
name: '省级部门联审中',
color: 'warning',
code: 10004
},
{
name: '省级部门联审不通过',
color: 'danger',
code: 10005
},
{
name: '省级部门联审通过',
color: 'success',
code: 10018
},
{
name: '预审中',
color: 'warning',
code: 10006
},
{
name: '预审不通过',
color: 'danger',
code: 10007
},
// {
// name: '待预审',
// color: 'warning',
// code: 10003
// },
// {
// name: '省级部门联审中',
// color: 'warning',
// code: 10004
// },
// {
// name: '省级部门联审不通过',
// color: 'danger',
// code: 10005
// },
// {
// name: '省级部门联审通过',
// color: 'success',
// code: 10018
// },
// {
// name: '预审中',
// color: 'warning',
// code: 10006
// },
// {
// name: '预审不通过',
// color: 'danger',
// code: 10007
// },
// {
// name: '待预审选择态',
// color: 'warning',
// code: 10017
// },

{
name: '部门联审中',
color: 'warning',
code: 10008
},
{
name: '部门联审不通过',
color: 'danger',
code: 10009
},
// {
// name: '部门联审中',
// color: 'warning',
// code: 10008
// },
// {
// name: '部门联审不通过',
// color: 'danger',
// code: 10009
// },
{
name: '年度计划中',
color: 'warning',
@@ -441,13 +441,13 @@ export const useDictStore = defineStore('dictionaries', {
name: '待立项批复',
color: 'warning',
code: 10014
},
{
name: '待应用注册',
color: 'warning',
code: 10021
}
// {
// name: '待应用注册',
// color: 'warning',
// code: 10021
// }
// {
// name: '待申报',
// color: 'warning',
// code: 10015


+ 2
- 2
vite.config.js Näytä tiedosto

@@ -47,8 +47,8 @@ export default defineConfig(() => {
host: '0.0.0.0',
proxy: {
'/pm': {
// 后台地址
target: 'http://121.199.28.40:9089',
// 后台地址 http://121.199.28.40:9089
target: 'http://hzxg.ningdatech.com/',
changeOrigin: true
}
}


Loading…
Peruuta
Tallenna