@ibiz-template/vue3-components 0.6.0-alpha.4 → 0.6.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,8 +3,8 @@
3
3
  var vue = require('vue');
4
4
  var vue3Util = require('@ibiz-template/vue3-util');
5
5
  require('./ibiz-picker-select-view.css');
6
- var ramda = require('ramda');
7
6
  var runtime = require('@ibiz-template/runtime');
7
+ var ramda = require('ramda');
8
8
 
9
9
  "use strict";
10
10
  function _isSlot(s) {
@@ -32,9 +32,24 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
32
32
  const queryValue = vue.ref("");
33
33
  const visible = vue.ref(false);
34
34
  const pickViewWidth = vue.ref("auto");
35
- const context = vue.ref(ramda.clone(c.context));
36
- const params = vue.ref(ramda.clone(c.params));
35
+ const context = vue.ref(c.context);
36
+ const params = vue.ref(c.params);
37
+ vue.watch(() => props.data, (newVal) => {
38
+ const {
39
+ context: tempContext,
40
+ params: tempParams
41
+ } = c.handlePublicParams(newVal, c.context, c.params);
42
+ Object.assign(context.value, tempContext);
43
+ Object.assign(params.value, tempParams);
44
+ }, {
45
+ immediate: true,
46
+ deep: true
47
+ });
37
48
  const isEditable = vue.ref(false);
49
+ const multipleTempValue = vue.ref(null);
50
+ const multipleTempText = vue.ref(null);
51
+ const multipleObjs = vue.ref(null);
52
+ const showView = vue.ref(false);
38
53
  const showFormDefaultContent = vue.computed(() => {
39
54
  if (props.controlParams && props.controlParams.editmode === "hover") {
40
55
  return true;
@@ -50,12 +65,6 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
50
65
  }, 100);
51
66
  }
52
67
  };
53
- const onInputChange = () => {
54
- context.value = {
55
- query: queryValue.value,
56
- ...context.value
57
- };
58
- };
59
68
  const triggerMenu = (show) => {
60
69
  if (props.disabled) {
61
70
  return;
@@ -86,10 +95,30 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
86
95
  params.value.selectedData = selectedData.value;
87
96
  }
88
97
  } else {
89
- keySet.value = [];
90
98
  const selectItems = [];
99
+ keySet.value = [];
100
+ items.value = [];
91
101
  if (newVal) {
92
- if (!props.data || !c.valueItem || !props.data[c.valueItem]) {
102
+ if (c.model.valueType === "OBJECTS") {
103
+ newVal.forEach((item) => {
104
+ const _item = ramda.clone(item);
105
+ Object.assign(_item, {
106
+ [c.keyName]: item[c.objectIdField],
107
+ [c.textName]: item[c.objectNameField]
108
+ });
109
+ if (c.objectValueField) {
110
+ Object.assign(_item, {
111
+ ...item[c.objectValueField]
112
+ });
113
+ delete _item[c.objectValueField];
114
+ }
115
+ if (_item[c.keyName]) {
116
+ items.value.push(_item);
117
+ keySet.value.push(_item[c.keyName]);
118
+ }
119
+ });
120
+ selectItems.push(...newVal);
121
+ } else if (!props.data || !c.valueItem || !props.data[c.valueItem]) {
93
122
  ibiz.log.error("\u503C\u9879\u5F02\u5E38");
94
123
  } else {
95
124
  const tempValue = props.data[c.valueItem].split(",");
@@ -100,7 +129,6 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
100
129
  srfkey
101
130
  });
102
131
  });
103
- items.value = [];
104
132
  selectItems.forEach((item) => {
105
133
  keySet.value.push(item.srfkey);
106
134
  const index = items.value.findIndex((i) => Object.is(i.srfkey, item.srfkey));
@@ -114,10 +142,10 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
114
142
  }
115
143
  }
116
144
  selectedData.value = selectItems;
117
- params.value.selectedData = selectedData.value;
145
+ multipleObjs.value = selectItems;
118
146
  }
