| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- let hooks, pluginModule;
- /**
- * type component 组件
- * listener 监听函数
- * mulit 是否绑定多个监听函数
- */
- hooks = {
- /**
- * 第三方登录 //可参考 yapi-plugin-qsso 插件
- */
- third_login: {
- type: 'component',
- mulit: false,
- listener: null
- },
- /**
- * 导入数据
- * @param Object importDataModule
- *
- * @info
- * 可参考 vendors/exts/yapi-plugin-import-swagger插件
- * importDataModule = {};
- */
- import_data: {
- type: 'listener',
- mulit: true,
- listener: []
- },
- /**
- * 导出数据
- * @param Object exportDataModule
- * @param projectId
- * @info
- * exportDataModule = {};
- * exportDataModule.pdf = {
- * name: 'Pdf',
- * route: '/api/plugin/export/pdf',
- * desc: '导出项目接口文档为 pdf 文件'
- * }
- */
- export_data: {
- type: 'listener',
- mulit: true,
- listener: []
- },
- /**
- * 接口页面 tab 钩子
- * @param InterfaceTabs
- *
- * @info
- * 可参考 vendors/exts/yapi-plugin-advanced-mock
- * let InterfaceTabs = {
- view: {
- component: View,
- name: '预览'
- },
- edit: {
- component: Edit,
- name: '编辑'
- },
- run: {
- component: Run,
- name: '运行'
- }
- }
- */
- interface_tab: {
- type: 'listener',
- mulit: true,
- listener: []
- },
- /**
- * header下拉菜单 menu 钩子
- * @param HeaderMenu
- *
- * @info
- * 可参考 vendors/exts/yapi-plugin-statistics
- * let HeaderMenu = {
- user: {
- path: '/user/profile',
- name: '个人中心',
- icon: 'user',
- adminFlag: false
- },
- star: {
- path: '/follow',
- name: '我的关注',
- icon: 'star-o',
- adminFlag: false
- },
- solution: {
- path: '/user/list',
- name: '用户管理',
- icon: 'solution',
- adminFlag: true
- },
- logout: {
- path: '',
- name: '退出',
- icon: 'logout',
- adminFlag: false
- }
- };
- */
- header_menu: {
- type: 'listener',
- mulit: true,
- listener: []
- },
- /**
- * Route路由列表钩子
- * @param AppRoute
- *
- * @info
- * 可参考 vendors/exts/yapi-plugin-statistics
- * 添加位置在Application.js 中
- * let AppRoute = {
- home: {
- path: '/',
- component: Home
- },
- group: {
- path: '/group',
- component: Group
- },
- project: {
- path: '/project/:id',
- component: Project
- },
- user: {
- path: '/user',
- component: User
- },
- follow: {
- path: '/follow',
- component: Follows
- },
- addProject: {
- path: '/add-project',
- component: AddProject
- },
- login: {
- path: '/login',
- component: Login
- }
- };
- };
- */
- app_route: {
- type: 'listener',
- mulit: true,
- listener: []
- },
- /*
- * 添加 reducer
- * @param Object reducerModules
- *
- * @info
- * importDataModule = {};
- */
- add_reducer: {
- type: 'listener',
- mulit: true,
- listener: []
- },
- /*
- * 添加 subnav 钩子
- * @param Object reducerModules
- *
- * let routers = {
- interface: { name: '接口', path: "/project/:id/interface/:action", component:Interface },
- activity: { name: '动态', path: "/project/:id/activity", component: Activity},
- data: { name: '数据管理', path: "/project/:id/data", component: ProjectData},
- members: { name: '成员管理', path: "/project/:id/members" , component: ProjectMember},
- setting: { name: '设置', path: "/project/:id/setting" , component: Setting}
- }
- */
- sub_nav: {
- type: 'listener',
- mulit: true,
- listener: []
- },
- /*
- * 添加项目设置 nav
- * @param Object routers
- *
- * let routers = {
- interface: { name: 'xxx', component: Xxx },
- }
- */
- sub_setting_nav:{
- type: 'listener',
- mulit: true,
- listener: []
- }
- };
- function bindHook(name, listener) {
- if (!name) {
- throw new Error('缺少hookname');
- }
- if (name in hooks === false) {
- throw new Error('不存在的hookname');
- }
- if (hooks[name].mulit === true) {
- hooks[name].listener.push(listener);
- } else {
- hooks[name].listener = listener;
- }
- }
- function emitHook(name, ...args) {
- if (!hooks[name]) {
- throw new Error('不存在的hook name');
- }
- let hook = hooks[name];
- if (hook.mulit === true && hook.type === 'listener') {
- if (Array.isArray(hook.listener)) {
- let promiseAll = [];
- hook.listener.forEach(item => {
- if (typeof item === 'function') {
- promiseAll.push(Promise.resolve(item.call(pluginModule, ...args)));
- }
- });
- return Promise.all(promiseAll);
- }
- } else if (hook.mulit === false && hook.type === 'listener') {
- if (typeof hook.listener === 'function') {
- return Promise.resolve(hook.listener.call(pluginModule, ...args));
- }
- } else if (hook.type === 'component') {
- return hook.listener;
- }
- }
- pluginModule = {
- hooks: hooks,
- bindHook: bindHook,
- emitHook: emitHook
- };
- let pluginModuleList;
- try {
- pluginModuleList = require('./plugin-module.js');
- } catch (err) {
- pluginModuleList = {};
- }
- Object.keys(pluginModuleList).forEach(plugin => {
- if (!pluginModuleList[plugin]) return null;
- if (pluginModuleList[plugin] && typeof pluginModuleList[plugin].module === 'function') {
- pluginModuleList[plugin].module.call(pluginModule, pluginModuleList[plugin].options);
- }
- });
- module.exports = pluginModule;
|