|
|
@@ -2,10 +2,10 @@
|
|
|
<a-card class="account-page-card">
|
|
|
<Action :btn_text="'新建用户组'" @searchClick="searchClick" @resetClick="resetClick" @createClick="createClick"
|
|
|
@sizeChange="table_size_change" @refreshClick="refreshClick"></Action>
|
|
|
- <DataTable :data="table_data" :columns="table_columns" row-key="id" :size="table_size" :loading="table_loading"
|
|
|
+ <DataTable :data="table_data" :columns="table_columns" row-key="userId" :size="table_size" :loading="table_loading"
|
|
|
:pagination="pagination_props" @pageChange="handlePageChange">
|
|
|
<template #status="{ record }">
|
|
|
- <a-switch v-model="record.status" />
|
|
|
+ <a-switch v-model="record.status" @change="statusChange(record)" checked-value="1" unchecked-value="0" />
|
|
|
</template>
|
|
|
<template #operationSlot="{ record }">
|
|
|
<a-popconfirm content="确定重置该账号密码吗?" @ok="handleResetPassword(record)">
|
|
|
@@ -14,15 +14,16 @@
|
|
|
<a-button type="text" @click="handleEdit(record, true)">编辑</a-button>
|
|
|
<a-button type="text" @click="handleView(record, true)">查看权限</a-button>
|
|
|
<a-button type="text" @click="handleDeptConfig(record, true)">部门配置</a-button>
|
|
|
- <a-popconfirm content="确定删除该条数据吗?" type="warning" @ok="handleDelete(record)">
|
|
|
+ <a-popconfirm content="确定删除该条数据吗?" type="warning" @ok="handleDelete(record.userId)">
|
|
|
<a-button type="text" status="warning">删除</a-button>
|
|
|
</a-popconfirm>
|
|
|
</template>
|
|
|
</DataTable>
|
|
|
</a-card>
|
|
|
|
|
|
- <Modal :visible.sync="edit_visible" @ok="editModalSave" @cancel="handleEdit(null, false)" :title="'编辑'">
|
|
|
- <AccountForm :edit_form="edit_form" />
|
|
|
+ <Modal :visible.sync="edit_visible" @ok="editModalSave" @cancel="handleEdit(null, false)"
|
|
|
+ :title="edit_mode ? '编辑' : '新增'">
|
|
|
+ <AccountForm :edit_form="edit_form" :edit_mode="edit_mode" />
|
|
|
</Modal>
|
|
|
|
|
|
<ViewPermission :visible.sync="view_permission_visible" @cancel="handleView(null, false)"
|
|
|
@@ -36,8 +37,8 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { ref, reactive } from 'vue';
|
|
|
-import { Modal as ArcoModal } from '@arco-design/web-vue';
|
|
|
+import { ref, reactive, onMounted } from 'vue';
|
|
|
+import { Message } from '@arco-design/web-vue';
|
|
|
import DataTable from '../../../views/permission/DataTable.vue';
|
|
|
import Action from '../../../views/permission/Action.vue';
|
|
|
import Modal from '../Modal.vue';
|
|
|
@@ -45,66 +46,49 @@ import AccountForm from './AccountForm.vue';
|
|
|
import ViewPermission from './ViewPermission.vue';
|
|
|
import DeptConfigModal from './DeptConfigModal.vue';
|
|
|
|
|
|
-const current_record = ref(null);
|
|
|
+import { QueryUserList, QueryUserDetail, QueryUserPermission, QueryUserDept, UserStatusSwitch, ResetPassword, DeleteUser } from '../../../apis/permission/account';
|
|
|
+
|
|
|
+const keywords = ref('');
|
|
|
// 表格相关
|
|
|
-const table_data = ref([
|
|
|
- { id: 1, name: '李雷', age: 25, status: true },
|
|
|
- { id: 2, name: '韩梅梅', age: 30, status: false },
|
|
|
-]);
|
|
|
+const table_data = ref([]);
|
|
|
const table_columns = ref([
|
|
|
- { title: '用户名', dataIndex: 'name', titleSlotName: 'name' },
|
|
|
- { title: '角色', dataIndex: 'age', titleSlotName: 'age' },
|
|
|
- { title: '所属部门', dataIndex: 'dept', titleSlotName: 'dept' },
|
|
|
+ { title: '序号', slotName: 'index' },
|
|
|
+ { title: '用户名', dataIndex: 'userName', titleSlotName: 'userName' },
|
|
|
+ { title: '角色', dataIndex: 'roleName', titleSlotName: 'roleName' },
|
|
|
+ { title: '所属部门', dataIndex: 'deptName', titleSlotName: 'deptName' },
|
|
|
{ title: '状态', dataIndex: 'status', slotName: 'status' },
|
|
|
{ title: '操作', dataIndex: 'operation', slotName: 'operationSlot' },
|
|
|
]);
|
|
|
const pagination_props = ref({
|
|
|
- total: 100,
|
|
|
+ total: 10,
|
|
|
current: 1,
|
|
|
- pageSize: 15,
|
|
|
+ pageSize: 12,
|
|
|
})
|
|
|
const table_size = ref('medium');
|
|
|
const table_loading = ref(false);
|
|
|
|
|
|
// 编辑表单相关
|
|
|
const edit_visible = ref(false);
|
|
|
+const edit_mode = ref(false);
|
|
|
const edit_form = reactive({
|
|
|
- loginName: '',
|
|
|
userName: '',
|
|
|
- phoneNumber: '',
|
|
|
+ userName: '',
|
|
|
+ phone: '',
|
|
|
email: '',
|
|
|
- password: '',
|
|
|
+ pwd: '',
|
|
|
role: []
|
|
|
});
|
|
|
|
|
|
-
|
|
|
-
|
|
|
// 查看权限相关
|
|
|
const view_permission_visible = ref(false);
|
|
|
-const menu_permissions_list = ref([
|
|
|
- { name: '智能体设置', id: 1 },
|
|
|
- { name: 'root', id: 2 },
|
|
|
- { name: '智能体列表', id: 3 },
|
|
|
- { name: '会话记录', id: 4 },
|
|
|
-])
|
|
|
-const knowledge_permissions_list = ref([
|
|
|
- { name: '知识库管理', id: 1 },
|
|
|
- { name: '知识库列表', id: 2 },
|
|
|
- { name: '知识库分类', id: 3 },
|
|
|
-])
|
|
|
-const dialog_permissions_list = ref([
|
|
|
- { name: '对话管理', id: 1 },
|
|
|
- { name: '对话列表', id: 2 },
|
|
|
- { name: '对话分类', id: 3 },
|
|
|
-])
|
|
|
-const agent_permissions_list = ref([
|
|
|
- { name: '智能体管理', id: 1 },
|
|
|
- { name: '智能体列表', id: 2 },
|
|
|
- { name: '智能体分类', id: 3 },
|
|
|
-])
|
|
|
+const menu_permissions_list = ref([])
|
|
|
+const knowledge_permissions_list = ref([])
|
|
|
+const dialog_permissions_list = ref([])
|
|
|
+const agent_permissions_list = ref([])
|
|
|
|
|
|
// 部门配置相关
|
|
|
const dept_config_visible = ref(false);
|
|
|
+const current_record = ref(null);
|
|
|
const dept_list = ref([
|
|
|
{
|
|
|
"address": null,
|
|
|
@@ -231,61 +215,191 @@ const dept_list = ref([
|
|
|
}
|
|
|
]);
|
|
|
|
|
|
+const getUserList = async () => {
|
|
|
+ const params = {
|
|
|
+ keyword: keywords.value,
|
|
|
+ current: pagination_props.value.current,
|
|
|
+ pageSize: pagination_props.value.pageSize,
|
|
|
+ };
|
|
|
+ table_loading.value = true
|
|
|
+ const { code, data } = await QueryUserList(params);
|
|
|
+ if (code === 200) {
|
|
|
+ for (const user of data.rows) {
|
|
|
+ if (user.dept) {
|
|
|
+ for (const d of user.dept) {
|
|
|
+ if (user.deptName) {
|
|
|
+ user.deptName += d.deptName + ',';
|
|
|
+ } else {
|
|
|
+ user.deptName = d.deptName + ',';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (user.roles) {
|
|
|
+ for (const r of user.roles) {
|
|
|
+ if (user.roleName) {
|
|
|
+ user.roleName += r.roleName + ',';
|
|
|
+ } else {
|
|
|
+ user.roleName = r.roleName + ',';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ pagination_props.value.total = data.total;
|
|
|
+ table_data.value = data.rows;
|
|
|
+
|
|
|
+ table_loading.value = false
|
|
|
+ } else {
|
|
|
+ table_loading.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
const searchClick = (value) => {
|
|
|
- console.log('value', value)
|
|
|
+ keywords.value = value;
|
|
|
+ getUserList();
|
|
|
}
|
|
|
const resetClick = () => {
|
|
|
- console.log('重置')
|
|
|
+ keywords.value = '';
|
|
|
+ getUserList();
|
|
|
}
|
|
|
const createClick = () => {
|
|
|
- console.log('新建')
|
|
|
+ edit_form.userName = '';
|
|
|
+ edit_form.loginName = '';
|
|
|
+ edit_form.phone = '';
|
|
|
+ edit_form.email = '';
|
|
|
+ edit_form.pwd = '';
|
|
|
+ edit_form.role = [];
|
|
|
+ edit_mode.value = false;
|
|
|
+ edit_visible.value = true;
|
|
|
}
|
|
|
const refreshClick = () => {
|
|
|
console.log('刷新')
|
|
|
}
|
|
|
|
|
|
-const handleResetPassword = (record) => {
|
|
|
- ArcoModal.success({
|
|
|
- title: '重置密码',
|
|
|
- content: '该用户密码重置为000000',
|
|
|
- });
|
|
|
+// 切换页码
|
|
|
+const handlePageChange = (current) => {
|
|
|
+ pagination_props.value.current = current;
|
|
|
+ getUserList();
|
|
|
+};
|
|
|
+
|
|
|
+// TODO功能 状态切换拦截
|
|
|
+const beforeStatusChange = async () => {
|
|
|
+ await new Promise((resolve, reject) => setTimeout(() => {
|
|
|
+ resolve()
|
|
|
+ }, 1000))
|
|
|
+}
|
|
|
+
|
|
|
+// 用户状态切换
|
|
|
+const statusChange = async (record) => {
|
|
|
+ if (record?.dept) {
|
|
|
+ const params = {
|
|
|
+ userId: record.userId,
|
|
|
+ status: record.status,
|
|
|
+ };
|
|
|
+ const { code } = await UserStatusSwitch(params)
|
|
|
+ if (code === 200) {
|
|
|
+ Message.success({
|
|
|
+ title: '成功',
|
|
|
+ content: '状态切换成功.',
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+
|
|
|
+ }
|
|
|
+};
|
|
|
+//重置密码
|
|
|
+const handleResetPassword = async (record) => {
|
|
|
+ const { code } = await ResetPassword(record.userId);
|
|
|
+ if (code === 200) {
|
|
|
+ Message.success({
|
|
|
+ title: '重置密码',
|
|
|
+ content: '该用户密码重置为000000',
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
const handleEdit = (record, visible) => {
|
|
|
+
|
|
|
if (record) {
|
|
|
- console.log('record', record)
|
|
|
- edit_form.loginName = record.loginName;
|
|
|
+
|
|
|
edit_form.userName = record.userName;
|
|
|
- edit_form.phoneNumber = record.phoneNumber;
|
|
|
+ edit_form.loginName = record.loginName;
|
|
|
+ edit_form.phone = record.phone;
|
|
|
edit_form.email = record.email;
|
|
|
- edit_form.password = record.password;
|
|
|
+ edit_form.pwd = record.pwd;
|
|
|
edit_form.role = record.role;
|
|
|
+
|
|
|
+ edit_mode.value = true;
|
|
|
}
|
|
|
|
|
|
edit_visible.value = visible;
|
|
|
}
|
|
|
+// 查看权限
|
|
|
+const handleView = async (record, visible) => {
|
|
|
+ if (record) {
|
|
|
+ dialog_permissions_list.value = [];
|
|
|
+ knowledge_permissions_list.value = [];
|
|
|
+ menu_permissions_list.value = [];
|
|
|
+ const { code, data } = await QueryUserPermission(record.userId);
|
|
|
+ if (code === 200) {
|
|
|
+ const { knowledge, menus, dialog } = data;
|
|
|
+ if (dialog && dialog.length > 0) dialog_permissions_list.value = dialog
|
|
|
+ if (knowledge && knowledge.length > 0) knowledge_permissions_list.value = knowledge
|
|
|
+ if (menus && menus.length > 0) menu_permissions_list.value = getMenuTitles(menus)
|
|
|
|
|
|
-const handleView = (record, visible) => {
|
|
|
- console.log('record', record)
|
|
|
+ }
|
|
|
+ }
|
|
|
view_permission_visible.value = visible;
|
|
|
}
|
|
|
-
|
|
|
-const handleDeptConfig = (record, visible) => {
|
|
|
- current_record.value = record;
|
|
|
+// 部门配置
|
|
|
+const handleDeptConfig = async (record, visible) => {
|
|
|
+ if (record) {
|
|
|
+ current_record.value = record;
|
|
|
+ const { code, data: { rows } } = await QueryUserDept(record.userId);
|
|
|
+ if (code === 200) {
|
|
|
+ // TODO接口 机构接上再接这个
|
|
|
+ console.log('rows', rows)
|
|
|
+ // dept_list.value = rows;
|
|
|
+ }
|
|
|
+ }
|
|
|
dept_config_visible.value = visible;
|
|
|
}
|
|
|
+
|
|
|
+// 删除用户
|
|
|
+const handleDelete = async (userId) => {
|
|
|
+ const { code } = await DeleteUser(userId);
|
|
|
+ if (code === 200) {
|
|
|
+ Message.success({
|
|
|
+ title: '删除用户',
|
|
|
+ content: '该用户已删除',
|
|
|
+ });
|
|
|
+ getUserList();
|
|
|
+ }
|
|
|
+}
|
|
|
const editModalSave = () => {
|
|
|
edit_visible.value = false;
|
|
|
- console.log('编辑保存')
|
|
|
}
|
|
|
const table_size_change = (size) => {
|
|
|
table_size.value = size;
|
|
|
}
|
|
|
+// 铺开路由菜单title
|
|
|
+const getMenuTitles = (data, result = []) => {
|
|
|
+ data.forEach(item => {
|
|
|
+ // 检查item是否有id和name属性
|
|
|
+ if (item.id && item.meta.title) {
|
|
|
+ result.push({ id: item.id, name: item.meta.title });
|
|
|
+ }
|
|
|
+ // 如果有子项,递归调用函数
|
|
|
+ if (item.children && item.children.length > 0) {
|
|
|
+ getMenuTitles(item.children, result);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return result;
|
|
|
+}
|
|
|
|
|
|
-const handlePageChange = (current) => {
|
|
|
- pagination_props.value.current = current;
|
|
|
-};
|
|
|
-
|
|
|
+onMounted(() => {
|
|
|
+ getUserList()
|
|
|
+})
|
|
|
</script>
|
|
|
|
|
|
<style lang="css" scoped>
|