feat: 新增角色查看主题权限

This commit is contained in:
橙子
2025-01-19 18:40:42 +08:00
parent 7994e66283
commit 9960c63f59
14 changed files with 182 additions and 290 deletions

View File

@@ -40,6 +40,9 @@
<!-- 底部 -->
<div class="item item-bottom">
<div class="tag-list">
<el-tag v-for="item in discuss.permissionRoleCodes" effect="dark" type="danger" :key="item">{{item}}</el-tag>
<el-tag v-if="discuss.lables.length===0">暂无标签</el-tag>
<el-tag v-for="item in discuss.lables" :key="item.id">{{item.name}}</el-tag>
</div>
@@ -126,7 +129,8 @@ onMounted(() => {
discuss.agreeNum = props.discuss.agreeNum;
discuss.isBan = props.discuss.isBan;
discuss.cover = props.discuss.cover;
discuss.lables=props.discuss.lables
discuss.lables=props.discuss.lables;
discuss.permissionRoleCodes=props.discuss.permissionRoleCodes;
});
</script>
<style scoped lang="scss">

View File

@@ -1,129 +0,0 @@
<template>
<el-select
style="width: 600px;"
v-model="value"
multiple
filterable
remote
reserve-keyword
placeholder="请输入用户账号(可多选)"
remote-show-suffix
:remote-method="remoteMethod"
:loading="loading"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
<script setup>
import { onMounted, ref,computed } from 'vue'
import {listUser} from '@/apis/userApi'
const props = defineProps(['modelValue'])
const emit = defineEmits(['update:modelValue'])
//这个为可选择的列表,{value,label},value为用户idlabel为账号名称不可重复
const options = ref([])
const value = computed({
get() {
return props.modelValue
},
set(value) {
emit('update:modelValue', value)
}
})
const loading = ref(false)
onMounted( async()=>{
const response= await listUser({ids:value.value.join()});
const res=response.data.items;
//下拉列表
options.value = res
.map((item) => {
return { value: `${item.id}`, label: `用户:${item.userName}` }
})
})
const loadUser=async(query)=>{
const response= await listUser({userName:query});
const res=response.data.items;
//下拉列表
options.value = res
.map((item) => {
return { value: `${item.id}`, label: `用户:${item.userName}` }
})
}
const remoteMethod =async (query) => {
if (query) {
loading.value = true
await loadUser(query);
loading.value = false
} else {
options.value = []
}
}
const states = [
'Alabama',
'Alaska',
'Arizona',
'Arkansas',
'California',
'Colorado',
'Connecticut',
'Delaware',
'Florida',
'Georgia',
'Hawaii',
'Idaho',
'Illinois',
'Indiana',
'Iowa',
'Kansas',
'Kentucky',
'Louisiana',
'Maine',
'Maryland',
'Massachusetts',
'Michigan',
'Minnesota',
'Mississippi',
'Missouri',
'Montana',
'Nebraska',
'Nevada',
'New Hampshire',
'New Jersey',
'New Mexico',
'New York',
'North Carolina',
'North Dakota',
'Ohio',
'Oklahoma',
'Oregon',
'Pennsylvania',
'Rhode Island',
'South Carolina',
'South Dakota',
'Tennessee',
'Texas',
'Utah',
'Vermont',
'Virginia',
'Washington',
'West Virginia',
'Wisconsin',
'Wyoming',
]
</script>

View File

@@ -28,19 +28,21 @@
>
</el-radio-group>
</el-form-item>
<el-form-item label="权限:" v-if="radio == 'discuss'">
<el-radio-group v-model="perRadio">
<el-radio-button label="Public">公开</el-radio-button>
<el-radio-button label="Oneself">仅自己可见</el-radio-button>
<el-radio-button label="User">部分用户可见</el-radio-button>
<el-radio-button label="Role">所选角色可见</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item
label="可见用户"
v-if="radio == 'discuss' && perRadio == 'User'"
label="可见角色"
v-if="radio == 'discuss' && perRadio == 'Role'"
>
<UserSelectInfo v-model="editForm.permissionUserIds"/>
<el-input-tag
v-model="editForm.permissionRoleCodes"
placeholder="请输入角色code"
aria-label="按下回车可选择多个"
/>
</el-form-item>
<el-form-item
@@ -155,7 +157,6 @@
</template>
<script setup>
import MavonEdit from "@/components/MavonEdit.vue";
import UserSelectInfo from "@/components/UserSelectInfo.vue";
import {ref, reactive, onMounted, computed} from "vue";
import {useRoute, useRouter} from "vue-router";
import {Plus, Download} from "@element-plus/icons-vue";
@@ -221,8 +222,8 @@ const editForm = reactive({
introduction: "",
content: "",
name: "",
permissionUserIds: [],
discussLables:[]
permissionRoleCodes: [],
discussLableIds:[]
});
//组装主题内容: 需要更新主题信息
@@ -249,18 +250,16 @@ const submit = async (formEl) => {
if (!formEl) return;
await formEl.validate(async (valid, fields) => {
if (valid) {
discuss.discussLables=selectLabelList.value.map((item) =>item.id);
console.log(discuss,"discuss")
//dicuss主题处理
if (radio.value == "discuss") {
discuss.discussLableIds=selectLabelList.value.map((item) =>item.id);
discuss.title = editForm.title;
discuss.introduction = editForm.introduction;
discuss.content = editForm.content;
discuss.plateId = discuss.plateId ?? route.query.plateId;
discuss.cover = dialogImageUrl.value;
discuss.permissionType = perRadio.value;
discuss.permissionUserIds = editForm.permissionUserIds;
discuss.permissionRoleCodes = editForm.permissionRoleCodes;
//主题创建
if (route.query.operType == "create") {
const response = await discussAdd(discuss);
@@ -274,7 +273,7 @@ const submit = async (formEl) => {
}
//主题更新
else if (route.query.operType == "update") {
discuss.discussLables=selectLabelList.value.map((item) =>item.id);
discuss.discussLableIds=selectLabelList.value.map((item) =>item.id);
await discussUpdate(route.query.discussId, discuss);
ElMessage({
@@ -342,8 +341,9 @@ const loadDiscuss = async () => {
editForm.content = res.content;
editForm.title = res.title;
editForm.introduction = res.introduction;
editForm.discussLables=res.discussLables;
editForm.discussLableIds=res.discussLableIds;
editForm.permissionRoleCodes = res.permissionRoleCodes;
//编辑状态,已选择的就是全部
labelListData.value=res.lables;
selectLabelList.value=res.lables;
@@ -351,7 +351,7 @@ const loadDiscuss = async () => {
discuss.plateId = res.plateId;
dialogImageUrl.value = res.cover;
perRadio.value = res.permissionType;
editForm.permissionUserIds = res.permissionUserIds;
};
//加载文章
const loadArticle = async () => {