@ibiz-template/vue3-components 0.1.12-dev.0 → 0.1.12
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.min.css +1 -1
- package/dist/index.system.min.js +3 -3
- package/dist/index.system.min.js.map +1 -1
- package/dist/wang-editor-0c05cd5f.js +2 -0
- package/dist/wang-editor-0c05cd5f.js.map +1 -0
- package/es/common/action-toolbar/action-toolbar.mjs +1 -1
- package/es/common/no-data/no-data.mjs +1 -1
- package/es/control/app-menu/app-menu.css +1 -1
- package/es/control/app-menu/app-menu.mjs +1 -1
- package/es/control/app-menu-icon-view/app-menu-icon-view.mjs +1 -1
- package/es/control/calendar/calendar.mjs +1 -1
- package/es/control/dashboard/portlet/container-portlet/container-portlet.css +1 -0
- package/es/control/dashboard/portlet/container-portlet/container-portlet.d.ts +1 -0
- package/es/control/dashboard/portlet/container-portlet/container-portlet.mjs +1 -0
- package/es/control/dashboard/portlet/portlet-layout/portlet-layout.css +1 -1
- package/es/control/dashboard/portlet/portlet-layout/portlet-layout.mjs +1 -1
- package/es/control/drbar/drbar.controller.mjs +2 -8
- package/es/control/drtab/drtab.controller.mjs +2 -8
- package/es/control/exp-bar/render-util.mjs +2 -2
- package/es/control/form/form/form.mjs +1 -1
- package/es/control/form/form-detail/form-button/form-button.css +1 -1
- package/es/control/form/form-detail/form-button/form-button.mjs +6 -5
- 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/form-mdctrl-repeater-form/form-mdctrl-repeater-form-shell.d.ts +72 -0
- package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-shell.mjs +157 -0
- package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.d.ts +1 -3
- package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.mjs +17 -100
- package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.d.ts +1 -3
- package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.mjs +19 -85
- package/es/control/form/form-detail/form-mdctrl/index.mjs +2 -0
- package/es/control/form/search-form/search-form.css +1 -1
- package/es/control/form/search-form/search-form.mjs +10 -3
- package/es/control/grid/grid-column/grid-field-column/grid-field-column.d.ts +2 -0
- package/es/control/grid/grid-column/grid-field-column/grid-field-column.mjs +7 -4
- package/es/control/grid/grid-column/grid-field-column/index.d.ts +2 -0
- package/es/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.mjs +2 -1
- package/es/control/panel/view-layout-panel/index.d.ts +10 -0
- package/es/control/panel/view-layout-panel/view-layout-panel.d.ts +11 -3
- package/es/control/panel/view-layout-panel/view-layout-panel.mjs +48 -42
- package/es/control/toolbar/toolbar.mjs +1 -1
- package/es/control/tree/tree.css +1 -1
- package/es/editor/html/wang-editor/wang-editor.mjs +5 -0
- package/es/editor/text-box/input/input.d.ts +2 -2
- package/es/editor/text-box/input/input.mjs +1 -1
- package/es/panel-component/nav-tabs/nav-tabs.css +1 -1
- package/es/panel-component/panel-button/panel-button.css +1 -1
- package/es/panel-component/panel-button/panel-button.mjs +5 -4
- package/es/panel-component/single-data-container/index.d.ts +10 -0
- package/es/panel-component/single-data-container/single-data-container.controller.d.ts +37 -2
- package/es/panel-component/single-data-container/single-data-container.controller.mjs +75 -1
- package/es/panel-component/single-data-container/single-data-container.d.ts +11 -2
- package/es/panel-component/single-data-container/single-data-container.mjs +34 -21
- package/es/view/common/view.css +1 -1
- package/lib/common/action-toolbar/action-toolbar.cjs +1 -1
- package/lib/common/no-data/no-data.cjs +1 -1
- package/lib/control/app-menu/app-menu.cjs +1 -1
- package/lib/control/app-menu/app-menu.css +1 -1
- package/lib/control/app-menu-icon-view/app-menu-icon-view.cjs +1 -1
- package/lib/control/calendar/calendar.cjs +1 -1
- package/lib/control/dashboard/portlet/container-portlet/container-portlet.cjs +1 -0
- package/lib/control/dashboard/portlet/container-portlet/container-portlet.css +1 -0
- package/lib/control/dashboard/portlet/portlet-layout/portlet-layout.cjs +1 -1
- package/lib/control/dashboard/portlet/portlet-layout/portlet-layout.css +1 -1
- package/lib/control/drbar/drbar.controller.cjs +2 -8
- package/lib/control/drtab/drtab.controller.cjs +2 -8
- package/lib/control/exp-bar/render-util.cjs +2 -2
- package/lib/control/form/form/form.cjs +1 -1
- package/lib/control/form/form-detail/form-button/form-button.cjs +6 -5
- package/lib/control/form/form-detail/form-button/form-button.css +1 -1
- package/lib/control/form/form-detail/form-group-panel/form-group-panel.cjs +1 -1
- package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-shell.cjs +159 -0
- package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.cjs +16 -99
- package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.cjs +18 -84
- package/lib/control/form/form-detail/form-mdctrl/index.cjs +2 -0
- package/lib/control/form/search-form/search-form.cjs +10 -3
- package/lib/control/form/search-form/search-form.css +1 -1
- package/lib/control/grid/grid-column/grid-field-column/grid-field-column.cjs +7 -4
- package/lib/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.cjs +2 -1
- package/lib/control/panel/view-layout-panel/view-layout-panel.cjs +47 -41
- package/lib/control/toolbar/toolbar.cjs +1 -1
- package/lib/control/tree/tree.css +1 -1
- package/lib/editor/html/wang-editor/wang-editor.cjs +5 -0
- package/lib/editor/text-box/input/input.cjs +1 -1
- package/lib/panel-component/nav-tabs/nav-tabs.css +1 -1
- package/lib/panel-component/panel-button/panel-button.cjs +5 -4
- package/lib/panel-component/panel-button/panel-button.css +1 -1
- package/lib/panel-component/single-data-container/single-data-container.cjs +33 -20
- package/lib/panel-component/single-data-container/single-data-container.controller.cjs +74 -0
- package/lib/view/common/view.css +1 -1
- package/package.json +6 -6
- package/dist/wang-editor-675011c6.js +0 -2
- package/dist/wang-editor-675011c6.js.map +0 -1
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var vue = require('vue');
|
|
6
6
|
var editorForVue = require('@wangeditor/editor-for-vue');
|
|
7
7
|
var qxUtil = require('qx-util');
|
|
8
|
+
var ramda = require('ramda');
|
|
8
9
|
var vue3Util = require('@ibiz-template/vue3-util');
|
|
9
10
|
var core = require('@ibiz-template/core');
|
|
10
11
|
require('./wang-editor.css');
|
|
@@ -119,10 +120,14 @@ const IBizHtml = /* @__PURE__ */ vue.defineComponent({
|
|
|
119
120
|
});
|
|
120
121
|
const handleCreated = (editor) => {
|
|
121
122
|
editorRef.value = editor;
|
|
123
|
+
editor.setHtml(valueHtml.value);
|
|
122
124
|
};
|
|
123
125
|
const handleChange = (editor) => {
|
|
124
126
|
const html = editor.getHtml();
|
|
125
127
|
const emitValue = html === "<p><br></p>" ? "" : html;
|
|
128
|
+
if (emitValue === props.value || emitValue === "" && ramda.isNil(props.value)) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
126
131
|
emit("change", emitValue);
|
|
127
132
|
};
|
|
128
133
|
const handleDestroyed = (_editor) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.ibiz-nav-tabs{--ibiz-nav-tabs-padding:var(--ibiz-spacing-base-tight);--ibiz-nav-tabs-left-width:100%;--ibiz-nav-tabs-right-width:60px;--ibiz-nav-tabs-item-height:40px;--ibiz-nav-tabs-item-padding:0 var(--ibiz-spacing-base-loose);--ibiz-nav-tabs-item-margin:0 var(--ibiz-spacing-base) 0 0;--ibiz-nav-tabs-item-font-size:var(--ibiz-font-size-regular);--ibiz-nav-tabs-item-font-weight:var(--ibiz-font-weight-regular);--ibiz-nav-tabs-item-border-radius:var(--ibiz-border-radius-medium);--ibiz-nav-tabs-item-bg-color:transparent;--ibiz-nav-tabs-item-color:var(--ibiz-color-text-0);--ibiz-nav-tabs-item-hover-color:var(--ibiz-color-primary-hover);--ibiz-nav-tabs-item-active-color:var(--ibiz-color-primary);display:flex;align-items:center;justify-content:flex-start;position:relative;padding:var(--ibiz-nav-tabs-padding)}.ibiz-nav-tabs__left{display:flex;align-items:center;width:var(--ibiz-nav-tabs-left-width)}.ibiz-nav-tabs__left .el-tabs{width:100%;--el-tabs-header-height:40px}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav{border:none}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item{display:flex;align-items:center;height:var(--ibiz-nav-tabs-item-height);padding:var(--ibiz-nav-tabs-item-padding);margin:var(--ibiz-nav-tabs-item-margin);overflow:hidden;font-size:var(--ibiz-nav-tabs-item-font-size);font-weight:var(--ibiz-nav-tabs-item-font-weight);color:var(--ibiz-nav-tabs-item-color);vertical-align:middle;background-color:var(--ibiz-nav-tabs-item-bg-color);border:1px solid var(--ibiz-color-border);border-radius:var(--ibiz-nav-tabs-item-border-radius);box-shadow:0 1px 2px 0 var(--ibiz-color-border);opacity:1}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item:hover{padding:var(--ibiz-nav-tabs-item-padding);color:var(--ibiz-nav-tabs-item-hover-color)}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item:hover .is-icon-close{color:var(--ibiz-nav-tabs-item-hover-color)}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item.is-active{padding:var(--ibiz-nav-tabs-item-padding);color:var(--ibiz-color-white);background-color:var(--ibiz-nav-tabs-item-active-color);box-shadow:none}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item.is-active .is-icon-close{color:var(--ibiz-color-white)}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item.is-closable{padding:var(--ibiz-nav-tabs-item-padding)}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item.is-closable.hover{padding:var(--ibiz-nav-tabs-item-padding)}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item .is-icon-close{position:relative;top:1px}.ibiz-nav-tabs__left .el-tabs .el-tabs__header{margin-bottom:0;border-bottom:none}.ibiz-nav-tabs__right{
|
|
1
|
+
.ibiz-nav-tabs{--ibiz-nav-tabs-padding:var(--ibiz-spacing-base-tight);--ibiz-nav-tabs-left-width:100%;--ibiz-nav-tabs-right-width:60px;--ibiz-nav-tabs-right-height:30px;--ibiz-nav-tabs-item-height:40px;--ibiz-nav-tabs-item-padding:0 var(--ibiz-spacing-base-loose);--ibiz-nav-tabs-item-margin:0 var(--ibiz-spacing-base) 0 0;--ibiz-nav-tabs-item-font-size:var(--ibiz-font-size-regular);--ibiz-nav-tabs-item-font-weight:var(--ibiz-font-weight-regular);--ibiz-nav-tabs-item-border-radius:var(--ibiz-border-radius-medium);--ibiz-nav-tabs-item-bg-color:transparent;--ibiz-nav-tabs-item-color:var(--ibiz-color-text-0);--ibiz-nav-tabs-item-hover-color:var(--ibiz-color-primary-hover);--ibiz-nav-tabs-item-active-color:var(--ibiz-color-primary);display:flex;align-items:center;justify-content:flex-start;position:relative;padding:var(--ibiz-nav-tabs-padding)}.ibiz-nav-tabs__left{display:flex;align-items:center;width:var(--ibiz-nav-tabs-left-width)}.ibiz-nav-tabs__left .el-tabs{width:100%;--el-tabs-header-height:40px}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav{border:none}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item{display:flex;align-items:center;height:var(--ibiz-nav-tabs-item-height);padding:var(--ibiz-nav-tabs-item-padding);margin:var(--ibiz-nav-tabs-item-margin);overflow:hidden;font-size:var(--ibiz-nav-tabs-item-font-size);font-weight:var(--ibiz-nav-tabs-item-font-weight);color:var(--ibiz-nav-tabs-item-color);vertical-align:middle;background-color:var(--ibiz-nav-tabs-item-bg-color);border:1px solid var(--ibiz-color-border);border-radius:var(--ibiz-nav-tabs-item-border-radius);box-shadow:0 1px 2px 0 var(--ibiz-color-border);opacity:1}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item:hover{padding:var(--ibiz-nav-tabs-item-padding);color:var(--ibiz-nav-tabs-item-hover-color)}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item:hover .is-icon-close{color:var(--ibiz-nav-tabs-item-hover-color)}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item.is-active{padding:var(--ibiz-nav-tabs-item-padding);color:var(--ibiz-color-white);background-color:var(--ibiz-nav-tabs-item-active-color);box-shadow:none}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item.is-active .is-icon-close{color:var(--ibiz-color-white)}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item.is-closable{padding:var(--ibiz-nav-tabs-item-padding)}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item.is-closable.hover{padding:var(--ibiz-nav-tabs-item-padding)}.ibiz-nav-tabs__left .el-tabs .el-tabs__nav .el-tabs__item .is-icon-close{position:relative;top:1px}.ibiz-nav-tabs__left .el-tabs .el-tabs__header{margin-bottom:0;border-bottom:none}.ibiz-nav-tabs__right{width:var(--ibiz-nav-tabs-right-width)}.ibiz-nav-tabs__right .el-dropdown button{height:var(--ibiz-nav-tabs-right-height)}
|
|
@@ -89,13 +89,14 @@ const PanelButton = /* @__PURE__ */ vue.defineComponent({
|
|
|
89
89
|
},
|
|
90
90
|
render() {
|
|
91
91
|
if (this.state.visible && this.buttonState.visible) {
|
|
92
|
-
return vue.createVNode(
|
|
92
|
+
return vue.createVNode("div", {
|
|
93
|
+
"class": [this.ns.b(), this.ns.m(this.codeName), ...this.controller.containerClass]
|
|
94
|
+
}, [vue.createVNode(vue.resolveComponent("el-button"), {
|
|
93
95
|
"type": this.buttonType,
|
|
94
96
|
"text": this.isText,
|
|
95
97
|
"disabled": this.state.disabled && this.buttonState.disabled,
|
|
96
98
|
"loading": this.state.loading,
|
|
97
|
-
"onClick": this.handleButtonClick
|
|
98
|
-
"class": [this.ns.b(), this.ns.m(this.codeName), ...this.controller.containerClass]
|
|
99
|
+
"onClick": this.handleButtonClick
|
|
99
100
|
}, {
|
|
100
101
|
default: () => [vue.createVNode("div", {
|
|
101
102
|
"class": this.ns.b("content")
|
|
@@ -105,7 +106,7 @@ const PanelButton = /* @__PURE__ */ vue.defineComponent({
|
|
|
105
106
|
}, null), vue.createVNode("span", {
|
|
106
107
|
"class": this.ns.bm("content", "caption")
|
|
107
108
|
}, [this.showCaption ? this.captionText : null])])]
|
|
108
|
-
});
|
|
109
|
+
})]);
|
|
109
110
|
}
|
|
110
111
|
return null;
|
|
111
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.ibiz-panel-button{--ibiz-panel-button-icon-margin:0 var(--ibiz-spacing-extra-tight) 0 0;--ibiz-panel-button-icon-max-width:var(--ibiz-width-icon-medium);--ibiz-panel-button-icon-max-height:var(--ibiz-width-icon-medium);
|
|
1
|
+
.ibiz-panel-button{--ibiz-panel-button-icon-margin:0 var(--ibiz-spacing-extra-tight) 0 0;--ibiz-panel-button-icon-max-width:var(--ibiz-width-icon-medium);--ibiz-panel-button-icon-max-height:var(--ibiz-width-icon-medium);padding:var(--ibiz-spacing-tight);overflow:hidden}.ibiz-panel-button .el-button{width:100%}.ibiz-panel-button .el-button i,.ibiz-panel-button .el-button img{display:inline-block;max-width:var(--ibiz-panel-button-icon-max-width);max-height:var(--ibiz-panel-button-icon-max-height);margin:var(--ibiz-panel-button-icon-margin)}
|
|
@@ -25,36 +25,49 @@ const SingleDataContainer = /* @__PURE__ */ vue.defineComponent({
|
|
|
25
25
|
const {
|
|
26
26
|
id
|
|
27
27
|
} = props.modelData;
|
|
28
|
+
const keys = Object.keys(props.controller.panelItems);
|
|
29
|
+
keys.forEach((key) => {
|
|
30
|
+
const panelItem = props.controller.panelItems[key];
|
|
31
|
+
panelItem.state = vue.reactive(panelItem.state);
|
|
32
|
+
});
|
|
33
|
+
const renderPanelItem = vue.inject("renderPanelItem");
|
|
28
34
|
const classArr = vue.computed(() => {
|
|
29
35
|
const result = [ns.b(), ns.m(id), ...props.controller.containerClass];
|
|
30
36
|
return result;
|
|
31
37
|
});
|
|
32
38
|
return {
|
|
33
39
|
ns,
|
|
34
|
-
classArr
|
|
40
|
+
classArr,
|
|
41
|
+
renderPanelItem
|
|
35
42
|
};
|
|
36
43
|
},
|
|
37
44
|
render() {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
45
|
+
let content;
|
|
46
|
+
if (this.$slots.default) {
|
|
47
|
+
content = this.$slots.default();
|
|
48
|
+
} else {
|
|
49
|
+
content = vue.createVNode(vue.resolveComponent("iBizRow"), {
|
|
50
|
+
"class": this.ns.b("content"),
|
|
51
|
+
"layout": this.modelData.layout
|
|
52
|
+
}, {
|
|
53
|
+
default: () => {
|
|
54
|
+
var _a;
|
|
55
|
+
return [(_a = this.modelData.panelItems) == null ? void 0 : _a.map((panelItem) => {
|
|
56
|
+
let _slot;
|
|
57
|
+
const childController = this.controller.panelItems[panelItem.id];
|
|
58
|
+
return vue.createVNode(vue.resolveComponent("iBizCol"), {
|
|
59
|
+
"layoutPos": panelItem.layoutPos,
|
|
60
|
+
"state": childController.state
|
|
61
|
+
}, _isSlot(_slot = this.renderPanelItem(panelItem, {
|
|
62
|
+
providers: this.controller.providers,
|
|
63
|
+
panelItems: this.controller.panelItems
|
|
64
|
+
})) ? _slot : {
|
|
65
|
+
default: () => [_slot]
|
|
66
|
+
});
|
|
67
|
+
})];
|
|
68
|
+
}
|
|
54
69
|
});
|
|
55
|
-
}
|
|
56
|
-
default: () => [_slot]
|
|
57
|
-
});
|
|
70
|
+
}
|
|
58
71
|
return vue.createVNode("div", {
|
|
59
72
|
"class": this.classArr
|
|
60
73
|
}, [content]);
|
|
@@ -14,6 +14,22 @@ class SingleDataContainerController extends runtime.PanelItemController {
|
|
|
14
14
|
constructor() {
|
|
15
15
|
super(...arguments);
|
|
16
16
|
__publicField(this, "isDataContainer", true);
|
|
17
|
+
/**
|
|
18
|
+
* 所有面板成员的控制器
|
|
19
|
+
*
|
|
20
|
+
* @author lxm
|
|
21
|
+
* @date 2022-08-24 20:08:07
|
|
22
|
+
* @type {{ [key: string]: IPanelItemController }}
|
|
23
|
+
*/
|
|
24
|
+
__publicField(this, "panelItems", {});
|
|
25
|
+
/**
|
|
26
|
+
* 所有面板成员的适配器
|
|
27
|
+
*
|
|
28
|
+
* @author lxm
|
|
29
|
+
* @date 2022-08-24 20:08:07
|
|
30
|
+
* @type {{ [key: string]: IPanelItemProvider }}
|
|
31
|
+
*/
|
|
32
|
+
__publicField(this, "providers", {});
|
|
17
33
|
}
|
|
18
34
|
/**
|
|
19
35
|
* 单项数据容器,根据数据模式
|
|
@@ -31,8 +47,51 @@ class SingleDataContainerController extends runtime.PanelItemController {
|
|
|
31
47
|
}
|
|
32
48
|
async onInit() {
|
|
33
49
|
await super.onInit();
|
|
50
|
+
await this.initPanelItemControllers();
|
|
34
51
|
this.initContainerData();
|
|
35
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* 初始化面板成员控制器
|
|
55
|
+
*
|
|
56
|
+
* @author lxm
|
|
57
|
+
* @date 2022-08-24 21:08:48
|
|
58
|
+
* @protected
|
|
59
|
+
*/
|
|
60
|
+
async initPanelItemControllers(panelItems = this.model.panelItems, panel = this.panel, parent = this) {
|
|
61
|
+
if (!panelItems) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
await Promise.all(
|
|
65
|
+
panelItems.map(async (panelItem) => {
|
|
66
|
+
var _a, _b;
|
|
67
|
+
const panelItemProvider = await runtime.getPanelItemProvider(panelItem);
|
|
68
|
+
if (!panelItemProvider) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
this.providers[panelItem.id] = panelItemProvider;
|
|
72
|
+
const panelItemController = await panelItemProvider.createController(
|
|
73
|
+
panelItem,
|
|
74
|
+
panel,
|
|
75
|
+
parent
|
|
76
|
+
);
|
|
77
|
+
this.panelItems[panelItem.id] = panelItemController;
|
|
78
|
+
if (((_a = panelItem.panelItems) == null ? void 0 : _a.length) && !panelItemController.isDataContainer) {
|
|
79
|
+
await this.initPanelItemControllers(
|
|
80
|
+
panelItem.panelItems,
|
|
81
|
+
panel,
|
|
82
|
+
panelItemController
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
if ((_b = panelItem.panelTabPages) == null ? void 0 : _b.length) {
|
|
86
|
+
await this.initPanelItemControllers(
|
|
87
|
+
panelItem.panelTabPages,
|
|
88
|
+
panel,
|
|
89
|
+
panelItemController
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
})
|
|
93
|
+
);
|
|
94
|
+
}
|
|
36
95
|
/**
|
|
37
96
|
* 根据来源类型初始化容器数据
|
|
38
97
|
* @author lxm
|
|
@@ -70,6 +129,17 @@ class SingleDataContainerController extends runtime.PanelItemController {
|
|
|
70
129
|
throw new core.ModelError(this.model, `\u6570\u636E\u6E90\u7C7B\u578B${dataSourceType}\u6682\u672A\u652F\u6301`);
|
|
71
130
|
}
|
|
72
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* 面板状态变更通知
|
|
134
|
+
*
|
|
135
|
+
* @author lxm
|
|
136
|
+
* @date 2022-09-20 18:09:07
|
|
137
|
+
*/
|
|
138
|
+
childrenStateNotify(state) {
|
|
139
|
+
Object.values(this.panelItems).forEach((panelItem) => {
|
|
140
|
+
panelItem.panelStateNotify(state);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
73
143
|
/**
|
|
74
144
|
* 通过实体设置视图逻辑
|
|
75
145
|
* @author lxm
|
|
@@ -96,6 +166,7 @@ class SingleDataContainerController extends runtime.PanelItemController {
|
|
|
96
166
|
throw new core.RuntimeError(`\u5B9E\u4F53\u903B\u8F91${appDELogicId}\u6CA1\u6709\u8FD4\u56DE\u503C`);
|
|
97
167
|
}
|
|
98
168
|
this.state.data = data;
|
|
169
|
+
this.childrenStateNotify(runtime.PanelNotifyState.LOAD);
|
|
99
170
|
}
|
|
100
171
|
/**
|
|
101
172
|
* 设置全局变量为当前容器数据
|
|
@@ -108,6 +179,7 @@ class SingleDataContainerController extends runtime.PanelItemController {
|
|
|
108
179
|
const originData = dataName ? ibiz.appData[dataName] : ibiz.appData;
|
|
109
180
|
if (originData) {
|
|
110
181
|
this.state.data = originData;
|
|
182
|
+
this.childrenStateNotify(runtime.PanelNotifyState.LOAD);
|
|
111
183
|
} else {
|
|
112
184
|
ibiz.log.error(`\u5168\u5C40\u53D8\u91CF\u91CC\u6CA1\u6709${dataName}\u5C5E\u6027`);
|
|
113
185
|
}
|
|
@@ -137,6 +209,7 @@ class SingleDataContainerController extends runtime.PanelItemController {
|
|
|
137
209
|
);
|
|
138
210
|
if (res.ok && res.data) {
|
|
139
211
|
this.state.data = res.data;
|
|
212
|
+
this.childrenStateNotify(runtime.PanelNotifyState.LOAD);
|
|
140
213
|
}
|
|
141
214
|
}
|
|
142
215
|
/**
|
|
@@ -154,6 +227,7 @@ class SingleDataContainerController extends runtime.PanelItemController {
|
|
|
154
227
|
}
|
|
155
228
|
const updateData = () => {
|
|
156
229
|
this.state.data = view.state[dataName];
|
|
230
|
+
this.childrenStateNotify(runtime.PanelNotifyState.LOAD);
|
|
157
231
|
};
|
|
158
232
|
updateData();
|
|
159
233
|
view.evt.on("onDataChange", () => {
|
package/lib/view/common/view.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.ibiz-view{--ibiz-view-bg-color:var(--ibiz-color-bg-1);--ibiz-view-border-radius:var(--ibiz-border-radius-medium);width:100%;height:100%}.ibiz-view .ibiz-view{background-color:var(--ibiz-view-bg-color);border-radius:var(--ibiz-view-border-radius)}
|
|
1
|
+
.ibiz-view{--ibiz-view-bg-color:var(--ibiz-color-bg-1);--ibiz-view-border-radius:var(--ibiz-border-radius-medium);width:100%;height:100%}.ibiz-view .ibiz-view{background-color:var(--ibiz-view-bg-color);border-radius:var(--ibiz-view-border-radius)}.ibiz-view .ibiz-view-appportalview{background-color:transparent}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ibiz-template/vue3-components",
|
|
3
|
-
"version": "0.1.12
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"description": "使用 rollup 编译 vue 组件或者 jsx",
|
|
5
5
|
"main": "lib/index.cjs",
|
|
6
6
|
"module": "es/index.mjs",
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@floating-ui/dom": "^1.5.1",
|
|
26
|
-
"@ibiz-template/core": "^0.1.12
|
|
27
|
-
"@ibiz-template/model-helper": "^0.1.12
|
|
28
|
-
"@ibiz-template/runtime": "^0.1.12
|
|
26
|
+
"@ibiz-template/core": "^0.1.12",
|
|
27
|
+
"@ibiz-template/model-helper": "^0.1.12",
|
|
28
|
+
"@ibiz-template/runtime": "^0.1.12",
|
|
29
29
|
"@ibiz-template/theme": "^0.1.6",
|
|
30
|
-
"@ibiz-template/vue3-util": "^0.1.12
|
|
30
|
+
"@ibiz-template/vue3-util": "^0.1.12",
|
|
31
31
|
"@ibiz/model-core": "^0.0.15",
|
|
32
32
|
"@imengyu/vue3-context-menu": "^1.3.3",
|
|
33
33
|
"@monaco-editor/loader": "^1.3.3",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"@commitlint/config-conventional": "^17.7.0",
|
|
56
56
|
"@ibiz-template/cli": "0.2.1",
|
|
57
57
|
"@types/lodash-es": "^4.17.8",
|
|
58
|
-
"@types/node": "^20.5.
|
|
58
|
+
"@types/node": "^20.5.6",
|
|
59
59
|
"@types/qs": "^6.9.7",
|
|
60
60
|
"@types/ramda": "^0.29.3",
|
|
61
61
|
"husky": "^8.0.3",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
System.register(["vue","@wangeditor/editor-for-vue","qx-util","@ibiz-template/vue3-util","@ibiz-template/core"],function(H){"use strict";var c,d,s,u,m,f,i,h,g,v,p,C,b,y;return{setters:[function(o){c=o.defineComponent,d=o.shallowRef,s=o.ref,u=o.watch,m=o.onBeforeUnmount,f=o.onMounted,i=o.createVNode},function(o){h=o.Toolbar,g=o.Editor},function(o){v=o.getCookie},function(o){p=o.getHtmlProps,C=o.getEditorEmits,b=o.useNamespace},function(o){y=o.CoreConst}],execute:function(){const o=H("default",c({name:"IBizHtml",props:p(),emits:C(),setup(n,{emit:N}){const O=b("html"),E=n.controller,l=d(),a=s(""),L=s({Authorization:`Bearer ${v(y.TOKEN)}`}),F=s(""),k=s("");u(()=>n.data,e=>{if(e){const t=E.calcBaseUrl(e);F.value=t.uploadUrl,k.value=t.downloadUrl}},{immediate:!0,deep:!0});const U=(e,t)=>{if(t)return!0},x=e=>e,P={excludeKeys:["group-video"]},z={placeholder:E.placeHolder,readOnly:n.readonly,MENU_CONF:{uploadImage:{server:F.value,fieldName:"file",maxFileSize:10*1024*1024,maxNumberOfFiles:10,allowedFileTypes:[],headers:L.value,withCredentials:!0,onBeforeUpload(e){return e},onProgress(e){console.log("progress",e)},onSuccess(e,t){console.log(`${e.name} \u4E0A\u4F20\u6210\u529F`,t)},onFailed(e,t){console.log(`${e.name} \u4E0A\u4F20\u5931\u8D25`,t)},onError(e,t,r){console.log(`${e.name} \u4E0A\u4F20\u51FA\u9519`,t,r)},async customInsert(e,t){const r=k.value.replace("%fileId%",e.id),K=e.filename;t(r,K,"")}},insertLink:{checkLink:U,parseLinkUrl:x},editLink:{checkLink:U,parseLinkUrl:x}}};m(()=>{const e=l.value;e?.destroy()});const T=e=>{l.value=e},$=e=>{const t=e.getHtml();N("change",t==="<p><br></p>"?"":t)},w=e=>{},D=e=>{},I=e=>{},R=(e,t)=>{alert(`\u3010\u81EA\u5B9A\u4E49\u63D0\u793A\u3011${t} - ${e}`)},_=(e,t,r)=>{r(!0)},M=e=>{const t=l.value;t?.insertText(e)},S=()=>{const e=l.value;e!=null&&console.log(e.getHtml())},A=()=>{const e=l.value;e?.disable()},B=()=>{const e=l.value;e?.enable()};return f(()=>{u(()=>n.value,(e,t)=>{e!==t&&(typeof n.value=="string"||e===null)&&(e===null?a.value="":a.value=e)},{immediate:!0}),u(()=>n.disabled,(e,t)=>{e!==t&&(e===!0?A():B())},{immediate:!0})}),{ns:O,editorRef:l,mode:"default",valueHtml:a,toolbarConfig:P,editorConfig:z,handleCreated:T,handleChange:$,handleDestroyed:w,handleFocus:D,handleBlur:I,customAlert:R,customPaste:_,insertText:M,printHtml:S,disable:A,enable:B}},render(){return i("div",{class:this.ns.b()},[i("div",{style:"border: 1px solid #ccc; margin-top: 10px"},[i(h,{editor:this.editorRef,"default-config":this.toolbarConfig,mode:this.mode,style:"border-bottom: 1px solid #ccc"},null),i(g,{modelValue:this.valueHtml,"onUpdate:modelValue":n=>this.valueHtml=n,"default-config":this.editorConfig,mode:this.mode,style:"height: 400px; overflow-y: hidden",onOnCreated:this.handleCreated,onOnChange:this.handleChange,onOnDestroyed:this.handleDestroyed,onOnFocus:this.handleFocus,onOnBlur:this.handleBlur,oncustomAlert:this.customAlert,oncustomPaste:this.customPaste},null)])])}}))}}});
|
|
2
|
-
//# sourceMappingURL=wang-editor-675011c6.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wang-editor-675011c6.js","sources":["../src/editor/html/wang-editor/wang-editor.tsx"],"sourcesContent":["import {\n onBeforeUnmount,\n ref,\n shallowRef,\n onMounted,\n watch,\n Ref,\n defineComponent,\n} from 'vue';\nimport { Editor, Toolbar } from '@wangeditor/editor-for-vue';\nimport { IEditorConfig, IToolbarConfig } from '@wangeditor/editor';\nimport type { IDomEditor } from '@wangeditor/editor';\nimport { getCookie } from 'qx-util';\nimport {\n getEditorEmits,\n getHtmlProps,\n useNamespace,\n} from '@ibiz-template/vue3-util';\nimport { CoreConst } from '@ibiz-template/core';\nimport { HtmlEditorController } from '../html-editor.controller';\nimport './wang-editor.scss';\n\ntype InsertFnType = (_url: string, _alt: string, _href: string) => void;\n\nconst IBizHtml = defineComponent({\n name: 'IBizHtml',\n props: getHtmlProps<HtmlEditorController>(),\n emits: getEditorEmits(),\n setup(props, { emit }) {\n const ns = useNamespace('html');\n\n const c = props.controller!;\n\n // 编辑器实例,必须用 shallowRef,重要!\n const editorRef = shallowRef();\n\n // 内容 HTML\n const valueHtml = ref('');\n\n // 请求头\n const headers: Ref<IData> = ref({\n Authorization: `Bearer ${getCookie(CoreConst.TOKEN)}`,\n });\n\n // 上传文件路径\n const uploadUrl: Ref<string> = ref('');\n\n // 下载文件路径\n const downloadUrl: Ref<string> = ref('');\n\n // data响应式变更基础路径\n watch(\n () => props.data,\n newVal => {\n if (newVal) {\n const urls = c.calcBaseUrl(newVal);\n uploadUrl.value = urls.uploadUrl;\n downloadUrl.value = urls.downloadUrl;\n }\n },\n { immediate: true, deep: true },\n );\n\n // 自定义校验链接\n const customCheckLinkFn = (\n text: string,\n url: string,\n ): string | boolean | undefined => {\n if (!url) {\n return;\n }\n // if (url.indexOf('http') !== 0) {\n // return '链接必须以 http/https 开头';\n // }\n return true;\n\n // 返回值有三种选择:\n // 1. 返回 true ,说明检查通过,编辑器将正常插入链接\n // 2. 返回一个字符串,说明检查未通过,编辑器会阻止插入。会 alert 出错误信息(即返回的字符串)\n // 3. 返回 undefined(即没有任何返回),说明检查未通过,编辑器会阻止插入。但不会提示任何信息\n };\n\n // 自定义转换链接 url\n const customParseLinkUrl = (url: string): string => {\n // if (url.indexOf('http') !== 0) {\n // return `http://${url}`;\n // }\n return url;\n };\n\n // 工具栏配置\n const toolbarConfig: Partial<IToolbarConfig> = {\n excludeKeys: ['group-video'],\n };\n\n // 编辑器配置\n const editorConfig: Partial<IEditorConfig> = {\n placeholder: c.placeHolder,\n readOnly: props.readonly,\n MENU_CONF: {\n // 图片上传\n uploadImage: {\n // 上传地址\n server: uploadUrl.value,\n\n // form-data fieldName ,默认值 'wangeditor-uploaded-image'\n fieldName: 'file',\n\n // 单个文件的最大体积限制,默认为 2M\n maxFileSize: 10 * 1024 * 1024, // 10M\n\n // 最多可上传几个文件,默认为 100\n maxNumberOfFiles: 10,\n\n // 选择文件时的类型限制,默认为 ['image/*'] 。如不想限制,则设置为 []\n allowedFileTypes: [],\n\n // 自定义增加 http header\n headers: headers.value,\n\n // 跨域是否传递 cookie ,默认为 false\n withCredentials: true,\n\n // 上传之前触发\n onBeforeUpload(file: File) {\n // TS 语法\n // onBeforeUpload(file) { // JS 语法\n // file 选中的文件,格式如 { key: file }\n return file;\n\n // 可以 return\n // 1. return file 或者 new 一个 file ,接下来将上传\n // 2. return false ,不上传这个 file\n },\n\n // 上传进度的回调函数\n onProgress(progress: number) {\n console.log('progress', progress);\n },\n\n // 单个文件上传成功之后\n onSuccess(file: File, res: IData) {\n console.log(`${file.name} 上传成功`, res);\n },\n\n // 单个文件上传失败\n onFailed(file: File, res: IData) {\n console.log(`${file.name} 上传失败`, res);\n },\n\n // 上传错误,或者触发 timeout 超时\n onError(file: File, err: IData, res: IData) {\n console.log(`${file.name} 上传出错`, err, res);\n },\n\n // 自定义插入图片\n async customInsert(res: IData, insertFn: InsertFnType) {\n const url = downloadUrl.value.replace('%fileId%', res.id);\n const alt = res.filename;\n // 从 res 中找到 url alt href ,然后插入图片\n insertFn(url, alt, '');\n },\n },\n // 插入链接\n insertLink: {\n checkLink: customCheckLinkFn, // 也支持 async 函数\n parseLinkUrl: customParseLinkUrl, // 也支持 async 函数\n },\n // 更新链接\n editLink: {\n checkLink: customCheckLinkFn, // 也支持 async 函数\n parseLinkUrl: customParseLinkUrl, // 也支持 async 函数\n },\n },\n };\n\n // 组件销毁时,也及时销毁编辑器,重要!\n onBeforeUnmount(() => {\n const editor = editorRef.value;\n if (editor == null) return;\n\n editor.destroy();\n });\n\n // 编辑器回调函数\n // 编辑器创建完毕时的回调函数\n const handleCreated = (editor: IDomEditor) => {\n editorRef.value = editor; // 记录 editor 实例,重要!\n // 配置菜单\n // setTimeout(() => {\n // const toolbar = DomEditor.getToolbar(editor);\n // const curToolbarConfig = toolbar?.getConfig();\n // console.log(curToolbarConfig?.toolbarKeys); // 当前菜单排序和分组\n // }, 3000);\n };\n // 编辑器内容、选区变化时的回调函数\n const handleChange = (editor: IDomEditor) => {\n // console.log('change:', editor.getHtml());\n const html = editor.getHtml();\n // wangEditor初始值抛空字符串给后台\n const emitValue = html === '<p><br></p>' ? '' : html;\n emit('change', emitValue);\n };\n // 编辑器销毁时的回调函数。调用 editor.destroy() 即可销毁编辑器\n const handleDestroyed = (_editor: IDomEditor) => {\n // console.log('destroyed', _editor);\n };\n // 编辑器 focus 时的回调函数\n const handleFocus = (_editor: IDomEditor) => {\n // console.log('focus', _editor);\n };\n // 编辑器 blur 时的回调函数。\n const handleBlur = (_editor: IDomEditor) => {\n // console.log('blur', _editor);\n };\n // 自定义编辑器 alert\n const customAlert = (info: string, type: string) => {\n // eslint-disable-next-line no-alert\n alert(`【自定义提示】${type} - ${info}`);\n };\n // 自定义粘贴。可阻止编辑器的默认粘贴,实现自己的粘贴逻辑\n const customPaste = (\n editor: IDomEditor,\n event: ClipboardEvent,\n callback: (_n: boolean) => void,\n ) => {\n // 返回值(注意,vue 事件的返回值,不能用 return)\n // callback(false); // 返回 false ,阻止默认粘贴行为\n callback(true); // 返回 true ,继续默认的粘贴行为\n };\n\n // 插入文本\n const insertText = (str: string) => {\n const editor = editorRef.value;\n if (editor == null) return;\n\n editor.insertText(str);\n };\n\n // 获取非格式化的 html\n const printHtml = () => {\n const editor = editorRef.value;\n if (editor == null) return;\n console.log(editor.getHtml());\n };\n\n // 禁用编辑器\n const disable = () => {\n const editor = editorRef.value;\n if (editor == null) return;\n editor.disable();\n };\n\n // 取消禁用编辑器\n const enable = () => {\n const editor = editorRef.value;\n if (editor == null) return;\n editor.enable();\n };\n\n onMounted(() => {\n // 监听值变化赋值\n watch(\n () => props.value,\n (newVal, oldVal) => {\n if (\n newVal !== oldVal &&\n (typeof props.value === 'string' || newVal === null)\n ) {\n if (newVal === null) {\n valueHtml.value = '';\n } else {\n valueHtml.value = newVal as string;\n }\n }\n },\n { immediate: true },\n );\n\n // 监听disabled禁用\n watch(\n () => props.disabled,\n (newVal, oldVal) => {\n if (newVal !== oldVal) {\n if (newVal === true) {\n disable();\n } else {\n enable();\n }\n }\n },\n { immediate: true },\n );\n });\n\n return {\n ns,\n editorRef,\n mode: 'default',\n valueHtml,\n toolbarConfig,\n editorConfig,\n handleCreated,\n handleChange,\n handleDestroyed,\n handleFocus,\n handleBlur,\n customAlert,\n customPaste,\n insertText,\n printHtml,\n disable,\n enable,\n };\n },\n render() {\n return (\n <div class={this.ns.b()}>\n <div style='border: 1px solid #ccc; margin-top: 10px'>\n <Toolbar\n editor={this.editorRef}\n default-config={this.toolbarConfig}\n mode={this.mode}\n style='border-bottom: 1px solid #ccc'\n />\n <Editor\n v-model={this.valueHtml}\n default-config={this.editorConfig}\n mode={this.mode}\n style='height: 400px; overflow-y: hidden'\n onOnCreated={this.handleCreated}\n onOnChange={this.handleChange}\n onOnDestroyed={this.handleDestroyed}\n onOnFocus={this.handleFocus}\n onOnBlur={this.handleBlur}\n oncustomAlert={this.customAlert}\n oncustomPaste={this.customPaste}\n />\n </div>\n </div>\n );\n },\n});\n\nexport default IBizHtml;\n"],"names":["IBizHtml","exports","defineComponent","name","props","getHtmlProps","emits","getEditorEmits","setup","emit","ns","useNamespace","c","controller","valueHtml","ref","editorRef","watch","newVal","headers","Authorization","getCookie","CoreConst","uploadUrl","urls","url","downloadUrl","immediate","deep","customParseLinkUrl","file","toolbarConfig","progress","res","MENU_CONF","uploadImage","server","err","fieldName","maxFileSize","insertFn","alt","maxNumberOfFiles","customCheckLinkFn","withCredentials","editor","onSuccess","handleChange","onFailed","html","onError","console","handleFocus","_editor","handleBlur","customInsert","customAlert","info","type","customPaste","event","callback","insertLink","str","checkLink","printHtml","editLink","disable","onBeforeUnmount","onMounted","handleCreated","value","oldVal","emitValue","enable","editorConfig","alert","handleDestroyed","log","$event"],"mappings":"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"}
|