From 69af4221288e61e1567d4f950fad9076e3957135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E5=BD=AA=E8=BE=89?= Date: Sat, 26 Apr 2025 09:50:55 +0800 Subject: [PATCH] =?UTF-8?q?refactor=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除全局方法getUserBtnRole - 使用hasPermission函数替代checkBtnPermission - 优化权限判断逻辑,减少冗余代码 - 统一权限控制的实现方式 --- src/App.vue | 1 - src/addon/erp/pages/base/customer/add.vue | 7 +- src/addon/erp/pages/base/customer/list.vue | 8 +- src/addon/erp/pages/base/supplier/add.vue | 9 +- src/addon/erp/pages/base/supplier/list.vue | 6 +- src/addon/erp/pages/base/warehouse/add.vue | 8 +- src/addon/erp/pages/base/warehouse/list.vue | 6 +- src/addon/erp/pages/canteen/return/add.vue | 19 +-- src/addon/erp/pages/canteen/return/list.vue | 24 +--- .../erp/pages/inbound/stockPending/add.vue | 10 +- .../erp/pages/inbound/stockPending/detail.vue | 4 +- .../erp/pages/inbound/stockPending/list.vue | 7 +- .../erp/pages/inventory/inventory/add.vue | 10 +- .../erp/pages/inventory/inventory/list.vue | 121 +++++++++--------- .../erp/pages/outbound/outPending/add.vue | 11 +- .../erp/pages/outbound/outPending/detail.vue | 4 +- .../erp/pages/outbound/outPending/list.vue | 8 +- src/addon/erp/pages/product/product/add.vue | 8 +- src/addon/erp/pages/product/product/list.vue | 7 +- src/addon/erp/pages/product/type/add.vue | 8 +- src/addon/erp/pages/product/type/list.vue | 42 ++++-- src/addon/erp/pages/product/unit/add.vue | 8 +- src/addon/erp/pages/product/unit/list.vue | 43 +++++-- src/addon/erp/pages/purchase/return/add.vue | 10 +- src/addon/erp/pages/purchase/return/list.vue | 26 ++-- src/stores/member.ts | 10 +- src/utils/auth.ts | 32 ----- src/utils/usePermission.ts | 20 +++ 28 files changed, 238 insertions(+), 239 deletions(-) create mode 100644 src/utils/usePermission.ts diff --git a/src/App.vue b/src/App.vue index f7290f2..f6ead09 100644 --- a/src/App.vue +++ b/src/App.vue @@ -96,7 +96,6 @@ // 判断是否已登录 if (getToken()) { const memberStore: any = useMemberStore() - memberStore.getUserBtnRole() await memberStore.setToken(getToken(), () => { if (!uni.getStorageSync('openid')) { const memberInfo = useMemberStore().info diff --git a/src/addon/erp/pages/base/customer/add.vue b/src/addon/erp/pages/base/customer/add.vue index d193c4e..99937cf 100644 --- a/src/addon/erp/pages/base/customer/add.vue +++ b/src/addon/erp/pages/base/customer/add.vue @@ -64,7 +64,7 @@ - + @@ -82,8 +82,9 @@ import { addCustomer,getusersList,getWarehouseSelect} from '@/addon/erp/api/base'; import { generatedCode } from '@/addon/erp/utils/common'; import { redirect } from '@/utils/common'; - import { checkBtnPermission } from '@/utils/auth'; import useMemberStore from '@/stores/member' + import usePermission from '@/utils/usePermission' + const { hasPermission } = usePermission() interface Warehouse { id: number; name: string; @@ -208,8 +209,6 @@ } // 保存 const handSave = async() => { - const hasPermission = await checkBtnPermission(memberStore.btnPermission, 'erp_base_customer_add') - if (!hasPermission) return formRef.value.validate().then(() => { if (loading.value) return loading.value = true diff --git a/src/addon/erp/pages/base/customer/list.vue b/src/addon/erp/pages/base/customer/list.vue index e103637..4a5e91c 100644 --- a/src/addon/erp/pages/base/customer/list.vue +++ b/src/addon/erp/pages/base/customer/list.vue @@ -29,7 +29,7 @@ - @@ -43,7 +43,7 @@ - + @@ -63,10 +63,10 @@ import useMescroll from '@/components/mescroll/hooks/useMescroll.js'; import { getCustomerList, deleteCustomer } from '@/addon/erp/api/base'; import { onShow, onPageScroll, onReachBottom } from '@dcloudio/uni-app'; - + import usePermission from '@/utils/usePermission' + const { hasPermission } = usePermission() const { downCallback, mescrollInit, getMescroll } = useMescroll(onPageScroll, onReachBottom); - const show = ref(false); // 获取系统状态栏的高度 diff --git a/src/addon/erp/pages/base/supplier/add.vue b/src/addon/erp/pages/base/supplier/add.vue index 4e7e223..44c2301 100644 --- a/src/addon/erp/pages/base/supplier/add.vue +++ b/src/addon/erp/pages/base/supplier/add.vue @@ -72,13 +72,13 @@ - + - + @@ -91,9 +91,10 @@ import { getProductTypeSelect} from '@/addon/erp/api/product'; import {uploadImage } from '@/app/api/system' import { redirect } from '@/utils/common'; - import { checkBtnPermission } from '@/utils/auth'; import useMemberStore from '@/stores/member' import { img } from '@/utils/common' + import usePermission from '@/utils/usePermission' + const { hasPermission } = usePermission() const memberStore = useMemberStore() interface FileItem { url: string; @@ -246,8 +247,6 @@ } // 保存 const handSave = async() => { - const hasPermission = await checkBtnPermission(memberStore.btnPermission, 'erp_base_supplier_add') - if (!hasPermission) return formRef.value.validate().then(() => { if (loading.value) return loading.value = true diff --git a/src/addon/erp/pages/base/supplier/list.vue b/src/addon/erp/pages/base/supplier/list.vue index 719b48c..7510b56 100644 --- a/src/addon/erp/pages/base/supplier/list.vue +++ b/src/addon/erp/pages/base/supplier/list.vue @@ -28,7 +28,7 @@ - @@ -42,7 +42,7 @@ - + @@ -62,6 +62,8 @@ import useMescroll from '@/components/mescroll/hooks/useMescroll.js'; import { getSupplierList, deleteSupplier } from '@/addon/erp/api/base'; import { onShow, onPageScroll, onReachBottom } from '@dcloudio/uni-app'; + import usePermission from '@/utils/usePermission' + const { hasPermission } = usePermission() const { downCallback, mescrollInit, getMescroll } = useMescroll(onPageScroll, onReachBottom); diff --git a/src/addon/erp/pages/base/warehouse/add.vue b/src/addon/erp/pages/base/warehouse/add.vue index 831c920..78467cc 100644 --- a/src/addon/erp/pages/base/warehouse/add.vue +++ b/src/addon/erp/pages/base/warehouse/add.vue @@ -29,7 +29,7 @@ - + @@ -46,9 +46,9 @@ import { addWarehouse } from '@/addon/erp/api/base'; import { generatedCode } from '@/addon/erp/utils/common'; import { redirect } from '@/utils/common'; - import { checkBtnPermission } from '@/utils/auth'; import useMemberStore from '@/stores/member' - + import usePermission from '@/utils/usePermission' + const { hasPermission } = usePermission() const memberStore = useMemberStore() const formRef: any = ref(null) const loading = ref(false) @@ -92,8 +92,6 @@ // 保存 const handSave = async() => { - const hasPermission = await checkBtnPermission(memberStore.btnPermission, 'erp_base_warehouse_add') - if (!hasPermission) return formRef.value.validate().then(() => { if (loading.value) return loading.value = true diff --git a/src/addon/erp/pages/base/warehouse/list.vue b/src/addon/erp/pages/base/warehouse/list.vue index c35570d..fcee3b8 100644 --- a/src/addon/erp/pages/base/warehouse/list.vue +++ b/src/addon/erp/pages/base/warehouse/list.vue @@ -30,7 +30,7 @@ - @@ -44,7 +44,7 @@ - + @@ -63,6 +63,8 @@ import useMescroll from '@/components/mescroll/hooks/useMescroll.js'; import { getWarehouseList, deleteWarehouse } from '@/addon/erp/api/base'; import { onShow, onPageScroll, onReachBottom } from '@dcloudio/uni-app'; + import usePermission from '@/utils/usePermission' + const { hasPermission } = usePermission() const { downCallback, mescrollInit, getMescroll } = useMescroll(onPageScroll, onReachBottom); diff --git a/src/addon/erp/pages/canteen/return/add.vue b/src/addon/erp/pages/canteen/return/add.vue index a92e572..c1846a9 100644 --- a/src/addon/erp/pages/canteen/return/add.vue +++ b/src/addon/erp/pages/canteen/return/add.vue @@ -51,13 +51,13 @@ - + + :clear="false" placeholder="请选择仓库" @change="warehouseIdChange"/> - + @@ -170,7 +170,7 @@ - + @@ -35,9 +35,9 @@ import { onLoad } from '@dcloudio/uni-app'; import { getProductTypeSelect, getProductTypeInfo, addProductType, editProductType } from '@/addon/erp/api/product'; import { redirect } from '@/utils/common'; - import { checkBtnPermission } from '@/utils/auth'; import useMemberStore from '@/stores/member' - + import usePermission from '@/utils/usePermission' + const { hasPermission } = usePermission() const memberStore = useMemberStore() const formRef: any = ref(null) @@ -107,8 +107,6 @@ // 保存 const handSave = async() => { - const hasPermission = await checkBtnPermission(memberStore.btnPermission, 'erp_product_type_add') - if (!hasPermission) return formRef.value.validate().then(() => { if (loading.value) return loading.value = true diff --git a/src/addon/erp/pages/product/type/list.vue b/src/addon/erp/pages/product/type/list.vue index a8510c5..88b9eaf 100644 --- a/src/addon/erp/pages/product/type/list.vue +++ b/src/addon/erp/pages/product/type/list.vue @@ -22,7 +22,7 @@ - + @@ -41,12 +41,19 @@ import useMescroll from '@/components/mescroll/hooks/useMescroll.js'; import { getProductTypeList, deleteProductType } from '@/addon/erp/api/product'; import { onShow, onPageScroll, onReachBottom } from '@dcloudio/uni-app'; + import usePermission from '@/utils/usePermission' const { downCallback, mescrollInit, getMescroll } = useMescroll(onPageScroll, onReachBottom); + const { hasPermission } = usePermission() const show = ref(false); - + interface BtnOption { + text: string; + style: { + backgroundColor: string; + }; + } // 获取系统状态栏的高度 let menuButtonInfo : any = {}; // 如果是小程序,获取右上角胶囊的尺寸信息,避免导航栏右侧内容与胶囊重叠(支付宝小程序非本API,尚未兼容) @@ -95,18 +102,28 @@ }) } - const btnOptions = ref([{ - text: t('edit'), - style: { - backgroundColor: '#3c9cff' + const btnOptions = ref([]); + const initBtn = () => { + btnOptions.value = [] + const hasEdit = hasPermission.value('erp_product_type_edit') + const hasDel = hasPermission.value('erp_product_type_delete') + if (hasEdit) { + btnOptions.value.push({ + text: t('edit'), + style: { + backgroundColor: '#3c9cff' + } + }) } - }, { - text: t('delete'), - style: { - backgroundColor: '#f56c6c' + if (hasDel) { + btnOptions.value.push({ + text: t('delete'), + style: { + backgroundColor: '#f56c6c' + } + }) } - }]) - + } const swipeActionRefs = ref([]); const setSwipeActionRef = (index : number) => (el : any[] | null) => { @@ -146,6 +163,7 @@ } }).catch(() => { }); } + initBtn()