You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

196 lines
4.9 KiB
Plaintext

<template>
<div id="SelectEmps">
<el-tree
:props="props"
:data="data"
node-key="No"
:default-expanded-keys="defaultExPandNode"
:check-strictly="true"
show-checkbox
@node-click="handleNodeClick"
@check-change="handleCheckChange"
ref="tree"
></el-tree>
<div class="btn-group">
<el-button size="small" @click="toPrevDept">上一级</el-button>
<el-button type="primary" size="small" @click="btnOK">确定</el-button>
</div>
</div>
</template>
<script>
export default {
name: "SelectEmps",
props: {
parentComponent: {
type: String
},
isSingle: {
type: Boolean
}
},
data() {
return {
props: {
children: "children",
label: "Name",
},
data: [],
FK_Dept: "",//查询的部门
ParentNo: "",
judgeDept: "productionTree", //判断渲染上级还是下级
childrenJSON: [],
defaultExPandNode: [], //默认展开的节点
checkEmps: [],//选择的人员
params: {},//参数
webUser: {},
}
},
created() {
this.params = this.$store.getters.getData;
this.webUser = this.$store.getters.getWebUser;
if (this.params.FK_Dept)
this.FK_Dept = this.params.FK_Dept;
else
this.FK_Dept = this.webUser.FK_Dept;
this.loadData();
},
methods: {
loadData() {
let handler = new this.HttpHandler("BP.WF.HttpHandler.WF_WorkOpt");
handler.AddPara("FK_Dept", this.FK_Dept);
let data = handler.DoMethodReturnString("SelectEmps_Init");
if (data.indexOf('err@') == 0) {
this.$message.error(data);
console.log(data);
return;
}
data = JSON.parse(data);
data.Emps.forEach(emp=>{
emp.No=emp.No.replace("Emp_","");
})
this[this.judgeDept](data);
this.defaultExPandNode = [this.FK_Dept];
},
productionTree(data) {
//分析数据
var _this = this;
var fkDeptObj = this.$.grep(data.Depts, function (value) {
return value.No == _this.FK_Dept;
});
if (fkDeptObj != undefined && fkDeptObj.length == 1) {
this.ParentNo = fkDeptObj[0].ParentNo;
}
var depts = this.$.grep(data.Depts, function (value) {
return value.ParentNo == _this.ParentNo;
})
//子部门
var childDepts = this.$.grep(data.Depts, function (value) {
return value.ParentNo == _this.FK_Dept;
});
depts.forEach(item => {
item.disabled = true;
item.children = [];
data.Emps.forEach(items => {
if (item.No == items.FK_Dept) {
item.children.push(items);
}
});
childDepts.forEach(items => {
if (item.No == _this.FK_Dept) {
items.disabled = true;
item.children.push(items);
}
});
if (_this.FK_Dept == item.No) {
_this.data.push(item);
_this.ParentNo = item.ParentNo;
} else {
_this.data[0].children.push(item);
}
});
},
//下级树渲染
lowerLevel(data) {
console.log("下级树", data);
this.$set(this.childrenJSON, 'children', []);
data.Emps.forEach(item => {
this.childrenJSON.children.push(item);
});
data.Depts.forEach(item => {
if (item.ParentNo == this.childrenJSON.No) {
item.disabled = true;
this.childrenJSON.children.push(item);
}
});
},
handleNodeClick(node) {
if (this.data[0].No != node.No) {
this.childrenJSON = node;
this.judgeDept = "lowerLevel";
this.FK_Dept = node.No;
this.loadData();
}
},
btnOK() { //确定
let res = this.$refs.tree.getCheckedNodes();
if (res.length == 0) {
this.$message.warning("请选择人员");
return;
}
this.checkAll = [];
if (this.parentComponent == "CC" || this.parentComponent == "Shift") {
res.forEach(item => {
if (item.disabled != true)
this.checkAll.push(item.No + "," + item.Name);
});
this.$emit('selectEmpsValue', this.checkAll.join(";"));
} else {
res.forEach(item => {
if (item.disabled != true)
this.checkAll.push(item.No);
});
this.$emit('selectEmpsValue', this.checkAll.join(","));
}
},
toPrevDept() {//上一级
if (this.ParentNo == 0) {
this.$message({
message: "已经是第一级机构了",
type: "warning"
});
return;
}
this.FK_Dept = this.ParentNo;
this.data = [];
this.loadData();
},
handleCheckChange(data, checked) {
if (checked == true) {
this.$refs.tree.setCheckedNodes([data]);
}
},
}
}
</script>
<style scoped>
/deep/ .el-header {
line-height: 26px;
}
.btn-group{
display: flex;
align-items: center;
justify-content: center;
}
</style>