@ibiz-template/vue3-components 0.7.11 → 0.7.13-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index-Ky5xo5V5.js +4 -0
- package/dist/index-WP6TUdg-.js +1 -0
- package/dist/index-kgWpXafW.js +1 -0
- package/dist/index.min.css +1 -1
- package/dist/index.system.min.js +1 -1
- package/dist/wang-editor-PQvDXaA9.js +1 -0
- package/dist/{xlsx-util-lBpTaCO_.js → xlsx-util-OSsMvylt.js} +1 -1
- package/es/control/context-menu/context-menu.d.ts +1 -0
- package/es/control/context-menu/context-menu.mjs +8 -0
- package/es/control/context-menu/index.d.ts +1 -0
- package/es/control/dashboard/custom-dashboard-container/custom-dashboard-container.d.ts +2 -0
- package/es/control/form/form-detail/form-group-panel/form-group-panel.mjs +1 -1
- package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/repeater-grid/repeater-grid.d.ts +2 -0
- package/es/control/grid/grid/grid.mjs +0 -1
- package/es/control/kanban/kanban.mjs +1 -1
- package/es/control/list/list.mjs +2 -2
- package/es/control/search-bar/filter-tree/filter-tree.mjs +2 -2
- package/es/control/toolbar/export-excel/export-excel.css +1 -1
- package/es/editor/autocomplete/autocomplete-editor.controller.mjs +4 -1
- package/es/editor/cascader/ibiz-cascader/ibiz-cascader.mjs +3 -1
- package/es/editor/code/monaco-editor/monaco-editor.mjs +3 -3
- package/es/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.mjs +1 -1
- package/es/editor/data-picker/ibiz-picker-select-view/ibiz-picker-select-view.mjs +2 -1
- package/es/editor/data-picker/picker-editor.controller.mjs +12 -3
- package/es/editor/date-range/ibiz-date-range-picker/ibiz-date-range-picker.mjs +1 -1
- package/es/editor/html/wang-editor/wang-editor.mjs +7 -7
- package/es/editor/list-box/list-box-picker-editor.controller.mjs +4 -1
- package/es/editor/markdown/markdown-editor.controller.mjs +2 -2
- package/es/editor/not-supported-editor/not-supported-editor.mjs +4 -2
- package/es/editor/preset/preset-rawitem/ibiz-preset-rawitem/ibiz-preset-rawitem.mjs +4 -2
- package/es/editor/span/span-editor.controller.mjs +4 -1
- package/es/editor/text-box/ibiz-input-ip/ibiz-input-ip.mjs +3 -1
- package/es/editor/text-box/text-box-editor.controller.mjs +4 -4
- package/es/editor/upload/ibiz-file-upload/ibiz-file-upload.mjs +7 -3
- package/es/editor/user/ibiz-searchcond-edit/ibiz-searchcond-edit.mjs +1 -1
- package/es/locale/en/index.d.ts +550 -44
- package/es/locale/en/index.mjs +554 -48
- package/es/locale/zh-CN/index.d.ts +548 -44
- package/es/locale/zh-CN/index.mjs +552 -48
- package/es/panel-component/auth-captcha/auth-captcha.controller.d.ts +57 -0
- package/es/panel-component/auth-captcha/auth-captcha.controller.mjs +123 -0
- package/es/panel-component/auth-captcha/auth-captcha.css +1 -0
- package/es/panel-component/auth-captcha/auth-captcha.d.ts +29 -0
- package/es/panel-component/auth-captcha/auth-captcha.mjs +72 -0
- package/es/panel-component/auth-captcha/auth-captcha.provider.d.ts +14 -0
- package/es/panel-component/auth-captcha/auth-captcha.provider.mjs +21 -0
- package/es/panel-component/auth-captcha/auth-captcha.state.d.ts +45 -0
- package/es/panel-component/auth-captcha/auth-captcha.state.mjs +51 -0
- package/es/panel-component/auth-captcha/index.d.ts +26 -0
- package/es/panel-component/auth-captcha/index.mjs +15 -0
- package/es/panel-component/auth-userinfo/auth-userinfo.mjs +1 -1
- package/es/panel-component/index.mjs +4 -0
- package/es/panel-component/nav-pos-index/nav-pos-index.mjs +2 -2
- package/es/panel-component/nav-tabs/nav-tabs.mjs +4 -4
- package/es/panel-component/panel-button/panel-button.controller.mjs +7 -1
- package/es/panel-component/panel-remember-me/panel-remember-me.mjs +1 -1
- package/es/panel-component/panel-tab-panel/index.d.ts +4 -2
- package/es/panel-component/panel-tab-panel/panel-tab-panel.controller.d.ts +31 -0
- package/es/panel-component/panel-tab-panel/panel-tab-panel.controller.mjs +42 -0
- package/es/panel-component/panel-tab-panel/panel-tab-panel.d.ts +5 -3
- package/es/panel-component/panel-tab-panel/panel-tab-panel.mjs +14 -5
- package/es/panel-component/panel-tab-panel/panel-tab-panel.provider.d.ts +2 -1
- package/es/panel-component/panel-tab-panel/panel-tab-panel.provider.mjs +2 -2
- package/es/panel-component/panel-tab-panel/panel-tab-panel.state.d.ts +20 -0
- package/es/panel-component/panel-tab-panel/panel-tab-panel.state.mjs +24 -0
- package/es/panel-component/searchform-buttons/searchform-buttons.controller.mjs +3 -1
- package/es/panel-component/searchform-buttons/searchform-buttons.mjs +16 -11
- package/es/panel-component/short-cut/index.d.ts +43 -0
- package/es/panel-component/short-cut/index.mjs +12 -0
- package/es/panel-component/short-cut/short-cut.css +1 -0
- package/es/panel-component/short-cut/short-cut.d.ts +46 -0
- package/es/panel-component/short-cut/short-cut.mjs +190 -0
- package/es/panel-component/short-cut/short-cut.provider.d.ts +12 -0
- package/es/panel-component/short-cut/short-cut.provider.mjs +21 -0
- package/es/panel-component/user-message/async-action/async-action-preview/async-action-preview.mjs +20 -14
- package/es/panel-component/user-message/async-action/async-action-tab/async-action-tab.mjs +5 -3
- package/es/panel-component/user-message/internal-message/common/internal-message-container/internal-message-container.mjs +1 -1
- package/es/panel-component/user-message/internal-message/internal-message-json/internal-message-json.mjs +3 -3
- package/es/panel-component/user-message/internal-message/internal-message-tab/internal-message-tab.mjs +9 -5
- package/es/panel-component/user-message/user-message.mjs +4 -4
- package/es/view/403-view/403-view.mjs +4 -4
- package/es/view/404-view/404-view.mjs +4 -4
- package/es/view/error-view/error-view.mjs +3 -1
- package/es/view/login-view/login-view.mjs +27 -23
- package/es/view/sub-app-ref-view/sub-app-ref-view.mjs +1 -1
- package/es/view-engine/edit-view.engine.mjs +22 -18
- package/es/view-engine/exp-view.engine.mjs +1 -1
- package/es/view-engine/login-view.engine.d.ts +3 -1
- package/es/view-engine/login-view.engine.mjs +20 -4
- package/es/view-engine/mpickup-view-engine.mjs +1 -1
- package/es/view-engine/opt-view.engine.mjs +2 -2
- package/es/view-engine/tab-exp-view.engine.mjs +2 -2
- package/es/view-engine/wf-dyna-edit-view.engine.mjs +5 -2
- package/es/web-app/guard/auth-guard/auth-guard.mjs +2 -2
- package/es/web-app/util/unauthorized-handler/unauthorized-handler.mjs +3 -1
- package/lib/control/context-menu/context-menu.cjs +8 -0
- package/lib/control/form/form-detail/form-group-panel/form-group-panel.cjs +1 -1
- package/lib/control/grid/grid/grid.cjs +0 -1
- package/lib/control/kanban/kanban.cjs +1 -1
- package/lib/control/list/list.cjs +1 -1
- package/lib/control/search-bar/filter-tree/filter-tree.cjs +2 -2
- package/lib/control/toolbar/export-excel/export-excel.css +1 -1
- package/lib/editor/autocomplete/autocomplete-editor.controller.cjs +4 -1
- package/lib/editor/cascader/ibiz-cascader/ibiz-cascader.cjs +3 -1
- package/lib/editor/code/monaco-editor/monaco-editor.cjs +3 -3
- package/lib/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.cjs +1 -1
- package/lib/editor/data-picker/ibiz-picker-select-view/ibiz-picker-select-view.cjs +2 -1
- package/lib/editor/data-picker/picker-editor.controller.cjs +12 -3
- package/lib/editor/date-range/ibiz-date-range-picker/ibiz-date-range-picker.cjs +1 -1
- package/lib/editor/html/wang-editor/wang-editor.cjs +6 -6
- package/lib/editor/list-box/list-box-picker-editor.controller.cjs +4 -1
- package/lib/editor/markdown/markdown-editor.controller.cjs +2 -2
- package/lib/editor/not-supported-editor/not-supported-editor.cjs +3 -1
- package/lib/editor/preset/preset-rawitem/ibiz-preset-rawitem/ibiz-preset-rawitem.cjs +3 -1
- package/lib/editor/span/span-editor.controller.cjs +4 -1
- package/lib/editor/text-box/ibiz-input-ip/ibiz-input-ip.cjs +3 -1
- package/lib/editor/text-box/text-box-editor.controller.cjs +4 -4
- package/lib/editor/upload/ibiz-file-upload/ibiz-file-upload.cjs +6 -2
- package/lib/editor/user/ibiz-searchcond-edit/ibiz-searchcond-edit.cjs +1 -1
- package/lib/locale/en/index.cjs +554 -48
- package/lib/locale/zh-CN/index.cjs +552 -48
- package/lib/panel-component/auth-captcha/auth-captcha.cjs +74 -0
- package/lib/panel-component/auth-captcha/auth-captcha.controller.cjs +125 -0
- package/lib/panel-component/auth-captcha/auth-captcha.css +1 -0
- package/lib/panel-component/auth-captcha/auth-captcha.provider.cjs +23 -0
- package/lib/panel-component/auth-captcha/auth-captcha.state.cjs +53 -0
- package/lib/panel-component/auth-captcha/index.cjs +20 -0
- package/lib/panel-component/auth-userinfo/auth-userinfo.cjs +1 -1
- package/lib/panel-component/index.cjs +4 -0
- package/lib/panel-component/nav-pos-index/nav-pos-index.cjs +1 -1
- package/lib/panel-component/nav-tabs/nav-tabs.cjs +3 -3
- package/lib/panel-component/panel-button/panel-button.controller.cjs +7 -1
- package/lib/panel-component/panel-remember-me/panel-remember-me.cjs +1 -1
- package/lib/panel-component/panel-tab-panel/panel-tab-panel.cjs +14 -5
- package/lib/panel-component/panel-tab-panel/panel-tab-panel.controller.cjs +44 -0
- package/lib/panel-component/panel-tab-panel/panel-tab-panel.provider.cjs +2 -2
- package/lib/panel-component/panel-tab-panel/panel-tab-panel.state.cjs +26 -0
- package/lib/panel-component/searchform-buttons/searchform-buttons.cjs +15 -10
- package/lib/panel-component/searchform-buttons/searchform-buttons.controller.cjs +3 -1
- package/lib/panel-component/short-cut/index.cjs +17 -0
- package/lib/panel-component/short-cut/short-cut.cjs +192 -0
- package/lib/panel-component/short-cut/short-cut.css +1 -0
- package/lib/panel-component/short-cut/short-cut.provider.cjs +23 -0
- package/lib/panel-component/user-message/async-action/async-action-preview/async-action-preview.cjs +19 -13
- package/lib/panel-component/user-message/async-action/async-action-tab/async-action-tab.cjs +4 -2
- package/lib/panel-component/user-message/internal-message/common/internal-message-container/internal-message-container.cjs +1 -1
- package/lib/panel-component/user-message/internal-message/internal-message-json/internal-message-json.cjs +2 -2
- package/lib/panel-component/user-message/internal-message/internal-message-tab/internal-message-tab.cjs +8 -4
- package/lib/panel-component/user-message/user-message.cjs +4 -4
- package/lib/view/403-view/403-view.cjs +3 -3
- package/lib/view/404-view/404-view.cjs +3 -3
- package/lib/view/error-view/error-view.cjs +3 -1
- package/lib/view/login-view/login-view.cjs +26 -22
- package/lib/view/sub-app-ref-view/sub-app-ref-view.cjs +1 -1
- package/lib/view-engine/edit-view.engine.cjs +22 -18
- package/lib/view-engine/exp-view.engine.cjs +1 -1
- package/lib/view-engine/login-view.engine.cjs +20 -4
- package/lib/view-engine/mpickup-view-engine.cjs +1 -1
- package/lib/view-engine/opt-view.engine.cjs +2 -2
- package/lib/view-engine/tab-exp-view.engine.cjs +2 -2
- package/lib/view-engine/wf-dyna-edit-view.engine.cjs +5 -2
- package/lib/web-app/guard/auth-guard/auth-guard.cjs +2 -2
- package/lib/web-app/util/unauthorized-handler/unauthorized-handler.cjs +3 -1
- package/package.json +6 -5
- package/dist/index-0Z8KS6t6.js +0 -1
- package/dist/index-GZW20-jI.js +0 -4
- package/dist/index-OkS9bkdl.js +0 -1
- package/dist/wang-editor-HlmvPsb1.js +0 -1
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { IPanelRawItem } from '@ibiz/model-core';
|
|
2
|
+
import { PanelItemController, PanelNotifyState } from '@ibiz-template/runtime';
|
|
3
|
+
import { AuthCaptchaState } from './auth-captcha.state';
|
|
4
|
+
/**
|
|
5
|
+
* 人机识别控制器
|
|
6
|
+
*
|
|
7
|
+
* @export
|
|
8
|
+
* @class AuthCaptchaController
|
|
9
|
+
* @extends {PanelItemController<IPanelRawItem>}
|
|
10
|
+
*/
|
|
11
|
+
export declare class AuthCaptchaController extends PanelItemController<IPanelRawItem> {
|
|
12
|
+
state: AuthCaptchaState;
|
|
13
|
+
/**
|
|
14
|
+
* 验证码数据
|
|
15
|
+
*
|
|
16
|
+
* @private
|
|
17
|
+
* @memberof AuthCaptchaController
|
|
18
|
+
*/
|
|
19
|
+
private captcha;
|
|
20
|
+
protected createState(): AuthCaptchaState;
|
|
21
|
+
/**
|
|
22
|
+
* 面板状态变更通知
|
|
23
|
+
*
|
|
24
|
+
* @param {PanelNotifyState} _state
|
|
25
|
+
* @return {*} {Promise<void>}
|
|
26
|
+
* @memberof AuthCaptchaController
|
|
27
|
+
*/
|
|
28
|
+
panelStateNotify(_state: PanelNotifyState): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* 初始化
|
|
31
|
+
*
|
|
32
|
+
* @protected
|
|
33
|
+
* @return {*} {Promise<void>}
|
|
34
|
+
* @memberof AuthCaptchaController
|
|
35
|
+
*/
|
|
36
|
+
protected onInit(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* 值校验
|
|
39
|
+
*
|
|
40
|
+
* @return {*} {Promise<boolean>}
|
|
41
|
+
* @memberof AuthCaptchaController
|
|
42
|
+
*/
|
|
43
|
+
validate(): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* 值改变
|
|
46
|
+
*
|
|
47
|
+
* @memberof AuthCaptchaController
|
|
48
|
+
*/
|
|
49
|
+
onChange(): void;
|
|
50
|
+
/**
|
|
51
|
+
* 加载验证码
|
|
52
|
+
*
|
|
53
|
+
* @return {*} {Promise<void>}ss
|
|
54
|
+
* @memberof AuthCaptchaController
|
|
55
|
+
*/
|
|
56
|
+
loadCaptcha(): Promise<void>;
|
|
57
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { reactive } from 'vue';
|
|
2
|
+
import { PanelItemController } from '@ibiz-template/runtime';
|
|
3
|
+
import axios from 'axios';
|
|
4
|
+
import { AuthCaptchaState } from './auth-captcha.state.mjs';
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
+
var __publicField = (obj, key, value) => {
|
|
10
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
11
|
+
return value;
|
|
12
|
+
};
|
|
13
|
+
class AuthCaptchaController extends PanelItemController {
|
|
14
|
+
constructor() {
|
|
15
|
+
super(...arguments);
|
|
16
|
+
/**
|
|
17
|
+
* 验证码数据
|
|
18
|
+
*
|
|
19
|
+
* @private
|
|
20
|
+
* @memberof AuthCaptchaController
|
|
21
|
+
*/
|
|
22
|
+
__publicField(this, "captcha", reactive({
|
|
23
|
+
"Captcha-State": "",
|
|
24
|
+
"Captcha-Code": ""
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
createState() {
|
|
28
|
+
var _a;
|
|
29
|
+
return new AuthCaptchaState((_a = this.parent) == null ? void 0 : _a.state);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 面板状态变更通知
|
|
33
|
+
*
|
|
34
|
+
* @param {PanelNotifyState} _state
|
|
35
|
+
* @return {*} {Promise<void>}
|
|
36
|
+
* @memberof AuthCaptchaController
|
|
37
|
+
*/
|
|
38
|
+
async panelStateNotify(_state) {
|
|
39
|
+
super.panelStateNotify(_state);
|
|
40
|
+
this.data.captcha = this.captcha;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 初始化
|
|
44
|
+
*
|
|
45
|
+
* @protected
|
|
46
|
+
* @return {*} {Promise<void>}
|
|
47
|
+
* @memberof AuthCaptchaController
|
|
48
|
+
*/
|
|
49
|
+
async onInit() {
|
|
50
|
+
super.onInit();
|
|
51
|
+
await this.loadCaptcha();
|
|
52
|
+
const view = this.panel.view;
|
|
53
|
+
view.hooks.beforeLogin.tapPromise(async (context) => {
|
|
54
|
+
if (!context.parentId || context.parentId === this.dataParent.model.id) {
|
|
55
|
+
context.validate = context.validate && await this.validate();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
view.hooks.afterLogin.tap((context) => {
|
|
59
|
+
if (!context.ok) {
|
|
60
|
+
this.loadCaptcha();
|
|
61
|
+
this.state.code = "";
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 值校验
|
|
67
|
+
*
|
|
68
|
+
* @return {*} {Promise<boolean>}
|
|
69
|
+
* @memberof AuthCaptchaController
|
|
70
|
+
*/
|
|
71
|
+
async validate() {
|
|
72
|
+
if (this.state.code) {
|
|
73
|
+
this.state.error = void 0;
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
this.state.error = "\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801";
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 值改变
|
|
81
|
+
*
|
|
82
|
+
* @memberof AuthCaptchaController
|
|
83
|
+
*/
|
|
84
|
+
onChange() {
|
|
85
|
+
Object.assign(this.captcha, {
|
|
86
|
+
"Captcha-State": this.state.state,
|
|
87
|
+
"Captcha-Code": this.state.code
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 加载验证码
|
|
92
|
+
*
|
|
93
|
+
* @return {*} {Promise<void>}ss
|
|
94
|
+
* @memberof AuthCaptchaController
|
|
95
|
+
*/
|
|
96
|
+
async loadCaptcha() {
|
|
97
|
+
this.state.loading = true;
|
|
98
|
+
const requestConfig = {
|
|
99
|
+
url: "".concat(ibiz.env.baseUrl, "/").concat(ibiz.env.appId, "/auths/captcha"),
|
|
100
|
+
method: "post",
|
|
101
|
+
headers: {
|
|
102
|
+
"Content-Type": "application/json;charset=UTF-8",
|
|
103
|
+
Accept: "application/json"
|
|
104
|
+
},
|
|
105
|
+
data: {}
|
|
106
|
+
};
|
|
107
|
+
try {
|
|
108
|
+
const res = await axios(requestConfig);
|
|
109
|
+
if (res.status === 200 && res.data) {
|
|
110
|
+
this.state.state = res.data.state;
|
|
111
|
+
this.state.image = res.data.image;
|
|
112
|
+
}
|
|
113
|
+
} catch (error) {
|
|
114
|
+
this.state.state = "";
|
|
115
|
+
this.state.image = "";
|
|
116
|
+
} finally {
|
|
117
|
+
this.state.loading = false;
|
|
118
|
+
this.onChange();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export { AuthCaptchaController };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ibiz-auth-captcha{display:flex;position:relative}.ibiz-auth-captcha__captcha{width:calc(100% - 120px)}.ibiz-auth-captcha__image{flex-shrink:0;width:120px;height:100%;cursor:pointer}.ibiz-auth-captcha__image--hint{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--ibiz-color-text-3);background-color:var(--ibiz-color-fill-0)}.ibiz-auth-captcha__error{left:0;top:100%;line-height:1;font-size:12px;padding-top:2px;position:absolute;color:var(--ibiz-color-danger)}.ibiz-auth-captcha.is-error .el-input__wrapper{box-shadow:0 0 0 1px var(--ibiz-color-danger) inset}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { PropType } from 'vue';
|
|
2
|
+
import { IPanelRawItem } from '@ibiz/model-core';
|
|
3
|
+
import { AuthCaptchaController } from './auth-captcha.controller';
|
|
4
|
+
import './auth-captcha.scss';
|
|
5
|
+
export declare const AuthCaptcha: import("vue").DefineComponent<{
|
|
6
|
+
modelData: {
|
|
7
|
+
type: PropType<IPanelRawItem>;
|
|
8
|
+
required: true;
|
|
9
|
+
};
|
|
10
|
+
controller: {
|
|
11
|
+
type: typeof AuthCaptchaController;
|
|
12
|
+
required: true;
|
|
13
|
+
};
|
|
14
|
+
}, {
|
|
15
|
+
c: AuthCaptchaController;
|
|
16
|
+
ns: import("@ibiz-template/core").Namespace;
|
|
17
|
+
classArr: import("vue").ComputedRef<(string | false)[]>;
|
|
18
|
+
onClick: () => void;
|
|
19
|
+
onChange: () => void;
|
|
20
|
+
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
21
|
+
modelData: {
|
|
22
|
+
type: PropType<IPanelRawItem>;
|
|
23
|
+
required: true;
|
|
24
|
+
};
|
|
25
|
+
controller: {
|
|
26
|
+
type: typeof AuthCaptchaController;
|
|
27
|
+
required: true;
|
|
28
|
+
};
|
|
29
|
+
}>>, {}, {}>;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { computed, resolveComponent, createVNode, resolveDirective, withDirectives, defineComponent } from 'vue';
|
|
2
|
+
import { useNamespace } from '@ibiz-template/vue3-util';
|
|
3
|
+
import { AuthCaptchaController } from './auth-captcha.controller.mjs';
|
|
4
|
+
import './auth-captcha.css';
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
const AuthCaptcha = /* @__PURE__ */ defineComponent({
|
|
8
|
+
name: "IBizAuthCaptcha",
|
|
9
|
+
props: {
|
|
10
|
+
modelData: {
|
|
11
|
+
type: Object,
|
|
12
|
+
required: true
|
|
13
|
+
},
|
|
14
|
+
controller: {
|
|
15
|
+
type: AuthCaptchaController,
|
|
16
|
+
required: true
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
setup(props) {
|
|
20
|
+
const ns = useNamespace("auth-captcha");
|
|
21
|
+
const c = props.controller;
|
|
22
|
+
const classArr = computed(() => {
|
|
23
|
+
let result = [ns.b(), ns.m(c.model.id)];
|
|
24
|
+
result = [...result, ...props.controller.containerClass, ns.is("hidden", !props.controller.state.visible), ns.is("error", !!c.state.error)];
|
|
25
|
+
return result;
|
|
26
|
+
});
|
|
27
|
+
const onClick = () => {
|
|
28
|
+
if (!c.state.loading) {
|
|
29
|
+
c.loadCaptcha();
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const onChange = () => {
|
|
33
|
+
c.onChange();
|
|
34
|
+
c.validate();
|
|
35
|
+
};
|
|
36
|
+
return {
|
|
37
|
+
c,
|
|
38
|
+
ns,
|
|
39
|
+
classArr,
|
|
40
|
+
onClick,
|
|
41
|
+
onChange
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
render() {
|
|
45
|
+
return createVNode("div", {
|
|
46
|
+
"class": this.classArr
|
|
47
|
+
}, [createVNode(resolveComponent("el-input"), {
|
|
48
|
+
"modelValue": this.c.state.code,
|
|
49
|
+
"onUpdate:modelValue": ($event) => this.c.state.code = $event,
|
|
50
|
+
"class": this.ns.e("captcha"),
|
|
51
|
+
"onInput": this.onChange,
|
|
52
|
+
"onBlur": this.onChange,
|
|
53
|
+
"placeholder": "\u9A8C\u8BC1\u7801"
|
|
54
|
+
}, null), withDirectives(createVNode(resolveComponent("el-image"), {
|
|
55
|
+
"src": this.c.state.image,
|
|
56
|
+
"class": this.ns.e("image"),
|
|
57
|
+
"onClick": this.onClick,
|
|
58
|
+
"title": "\u70B9\u51FB\u56FE\u7247\u5237\u65B0"
|
|
59
|
+
}, {
|
|
60
|
+
error: () => {
|
|
61
|
+
return createVNode("div", {
|
|
62
|
+
"onClick": this.onClick,
|
|
63
|
+
"class": [this.ns.em("image", "hint"), this.ns.is("loading", this.c.state.loading)]
|
|
64
|
+
}, [this.c.state.loading ? "\u52A0\u8F7D\u4E2D..." : "\u52A0\u8F7D\u5931\u8D25"]);
|
|
65
|
+
}
|
|
66
|
+
}), [[resolveDirective("loading"), this.c.state.loading]]), this.c.state.error && createVNode("div", {
|
|
67
|
+
"class": this.ns.e("error")
|
|
68
|
+
}, [this.c.state.error])]);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
export { AuthCaptcha };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IPanelItemProvider, PanelController, PanelItemController } from '@ibiz-template/runtime';
|
|
2
|
+
import { IPanelItem } from '@ibiz/model-core';
|
|
3
|
+
import { AuthCaptchaController } from './auth-captcha.controller';
|
|
4
|
+
/**
|
|
5
|
+
* 人机识别适配器
|
|
6
|
+
*
|
|
7
|
+
* @export
|
|
8
|
+
* @class AuthCaptchaProvider
|
|
9
|
+
* @implements {IPanelItemProvider}
|
|
10
|
+
*/
|
|
11
|
+
export declare class AuthCaptchaProvider implements IPanelItemProvider {
|
|
12
|
+
component: string;
|
|
13
|
+
createController(panelItem: IPanelItem, panel: PanelController, parent: PanelItemController | undefined): Promise<AuthCaptchaController>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AuthCaptchaController } from './auth-captcha.controller.mjs';
|
|
2
|
+
|
|
3
|
+
"use strict";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __publicField = (obj, key, value) => {
|
|
7
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
8
|
+
return value;
|
|
9
|
+
};
|
|
10
|
+
class AuthCaptchaProvider {
|
|
11
|
+
constructor() {
|
|
12
|
+
__publicField(this, "component", "IBizAuthCaptcha");
|
|
13
|
+
}
|
|
14
|
+
async createController(panelItem, panel, parent) {
|
|
15
|
+
const c = new AuthCaptchaController(panelItem, panel, parent);
|
|
16
|
+
await c.init();
|
|
17
|
+
return c;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { AuthCaptchaProvider };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { PanelItemState } from '@ibiz-template/runtime';
|
|
2
|
+
/**
|
|
3
|
+
* 人机识别状态
|
|
4
|
+
*
|
|
5
|
+
* @export
|
|
6
|
+
* @class AuthCaptchaState
|
|
7
|
+
* @extends {PanelItemState}
|
|
8
|
+
*/
|
|
9
|
+
export declare class AuthCaptchaState extends PanelItemState {
|
|
10
|
+
/**
|
|
11
|
+
* 验证码
|
|
12
|
+
*
|
|
13
|
+
* @type {string}
|
|
14
|
+
* @memberof AuthCaptchaState
|
|
15
|
+
*/
|
|
16
|
+
code: string;
|
|
17
|
+
/**
|
|
18
|
+
* 验证图片
|
|
19
|
+
*
|
|
20
|
+
* @type {string}
|
|
21
|
+
* @memberof AuthCaptchaState
|
|
22
|
+
*/
|
|
23
|
+
image: string;
|
|
24
|
+
/**
|
|
25
|
+
* 验证UUID码
|
|
26
|
+
*
|
|
27
|
+
* @type {string}
|
|
28
|
+
* @memberof AuthCaptchaState
|
|
29
|
+
*/
|
|
30
|
+
state: string;
|
|
31
|
+
/**
|
|
32
|
+
* 加载状态
|
|
33
|
+
*
|
|
34
|
+
* @type {boolean}
|
|
35
|
+
* @memberof AuthCaptchaState
|
|
36
|
+
*/
|
|
37
|
+
loading: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* 错误信息
|
|
40
|
+
*
|
|
41
|
+
* @type {string}
|
|
42
|
+
* @memberof AuthCaptchaState
|
|
43
|
+
*/
|
|
44
|
+
error?: string;
|
|
45
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { PanelItemState } from '@ibiz-template/runtime';
|
|
2
|
+
|
|
3
|
+
"use strict";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __publicField = (obj, key, value) => {
|
|
7
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
8
|
+
return value;
|
|
9
|
+
};
|
|
10
|
+
class AuthCaptchaState extends PanelItemState {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
/**
|
|
14
|
+
* 验证码
|
|
15
|
+
*
|
|
16
|
+
* @type {string}
|
|
17
|
+
* @memberof AuthCaptchaState
|
|
18
|
+
*/
|
|
19
|
+
__publicField(this, "code", "");
|
|
20
|
+
/**
|
|
21
|
+
* 验证图片
|
|
22
|
+
*
|
|
23
|
+
* @type {string}
|
|
24
|
+
* @memberof AuthCaptchaState
|
|
25
|
+
*/
|
|
26
|
+
__publicField(this, "image", "");
|
|
27
|
+
/**
|
|
28
|
+
* 验证UUID码
|
|
29
|
+
*
|
|
30
|
+
* @type {string}
|
|
31
|
+
* @memberof AuthCaptchaState
|
|
32
|
+
*/
|
|
33
|
+
__publicField(this, "state", "");
|
|
34
|
+
/**
|
|
35
|
+
* 加载状态
|
|
36
|
+
*
|
|
37
|
+
* @type {boolean}
|
|
38
|
+
* @memberof AuthCaptchaState
|
|
39
|
+
*/
|
|
40
|
+
__publicField(this, "loading", false);
|
|
41
|
+
/**
|
|
42
|
+
* 错误信息
|
|
43
|
+
*
|
|
44
|
+
* @type {string}
|
|
45
|
+
* @memberof AuthCaptchaState
|
|
46
|
+
*/
|
|
47
|
+
__publicField(this, "error");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export { AuthCaptchaState };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const IBizAuthCaptcha: import("@ibiz-template/vue3-util").TypeWithInstall<import("vue").DefineComponent<{
|
|
2
|
+
modelData: {
|
|
3
|
+
type: import("vue").PropType<import("@ibiz/model-core").IPanelRawItem>;
|
|
4
|
+
required: true;
|
|
5
|
+
};
|
|
6
|
+
controller: {
|
|
7
|
+
type: typeof import("./auth-captcha.controller").AuthCaptchaController;
|
|
8
|
+
required: true;
|
|
9
|
+
};
|
|
10
|
+
}, {
|
|
11
|
+
c: import("./auth-captcha.controller").AuthCaptchaController;
|
|
12
|
+
ns: import("@ibiz-template/core").Namespace;
|
|
13
|
+
classArr: import("vue").ComputedRef<(string | false)[]>;
|
|
14
|
+
onClick: () => void;
|
|
15
|
+
onChange: () => void;
|
|
16
|
+
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
17
|
+
modelData: {
|
|
18
|
+
type: import("vue").PropType<import("@ibiz/model-core").IPanelRawItem>;
|
|
19
|
+
required: true;
|
|
20
|
+
};
|
|
21
|
+
controller: {
|
|
22
|
+
type: typeof import("./auth-captcha.controller").AuthCaptchaController;
|
|
23
|
+
required: true;
|
|
24
|
+
};
|
|
25
|
+
}>>, {}, {}>>;
|
|
26
|
+
export default IBizAuthCaptcha;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { withInstall } from '@ibiz-template/vue3-util';
|
|
2
|
+
import { registerPanelItemProvider } from '@ibiz-template/runtime';
|
|
3
|
+
import { AuthCaptcha } from './auth-captcha.mjs';
|
|
4
|
+
import { AuthCaptchaProvider } from './auth-captcha.provider.mjs';
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
const IBizAuthCaptcha = withInstall(AuthCaptcha, function(v) {
|
|
8
|
+
v.component(AuthCaptcha.name, AuthCaptcha);
|
|
9
|
+
registerPanelItemProvider(
|
|
10
|
+
"RAWITEM_AUTH_CAPTCHA",
|
|
11
|
+
() => new AuthCaptchaProvider()
|
|
12
|
+
);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export { IBizAuthCaptcha, IBizAuthCaptcha as default };
|
|
@@ -22,7 +22,7 @@ const AuthUserinfo = /* @__PURE__ */ defineComponent({
|
|
|
22
22
|
const ns = useNamespace("user-info");
|
|
23
23
|
const c = prop.controller;
|
|
24
24
|
const {
|
|
25
|
-
srfusername = "
|
|
25
|
+
srfusername = ibiz.i18n.t("panelComponent.authUserinfo.visitor"),
|
|
26
26
|
srfpersonname
|
|
27
27
|
} = ((_a = ibiz.appData) == null ? void 0 : _a.context) || {};
|
|
28
28
|
const router = useRouter();
|
|
@@ -22,6 +22,8 @@ import { IBizCoopPos } from './coop-pos/index.mjs';
|
|
|
22
22
|
import { IBizViewMsgPos } from './view-msg-pos/index.mjs';
|
|
23
23
|
import { IBizUserAction } from './user-action/index.mjs';
|
|
24
24
|
import { IBizDataImport } from './data-import/index.mjs';
|
|
25
|
+
import { IBizShortCut } from './short-cut/index.mjs';
|
|
26
|
+
import { IBizAuthCaptcha } from './auth-captcha/index.mjs';
|
|
25
27
|
export { NavPosIndexState } from './nav-pos-index/nav-pos-index.state.mjs';
|
|
26
28
|
export { NavPosIndexController } from './nav-pos-index/nav-pos-index.controller.mjs';
|
|
27
29
|
export { PanelButtonController } from './panel-button/panel-button.controller.mjs';
|
|
@@ -69,6 +71,8 @@ const IBizPanelComponents = {
|
|
|
69
71
|
v.use(IBizViewMsgPos);
|
|
70
72
|
v.use(IBizUserAction);
|
|
71
73
|
v.use(IBizDataImport);
|
|
74
|
+
v.use(IBizShortCut);
|
|
75
|
+
v.use(IBizAuthCaptcha);
|
|
72
76
|
}
|
|
73
77
|
};
|
|
74
78
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolveComponent, createVNode,
|
|
1
|
+
import { resolveComponent, createVNode, defineComponent } from 'vue';
|
|
2
2
|
import { useNamespace, onRouteChange } from '@ibiz-template/vue3-util';
|
|
3
3
|
import { useRouter, useRoute } from 'vue-router';
|
|
4
4
|
import { NavPosIndexController } from './nav-pos-index.controller.mjs';
|
|
@@ -80,7 +80,7 @@ const NavPosIndex = /* @__PURE__ */ defineComponent({
|
|
|
80
80
|
default: () => [Component && createVNode(Component, null, null)]
|
|
81
81
|
});
|
|
82
82
|
}
|
|
83
|
-
}) : createVNode("div", null, [
|
|
83
|
+
}) : createVNode("div", null, [ibiz.i18n.t("panelComponent.navPosIndex.noSupportPrompt")])]);
|
|
84
84
|
}
|
|
85
85
|
});
|
|
86
86
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isVNode, watch, resolveComponent, createVNode,
|
|
1
|
+
import { isVNode, watch, resolveComponent, createVNode, defineComponent } from 'vue';
|
|
2
2
|
import { useNamespace } from '@ibiz-template/vue3-util';
|
|
3
3
|
import './nav-tabs.css';
|
|
4
4
|
import { NavTabsController } from './nav-tabs.controller.mjs';
|
|
@@ -26,10 +26,10 @@ const NavTabs = /* @__PURE__ */ defineComponent({
|
|
|
26
26
|
state
|
|
27
27
|
} = props.controller;
|
|
28
28
|
const actions = [{
|
|
29
|
-
text: "
|
|
29
|
+
text: ibiz.i18n.t("panelComponent.navTabs.closeAll"),
|
|
30
30
|
value: "closeAll"
|
|
31
31
|
}, {
|
|
32
|
-
text: "
|
|
32
|
+
text: ibiz.i18n.t("panelComponent.navTabs.closeOther"),
|
|
33
33
|
value: "closeOther"
|
|
34
34
|
}];
|
|
35
35
|
const changePage = (pane) => {
|
|
@@ -107,7 +107,7 @@ const NavTabs = /* @__PURE__ */ defineComponent({
|
|
|
107
107
|
"size": "small",
|
|
108
108
|
"type": "primary"
|
|
109
109
|
}, {
|
|
110
|
-
default: () => [
|
|
110
|
+
default: () => [ibiz.i18n.t("app.more"), createVNode("ion-icon", {
|
|
111
111
|
"name": "arrow-down"
|
|
112
112
|
}, null)]
|
|
113
113
|
});
|
|
@@ -99,13 +99,19 @@ class PanelButtonController extends PanelItemController {
|
|
|
99
99
|
}
|
|
100
100
|
event.stopPropagation();
|
|
101
101
|
event.preventDefault();
|
|
102
|
+
const view = this.panel.view;
|
|
103
|
+
if (actionType === "UIACTION" && uiactionId === "login" && view.model.viewType === "APPLOGINVIEW" && !await view.validate(
|
|
104
|
+
this.dataParent.model.id
|
|
105
|
+
)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
102
108
|
await UIActionUtil.execAndResolved(
|
|
103
109
|
uiactionId,
|
|
104
110
|
{
|
|
105
111
|
context: this.panel.context,
|
|
106
112
|
params: this.panel.params,
|
|
107
113
|
data: [this.data],
|
|
108
|
-
view
|
|
114
|
+
view,
|
|
109
115
|
event,
|
|
110
116
|
noWaitRoute: true
|
|
111
117
|
},
|
|
@@ -45,7 +45,7 @@ const PanelRememberMe = /* @__PURE__ */ defineComponent({
|
|
|
45
45
|
}, [createVNode(resolveComponent("el-checkbox"), {
|
|
46
46
|
"modelValue": this.isRemember,
|
|
47
47
|
"onUpdate:modelValue": ($event) => this.isRemember = $event,
|
|
48
|
-
"label": "
|
|
48
|
+
"label": ibiz.i18n.t("app.rememberMe")
|
|
49
49
|
}, null)]);
|
|
50
50
|
}
|
|
51
51
|
});
|
|
@@ -4,19 +4,21 @@ export declare const IBizPanelTabPanel: import("@ibiz-template/vue3-util").TypeW
|
|
|
4
4
|
required: true;
|
|
5
5
|
};
|
|
6
6
|
controller: {
|
|
7
|
-
type: typeof import("
|
|
7
|
+
type: typeof import("./panel-tab-panel.controller").PanelTabPanelController;
|
|
8
8
|
required: true;
|
|
9
9
|
};
|
|
10
10
|
}, {
|
|
11
11
|
ns: import("@ibiz-template/core").Namespace;
|
|
12
|
+
state: import("./panel-tab-panel.state").PanelTabPanelState;
|
|
12
13
|
classArr: import("vue").ComputedRef<(string | false)[]>;
|
|
14
|
+
onTabClick: (tabIns: IData, event: MouseEvent) => void;
|
|
13
15
|
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
14
16
|
modelData: {
|
|
15
17
|
type: import("vue").PropType<import("@ibiz/model-core").IPanelTabPanel>;
|
|
16
18
|
required: true;
|
|
17
19
|
};
|
|
18
20
|
controller: {
|
|
19
|
-
type: typeof import("
|
|
21
|
+
type: typeof import("./panel-tab-panel.controller").PanelTabPanelController;
|
|
20
22
|
required: true;
|
|
21
23
|
};
|
|
22
24
|
}>>, {}, {}>>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { PanelItemController } from '@ibiz-template/runtime';
|
|
2
|
+
import { IPanelTabPanel } from '@ibiz/model-core';
|
|
3
|
+
import { PanelTabPanelState } from './panel-tab-panel.state';
|
|
4
|
+
export declare class PanelTabPanelController extends PanelItemController<IPanelTabPanel> {
|
|
5
|
+
state: PanelTabPanelState;
|
|
6
|
+
/**
|
|
7
|
+
* 新建状态
|
|
8
|
+
*
|
|
9
|
+
* @author tony001
|
|
10
|
+
* @date 2024-05-12 14:05:16
|
|
11
|
+
* @protected
|
|
12
|
+
* @return {*} {PanelTabPanelState}
|
|
13
|
+
*/
|
|
14
|
+
protected createState(): PanelTabPanelState;
|
|
15
|
+
/**
|
|
16
|
+
* 初始化
|
|
17
|
+
*
|
|
18
|
+
* @author tony001
|
|
19
|
+
* @date 2024-05-12 14:05:51
|
|
20
|
+
* @return {*} {Promise<void>}
|
|
21
|
+
*/
|
|
22
|
+
onInit(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* 分页点击切换处理
|
|
25
|
+
*
|
|
26
|
+
* @author tony001
|
|
27
|
+
* @date 2024-05-12 14:05:11
|
|
28
|
+
* @param {string} tabId
|
|
29
|
+
*/
|
|
30
|
+
onTabChange(tabId: string): void;
|
|
31
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { PanelItemController } from '@ibiz-template/runtime';
|
|
2
|
+
import { PanelTabPanelState } from './panel-tab-panel.state.mjs';
|
|
3
|
+
|
|
4
|
+
"use strict";
|
|
5
|
+
class PanelTabPanelController extends PanelItemController {
|
|
6
|
+
/**
|
|
7
|
+
* 新建状态
|
|
8
|
+
*
|
|
9
|
+
* @author tony001
|
|
10
|
+
* @date 2024-05-12 14:05:16
|
|
11
|
+
* @protected
|
|
12
|
+
* @return {*} {PanelTabPanelState}
|
|
13
|
+
*/
|
|
14
|
+
createState() {
|
|
15
|
+
var _a;
|
|
16
|
+
return new PanelTabPanelState((_a = this.parent) == null ? void 0 : _a.state);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 初始化
|
|
20
|
+
*
|
|
21
|
+
* @author tony001
|
|
22
|
+
* @date 2024-05-12 14:05:51
|
|
23
|
+
* @return {*} {Promise<void>}
|
|
24
|
+
*/
|
|
25
|
+
async onInit() {
|
|
26
|
+
var _a;
|
|
27
|
+
await super.onInit();
|
|
28
|
+
this.state.activeTab = ((_a = this.model.panelTabPages) == null ? void 0 : _a[0].id) || "";
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 分页点击切换处理
|
|
32
|
+
*
|
|
33
|
+
* @author tony001
|
|
34
|
+
* @date 2024-05-12 14:05:11
|
|
35
|
+
* @param {string} tabId
|
|
36
|
+
*/
|
|
37
|
+
onTabChange(tabId) {
|
|
38
|
+
this.state.activeTab = tabId;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export { PanelTabPanelController };
|