119
147
  }, {
120
- immediate: false,
148
+ immediate: true,
121
149
  deep: true
122
150
  });
123
151
  vue.onMounted(() => {
@@ -137,9 +165,26 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
137
165
  }
138
166
  emit("change", null);
139
167
  };
168
+ const onInputChange = (e) => {
169
+ if (!e) {
170
+ onClear();
171
+ }
172
+ };
140
173
  const onViewDataChange = (event) => {
141
174
  if (event.length === 0) {
142
- onClear();
175
+ if (singleSelect.value) {
176
+ onClear();
177
+ } else {
178
+ items.value = [];
179
+ if (c.model.valueType === "OBJECTS") {
180
+ multipleObjs.value = null;
181
+ } else {
182
+ if (c.valueItem) {
183
+ multipleTempValue.value = null;
184
+ }
185
+ multipleTempText.value = null;
186
+ }
187
+ }
143
188
  return;
144
189
  }
145
190
  if (singleSelect.value) {
@@ -154,6 +199,15 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
154
199
  } else {
155
200
  emit("change", tempText);
156
201
  }
202
+ } else if (c.model.valueType === "OBJECTS") {
203
+ if (event && Array.isArray(event)) {
204
+ const objs = [];
205
+ event.forEach((item) => {
206
+ const obj = c.handleObjectParams(item);
207
+ objs.push(obj);
208
+ });
209
+ multipleObjs.value = objs;
210
+ }
157
211
  } else {
158
212
  let tempValue = "";
159
213
  let tempText = "";
@@ -176,9 +230,9 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
176
230
  tempValue = tempValue.substring(0, tempValue.length - 1);
177
231
  tempText = tempText.substring(0, tempText.length - 1);
178
232
  if (c.valueItem) {
179
- emit("change", tempValue, c.valueItem);
233
+ multipleTempValue.value = tempValue;
180
234
  }
181
- emit("change", tempText);
235
+ multipleTempText.value = tempText;
182
236
  }
183
237
  };
184
238
  const openLinkView = async (e) => {
@@ -198,20 +252,31 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
198
252
  }
199
253
  });
200
254
  }
201
- let tempValue = "";
202
- let tempText = "";
203
- val.forEach((select) => {
204
- const srfkey = select[c.keyName] ? select[c.keyName] : select.srfkey;
205
- tempValue += "".concat(srfkey, ",");
206
- const srfmajortext = select[c.textName] ? select[c.textName] : select.srfmajortext;
207
- tempText += "".concat(srfmajortext, ",");
208
- });
209
- tempValue = tempValue.substring(0, tempValue.length - 1);
210
- tempText = tempText.substring(0, tempText.length - 1);
211
- if (c.valueItem) {
212
- emit("change", tempValue, c.valueItem);
255
+ if (c.model.valueType === "OBJECTS") {
256
+ const objs = [];
257
+ val.forEach((item) => {
258
+ const obj = c.handleObjectParams(item);
259
+ objs.push(obj);
260
+ });
261
+ emit("change", objs);
262
+ } else {
263
+ let tempValue = "";
264
+ let tempText = "";
265
+ val.forEach((select) => {
266
+ const srfkey = select[c.keyName] ? select[c.keyName] : select.srfkey;
267
+ tempValue += "".concat(srfkey, ",");
268
+ const srfmajortext = select[c.textName] ? select[c.textName] : select.srfmajortext;
269
+ tempText += "".concat(srfmajortext, ",");
270
+ });
271
+ tempValue = tempValue.substring(0, tempValue.length - 1);
272
+ tempText = tempText.substring(0, tempText.length - 1);
273
+ if (c.valueItem) {
274
+ multipleTempValue.value = tempValue;
275
+ emit("change", tempValue, c.valueItem);
276
+ }
277
+ multipleTempText.value = tempText;
278
+ emit("change", tempText);
213
279
  }
214
- emit("change", tempText);
215
280
  };
