|
@@ -82,6 +82,10 @@
|
|
|
<el-dropdown-item v-if="user.company.packageProject == 1 && permissions.projectCostOfItems">
|
|
|
<el-link type="primary" :underline="false" @click="showBaseCostItemDialog">基线成本项</el-link>
|
|
|
</el-dropdown-item>
|
|
|
+ <!-- <el-dropdown-item v-if="user.company.packageProject == 1 && user.companyId == '936'"> -->
|
|
|
+ <el-dropdown-item>
|
|
|
+ <el-link type="primary" :underline="false" @click="keyNodesIsShow = true">关键节点项</el-link>
|
|
|
+ </el-dropdown-item>
|
|
|
<el-dropdown-item v-if="permissions.projectClassification">
|
|
|
<el-link type="primary" :underline="false" @click="showClfDialog = true">分类管理</el-link>
|
|
|
</el-dropdown-item>
|
|
@@ -554,6 +558,33 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</el-tab-pane>
|
|
|
+ <el-tab-pane label="关键节点" name="baseCostPanep" v-if="user.companyId == '936'">
|
|
|
+ <div style="padding-top:10px;">
|
|
|
+ <!--新版 -->
|
|
|
+ <div class="keyNodes">
|
|
|
+ <div class="keyNodesName">节点名称</div>
|
|
|
+ <div class="keyNodesTime">计划完成时间</div>
|
|
|
+ <div class="keyNodesTime">实际完成时间</div>
|
|
|
+ <div class="keyNodesTime">状态</div>
|
|
|
+ </div>
|
|
|
+ <div class="keyNodes" v-for="item in projectKeyNodesData" :key="item.nodesId">
|
|
|
+ <div class="keyNodesName">{{item.nodesName}}</div>
|
|
|
+ <div class="keyNodesTime">
|
|
|
+ <el-date-picker v-model="item.planCompleteDate" clearable style="width: 80%" size="small" :editable="false" format="yyyy-MM-dd" value-format="yyyy-MM-dd" type="date" placeholder="选择日期"></el-date-picker>
|
|
|
+ </div>
|
|
|
+ <div class="keyNodesTime">
|
|
|
+ <el-date-picker v-model="item.actualCompleteDate" clearable style="width: 80%" size="small" :editable="false" format="yyyy-MM-dd" value-format="yyyy-MM-dd" type="date" placeholder="选择日期"></el-date-picker>
|
|
|
+ </div>
|
|
|
+ <div class="keyNodesTime">
|
|
|
+ <el-select v-model="item.states" placeholder="请选择" style="width: 80%" size="small">
|
|
|
+ <el-option label="正常" value="0"></el-option>
|
|
|
+ <el-option label="预期" value="1"></el-option>
|
|
|
+ <el-option label="完成" value="2"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
<el-tab-pane label="工程专业" name="engineeringProfession" v-if="user.company.packageEngineering == 1">
|
|
|
<div style="padding-top:10px;">
|
|
|
<el-table :data="projectProfessionList" size="small" :key="Math.random()">
|
|
@@ -695,6 +726,29 @@
|
|
|
<el-button type="primary" @click="addNewBaseItem()" >新增成本项</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
+
|
|
|
+ <!-- 项目关键节点配置弹出框 -->
|
|
|
+ <el-dialog title="项目关键节点管理" show-header="false" v-if="keyNodesIsShow" :visible.sync="keyNodesIsShow" :close-on-click-modal="false" customClass="customWidth" width="600px">
|
|
|
+ <el-table :data="keyNodesList" highlight-current-row height="400" style="width: 100%;">
|
|
|
+ <el-table-column type="index" width="60" label="序号">
|
|
|
+ <template slot-scope="scope" >
|
|
|
+ {{scope.$index+1+(page-1)*size}}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="name" label="名称" ></el-table-column>
|
|
|
+ <el-table-column label="操作" width="150">
|
|
|
+ <template slot-scope="scope" >
|
|
|
+ <el-button size="small" type="primary" @click="addNewkeyNodes(scope.row)">编辑</el-button>
|
|
|
+ <el-button size="small" type="danger" @click="deletekeyNodes(scope.row)">删除</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ </el-table>
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button type="primary" @click="keyNodesIsShow = false" >关闭</el-button>
|
|
|
+ <el-button type="primary" @click="addNewkeyNodes()" >新增关键节点</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
<!-- 分类条目配置 -->
|
|
|
<el-dialog title="项目分类条目管理" show-header="false" v-if="showClfDialog" :visible.sync="showClfDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
|
|
|
<el-table :data="baseClfList" highlight-current-row height="400" style="width: 100%;">
|
|
@@ -862,6 +916,18 @@
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
|
|
|
+ <el-dialog title="新增/修改关键节点" v-if="addBasekeyNodesialog" :visible.sync="addBasekeyNodesialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
|
|
|
+ <el-form ref="form2" :model="addFormkeyNodes" :rules="rules" label-width="120px">
|
|
|
+ <el-form-item label="关键节点名称" prop="name">
|
|
|
+ <el-input v-model.trim="addFormkeyNodes.name" placeholder="请输入名称" clearable></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click.native="addBasekeyNodesialog = false">取消</el-button>
|
|
|
+ <el-button type="primary" @click="submitkeyNodes" :loading="addLoading">提交</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
<!-- 按部门选择人员 -->
|
|
|
<el-dialog title="选择参与人员" v-if="chooseParticipVisible" :visible.sync="chooseParticipVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
|
|
|
<!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
|
|
@@ -1196,8 +1262,15 @@ a {
|
|
|
batchInchargerDialog: false,
|
|
|
paramInchargerId: '',
|
|
|
|
|
|
- inchagerId: ''
|
|
|
+ inchagerId: '',
|
|
|
|
|
|
+ keyNodesIsShow: false,
|
|
|
+ keyNodesList: [],
|
|
|
+ projectKeyNodesData: [],
|
|
|
+ addBasekeyNodesialog: false,
|
|
|
+ addFormkeyNodes: {
|
|
|
+ name: ''
|
|
|
+ }
|
|
|
};
|
|
|
},
|
|
|
// 过滤器
|
|
@@ -1243,6 +1316,37 @@ a {
|
|
|
})
|
|
|
},
|
|
|
methods: {
|
|
|
+ addNewkeyNodes(row) {
|
|
|
+ this.addBasekeyNodesialog = true
|
|
|
+ if(row) {
|
|
|
+ this.addFormkeyNodes = row
|
|
|
+ } else {
|
|
|
+ this.addFormkeyNodes = {
|
|
|
+ name: ''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 获取关键节点
|
|
|
+ getkeyNodes() {
|
|
|
+ this.http.post('/project-key-nodes-setting/list', {},
|
|
|
+ res => {
|
|
|
+ if (res.code == "ok") {
|
|
|
+ // this.keyNodesIsShow = true
|
|
|
+ this.keyNodesList = res.data
|
|
|
+ } else {
|
|
|
+ this.$message({
|
|
|
+ message: res.msg,
|
|
|
+ type: "error"
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ error => {
|
|
|
+ this.$message({
|
|
|
+ message: error,
|
|
|
+ type: "error"
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
hoverCall(row) {
|
|
|
this.rowid=row.id
|
|
|
},
|
|
@@ -2652,6 +2756,43 @@ a {
|
|
|
);
|
|
|
|
|
|
},
|
|
|
+ deletekeyNodes(row) {
|
|
|
+ this.$confirm("该操作可能造成已有数据丢失,确定要删除吗?","删除关键节点", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning"
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ this.listLoading = true;
|
|
|
+ this.http.post('/project-key-nodes-setting/delete',{
|
|
|
+ id: row.id
|
|
|
+ },
|
|
|
+ res => {
|
|
|
+ this.listLoading = false;
|
|
|
+ if (res.code == "ok") {
|
|
|
+ this.$message({
|
|
|
+ message: "删除成功",
|
|
|
+ type: "success"
|
|
|
+ });
|
|
|
+ this.getkeyNodes();
|
|
|
+ } else {
|
|
|
+ this.$message({
|
|
|
+ message: res.msg,
|
|
|
+ type: "error"
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ error => {
|
|
|
+ this.listLoading = false;
|
|
|
+ this.$message({
|
|
|
+ message: error,
|
|
|
+ type: "error"
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+ })
|
|
|
+ .catch(() => {});
|
|
|
+ },
|
|
|
deleteBaseItem(row) {
|
|
|
this.$confirm("该操作可能造成已有数据丢失,确定要删除吗?","删除成本基线项", {
|
|
|
confirmButtonText: "确定",
|
|
@@ -2711,6 +2852,30 @@ a {
|
|
|
}
|
|
|
);
|
|
|
},
|
|
|
+ submitkeyNodes() {
|
|
|
+ console.log(this.addForm, '提交的参数')
|
|
|
+ // return
|
|
|
+ this.http.post('/project-key-nodes-setting/addOrMod',this.addFormkeyNodes,
|
|
|
+ res => {
|
|
|
+ if (res.code == "ok") {
|
|
|
+ this.addBasekeyNodesialog = false;
|
|
|
+ this.keyNodesList = res.data;
|
|
|
+ this.$forceUpdate();
|
|
|
+ } else {
|
|
|
+ this.$message({
|
|
|
+ message: res.msg,
|
|
|
+ type: "error"
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ error => {
|
|
|
+ this.$message({
|
|
|
+ message: error,
|
|
|
+ type: "error"
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+ },
|
|
|
showBaseCostItemDialog() {
|
|
|
this.showBaseConfig = true;
|
|
|
},
|
|
@@ -3109,6 +3274,14 @@ a {
|
|
|
for (var m=0;m<this.baseCostItemList.length; m++) {
|
|
|
this.projectBaseCostData.push({baseId: this.baseCostItemList[m].id, baseName:this.baseCostItemList[m].name, baseAmount:0});
|
|
|
}
|
|
|
+ // 关键节点
|
|
|
+ if(this.user.companyId == '936') {
|
|
|
+ this.projectKeyNodesData = []
|
|
|
+ for (var m=0;m<this.keyNodesList.length; m++) {
|
|
|
+ this.projectKeyNodesData.push({nodesId: this.keyNodesList[m].id, nodesName:this.keyNodesList[m].name, planCompleteDate: null, actualCompleteDate: null, states: '0'});
|
|
|
+ }
|
|
|
+ console.log(this.projectKeyNodesData, '节点值')
|
|
|
+ }
|
|
|
} else {
|
|
|
this.title = "修改项目";
|
|
|
var list = item.participator;
|
|
@@ -3241,6 +3414,7 @@ a {
|
|
|
// console.log(this.auseList)
|
|
|
this.changeParticipator();
|
|
|
this.getProjectBaseData(item.id);
|
|
|
+ this.getProjectKeyNodeData(item.id)
|
|
|
if (this.user.company.packageEngineering == 1) {
|
|
|
this.getProjectProfessions(item.id);
|
|
|
|
|
@@ -3303,7 +3477,27 @@ a {
|
|
|
}
|
|
|
);
|
|
|
},
|
|
|
-
|
|
|
+ getProjectKeyNodeData(projectId) {
|
|
|
+ this.http.post('/project-key-nodes/get',{projectId: projectId},
|
|
|
+ res => {
|
|
|
+ if (res.code == "ok") {
|
|
|
+ this.projectKeyNodesData = res.data;
|
|
|
+ } else {
|
|
|
+ this.$message({
|
|
|
+ message: res.msg,
|
|
|
+ type: "error"
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ error => {
|
|
|
+ this.listLoading = false;
|
|
|
+ this.$message({
|
|
|
+ message: error,
|
|
|
+ type: "error"
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+ },
|
|
|
//提交子项目创建修改请求
|
|
|
submitInsertSubProject () {
|
|
|
this.$refs.form2.validate(valid => {
|
|
@@ -3477,6 +3671,8 @@ a {
|
|
|
formData.append("projectCategorySub", this.addForm.projectCategorySub ? this.addForm.projectCategorySub : '');
|
|
|
formData.append("region", this.addForm.region ? this.addForm.region : '');
|
|
|
formData.append("bu", this.addForm.bu ? this.addForm.bu : '');
|
|
|
+ // 关键节点
|
|
|
+ formData.append("projectKeyNodesData", JSON.stringify(this.projectKeyNodesData));
|
|
|
}
|
|
|
if(this.user.companyId == '428') {
|
|
|
formData.append("projectCategorySub", this.addForm.projectCategorySub ? this.addForm.projectCategorySub : '');
|
|
@@ -3720,6 +3916,10 @@ a {
|
|
|
if(this.user.timeType.projectWithDept) {
|
|
|
this.getDepartmentList()
|
|
|
}
|
|
|
+
|
|
|
+ if(this.user.companyId == '936') {
|
|
|
+ this.getkeyNodes()
|
|
|
+ }
|
|
|
}
|
|
|
};
|
|
|
</script>
|
|
@@ -3743,6 +3943,24 @@ a {
|
|
|
white-space: nowrap;
|
|
|
text-overflow: ellipsis;
|
|
|
}
|
|
|
+.keyNodes {
|
|
|
+ display: flex;
|
|
|
+ width: 100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+ padding: 10px 30px;
|
|
|
+}
|
|
|
+.keyNodes .keyNodesTime {
|
|
|
+ width: 190px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+}
|
|
|
+.keyNodes .keyNodesName {
|
|
|
+ width: 260px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+}
|
|
|
|
|
|
// 111
|
|
|
|