|
@@ -122,11 +122,12 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="全部参与者">
|
|
|
- <el-select v-model="addForm.userId" multiple filterable placeholder="请选择参与者" style="width:100%;" @change="changeParticipator">
|
|
|
+ <el-input @focus="showChooseMembTree" v-model="addForm.userNames"></el-input>
|
|
|
+ <!-- <el-select v-model="addForm.userId" multiple filterable placeholder="请选择参与者" style="width:100%;" @change="changeParticipator">
|
|
|
<el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
- </el-select>
|
|
|
+ </el-select> -->
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="主要负责人" >
|
|
|
+ <el-form-item label="负责人" >
|
|
|
<el-select v-model="addForm.inchargerId" :disabled="addForm.userId.length==0 || user.role==0" filterable placeholder="请选择负责人" style="width:100%;" >
|
|
|
<el-option v-for="item in participator" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
</el-select>
|
|
@@ -142,8 +143,8 @@
|
|
|
|
|
|
<!-- 增加合同金额字段 -->
|
|
|
<span style="margin-left:63px;margin-right:10px;" v-if="user.company.packageProject==1">合同金额</span>
|
|
|
- <el-input v-model="addForm.contractAmount" style="width:33%;"
|
|
|
- placeholder="整数" clearable @keyup.native="addForm.contractAmount=addForm.contractAmount.replace(/[^\d]/g,'');" ></el-input><span style="margin-left:10px;">元</span>
|
|
|
+ <el-input id="contractAmount" v-model="addForm.contractAmount" style="width:33%;"
|
|
|
+ placeholder="整数" clearable @keyup.native="restrictNumber('contractAmount')" ></el-input><span style="margin-left:10px;">元</span>
|
|
|
<!-- 增加合同金额字段 -->
|
|
|
|
|
|
</el-form-item>
|
|
@@ -171,10 +172,10 @@
|
|
|
<span class="el-dialog__title">成本基线</span>
|
|
|
</div>
|
|
|
<!--新版 -->
|
|
|
- <span class="rg_span" v-for="(item) in projectBaseCostData" :key="item.id">
|
|
|
+ <span class="rg_span" v-for="(item, index) in projectBaseCostData" :key="item.id">
|
|
|
<span style="width:120px;display: inline-block;" v-if="user.company.packageProject==1">{{item.baseName}}</span>
|
|
|
- <el-input @input="addUpfun()" v-model="item.baseAmount" style="width:200px; margin-bottom: 20px"
|
|
|
- placeholder="整数" clearable @keyup.native="item.baseAmount=item.baseAmount.replace(/[^\d]/g,'');"></el-input><span style="margin-left:10px;">元</span>
|
|
|
+ <el-input :id="'baseCost'+index" @input="addUpfun()" v-model="item.baseAmount" style="width:200px; margin-bottom: 20px"
|
|
|
+ placeholder="整数" clearable @keyup.native="restrictNumber('baseCost'+index)"></el-input><span style="margin-left:10px;">元</span>
|
|
|
</span>
|
|
|
|
|
|
<!-- <span class="rg_span">
|
|
@@ -298,6 +299,24 @@
|
|
|
<el-button type="primary" @click="submitInsertBaseItem" :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> -->
|
|
|
+ <div class="tree" style="height:400px">
|
|
|
+ <el-scrollbar style="height:100%">
|
|
|
+ <el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
|
|
|
+ ref="chooseMembTree" @check-change="onTreeItemChange" :default-checked-keys="addForm.userId"
|
|
|
+ highlight-current ></el-tree>
|
|
|
+ </el-scrollbar>
|
|
|
+ </div>
|
|
|
+ <div>已选中 {{chosenMembCount}} 人</div>
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="chooseParticipVisible = false" >取消</el-button>
|
|
|
+ <el-button type="primary" @click="chooseParticip()" >确定</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
</section>
|
|
|
</template>
|
|
|
<style scoped>
|
|
@@ -319,6 +338,27 @@
|
|
|
export default {
|
|
|
data() {
|
|
|
return {
|
|
|
+ chosenMembCount:0,
|
|
|
+ chosenMembList:[],//选中的人员
|
|
|
+ allMembData:[],
|
|
|
+
|
|
|
+ deptMembData: [
|
|
|
+ {
|
|
|
+ id: 0,
|
|
|
+ label: '未分配',
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ option: [],
|
|
|
+ depData: {
|
|
|
+ id: -1,
|
|
|
+ label: '全部人员',
|
|
|
+ },
|
|
|
+ defaultProps: {
|
|
|
+ children: 'children',
|
|
|
+ label: 'label'
|
|
|
+ },
|
|
|
+ filterName:null,
|
|
|
+ chooseParticipVisible: false,
|
|
|
projectBaseCostData:[],
|
|
|
addBaseItemDialog:false,
|
|
|
showBaseConfig:false,
|
|
@@ -381,6 +421,115 @@
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
+ restrictNumber(targetId) {
|
|
|
+ let inpu = document.getElementById(targetId);
|
|
|
+ inpu.value = inpu.value.replace(/[^\d.]/g, ""); //仅保留数字和"."
|
|
|
+ inpu.value = inpu.value.replace(/\.{2,}/g, "."); //两个连续的"."仅保留第一个"."
|
|
|
+ inpu.value = inpu.value.replace(".", "$#*").replace(/\./g,'').replace('$#*','.');//去除其他"."
|
|
|
+ inpu.value = inpu.value.replace(/^(\d+)\.(\d\d).*$/, '$1.$2');;//限制只能输入两个小数
|
|
|
+ if (inpu.value.indexOf(".") < 0 && inpu.value != "") { //首位是0的话去掉
|
|
|
+ inpu.value = parseFloat(inpu.value);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ showChooseMembTree() {
|
|
|
+ this.chosenMembCount = this.participator.length;
|
|
|
+ this.chooseParticipVisible = true;
|
|
|
+ },
|
|
|
+ onTreeItemChange() {
|
|
|
+ var chosenList = this.$refs.chooseMembTree.getCheckedNodes();
|
|
|
+ var list = chosenList.filter(item=>item.isUser == 1);
|
|
|
+ this.chosenMembCount = list.length;
|
|
|
+ },
|
|
|
+ findUserInTree() {
|
|
|
+ if (this.filterName == '') {
|
|
|
+ this.deptMembData = this.allMembData;
|
|
|
+ } else {
|
|
|
+ var list = this.findRecursively(this.filterName, this.allMembData);
|
|
|
+ this.deptMembData = list;
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ findRecursively(username, list) {
|
|
|
+ var filterList = [];
|
|
|
+ for (var i=0;i<list.length; i++) {
|
|
|
+ if (list[i].isUser == 1) {
|
|
|
+ if (list[i].label.indexOf(username) >= 0) {
|
|
|
+ //匹配上了
|
|
|
+ filterList.push(list[i]);
|
|
|
+ }
|
|
|
+ } else if (list[i].children != null && list[i].children.length > 0) {
|
|
|
+ var subList = this.findRecursively(username, list[i].children);
|
|
|
+ if (subList.length > 0) {
|
|
|
+ subList.forEach(s=>filterList.push(s));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return filterList;
|
|
|
+ },
|
|
|
+
|
|
|
+ //确定选择参与人
|
|
|
+ chooseParticip() {
|
|
|
+ this.chooseParticipVisible = false;
|
|
|
+ var chosenList = this.$refs.chooseMembTree.getCheckedNodes();
|
|
|
+ this.chosenMembList = chosenList.filter(item=>item.isUser == 1);
|
|
|
+ this.addForm.userNames = '';
|
|
|
+ this.addForm.userId = [];
|
|
|
+ this.participator = [];
|
|
|
+ for (var i=0;i<this.chosenMembList.length; i++) {
|
|
|
+ this.addForm.userId.push(this.chosenMembList[i].id);
|
|
|
+ this.addForm.userNames += this.chosenMembList[i].label+',';
|
|
|
+ var item = {id:this.chosenMembList[i].id, name:this.chosenMembList[i].label};
|
|
|
+ this.participator.push(item);
|
|
|
+ }
|
|
|
+ if (this.addForm.userNames.length > 0) {
|
|
|
+ this.addForm.userNames = this.addForm.userNames.substring(0, this.addForm.userNames.length-1);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 获取部门列表
|
|
|
+ getDepartment() {
|
|
|
+ this.http.post("/department/listAllMemb", {},
|
|
|
+ res => {
|
|
|
+ if (res.code == "ok") {
|
|
|
+ var list = res.data;
|
|
|
+ //设置员工到部门下面
|
|
|
+ this.setUserToDept(list);
|
|
|
+ this.deptMembData = list;
|
|
|
+ //用于筛选过滤
|
|
|
+ this.allMembData = JSON.parse(JSON.stringify(this.deptMembData));
|
|
|
+ } else {
|
|
|
+ this.$message({
|
|
|
+ message: res.msg,
|
|
|
+ type: "error"
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ error => {
|
|
|
+ this.$message({
|
|
|
+ message: error,
|
|
|
+ type: "error"
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ setUserToDept(list) {
|
|
|
+ for (var i in list) {
|
|
|
+ if (list[i].children != null) {
|
|
|
+ this.setUserToDept(list[i].children);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (list[i].userList != null) {
|
|
|
+ if (list[i].children == null) {
|
|
|
+ list[i].children = [];
|
|
|
+ }
|
|
|
+ list[i].userList.forEach(element => {
|
|
|
+ var obj = {id: element.id, label:element.name, parentId:element.departmentId, isUser:1};
|
|
|
+ list[i].children.push(obj);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
getProjectBaseConfigList() {
|
|
|
this.http.post('/project-basecost-setting/list',{},
|
|
|
res => {
|
|
@@ -736,6 +885,7 @@
|
|
|
this.addForm = {
|
|
|
name: '',
|
|
|
userId: [],
|
|
|
+ userNames:'',
|
|
|
code:'',
|
|
|
inchargerId:null,
|
|
|
level:1,
|
|
@@ -748,13 +898,19 @@
|
|
|
} else {
|
|
|
this.title = "修改项目";
|
|
|
var list = item.participator , arr = [];
|
|
|
+ var names = '';
|
|
|
for(var j in list) {
|
|
|
arr.push(list[j].id)
|
|
|
+ names += list[j].name+',';
|
|
|
+ }
|
|
|
+ if (names.length > 0) {
|
|
|
+ names = names.substring(0, names.length -1);
|
|
|
}
|
|
|
this.addForm = {
|
|
|
id: item.id,
|
|
|
name: item.projectName,
|
|
|
userId: arr,
|
|
|
+ userNames:names,
|
|
|
code:item.projectCode,
|
|
|
inchargerId: item.inchargerId,
|
|
|
level: item.level,
|
|
@@ -832,7 +988,7 @@
|
|
|
addUpfun() {
|
|
|
var total = 0;
|
|
|
for (var i=0;i<this.projectBaseCostData.length; i++) {
|
|
|
- total += parseInt(this.projectBaseCostData[i].baseAmount);
|
|
|
+ total += parseFloat(this.projectBaseCostData[i].baseAmount);
|
|
|
}
|
|
|
this.addForm.budget = total;
|
|
|
// var a = '0'
|
|
@@ -887,6 +1043,9 @@
|
|
|
if (this.projectBaseCostData != null) {
|
|
|
formData.append("projectBaseCostData", JSON.stringify(this.projectBaseCostData));
|
|
|
//计算总预算成本
|
|
|
+ if (this.addForm.budget == null) {
|
|
|
+ this.addForm.budget = 0;
|
|
|
+ }
|
|
|
formData.append("budget", this.addForm.budget);
|
|
|
}
|
|
|
if (this.addForm.customerId == null) {
|
|
@@ -975,6 +1134,7 @@
|
|
|
};
|
|
|
},
|
|
|
mounted() {
|
|
|
+ this.getDepartment();
|
|
|
this.getList();
|
|
|
this.getUsers();
|
|
|
this.getCustomerList();
|