@ibiz-template/vue3-components 0.6.16 → 0.6.17

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 (38) hide show
  1. package/dist/index-fN8w56IX.js +4 -0
  2. package/dist/index.min.css +1 -1
  3. package/dist/index.system.min.js +1 -1
  4. package/dist/{xlsx-util-94ZSfJEl.js → xlsx-util-tKOH6BvT.js} +1 -1
  5. package/es/control/caption-bar/caption-bar.css +1 -1
  6. package/es/control/caption-bar/caption-bar.mjs +3 -1
  7. package/es/control/drbar/drbar.controller.mjs +15 -16
  8. package/es/control/grid/grid-column/grid-field-edit-column/cell-edit.mjs +3 -1
  9. package/es/control/toolbar/index.d.ts +1 -0
  10. package/es/control/toolbar/toolbar.d.ts +1 -0
  11. package/es/control/toolbar/toolbar.mjs +15 -14
  12. package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/cell-edit.mjs +3 -1
  13. package/es/editor/data-picker/ibiz-picker/ibiz-picker.mjs +5 -7
  14. package/es/editor/date-picker/ibiz-date-picker/ibiz-date-picker.mjs +5 -7
  15. package/es/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.mjs +6 -8
  16. package/es/editor/text-box/ibiz-input-number/ibiz-input-number.mjs +6 -8
  17. package/es/editor/text-box/input/input.mjs +7 -9
  18. package/es/editor/user/ibiz-searchcond-edit/ibiz-searchcond-edit.mjs +6 -8
  19. package/es/panel-component/nav-tabs/nav-tabs.css +1 -1
  20. package/es/panel-component/nav-tabs/nav-tabs.mjs +7 -1
  21. package/es/web-app/main.mjs +8 -1
  22. package/lib/control/caption-bar/caption-bar.cjs +3 -1
  23. package/lib/control/caption-bar/caption-bar.css +1 -1
  24. package/lib/control/drbar/drbar.controller.cjs +15 -16
  25. package/lib/control/grid/grid-column/grid-field-edit-column/cell-edit.cjs +3 -1
  26. package/lib/control/toolbar/toolbar.cjs +15 -14
  27. package/lib/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/cell-edit.cjs +3 -1
  28. package/lib/editor/data-picker/ibiz-picker/ibiz-picker.cjs +5 -7
  29. package/lib/editor/date-picker/ibiz-date-picker/ibiz-date-picker.cjs +5 -7
  30. package/lib/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.cjs +6 -8
  31. package/lib/editor/text-box/ibiz-input-number/ibiz-input-number.cjs +6 -8
  32. package/lib/editor/text-box/input/input.cjs +7 -9
  33. package/lib/editor/user/ibiz-searchcond-edit/ibiz-searchcond-edit.cjs +6 -8
  34. package/lib/panel-component/nav-tabs/nav-tabs.cjs +7 -1
  35. package/lib/panel-component/nav-tabs/nav-tabs.css +1 -1
  36. package/lib/web-app/main.cjs +7 -0
  37. package/package.json +7 -7
  38. package/dist/index-l_9Kqet_.js +0 -4
