import { store } from '../store/index';

// 这里是伪权限指令，只根据角色区分，不区分具体的按钮权限，也就是说所有统一角色的账号拥有的按钮权限都是相同的
function checkPermission(el, binding) {
	try {
		// 获取绑定的值，此处为权限
		const { value } = binding;

		const roles = store.state.userInfos.userInfos.roles;
		// 当传入的指令集为数组时
		if (value && value instanceof Array) {
			// 匹配对应的指令
			const hasPermission = roles.some((point) => {
				return value.includes(point);
			});
			// 如果无法匹配，则表示当前用户无该指令，那么删除对应的功能按钮
			if (!hasPermission) {
				el.parentNode && el.parentNode.removeChild(el);
			}
		} else {
			// eslint-disabled-next-line
			throw new Error('v-permission value is ["admin","editor"]');
		}
	} catch (error) {
        throw new Error('v-permission value is ' + error);
    }
}

export default {
	// 在绑定元素的父组件被挂载后调用
	mounted(el, binding) {
		checkPermission(el, binding);
	},
	// 在包含组件的 VNode 及其子组件的 VNode 更新后调用
	update(el, binding) {
		checkPermission(el, binding);
	},
};
