|
|
@@ -1,28 +1,26 @@
|
|
|
<script setup lang="ts">
|
|
|
import type { BasicForm, ICRUD } from '@/types/form'
|
|
|
+import { getRoleList, saveRole, deleteRole, getRoleUser, addRoleUser, deleteRoleUser } from '@/api/role'
|
|
|
+import { getUserList } from '@/api/user'
|
|
|
|
|
|
const CRUD: ICRUD = {
|
|
|
create(data: any) {
|
|
|
- return Promise.resolve(data)
|
|
|
+ return saveRole(data)
|
|
|
},
|
|
|
update(data: any) {
|
|
|
- return Promise.resolve(data)
|
|
|
+ return saveRole(data)
|
|
|
},
|
|
|
- getList() {
|
|
|
- return new Promise(resolve => {
|
|
|
- return resolve({
|
|
|
- data: [
|
|
|
- {
|
|
|
- id: 1,
|
|
|
- name: 'test'
|
|
|
- }
|
|
|
- ],
|
|
|
- total: 1
|
|
|
- })
|
|
|
+ getList(data: any) {
|
|
|
+ return getRoleList({
|
|
|
+ name: '',
|
|
|
+ ...data
|
|
|
})
|
|
|
},
|
|
|
delete(data: any) {
|
|
|
- return Promise.resolve(data)
|
|
|
+ return deleteRole({ ids: data.id })
|
|
|
+ },
|
|
|
+ deleteBatch(data: any) {
|
|
|
+ return deleteRole(data)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -38,127 +36,122 @@ const formConfig = reactive<BasicForm>({
|
|
|
search: true
|
|
|
},
|
|
|
{
|
|
|
- label: '备注',
|
|
|
+ label: '英文名称',
|
|
|
value: '',
|
|
|
- name: 'remarks',
|
|
|
- type: 'input'
|
|
|
+ name: 'enname',
|
|
|
+ type: 'input',
|
|
|
+ rules: [{ required: true, message: '请输入角色英文名称', trigger: 'blur' }]
|
|
|
}
|
|
|
]
|
|
|
})
|
|
|
|
|
|
const curRole = ref<any>(null)
|
|
|
-const handleRole = (row: any) => {
|
|
|
- curRole.value = row
|
|
|
-}
|
|
|
+// const handleRole = (row: any) => {
|
|
|
+// curRole.value = row
|
|
|
+// }
|
|
|
const handleUser = (row: any) => {
|
|
|
curRole.value = row
|
|
|
-}
|
|
|
-
|
|
|
-const handleSearchUser = () => {
|
|
|
- console.log('search')
|
|
|
-}
|
|
|
-const handleDelete = (id: any) => {
|
|
|
- console.log(id)
|
|
|
+ userRef.value?.refresh()
|
|
|
}
|
|
|
|
|
|
// 用户table
|
|
|
-const userTableData = ref([])
|
|
|
-const total = ref(0)
|
|
|
-const curPage = ref(1)
|
|
|
-const loading = ref(false)
|
|
|
-
|
|
|
-const getUserTableData = () => {
|
|
|
- loading.value = true
|
|
|
- // props.crud
|
|
|
- // ?.getList({
|
|
|
- // ...query.value,
|
|
|
- // pageSize: props.pageSize,
|
|
|
- // page: curPage.value
|
|
|
- // })
|
|
|
- // .then((res: any) => {
|
|
|
- // tableData.value = res.data
|
|
|
- // total.value = res.total
|
|
|
- // })
|
|
|
- // .finally(() => {
|
|
|
- // loading.value = false
|
|
|
- // })
|
|
|
-}
|
|
|
-getUserTableData()
|
|
|
-
|
|
|
-const pageChange = () => {
|
|
|
- getUserTableData()
|
|
|
+const UserCRUD: ICRUD = {
|
|
|
+ create(data: any) {
|
|
|
+ return addRoleUser(data)
|
|
|
+ },
|
|
|
+ update(data: any) {
|
|
|
+ return addRoleUser(data)
|
|
|
+ },
|
|
|
+ getList(data: any) {
|
|
|
+ return getRoleUser({ id: curRole.value.id, ...data }).then((res: any) => {
|
|
|
+ slectedUser.value = res.rows.map((item: any) => item.id)
|
|
|
+ return res
|
|
|
+ })
|
|
|
+ },
|
|
|
+ delete(data: any) {
|
|
|
+ return deleteRoleUser({ roleId: curRole.value.id, userId: data.id })
|
|
|
+ }
|
|
|
}
|
|
|
+const userFormConfig = reactive<BasicForm>({
|
|
|
+ span: 24,
|
|
|
+ formItems: []
|
|
|
+})
|
|
|
|
|
|
const dialogVisible = ref(false)
|
|
|
const slectedUser = ref<any>([])
|
|
|
const userList = ref<any>([])
|
|
|
+const userRef = ref<any>(null)
|
|
|
|
|
|
const handleAddUser = () => {
|
|
|
dialogVisible.value = true
|
|
|
+ getUserList({
|
|
|
+ pageSize: -1
|
|
|
+ }).then((res: any) => {
|
|
|
+ userList.value = res.rows
|
|
|
+ })
|
|
|
}
|
|
|
const closeDialog = () => {
|
|
|
dialogVisible.value = false
|
|
|
}
|
|
|
const handleSubmit = () => {
|
|
|
- //
|
|
|
+ addRoleUser({
|
|
|
+ role: { id: curRole.value.id },
|
|
|
+ ids: slectedUser.value
|
|
|
+ }).then(() => {
|
|
|
+ userRef.value.refresh()
|
|
|
+ dialogVisible.value = false
|
|
|
+ })
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
<el-row :gutter="16">
|
|
|
<el-col :span="curRole ? 12 : 24">
|
|
|
- <pro-table :crud="CRUD" :formConfig="formConfig" :tableConfig="{ operateWidth: 300 }">
|
|
|
+ <pro-table :crud="CRUD" :formConfig="formConfig" :tableConfig="{ operateWidth: 220 }">
|
|
|
<el-table-column prop="name" label="角色名称"></el-table-column>
|
|
|
- <el-table-column prop="phone" label="备注"></el-table-column>
|
|
|
+ <el-table-column prop="enname" label="英文名称"></el-table-column>
|
|
|
<template #operateBefore="{ row }">
|
|
|
- <el-button type="primary" size="small" @click="handleRole(row)">角色授权</el-button>
|
|
|
+ <!-- <el-button type="primary" size="small" @click="handleRole(row)">角色授权</el-button> -->
|
|
|
<el-button type="primary" size="small" @click="handleUser(row)">分配用户</el-button>
|
|
|
</template>
|
|
|
</pro-table>
|
|
|
</el-col>
|
|
|
<el-col :span="12" v-if="curRole">
|
|
|
- <el-card class="h-full" :body-style="{ height: '100%' }">
|
|
|
+ <el-card class="h-full" shadow="never" :body-style="{ height: '100%', padding: 0 }">
|
|
|
<template #header>
|
|
|
<div class="flex justify-between">
|
|
|
<div>分配用户</div>
|
|
|
<el-button icon="back" link @click="curRole = null">关闭</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
- <div class="flex flex-col" style="height: calc(100% - 53px)">
|
|
|
- <div class="flex justify-between mb-sm">
|
|
|
- <el-button type="primary" @click="handleAddUser">添加用户</el-button>
|
|
|
- <div>
|
|
|
- <el-input placeholder="姓名">
|
|
|
- <template #append><el-button icon="Search" @click="handleSearchUser" /></template>
|
|
|
- </el-input>
|
|
|
+ <pro-table
|
|
|
+ ref="userRef"
|
|
|
+ height="calc(100% - 53px)"
|
|
|
+ :crud="UserCRUD"
|
|
|
+ :formConfig="userFormConfig"
|
|
|
+ :showToolbar="false"
|
|
|
+ :tableConfig="{ operateWidth: 100, showEdit: false }"
|
|
|
+ :selection="false"
|
|
|
+ >
|
|
|
+ <template #header>
|
|
|
+ <div class="mb-20px">
|
|
|
+ <el-button type="primary" @click="handleAddUser">添加用户</el-button>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <el-table class="flex-grow-1 h-full" border :data="userTableData">
|
|
|
- <el-table-column prop="name" label="登录名"></el-table-column>
|
|
|
- <el-table-column prop="name" label="姓名"></el-table-column>
|
|
|
- <el-table-column prop="phone" label="手机号"></el-table-column>
|
|
|
- <el-table-column label="操作">
|
|
|
- <template #default="{ row }">
|
|
|
- <el-button link type="danger" size="small" @click="handleDelete(row.id)">删除</el-button>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- <div class="flex justify-end shrink-0">
|
|
|
- <el-pagination
|
|
|
- background
|
|
|
- layout="prev, pager, next, jumper, total"
|
|
|
- :page-size="10"
|
|
|
- :total="total"
|
|
|
- @current-change="pageChange"
|
|
|
- class="mt-16px"
|
|
|
- />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ </template>
|
|
|
+ <el-table-column prop="name" label="登录名"></el-table-column>
|
|
|
+ <el-table-column prop="name" label="姓名"></el-table-column>
|
|
|
+ <el-table-column prop="phone" label="手机号"></el-table-column>
|
|
|
+ </pro-table>
|
|
|
</el-card>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-dialog v-model="dialogVisible" title="添加用户" @close="closeDialog">
|
|
|
- <el-transfer v-model="slectedUser" :data="userList" :titles="['用户列表', '已选用户']" />
|
|
|
+ <el-transfer
|
|
|
+ v-model="slectedUser"
|
|
|
+ :data="userList"
|
|
|
+ :titles="['用户列表', '已选用户']"
|
|
|
+ :props="{ key: 'id', label: 'name' }"
|
|
|
+ />
|
|
|
<template #footer>
|
|
|
<el-button icon="Close" @click="closeDialog">取消</el-button>
|
|
|
<el-button icon="Check" type="primary" @click="handleSubmit">保存</el-button>
|