@otwb/ui 2.0.40 → 2.0.42

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 (3) hide show
  1. package/dist/index.js +4 -1
  2. package/dist/page.js +302 -298
  3. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -945,7 +945,10 @@ const AppMultiTabs = /* @__PURE__ */ defineComponent({
945
945
  closable: z.closable,
946
946
  dark: d.dark,
947
947
  onClick: () => {
948
- G || H.push(z.fullPath);
948
+ if (!G) {
949
+ let d = new URL(z.href, window.location.origin);
950
+ H.push(`${d.pathname}${d.search}${d.hash}`);
951
+ }
949
952
  },
950
953
  onContextmenu: (d) => W(d, z)
951
954
  }, { default: () => [B.name ? B.name({
package/dist/page.js CHANGED
@@ -7,12 +7,12 @@ import { until } from "@vueuse/core";
7
7
  import { NButton, NCheckbox, NColorPicker, NDatePicker, NDrawer, NDrawerContent, NFlex, NInput, NInputNumber, NModal, NScrollbar, NSelect, NText, NUpload, useMessage } from "ithinkdt-ui";
8
8
  import { format } from "date-fns";
9
9
  import { useFormItem } from "ithinkdt-ui/es/_mixins";
10
- import { nanoid } from "nanoid";
10
+ import "nanoid";
11
11
  import { useDict, useDictMap } from "@otwb/common/dict";
12
- function _isSlot(r) {
13
- return typeof r == "function" || Object.prototype.toString.call(r) === "[object Object]" && !isVNode(r);
12
+ function _isSlot(i) {
13
+ return typeof i == "function" || Object.prototype.toString.call(i) === "[object Object]" && !isVNode(i);
14
14
  }
15
- var mapProps = (r) => Object.fromEntries(Object.entries(r || {}).map(([r, l]) => [r, unref(l)])), SimpleUpload = /* @__PURE__ */ defineComponent({
15
+ var mapProps = (i) => Object.fromEntries(Object.entries(i || {}).map(([i, c]) => [i, unref(c)])), SimpleUpload = /* @__PURE__ */ defineComponent({
16
16
  name: "SimpleUpload",
17
17
  props: {
18
18
  type: {
@@ -50,470 +50,474 @@ var mapProps = (r) => Object.fromEntries(Object.entries(r || {}).map(([r, l]) =>
50
50
  onUpdateFileList: { type: [Array, Function] },
51
51
  uploadFile: { type: Function }
52
52
  },
53
- setup(l, { slots: u, expose: d }) {
54
- let { t: f } = useI18n();
55
- SimpleUpload.t = f;
56
- let p = useFormItem(l), m = useMessage(), _ = computed(() => l.customRequest || (({ file: r, onProgress: u, onFinish: d, onError: f }) => {
57
- l.uploadFile(r.file, (r) => u({ percent: r })).then((l) => {
58
- r.file.fileId = l, d();
59
- }).catch((r) => {
60
- m.error(r.message), f(r);
53
+ setup(c, { slots: l, expose: u }) {
54
+ let { t: d } = useI18n();
55
+ SimpleUpload.t = d;
56
+ let f = useFormItem(c), p = useMessage(), g = computed(() => c.customRequest || (({ file: i, onProgress: l, onFinish: u, onError: d }) => {
57
+ c.uploadFile(i.file, (i) => l({ percent: i })).then((c) => {
58
+ i.file.fileId = c, u();
59
+ }).catch((i) => {
60
+ p.error(i.message), d(i);
61
61
  });
62
- })), v = ref();
63
- d({ submit() {
64
- return until(v).toBeTruthy().then((r) => r.submit());
62
+ })), _ = ref();
63
+ u({ submit() {
64
+ return until(_).toBeTruthy().then((i) => i.submit());
65
65
  } });
66
- let y = (r) => {
67
- l.onUpdateFileList?.(r), nextTick(() => p.nTriggerFormChange());
66
+ let v = (i) => {
67
+ c.onUpdateFileList?.(i), nextTick(() => f.nTriggerFormChange());
68
68
  };
69
69
  return () => {
70
- let { type: r, onUpdateFileList: d,...m } = l;
71
- return createVNode(NUpload, mergeProps(m, {
72
- ref: v,
73
- customRequest: _.value,
74
- listType: r === "image" ? "image-card" : "text",
75
- accept: m.accept ?? r === "image" ? "image/*" : void 0,
76
- "onUpdate:fileList": y
70
+ let { type: i, onUpdateFileList: u,...p } = c;
71
+ return createVNode(NUpload, mergeProps(p, {
72
+ ref: _,
73
+ customRequest: g.value,
74
+ listType: i === "image" ? "image-card" : "text",
75
+ accept: p.accept ?? i === "image" ? "image/*" : void 0,
76
+ "onUpdate:fileList": v
77
77
  }), {
78
78
  default: () => {
79
- let r;
79
+ let i;
80
80
  return createVNode(NButton, {
81
- disabled: p.mergedDisabledRef.value,
82
- size: p.mergedSizeRef.value
83
- }, _isSlot(r = f("common.page.form.selectFileText")) ? r : { default: () => [r] });
81
+ disabled: f.mergedDisabledRef.value,
82
+ size: f.mergedSizeRef.value
83
+ }, _isSlot(i = d("common.page.form.selectFileText")) ? i : { default: () => [i] });
84
84
  },
85
- ...u
85
+ ...l
86
86
  });
87
87
  };
88
88
  }
89
89
  });
90
- function createPageFormHelper({ getUserGroups: r, getUsersByGroup: f, getDeptsByCode: m, getUsersByDept: g, getUsersByUsername: _, uploadFile: y, getFileInfos: b }) {
90
+ function createPageFormHelper({ getUserGroups: i, getUsersByGroup: d, getDeptsByCode: p, getUsersByDept: m, getUsersByUsername: g, uploadFile: v, getFileInfos: y }) {
91
91
  return {
92
- input: () => ({ slots: r, props: l }, { modelValue: u, "onUpdate:modelValue": d, required: f, readonly: p,...m }) => p ? createVNode(NText, {
92
+ input: () => ({ slots: i, props: c }, { modelValue: l, "onUpdate:modelValue": u, required: d, readonly: f,...p }) => f ? createVNode(NText, {
93
93
  depth: 2,
94
94
  style: "line-height: 1.25"
95
- }, { default: () => [u ?? ""] }) : (l = mapProps(l), h(NInput, {
95
+ }, { default: () => [l ?? ""] }) : (c = mapProps(c), h(NInput, {
96
96
  clearable: !0,
97
- ...l,
98
- ...m,
99
- value: u,
100
- "onUpdate:value": d
101
- }, r)),
102
- number: () => ({ slots: r, props: l }, { modelValue: u, "onUpdate:modelValue": d, required: f, readonly: p,...m }) => p ? createVNode(NText, {
97
+ ...c,
98
+ ...p,
99
+ value: l,
100
+ "onUpdate:value": u
101
+ }, i)),
102
+ number: () => ({ slots: i, props: c }, { modelValue: l, "onUpdate:modelValue": u, required: d, readonly: f,...p }) => f ? createVNode(NText, {
103
103
  depth: 2,
104
104
  style: "line-height: 1.25"
105
- }, { default: () => [u ?? ""] }) : (l = mapProps(l), h(NInputNumber, {
105
+ }, { default: () => [l ?? ""] }) : (c = mapProps(c), h(NInputNumber, {
106
106
  clearable: !0,
107
- ...l,
108
- ...m,
109
- value: u,
110
- "onUpdate:value": d
111
- }, r)),
107
+ ...c,
108
+ ...p,
109
+ value: l,
110
+ "onUpdate:value": u
111
+ }, i)),
112
112
  select: () => {
113
- let r, l;
114
- return ({ slots: u, props: d }, { modelValue: f, "onUpdate:modelValue": p, required: m, readonly: g,..._ }) => {
115
- let { dictType: y, options: b,...x } = mapProps(d);
116
- if (b ? l = b : r !== y && (r = y, !l && r && (l = useDict(r))), g) if (x.multiple) {
117
- let r;
113
+ let i, c;
114
+ return ({ slots: l, props: u }, { modelValue: d, "onUpdate:modelValue": f, required: p, readonly: m,...g }) => {
115
+ let { dictType: v, options: y,...b } = mapProps(u);
116
+ if (y ? c = y : i !== v && (i = v, !c && i && (c = useDict(i))), m) if (b.multiple) {
117
+ let i;
118
118
  return createVNode(NText, {
119
119
  depth: 2,
120
120
  style: "line-height: 1.25"
121
- }, _isSlot(r = (f?.map((r) => l?.find((l) => l[x.valueField || "value"] === r)) ?? []).map((r, l, u) => {
122
- let d = r ? x.renderLabel ? x.renderLabel(r) ?? "" : r[x.labelField || "label"] ?? "" : f[l] ?? "";
123
- return createVNode("span", { key: r ? r[x.valueField || "value"] : f[l] ?? "" }, [d, l < u.length - 1 ? ", " : ""]);
124
- })) ? r : { default: () => [r] });
121
+ }, _isSlot(i = (d?.map((i) => c?.find((c) => c[b.valueField || "value"] === i)) ?? []).map((i, c, l) => {
122
+ let u = i ? b.renderLabel ? b.renderLabel(i) ?? "" : i[b.labelField || "label"] ?? "" : d[c] ?? "";
123
+ return createVNode("span", { key: i ? i[b.valueField || "value"] : d[c] ?? "" }, [u, c < l.length - 1 ? ", " : ""]);
124
+ })) ? i : { default: () => [i] });
125
125
  } else {
126
- let r = l?.find((r) => r[x.valueField || "value"] === f);
126
+ let i = c?.find((i) => i[b.valueField || "value"] === d);
127
127
  return createVNode(NText, {
128
128
  depth: 2,
129
129
  style: "line-height: 1.25"
130
- }, { default: () => [r ? x.renderLabel ? x.renderLabel(r) ?? "" : r[x.labelField || "label"] ?? "" : f ?? ""] });
130
+ }, { default: () => [i ? b.renderLabel ? b.renderLabel(i) ?? "" : i[b.labelField || "label"] ?? "" : d ?? ""] });
131
131
  }
132
132
  return h(NSelect, {
133
133
  clearable: !0,
134
- loading: l?.loading,
135
- ...x,
136
- options: unref(l),
137
- ..._,
138
- value: f,
139
- "onUpdate:value": p
140
- }, u);
134
+ loading: c?.loading,
135
+ ...b,
136
+ options: unref(c),
137
+ ...g,
138
+ value: d,
139
+ "onUpdate:value": f
140
+ }, l);
141
141
  };
142
142
  },
143
- checkbox: () => ({ slots: r, props: l }, { modelValue: u, "onUpdate:modelValue": d, required: f, readonly: p,...m }) => {
144
- if (l = mapProps(l), p) {
145
- let d;
146
- return d = u === (l.checkedValue ?? !0) ? r?.checked ? r.checked() : createVNode(NCheckbox, { checked: !0 }, null) : r?.unchecked ? r.unchecked() : createVNode(NCheckbox, { disabled: !0 }, null), createVNode(NText, {
143
+ checkbox: () => ({ slots: i, props: c }, { modelValue: l, "onUpdate:modelValue": u, required: d, readonly: f,...p }) => {
144
+ if (c = mapProps(c), f) {
145
+ let u;
146
+ return u = l === (c.checkedValue ?? !0) ? i?.checked ? i.checked() : createVNode(NCheckbox, { checked: !0 }, null) : i?.unchecked ? i.unchecked() : createVNode(NCheckbox, { disabled: !0 }, null), createVNode(NText, {
147
147
  depth: 2,
148
148
  style: "line-height: 1.25"
149
- }, _isSlot(d) ? d : { default: () => [d] });
149
+ }, _isSlot(u) ? u : { default: () => [u] });
150
150
  }
151
151
  return h(NCheckbox, {
152
- ...l,
153
- ...m,
154
- checked: u,
155
- "onUpdate:checked": d
156
- }, r);
152
+ ...c,
153
+ ...p,
154
+ checked: l,
155
+ "onUpdate:checked": u
156
+ }, i);
157
157
  },
158
158
  checkboxes: () => {
159
- let r, l;
160
- return ({ props: d }, { modelValue: f, required: p, readonly: m,...g }) => {
161
- let { dictType: _, options: y,...b } = mapProps(d);
162
- if (y ? l = y : r !== _ && (r = _, !l && r && (l = useDict(r))), m) {
163
- let r;
159
+ let i, c;
160
+ return ({ props: u }, { modelValue: d, required: f, readonly: p,...m }) => {
161
+ let { dictType: g, options: v,...y } = mapProps(u);
162
+ if (v ? c = v : i !== g && (i = g, !c && i && (c = useDict(i))), p) {
163
+ let i;
164
164
  return createVNode(NText, {
165
165
  depth: 2,
166
166
  style: "line-height: 2.4"
167
- }, _isSlot(r = (f?.map((r) => l?.find((l) => l[b.valueField || "value"] === r)) ?? []).map((r, l, u) => {
168
- let d = r ? r[b.labelField ?? "label"] ?? "" : f[l] ?? "";
169
- return createVNode("span", { key: r ? r[b.valueField ?? "value"] : f[l] ?? "" }, [d, l < u.length - 1 ? ", " : ""]);
170
- })) ? r : { default: () => [r] });
167
+ }, _isSlot(i = (d?.map((i) => c?.find((c) => c[y.valueField || "value"] === i)) ?? []).map((i, c, l) => {
168
+ let u = i ? i[y.labelField ?? "label"] ?? "" : d[c] ?? "";
169
+ return createVNode("span", { key: i ? i[y.valueField ?? "value"] : d[c] ?? "" }, [u, c < l.length - 1 ? ", " : ""]);
170
+ })) ? i : { default: () => [i] });
171
171
  }
172
172
  return h(NCheckboxes, {
173
- ...b,
174
- ...g,
175
- options: l,
176
- modelValue: f
173
+ ...y,
174
+ ...m,
175
+ options: c,
176
+ modelValue: d
177
177
  });
178
178
  };
179
179
  },
180
180
  radios: () => {
181
- let r, u;
182
- return ({ props: d }, { modelValue: f, required: p, readonly: m,...g }) => {
183
- let { dictType: _, options: y,...b } = mapProps(d);
184
- if (y ? u = y : r !== _ && (r = _, !u && r && (u = useDict(r))), m) {
185
- let r = u?.find((r) => r[b.valueField ?? "value"] === f);
181
+ let i, l;
182
+ return ({ props: u }, { modelValue: d, required: f, readonly: p,...m }) => {
183
+ let { dictType: g, options: v,...y } = mapProps(u);
184
+ if (v ? l = v : i !== g && (i = g, !l && i && (l = useDict(i))), p) {
185
+ let i = l?.find((i) => i[y.valueField ?? "value"] === d);
186
186
  return createVNode(NText, {
187
187
  depth: 2,
188
188
  style: "line-height: 1.25"
189
- }, { default: () => [r ? r[b.labelField ?? "label"] ?? "" : f ?? ""] });
189
+ }, { default: () => [i ? i[y.labelField ?? "label"] ?? "" : d ?? ""] });
190
190
  }
191
191
  return h(NRadios, {
192
- ...b,
193
- ...g,
194
- options: u,
195
- modelValue: f
192
+ ...y,
193
+ ...m,
194
+ options: l,
195
+ modelValue: d
196
196
  });
197
197
  };
198
198
  },
199
- datepicker: () => ({ slots: r, props: l }, { modelValue: u, "onUpdate:modelValue": d, required: f, readonly: p,...m }) => {
200
- let { type: g = "date", format: _ = g.startsWith("datetime") ? "yyyy-MM-dd HH:mm:ss" : "yyyy-MM-dd",...y } = mapProps(l);
201
- return p ? g.endsWith("range") ? createVNode(NText, {
199
+ datepicker: () => ({ slots: i, props: c }, { modelValue: l, "onUpdate:modelValue": u, required: d, readonly: f,...p }) => {
200
+ let { type: m = "date", format: g = m.startsWith("datetime") ? "yyyy-MM-dd HH:mm:ss" : "yyyy-MM-dd",...v } = mapProps(c);
201
+ return f ? m.endsWith("range") ? createVNode(NText, {
202
202
  depth: 2,
203
203
  style: "line-height: 1.25"
204
- }, { default: () => [u ? `${u[0] ? format(u[0], _) : ""} ~ ${u[1] ? format(u[1], _) : ""}` : ""] }) : createVNode(NText, {
204
+ }, { default: () => [l ? `${l[0] ? format(l[0], g) : ""} ~ ${l[1] ? format(l[1], g) : ""}` : ""] }) : createVNode(NText, {
205
205
  depth: 2,
206
206
  style: "line-height: 1.25"
207
- }, { default: () => [u ? format(u, _) : ""] }) : h(NDatePicker, {
207
+ }, { default: () => [l ? format(l, g) : ""] }) : h(NDatePicker, {
208
208
  clearable: !0,
209
- ...y,
210
- ...m,
211
- type: g,
212
- format: _,
213
- value: u,
214
- "onUpdate:value": d
215
- }, r);
209
+ ...v,
210
+ ...p,
211
+ type: m,
212
+ format: g,
213
+ value: l,
214
+ "onUpdate:value": u
215
+ }, i);
216
216
  },
217
- file: () => ({ slots: r, props: l }, { modelValue: u, "onUpdate:modelValue": d, required: f, readonly: p,...m }) => {
218
- if (l = mapProps(l), p) {
219
- let r;
217
+ file: () => ({ slots: i, props: c }, { modelValue: l, "onUpdate:modelValue": u, required: d, readonly: f,...p }) => {
218
+ if (c = mapProps(c), f) {
219
+ let i;
220
220
  return console.warn("[file] 原则上此组建不应该显示在详情中"), fileList.value.length === 0 ? void 0 : createVNode(NFlex, {
221
221
  gap: "8",
222
222
  vertical: !0
223
- }, _isSlot(r = u.map((r) => createVNode("a", {
224
- key: r.id,
225
- href: r.url,
223
+ }, _isSlot(i = l.map((i) => createVNode("a", {
224
+ key: i.id,
225
+ href: i.url,
226
226
  target: "_blank",
227
227
  rel: "noreferrer",
228
228
  style: "max-width: 100px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; display: inline-block"
229
- }, [r.name]))) ? r : { default: () => [r] });
229
+ }, [i.name]))) ? i : { default: () => [i] });
230
230
  }
231
231
  return h(SimpleUpload, {
232
- ...l,
233
- ...m,
232
+ ...c,
233
+ ...p,
234
234
  defaultUpload: !1,
235
- uploadFile: y,
236
- fileList: u,
237
- onUpdateFileList: d
238
- }, r);
235
+ uploadFile: v,
236
+ fileList: l,
237
+ onUpdateFileList: u
238
+ }, i);
239
239
  },
240
240
  upload: () => {
241
- let r = null, l = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map(), d = shallowRef([]), f = 0, p = (r) => {
242
- let l = ++f;
243
- d.value = r.map((r) => u.get(r)).filter(Boolean);
244
- let p = r.filter((r) => !u.has(r));
245
- Promise.resolve(p.length > 0 ? b(p) : []).then((p) => {
246
- if (l === f) {
247
- d.value = r.map((r) => u.get(r) || p.find((l) => l.id === r)), u.clear();
248
- for (let r of d.value) u.set(r.id, r);
241
+ let i = null, c = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map(), u = shallowRef([]), d = 0, f = (i) => {
242
+ let c = ++d;
243
+ u.value = i.map((i) => l.get(i)).filter(Boolean);
244
+ let f = i.filter((i) => !l.has(i));
245
+ Promise.resolve(f.length > 0 ? y(f) : []).then((f) => {
246
+ if (c === d) {
247
+ u.value = i.map((i) => l.get(i) || f.find((c) => c.id === i)), l.clear();
248
+ for (let i of u.value) l.set(i.id, i);
249
249
  }
250
250
  });
251
- }, m;
251
+ }, p;
252
252
  return {
253
- renderer: ({ slots: f, props: g }, { modelValue: _, "onUpdate:modelValue": b, required: x, readonly: S,...w }) => {
254
- let T = mapProps(g);
255
- if (m = T.ref ??= shallowRef(), r !== _ && (r = _, p(_?.split(",") ?? [])), S) {
256
- let r;
257
- return d.value.length === 0 ? void 0 : createVNode(NFlex, {
253
+ renderer: ({ slots: d, props: m }, { modelValue: g, "onUpdate:modelValue": y, required: b, readonly: x,...C }) => {
254
+ let w = mapProps(m);
255
+ if (p = w.ref ??= shallowRef(), i !== g && (i = g, f(g?.split(",") ?? [])), x) {
256
+ let i;
257
+ return u.value.length === 0 ? void 0 : createVNode(NFlex, {
258
258
  gap: "8",
259
259
  vertical: !0,
260
260
  style: "padding: 6px 0"
261
- }, _isSlot(r = d.value.map((r) => createVNode("a", {
262
- key: r.id,
263
- href: r.url,
261
+ }, _isSlot(i = u.value.map((i) => createVNode("a", {
262
+ key: i.id,
263
+ href: i.url,
264
264
  target: "_blank",
265
265
  rel: "noreferrer",
266
- title: r.name,
267
- download: r.name,
266
+ title: i.name,
267
+ download: i.name,
268
268
  style: "max-width: 100%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; display: inline-block"
269
- }, [r.name]))) ? r : { default: () => [r] });
269
+ }, [i.name]))) ? i : { default: () => [i] });
270
270
  }
271
271
  return h(SimpleUpload, {
272
- ...T,
273
272
  ...w,
274
- uploadFile: y,
275
- fileList: d.value,
276
- onUpdateFileList: (r = []) => {
277
- u.clear();
278
- for (let d of r) d.file?.fileId && l.set(d.id, d.file.fileId), d.file?.fileId ? u.set(d.file.fileId, d) : u.set(d.id, d);
279
- d.value = r, b(d.value.map((r) => l.get(r.id) || r.id).join(",") || null);
273
+ ...C,
274
+ uploadFile: v,
275
+ fileList: u.value,
276
+ onUpdateFileList: (i = []) => {
277
+ l.clear();
278
+ for (let u of i) u.file?.fileId && c.set(u.id, u.file.fileId), u.file?.fileId ? l.set(u.file.fileId, u) : l.set(u.id, u);
279
+ u.value = i, y(u.value.map((i) => c.get(i.id) || i.id).join(",") || null);
280
280
  }
281
- }, f);
281
+ }, d);
282
282
  },
283
283
  beforeSubmit: async () => {
284
- if (await m?.value?.submit(), await until(d).toMatch((r) => r.every((r) => !["pending", "uploading"].includes(r.status))), d.value.some((r) => r.status === "error")) return SimpleUpload.t("common.page.form.validate.fileErrorMessage");
284
+ if (await p?.value?.submit(), await until(u).toMatch((i) => i.every((i) => !["pending", "uploading"].includes(i.status))), u.value.some((i) => i.status === "error")) return SimpleUpload.t("common.page.form.validate.fileErrorMessage");
285
285
  }
286
286
  };
287
287
  },
288
288
  user: () => {
289
- let l, u, y;
290
- return ({ slots: b, props: x }, { modelValue: S, "onUpdate:modelValue": w, required: T, readonly: E,...D }) => {
291
- let O = mapProps(x);
292
- return l || (l = shallowRef([]), u = shallowRef([]), y = shallowRef([]), _().then((r) => {
293
- l.value = r;
294
- }), r().then((r) => {
295
- u.value = r;
296
- }), m().then((r) => {
297
- y.value = r;
298
- })), E ? createVNode(DtUserRender, {
299
- value: S,
300
- multiple: O.multiple,
301
- getUsersByUsername: _
289
+ let c, l, v;
290
+ return ({ slots: y, props: b }, { modelValue: x, "onUpdate:modelValue": C, required: w, readonly: T,...E }) => {
291
+ let D = mapProps(b);
292
+ return c || (c = shallowRef([]), l = shallowRef([]), v = shallowRef([]), g().then((i) => {
293
+ c.value = i;
294
+ }), i().then((i) => {
295
+ l.value = i;
296
+ }), p().then((i) => {
297
+ v.value = i;
298
+ })), T ? createVNode(DtUserRender, {
299
+ value: x,
300
+ multiple: D.multiple,
301
+ getUsersByUsername: g
302
302
  }, null) : h(DtUserDept, {
303
303
  type: "user",
304
- users: l.value,
305
- depts: y.value,
306
- groups: u.value,
307
- getUsersByDept: g,
308
- getUsersByGroup: f,
309
- ...O,
304
+ users: c.value,
305
+ depts: v.value,
306
+ groups: l.value,
307
+ getUsersByDept: m,
308
+ getUsersByGroup: d,
310
309
  ...D,
311
- modelValue: S,
312
- "onUpdate:modelValue": w
313
- }, b);
310
+ ...E,
311
+ modelValue: x,
312
+ "onUpdate:modelValue": C
313
+ }, y);
314
314
  };
315
315
  }
316
316
  };
317
317
  }
318
- function createPageTableHelper({ getDeptsByCode: r, getUsersByUsername: l, getFileInfos: u, previewFileUrl: d }) {
319
- let f = (r) => () => (l, u, d, f) => {
320
- if (l != null) return format(l, f.formatter ?? r);
321
- }, g = (r = {}) => createVNode("svg", mergeProps({
318
+ function createPageTableHelper({ getDeptsByCode: i, getUsersByUsername: c, getFileInfos: l, previewFileUrl: u }) {
319
+ let d = (i) => () => (c, l, u, d) => {
320
+ if (c != null) return format(c, d.formatter ?? i);
321
+ }, m = (i = {}) => createVNode("svg", mergeProps({
322
322
  xmlns: "http://www.w3.org/2000/svg",
323
323
  width: "1em",
324
324
  height: "1em",
325
325
  viewBox: "0 0 32 32"
326
- }, r), [createVNode("circle", {
326
+ }, i), [createVNode("circle", {
327
327
  cx: "16",
328
328
  cy: "16",
329
329
  r: "8",
330
330
  fill: "currentColor"
331
331
  }, null)]);
332
332
  return {
333
- date: f("yyyy-MM-dd"),
334
- datetime: f("yyyy-MM-dd HH:mm:ss"),
333
+ date: d("yyyy-MM-dd"),
334
+ datetime: d("yyyy-MM-dd HH:mm:ss"),
335
335
  dict: () => {
336
- let r, l, u;
337
- return (d, f, p, m) => {
338
- if (d == null) return;
339
- let { dictType: _, options: v, multiple: y, statusMap: b } = mapProps(m);
340
- if (v ? l !== v && (l = v, u = new Map(v.map((r) => [r[m.valueField || "value"], r]))) : r !== _ && (r = _, !u && r && (u = useDictMap(r))), !y) {
341
- if (d = d.toString(), b && d in b) {
342
- let r = b[d] ?? "default";
336
+ let i, c, l;
337
+ return (u, d, f, p) => {
338
+ if (u == null) return;
339
+ let { dictType: g, options: _, multiple: v, statusMap: y } = mapProps(p);
340
+ if (_ ? c !== _ && (c = _, l = new Map(_.map((i) => [i[p.valueField || "value"], i]))) : i !== g && (i = g, !l && i && (l = useDictMap(i))), !v) {
341
+ if (u = u.toString(), y && u in y) {
342
+ let i = y[u] ?? "default";
343
343
  return [
344
344
  "primary",
345
345
  "success",
346
346
  "warning",
347
347
  "danger"
348
- ].includes(r) && (r = `var(--color-${r})`), createVNode("span", { style: "position: relative; padding-left: 1.25em" }, [createVNode(g, { style: `color: ${r}; position: absolute;left: 0; top: 1.5px` }, null), createVNode("span", null, [u.get(d?.toString())?.[m.labelField || "label"] ?? ""])]);
348
+ ].includes(i) && (i = `var(--color-${i})`), createVNode("span", { style: "position: relative; padding-left: 1.25em" }, [createVNode(m, { style: `color: ${i}; position: absolute;left: 0; top: 1.5px` }, null), createVNode("span", null, [l.get(u?.toString())?.[p.labelField || "label"] ?? ""])]);
349
349
  }
350
- return u.get(d)?.[m.labelField || "label"] ?? "";
350
+ return l.get(u)?.[p.labelField || "label"] ?? "";
351
351
  }
352
- return d?.map((r) => u.get(r.toString())?.[m.labelField || "label"]) ?? "";
352
+ return u?.map((i) => l.get(i.toString())?.[p.labelField || "label"]) ?? "";
353
353
  };
354
354
  },
355
- number: () => (r, l, u, d) => {
356
- if (r != null) {
357
- switch (d.percent && (r = Number(r) * 100), "number") {
358
- case typeof d.fixed:
359
- r = r.toFixed(d.fixed);
355
+ number: () => (i, c, l, u) => {
356
+ if (i != null) {
357
+ switch (u.percent && (i = Number(i) * 100), "number") {
358
+ case typeof u.fixed:
359
+ i = i.toFixed(u.fixed);
360
360
  break;
361
- case typeof d.round:
362
- r = r.toFixed(d.round).replace(/0+$/, "");
361
+ case typeof u.round:
362
+ i = i.toFixed(u.round).replace(/0+$/, "");
363
363
  break;
364
- case typeof d.precision:
365
- r = r.toPrecision(d.precision);
364
+ case typeof u.precision:
365
+ i = i.toPrecision(u.precision);
366
366
  break;
367
367
  }
368
- return d?.separator ? Number(r).toLocaleString() : r;
368
+ return u?.separator ? Number(i).toLocaleString() : i;
369
369
  }
370
370
  },
371
- email: () => (r) => createVNode("a", { href: `mailto:${r}` }, [r]),
372
- url: () => (r) => createVNode("a", { href: r }, [r]),
373
- color: () => (r) => createVNode(NColorPicker, {
374
- value: r,
371
+ email: () => (i) => createVNode("a", { href: `mailto:${i}` }, [i]),
372
+ url: () => (i) => createVNode("a", { href: i }, [i]),
373
+ color: () => (i) => createVNode(NColorPicker, {
374
+ value: i,
375
375
  disabled: !0,
376
376
  size: "small"
377
377
  }, null),
378
- image: () => (r, l, u, f) => {
379
- let p;
380
- return r ? createVNode(NFlex, {
378
+ image: () => (i, c, l, d) => {
379
+ let f;
380
+ return i ? createVNode(NFlex, {
381
381
  gap: "8",
382
382
  wrap: !0
383
- }, _isSlot(p = (Array.isArray(r) ? r : f?.multiple ? r.split(",") : [r]).map((r) => d(r)).map((r) => createVNode("img", {
384
- key: r,
385
- src: r,
383
+ }, _isSlot(f = (Array.isArray(i) ? i : d?.multiple ? i.split(",") : [i]).map((i) => u(i)).map((i) => createVNode("img", {
384
+ key: i,
385
+ src: i,
386
386
  style: "max-height: 32px; max-width: 100px; object-fit: contain"
387
- }, null))) ? p : { default: () => [p] }) : void 0;
387
+ }, null))) ? f : { default: () => [f] }) : void 0;
388
388
  },
389
389
  file: () => {
390
- let r = nanoid();
391
- return (l, d, f, p) => {
390
+ let i = shallowRef(/* @__PURE__ */ new Map()), c = /* @__PURE__ */ new Set();
391
+ return (u, d, f, p) => {
392
392
  let m;
393
- return l ? (d.__file_urls ??= {}, d.__file_urls[r] || u(Array.isArray(l) ? l : p?.multiple ? l.split(",") : [l]).then((l) => {
394
- d.__file_urls[r] = l;
395
- }), createVNode(NFlex, {
393
+ if (!u) return;
394
+ let g = Array.isArray(u) ? u : p?.multiple ? u.split(",") : [u], _ = g.join(","), v = i.value.get(_);
395
+ return !v && !c.has(_) && (c.add(_), l(g).then((c) => {
396
+ i.value.set(_, c || []), i.value = new Map(i.value);
397
+ }).finally(() => {
398
+ c.delete(_);
399
+ })), v ? createVNode(NFlex, {
396
400
  gap: "8",
397
401
  wrap: !0
398
- }, _isSlot(m = (d.__file_urls[r] || []).map((r) => createVNode("a", {
399
- key: r.id,
400
- href: r.url,
402
+ }, _isSlot(m = v.map((i) => createVNode("a", {
403
+ key: i.id,
404
+ href: i.url,
401
405
  target: "_blank",
402
406
  rel: "noreferrer",
403
407
  style: "max-width: 100px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; display: inline-block"
404
- }, [r.name]))) ? m : { default: () => [m] })) : void 0;
408
+ }, [i.name]))) ? m : { default: () => [m] }) : createVNode("div", null, null);
405
409
  };
406
410
  },
407
- dept: () => (l, u, d, f) => {
408
- if (l) return createVNode(DtDeptRender, {
409
- value: l,
410
- multiple: f?.multiple,
411
- getDeptsByCode: r
411
+ dept: () => (c, l, u, d) => {
412
+ if (c) return createVNode(DtDeptRender, {
413
+ value: c,
414
+ multiple: d?.multiple,
415
+ getDeptsByCode: i
412
416
  }, null);
413
417
  },
414
- user: () => (r, u, d, f) => {
415
- if (r) return createVNode(DtUserRender, {
416
- value: r,
417
- multiple: f?.multiple,
418
- getUsersByUsername: l
418
+ user: () => (i, l, u, d) => {
419
+ if (i) return createVNode(DtUserRender, {
420
+ value: i,
421
+ multiple: d?.multiple,
422
+ getUsersByUsername: c
419
423
  }, null);
420
424
  }
421
425
  };
422
426
  }
423
427
  function createFormHelper() {
424
- return () => ({ items: r, model: l, handleSubmit: u, reset: d, validation: p, readonly: m, inModal: g, showFeedback: _, showColon: v, labelWidth: y, labelAlign: b, labelPlacement: x, showRequireMark: S, requireMarkPlacement: C }) => createVNode(DataForm, {
425
- readonly: m,
426
- model: l,
427
- items: r,
428
- validation: p,
429
- showColon: unref(v) ?? !0,
430
- labelWidth: unref(y),
431
- labelAlign: unref(b),
432
- labelPlacement: unref(x),
433
- showRequireMark: unref(S),
434
- requireMarkPlacement: unref(C),
435
- showFeedback: unref(_) ?? !0,
428
+ return () => ({ items: i, model: c, handleSubmit: l, reset: u, validation: f, readonly: p, inModal: m, showFeedback: g, showColon: _, labelWidth: v, labelAlign: y, labelPlacement: b, showRequireMark: x, requireMarkPlacement: S }) => createVNode(DataForm, {
429
+ readonly: p,
430
+ model: c,
431
+ items: i,
432
+ validation: f,
433
+ showColon: unref(_) ?? !0,
434
+ labelWidth: unref(v),
435
+ labelAlign: unref(y),
436
+ labelPlacement: unref(b),
437
+ showRequireMark: unref(x),
438
+ requireMarkPlacement: unref(S),
439
+ showFeedback: unref(g) ?? !0,
436
440
  showAction: !1,
437
- onSubmit: u,
438
- onRest: d,
439
- style: g ? "padding-right: .5rem" : void 0
441
+ onSubmit: l,
442
+ onRest: u,
443
+ style: m ? "padding-right: .5rem" : void 0
440
444
  }, null);
441
445
  }
442
446
  function createModalHelper() {
443
- let r = (r) => typeof r == "number" ? `${r}px` : r, l = {
447
+ let i = (i) => typeof i == "number" ? `${i}px` : i, c = {
444
448
  maxHeight: "calc(100vh - 130px)",
445
449
  display: "flex",
446
450
  flexDirection: "column"
447
- }, u = { content: !0 };
448
- return () => ({ type: d = "dialog", visible: f, title: p, content: m, footer: g, placement: _, resizable: v, draggable: y, closeOnEsc: x, closable: S, showMask: C, maskClosable: w, width: T, height: D, style: O, onClose: k, onCancel: A, onConfirm: j, onAfterClose: M, onAfterOpen: N, confirmText: P, confirmDisabled: F, confirmLoading: I, cancelText: L, cancelDisabled: R, cancelLoading: z, nativeScrollbar: B,...V }) => {
449
- let H = g ? () => g : g === null ? null : () => createVNode(NFlex, {
451
+ }, l = { content: !0 };
452
+ return () => ({ type: u = "dialog", visible: d, title: f, content: p, footer: m, placement: g, resizable: _, draggable: v, closeOnEsc: b, closable: x, showMask: S, maskClosable: C, width: w, height: E, style: D, onClose: O, onCancel: k, onConfirm: A, onAfterClose: j, onAfterOpen: M, confirmText: N, confirmDisabled: P, confirmLoading: F, cancelText: I, cancelDisabled: L, cancelLoading: R, nativeScrollbar: z,...B }) => {
453
+ let V = m ? () => m : m === null ? null : () => createVNode(NFlex, {
450
454
  justify: "end",
451
455
  gap: "16"
452
- }, { default: () => [L === null ? void 0 : createVNode(NButton, {
453
- onClick: A,
454
- disabled: R,
455
- loading: z,
456
+ }, { default: () => [I === null ? void 0 : createVNode(NButton, {
457
+ onClick: k,
458
+ disabled: L,
459
+ loading: R,
456
460
  style: "min-width: 60px"
457
- }, _isSlot(L) ? L : { default: () => [L] }), P === null ? void 0 : createVNode(NButton, {
461
+ }, _isSlot(I) ? I : { default: () => [I] }), N === null ? void 0 : createVNode(NButton, {
458
462
  type: "primary",
459
- onClick: j,
460
- disabled: F,
461
- loading: I,
463
+ onClick: A,
464
+ disabled: P,
465
+ loading: F,
462
466
  style: "min-width: 60px"
463
- }, _isSlot(P) ? P : { default: () => [P] })] });
464
- if (d === "dialog") {
465
- let { style: d } = mergeProps({ style: {
466
- width: r(T ?? 520),
467
- height: r(D)
468
- } }, { style: O });
467
+ }, _isSlot(N) ? N : { default: () => [N] })] });
468
+ if (u === "dialog") {
469
+ let { style: u } = mergeProps({ style: {
470
+ width: i(w ?? 520),
471
+ height: i(E)
472
+ } }, { style: D });
469
473
  return createVNode(NModal, mergeProps({
470
- show: f,
474
+ show: d,
471
475
  preset: "card",
472
- title: () => p,
473
- maskClosable: w ?? !1,
474
- closeOnEsc: x,
475
- closable: S,
476
- onClose: k,
477
- segmented: u,
476
+ title: () => f,
477
+ maskClosable: C ?? !1,
478
+ closeOnEsc: b,
479
+ closable: x,
480
+ onClose: O,
481
+ segmented: l,
478
482
  size: "small",
479
- onAfterEnter: N,
480
- onAfterLeave: M,
481
- onUpdateShow: k,
482
- draggable: y ?? !0,
483
- style: d,
484
- contentStyle: l
485
- }, V), {
483
+ onAfterEnter: M,
484
+ onAfterLeave: j,
485
+ onUpdateShow: O,
486
+ draggable: v ?? !0,
487
+ style: u,
488
+ contentStyle: c
489
+ }, B), {
486
490
  default: () => createVNode(NScrollbar, {
487
491
  abstract: !0,
488
492
  style: "display: flex; flex-direction: column"
489
- }, _isSlot(m) ? m : { default: () => [m] }),
490
- action: H
493
+ }, _isSlot(p) ? p : { default: () => [p] }),
494
+ action: V
491
495
  });
492
496
  }
493
- let { bodyContentClass: U, bodyContentStyle: W,...G } = V;
497
+ let { bodyContentClass: H, bodyContentStyle: U,...W } = B;
494
498
  return createVNode(NDrawer, mergeProps({
495
- show: f,
499
+ show: d,
496
500
  trapFocus: !1,
497
- closeOnEsc: x,
498
- showMask: C,
499
- maskClosable: w,
500
- resizable: v,
501
- placement: _,
502
- width: T ?? 440,
503
- height: D,
504
- onUpdateShow: k,
505
- onAfterEnter: N,
506
- onAfterLeave: M,
507
- style: O
508
- }, G), { default: () => [createVNode(NDrawerContent, {
509
- closable: S,
510
- nativeScrollbar: B ?? !1,
511
- bodyContentClass: U,
512
- bodyContentStyle: W
501
+ closeOnEsc: b,
502
+ showMask: S,
503
+ maskClosable: C,
504
+ resizable: _,
505
+ placement: g,
506
+ width: w ?? 440,
507
+ height: E,
508
+ onUpdateShow: O,
509
+ onAfterEnter: M,
510
+ onAfterLeave: j,
511
+ style: D
512
+ }, W), { default: () => [createVNode(NDrawerContent, {
513
+ closable: x,
514
+ nativeScrollbar: z ?? !1,
515
+ bodyContentClass: H,
516
+ bodyContentStyle: U
513
517
  }, {
514
- default: () => m,
515
- header: () => p,
516
- footer: H
518
+ default: () => p,
519
+ header: () => f,
520
+ footer: V
517
521
  })] });
518
522
  };
519
523
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@otwb/ui",
3
- "version": "2.0.40",
3
+ "version": "2.0.42",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "otwb UI",