@@ -1 +1 @@
1
- .ibiz-control-captionbar{--ibiz-control-captionbar-color:var(--ibiz-color-text-0);--ibiz-control-captionbar-font-size:var(--ibiz-font-size-header-5);--ibiz-control-captionbar-font-weight:var(--ibiz-font-weight-regular);--ibiz-control-captionbar-padding:0 var(--ibiz-spacing-base);--ibiz-control-captionbar-margin:var(--ibiz-spacing-none);position:relative;height:100%;padding:var(--ibiz-control-captionbar-padding)}.ibiz-control-captionbar .ibiz-control-captionbar-caption{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:relative;height:100%;padding-left:var(--ibiz-spacing-base);font-size:var(--ibiz-control-captionbar-font-size);font-weight:var(--ibiz-control-captionbar-font-weight);color:var(--ibiz-control-captionbar-color);display:flex;align-items:center;justify-content:flex-start}.ibiz-control-captionbar .ibiz-control-captionbar-caption::before{position:absolute;top:50%;left:0;width:4px;height:20px;content:"";background-color:var(--ibiz-color-primary);border-radius:2px;transform:translateY(-50%)}.ibiz-control-captionbar .ibiz-control-captionbar-caption.is-show-icon{padding-left:0}.ibiz-control-captionbar .ibiz-control-captionbar-caption.is-show-icon::before{display:none}.ibiz-control-captionbar-caption__icon{margin-right:var(--ibiz-spacing-tight)}.ibiz-view:not(.ibiz-view-appindexview) .ibiz-view .ibiz-view .ibiz-control-captionbar-caption{--ibiz-control-captionbar-font-size:var(--ibiz-font-size-header-5);--ibiz-control-captionbar-font-weight:var(--ibiz-font-weight-regular);padding-left:0}.ibiz-view:not(.ibiz-view-appindexview) .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before{content:none}.ibiz-drawer .ibiz-view .ibiz-view .ibiz-control-captionbar-caption,.ibiz-modal .ibiz-view .ibiz-view .ibiz-control-captionbar-caption,.ibiz-popover .ibiz-view .ibiz-view .ibiz-control-captionbar-caption{--ibiz-control-captionbar-font-size:var(--ibiz-font-size-header-5);--ibiz-control-captionbar-font-weight:var(--ibiz-font-weight-regular);padding-left:0}.ibiz-drawer .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before,.ibiz-modal .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before,.ibiz-popover .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before{content:none}
1
+ .ibiz-control-captionbar{--ibiz-control-captionbar-color:var(--ibiz-color-text-0);--ibiz-control-captionbar-font-size:var(--ibiz-font-size-header-5);--ibiz-control-captionbar-font-weight:var(--ibiz-font-weight-regular);--ibiz-control-captionbar-padding:0 var(--ibiz-spacing-base);--ibiz-control-captionbar-margin:var(--ibiz-spacing-none);position:relative;height:100%;padding:var(--ibiz-control-captionbar-padding)}.ibiz-control-captionbar .ibiz-control-captionbar-caption{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:relative;height:100%;padding-left:var(--ibiz-spacing-base);font-size:var(--ibiz-control-captionbar-font-size);font-weight:var(--ibiz-control-captionbar-font-weight);color:var(--ibiz-control-captionbar-color);display:flex;align-items:center;justify-content:flex-start}.ibiz-control-captionbar .ibiz-control-captionbar-caption::before{position:absolute;top:50%;left:0;width:4px;height:20px;content:"";background-color:var(--ibiz-color-primary);border-radius:2px;transform:translateY(-50%)}.ibiz-control-captionbar .ibiz-control-captionbar-caption.is-show-icon{padding-left:0}.ibiz-control-captionbar .ibiz-control-captionbar-caption.is-show-icon::before{display:none}.ibiz-control-captionbar-caption__icon{margin-right:var(--ibiz-spacing-tight)}.ibiz-control-captionbar-caption__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ibiz-view:not(.ibiz-view-appindexview) .ibiz-view .ibiz-view .ibiz-control-captionbar-caption{--ibiz-control-captionbar-font-size:var(--ibiz-font-size-header-5);--ibiz-control-captionbar-font-weight:var(--ibiz-font-weight-regular);padding-left:0}.ibiz-view:not(.ibiz-view-appindexview) .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before{content:none}.ibiz-drawer .ibiz-view .ibiz-view .ibiz-control-captionbar-caption,.ibiz-modal .ibiz-view .ibiz-view .ibiz-control-captionbar-caption,.ibiz-popover .ibiz-view .ibiz-view .ibiz-control-captionbar-caption{--ibiz-control-captionbar-font-size:var(--ibiz-font-size-header-5);--ibiz-control-captionbar-font-weight:var(--ibiz-font-weight-regular);padding-left:0}.ibiz-drawer .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before,.ibiz-modal .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before,.ibiz-popover .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before{content:none}
@@ -45,7 +45,9 @@ const CaptionBarControl = /* @__PURE__ */ defineComponent({
45
45
  }, [this.c.model.sysImage && createVNode(resolveComponent("iBizIcon"), {
46
46
  "class": [this.ns.be("caption", "icon")],
47
47
  "icon": this.c.model.sysImage
48
- }, null), this.c.state.caption])]
48
+ }, null), createVNode("div", {
49
+ "class": [this.ns.be("caption", "content")]
50
+ }, [this.c.state.caption])])]
49
51
  });
50
52
  }
51
53
  });
