|
|
@@ -3,65 +3,215 @@
|
|
|
<div class="page_search">
|
|
|
<div class="search_content">
|
|
|
<div class="content_left">
|
|
|
- <FormSearchGroup :searchList="searchList" />
|
|
|
+ <FormSearchGroup :searchList="searchList" @searchChange="HandleSearchChange"/>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="page_jg_20"></div>
|
|
|
<Table :pageSize="pageSize" :currentPage="currentPage" :totalNum="totalNum"
|
|
|
- :tableColumns="tableColumns" :tableData="tableData">
|
|
|
+ :tableColumns="tableColumns" :tableData="tableData"
|
|
|
+ @paginationChange="HandlePaginationChange">
|
|
|
<template #num="{row,currentIndex}">
|
|
|
{{ (currentPage - 1) * pageSize + currentIndex }}
|
|
|
</template>
|
|
|
<template #operation="{row}">
|
|
|
<div class="table_row_option">
|
|
|
- <span class="el_button_delete">删除</span>
|
|
|
+ <span class="el_button_delete" @click="OpenDeleteDialog(row)">删除</span>
|
|
|
</div>
|
|
|
</template>
|
|
|
</Table>
|
|
|
</div>
|
|
|
|
|
|
+ <!-- 删除弹窗 -->
|
|
|
+ <Dialog :visible="deleteDialogVisible"
|
|
|
+ :submitLoading="deleteSubmitLoading"
|
|
|
+ @close="CloseDeleteDialog"
|
|
|
+ @confirm="HandleDeleteConfirm">
|
|
|
+ </Dialog>
|
|
|
+
|
|
|
</template>
|
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import { ref } from 'vue';
|
|
|
+import { computed, onMounted, ref } from 'vue';
|
|
|
import FormSearchGroup from '@/baseComponents/FormSearchGroup.vue';
|
|
|
-
|
|
|
-import {searchList} from './formSearchGroup'
|
|
|
import Table from '@/baseComponents/Table.vue';
|
|
|
|
|
|
import {tableColumns} from './table'
|
|
|
|
|
|
-const pageSize = ref(20)
|
|
|
-const currentPage = ref(1)
|
|
|
-const totalNum = ref(0)
|
|
|
-const tableData = ref([
|
|
|
+import {
|
|
|
+ getUserRoleConfigListApi,
|
|
|
+ getRoleListApi,
|
|
|
+ deleteUserRoleConfigApi,
|
|
|
+ getGroupMembersListApi,
|
|
|
+} from '@/api/userPrivilegeManagement'
|
|
|
+
|
|
|
+import {getGroupListApi} from '@/api/groupManage'
|
|
|
+import Dialog from '@/baseComponents/Dialog.vue';
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+const searchList = computed(()=>[
|
|
|
{
|
|
|
- index: 1,
|
|
|
- account: '123456789',
|
|
|
- name: '陈越',
|
|
|
- groupName: '项目1组',
|
|
|
- roleName:'管理员',
|
|
|
- operation: '删除' // 对应操作列,通常存储按钮文本或状态标识
|
|
|
+ key: 'role',
|
|
|
+ type: 'select',
|
|
|
+ placeholder: '请选择',
|
|
|
+ defaultValue:searchParams.value.role,
|
|
|
+ options: [
|
|
|
+ { label: '全部角色', value: 'all' },
|
|
|
+ ...(roleOption.value)
|
|
|
+ ]
|
|
|
},
|
|
|
{
|
|
|
- index: 2,
|
|
|
- account: '123456789',
|
|
|
- name: '张静怡',
|
|
|
- groupName: '项目1组',
|
|
|
- roleName:'组长',
|
|
|
- operation: '删除'
|
|
|
+ key: 'group',
|
|
|
+ type: 'select',
|
|
|
+ placeholder: '全部分组',
|
|
|
+ defaultValue:searchParams.value.group,
|
|
|
+ options: [
|
|
|
+ { label: '全部分组', value: 'all' },
|
|
|
+ ...(groupOption.value)
|
|
|
+ ]
|
|
|
},
|
|
|
{
|
|
|
- index: 3,
|
|
|
- account: '123456789',
|
|
|
- name: '朱函睿',
|
|
|
- groupName: '项目1组',
|
|
|
- roleName:'组长',
|
|
|
- operation: '删除'
|
|
|
- }
|
|
|
+ key: 'member',
|
|
|
+ type: 'select',
|
|
|
+ placeholder: '全部组员',
|
|
|
+ defaultValue:searchParams.value.member,
|
|
|
+ hidden: false,
|
|
|
+ options: [
|
|
|
+ { label: '全部组员', value: 'all' },
|
|
|
+ ...groupMemberOption.value
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'queryStr',
|
|
|
+ type: 'input',
|
|
|
+ defaultValue:searchParams.value.queryStr,
|
|
|
+ placeholder: '请输入',
|
|
|
+ },
|
|
|
])
|
|
|
+
|
|
|
+
|
|
|
+const searchParams= ref({
|
|
|
+ role:'all',
|
|
|
+ group:'all',
|
|
|
+ member:'all',
|
|
|
+ queryStr:'',
|
|
|
+})
|
|
|
+const groupOption = ref([]) //分组配置
|
|
|
+const roleOption = ref([]) //角色配置
|
|
|
+const groupMemberOption = ref([])
|
|
|
+const GetGroupList = async ()=>{
|
|
|
+ let res = await getGroupListApi()
|
|
|
+ if(res?.code == 200){
|
|
|
+ groupOption.value = res.data.map(item=>{
|
|
|
+ return {
|
|
|
+ label:item.title,
|
|
|
+ value:item.id,
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+const GetRoleList = async ()=>{
|
|
|
+ let res = await getRoleListApi()
|
|
|
+ if(res?.code == 200){
|
|
|
+ roleOption.value = res.data?.map(item=>{
|
|
|
+ return {
|
|
|
+ label:item.title,
|
|
|
+ value:item.id
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+const GetGroupMembersList = async ()=>{
|
|
|
+ let res = await getGroupMembersListApi()
|
|
|
+ if(res?.code == 200){
|
|
|
+
|
|
|
+ let userList = res.data.map(item=>{
|
|
|
+ return JSON.stringify({
|
|
|
+ label:item.userName,
|
|
|
+ value:item.userId
|
|
|
+ })
|
|
|
+ })
|
|
|
+ groupMemberOption.value = [...(new Set(userList))].map(item=>{
|
|
|
+ return JSON.parse(item)
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+const HandleSearchChange = async (params,key)=>{
|
|
|
+ searchParams.value = {...params }
|
|
|
+ await GetPrivilegeList()
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+// 表格分页参数
|
|
|
+const pageSize = ref(20)
|
|
|
+const currentPage = ref(1)
|
|
|
+const totalNum = ref(0)
|
|
|
+const tableData = ref([])
|
|
|
+// 获取权限列表
|
|
|
+const GetPrivilegeList = async()=>{
|
|
|
+ let params = {
|
|
|
+ roleId:searchParams.value.role == 'all' ? '' : searchParams.value.role,
|
|
|
+ userId:searchParams.value.member == 'all' ? '' : searchParams.value.member,
|
|
|
+ groupId:searchParams.value.group == 'all' ? '' : searchParams.value.group,
|
|
|
+ queryStr:searchParams.value.queryStr,
|
|
|
+ pageNum:currentPage.value,
|
|
|
+ pageSize:pageSize.value,
|
|
|
+ }
|
|
|
+ let res = await getUserRoleConfigListApi(params)
|
|
|
+
|
|
|
+ if(res?.code == 200){
|
|
|
+ tableData.value = res.data?.records || []
|
|
|
+ totalNum.value = res.data.total
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const HandlePaginationChange = async (params:any)=>{
|
|
|
+ const {type,val} = params
|
|
|
+ if(type == 'currentPage'){
|
|
|
+ currentPage.value = val
|
|
|
+ await GetPrivilegeList()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 删除弹窗有关操作
|
|
|
+ */
|
|
|
+const deleteDialogVisible = ref(false)
|
|
|
+const deleteSubmitLoading = ref(false)
|
|
|
+const currentDeleteRow = ref({})
|
|
|
+const CloseDeleteDialog = ()=>{
|
|
|
+ deleteSubmitLoading.value = false
|
|
|
+ deleteDialogVisible.value = false
|
|
|
+}
|
|
|
+const OpenDeleteDialog = (row)=>{
|
|
|
+ currentDeleteRow.value = row
|
|
|
+ deleteDialogVisible.value = true
|
|
|
+}
|
|
|
+const HandleDeleteConfirm = async ()=>{
|
|
|
+ deleteSubmitLoading.value = true
|
|
|
+ let res = undefined
|
|
|
+ try{
|
|
|
+ res = await deleteUserRoleConfigApi(currentDeleteRow.value.id)
|
|
|
+ }catch{}
|
|
|
+ if(res?.code == 200){
|
|
|
+ CloseDeleteDialog()
|
|
|
+ await GetPrivilegeList()
|
|
|
+ }else{
|
|
|
+ deleteSubmitLoading.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+onMounted(async ()=>{
|
|
|
+ await GetPrivilegeList()
|
|
|
+ await GetGroupList()
|
|
|
+ await GetRoleList()
|
|
|
+ await GetGroupMembersList()
|
|
|
+})
|
|
|
</script>
|
|
|
|
|
|
|