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

View File

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

View File

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

View File

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