216
281
  const remoteMethod = (e) => {
217
282
  queryValue.value = e;
@@ -219,6 +284,9 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
219
284
  const onSelectionChange = (event) => {
220
285
  if (event.data) {
221
286
  onViewDataChange(event.data);
287
+ if (singleSelect.value && editorRef.value) {
288
+ editorRef.value.handleClose();
289
+ }
222
290
  }
223
291
  };
224
292
  const modal = new runtime.Modal({
@@ -245,8 +313,21 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
245
313
  if (singleSelect.value) {
246
314
  return queryValue.value;
247
315
  }
248
- return selectedData.value.map((item) => item.srfmajortext).join(",");
316
+ return selectedData.value.map((item) => item[c.textName]).join(",");
249
317
  });
318
+ const onVisibleChange = (e) => {
319
+ showView.value = e;
320
+ if (!e && !singleSelect.value) {
321
+ if (c.model.valueType === "OBJECTS") {
322
+ emit("change", multipleObjs.value);
323
+ } else {
324
+ if (c.valueItem) {
325
+ emit("change", multipleTempValue.value, c.valueItem);
326
+ }
327
+ emit("change", multipleTempText.value);
328
+ }
329
+ }
330
+ };
250
331
  return {
251
332
  ns,
252
333
  c,
@@ -274,7 +355,10 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
274
355
  valueText,
275
356
  isEditable,
276
357
  setEditable,
277
- showFormDefaultContent
358
+ showFormDefaultContent,
359
+ onVisibleChange,
360
+ showView,
361
+ selectedData
278
362
  };
279
363
  },
