Browse Source

feat: 权限

ystl_myq 7 months ago
parent
commit
17e200c9a2

+ 12 - 2
src/api/menu.ts

@@ -5,12 +5,22 @@ type ResultList = {
   msg: string;
   data: Array<any>;
 };
-
+// 查询所有菜单
 export const getMenuList = () => {
   return http.request<ResultList>("get", "/sysMenu/menuList");
 };
-export const getMenuListCodeForRole = data => {
+// 查询角色的所有菜单权限表
+export const getMenuListCodeForRole = params => {
   return http.request<ResultList>("get", "/sysMenu/menuListCodeForRole", {
+    params
+  });
+};
+export const getMenuListForUser = () => {
+  return http.request<ResultList>("get", "/sysMenu/menuListForUser");
+};
+// 添加菜单权限
+export const postAddMenuList = data => {
+  return http.request<ResultList>("post", "/sysMenu/save", {
     data
   });
 };

+ 8 - 19
src/components/UserPageTable/index.vue

@@ -8,7 +8,6 @@ import { Search } from "@element-plus/icons-vue";
 import { postOrganizationUserPage } from "@/api/userSetting";
 import { useRoute } from "vue-router";
 const $route: any = useRoute();
-console.log("111", $route.name);
 const tableData = reactive({
   list: [],
   params: {
@@ -20,11 +19,6 @@ const tableData = reactive({
   },
   total: 0
 });
-// onMounted(() => {
-//   $route.name == "users"
-//     ? (tableData.params.organizationType = "group")
-//     : (tableData.params.organizationType = "dept");
-// });
 const handleNodeClick = (data: any, userType: string) => {
   if (userType == "group") {
     tableData.params.organizationCode = data.groupCode;
@@ -34,10 +28,14 @@ const handleNodeClick = (data: any, userType: string) => {
     tableData.params.organizationType = userType;
   }
   postOrganizationUserPageApi();
-  // setTimeout(() => {}, 0);
 };
 const postOrganizationUserPageApi = async () => {
-  console.log("改变1111", tableData.params);
+  if ($route.name == "users") {
+    tableData.params.organizationType = "group";
+  }
+  if ($route.name == "prosonDepartment") {
+    tableData.params.organizationType = "dept";
+  }
   const { code, data, msg } = await postOrganizationUserPage(tableData.params);
   if (code == 200) {
     tableData.list = data.records;
@@ -56,7 +54,8 @@ const handleCurrentChange = val => {
 };
 defineExpose({
   handleNodeClick,
-  postOrganizationUserPageApi
+  postOrganizationUserPageApi,
+  tableData
 });
 </script>
 
@@ -111,16 +110,6 @@ defineExpose({
     <div>
       <div class="float-left mt-3 total">共{{ tableData.total }}条数据</div>
       <div class="absolute right-0 mr-20 mt-3">
-        <!-- <el-pagination
-          v-model:current-page="tableData.params.pageNumber"
-          v-model:page-size="tableData.params.pageSize"
-          :page-sizes="[10, 15, 20, 30]"
-          size="small"
-          layout="total, sizes, prev, pager, next, jumper"
-          :total="tableData.total"
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-        /> -->
         <el-pagination
           v-model:current-page="tableData.params.pageNumber"
           v-model:page-size="tableData.params.pageSize"

+ 17 - 3
src/router/utils.ts

@@ -22,6 +22,7 @@ import { buildHierarchyTree } from "@/utils/tree";
 import { userKey, type DataInfo } from "@/utils/auth";
 import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
 import { usePermissionStoreHook } from "@/store/modules/permission";
+import { getMenuListForUser } from "@/api/menu";
 // 路由静态 对接接口后需删除-----------------------------
 // 搜索---代码删除-----下面打印代码删除遍历路由的代码
 // import { getMenuList } from "@/api/menu";
@@ -216,9 +217,16 @@ function initRouter() {
       });
     } else {
       return new Promise(resolve => {
-        handleAsyncRoutes(cloneDeep(muenList));
-        storageLocal().setItem(key, muenList);
-        resolve(router);
+        // handleAsyncRoutes(cloneDeep(muenList));
+        // storageLocal().setItem(key, muenList);
+        // resolve(router);
+        // const roleCode = localStorage.getItem("roleCode");
+        getMenuListForUser().then(({ data }) => {
+          handleAsyncRoutes(cloneDeep(data));
+          storageLocal().setItem(key, data);
+          resolve(router);
+          console.log("data", data);
+        });
         // getAsyncRoutes().then(({ data }) => {
         //   // console.log("data", data);
         //   handleAsyncRoutes(cloneDeep(data));
@@ -233,6 +241,12 @@ function initRouter() {
       //   handleAsyncRoutes(cloneDeep(data));
       // resolve(router);
       // });
+      // const roleCode = localStorage.getItem("roleCode");
+      getMenuListForUser().then(({ data }) => {
+        handleAsyncRoutes(cloneDeep(data));
+        resolve(router);
+        console.log("data", data);
+      });
       handleAsyncRoutes(cloneDeep(muenList));
       resolve(router);
     });

+ 32 - 6
src/views/background/framework/roles/rolePower.vue

@@ -9,7 +9,11 @@ import { Search } from "@element-plus/icons-vue";
 import addRole from "./components/addRole.vue";
 import addPerson from "./components/addPerson.vue";
 import { getDeleteUserApi } from "@/api/userSetting";
-import { getMenuList, getMenuListCodeForRole } from "@/api/menu";
+import {
+  getMenuList,
+  getMenuListCodeForRole,
+  postAddMenuList
+} from "@/api/menu";
 import { postPageRole, postDelRole, postPageUserByRole } from "@/api/roles";
 import pngcaret from "@/assets/icon-png/caret-right-small.svg";
 import UserPageTable from "@/components/UserPageTable/index.vue";
@@ -88,7 +92,6 @@ const lookRoles = item => {
   rolesList.rolesName = item.roleName;
   Object.assign(rolesList.addPerson, item);
   postPageUserByRoleApi();
-  // getMenuListApi();
   getMenuListCodeForRoleApi(item);
 };
 // 添加角色
@@ -136,8 +139,12 @@ const activeName = ref("first");
 
 // 添加角色组成员
 const AddRolesPerson = () => {
-  addPersonRef.value.open(rolesList.addPerson);
-  addPersonShow.value = true;
+  if (rolesList.rolesName) {
+    addPersonRef.value.open(rolesList.addPerson);
+    addPersonShow.value = true;
+  } else {
+    ElMessage.warning("请先选择角色");
+  }
 };
 // 删除角色组成员
 const deltetePerson = item => {
@@ -164,6 +171,7 @@ const paramsPageUser = reactive({
   pageSize: 10,
   roleName: "",
   roleCode: "",
+  realName: "",
   userCodes: []
 });
 const total = ref(0);
@@ -183,8 +191,23 @@ const handleClick = (tab, event) => {
 };
 const getMenuListApi = async () => {
   const { code, data } = await getMenuList();
-  // console.log("菜单", data);
+  console.log("菜单", data);
 };
+getMenuListApi();
+// const postAddMenuListApi = async () => {
+//   const { code } = await postAddMenuList({
+//     menuName: "用户组",
+//     menuType: "menu",
+//     parentCode: "menu340273914200596480",
+//     orderNum: 2,
+//     url: "",
+//     moduleUrl: "/background/framework/users/index",
+//     icon: "",
+//     remark: "",
+//     menuCode: ""
+//   });
+// };
+// postAddMenuListApi();
 const getMenuListCodeForRoleApi = async item => {
   console.log("item", item);
   const { code, data } = await getMenuListCodeForRole({
@@ -320,16 +343,19 @@ const handleCurrentChange = val => {
         >新增角色</el-button
       >
     </div>
-    <div v-if="rolesList.rolesName" class="box-right">
+    <!-- <div v-if="rolesList.rolesName" class="box-right"> -->
+    <div class="box-right">
       <h3>{{ rolesList.rolesName }}</h3>
       <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
         <el-tab-pane label="成员管理" name="first">
           <div class="flex justify-between mb-3">
             <el-input
+              v-model="paramsPageUser.realName"
               placeholder="搜索姓名"
               class="mb-2"
               style="max-width: 300px"
               :prefix-icon="Search"
+              @change="postPageUserByRoleApi"
             />
             <el-button type="primary" @click="AddRolesPerson"
               >添加成员</el-button

+ 2 - 1
src/views/background/framework/users/components/addPerson.vue

@@ -21,9 +21,10 @@ const filterText = ref("");
 const saveDepartment = () => {
   postAssignmentUserApi();
 };
-const open = item => {
+const open = (item, list) => {
   dialogVisibleAdd.value = true;
   filterText.value = "";
+  console.log("item", list);
   form.sourceCodes.push(item.groupCode);
 };
 const postAssignmentUserApi = async () => {

+ 5 - 1
src/views/background/framework/users/index.vue

@@ -96,7 +96,11 @@ const deleteUsers = row => {
   });
 };
 const AddUsersPerson = () => {
-  addPersonRef.value.open(rolesList.addPerson);
+  if (rolesList.rolesName) {
+    addPersonRef.value.open(rolesList.addPerson, UserTable.value.tableData);
+  } else {
+    ElMessage.warning("请选择用户组");
+  }
 };
 const addUsersList = () => {
   addUsersRef.value.open();

+ 1 - 0
src/views/draw/children/worker/workerDrak.vue

@@ -40,6 +40,7 @@ const getPersonDimensionChartsListApi = async () => {
   // barEchartsRef.value.setOption(data);
   // console.log("data", data);
 };
+getPersonDimensionChartsListApi();
 // 维度表格
 const personListRef = ref();
 const barEchartsList = reactive({

+ 27 - 1
src/views/evaluate/children/change/mould.vue

@@ -167,7 +167,7 @@ const handleCurrentChange = (val: number) => {
         </el-table-column>
       </el-table>
     </div>
-    <div class="float-right mt-8 mr-8">
+    <!-- <div class="float-right mt-8 mr-8">
       <el-pagination
         v-model:current-page="data.params.pageNumber"
         v-model:page-size="data.params.pageSize"
@@ -177,6 +177,32 @@ const handleCurrentChange = (val: number) => {
         @size-change="handleSizeChange"
         @current-change="handleCurrentChange"
       />
+    </div> -->
+    <div class="flex justify-between item-center">
+      <div class="float-left mt-5 ml-2 total">共{{ data.total }}条数据</div>
+      <div class="float-right mt-5 mr-8">
+        <el-pagination
+          v-model:current-page="data.params.pageNumber"
+          v-model:page-size="data.params.pageSize"
+          background
+          layout="prev, pager, next"
+          :total="data.total"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+      </div>
     </div>
   </div>
 </template>
+
+<style scoped>
+.total {
+  font-size: 14px;
+
+  /* font-family: PingFangSC-Regular; */
+  font-weight: 400;
+  line-height: 22px;
+  color: #0009;
+  letter-spacing: 0;
+}
+</style>

+ 14 - 8
src/views/login/index.vue

@@ -65,7 +65,6 @@ const onLogin = async (formEl: FormInstance | undefined) => {
           // password: ruleForm.password
         })
         .then(res => {
-          // console.log(res);
           // @ts-ignore
           if (res.code === 200) {
             // @ts-ignore
@@ -73,18 +72,25 @@ const onLogin = async (formEl: FormInstance | undefined) => {
             // @ts-ignore
             localStorage.setItem("userName", res.data.realName);
             //  获取后端路由动态路由逻辑,不可删除
-            // initRouter().then(() => {
-            //   // router.push(getTopMenu(true).path);
-            //   router.push("/");
-            //   message("登录成功", { type: "success" });
-            // });
-            router.push("/");
+            initRouter().then(() => {
+              // router.push(getTopMenu(true).path);
+              router.push("/");
+              message("登录成功", { type: "success" });
+            });
+            // router.push("/");
             console.log("登录成功", res);
-            message("登录成功", { type: "success" });
+            // message("登录成功", { type: "success" });
           } else {
             // @ts-ignore
+            console.log("登录失败", res.msg);
+            // @ts-ignore
             message(res.msg, { type: "error" });
           }
+        })
+        .catch(err => {
+          loading.value = false;
+          message(err, { type: "error" });
+          return fields;
         });
     } else {
       loading.value = false;