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('ReadWrite'), value: 2 },
{ label: T('FullControl'), value: 3 }, { 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 formVisible = ref(false)
const formData = reactive({ const formData = reactive({
id: 0, id: 0,
collection_id: null, collection_id: null,
type: 1, type: TYPE_U,
rule: 1, rule: 1,
g_id: null,
u_id: null,
to_id: null, to_id: null,
user_id: null, user_id: null,
}) })
@@ -76,28 +83,60 @@ export function useRepositories (api_type = 'my') {
Object.keys(formData).forEach(key => { Object.keys(formData).forEach(key => {
formData[key] = row[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 = () => { const toAdd = () => {
//初始化formData
formData.id = 0
formData.type = TYPE_U
formData.rule = 1
formData.g_id = null
formData.u_id = null
formVisible.value = true formVisible.value = true
} }
const submit = async () => { const submit = async () => {
const api = formData.id ? apis[api_type].update : apis[api_type].create 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) { if (res) {
ElMessage.success(T('OperationSuccess')) ElMessage.success(T('OperationSuccess'))
formVisible.value = false formVisible.value = false
getList() getList()
} }
} }
const groupUsersList = ref([]) const groups = ref([])
const users = ref([])
const getGroupUsers = async () => { const getGroupUsers = async () => {
const res = await groupUsers({ user_id: formData.user_id }).catch(_ => false) const res = await groupUsers().catch(_ => false)
if (res) { 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 { return {
listRes, listRes,
listQuery, listQuery,
@@ -110,7 +149,12 @@ export function useRepositories (api_type = 'my') {
toAdd, toAdd,
submit, submit,
rules, rules,
groupUsersList, types,
groups,
users,
getGroupUsers, getGroupUsers,
TYPE_G,
TYPE_U,
changeGId,
} }
} }
+46 -13
View File
@@ -17,10 +17,20 @@
</div> </div>
</template> </template>
</el-table-column> </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"> <el-table-column prop="to_id" :label="T('ShareTo')" align="center">
<template #default="{row}"> <template #default="{row}">
<div v-if="row.type===1"> <div v-if="row.type===TYPE_U">
{{ groupUsersList.find(u => u.id === row.to_id)?.username }} {{ 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> </div>
</template> </template>
</el-table-column> </el-table-column>
@@ -55,17 +65,35 @@
</el-radio> </el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </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-input-number v-model="formData.to_id"></el-input-number>-->
<el-select v-model="formData.to_id"> <div style="width: 30%">
<el-option <el-select v-model="formData.g_id" @change="changeGId">
v-for="item in groupUsersList" <el-option
:key="item.id" v-for="item in groups"
:label="item.username" :key="item.id"
:value="item.id" :label="item.name"
:disabled="!item.status" :value="item.id"
></el-option> ></el-option>
</el-select> </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"
></el-option>
</el-select>
</div>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button @click="formVisible = false">{{ T('Cancel') }}</el-button> <el-button @click="formVisible = false">{{ T('Cancel') }}</el-button>
@@ -104,8 +132,13 @@
toAdd, toAdd,
submit, submit,
rules, rules,
groupUsersList, types,
groups,
users,
getGroupUsers, getGroupUsers,
TYPE_G,
TYPE_U,
changeGId,
} = useRepositories(props.is_my ? 'my' : 'admin') } = useRepositories(props.is_my ? 'my' : 'admin')
formData.collection_id = props.collection.id formData.collection_id = props.collection.id