|
|
|
|
@ -122,6 +122,7 @@ |
|
|
|
|
</el-table> |
|
|
|
|
</template> |
|
|
|
|
</avue-crud> |
|
|
|
|
<!-- 新增弹窗 --> |
|
|
|
|
<el-dialog append-to-body :title="title" v-model="addDialog" width="80%"> |
|
|
|
|
<el-form ref="addForm" :model="addForm" :rules="addRules" label-width="140px"> |
|
|
|
|
<el-row> |
|
|
|
|
@ -243,10 +244,11 @@ |
|
|
|
|
<el-button type="primary" icon="el-icon-plus" @click="openDialog()" |
|
|
|
|
>插入一行</el-button |
|
|
|
|
> |
|
|
|
|
<el-button plain type="danger" @click="remove">删除选择行</el-button> |
|
|
|
|
<el-button plain type="danger" @click="delTable">删除选择行</el-button> |
|
|
|
|
<!-- <el-button type="primary" @click="handleSave">保存</el-button> --> |
|
|
|
|
</div> |
|
|
|
|
<el-table :data="addForm.detailList"> |
|
|
|
|
<!-- 插入一行 --> |
|
|
|
|
<el-table :data="addForm.detailList" ref="detailTable"> |
|
|
|
|
<el-table-column type="selection"></el-table-column> |
|
|
|
|
<el-table-column type="index" width="80" label="序号"></el-table-column> |
|
|
|
|
<el-table-column |
|
|
|
|
@ -254,25 +256,97 @@ |
|
|
|
|
:width="title == '详情' ? '120' : ''" |
|
|
|
|
label="里程碑计划" |
|
|
|
|
prop="milestonePlan" |
|
|
|
|
></el-table-column> |
|
|
|
|
> |
|
|
|
|
<template #default="scope"> |
|
|
|
|
<template v-if="title != '详情'"> |
|
|
|
|
<el-form-item |
|
|
|
|
:prop="'detailList.' + scope.$index + '.milestonePlan'" |
|
|
|
|
:rules="{ required: true, message: '请输入里程碑计划', trigger: ['blur'] }" |
|
|
|
|
label-width="0" |
|
|
|
|
> |
|
|
|
|
<el-input |
|
|
|
|
v-model="scope.row.milestonePlan" |
|
|
|
|
placeholder="请输入里程碑计划" |
|
|
|
|
@input="() => {$refs.addForm.validateField('detailList.' + scope.$index + '.milestonePlan')}" |
|
|
|
|
></el-input> |
|
|
|
|
</el-form-item> |
|
|
|
|
</template> |
|
|
|
|
<template v-else> |
|
|
|
|
<span>{{ scope.row.milestonePlan }}</span> |
|
|
|
|
</template> |
|
|
|
|
</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
<el-table-column |
|
|
|
|
align="center" |
|
|
|
|
:width="title == '详情' ? '120' : ''" |
|
|
|
|
label="里程碑负责人" |
|
|
|
|
prop="milestoneMan.userId" |
|
|
|
|
></el-table-column> |
|
|
|
|
> |
|
|
|
|
<template #default="scope"> |
|
|
|
|
<template v-if="title != '详情'"> |
|
|
|
|
<el-form-item |
|
|
|
|
:prop="'detailList.' + scope.$index + '.milestoneMan.userId'" |
|
|
|
|
:rules="{ required: true, message: '请选择里程碑负责人', trigger: 'change' }" |
|
|
|
|
label-width="0" |
|
|
|
|
> |
|
|
|
|
<el-select v-model="scope.row.milestoneMan.userId" placeholder="请选择里程碑负责人"> |
|
|
|
|
<el-option label="负责人一" :value="1"></el-option> |
|
|
|
|
<el-option label="负责人二" :value="2"></el-option> |
|
|
|
|
</el-select> |
|
|
|
|
</el-form-item> |
|
|
|
|
</template> |
|
|
|
|
<template v-else> |
|
|
|
|
<span>{{ scope.row.milestoneMan.userName }}</span> |
|
|
|
|
</template> |
|
|
|
|
</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
<el-table-column |
|
|
|
|
align="center" |
|
|
|
|
:width="title == '详情' ? '150' : ''" |
|
|
|
|
label="里程碑输出物" |
|
|
|
|
prop="outputMaterial" |
|
|
|
|
></el-table-column> |
|
|
|
|
> |
|
|
|
|
<template #default="scope"> |
|
|
|
|
<template v-if="title != '详情'"> |
|
|
|
|
<el-form-item |
|
|
|
|
:prop="'detailList.' + scope.$index + '.outputMaterial'" |
|
|
|
|
:rules="{ required: true, message: '请输入里程碑输出物', trigger: 'blur' }" |
|
|
|
|
label-width="0" |
|
|
|
|
> |
|
|
|
|
<el-input v-model="scope.row.outputMaterial" placeholder="请输入里程碑输出物"></el-input> |
|
|
|
|
</el-form-item> |
|
|
|
|
</template> |
|
|
|
|
<template v-else> |
|
|
|
|
<span>{{ scope.row.outputMaterial }}</span> |
|
|
|
|
</template> |
|
|
|
|
</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
<el-table-column |
|
|
|
|
align="center" |
|
|
|
|
:width="title == '详情' ? '180' : ''" |
|
|
|
|
label="里程碑节点" |
|
|
|
|
prop="milestoneNode" |
|
|
|
|
></el-table-column> |
|
|
|
|
> |
|
|
|
|
<template #default="scope"> |
|
|
|
|
<template v-if="title != '详情'"> |
|
|
|
|
<el-form-item |
|
|
|
|
:prop="'detailList.' + scope.$index + '.milestoneNode'" |
|
|
|
|
:rules="{ required: true, message: '请选择里程碑节点', trigger: 'change' }" |
|
|
|
|
label-width="0" |
|
|
|
|
> |
|
|
|
|
<el-date-picker |
|
|
|
|
v-model="scope.row.milestoneNode" |
|
|
|
|
type="datetime" |
|
|
|
|
placeholder="选择日期时间" |
|
|
|
|
style="width: 100%" |
|
|
|
|
/> |
|
|
|
|
</el-form-item> |
|
|
|
|
</template> |
|
|
|
|
<template v-else> |
|
|
|
|
<span>{{ scope.row.milestoneNode }}</span> |
|
|
|
|
</template> |
|
|
|
|
</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
<el-table-column |
|
|
|
|
v-if="title == '详情'" |
|
|
|
|
align="center" |
|
|
|
|
@ -576,6 +650,17 @@ export default { |
|
|
|
|
projectDesiredEnd: [ |
|
|
|
|
{ required: true, message: "请选择项目结束预期时间", trigger: "blur" }, |
|
|
|
|
], |
|
|
|
|
detailList: { |
|
|
|
|
type: 'array', |
|
|
|
|
required: true, |
|
|
|
|
validator: (rule, array, callback) => { |
|
|
|
|
if (!array || array.length === 0) { |
|
|
|
|
callback(new Error('请至少添加一条里程碑记录')); |
|
|
|
|
} else { |
|
|
|
|
callback(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
page: { |
|
|
|
|
pageSize: 10, |
|
|
|
|
@ -773,8 +858,52 @@ export default { |
|
|
|
|
}, |
|
|
|
|
mounted() {}, |
|
|
|
|
methods: { |
|
|
|
|
insertEvent() { |
|
|
|
|
// 插入一行 |
|
|
|
|
this.addForm.detailList.push({ |
|
|
|
|
}) |
|
|
|
|
}, |
|
|
|
|
openDialog() { |
|
|
|
|
// 添加新的里程碑行 |
|
|
|
|
const newRow = { |
|
|
|
|
status: 3, |
|
|
|
|
statusTitle: "待执行", |
|
|
|
|
checkMan: null, |
|
|
|
|
checkResult: 0, |
|
|
|
|
checkResultTitle: "未核查", |
|
|
|
|
checkTime: null, |
|
|
|
|
delayDate: false, |
|
|
|
|
delayTime: null, |
|
|
|
|
evaluate: null, |
|
|
|
|
evolve: "", |
|
|
|
|
executeResult: 0, |
|
|
|
|
executeResultTitle: "无", |
|
|
|
|
grade: 0, |
|
|
|
|
gradeMan: null, |
|
|
|
|
gradeTitle: "未评价", |
|
|
|
|
keyValue: Date.now(), |
|
|
|
|
lastPlan: "", |
|
|
|
|
milestoneMan: { |
|
|
|
|
accountId: null, |
|
|
|
|
userId: null, |
|
|
|
|
userName: "" |
|
|
|
|
}, |
|
|
|
|
milestoneMemo: "", |
|
|
|
|
milestoneNode: "", |
|
|
|
|
milestonePlan: "", |
|
|
|
|
okTime: null, |
|
|
|
|
outputMaterial: "", |
|
|
|
|
paIndex: (this.addForm.detailList?.length || 0) + 1, |
|
|
|
|
pmId: this.addForm.paId, |
|
|
|
|
score: null, |
|
|
|
|
updateMan: null |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
if (!this.addForm.detailList) { |
|
|
|
|
this.addForm.detailList = []; |
|
|
|
|
} |
|
|
|
|
this.addForm.detailList.push(newRow); |
|
|
|
|
this.$message.success('插入成功'); |
|
|
|
|
}, |
|
|
|
|
handleAdd() { |
|
|
|
|
this.title = "新增"; |
|
|
|
|
@ -816,11 +945,7 @@ export default { |
|
|
|
|
}, |
|
|
|
|
// 新增/编辑确定 |
|
|
|
|
submitForm() { |
|
|
|
|
this.$refs.addForm.validate((valid) => { |
|
|
|
|
if (valid) { |
|
|
|
|
this.addDialog = false; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
}, |
|
|
|
|
// 审核立项 |
|
|
|
|
checkRow() { |
|
|
|
|
@ -877,7 +1002,6 @@ export default { |
|
|
|
|
}, |
|
|
|
|
// 下载附件 |
|
|
|
|
downloadFile(file) { |
|
|
|
|
// 创建一个临时链接并点击下载 |
|
|
|
|
const link = document.createElement('a'); |
|
|
|
|
link.href = file.url; |
|
|
|
|
link.download = file.name; |
|
|
|
|
@ -895,6 +1019,19 @@ export default { |
|
|
|
|
this.existingFiles.splice(index, 1); |
|
|
|
|
this.$message.success('删除成功'); |
|
|
|
|
}).catch(() => {}); |
|
|
|
|
}, |
|
|
|
|
delTable() { |
|
|
|
|
// 获取表格选中的行 |
|
|
|
|
const selection = this.$refs.detailTable?.getSelection(); |
|
|
|
|
if (!selection || selection.length === 0) { |
|
|
|
|
this.$message.warning('请先选择要删除的行'); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
// 过滤掉选中的行(保留未选中的行) |
|
|
|
|
this.addForm.detailList = this.addForm.detailList.filter( |
|
|
|
|
row => !selection.some(selected => selected.keyValue === row.keyValue) |
|
|
|
|
); |
|
|
|
|
this.$message.success('删除成功'); |
|
|
|
|
}, |
|
|
|
|
onLoad() { |
|
|
|
|
this.data = [ |
|
|
|
|
|