liyu-pc-base 1.0.156 → 1.0.158
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.
- package/dist/utils/function.js +65 -72
- package/dist/utils/function.js.map +1 -1
- package/package.json +1 -1
package/dist/utils/function.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { l as
|
|
1
|
+
import { l as g } from "../lodash-18e68795.js";
|
|
2
2
|
import { message as Y, Modal as D } from "ant-design-vue";
|
|
3
3
|
import i from "moment";
|
|
4
4
|
import k from "dayjs";
|
|
5
5
|
import { getApiData as x } from "../api/api-model.js";
|
|
6
6
|
import "../init-plugin-515c0649.js";
|
|
7
|
-
const
|
|
7
|
+
const F = `const __promises = {};
|
|
8
8
|
let __promiseId = 0;
|
|
9
9
|
|
|
10
10
|
self.callHost = (name) => {
|
|
@@ -41,7 +41,7 @@ self.onmessage = async (event) => {
|
|
|
41
41
|
} catch (e) {
|
|
42
42
|
self.postMessage({ success: false, error: e.message });
|
|
43
43
|
}
|
|
44
|
-
};`, V = (e) => (e && (e = e.substring(0, 5)), e), q = (e) => (e && (e = e.substring(11, 16)), e), U = (e) => (e && (e = e.substring(11, 19)), e), I = (e) => (e && (e = e.substring(0, 7)), e),
|
|
44
|
+
};`, V = (e) => (e && (e = e.substring(0, 5)), e), q = (e) => (e && (e = e.substring(11, 16)), e), U = (e) => (e && (e = e.substring(11, 19)), e), I = (e) => (e && (e = e.substring(0, 7)), e), N = (e) => e == "1900-01-01" ? "期初" : (e && (e = e.substring(0, 4) + "年" + e.substring(5, 7) + "月"), e), J = (e) => {
|
|
45
45
|
if (e == "1900-01-01")
|
|
46
46
|
return "期初";
|
|
47
47
|
if (e) {
|
|
@@ -49,7 +49,7 @@ self.onmessage = async (event) => {
|
|
|
49
49
|
return n.isValid() ? `${n.format("YYYY")}年` : "";
|
|
50
50
|
}
|
|
51
51
|
return e;
|
|
52
|
-
}, G = (e) => (e && (/* @__PURE__ */ new Date()).getFullYear().toString() == e.substring(0, 4) ? e = e.substring(5, 10) : e && (e = e.substring(0, 10)), e), H = (e) => (e && (e = e.substring(0, 10)), e), v = (e) => (e && (/* @__PURE__ */ new Date()).getFullYear().toString() == e.substring(0, 4) ? e = e.substring(5, 16) : e && (e = e.substring(0, 16)), e), K = (e) => (e && (/* @__PURE__ */ new Date()).getFullYear().toString() == e.substring(0, 4) ? e = e.substring(5, 19) : e && (e = e.substring(0, 19)), e), z = (e) => (e && (e = e.substring(0, 19)), e), Q = (e) =>
|
|
52
|
+
}, G = (e) => (e && (/* @__PURE__ */ new Date()).getFullYear().toString() == e.substring(0, 4) ? e = e.substring(5, 10) : e && (e = e.substring(0, 10)), e), H = (e) => (e && (e = e.substring(0, 10)), e), v = (e) => (e && (/* @__PURE__ */ new Date()).getFullYear().toString() == e.substring(0, 4) ? e = e.substring(5, 16) : e && (e = e.substring(0, 16)), e), K = (e) => (e && (/* @__PURE__ */ new Date()).getFullYear().toString() == e.substring(0, 4) ? e = e.substring(5, 19) : e && (e = e.substring(0, 19)), e), z = (e) => (e && (e = e.substring(0, 19)), e), Q = (e) => g.isNumber(e) ? Number(e.toFixed(2)) == 0 ? 0 : e.toFixed(2) : "", X = (e) => g.isNumber(e) ? Number(e.toFixed(0)) == 0 ? 0 : e.toFixed(0) : "", Z = (e) => g.isNumber(e) ? Number(e.toFixed(3)) == 0 ? 0 : e.toFixed(3) : "", ee = (e) => e.replace(/(^\s*)|(\s*$)/g, ""), te = (e) => g.isNumber(e) ? Number(e.toFixed(6)) == 0 ? 0 : e.toFixed(6) : "", re = (e) => {
|
|
53
53
|
let n = e;
|
|
54
54
|
if (e > 60) {
|
|
55
55
|
let r = e / 60;
|
|
@@ -58,17 +58,17 @@ self.onmessage = async (event) => {
|
|
|
58
58
|
let t = e / 60 / 60;
|
|
59
59
|
if (n = Math.floor(t) + "小时" + Math.floor(r) + "分", t > 24) {
|
|
60
60
|
t = e / 60 / 60 % 24;
|
|
61
|
-
const
|
|
62
|
-
n = Math.floor(
|
|
61
|
+
const u = e / 60 / 60 / 24;
|
|
62
|
+
n = Math.floor(u) + "天" + Math.floor(t) + "小时" + Math.floor(r) + "分";
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
} else
|
|
66
66
|
n = e + "秒";
|
|
67
67
|
return n;
|
|
68
68
|
}, ne = (e) => {
|
|
69
|
-
const n = Math.floor(e / 1e3), r = Math.floor(n / 60), t = Math.floor(r / 60),
|
|
70
|
-
let
|
|
71
|
-
return t > 0 && (
|
|
69
|
+
const n = Math.floor(e / 1e3), r = Math.floor(n / 60), t = Math.floor(r / 60), u = n % 60, a = r % 60;
|
|
70
|
+
let p = "";
|
|
71
|
+
return t > 0 && (p += `${t.toString().padStart(2, "0")}:`), p += `${a.toString().padStart(2, "0")}:${u.toString().padStart(2, "0")}`, e % 1e3 !== 0 && (p += `.${e.toString().slice(-2)}`), p;
|
|
72
72
|
}, se = (e, n) => {
|
|
73
73
|
const r = {};
|
|
74
74
|
for (const t in e)
|
|
@@ -76,15 +76,15 @@ self.onmessage = async (event) => {
|
|
|
76
76
|
return r;
|
|
77
77
|
}, oe = (e, n, r) => {
|
|
78
78
|
const t = {};
|
|
79
|
-
for (const
|
|
80
|
-
t[
|
|
79
|
+
for (const u in e)
|
|
80
|
+
t[u] = n.filter((a) => r.includes(a.id)).map((a) => a[e[u]]);
|
|
81
81
|
return t;
|
|
82
82
|
}, ae = (e, n) => {
|
|
83
83
|
const r = {};
|
|
84
84
|
for (const t in e)
|
|
85
85
|
n[e[t]] && (r[t] = n[e[t]].join(","));
|
|
86
86
|
return r;
|
|
87
|
-
}, ie = (e) => Math.floor(e),
|
|
87
|
+
}, ie = (e) => Math.floor(e), ue = ({ column: e, text: n }) => {
|
|
88
88
|
const r = [
|
|
89
89
|
"green",
|
|
90
90
|
"orange",
|
|
@@ -97,11 +97,11 @@ self.onmessage = async (event) => {
|
|
|
97
97
|
"#2db7f5",
|
|
98
98
|
"#87d068",
|
|
99
99
|
"#108ee9"
|
|
100
|
-
], t = Object.keys(e).filter((
|
|
100
|
+
], t = Object.keys(e).filter((u) => u.indexOf("field_") == 0).map((u) => u.replace("field_", "")).sort();
|
|
101
101
|
return r[t.indexOf(n.toString())];
|
|
102
|
-
},
|
|
103
|
-
const n = [], r = (t,
|
|
104
|
-
|
|
102
|
+
}, le = (e) => {
|
|
103
|
+
const n = [], r = (t, u) => {
|
|
104
|
+
u.map((a) => {
|
|
105
105
|
t.parent_id == a.id ? (a.children == null && (a.children = []), a.children.push({
|
|
106
106
|
key: t.id,
|
|
107
107
|
value: t.id,
|
|
@@ -121,8 +121,8 @@ self.onmessage = async (event) => {
|
|
|
121
121
|
});
|
|
122
122
|
}), n;
|
|
123
123
|
}, ce = (e) => {
|
|
124
|
-
const n = [], r = (t,
|
|
125
|
-
|
|
124
|
+
const n = [], r = (t, u) => {
|
|
125
|
+
u.map((a) => {
|
|
126
126
|
t.parent_id == a.id ? ("children" in a || (a.children = []), a.children.push({
|
|
127
127
|
id: t.id,
|
|
128
128
|
name: t.name,
|
|
@@ -149,28 +149,28 @@ self.onmessage = async (event) => {
|
|
|
149
149
|
e != null && e.message ? (n = e.val, r = e.message) : n = e;
|
|
150
150
|
const t = document.createElement("textarea");
|
|
151
151
|
t.setAttribute("readonly", "readonly"), t.value = n, document.body.appendChild(t), t.select(), document.execCommand("copy") && Y.info(r), document.body.removeChild(t);
|
|
152
|
-
},
|
|
152
|
+
}, pe = (e) => {
|
|
153
153
|
const n = {};
|
|
154
154
|
return Object.keys(e).forEach((r) => {
|
|
155
155
|
e[r] !== null && e[r] !== "" && JSON.stringify(e[r]) !== "[]" && (n[r] = e[r]);
|
|
156
156
|
}), n;
|
|
157
|
-
},
|
|
157
|
+
}, b = (e) => e != null && e !== "", ge = (e, n) => (n == "getPeriod" && (e.group_info.display_name = N(e.group_info.display_name)), e), _e = ({ record: e }) => {
|
|
158
158
|
var r;
|
|
159
159
|
const n = {
|
|
160
160
|
props: {}
|
|
161
161
|
};
|
|
162
162
|
return ((r = e == null ? void 0 : e.meta_data) == null ? void 0 : r.rowSpan) != null && (n.props.rowSpan = e.meta_data.rowSpan), n;
|
|
163
|
-
}, f = (e) => e === null || e == null || e === "",
|
|
163
|
+
}, f = (e) => e === null || e == null || e === "", j = (e, n) => {
|
|
164
164
|
let r;
|
|
165
165
|
if (n == "int")
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
})) :
|
|
166
|
+
b(e) && e instanceof Array ? (r = [], e.forEach((t) => {
|
|
167
|
+
b(t) && typeof t == "string" ? r.push(Number(t)) : r.push(t);
|
|
168
|
+
})) : b(e) && typeof e == "string" ? r = Number(e) : r = e;
|
|
169
169
|
else if (["bool", "boolean"].includes(n)) {
|
|
170
170
|
r = [];
|
|
171
|
-
const t = ["true", "True", "TRUE", "1", 1, !0],
|
|
171
|
+
const t = ["true", "True", "TRUE", "1", 1, !0], u = ["false", "False", "FALSE", "0", 0, !1];
|
|
172
172
|
e.forEach((a) => {
|
|
173
|
-
t.includes(a) ? r.push(!0) :
|
|
173
|
+
t.includes(a) ? r.push(!0) : u.includes(a) ? r.push(!1) : r.push(a);
|
|
174
174
|
});
|
|
175
175
|
} else
|
|
176
176
|
r = e;
|
|
@@ -199,22 +199,22 @@ self.onmessage = async (event) => {
|
|
|
199
199
|
is_or_not_null: "是否为空"
|
|
200
200
|
};
|
|
201
201
|
return e == "input" && n == "in" ? "等于" : r[n];
|
|
202
|
-
},
|
|
202
|
+
}, A = (e) => {
|
|
203
203
|
e.sort((n, r) => (n.order || 0) - (r.order || 0)), e.forEach((n) => {
|
|
204
|
-
n.children &&
|
|
204
|
+
n.children && A(n.children);
|
|
205
205
|
});
|
|
206
|
-
}, d = (e, n = "YYYY-MM-DD") => i(e, n, !0).isValid(),
|
|
206
|
+
}, d = (e, n = "YYYY-MM-DD") => i(e, n, !0).isValid(), be = ({
|
|
207
207
|
record: e,
|
|
208
208
|
conditions: n,
|
|
209
209
|
dataSource: r,
|
|
210
210
|
selectedRowKeys: t
|
|
211
|
-
}) => !n || n.length === 0 ? !0 : n.map((a) => !a || a.length === 0 ? !0 : a.map((
|
|
212
|
-
if (!
|
|
211
|
+
}) => !n || n.length === 0 ? !0 : n.map((a) => !a || a.length === 0 ? !0 : a.map((l) => {
|
|
212
|
+
if (!l)
|
|
213
213
|
return !1;
|
|
214
214
|
let s = null;
|
|
215
|
-
t instanceof Array ? s = r.filter((c) => t.includes(c.id)).map((c) => c[
|
|
216
|
-
let o =
|
|
217
|
-
switch (o instanceof Array || (o = [o]),
|
|
215
|
+
t instanceof Array ? s = r.filter((c) => t.includes(c.id)).map((c) => c[l.flag]) : s = e[l.flag];
|
|
216
|
+
let o = j(l.value, l.type);
|
|
217
|
+
switch (o instanceof Array || (o = [o]), l.operator) {
|
|
218
218
|
case "lt":
|
|
219
219
|
return typeof o[0] == "number" ? !f(s) && s < o[0] : d(o[0]) ? !f(s) && i(s).isBefore(i(o[0])) : !1;
|
|
220
220
|
case "lte":
|
|
@@ -260,7 +260,7 @@ self.onmessage = async (event) => {
|
|
|
260
260
|
default:
|
|
261
261
|
return !1;
|
|
262
262
|
}
|
|
263
|
-
}).every((
|
|
263
|
+
}).every((l) => l)).some((a) => a), O = ({ title: e, content: n }) => new Promise((r, t) => {
|
|
264
264
|
D.confirm({
|
|
265
265
|
title: e,
|
|
266
266
|
content: n,
|
|
@@ -272,66 +272,59 @@ self.onmessage = async (event) => {
|
|
|
272
272
|
}
|
|
273
273
|
});
|
|
274
274
|
}), C = (e) => i(e, "YYYYMMDD").clone().isoWeekday(7).format("YYYY-MM-DD"), L = ({ sundayDate: e, weekdayDate: n }) => {
|
|
275
|
-
|
|
276
|
-
const r = i(e, "YYYY-MM-DD"), t = i(n, "YYYY-MM-DD");
|
|
277
|
-
console.log("sunday", r), console.log("targetDay", t);
|
|
278
|
-
const l = [];
|
|
275
|
+
const r = i(e, "YYYY-MM-DD"), t = i(n, "YYYY-MM-DD"), u = [];
|
|
279
276
|
let a = r.clone();
|
|
280
|
-
for (
|
|
281
|
-
|
|
277
|
+
for (; a.isSameOrAfter(t, "day"); )
|
|
278
|
+
u.push({
|
|
282
279
|
weekday: a.format("YYYY-MM-DD"),
|
|
283
280
|
weekName: a.format("dddd")
|
|
284
281
|
// 自动转换为中文星期名称
|
|
285
|
-
}),
|
|
286
|
-
|
|
287
|
-
weekName: a.format("dddd")
|
|
288
|
-
// 自动转换为中文星期名称
|
|
289
|
-
}), console.log("currentDay", a), console.log("result", l), console.log("isSameOrAfter1", a.isSameOrAfter(t, "day")), a.subtract(1, "days");
|
|
290
|
-
return console.log("result1", l), l;
|
|
282
|
+
}), a.subtract(1, "days");
|
|
283
|
+
return u;
|
|
291
284
|
}, E = {
|
|
292
285
|
getApiData: x,
|
|
293
286
|
confirm: O,
|
|
294
287
|
getWeekday: C,
|
|
295
288
|
getWeekDays: L
|
|
296
|
-
},
|
|
297
|
-
const a = `${
|
|
298
|
-
${e}`,
|
|
299
|
-
|
|
300
|
-
const { __type: o, id: c, name: _, args: w, success:
|
|
289
|
+
}, ye = (e, n, r = {}) => new Promise((t, u) => {
|
|
290
|
+
const a = `${F}
|
|
291
|
+
${e}`, p = new Blob([a], { type: "application/javascript" }), l = new Worker(URL.createObjectURL(p));
|
|
292
|
+
l.onmessage = async (s) => {
|
|
293
|
+
const { __type: o, id: c, name: _, args: w, success: M, data: S, error: m } = s.data;
|
|
301
294
|
if (o === "call") {
|
|
302
|
-
const
|
|
303
|
-
if (
|
|
295
|
+
const y = r[_] || E[_];
|
|
296
|
+
if (y)
|
|
304
297
|
try {
|
|
305
|
-
const h = await
|
|
306
|
-
|
|
298
|
+
const h = await y(...w);
|
|
299
|
+
l.postMessage({ __type: "result", id: c, result: h });
|
|
307
300
|
} catch (h) {
|
|
308
|
-
|
|
301
|
+
l.postMessage({ __type: "result", id: c, error: h.message });
|
|
309
302
|
}
|
|
310
303
|
else
|
|
311
|
-
|
|
304
|
+
l.postMessage({
|
|
312
305
|
__type: "result",
|
|
313
306
|
id: c,
|
|
314
307
|
error: `Host function '${_}' not found.`
|
|
315
308
|
});
|
|
316
309
|
return;
|
|
317
310
|
}
|
|
318
|
-
|
|
319
|
-
},
|
|
320
|
-
|
|
321
|
-
},
|
|
311
|
+
l.terminate(), M ? t(S) : u(new Error(m));
|
|
312
|
+
}, l.onerror = (s) => {
|
|
313
|
+
l.terminate(), u(s);
|
|
314
|
+
}, l.postMessage(JSON.parse(JSON.stringify(n)));
|
|
322
315
|
});
|
|
323
316
|
export {
|
|
324
|
-
|
|
325
|
-
|
|
317
|
+
be as checkCondition,
|
|
318
|
+
j as convertValueByClassName,
|
|
326
319
|
de as copyValue,
|
|
327
320
|
fe as countSum,
|
|
328
321
|
_e as customRenderMetaData,
|
|
329
|
-
|
|
330
|
-
|
|
322
|
+
ye as executeScriptInWorker,
|
|
323
|
+
pe as filterNullAndEmptyKeys,
|
|
331
324
|
re as format_datetime_hh_mm,
|
|
332
325
|
ne as format_ms_hh_mm,
|
|
333
326
|
G as getDate,
|
|
334
|
-
|
|
327
|
+
N as getDateMonth,
|
|
335
328
|
v as getDateTime,
|
|
336
329
|
J as getDateYear,
|
|
337
330
|
H as getFullDate,
|
|
@@ -347,13 +340,13 @@ export {
|
|
|
347
340
|
ie as getTon,
|
|
348
341
|
he as get_operator_type_map,
|
|
349
342
|
ce as get_page_tree_data,
|
|
350
|
-
|
|
351
|
-
|
|
343
|
+
le as get_remote_tree_data,
|
|
344
|
+
ue as get_tag_color_by_slots,
|
|
352
345
|
f as isEmpty,
|
|
353
|
-
|
|
346
|
+
b as isNotEmpty,
|
|
354
347
|
d as isValidDate,
|
|
355
|
-
|
|
356
|
-
|
|
348
|
+
A as nested_sort_list,
|
|
349
|
+
ge as showGroupFormat,
|
|
357
350
|
X as toFixed0,
|
|
358
351
|
Q as toFixed2,
|
|
359
352
|
Z as toFixed3,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.js","sources":["../../src/utils/worker.js?raw","../../src/utils/function.ts"],"sourcesContent":["export default \"const __promises = {};\\nlet __promiseId = 0;\\n\\nself.callHost = (name) => {\\n return (...args) => {\\n const id = __promiseId++;\\n return new Promise((resolve, reject) => {\\n __promises[id] = { resolve, reject };\\n self.postMessage({ __type: 'call', id, name, args });\\n });\\n };\\n};\\n\\nself.onmessage = async (event) => {\\n const { __type, id, result, error } = event.data;\\n\\n if (__type === 'result') {\\n const promise = __promises[id];\\n if (promise) {\\n if (error) {\\n promise.reject(new Error(error));\\n } else {\\n promise.resolve(result);\\n }\\n delete __promises[id];\\n }\\n return;\\n }\\n\\n // This is the initial message to start the work.\\n const params = event.data;\\n try {\\n const runResult = await run(params);\\n self.postMessage({ success: true, data: runResult });\\n } catch (e) {\\n self.postMessage({ success: false, error: e.message });\\n }\\n};\"","import { isNumber } from 'lodash';\nimport { message, Modal } from 'ant-design-vue';\nimport moment from 'moment';\nimport dayjs from 'dayjs';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport workerCode from './worker.js?raw';\nexport const getTime = (time: any) => {\n if (time) {\n time = time.substring(0, 5);\n }\n return time;\n};\nexport const getTime2 = (time: any) => {\n if (time) {\n time = time.substring(11, 16);\n }\n return time;\n};\nexport const getTime3 = (time: any) => {\n if (time) {\n time = time.substring(11, 19);\n }\n return time;\n};\nexport const getMonth = (time: any) => {\n if (time) {\n time = time.substring(0, 7);\n }\n return time;\n};\nexport const getDateMonth = (time: any) => {\n if (time == '1900-01-01') {\n return '期初';\n } else if (time) {\n time = time.substring(0, 4) + '年' + time.substring(5, 7) + '月';\n }\n return time;\n};\n\nexport const getDateYear = (time: any) => {\n if (time == '1900-01-01') {\n return '期初';\n } else if (time) {\n const date = dayjs(time);\n return date.isValid() ? `${date.format('YYYY')}年` : '';\n }\n return time;\n};\nexport const getDate = (time: any) => {\n if (time && new Date().getFullYear().toString() == time.substring(0, 4)) {\n time = time.substring(5, 10);\n } else if (time) {\n time = time.substring(0, 10);\n }\n return time;\n};\nexport const getFullDate = (time: any) => {\n if (time) {\n time = time.substring(0, 10);\n }\n return time;\n};\nexport const getDateTime = (time: any) => {\n if (time && new Date().getFullYear().toString() == time.substring(0, 4)) {\n time = time.substring(5, 16);\n } else if (time) {\n time = time.substring(0, 16);\n }\n return time;\n};\nexport const getFullDateTime = (time: any) => {\n if (time && new Date().getFullYear().toString() == time.substring(0, 4)) {\n time = time.substring(5, 19);\n } else if (time) {\n time = time.substring(0, 19);\n }\n return time;\n};\nexport const getFullYearDateTime = (time: any) => {\n if (time) {\n time = time.substring(0, 19);\n }\n return time;\n};\nexport const toFixed2 = (num: any) => {\n if (isNumber(num)) {\n if (Number(num.toFixed(2)) == 0) {\n return 0;\n } else {\n return num.toFixed(2);\n }\n } else {\n return '';\n }\n};\nexport const toFixed0 = (num: any) => {\n if (isNumber(num)) {\n if (Number(num.toFixed(0)) == 0) {\n return 0;\n } else {\n return num.toFixed(0);\n }\n } else {\n return '';\n }\n};\nexport const toFixed3 = (num: any) => {\n if (isNumber(num)) {\n if (Number(num.toFixed(3)) == 0) {\n return 0;\n } else {\n return num.toFixed(3);\n }\n } else {\n return '';\n }\n};\n// 去掉字符串前后的空格\nexport const trim = (str: any) => {\n return str.replace(/(^\\s*)|(\\s*$)/g, '');\n};\nexport const toFixed6 = (num: any) => {\n if (isNumber(num)) {\n if (Number(num.toFixed(6)) == 0) {\n return 0;\n } else {\n return num.toFixed(6);\n }\n } else {\n return '';\n }\n};\n// 转换时分秒\nexport const format_datetime_hh_mm = (second_time: any) => {\n let time: any = second_time;\n if (second_time > 60) {\n let min = second_time / 60;\n time = Math.floor(min) + '分';\n if (min > 60) {\n min = (second_time / 60) % 60;\n let hour = second_time / 60 / 60;\n time = Math.floor(hour) + '小时' + Math.floor(min) + '分';\n if (hour > 24) {\n hour = (second_time / 60 / 60) % 24;\n const day = second_time / 60 / 60 / 24;\n time = Math.floor(day) + '天' + Math.floor(hour) + '小时' + Math.floor(min) + '分';\n }\n }\n } else {\n time = second_time + '秒';\n }\n return time;\n};\n\n// 转换时分秒\nexport const format_ms_hh_mm = milliseconds => {\n const seconds = Math.floor(milliseconds / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n const remainingSeconds = seconds % 60;\n const remainingMinutes = minutes % 60;\n\n let formattedTime = '';\n\n if (hours > 0) {\n formattedTime += `${hours.toString().padStart(2, '0')}:`;\n }\n formattedTime += `${remainingMinutes.toString().padStart(2, '0')}:${remainingSeconds\n .toString()\n .padStart(2, '0')}`;\n\n // 只添加毫秒部分如果毫秒数不为0\n if (milliseconds % 1000 !== 0) {\n formattedTime += `.${milliseconds.toString().slice(-2)}`;\n }\n return formattedTime;\n};\n// 字段对应错误————>转化正确\nexport const getObjList = (api_fields: any, record: any) => {\n const obj: any = {};\n for (const key in api_fields) {\n if (record[api_fields[key] as string]) {\n obj[key] = record[api_fields[key] as string];\n }\n }\n return obj;\n};\nexport const getObjListBySelectedRowKeys = (\n api_fields: any,\n dataSource: any[],\n selectedRowKeys: any[],\n) => {\n const obj: any = {};\n for (const key in api_fields) {\n obj[key] = dataSource\n .filter(item => selectedRowKeys.includes(item.id))\n .map(item => item[api_fields[key] as string]);\n }\n return obj;\n};\n// 时间区间格式转化 数组-->字符串\nexport const getRangePicker = (api_fields: any, record: any) => {\n const obj: any = {};\n for (const key in api_fields) {\n if (record[api_fields[key] as string]) {\n obj[key] = record[api_fields[key] as string].join(',');\n }\n }\n return obj;\n};\n\n// 小数转整数--> 过钢量是小数,单位为吨。转化为整数。\nexport const getTon = (kgnum: number) => {\n return Math.floor(kgnum);\n};\n\nexport const get_tag_color_by_slots = ({ column, text }) => {\n const color_list = [\n 'green',\n 'orange',\n 'red',\n 'pink',\n 'cyan',\n 'blue',\n 'purple',\n '#f50',\n '#2db7f5',\n '#87d068',\n '#108ee9',\n ];\n const value_list = Object.keys(column)\n .filter((key: string) => key.indexOf('field_') == 0)\n .map((key: string) => key.replace('field_', ''))\n .sort();\n return color_list[value_list.indexOf(text.toString())];\n};\n\nexport const get_remote_tree_data = (res: any) => {\n const treeData: any = [];\n const search_tree_remote = (item: any, list: []) => {\n list.map((item1: any) => {\n if (item.parent_id == item1.id) {\n if (item1.children == undefined) {\n item1.children = [];\n }\n item1.children.push({\n key: item.id,\n value: item.id,\n title: item.name,\n ...item,\n children: [],\n });\n } else {\n search_tree_remote(item, item1.children);\n }\n });\n };\n res.data.map((item: any) => {\n if (!item.parent_id) {\n treeData.push({\n key: item.id,\n value: item.id,\n title: item.name,\n ...item,\n children: [],\n });\n } else {\n search_tree_remote(item, treeData);\n }\n });\n return treeData;\n};\n\nexport const get_page_tree_data = (res: any) => {\n const treeData: any = [];\n const search_tree = (item: any, list: []) => {\n list.map((item1: any) => {\n if (item.parent_id == item1.id) {\n if (!('children' in item1)) {\n item1.children = [];\n }\n item1.children.push({\n id: item.id,\n name: item.name,\n key: item.id,\n });\n } else {\n if (item1.children != undefined && item1.children.length > 0) {\n search_tree(item, item1.children);\n }\n }\n });\n };\n treeData.push({\n key: 999999,\n name: '全部',\n children: [],\n });\n\n res.data.map((item: any) => {\n if (!item.parent_id) {\n treeData.push({\n id: item.id,\n name: item.name,\n key: item.id,\n children: [],\n });\n } else {\n search_tree(item, treeData);\n }\n });\n treeData.map((item1: any) => {\n if (item1.children.length == 0) {\n delete item1.children;\n }\n });\n return treeData;\n};\n// 浮点数加减 相加:countSum( [ a, b, c ] ) 相减:countSum( [ a, -b, -c ] ) 传参必须是 number\nexport const countSum: (arr: number[]) => number = arr => {\n if (!arr.length) return 0;\n arr = arr.map((v: number) => {\n if (v && !Number.isNaN(Number(v))) return Math.round(v * 10000);\n return 0;\n });\n const result = arr.reduce((prev: number, curr: number) => {\n return prev + curr;\n }, 0);\n return result / 10000;\n};\n\nexport const copyValue = val => {\n let str = '';\n let messages = '复制成功';\n if (val?.message) {\n str = val.val;\n messages = val.message;\n } else {\n str = val;\n }\n const textarea = document.createElement('textarea');\n textarea.setAttribute('readonly', 'readonly');\n textarea.value = str;\n document.body.appendChild(textarea);\n textarea.select();\n if (document.execCommand('copy')) {\n message.info(messages);\n }\n document.body.removeChild(textarea);\n};\n\nexport const filterNullAndEmptyKeys = record => {\n const obj: any = {};\n Object.keys(record).forEach(key => {\n if (record[key] !== null && record[key] !== '' && JSON.stringify(record[key]) !== '[]') {\n obj[key] = record[key];\n }\n });\n return obj;\n};\n\nexport const isNotEmpty = value => {\n return value !== null && value !== undefined && value !== '';\n};\n\nexport const showGroupFormat = (item, format) => {\n if (format == 'getPeriod') {\n item.group_info.display_name = getDateMonth(item.group_info.display_name);\n }\n return item;\n};\n\nexport const customRenderMetaData = ({ record }) => {\n const obj = {\n props: {} as any,\n };\n if (record?.meta_data?.rowSpan != undefined) {\n obj.props.rowSpan = record.meta_data.rowSpan;\n }\n return obj;\n};\n\nexport const isEmpty = value => {\n return value === null || value == undefined || value === '';\n};\n\nexport const convertValueByClassName = (value, class_name) => {\n let new_value;\n if (class_name == 'int') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Number(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Number(value);\n } else {\n new_value = value;\n }\n } else if (['bool', 'boolean'].includes(class_name)) {\n new_value = [];\n const true_list = ['true', 'True', 'TRUE', '1', 1, true];\n const false_list = ['false', 'False', 'FALSE', '0', 0, false];\n value.forEach(item => {\n if (true_list.includes(item)) {\n new_value.push(true);\n } else if (false_list.includes(item)) {\n new_value.push(false);\n } else {\n new_value.push(item);\n }\n });\n } else {\n new_value = value;\n }\n return new_value;\n};\n\nexport const get_operator_type_map = (format, operator) => {\n const operator_type_map = {\n between: '介于',\n gt: '大于',\n lt: '小于',\n gte: '大于等于',\n lte: '小于等于',\n in: '包含',\n eq: '等于',\n contains: '包含',\n icontains: '包含',\n startswith: '开头',\n notbetween: '不介于',\n notin: '不包含',\n notcontains: '不包含',\n _eq: '选择',\n not_eq: '不等于',\n not_blank_not_null: '是否非空',\n json_list_not_blank_not_null: '是否非空',\n json_list_is_blank_is_null: '是否为空',\n is_or_not_blank_or_null: '是否为空',\n is_or_not_null: '是否为空',\n };\n if (format == 'input' && operator == 'in') {\n return '等于';\n }\n return operator_type_map[operator];\n};\nexport const nested_sort_list = (list: any) => {\n list.sort((a: any, b: any) => {\n return (a.order || 0) - (b.order || 0);\n });\n list.forEach((item: any) => {\n if (item.children) {\n nested_sort_list(item.children);\n }\n });\n};\n\n// 判断是否为有效日期\nexport const isValidDate = (dateString, format = 'YYYY-MM-DD') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\n\nexport const checkCondition = ({\n record,\n conditions,\n dataSource,\n selectedRowKeys,\n}: {\n record?: Object;\n conditions: any;\n dataSource?: any[];\n selectedRowKeys?: any[];\n}) => {\n // 如果条件组为空,直接返回true\n if (!conditions || conditions.length === 0) {\n return true;\n }\n\n // 计算每个条件组的结果\n const groupResults = conditions.map(group => {\n // 如果组内没有条件,返回true\n if (!group || group.length === 0) return true;\n\n // 计算组内每个条件的结果\n const conditionResults = group.map(item => {\n if (!item) return false;\n let record_value = null;\n if (selectedRowKeys instanceof Array) {\n record_value = dataSource\n .filter(_item => selectedRowKeys.includes(_item.id))\n .map(_item => _item[item.flag]);\n } else {\n record_value = record[item.flag];\n }\n let newValue = convertValueByClassName(item.value, item.type);\n\n if (!(newValue instanceof Array)) {\n newValue = [newValue];\n }\n\n // 根据操作符判断条件\n switch (item.operator) {\n case 'lt':\n if (typeof newValue[0] === 'number') {\n return !isEmpty(record_value) && record_value < newValue[0];\n } else if (isValidDate(newValue[0])) {\n return !isEmpty(record_value) && moment(record_value).isBefore(moment(newValue[0]));\n }\n return false;\n\n case 'lte':\n if (typeof newValue[0] === 'number') {\n return !isEmpty(record_value) && record_value <= newValue[0];\n } else if (isValidDate(newValue[0])) {\n return (\n !isEmpty(record_value) &&\n (moment(record_value).isBefore(moment(newValue[0])) ||\n moment(record_value).isSame(moment(newValue[0])))\n );\n }\n return false;\n\n case 'gt':\n if (typeof newValue[0] === 'number') {\n return !isEmpty(record_value) && record_value > newValue[0];\n } else if (isValidDate(newValue[0])) {\n return !isEmpty(record_value) && moment(record_value).isAfter(moment(newValue[0]));\n }\n return false;\n\n case 'gte':\n if (typeof newValue[0] === 'number') {\n return !isEmpty(record_value) && record_value >= newValue[0];\n } else if (isValidDate(newValue[0])) {\n return (\n !isEmpty(record_value) &&\n (moment(record_value).isAfter(moment(newValue[0])) ||\n moment(record_value).isSame(moment(newValue[0])))\n );\n }\n return false;\n\n case 'between':\n if (typeof newValue[0] === 'number' && typeof newValue[1] === 'number') {\n return (\n !isEmpty(record_value) && record_value >= newValue[0] && record_value <= newValue[1]\n );\n } else if (isValidDate(newValue[0]) && isValidDate(newValue[1])) {\n return (\n !isEmpty(record_value) &&\n (moment(record_value).isAfter(moment(newValue[0])) ||\n moment(record_value).isSame(moment(newValue[0]))) &&\n (moment(record_value).isBefore(moment(newValue[1])) ||\n moment(record_value).isSame(moment(newValue[1])))\n );\n }\n return false;\n\n case 'notbetween':\n if (typeof newValue[0] === 'number' && typeof newValue[1] === 'number') {\n return (\n !isEmpty(record_value) && (record_value < newValue[0] || record_value > newValue[1])\n );\n } else if (isValidDate(newValue[0]) && isValidDate(newValue[1])) {\n return (\n !isEmpty(record_value) &&\n (moment(record_value).isBefore(moment(newValue[0])) ||\n moment(record_value).isAfter(moment(newValue[1])))\n );\n }\n return false;\n\n case 'in':\n if (record_value instanceof Array) {\n return newValue.some(x => record_value.includes(x));\n } else {\n return newValue.some(x => record_value == x);\n }\n case 'notin':\n if (record_value instanceof Array) {\n return !newValue.some(x => record_value.includes(x));\n } else {\n return !newValue.some(x => record_value == x);\n }\n case 'eq':\n return record_value === newValue[0];\n case 'not_eq':\n return record_value !== newValue[0];\n\n case 'contains':\n return record_value && record_value.toString().indexOf(newValue[0]) > -1;\n case 'icontains':\n return (\n record_value &&\n record_value.toString().toLowerCase().indexOf(newValue[0].toLowerCase()) > -1\n );\n\n case 'notcontains':\n return !record_value || record_value.toString().indexOf(newValue[0]) === -1;\n case 'noticontains':\n return (\n !record_value ||\n record_value.toString().toLowerCase().indexOf(newValue[0].toLowerCase()) === -1\n );\n\n case 'startswith':\n return record_value && record_value.toString().startsWith(newValue[0]);\n case 'istartswith':\n return (\n record_value &&\n record_value.toString().toLowerCase().startsWith(newValue[0].toLowerCase())\n );\n case 'notstartswith':\n return !record_value || record_value.toString().startsWith(newValue[0]);\n case 'notistartswith':\n return (\n !record_value ||\n record_value.toString().toLowerCase().startsWith(newValue[0].toLowerCase())\n );\n\n case 'json_list_not_blank_not_null':\n case 'not_blank_not_null':\n if (record_value instanceof Array) {\n return record_value.length !== 0;\n } else {\n return !!record_value;\n }\n case 'is_blank':\n case 'json_list_is_blank_is_null':\n if (record_value instanceof Array) {\n return record_value.length === 0;\n } else {\n return !record_value;\n }\n\n default:\n return false;\n }\n });\n\n // 组内条件是与逻辑,所有条件都要满足\n return conditionResults.every(result => result);\n });\n\n // 组间条件是或逻辑,只要有一个组满足条件即可\n return groupResults.some(result => result);\n};\nconst confirm = ({ title, content }) => {\n return new Promise((resolve, reject) => {\n Modal.confirm({\n title: title,\n content: content,\n onOk() {\n resolve(true);\n },\n onCancel() {\n resolve(false);\n },\n });\n });\n};\n// 获取本周周日 日期\nconst getWeekday = (day) => {\n const date = moment(day, 'YYYYMMDD');\n // 计算本周周日(ISO周:周一+6天=周日)\n const sunday = date.clone().isoWeekday(7);\n return sunday.format('YYYY-MM-DD');\n}\n// 根据周日日期 周中日期,返回区间时间列表\nconst getWeekDays = ({ sundayDate, weekdayDate }) => {\n console.log('sundayDate', sundayDate)\n console.log('weekdayDate', weekdayDate)\n // 解析输入日期(支持YYYY-MM-DD和YYYYMMDD格式)\n const sunday = moment(sundayDate, 'YYYY-MM-DD');\n const targetDay = moment(weekdayDate, 'YYYY-MM-DD');\n\n console.log('sunday', sunday)\n console.log('targetDay', targetDay)\n // 生成日期序列\n const result = [];\n let currentDay = sunday.clone();\n console.log('currentDay12', currentDay)\n console.log('isSameOrAfter', currentDay.isSameOrAfter(targetDay, 'day'))\n // 从周日倒推到目标周中日期\n while (currentDay.isSameOrAfter(targetDay, 'day')) {\n result.push({\n weekday: currentDay.format('YYYY-MM-DD'),\n weekName: currentDay.format('dddd') // 自动转换为中文星期名称\n });\n console.log('obj', {\n weekday: currentDay.format('YYYY-MM-DD'),\n weekName: currentDay.format('dddd') // 自动转换为中文星期名称\n })\n console.log('currentDay', currentDay)\n console.log('result', result)\n console.log('isSameOrAfter1', currentDay.isSameOrAfter(targetDay, 'day'))\n currentDay.subtract(1, 'days');\n }\n console.log('result1', result)\n return result;\n}\nconst GLOBAL_FUNC_MAP = {\n getApiData,\n confirm,\n getWeekday,\n getWeekDays,\n};\n\nexport const executeScriptInWorker = (\n code: string,\n params: any,\n hostFunctions: { [key: string]: (...args: any[]) => any } = {},\n): Promise<any> => {\n return new Promise((resolve, reject) => {\n const workerScript = `${workerCode} \n ${code}`;\n const blob = new Blob([workerScript], { type: 'application/javascript' });\n const worker = new Worker(URL.createObjectURL(blob));\n\n worker.onmessage = async event => {\n const { __type, id, name, args, success, data, error } = event.data;\n\n if (__type === 'call') {\n const func = hostFunctions[name] || GLOBAL_FUNC_MAP[name];\n if (func) {\n try {\n const result = await func(...args);\n worker.postMessage({ __type: 'result', id, result });\n } catch (e: any) {\n worker.postMessage({ __type: 'result', id, error: e.message });\n }\n } else {\n worker.postMessage({\n __type: 'result',\n id,\n error: `Host function '${name}' not found.`,\n });\n }\n return;\n }\n\n worker.terminate();\n if (success) {\n resolve(data);\n } else {\n reject(new Error(error));\n }\n };\n\n worker.onerror = error => {\n worker.terminate();\n reject(error);\n };\n worker.postMessage(JSON.parse(JSON.stringify(params)));\n });\n};\n"],"names":["workerCode","getTime","time","getTime2","getTime3","getMonth","getDateMonth","getDateYear","date","dayjs","getDate","getFullDate","getDateTime","getFullDateTime","getFullYearDateTime","toFixed2","num","isNumber","toFixed0","toFixed3","trim","str","toFixed6","format_datetime_hh_mm","second_time","min","hour","day","format_ms_hh_mm","milliseconds","seconds","minutes","hours","remainingSeconds","remainingMinutes","formattedTime","getObjList","api_fields","record","obj","key","getObjListBySelectedRowKeys","dataSource","selectedRowKeys","item","getRangePicker","getTon","kgnum","get_tag_color_by_slots","column","text","color_list","value_list","get_remote_tree_data","res","treeData","search_tree_remote","list","item1","get_page_tree_data","search_tree","countSum","arr","v","prev","curr","copyValue","val","messages","textarea","message","filterNullAndEmptyKeys","isNotEmpty","value","showGroupFormat","format","customRenderMetaData","_a","isEmpty","convertValueByClassName","class_name","new_value","true_list","false_list","get_operator_type_map","operator","operator_type_map","nested_sort_list","a","b","isValidDate","dateString","moment","checkCondition","conditions","group","record_value","_item","newValue","x","result","confirm","title","content","resolve","reject","Modal","getWeekday","getWeekDays","sundayDate","weekdayDate","sunday","targetDay","currentDay","GLOBAL_FUNC_MAP","getApiData","executeScriptInWorker","code","params","hostFunctions","workerScript","blob","worker","event","__type","id","name","args","success","data","error","func","e"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"function.js","sources":["../../src/utils/worker.js?raw","../../src/utils/function.ts"],"sourcesContent":["export default \"const __promises = {};\\nlet __promiseId = 0;\\n\\nself.callHost = (name) => {\\n return (...args) => {\\n const id = __promiseId++;\\n return new Promise((resolve, reject) => {\\n __promises[id] = { resolve, reject };\\n self.postMessage({ __type: 'call', id, name, args });\\n });\\n };\\n};\\n\\nself.onmessage = async (event) => {\\n const { __type, id, result, error } = event.data;\\n\\n if (__type === 'result') {\\n const promise = __promises[id];\\n if (promise) {\\n if (error) {\\n promise.reject(new Error(error));\\n } else {\\n promise.resolve(result);\\n }\\n delete __promises[id];\\n }\\n return;\\n }\\n\\n // This is the initial message to start the work.\\n const params = event.data;\\n try {\\n const runResult = await run(params);\\n self.postMessage({ success: true, data: runResult });\\n } catch (e) {\\n self.postMessage({ success: false, error: e.message });\\n }\\n};\"","import { isNumber } from 'lodash';\nimport { message, Modal } from 'ant-design-vue';\nimport moment from 'moment';\nimport dayjs from 'dayjs';\nimport { getApiData } from 'liyu-pc-base/api/api-model';\nimport workerCode from './worker.js?raw';\nexport const getTime = (time: any) => {\n if (time) {\n time = time.substring(0, 5);\n }\n return time;\n};\nexport const getTime2 = (time: any) => {\n if (time) {\n time = time.substring(11, 16);\n }\n return time;\n};\nexport const getTime3 = (time: any) => {\n if (time) {\n time = time.substring(11, 19);\n }\n return time;\n};\nexport const getMonth = (time: any) => {\n if (time) {\n time = time.substring(0, 7);\n }\n return time;\n};\nexport const getDateMonth = (time: any) => {\n if (time == '1900-01-01') {\n return '期初';\n } else if (time) {\n time = time.substring(0, 4) + '年' + time.substring(5, 7) + '月';\n }\n return time;\n};\n\nexport const getDateYear = (time: any) => {\n if (time == '1900-01-01') {\n return '期初';\n } else if (time) {\n const date = dayjs(time);\n return date.isValid() ? `${date.format('YYYY')}年` : '';\n }\n return time;\n};\nexport const getDate = (time: any) => {\n if (time && new Date().getFullYear().toString() == time.substring(0, 4)) {\n time = time.substring(5, 10);\n } else if (time) {\n time = time.substring(0, 10);\n }\n return time;\n};\nexport const getFullDate = (time: any) => {\n if (time) {\n time = time.substring(0, 10);\n }\n return time;\n};\nexport const getDateTime = (time: any) => {\n if (time && new Date().getFullYear().toString() == time.substring(0, 4)) {\n time = time.substring(5, 16);\n } else if (time) {\n time = time.substring(0, 16);\n }\n return time;\n};\nexport const getFullDateTime = (time: any) => {\n if (time && new Date().getFullYear().toString() == time.substring(0, 4)) {\n time = time.substring(5, 19);\n } else if (time) {\n time = time.substring(0, 19);\n }\n return time;\n};\nexport const getFullYearDateTime = (time: any) => {\n if (time) {\n time = time.substring(0, 19);\n }\n return time;\n};\nexport const toFixed2 = (num: any) => {\n if (isNumber(num)) {\n if (Number(num.toFixed(2)) == 0) {\n return 0;\n } else {\n return num.toFixed(2);\n }\n } else {\n return '';\n }\n};\nexport const toFixed0 = (num: any) => {\n if (isNumber(num)) {\n if (Number(num.toFixed(0)) == 0) {\n return 0;\n } else {\n return num.toFixed(0);\n }\n } else {\n return '';\n }\n};\nexport const toFixed3 = (num: any) => {\n if (isNumber(num)) {\n if (Number(num.toFixed(3)) == 0) {\n return 0;\n } else {\n return num.toFixed(3);\n }\n } else {\n return '';\n }\n};\n// 去掉字符串前后的空格\nexport const trim = (str: any) => {\n return str.replace(/(^\\s*)|(\\s*$)/g, '');\n};\nexport const toFixed6 = (num: any) => {\n if (isNumber(num)) {\n if (Number(num.toFixed(6)) == 0) {\n return 0;\n } else {\n return num.toFixed(6);\n }\n } else {\n return '';\n }\n};\n// 转换时分秒\nexport const format_datetime_hh_mm = (second_time: any) => {\n let time: any = second_time;\n if (second_time > 60) {\n let min = second_time / 60;\n time = Math.floor(min) + '分';\n if (min > 60) {\n min = (second_time / 60) % 60;\n let hour = second_time / 60 / 60;\n time = Math.floor(hour) + '小时' + Math.floor(min) + '分';\n if (hour > 24) {\n hour = (second_time / 60 / 60) % 24;\n const day = second_time / 60 / 60 / 24;\n time = Math.floor(day) + '天' + Math.floor(hour) + '小时' + Math.floor(min) + '分';\n }\n }\n } else {\n time = second_time + '秒';\n }\n return time;\n};\n\n// 转换时分秒\nexport const format_ms_hh_mm = milliseconds => {\n const seconds = Math.floor(milliseconds / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n const remainingSeconds = seconds % 60;\n const remainingMinutes = minutes % 60;\n\n let formattedTime = '';\n\n if (hours > 0) {\n formattedTime += `${hours.toString().padStart(2, '0')}:`;\n }\n formattedTime += `${remainingMinutes.toString().padStart(2, '0')}:${remainingSeconds\n .toString()\n .padStart(2, '0')}`;\n\n // 只添加毫秒部分如果毫秒数不为0\n if (milliseconds % 1000 !== 0) {\n formattedTime += `.${milliseconds.toString().slice(-2)}`;\n }\n return formattedTime;\n};\n// 字段对应错误————>转化正确\nexport const getObjList = (api_fields: any, record: any) => {\n const obj: any = {};\n for (const key in api_fields) {\n if (record[api_fields[key] as string]) {\n obj[key] = record[api_fields[key] as string];\n }\n }\n return obj;\n};\nexport const getObjListBySelectedRowKeys = (\n api_fields: any,\n dataSource: any[],\n selectedRowKeys: any[],\n) => {\n const obj: any = {};\n for (const key in api_fields) {\n obj[key] = dataSource\n .filter(item => selectedRowKeys.includes(item.id))\n .map(item => item[api_fields[key] as string]);\n }\n return obj;\n};\n// 时间区间格式转化 数组-->字符串\nexport const getRangePicker = (api_fields: any, record: any) => {\n const obj: any = {};\n for (const key in api_fields) {\n if (record[api_fields[key] as string]) {\n obj[key] = record[api_fields[key] as string].join(',');\n }\n }\n return obj;\n};\n\n// 小数转整数--> 过钢量是小数,单位为吨。转化为整数。\nexport const getTon = (kgnum: number) => {\n return Math.floor(kgnum);\n};\n\nexport const get_tag_color_by_slots = ({ column, text }) => {\n const color_list = [\n 'green',\n 'orange',\n 'red',\n 'pink',\n 'cyan',\n 'blue',\n 'purple',\n '#f50',\n '#2db7f5',\n '#87d068',\n '#108ee9',\n ];\n const value_list = Object.keys(column)\n .filter((key: string) => key.indexOf('field_') == 0)\n .map((key: string) => key.replace('field_', ''))\n .sort();\n return color_list[value_list.indexOf(text.toString())];\n};\n\nexport const get_remote_tree_data = (res: any) => {\n const treeData: any = [];\n const search_tree_remote = (item: any, list: []) => {\n list.map((item1: any) => {\n if (item.parent_id == item1.id) {\n if (item1.children == undefined) {\n item1.children = [];\n }\n item1.children.push({\n key: item.id,\n value: item.id,\n title: item.name,\n ...item,\n children: [],\n });\n } else {\n search_tree_remote(item, item1.children);\n }\n });\n };\n res.data.map((item: any) => {\n if (!item.parent_id) {\n treeData.push({\n key: item.id,\n value: item.id,\n title: item.name,\n ...item,\n children: [],\n });\n } else {\n search_tree_remote(item, treeData);\n }\n });\n return treeData;\n};\n\nexport const get_page_tree_data = (res: any) => {\n const treeData: any = [];\n const search_tree = (item: any, list: []) => {\n list.map((item1: any) => {\n if (item.parent_id == item1.id) {\n if (!('children' in item1)) {\n item1.children = [];\n }\n item1.children.push({\n id: item.id,\n name: item.name,\n key: item.id,\n });\n } else {\n if (item1.children != undefined && item1.children.length > 0) {\n search_tree(item, item1.children);\n }\n }\n });\n };\n treeData.push({\n key: 999999,\n name: '全部',\n children: [],\n });\n\n res.data.map((item: any) => {\n if (!item.parent_id) {\n treeData.push({\n id: item.id,\n name: item.name,\n key: item.id,\n children: [],\n });\n } else {\n search_tree(item, treeData);\n }\n });\n treeData.map((item1: any) => {\n if (item1.children.length == 0) {\n delete item1.children;\n }\n });\n return treeData;\n};\n// 浮点数加减 相加:countSum( [ a, b, c ] ) 相减:countSum( [ a, -b, -c ] ) 传参必须是 number\nexport const countSum: (arr: number[]) => number = arr => {\n if (!arr.length) return 0;\n arr = arr.map((v: number) => {\n if (v && !Number.isNaN(Number(v))) return Math.round(v * 10000);\n return 0;\n });\n const result = arr.reduce((prev: number, curr: number) => {\n return prev + curr;\n }, 0);\n return result / 10000;\n};\n\nexport const copyValue = val => {\n let str = '';\n let messages = '复制成功';\n if (val?.message) {\n str = val.val;\n messages = val.message;\n } else {\n str = val;\n }\n const textarea = document.createElement('textarea');\n textarea.setAttribute('readonly', 'readonly');\n textarea.value = str;\n document.body.appendChild(textarea);\n textarea.select();\n if (document.execCommand('copy')) {\n message.info(messages);\n }\n document.body.removeChild(textarea);\n};\n\nexport const filterNullAndEmptyKeys = record => {\n const obj: any = {};\n Object.keys(record).forEach(key => {\n if (record[key] !== null && record[key] !== '' && JSON.stringify(record[key]) !== '[]') {\n obj[key] = record[key];\n }\n });\n return obj;\n};\n\nexport const isNotEmpty = value => {\n return value !== null && value !== undefined && value !== '';\n};\n\nexport const showGroupFormat = (item, format) => {\n if (format == 'getPeriod') {\n item.group_info.display_name = getDateMonth(item.group_info.display_name);\n }\n return item;\n};\n\nexport const customRenderMetaData = ({ record }) => {\n const obj = {\n props: {} as any,\n };\n if (record?.meta_data?.rowSpan != undefined) {\n obj.props.rowSpan = record.meta_data.rowSpan;\n }\n return obj;\n};\n\nexport const isEmpty = value => {\n return value === null || value == undefined || value === '';\n};\n\nexport const convertValueByClassName = (value, class_name) => {\n let new_value;\n if (class_name == 'int') {\n if (isNotEmpty(value) && value instanceof Array) {\n new_value = [];\n value.forEach(item => {\n if (isNotEmpty(item) && typeof item === 'string') {\n new_value.push(Number(item));\n } else {\n new_value.push(item);\n }\n });\n } else if (isNotEmpty(value) && typeof value === 'string') {\n new_value = Number(value);\n } else {\n new_value = value;\n }\n } else if (['bool', 'boolean'].includes(class_name)) {\n new_value = [];\n const true_list = ['true', 'True', 'TRUE', '1', 1, true];\n const false_list = ['false', 'False', 'FALSE', '0', 0, false];\n value.forEach(item => {\n if (true_list.includes(item)) {\n new_value.push(true);\n } else if (false_list.includes(item)) {\n new_value.push(false);\n } else {\n new_value.push(item);\n }\n });\n } else {\n new_value = value;\n }\n return new_value;\n};\n\nexport const get_operator_type_map = (format, operator) => {\n const operator_type_map = {\n between: '介于',\n gt: '大于',\n lt: '小于',\n gte: '大于等于',\n lte: '小于等于',\n in: '包含',\n eq: '等于',\n contains: '包含',\n icontains: '包含',\n startswith: '开头',\n notbetween: '不介于',\n notin: '不包含',\n notcontains: '不包含',\n _eq: '选择',\n not_eq: '不等于',\n not_blank_not_null: '是否非空',\n json_list_not_blank_not_null: '是否非空',\n json_list_is_blank_is_null: '是否为空',\n is_or_not_blank_or_null: '是否为空',\n is_or_not_null: '是否为空',\n };\n if (format == 'input' && operator == 'in') {\n return '等于';\n }\n return operator_type_map[operator];\n};\nexport const nested_sort_list = (list: any) => {\n list.sort((a: any, b: any) => {\n return (a.order || 0) - (b.order || 0);\n });\n list.forEach((item: any) => {\n if (item.children) {\n nested_sort_list(item.children);\n }\n });\n};\n\n// 判断是否为有效日期\nexport const isValidDate = (dateString, format = 'YYYY-MM-DD') => {\n const date = moment(dateString, format, true);\n return date.isValid();\n};\n\nexport const checkCondition = ({\n record,\n conditions,\n dataSource,\n selectedRowKeys,\n}: {\n record?: Object;\n conditions: any;\n dataSource?: any[];\n selectedRowKeys?: any[];\n}) => {\n // 如果条件组为空,直接返回true\n if (!conditions || conditions.length === 0) {\n return true;\n }\n\n // 计算每个条件组的结果\n const groupResults = conditions.map(group => {\n // 如果组内没有条件,返回true\n if (!group || group.length === 0) return true;\n\n // 计算组内每个条件的结果\n const conditionResults = group.map(item => {\n if (!item) return false;\n let record_value = null;\n if (selectedRowKeys instanceof Array) {\n record_value = dataSource\n .filter(_item => selectedRowKeys.includes(_item.id))\n .map(_item => _item[item.flag]);\n } else {\n record_value = record[item.flag];\n }\n let newValue = convertValueByClassName(item.value, item.type);\n\n if (!(newValue instanceof Array)) {\n newValue = [newValue];\n }\n\n // 根据操作符判断条件\n switch (item.operator) {\n case 'lt':\n if (typeof newValue[0] === 'number') {\n return !isEmpty(record_value) && record_value < newValue[0];\n } else if (isValidDate(newValue[0])) {\n return !isEmpty(record_value) && moment(record_value).isBefore(moment(newValue[0]));\n }\n return false;\n\n case 'lte':\n if (typeof newValue[0] === 'number') {\n return !isEmpty(record_value) && record_value <= newValue[0];\n } else if (isValidDate(newValue[0])) {\n return (\n !isEmpty(record_value) &&\n (moment(record_value).isBefore(moment(newValue[0])) ||\n moment(record_value).isSame(moment(newValue[0])))\n );\n }\n return false;\n\n case 'gt':\n if (typeof newValue[0] === 'number') {\n return !isEmpty(record_value) && record_value > newValue[0];\n } else if (isValidDate(newValue[0])) {\n return !isEmpty(record_value) && moment(record_value).isAfter(moment(newValue[0]));\n }\n return false;\n\n case 'gte':\n if (typeof newValue[0] === 'number') {\n return !isEmpty(record_value) && record_value >= newValue[0];\n } else if (isValidDate(newValue[0])) {\n return (\n !isEmpty(record_value) &&\n (moment(record_value).isAfter(moment(newValue[0])) ||\n moment(record_value).isSame(moment(newValue[0])))\n );\n }\n return false;\n\n case 'between':\n if (typeof newValue[0] === 'number' && typeof newValue[1] === 'number') {\n return (\n !isEmpty(record_value) && record_value >= newValue[0] && record_value <= newValue[1]\n );\n } else if (isValidDate(newValue[0]) && isValidDate(newValue[1])) {\n return (\n !isEmpty(record_value) &&\n (moment(record_value).isAfter(moment(newValue[0])) ||\n moment(record_value).isSame(moment(newValue[0]))) &&\n (moment(record_value).isBefore(moment(newValue[1])) ||\n moment(record_value).isSame(moment(newValue[1])))\n );\n }\n return false;\n\n case 'notbetween':\n if (typeof newValue[0] === 'number' && typeof newValue[1] === 'number') {\n return (\n !isEmpty(record_value) && (record_value < newValue[0] || record_value > newValue[1])\n );\n } else if (isValidDate(newValue[0]) && isValidDate(newValue[1])) {\n return (\n !isEmpty(record_value) &&\n (moment(record_value).isBefore(moment(newValue[0])) ||\n moment(record_value).isAfter(moment(newValue[1])))\n );\n }\n return false;\n\n case 'in':\n if (record_value instanceof Array) {\n return newValue.some(x => record_value.includes(x));\n } else {\n return newValue.some(x => record_value == x);\n }\n case 'notin':\n if (record_value instanceof Array) {\n return !newValue.some(x => record_value.includes(x));\n } else {\n return !newValue.some(x => record_value == x);\n }\n case 'eq':\n return record_value === newValue[0];\n case 'not_eq':\n return record_value !== newValue[0];\n\n case 'contains':\n return record_value && record_value.toString().indexOf(newValue[0]) > -1;\n case 'icontains':\n return (\n record_value &&\n record_value.toString().toLowerCase().indexOf(newValue[0].toLowerCase()) > -1\n );\n\n case 'notcontains':\n return !record_value || record_value.toString().indexOf(newValue[0]) === -1;\n case 'noticontains':\n return (\n !record_value ||\n record_value.toString().toLowerCase().indexOf(newValue[0].toLowerCase()) === -1\n );\n\n case 'startswith':\n return record_value && record_value.toString().startsWith(newValue[0]);\n case 'istartswith':\n return (\n record_value &&\n record_value.toString().toLowerCase().startsWith(newValue[0].toLowerCase())\n );\n case 'notstartswith':\n return !record_value || record_value.toString().startsWith(newValue[0]);\n case 'notistartswith':\n return (\n !record_value ||\n record_value.toString().toLowerCase().startsWith(newValue[0].toLowerCase())\n );\n\n case 'json_list_not_blank_not_null':\n case 'not_blank_not_null':\n if (record_value instanceof Array) {\n return record_value.length !== 0;\n } else {\n return !!record_value;\n }\n case 'is_blank':\n case 'json_list_is_blank_is_null':\n if (record_value instanceof Array) {\n return record_value.length === 0;\n } else {\n return !record_value;\n }\n\n default:\n return false;\n }\n });\n\n // 组内条件是与逻辑,所有条件都要满足\n return conditionResults.every(result => result);\n });\n\n // 组间条件是或逻辑,只要有一个组满足条件即可\n return groupResults.some(result => result);\n};\nconst confirm = ({ title, content }) => {\n return new Promise((resolve, reject) => {\n Modal.confirm({\n title: title,\n content: content,\n onOk() {\n resolve(true);\n },\n onCancel() {\n resolve(false);\n },\n });\n });\n};\n// 获取本周周日 日期\nconst getWeekday = (day) => {\n const date = moment(day, 'YYYYMMDD');\n // 计算本周周日(ISO周:周一+6天=周日)\n const sunday = date.clone().isoWeekday(7);\n return sunday.format('YYYY-MM-DD');\n}\n// 根据周日日期 周中日期,返回区间时间列表\nconst getWeekDays = ({ sundayDate, weekdayDate }) => {\n // 解析输入日期(支持YYYY-MM-DD和YYYYMMDD格式)\n const sunday = moment(sundayDate, 'YYYY-MM-DD');\n const targetDay = moment(weekdayDate, 'YYYY-MM-DD');\n // 生成日期序列\n const result = [];\n let currentDay = sunday.clone();\n // 从周日倒推到目标周中日期\n while (currentDay.isSameOrAfter(targetDay, 'day')) {\n result.push({\n weekday: currentDay.format('YYYY-MM-DD'),\n weekName: currentDay.format('dddd') // 自动转换为中文星期名称\n });\n currentDay.subtract(1, 'days');\n }\n return result;\n}\nconst GLOBAL_FUNC_MAP = {\n getApiData,\n confirm,\n getWeekday,\n getWeekDays,\n};\n\nexport const executeScriptInWorker = (\n code: string,\n params: any,\n hostFunctions: { [key: string]: (...args: any[]) => any } = {},\n): Promise<any> => {\n return new Promise((resolve, reject) => {\n const workerScript = `${workerCode} \n ${code}`;\n const blob = new Blob([workerScript], { type: 'application/javascript' });\n const worker = new Worker(URL.createObjectURL(blob));\n\n worker.onmessage = async event => {\n const { __type, id, name, args, success, data, error } = event.data;\n\n if (__type === 'call') {\n const func = hostFunctions[name] || GLOBAL_FUNC_MAP[name];\n if (func) {\n try {\n const result = await func(...args);\n worker.postMessage({ __type: 'result', id, result });\n } catch (e: any) {\n worker.postMessage({ __type: 'result', id, error: e.message });\n }\n } else {\n worker.postMessage({\n __type: 'result',\n id,\n error: `Host function '${name}' not found.`,\n });\n }\n return;\n }\n\n worker.terminate();\n if (success) {\n resolve(data);\n } else {\n reject(new Error(error));\n }\n };\n\n worker.onerror = error => {\n worker.terminate();\n reject(error);\n };\n worker.postMessage(JSON.parse(JSON.stringify(params)));\n });\n};\n"],"names":["workerCode","getTime","time","getTime2","getTime3","getMonth","getDateMonth","getDateYear","date","dayjs","getDate","getFullDate","getDateTime","getFullDateTime","getFullYearDateTime","toFixed2","num","isNumber","toFixed0","toFixed3","trim","str","toFixed6","format_datetime_hh_mm","second_time","min","hour","day","format_ms_hh_mm","milliseconds","seconds","minutes","hours","remainingSeconds","remainingMinutes","formattedTime","getObjList","api_fields","record","obj","key","getObjListBySelectedRowKeys","dataSource","selectedRowKeys","item","getRangePicker","getTon","kgnum","get_tag_color_by_slots","column","text","color_list","value_list","get_remote_tree_data","res","treeData","search_tree_remote","list","item1","get_page_tree_data","search_tree","countSum","arr","v","prev","curr","copyValue","val","messages","textarea","message","filterNullAndEmptyKeys","isNotEmpty","value","showGroupFormat","format","customRenderMetaData","_a","isEmpty","convertValueByClassName","class_name","new_value","true_list","false_list","get_operator_type_map","operator","operator_type_map","nested_sort_list","a","b","isValidDate","dateString","moment","checkCondition","conditions","group","record_value","_item","newValue","x","result","confirm","title","content","resolve","reject","Modal","getWeekday","getWeekDays","sundayDate","weekdayDate","sunday","targetDay","currentDay","GLOBAL_FUNC_MAP","getApiData","executeScriptInWorker","code","params","hostFunctions","workerScript","blob","worker","event","__type","id","name","args","success","data","error","func","e"],"mappings":"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"}
|