问题修改

dev-scheduling
zhangdi 3 days ago
parent 44b5976edf
commit 11015b32e5
  1. 47
      src/api/flowManagement/index.js
  2. 353
      src/views/flowManagement/addDialog.vue
  3. 114
      src/views/flowManagement/assignDaialog.vue
  4. 194
      src/views/flowManagement/configRole.vue
  5. 212
      src/views/flowManagement/managementOfKeyTasks.vue
  6. 284
      src/views/flowManagement/milestoneDialog.vue
  7. 39
      src/views/flowManagement/projectExecution.vue
  8. 3
      src/views/flowManagement/review.vue

@ -17,7 +17,7 @@ export const getProcessList = (current, size, params) => {
export const addProcess = (data) => { export const addProcess = (data) => {
console.log(data, 'api的data'); console.log(data, 'api的data');
return request({ return request({
url: '/blade-desk/fmProjectApplication/submit', url: '/blade-desk/fmProjectApplication/createApplication',
method: 'post', method: 'post',
data data
}); });
@ -110,3 +110,48 @@ export const getDeplList = (current, size, params) => {
}, },
}); });
}; };
// 配置节点数据
export const getProjectApprovalConfigList = params => {
return request({
url: '/blade-desk/fmProjectApprovalConfig/list',
method: 'get',
params: params
});
};
//批量修改
export const batchUpdateRole = data => {
return request({
url: '/blade-desk/fmProjectApprovalConfig/batchUpdate',
method: 'post',
data
});
};
// 发送审核
export const submitApproval = params => {
return request({
url: '/blade-desk/fmProjectApplication/submitApproval',
method: 'get',
params
});
};
// 审批
export const approval = data => {
return request({
url: '/blade-desk/fmProjectApplication/approval',
method: 'post',
data
});
};
// 查询各个审批人用户
export const getUsersByNodeCode = params => {
return request({
url: '/blade-desk/fmProjectApprovalConfig/getUsersByNodeCode',
method: 'get',
params
});
};

