From 0f04c1808d00b1274c1690ce0423f1f0c3c260e3 Mon Sep 17 00:00:00 2001 From: what Date: Wed, 17 Apr 2024 10:55:04 +0800 Subject: [PATCH] v0.1.4 --- dist/common/main-B944cmcs.js | 1549 ++++++++++++++++++++++++++++++++++ 1 file changed, 1549 insertions(+) create mode 100644 dist/common/main-B944cmcs.js diff --git a/dist/common/main-B944cmcs.js b/dist/common/main-B944cmcs.js new file mode 100644 index 0000000..aaf7bdb --- /dev/null +++ b/dist/common/main-B944cmcs.js @@ -0,0 +1,1549 @@ +var Ct = Object.defineProperty; +var Lt = (e, t, n) => t in e ? Ct(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n; +var N = (e, t, n) => (Lt(e, typeof t != "symbol" ? t + "" : t, n), n), Be = (e, t, n) => { + if (!t.has(e)) + throw TypeError("Cannot " + n); +}; +var f = (e, t, n) => (Be(e, t, "read from private field"), n ? n.call(e) : t.get(e)), F = (e, t, n) => { + if (t.has(e)) + throw TypeError("Cannot add the same private member more than once"); + t instanceof WeakSet ? t.add(e) : t.set(e, n); +}, G = (e, t, n, s) => (Be(e, t, "write to private field"), s ? s.call(e, n) : t.set(e, n), n); +var ve = (e, t, n, s) => ({ + set _(r) { + G(e, t, r, n); + }, + get _() { + return f(e, t, s); + } +}); +import m from "lodash"; +import Re from "axios"; +import y, { useMemo as q, useEffect as R, useRef as P, useState as V, useCallback as se, useContext as st } from "react"; +import He from "ff-request"; +import kt from "https://assets.fsdpf.net/js/esm/spark-md5@3_0_2.min.js?url"; +import { jsx as h, jsxs as I, Fragment as Nt } from "react/jsx-runtime"; +import { QuestionOutlined as Wt, LoadingOutlined as Zt, createFromIconfontCN as Et } from "@ant-design/icons"; +import $ from "classnames"; +import { notification as rt, Drawer as Tt, Modal as wt, Form as ue, ConfigProvider as Gt, Popconfirm as Ot, Tooltip as $t, Button as Fe, Popover as ot } from "antd"; +import { P as W } from "./vender-B-S-5jfg.js"; +import Ve, { Field as it, FieldContext as It } from "rc-field-form"; +import { flushSync as Pt } from "react-dom"; +import { useParams as jt, generatePath as zt, createBrowserRouter as Ut } from "react-router-dom"; +const at = ({ type: e, className: t, ...n }) => { + if (!(e != null && e.startsWith("icon-"))) + return /* @__PURE__ */ h(Wt, {}); + if (e === "icon-loading") + return /* @__PURE__ */ h(Zt, { className: t, ...n }); + const s = q(() => Et({ scriptUrl: re.get("Common.ICONFONT", []) }), [re.get("Common.ICONFONT")]); + return /* @__PURE__ */ h(s, { type: e, className: $("iconfont", t), ...n }); +}, Xt = ({ className: e, title: t, content: n, icon: s, $close: r, category: o, duration: i = 4.5 }) => { + const [l, c] = rt.useNotification(); + return R(() => { + l[o || "open"]({ + className: e, + message: t, + description: n, + icon: s, + duration: i, + onClose: () => r(!1) + }); + }, [t, n, s]), c; +}, Dt = ({ className: e, title: t, content: n, okText: s, $close: r, duration: o = 5e3 }) => { + var a; + const i = P(), [l, c] = V(); + return R(() => (l > 0 && (i.current = setTimeout(() => { + l <= 1 ? r() : c((d) => d - 1); + }, 1e3)), () => clearTimeout(i.current)), [l]), R(() => { + c(Math.max(Math.ceil(o / 1e3), 0)); + }, [o]), /* @__PURE__ */ h("div", { className: $("ff-toast-confirm", e), onClick: (d) => d.mpEvent.currentTarget.id === d.mpEvent.target.id && r(), children: /* @__PURE__ */ I("div", { className: "ff-toast-confirm-container", children: [ + /* @__PURE__ */ h("div", { className: "ff-toast-confirm-title", children: t }), + /* @__PURE__ */ h("div", { className: "ff-toast-confirm-content", children: n }), + /* @__PURE__ */ I("div", { className: "ff-toast-confirm-operations", children: [ + /* @__PURE__ */ I("div", { className: "ff-toast-confirm-cancel", onClick: () => r(!1), children: [ + "取消 (", + l, + ")" + ] }), + y.isValidElement(s) ? y.cloneElement(s, { + onClick: () => r(!0), + className: $("ff-toast-confirm-ok", (a = s.props) == null ? void 0 : a.className) + }) : /* @__PURE__ */ h("div", { className: "ff-toast-confirm-ok", onClick: () => r(!0), children: s || "确定" }) + ] }) + ] }) }); +}, oe = y.createContext({ + ele: {}, + mount: () => { + }, + unmount: () => { + } +}), H = ({ className: e, rootClassName: t, children: n, actions: s, title: r, subTitle: o, extras: i }) => { + const { mount: l, unmount: c } = y.useContext(oe); + return R(() => (l("className", t), () => c("className")), [t]), s && H.Action({ children: s }), r && H.Title({ children: r }), o && H.SubTitle({ children: o }), i && H.Extra({ children: i }), /* @__PURE__ */ h("div", { className: $("ff-container", e), children: n }); +}, je = (e) => ({ children: t, className: n }) => { + const { mount: s, unmount: r } = y.useContext(oe); + return R(() => (s(e, y.createElement("div", { + key: `ff-${e}`, + className: $(`ff-toast-${e}`, n) + }, t)), () => r(e)), [n, t]), null; +}; +H.Action = je("actions"); +H.Title = je("title"); +H.SubTitle = je("sub-title"); +H.Extra = je("extras"); +const Yn = ({ name: e }) => { + const { ele: t } = y.useContext(oe); + return t == null ? void 0 : t[e]; +}; +H.propTypes = { + // root className + rootClassName: W.string, + // 容器 className + className: W.string, + // 标题占位符 + title: W.any, + // 副标题占位符 + subTitle: W.any, + // 操作按钮占位符 + actions: W.any, + // 扩展安装占位符 + extras: W.any +}; +const St = y.forwardRef(({ $close: e, children: t, className: n, title: s, ...r }, o) => { + const i = P(), [l, c] = V(!0), [a, d] = V({}), g = se((u, b) => d((v) => ({ ...v, [u]: b })), []), p = se((u) => d((b) => ({ ...b, [u]: void 0 })), []); + return y.useImperativeHandle(o, () => ({ + handleClose: (u) => { + i.current = u, c(!1); + } + })), /* @__PURE__ */ h(oe.Provider, { value: { ele: a, mount: g, unmount: p }, children: /* @__PURE__ */ h( + Tt, + { + ...r, + title: s || (a == null ? void 0 : a.title), + open: l, + onClose: () => c(!1), + afterOpenChange: (u) => !u && e(i.current), + className: $("ff-toast ff-toast-drawer", n, a == null ? void 0 : a.className), + extra: a == null ? void 0 : a["sub-title"], + classNames: { header: "ff-toast-header", footer: "ff-toast-footer" }, + footer: a != null && a.extras || a != null && a.actions ? /* @__PURE__ */ I(y.Fragment, { children: [ + (a == null ? void 0 : a.extras) || /* @__PURE__ */ h("div", { className: "ff-toast-extras" }), + (a == null ? void 0 : a.actions) || /* @__PURE__ */ h("div", { className: "ff-toast-actions" }) + ] }) : void 0, + children: t + } + ) }); +}), Ht = y.forwardRef(({ $close: e, children: t, className: n, title: s, ...r }, o) => { + const i = P(), [l, c] = V(!0), [a, d] = V({}), g = se((u, b) => d((v) => ({ ...v, [u]: b })), []), p = se((u) => d((b) => ({ ...b, [u]: void 0 })), []); + return y.useImperativeHandle(o, () => ({ + handleClose: (u) => { + i.current = u, c(!1); + } + })), /* @__PURE__ */ h(oe.Provider, { value: { ele: a, mount: g, unmount: p }, children: /* @__PURE__ */ h( + wt, + { + ...r, + title: /* @__PURE__ */ I(Nt, { children: [ + s || (a == null ? void 0 : a.title), + a == null ? void 0 : a["sub-title"] + ] }), + open: l, + onCancel: () => { + i.current = !1, c(!1); + }, + afterOpenChange: (u) => !u && e(i.current), + className: $("ff-toast ff-toast-modal", n, a == null ? void 0 : a.className), + keyboard: !0, + classNames: { header: "ff-toast-header", footer: "ff-toast-footer" }, + footer: a != null && a.extras || a != null && a.actions ? /* @__PURE__ */ I(y.Fragment, { children: [ + (a == null ? void 0 : a.extras) || /* @__PURE__ */ h("div", { className: "ff-toast-extras" }), + (a == null ? void 0 : a.actions) || /* @__PURE__ */ h("div", { className: "ff-toast-actions" }) + ] }) : void 0, + children: t + } + ) }); +}); +var we, de, K, Ge, Oe, $e, Ie, fe; +const ce = class ce extends y.Component { + constructor(n) { + super(n); + F(this, we, null); + F(this, de, 0); + F(this, K, /* @__PURE__ */ new Map()); + F(this, Ge, (n) => new Promise((s) => { + const r = ve(this, de)._++; + f(this, K).set(r, y.createElement(Xt, { + ...n, + key: r, + $close: (o) => f(this, fe).call(this, r, () => s(o)) + })), this.forceUpdate(); + })); + F(this, Oe, (n, s) => new Promise((r) => { + const o = ve(this, de)._++; + f(this, K).set(o, y.createElement(Dt, { + ...s, + content: n, + key: o, + $close: (i) => f(this, fe).call(this, o, () => r(i)) + })), this.forceUpdate(); + })); + F(this, $e, (n, s, { mode: r, ...o } = {}) => new Promise((i) => { + const l = ve(this, de)._++, c = { current: null }; + f(this, K).set(l, y.createElement( + r == "drawer" ? St : Ht, + { + ref: c, + key: l, + maskClosable: !1, + ...o, + $close: (a) => f(this, fe).call(this, l, () => i(a)) + }, + y.createElement(n, { + ...s, + $close: (a) => c.current.handleClose(a) + }) + )), this.forceUpdate(); + })); + F(this, Ie, (n, s) => { + }); + F(this, fe, (n, s) => { + f(this, K).delete(n), this.forceUpdate(s); + }); + ce.modal = f(this, $e), ce.notification = f(this, Ge), ce.confirm = f(this, Oe), ce.form = f(this, Ie); + } + componentWillUnmount() { + var n, s; + (s = (n = f(this, we)) == null ? void 0 : n[1]) == null || s.call(n); + } + render() { + const n = Array.from(f(this, K)); + return /* @__PURE__ */ h(oe.Provider, { value: {}, children: n.map(([s, r]) => r) }); + } +}; +we = new WeakMap(), de = new WeakMap(), K = new WeakMap(), Ge = new WeakMap(), Oe = new WeakMap(), $e = new WeakMap(), Ie = new WeakMap(), fe = new WeakMap(); +let Z = ce; +Z.notification = ({ title: e, content: t, icon: n, category: s, ...r }) => Promise.resolve(rt[s || "open"]({ + ...r, + icon: n ? /* @__PURE__ */ h(at, { type: n || "" }) : void 0, + message: e, + description: t +})); +Z.success = (e, t = {}) => Z.notification({ title: e, category: "success", ...t }); +Z.error = (e, t = {}) => Z.notification({ title: e, category: "error", ...t }); +Z.confirm = (e, t = {}) => Z.notification({ content: e, ...t }); +Z.form = (e = {}) => Z.notification(e); +Z.modal = (e = {}) => Z.notification(e); +const ze = "mine", xe = "token", xt = "web", Yt = 60 * 60 * 24 * 30, Ye = () => { + const e = window.localStorage.getItem(xe); + if (!e) + return ""; + const t = e.split("."); + if (!Array.isArray(t) || t.length !== 3) + throw "登录令牌无效!"; + const { iat: n } = JSON.parse(window.atob(t[1])); + if (Math.floor((/* @__PURE__ */ new Date()).getTime() / 1e3) - n > Yt) + throw "登录令牌已过期, 请重新登录!"; + return e; +}, Jt = () => { + try { + return !!Ye(); + } catch { + return !1; + } +}, Jn = (e = !0) => { + var t; + try { + const n = Ye(); + if (!n) + return Promise.resolve(null); + const { iat: s } = JSON.parse(window.atob((t = n == null ? void 0 : n.split(".")) == null ? void 0 : t[1])), { iat: r, ...o } = L.decode(window.localStorage.getItem(ze) || "", {}); + return r === s ? Promise.resolve(o) : L.get("/api/mine-info").then(({ User: i = null }) => (window.localStorage.setItem(ze, L.encode({ ...i, iat: s })), i)); + } catch (n) { + console.error(n), e && Z.error("请登录").then(Kt); + } + return Promise.resolve(null); +}, Kn = (e, t, n = {}) => L.post("/api/user-token", { + username: e, + passwd: kt.hash(t), + platform: xt, + ...n +}).then(({ token: s }) => (window.localStorage.setItem(xe, s), s)), Kt = () => { + window.localStorage.removeItem(ze), window.localStorage.removeItem(xe); +}; +Re.interceptors.request.use((e) => { + e.headers.Platform = "web", e.headers.SaaS = window.localStorage.getItem("SaaS"); + try { + const t = Ye(); + e.headers.Authorization = t ? `Bearer ${t} ` : void 0; + } catch { + } + return e; +}, (e) => Promise.reject({ code: -1, msg: e })); +Re.interceptors.response.use(({ data: e, headers: t }) => ({ ...e, res: t == null ? void 0 : t.Res }), function(e) { + return Promise.reject(e.message); +}); +window.addEventListener("unhandledrejection", He.onUnhandledRejection); +He.onToast = (e, t) => Z[[0, 1].includes(e) ? "success" : "error"](t).then(() => e === 20300 && Ae.redirect(re.get("Common.WEBSITE_LOGIN_PAGE"))); +const At = y.createContext({ + user: {}, + initUser: () => { + }, + initUserComplete: !1 +}), lt = y.createContext({ + set: () => { + }, + get: () => { + }, + assign: () => { + }, + currentRoute: () => { + } +}); +var me, Ce, he, Y, te, ne; +class ct { + constructor(t, n) { + F(this, me, /* @__PURE__ */ new Map()); + F(this, Ce, !0); + F(this, he, []); + F(this, Y, void 0); + F(this, te, () => f(this, Y)); + F(this, ne, () => Promise.resolve()); + N(this, "get", (...t) => new Promise((n, s) => { + const r = JSON.stringify(t); + if (f(this, me).has(r)) + return n(f(this, ne).call(this, f(this, Y), ...t)); + if (f(this, Y) === void 0) + f(this, he).push([t, n, s]), f(this, Ce) && (G(this, Ce, !1), Promise.resolve(typeof f(this, te) == "function" ? f(this, te).call(this) : f(this, te)).then((o) => G(this, Y, o || null)).finally(() => { + f(this, he).forEach(([o, i, l]) => { + try { + const c = f(this, ne).call(this, f(this, Y), ...o); + f(this, me).set(JSON.stringify(o), c), i(c); + } catch (c) { + l(c); + } + }), f(this, he).length = 0; + })); + else { + const o = f(this, ne).call(this, f(this, Y), ...t); + f(this, me).set(r, o), n(o); + } + })); + G(this, ne, n), G(this, te, t); + } +} +me = new WeakMap(), Ce = new WeakMap(), he = new WeakMap(), Y = new WeakMap(), te = new WeakMap(), ne = new WeakMap(); +var A, Le; +const z = class z { + constructor() { + F(this, Le, null); + N(this, "init", (t) => G(this, Le, t)); + N(this, "get", (t, n) => m.get(f(this, Le), t, n)); + if (f(z, A)) + return f(z, A); + } +}; +A = new WeakMap(), Le = new WeakMap(), F(z, A, null), N(z, "getInstance", () => (f(z, A) || G(z, A, new z()), f(z, A))); +let Ue = z; +const re = Ue.getInstance(), le = new Worker(new URL("data:text/plain;base64,KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2ltcG9ydFNjcmlwdHMoImh0dHBzOi8vYXNzZXRzLmZzZHBmLm5ldC9qcy91bWQvbG9kYXNoQDRfMTdfMjEubWluLmpzIiwiaHR0cHM6Ly9hc3NldHMuZnNkcGYubmV0L2pzL3VtZC9sb2Rhc2gubWl4aW4uanMiKSxpbXBvcnRTY3JpcHRzKCJodHRwczovL2Fzc2V0cy5mc2RwZi5uZXQvanMvdW1kL21vbWVudEAyXzI5XzQubWluLmpzIiwiaHR0cHM6Ly9hc3NldHMuZnNkcGYubmV0L2pzL3VtZC9tb21lbnQubG9jYWxlLnpoLWNuLmpzIiksbW9tZW50LmxvY2FsZSgiemgtY24iKTtjb25zdCBVdGlsPShlLHMpPT57Y29uc3QgdD1VdGlsLm1zZ19pZCsrO3JldHVybiBuZXcgUHJveHkoKCk9Pnt9LHtnZXQoe3Jvb3Q6YX0sbil7Y29uc3Qgbz1hP2Ake2F9LyR7bn1gOm47cmV0dXJuIGZ1bmN0aW9uKC4uLmkpe3JldHVybiBuZXcgUHJvbWlzZSgocixsKT0+e1V0aWwubVF1ZXVlLnNldCh0LFtyLGxdKSxzZWxmLnBvc3RNZXNzYWdlKHtpZDp0LHRhc2tfaWQ6ZSxzZXNzaW9uOnMsY2F0ZWdvcnk6InV0aWwiLG1ldGhvZDpvLGFyZ3M6aX0pfSl9fSxhcHBseShhLG4sbyl7cmV0dXJuIG5ldyBQcm94eShPYmplY3QuY3JlYXRlKHtyb290Om9bMF18fG51bGx9KSx7Z2V0OnRoaXMuZ2V0fSl9fSl9O1V0aWwubXNnX2lkPTAsVXRpbC5tUXVldWU9bmV3IE1hcCxVdGlsLm1NZXRob2RXb3Jrc3BhY2U9bmV3IE1hcCxzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKHtkYXRhOntpZDplLGRhdGE6cyxlcnJvcjp0LGNhdGVnb3J5OmF9fSl7YT09PSJ1dGlsIiYmKHQhPT1udWxsP1V0aWwubVF1ZXVlLmdldChlKVsxXSh0KTpVdGlsLm1RdWV1ZS5nZXQoZSlbMF0ocyksVXRpbC5tUXVldWUuZ2V0KGUpLFV0aWwubVF1ZXVlLmRlbGV0ZShlKSl9LCExKSxzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7ZGF0YTp7aWQsbWV0aG9kLGFyZ3MsY2F0ZWdvcnksc2Vzc2lvbixzb3VyY2VVUkx9fSk9PntpZihjYXRlZ29yeSE9PSJldmFsIilyZXR1cm47c2Vzc2lvbiYmIVV0aWwubU1ldGhvZFdvcmtzcGFjZS5oYXMoc2Vzc2lvbikmJlV0aWwubU1ldGhvZFdvcmtzcGFjZS5zZXQoc2Vzc2lvbix7fSk7Y29uc3QgZXZhbERhdGFTb3VyY2VVUkw9c291cmNlVVJMP2AKLy8jIHNvdXJjZVVSTD1mZjovLy8uLyR7c291cmNlVVJMfWA6IiIsZXZhbERhdGE9ZXZhbChgKGFzeW5jIGZ1bmN0aW9uKHske09iamVjdC5rZXlzKGFyZ3MpLmpvaW4oIiwgIil9fSwgVXRpbCl7JHttZXRob2R9Cn0pJHtldmFsRGF0YVNvdXJjZVVSTH1gKS5jYWxsKHNlc3Npb24/VXRpbC5tTWV0aG9kV29ya3NwYWNlLmdldChzZXNzaW9uKTp7fSxhcmdzLFV0aWwoaWQsc2Vzc2lvbikpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZXZhbERhdGEpLnRoZW4oZT0+e3NlbGYucG9zdE1lc3NhZ2Uoe2lkLHNlc3Npb24sY2F0ZWdvcnksZGF0YTplLGVycm9yOm51bGx9KX0pLmNhdGNoKGU9PntzZWxmLnBvc3RNZXNzYWdlKHtpZCxzZXNzaW9uLGNhdGVnb3J5LGRhdGE6bnVsbCxlcnJvcjplIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZlLm5hbWU9PT0iRGF0YUNsb25lRXJyb3IiPyJEYXRhQ2xvbmVFcnJvciDov5Tlm57nu5Pmnpzlj6rog73kuLrnroDljZXmlbDmja7moLzlvI8iOmV9KX0pfSksc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwoe2RhdGE6e2NhdGVnb3J5OmUsc2Vzc2lvbjpzfX0pPT57ZT09PSJjbGVhciImJlV0aWwubU1ldGhvZFdvcmtzcGFjZS5kZWxldGUocyl9LCExKX0pKCk7Cg==", self.location)), Qe = { + getConfigure: (e) => re.get(e) +}; +var Pe, ge, M; +const k = class k { + constructor() { + N(this, "exec", (t, n = {}, s = {}, r = "") => new Promise((o, i) => { + const l = ve(k, Pe)._++; + f(k, ge).set(l, s), k.mQueue.set(l, [o, i]), le.postMessage({ id: l, session: r, category: "eval", method: t, args: n }); + })); + N(this, "clear", (t) => le.postMessage({ session: t, category: "clear" })); + if (f(k, M)) + return f(k, M); + Promise.resolve().then(() => Zn).then((t) => { + Qe.http = t.http; + }), le.addEventListener("message", ({ data: { id: t, task_id: n, method: s, args: r, category: o, data: i, error: l, session: c } }) => { + if (o === "eval" && k.mQueue.has(t)) + l !== null ? k.mQueue.get(t)[1](l) : k.mQueue.get(t)[0](i), f(k, ge).delete(t), k.mQueue.delete(t); + else if (o === "util") + try { + const a = m.get(Qe, s.split("/")) || m.get(f(k, ge).get(n), s.split("/")); + if (!m.isFunction(a)) + throw `${s} not found`; + Promise.resolve(Reflect.apply(a, void 0, r)).then((d) => { + le.postMessage({ id: t, task_id: n, category: o, method: s, args: r, session: c, data: d, error: null }); + }).catch((d) => { + le.postMessage({ id: t, task_id: n, category: o, method: s, args: r, session: c, data: null, error: d }); + }); + } catch (a) { + le.postMessage({ id: t, task_id: n, category: o, method: s, args: r, session: c, data: null, error: a }); + } + }, !1); + } +}; +Pe = new WeakMap(), ge = new WeakMap(), M = new WeakMap(), N(k, "mQueue", /* @__PURE__ */ new Map()), F(k, Pe, 0), F(k, ge, /* @__PURE__ */ new Map()), F(k, M, null), N(k, "getInstance", () => (f(k, M) || G(k, M, new k()), f(k, M))); +let Xe = k; +const ie = Xe.getInstance(); +var B, D; +const U = class U { + constructor() { + F(this, D, /* @__PURE__ */ new Map()); + N(this, "setVendor", (t, n) => f(this, D).set(t, new ct(n, (s, r) => s.dynamicRequireFsdpfComponent(r)))); + N(this, "getWidgetComponent", async (t) => { + if (!t) + throw "getWidgetComponent widget is required"; + const [, n] = t == null ? void 0 : t.split("@app/"), [, s] = t == null ? void 0 : t.split("@pkg/"), [, r] = t == null ? void 0 : t.split("@fsdpf/"); + try { + switch (!0) { + case (!!n && f(this, D).has("pkg")): + return await f(this, D).get("pkg").get(n); + case (!!s && f(this, D).has("pkg")): + return await f(this, D).get("pkg").get(s); + case (!!r && f(this, D).has("pkg")): + return await f(this, D).get("pkg").get(r); + } + } catch (o) { + throw o; + } + }); + if (f(U, B)) + return f(U, B); + } +}; +B = new WeakMap(), D = new WeakMap(), F(U, B, null), N(U, "getInstance", () => (f(U, B) || G(U, B, new U()), f(U, B))); +let De = U; +const x = De.getInstance(), Mt = () => "Table", ut = () => { + const e = P(!0), [t, n] = V(0); + return R(() => () => e.current = !1, []), () => e.current && Pt(() => { + n(t + 1); + }); +}, An = ({ value: e, defaultValue: t, onChange: n }) => { + const s = ut(), r = P(e !== void 0 ? e : t); + e !== void 0 && (r.current = e); + const o = se(m.debounce((i) => { + e === void 0 && (r.current = i, s()), n && n(i); + }, 380, { leading: !0, trailing: !1 }), [e]); + return [r.current, o]; +}, qe = (e) => { + const t = P(); + return R(() => { + t.current = e; + }), t.current; +}, Mn = (e) => { + const t = P(), [n, s] = V(e); + return R(() => { + m.isFunction(t.current) && t.current(n); + }, [n]), [n, function(r, o) { + t.current = o, s(r); + }]; +}, Je = (e = y.EffectCallback, t, n = m.isEqual) => { + const s = y.useRef(t); + (!s.current || !n(t, s.current)) && (s.current = t), y.useEffect(e, [s.current]); +}, dt = (e, t = "string") => { + var n; + if (!Array.isArray(e)) + return e; + for (let s = 0; s < e.length; s++) + e[s].value = m.toPrimitive((n = e[s]) == null ? void 0 : n.value, t), e[s] && Reflect.has(e[s], "children") && (e[s].children = dt(e[s].children, t)); + return e; +}, Bn = (e, t = "json", n = "string", s, r = null) => { + const [o] = Ve.useForm(s), [i, l] = V([{ label: "无", value: "", disabled: !0 }]), c = P([]), a = Ve.useWatch((d) => c.current.length === 0 ? null : m.pick(d, c.current), o) || null; + return R(() => { + Array.isArray(e) ? l(e) : t === "javascript" && e ? ie.exec(e, {}, { + getFieldValue: (d) => (c.current.includes(d) || c.current.push(d), o.getFieldValue(d)), + getFieldValueForBasicForm: (d) => (c.current.includes(d) || c.current.push(d), r ? r.getFieldValue(d) : o.getFieldValue(d)) + }).then((d) => { + l(m.toPrimitive(d, "array")); + }) : e && l(m.toPrimitive(e, "array")); + }, [e, t, a]), dt(i, n); +}, Bt = (e) => { + const [t, n] = y.useState({ gridItems: [], hideItems: [] }); + return y.useEffect(() => { + e && L.get(`/api/_/${e}`).then(({ + pk: s, + uuid: r, + code: o, + resource: i, + align: l, + listenChangeFields: c, + listenChangeFieldsFunc: a, + fields: d + }) => ({ + pk: s, + uuid: r, + code: o, + resource: i, + align: l, + listenChangeFields: c, + listenChangeFieldsFunc: a, + ...d.reduce((g, p) => { + var u; + return (u = p == null ? void 0 : p.field) != null && u.hidden ? g.hides.push(p == null ? void 0 : p.field) : g.items.push(p), g; + }, { items: [], hides: [] }) + })).then(n); + }, [e]), t; +}, Qt = ({ + max: e = 0, + min: t = 0, + type: n = "", + message: s, + pattern: r, + required: o = !1, + validator: i +} = {}, l, c) => { + const [a, d] = V([]); + return R(() => { + const g = []; + if (o) { + let p = c; + switch (c) { + case "number": + case "string": + case "array": + break; + case "bool": + p = "boolean"; + break; + case "json": + p = "object"; + break; + } + g.push({ type: p, required: !0, whitespace: !0, message: "该项必填" }); + } + switch (n) { + case "string": + g.push({ + type: n, + max: e, + min: t, + message: s || (t && e ? `字符必须在 ${t} ~ ${e} 之间` : `${e ? "最多能有" : "最少要有"} ${t || e} 个字符`) + }); + break; + case "pattern": + g.push({ type: "string", pattern: r, message: s }); + break; + case "validator": + i && g.push(({ getFieldValue: p }) => ({ + validator: async (u, b) => { + const v = await ie.exec(i, { value: b, fieldName: l }, { getFieldValue: p }); + return m.isString(v) && v ? Promise.reject(v) : m.isBoolean(v) && !v ? Promise.reject(s) : Promise.resolve(); + } + })); + break; + } + d(g); + }, [e, t, n, s, r, o, i]), a; +}, qt = (e, t, n) => { + const [s, r] = V(null); + return R(() => { + const { + initDataUri: o = `/api/${e}`, + initDataMethod: i = "GET" + } = n || {}; + L.request({ + method: i, + url: m.trimEnd(`${o}/${t}`, "/") + }).then((l) => { + r(l); + }); + }, [e, t, n]), s; +}, _t = (e, t, n, s = {}) => { + const r = ut(), o = P(!0), i = P([]), [l, c] = V(n), a = Ve.useWatch((d) => JSON.stringify(m.pick(d, i.current)), t) || "{}"; + return R(() => { + e && ie.exec(e, s, { + getFieldValue: m.wrap(t.getFieldValue, (d, g) => (i.current.some((p) => m.isEqual(p, g)) || (i.current.push(g), r()), d(g))), + isFieldTouched: t.isFieldTouched, + isFieldsTouched: t.isFieldsTouched + }).then((d) => o.current && c(d)); + }, [e, a, t, s]), R(() => () => o.current = !1, []), l; +}, en = (e) => ({ + code: t, + layout: n, + name: s, + primaryKey: r = 0, + style: o = {}, + formProps: i = {}, + form: l, + isPreview: c = !1, + className: a, + onFinish: d, + onValuesChange: g = () => { + }, + ...p +}) => { + const { + align: u, + autoComplete: b, + resource: v, + items: j, + hides: ae, + rowHeight: Ze, + marginX: Ee, + marginY: Te, + listenChangeFields: ye, + listenChangeFieldsFunc: T, + pk: _, + uuid: ee + } = Bt(t), [E] = ue.useForm(l), J = ({ + changedValues: w, + allValues: O, + listenChangeFields: Vt, + listenChangeFieldsFunc: Me, + onValuesChange: En, + code: Tn + }) => { + Me && Array.isArray(Vt) && ie.exec( + Me, + { changedValues: w, allValues: O }, + { + getFieldValue: E.getFieldValue, + setFieldsValue: E.setFieldsValue, + isFieldTouched: E.isFieldTouched, + isFieldsTouched: E.isFieldsTouched + } + ); + }, be = q(() => [ + { name: "__PK__", value: _ }, + { name: "__PROPS__", value: i }, + { name: "__RESOURCE__", value: v }, + { name: "__LAYOUT_KEY__", value: t }, + { name: "__LAYOUT_UUID__", value: ee }, + { name: "__PRIMARY_KEY__", value: r } + ], [_, t, ee, v, r, i]); + return /* @__PURE__ */ I( + ue, + { + className: a, + requiredMark: !0, + name: s || t, + layout: n || u, + fields: be, + form: E, + autoComplete: b, + style: { ...o, position: "relative" }, + onFinish: d, + onValuesChange: (w, O) => J( + { + changedValues: w, + allValues: O, + listenChangeFields: ye, + listenChangeFieldsFunc: T, + onValuesChange: g, + code: t + } + ), + children: [ + /* @__PURE__ */ h( + e, + { + ...p, + form: E, + code: t, + fields: j, + rowHeight: Ze, + marginX: Ee, + marginY: Te + } + ), + ae == null ? void 0 : ae.map((w) => { + var O; + return /* @__PURE__ */ h(it, { name: w.code, children: /* @__PURE__ */ h( + tn, + { + form: E, + name: w.code, + type: w.type, + initialValue: w.initialValue, + initialValueLanguage: (O = w.extras) == null ? void 0 : O.initialValueLanguage + } + ) }, JSON.stringify(w.code)); + }) + ] + } + ); +}, tn = ({ type: e, initialValue: t, initialValueLanguage: n, onChange: s, form: r }) => { + const o = _t( + n == "javascript" && t, + r, + n == "javascript" ? void 0 : t, + {} + ); + return R(() => { + n == "javascript" ? s(m.toPrimitive(o, e)) : s(m.toPrimitive(t, e)); + }, [e, t, o]), null; +}, nn = (e) => function({ code: n, data: s, ...r }) { + const [o, i] = V({ + resource: null, + cols: 12, + rowHeight: 21, + fields: [] + }); + return R(() => { + n && L.get(`/api/_/${n}`).then((l) => i(m.pick(l, ["resource", "cols", "rowHeight", "fields"]))); + }, [n]), (o == null ? void 0 : o.resource) && /* @__PURE__ */ h( + e, + { + ...r, + rowHeight: o.rowHeight, + cols: o.cols, + fields: o.fields, + data: o != null && o.resource ? { [o == null ? void 0 : o.resource]: s } : {} + } + ); +}, ft = (e, { + initialValue: t, + initialValueLanguage: n, + convertJs: s, + convertJsSetting: r, + type: o = "string" +}, i = null) => { + const l = P(!1), c = st(It), [a, d] = V(), [g, p] = V(n == "javascript" || !e ? void 0 : c.getFieldValue(e)); + return R(() => { + n == "javascript" && t ? ie.exec(t, {}, { + getFieldValueForBasicForm: (u) => i ? i.getFieldValue(u) : c.getFieldValue(u), + getFieldValue: (u) => c.getFieldValue(u) + }).then((u) => p(m.toPrimitive(u, o))).catch((u) => notification.error({ message: `布局数据错误: ${JSON.stringify(u)}` })).finally(() => l.current = !0) : (t && p(m.toPrimitive(t || c.getFieldValue(e) || t, o)), l.current = !0); + }, [t, n]), Je(() => { + l.current && s && x.getWidgetComponent(s).then(({ default: u }) => u({ value: g, record: c.getFieldsValue(!0), $setting: r })).then(d).catch((u) => console.error("布局数据转换错误: ", u, s)); + }, [g, s, r]), [a || g, g]; +}, sn = (e, t, n, s, r, o) => { + const i = { + "--grid-layout-h": `${s}`, + "--grid-layout-w": `${n}`, + "--grid-layout-x": `${e}`, + "--grid-layout-y": `${t}`, + "--grid-layout-row-height-offset": "0px" + }; + return r != null && r.autoHeight ? i.height = "fit-content" : i["--grid-layout-row"] = `${s}`, i["--grid-layout-box-margin"] = _e(r == null ? void 0 : r.marginTop, r == null ? void 0 : r.marginRight, r == null ? void 0 : r.marginBottom, r == null ? void 0 : r.marginLeft), i["--grid-layout-box-padding"] = _e(r == null ? void 0 : r.paddingTop, r == null ? void 0 : r.paddingRight, r == null ? void 0 : r.paddingBottom, r == null ? void 0 : r.paddingLeft), o && (i.height = `${o}px`), i; +}, _e = (e, t, n, s) => `${e || 0}px ${t || 0}px ${n || 0}px ${s || 0}px`, mt = ({ cols: e, rowHeight: t, fields: n, data: s, containerPadding: r = [0, 0], itemMargin: o = [4, 0], formProps: i = {}, className: l, ...c }) => { + const [a] = Ve.useForm(), d = ht(n, on, "@pkg/grid-layouts"), g = q(() => [ + { name: "__PROPS__", value: i } + ], [i]); + return Je(() => { + a.setFieldsValue(s); + }, [s]), /* @__PURE__ */ h(Ve, { fields: g, form: a, component: !1, children: /* @__PURE__ */ h( + "div", + { + ...c, + className: $("ff-grid-layout", l), + style: { + "--grid-layout-item-margin-y": `${(o == null ? void 0 : o[0]) || 0}px`, + "--grid-layout-item-margin-x": `${(o == null ? void 0 : o[1]) || 0}px`, + "--grid-layout-container-padding-y": `${(r == null ? void 0 : r[0]) || 0}px`, + "--grid-layout-container-padding-x": `${(r == null ? void 0 : r[1]) || 0}px`, + "--grid-layout-cols": e || 12, + "--grid-layout-row-height": `${t || 21}px` + }, + children: d + } + ) }); +}, ht = (e, t, n = "@pkg/grid-layouts", s = null) => q(() => { + var r; + return (r = m.sortBy(e, ["y", "x"])) == null ? void 0 : r.map( + ({ i: o, x: i, y: l, w: c, h: a, field: { boxStyle: d, widgetPrefix: g = n, widget: p, ...u } }, b) => /* @__PURE__ */ h( + "div", + { + className: "grid-layout-item", + style: sn(i, l, c, a, d, p === "Height" && (u == null ? void 0 : u.initialValue)), + children: /* @__PURE__ */ h( + rn, + { + ...u, + basicForm: s, + itemWidget: p != null && p.startsWith("@") ? p : `${g}/${p}`, + itemWidgetRender: t + } + ) + }, + o || b + ) + ); +}, [e]), rn = ({ itemWidget: e, itemWidgetRender: t, basicForm: n, ...s }) => { + const [r, o] = V(); + return R(() => { + x.getWidgetComponent(e).then(({ defaultProps: i, default: l }) => { + o(y.createElement(t(l, i, n), s)); + }).catch((i) => o(e)); + }, [e]), r; +}, on = (e, t, n = null) => (s) => { + const { + code: r, + label: o, + extras: i, + isVirtual: l, + initialValue: c, + initialValueLanguage: a, + convertJs: d, + convertJsSetting: g, + ...p + } = m.merge({}, t, s), [u, b] = ft(l ? null : r, { + initialValue: c, + initialValueLanguage: a, + convertJs: d, + convertJsSetting: g, + type: (p == null ? void 0 : p.type) || "string" + }, n); + return /* @__PURE__ */ h(e, { ...p, value: u, rawValue: b, $setting: i || {} }); +}, Qn = nn(mt), gt = ({ widget: e, widgetPrefix: t, widgetDecorator: n, subWidgets: s, basicForm: r, ...o }) => { + const i = e != null && e.startsWith("@") ? e : `${t}/${e}`, [l, c] = V(); + return R(() => { + i && x.getWidgetComponent(i).then(({ defaultProps: a, default: d }) => ({ + default: pt(d, a, r) + })).catch((a) => ({ default: () => `${a}` })).then((a) => c(y.createElement(a.default, o))); + }, [i]), l && y.cloneElement(l, o); +}; +gt.defaultProps = { + widgetPrefix: "@pkg/grid-layout-forms", + widget: "Input" +}; +const pt = (e, t, n = null) => (s) => { + const { + type: r, + code: o, + label: i, + noStyle: l, + placeholder: c, + extras: a, + validators: d, + help: g, + isVirtual: p, + initialValue: u, + initialValueLanguage: b, + convertJs: v, + convertJsSetting: j, + widgetPerfix: ae, + boxStyle: Ze, + widgetDecorator: Ee, + subWidgets: Te, + ...ye + } = { ...t, ...s }, T = Qt(d || {}, o, r), _ = { + label: i, + noStyle: l, + colon: !1 + }, ee = { + placeholder: c, + ...ye + }; + return /* @__PURE__ */ h( + it, + { + name: o, + rules: T, + normalize: (E) => E == null ? void 0 : m.toPrimitive(E, r), + children: (E, J, be) => { + var w; + return /* @__PURE__ */ h( + e, + { + type: r, + rcform: be, + itemProps: { + validateStatus: J.errors.length > 0 ? "error" : "success", + tooltip: g, + help: J.errors.length > 0 ? J.errors.join("、") : null, + required: ((w = T == null ? void 0 : T[0]) == null ? void 0 : w.required) || !1, + ..._ + }, + fieldProps: { ...ee, ...E }, + $setting: a || {} + } + ); + } + } + ); +}, Ke = ({ cols: e, rowHeight: t, itemMargin: n = [8, 8], containerPadding: s = [0, 0], fields: r }) => { + const o = ht(r, pt, "@pkg/grid-layout-forms"); + return /* @__PURE__ */ h(Gt, { theme: { components: { Form: { itemMarginBottom: 0 } } }, children: /* @__PURE__ */ h("div", { className: "ff-grid-layout-form", style: { + "--grid-layout-item-margin-x": `${(n == null ? void 0 : n[0]) || 0}px`, + "--grid-layout-item-margin-y": `${(n == null ? void 0 : n[1]) || 0}px`, + "--grid-layout-container-padding-y": `${(s == null ? void 0 : s[0]) || 0}px`, + "--grid-layout-container-padding-x": `${(s == null ? void 0 : s[1]) || 0}px`, + "--grid-layout-cols": e || 24, + "--grid-layout-row-height": `${t || 16}px` + }, children: o }) }); +}; +Ke.propTypes = { + fields: W.array.isRequired +}; +Ke.defaultProps = { + fields: [] +}; +const an = en(Ke), yt = ({ children: e }) => { + const [t, n] = V({}), s = se((o, i) => n((l) => ({ ...l, [o]: i })), []), r = se((o) => n((i) => ({ ...i, [o]: void 0 })), []); + return /* @__PURE__ */ h(oe.Provider, { value: { ele: t, mount: s, unmount: r }, children: e }); +}; +yt.defaultProps = { + isDrawerRender: !1 +}; +yt.propTypes = { + isDrawerRender: W.bool +}; +const ln = (e = {}, t = {}, n = {}, s = "") => m.deepSome(e, (r, o) => o === "type" && r === "code") ? bt(e, t, n, s) : vt(e, t, n, s), bt = async (e = {}, t = {}, n = {}, s = "") => { + let r = /* @__PURE__ */ Object.create(null); + for (let o in e) + if (Reflect.has(e[o], "type") && ["code", "field", "router", "query", "string"].includes(e[o].type)) { + const { type: i, value: l = "", default: c = s } = e[o]; + switch (i) { + case "code": + r[o] = await ie.exec(l, n, {}) || c; + break; + case "field": + r[o] = m.get(n, l, c); + break; + case "router": + r[o] = t[l] || c; + break; + case "query": + r[o] = m.get(t.$query, o) || c; + break; + case "string": + r[o] = l || c; + } + } else + r[o] = await bt(e[o], t, n, s); + return r; +}, vt = (e = {}, t = {}, n = {}, s = "") => Object.keys(e || {}).reduce((r, o) => { + if (m.isPlainObject(e[o])) + if (Reflect.has(e[o], "type") && ["field", "router", "query", "string"].includes(e[o].type)) { + const { type: i, value: l = "", default: c = s } = e[o]; + switch (i) { + case "field": + r[o] = m.get(n, l, c); + break; + case "router": + r[o] = t[l] || c; + break; + case "query": + r[o] = m.get(t.$query, o) || c; + break; + case "string": + r[o] = l || c; + } + } else + r[o] = vt(e[o], t, n, s); + return r; +}, {}), cn = (e, t, { isReplaceRouteHistory: n = !1 } = {}) => Ae.redirect(t, e, { replace: n }), et = (e, t) => m.isFunction(t) ? t.call(null, e) : null, tt = (e, t, n, s) => Z.modal( + t, + { ...e, $setting: n, code: t }, + s +), un = (e, t, n, s) => Z.modal( + pn, + { ...e, $setting: n, code: t }, + s +), dn = ({ widget: e, widgetType: t, widgetData: n, widgetProps: s, widgetSetting: r, widgetContainerProps: o }, { onAfterClick: i, onBeforeClick: l }) => { + const c = st(lt), a = q(() => { + switch (t) { + case "redirect": + return m.partialRight(cn, e, r); + case "func": + return m.partialRight(et, (r == null ? void 0 : r.code) || e); + case "fsdpf-component": + return m.partialRight(tt, e, r, o); + case "grid-layout-form": + return m.partialRight(un, e, r, o); + default: + if (Rt(e)) + return m.partialRight(tt, e, r, o); + if (m.isFunction(e)) + return m.partialRight(et, (r == null ? void 0 : r.code) || e); + } + return (...g) => console.error("useButton unknown widgetType", t, ...g); + }, [e, t]); + return [m.debounce((g) => (l == null || l(g), Promise.resolve(ln(s, c, g)).then((p) => a({ ...n, ...p })).then((p) => i == null ? void 0 : i(p))), 300, { leading: !0, trailing: !1 }), { disabled: !1, loading: !1 }]; +}, We = (e) => function({ + className: n, + children: s, + name: r, + icon: o, + type: i, + data: l, + noAuthType: c, + onAfterClick: a, + onBeforeClick: d, + loading: g, + disabled: p, + tooltip: u, + popConfirm: b, + widget: v, + widgetType: j, + widgetData: ae, + widgetProps: Ze, + widgetSetting: Ee, + widgetContainerProps: Te, + ...ye +}) { + const T = { + type: "primary", + className: $("ff-button", n) + }; + i === "danger" ? T.danger = !0 : i === "default" && (T.type = i), e === "link" || e === "dashed" ? (T.type = e, i === "default" && (T.className = $(T.className, "ff-default"))) : (e === "circle" || e === "round") && (T.shape = e), o && (T.icon = /* @__PURE__ */ h(at, { type: o })); + const [_, ee] = V(!1), [E, { disabled: J, loading: be }] = dn({ widget: v, widgetType: j, widgetData: ae, widgetProps: Ze, widgetSetting: Ee, widgetContainerProps: Te }, { onAfterClick: a, onBeforeClick: d }); + return /* @__PURE__ */ h( + Ot, + { + okText: "确定", + cancelText: "取消", + ...b || {}, + disabled: J || p, + open: _, + onOpenChange: (O) => { + if (!O) + return ee(O); + b ? ee(O) : E(l); + }, + onConfirm: () => { + E(l); + }, + onClick: (O) => { + O.stopPropagation(); + }, + children: /* @__PURE__ */ h($t, { ...u, title: _ ? null : u == null ? void 0 : u.title, trigger: ["hover", "click"], children: /* @__PURE__ */ h( + Fe, + { + loading: be || g, + disabled: J || p, + ...T, + ...ye, + children: s || r + } + ) }) + } + ); +}, C = We("default"), fn = We("link"), mn = We("circle"), hn = We("round"), gn = We("dashed"); +C.defaultProps = { + type: "default" +}; +C.propTypes = { + type: W.oneOf(["primary", "default", "danger"]), + name: W.string, + // 按钮名称 + icon: W.string, + // 图标 + data: W.any, + // onClick 数据源, 会受到 widgetProps 数据结构影响 + widget: W.any, + // 组件 + widgetType: W.oneOf(["destroy", "redirect", "func", "fsdpf-component", "grid-layout-form", "grid-layout"]), + // 组件类型 + widgetData: W.object, + // onClick缺省数据 + widgetProps: W.object, + // data 数据结构 + widgetSetting: W.object, + // $setting + widgetContainerProps: W.object + // 容器配置 +}; +C.Link = fn; +C.Link.defaultProps = C.defaultProps; +C.Link.propTypes = C.propTypes; +C.Circle = mn; +C.Circle.defaultProps = C.defaultProps; +C.Circle.propTypes = C.propTypes; +C.Round = hn; +C.Round.defaultProps = C.defaultProps; +C.Round.propTypes = C.propTypes; +C.Dashed = gn; +C.Dashed.defaultProps = C.defaultProps; +C.Dashed.propTypes = C.propTypes; +const pn = ({ $setting: e, $close: t, extras: n, code: s, primaryKey: r, ...o }) => { + const [i] = ue.useForm(), l = qt(s, r, e); + R(() => { + l && i.setFieldsValue(l); + }, [l]); + const c = () => { + const a = i.getFieldValue("__RESOURCE__"), { + initDataUri: d = `/api/${s}` + } = e || {}; + i.validateFields(!0).then((g) => a ? m.pick(g, [a]) : g).then((g) => L.post(r ? `${d}/${r}` : `${d}`, g).msg(t)).catch(() => Toast.error("请先完善表单信息", { duration: 2e3 })); + }; + return /* @__PURE__ */ h( + H, + { + actions: /* @__PURE__ */ I(y.Fragment, { children: [ + /* @__PURE__ */ h(C, { name: "保存", type: "primary", widget: c }), + /* @__PURE__ */ h(C, { name: "取消", widget: () => t(!1) }) + ] }), + extras: n, + children: /* @__PURE__ */ h(an, { form: i, code: s, primaryKey: r, ...o }) + } + ); +}, yn = (e, t, n = "children") => { + if (m.isEmpty(e)) + return {}; + const s = m.find(e, ["value", t]); + if (!m.isEmpty(s)) + return s; + const r = e.length; + for (let o = 0; o < r; o++) { + const { [n]: i } = e[o], l = yn(i, t, n); + if (!m.isEmpty(l)) + return l; + } + return {}; +}, bn = ({ listCode: e, className: t, record: n, props: s, children: r, cb: o, ...i }) => { + var d, g; + const [l, c] = V(!1), a = () => { + }; + return s != null && s.editableByJs && (s != null && s.uuid) && ((d = a(s.uuid)) != null && d.auth) ? /* @__PURE__ */ h( + ot, + { + overlayClassName: "ff-data-list-editable-popover", + title: s != null && s.title ? `${s == null ? void 0 : s.title} - 编辑` : "编辑", + trigger: ["contextMenu"], + placement: (s == null ? void 0 : s.align) === "right" ? "topRight" : "topLeft", + arrowPointAtCenter: (s == null ? void 0 : s.align) === "center", + open: l, + onOpenChange: c, + overlayStyle: { width: ((g = s == null ? void 0 : s.editableByJsSetting) == null ? void 0 : g.width) || 260 }, + content: /* @__PURE__ */ h(vn, { ...s, listCode: e, record: n, onCancel: () => { + c(!1); + }, cb: o }), + children: /* @__PURE__ */ h("td", { className: $(t, "ff-data-list-editable-cell"), children: r, ...i }) + } + ) : /* @__PURE__ */ h("td", { className: t, children: r, ...i }); +}, vn = ({ dataIndex: e, record: t, onCancel: n, uuid: s, title: r, type: o, listCode: i, editableByJs: l, editableByJsSetting: c, cb: a }) => { + const [d] = ue.useForm(), g = (c == null ? void 0 : c.primaryKey) || "", p = () => d.validateFields().then(({ value: b }) => { + const v = m.get(t, g.substring(g.indexOf(".") + 1)); + if (v) + L.put(`/api/${i}-storeBy-${s}/${v}`, { value: b }).msg(a).then(n); + else + throw "获取更新主键失败!"; + }).catch(console.warn), u = () => { + d.setFieldsValue({ + value: m.get(t, e), + __PROPS__: JSON.parse(JSON.stringify(t)) + }); + }; + return R(() => { + u(); + }, [JSON.stringify(t)]), /* @__PURE__ */ I(ue, { form: d, layout: "vertical", children: [ + /* @__PURE__ */ h( + gt, + { + label: null, + code: ["value"], + widget: l, + placeholder: r, + ...m.omit(c, ["primaryKey", "width", "height"]) + } + ), + /* @__PURE__ */ h(ue.Item, { noStyle: !0, name: ["__PROPS__"], children: /* @__PURE__ */ h("div", {}) }), + /* @__PURE__ */ I("div", { className: "fsdpf-editable-popover-footer", children: [ + /* @__PURE__ */ h(Fe, { size: "small", onClick: u, children: "重置" }), + /* @__PURE__ */ I(Fe.Group, { children: [ + /* @__PURE__ */ h(Fe, { size: "small", onClick: n, children: "取消" }), + /* @__PURE__ */ h(Fe, { size: "small", type: "primary", onClick: p, children: "确定" }) + ] }) + ] }) + ] }); +}, Fn = ({ widget: e, widgetPrefix: t, basicForm: n, ...s }) => { + const r = e != null && e.startsWith("@") ? e : `${t}/${e}`, [o, i] = V(); + return R(() => { + r && x.getWidgetComponent(r).then(({ defaultProps: l, default: c }) => ({ + default: Rn(c, l, n) + })).catch((l) => ({ default: () => `${l}` })).then((l) => i(y.createElement(l.default, s))); + }, [r]), o; +}, Rn = (e, t, n = null) => (s) => { + const { + code: r, + label: o, + extras: i, + isVirtual: l, + initialValue: c, + initialValueLanguage: a, + convertJs: d, + convertJsSetting: g, + value: p, + ...u + } = m.merge({}, t, s), [b, v] = ft(l ? null : r, { + initialValue: c, + initialValueLanguage: a, + convertJs: d, + convertJsSetting: g, + type: (u == null ? void 0 : u.type) || "string" + }, n); + return /* @__PURE__ */ h(e, { ...u, value: b, rawValue: v, $setting: i || {} }); +}; +Fn.defaultProps = { + widgetPrefix: "@pkg/grid-layouts" +}; +const Vn = ({ className: e, children: t, itemOperations: n, resource: s, $setting: r }) => /* @__PURE__ */ h("div", { className: $("ff-data-list-grid-layout-items", e), children: y.Children.map(t, (o) => /* @__PURE__ */ h( + Cn, + { + operations: n, + data: s ? { [s]: o.props.data } : o.props.data, + children: o + } +)) }), Cn = ({ operations: e, children: t, data: n }) => m.isEmpty(e) ? t : /* @__PURE__ */ h( + ot, + { + destroyTooltipOnHide: !0, + align: { offset: [0, -8] }, + zIndex: 100, + mouseLeaveDelay: 0.2, + placement: "topRight", + content: /* @__PURE__ */ h("div", { className: "ff-data-list-item-operations flex-grow-1", children: e == null ? void 0 : e.map(({ isRefresh: s, ...r }) => /* @__PURE__ */ h( + C, + { + ...r, + data: n, + onAfterClick: (o) => console.log("列表按钮回调", o, n) + }, + (r == null ? void 0 : r.uuid) || useId() + )) }), + children: t + } +), Ln = ({ theme: e, themeProps: t, itemClassName: n, className: s, dataSource: r, fields: o, itemOperations: i, resource: l, ...c }) => { + const a = q(() => /* @__PURE__ */ h(mt, { ...c, fields: o }), [o, c]), d = q(() => r == null ? void 0 : r.map((u, b) => y.cloneElement(a, { key: b, data: u })), [r, a]), g = q(() => e ? y.lazy(() => x.getWidgetComponent(e).catch((u) => ({ default: () => `${u}` }))) : null, [e]), p = { + $setting: t, + resource: l, + itemOperations: i, + className: s, + itemClassName: n, + children: d + }; + return g ? /* @__PURE__ */ h(y.Suspense, { fallback: /* @__PURE__ */ h("div", { style: { width: "100%", height: "100%" } }), children: /* @__PURE__ */ h(g, { ...p }) }) : /* @__PURE__ */ h(Vn, { ...p }); +}, kn = ({ listCode: e, base62params: t, className: n, theme: s, themeProps: r, itemClassName: o }) => { + const [i, l] = V(), [{ + resource: c, + cols: a, + rowHeight: d, + fields: g, + itemOperations: p = [], + marginX: u, + marginY: b + }, v] = V({ marginX: 0, marginY: 0 }); + return R(() => { + L.get(`/api/_/${e}/list-grid-layout`).then(v).catch(() => v({})); + }, [e]), R(() => { + L.list(e, t).then(({ dataSource: j }) => { + l(j); + }); + }, [t]), /* @__PURE__ */ h( + Ln, + { + className: n, + itemClassName: o, + dataSource: i, + cols: a, + rowHeight: d, + fields: g, + resource: c, + itemOperations: p, + theme: s, + themeProps: r, + itemMargin: [u, b] + } + ); +}, Nn = (e, t, n, s, r) => { + const o = y.lazy(() => x.getWidgetComponent(e).catch((i) => ({ default: () => `${i}` }))); + return /* @__PURE__ */ h(y.Suspense, { children: /* @__PURE__ */ h( + o, + { + value: t, + record: n, + $setting: s, + base62params: r + } + ) }, e); +}, qn = (e, t = {}) => (qe(e), qe(t), e == null ? void 0 : e.map(({ widgetByJs: s, widgetByJsSetting: r, ...o }, i) => s && !s.endsWith("/BasicShowFieldData") ? { + ...o, + render: (l, c) => { + const a = Nn(s, l, c, r, t); + return m.isFunction(o == null ? void 0 : o.render) ? o.render(a, l, c) : a; + } +} : o)), _n = (e) => { + const [t, n] = V({}); + return R(() => { + let s = !1; + return e && L.get(`/api/_/${e}`).then((r) => m.pick(r, [ + "uuid", + "name", + "code", + "resource", + "marginX", + "marginY", + "cols", + "rowHeight", + "primaryKey", + "columns", + "itemOperations", + "batchOperations", + "isConditionFormLayout", + "layout", + "tabs", + "pageSize", + "layoutConfig" + ])).then((r) => !s && n(r)), () => s = !0; + }, [e]), t; +}, es = (e, t = {}) => { + const [n, s] = V({ dataSource: [] }); + return Je(() => { + let r = !1; + return e && L.get(`/api/${e}/${L.encode({ page: 1, ...t })}`).then((o) => !r && s(o)), () => r = !0; + }, [e, t]), n; +}; +Mt.EditableCell = bn; +const Wn = ({ component: e }) => { + const [t, n] = V({}), { base62params: s } = jt(); + return R(() => { + e ? L.get(`/api/_/${e}`).then(n) : n({}); + }, [e]), /* @__PURE__ */ h( + kn, + { + listCode: e, + base62params: L.decode(s), + theme: t == null ? void 0 : t.theme, + themeProps: t == null ? void 0 : t.themeConfig + } + ); +}; +var Q, S, pe, ke, Ne; +const X = class X { + constructor() { + F(this, S, /* @__PURE__ */ new Map()); + F(this, pe, {}); + F(this, ke, null); + N(this, "init", (t, n) => { + G(this, S, t), G(this, pe, n); + }); + N(this, "get", (t) => (f(this, S).has(t) || (t = Array.from(f(this, S).keys()).find((n) => f(this, S).get(n).uri === t)), f(this, S).get(t) || {})); + N(this, "redirect", (t, n, s = {}) => { + const { uri: r, type: o, widgetProps: i } = this.get(t); + let l = zt(r, o != "list" ? n : m.mapValues(n, (a) => L.encode(a))); + const c = new URLSearchParams(); + for (const a in i || {}) + (i == null ? void 0 : i.type) == "query" && c.append(a, n[a]); + return c.size > 0 && (l = `${l}?${c.toString()}`), f(this, ke).navigate(l, s); + }); + /** + * + * @param {*} category // user, system, navigator + * @returns + */ + N(this, "getMenus", (t) => { + var n; + return ((n = f(this, pe)) == null ? void 0 : n[t]) || []; + }); + N(this, "getCurrentMenu", () => { + var s, r; + const t = getCurrentPages(), n = Object.values(f(this, pe)).flat(); + for (let o = t.length - 1; o >= 0; o--) + if ((s = t[o].query) != null && s.c) + return f(this, Ne).call(this, (r = t[o].query) == null ? void 0 : r.c, n); + return null; + }); + F(this, Ne, (t, n) => { + var s; + for (const r of n) { + if (r.uuid == t || r.widget == t) + return r; + if ((s = r.children) != null && s.length) { + const o = f(this, Ne).call(this, t, r.children); + if (o) + return o; + } + } + return null; + }); + N(this, "createBrowserRouter", (t = {}) => { + if (f(this, S).size == 0) + return null; + const n = re.get("Common.WEBSITE_DEFAULT_THEME", "@pkg/frameworks/BasicLayout"); + re.get(Jt() ? "Common.WEBSITE_LOGIN_REDIRECT" : "Common.WEBSITE_DEFAULT", "/index"); + const s = { [n]: 0 }, r = Array.from(f(this, S).values()).reduce((o, { uuid: i, uri: l, name: c, type: a, component: d, isLogin: g, isLayout: p, extra: u }) => { + let b = {}, v = 0; + switch (a) { + case "list": + b.element = y.createElement(Wn, { component: d }); + break; + case "fsdpf-component": + b.lazy = () => x.getWidgetComponent(d).then((j) => ({ Component: j.default })); + break; + } + if (u != null && u.layout) + if (s[u == null ? void 0 : u.layout]) + v = s[u == null ? void 0 : u.layout]; + else + return s[u == null ? void 0 : u.layout] = o.length, [...o, { + path: "/", + lazy: () => x.getWidgetComponent(u == null ? void 0 : u.layout).then((j) => ({ Component: j.default })), + children: [{ path: l, ...b }] + }]; + return p && v > -1 ? (o[v].children.push({ path: l, ...b }), o) : [...o, { path: l, ...b }]; + }, [ + { + path: "/", + lazy: () => x.getWidgetComponent(n).then((o) => ({ Component: o.default })), + children: [] + } + ]); + return G(this, ke, Ut(r, t)); + }); + if (f(X, Q)) + return f(X, Q); + } +}; +Q = new WeakMap(), S = new WeakMap(), pe = new WeakMap(), ke = new WeakMap(), Ne = new WeakMap(), F(X, Q, null), N(X, "getInstance", () => (f(X, Q) || G(X, Q, new X()), f(X, Q))); +let Se = X; +const Ae = Se.getInstance(), nt = { + null2json: (e) => null, + null2array: (e) => null, + null2number: (e) => null, + null2bool: (e) => null, + null2string: (e) => null, + null2integer: (e) => null, + null2float: (e) => null, + // null2json: (data) => ({}), + // null2array: (data) => ([]), + // null2number: (data) => 0, + // null2bool: (data) => false, + // null2string: (data) => '', + string2json: (e) => e ? JSON.parse(e) : "{}", + string2array: (e) => e.substr(0, 1) === "[" && e.substr(-1) === "]" ? JSON.parse(e) : e.split(","), + string2number: (e) => e == "" ? null : +e, + string2integer: (e) => e == "" ? null : +e, + string2float: (e) => e == "" ? null : +e, + string2bool: (e) => { + switch (`${e}`.toLowerCase()) { + case "0": + case "false": + case "[]": + case "{}": + return !1; + } + return !!e; + }, + string2string: (e) => e, + json2json: (e) => e, + json2array: (e) => e ? Object.values(e) : [], + json2number: (e) => Object.keys(e).length, + json2integer: (e) => Object.keys(e).length, + json2float: (e) => Object.keys(e).length, + json2bool: (e) => Object.keys(e).length > 0, + json2string: (e) => e ? JSON.stringify(e) : "", + array2json: (e) => ({ ...e }), + array2array: (e) => e, + array2number: (e) => e.length, + array2integer: (e) => e.length, + array2float: (e) => e.length, + array2bool: (e) => e.length > 0, + array2string: (e) => JSON.stringify(e), + number2json: (e) => ({}), + number2array: (e) => [e], + number2number: (e) => e, + number2integer: (e) => e, + number2float: (e) => e, + number2bool: (e) => !!e, + number2string: (e) => e.toString(), + boolean2json: (e) => ({}), + boolean2array: (e) => [], + boolean2number: (e) => +e, + boolean2integer: (e) => +e, + boolean2float: (e) => +e, + boolean2bool: (e) => e, + boolean2string: (e) => e ? "true" : "false" +}; +m.mixin({ + toPairsDeep: (e, t) => m.flatMap( + m.toPairs(e), + ([n, s]) => m.isObjectLike(s) ? m.toPairsDeep(s, n) : [[`${m.isUndefined(t) ? "" : t + "."}${n}`, s]] + ), + deepSome: (e, t = () => !1) => m.some(e, (n) => { + if (m.some(n, t)) + return !0; + if (!m.isEmpty(n) && (m.isPlainObject(n) || m.isArray(n))) + return m.deepSome(n, t); + }), + toPrimitive: (e, t) => { + let n = "string"; + Array.isArray(e) ? n = "array" : n = typeof e, m.isObject(e) && (n = "json"); + const s = `${n}2${t}`; + return Reflect.has(nt, s) ? nt[s](e) : e; + }, + replaceKeys: (e, t) => !e || typeof e != "object" ? e : Array.isArray(e) ? e.map((n) => m.replaceKeys(n, t)) : Object.keys(e).reduce((n, s) => (t[s] ? n[t[s]] = m.replaceKeys(e[s], t) : n[s] = m.replaceKeys(e[s], t), n), {}) +}); +let Ft = ""; +const L = { + init: (e, t, n) => { + Re.defaults.baseURL = Ft = n, Re.defaults.timeout = 15e3, Object.assign(L, new He(e, t, Re)); + } +}, Rt = (e) => { + var t; + return e && (e == null ? void 0 : e.name) && ((e == null ? void 0 : e.prototype) instanceof y.Component || (e == null ? void 0 : e.name.substr(0, 1)) === ((t = e.name.substr(0, 1)) == null ? void 0 : t.toUpperCase())); +}, Zn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + AppGlobalParamsContext: lt, + get AppUrl() { + return Ft; + }, + cache: ct, + configure: re, + core: x, + default: At, + func: ie, + http: L, + isReactComponent: Rt, + route: Ae +}, Symbol.toStringTag, { value: "Module" })), ts = () => L.get("/api/my-router").then((e) => [ + ...e, + { uuid: "data-list-setting", isLayout: !0, uri: "/data-list-setting/:category/:categoryUuid", type: "fsdpf-component", component: "@pkg/components/ff-design/DataListSetting", extra: { layout: "@pkg/frameworks/DesignTheme" } }, + { uuid: "grid-layout-setting", isLayout: !0, uri: "/grid-layout-setting/:category/:categoryUuid", type: "fsdpf-component", component: "@pkg/components/ff-design/GridLayoutSetting", extra: { layout: "@pkg/frameworks/DesignTheme" } }, + { uuid: "grid-layout-form-setting", isLayout: !0, uri: "/grid-layout-form-setting/:category/:categoryUuid", type: "fsdpf-component", component: "@pkg/components/ff-design/GridLayoutFormSetting", extra: { layout: "@pkg/frameworks/DesignTheme" } }, + { uuid: "resource-api-setting", isLayout: !0, uri: "/resource-api-setting/:category/:categoryUuid", type: "fsdpf-component", component: "@pkg/components/ff-design/ResourceApiSetting", extra: { layout: "@pkg/frameworks/DesignTheme" } }, + { uuid: "charts-setting", isLayout: !0, uri: "/resource-api-setting/:category/:categoryUuid", type: "fsdpf-component", component: "@pkg/components/ff-design/ChartsSetting", extra: { layout: "@pkg/frameworks/DesignTheme" } }, + { uuid: "fsm-setting", isLayout: !0, uri: "/fsm-setting/:category/:categoryUuid", type: "fsdpf-component", component: "@pkg/components/ff-design/FsmSetting", extra: { layout: "@pkg/frameworks/DesignTheme" } }, + { uuid: "component-setting", isLayout: !0, uri: "/component-setting/:category/:categoryUuid", type: "fsdpf-component", component: "@pkg/components/ff-design/ComponentSetting", extra: { layout: "@pkg/frameworks/DesignTheme" } }, + { uuid: "login", uri: "/login", name: "登录", type: "fsdpf-component", isLogin: !1, component: "@pkg/components/ff/Login" }, + { uuid: "not-found", uri: "*", name: "Not Found", type: "fsdpf-component", isLogin: !1, component: "@pkg/components/ff/NotFound" } +].map(({ uuid: t, ...n }) => [t, { uuid: t, ...n }])).then((e) => new Map(e)), ns = () => L.get("/api/my-menu"), ss = () => L.get("api/init-configure"), rs = () => L.get("/api/init-widget-operation-auth"), os = (e) => L.get(`/api/user-wx-phone-number/${e}`); +export { + _n as A, + C as B, + es as C, + Ln as D, + Ft as E, + Z as F, + an as G, + L as H, + at as I, + Rt as J, + At as K, + lt as L, + ct as M, + re as N, + ie as O, + x as P, + Ae as Q, + ts as R, + oe as S, + Mt as T, + ns as U, + ss as V, + rs as W, + os as X, + Jn as a, + Kt as b, + Jt as c, + An as d, + qe as e, + Mn as f, + Ye as g, + Je as h, + Bn as i, + H as j, + Yn as k, + Kn as l, + yt as m, + dn as n, + Ke as o, + gt as p, + pn as q, + _t as r, + yn as s, + Qn as t, + ut as u, + mt as v, + Fn as w, + kn as x, + Nn as y, + qn as z +};