diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/controller/MagicWorkbenchController.java b/magic-api/src/main/java/org/ssssssss/magicapi/controller/MagicWorkbenchController.java index 6b7a801e..0fac6e55 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/controller/MagicWorkbenchController.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/controller/MagicWorkbenchController.java @@ -101,6 +101,26 @@ public class MagicWorkbenchController extends MagicController implements MagicEx return new JsonBean<>(true); } + @RequestMapping("/user") + @ResponseBody + public JsonBean user(HttpServletRequest request){ + if (configuration.getAuthorizationInterceptor().requireLogin()) { + try { + return new JsonBean<>(configuration.getAuthorizationInterceptor().getUserByToken(request.getHeader(Constants.MAGIC_TOKEN_HEADER))); + } catch (MagicLoginException ignored) { + + } + } + return new JsonBean<>(MagicUser.guest()); + } + + @RequestMapping("/logout") + @ResponseBody + public JsonBean logout(HttpServletRequest request){ + configuration.getAuthorizationInterceptor().logout(request.getHeader(Constants.MAGIC_TOKEN_HEADER)); + return new JsonBean<>(); + } + /** * 创建控制台输出 diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/interceptor/AuthorizationInterceptor.java b/magic-api/src/main/java/org/ssssssss/magicapi/interceptor/AuthorizationInterceptor.java index 9e1b5c39..b30ee09c 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/interceptor/AuthorizationInterceptor.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/interceptor/AuthorizationInterceptor.java @@ -31,6 +31,13 @@ public interface AuthorizationInterceptor { return null; } + /** + * 退出登录 + */ + default void logout(String token){ + + } + /** * 是否拥有页面按钮的权限 */ diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/interceptor/MagicUser.java b/magic-api/src/main/java/org/ssssssss/magicapi/interceptor/MagicUser.java index aaff28c6..8922858c 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/interceptor/MagicUser.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/interceptor/MagicUser.java @@ -37,4 +37,8 @@ public class MagicUser { public void setToken(String token) { this.token = token; } + + public static MagicUser guest(){ + return new MagicUser(null, "guest", null); + } } diff --git a/magic-editor/src/console/src/assets/iconfont/iconfont.css b/magic-editor/src/console/src/assets/iconfont/iconfont.css index cdacc043..7391ec2c 100644 --- a/magic-editor/src/console/src/assets/iconfont/iconfont.css +++ b/magic-editor/src/console/src/assets/iconfont/iconfont.css @@ -11,6 +11,10 @@ -moz-osx-font-smoothing: grayscale; } +.ma-icon-logout:before { + content: "\e65a"; +} + .ma-icon-datasource:before { content: "\e615"; } diff --git a/magic-editor/src/console/src/assets/iconfont/iconfont.ttf b/magic-editor/src/console/src/assets/iconfont/iconfont.ttf index adfbb309..412b5f12 100644 Binary files a/magic-editor/src/console/src/assets/iconfont/iconfont.ttf and b/magic-editor/src/console/src/assets/iconfont/iconfont.ttf differ diff --git a/magic-editor/src/console/src/components/editor/magic-script-editor.vue b/magic-editor/src/console/src/components/editor/magic-script-editor.vue index 5e6c675d..fdca1f17 100644 --- a/magic-editor/src/console/src/components/editor/magic-script-editor.vue +++ b/magic-editor/src/console/src/components/editor/magic-script-editor.vue @@ -192,6 +192,7 @@ export default { bus.$on('doTest', this.doTest) bus.$on('doContinue', this.doContinue) bus.$on('doStepInto', this.doStepInto) + bus.$on('logout', this.closeAll) bus.$on('ready-delete', () => { if (this.info) { bus.$emit('delete-api', this.info) @@ -757,6 +758,12 @@ export default { bus.$emit('opened', {empty: true}) } }, + closeAll() { + let items = [...this.scripts] + items.forEach(element => { + this.close(element.id || element.tmp_id) + }) + }, changed(info) { if (info && info === this.selected) { let index = -1 @@ -816,10 +823,7 @@ export default { { label: '全部关闭', onClick: () => { - let items = [...this.scripts] - items.forEach(element => { - this.close(element.id || element.tmp_id) - }) + this.closeAll() } } ], diff --git a/magic-editor/src/console/src/components/layout/magic-options.vue b/magic-editor/src/console/src/components/layout/magic-options.vue index 6d9963c9..217feab3 100644 --- a/magic-editor/src/console/src/components/layout/magic-options.vue +++ b/magic-editor/src/console/src/components/layout/magic-options.vue @@ -65,6 +65,9 @@ export default { } }) bus.$on('opened', info => { + if(info.empty){ + return; + } this.isApi = info._type === 'api'; this.info = info if (this.isApi) { @@ -156,6 +159,7 @@ export default { color: var(--icon-color); padding: 0 2px; display: inline-block; + vertical-align: top; } .ma-bottom-tab li:hover { diff --git a/magic-editor/src/console/src/components/layout/magic-status-bar.vue b/magic-editor/src/console/src/components/layout/magic-status-bar.vue index 3caf7d08..968240be 100644 --- a/magic-editor/src/console/src/components/layout/magic-status-bar.vue +++ b/magic-editor/src/console/src/components/layout/magic-status-bar.vue @@ -1,27 +1,51 @@ diff --git a/magic-editor/src/console/src/components/magic-editor.vue b/magic-editor/src/console/src/components/magic-editor.vue index 3b603308..cce195ab 100644 --- a/magic-editor/src/console/src/components/magic-editor.vue +++ b/magic-editor/src/console/src/components/magic-editor.vue @@ -89,6 +89,7 @@ export default { this.$refs.apiList.initData() this.$refs.functionList.initData() this.$refs.datasourceList.initData() + bus.$emit('login'); } } }, @@ -179,6 +180,7 @@ export default { this.toolbarIndex = 1 } }) + bus.$on('logout', ()=> this.showLogin = true) }, destroyed() { bus.$off(); diff --git a/magic-editor/src/console/src/components/resources/magic-api-list.vue b/magic-editor/src/console/src/components/resources/magic-api-list.vue index 90b18471..9427581e 100644 --- a/magic-editor/src/console/src/components/resources/magic-api-list.vue +++ b/magic-editor/src/console/src/components/resources/magic-api-list.vue @@ -753,6 +753,7 @@ export default { } }, mounted() { + this.bus.$on('logout', () => this.tree = []) this.bus.$on('opened', item => { this.currentFileItem = item }) diff --git a/magic-editor/src/console/src/components/resources/magic-datasource-list.vue b/magic-editor/src/console/src/components/resources/magic-datasource-list.vue index 1bfd59ae..0ef95178 100644 --- a/magic-editor/src/console/src/components/resources/magic-datasource-list.vue +++ b/magic-editor/src/console/src/components/resources/magic-datasource-list.vue @@ -106,7 +106,6 @@ export default { }, // 初始化数据 initData() { - this.tree = [] request.send('datasource/list').success(data => { this.datasources = data; JavaClass.setExtensionAttribute('org.ssssssss.magicapi.modules.SQLModule',this.datasources.filter(it => it.key).map(it => { @@ -274,6 +273,7 @@ export default { } }, mounted() { + this.bus.$on('logout', () => this.datasources = []); this.bus.$on('refresh-resource',() => { this.initData() }) diff --git a/magic-editor/src/console/src/components/resources/magic-function-list.vue b/magic-editor/src/console/src/components/resources/magic-function-list.vue index 73ff7b29..678d8bd0 100644 --- a/magic-editor/src/console/src/components/resources/magic-function-list.vue +++ b/magic-editor/src/console/src/components/resources/magic-function-list.vue @@ -702,6 +702,7 @@ export default { }, mounted() { JavaClass.setupOnlineFunction(this.doFindFunction); + this.bus.$on('logout', () => this.tree = []); this.bus.$on('opened', item => { this.currentFileItem = item }) diff --git a/magic-editor/src/console/src/scripts/store.js b/magic-editor/src/console/src/scripts/store.js index bd3c8840..99896f66 100644 --- a/magic-editor/src/console/src/scripts/store.js +++ b/magic-editor/src/console/src/scripts/store.js @@ -9,6 +9,10 @@ class Store { localStorage.setItem(key, value); } + remove(key) { + localStorage.removeItem(key) + } + get(key) { return localStorage.getItem(key); }