1+ <template >
2+ <el-drawer v-model =" visible" size =" 600" :destroy-on-close =" true" :before-close =" handleCancel" >
3+ <template #header >
4+ <h4 >{{ $t('views.role.member.add') }}</h4 >
5+ </template >
6+ <template #default >
7+ <MemberFormContent ref =" memberFormContentRef" :models =" formItemModel" v-model:form =" list" />
8+ </template >
9+ <template #footer >
10+ <div style =" flex : auto " >
11+ <el-button @click =" handleCancel" >{{ $t('common.cancel') }}</el-button >
12+ <el-button type =" primary" @click =" handleAdd()" :loading =" loading" >
13+ {{ $t('common.add') }}
14+ </el-button >
15+ </div >
16+ </template >
17+ </el-drawer >
18+ </template >
19+
20+ <script setup lang="ts">
21+ import { onBeforeMount , ref } from ' vue'
22+ import type { CreateMemberParamsItem , FormItemModel } from ' @/api/type/role'
23+ import RoleApi from ' @/api/system/role'
24+ import UserApi from ' @/api/user/user'
25+ import MemberFormContent from ' ./MemberFormContent.vue'
26+ import { t } from ' @/locales'
27+ import { MsgSuccess } from ' @/utils/message'
28+
29+ const props = defineProps <{
30+ roleId: string
31+ }>()
32+
33+ const emit = defineEmits <{
34+ (e : ' refresh' ): void ;
35+ }>();
36+
37+ const loading = ref (false )
38+ const visible = ref (false )
39+ const list = ref <CreateMemberParamsItem []>([]);
40+
41+ const formItemModel = ref <FormItemModel []>([
42+ {
43+ path: ' user_ids' ,
44+ label: t (' views.role.member.title' ),
45+ rules: [
46+ {
47+ required: true ,
48+ message: ` ${t (' common.selectPlaceholder' )}${t (' views.role.member.title' )} ` ,
49+ },
50+ ],
51+ selectProps: {
52+ options: [],
53+ placeholder: ` ${t (' common.selectPlaceholder' )}${t (' views.role.member.title' )} `
54+ }
55+ },
56+ {
57+ path: ' workspace_ids' ,
58+ label: t (' views.role.member.workspace' ),
59+ rules: [
60+ {
61+ required: true ,
62+ message: ` ${t (' common.selectPlaceholder' )}${t (' views.role.member.workspace' )} ` ,
63+ },
64+ ],
65+ selectProps: {
66+ options: [], // TODO
67+ placeholder: ` ${t (' common.selectPlaceholder' )}${t (' views.role.member.workspace' )} `
68+ }
69+ },
70+ ]);
71+ onBeforeMount (async () => {
72+ const res = await UserApi .getUserList ();
73+ formItemModel .value [0 ].selectProps .options = res .data ?.map (item => ({ label: item .nick_name , value: item .id }))
74+ })
75+
76+ function open() {
77+ visible .value = true
78+ }
79+
80+ function handleCancel() {
81+ visible .value = false
82+ list .value = []
83+ }
84+
85+ const memberFormContentRef = ref <InstanceType <typeof MemberFormContent >>()
86+ function handleAdd() {
87+ memberFormContentRef .value ?.validate ().then (async (valid ) => {
88+ if (valid ) {
89+ await RoleApi .CreateMember (props .roleId , { members: list .value }, loading )
90+ MsgSuccess (t (' common.addSuccess' ))
91+ handleCancel ();
92+ emit (' refresh' )
93+ }
94+ })
95+ }
96+
97+ defineExpose ({ open })
98+ </script >
0 commit comments