|
@@ -0,0 +1,27 @@
|
|
|
|
|
+import type { App } from 'vue'
|
|
|
|
|
+import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
|
|
|
|
+
|
|
|
|
|
+const { t } = useI18n() // 国际化
|
|
|
|
|
+
|
|
|
|
|
+export function hasClient(app: App<Element>) {
|
|
|
|
|
+ app.directive('hasClient', (el, binding) => {
|
|
|
|
|
+ const { wsCache } = useCache()
|
|
|
|
|
+ const { value } = binding
|
|
|
|
|
+ const all_client = '*'
|
|
|
|
|
+ const clientIds = wsCache.get(CACHE_KEY.USER).clientIds
|
|
|
|
|
+
|
|
|
|
|
+ if (value && value instanceof Array && value.length > 0) {
|
|
|
|
|
+ const clientFlag = value
|
|
|
|
|
+
|
|
|
|
|
+ const hasClients = clientIds.some((clientId: string) => {
|
|
|
|
|
+ return all_client === clientId || clientFlag.includes(clientId)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ if (!hasClients) {
|
|
|
|
|
+ el.parentNode && el.parentNode.removeChild(el)
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ throw new Error(t('permission.hasClient'))
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+}
|