@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.
Files changed (92) hide show
  1. package/dist/index.min.css +1 -1
  2. package/dist/index.system.min.js +3 -3
  3. package/dist/index.system.min.js.map +1 -1
  4. package/dist/wang-editor-0c05cd5f.js +2 -0
  5. package/dist/wang-editor-0c05cd5f.js.map +1 -0
  6. package/es/common/action-toolbar/action-toolbar.mjs +1 -1
  7. package/es/common/no-data/no-data.mjs +1 -1
  8. package/es/control/app-menu/app-menu.css +1 -1
  9. package/es/control/app-menu/app-menu.mjs +1 -1
  10. package/es/control/app-menu-icon-view/app-menu-icon-view.mjs +1 -1
  11. package/es/control/calendar/calendar.mjs +1 -1
  12. package/es/control/dashboard/portlet/container-portlet/container-portlet.css +1 -0
  13. package/es/control/dashboard/portlet/container-portlet/container-portlet.d.ts +1 -0
  14. package/es/control/dashboard/portlet/container-portlet/container-portlet.mjs +1 -0
  15. package/es/control/dashboard/portlet/portlet-layout/portlet-layout.css +1 -1
  16. package/es/control/dashboard/portlet/portlet-layout/portlet-layout.mjs +1 -1
  17. package/es/control/drbar/drbar.controller.mjs +2 -8
  18. package/es/control/drtab/drtab.controller.mjs +2 -8
  19. package/es/control/exp-bar/render-util.mjs +2 -2
  20. package/es/control/form/form/form.mjs +1 -1
  21. package/es/control/form/form-detail/form-button/form-button.css +1 -1
  22. package/es/control/form/form-detail/form-button/form-button.mjs +6 -5
  23. package/es/control/form/form-detail/form-group-panel/form-group-panel.mjs +1 -1
  24. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-shell.d.ts +72 -0
  25. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-shell.mjs +157 -0
  26. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.d.ts +1 -3
  27. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.mjs +17 -100
  28. 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
  29. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.mjs +19 -85
  30. package/es/control/form/form-detail/form-mdctrl/index.mjs +2 -0
  31. package/es/control/form/search-form/search-form.css +1 -1
  32. package/es/control/form/search-form/search-form.mjs +10 -3
  33. package/es/control/grid/grid-column/grid-field-column/grid-field-column.d.ts +2 -0
  34. package/es/control/grid/grid-column/grid-field-column/grid-field-column.mjs +7 -4
  35. package/es/control/grid/grid-column/grid-field-column/index.d.ts +2 -0
  36. package/es/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.mjs +2 -1
  37. package/es/control/panel/view-layout-panel/index.d.ts +10 -0
  38. package/es/control/panel/view-layout-panel/view-layout-panel.d.ts +11 -3
  39. package/es/control/panel/view-layout-panel/view-layout-panel.mjs +48 -42
  40. package/es/control/toolbar/toolbar.mjs +1 -1
  41. package/es/control/tree/tree.css +1 -1
  42. package/es/editor/html/wang-editor/wang-editor.mjs +5 -0
  43. package/es/editor/text-box/input/input.d.ts +2 -2
  44. package/es/editor/text-box/input/input.mjs +1 -1
  45. package/es/panel-component/nav-tabs/nav-tabs.css +1 -1
  46. package/es/panel-component/panel-button/panel-button.css +1 -1
  47. package/es/panel-component/panel-button/panel-button.mjs +5 -4
  48. package/es/panel-component/single-data-container/index.d.ts +10 -0
  49. package/es/panel-component/single-data-container/single-data-container.controller.d.ts +37 -2
  50. package/es/panel-component/single-data-container/single-data-container.controller.mjs +75 -1
  51. package/es/panel-component/single-data-container/single-data-container.d.ts +11 -2
  52. package/es/panel-component/single-data-container/single-data-container.mjs +34 -21
  53. package/es/view/common/view.css +1 -1
  54. package/lib/common/action-toolbar/action-toolbar.cjs +1 -1
  55. package/lib/common/no-data/no-data.cjs +1 -1
  56. package/lib/control/app-menu/app-menu.cjs +1 -1
  57. package/lib/control/app-menu/app-menu.css +1 -1
  58. package/lib/control/app-menu-icon-view/app-menu-icon-view.cjs +1 -1
  59. package/lib/control/calendar/calendar.cjs +1 -1
  60. package/lib/control/dashboard/portlet/container-portlet/container-portlet.cjs +1 -0
  61. package/lib/control/dashboard/portlet/container-portlet/container-portlet.css +1 -0
  62. package/lib/control/dashboard/portlet/portlet-layout/portlet-layout.cjs +1 -1
  63. package/lib/control/dashboard/portlet/portlet-layout/portlet-layout.css +1 -1
  64. package/lib/control/drbar/drbar.controller.cjs +2 -8
  65. package/lib/control/drtab/drtab.controller.cjs +2 -8
  66. package/lib/control/exp-bar/render-util.cjs +2 -2
  67. package/lib/control/form/form/form.cjs +1 -1
  68. package/lib/control/form/form-detail/form-button/form-button.cjs +6 -5
  69. package/lib/control/form/form-detail/form-button/form-button.css +1 -1
  70. package/lib/control/form/form-detail/form-group-panel/form-group-panel.cjs +1 -1
  71. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-shell.cjs +159 -0
  72. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.cjs +16 -99
  73. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.cjs +18 -84
  74. package/lib/control/form/form-detail/form-mdctrl/index.cjs +2 -0
  75. package/lib/control/form/search-form/search-form.cjs +10 -3
  76. package/lib/control/form/search-form/search-form.css +1 -1
  77. package/lib/control/grid/grid-column/grid-field-column/grid-field-column.cjs +7 -4
  78. package/lib/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.cjs +2 -1
  79. package/lib/control/panel/view-layout-panel/view-layout-panel.cjs +47 -41
  80. package/lib/control/toolbar/toolbar.cjs +1 -1
  81. package/lib/control/tree/tree.css +1 -1
  82. package/lib/editor/html/wang-editor/wang-editor.cjs +5 -0
  83. package/lib/editor/text-box/input/input.cjs +1 -1
  84. package/lib/panel-component/nav-tabs/nav-tabs.css +1 -1
  85. package/lib/panel-component/panel-button/panel-button.cjs +5 -4
  86. package/lib/panel-component/panel-button/panel-button.css +1 -1
  87. package/lib/panel-component/single-data-container/single-data-container.cjs +33 -20
  88. package/lib/panel-component/single-data-container/single-data-container.controller.cjs +74 -0
  89. package/lib/view/common/view.css +1 -1
  90. package/package.json +6 -6
  91. package/dist/wang-editor-675011c6.js +0 -2
  92. 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) => {
@@ -42,7 +42,7 @@ const IBizInput = /* @__PURE__ */ vue.defineComponent({
42
42
  if (!newVal) {
43
43
  currentVal.value = "";
44
44
  } else {
45
- currentVal.value = newVal;
45
+ currentVal.value = newVal.toString();
46
46
  }
47
47
  }
48
48
  }, {
@@ -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{display:none;width:var(--ibiz-nav-tabs-right-width)}
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(vue.resolveComponent("el-button"), {
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);width:100%;height:100%;overflow:hidden}.ibiz-panel-button i,.ibiz-panel-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)}
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
- var _a, _b;
39
- let _slot;
40
- const defaultSlots = ((_b = (_a = this.$slots).default) == null ? void 0 : _b.call(_a)) || [];
41
- const content = vue.createVNode(vue.resolveComponent("iBizRow"), {
42
- "slot": "content",
43
- "layout": this.modelData.layout
44
- }, _isSlot(_slot = defaultSlots.map((slot) => {
45
- const props = slot.props;
46
- if (!props || !props.controller) {
47
- return slot;
48
- }
49
- return vue.createVNode(vue.resolveComponent("iBizCol"), {
50
- "layoutPos": props.modelData.layoutPos,
51
- "state": props.controller.state
52
- }, _isSlot(slot) ? slot : {
53
- default: () => [slot]
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
- })) ? _slot : {
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", () => {
@@ -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-dev.0",
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-dev.0",
27
- "@ibiz-template/model-helper": "^0.1.12-dev.0",
28
- "@ibiz-template/runtime": "^0.1.12-dev.0",
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-dev.0",
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.4",
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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"}