From 673ed0ce6809aecc7b1bdb1c8bb5f6018047105f Mon Sep 17 00:00:00 2001 From: luohairen <3399054449@qq.com> Date: 星期四, 05 十二月 2024 17:09:09 +0800 Subject: [PATCH] 分角色展示项目计划,实现不同角色的功能 --- src/views/projectManage/progress/progressRecord.vue | 227 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 181 insertions(+), 46 deletions(-) diff --git a/src/views/projectManage/progress/progressRecord.vue b/src/views/projectManage/progress/progressRecord.vue index c07558c..a7fafb1 100644 --- a/src/views/projectManage/progress/progressRecord.vue +++ b/src/views/projectManage/progress/progressRecord.vue @@ -24,16 +24,22 @@ <el-table-column prop="title" label="浜嬮」鍚嶇О" align="center" /> <el-table-column prop="progressStatus" label="杩涘害鎯呭喌" align="center"> <template slot-scope="scope"> - {{ scope.row.progressStatus === 0 ? '鏈畬鎴�' : scope.row.progressStatus === 1 ? '寰呭鏍�' : scope.row.progressStatus === 2 ? '宸查┏鍥�' : '宸插畬鎴�'}} + {{ scope.row.progressStatus === 3 ? '宸查�氳繃' : scope.row.progressStatus === 2 ? '宸查┏鍥�' : scope.row.progressStatus === 1 ?'鏈鏍�' : '鏈紑濮�'}} </template> </el-table-column> <el-table-column prop="startTime" label="璁″垝寮�濮嬫椂闂�" align="center" /> <el-table-column prop="endTime" label="璁″垝瀹屾垚鏃堕棿" align="center" /> <el-table-column fixed="right" label="鎿嶄綔" align="center"> <template slot-scope="scope"> - <el-button v-if="!projectInfoData.managerFlag" type="primary" size="small" :disabled="scope.row.progressStatus === 1 || scope.row.progressStatus === 3" @click="handleProgressReport(scope.row)">杩涘害涓婃姤</el-button> - <el-button v-if="!projectInfoData.managerFlag" type="primary" size="small" @click="handleCheckProgress(scope.row)">鏌ョ湅</el-button> - <el-button v-if="projectInfoData.managerFlag" type="primary" size="small" @click="handleCheckProgress(scope.row)">瀹℃牳</el-button> + <div v-if="!projectInfoData.managerFlag"> + <el-button type="primary" size="small" v-if="scope.row.progressStatus === 0" @click="handleProgressReport(scope.row)">杩涘害涓婃姤</el-button> + <el-button type="primary" size="small" v-if="scope.row.progressStatus === 2" @click="handleReportAgain(scope.row)">閲嶆柊涓婃姤</el-button> + <el-button type="primary" size="small" v-if="scope.row.progressStatus !== 0" @click="handleCheckProgress(scope.row)">鏌ョ湅</el-button> + </div> + <div v-if="projectInfoData.managerFlag"> + <el-button type="primary" size="small" v-if="scope.row.progressStatus === 1" @click="handleOpenExamine(scope.row)">瀹℃牳</el-button> + <el-button type="primary" size="small" v-if="scope.row.progressStatus === 2 || scope.row.progressStatus === 3" @click="handleCheckProgress(scope.row)">鏌ョ湅</el-button> + </div> </template> </el-table-column> </el-table> @@ -53,16 +59,21 @@ <el-table-column prop="title" label="浜嬮」鍚嶇О" align="center" /> <el-table-column prop="progressStatus" label="杩涘害鎯呭喌" align="center"> <template slot-scope="scope"> - {{ scope.row.progressStatus === 0 ? '鏈畬鎴�' : scope.row.progressStatus === 1 ? '寰呭鏍�' : scope.row.progressStatus === 2 ? '宸查┏鍥�' : '宸插畬鎴�'}} + {{ scope.row.progressStatus === 3 ? '宸查�氳繃' : scope.row.progressStatus === 2 ? '宸查┏鍥�' : scope.row.progressStatus === 1 ?'鏈鏍�' : '鏈紑濮�'}} </template> </el-table-column> <el-table-column prop="startTime" label="璁″垝寮�濮嬫椂闂�" align="center" /> <el-table-column prop="endTime" label="璁″垝瀹屾垚鏃堕棿" align="center" /> <el-table-column fixed="right" label="鎿嶄綔" align="center"> <template slot-scope="scope"> - <el-button v-if="!projectInfoData.managerFlag" type="primary" size="small" :disabled="scope.row.progressStatus === 1 || scope.row.progressStatus === 3" @click="handleProgressReport(scope.row)">杩涘害涓婃姤</el-button> - <el-button v-if="!projectInfoData.managerFlag" type="primary" size="small" @click="handleCheckProgress(scope.row)">鏌ョ湅</el-button> - <el-button v-if="projectInfoData.managerFlag" type="primary" size="small" @click="handleCheckProgress(scope.row)">瀹℃牳</el-button> + <div v-if="!projectInfoData.managerFlag"> + <el-button type="primary" size="small" v-if="scope.row.progressStatus === 0" @click="handleProgressReport(scope.row)">杩涘害涓婃姤</el-button> + <el-button type="primary" size="small" v-if="scope.row.progressStatus === 2" @click="handleReportAgain(scope.row)">閲嶆柊涓婃姤</el-button> + <el-button type="primary" size="small" v-if="scope.row.progressStatus !== 0" @click="handleCheckProgress(scope.row)">鏌ョ湅</el-button> + </div> + <div v-if="projectInfoData.managerFlag"> + <el-button type="primary" size="small" v-if="scope.row.progressStatus === 1" @click="handleOpenExamine(scope.row)">瀹℃牳</el-button> + </div> </template> </el-table-column> </el-table> @@ -82,16 +93,21 @@ <el-table-column prop="title" label="浜嬮」鍚嶇О" align="center" /> <el-table-column prop="progressStatus" label="杩涘害鎯呭喌" align="center"> <template slot-scope="scope"> - {{ scope.row.progressStatus === 0 ? '鏈畬鎴�' : scope.row.progressStatus === 1 ? '寰呭鏍�' : scope.row.progressStatus === 2 ? '宸查┏鍥�' : '宸插畬鎴�'}} + {{ scope.row.progressStatus === 3 ? '宸查�氳繃' : scope.row.progressStatus === 2 ? '宸查┏鍥�' : scope.row.progressStatus === 1 ?'鏈鏍�' : '鏈紑濮�'}} </template> </el-table-column> <el-table-column prop="startTime" label="璁″垝寮�濮嬫椂闂�" align="center" /> <el-table-column prop="endTime" label="璁″垝瀹屾垚鏃堕棿" align="center" /> <el-table-column fixed="right" label="鎿嶄綔" align="center"> <template slot-scope="scope"> - <el-button v-if="!projectInfoData.managerFlag" type="primary" size="small" :disabled="scope.row.progressStatus === 1 || scope.row.progressStatus === 3" @click="handleProgressReport(scope.row)">杩涘害涓婃姤</el-button> - <el-button v-if="!projectInfoData.managerFlag" type="primary" size="small" @click="handleCheckProgress(scope.row)">鏌ョ湅</el-button> - <el-button v-if="projectInfoData.managerFlag" type="primary" size="small" @click="handleCheckProgress(scope.row)">瀹℃牳</el-button> + <div v-if="!projectInfoData.managerFlag"> + <el-button type="primary" size="small" v-if="scope.row.progressStatus === 0" @click="handleProgressReport(scope.row)">杩涘害涓婃姤</el-button> + <el-button type="primary" size="small" v-if="scope.row.progressStatus === 2" @click="handleReportAgain(scope.row)">閲嶆柊涓婃姤</el-button> + <el-button type="primary" size="small" v-if="scope.row.progressStatus !== 0" @click="handleCheckProgress(scope.row)">鏌ョ湅</el-button> + </div> + <div v-if="projectInfoData.managerFlag"> + <el-button type="primary" size="small" v-if="scope.row.progressStatus === 1" @click="handleOpenExamine(scope.row)">瀹℃牳</el-button> + </div> </template> </el-table-column> </el-table> @@ -119,7 +135,7 @@ </div> </el-row> - <el-dialog :title=" checkFlag ? '杩涘害鏌ョ湅' : '杩涘害涓婃姤' " :visible.sync="dialogFormVisible" custom-class="custom-dialog" :close-on-click-modal="false" @close="handleCancel"> + <el-dialog :title=" dialogFlag === 1 ? '杩涘害鏌ョ湅' : '杩涘害涓婃姤' " :visible.sync="dialogFormVisible" custom-class="custom-dialog" :close-on-click-modal="false" @close="handleCancel"> <el-form :model="progressReportData"> <el-form-item label="鎶ュ憡鏈燂細" :label-width="formLabelWidth"> <el-input :value="progressReportData.planTime + (progressReportData.planTimeFlag === 0 ? '鏈堝害' : progressReportData.planTimeFlag === 1 ? '瀛e害' : '骞村害')" readonly /> @@ -133,12 +149,28 @@ <el-date-picker v-model="progressReportData.endTime" type="date" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 130px" readonly/> </el-form-item> <el-form-item label="瀹為檯瀹屾垚鏃堕棿锛�" :label-width="formLabelWidth"> - <el-date-picker v-model="progressReportData.actualStartTime" type="date" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 130px" :readonly="checkFlag && projectInfoData.managerFlag"/> + <el-date-picker + v-model="progressReportData.actualStartTime" + type="date" + placeholder="閫夋嫨鏃ユ湡" + size="small" + style="width: 130px" + :readonly="projectInfoData.managerFlag || dialogFlag !== 0"/> 鑷� - <el-date-picker v-model="progressReportData.actualEndTime" type="date" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 130px" :readonly="checkFlag && projectInfoData.managerFlag"/> + <el-date-picker + v-model="progressReportData.actualEndTime" + type="date" + placeholder="閫夋嫨鏃ユ湡" + size="small" + style="width: 130px" + :readonly="projectInfoData.managerFlag || dialogFlag !== 0"/> </el-form-item> <el-form-item label="杩涘害鎯呭喌锛�" :label-width="formLabelWidth"> - <el-input type="textarea" v-model="progressReportData.progressStatus" placeholder="璇疯緭鍏�" rows="3" :readonly="checkFlag && projectInfoData.managerFlag" /> + <el-input + type="textarea" + v-model="progressReportData.progressStatusStr" + placeholder="璇疯緭鍏�" rows="3" + :readonly="projectInfoData.managerFlag || dialogFlag !== 0" /> </el-form-item> <el-form-item label="宸ョ▼杩涘害闄勪欢锛�" :label-width="formLabelWidth"> <file-upload v-model="progressReportData.fileList" @@ -146,45 +178,119 @@ :isShowTip="false"/> </el-form-item> <el-form-item label="鎴鏈姤鍛婂畬鎴愭姇璧勶細" :label-width="formLabelWidth"> - <el-input v-model="progressReportData.actualInvest" type="number" :readonly="checkFlag && projectInfoData.managerFlag" /> + <el-input + v-model="progressReportData.actualInvest" + type="number" + :readonly="projectInfoData.managerFlag || dialogFlag !== 0" /> </el-form-item> <el-form-item label="涓婄骇瀹℃牳锛�" :label-width="formLabelWidth"> - <el-input v-if="!projectInfoData.managerFlag" :value="progressReportData.departmentExamine === 0 ? '鍚屾剰' : progressReportData.departmentExamine === 1 ? '椹冲洖' : '鏈鏍�'" readonly /> - <el-select v-if="projectInfoData.managerFlag" v-model="progressReportData.departmentExamine" placeholder="璇烽�夋嫨" size="small" clearable> - <el-option label="鍚屾剰" :value="0"></el-option> - <el-option label="椹冲洖" :value="1"></el-option> - <el-option label="璇烽�夋嫨" :value="null"></el-option> - </el-select> + <div v-if="!projectInfoData.managerFlag"> + <el-input + :value="progressReportData.departmentExamine === 0 ? '鍚屾剰' : progressReportData.departmentExamine === 1 ? '椹冲洖' : '鏈鏍�'" + readonly /> + </div> + <div v-if="projectInfoData.managerFlag"> + <el-select + v-model="progressReportData.departmentExamine" + placeholder="璇烽�夋嫨" + size="small" + :disabled="progressReportData.progressStatusInt === 2 || progressReportData.progressStatusInt === 3" + clearable> + <el-option label="鍚屾剰" :value="0"></el-option> + <el-option label="椹冲洖" :value="1"></el-option> + <el-option label="璇烽�夋嫨" :value="null"></el-option> + </el-select> + </div> </el-form-item> <el-form-item label="涓婄骇鎵瑰锛�" :label-width="formLabelWidth"> - <el-input v-if="!projectInfoData.managerFlag" v-model="progressReportData.departmentApproval" readonly /> - <el-input v-if="projectInfoData.managerFlag" v-model="progressReportData.departmentApproval" /> + <div v-if="!projectInfoData.managerFlag"> + <el-input v-model="progressReportData.departmentApproval" readonly /> + </div> + <div v-if="projectInfoData.managerFlag"> + <el-input + v-model="progressReportData.departmentApproval" + :readonly="progressReportData.progressStatusInt === 2 || progressReportData.progressStatusInt === 3"/> + </div> </el-form-item> <el-form-item label="涓婄骇鎵瑰鍥炲锛�" :label-width="formLabelWidth"> - <el-input v-if="!projectInfoData.managerFlag" type="textarea" v-model="progressReportData.departmentApprovalReply" placeholder="璇疯緭鍏�" rows="3" /> - <el-input v-if="projectInfoData.managerFlag" type="textarea" v-model="progressReportData.departmentApprovalReply" placeholder="璇疯緭鍏�" rows="3" :readonly="checkFlag" /> + <div v-if="!projectInfoData.managerFlag"> + <el-input + type="textarea" + v-model="progressReportData.departmentApprovalReply" + :readonly="dialogFlag === 0 || progressReportData.progressStatusInt === 1" + placeholder="璇疯緭鍏�" + rows="3" /> + </div> + <div v-if="projectInfoData.managerFlag"> + <el-input + type="textarea" + v-model="progressReportData.departmentApprovalReply" + placeholder="璇疯緭鍏�" + rows="3" + readonly/> + </div> </el-form-item> <el-form-item label="涓荤閮ㄩ棬瀹℃牳锛�" :label-width="formLabelWidth"> - <el-input v-if="!projectInfoData.managerFlag" :value="progressReportData.manageExamine === 0 ? '鍚屾剰' : progressReportData.manageExamine === 1 ? '椹冲洖' : '鏈鏍�'" readonly /> - <el-select v-if="projectInfoData.managerFlag" v-model="progressReportData.manageExamine" placeholder="璇烽�夋嫨" size="small" clearable> - <el-option label="璇烽�夋嫨" :value="null"></el-option> - <el-option label="鍚屾剰" :value="0"></el-option> - <el-option label="椹冲洖" :value="1"></el-option> - </el-select> + <div v-if="!projectInfoData.managerFlag"> + <el-input + :value="progressReportData.manageExamine === 0 ? '鍚屾剰' : progressReportData.manageExamine === 1 ? '椹冲洖' : '鏈鏍�'" + readonly /> + </div> + <div v-if="projectInfoData.managerFlag"> + <el-select + v-model="progressReportData.manageExamine" + placeholder="璇烽�夋嫨" + size="small" + :disabled="progressReportData.progressStatusInt === 2 || progressReportData.progressStatusInt === 3" + clearable> + <el-option label="璇烽�夋嫨" :value="null"></el-option> + <el-option label="鍚屾剰" :value="0"></el-option> + <el-option label="椹冲洖" :value="1"></el-option> + </el-select> + </div> </el-form-item> - <el-form-item label="涓荤閮ㄩ棬瀹℃牳鎵瑰锛�" :label-width="formLabelWidth"> - <el-input v-if="!projectInfoData.managerFlag" v-model="progressReportData.manageApproval" readonly /> - <el-input v-if="projectInfoData.managerFlag" v-model="progressReportData.manageApproval" /> + <el-form-item label="涓荤閮ㄩ棬鎵瑰锛�" :label-width="formLabelWidth"> + <div v-if="!projectInfoData.managerFlag"> + <el-input + v-model="progressReportData.manageApproval" + readonly /> + </div> + <div v-if="projectInfoData.managerFlag"> + <el-input + :readonly="progressReportData.progressStatusInt === 2 || progressReportData.progressStatusInt === 3" + v-model="progressReportData.manageApproval" /> + </div> </el-form-item> <el-form-item label="涓荤閮ㄩ棬鎵瑰鍥炲锛�" :label-width="formLabelWidth"> - <el-input v-if="!projectInfoData.managerFlag" type="textarea" v-model="progressReportData.manageApprovalReply" placeholder="璇疯緭鍏�" rows="3" /> - <el-input v-if="projectInfoData.managerFlag" type="textarea" v-model="progressReportData.manageApprovalReply" placeholder="璇疯緭鍏�" rows="3" :readonly="checkFlag" /> + <div v-if="!projectInfoData.managerFlag"> + <el-input + type="textarea" + v-model="progressReportData.manageApprovalReply" + :readonly="dialogFlag === 0 || progressReportData.progressStatusInt === 1" + placeholder="璇疯緭鍏�" + rows="3" /> + </div> + <div v-if="projectInfoData.managerFlag"> + <el-input + type="textarea" + v-model="progressReportData.manageApprovalReply" + placeholder="璇疯緭鍏�" + rows="3" + readonly/> + </div> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> - <el-button type="primary" @click="handleRecordSubmit" v-if="!checkFlag && !projectInfoData.managerFlag">涓� 鎶�</el-button> - <el-button type="primary" @click="handleExamine" v-if="projectInfoData.managerFlag">瀹� 鎵�</el-button> - <el-button @click="handleCancel">鍙� 娑�</el-button> + <div v-if="!projectInfoData.managerFlag"> + <el-button type="primary" @click="handleRecordSubmit" v-if="dialogFlag === 0">涓� 鎶�</el-button> + <el-button @click="handleReply" v-if="isShowReplyBtn && (progressReportData.progressStatusInt === 2 || progressReportData.progressStatusInt === 3)">鍥� 澶�</el-button> + + <el-button @click="handleCancel">鍙� 娑�</el-button> + </div> + <div v-if="projectInfoData.managerFlag"> + <el-button type="primary" @click="handleExamine" v-if="dialogFlag === 2">瀹� 鎵�</el-button> + <el-button @click="handleCancel">鍙� 娑�</el-button> + </div> </div> </el-dialog> </el-card> @@ -194,7 +300,7 @@ </template> <script> -import { getProgressInfoList, getProgressReport, recordSubmit, saveProjectProgressFileLists, getProjectProgressForm, examine } from "@/api/projectManage/progress/index"; +import { getProgressInfoList, getProgressReport, recordSubmit, saveProjectProgressFileLists, getProjectProgressForm, examine, reply } from "@/api/projectManage/progress/index"; import progressRecord from "./progressRecord.vue"; export default { @@ -215,7 +321,9 @@ dialogFormVisible: false, // 鏌ョ湅鏄剧ず - checkFlag: false, + dialogFlag: 0,// 涓婃姤銆侀噸鏂颁笂鎶ワ細0锛屾煡鐪嬶細1锛屽鏍革細2 + // 鏄惁灞曠ず鍥炲鎸夐挳 + isShowReplyBtn: true, progressReportData: {}, formLabelWidth: '150px', @@ -257,6 +365,16 @@ }, // 杩涘害涓婃姤 handleProgressReport(row) { + this.dialogFlag = 0; + this.dialogFormVisible = true; + getProgressReport(row.id).then(res => { + this.progressReportData = res.data; + }) + }, + // 閲嶆柊涓婃姤 + handleReportAgain(row) { + this.dialogFlag = 0; + this.isShowReplyBtn = false; this.dialogFormVisible = true; getProgressReport(row.id).then(res => { this.progressReportData = res.data; @@ -270,6 +388,14 @@ this.search(); }) }, + // 鍥炲 + handleReply() { + reply(this.progressReportData).then(res => { + // this.dialogFormVisible = false; + this.$message.success('鍥炲鎴愬姛'); + this.search(); + }) + }, // 瀹℃壒 handleExamine() { examine(this.progressReportData).then(res => { @@ -278,10 +404,18 @@ this.search(); }) }, - // 鏌ョ湅杩涘害 + // 鎵撳紑鏌ョ湅杩涘害寮圭獥 handleCheckProgress(row) { this.dialogFormVisible = true; - this.checkFlag = true; + this.dialogFlag = 1; + getProgressReport(row.id).then(res => { + this.progressReportData = res.data; + }) + }, + // 鎵撳紑瀹℃牳寮圭獥 + handleOpenExamine(row) { + this.dialogFormVisible = true; + this.dialogFlag = 2; getProgressReport(row.id).then(res => { this.progressReportData = res.data; }) @@ -289,7 +423,8 @@ // 鍏抽棴寮圭獥 handleCancel() { this.dialogFormVisible = false; - this.checkFlag = false; + this.isShowReplyBtn = true; + this.dialogFlag = 0; }, // 淇濆瓨 handleSave() { -- Gitblit v1.8.0