|
|
@@ -1,73 +1,89 @@
|
|
|
<template>
|
|
|
- <el-form :model="ruleForm" ref="ruleFormRef">
|
|
|
- <el-form-item>
|
|
|
- <el-radio-group v-model="ruleForm.recipientType">
|
|
|
- <el-radio :value="1">分组</el-radio>
|
|
|
- <el-radio :value="2">自定义</el-radio>
|
|
|
- </el-radio-group>
|
|
|
- </el-form-item>
|
|
|
- <div class="userList" v-if="ruleForm.recipientType === 1">
|
|
|
- <el-form-item label="选择分组" prop="userGroupList" :rules="[{ required: true, message: '请选择分组' }]">
|
|
|
- <el-select v-model="ruleForm.userGroupList" multiple placeholder="请选择分组">
|
|
|
- <el-option v-for="item in groupOptions" :key="item.id" :value="item.id" :label="item.name" />
|
|
|
- </el-select>
|
|
|
+ <div class="push-object-container">
|
|
|
+ <el-form :model="ruleForm" ref="ruleFormRef">
|
|
|
+ <el-form-item>
|
|
|
+ <el-radio-group v-model="ruleForm.recipientType">
|
|
|
+ <el-radio :value="1">分组</el-radio>
|
|
|
+ <el-radio :value="2">自定义</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
</el-form-item>
|
|
|
- <span @click="showGroupInfo"> 人员详情 </span>
|
|
|
- </div>
|
|
|
- <div class="userList" v-else-if="ruleForm.recipientType === 2">
|
|
|
- <el-form-item label="选择人员" prop="customUserList" :rules="[{ required: true, message: '请选择人员' }]">
|
|
|
- <el-select
|
|
|
- v-model="ruleForm.customUserList"
|
|
|
- value-key="id"
|
|
|
- multiple
|
|
|
- placeholder="请选择人员"
|
|
|
- @click="userInfo = true"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="user in userOptions"
|
|
|
- :key="user.id"
|
|
|
- :label="`${user.username}-${user.realname}`"
|
|
|
- :value="user"
|
|
|
- />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </div>
|
|
|
- <el-dialog
|
|
|
- v-model="groupInfo"
|
|
|
- title="人员详情"
|
|
|
- align-center
|
|
|
- :close-on-click-modal="false"
|
|
|
- :destroy-on-close="true"
|
|
|
- class="customDialog--pushObject"
|
|
|
- >
|
|
|
- <Group :userGroupInfo="userGroupInfo" />
|
|
|
- </el-dialog>
|
|
|
- <el-dialog
|
|
|
- v-model="userInfo"
|
|
|
- title="添加人员"
|
|
|
- align-center
|
|
|
- :close-on-click-modal="false"
|
|
|
- :destroy-on-close="true"
|
|
|
- class="customDialog--pushObject"
|
|
|
- >
|
|
|
- <User @cancel="userInfo = false" />
|
|
|
- </el-dialog>
|
|
|
- </el-form>
|
|
|
+ <div class="userList" v-if="ruleForm.recipientType === 1">
|
|
|
+ <el-form-item label="选择分组" prop="userGroupList" :rules="[{ required: true, message: '请选择分组' }]">
|
|
|
+ <el-select v-model="ruleForm.userGroupList" multiple placeholder="请选择分组" filterable>
|
|
|
+ <el-option v-for="item in groupOptions" :key="item.id" :value="item.id" :label="item.name" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <span @click="showGroupInfo"> 人员详情 </span>
|
|
|
+ </div>
|
|
|
+ <div class="userList" v-else-if="ruleForm.recipientType === 2">
|
|
|
+ <el-form-item label="选择人员" prop="customUserList" :rules="[{ required: true, message: '请选择人员' }]">
|
|
|
+ <el-select
|
|
|
+ v-model="ruleForm.customUserList"
|
|
|
+ value-key="id"
|
|
|
+ multiple
|
|
|
+ placeholder="请选择人员"
|
|
|
+ @click="userInfo = true"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="user in userOptions"
|
|
|
+ :key="user.id"
|
|
|
+ :label="`${user.username}-${user.realname}`"
|
|
|
+ :value="user"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
+ <el-dialog
|
|
|
+ v-model="groupInfo"
|
|
|
+ title="人员详情"
|
|
|
+ align-center
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ :destroy-on-close="true"
|
|
|
+ class="customDialog--pushObject"
|
|
|
+ >
|
|
|
+ <Group :userGroupInfo="userGroupInfo" />
|
|
|
+ </el-dialog>
|
|
|
+ <el-dialog
|
|
|
+ v-model="userInfo"
|
|
|
+ title="添加人员"
|
|
|
+ align-center
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ :destroy-on-close="true"
|
|
|
+ class="customDialog--pushObject"
|
|
|
+ >
|
|
|
+ <User :customUserList="ruleForm.customUserList" @cancel="userInfo = false" @submit="handleSubmit" />
|
|
|
+ </el-dialog>
|
|
|
+ </el-form>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
- import { ref, reactive } from 'vue';
|
|
|
+ import { ref, reactive, watch } from 'vue';
|
|
|
import Group from './Group.vue';
|
|
|
import User from './User.vue';
|
|
|
- import type { GroupOptionType } from '../types';
|
|
|
+ import type { GroupOptionType, TreeNodeData } from '../types';
|
|
|
import type { UserInfo, UserGroupInfo } from '@/types/push-object';
|
|
|
import { queryUserGroupDetailByIds } from '@/api/push-object';
|
|
|
+ const props = defineProps<{
|
|
|
+ recipientType: number | null;
|
|
|
+ userGroupList: number[];
|
|
|
+ customUserList: UserInfo[];
|
|
|
+ }>();
|
|
|
interface RuleForm {
|
|
|
recipientType: number;
|
|
|
userGroupList: number[];
|
|
|
customUserList: UserInfo[];
|
|
|
}
|
|
|
- const groupOptions = ref<GroupOptionType[]>([]);
|
|
|
+ const groupOptions = ref<GroupOptionType[]>([
|
|
|
+ {
|
|
|
+ id: 1,
|
|
|
+ name: '测试1',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 2,
|
|
|
+ name: '测试2',
|
|
|
+ },
|
|
|
+ ]);
|
|
|
const groupInfo = ref(false);
|
|
|
const userInfo = ref(false);
|
|
|
const userOptions = ref<UserInfo[]>([]);
|
|
|
@@ -89,9 +105,32 @@
|
|
|
isHidden: false,
|
|
|
}));
|
|
|
};
|
|
|
+ const handleSubmit = (selectedPersonList: TreeNodeData[]) => {
|
|
|
+ ruleForm.customUserList = selectedPersonList.map((user) => {
|
|
|
+ return {
|
|
|
+ id: user.id,
|
|
|
+ username: user.name.split('-')[0],
|
|
|
+ realname: user.name.split('-')[1],
|
|
|
+ };
|
|
|
+ });
|
|
|
+ userOptions.value = ruleForm.customUserList;
|
|
|
+ };
|
|
|
+ watch(
|
|
|
+ [() => props.recipientType, () => props.userGroupList, () => props.customUserList],
|
|
|
+ ([newRecipientType, newUserGroupList, newCustomUserList]) => {
|
|
|
+ ruleForm.recipientType = newRecipientType ?? 1;
|
|
|
+ ruleForm.userGroupList = newUserGroupList ?? [];
|
|
|
+ ruleForm.customUserList = newCustomUserList ?? [];
|
|
|
+ userOptions.value = ruleForm.customUserList;
|
|
|
+ },
|
|
|
+ { immediate: true },
|
|
|
+ );
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
+ .push-object-container {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
:deep(.el-select__selection) {
|
|
|
min-height: 25px;
|
|
|
max-height: 60px;
|
|
|
@@ -99,7 +138,7 @@
|
|
|
}
|
|
|
.userList {
|
|
|
width: 100%;
|
|
|
- padding: 12cpx;
|
|
|
+ padding: 12cpx 0 0 12cpx;
|
|
|
span {
|
|
|
cursor: pointer;
|
|
|
font-size: 10cpx;
|