Merge pull request 'fix : 修复人员取消功能' (#718) from dd into master

Reviewed-on: http://git.feashow.cn/clay/mosr-web/pulls/718
This commit is contained in:
2024-08-16 16:13:39 +00:00
6 changed files with 115 additions and 66 deletions

View File

@@ -42,7 +42,7 @@
{{ item.name }} {{ item.name }}
</div> </div>
<user-picker :multiple="false" ref="projectChargePersonUserPicker" title="请选择项目负责人" <user-picker :multiple="false" ref="projectChargePersonUserPicker" title="请选择项目负责人"
v-model:value="projectChargePersonUserList" @ok="projectChargePersonUserPickerOk"/> v-model:value="projectChargePersonUserList" @ok="projectChargePersonUserPickerOk" @cancelOrClear="projectChargePersonUserPickerCancel"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6" v-if="title==='apply'"> <el-col :span="6" v-if="title==='apply'">
@@ -55,23 +55,21 @@
{{ item.name }}{{index != getProjectPerson(projectPersonUserList)?.length - 1 ? '' : ''}} {{ item.name }}{{index != getProjectPerson(projectPersonUserList)?.length - 1 ? '' : ''}}
</div> </div>
<user-picker :multiple="true" ref="projectPersonUserPicker" title="请选择项目成员" <user-picker :multiple="true" ref="projectPersonUserPicker" title="请选择项目成员"
v-model:value="projectPersonUserList" @ok="projectPersonUserPickerOk"/> v-model:value="projectPersonUserList" @ok="projectPersonUserPickerOk" @cancelOrClear="projectPersonUserPickerCancel"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6" v-if="title==='apply'||title==='check'"> <el-col :span="6" v-if="title==='apply'||title==='check'">
<el-form-item label="部门分管领导" :label-width="title==='check'?110:115" <el-form-item label="部门分管领导" :label-width="title==='check'?110:115">
>
<el-button color="#DED0B2" style="margin-right: 10px" @click="handleShowOptionalChargeLeadershipPicker"> <el-button color="#DED0B2" style="margin-right: 10px" @click="handleShowOptionalChargeLeadershipPicker">
{{ {{
optionalChargeLeadershipList?.length !== 0 ? '更改' : getOptionalChargeLeadershipList(optionalChargeLeadershipList) ? '更改' : '请选择' optionalChargeLeadershipList?.length !== 0 ? '更改' : getOptionalChargeLeadershipList(optionalChargeLeadershipList) ? '更改' : '请选择'
}} }}
</el-button> </el-button>
<div v-for="(item,index) in getOptionalChargeLeadershipList(optionalChargeLeadershipList)" :key="item.id" <div v-for="(item,index) in getOptionalChargeLeadershipList(optionalChargeLeadershipList)" :key="item.id">
> {{ item.name }}{{index != getOptionalChargeLeadershipList(optionalChargeLeadershipList)?.length - 1 ? '' : ''}}
{{ item.name }}{{index != getProjectPerson(projectPersonUserList)?.length - 1 ? '' : ''}}
</div> </div>
<user-picker :multiple="true" ref="optionalChargeLeadershipPickerRef" title="请选择部门分管领导" <user-picker :multiple="true" ref="optionalChargeLeadershipPickerRef" title="请选择部门分管领导"
v-model:value="optionalChargeLeadershipList" @ok="optionalChargeLeaderPickerOk"/> v-model:value="optionalChargeLeadershipList" @ok="optionalChargeLeaderPickerOk" @cancelOrClear="optionalChargeLeaderPickerCancel"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" v-if="preProcessShow === 'EDIT'"> <el-col :span="24" v-if="preProcessShow === 'EDIT'">
@@ -342,7 +340,14 @@ const handleShowOptionalChargeLeadershipPicker = () => {
const optionalChargeLeaderPickerOk = (userList) => { const optionalChargeLeaderPickerOk = (userList) => {
optionalChargeLeadershipList.value = userList optionalChargeLeadershipList.value = userList
localStorage.setItem('optionalChargeLeadershipList', JSON.stringify(optionalChargeLeadershipList.value)) if(userList?.length>0){
localStorage.setItem('optionalChargeLeadershipList', JSON.stringify(optionalChargeLeadershipList.value))
}else {
localStorage.removeItem('optionalChargeLeadershipList')
}
}
const optionalChargeLeaderPickerCancel = (userList) => {
optionalChargeLeadershipList.value = userList
} }
const clickToPreview = (row) => { const clickToPreview = (row) => {
@@ -471,19 +476,29 @@ const handleShowProjectChargePersonTable = () => {
} }
const projectChargePersonUserPickerOk = (userList) => { const projectChargePersonUserPickerOk = (userList) => {
projectChargePersonUserList.value = userList projectChargePersonUserList.value = userList
localStorage.setItem('projectChargePersonUserList', JSON.stringify(projectChargePersonUserList.value)) if(userList?.length>0){
localStorage.setItem('projectChargePersonUserList', JSON.stringify(projectChargePersonUserList.value))
}else {
localStorage.removeItem('projectPersonUserList')
}
} }
const handleShowProjectPersonTable = () => { const handleShowProjectPersonTable = () => {
projectPersonUserPicker.value.showUserPicker() projectPersonUserPicker.value.showUserPicker()
} }
const projectChargePersonUserPickerCancel=(userList)=>{
projectChargePersonUserList.value = userList
}
const projectPersonUserPickerCancel=(userList)=>{
projectPersonUserList.value = userList
}
const projectPersonUserPickerOk = (userList) => { const projectPersonUserPickerOk = (userList) => {
projectPersonUserList.value = userList projectPersonUserList.value = userList
localStorage.setItem('projectPersonUserList', JSON.stringify(userList)) if(userList?.length>0){
// let userIds = [] localStorage.setItem('projectPersonUserList', JSON.stringify(userList))
// for (const user of userList) { }else {
// userIds.push(user.id) localStorage.removeItem('projectPersonUserList')
// } }
} }
const getPreProcessList = () => { const getPreProcessList = () => {
loading.value = true loading.value = true
@@ -604,6 +619,7 @@ const getFileParam = (item) => {
} }
} }
const handleSubmit = async () => { const handleSubmit = async () => {
console.log(' projectPersonUserList.value', projectPersonUserList.value)
let files = [] let files = []
if (props.mode === 'resubmit') { if (props.mode === 'resubmit') {
attachment.value.allFileList.forEach(item => { attachment.value.allFileList.forEach(item => {

View File

@@ -106,7 +106,7 @@
</el-row> </el-row>
</el-form> </el-form>
<user-picker :multiple="false" ref="userPicker" title="请选择研发人员" v-model:value="userList" <user-picker :multiple="false" ref="userPicker" title="请选择研发人员" v-model:value="userList"
@ok="selectedResearchPersonnel" @ok="selectedResearchPersonnel" @cancelOrClear="researchPersonnelPickerCancel"
:setNullToSelectList="true" :isResearch="true"/> :setNullToSelectList="true" :isResearch="true"/>
<div style="width:100%;text-align: center;padding: 10px"> <div style="width:100%;text-align: center;padding: 10px">
@@ -232,12 +232,12 @@ const selectProject=(row,index)=>{
//先选择人员, 再选择项目: 再添加一行,重复操作 //先选择人员, 再选择项目: 再添加一行,重复操作
const projectIdArray = formData.value.tableData.map(item => item.projectId) const projectIdArray = formData.value.tableData.map(item => item.projectId)
const researchPersonnelIdArray = formData.value.tableData.map(item => item.researchPersonnelId) const researchPersonnelIdArray = formData.value.tableData.map(item => item.researchPersonnelId)
console.log('projectIdArray',projectIdArray) // console.log('projectIdArray',projectIdArray)
console.log('researchPersonnelIdArray',researchPersonnelIdArray) // console.log('researchPersonnelIdArray',researchPersonnelIdArray)
const projectNumObj = getSelectProjectAndResearchPersonnelNum(projectIdArray) const projectNumObj = getSelectProjectAndResearchPersonnelNum(projectIdArray)
const researchPersonnelNumObj = getSelectProjectAndResearchPersonnelNum(researchPersonnelIdArray) const researchPersonnelNumObj = getSelectProjectAndResearchPersonnelNum(researchPersonnelIdArray)
let repeatProjectName=getProjectName(row.projectId) let repeatProjectName=getProjectName(row.projectId)
console.log('currentRow.value',currentRow.value) // console.log('currentRow.value',currentRow.value)
for (let researchPersonnelIdKey in researchPersonnelNumObj) {//先判断人员是否重复 for (let researchPersonnelIdKey in researchPersonnelNumObj) {//先判断人员是否重复
if(currentRow.value.projectId){ if(currentRow.value.projectId){
if(researchPersonnelNumObj[researchPersonnelIdKey]>1){ if(researchPersonnelNumObj[researchPersonnelIdKey]>1){
@@ -263,21 +263,52 @@ const selectProject=(row,index)=>{
// } // }
// } // }
} }
const selectedResearchPersonnel = (select) => { const researchPersonnelPickerCancel = (select) => {
if (!select || select.length === 0) { console.log('select',select)
return if(select.length>0){
formData.value.tableData?.forEach((item, index) => {
if (index === currentIndex.value) {
item.researchPersonnelId = select[0].id
item.researchPersonnel = select[0].name
item.companyName = select[0].companyName
item.accountType = select[0].accountType
}
})
}else{
formData.value.tableData?.forEach((item, index) => {
if (index === currentIndex.value) {
item.researchPersonnelId = ''
item.researchPersonnel = ''
item.companyName = ''
item.accountType = ''
}
})
}
}
const selectedResearchPersonnel = (select) => {
if(select.length>0){
formData.value.tableData?.forEach((item, index) => {
if (index === currentIndex.value) {
item.researchPersonnelId = select[0].id
item.researchPersonnel = select[0].name
item.companyName = select[0].companyName
item.accountType = select[0].accountType
}
})
}else{
formData.value.tableData?.forEach((item, index) => {
if (index === currentIndex.value) {
item.researchPersonnelId = ''
item.researchPersonnel = ''
item.companyName = ''
item.accountType = ''
}
})
} }
formData.value.tableData.forEach((item, index) => {
if (index === currentIndex.value) {
item.researchPersonnelId = select[0].id
item.researchPersonnel = select[0].name
item.companyName = select[0].companyName
item.accountType = select[0].accountType
}
})
//以下是为" 同一项目下,同一人不能分摊多次 " //以下是为" 同一项目下,同一人不能分摊多次 "
const projectIdArray = formData.value.tableData.map(item => item.projectId) const projectIdArray = formData.value.tableData?.map(item => item.projectId)
const researchPersonnelIdArray = formData.value.tableData.map(item => item.researchPersonnelId) const researchPersonnelIdArray = formData.value.tableData?.map(item => item.researchPersonnelId)
const projectNumObj = getSelectProjectAndResearchPersonnelNum(projectIdArray) const projectNumObj = getSelectProjectAndResearchPersonnelNum(projectIdArray)
const researchPersonnelNumObj = getSelectProjectAndResearchPersonnelNum(researchPersonnelIdArray) const researchPersonnelNumObj = getSelectProjectAndResearchPersonnelNum(researchPersonnelIdArray)
let repeatProjectName='' let repeatProjectName=''

View File

@@ -173,11 +173,11 @@
<el-button color="#DED0B2" style="margin-right: 10px" @click="handleShowOptionalChargeLeadershipPicker"> <el-button color="#DED0B2" style="margin-right: 10px" @click="handleShowOptionalChargeLeadershipPicker">
{{ optionalChargeLeadershipList.length !== 0 ? '更改' : '请选择' }} {{ optionalChargeLeadershipList.length !== 0 ? '更改' : '请选择' }}
</el-button> </el-button>
<div v-for="item in optionalChargeLeadershipList" :key="item.id" style="margin-right: 5px"> <div v-for="(item,index) in optionalChargeLeadershipList" :key="item.id" style="margin-right: 5px">
{{ item.name }} {{ item.name }}{{index != optionalChargeLeadershipList?.length - 1 ? '' : ''}}
</div> </div>
<user-picker :multiple="true" ref="optionalChargeLeadershipPickerRef" title="请选择分管领导" <user-picker :multiple="true" ref="optionalChargeLeadershipPickerRef" title="请选择分管领导" @cancelOrClear="optionalChargeLeaderPickerOkOrCancel"
v-model:value="optionalChargeLeadershipList" @ok="optionalChargeLeaderPickerOk"/> v-model:value="optionalChargeLeadershipList" @ok="optionalChargeLeaderPickerOkOrCancel"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -365,7 +365,7 @@ const handleShowOptionalChargeLeadershipPicker = () => {
optionalChargeLeadershipPickerRef.value.showUserPicker() optionalChargeLeadershipPickerRef.value.showUserPicker()
} }
const optionalChargeLeaderPickerOk = (userList) => { const optionalChargeLeaderPickerOkOrCancel = (userList) => {
optionalChargeLeadershipList.value = userList optionalChargeLeadershipList.value = userList
} }

View File

@@ -8,7 +8,7 @@
<Ttsup :modelValue="chooseUserInfo()" @clickCopyUser="chooseUser"/> <Ttsup :modelValue="chooseUserInfo()" @clickCopyUser="chooseUser"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<user-picker :multiple="true" ref="userPicker" title="请选择抄送人员" v-model:value="userList" @ok="selected"/> <user-picker :multiple="true" ref="userPicker" title="请选择抄送人员" v-model:value="userList" @ok="ccPersonPickerOkOrCancel" @cancelOrClear="ccPersonPickerOkOrCancel"/>
<AttachmentUpload ref="attachment" label="阶段变更附件" :showTable="showTable" v-model:otherFileList="otherFileList" <AttachmentUpload ref="attachment" label="阶段变更附件" :showTable="showTable" v-model:otherFileList="otherFileList"
@getAttachment="getAttachment" v-model:singleList="singleList" :showSingleTable="showSingleTable" @getAttachment="getAttachment" v-model:singleList="singleList" :showSingleTable="showSingleTable"
@getOtherFile="getOtherFile" :showFileList="true" :formData="formData" tag="阶段变更" @getOtherFile="getOtherFile" :showFileList="true" :formData="formData" tag="阶段变更"
@@ -381,7 +381,8 @@ const chooseUserInfo = () => {
return null return null
} }
} }
const selected = (select) => { const ccPersonPickerOkOrCancel = (select) => {
console.log('select',select)
userList.value = select userList.value = select
} }
const handleSubmit = async () => { const handleSubmit = async () => {

View File

@@ -69,7 +69,6 @@
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<user-picker :multiple="false" ref="userPicker" title="请选择项目负责人" @ok="selected" v-model:value="userList"/>
<div class="oper-page-btn"> <div class="oper-page-btn">
<el-button color="#DED0B2" @click="handleSubmit">提交</el-button> <el-button color="#DED0B2" @click="handleSubmit">提交</el-button>
<el-button @click="handleBack">返回</el-button> <el-button @click="handleBack">返回</el-button>
@@ -78,12 +77,9 @@
</template> </template>
<script setup lang="jsx"> <script setup lang="jsx">
import {ElMessage, ElNotification} from "element-plus"; import {ElNotification} from "element-plus";
import {updateLedger} from "@/api/project-manage"; import {updateLedger} from "@/api/project-manage";
import {getBaseInfoApi} from "@/components/steps/api"; import {getBaseInfoApi} from "@/components/steps/api";
import {ref} from "vue";
import UserPicker from "@/views/workflow/process/common/UserPicker.vue";
import {useTagsView} from '@/stores/tagsview.js' import {useTagsView} from '@/stores/tagsview.js'
import {searchUpdateLedgerData} from "@/api/project-manage"; import {searchUpdateLedgerData} from "@/api/project-manage";
@@ -109,18 +105,6 @@ const userList = ref([])
const showPersonnelPicker = () => { const showPersonnelPicker = () => {
userPicker.value.showUserPicker() userPicker.value.showUserPicker()
} }
const selected = (select) => {
if (!select || select.length === 0) {
return
}
for (const selectElement of select) {
tableForm.value.projectChargePerson = selectElement.id
tableForm.value.projectChargePersonName = selectElement.name
tableForm.value.companyName = selectElement.companyName
tableForm.value.accountType = selectElement.accountType
}
userList.value = select
}
const disabledDate = (time) => { const disabledDate = (time) => {
return time.getTime() < new Date(tableForm.value.startTime).getTime(); return time.getTime() < new Date(tableForm.value.startTime).getTime();
} }

View File

@@ -15,7 +15,7 @@
<div class="tree"> <div class="tree">
<el-tree :data="dataList" ref="tree" :props="defaultProps" empty-text="" node-key="value" <el-tree :data="dataList" ref="tree" :props="defaultProps" empty-text="" node-key="value"
:default-expanded-keys="expandedKeys" lazy :load="loadNode" accordion :default-expanded-keys="expandedKeys" lazy :load="loadNode" accordion
@node-click="handleClick"> @node-click="handleClickTreeNode">
<template #default="{ node, data }"> <template #default="{ node, data }">
<div class="tree-node"> <div class="tree-node">
<div v-if="data.type === 0" style="display: flex;align-items: center;padding: 3px 0"> <div v-if="data.type === 0" style="display: flex;align-items: center;padding: 3px 0">
@@ -54,7 +54,7 @@
<UserFilled/> <UserFilled/>
</el-icon> </el-icon>
{{ selectItem.name }}-{{ selectItem.companyName }} {{ selectItem.name }}-{{ selectItem.companyName }}
<el-icon @click="noSelected(selectItem)" size="20" style="margin-left: 10px;cursor: pointer;"> <el-icon @click="removeSingleSelected(selectItem)" size="20" style="margin-left: 10px;cursor: pointer;">
<CircleClose/> <CircleClose/>
</el-icon> </el-icon>
</div> </div>
@@ -62,7 +62,7 @@
</div> </div>
</div> </div>
<div class="footer"> <div class="footer">
<el-button size="mini" @click="visible = false"> </el-button> <el-button size="mini" @click="cancelUserPicker"> </el-button>
<el-button size="mini" color="#DED0B2" @click="selectConfirm"> </el-button> <el-button size="mini" color="#DED0B2" @click="selectConfirm"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
@@ -113,6 +113,8 @@ const title = ref("请选择");
const selectList = ref([]); const selectList = ref([]);
const filterText = ref(""); const filterText = ref("");
const dataList = ref([]); const dataList = ref([]);
const isRemoveSingleSelected = ref(false);
const originallySelectedList = ref([]);
const tree = ref([]); const tree = ref([]);
const isSearch = ref(false); const isSearch = ref(false);
const expandedKeys = ref([]); const expandedKeys = ref([]);
@@ -171,7 +173,7 @@ async function loadNode(node, resolve) {
if (data.id) { if (data.id) {
params = { params = {
chooseId: data.id, chooseId: data.id,
isResearch: props.isResearch isResearch: props.isResearch
} }
} else { } else {
params = { params = {
@@ -190,7 +192,7 @@ async function loadNode(node, resolve) {
} }
const handleClick = (item, data) => { const handleClickTreeNode = (item, data) => {
selectItem = item; selectItem = item;
if (isSearch.value && item.type !== 0) { if (isSearch.value && item.type !== 0) {
filterText.value = "" filterText.value = ""
@@ -224,24 +226,25 @@ const handleClick = (item, data) => {
selectList.value = [item]; selectList.value = [item];
} }
} }
localStorage.setItem('originallySelectedList', JSON.stringify(selectList.value))
}; };
const noSelected = (selectItem) => { const removeSingleSelected = (selectItem) => {
//右侧的x //右侧的x
for (let i = 0; i < selectList.value.length; i++) { for (let i = 0; i < selectList.value?.length; i++) {
if(selectItem.value){ if (selectItem.value) {
if (selectList.value[i].value === selectItem.value) { if (selectList.value[i].value === selectItem.value) {
selectList.value.splice(i, 1); selectList.value.splice(i, 1);
break; break;
} }
}else{ } else {
if (selectList.value[i].id === selectItem.id) { if (selectList.value[i].id === selectItem.id) {
selectList.value.splice(i, 1); selectList.value.splice(i, 1);
break; break;
} }
} }
} }
isRemoveSingleSelected.value = true
selectItem.selected = false; selectItem.selected = false;
}; };
const clearSelected = () => { const clearSelected = () => {
@@ -251,9 +254,23 @@ const clearSelected = () => {
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(() => { }).then(() => {
isRemoveSingleSelected.value = true
selectList.value = []; selectList.value = [];
emit("cancelOrClear", selectList.value);
}); });
}; };
const cancelUserPicker = () => {
if (isRemoveSingleSelected.value&&localStorage.getItem('originallySelectedList')) {
selectList.value = JSON.parse(localStorage.getItem('originallySelectedList'))
}else{
selectList.value=[]
}
emit("cancelOrClear", selectList.value);
visible.value = false;
nextTick(()=>{
isRemoveSingleSelected.value=false
})
}
const selectConfirm = () => { const selectConfirm = () => {
//确定按钮 //确定按钮
if (props.checkMatrix) { if (props.checkMatrix) {