部门用户选择器
This commit is contained in:
parent
26d0ec1388
commit
e8477251d0
@ -0,0 +1,253 @@
|
|||||||
|
<template>
|
||||||
|
<div style="display: flex; align-items: center">
|
||||||
|
<el-popover :show-after="0" :hide-after="0" placement="left" :width="300" trigger="click">
|
||||||
|
<template #reference>
|
||||||
|
<el-button v-if="!userCheck" style="margin-right: 16px">{{deptInfo}}</el-button>
|
||||||
|
<el-button v-if="userCheck" style="margin-right: 16px">选择用户</el-button>
|
||||||
|
</template>
|
||||||
|
<template #default>
|
||||||
|
<el-row :gutter="5">
|
||||||
|
<el-col :span="24">
|
||||||
|
<div>
|
||||||
|
<el-table
|
||||||
|
:data="DeptList"
|
||||||
|
row-key="id"
|
||||||
|
@selection-change="handleSelectionChange"
|
||||||
|
>
|
||||||
|
<el-table-column
|
||||||
|
v-if="multipleDeptBox"
|
||||||
|
type="selection"
|
||||||
|
reserve-selection
|
||||||
|
/>
|
||||||
|
<!-- 部门名称列 -->
|
||||||
|
<el-table-column prop="name" label="部门名称">
|
||||||
|
<template #default="scope">
|
||||||
|
<span @click="handleDeptNodeClick(scope.row)">
|
||||||
|
{{ scope.row.name }}
|
||||||
|
</span>
|
||||||
|
<div>
|
||||||
|
<el-collapse
|
||||||
|
v-if="userCheck"
|
||||||
|
class="custom-collapse"
|
||||||
|
accordion v-model="activeName"
|
||||||
|
>
|
||||||
|
<el-collapse-item
|
||||||
|
class="collapse-item"
|
||||||
|
@click="handleDeptNodeClick(scope.row)"
|
||||||
|
:name="scope.row.id.toString()"
|
||||||
|
>
|
||||||
|
<el-checkbox-group
|
||||||
|
v-model="UserId"
|
||||||
|
v-if="multipleUserBox"
|
||||||
|
size="large"
|
||||||
|
@change="updateElementTask"
|
||||||
|
>
|
||||||
|
<el-checkbox
|
||||||
|
style="width: 100%; margin-bottom: 2px"
|
||||||
|
v-for="city in userOptions"
|
||||||
|
:key="city['id']"
|
||||||
|
:value="city['id']"
|
||||||
|
>
|
||||||
|
{{ city['nickname'] }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-checkbox-group>
|
||||||
|
<el-radio-group
|
||||||
|
v-model="userSingle"
|
||||||
|
size="large"
|
||||||
|
v-if="!multipleUserBox"
|
||||||
|
@change="updateElementTask2"
|
||||||
|
>
|
||||||
|
<el-radio
|
||||||
|
style="width: 100%; margin-bottom: 2px"
|
||||||
|
v-for="city in userOptions"
|
||||||
|
:key="city['id']"
|
||||||
|
:value="city['id']"
|
||||||
|
>
|
||||||
|
{{ city['nickname'] }}
|
||||||
|
</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
</el-popover>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
import * as UserApi from "@/api/system/user";
|
||||||
|
import * as DeptApi from "@/api/system/dept";
|
||||||
|
import {handleTree} from "@/utils/tree";
|
||||||
|
|
||||||
|
defineOptions({ name : "DeptUserTask" })
|
||||||
|
const emit = defineEmits(['update:dept','update:multiple-dept','update:user','update:multiple-user','change']);
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
/**
|
||||||
|
* 已选用户id组
|
||||||
|
*/
|
||||||
|
userIdm: {
|
||||||
|
type: Array,
|
||||||
|
default: () => [],
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 已选用户id单
|
||||||
|
*/
|
||||||
|
userIds: {
|
||||||
|
type: Number,
|
||||||
|
default: 0,
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 是否启用部门多选
|
||||||
|
*/
|
||||||
|
multipleDeptBox: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 是否启用用户多选
|
||||||
|
*/
|
||||||
|
multipleUserBox: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 是否启用用户选择
|
||||||
|
*/
|
||||||
|
userCheck: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* watch,userid,属性
|
||||||
|
* 变化时把值给到.UserId 组
|
||||||
|
*/
|
||||||
|
watch(() =>props.userIdm,
|
||||||
|
(val:[])=>{
|
||||||
|
UserId.value=val
|
||||||
|
})
|
||||||
|
/**
|
||||||
|
* watch,userid,属性
|
||||||
|
* 变化时把值给到.UserId 单
|
||||||
|
*/
|
||||||
|
watch(() =>props.userIds,
|
||||||
|
(val:number)=>{
|
||||||
|
userSingle.value=val
|
||||||
|
})
|
||||||
|
|
||||||
|
const multipleDept = ref<number[]>([])//部门id组
|
||||||
|
const UserId = ref<number[]>([]);//用户id组
|
||||||
|
const userSingle = ref(0)//用户id单选
|
||||||
|
const activeName = ref('0')
|
||||||
|
const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
|
||||||
|
const DeptList = ref() // 列表的数据
|
||||||
|
const deptInfo = ref('选择部门')//部门信息
|
||||||
|
|
||||||
|
const queryParamsDept = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 100,
|
||||||
|
name: undefined,
|
||||||
|
status: undefined
|
||||||
|
})
|
||||||
|
|
||||||
|
const queryParams = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
id: undefined,
|
||||||
|
username: undefined,
|
||||||
|
mobile: undefined,
|
||||||
|
status: undefined,
|
||||||
|
deptId: undefined,
|
||||||
|
deptName: undefined,
|
||||||
|
createTime: []
|
||||||
|
})
|
||||||
|
|
||||||
|
/** 查询列表 初始化更新一次 再有每次打开列表或者选中部门时更新 */
|
||||||
|
const getList = async () => {
|
||||||
|
try {
|
||||||
|
const data = await UserApi.getUserPage(queryParams)
|
||||||
|
const DeptData = await DeptApi.getDeptPage(queryParamsDept)
|
||||||
|
DeptList.value = handleTree(DeptData)
|
||||||
|
userOptions.value = data.list
|
||||||
|
} finally {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 列表点击后获取单部门id数据 并设置部门id到用户搜索数据 然后更新数据到父组件 */
|
||||||
|
const handleDeptNodeClick = async (row:any)=> {
|
||||||
|
deptInfo.value = row.name
|
||||||
|
queryParams.deptId = row.id
|
||||||
|
emit('update:dept', row.id);
|
||||||
|
await getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绑定@selection-change事件 把已选择内容数据得到再只拿idpush到multipleDept中
|
||||||
|
* 然后更新给到父组件
|
||||||
|
* @param val
|
||||||
|
*/
|
||||||
|
const handleSelectionChange = (val: number[]) => {
|
||||||
|
if (!props.multipleDeptBox) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
multipleDept.value=[]
|
||||||
|
multipleDept.value.push(...val.map((item) => item.id))
|
||||||
|
emit('update:multiple-dept',multipleDept.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 选中某个 options 时候,更新父组件数据 多选 还有每次触发change事件 */
|
||||||
|
const updateElementTask = () => {
|
||||||
|
if (!props.userCheck){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
console.log(UserId.value)
|
||||||
|
emit('update:multiple-user', UserId.value);
|
||||||
|
emit('change')
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 选中某个 options 时候,更新父组件数据 单选时 还有每次触发change事件 */
|
||||||
|
const updateElementTask2 = () => {
|
||||||
|
if (!props.userCheck){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
emit('update:user', userSingle.value);
|
||||||
|
emit('change')
|
||||||
|
}
|
||||||
|
/** 初始化*/
|
||||||
|
onMounted(async () => {
|
||||||
|
//记忆已选用户
|
||||||
|
UserId.value = props.userIdm
|
||||||
|
userSingle.value = props.userIds
|
||||||
|
await getList()
|
||||||
|
// 获得用户列表
|
||||||
|
userOptions.value = await UserApi.getSimpleUserList()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.el-collapse {
|
||||||
|
border: none;/* 设置下拉无边框 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-table {
|
||||||
|
--el-table-row-hover-bg-color: transparent; /* 设置为透明或其他颜色 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-collapse-item__header {
|
||||||
|
font-size: 12px; /* 调整字体大小 */
|
||||||
|
padding: 0 0 0 0; /* 调整内边距,使按钮更紧凑 */
|
||||||
|
height: 20px; /* 设置固定高度 */
|
||||||
|
min-width: 24px; /* 设置最小宽度 */
|
||||||
|
line-height: 1; /* 调整行高 */
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
@ -66,14 +66,16 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
v-if="userTaskForm.candidateStrategy == 30"
|
v-if="userTaskForm.candidateStrategy == 30"
|
||||||
label="指定用户"
|
label="指定部门"
|
||||||
prop="candidateParam"
|
prop="candidateParam"
|
||||||
span="24"
|
span="24"
|
||||||
>
|
>
|
||||||
<el-button
|
<DeptUserTask
|
||||||
@click="drawer = true"
|
:user-idm="userTaskForm.candidateParam"
|
||||||
style="height: auto; width: auto"
|
:multiple-dept-box="false"
|
||||||
>选择用户部门</el-button>
|
v-model:multipleUser="userTaskForm.candidateParam"
|
||||||
|
@change="updateElementTask"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
v-if="userTaskForm.candidateStrategy == 30"
|
v-if="userTaskForm.candidateStrategy == 30"
|
||||||
@ -136,22 +138,6 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<el-drawer v-model="drawer" :direction="direction">
|
|
||||||
<template #header>
|
|
||||||
<h2>部门选择</h2>
|
|
||||||
</template>
|
|
||||||
<template #default>
|
|
||||||
<el-divider border-style="dashed" />
|
|
||||||
<div>
|
|
||||||
<DeptTree @node-click="handleDeptNodeClick" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<template #footer>
|
|
||||||
<div style="flex: auto">
|
|
||||||
<el-button type="primary" @click="cancelClick">确定</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-drawer>
|
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -164,15 +150,6 @@ import * as PostApi from '@/api/system/post'
|
|||||||
import * as UserApi from '@/api/system/user'
|
import * as UserApi from '@/api/system/user'
|
||||||
import * as UserGroupApi from '@/api/bpm/userGroup'
|
import * as UserGroupApi from '@/api/bpm/userGroup'
|
||||||
import ProcessExpressionDialog from './ProcessExpressionDialog.vue'
|
import ProcessExpressionDialog from './ProcessExpressionDialog.vue'
|
||||||
import DeptTree from '@/components/bpmnProcessDesigner/package/penal/task/task-components/DeptTree_Task.vue'
|
|
||||||
// import { ElMessageBox } from 'element-plus'
|
|
||||||
import type { DrawerProps } from 'element-plus'
|
|
||||||
|
|
||||||
const drawer = ref(false)
|
|
||||||
const direction = ref<DrawerProps['direction']>('rtl')
|
|
||||||
function cancelClick() {
|
|
||||||
drawer.value = false
|
|
||||||
}
|
|
||||||
|
|
||||||
defineOptions({ name: 'UserTask' })
|
defineOptions({ name: 'UserTask' })
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -192,31 +169,6 @@ const postOptions = ref<PostApi.PostVO[]>([]) // 岗位列表
|
|||||||
const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
|
const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
|
||||||
const userGroupOptions = ref<UserGroupApi.UserGroupVO[]>([]) // 用户组列表
|
const userGroupOptions = ref<UserGroupApi.UserGroupVO[]>([]) // 用户组列表
|
||||||
|
|
||||||
const queryParams = reactive({
|
|
||||||
pageNo: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
id: undefined,
|
|
||||||
username: undefined,
|
|
||||||
mobile: undefined,
|
|
||||||
status: undefined,
|
|
||||||
deptId: undefined,
|
|
||||||
deptName: undefined,
|
|
||||||
createTime: []
|
|
||||||
})
|
|
||||||
/** 查询列表 */
|
|
||||||
const getList = async () => {
|
|
||||||
try {
|
|
||||||
const data = await UserApi.getUserPage(queryParams)
|
|
||||||
userOptions.value = data.list
|
|
||||||
} finally {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/** 处理部门被点击 */
|
|
||||||
const handleDeptNodeClick = async (row) => {
|
|
||||||
console.log('row.id',row)
|
|
||||||
queryParams.deptId = row.id
|
|
||||||
await getList()
|
|
||||||
}
|
|
||||||
|
|
||||||
const resetTaskForm = () => {
|
const resetTaskForm = () => {
|
||||||
const businessObject = bpmnElement.value.businessObject
|
const businessObject = bpmnElement.value.businessObject
|
||||||
|
Loading…
Reference in New Issue
Block a user