@otwb/ui 2.0.39 → 2.0.40

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