@ -1,20 +1,7 @@
<template> <template>
<el-dialog <el-dialog :append-to-body="false" :title="title" :model-value="openShow" width="80%" @close="handleClose" fullscreen>
:append-to-body="false"
:title="title"
:model-value="openShow"
width="80%"
@close="handleClose"
fullscreen
>
<!-- 单个 Form 包裹所有内容基础信息 + 表格 --> <!-- 单个 Form 包裹所有内容基础信息 + 表格 -->
<el-form <el-form ref="addForm" :model="addForm" :rules="addRules" label-width="100px" label-position="right">
ref="addForm"
:model="addForm"
:rules="addRules"
label-width="100px"
label-position="right"
>
<!-- 项目基础信息表单 --> <!-- 项目基础信息表单 -->
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
@ -25,30 +12,17 @@
<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" :key="index" :label="item.dictValue"
v-for="(item, index) in projectType" :value="item.dictKey"></el-option>
:key="index"
:label="item.dictValue"
:value="item.dictKey"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="制单部门:" prop="touchingDeptId"> <el-form-item label="制单部门:" prop="touchingDeptId">
<el-select <el-select :disabled="isDetail" v-model="addForm.touchingDeptId" clearable filterable
:disabled="isDetail" @change="deptChange()">
v-model="addForm.touchingDeptId" <el-option v-for="(item, index) in deplList" :key="index" :label="item.deptName"
clearable :value="item.id"></el-option>
filterable
@change="deptChange()"
>
<el-option
v-for="(item, index) in deplList"
:key="index"
:label="item.deptName"
:value="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -56,127 +30,62 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="项目背景:" prop="projectBackcloth"> <el-form-item label="项目背景:" prop="projectBackcloth">
<el-input <el-input :disabled="isDetail" type="textarea" v-model="addForm.projectBackcloth"></el-input>
:disabled="isDetail"
type="textarea"
v-model="addForm.projectBackcloth"
></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="项目目标:" prop="projectTarget"> <el-form-item label="项目目标:" prop="projectTarget">
<el-input <el-input :disabled="isDetail" type="textarea" v-model="addForm.projectTarget"></el-input>
:disabled="isDetail"
type="textarea"
v-model="addForm.projectTarget"
></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="预期效果:" prop="desiredResult"> <el-form-item label="预期效果:" prop="desiredResult">
<el-input <el-input :disabled="isDetail" type="textarea" v-model="addForm.desiredResult"></el-input>
:disabled="isDetail"
type="textarea"
v-model="addForm.desiredResult"
></el-input>
</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="projectHeadId"> <el-form-item label="项目负责人:" prop="projectHeadId">
<jhSelect <jhSelect v-model="addForm.projectHeadId" placeholder="请搜索选择" api-url="/blade-system/user/page"
v-model="addForm.projectHeadId" echo-api="/blade-system/user/page" echoParamsKey="ids" echo-method="get" api-method="get"
placeholder="请搜索选择" list-key="records" total-key="total" label-key="realName" value-key="id" search-key="realName"
api-url="/blade-system/user/page" :debounce-time="500" @change="projectHeadChange" :title="title" :disabled="isDetail" />
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="realName"
:debounce-time="500"
@change="projectHeadChange"
:title="title"
:disabled="isDetail"
/>
</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">
<jhSelect <jhSelect v-model="addForm.memberName" placeholder="请搜索选择" api-url="/blade-system/user/page"
v-model="addForm.memberName" echo-api="/blade-system/user/page" echoParamsKey="ids" api-method="get" list-key="records"
placeholder="请搜索选择" total-key="total" label-key="realName" value-key="id" search-key="realName" multiple :debounce-time="500"
api-url="/blade-system/user/page" :title="title" :disabled="isDetail" />
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="realName"
multiple
:debounce-time="500"
:title="title"
:disabled="isDetail"
/>
</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">
<jhSelect <jhSelect v-model="addForm.projectSupportMan" placeholder="请搜索选择" api-url="/blade-system/user/page"
v-model="addForm.projectSupportMan" echo-api="/blade-system/user/page" echoParamsKey="ids" api-method="get" list-key="records"
placeholder="请搜索选择" total-key="total" label-key="realName" value-key="id" search-key="realName" :debounce-time="500"
api-url="/blade-system/user/page" :title="title" :disabled="isDetail" />
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="realName"
:debounce-time="500"
:title="title"
:disabled="isDetail"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目开始时间:" prop="projectStartTime" label-width="110px"> <el-form-item label="项目开始时间:" prop="projectStartTime" label-width="110px">
<el-date-picker <el-date-picker :disabled="isDetail" style="width: 100%" v-model="addForm.projectStartTime" type="date"
:disabled="isDetail" placeholder="选择日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD">
style="width: 100%"
v-model="addForm.projectStartTime"
type="date"
placeholder="选择日期"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目结束预期时间:" prop="projectDesiredEnd" label-width="130px"> <el-form-item label="项目结束预期时间:" prop="projectDesiredEnd" label-width="130px">
<el-date-picker <el-date-picker :disabled="isDetail" style="width: 100%" v-model="addForm.projectDesiredEnd" type="date"
:disabled="isDetail" placeholder="选择日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD"></el-date-picker>
style="width: 100%"
v-model="addForm.projectDesiredEnd"
type="date"
placeholder="选择日期"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -191,35 +100,19 @@
{{ formError }} {{ formError }}
</div> </div>
<!-- 里程碑表格 --> <!-- 里程碑表格 -->
<el-table <el-table :data="addForm.stoneList" ref="detailTable" border @select="selectChange" class="table_project"
:data="addForm.stoneList" :cell-class-name="tableCellClassName">
ref="detailTable"
border
@select="selectChange"
class="table_project"
:cell-class-name="tableCellClassName"
>
<el-table-column type="selection"></el-table-column> <el-table-column type="selection"></el-table-column>
<el-table-column type="index" width="80" label="序号"></el-table-column> <el-table-column type="index" width="80" label="序号"></el-table-column>
<el-table-column <el-table-column align="center" :width="isDetail || isStatusEdit ? '120' : ''" label="里程碑计划">
align="center"
:width="isDetail || isStatusEdit ? '120' : ''"
label="里程碑计划"
>
<template #header> <template #header>
<span><i style="color: red">*</i>里程碑计划</span> <span><i style="color: red">*</i>里程碑计划</span>
</template> </template>
<template #default="scope"> <template #default="scope">
<template v-if="!isDetail"> <template v-if="!isDetail">
<el-form-item <el-form-item label-width="0" :prop="`stoneList[${scope.$index}].milestonePlan`"
label-width="0" :rules="addRules.milestonePlan">
:prop="`stoneList[${scope.$index}].milestonePlan`" <el-input v-model="scope.row.milestonePlan" placeholder="请输入里程碑计划"></el-input>
:rules="addRules.milestonePlan"
>
<el-input
v-model="scope.row.milestonePlan"
placeholder="请输入里程碑计划"
></el-input>
</el-form-item> </el-form-item>
</template> </template>
<template v-else> <template v-else>
@ -227,39 +120,20 @@
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column align="center" :width="isDetail || isStatusEdit ? '120' : ''" label="里程碑负责人"
align="center" prop="milestoneManId">
:width="isDetail || isStatusEdit ? '120' : ''"
label="里程碑负责人"
prop="milestoneMemo"
>
<template #header> <template #header>
<span><i style="color: red">*</i>里程碑负责人</span> <span><i style="color: red">*</i>里程碑负责人</span>
</template> </template>
<template #default="scope"> <template #default="scope">
<template v-if="!isDetail"> <template v-if="!isDetail">
<el-form-item <el-form-item label-width="0" :prop="`stoneList[${scope.$index}].milestoneManId`"
label-width="0" :rules="addRules.milestoneManId">
:prop="`stoneList[${scope.$index}].milestoneMemo`" <jhSelect v-model="scope.row.milestoneManId" placeholder="请搜索选择" api-url="/blade-system/user/page"
:rules="addRules.milestoneMemo" 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="realName" :debounce-time="500"
<jhSelect @change="(val, item) => handleStoneListChange(val, item, scope.$index, scope.row)" :title="title"
v-model="scope.row.milestoneMemo" :disabled="isDetail" />
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="realName"
:debounce-time="500"
@change="(val, item) => handleStoneListChange(val, item, scope.$index, scope.row)"
:title="title"
:disabled="isDetail"
/>
</el-form-item> </el-form-item>
</template> </template>
<template v-else> <template v-else>
@ -267,26 +141,16 @@
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column align="center" :width="isDetail || isStatusEdit ? '120' : ''" label="里程碑输出物"
align="center" prop="outputMaterial">
:width="isDetail || isStatusEdit ? '120' : ''"
label="里程碑输出物"
prop="outputMaterial"
>
<template #header> <template #header>
<span><i style="color: red">*</i>里程碑输出物</span> <span><i style="color: red">*</i>里程碑输出物</span>
</template> </template>
<template #default="scope"> <template #default="scope">
<template v-if="!isDetail"> <template v-if="!isDetail">
<el-form-item <el-form-item label-width="0" :prop="`stoneList[${scope.$index}].outputMaterial`"
label-width="0" :rules="addRules.outputMaterial">
:prop="`stoneList[${scope.$index}].outputMaterial`" <el-input v-model="scope.row.outputMaterial" placeholder="请输入里程碑输出物"></el-input>
:rules="addRules.outputMaterial"
>
<el-input
v-model="scope.row.outputMaterial"
placeholder="请输入里程碑输出物"
></el-input>
</el-form-item> </el-form-item>
</template> </template>
<template v-else> <template v-else>
@ -294,30 +158,17 @@
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column align="center" :width="isDetail || isStatusEdit ? '180' : ''" label="里程碑节点"
align="center" prop="milestoneNode">
:width="isDetail || isStatusEdit ? '180' : ''"
label="里程碑节点"
prop="milestoneNode"
>
<template #header> <template #header>
<span><i style="color: red">*</i>里程碑节点</span> <span><i style="color: red">*</i>里程碑节点</span>
</template> </template>
<template #default="scope"> <template #default="scope">
<template v-if="!isDetail"> <template v-if="!isDetail">
<el-form-item <el-form-item label-width="0" :prop="`stoneList[${scope.$index}].milestoneNode`"
label-width="0" :rules="addRules.milestoneNode">
:prop="`stoneList[${scope.$index}].milestoneNode`" <el-date-picker v-model="scope.row.milestoneNode" type="date" placeholder="选择日期时间" style="width: 100%"
:rules="addRules.milestoneNode" format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
>
<el-date-picker
v-model="scope.row.milestoneNode"
type="date"
placeholder="选择日期时间"
style="width: 100%"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
</el-form-item> </el-form-item>
</template> </template>
<template v-else> <template v-else>
@ -326,84 +177,40 @@
</template> </template>
</el-table-column> </el-table-column>
<!-- 详情页专属列 --> <!-- 详情页专属列 -->
<el-table-column <el-table-column v-if="isDetail || isStatusEdit" align="center" label="执行类型" prop="executeType"
v-if="isDetail || isStatusEdit" :width="isDetail ? '120' : ''">
align="center"
label="执行类型"
prop="executeType"
:width="isDetail ? '120' : ''"
>
<template #default="scope"> <template #default="scope">
{{ scope.row.executeTypeText }} {{ scope.row.executeTypeText }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column v-if="isDetail || isStatusEdit" align="center" label="延期时间" prop="delayTime"
v-if="isDetail || isStatusEdit" :width="isDetail || isStatusEdit ? '120' : ''"></el-table-column>
align="center" <el-table-column v-if="isDetail || isStatusEdit" align="center" label="核查结果" prop="checkResult"
label="延期时间" :width="isDetail || isStatusEdit ? '120' : ''">
prop="delayTime"
:width="isDetail || isStatusEdit ? '120' : ''"
></el-table-column>
<el-table-column
v-if="isDetail || isStatusEdit"
align="center"
label="核查结果"
prop="checkResult"
:width="isDetail || isStatusEdit ? '120' : ''"
>
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.checkResult === 0">未核查</span> <span v-if="scope.row.checkResult === 0">未核查</span>
<span v-else-if="scope.row.checkResult === 1">已核查</span> <span v-else-if="scope.row.checkResult === 1">已核查</span>
<span v-else-if="scope.row.checkResult === 2">已核准</span> <span v-else-if="scope.row.checkResult === 2">已核准</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column v-if="isDetail || isStatusEdit" align="center" label="核查人" prop="checkMan"
v-if="isDetail || isStatusEdit" :width="isDetail || isStatusEdit ? '120' : ''"></el-table-column>
align="center" <el-table-column v-if="isDetail || isStatusEdit" align="center" label="评价等级" prop="gradeTitle"
label="核查人" :width="isDetail || isStatusEdit ? '120' : ''">
prop="checkMan"
:width="isDetail || isStatusEdit ? '120' : ''"
></el-table-column>
<el-table-column
v-if="isDetail || isStatusEdit"
align="center"
label="评价等级"
prop="gradeTitle"
:width="isDetail || isStatusEdit ? '120' : ''"
>
</el-table-column> </el-table-column>
<el-table-column <el-table-column v-if="isDetail || isStatusEdit" align="center" label="评价人" prop="gradeMan"
v-if="isDetail || isStatusEdit" :width="isDetail || isStatusEdit ? '120' : ''">
align="center"
label="评价人"
prop="gradeMan"
:width="isDetail || isStatusEdit ? '120' : ''"
>
<template #default="scope"> <template #default="scope">
{{ scope.row.gradeTitle == '待评价' ? '' : scope.row.gradeMan }} {{ scope.row.gradeTitle == '待评价' ? '' : scope.row.gradeMan }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column v-if="isDetail || isStatusEdit" width="200" align="center" label="业务领导评价" prop="evaluate"
v-if="isDetail || isStatusEdit" :width="isDetail || isStatusEdit ? '120' : ''"></el-table-column>
width="200" <el-table-column v-if="isDetail || isStatusEdit" align="center" label="附件"
align="center" :width="isDetail || isStatusEdit ? '120' : ''">
label="业务领导评价"
prop="evaluate"
:width="isDetail || isStatusEdit ? '120' : ''"
></el-table-column>
<el-table-column
v-if="isDetail || isStatusEdit"
align="center"
label="附件"
:width="isDetail || isStatusEdit ? '120' : ''"
>
<template #default="scope"> <template #default="scope">
<el-button <el-button type="text" v-if="scope.row.attachList.length > 0"
type="text" @click="attachListDown(scope.row)">附件</el-button>
v-if="scope.row.attachList.length > 0"
@click="attachListDown(scope.row)"
>附件</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -499,7 +306,7 @@ export default {
milestonePlan: [ milestonePlan: [
{ required: true, message: '请填写里程碑计划', trigger: ['blur', 'submit'] }, { required: true, message: '请填写里程碑计划', trigger: ['blur', 'submit'] },
], ],
milestoneMemo: [ milestoneManId: [
{ required: true, message: '请选择里程碑负责人', trigger: ['change', 'submit'] }, { required: true, message: '请选择里程碑负责人', trigger: ['change', 'submit'] },
], ],
outputMaterial: [ outputMaterial: [
@ -563,7 +370,7 @@ export default {
handleStoneListChange(val, item, index, row) { handleStoneListChange(val, item, index, row) {
if (item) { if (item) {
// milestoneMan // milestoneMan
// row.milestoneMemo =val; // row.milestoneManId =val;
row.milestoneMan = item.realName; row.milestoneMan = item.realName;
} else { } else {
// val // val
@ -677,7 +484,7 @@ export default {
milestonePlan: '', milestonePlan: '',
outputMaterial: '', outputMaterial: '',
milestoneNode: '', milestoneNode: '',
milestoneMemo: '', milestoneManId: '',
evolve: '', evolve: '',
lastPlan: '', lastPlan: '',
grade: null, grade: null,
@ -711,15 +518,17 @@ export default {
this.$message.success('删除成功'); this.$message.success('删除成功');
this.$emit('del-table', index); // this.$emit('del-table', index); //
}) })
.catch(() => {}); .catch(() => { });
}, },
formatSubmitData(form) { formatSubmitData(form) {
const submitData = JSON.parse(JSON.stringify(form)); const submitData = JSON.parse(JSON.stringify(form));
if (Array.isArray(submitData.memberName)) { if (Array.isArray(submitData.memberName)) {
submitData.memberName = submitData.memberName.map(item => String(item)).join(','); submitData.memberName = submitData.memberName.map(item => String(item)).join(',');
} }
submitData.stoneList = submitData.stoneList.map(row => { submitData.stoneList = submitData.stoneList.map((row, index) => {
const { fmProjectApplication, attachList, paIndex, ...validData } = row; const { fmProjectApplication, attachList, paIndex, ...validData } = row;
validData.paIndex = index + 1
validData.milestoneNode = validData.milestoneNode + ' 00:00:00'; validData.milestoneNode = validData.milestoneNode + ' 00:00:00';
return validData; return validData;
}); });
@ -769,7 +578,7 @@ export default {
this.loadingShow = false; this.loadingShow = false;
}); });
}) })
.catch(() => {}); .catch(() => { });
} else { } else {
if (this.rowItem.approvalStatus == 2) { if (this.rowItem.approvalStatus == 2) {
this.rowItem.approvalStatus = 1; this.rowItem.approvalStatus = 1;
@ -836,6 +645,7 @@ export default {
font-size: 14px; font-size: 14px;
line-height: 1.5; line-height: 1.5;
} }
:deep(.el-table .el-table__body .el-table__cell) { :deep(.el-table .el-table__body .el-table__cell) {
height: 50px !important; height: 50px !important;
padding: 0 !important; padding: 0 !important;
@ -844,7 +654,8 @@ export default {
/* 高亮行样式 */ /* 高亮行样式 */
:deep(.highlight-row) { :deep(.highlight-row) {
background-color: rgba(40, 167, 69, 0.5) !important; /* 浅绿色背景,可根据需求修改 */ background-color: rgba(40, 167, 69, 0.5) !important;
/* 浅绿色背景,可根据需求修改 */
// color: #67c23a; // color: #67c23a;
} }
</style> </style>

@ -0,0 +1,114 @@
<template>
<el-dialog v-model="setCrewShow" :before-close="cancel" :title="title" width="30%">
<avue-form :option="option" ref="from" v-model="formData"></avue-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="cancel()">取消</el-button>
<el-button type="primary" @click="submit()"> 确认 </el-button>
</div>
</template>
</el-dialog>
</template>
<script>
// setDispatch
import { submitApproval } from '@/api/flowManagement/index';
export default {
name: 'SetPersonnel',
props: {
showDialog: {
type: Boolean,
default: false,
},
id: {
type: String,
default: null,
},
type: {
type: String,
default: '',
},
title: {
type: String,
default: '审批人',
},
updateRow: {
type: Array,
default: [],
},
},
data() {
return {
url: '',
setCrewShow: false,
formData: {},
selectData: {},
option: {
submitBtn: false,
emptyBtn: false,
column: [
{
label: '审批人',
prop: 'userId',
span: 23,
type: 'select',
filterable: true,
clearable: true,
dicUrl: '/blade-desk/fmProjectApprovalConfig/getUsersByNodeCode?nodeCode=PROJECT_APPROVAL',
props: {
label: 'realName',
value: 'id',
res: 'data',
},
change: (val, row) => {
console.log(val, row, 'val');
// this.onChangeData(val, 'processIds', row);\\
this.selectData = val;
},
rules: [
{
required: true,
message: '请选择',
trigger: 'blur',
},
],
},
],
},
};
},
mounted() {
this.setCrewShow = this.showDialog;
},
methods: {
submit() {
this.$refs.from.validate((valid, done, msg) => {
if (valid) {
// done();
let query = {
id: this.updateRow.id,
approverId: this.selectData.item.id,
approverName: this.selectData.item.realName,
};
submitApproval(query).then(res=>{
this.$message.success('操作成功');
this.cancel();
})
} else {
console.log('error submit!!');
return false;
}
});
},
cancel(refresh) {
this.setCrewShow = false;
this.$emit('closeDialog');
},
},
};
</script>

@ -0,0 +1,194 @@
<template>
<el-dialog title="节点配置" append-to-body :modelValue="openShow" width="40%" @close="closeDialog">
<!-- 单个 Form 包裹整个表格 -->
<el-form ref="tableForm" :model="form" :rules="formRules" label-width="0px">
<!-- 全局错误提示 -->
<div v-if="formError" class="error-message" style="color: #f56c6c; margin-bottom: 10px;">
{{ formError }}
</div>
<el-table :data="form.tableData" border>
<el-table-column align="center" label="节点">
<template #default="scope">
{{ scope.row.nodeName }}
</template>
</el-table-column>
<el-table-column align="center" :label="'设置角色'">
<template #header>
<span><i style="color: red">*</i>设置角色</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].roleId`" :rules="formRules.roleId">
<el-select v-model="scope.row.roleId" placeholder="请选择" style="width: 100%" filterable clearable
@change="val => roleChange(val, scope.$index)">
<el-option v-for="item in roleList" :key="item.id" :value="item.id" :label="item.roleName"></el-option>
</el-select>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import { getProjectApprovalConfigList, batchUpdateRole } from '@/api/flowManagement/index';
import { getList } from '@/api/system/role.js';
export default {
props: {
showDialog: { type: Boolean, default: false },
moldAddMore: { type: Boolean, default: false },
tabPosition: { type: String, default: '' },
},
data() {
return {
openShow: false,
wcData: [],
formError: '', //
//
form: {
tableData: [] // Form
},
//
formRules: {
// 1
tableData: [
{
required: true,
message: '请至少添加一行数据',
trigger: 'submit',
type: 'array' //
},
{
validator: (rule, value, callback) => {
if (value.length === 0) {
callback(new Error('请至少添加一行数据'));
} else {
callback();
}
},
trigger: 'submit'
}
],
// wcId
roleId: [
{ required: true, message: '请选择', trigger: ['change', 'submit'] }
],
},
roleList: [],//
};
},
mounted() {
this.openShow = this.showDialog;
this.getRoleList();
this.init();
},
methods: {
//
init() {
getProjectApprovalConfigList().then(res => {
this.form.tableData = res.data.data
})
},
//
getRoleList() {
getList().then(res => {
console.log(res.data.data, 'wcData')
this.roleList = res.data.data
})
},
roleChange(val, index) {
let selecInfo = this.roleList.find(item => item.id === val)
this.form.tableData[index].roleName = selecInfo.roleName
},
closeDialog() {
this.openShow = false;
this.$emit('closeDialog', true);
//
this.form.tableData = [];
this.formError = '';
this.$refs.tableForm?.resetFields();
},
//
submitForm() {
this.formError = '';
// Form
this.$refs.tableForm.validate((isValid, invalidFields) => {
if (!isValid) {
//
this.formError = '存在未完善的字段,请检查表格中的红色提示';
this.$nextTick(() => {
//
const firstError = document.querySelector('.el-form-item.is-error');
if (firstError) {
firstError.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
});
return;
}
//
try {
batchUpdateRole(this.form.tableData).then(res => {
this.$message.success('提交成功');
this.closeDialog(true);
})
} catch (err) {
console.error('提交失败:', err);
}
});
}
},
};
</script>
<style lang="scss" scoped>
//
:deep(.el-table .el-form-item) {
margin-bottom: 0; //
}
//
:deep(.el-form-item__error) {
font-size: 12px;
white-space: nowrap;
z-index: 10;
background: #fff;
padding: 2px 4px;
border: 1px solid #f56c6c;
border-radius: 4px;
}
// textarea
.el-table__row {
height: 80px !important;
}
.el-table__cell {
vertical-align: middle !important;
}
.error-message {
font-size: 14px;
line-height: 1.5;
}
</style>

@ -1,47 +1,39 @@
<template> <template>
<basic-container> <basic-container>
<!-- 重点工作管理 --> <!-- 重点工作管理 -->
<avue-crud <avue-crud :option="option" :table-loading="loading" :data="data" v-model="form" v-model:page="page" ref="crud"
:option="option" @search-change="searchChange" @search-reset="searchReset" @current-change="currentChange"
:table-loading="loading" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad" @sort-change="sortChange">
:data="data"
v-model="form"
v-model:page="page"
ref="crud"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
@sort-change="sortChange"
>
<template #menu-left> <template #menu-left>
<el-button type="primary" @click="handleAdd" v-if="permissionList.addBtn"> 新增 </el-button> <el-button type="primary" @click="handleAdd" v-if="permission.managementOfKeyTasks_add">
新增
</el-button>
</template>
<template #menu-right>
<el-button type="primary" @click="setRole" v-if="permission.managementOfKeyTasks_configRole">
配置节点
</el-button>
</template> </template>
<template #menu="{ row }"> <template #menu="{ row }">
<el-button type="text" @click="handleView(row)" v-if="permissionList.viewBtn"> <el-button type="text" @click="handleView(row)" v-if="permission.managementOfKeyTasks_details">
详情 详情
</el-button> </el-button>
<el-button <el-button type="text" v-if="row.approvalStatus != 8 && permission.managementOfKeyTasks_edit"
type="text" @click="handleEdit(row)">
v-if="row.approvalStatus != 8 && permissionList.editBtn"
@click="handleEdit(row)"
>
修改 修改
</el-button> </el-button>
<el-button <el-button type="text" v-if="row.approvalStatus == 0 && permission.managementOfKeyTasks_sendChenck"
type="text" @click="sendReview(row)">
v-if="row.approvalStatus == 1 && permissionList.reviewBtn" 发送审核
@click="checkRow(row)" </el-button>
> <el-button type="text" v-if="row.approvalStatus == 1 && permission.managementOfKeyTasks_review"
@click="checkRow(row)">
审核 审核
</el-button> </el-button>
<el-button <el-button type="text" v-if="
type="text" (row.approvalStatus == 0 || row.approvalStatus == 2) &&
v-if="(row.approvalStatus == 1||row.approvalStatus ==2) && permissionList.deleteBtn" permission.managementOfKeyTasks_del
@click="deleteRow(row)" " @click="deleteRow(row)">
>
删除 删除
</el-button> </el-button>
</template> </template>
@ -52,57 +44,48 @@
<template #projectDesiredEnd="scope"> <template #projectDesiredEnd="scope">
{{ scope.row.projectDesiredEnd ? scope.row.projectDesiredEnd.substring(0, 10) : '' }} {{ scope.row.projectDesiredEnd ? scope.row.projectDesiredEnd.substring(0, 10) : '' }}
</template> </template>
</avue-crud> </avue-crud>
<!-- 新增弹窗 --> <!-- 新增弹窗 -->
<add-dialog <add-dialog v-if="addDialogVisible" :title="title" :visible="addDialogVisible" :rowItem="rowItem"
v-if="addDialogVisible" @close="closeDialog"></add-dialog>
:title="title"
:visible="addDialogVisible"
:rowItem="rowItem"
@close="closeDialog"
></add-dialog>
<!-- 审核弹窗 --> <!-- 审核弹窗 -->
<review <review v-if="checkDialog" :showDialog="checkDialog" @closeDialog="closeDialog" :rowItem="rowItem"></review>
v-if="checkDialog"
:showDialog="checkDialog" <!-- 各节点配置 -->
@closeDialog="closeDialog" <configRole :showDialog="configRoleDialog" v-if="configRoleDialog" @closeDialog="closeDialog"></configRole>
:rowItem="rowItem"
></review>
<!-- 选择审批人 -->
<assignDaialog :showDialog="reviewUserShow" v-if="reviewUserShow" :updateRow="rowItem" @closeDialog="closeDialog">
</assignDaialog>
<!-- 执行/核查/核准弹窗 -->
<milestoneDialog
:title="subTitle"
:showDialog="executeDialog"
v-if="executeDialog"
@closeDialog="closeDialog"
:rowItem="executeForm"
:detailForm="detailForm"
></milestoneDialog>
</basic-container> </basic-container>
</template> </template>
<script> <script>
import { import {
getProcessList, getProcessList,
addProcess,
updateProcess, updateProcess,
delProcess, delProcess,
} from '../../api/flowManagement/index'; } from '@/api/flowManagement/index';
import AddDialog from './addDialog.vue'; import AddDialog from './addDialog.vue';
import review from './review.vue'; import review from './review.vue';
import milestoneDialog from './milestoneDialog.vue'; import milestoneDialog from './milestoneDialog.vue';
import { getDictionary } from '@/api/system/dict'; import { getDictionary } from '@/api/system/dict';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import configRole from './configRole.vue';
import assignDaialog from './assignDaialog.vue';
export default { export default {
components: { AddDialog, review, milestoneDialog }, components: { AddDialog, review, milestoneDialog, configRole, assignDaialog },
data() { data() {
return { return {
// //
// 0-1-2-3- // 0-1-2-3-
// 4-5-6-7- // 4-5-6-7-
// 8- // 8-
reviewUserShow: false,
configRoleDialog: false,
addDialogVisible: false, // addDialogVisible: false, //
title: '新增', title: '新增',
loading: false, loading: false,
@ -176,6 +159,7 @@ export default {
overflow: true, overflow: true,
search: true, search: true,
sortable: 'custom', sortable: 'custom',
width: 120,
}, },
{ {
label: '项目名称', label: '项目名称',
@ -183,6 +167,7 @@ export default {
overflow: true, overflow: true,
search: true, search: true,
sortable: 'custom', sortable: 'custom',
width: 120,
}, },
{ {
label: '项目负责人', label: '项目负责人',
@ -215,11 +200,12 @@ export default {
overflow: true, overflow: true,
search: false, search: false,
sortable: 'custom', sortable: 'custom',
width: 100,
}, },
{ {
label: '制单部门', label: '制单部门',
prop: 'touchingDept', prop: 'touchingDept',
width: 120,
overflow: true, overflow: true,
search: false, search: false,
sortable: 'custom', sortable: 'custom',
@ -227,16 +213,23 @@ export default {
{ {
label: '制单时间', label: '制单时间',
prop: 'touchingTime', prop: 'touchingTime',
width: 150,
overflow: true, overflow: true,
search: false, search: false,
sortable: 'custom', sortable: 'custom',
}, },
{
label: '审核人',
prop: 'approvalManName',
overflow: true,
search: false,
sortable: 'custom',
width: 100,
},
{ {
label: '状态', label: '状态',
prop: 'approvalStatus', prop: 'approvalStatus',
sortable: 'custom', sortable: 'custom',
overflow: true, overflow: true,
search: false, search: false,
type: 'select', type: 'select',
@ -256,20 +249,14 @@ export default {
}, },
computed: { computed: {
...mapGetters(['permission']), ...mapGetters(['permission']),
permissionList() {
return {
addBtn: this.validData(this.permission.managementOfKeyTasks_add, false),
viewBtn: this.validData(this.permission.managementOfKeyTasks_details, false),
editBtn: this.validData(this.permission.managementOfKeyTasks_edit, false),
reviewBtn: this.validData(this.permission.managementOfKeyTasks_review, false),
deleteBtn: this.validData(this.permission.managementOfKeyTasks_del, false),
};
},
}, },
mounted() { mounted() {
this.getExecuteResult(); this.getExecuteResult();
}, },
methods: { methods: {
setRole() {
this.configRoleDialog = true;
},
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); console.log('item', item);
@ -281,13 +268,6 @@ export default {
this.executeResultList = res.data.data; this.executeResultList = res.data.data;
}); });
}, },
// flow_project_checkResult
getCheckResult() {
getDictionary({ code: 'flow_project_checkResult' }).then(res => {
this.checkResultList = res.data;
});
},
// flow_project_grade
getGrade() { getGrade() {
getDictionary({ code: 'flow_project_grade' }).then(res => { getDictionary({ code: 'flow_project_grade' }).then(res => {
@ -299,6 +279,8 @@ export default {
this.checkDialog = false; this.checkDialog = false;
this.addDialogVisible = false; this.addDialogVisible = false;
this.executeDialog = false; this.executeDialog = false;
this.configRoleDialog = false;
this.reviewUserShow = false
// if (type) { // if (type) {
this.onLoad(this.page, this.query); this.onLoad(this.page, this.query);
// } // }
@ -339,74 +321,12 @@ export default {
this.checkDialog = true; this.checkDialog = true;
this.rowItem = row; this.rowItem = row;
}, },
//
submitCheck() { //
this.$refs.checkForm.validate(valid => { sendReview(row) {
if (valid) { this.reviewUserShow = true;
let query = { this.rowItem = row;
id: this.rowItem.id,
approvalStatus: this.checkForm.checkResult == 1 ? 3 : 2,
};
updateProcess(query).then(res => {
this.checkDialog = false;
this.onLoad(this.page, this.query);
});
}
});
},
//
executeRow(row, detail) {
this.detailForm = detail;
this.executeForm = row;
this.subTitle = '执行';
this.executeDialog = true;
},
//
auditRow(row, detail) {
this.subTitle = '核查';
this.detailForm = detail;
this.executeForm = row;
//
this.existingFiles = [
{ name: '项目计划书.pdf', url: '#' },
{ name: '进度报告.docx', url: '#' },
];
this.executeDialog = true;
},
//
examineRow(row, detail) {
this.subTitle = '核准';
this.detailForm = detail;
this.executeForm = row;
//
this.existingFiles = [
{ name: '项目计划书.pdf', url: '#' },
{ name: '进度报告.docx', url: '#' },
{ name: '验收单.xlsx', url: '#' },
];
this.executeDialog = true;
},
//
downloadFile(file) {
const link = document.createElement('a');
link.href = file.url;
link.download = file.name;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
},
//
removeExistingFile(index) {
this.$confirm('确定删除该附件?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
this.existingFiles.splice(index, 1);
this.$message.success('删除成功');
})
.catch(() => {});
}, },
searchReset() { searchReset() {
this.query = {}; this.query = {};
@ -443,9 +363,9 @@ export default {
this.loading = true; this.loading = true;
getProcessList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then( getProcessList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(
res => { res => {
// this.data = res.data.data.records;
const records = res.data.data.records; const records = res.data.data.records;
this.data = records.map(item => { this.data = records.map(item => {
item.approvalStatus = item.approvalStatus + '';
if (item.stoneList && Array.isArray(item.stoneList)) { if (item.stoneList && Array.isArray(item.stoneList)) {
item.stoneList = item.stoneList.map(stone => ({ item.stoneList = item.stoneList.map(stone => ({
...stone, ...stone,

@ -1,12 +1,5 @@
<template> <template>
<el-dialog <el-dialog :title="title" append-to-body :modelValue="openShow" width="80%" @close="closeDialog" fullscreen>
:title="title"
append-to-body
:modelValue="openShow"
width="80%"
@close="closeDialog"
fullscreen
>
<el-form :model="detailForm" :rules="executeRules" ref="executeForm" label-width="100"> <el-form :model="detailForm" :rules="executeRules" ref="executeForm" label-width="100">
<el-row> <el-row>
<el-col :span="6"> <el-col :span="6">
@ -51,100 +44,46 @@
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="执行类型:" prop="executeType"> <el-form-item label="执行类型:" prop="executeType">
<el-select <el-select :disabled="subTitle == '核查' || subTitle == '核准'" v-model="detailForm.executeType"
:disabled="subTitle == '核查' || subTitle == '核准'" @change="executeTypeChange" filterable clearable>
v-model="detailForm.executeType" <el-option v-for="(item, index) in executeResultList" :label="item.dictValue"
@change="executeTypeChange" :value="item.dictKey"></el-option>
filterable
clearable
>
<el-option
v-for="(item, index) in executeResultList"
:label="item.dictValue"
:value="item.dictKey"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="延期时间:" v-if="detailForm.executeType == 1"> <el-form-item label="延期时间:" v-if="detailForm.executeType == 1">
<el-date-picker <el-date-picker :disabled="subTitle == '核查' || subTitle == '核准'" style="width: 100%"
:disabled="subTitle == '核查' || subTitle == '核准'" v-model="detailForm.delayTime" type="date" placeholder="选择日期时间" format="YYYY-MM-DD"
style="width: 100%" value-format="YYYY-MM-DD" />
v-model="detailForm.delayTime"
type="date"
placeholder="选择日期时间"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="14"> <el-col :span="14">
<el-form-item label="里程碑描述:" prop="milestoneMemo"> <el-form-item label="里程碑描述:" prop="milestoneMemo">
<el-input <el-input :disabled="subTitle == '核查' || subTitle == '核准'" type="textarea"
:disabled="subTitle == '核查' || subTitle == '核准'" v-model="detailForm.milestoneMemo"></el-input>
type="textarea"
v-model="detailForm.milestoneMemo"
></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="14"> <el-col :span="14">
<el-form-item label="里程碑进展:" prop="evolve"> <el-form-item label="里程碑进展:" prop="evolve">
<el-input <el-input :disabled="subTitle == '核查' || subTitle == '核准'" type="textarea"
:disabled="subTitle == '核查' || subTitle == '核准'" v-model="detailForm.evolve"></el-input>
type="textarea"
v-model="detailForm.evolve"
></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="14"> <el-col :span="14">
<el-form-item label="下一步计划:" prop="lastPlan"> <el-form-item label="下一步计划:" prop="lastPlan">
<el-input <el-input :disabled="subTitle == '核查' || subTitle == '核准'" type="textarea"
:disabled="subTitle == '核查' || subTitle == '核准'" v-model="detailForm.lastPlan"></el-input>
type="textarea"
v-model="detailForm.lastPlan"
></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="14"> <el-col :span="14">
<el-form-item <el-form-item label="附件:" v-if="subTitle == '执行' || subTitle == '核查' || subTitle == '核准'" prop="attachList">
label="附件:" <el-upload class="upload-demo" action="/api/blade-resource/oss/endpoint/put-file-attach"
v-if="subTitle == '执行' || subTitle == '核查' || subTitle == '核准'" :on-success="handleSuccess" :on-remove="handleRemove" multiple :limit="1" :on-exceed="handleExceed"
prop="attachList" :file-list="fileList" accept=".pdf,.doc,.docx" v-if="subTitle == '执行'">
>
<!-- <el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
multiple
:limit="3"
:on-exceed="handleExceed"
:file-list="fileList"
>
<el-button type="primary">点击上传</el-button>
<div>不能上传 exe 附件且不超过 20M</div>
</el-upload> -->
<el-upload
class="upload-demo"
action="/api/blade-resource/oss/endpoint/put-file-attach"
:on-success="handleSuccess"
:on-remove="handleRemove"
multiple
:limit="1"
:on-exceed="handleExceed"
:file-list="fileList"
accept=".pdf,.doc,.docx"
v-if="subTitle == '执行'"
>
<div> <div>
<el-button type="primary">点击上传</el-button> <el-button type="primary">点击上传</el-button>
<div <div slot="tip" class="el-upload__tip">
slot="tip"
class="el-upload__tip"
>
支持扩展名:.pdf.doc.docx 支持扩展名:.pdf.doc.docx
</div> </div>
</div> </div>
@ -155,61 +94,41 @@
<ul> <ul>
<li v-for="(file, index) in existingFiles" :key="index"> <li v-for="(file, index) in existingFiles" :key="index">
<a href="javascript:void(0)" @click="downloadFile(file)">{{ file.name }}</a> <a href="javascript:void(0)" @click="downloadFile(file)">{{ file.name }}</a>
<!-- <el-button type="text" size="small" @click="removeExistingFile(index)"
>删除</el-button
> -->
</li> </li>
</ul> </ul>
</div> </div>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="14"> <el-col :span="14">
<el-form-item label="核查人:" v-if="subTitle == '执行'"> <el-form-item label="核查人:" v-if="subTitle == '执行'" prop="userId">
<jhSelect <el-select v-model="detailForm.userId" placeholder="请选择" style="width: 100%" filterable clearable @change="val=>userIdChange(val)">
:value="detailForm.userId" <el-option v-for="item in usersRoleList" :key="item.id" :value="item.id"
@input="val => (detailForm.userId = val)" :label="item.realName"></el-option>
placeholder="请搜索选择" </el-select>
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="handleUserChange"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="14"> <el-col :span="14">
<el-form-item label="核查结果:" v-if="subTitle == '核查'"> <el-form-item label="核查结果:" v-if="subTitle == '核查'" prop="checkResult">
<el-select v-model="detailForm.checkResult" clearable filterable> <el-select v-model="detailForm.checkResult" clearable filterable>
<el-option label="通过" value="2"></el-option> <el-option label="通过" value="2"></el-option>
<el-option label="不通过" value="3"></el-option> <el-option label="不通过" value="3"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="14">
<el-form-item label="核准人:" v-if="subTitle == '核查'" prop="hz_userId">
<el-select v-model="detailForm.hz_userId" placeholder="请选择" style="width: 100%" filterable clearable @change="hz_userIdChange">
<el-option v-for="item in usersRoleList_hz" :key="item.id" :value="item.id"
:label="item.realName"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="14"> <el-col :span="14">
<el-form-item label="审核人:" v-if="subTitle == '核查' && detailForm.checkResult == 1"> <el-form-item label="审核人:" v-if="subTitle == '核查' && detailForm.checkResult == 1">
<jhSelect <jhSelect :value="detailForm.userId" @input="val => (detailForm.userId = val)" placeholder="请搜索选择"
:value="detailForm.userId" api-url="/blade-system/user/page" echo-api="/blade-system/user/page" echoParamsKey="ids" echo-method="get"
@input="val => (detailForm.userId = val)" api-method="get" list-key="records" total-key="total" label-key="realName" value-key="id" search-key="id"
placeholder="请搜索选择" :debounce-time="500" />
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>
<div v-if="subTitle == '核准'" style="color: #ffc300; margin-bottom: 10px"> <div v-if="subTitle == '核准'" style="color: #ffc300; margin-bottom: 10px">
@ -226,17 +145,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="14"> <el-col :span="14">
<el-form-item <el-form-item label="审核意见:" prop="checkOpinion" label-width="80px" v-if="subTitle == '核准'">
label="审核意见:" <el-input type="textarea" placeholder="请输入审核意见" v-model="detailForm.checkOpinion"></el-input>
prop="checkOpinion"
label-width="80px"
v-if="subTitle == '核准'"
>
<el-input
type="textarea"
placeholder="请输入审核意见"
v-model="detailForm.checkOpinion"
></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -257,6 +167,7 @@ import {
projectCheck, projectCheck,
projectApprove, projectApprove,
getProcessDetail, getProcessDetail,
getUsersByNodeCode
} from '@/api/flowManagement/index'; } from '@/api/flowManagement/index';
import { getDictionary } from '@/api/system/dict'; import { getDictionary } from '@/api/system/dict';
import jhSelect from '@/components/jh-select/index.vue'; import jhSelect from '@/components/jh-select/index.vue';
@ -286,57 +197,106 @@ export default {
openShow: false, openShow: false,
memberList: [], memberList: [],
executeForm: { executeForm: {
attachList:[] attachList: []
}, },
executeRules: { executeRules: {
executeType: [{ required: true, message: '请选择执行类型', trigger: 'blur' }], executeType: [{ required: true, message: '请选择执行类型', trigger: 'blur' }],
milestoneMemo: [{ required: true, message: '请填写里程碑描述', trigger: 'blur' }], milestoneMemo: [{ required: true, message: '请填写里程碑描述', trigger: 'blur' }],
evolve: [{ required: true, message: '请填写里程碑进展', trigger: 'blur' }], evolve: [{ required: true, message: '请填写里程碑进展', trigger: 'blur' }],
lastPlan: [{ required: true, message: '请填写下一步计划', trigger: 'blur' }], lastPlan: [{ required: true, message: '请填写下一步计划', trigger: 'blur' }],
attachList: [ // attachList: [
{required: true, // {
validator: (rule, value, callback) => { // required: true,
// subTitle '' // validator: (rule, value, callback) => {
if (this.subTitle === '执行') { // // subTitle ''
// fileList // if (this.subTitle === '') {
if (!this.fileList || this.fileList.length === 0) { // // fileList
callback(new Error('请上传附件')); // if (!this.fileList || this.fileList.length === 0) {
} else { // callback(new Error(''));
callback(); // } else {
} // callback();
} else { // }
// // } else {
callback(); // //
} // callback();
}, // }
// },
// trigger: 'change',
// },
// ],
userId: [
{
required: true,
message: '请选择核查人',
trigger: 'change',
},
],
checkResult: [
{
required: true,
message: '请选择审核结果',
trigger: 'change',
},
],
hz_userId: [
{
required: true,
message: '请选择核准人',
trigger: 'change', trigger: 'change',
}, },
], ],
}, },
subTitle: '', subTitle: '',
executeResultList: [], executeResultList: [],
fileList:[], fileList: [],
usersRoleList: [],
usersRoleList_hz: []
}; };
}, },
mounted() { mounted() {
this.openShow = this.showDialog; this.openShow = this.showDialog;
// this.executeForm = this.rowItem;
// console.log(this.detailForm, 'title');
this.detailForm.checkResult = null; this.detailForm.checkResult = null;
this.subTitle = this.title; this.subTitle = this.title;
console.log(this.rowItem, 'rowItem'); console.log(this.rowItem, 'rowItem');
this.getRoleUserList(); this.getRoleUserList();
this.getExecuteResult(); this.getExecuteResult();
this.getDetails(); this.getDetails();
if (this.subTitle == '执行') {
this.getUsersByNodeCode()
}
if (this.subTitle == '核查') {
this.getUsersByNodeCode_hz()
}
}, },
methods: { methods: {
getUsersByNodeCode() {
getUsersByNodeCode({ nodeCode: 'EXECUTE_CHECK' }).then(res => {
this.usersRoleList = res.data.data;
})
},
getUsersByNodeCode_hz() {
getUsersByNodeCode({ nodeCode: 'CHECK_APPROVE' }).then(res => {
this.usersRoleList_hz = res.data.data;
})
},
userIdChange(val){
this.detailForm.nextApproverId = val
let select = this.usersRoleList.find(item => item.id === val)
this.detailForm.nextApproverName = select.realName
this.detailForm.checkMan = select.realName;
},
hz_userIdChange(val){
this.detailForm.nextApproverId = val
let select = this.usersRoleList_hz.find(item => item.id === val)
this.detailForm.nextApproverName = select.name
},
handleRemove(file, fileList) { handleRemove(file, fileList) {
this.fileList = []; this.fileList = [];
}, },
handleSuccess(response, file, fileList) { handleSuccess(response, file, fileList) {
console.log(response.data, 'response.data.link'); console.log(response.data, 'response.data.link');
// this.ruleForm.attachId = response.data.attachId; // this.ruleForm.attachId = response.data.attachId;
this.fileList.push(response.data); this.fileList.push(response.data);
}, },
handleExceed(files, fileList) { handleExceed(files, fileList) {
@ -367,12 +327,7 @@ export default {
executeTypeChange() { executeTypeChange() {
this.detailForm.delayTime = ''; this.detailForm.delayTime = '';
}, },
handleUserChange(value, item) {
if(item){
this.detailForm.checkMan = item.realName;
}
},
getExecuteResult() { getExecuteResult() {
getDictionary({ code: 'flow_project_executeResult' }).then(res => { getDictionary({ code: 'flow_project_executeResult' }).then(res => {
this.executeResultList = res.data.data; this.executeResultList = res.data.data;
@ -392,22 +347,20 @@ export default {
this.$refs.executeForm.validate(valid => { this.$refs.executeForm.validate(valid => {
if (valid) { if (valid) {
this.loadingShow = true; this.loadingShow = true;
// this.executeDialog = false;
if (this.title == '执行') { if (this.title == '执行') {
let query_ = { let query_ = {
...this.detailForm, ...this.detailForm,
fmProjectApplication: { fmProjectApplication: {
// ...this.executeForm,
id: this.executeForm.id, id: this.executeForm.id,
}, },
attachList: this.fileList, attachList: this.fileList,
nextApproverId: this.detailForm.userId,
nextApproverName: this.detailForm.checkMan
}; };
query_.checkResult = 1; query_.checkResult = 1;
// query_.fmProjectApplication.delayTime =
// query_.fmProjectApplication.delayTime + ' 00:00:00';
query_.delayTime = query_.delayTime == '' ? null : query_.delayTime + ' 00:00:00'; query_.delayTime = query_.delayTime == '' ? null : query_.delayTime + ' 00:00:00';
query_.okTime = query_.okTime == '' ? null : query_.okTime; query_.okTime = query_.okTime == '' ? null : query_.okTime;
console.log(query_, 'query_执行');
projectExecute(query_) projectExecute(query_)
.then(res => { .then(res => {
this.$message.success('操作成功!'); this.$message.success('操作成功!');
@ -422,17 +375,9 @@ export default {
let query_ = { let query_ = {
...this.detailForm, ...this.detailForm,
fmProjectApplication: { fmProjectApplication: {
// ...this.executeForm,
id: this.executeForm.id, id: this.executeForm.id,
}, },
// attachList: this.existingFiles,
}; };
// if (query_.checkResult == 2) {
// query_.fmProjectApplication.approvalStatus = 6;
// }
// if (query_.checkResult == 3) {
// query_.fmProjectApplication.approvalStatus = 5;
// }
projectCheck(query_) projectCheck(query_)
.then(res => { .then(res => {
this.$message.success('操作成功!'); this.$message.success('操作成功!');
@ -447,7 +392,6 @@ export default {
let query_ = { let query_ = {
...this.detailForm, ...this.detailForm,
fmProjectApplication: { fmProjectApplication: {
// ...this.executeForm,
id: this.executeForm.id, id: this.executeForm.id,
}, },
}; };

@ -86,9 +86,7 @@
</span> </span>
<span v-else></span> <span v-else></span>
</template> </template>
<!-- <template #executeType="scope">
{{ scope.row.executeTypeText }}
</template> -->
</avue-crud> </avue-crud>
<!-- 新增弹窗 --> <!-- 新增弹窗 -->
<add-dialog <add-dialog
@ -195,7 +193,7 @@ export default {
label: '项目编号', label: '项目编号',
prop: 'paCode', prop: 'paCode',
overflow: true, overflow: true,
search: true, search: false,
sortable: 'custom', sortable: 'custom',
width: 140, width: 140,
}, },
@ -246,8 +244,14 @@ export default {
search: true, search: true,
sortable: 'custom', sortable: 'custom',
width: 120, width: 120,
type:'date',
searchRange:true,
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
searchOrder:11,
}, },
{ {
label: '项目开始时间', label: '项目开始时间',
prop: 'projectStartTime', prop: 'projectStartTime',
@ -266,11 +270,16 @@ export default {
}, },
{ {
label: '执行类型', label: '执行类型',
prop: 'executeTypeText', prop: 'executeType',
overflow: true, overflow: true,
search: true, search: false,
// sortable: 'custom',
width: 140, width: 140,
type: 'select',
dicUrl: '/blade-system/dict/dictionary?code=flow_project_executeResult',
props: {
label: 'dictValue',
value: 'dictKey',
},
}, },
{ {
label: '延期时间', label: '延期时间',
@ -284,8 +293,7 @@ export default {
label: '核查结果', label: '核查结果',
prop: 'checkResultTitle', prop: 'checkResultTitle',
overflow: true, overflow: true,
search: true, search: false,
// sortable: 'custom',
width: 140, width: 140,
}, },
{ {
@ -300,7 +308,7 @@ export default {
label: '评价等级', label: '评价等级',
prop: 'gradeTitle', prop: 'gradeTitle',
overflow: true, overflow: true,
search: true, search: false,
// sortable: 'custom', // sortable: 'custom',
width: 140, width: 140,
}, },
@ -348,13 +356,13 @@ export default {
console.log('item', item); console.log('item', item);
return item ? item.dictValue : ''; return item ? item.dictValue : '';
}, },
// flow_project_executeResult //
getExecuteResult() { getExecuteResult() {
getDictionary({ code: 'flow_project_executeResult' }).then(res => { getDictionary({ code: 'flow_project_executeResult' }).then(res => {
this.executeResultList = res.data.data; this.executeResultList = res.data.data;
}); });
}, },
// flow_project_checkResult //
getCheckResult() { getCheckResult() {
getDictionary({ code: 'flow_project_checkResult' }).then(res => { getDictionary({ code: 'flow_project_checkResult' }).then(res => {
this.checkResultList = res.data; this.checkResultList = res.data;
@ -496,6 +504,11 @@ export default {
}, },
onLoad(page, params = {}) { onLoad(page, params = {}) {
this.loading = true; this.loading = true;
if(!! params.milestoneNode){
params.milestoneNodeStart = params.milestoneNode[0];
params.milestoneNodeEnd = params.milestoneNode[1];
delete params.milestoneNode;
}
getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => { getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
const records = res.data.data.records; const records = res.data.data.records;
this.data = records; this.data = records;

@ -13,6 +13,7 @@
<script> <script>
import { import {
updateProcess, updateProcess,
approval
} from '../../api/flowManagement/index'; } from '../../api/flowManagement/index';
export default { export default {
props: { props: {
@ -61,7 +62,7 @@ export default {
id:this.rowItem.id, id:this.rowItem.id,
approvalStatus:this.form.status approvalStatus:this.form.status
} }
updateProcess(query).then(res=>{ approval(query).then(res=>{
this.$message.success('操作成功') this.$message.success('操作成功')
this.closeDialog(true) this.closeDialog(true)
}) })

Loading…
Cancel
Save