数通互联化工云平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

298 lines
7.8 KiB

<!--
@ 作者: 秦东
@ 时间: 2025-08-16 11:11:52
@ 备注: 人员选择
-->
<script lang="ts" setup>
import {
geiOrgAllPeople,
saveEditDutyInfo,
getDutyCont,
get_org_everyone_people,
getOrgTree,
getOrgPeopleList,
} from "@/api/hr/paiban/index";
import UserIcon from "@/assets/images/1.png";
const props = defineProps({
isShow: {
type: Boolean,
default: false,
},
orgKey: {
type: Object,
default() {
return {};
},
},
orgInfo: {
type: Object,
default() {
return {};
},
},
currOrgCont: {
type: Number,
default: 309,
},
currOrgContName: {
type: String,
default: "",
},
});
const loading = ref(false);
const emits = defineEmits(["update:isOpen", "subitRefresh"]);
const openPage = computed({
get() {
return props.isShow;
},
set(val: boolean) {
emits("update:isShow", val);
},
});
//行政组织列表
const currOrgManList = ref([]);
const peopleAry = ref([]); //人员列表
//搜索条件
const searchAry = reactive({
id: props.currOrgCont * 1,
name: "",
page: 1,
pagesize: 10,
});
//已选择的数据
const pickUserAry = ref(props.orgInfo ? props.orgInfo : []);
const pickUserKeyAry = ref(props.orgKey ? props.orgKey : []);
const totalCount = ref(0); //一共多少数据
//选中行政组织节点
const pickOrgNode = (val: any, v: any, y: any, u: any) => {
searchAry.id = val.id * 1;
searchAry.page = 1;
getPeople();
};
//树字段转换
const defaultProps = {
children: "children",
label: "name",
};
const saveInfo = ref("");
const loadTable = ref(false);
//获取行政组织
const getOrgTreeSub = () => {
currOrgManList.value = [];
getOrgTree({
id: props.currOrgCont * 1,
}).then((res: any) => {
console.log("获取行政组织人员信息get_org", res);
currOrgManList.value = res.data;
});
};
//清空所有数据
const delAll = () => {
pickUserAry.value = [];
pickUserKeyAry.value = [];
};
//关闭选择
const closeOrgUserPAge = () => {
emits("update:isShow", false);
delAll();
currOrgManList.value = [];
peopleAry.value = [];
searchAry.id = props.currOrgCont * 1;
searchAry.page = 1;
searchAry.pagesize = 10;
searchAry.name = "";
};
//搜索人员
const searchPeopleUs = () => {
searchAry.id = props.currOrgCont * 1;
searchAry.page = 1;
getPeople();
};
//获取人员信息
const getPeople = () => {
loadTable.value = true;
getOrgPeopleList({
id: searchAry.id,
name: searchAry.name,
page: searchAry.page,
pagesize: searchAry.pagesize,
})
.then((res: any) => {
console.log("获取人员信息------val----->", res);
let userListAry = res.data;
totalCount.value = userListAry.total;
peopleAry.value = userListAry.list;
loadTable.value = false;
})
.finally(() => {
loadTable.value = false;
});
};
//选择人员
const handleCurrentChange = (val: any) => {
console.log("选择人员------row----->", val);
let isNew = true;
console.log("选择人员------row----->", Array.isArray(pickUserAry.value));
if (Array.isArray(pickUserAry.value)) {
let neeAry = new Array();
let neeKeyAry = new Array();
pickUserAry.value.forEach((item, index) => {
if (item.userKey == val.userKey) {
isNew = false;
} else {
neeAry.push(item);
neeKeyAry.push(item.userKey);
}
});
if (isNew) {
pickUserAry.value.push(val);
pickUserKeyAry.value.push(val.userKey);
} else {
pickUserAry.value = neeAry;
pickUserKeyAry.value = neeKeyAry;
}
} else {
pickUserAry.value.push(val);
pickUserKeyAry.value.push(val.userKey);
}
};
// 勾选的行改变颜色
const rowClass = (val: any) => {
if (Array.isArray(pickUserKeyAry.value)) {
if (pickUserKeyAry.value.includes(val.userKey)) {
return "active";
}
}
};
//翻页
const pageCurrentChange = (val: any) => {
searchAry.page = val;
console.log("翻页数据--->", val, searchAry);
getPeople();
};
//删除已选中的数据
const delPickUs = (val: any) => {
if (Array.isArray(pickUserAry.value)) {
let neeAry = new Array();
let neeKeyAry = new Array();
pickUserAry.value.forEach((item, index) => {
if (item.userKey != val.userKey) {
neeAry.push(item);
neeKeyAry.push(item.userKey);
}
});
pickUserAry.value = neeAry;
pickUserKeyAry.value = neeKeyAry;
}
};
//选定
const pickOkUser = () => {};
onMounted(() => {
console.log("新家项目---》", props);
getOrgTreeSub();
getPeople();
});
</script>
<template>
<el-dialog
v-model="openPage"
title="选择人员"
width="900"
draggable
:before-close="closeOrgUserPAge"
append-to-body
>
<div class="bianBox">
<div class="bianKuang">
<div class="topHead">行政组织</div>
<el-scrollbar class="bianScro">
<el-tree
style="width: 100%"
:data="currOrgManList"
:props="defaultProps"
:expand-on-click-node="false"
:check-on-click-node="true"
node-key="id"
@node-click="pickOrgNode"
/>
</el-scrollbar>
</div>
<div class="bianKuangCenter">
<div class="topHead">
<el-input
v-model="searchAry.name"
clearable
placeholder="请输入姓名或工号、手机号码"
>
<template #append>
<el-button class="fa fa-search" @click="searchPeopleUs" />
</template>
</el-input>
</div>
<el-row class="rowHead">
<el-col :span="4">照片</el-col>
<el-col :span="6">姓名</el-col>
<el-col :span="7">工号</el-col>
<el-col :span="7">联系方式</el-col>
</el-row>
<el-scrollbar class="bianScroRow">
<el-row
v-for="item in peopleAry"
:key="item.userKey"
@click="handleCurrentChange(item)"
:class="'rowInfo ' + rowClass(item)"
>
<el-col :span="4" class="imgBoxCol">
<img class="imgBox" :src="item.userAvatar ? item.userAvatar : UserIcon" />
</el-col>
<el-col :span="6">{{ item.userName }}</el-col>
<el-col :span="7">{{ item.userNumber }}</el-col>
<el-col :span="7">{{ item.telStr }}</el-col>
</el-row>
</el-scrollbar>
<div class="fanyeBox">
<el-pagination
size="small"
background
layout="prev, pager, next"
:total="totalCount"
@current-change="pageCurrentChange"
/>
</div>
</div>
<div class="bianKuang">
<div class="topHead fencha">
<div>
已选择<el-text class="mx-1" type="danger">{{ pickUserAry.length }}</el-text
>
</div>
<div><el-text class="mx-1" type="danger" @click="delAll">清空</el-text></div>
</div>
<el-scrollbar class="bianScroRight">
<div v-for="item in pickUserAry" :key="item.userKey" class="userBox">
<img :src="item.userAvatar ? item.userAvatar : UserIcon" />
<div>
<el-space wrap>
<el-text class="mx-1 pianyi fa fa-user" type="info"
>{{ item.userName }}{{ item.userNumber }}</el-text
>
<el-text class="mx-1 pianyi fa fa-phone" type="primary">{{
item.telStr
}}</el-text>
</el-space>
</div>
<i class="fa fa-trash-o" @click="delPickUs(item)" />
</div>
</el-scrollbar>
<div class="footBut">
<el-button @click="closeOrgUserPAge">取消</el-button>
<el-button type="primary" @click="pickOkUser">确定</el-button>
</div>
</div>
</div>
</el-dialog>
</template>
<style lang="scss" scoped></style>