Browse Source

添加权限

xiaodai2017 2 years ago
parent
commit
f8500f63f0

+ 16 - 14
src/components/PageContent/src/page-content.tsx

@@ -38,29 +38,31 @@ const PageConent = defineComponent({
      */
     function renderOperation(row) {
       const { contentConfig } = props;
-      const { apis, notPreview } = contentConfig;
+      const { apis, notPreview, powers } = contentConfig;
 
       return (
         <>
           {slots.custom && slots.custom(row)}
-          {!notPreview && (
+          {!notPreview && powers.some(i => i == "007") && (
             <Operation.Preview onPreview={() => emit("previewBtnClick", row)} />
           )}
-          {action.update && (
+          {action.update && powers.some(i => i == "005") && (
             <Operation.Update
               onUpdate={() => emit("updateBtnClick", row)}
               {...createActionProps("update", apis)}
             />
           )}
-          {action.status && (
-            <Operation.Status
-              row={row}
-              prop={contentConfig.statusProp}
-              onReload={() => onSearch()}
-              {...createActionProps("status", apis)}
-            />
-          )}
-          {action.delete && (
+          {action.status &&
+            ((powers.some(i => i == "003") && row.status + "" === "0") ||
+              (powers.some(i => i == "004") && row.status + "" === "1")) && (
+              <Operation.Status
+                row={row}
+                prop={contentConfig.statusProp}
+                onReload={() => onSearch()}
+                {...createActionProps("status", apis)}
+              />
+            )}
+          {action.delete && powers.some(i => i == "006") && (
             <Operation.Delete
               row={row}
               prop={contentConfig.deleteProp}
@@ -104,7 +106,7 @@ const PageConent = defineComponent({
 
     return () => {
       const { contentConfig } = props;
-      const { title } = contentConfig;
+      const { title, powers } = contentConfig;
 
       return (
         <TableProBar
@@ -115,7 +117,7 @@ const PageConent = defineComponent({
           v-slots={{
             buttons: () =>
               (slots.create && slots.create()) ||
-              (action.create && (
+              (action.create && powers.some(i => i == "002") && (
                 <Operation.Create
                   {...createActionProps("create", contentConfig.apis)}
                   onCreate={() => emit("createBtnClick")}

+ 2 - 0
src/components/PageContent/src/types.ts

@@ -8,6 +8,7 @@ import PageContent from "./page-content";
  * @param {notReuqiredInit} 首次加载是否需要请求列表
  * @param {notPagination} 不需要分页器
  * @param {isTree} 是否为tree
+ * @param {powers} 功能权限
  */
 export interface ContentConfig {
   title: string;
@@ -20,6 +21,7 @@ export interface ContentConfig {
   deleteProp?: string;
   mockData?: Array<any>;
   isTree?: boolean;
+  powers?: Array<any>;
 }
 
 interface ContentApiResponse {

+ 20 - 24
src/views/interest/account/index.vue

@@ -3,7 +3,6 @@ import { useColumns } from "./columns";
 import { httpList, httpStatus } from "/@/api/interest/account";
 import { reactive, ref, onMounted } from "vue";
 import { type FormInstance } from "element-plus";
-import { ElMessage } from "element-plus";
 import { TableProBar } from "/@/components/ReTable";
 import { type PaginationProps } from "@pureadmin/table";
 import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
@@ -12,6 +11,7 @@ import { statusList } from "/@/utils/status";
 import menuType from "./types";
 import addEdit from "./addEdit.vue";
 import resetPassword from "./resetPassword.vue";
+import { responseHandle } from "/@/utils/responseHandle";
 const { logout } = useNav();
 defineOptions({
   name: "Account"
@@ -62,13 +62,12 @@ const handleStatus = async row => {
     id,
     status: status + "" === "1" ? "0" : "1"
   });
-  if (code === 0) {
-    onSearch();
-  } else if (code > 100 && code < 140) {
-    logout();
-  } else {
-    ElMessage.error(message);
-  }
+  responseHandle({
+    code,
+    message,
+    logout,
+    handler: () => onSearch()
+  });
 };
 
 async function handleCurrentChange(val: number) {
@@ -89,17 +88,18 @@ function handleSelectionChange(val) {
 async function onSearch() {
   loading.value = true;
   const { code, data, message } = await httpList(form);
-  if (code === 0) {
-    const { list, count } = data;
-    dataList.value = list ?? [];
-    pagination.total = count ?? 0;
-    pagination.pageSize = form.size;
-    pagination.currentPage = form.page;
-  } else if (code > 100 && code < 140) {
-    logout();
-  } else {
-    ElMessage.error(message);
-  }
+  responseHandle({
+    code,
+    message,
+    logout,
+    handler: () => {
+      const { list, count } = data;
+      dataList.value = list ?? [];
+      pagination.total = count ?? 0;
+      pagination.pageSize = form.size;
+      pagination.currentPage = form.page;
+    }
+  });
   loading.value = false;
 }
 async function resetSearch() {
@@ -115,18 +115,14 @@ function editItem(id, type, item) {
   }
   showModel.value = true;
 }
-const submitRefresh = e => {
+const submitRefresh = () => {
   showModel.value = false;
-  console.log("弹窗关闭!");
-  console.log(e);
   onSearch();
 };
 const submitCancel = () => {
-  console.log("弹窗关闭!");
   showModel.value = false;
 };
 const resetCancel = () => {
-  console.log("修改密码弹窗关闭!");
   passwordModel.value = false;
 };
 

+ 7 - 7
src/views/system/menuOperator/components/action-table.vue

@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import { ref } from "vue";
+import { ref, onMounted } from "vue";
 import { useColumns } from "../columns";
 import { handleTree } from "@pureadmin/utils";
 import { httpList, httpStatus, httpDelete } from "/@/api/system/menuOperator";
@@ -7,15 +7,14 @@ import { TableProBar } from "/@/components/ReTable";
 import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
 import { useNav } from "/@/layout/hooks/nav";
 import { responseHandle } from "/@/utils/responseHandle";
-// import { useUserStoreHook } from "/@/store/modules/user";
+import { useUserStoreHook } from "/@/store/modules/user";
 const { logout } = useNav();
-// import modalProps from "../types1";
 const { columns } = useColumns();
 const dataList = ref([]);
 const powers = ref([]);
 const loading = ref(true);
 const tableRef = ref();
-// powers.value = useUserStoreHook().getMenuActions("menuOperator");
+
 const emit = defineEmits(["edit", "create", "view"]);
 //更新状态
 const handleStatus = async row => {
@@ -64,10 +63,11 @@ async function onSearch() {
 }
 //编辑
 function editItem(item, id: string, type: "create" | "edit" | "view") {
-  console.log(item, id, type);
   emit(type, item, id, type);
 }
-
+onMounted(() => {
+  powers.value = useUserStoreHook().getMenuActions("menuOperator");
+});
 defineExpose({
   onSearch
 });
@@ -131,7 +131,7 @@ defineExpose({
               :title="row.status === '1' ? '改为禁用?' : '改为启用?'"
               v-if="
                 (powers.some(i => i == '004') && row.status + '' === '1') ||
-                (powers.some(i => i == '003') && row.status + '' !== '1')
+                (powers.some(i => i == '003') && row.status + '' === '0')
               "
               @confirm="handleStatus(row)"
             >

+ 0 - 6
src/views/system/menuOperator/types1.ts

@@ -1,6 +0,0 @@
-export const modalProps = {
-  examCode: {
-    type: String,
-    required: true
-  }
-};

+ 1 - 1
src/views/system/setBtn/components/menu-tree.vue

@@ -39,7 +39,7 @@ initMenuList();
 
 <template>
   <div
-    class="max-w-280px w-[280px] h-full min-h-780px bg-white p-2 mt-24px mr-10px"
+    class="max-w-280px w-[280px] h-full min-h-780px bg-white p-2 mt-5px mr-10px"
   >
     <div class="flex justify-between mb-1 font-bold">
       <h1>菜单列表</h1>

+ 2 - 3
src/views/system/setBtn/config/content.config.ts

@@ -6,11 +6,9 @@ import {
   httpAdd,
   httpEdit as httpUpdate
 } from "/@/api/system/setBtn";
-
 import dayjs from "dayjs";
 import { h } from "vue";
 import { ElTag } from "element-plus";
-
 const columns = [
   {
     type: "selection",
@@ -72,7 +70,8 @@ const contentConfig: ContentConfig = {
     httpAdd,
     httpStatus,
     httpUpdate
-  }
+  },
+  powers: []
 };
 
 export default contentConfig;

+ 29 - 20
src/views/system/setBtn/index.vue

@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import { ref, unref } from "vue";
+import { ref, unref, onMounted } from "vue";
 import TreeMenu from "./components/menu-tree.vue";
 import { PageModal, usePageModal } from "/@/components/PageModal";
 import { PageContent, PageContentInstance } from "/@/components/PageContent";
@@ -7,10 +7,11 @@ import contentConfig from "./config/content.config";
 import modalConfig from "./config/modal.config";
 import { IMenuTree, MENU_TYPE } from "./types";
 import btnList from "/@/utils/btnList";
+import { useUserStoreHook } from "/@/store/modules/user";
 
 const menuid = ref("");
 const pageContentRef = ref<PageContentInstance>(null);
-
+const powers = ref([]);
 const {
   pageModalRef,
   handleCreateData,
@@ -40,26 +41,34 @@ function initTableData(id: string) {
   menuid.value = id;
   pageContentRef.value.getPageData({ id });
 }
+onMounted(() => {
+  powers.value = useUserStoreHook().getMenuActions("setBtn");
+  contentConfig.powers = useUserStoreHook().getMenuActions("setBtn");
+  console.log(contentConfig);
+});
 </script>
 
 <template>
-  <div class="main flex">
-    <TreeMenu
-      @tree-select-change="handleTreeNodeSelect"
-      @init-table-data="initTableData"
-    />
-    <PageContent
-      ref="pageContentRef"
-      :content-config="contentConfig"
-      @create-btn-click="handleCreateData"
-      @preview-btn-click="handlePreviewData"
-      @update-btn-click="handleUpdateData"
-    />
-    <PageModal
-      ref="pageModalRef"
-      :modal-config="modalConfig"
-      :default-info="defaultInfo"
-      @confirm-btn-click="handleConfrim"
-    />
+  <div class="main">
+    <div class="flex" v-show="powers.some(i => i == '001')">
+      <TreeMenu
+        @tree-select-change="handleTreeNodeSelect"
+        @init-table-data="initTableData"
+      />
+      <PageContent
+        ref="pageContentRef"
+        :content-config="contentConfig"
+        @create-btn-click="handleCreateData"
+        @preview-btn-click="handlePreviewData"
+        @update-btn-click="handleUpdateData"
+      />
+      <PageModal
+        ref="pageModalRef"
+        :modal-config="modalConfig"
+        :default-info="defaultInfo"
+        @confirm-btn-click="handleConfrim"
+      />
+    </div>
+    <NoAuth v-show="!powers.some(i => i == '001')" />
   </div>
 </template>