流程管理问题调整

dev-scheduling
zhangdi 7 days ago
parent e4dd01f778
commit 3258739c06
  1. 49
      src/components/jh-select/index.vue
  2. 202
      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" @clear="handleClear"
@change="handleChange" @change="handleChange"
class="paged-select" class="paged-select"
:teleported="false" :teleported="true"
:popper-options="{ :popper-options="{
modifiers: [{ name: 'eventListeners', options: { scroll: false, resize: false } }], modifiers: [{ name: 'eventListeners', options: { scroll: false, resize: false } }],
}" }"
@ -48,6 +48,10 @@ export default {
debounceTime: { type: Number, default: 500 }, debounceTime: { type: Number, default: 500 },
echoApi: { type: String, default: '' }, echoApi: { type: String, default: '' },
echoMethod: { type: String, default: 'get' }, echoMethod: { type: String, default: 'get' },
echoParamsKey: {
type: String,
default: 'id', // id
},
}, },
data() { data() {
return { return {
@ -66,6 +70,7 @@ export default {
watch: { watch: {
value(val) { value(val) {
this.localValue = val; this.localValue = val;
console.log('value', val);
this.initEcho(); this.initEcho();
}, },
localValue(val) { localValue(val) {
@ -182,17 +187,12 @@ export default {
// item // item
handleChange(val) { handleChange(val) {
console.log('选中值:', val);
// //
let selectedItem = this.optionList.find(item => item[this.valueKey] === val); let selectedItem = this.optionList.find(item => item[this.valueKey] === val);
console.log('从列表找到:', selectedItem);
// //
if (!selectedItem && this.echoApi) { if (!selectedItem && this.echoApi) {
console.log('列表未找到,通过接口获取');
this.getEchoData(val).then(item => { this.getEchoData(val).then(item => {
console.log('接口返回:', item);
this.$emit('change', val, item); this.$emit('change', val, item);
}); });
} else { } else {
@ -206,16 +206,20 @@ export default {
// //
async getEchoData(val) { async getEchoData(val) {
try { try {
const params = { [this.valueKey]: val }; const params = { [this.echoParamsKey]: val };
let res; let res;
if (this.echoMethod.toLowerCase() === 'post') { if (this.echoMethod.toLowerCase() === 'post') {
res = await axios.post(this.echoApi, params); res = await axios.post(this.echoApi, params);
} else { } else {
res = await axios.get(this.echoApi, { params }); 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) { } catch (e) {
console.error('获取选中项详情失败', e);
return null; return null;
} }
}, },
@ -223,13 +227,30 @@ export default {
async initEcho() { async initEcho() {
const val = this.localValue; const val = this.localValue;
if (!val || !this.echoApi) return; 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); 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 (info.records.length > 0) {
if (!exist) this.optionList.unshift(info); this.optionList = info.records;
this.$forceUpdate();
}
} catch (e) {
console.error('回显失败', e);
} }
}, },

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

@ -131,13 +131,29 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="核查人:" v-if="subTitle == '执行'"> <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 <el-option
v-for="item in memberList" v-for="item in memberList"
:label="item.realName" :label="item.realName"
:value="item.id" :value="item.id"
></el-option> ></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-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
@ -150,13 +166,29 @@
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="审核人:" v-if="subTitle == '核查' && detailForm.checkResult == 1"> <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 <el-option
v-for="item in memberList" v-for="item in memberList"
:label="item.realName" :label="item.realName"
:value="item.id" :value="item.id"
></el-option> ></el-option>
</el-select> </el-select> -->
</el-form-item> </el-form-item>
</el-col> </el-col>
<div v-if="subTitle == '核准'" style="color: #ffc300; margin-bottom: 10px"> <div v-if="subTitle == '核准'" style="color: #ffc300; margin-bottom: 10px">
@ -201,8 +233,9 @@
import { getRoleUserList } from '@/api/processManagement/taskDispatch'; import { getRoleUserList } from '@/api/processManagement/taskDispatch';
import { projectExecute, projectCheck, projectApprove } from '@/api/flowManagement/index'; import { projectExecute, projectCheck, projectApprove } from '@/api/flowManagement/index';
import { getDictionary } from '@/api/system/dict'; import { getDictionary } from '@/api/system/dict';
import jhSelect from '@/components/jh-select/index.vue';
export default { export default {
components: { jhSelect },
props: { props: {
showDialog: { showDialog: {
type: Boolean, type: Boolean,

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

Loading…
Cancel
Save