@@ -143,22 +143,21 @@ class DRBarController extends ControlController {
143
143
  * @memberof DRBarController
144
144
  */
145
145
  async calcDrBarItemsState() {
146
- const arr = [];
147
- this.state.drBarItems.forEach((group) => {
148
- var _a, _b;
149
- if ((_a = group.children) == null ? void 0 : _a.length) {
150
- (_b = group.children) == null ? void 0 : _b.forEach((item) => {
151
- arr.push(this.calcPermitted(item));
152
- });
153
- }
154
- });
155
- await Promise.all(arr);
156
- this.state.drBarItems.forEach((group) => {
157
- var _a;
158
- if ((_a = group.children) == null ? void 0 : _a.length) {
159
- group.visible = !group.children.every((item) => item.visible === false);
160
- }
161
- });
146
+ await Promise.all(
147
+ this.state.drBarItems.map(async (item) => {
148
+ var _a;
149
+ if ((_a = item.children) == null ? void 0 : _a.length) {
150
+ await Promise.all(
151
+ item.children.map(async (childItem) => {
152
+ await this.calcPermitted(childItem);
153
+ })
154
+ );
155
+ item.visible = item.children.some((childItem) => childItem.visible);
156
+ } else {
157
+ await this.calcPermitted(item);
158
+ }
159
+ })
160
+ );
162
161
  }
163
162
  /**
164
163
  * 加载完成
@@ -27,7 +27,9 @@ function useCellEdit(props, componentRef) {
27
27
  return !editorShowEdit.value;
28
28
  });
29
29
  const editorDisabled = false;
30
- const isAutoFocus = true;
30
+ const isAutoFocus = computed(() => {
31
+ return !hasError.value;
32
+ });
31
33
  const showEditMask = computed(() => {
32
34
  return cellEditable.value && !editable.value;
33
35
  });
@@ -22,6 +22,7 @@ export declare const IBizToolbarControl: import("@ibiz-template/vue3-util").Type
22
22
  c: import("@ibiz-template/runtime").ToolbarController<import("@ibiz/model-core").IControl, import("@ibiz-template/runtime").IToolbarState, import("@ibiz-template/runtime").IToolbarEvent>;
23
23
  btnSize: import("vue").Ref<string>;
24
24
  ns: import("@ibiz-template/core").Namespace;
25
+ toolbarStyle: string | undefined;
25
26
  handleClick: (item: import("@ibiz/model-core").IDEToolbarItem, event: MouseEvent, params?: IData | undefined) => Promise<void>;
26
27
  renderExtraButtons: (extraButtons: import("@ibiz-template/runtime").IExtraButton[]) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
27
28
  [key: string]: any;
@@ -26,6 +26,7 @@ export declare const ToolbarControl: import("vue").DefineComponent<{
26
26
  c: ToolbarController<import("@ibiz/model-core").IControl, import("@ibiz-template/runtime").IToolbarState, import("@ibiz-template/runtime").IToolbarEvent>;
27
27
  btnSize: import("vue").Ref<string>;
28
28
  ns: import("@ibiz-template/core").Namespace;
29
+ toolbarStyle: string | undefined;
29
30
  handleClick: (item: IDEToolbarItem, event: MouseEvent, params?: IData) => Promise<void>;
30
31
  renderExtraButtons: (extraButtons: IExtraButton[]) => VNode[];
31
32
  renderToolbarItem: (item: IDEToolbarItem) => VNode | null;
@@ -50,9 +50,11 @@ const ToolbarControl = /* @__PURE__ */ defineComponent({
50
50
  }
51
51
  },
52
52
  setup() {
53
+ var _a;
53
54
  const c = useControlController((...args) => new ToolbarController(...args));
54
55
  const ns = useNamespace("control-".concat(c.model.controlType.toLowerCase()));
55
56
  const btnSize = ref("default");
57
+ const toolbarStyle = (_a = c.model.toolbarStyle) == null ? void 0 : _a.toLowerCase();
56
58
  const handleClick = async (item, event, params) => {
57
59
  await c.onItemClick(item, event, params);
58
60
  };
@@ -78,13 +80,13 @@ const ToolbarControl = /* @__PURE__ */ defineComponent({
78
80
  "class": ns.b("submenu"),
79
81
  "index": item.id,
80
82
  "title": item.tooltip,
81
- "popper-class": ns.b("submenu-popper")
83
+ "popper-class": [ns.b("submenu-popper"), ns.bm("submenu-popper", toolbarStyle)]
82
84
  }, {
83
85
  default: () => {
84
86
  return detoolbarItems.map((item2) => {
85
- var _a;
87
+ var _a2;
86
88
  const actionId = item2.uiactionId;
87
- const visible = (_a = c.state.buttonsState[item2.id]) == null ? void 0 : _a.visible;
89
+ const visible = (_a2 = c.state.buttonsState[item2.id]) == null ? void 0 : _a2.visible;
88
90
  if (!visible) {
89
91
  return null;
90
92
  }
@@ -148,9 +150,9 @@ const ToolbarControl = /* @__PURE__ */ defineComponent({
148
150
  });
149
151
  };
150
152
  const renderToolbarItem = (item) => {
151
- var _a, _b;
153
+ var _a2, _b;
152
154
  const itemId = item.id;
153
- const visible = (_a = c.state.buttonsState[itemId]) == null ? void 0 : _a.visible;
155
+ const visible = (_a2 = c.state.buttonsState[itemId]) == null ? void 0 : _a2.visible;
154
156
  if (!visible) {
155
157
  return null;
156
158
  }
@@ -190,7 +192,7 @@ const ToolbarControl = /* @__PURE__ */ defineComponent({
190
192
  }, [createVNode(resolveComponent("el-button"), {
191
193
  "title": item.tooltip,
192
194
  "size": btnSize.value,
193
- "text": Object.is(buttonType, "INVERSE"),
195
+ "text": Object.is(buttonType, "inverse"),
194
196
  "type": buttonType,
195
197
  "loading": c.state.buttonsState[itemId].loading,
196
198
  "disabled": c.state.buttonsState[itemId].disabled,
@@ -216,24 +218,23 @@ const ToolbarControl = /* @__PURE__ */ defineComponent({
216
218
  c,
217
219
  btnSize,
218
220
  ns,
221
+ toolbarStyle,
219
222
  handleClick,
220
223
  renderExtraButtons,
221
224
  renderToolbarItem
222
225
  };
223
226
  },
224
227
  render() {
225
- var _a, _b, _c, _d;
228
+ var _a, _b, _c;
226
229
  const {
227
- state,
228
- model
230
+ state
229
231
  } = this.c;
230
- const toolbarStyle = (_a = model.toolbarStyle) == null ? void 0 : _a.toLowerCase();
231
232
  let content = null;
232
233
  if (state.isCreated) {
233
234
  content = [
234
235
  // 绘制最前方的额外按钮
235
- ((_b = state.extraButtons.before) == null ? void 0 : _b.length) > 0 && this.renderExtraButtons(state.extraButtons.before),
236
- (_c = this.modelData.detoolbarItems) == null ? void 0 : _c.map((item, index) => {
236
+ ((_a = state.extraButtons.before) == null ? void 0 : _a.length) > 0 && this.renderExtraButtons(state.extraButtons.before),
237
+ (_b = this.modelData.detoolbarItems) == null ? void 0 : _b.map((item, index) => {
237
238
  var _a2;
238
239
  const toolbarItemNode = this.renderToolbarItem(item);
239
240
  if ((_a2 = state.extraButtons[index]) == null ? void 0 : _a2.length) {
@@ -242,12 +243,12 @@ const ToolbarControl = /* @__PURE__ */ defineComponent({
242
243
  return toolbarItemNode;
243
244
  }),
244
245
  // 绘制最后方的额外按钮
245
- ((_d = state.extraButtons.after) == null ? void 0 : _d.length) > 0 && this.renderExtraButtons(state.extraButtons.after)
246
+ ((_c = state.extraButtons.after) == null ? void 0 : _c.length) > 0 && this.renderExtraButtons(state.extraButtons.after)
246
247
  ];
247
248
  }
248
249
  return createVNode(resolveComponent("iBizControlBase"), {
249
250
  "controller": this.c,
250
- "class": [this.ns.m(state.viewMode.toLowerCase()), this.ns.m(toolbarStyle)]
251
+ "class": [this.ns.m(state.viewMode.toLowerCase()), this.ns.m(this.toolbarStyle)]
251
252
  }, _isSlot(content) ? content : {
252
253
  default: () => [content]
253
254
  });
@@ -25,7 +25,9 @@ function useCellEdit(props, componentRef) {
25
25
  return !editorShowEdit.value;
26
26
  });
27
27
  const editorDisabled = false;
28
- const isAutoFocus = true;
28
+ const isAutoFocus = computed(() => {
29
+ return !hasError.value;
30
+ });
29
31
  const showEditMask = computed(() => {
30
32
  return cellEditable.value && !editable.value;
31
33
  });
@@ -128,13 +128,11 @@ const IBizPicker = /* @__PURE__ */ defineComponent({
128
128
  emit("change", null);
129
129
  };
130
130
  const closeCircle = (c.linkView ? 1 : 0) + (c.pickupView ? 1 : 0);
131
- if (props.autoFocus) {
132
- watch(editorRef, (newVal) => {
133
- if (newVal) {
134
- newVal.focus();
135
- }
136
- });
137
- }
131
+ watch(editorRef, (newVal) => {
132
+ if (props.autoFocus && newVal && newVal.focus) {
133
+ newVal.focus();
134
+ }
135
+ });
138
136
  const onFocus = (e) => {
139
137
  emit("focus", e);
140
138
  setEditable(true);
@@ -75,13 +75,11 @@ const IBizDatePicker = /* @__PURE__ */ defineComponent({
75
75
  emit("change", date);
76
76
  setEditable(false);
77
77
  };
78
- if (props.autoFocus) {
79
- watch(editorRef, (newVal) => {
80
- if (newVal && newVal.focus) {
81
- newVal.focus();
82
- }
83
- });
84
- }
78
+ watch(editorRef, (newVal) => {
79
+ if (props.autoFocus && newVal && newVal.focus) {
80
+ newVal.focus();
81
+ }
82
+ });
85
83
  const onFocus = (e) => {
86
84
  emit("focus", e);
87
85
  setEditable(true);
@@ -79,7 +79,7 @@ const IBizDropdown = /* @__PURE__ */ defineComponent({
79
79
  isLoading.value = false;
80
80
  };
81
81
  watch(() => props.value, async (newVal, oldVal) => {
82
- if (newVal || newVal === null) {
82
+ if (newVal || newVal === null || newVal === 0) {
83
83
  if (!isLoadedCodeList.value && oldVal === void 0) {
84
84
  await loadCodeList();
85
85
  }
@@ -149,13 +149,11 @@ const IBizDropdown = /* @__PURE__ */ defineComponent({
149
149
  }, {
150
150
  immediate: true
151
151
  });
152
- if (props.autoFocus) {
153
- watch(editorRef, (newVal) => {
154
- if (newVal) {
155
- newVal.focus();
156
- }
157
- });
158
- }
152
+ watch(editorRef, (newVal) => {
153
+ if (props.autoFocus && newVal && newVal.focus) {
154
+ newVal.focus();
155
+ }
156
+ });
159
157
  const onFocus = (e) => {
160
158
  editorState = "focus";
161
159
  emit("focus", e);
@@ -54,14 +54,12 @@ const IBizInputNumber = /* @__PURE__ */ defineComponent({
54
54
  const handleChange = (e) => {
55
55
  emit("change", e);
56
56
  };
57
- if (props.autoFocus) {
58
- watch(editorRef, (newVal) => {
59
- if (newVal) {
60
- const input = newVal.$el.getElementsByTagName("input")[0];
61
- input.focus();
62
- }
63
- });
64
- }
57
+ watch(editorRef, (newVal) => {
58
+ if (props.autoFocus && newVal) {
59
+ const input = newVal.$el.getElementsByTagName("input")[0];
60
+ input.focus();
61
+ }
62
+ });
65
63
  const onFocus = (e) => {
66
64
  emit("focus", e);
67
65
  setEditable(true);
@@ -94,15 +94,13 @@ const IBizInput = /* @__PURE__ */ defineComponent({
94
94
  emit("blur", event);
95
95
  setEditable(false);
96
96
  };
97
- if (props.autoFocus) {
98
- watch(editorRef, (newVal) => {
99
- if (newVal) {
100
- const inputTag = type.value === "textarea" ? "textarea" : "input";
101
- const input = newVal.$el.getElementsByTagName(inputTag)[0];
102
- input.focus();
103
- }
104
- });
105
- }
97
+ watch(editorRef, (newVal) => {
98
+ if (props.autoFocus && newVal) {
99
+ const inputTag = type.value === "textarea" ? "textarea" : "input";
100
+ const input = newVal.$el.getElementsByTagName(inputTag)[0];
101
+ input.focus();
102
+ }
103
+ });
106
104
  const onFocus = (e) => {
107
105
  emit("focus", e);
108
106
  setEditable(true);
@@ -62,14 +62,12 @@ const IBizSearchCondEdit = /* @__PURE__ */ defineComponent({
62
62
  const handleChange = (e) => {
63
63
  emit("change", e);
64
64
  };
65
- if (props.autoFocus) {
66
- watch(editorRef, (newVal) => {
67
- if (newVal) {
68
- const input = newVal.$el.getElementsByTagName("input")[0];
69
- input.focus();
70
- }
71
- });
72
- }
65
+ watch(editorRef, (newVal) => {
66
+ if (props.autoFocus && newVal) {
67
+ const input = newVal.$el.getElementsByTagName("input")[0];
68
+ input.focus();
69
+ }
70
+ });
73
71
  const onFocus = (e) => {
74
72
  emit("focus", e);
75
73
  setEditable(true);
@@ -1 +1 @@
1
- .ibiz-nav-tabs{--ibiz-nav-tabs-padding:var(--ibiz-spacing-base-loose);--ibiz-nav-tabs-left-width:calc(100% - 60px);--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);box-shadow:0 1px 4px 0 rgba(0,0,0,.25)}.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)}
1
+ .ibiz-nav-tabs{--ibiz-nav-tabs-padding:var(--ibiz-spacing-base-loose);--ibiz-nav-tabs-left-width:calc(100% - 60px);--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--caption{max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.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);box-shadow:0 1px 4px 0 rgba(0,0,0,.25)}.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)}
@@ -88,7 +88,13 @@ const NavTabs = /* @__PURE__ */ defineComponent({
88
88
  "name": msg.key,
89
89
  "key": msg.key,
90
90
  "label": label
91
- }, null);
91
+ }, {
92
+ label: () => {
93
+ return createVNode("div", {
94
+ "class": this.ns.em("left", "caption")
95
+ }, [label]);
96
+ }
97
+ });
92
98
  })) ? _slot : {
93
99
  default: () => [_slot]
94
100
  })]), createVNode("div", {
@@ -1,6 +1,6 @@
1
1
  import { install } from '@ibiz-template/core';
2
2
  import { install as install$1 } from '@ibiz-template/runtime';
3
- import { AppHooks, PluginFactory, OverlayContainer } from '@ibiz-template/vue3-util';
3
+ import { AppHooks, useAppStore, route2routePath, PluginFactory, OverlayContainer } from '@ibiz-template/vue3-util';
4
4
  import { createVueApp } from './create-vue-app.mjs';
5
5
  import { attachEnvironmentConfig } from './attach-environment-config.mjs';
6
6
  import App from './App.mjs';
@@ -30,6 +30,13 @@ async function runApp(plugins, opts) {
30
30
  });
31
31
  install();
32
32
  install$1();
33
+ ibiz.util.getGlobalParam = () => {
34
+ return useAppStore().appStore;
35
+ };
36
+ ibiz.util.getRouterParams = () => {
37
+ const routePath = route2routePath(AppRouter.getRouter().currentRoute.value);
38
+ return routePath.pathNodes;
39
+ };
33
40
  ibiz.plugin = new PluginFactory();
34
41
  ibiz.util.error.register(new UnauthorizedHandler());
35
42
  const app = createVueApp(App);
@@ -47,7 +47,9 @@ const CaptionBarControl = /* @__PURE__ */ vue.defineComponent({
47
47
  }, [this.c.model.sysImage && vue.createVNode(vue.resolveComponent("iBizIcon"), {
48
48
  "class": [this.ns.be("caption", "icon")],
49
49
  "icon": this.c.model.sysImage
50
- }, null), this.c.state.caption])]
50
+ }, null), vue.createVNode("div", {
51
+ "class": [this.ns.be("caption", "content")]
52
+ }, [this.c.state.caption])])]
51
53
  });
52
54
  }
53
55
  });
@@ -1 +1 @@
1
- .ibiz-control-captionbar{--ibiz-control-captionbar-color:var(--ibiz-color-text-0);--ibiz-control-captionbar-font-size:var(--ibiz-font-size-header-5);--ibiz-control-captionbar-font-weight:var(--ibiz-font-weight-regular);--ibiz-control-captionbar-padding:0 var(--ibiz-spacing-base);--ibiz-control-captionbar-margin:var(--ibiz-spacing-none);position:relative;height:100%;padding:var(--ibiz-control-captionbar-padding)}.ibiz-control-captionbar .ibiz-control-captionbar-caption{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:relative;height:100%;padding-left:var(--ibiz-spacing-base);font-size:var(--ibiz-control-captionbar-font-size);font-weight:var(--ibiz-control-captionbar-font-weight);color:var(--ibiz-control-captionbar-color);display:flex;align-items:center;justify-content:flex-start}.ibiz-control-captionbar .ibiz-control-captionbar-caption::before{position:absolute;top:50%;left:0;width:4px;height:20px;content:"";background-color:var(--ibiz-color-primary);border-radius:2px;transform:translateY(-50%)}.ibiz-control-captionbar .ibiz-control-captionbar-caption.is-show-icon{padding-left:0}.ibiz-control-captionbar .ibiz-control-captionbar-caption.is-show-icon::before{display:none}.ibiz-control-captionbar-caption__icon{margin-right:var(--ibiz-spacing-tight)}.ibiz-view:not(.ibiz-view-appindexview) .ibiz-view .ibiz-view .ibiz-control-captionbar-caption{--ibiz-control-captionbar-font-size:var(--ibiz-font-size-header-5);--ibiz-control-captionbar-font-weight:var(--ibiz-font-weight-regular);padding-left:0}.ibiz-view:not(.ibiz-view-appindexview) .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before{content:none}.ibiz-drawer .ibiz-view .ibiz-view .ibiz-control-captionbar-caption,.ibiz-modal .ibiz-view .ibiz-view .ibiz-control-captionbar-caption,.ibiz-popover .ibiz-view .ibiz-view .ibiz-control-captionbar-caption{--ibiz-control-captionbar-font-size:var(--ibiz-font-size-header-5);--ibiz-control-captionbar-font-weight:var(--ibiz-font-weight-regular);padding-left:0}.ibiz-drawer .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before,.ibiz-modal .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before,.ibiz-popover .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before{content:none}
1
+ .ibiz-control-captionbar{--ibiz-control-captionbar-color:var(--ibiz-color-text-0);--ibiz-control-captionbar-font-size:var(--ibiz-font-size-header-5);--ibiz-control-captionbar-font-weight:var(--ibiz-font-weight-regular);--ibiz-control-captionbar-padding:0 var(--ibiz-spacing-base);--ibiz-control-captionbar-margin:var(--ibiz-spacing-none);position:relative;height:100%;padding:var(--ibiz-control-captionbar-padding)}.ibiz-control-captionbar .ibiz-control-captionbar-caption{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:relative;height:100%;padding-left:var(--ibiz-spacing-base);font-size:var(--ibiz-control-captionbar-font-size);font-weight:var(--ibiz-control-captionbar-font-weight);color:var(--ibiz-control-captionbar-color);display:flex;align-items:center;justify-content:flex-start}.ibiz-control-captionbar .ibiz-control-captionbar-caption::before{position:absolute;top:50%;left:0;width:4px;height:20px;content:"";background-color:var(--ibiz-color-primary);border-radius:2px;transform:translateY(-50%)}.ibiz-control-captionbar .ibiz-control-captionbar-caption.is-show-icon{padding-left:0}.ibiz-control-captionbar .ibiz-control-captionbar-caption.is-show-icon::before{display:none}.ibiz-control-captionbar-caption__icon{margin-right:var(--ibiz-spacing-tight)}.ibiz-control-captionbar-caption__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ibiz-view:not(.ibiz-view-appindexview) .ibiz-view .ibiz-view .ibiz-control-captionbar-caption{--ibiz-control-captionbar-font-size:var(--ibiz-font-size-header-5);--ibiz-control-captionbar-font-weight:var(--ibiz-font-weight-regular);padding-left:0}.ibiz-view:not(.ibiz-view-appindexview) .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before{content:none}.ibiz-drawer .ibiz-view .ibiz-view .ibiz-control-captionbar-caption,.ibiz-modal .ibiz-view .ibiz-view .ibiz-control-captionbar-caption,.ibiz-popover .ibiz-view .ibiz-view .ibiz-control-captionbar-caption{--ibiz-control-captionbar-font-size:var(--ibiz-font-size-header-5);--ibiz-control-captionbar-font-weight:var(--ibiz-font-weight-regular);padding-left:0}.ibiz-drawer .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before,.ibiz-modal .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before,.ibiz-popover .ibiz-view .ibiz-view .ibiz-control-captionbar-caption::before{content:none}
@@ -145,22 +145,21 @@ class DRBarController extends runtime.ControlController {
145
145
  * @memberof DRBarController
146
146
  */
147
147
  async calcDrBarItemsState() {
148
- const arr = [];
149
- this.state.drBarItems.forEach((group) => {
150
- var _a, _b;
151
- if ((_a = group.children) == null ? void 0 : _a.length) {
152
- (_b = group.children) == null ? void 0 : _b.forEach((item) => {
153
- arr.push(this.calcPermitted(item));
154
- });
155
- }
156
- });
157
- await Promise.all(arr);
158
- this.state.drBarItems.forEach((group) => {
159
- var _a;
160
- if ((_a = group.children) == null ? void 0 : _a.length) {
161
- group.visible = !group.children.every((item) => item.visible === false);
162
- }
163
- });
148
+ await Promise.all(
149
+ this.state.drBarItems.map(async (item) => {
150
+ var _a;
151
+ if ((_a = item.children) == null ? void 0 : _a.length) {
152
+ await Promise.all(
153
+ item.children.map(async (childItem) => {
154
+ await this.calcPermitted(childItem);
155
+ })
156
+ );
157
+ item.visible = item.children.some((childItem) => childItem.visible);
158
+ } else {
159
+ await this.calcPermitted(item);
160
+ }
161
+ })
162
+ );
164
163
  }
165
164
  /**
166
165
  * 加载完成
@@ -29,7 +29,9 @@ function useCellEdit(props, componentRef) {
29
29
  return !editorShowEdit.value;
30
30
  });
31
31
  const editorDisabled = false;
32
- const isAutoFocus = true;
32
+ const isAutoFocus = vue.computed(() => {
33
+ return !hasError.value;
34
+ });
33
35
  const showEditMask = vue.computed(() => {
34
36
  return cellEditable.value && !editable.value;
35
37
  });
@@ -52,9 +52,11 @@ const ToolbarControl = /* @__PURE__ */ vue.defineComponent({
52
52
  }
53
53
  },
54
54
  setup() {
55
+ var _a;
55
56
  const c = vue3Util.useControlController((...args) => new runtime.ToolbarController(...args));
56
57
  const ns = vue3Util.useNamespace("control-".concat(c.model.controlType.toLowerCase()));
57
58
  const btnSize = vue.ref("default");
59
+ const toolbarStyle = (_a = c.model.toolbarStyle) == null ? void 0 : _a.toLowerCase();
58
60
  const handleClick = async (item, event, params) => {
59
61
  await c.onItemClick(item, event, params);
60
62
  };
@@ -80,13 +82,13 @@ const ToolbarControl = /* @__PURE__ */ vue.defineComponent({
80
82
  "class": ns.b("submenu"),
81
83
  "index": item.id,
82
84
  "title": item.tooltip,
83
- "popper-class": ns.b("submenu-popper")
85
+ "popper-class": [ns.b("submenu-popper"), ns.bm("submenu-popper", toolbarStyle)]
84
86
  }, {
85
87
  default: () => {
86
88
  return detoolbarItems.map((item2) => {
87
- var _a;
89
+ var _a2;
88
90
  const actionId = item2.uiactionId;
89
- const visible = (_a = c.state.buttonsState[item2.id]) == null ? void 0 : _a.visible;
91
+ const visible = (_a2 = c.state.buttonsState[item2.id]) == null ? void 0 : _a2.visible;
90
92
  if (!visible) {
91
93
  return null;
92
94
  }
@@ -150,9 +152,9 @@ const ToolbarControl = /* @__PURE__ */ vue.defineComponent({
150
152
  });
151
153
  };
152
154
  const renderToolbarItem = (item) => {
153
- var _a, _b;
155
+ var _a2, _b;
154
156
  const itemId = item.id;
155
- const visible = (_a = c.state.buttonsState[itemId]) == null ? void 0 : _a.visible;
157
+ const visible = (_a2 = c.state.buttonsState[itemId]) == null ? void 0 : _a2.visible;
156
158
  if (!visible) {
157
159
  return null;
158
160
  }
@@ -192,7 +194,7 @@ const ToolbarControl = /* @__PURE__ */ vue.defineComponent({
192
194
  }, [vue.createVNode(vue.resolveComponent("el-button"), {
193
195
  "title": item.tooltip,
194
196
  "size": btnSize.value,
195
- "text": Object.is(buttonType, "INVERSE"),
197
+ "text": Object.is(buttonType, "inverse"),
196
198
  "type": buttonType,
197
199
  "loading": c.state.buttonsState[itemId].loading,
198
200
  "disabled": c.state.buttonsState[itemId].disabled,
@@ -218,24 +220,23 @@ const ToolbarControl = /* @__PURE__ */ vue.defineComponent({
218
220
  c,
219
221
  btnSize,
220
222
  ns,
223
+ toolbarStyle,
221
224
  handleClick,
222
225
  renderExtraButtons,
223
226
  renderToolbarItem
224
227
  };
225
228
  },
226
229
  render() {
227
- var _a, _b, _c, _d;
230
+ var _a, _b, _c;
228
231
  const {
229
- state,
230
- model
232
+ state
231
233
  } = this.c;
232
- const toolbarStyle = (_a = model.toolbarStyle) == null ? void 0 : _a.toLowerCase();
233
234
  let content = null;
234
235
  if (state.isCreated) {
235
236
  content = [
236
237
  // 绘制最前方的额外按钮
237
- ((_b = state.extraButtons.before) == null ? void 0 : _b.length) > 0 && this.renderExtraButtons(state.extraButtons.before),
238
- (_c = this.modelData.detoolbarItems) == null ? void 0 : _c.map((item, index) => {
238
+ ((_a = state.extraButtons.before) == null ? void 0 : _a.length) > 0 && this.renderExtraButtons(state.extraButtons.before),
239
+ (_b = this.modelData.detoolbarItems) == null ? void 0 : _b.map((item, index) => {
239
240
  var _a2;
240
241
  const toolbarItemNode = this.renderToolbarItem(item);
241
242
  if ((_a2 = state.extraButtons[index]) == null ? void 0 : _a2.length) {
@@ -244,12 +245,12 @@ const ToolbarControl = /* @__PURE__ */ vue.defineComponent({
244
245
  return toolbarItemNode;
245
246
  }),
246
247
  // 绘制最后方的额外按钮
247
- ((_d = state.extraButtons.after) == null ? void 0 : _d.length) > 0 && this.renderExtraButtons(state.extraButtons.after)
248
+ ((_c = state.extraButtons.after) == null ? void 0 : _c.length) > 0 && this.renderExtraButtons(state.extraButtons.after)
248
249
  ];
249
250
  }
250
251
  return vue.createVNode(vue.resolveComponent("iBizControlBase"), {
251
252
  "controller": this.c,
252
- "class": [this.ns.m(state.viewMode.toLowerCase()), this.ns.m(toolbarStyle)]
253
+ "class": [this.ns.m(state.viewMode.toLowerCase()), this.ns.m(this.toolbarStyle)]
253
254
  }, _isSlot(content) ? content : {
254
255
  default: () => [content]
255
256
  });
@@ -27,7 +27,9 @@ function useCellEdit(props, componentRef) {
27
27
  return !editorShowEdit.value;
28
28
  });
29
29
  const editorDisabled = false;
30
- const isAutoFocus = true;
30
+ const isAutoFocus = vue.computed(() => {
31
+ return !hasError.value;
32
+ });
31
33
  const showEditMask = vue.computed(() => {
32
34
  return cellEditable.value && !editable.value;
33
35
  });
@@ -130,13 +130,11 @@ const IBizPicker = /* @__PURE__ */ vue.defineComponent({
130
130
  emit("change", null);
131
131
  };
132
132
  const closeCircle = (c.linkView ? 1 : 0) + (c.pickupView ? 1 : 0);
133
- if (props.autoFocus) {
134
- vue.watch(editorRef, (newVal) => {
135
- if (newVal) {
136
- newVal.focus();
137
- }
138
- });
139
- }
133
+ vue.watch(editorRef, (newVal) => {
134
+ if (props.autoFocus && newVal && newVal.focus) {
135
+ newVal.focus();
136
+ }
137
+ });
140
138
  const onFocus = (e) => {
141
139
  emit("focus", e);
142
140
  setEditable(true);
@@ -77,13 +77,11 @@ const IBizDatePicker = /* @__PURE__ */ vue.defineComponent({
77
77
  emit("change", date);
78
78
  setEditable(false);
79
79
  };
80
- if (props.autoFocus) {
81
- vue.watch(editorRef, (newVal) => {
82
- if (newVal && newVal.focus) {
83
- newVal.focus();
84
- }
85
- });
86
- }
80
+ vue.watch(editorRef, (newVal) => {
81
+ if (props.autoFocus && newVal && newVal.focus) {
82
+ newVal.focus();
83
+ }
84
+ });
87
85
  const onFocus = (e) => {
88
86
  emit("focus", e);
89
87
  setEditable(true);