280
364
  render() {
@@ -283,7 +367,8 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
283
367
  "trigger": "click",
284
368
  "teleported": false,
285
369
  "class": this.ns.b("select"),
286
- "popper-class": this.ns.b("popper")
370
+ "popper-class": this.ns.b("popper"),
371
+ "onVisibleChange": this.onVisibleChange
287
372
  }, {
288
373
  default: () => {
289
374
  let _slot;
@@ -294,6 +379,7 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
294
379
  "disabled": this.disabled,
295
380
  "readonly": this.readonly,
296
381
  "onChange": this.onInputChange,
382
+ "clearable": true,
297
383
  "onFocus": (e) => {
298
384
  this.onFocus(e);
299
385
  },
@@ -304,13 +390,13 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
304
390
  return [this.queryValue && !this.disabled && !this.readonly && vue.createVNode("ion-icon", {
305
391
  "onClick": this.onClear,
306
392
  "name": "clear"
307
- }, null), this.c.model.linkAppViewId && this.queryValue && vue.createVNode("ion-icon", {
393
+ }, null), this.c.model.linkAppViewId && vue.createVNode("ion-icon", {
308
394
  "onClick": this.openLinkView,
309
395
  "name": "link-arrow"
310
396
  }, null)];
311
397
  }
312
398
  }) : vue.createVNode(vue.resolveComponent("el-select"), {
313
- "popper-class": "select",
399
+ "popper-class": this.ns.b("select-popover"),
314
400
  "model-value": this.keySet,
315
401
  "placeholder": this.c.placeHolder ? this.c.placeHolder : " ",
316
402
  "multiple": true,
@@ -335,19 +421,24 @@ const IBizPickerSelectView = /* @__PURE__ */ vue.defineComponent({
335
421
  });
336
422
  },
337
423
  dropdown: () => {
424
+ if (!this.showView) {
425
+ return;
426
+ }
338
427
  const viewShell = vue.resolveComponent("IBizViewShell");
339
- return vue.createVNode(vue.resolveComponent("el-dropdown-menu"), null, {
340
- default: () => [this.c.pickupView && vue.h(viewShell, {
341
- context: this.context,
342
- params: this.params,
343
- viewId: this.c.pickupView.id,
344
- style: {
345
- height: "100%",
346
- width: this.pickViewWidth
347
- },
348
- onSelectionChange: this.onSelectionChange,
349
- modal: this.modal
350
- })]
428
+ return this.c.pickupView && vue.h(viewShell, {
429
+ context: this.context,
430
+ params: this.params,
431
+ viewId: this.c.pickupView.id,
432
+ style: {
433
+ height: "100%",
434
+ width: this.pickViewWidth
435
+ },
436
+ state: {
437
+ singleSelect: this.singleSelect,
438
+ selectedData: this.selectedData
439
+ },
440
+ onSelectionChange: this.onSelectionChange,
441
+ modal: this.modal
351
442
  });
352
443
  }
353
444
  });
@@ -1 +1 @@
1
- .ibiz-picker-select-view{width:100%}.ibiz-picker-select-view .el-dropdown{width:100%}.ibiz-picker-select-view .el-select{width:100%}.ibiz-picker-select-view-popper.el-popper.el-dropdown__popper{width:100%;max-height:500px;overflow:auto}.ibiz-picker-select-view-popper.el-popper.el-dropdown__popper .el-scrollbar .el-dropdown__list{background:var(--ibiz-color-primary-text)}.ibiz-picker-select-view-popper.el-popper.el-dropdown__popper .el-scrollbar .el-dropdown__list .el-dropdown-menu{background:var(--ibiz-color-primary-text)}.ibiz-picker-select-view-form-default-content{display:none}.ibiz-form-item .ibiz-picker-select-view.is-show-default:hover .ibiz-picker-select-view-form-default-content{display:none}.ibiz-form-item .ibiz-picker-select-view.is-show-default:hover .ibiz-picker-select-view-select{display:block}.ibiz-form-item .ibiz-picker-select-view.is-show-default .ibiz-picker-select-view-form-default-content{display:flex;align-items:center;width:100%;height:var(--ibiz-editor-default-line-height);padding:var(--ibiz-form-item-hover-edit-padding);font-family:Arial,sans-serif;font-size:var(--ibiz-form-item-font-size);line-height:var(--ibiz-editor-default-line-height);color:var(--ibiz-form-item-text-color)}.ibiz-form-item .ibiz-picker-select-view.is-show-default .ibiz-picker-select-view-form-default-content .ibiz-picker-select-view-content-item{height:22px;padding:0 9px;margin:2px 6px 2px 0;font-size:var(--ibiz-font-size-small);line-height:22px;color:var(--ibiz-editor-default-text-color);background-color:var(--ibiz-color-fill-0);border:1px solid transparent;border-radius:var(--ibiz-border-radius-small)}.ibiz-form-item .ibiz-picker-select-view.is-show-default .ibiz-picker-select-view-select{display:none}.ibiz-form-item .ibiz-picker-select-view.is-show-default.is-editable .ibiz-picker-select-view-form-default-content{display:none}.ibiz-form-item .ibiz-picker-select-view.is-show-default.is-editable .ibiz-picker-select-view-select{display:block}
1
+ .ibiz-picker-select-view{width:100%}.ibiz-picker-select-view .el-dropdown{width:100%}.ibiz-picker-select-view .el-select{width:100%}.ibiz-picker-select-view-popper.el-popper.el-dropdown__popper{width:100%;min-height:100px;max-height:500px;overflow:auto}.ibiz-picker-select-view-popper.el-popper.el-dropdown__popper .el-scrollbar .el-dropdown__list{background:var(--ibiz-color-primary-text)}.ibiz-picker-select-view-popper.el-popper.el-dropdown__popper .el-scrollbar .el-dropdown__list .el-dropdown-menu{background:var(--ibiz-color-primary-text)}.ibiz-picker-select-view-form-default-content{display:none}.ibiz-form-item .ibiz-picker-select-view.is-show-default:hover .ibiz-picker-select-view-form-default-content{display:none}.ibiz-form-item .ibiz-picker-select-view.is-show-default:hover .ibiz-picker-select-view-select{display:block}.ibiz-form-item .ibiz-picker-select-view.is-show-default .ibiz-picker-select-view-form-default-content{display:flex;align-items:center;width:100%;height:var(--ibiz-editor-default-line-height);padding:var(--ibiz-form-item-hover-edit-padding);font-family:Arial,sans-serif;font-size:var(--ibiz-form-item-font-size);line-height:var(--ibiz-editor-default-line-height);color:var(--ibiz-form-item-text-color)}.ibiz-form-item .ibiz-picker-select-view.is-show-default .ibiz-picker-select-view-form-default-content .ibiz-picker-select-view-content-item{height:22px;padding:0 9px;margin:2px 6px 2px 0;font-size:var(--ibiz-font-size-small);line-height:22px;color:var(--ibiz-editor-default-text-color);background-color:var(--ibiz-color-fill-0);border:1px solid transparent;border-radius:var(--ibiz-border-radius-small)}.ibiz-form-item .ibiz-picker-select-view.is-show-default .ibiz-picker-select-view-select{display:none}.ibiz-form-item .ibiz-picker-select-view.is-show-default.is-editable .ibiz-picker-select-view-form-default-content{display:none}.ibiz-form-item .ibiz-picker-select-view.is-show-default.is-editable .ibiz-picker-select-view-select{display:block}.ibiz-picker-select-view-select-popover{display:none}
@@ -295,7 +295,14 @@ class PickerEditorController extends runtime.EditorController {
295
295
  }
296
296
  if (this.objectValueField) {
297
297
  Object.assign(object, {
298
- [this.objectValueField]: ramda.clone(select)
298
+ [this.objectValueField]: {
299
+ ...select
300
+ }
301
+ });
302
+ }
303
+ if (select.srfnodeid) {
304
+ Object.assign(object, {
305
+ srfnodeid: select.srfnodeid
299
306
  });
300
307
  }
301
308
  return object;
@@ -4,7 +4,23 @@ var runtime = require('@ibiz-template/runtime');
4
4
  var treeView_engine = require('./tree-view.engine.cjs');
5
5
 
6
6
  "use strict";
7
+ var __defProp = Object.defineProperty;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __publicField = (obj, key, value) => {
10
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
11
+ return value;
12
+ };
7
13
  class PickupTreeViewEngine extends treeView_engine.TreeViewEngine {
14
+ constructor() {
15
+ super(...arguments);
16
+ /**
17
+ * 选中数据
18
+ *
19
+ * @type {IData[]}
20
+ * @memberof PickupViewEngine
21
+ */
22
+ __publicField(this, "selectData", []);
23
+ }
8
24
  /**
9
25
  * 创建完成
10
26
  *
@@ -18,6 +34,41 @@ class PickupTreeViewEngine extends treeView_engine.TreeViewEngine {
18
34
  this.view.slotProps.tree = {};
19
35
  }
20
36
  this.view.slotProps.tree.singleSelect = this.view.state.singleSelect;
37
+ if (this.view.state.selectedData) {
38
+ this.selectData = this.view.state.selectedData.map((item) => {
39
+ return {
40
+ ...item,
41
+ _id: item.srfnodeid
42
+ };
43
+ });
44
+ const set = /* @__PURE__ */ new Set();
45
+ this.selectData.forEach((item) => {
46
+ if (item.srfnodeid) {
47
+ const keys = this.calcExpandKeys(item.srfnodeid);
48
+ keys.forEach((key) => set.add(key));
49
+ }
50
+ });
51
+ this.view.slotProps.tree.defaultExpandedKeys = Array.from(set);
52
+ }
53
+ }
54
+ /**
55
+ * 根据key计算需要展开的节点标识
56
+ * @author lxm
57
+ * @date 2023-11-07 02:42:45
58
+ * @param {string} key
59
+ * @return {*} {string[]}
60
+ */
61
+ calcExpandKeys(key) {
62
+ const expandedKeys = [];
63
+ key.split(":").forEach((item, index) => {
64
+ if (index === 0) {
65
+ expandedKeys.push(item);
66
+ } else {
67
+ expandedKeys.push("".concat(expandedKeys[index - 1], ":").concat(item));
68
+ }
69
+ });
70
+ expandedKeys.pop();
71
+ return expandedKeys;
21
72
  }
