فهرست منبع

feat: 添加按钮操作权限逻辑;优化商城和案例兑换功能的用户权限验证

EvilDragon 1 ماه پیش
والد
کامیت
2b7d5b6db4

+ 32 - 3
packages/app/src/composables/permissions.ts

@@ -1,7 +1,7 @@
+import { useRouter } from '../core/utils/router'
 import { useUserStore } from '../store'
 import { storeToRefs } from 'pinia'
 import { computed } from 'vue'
-import { path } from 'node:path'
 export const usePermissions = () => {
   const userStore = useUserStore()
   const { isLogined, isDesigner, userInfo } = storeToRefs(userStore)
@@ -67,10 +67,39 @@ export const usePermissions = () => {
     /**
      * 微信代运营兑换
      */
-    // wechatAgentExchange: isLogined.value,
+    wechatAgentExchange: isLogined.value,
     /**
      * 案例拍摄兑换
      */
+    caseExchange: isLogined.value,
+    /**
+     * 商城兑换
+     */
+    mallExchange: [isLogined.value, isDesigner.value],
   }))
-  return { isLogined, isDesigner, routes, features }
+  /**
+   * 按钮操作权限
+   */
+  const clickByPermission = (
+    name: 'wechatAgentExchange' | 'caseExchange' | 'mallExchange',
+    callback: () => void,
+  ) => {
+    const features = [
+      { name: 'mallExchange', meta: { canNotLogin: false, canNotDesigner: false } },
+      { name: 'wechatAgentExchange', meta: { canNotLogin: false, canNotDesigner: false } },
+    ]
+    const feature = features.find((item) => item.name === name)
+    if (feature) {
+      if (!feature.meta.canNotLogin && !isLogined.value) {
+        useRouter().push('/pages/login/index')
+        return
+      }
+      if (!feature.meta.canNotDesigner && !isDesigner.value) {
+        useRouter().push('/pages/mine/authentication/index')
+        return
+      }
+    }
+    callback()
+  }
+  return { isLogined, isDesigner, routes, features, clickByPermission }
 }

+ 12 - 2
packages/app/src/pages/home/mall/detail/index.vue

@@ -20,10 +20,11 @@ import { useUserStore } from '../../../../store'
 import { storeToRefs } from 'pinia'
 import BottomAppBar from '@/components/bottom-app-bar.vue'
 import ButtonEvo from '@/components/button-evo.vue'
+import { usePermissions } from '../../../../composables/permissions'
 
+const { clickByPermission } = usePermissions()
 const userStore = useUserStore()
 const router = useRouter()
-
 const { userInfo } = storeToRefs(userStore)
 const id = ref()
 const show = ref(false)
@@ -164,7 +165,16 @@ onLoad(async (query: { id: string }) => {
               </div>
             </div>
           </TrapeziumButton> -->
-          <ButtonEvo block size="lg" @click="(show = true), (type = 'orderNow')">
+          <ButtonEvo
+            block
+            size="lg"
+            @click="
+              clickByPermission('mallExchange', () => {
+                show = true
+                type = 'orderNow'
+              })
+            "
+          >
             立即兑换
           </ButtonEvo>
         </div>

+ 10 - 1
packages/app/src/pages/home/spread/product-detail/index.vue

@@ -19,11 +19,13 @@ import { requestToast } from '../../../../core/utils/common'
 import { useUserStore } from '../../../../store'
 import { storeToRefs } from 'pinia'
 import BottomAppBar from '@/components/bottom-app-bar.vue'
+import { usePermissions } from '../../../../composables/permissions'
 
 const userStore = useUserStore()
 const router = useRouter()
 
 const { userInfo } = storeToRefs(userStore)
+const { clickByPermission } = usePermissions()
 const id = ref()
 const show = ref(false)
 const a = ref(1)
@@ -149,7 +151,14 @@ onLoad(async (query: { id: string; title: string; item: string }) => {
           积分
         </div>
         <div class="flex-1"></div>
-        <div @click="(show = true), (type = 'orderNow')">
+        <div
+          @click="
+            clickByPermission('wechatAgentExchange', () => {
+              show = true
+              type = 'orderNow'
+            })
+          "
+        >
           <TiltedButton size="large">立即兑换</TiltedButton>
         </div>
       </div>