feat: share to group

This commit is contained in:
lejianwen
2025-04-14 19:09:25 +08:00
parent 24c480b2b7
commit 68bbcf17b0
2 changed files with 98 additions and 21 deletions
+52 -8
View File
@@ -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,27 +83,59 @@ 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,
@@ -110,7 +149,12 @@ export function useRepositories (api_type = 'my') {
toAdd,
submit,
rules,
groupUsersList,
types,
groups,
users,
getGroupUsers,
TYPE_G,
TYPE_U,
changeGId,
}
}
+40 -7
View File
@@ -17,10 +17,20 @@
</div>
</template>
</el-table-column>
<el-table-column prop="type" :label="T('Type')" align="center">
<template #default="{row}">
<div>
{{ types.find(t => t.value === row.type)?.label }}
</div>
</template>
</el-table-column>
<el-table-column prop="to_id" :label="T('ShareTo')" align="center">
<template #default="{row}">
<div v-if="row.type===1">
{{ groupUsersList.find(u => u.id === row.to_id)?.username }}
<div v-if="row.type===TYPE_U">
{{ users.find(u => u.id === row.to_id)?.username }}
</div>
<div v-else-if="row.type===TYPE_G">
{{ groups.find(g => g.id === row.to_id)?.name }}
</div>
</template>
</el-table-column>
@@ -55,17 +65,35 @@
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="T('ShareTo')" prop="to_id" required>
<el-form-item :label="T('Type')" prop="type" required>
<el-radio-group v-model="formData.type">
<el-radio v-for="item in types" :key="item.value" :label="parseInt(item.value)">
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="T('ShareTo')" prop="g_id" required>
<!-- <el-input-number v-model="formData.to_id"></el-input-number>-->
<el-select v-model="formData.to_id">
<div style="width: 30%">
<el-select v-model="formData.g_id" @change="changeGId">
<el-option
v-for="item in groupUsersList"
v-for="item in groups"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</div>
<div style="width: 30%;margin-left: 20px">
<el-select v-model="formData.u_id" v-if="formData.type===TYPE_U">
<el-option
v-for="item in users.filter(u => u.group_id === formData.g_id)"
:key="item.id"
:label="item.username"
:value="item.id"
:disabled="!item.status"
></el-option>
</el-select>
</div>
</el-form-item>
<el-form-item>
<el-button @click="formVisible = false">{{ T('Cancel') }}</el-button>
@@ -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