feat(project-management): 优化前置流程选择功能

- 在项目申请详情页面添加基本数据传递
- 实现前置流程的更改和选择功能
- 优化前置流程数据的存储和展示
- 添加对不可重复选择的前置流程的校验
This commit is contained in:
dj
2025-05-05 20:15:13 +08:00
parent d76ef8ff9c
commit 0cc1b63ae7
4 changed files with 78 additions and 32 deletions

View File

@@ -142,17 +142,18 @@
</el-col>
<el-col :span="24" v-if="preProcessShow === 'EDIT'||title==='apply'">
<el-form-item label="前置流程" :required="preProcessRequired" prop="preProcess" :label-width="title==='apply'?130:125">
<el-button color="#DED0B2" @click="handleShowPreTable" style="margin-right: 10px">
{{
localFormData.preProcess && localFormData.preProcess?.length > 0 ? '更改' : sessionParams.preProcess && sessionParams.preProcess?.length > 0 ? '更改' : '请选择'
}}
</el-button>
<div v-for="(item,index) in getRequestName(localFormData.preProcess)" :key="item.requestId">
<a :href="item.baseUrl" target="_blank"
style="color: #2a99ff;cursor: pointer">{{ item.requestName }}<span
v-if="index != localFormData.preProcess?.length -1"></span>
</a>
</div>
<select-pre-process :formData="localFormData" :basicData="basicData"/>
<!-- <el-button color="#DED0B2" @click="handleShowPreTable" style="margin-right: 10px">-->
<!-- {{-->
<!-- localFormData.preProcess && localFormData.preProcess?.length > 0 ? '更改' : sessionParams.preProcess && sessionParams.preProcess?.length > 0 ? '更改' : '请选择'-->
<!-- }}-->
<!-- </el-button>-->
<!-- <div v-for="(item,index) in getRequestName(localFormData.preProcess)" :key="item.requestId">-->
<!-- <a :href="item.baseUrl" target="_blank"-->
<!-- style="color: #2a99ff;cursor: pointer">{{ item.requestName }}<span-->
<!-- v-if="index != localFormData.preProcess?.length -1"></span>-->
<!-- </a>-->
<!-- </div>-->
</el-form-item>
</el-col>
</el-row>
@@ -287,6 +288,10 @@ const props = defineProps({
type: Object,
default: {}
},
basicData: {
type: Object,
default: {}
},
formData: {
type: Object,
default: {}
@@ -563,9 +568,15 @@ const choosePreProcess = () => {
requestName: item.requestName,
baseUrl: item.baseUrl
}
preProcessArray.push(preProcessObj)
if(props.mode === 'resubmit'){
localFormData.value.preProcess.push(preProcessObj)
}else{
preProcessArray.push(preProcessObj)
}
})
localFormData.value.preProcess = preProcessArray
if(props.mode !== 'resubmit'){
localFormData.value.preProcess = preProcessArray
}
showPreTable.value = false
localStorage.setItem('preProcess', JSON.stringify(preProcessArray))
}
@@ -782,7 +793,7 @@ const handleSubmit = async (instance) => {
params.projectPersonIds = projectPersonIds
params.optionalChargeLeadership = optionalChargeLeadershipList.value
if (props.mode === 'resubmit') {
// res = await resubmitApply(params)
res = await resubmitApply(params)
} else {
res = await projectApply(params)
}
@@ -830,7 +841,6 @@ const init = async () => {
let data = res.data
deploymentId.value = data.deploymentId
deploymentData.value = data
console.log('data,',data)
// preProcessRequired.value = data.deploymentName === '重大项目立项' || data.deploymentName === '重大项目验收';
processStore.setDesign(data)
processStore.runningList.value = data.runningList;
@@ -867,7 +877,6 @@ watchEffect(() => {
// if (props.formData.projectChargePerson != null) {
// localFormData.value.projectChargePerson = props.formData.projectChargePerson.id
// }
console.log('localFormData.value',localFormData.value)
if (localStorage.getItem('preProcess')) {
let param = JSON.parse(localStorage.getItem('preProcess'))
localFormData.value.preProcess = param

View File

@@ -28,7 +28,8 @@
</el-form>
<el-table :data="preProcessList" v-loading="loading"
@select="handleSelect" @select-all="handleSelect" row-key="requestId" ref="preProcessTable">
<el-table-column type="selection" width="55" :reserve-selection="true"/>
<el-table-column type="selection" width="55" :reserve-selection="true"
:selectable="checkSelectable"/>
<el-table-column prop="requestId" label="请求id"></el-table-column>
<el-table-column prop="requestName" label="请求名称"></el-table-column>
<el-table-column prop="lastOperatorName" label="最后操作人名称"></el-table-column>
@@ -70,11 +71,13 @@ const props = defineProps({
})
const loading = ref(false)
//暂存数据
const originalProcess = ref([])
const currentList = ref([])
const showPreTable = ref(false)
const selectRows = ref([])
const preProcessList = ref([])
const total = ref(0)
const preProcessTable = ref()
const localFormData = ref({
projectPersonIds: [],
projectChargePerson: null,
@@ -118,8 +121,33 @@ const handleReset = () => {
const handleSelect = async (selection) => {
selectRows.value = selection
}
const checkSelectable=(row)=>{
const detailProcessStr = localStorage.getItem('detailProcess');
let preProcessArray = []
if (detailProcessStr) {
try {
preProcessArray = JSON.parse(detailProcessStr)
} catch (e) {
preProcessArray=[]
}
if (preProcessArray&&preProcessArray.length > 0) {
for (let i = 0; i < preProcessArray.length; i++) {
return preProcessArray[i].requestId !== row.requestId;
}
}else{
return true
}
}
}
const handleShowPreTable = () => {
showPreTable.value = true
nextTick(() => {
localFormData.value.preProcess?.forEach((item) => {
if (preProcessTable.value) {
preProcessTable.value.toggleRowSelection(item, true)
}
})
})
getPreProcessList()
}
const handleCancel = () => {
@@ -129,17 +157,30 @@ const handleCancel = () => {
const choosePreProcess = () => {
let preProcessObj = {}
let preProcessArray = []
const detailProcessStr = localStorage.getItem('detailProcess');
try {
originalProcess.value = JSON.parse(detailProcessStr)
} catch (e) {
originalProcess.value=[]
}
selectRows.value.forEach((item) => {
preProcessObj = {
requestId: item.requestId,
requestName: item.requestName,
baseUrl: item.baseUrl
const exists = originalProcess.value?.some(dp => dp.requestId === item.requestId)
if (!exists) {
preProcessObj = {
requestId: item.requestId,
requestName: item.requestName,
baseUrl: item.baseUrl
}
preProcessArray.push(preProcessObj)
}
preProcessArray.push(preProcessObj)
})
localFormData.value.preProcess = preProcessArray
showPreTable.value = false
if(props.formData.mode === 'view'||props.formData.mode === 'resubmit'){
localFormData.value.preProcess = [...originalProcess.value,...preProcessArray]
}else{
localFormData.value.preProcess = preProcessArray
}
localStorage.setItem('preProcess', JSON.stringify(preProcessArray))
showPreTable.value = false
}
const getPreProcessList = () => {
@@ -154,13 +195,6 @@ const getPreProcessList = () => {
searchArray.push(item)
}
})
// res.data.forEach((item) => {
// localFormData.value.preProcess.forEach((item1) => {
// if (item.requestId == item1.requestId) {
// preProcessTable.value.toggleRowSelection(item)
// }
// })
// })
total.value = searchArray.length
currentList.value = searchArray
preProcessList.value = currentList.value.slice(0, 10)
@@ -177,6 +211,7 @@ const handleCurrentChange = (val) => {
pageInfo.pageNum = val;
preProcessList.value = currentList.value.slice((val - 1) * pageInfo.pageSize, val * pageInfo.pageSize)
};
watchEffect(() => {
return Object.keys(props.formData).length && (localFormData.value = props.formData)
})

View File

@@ -1,6 +1,6 @@
<template>
<div class="link-box">
<el-scrollbar noresize height="34" >
<el-scrollbar noresize height="36" >
<!-- style="display: flex"-->
<div >
<router-link

View File

@@ -50,6 +50,7 @@
:mode="mode"
:step="showActive"
:data="detailData"
:basicData="basicData"
:preProcessShow="preProcessShow"
:formData="detailData.formData"/>
</template>
@@ -115,6 +116,7 @@ const getAllInfo = async (state) => {
if (code === 1000) {
data.formData.preProcess = data.formData.preProcess ? JSON.parse(data.formData.preProcess) : undefined
detailData.value = data
localStorage.setItem('detailProcess', JSON.stringify(data.formData.preProcess))
mode.value = data.formData.mode
processStore.setDesign(data)
processStore.runningList.value = data.runningList;