123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- <script setup lang="ts">
- defineOptions({
-
- name: "users"
- });
- import { ref, reactive } from "vue";
- import { ElMessageBox, ElMessage } from "element-plus";
- import { Search } from "@element-plus/icons-vue";
- import addPerson from "./components/addPerson.vue";
- import addUsers from "./components/addUsers.vue";
- import editPerson from "./components/editPerson.vue";
- import { postPageGroup, postDelUserGroup } from "@/api/userGroup";
- import UserPageTable from "@/components/UserPageTable/index.vue";
- import pngcaret from "@/assets/icon-png/caret-right-small.svg";
- const addUsersRef = ref();
- const addUsersShow = ref(false);
- const addPersonRef = ref();
- const addPersonShow = ref(false);
- const editPersonRef = ref();
- const editPersonShow = ref(false);
- const UserTable = ref();
- const tableData = [
- {
- date: "2016-05-03",
- name: "Tom",
- address: "No. 189"
- },
- {
- date: "2016-05-02",
- name: "Tom",
- address: "No. 189"
- },
- {
- date: "2016-05-04",
- name: "Tom",
- address: "No. 189"
- },
- {
- date: "2016-05-01",
- name: "Tom",
- address: "No. 189"
- }
- ];
- const rolesList = reactive({
- data: [],
- rolesName: "",
- params: {
- pageNumber: 1,
- pageSize: 10,
- groupName: ""
- }
- });
- const load = () => {
- rolesList.params.pageSize += 10;
- postPageGroupApi();
- };
- const postPageGroupApi = async () => {
- const { code, data } = await postPageGroup(rolesList.params);
- if (code === 200) {
- rolesList.data = [];
- data.records.forEach((item, index) => {
- rolesList.data.push({
- ...item,
- id: index + 1
- });
- });
- }
- };
- postPageGroupApi();
- const bgColor = ref(null);
- const lookRoles = item => {
- console.log("111", item);
- bgColor.value = item.id;
- rolesList.rolesName = item.groupName;
- UserTable.value.handleNodeClick(item, "group");
- console.log(UserTable.value);
- };
- const activeName = ref("first");
- const handleClick = (tab, event) => {
- console.log(tab, event);
- };
- const postDelUserGroupApi = async row => {
- const { code } = await postDelUserGroup(row);
- if (code === 200) {
- postPageGroupApi();
- ElMessage({
- type: "success",
- message: "删除成功"
- });
- }
- };
- const deleteUsers = row => {
- console.log(row);
- ElMessageBox.confirm(
- `角色删除不能恢复,是否确认删除用户组【${row.groupName}】吗`,
- "确定删除该用户组吗?",
- {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- }
- ).then(() => {
- postDelUserGroupApi(row);
- });
- };
- const AddUsersPerson = () => {
- addPersonRef.value.open();
- };
- const addUsersList = () => {
- addUsersRef.value.open();
- };
- const changeUsers = item => {
- addUsersRef.value.open(item);
- };
- const editUsers = row => {
- editPersonRef.value.open(row);
- };
- const deltetePerson = row => {
- ElMessageBox.confirm(
- `用户删除不能恢复,是否确认删除用户【${row.name}】吗`,
- "确定删除该用户吗?",
- {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- }
- )
- .then(() => {
- ElMessage({
- type: "success",
- message: "删除成功"
- });
- })
- .catch(() => {
- ElMessage({
- message: "取消删除"
- });
- });
- };
- </script>
- <template>
- <div class="flex w-full h-full">
-
- <addPerson ref="addPersonRef" v-model="addPersonShow" />
-
- <addUsers
- ref="addUsersRef"
- v-model="addUsersShow"
- @handleClick="postPageGroupApi"
- />
-
- <editPerson
- ref="editPersonRef"
- v-model="editPersonShow"
- @handleClick="postPageGroupApi"
- />
-
- <div class="box-left">
- <div class="w-[100%]">
- <div>
- <el-input
- v-model="rolesList.params.groupName"
- placeholder="搜索姓名"
- class="mb-2"
- clearable
- style="max-width: 300px"
- :prefix-icon="Search"
- @change="postPageGroupApi"
- />
- </div>
- </div>
- <div
- v-infinite-scroll="load"
- infinite-scroll-immediate="false"
- class="h-2/3 w-[100%] overflow-auto infinite-list"
- >
- <div
- v-for="item in rolesList.data"
- :key="item.id"
- class="w-[100%] flex justify-between items-center"
- >
- <pngcaret class="mr-1 mt-2" />
- <div
- :class="[
- 'w-[100%] flex justify-between items-center mt-2 cursor-pointer',
- { 'roles-bg': bgColor === item.id }
- ]"
- >
- <div
- class="flex justify-between items-center'"
- @click="lookRoles(item)"
- >
- <span class="">{{ item.groupName }}</span>
- </div>
- <div class="flex justify-between items-center">
- <el-dropdown trigger="click">
- <span>
- <el-icon><Operation /></el-icon>
- </span>
- <template #dropdown>
- <el-dropdown-menu class="setting">
- <el-dropdown-item @click="editUsers(item)">
- 编辑
- </el-dropdown-item>
- <el-dropdown-item @click="changeUsers(item)">
- 配置角色
- </el-dropdown-item>
- <el-dropdown-item>
- <el-link type="danger" @click="deleteUsers(item)"
- >删除</el-link
- >
- </el-dropdown-item>
- </el-dropdown-menu>
- </template>
- </el-dropdown>
- </div>
- </div>
- </div>
- </div>
- <el-divider />
- <el-button type="primary" class="addRole" plain @click="addUsersList()"
- >新增用户组</el-button
- >
- </div>
-
- <div class="box-right">
- <h3>{{ rolesList.rolesName }}</h3>
-
- <UserPageTable ref="UserTable">
- <template #add-button>
- <el-button type="primary" @click="AddUsersPerson">添加成员</el-button>
- </template>
- <template #actions="{ row }">
- <el-dropdown trigger="click" class="mr-2">
- <el-text type="danger" @click="deltetePerson(row)"> 移除 </el-text>
- </el-dropdown>
- </template>
- </UserPageTable>
- </div>
- </div>
- </template>
- <style lang="scss" scoped>
- .box-left {
- position: relative;
- width: 25%;
- // border: 1px solid red;
- height: 100%;
- padding: 10px 20px;
- border-right: 1px solid #999;
- }
- .box-right {
- width: 70%;
- height: 100%;
- padding: 10px 20px;
- }
- .addRole {
- position: absolute;
- bottom: 70px;
- width: calc(100% - 50px);
- }
- .userName {
- background-color: #022bbd80;
- }
- .infinite-list {
- -ms-overflow-style: none; /* IE和Edge */
- scrollbar-width: none; /* Firefox */
- // border: 1px solid red;
- }
- /* 隐藏滚动条 */
- .infinite-list::-webkit-scrollbar {
- display: none; /* 对于 Webkit 浏览器(Chrome, Safari等) */
- }
- // ::v-deep .el-dropdown {
- // line-height: 1;
- // }
- // ::v-deep .el-tree-node__expand-icon {
- // line-height: 10px;
- // border: 1px solid red;
- // }
- .roles-bg {
- color: #0052d9;
- background-color: #0053d91a;
- }
- .roles-text {
- font-size: 14px;
- // font-family: PingFangSC-Regular;
- font-weight: 400;
- line-height: 22px;
- color: #000000e6;
- letter-spacing: 0;
- }
- </style>
|