22
73
  /**
23
74
  * 挂载完成
@@ -28,15 +79,21 @@ class PickupTreeViewEngine extends treeView_engine.TreeViewEngine {
28
79
  */
29
80
  async onMounted() {
30
81
  const { model } = this.view;
82
+ let forbiddenSelectionChange = false;
31
83
  this.xdataControl.evt.on("onSelectionChange", async (event) => {
32
- if (event.data[0] && event.data[0] instanceof runtime.TreeDataSetNodeData) {
33
- event.data[0] = event.data[0]._deData;
84
+ if (forbiddenSelectionChange) {
85
+ return;
34
86
  }
35
87
  this.view.evt.emit("onSelectionChange", { ...event });
36
88
  });
37
89
  this.xdataControl.evt.on("onActive", async (event) => {
38
90
  this.view.evt.emit("onDataActive", { ...event });
39
91
  });
92
+ this.xdataControl.evt.on("onLoadSuccess", () => {
93
+ forbiddenSelectionChange = true;
94
+ this.xdataControl.setSelection(this.selectData);
95
+ forbiddenSelectionChange = false;
96
+ });
40
97
  if (!this.view.state.noLoadDefault && model.loadDefault) {
41
98
  this.load();
42
99
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/vue3-components",
3
- "version": "0.6.0-alpha.4",
3
+ "version": "0.6.1-alpha.0",
4
4
  "description": "使用 rollup 编译 vue 组件或者 jsx",
5
5
  "main": "lib/index.cjs",
6
6
  "module": "es/index.mjs",
@@ -27,12 +27,12 @@
27
27
  "@floating-ui/dom": "^1.5.3",
28
28
  "@ibiz-template-plugin/ai-chat": "^0.0.1",
29
29
  "@ibiz-template-plugin/gantt": "0.1.1",
30
- "@ibiz-template/core": "^0.6.0-alpha.4",
31
- "@ibiz-template/devtool": "0.0.1-dev.3",
32
- "@ibiz-template/model-helper": "^0.6.0-alpha.4",
33
- "@ibiz-template/runtime": "^0.6.0-alpha.4",
34
- "@ibiz-template/theme": "^0.5.0",
35
- "@ibiz-template/vue3-util": "^0.6.0-alpha.4",
30
+ "@ibiz-template/core": "^0.6.0",
31
+ "@ibiz-template/devtool": "0.0.1-alpha.1",
32
+ "@ibiz-template/model-helper": "^0.6.0",
33
+ "@ibiz-template/runtime": "^0.6.0",
34
+ "@ibiz-template/theme": "^0.6.0",
35
+ "@ibiz-template/vue3-util": "^0.6.0",
36
36
  "@ibiz-template/web-theme": "^1.1.8",
37
37
  "@ibiz/model-core": "^0.1.11",
38
38
  "@imengyu/vue3-context-menu": "^1.3.5",
@@ -84,11 +84,11 @@
84
84
  },
85
85
  "peerDependencies": {
86
86
  "@floating-ui/dom": "^1.5.1",
87
- "@ibiz-template/core": "^0.5.2",
88
- "@ibiz-template/model-helper": "^0.5.2",
89
- "@ibiz-template/runtime": "^0.5.2",
90
- "@ibiz-template/theme": "^0.5.0",
91
- "@ibiz-template/vue3-util": "^0.5.2",
87
+ "@ibiz-template/core": "^0.6.0",
88
+ "@ibiz-template/model-helper": "^0.6.0",
89
+ "@ibiz-template/runtime": "^0.6.0",
90
+ "@ibiz-template/theme": "^0.6.0",
91
+ "@ibiz-template/vue3-util": "^0.6.0",
92
92
  "@ibiz/model-core": "^0.1.6",
93
93
  "@imengyu/vue3-context-menu": "^1.3.3",
94
94
  "@monaco-editor/loader": "^1.3.3",