diff --git a/src/views/address_book/rule.js b/src/views/address_book/rule.js index 504af41..802760f 100644 --- a/src/views/address_book/rule.js +++ b/src/views/address_book/rule.js @@ -59,13 +59,20 @@ export function useRepositories (api_type = 'my') { { label: T('ReadWrite'), value: 2 }, { label: T('FullControl'), value: 3 }, ]) - + const TYPE_U = 1 + const TYPE_G = 2 + const types = computed(_ => [ + { label: T('Group'), value: TYPE_G }, + { label: T('User'), value: TYPE_U }, + ]) const formVisible = ref(false) const formData = reactive({ id: 0, collection_id: null, - type: 1, + type: TYPE_U, rule: 1, + g_id: null, + u_id: null, to_id: null, user_id: null, }) @@ -76,28 +83,60 @@ export function useRepositories (api_type = 'my') { Object.keys(formData).forEach(key => { formData[key] = row[key] }) - + if (row.type === TYPE_U) { + formData.u_id = row.to_id + formData.g_id = users.value.find(u => u.id === row.to_id)?.group_id + } else { + formData.g_id = row.to_id + formData.u_id = null + } } const toAdd = () => { + //初始化formData + formData.id = 0 + formData.type = TYPE_U + formData.rule = 1 + formData.g_id = null + formData.u_id = null + formVisible.value = true } const submit = async () => { const api = formData.id ? apis[api_type].update : apis[api_type].create - const res = await api(formData).catch(_ => false) + const form = { + ...formData, + } + form.to_id = form.type === TYPE_G ? form.g_id : form.u_id + const res = await api(form).catch(_ => false) if (res) { ElMessage.success(T('OperationSuccess')) formVisible.value = false getList() } } - const groupUsersList = ref([]) + const groups = ref([]) + const users = ref([]) const getGroupUsers = async () => { - const res = await groupUsers({ user_id: formData.user_id }).catch(_ => false) + const res = await groupUsers().catch(_ => false) if (res) { - groupUsersList.value = res.data + groups.value = res.data.groups.map(item => { + if (!item.children) { + item.children = [] + } + res.data.users.map(u => { + if (item.id === u.group_id) { + item.children.push(u) + } + }) + return item + }) + users.value = res.data.users } } + const changeGId = () => { + formData.u_id = null + } return { listRes, listQuery, @@ -110,7 +149,12 @@ export function useRepositories (api_type = 'my') { toAdd, submit, rules, - groupUsersList, + types, + groups, + users, getGroupUsers, + TYPE_G, + TYPE_U, + changeGId, } } diff --git a/src/views/address_book/rule.vue b/src/views/address_book/rule.vue index 5d132a4..d386b8f 100644 --- a/src/views/address_book/rule.vue +++ b/src/views/address_book/rule.vue @@ -17,10 +17,20 @@ + + + @@ -55,17 +65,35 @@ - + + + + {{ item.label }} + + + + - - - +
+ + + +
+
+ + + +
{{ T('Cancel') }} @@ -104,8 +132,13 @@ toAdd, submit, rules, - groupUsersList, + types, + groups, + users, getGroupUsers, + TYPE_G, + TYPE_U, + changeGId, } = useRepositories(props.is_my ? 'my' : 'admin') formData.collection_id = props.collection.id