feat: share to group
This commit is contained in:
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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">
|
||||
<el-option
|
||||
v-for="item in groupUsersList"
|
||||
:key="item.id"
|
||||
:label="item.username"
|
||||
:value="item.id"
|
||||
:disabled="!item.status"
|
||||
></el-option>
|
||||
</el-select>
|
||||
<div style="width: 30%">
|
||||
<el-select v-model="formData.g_id" @change="changeGId">
|
||||
<el-option
|
||||
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"
|
||||
></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
|
||||
|
||||
Reference in New Issue
Block a user