流程管理问题调整

dev-scheduling
zhangdi 7 days ago
parent e4dd01f778
commit 3258739c06
  1. 49
      src/components/jh-select/index.vue
  2. 200
      src/views/flowManagement/addDialog.vue
  3. 43
      src/views/flowManagement/milestoneDialog.vue
  4. 1
      src/views/processManagement/components/addTestDialog.vue

@ -11,7 +11,7 @@
@clear="handleClear"
@change="handleChange"
class="paged-select"
:teleported="false"
:teleported="true"
:popper-options="{
modifiers: [{ name: 'eventListeners', options: { scroll: false, resize: false } }],
}"
@ -48,6 +48,10 @@ export default {
debounceTime: { type: Number, default: 500 },
echoApi: { type: String, default: '' },
echoMethod: { type: String, default: 'get' },
echoParamsKey: {
type: String,
default: 'id', // id
},
},
data() {
return {
@ -66,6 +70,7 @@ export default {
watch: {
value(val) {
this.localValue = val;
console.log('value', val);
this.initEcho();
},
localValue(val) {
@ -182,17 +187,12 @@ export default {
// item
handleChange(val) {
console.log('选中值:', val);
//
let selectedItem = this.optionList.find(item => item[this.valueKey] === val);
console.log('从列表找到:', selectedItem);
//
if (!selectedItem && this.echoApi) {
console.log('列表未找到,通过接口获取');
this.getEchoData(val).then(item => {
console.log('接口返回:', item);
this.$emit('change', val, item);
});
} else {
@ -206,16 +206,20 @@ export default {
//
async getEchoData(val) {
try {
const params = { [this.valueKey]: val };
const params = { [this.echoParamsKey]: val };
let res;
if (this.echoMethod.toLowerCase() === 'post') {
res = await axios.post(this.echoApi, params);
} else {
res = await axios.get(this.echoApi, { params });
}
return res.data.data || {};
const detail = res.data.data || res.data;
if (!detail) {
return null;
}
return detail;
} catch (e) {
console.error('获取选中项详情失败', e);
return null;
}
},
@ -223,13 +227,30 @@ export default {
async initEcho() {
const val = this.localValue;
if (!val || !this.echoApi) return;
const has = this.optionList.some(item => item[this.valueKey] === val);
if (has) return;
//
if (this.multiple && Array.isArray(val)) {
const list = await this.getEchoData(this.multiple);
if (list && list.length) {
this.optionList.unshift(...list);
this.$forceUpdate();
}
return;
}
//
const hasItem = this.optionList.some(item => item[this.valueKey] === val);
if (hasItem) return;
try {
const info = await this.getEchoData(val);
if (info[this.labelKey] && info[this.valueKey]) {
const exist = this.optionList.some(i => i[this.valueKey] === info[this.valueKey]);
if (!exist) this.optionList.unshift(info);
if (info.records.length > 0) {
this.optionList = info.records;
this.$forceUpdate();
}
} catch (e) {
console.error('回显失败', e);
}
},

@ -1,6 +1,6 @@
<template>
<el-dialog
append-to-body="false"
:append-to-body="false"
:title="title"
:model-value="openShow"
width="80%"
@ -12,15 +12,16 @@
<!-- 项目基础信息表单 -->
<el-row>
<el-col :span="8">
<el-form-item label="项目名称" prop="projectName">
<el-form-item label="项目名称" prop="projectName">
<el-input :disabled="isDetail" v-model="addForm.projectName"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目类型" prop="bcId">
<el-form-item label="项目类型" prop="bcId">
<el-select :disabled="isDetail" v-model="addForm.bcId" clearable filterable>
<el-option
v-for="(item, index) in projectType"
:key="index"
:label="item.dictValue"
:value="item.dictKey"
></el-option>
@ -34,10 +35,11 @@
v-model="addForm.touchingDeptId"
clearable
filterable
@change="handleChange('touchingDeptId')"
@change="deptChange()"
>
<el-option
v-for="(item, index) in deplList"
:key="index"
:label="item.deptName"
:value="item.id"
></el-option>
@ -81,24 +83,28 @@
<el-row>
<el-col :span="8">
<el-form-item label="项目负责人" prop="projectHeadId">
<el-select
:disabled="isDetail"
v-model="addForm.projectHeadId"
clearable
filterable
@change="handleChange('projectHeadId')"
>
<el-option
v-for="item in memberList"
:label="item.realName"
:value="item.id"
></el-option>
</el-select>
<jhSelect
:value="addForm.projectHeadId"
@input="val => (addForm.projectHeadId = val)"
placeholder="请搜索选择"
api-url="/blade-system/user/page"
echo-api="/blade-system/user/page"
echoParamsKey="ids"
echo-method="get"
api-method="get"
list-key="records"
total-key="total"
label-key="realName"
value-key="id"
search-key="id"
:debounce-time="500"
@change="projectHeadChange"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="成员名称" prop="memberName">
<el-select
<!-- <el-select
:disabled="isDetail"
v-model="addForm.memberName"
multiple
@ -111,14 +117,30 @@
:label="item.realName"
:value="item.id"
></el-option>
</el-select>
</el-select> -->
<jhSelect
:value="addForm.memberName"
@input="val => (addForm.memberName = val)"
placeholder="请搜索选择"
api-url="/blade-system/user/page"
echo-api="/blade-system/user/page"
echoParamsKey="ids"
api-method="get"
list-key="records"
total-key="total"
label-key="realName"
value-key="id"
search-key="id"
multiple
:debounce-time="500"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="项目支持人" prop="projectSupportMan">
<el-select
<!-- <el-select
:disabled="isDetail"
v-model="addForm.projectSupportMan"
clearable
@ -129,7 +151,22 @@
:label="item.realName"
:value="item.id"
></el-option>
</el-select>
</el-select> -->
<jhSelect
:value="addForm.projectSupportMan"
@input="val => (addForm.projectSupportMan = val)"
placeholder="请搜索选择"
api-url="/blade-system/user/page"
echo-api="/blade-system/user/page"
echoParamsKey="ids"
api-method="get"
list-key="records"
total-key="total"
label-key="realName"
value-key="id"
search-key="id"
:debounce-time="500"
/>
</el-form-item>
</el-col>
<el-col :span="8">
@ -218,7 +255,23 @@
:prop="`stoneList[${scope.$index}].milestoneMemo`"
:rules="addRules.milestoneMemo"
>
<el-select
<jhSelect
:value="scope.row.milestoneMemo"
@input="val => (scope.row.milestoneMemo = val)"
placeholder="请搜索选择"
api-url="/blade-system/user/page"
echo-api="/blade-system/user/page"
echoParamsKey="ids"
api-method="get"
list-key="records"
total-key="total"
label-key="realName"
value-key="id"
search-key="id"
:debounce-time="500"
@change="(val, item) => handleStoneListChange(val, item, scope.$index, scope.row)"
/>
<!-- <el-select
v-model="scope.row.milestoneMemo"
placeholder="请选择里程碑负责人"
clearable
@ -230,7 +283,7 @@
:label="item.realName"
:value="item.id"
></el-option>
</el-select>
</el-select> -->
</el-form-item>
</template>
<template v-else>
@ -283,7 +336,7 @@
>
<el-date-picker
v-model="scope.row.milestoneNode"
type="date"
type="datetime"
placeholder="选择日期时间"
style="width: 100%"
format="YYYY-MM-DD HH:mm:ss"
@ -292,9 +345,7 @@
</el-form-item>
</template>
<template v-else>
<span>{{
scope.row.milestoneNode ? scope.row.milestoneNode.substring(0, 10) : ''
}}</span>
<span>{{ scope.row.milestoneNode }}</span>
</template>
</template>
</el-table-column>
@ -307,7 +358,6 @@
:width="isDetail ? '120' : ''"
>
<template #default="scope">
<!-- {{ executeTypeFn(scope.row.executeType) }} -->
{{ scope.row.executeTypeText }}
</template>
</el-table-column>
@ -368,12 +418,6 @@
<el-table-column v-if="isDetail" align="center" label="附件" :width="isDetail ? '120' : ''">
<el-button type="text">附件</el-button>
</el-table-column>
<!-- 通用操作列 -->
<!-- <el-table-column label="操作">
<template #default="scope">
<el-button plain type="danger" @click="handleDelTable(scope.$index)">删除</el-button>
</template>
</el-table-column> -->
</el-table>
</el-form>
<!-- 弹窗底部按钮 -->
@ -390,9 +434,10 @@
import { addProcess, getProcessDetail, getDeplList } from '@/api/flowManagement/index';
import { getRoleUserList } from '@/api/processManagement/taskDispatch';
import { getDictionary } from '@/api/system/dict';
import jhSelect from '@/components/jh-select/index.vue';
export default {
name: 'AddDialog',
components: { jhSelect },
props: {
title: {
type: String,
@ -476,6 +521,7 @@ export default {
openShow: false,
addForm: {
stoneList: [],
projectHeadId: null,
},
executeResultList: [], //
};
@ -488,7 +534,7 @@ export default {
},
mounted() {
this.openShow = this.visible;
this.getRoleUserList();
// this.getRoleUserList();
this.getDictionary();
this.getDeplList();
if (this.title === '详情' || this.title === '修改') {
@ -503,28 +549,50 @@ export default {
},
getExecuteTypeText(type) {
const item = this.executeResultList.find(item => item.dictKey === type);
console.log('item', item);
return item ? item.dictValue : '';
},
handleStoneListChange(index, row, type) {
if (type === 'milestoneMemo') {
let sel = this.memberList.filter(item => item.id == row.milestoneMemo)[0];
this.addForm.stoneList[index].milestoneMan = sel.realName;
handleStoneListChange(val, item, index, row) {
if (item) {
// milestoneMan
row.milestoneMan = item.realName;
} else {
// val
if (!val) {
row.milestoneMan = '';
}
// val item
// jhSelect label () UI
// milestoneMan submit milestoneMan /
}
// if (type === 'milestoneMemo') {
// let sel = this.memberList.filter(item => item.id == row.milestoneMemo)[0];
// row.milestoneMan = item.realName;
// }
},
handleChange(type) {
//
if (type == 'touchingDeptId') {
//
deptChange() {
let sel = this.deplList.filter(item => item.id == this.addForm.touchingDeptId)[0];
this.addForm.touchingDept = sel.deptName;
}
},
//
if (type == 'projectHeadId') {
let sel = this.memberList.filter(item => item.id == this.addForm.projectHeadId)[0];
this.addForm.projectHead = sel.realName;
projectHeadChange(value, item) {
if (item != undefined) {
this.addForm.projectHead = item.realName;
}
},
handleChange(value, item) {
// //
// if (type == 'touchingDeptId') {
// let sel = this.deplList.filter(item => item.id == this.addForm.touchingDeptId)[0];
// this.addForm.touchingDept = sel.deptName;
// }
// //
// if (type == 'projectHeadId') {
// let sel = this.memberList.filter(item => item.id == this.addForm.projectHeadId)[0];
// this.addForm.projectHead = sel.realName;
// }
},
//
getDeplList() {
getDeplList().then(res => {
@ -553,8 +621,10 @@ export default {
//
getDetails() {
getProcessDetail(this.rowItem.id).then(res => {
console.log(res.data.data, 'res');
this.addForm = res.data.data;
this.$nextTick(() => {
let data = res.data.data;
Object.assign(this.addForm, data);
const records = res.data.data;
this.addForm.stoneList = records.stoneList.map(item => {
item.executeTypeText = this.getExecuteTypeText(item.executeType);
@ -569,6 +639,8 @@ export default {
} else {
this.addForm.memberName = [];
}
this.$forceUpdate();
});
});
},
handleClose(type) {
@ -594,10 +666,10 @@ export default {
milestonePlan: '',
outputMaterial: '',
milestoneNode: '',
milestoneMemo: '',
milestoneMemo: null,
evolve: '',
lastPlan: '',
grade: -32768,
grade: null,
score: 0,
executeResult: 0,
executeType: '',
@ -658,27 +730,31 @@ export default {
});
return;
}
this.loadingShow = true
this.loadingShow = true;
const submitData = this.formatSubmitData(this.addForm);
submitData.projectStartTime = submitData.projectStartTime + ' 00:00:00';
submitData.projectDesiredEnd = submitData.projectDesiredEnd + ' 00:00:00';
if (this.title === '详情') {
updateProcess({ ...submitDat, approvalStatus: 1 }).then(res => {
updateProcess({ ...submitDat, approvalStatus: 1 })
.then(res => {
this.$message.success('修改成功');
this.handleClose(true);
this.loadingShow = false
}).catch(err=>{
this.loadingShow = false
this.loadingShow = false;
})
.catch(err => {
this.loadingShow = false;
});
return;
} else {
addProcess({ ...submitData, approvalStatus: 1 }).then(res => {
addProcess({ ...submitData, approvalStatus: 1 })
.then(res => {
this.$message.success('提交成功');
this.handleClose(true);
this.loadingShow = false
}).catch(err=>{
this.loadingShow = false
this.loadingShow = false;
})
.catch(err => {
this.loadingShow = false;
});
}
});
},
@ -715,7 +791,7 @@ export default {
font-size: 14px;
line-height: 1.5;
}
:deep(.el-table .el-table__cell) {
:deep(.el-table .el-table__body .el-table__cell) {
height: 50px !important;
padding: 0 !important;
line-height: 50px !important;

@ -131,13 +131,29 @@
</el-col>
<el-col :span="12">
<el-form-item label="核查人:" v-if="subTitle == '执行'">
<el-select v-model="detailForm.userId" clearable filterable @change="handleUserChange">
<!-- <el-select v-model="detailForm.userId" clearable filterable @change="handleUserChange">
<el-option
v-for="item in memberList"
:label="item.realName"
:value="item.id"
></el-option>
</el-select>
</el-select> -->
<jhSelect
:value="detailForm.userId"
@input="val => (detailForm.userId = val)"
placeholder="请搜索选择"
api-url="/blade-system/user/page"
echo-api="/blade-system/user/page"
echoParamsKey="ids"
echo-method="get"
api-method="get"
list-key="records"
total-key="total"
label-key="realName"
value-key="id"
search-key="id"
:debounce-time="500"
/>
</el-form-item>
</el-col>
<el-col :span="24">
@ -150,13 +166,29 @@
</el-col>
<el-col :span="24">
<el-form-item label="审核人:" v-if="subTitle == '核查' && detailForm.checkResult == 1">
<el-select v-model="detailForm.userId" clearable filterable>
<jhSelect
:value="detailForm.userId"
@input="val => (detailForm.userId = val)"
placeholder="请搜索选择"
api-url="/blade-system/user/page"
echo-api="/blade-system/user/page"
echoParamsKey="ids"
echo-method="get"
api-method="get"
list-key="records"
total-key="total"
label-key="realName"
value-key="id"
search-key="id"
:debounce-time="500"
/>
<!-- <el-select v-model="detailForm.userId" clearable filterable>
<el-option
v-for="item in memberList"
:label="item.realName"
:value="item.id"
></el-option>
</el-select>
</el-select> -->
</el-form-item>
</el-col>
<div v-if="subTitle == '核准'" style="color: #ffc300; margin-bottom: 10px">
@ -201,8 +233,9 @@
import { getRoleUserList } from '@/api/processManagement/taskDispatch';
import { projectExecute, projectCheck, projectApprove } from '@/api/flowManagement/index';
import { getDictionary } from '@/api/system/dict';
import jhSelect from '@/components/jh-select/index.vue';
export default {
components: { jhSelect },
props: {
showDialog: {
type: Boolean,

@ -85,6 +85,7 @@
import { getPartList, getVersion, saveTask } from '@/api/processManagement/taskProcessing';
import { getRoleUserList } from '@/api/processManagement/taskDispatch';
import jhSelect from '@/components/jh-select/index.vue';
export default {
props: {
showDialog: {

Loading…
Cancel
Save