update 调整面板位置

This commit is contained in:
LiuHao 2024-01-24 18:06:59 +08:00
parent 917e661c5a
commit 32c9b6f656
8 changed files with 255 additions and 180 deletions

View File

@ -5,16 +5,17 @@ export default {
formKey: true
},
'bpmn:UserTask': {
userType: true,
assignee: true,
candidateUsers: true,
candidateGroups: true,
auditUserType: true,
users: true,
roles: true,
specifyDesc: true,
multipleUserAuditType: true,
async: true,
priority: true,
formKey: true,
skipExpression: true,
dueDate: true,
taskListener: true
taskListener: true,
executionListener: true
},
'bpmn:ServiceTask': {
async: true,

View File

@ -1,5 +1,5 @@
<template>
<el-dialog ref="flowDialogRef" v-model="dialog.visible" :title="dialog.title" width="95%" @close="closeDialog">
<el-dialog ref="flowDialogRef" v-model="dialog.visible" width="95%" :title="dialog.title" @close="closeDialog">
<div class="app-containers">
<el-header style="border-bottom: 1px solid rgb(218 218 218); height: auto">
<div class="flex pb-3 justify-between">
@ -51,7 +51,7 @@
<div ref="canvas" class="canvas" />
</el-main>
<el-scrollbar height="610px">
<el-aside style="width: 400px; min-height: 590px; background-color: #f0f2f5">
<el-aside style="width: 400px; min-height: 590px; background-color: #fff; box-shadow: 0 0 5px 1px #999">
<PropertyPanel v-if="bpmnModeler" :modeler="bpmnModeler" :users="users" :groups="groups" />
</el-aside>
</el-scrollbar>
@ -317,9 +317,6 @@ const getProcessElement = () => {
</script>
<style lang="scss" scoped>
/*左边工具栏以及编辑节点的样式*/
//@import 'bpmn-js/dist/assets/bpmn-js.css';
.app-containers {
width: 100%;
height: 100%;
@ -328,23 +325,5 @@ const getProcessElement = () => {
height: 100%;
background: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImEiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTTAgMTBoNDBNMTAgMHY0ME0wIDIwaDQwTTIwIDB2NDBNMCAzMGg0ME0zMCAwdjQwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlMGUwZTAiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZD0iTTQwIDBIMHY0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIi8+PC9wYXR0ZXJuPjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2EpIi8+PC9zdmc+');
}
.panel {
position: absolute;
right: 0;
top: 50px;
width: 300px;
}
.load {
margin-right: 10px;
}
.el-form-item__label {
font-size: 13px;
}
}
.bpmn-icon-start-event-none:before {
//background-color: green;
//border-radius: 100%;
//font-size: 30px;
}
</style>

View File

@ -1,37 +1,78 @@
<template>
<div>
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px">
<el-form-item prop="id" label="节点 ID">
<el-input v-model="formData.id" @change="idChange"> </el-input>
</el-form-item>
<el-form-item prop="name" label="节点名称">
<el-input v-model="formData.name" @change="nameChange"> </el-input>
</el-form-item>
<el-form-item prop="auditUserType" label="人员类型">
<el-select v-model="formData.auditUserType">
<el-option v-for="item in AuditUserTypeSelect" :key="item.id" :value="item.value" :label="item.label"> </el-option>
</el-select>
</el-form-item>
<el-form-item v-if="formData.auditUserType === AuditUserTypeEnum.USER" style="">
<el-button type="primary" @click="openUserSelect">选择人员</el-button>
</el-form-item>
<el-form-item v-if="formData.auditUserType === AuditUserTypeEnum.SPECIFY" style="">
<el-radio-group v-model="formData.specifyDesc" class="ml-4">
<el-radio v-for="item in SpecifyDesc" :key="item.id" :label="item.value" size="large">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="多人审批方式">
<el-radio-group v-model="formData.multipleUserAuditType" class="ml-4 block-radio">
<el-radio v-for="item in MultipleUserAuditType" :key="item.id" :label="item.value" size="large">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="执行监听器" style="margin-bottom: 0"> </el-form-item>
<ExecutionListener :modeler="modeler" :element="element"></ExecutionListener>
<el-form-item label="任务监听器" style="margin-bottom: 0"> </el-form-item>
<TaskListener :modeler="modeler" :element="element"></TaskListener>
</el-form>
<UserSelect ref="userSelectRef" v-model="formData.users"></UserSelect>
<el-collapse>
<el-collapse-item title="Consistency" name="1">
<el-form ref="formRef" size="small" :model="formData" :rules="formRules" label-width="90px">
<el-form-item prop="id" label="节点 ID">
<el-input v-model="formData.id" @change="idChange"> </el-input>
</el-form-item>
<el-form-item prop="name" label="节点名称">
<el-input v-model="formData.name" @change="nameChange"> </el-input>
</el-form-item>
<el-form-item v-if="showConfig.auditUserType" prop="auditUserType" label="人员类型">
<el-select v-model="formData.auditUserType">
<el-option v-for="item in AuditUserTypeSelect" :key="item.id" :value="item.value" :label="item.label"> </el-option>
</el-select>
</el-form-item>
<el-form-item v-if="formData.auditUserType === AuditUserTypeEnum.USER && showConfig.users" style="">
<el-badge :value="formData.users.length" :max="99">
<el-button type="primary" @click="openUserSelect">选择人员</el-button>
<UserSelect ref="userSelectRef" v-model="formData.users"></UserSelect>
</el-badge>
</el-form-item>
<el-form-item v-if="formData.auditUserType === AuditUserTypeEnum.ROLE && showConfig.roles" style="">
<el-badge :value="formData.users.length" :max="99">
<el-button type="primary" disabled @click="openUserSelect">选择角色</el-button>
<UserSelect ref="userSelectRef" v-model="formData.roles"></UserSelect>
</el-badge>
</el-form-item>
<el-form-item v-if="formData.auditUserType === AuditUserTypeEnum.SPECIFY && showConfig.specifyDesc" style="">
<el-radio-group v-model="formData.specifyDesc" class="ml-4">
<el-radio v-for="item in SpecifyDesc" :key="item.id" :label="item.value" size="large">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="showConfig.multipleUserAuditType" prop="multipleUserAuditType" label="多人审批方式">
<el-radio-group v-model="formData.multipleUserAuditType" class="ml-4 block-radio">
<el-radio v-for="item in MultipleUserAuditType" :key="item.id" :label="item.value" size="large">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="showConfig.async" prop="sync" label="是否异步">
<el-switch v-model="formData.async" inline-prompt active-text="是" inactive-text="否" @change="syncChange" />
</el-form-item>
<el-form-item v-if="showConfig.priority" prop="priority" label="优先级">
<el-input v-model="formData.priority"> </el-input>
</el-form-item>
<el-form-item v-if="showConfig.skipExpression" prop="skipExpression" label="跳过表达式">
<el-input v-model="formData.skipExpression"> </el-input>
</el-form-item>
<el-form-item v-if="showConfig.isForCompensation" prop="isForCompensation" label="是否为补偿">
<el-switch v-model="formData.isForCompensation" inline-prompt active-text="是" inactive-text="否" />
</el-form-item>
<el-form-item v-if="showConfig.triggerServiceTask" prop="triggerServiceTask" label="服务任务可触发">
<el-switch v-model="formData.triggerServiceTask" inline-prompt active-text="是" inactive-text="否" />
</el-form-item>
<el-form-item v-if="showConfig.autoStoreVariables" prop="autoStoreVariables" label="自动存储变量">
<el-switch v-model="formData.autoStoreVariables" inline-prompt active-text="是" inactive-text="否" />
</el-form-item>
<el-form-item v-if="showConfig.ruleVariablesInput" prop="skipExpression" label="输入变量">
<el-input v-model="formData.ruleVariablesInput"> </el-input>
</el-form-item>
<el-form-item v-if="showConfig.exclude" prop="exclude" label="排除">
<el-switch v-model="formData.exclude" inline-prompt active-text="是" inactive-text="否" />
</el-form-item>
<el-form-item v-if="showConfig.class" prop="class" label="类">
<el-input v-model="formData.class"> </el-input>
</el-form-item>
<el-form-item v-if="showConfig.dueDate" prop="dueDate" label="到期时间">
<el-date-picker v-model="formData.dueDate" type="datetime" @change="dueDateChange" />
</el-form-item>
<el-form-item v-if="showConfig.executionListener" label="执行监听器" style="margin-bottom: 0"> </el-form-item>
<ExecutionListener v-if="showConfig.executionListener" :modeler="modeler" :element="element"></ExecutionListener>
<el-form-item v-if="showConfig.taskListener" label="任务监听器" style="margin-bottom: 0"> </el-form-item>
<TaskListener v-if="showConfig.taskListener" :modeler="modeler" :element="element"></TaskListener>
</el-form>
</el-collapse-item>
</el-collapse>
</div>
</template>
<script setup lang="ts">
@ -40,17 +81,14 @@ import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import UserSelect from '@/components/UserSelect';
import { Element, Modeler } from 'bpmn';
import { TaskPanel } from 'bpmnDesign';
import { AuditUserTypeEnum, MultipleUserAuditTypeEnum } from '@/enums/bpmn/IndexEnums';
import { AuditUserTypeEnum, MultipleUserAuditTypeEnum, SpecifyDescEnum } from '@/enums/bpmn/IndexEnums';
interface PropType {
modeler: Modeler;
element: Element;
categorys?: any[];
}
const props = withDefaults(defineProps<PropType>(), {
categorys: () => []
});
const { nameChange, idChange } = usePanel({
const props = withDefaults(defineProps<PropType>(), {});
const { nameChange, idChange, showConfig, updateProperties } = usePanel({
modeler: props.modeler,
element: toRaw(props.element)
});
@ -58,14 +96,60 @@ const { parse, formData } = useParseElement<TaskPanel>({
modeler: props.modeler,
element: toRaw(props.element),
initData: {
id: '',
name: '',
users: [],
roles: [],
multipleUserAuditType: MultipleUserAuditTypeEnum.SERIAL,
auditUserType: AuditUserTypeEnum.USER,
users: []
} as any
specifyDesc: SpecifyDescEnum.SPECIFY_SINGLE
}
});
const userSelectRef = ref<InstanceType<typeof UserSelect>>();
const openUserSelect = () => {
userSelectRef.value.open();
};
const syncChange = (newVal) => {
updateProperties({ 'flowable:async': newVal });
};
const dueDateChange = (newVal) => {
console.log(newVal);
updateProperties({ 'flowable:dueDate': newVal });
};
watch(
() => formData.value.auditUserType,
(val, oldVal) => {
formData.value.users = [];
}
);
watch(
() => formData.value.users,
(newVal: Record<string, any>[]) => {
updateProperties({ 'flowable:candidateGroups': undefined });
if (newVal.length === 1) {
const user = newVal[0];
const userId = user.userId;
updateProperties({ 'flowable:assignee': userId });
updateProperties({ 'flowable:candidateUsers': undefined });
//
} else if (newVal.length > 1) {
// userId ,
const userIds = newVal.map((item) => item.userId).join(',');
updateProperties({ 'flowable:candidateUsers': userIds });
updateProperties({ 'flowable:assignee': undefined });
} else {
updateProperties({ 'flowable:candidateUsers': undefined });
updateProperties({ 'flowable:assignee': undefined });
}
},
{ deep: true }
);
const formRules = ref<ElFormRules>({
id: [{ required: true, message: '请输入', trigger: 'blur' }],
name: [{ required: true, message: '请输入', trigger: 'blur' }]
@ -87,10 +171,6 @@ const MultipleUserAuditType = [
{ id: 'b4f0c683-1ccc-43c4-8380-e1b998986caf', label: '并行(所有人审批通过)', value: 'parallel' },
{ id: '373d4b81-a0d1-4eb8-8685-0d2fb1b468e2', label: '或签(任意一人审批通过)', value: 'orSign' }
];
const openUserSelect = () => {
userSelectRef.value.open();
};
</script>
<style lang="scss" scoped>

View File

@ -1,34 +1,38 @@
<template>
<el-dialog v-model="visible" draggable :title="title" :width="width" :height="height" append-to-body
:close-on-click-modal="false">
<el-dialog v-model="visible" draggable :title="title" :width="width" :height="height" append-to-body :close-on-click-modal="false">
<div class="p-2">
<el-row :gutter="20">
<!-- 部门树 -->
<el-col :lg="4" :xs="24" style="">
<el-card shadow="hover">
<el-input v-model="deptName" placeholder="请输入部门名称" prefix-icon="Search" clearable />
<el-tree class="mt-2" ref="deptTreeRef" node-key="id" :data="deptOptions"
:props="{ label: 'label', children: 'children' }" :expand-on-click-node="false"
:filter-node-method="filterNode" highlight-current default-expand-all
@node-click="handleNodeClick"></el-tree>
<el-tree
ref="deptTreeRef"
class="mt-2"
node-key="id"
:data="deptOptions"
:props="{ label: 'label', children: 'children' }"
:expand-on-click-node="false"
:filter-node-method="filterNode"
highlight-current
default-expand-all
@node-click="handleNodeClick"
></el-tree>
</el-card>
</el-col>
<el-col :lg="20" :xs="24">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter"
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div class="search" v-show="showSearch">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="search">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="68px">
<el-form-item label="用户名称" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable style="width: 240px"
@keyup.enter="handleQuery" />
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable style="width: 240px" @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="queryParams.nickName" placeholder="请输入用户昵称" clearable style="width: 240px"
@keyup.enter="handleQuery" />
<el-input v-model="queryParams.nickName" placeholder="请输入用户昵称" clearable style="width: 240px" @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery" icon="Search">搜索</el-button>
<el-button @click="resetQuery" icon="Refresh">重置</el-button>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</div>
@ -37,17 +41,16 @@
<el-card shadow="hover">
<template #header>
<el-row :gutter="10">
<right-toolbar v-model:showSearch="showSearch" @queryTable="handleQuery" :search="true"></right-toolbar>
<right-toolbar v-model:showSearch="showSearch" :search="true" @query-table="getUserList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" :data="userList" ref="multipleTableRef" row-key="userId"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="用户编号" align="center" key="userId" prop="userId" />
<el-table-column label="用户名称" align="center" key="userName" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" width="120" />
<el-table ref="multipleTableRef" v-loading="loading" :data="userList" row-key="userId" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" :reserve-selection="true" />
<el-table-column key="userId" label="用户编号" align="center" prop="userId" />
<el-table-column key="userName" label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" />
<el-table-column key="nickName" label="用户昵称" align="center" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column key="phonenumber" label="手机号码" align="center" prop="phonenumber" width="120" />
<el-table-column label="创建时间" align="center" prop="createTime" width="160">
<template #default="scope">
<span>{{ scope.row.createTime }}</span>
@ -55,12 +58,17 @@
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" @pagination="handleQuery" />
<pagination
v-show="total > 0"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
:total="total"
@pagination="getUserList"
/>
</el-card>
<el-card shadow="hover">
<el-tag v-for="(user, index) in chooseUserList" :key="user.userId" style="margin:2px" closable
@close="handleCloseTag(user, index)">{{ user.userName }}
<el-tag v-for="(user, index) in chooseUserList" :key="user.userId" style="margin: 2px" closable @close="handleCloseTag(user, index)"
>{{ user.userName }}
</el-tag>
</el-card>
</el-col>
@ -108,11 +116,11 @@ const props = defineProps({
//id
userIdList: {
type: Array,
default: []
default: () => []
}
});
const deptTreeRef = ref(ElTree);
const multipleTableRef = ref(ElTable);
const deptTreeRef = ref<ElTreeInstance>();
const multipleTableRef = ref<ElTableInstance>();
const userList = ref<UserVO[]>();
const loading = ref(true);
@ -164,6 +172,7 @@ const getList = async () => {
loading.value = false;
userList.value = res.rows;
total.value = res.total;
if (userList.value && userIds.value.length > 0) {
const data = await getUserListByIds(userIds.value);
if (data.data && data.data.length > 0) {
@ -198,6 +207,7 @@ const resetQuery = () => {
/** 选择条数 */
const handleSelectionChange = (selection: UserVO[]) => {
console.log(selection);
if (props.multiple) {
chooseUserList.value = selection.filter((element, index, self) => {
return self.findIndex((x) => x.userId === element.userId) === index;
@ -251,7 +261,7 @@ const handleNodeClick = (data: DeptVO) => {
//tag
const handleCloseTag = (user: UserVO, index: any) => {
if (multipleTableRef.value.selection && multipleTableRef.value.selection.length > 0) {
multipleTableRef.value.selection.forEach((u: UserVO, i: Number) => {
multipleTableRef.value.selection.forEach((u: UserVO, i: number) => {
if (user.userId === u.userId) {
multipleTableRef.value.selection.splice(i, 1);
}
@ -271,16 +281,16 @@ const handleCloseTag = (user: UserVO, index: any) => {
}
};
const submitFileForm = async () => {
loading.value = true
emits('submitCallback',chooseUserList);
}
loading.value = true;
emits('submitCallback', chooseUserList);
};
const close = async () => {
visible.value = false
loading.value = false
visible.value = false;
loading.value = false;
emits('close');
}
};
//
const emits = defineEmits(['submitCallback','close']);
const emits = defineEmits(['submitCallback', 'close']);
/**
* 对外暴露子组件方法
@ -289,4 +299,4 @@ defineExpose({
getUserList,
close
});
</script>
</script>

View File

View File

@ -31,7 +31,7 @@
v-model="queryParams.userName"
placeholder="请输入用户名称"
clearable
style="width: 240px"
style="width: 200px"
@keyup.enter="handleQuery"
/>
</el-form-item>
@ -40,26 +40,10 @@
v-model="queryParams.phonenumber"
placeholder="请输入手机号码"
clearable
style="width: 240px"
style="width: 200px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="用户状态" clearable style="width: 240px">
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="创建时间" style="width: 308px">
<el-date-picker
v-model="dateRange"
value-format="YYYY-MM-DD"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
@ -71,38 +55,37 @@
<el-card shadow="hover">
<template #header>
<el-row :gutter="10">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus">新增</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @query-table="getList"></right-toolbar>
</el-row>
<el-tag v-for="user in selectUserList" :key="user.userId" closable style="margin: 2px" @close="handleCloseTag(user.userId)">{{
user.userName
}}</el-tag>
</template>
<vxe-table
ref="tableRef"
height="500px"
height="400px"
border
show-overflow
:data="userList"
:loading="loading"
:row-config="{ keyField: 'userId' }"
:checkbox-config="{ reserve: true, checkRowKeys: modelValue }"
:checkbox-config="{ reserve: true, checkRowKeys: userIds }"
highlight-current-row
@checkbox-all="handleCheckboxAll"
@checkbox-change="handleCheckboxChange"
>
<vxe-column type="checkbox" width="50" align="center" />
<vxe-column v-if="columns[0].visible" key="userId" title="用户编号" align="center" field="userId" />
<vxe-column v-if="columns[1].visible" key="userName" title="用户名称" align="center" field="userName" :show-overflow-tooltip="true" />
<vxe-column v-if="columns[2].visible" key="nickName" title="用户昵称" align="center" field="nickName" :show-overflow-tooltip="true" />
<vxe-column v-if="columns[3].visible" key="deptName" title="部门" align="center" field="deptName" :show-overflow-tooltip="true" />
<vxe-column v-if="columns[4].visible" key="phonenumber" title="手机号码" align="center" field="phonenumber" width="120" />
<vxe-column v-if="columns[5].visible" key="status" title="状态" align="center">
<vxe-column key="userId" title="用户编号" align="center" field="userId" />
<vxe-column key="userName" title="用户名称" align="center" field="userName" :show-overflow-tooltip="true" />
<vxe-column key="nickName" title="用户昵称" align="center" field="nickName" :show-overflow-tooltip="true" />
<vxe-column key="deptName" title="部门" align="center" field="deptName" :show-overflow-tooltip="true" />
<vxe-column key="phonenumber" title="手机号码" align="center" field="phonenumber" width="120" />
<vxe-column key="status" title="状态" align="center">
<template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.status"></dict-tag>
</template>
</vxe-column>
<vxe-column v-if="columns[6].visible" title="创建时间" align="center" width="160">
<vxe-column title="创建时间" align="center" width="160">
<template #default="scope">
<span>{{ scope.row.createTime }}</span>
</template>
@ -133,12 +116,11 @@
import api from '@/api/system/user';
import { UserQuery, UserVO } from '@/api/system/user/types';
import { DeptVO } from '@/api/system/dept/types';
import { globalHeaders } from '@/utils/request';
import useDialog from '@/hooks/useDialog';
import { VxeTableInstance } from 'vxe-table';
import useDialog from '@/hooks/useDialog';
interface PropType {
modelValue: string[];
modelValue: UserVO[];
}
const prop = defineProps<PropType>();
const emit = defineEmits(['update:modelValue']);
@ -146,6 +128,8 @@ const emit = defineEmits(['update:modelValue']);
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_normal_disable } = toRefs<any>(proxy?.useDict('sys_normal_disable'));
const userIds = computed(() => prop.modelValue.map((item) => item.userId as string));
const userList = ref<UserVO[]>();
const loading = ref(true);
const showSearch = ref(true);
@ -153,17 +137,7 @@ const total = ref(0);
const dateRange = ref<[DateModelType, DateModelType]>(['', '']);
const deptName = ref('');
const deptOptions = ref<DeptVO[]>([]);
//
const columns = ref<FieldOption[]>([
{ key: 0, label: `用户编号`, visible: false, children: [] },
{ key: 1, label: `用户名称`, visible: true, children: [] },
{ key: 2, label: `用户昵称`, visible: true, children: [] },
{ key: 3, label: `部门`, visible: true, children: [] },
{ key: 4, label: `手机号码`, visible: true, children: [] },
{ key: 5, label: `状态`, visible: true, children: [] },
{ key: 6, label: `创建时间`, visible: true, children: [] }
]);
const selectUserList = ref<UserVO[]>([]);
const deptTreeRef = ref<ElTreeInstance>();
const queryFormRef = ref<ElFormInstance>();
@ -199,17 +173,8 @@ watchEffect(
);
const confirm = () => {
const $table = tableRef.value;
if ($table) {
//
const checkboxRecords = $table.getCheckboxRecords();
//
const checkboxReserveRecords = $table.getCheckboxReserveRecords();
const data: UserVO[] = [...checkboxRecords, ...checkboxReserveRecords];
const userIds = data.map((item) => item.userId);
emit('update:modelValue', userIds);
userDialog.closeDialog();
}
emit('update:modelValue', [...selectUserList.value]);
userDialog.closeDialog();
};
/** 查询部门下拉树结构 */
@ -248,9 +213,42 @@ const resetQuery = () => {
handleQuery();
};
const handleCheckboxChange = (checked) => {
const row = checked.row;
if (checked.checked) {
selectUserList.value.push(row);
} else {
selectUserList.value = selectUserList.value.filter((item) => {
return item.userId !== row.userId;
});
}
};
const handleCheckboxAll = (checked) => {
const rows = userList.value;
if (checked.checked) {
rows.forEach((row) => {
if (!selectUserList.value.some((item) => item.userId === row.userId)) {
selectUserList.value.push(row);
}
});
} else {
selectUserList.value = selectUserList.value.filter((item) => {
return !rows.some((row) => row.userId === item.userId);
});
}
};
const handleCloseTag = (userId: string | number) => {
//
selectUserList.value = selectUserList.value.filter((item) => {
return item.userId !== userId;
});
};
onMounted(() => {
getTreeSelect(); //
getList(); //
Object.assign(selectUserList.value, prop.modelValue);
});
defineExpose({

View File

@ -31,15 +31,22 @@ declare module 'bpmnDesign' {
}
export interface TaskPanel extends BasePanel {
processCategory: string;
auditUserType: AuditUserTypeEnum;
specifyDesc: SpecifyDescEnum;
multipleUserAuditType: MultipleUserAuditTypeEnum;
users: string[];
assignee: string;
candidateUsers: string;
candidateGroups: string;
users?: Record<string, any>[];
roles?: Record<string, any>[];
async?: boolean;
priority?: string;
skipExpression?: string;
isForCompensation?: boolean;
triggerServiceTask?: boolean;
autoStoreVariables?: boolean;
ruleVariablesInput?: string;
excludeTaskListener?: boolean;
exclude?: boolean;
class?: string;
dueDate?: string;
}
export interface StartEndPanel extends BasePanel {}

View File

@ -102,7 +102,7 @@
<!-- 加签组件 -->
<multiInstanceUser ref="multiInstanceUserRef" :title="title" @submit-callback="handleQuery" />
<!-- 加签组件 -->
<SysUser ref="sysUserRef" :multiple="false" @submit-callback="submitCallback" />
<SysUser ref="sysUserRef" :multiple="true" @submit-callback="submitCallback" />
</div>
</template>
@ -226,11 +226,11 @@ const handleUpdate = () => {
};
//
const submitCallback = (data) => {
if(data && data.value.length > 0){
updateAssignee(ids.value,data.value[0].userId).then((resp) => {
if (data && data.value.length > 0) {
updateAssignee(ids.value, data.value[0].userId).then((resp) => {
sysUserRef.value.close();
proxy?.$modal.msgSuccess('操作成功');
handleQuery()
handleQuery();
});
}
};