@kp-ui/lowcode 2.16.0-alpha.9 → 2.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/install.js +19 -21
- package/install.js.map +1 -1
- package/package.json +1 -1
- package/src/components/FormRender/FormContainer.vue.js +25 -27
- package/src/components/FormRender/FormContainer.vue.js.map +1 -1
- package/src/components/FormRender/useFormContext.js +56 -56
- package/src/components/FormRender/useFormContext.js.map +1 -1
- package/src/components/form-designer/form-widget/field-widget/useField.js +111 -115
- package/src/components/form-designer/form-widget/field-widget/useField.js.map +1 -1
- package/src/components/form-designer/setting-panel/form-setting.vue.js +1 -1
- package/src/components/form-designer/setting-panel/form-setting.vue2.js.map +1 -1
- package/src/components/form-designer/setting-panel/property-editor/container-vf-dialog/height-editor.vue2.js +16 -18
- package/src/components/form-designer/setting-panel/property-editor/container-vf-dialog/height-editor.vue2.js.map +1 -1
- package/src/components/form-render/container-items/data-table-widget.vue.js +3 -3
- package/src/components/form-render/container-items/data-table-widget.vue2.js +5 -7
- package/src/components/form-render/container-items/data-table-widget.vue2.js.map +1 -1
- package/src/components/form-render/dynamic-dialog.vue.js +63 -62
- package/src/components/form-render/dynamic-dialog.vue.js.map +1 -1
- package/src/components/public/ConfigView/CustomPageRender.vue.js +35 -27
- package/src/components/public/ConfigView/CustomPageRender.vue.js.map +1 -1
- package/src/components/public/CustomerModal/CustomerModal.vue2.js +63 -56
- package/src/components/public/CustomerModal/CustomerModal.vue2.js.map +1 -1
- package/src/utils/format.js +18 -11
- package/src/utils/format.js.map +1 -1
- package/src/utils/util.js +12 -22
- package/src/utils/util.js.map +1 -1
- package/stats.html +1 -1
- package/styles/style.css +1 -1
- package/src/components/form-render/SubmitButtonRender.vue.js +0 -92
- package/src/components/form-render/SubmitButtonRender.vue.js.map +0 -1
- package/src/components/form-render/SubmitButtonRender.vue2.js +0 -5
- package/src/components/form-render/SubmitButtonRender.vue2.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomPageRender.vue.js","sources":["../../../../../src/components/public/ConfigView/CustomPageRender.vue"],"sourcesContent":["<template>\n <div class=\"t-bg-[#fff] t-h-full\">\n <TpfAddInfoLayout>\n <VFormRender ref=\"vfdRef\" :vfCtx=\"{ _id: id, ...getLocat(), goBack }\" />\n <template #footerRight>\n <div id=\"fromBtn\"></div>\n <ActionButtonListRender\n :buttonList=\"formConfig?.buttonList || []\"\n :ctx=\"vfdRef?.context\"\n @on-click=\"handleButtonClick\"\n />\n </template>\n </TpfAddInfoLayout>\n </div>\n</template>\n\n<script lang=\"tsx\" setup>\n import { getLocat } from '@kp-ui/tool';\n import { onMounted } from 'vue';\n import { TpfAddInfoLayout } from 'tmgc2-share';\n import { useLowcode } from '@/hooks/useLowcode';\n import ActionButtonListRender from '@/components/public/ActionButtonListRender.vue';\n import VFormRender from '@/components/FormRender/index.vue';\n import { ActionButton } from '@/types/button';\n\n const { formCode = '', id = '', type = 'edit' } = getLocat();\n\n const { vfdRef, formConfig, getComponentJson, goBack } = useLowcode({ formCode, type });\n\n const handleButtonClick = ({ item }: { item: ActionButton }) => {\n if (item.name === 'cancelButton') {\n goBack();\n }\n };\n\n onMounted(async () => {\n await getComponentJson([]);\n });\n</script>\n\n<style lang=\"less\"></style>\n"],"names":["formCode","id","type","getLocat","vfdRef","formConfig","getComponentJson","goBack","useLowcode","handleButtonClick","item","name","onMounted","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","TpfAddInfoLayout","footerRight","_createElementVNode","ActionButtonListRender","buttonList","ctx","context","onOnClick","VFormRender","ref","vfCtx","_id"],"mappings":"
|
|
1
|
+
{"version":3,"file":"CustomPageRender.vue.js","sources":["../../../../../src/components/public/ConfigView/CustomPageRender.vue"],"sourcesContent":["<template>\n <div class=\"t-bg-[#fff] t-h-full\">\n <TpfAddInfoLayout :title=\"title\">\n <VFormRender ref=\"vfdRef\" :vfCtx=\"{ _id: id, ...getLocat(), goBack }\" />\n <template #footerRight>\n <div id=\"fromBtn\"></div>\n <ActionButtonListRender\n :buttonList=\"formConfig?.buttonList || []\"\n :ctx=\"vfdRef?.context\"\n @on-click=\"handleButtonClick\"\n />\n </template>\n </TpfAddInfoLayout>\n </div>\n</template>\n\n<script lang=\"tsx\" setup>\n import { getLocat } from '@kp-ui/tool';\n import { computed, onMounted } from 'vue';\n import { TpfAddInfoLayout } from 'tmgc2-share';\n import { useLowcode } from '@/hooks/useLowcode';\n import ActionButtonListRender from '@/components/public/ActionButtonListRender.vue';\n import VFormRender from '@/components/FormRender/index.vue';\n import { ActionButton } from '@/types/button';\n\n const props = defineProps({\n title: {\n type: String,\n default: ''\n }\n });\n const { formCode = '', id = '', type = 'edit' } = getLocat();\n\n const { vfdRef, formConfig, getComponentJson, goBack } = useLowcode({ formCode, type });\n\n const handleButtonClick = ({ item }: { item: ActionButton }) => {\n if (item.name === 'cancelButton') {\n goBack();\n }\n };\n\n onMounted(async () => {\n await getComponentJson([]);\n });\n</script>\n\n<style lang=\"less\"></style>\n"],"names":["formCode","id","type","getLocat","vfdRef","formConfig","getComponentJson","goBack","useLowcode","handleButtonClick","item","name","onMounted","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","TpfAddInfoLayout","title","__props","footerRight","_createElementVNode","ActionButtonListRender","buttonList","ctx","context","onOnClick","VFormRender","ref","vfCtx","_id"],"mappings":";;;;;;;;;;;;;;;;;AA+BI,UAAM;AAAA,MAAEA,UAAAA,IAAW;AAAA,MAAIC,IAAAA,IAAK;AAAA,MAAIC,MAAAA,IAAO;AAAA,QAAWC,EAAQ,GAEpD;AAAA,MAAEC,QAAAA;AAAAA,MAAQC,YAAAA;AAAAA,MAAYC,kBAAAA;AAAAA,MAAkBC,QAAAA;AAAAA,QAAWC,EAAW;AAAA,MAAER,UAAAA;AAAAA,MAAUE,MAAAA;AAAAA,IAAK,CAAC,GAEhFO,IAAoBA,CAAC;AAAA,MAAEC,MAAAA;AAAAA,IAA6B,MAAM;AAC5D,MAAIA,EAAKC,SAAS,kBACdJ,EAAM;AAAA,IAEd;AAEAK,WAAAA,EAAU,YAAY;AAClB,YAAMN,EAAiB,CAAA,CAAE;AAAA,IAC7B,CAAC,cA1CDO,EAAA,GAAAC,EAYM,OAZNC,GAYM,CAXFC,EAUmBC,EAAAC,CAAA,GAAA;AAAA,MAVAC,OAAOC,EAAAD;AAAAA,IAAK,GAAA;AAAA,MAEhBE,eACP,MAAA;;AAAwB,gCAAxBC,EAAwB,OAAA;AAAA,UAAnBrB,IAAG;AAAA,WAAS,MAAA,EAAA,IACjBe,EAIEO,GAAA;AAAA,UAHGC,cAAYP,IAAAA,EAAAZ,CAAA,MAAAY,gBAAAA,EAAYO,eAAU,CAAA;AAAA,UAClCC,MAAKR,IAAAA,EAAAb,CAAA,MAAAa,gBAAAA,EAAQS;AAAAA,UACbC,WAAUlB;AAAAA;;iBANnB,MAAwE,CAAxEO,EAAwEY,GAAA;AAAA,iBAAvD;AAAA,QAAJC,KAAIzB;AAAAA,QAAU0B,OAAK;AAAA,UAAAC,KAASd,EAAAhB,CAAA;AAAA,UAAE,GAAKgB,EAAAd,CAAA,EAAQ;AAAA,kBAAIc,EAAAV,CAAA;AAAA,QAAM;AAAA;;;;;"}
|
|
@@ -1,81 +1,88 @@
|
|
|
1
|
-
import { defineComponent as T, getCurrentInstance as
|
|
2
|
-
import { useLowcode as
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
const
|
|
1
|
+
import { defineComponent as T, getCurrentInstance as D, useAttrs as M, ref as a, computed as v, onMounted as $, createBlock as A, openBlock as I, unref as n, withCtx as s, createVNode as u, mergeProps as P, nextTick as V } from "vue";
|
|
2
|
+
import { useLowcode as F } from "../../../hooks/useLowcode.js";
|
|
3
|
+
import J from "../../FormRender/index.vue.js";
|
|
4
|
+
import { TpfConfigProvider as O, TpfModal as S } from "tmgc2-share";
|
|
5
|
+
import { Skeleton as U } from "ant-design-vue";
|
|
6
|
+
import { useI18n as j } from "../../../utils/i18n.js";
|
|
7
|
+
import q from "../ActionButtonListRender.vue.js";
|
|
8
|
+
const X = /* @__PURE__ */ T({
|
|
9
9
|
__name: "CustomerModal",
|
|
10
10
|
props: {
|
|
11
11
|
title: {},
|
|
12
12
|
type: {},
|
|
13
13
|
formCode: {}
|
|
14
14
|
},
|
|
15
|
-
setup(
|
|
16
|
-
expose:
|
|
15
|
+
setup(C, {
|
|
16
|
+
expose: x
|
|
17
17
|
}) {
|
|
18
18
|
const {
|
|
19
|
-
i18nt:
|
|
20
|
-
} =
|
|
19
|
+
i18nt: y
|
|
20
|
+
} = j(), c = D(), r = M() || {}, i = a(!1), e = C, g = v(() => {
|
|
21
21
|
var t, o;
|
|
22
22
|
return {
|
|
23
|
-
$router:
|
|
24
|
-
_id: ((o = (t =
|
|
23
|
+
$router: c.proxy.$router,
|
|
24
|
+
_id: ((o = (t = r == null ? void 0 : r.row) == null ? void 0 : t.record) == null ? void 0 : o._id) || null,
|
|
25
25
|
type: e.type,
|
|
26
|
-
instance:
|
|
27
|
-
...
|
|
26
|
+
instance: c,
|
|
27
|
+
...r
|
|
28
28
|
};
|
|
29
|
-
}),
|
|
30
|
-
vfdRef:
|
|
31
|
-
formConfig:
|
|
32
|
-
getComponentJson:
|
|
33
|
-
isLoading:
|
|
34
|
-
} =
|
|
29
|
+
}), b = a(!1), {
|
|
30
|
+
vfdRef: d,
|
|
31
|
+
formConfig: _,
|
|
32
|
+
getComponentJson: k,
|
|
33
|
+
isLoading: w
|
|
34
|
+
} = F({
|
|
35
35
|
formCode: e.formCode,
|
|
36
36
|
type: e.type
|
|
37
|
-
}),
|
|
38
|
-
|
|
39
|
-
},
|
|
40
|
-
|
|
41
|
-
},
|
|
42
|
-
|
|
37
|
+
}), p = a(null), L = v(() => e.title ? e.title : e.type === "add" ? "新增" : e.type === "edit" ? "编辑" : e.type === "view" ? "查看" : "新增"), B = async () => {
|
|
38
|
+
i.value = !0, await V(), await k([]), console.log("attrs", r);
|
|
39
|
+
}, R = (t) => {
|
|
40
|
+
p.value = t;
|
|
41
|
+
}, h = (t) => {
|
|
42
|
+
b.value = t;
|
|
43
43
|
};
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
$(() => {
|
|
45
|
+
B();
|
|
46
46
|
});
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
47
|
+
const f = () => {
|
|
48
|
+
i.value = !1;
|
|
49
|
+
}, N = async ({
|
|
50
|
+
item: t,
|
|
51
|
+
result: o
|
|
52
|
+
}) => {
|
|
53
|
+
if (t.name === "cancelButton")
|
|
54
|
+
return f();
|
|
55
|
+
o !== !1 && f();
|
|
56
|
+
};
|
|
57
|
+
return x({
|
|
58
|
+
handleCloseDialog: f,
|
|
59
|
+
i18nt: y,
|
|
60
|
+
setDisabled: h,
|
|
61
|
+
setleftText: R
|
|
62
|
+
}), (t, o) => (I(), A(n(O), null, {
|
|
63
|
+
default: s(() => [u(n(S), P({
|
|
64
|
+
visible: i.value,
|
|
65
|
+
"onUpdate:visible": o[0] || (o[0] = (l) => i.value = l)
|
|
56
66
|
}, t.$attrs, {
|
|
57
|
-
title:
|
|
58
|
-
leftNum:
|
|
67
|
+
title: L.value,
|
|
68
|
+
leftNum: p.value
|
|
59
69
|
}), {
|
|
60
70
|
footerRight: s(() => {
|
|
61
|
-
var
|
|
62
|
-
return [
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
options: r(y),
|
|
68
|
-
ctx: (i = r(p)) == null ? void 0 : i.context
|
|
69
|
-
}, null, 8, ["disabled", "dialogVisible", "options", "ctx"])];
|
|
71
|
+
var l, m;
|
|
72
|
+
return [u(q, {
|
|
73
|
+
buttonList: ((l = n(_)) == null ? void 0 : l.buttonList) || [],
|
|
74
|
+
ctx: (m = n(d)) == null ? void 0 : m.context,
|
|
75
|
+
onOnClick: N
|
|
76
|
+
}, null, 8, ["buttonList", "ctx"])];
|
|
70
77
|
}),
|
|
71
|
-
default: s(() => [
|
|
78
|
+
default: s(() => [u(n(U), {
|
|
72
79
|
active: "",
|
|
73
|
-
loading:
|
|
80
|
+
loading: n(w)
|
|
74
81
|
}, {
|
|
75
|
-
default: s(() => [
|
|
76
|
-
vfCtx:
|
|
82
|
+
default: s(() => [u(J, {
|
|
83
|
+
vfCtx: g.value,
|
|
77
84
|
ref_key: "vfdRef",
|
|
78
|
-
ref:
|
|
85
|
+
ref: d
|
|
79
86
|
}, null, 8, ["vfCtx"])]),
|
|
80
87
|
_: 1
|
|
81
88
|
}, 8, ["loading"])]),
|
|
@@ -86,6 +93,6 @@ const W = /* @__PURE__ */ T({
|
|
|
86
93
|
}
|
|
87
94
|
});
|
|
88
95
|
export {
|
|
89
|
-
|
|
96
|
+
X as default
|
|
90
97
|
};
|
|
91
98
|
//# sourceMappingURL=CustomerModal.vue2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomerModal.vue2.js","sources":["../../../../../src/components/public/CustomerModal/CustomerModal.vue"],"sourcesContent":["<template>\n <TpfConfigProvider>\n <TpfModal v-model:visible=\"visible\" v-bind=\"$attrs\" :title=\"title\" :leftNum=\"leftNum\">\n <Skeleton active :loading=\"isLoading\">\n <VFormRender :vfCtx=\"vfCtx\" ref=\"vfdRef\" />\n </Skeleton>\n <template #footerRight>\n <
|
|
1
|
+
{"version":3,"file":"CustomerModal.vue2.js","sources":["../../../../../src/components/public/CustomerModal/CustomerModal.vue"],"sourcesContent":["<template>\n <TpfConfigProvider>\n <TpfModal v-model:visible=\"visible\" v-bind=\"$attrs\" :title=\"title\" :leftNum=\"leftNum\">\n <Skeleton active :loading=\"isLoading\">\n <VFormRender :vfCtx=\"vfCtx\" ref=\"vfdRef\" />\n </Skeleton>\n <template #footerRight>\n <ActionButtonListRender\n :buttonList=\"formConfig?.buttonList || []\"\n :ctx=\"vfdRef?.context\"\n @on-click=\"handleButtonClick\"\n />\n </template>\n </TpfModal>\n </TpfConfigProvider>\n</template>\n\n<script setup lang=\"tsx\">\n import { useLowcode } from '@/hooks/useLowcode';\n import { useAttrs, onMounted, nextTick, computed, getCurrentInstance, ref } from 'vue';\n import VFormRender from '@/components/FormRender/index.vue';\n import { TpfModal, TpfConfigProvider, useExecFunction } from 'tmgc2-share';\n import { Skeleton } from 'ant-design-vue';\n import { useI18n } from '@/utils/i18n';\n import ActionButtonListRender from '@/components/public/ActionButtonListRender.vue';\n\n const { i18nt } = useI18n();\n\n const instance = getCurrentInstance()!;\n\n const attrs = (useAttrs() || {}) as any;\n const visible = ref(false);\n\n type Props = {\n title: string;\n type: string;\n formCode: string;\n };\n\n const props = withDefaults(defineProps<Props>(), {});\n const vfCtx = computed(() => {\n return {\n $router: instance.proxy!.$router,\n _id: attrs?.row?.record?._id || null,\n type: props.type,\n instance,\n ...attrs\n };\n });\n const isDisabled = ref(false);\n const { vfdRef, formConfig, getComponentJson, isLoading } = useLowcode({\n formCode: props.formCode,\n type: props.type\n });\n const leftNum = ref(null);\n\n const title = computed(() => {\n if (props.title) return props.title;\n if (props.type === 'add') return '新增';\n if (props.type === 'edit') return '编辑';\n if (props.type === 'view') return '查看';\n return '新增';\n });\n\n const show = async () => {\n visible.value = true;\n await nextTick();\n await getComponentJson([]);\n console.log('attrs', attrs);\n };\n\n const setleftText = number => {\n leftNum.value = number;\n };\n\n const setDisabled = status => {\n isDisabled.value = status;\n };\n\n onMounted(() => {\n show();\n });\n\n const handleCloseDialog = () => {\n visible.value = false;\n };\n\n const handleButtonClick = async ({ item, result }: any) => {\n if (item.name === 'cancelButton') {\n return handleCloseDialog();\n }\n if (result !== false) {\n handleCloseDialog();\n }\n };\n\n defineExpose({\n handleCloseDialog,\n i18nt,\n setDisabled,\n setleftText\n });\n</script>\n\n<style lang=\"less\" scoped></style>\n"],"names":["i18nt","useI18n","instance","getCurrentInstance","attrs","useAttrs","visible","ref","props","__props","vfCtx","computed","$router","proxy","_id","row","record","type","isDisabled","vfdRef","formConfig","getComponentJson","isLoading","useLowcode","formCode","leftNum","title","show","value","nextTick","console","log","setleftText","number","setDisabled","status","onMounted","handleCloseDialog","handleButtonClick","item","result","name","__expose","_createBlock","_unref","TpfConfigProvider","_createVNode","_mergeProps","$event","$attrs","footerRight","ActionButtonListRender","buttonList","ctx","context","onOnClick","Skeleton","active","loading","VFormRender"],"mappings":";;;;;;;;;;;;;;;;;AA0BI,UAAM;AAAA,MAAEA,OAAAA;AAAAA,QAAUC,EAAO,GAEnBC,IAAWC,EAAkB,GAE7BC,IAASC,EAAQ,KAAM,CAAA,GACvBC,IAAUC,EAAI,EAAK,GAQnBC,IAAQC,GACRC,IAAQC,EAAS,MAAM;;AACzB,aAAO;AAAA,QACHC,SAASV,EAASW,MAAOD;AAAAA,QACzBE,OAAKV,KAAAA,IAAAA,KAAAA,gBAAAA,EAAOW,QAAPX,gBAAAA,EAAYY,WAAZZ,gBAAAA,EAAoBU,QAAO;AAAA,QAChCG,MAAMT,EAAMS;AAAAA,QACZf,UAAAA;AAAAA,QACA,GAAGE;AAAAA;IAEX,CAAC,GACKc,IAAaX,EAAI,EAAK,GACtB;AAAA,MAAEY,QAAAA;AAAAA,MAAQC,YAAAA;AAAAA,MAAYC,kBAAAA;AAAAA,MAAkBC,WAAAA;AAAAA,QAAcC,EAAW;AAAA,MACnEC,UAAUhB,EAAMgB;AAAAA,MAChBP,MAAMT,EAAMS;AAAAA,IAChB,CAAC,GACKQ,IAAUlB,EAAI,IAAI,GAElBmB,IAAQf,EAAS,MACfH,EAAMkB,QAAclB,EAAMkB,QAC1BlB,EAAMS,SAAS,QAAc,OAC7BT,EAAMS,SAAS,SAAe,OAC9BT,EAAMS,SAAS,SAAe,OAC3B,IACV,GAEKU,IAAO,YAAY;AACrBrB,MAAAA,EAAQsB,QAAQ,IAChB,MAAMC,EAAQ,GACd,MAAMR,EAAiB,CAAA,CAAE,GACzBS,QAAQC,IAAI,SAAS3B,CAAK;AAAA,IAC9B,GAEM4B,IAAcC,CAAAA,MAAU;AAC1BR,MAAAA,EAAQG,QAAQK;AAAAA,IACpB,GAEMC,IAAcC,CAAAA,MAAU;AAC1BjB,MAAAA,EAAWU,QAAQO;AAAAA,IACvB;AAEAC,IAAAA,EAAU,MAAM;AACZT,MAAAA,EAAI;AAAA,IACR,CAAC;AAED,UAAMU,IAAoBA,MAAM;AAC5B/B,MAAAA,EAAQsB,QAAQ;AAAA,IACpB,GAEMU,IAAoB,OAAO;AAAA,MAAEC,MAAAA;AAAAA,MAAMC,QAAAA;AAAAA,IAAY,MAAM;AACvD,UAAID,EAAKE,SAAS;AACd,eAAOJ,EAAiB;AAE5B,MAAIG,MAAW,MACXH,EAAiB;AAAA,IAEzB;AAEAK,WAAAA,EAAa;AAAA,MACTL,mBAAAA;AAAAA,MACArC,OAAAA;AAAAA,MACAkC,aAAAA;AAAAA,MACAF,aAAAA;AAAAA,IACJ,CAAC,mBApGDW,EAaoBC,EAAAC,CAAA,GAAA,MAAA;AAAA,iBAZhB,MAWW,CAXXC,EAWWF,MAXXG,EAWW;AAAA,QAXOzC,SAASA,EAAAsB;AAAAA,mDAAAtB,EAAOsB,QAAAoB;AAAAA,SAAUC,EAAAA,QAAM;AAAA,QAAGvB,OAAOA,EAAAE;AAAAA,QAAQH,SAASA,EAAAG;AAAAA;QAI9DsB,eACP;;AAIE,kBAJFJ,EAIEK,GAAA;AAAA,YAHGC,cAAYR,IAAAA,EAAAxB,CAAA,MAAAwB,gBAAAA,EAAYQ,eAAU,CAAA;AAAA,YAClCC,MAAKT,IAAAA,EAAAzB,CAAA,MAAAyB,gBAAAA,EAAQU;AAAAA,YACbC,WAAUjB;AAAAA;;mBAPnB,MAEW,CAFXQ,EAEWF,EAAAY,CAAA,GAAA;AAAA,UAFDC,QAAA;AAAA,UAAQC,SAASd,EAAAtB,CAAA;AAAA;qBACvB,MAA2C,CAA3CwB,EAA2Ca,GAAA;AAAA,YAA7BjD,OAAOA,EAAAkB;AAAAA,qBAAW;AAAA,YAAJrB,KAAIY;AAAAA;;;;;;;;;"}
|
package/src/utils/format.js
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
import { isArray as o } from "lodash-es";
|
|
2
|
-
const
|
|
3
|
-
if (!(!
|
|
4
|
-
return o(
|
|
5
|
-
},
|
|
6
|
-
const
|
|
7
|
-
return
|
|
8
|
-
if (
|
|
9
|
-
const
|
|
10
|
-
|
|
2
|
+
const c = (e = [], n, r = { label: "label", value: "value", children: "children" }, t = "/") => {
|
|
3
|
+
if (!(!n || n.length === 0))
|
|
4
|
+
return o(n[0]) ? n.map((l) => i(e, l, r).join(t)).join(",") : i(e, n, r).join(t);
|
|
5
|
+
}, i = (e = [], n = [], r = { label: "label", value: "value", children: "children" }) => {
|
|
6
|
+
const t = [];
|
|
7
|
+
return e.forEach((u) => {
|
|
8
|
+
if (n.length !== 0 && u[r.value] === n[0] && (t.push(u[r.label]), o(u[r.children]))) {
|
|
9
|
+
const l = i(u[r.children], n.slice(1), r);
|
|
10
|
+
t.push(...l);
|
|
11
11
|
}
|
|
12
|
-
}),
|
|
12
|
+
}), t;
|
|
13
13
|
};
|
|
14
|
+
function h(e, n = "") {
|
|
15
|
+
if (e == null || e === "")
|
|
16
|
+
return n;
|
|
17
|
+
const r = String(e);
|
|
18
|
+
return r.endsWith("px") || r.endsWith("%") || isNaN(Number(r)) ? r : `${r}px`;
|
|
19
|
+
}
|
|
14
20
|
export {
|
|
15
|
-
|
|
21
|
+
h as formatSize,
|
|
22
|
+
c as formateCascaderCode
|
|
16
23
|
};
|
|
17
24
|
//# sourceMappingURL=format.js.map
|
package/src/utils/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sources":["../../../src/utils/format.js"],"sourcesContent":["import { isArray } from 'lodash-es';\n\nfunction validateDate(dateStr) {\n
|
|
1
|
+
{"version":3,"file":"format.js","sources":["../../../src/utils/format.js"],"sourcesContent":["import { isArray } from 'lodash-es';\n\nfunction validateDate(dateStr) {\n const date = new Date(Date.parse(dateStr));\n return date instanceof Date && !isNaN(date.getTime());\n}\n\nexport function formatDate1(date) {\n if (!validateDate(date)) {\n return date;\n }\n date = new Date(Date.parse(date)); //转换成Date\n const y = date.getFullYear();\n let m = date.getMonth() + 1;\n m = m < 10 ? '0' + m : m;\n let d = date.getDate();\n d = d < 10 ? '0' + d : d;\n return y + '-' + m + '-' + d;\n}\n\nexport function formatDate2(date) {\n if (!validateDate(date)) {\n return date;\n }\n date = new Date(Date.parse(date)); //转换成Date\n const y = date.getFullYear();\n let m = date.getMonth() + 1;\n m = m < 10 ? '0' + m : m;\n let d = date.getDate();\n d = d < 10 ? '0' + d : d;\n return y + '/' + m + '/' + d;\n}\n\nexport function formatDate3(date) {\n if (!validateDate(date)) {\n return date;\n }\n date = new Date(Date.parse(date)); //转换成Date\n const y = date.getFullYear();\n let m = date.getMonth() + 1;\n m = m < 10 ? '0' + m : m;\n let d = date.getDate();\n d = d < 10 ? '0' + d : d;\n return y + '年' + m + '月' + d + '日';\n}\n\nexport function formatDate4(date) {\n if (!validateDate(date)) {\n return date;\n }\n date = new Date(Date.parse(date)); //转换成Date\n return date.toLocaleString();\n}\n\nexport function formatDate5(date) {\n if (!validateDate(date)) {\n return date;\n }\n date = new Date(Date.parse(date)); //转换成Date\n return date.toLocaleString('chinese', { hour12: false });\n}\n\n// ###,###,###,##0.######\nexport function formatNumber1(v) {\n if (typeof v !== 'number') {\n return v;\n }\n\n const length = v.toString().split('.')[1].length;\n switch (length) {\n case 0:\n v = v.toFixed(0);\n break;\n case 1:\n v = v.toFixed(1);\n break;\n case 2:\n v = v.toFixed(2);\n break;\n case 3:\n v = v.toFixed(3);\n break;\n case 4:\n v = v.toFixed(4);\n break;\n case 5:\n v = v.toFixed(5);\n break;\n default:\n v = v.toFixed(6);\n }\n const res = v.toString().replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n//###,###,###,##0.00####\nexport function formatNumber2(v) {\n if (typeof v !== 'number') {\n return v;\n }\n\n const length = v.toString().split('.')[1].length;\n switch (length) {\n case 0:\n case 1:\n case 2:\n v = v.toFixed(2);\n break;\n case 3:\n v = v.toFixed(3);\n break;\n case 4:\n v = v.toFixed(4);\n break;\n case 5:\n v = v.toFixed(5);\n break;\n default:\n v = v.toFixed(6);\n }\n\n const res = v.toString().replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,###,###,##0.000000\nexport function formatNumber3(v) {\n if (typeof v !== 'number') {\n return v;\n }\n\n v = v.toFixed(6);\n const res = v.toString().replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n// ###,###,###,##0.000\nexport function formatNumber4(v) {\n if (typeof v !== 'number') {\n return v;\n }\n\n v = v.toFixed(3);\n const res = v.toString().replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,###,###,##0.00\nexport function formatNumber5(v) {\n if (typeof v !== 'number') {\n return v;\n }\n\n v = v.toFixed(2);\n const res = v.toString().replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,###,###,##0\nexport function formatNumber6(v) {\n if (typeof v !== 'number') {\n return v;\n }\n\n v = v.toFixed(0);\n const res = v.toString().replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res;\n}\n\n// ###,##0.00##%\nexport function formatNumber7(v) {\n if (typeof v !== 'number') {\n return v;\n }\n\n const length = v.toString().split('.')[1].length;\n v = v * 100;\n switch (length) {\n case 0:\n case 1:\n case 2:\n v = v.toFixed(2);\n break;\n case 3:\n v = v.toFixed(3);\n break;\n default:\n v = v.toFixed(4);\n }\n\n const res = v.toString().replace(/\\d+/, function (n) {\n // 先提取整数部分\n return n.replace(/(\\d)(?=(\\d{3})+$)/g, function ($1) {\n return $1 + ',';\n });\n });\n return res + '%';\n}\n\n/**\n * 将Cascader转义为汉字\n * @param codeList string[]\n * @param emblem 拼接符号\n * @returns\n */\nexport const formateCascaderCode = (\n arr = [],\n codeList,\n fieldNames = { label: 'label', value: 'value', children: 'children' },\n emblem = '/'\n) => {\n if (!codeList || codeList.length === 0) return;\n if (isArray(codeList[0])) {\n const res2 = codeList.map(item => getTreeName(arr, item, fieldNames).join(emblem));\n return res2.join(',');\n } else {\n const res = getTreeName(arr, codeList, fieldNames);\n return res.join(emblem);\n }\n};\n\nconst getTreeName = (\n list = [],\n val = [],\n fieldNames = { label: 'label', value: 'value', children: 'children' }\n) => {\n const nameList = [];\n list.forEach(item => {\n if (val.length === 0) return;\n if (item[fieldNames.value] === val[0]) {\n nameList.push(item[fieldNames.label]);\n if (isArray(item[fieldNames.children])) {\n const res = getTreeName(item[fieldNames.children], val.slice(1), fieldNames);\n nameList.push(...res);\n }\n }\n });\n return nameList;\n};\n/**\n * 将tree转义为汉字\n * @param codeList string[]\n * @param emblem 拼接符号\n * @returns\n */\nexport const formateTreeToName = (\n arr = [],\n codeList,\n fieldNames = { label: 'label', value: 'value', children: 'children' },\n emblem = ','\n) => {\n if (!codeList || codeList.length === 0) return;\n const str = arr.reduce((t, v) => {\n const res = getListName(v, codeList, fieldNames);\n t = [...t, res];\n return t;\n }, []);\n return str.map(item => item[fieldNames.label]).join(emblem);\n};\n\nconst getListName = (val, list, fieldNames) => {\n let res;\n list.forEach(it1 => {\n if (it1[fieldNames.value] === val) {\n res = it1;\n return;\n }\n const childrenList = it1[fieldNames.children] || [];\n if (childrenList.length) {\n res = getListName(val, childrenList, fieldNames);\n }\n });\n return res;\n};\n\n/**\n * 格式化尺寸,支持数字、px、%\n * @param value 尺寸值\n * @param defaultSize 默认尺寸\n * @returns 格式化后的尺寸字符串\n */\nexport function formatSize(value, defaultSize = '') {\n if (value === undefined || value === null || value === '') {\n return defaultSize;\n }\n const strValue = String(value);\n if (strValue.endsWith('px') || strValue.endsWith('%')) {\n return strValue;\n }\n if (!isNaN(Number(strValue))) {\n return `${strValue}px`;\n }\n return strValue;\n}\n"],"names":["formateCascaderCode","arr","codeList","fieldNames","emblem","isArray","item","getTreeName","list","val","nameList","res","formatSize","value","defaultSize","strValue"],"mappings":";AA0OY,MAACA,IAAsB,CAC/BC,IAAM,CAAA,GACNC,GACAC,IAAa,EAAE,OAAO,SAAS,OAAO,SAAS,UAAU,WAAU,GACnEC,IAAS,QACR;AACD,MAAI,GAACF,KAAYA,EAAS,WAAW;AACrC,WAAIG,EAAQH,EAAS,CAAC,CAAC,IACNA,EAAS,IAAI,CAAAI,MAAQC,EAAYN,GAAKK,GAAMH,CAAU,EAAE,KAAKC,CAAM,CAAC,EACrE,KAAK,GAAG,IAERG,EAAYN,GAAKC,GAAUC,CAAU,EACtC,KAAKC,CAAM;AAE9B,GAEMG,IAAc,CAChBC,IAAO,CAAA,GACPC,IAAM,CAAA,GACNN,IAAa,EAAE,OAAO,SAAS,OAAO,SAAS,UAAU,WAAU,MAClE;AACD,QAAMO,IAAW,CAAA;AACjB,SAAAF,EAAK,QAAQ,CAAAF,MAAQ;AACjB,QAAIG,EAAI,WAAW,KACfH,EAAKH,EAAW,KAAK,MAAMM,EAAI,CAAC,MAChCC,EAAS,KAAKJ,EAAKH,EAAW,KAAK,CAAC,GAChCE,EAAQC,EAAKH,EAAW,QAAQ,CAAC,IAAG;AACpC,YAAMQ,IAAMJ,EAAYD,EAAKH,EAAW,QAAQ,GAAGM,EAAI,MAAM,CAAC,GAAGN,CAAU;AAC3E,MAAAO,EAAS,KAAK,GAAGC,CAAG;AAAA,IACxB;AAAA,EAER,CAAC,GACMD;AACX;AA2CO,SAASE,EAAWC,GAAOC,IAAc,IAAI;AAChD,MAA2BD,KAAU,QAAQA,MAAU;AACnD,WAAOC;AAEX,QAAMC,IAAW,OAAOF,CAAK;AAC7B,SAAIE,EAAS,SAAS,IAAI,KAAKA,EAAS,SAAS,GAAG,KAG/C,MAAM,OAAOA,CAAQ,CAAC,IAFhBA,IAGA,GAAGA,CAAQ;AAG1B;"}
|
package/src/utils/util.js
CHANGED
|
@@ -22,7 +22,7 @@ const F = function() {
|
|
|
22
22
|
o.styleSheet.cssText = t;
|
|
23
23
|
}
|
|
24
24
|
n.appendChild(o);
|
|
25
|
-
},
|
|
25
|
+
}, L = function(t, e = "") {
|
|
26
26
|
const n = document.getElementsByTagName("body")[0], o = document.createElement("script");
|
|
27
27
|
o.id = e ? "v_form_global_functions-" + e : "v_form_global_functions", o.type = "text/javascript", o.innerHTML = t, n.appendChild(o);
|
|
28
28
|
};
|
|
@@ -76,7 +76,7 @@ function p(t, e) {
|
|
|
76
76
|
l(n, e);
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
|
-
function
|
|
79
|
+
function _(t, e = !1) {
|
|
80
80
|
if (!t)
|
|
81
81
|
return [];
|
|
82
82
|
const n = [];
|
|
@@ -88,7 +88,7 @@ function L(t, e = !1) {
|
|
|
88
88
|
});
|
|
89
89
|
}, null, e), n;
|
|
90
90
|
}
|
|
91
|
-
function
|
|
91
|
+
function x(t) {
|
|
92
92
|
if (!t)
|
|
93
93
|
return [];
|
|
94
94
|
const e = [];
|
|
@@ -100,7 +100,7 @@ function _(t) {
|
|
|
100
100
|
});
|
|
101
101
|
}), e;
|
|
102
102
|
}
|
|
103
|
-
function
|
|
103
|
+
function S(t, e) {
|
|
104
104
|
if (!t)
|
|
105
105
|
return null;
|
|
106
106
|
let n = null;
|
|
@@ -108,7 +108,7 @@ function x(t, e) {
|
|
|
108
108
|
r.options.name === e && (n = r);
|
|
109
109
|
}), n;
|
|
110
110
|
}
|
|
111
|
-
function
|
|
111
|
+
function T(t, e, n, o, r) {
|
|
112
112
|
const a = new u(e.target, {
|
|
113
113
|
text: () => t
|
|
114
114
|
});
|
|
@@ -118,7 +118,7 @@ function S(t, e, n, o, r) {
|
|
|
118
118
|
n.error(r), a.destroy();
|
|
119
119
|
}), a.onClick(e);
|
|
120
120
|
}
|
|
121
|
-
function
|
|
121
|
+
function k() {
|
|
122
122
|
const { formCode: t = "" } = m();
|
|
123
123
|
return {
|
|
124
124
|
labelWidth: 80,
|
|
@@ -129,10 +129,6 @@ function T() {
|
|
|
129
129
|
cssCode: "",
|
|
130
130
|
customClass: [],
|
|
131
131
|
isEnterSubmit: 0,
|
|
132
|
-
// okButtonLabel: '',
|
|
133
|
-
// okButtonHidden: '',
|
|
134
|
-
// cancelButtonHidden: '',
|
|
135
|
-
// cancelButtonLabel: '',
|
|
136
132
|
buttonList: [],
|
|
137
133
|
functions: "",
|
|
138
134
|
//全局函数
|
|
@@ -148,12 +144,6 @@ function T() {
|
|
|
148
144
|
})
|
|
149
145
|
`,
|
|
150
146
|
onFormDataChange: "",
|
|
151
|
-
onOkButtonClick: `
|
|
152
|
-
this.getFormRef().onFormUpdate().then(()=>{
|
|
153
|
-
this.$message.success('保存成功!');
|
|
154
|
-
})
|
|
155
|
-
`,
|
|
156
|
-
onCancelButtonClick: "",
|
|
157
147
|
serveList: {
|
|
158
148
|
list: [],
|
|
159
149
|
vformUpdate: {
|
|
@@ -214,16 +204,16 @@ function D(t, e) {
|
|
|
214
204
|
}
|
|
215
205
|
export {
|
|
216
206
|
H as cloneFormConfigWithoutEventHandler,
|
|
217
|
-
|
|
207
|
+
T as copyToClipboard,
|
|
218
208
|
f as deepClone,
|
|
219
209
|
F as generateId,
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
210
|
+
x as getAllContainerWidgets,
|
|
211
|
+
_ as getAllFieldWidgets,
|
|
212
|
+
S as getContainerWidgetByName,
|
|
223
213
|
D as getDSByName,
|
|
224
|
-
|
|
214
|
+
k as getDefaultFormConfig,
|
|
225
215
|
v as insertCustomCssToHead,
|
|
226
|
-
|
|
216
|
+
L as insertGlobalFunctionsToHtml,
|
|
227
217
|
C as isNull,
|
|
228
218
|
E as overwriteObj,
|
|
229
219
|
M as translateOptionItems,
|
package/src/utils/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sources":["../../../src/utils/util.js"],"sourcesContent":["import Clipboard from 'clipboard';\nimport { getLocat } from '@kp-ui/tool';\nimport { isArray, isEmpty, cloneDeep } from 'lodash-es';\nimport {\n containers,\n advancedFields,\n basicFields,\n customFields\n} from '@/components/form-designer/widget-panel/widgetsConfig';\nexport function isNull(value) {\n return value === null || value === undefined;\n}\n\nexport function isNotNull(value) {\n return value !== null && value !== undefined;\n}\n\nexport function isEmptyStr(str) {\n //return (str === undefined) || (!str) || (!/[^\\s]/.test(str));\n return str === undefined || (!str && str !== 0 && str !== '0') || !/[^\\s]/.test(str);\n}\n\nexport const generateId = function () {\n return Math.floor(Math.random() * 100000 + Math.random() * 20000 + Math.random() * 5000);\n};\n\nexport const deepClone = function (origin) {\n return cloneDeep(origin);\n};\n\nexport const overwriteObj = function (obj1, obj2) {\n /* 浅拷贝对象属性,obj2覆盖obj1 */\n // for (let prop in obj2) {\n // if (obj2.hasOwnProperty(prop)) {\n // obj1[prop] = obj2[prop]\n // }\n // }\n\n Object.keys(obj2).forEach(prop => {\n obj1[prop] = obj2[prop];\n });\n};\n\nconst getComTypeMap = type => {\n const allWidgets = [...containers, ...basicFields, ...advancedFields, ...customFields];\n const map = new Map();\n allWidgets.forEach(item => {\n const type = item.type.replace(/-/g, '').toLowerCase();\n map.set(type, item);\n });\n return map.get(type.replace(/-/g, '').toLowerCase());\n};\n\nexport const fmtArray = a => {\n a = a.map(item => {\n item = overwriteDeep(item);\n return item;\n });\n return a;\n};\n\nexport const overwriteDeep = (a, ops) => {\n if (isArray(a)) {\n const res = fmtArray(a);\n return res;\n }\n let b = ops;\n const type = a.type;\n\n if (a.options) {\n if (type) {\n b = getComTypeMap(type) || b;\n }\n }\n\n for (const k in b) {\n if (typeof b[k] === 'object' && b[k] !== null) {\n a[k] = isEmpty(a[k]) ? b[k] : overwriteDeep(a[k], b[k]);\n } else {\n a[k] = a[k] === void 0 ? b[k] : a[k];\n }\n }\n return a;\n};\n\nexport const insertCustomCssToHead = function (cssCode, formId = '') {\n const head = document.getElementsByTagName('head')[0];\n\n const newStyle = document.createElement('style');\n newStyle.type = 'text/css';\n newStyle.rel = 'stylesheet';\n newStyle.id = !!formId ? 'vform-custom-css' + '-' + formId : 'vform-custom-css';\n try {\n newStyle.appendChild(document.createTextNode(cssCode));\n } catch (ex) {\n newStyle.styleSheet.cssText = cssCode;\n }\n\n head.appendChild(newStyle);\n};\n\nexport const insertGlobalFunctionsToHtml = function (functionsCode, formId = '') {\n const bodyEle = document.getElementsByTagName('body')[0];\n // let oldScriptEle = document.getElementById('v_form_global_functions');\n // !!oldScriptEle && bodyEle.removeChild(oldScriptEle); //先清除后插入!!\n // if (!!formId) {\n // oldScriptEle = document.getElementById('v_form_global_functions' + '-' + formId);\n // !!oldScriptEle && bodyEle.removeChild(oldScriptEle); //先清除后插入!!\n // }\n\n const newScriptEle = document.createElement('script');\n newScriptEle.id = !!formId\n ? 'v_form_global_functions' + '-' + formId\n : 'v_form_global_functions';\n newScriptEle.type = 'text/javascript';\n newScriptEle.innerHTML = functionsCode;\n bodyEle.appendChild(newScriptEle);\n};\n\nexport const optionExists = function (optionsObj, optionName) {\n if (!optionsObj) {\n return false;\n }\n\n return Object.keys(optionsObj).indexOf(optionName) > -1;\n};\n\nexport const loadRemoteScript = function (srcPath, callback) {\n /*加载远程js,加载成功后执行回调函数*/\n const sid = encodeURIComponent(srcPath);\n const oldScriptEle = document.getElementById(sid);\n\n if (!oldScriptEle) {\n let s = document.createElement('script');\n s.src = srcPath;\n s.id = sid;\n document.body.appendChild(s);\n\n s.onload = s.onreadystatechange = function (_, isAbort) {\n /* 借鉴自ace.js */\n if (\n isAbort ||\n !s.readyState ||\n s.readyState === 'loaded' ||\n s.readyState === 'complete'\n ) {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort) {\n callback();\n }\n }\n };\n }\n};\n\nexport function traverseFieldWidgets(\n widgetList,\n handler,\n parent = null,\n staticWidgetsIncluded = false\n) {\n if (!widgetList) {\n return;\n }\n\n widgetList.map(w => {\n if (w.formItemFlag || (w.formItemFlag === false && staticWidgetsIncluded)) {\n handler(w, parent);\n } else if (w.type === 'grid') {\n w.cols.map(col => {\n traverseFieldWidgets(col.widgetList, handler, w, staticWidgetsIncluded);\n });\n } else if (w.type === 'table') {\n w.rows.map(row => {\n row.cols.map(cell => {\n traverseFieldWidgets(cell.widgetList, handler, w, staticWidgetsIncluded);\n });\n });\n } else if (w.type === 'tab') {\n w.tabs.map(tab => {\n traverseFieldWidgets(tab.widgetList, handler, w, staticWidgetsIncluded);\n });\n } else if (w.type === 'sub-form' || w.type === 'grid-sub-form') {\n traverseFieldWidgets(w.widgetList, handler, w, staticWidgetsIncluded);\n } else if (w.category === 'container') {\n //自定义容器\n traverseFieldWidgets(w.widgetList, handler, w, staticWidgetsIncluded);\n }\n });\n}\n\nexport function traverseContainerWidgets(widgetList, handler) {\n if (!widgetList?.length) {\n return;\n }\n\n widgetList.map(w => {\n if (w.category === 'container') {\n handler(w);\n }\n\n if (w.type === 'grid') {\n w.cols.map(col => {\n traverseContainerWidgets(col.widgetList, handler);\n });\n } else if (w.type === 'table') {\n w.rows.map(row => {\n row.cols.map(cell => {\n traverseContainerWidgets(cell.widgetList, handler);\n });\n });\n } else if (w.type === 'tab') {\n w.tabs.map(tab => {\n traverseContainerWidgets(tab.widgetList, handler);\n });\n } else if (w.type === 'sub-form' || w.type === 'grid-sub-form') {\n traverseContainerWidgets(w.widgetList, handler);\n } else if (w.category === 'container') {\n //自定义容器\n traverseContainerWidgets(w.widgetList, handler);\n }\n });\n}\n\nexport function traverseAllWidgets(widgetList, handler) {\n if (!widgetList) {\n return;\n }\n\n widgetList.map(w => {\n handler(w);\n\n if (w.type === 'grid') {\n w.cols.map(col => {\n handler(col);\n traverseAllWidgets(col.widgetList, handler);\n });\n } else if (w.type === 'table') {\n w.rows.map(row => {\n row.cols.map(cell => {\n handler(cell);\n traverseAllWidgets(cell.widgetList, handler);\n });\n });\n } else if (w.type === 'tab') {\n w.tabs.map(tab => {\n traverseAllWidgets(tab.widgetList, handler);\n });\n } else if (w.type === 'sub-form' || w.type === 'grid-sub-form') {\n traverseAllWidgets(w.widgetList, handler);\n } else if (w.category === 'container') {\n //自定义容器\n traverseAllWidgets(w.widgetList, handler);\n }\n });\n}\n\nfunction handleWidgetForTraverse(widget, handler) {\n if (!!widget.category && widget.category === 'container') {\n traverseFieldWidgetsOfContainer(widget, handler);\n } else if (widget.formItemFlag) {\n handler(widget);\n }\n}\n\n/**\n * 遍历容器内的字段组件\n * @param con\n * @param handler\n */\nexport function traverseFieldWidgetsOfContainer(con, handler) {\n if (con.type === 'grid') {\n con.cols.forEach(col => {\n col.widgetList.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n });\n } else if (con.type === 'table') {\n con.rows.forEach(row => {\n row.cols.forEach(cell => {\n cell.widgetList.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n });\n });\n } else if (con.type === 'tab') {\n con.tabs.forEach(tab => {\n tab.widgetList.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n });\n } else if (con.type === 'sub-form' || con.type === 'grid-sub-form') {\n con.widgetList.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n } else if (con.category === 'container') {\n //自定义容器\n con.widgetList.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n }\n}\n\nfunction handleContainerTraverse(widget, fieldHandler, containerHandler) {\n if (!!widget.category && widget.category === 'container') {\n traverseWidgetsOfContainer(widget, fieldHandler, containerHandler);\n } else if (widget.formItemFlag) {\n fieldHandler(widget);\n }\n}\n\n/**\n * 遍历容器内部的字段组件和容器组件\n * @param con\n * @param fieldHandler\n * @param containerHandler\n */\nexport function traverseWidgetsOfContainer(con, fieldHandler, containerHandler) {\n if (con.type === 'grid') {\n con.cols.forEach(col => {\n col.widgetList.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n });\n } else if (con.type === 'table') {\n con.rows.forEach(row => {\n row.cols.forEach(cell => {\n cell.widgetList.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n });\n });\n } else if (con.type === 'tab') {\n con.tabs.forEach(tab => {\n tab.widgetList.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n });\n } else if (con.type === 'sub-form' || con.type === 'grid-sub-form') {\n con.widgetList.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n } else if (con.category === 'container') {\n //自定义容器\n con.widgetList.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n }\n}\n\n/**\n * 获取所有字段组件\n * @param widgetList\n * @param staticWidgetsIncluded 是否包含按钮等静态组件,默认不包含\n * @returns {[]}\n */\nexport function getAllFieldWidgets(widgetList, staticWidgetsIncluded = false) {\n if (!widgetList) {\n return [];\n }\n\n const result = [];\n const handlerFn = w => {\n result.push({\n type: w.type,\n name: w.options.name,\n field: w\n });\n };\n traverseFieldWidgets(widgetList, handlerFn, null, staticWidgetsIncluded);\n\n return result;\n}\n\n/**\n * 获取所有容器组件\n * @param widgetList\n * @returns {[]}\n */\nexport function getAllContainerWidgets(widgetList) {\n if (!widgetList) {\n return [];\n }\n\n const result = [];\n const handlerFn = w => {\n result.push({\n type: w.type,\n name: w.options.name,\n container: w\n });\n };\n traverseContainerWidgets(widgetList, handlerFn);\n\n return result;\n}\n\nexport function getFieldWidgetByName(widgetList, fieldName, staticWidgetsIncluded) {\n if (!widgetList) {\n return null;\n }\n\n let foundWidget = null;\n const handlerFn = widget => {\n if (widget.options.name === fieldName) {\n foundWidget = widget;\n }\n };\n\n traverseFieldWidgets(widgetList, handlerFn, null, staticWidgetsIncluded);\n return foundWidget;\n}\n\nexport function getContainerWidgetByName(widgetList, containerName) {\n if (!widgetList) {\n return null;\n }\n\n let foundContainer = null;\n const handlerFn = con => {\n if (con.options.name === containerName) {\n foundContainer = con;\n }\n };\n\n traverseContainerWidgets(widgetList, handlerFn);\n return foundContainer;\n}\n\nexport function getContainerWidgetById(widgetList, containerId) {\n if (!widgetList) {\n return null;\n }\n\n let foundContainer = null;\n const handlerFn = con => {\n if (con.id === containerId) {\n foundContainer = con;\n }\n };\n\n traverseContainerWidgets(widgetList, handlerFn);\n return foundContainer;\n}\n\nexport function copyToClipboard(content, clickEvent, $message, successMsg, errorMsg) {\n const clipboard = new Clipboard(clickEvent.target, {\n text: () => content\n });\n\n clipboard.on('success', () => {\n $message.success(successMsg);\n clipboard.destroy();\n });\n\n clipboard.on('error', () => {\n $message.error(errorMsg);\n clipboard.destroy();\n });\n\n clipboard.onClick(clickEvent);\n}\n\nexport function getQueryParam(variable) {\n const query = window.location.search.substring(1);\n const vars = query.split('&');\n for (let i = 0; i < vars.length; i++) {\n const pair = vars[i].split('=');\n if (pair[0] == variable) {\n return pair[1];\n }\n }\n\n return undefined;\n}\n\nexport function getDefaultFormConfig() {\n const { formCode = '' } = getLocat();\n\n return {\n labelWidth: 80,\n labelPosition: 'horizontal', //'left',\n size: '',\n labelAlign: 'right',\n cssCode: '',\n customClass: [],\n\n isEnterSubmit: 0,\n // okButtonLabel: '',\n // okButtonHidden: '',\n // cancelButtonHidden: '',\n // cancelButtonLabel: '',\n buttonList: [],\n\n functions: '', //全局函数\n layoutType: 'PC',\n onFormCreated: '',\n onFormMounted: `\n if(!this.vfCtx) return\n if(!this.vfCtx._id) return\n const type = this.vfCtx.type\n this.setReadMode(type==='view')\n this.onFormDetail().then(res=>{\n this.setFormData({...res})\n })\n `,\n\n onFormDataChange: '',\n onOkButtonClick: `\n this.getFormRef().onFormUpdate().then(()=>{\n this.$message.success('保存成功!');\n })\n `,\n onCancelButtonClick: '',\n\n serveList: {\n list: [],\n vformUpdate: {\n http: {\n url: `/api/tmgc2-mgt/formDefinition/${formCode}/evaluate/formSubmit`,\n method: 'post',\n data: { _id: '${_id}' },\n params: {}\n },\n dataReqHandlerCode: `const d=data.data||{};\\n Object.keys(d).forEach(k=>{\\n if(d[k]==='null'){\\n d[k]=null\\n }\\n })\\nreturn {...data,data:d}`,\n dataHandlerCode: ''\n },\n vformDetail: {\n http: {\n url: `/api/tmgc2-mgt/formDefinition/${formCode}/evaluate/formLoad`,\n method: 'post',\n data: { _id: '${_id}' },\n params: {}\n },\n dataReqHandlerCode: `const d=data.data||{};\\n Object.keys(d).forEach(k=>{\\n if(d[k]==='null'){\\n d[k]=null\\n }\\n })\\nreturn {...data,data:d}`,\n dataHandlerCode: 'return data.data.object||{}'\n }\n }\n };\n}\n\nexport function buildDefaultFormJson() {\n return {\n widgetList: [],\n formConfig: deepClone(getDefaultFormConfig())\n };\n}\n\nexport function cloneFormConfigWithoutEventHandler(formConfig) {\n const newFC = deepClone(formConfig);\n newFC.onFormCreated = '';\n newFC.onFormMounted = '';\n newFC.onFormDataChange = '';\n\n return newFC;\n}\n\n/**\n * 转译选择项数据\n * @param rawData\n * @param widgetType\n * @param labelKey\n * @param valueKey\n * @returns {[]}\n */\nexport function translateOptionItems(rawData, widgetType, labelKey, valueKey) {\n if (['cascader', 'treeSelect', 'select'].includes(widgetType)) {\n // 级联选择不转译\n return deepClone(rawData);\n }\n\n const result = [];\n if (!!rawData && rawData.length > 0) {\n rawData.forEach(ri => {\n result.push({\n label: ri[labelKey],\n value: ri[valueKey]\n });\n });\n }\n\n return rawData; //result;\n}\n\n/**\n * 组装axios请求配置参数\n * @param arrayObj\n * @param DSV\n * @param VFR\n * @returns {{}}\n */\nexport function assembleAxiosConfig(arrayObj, DSV, VFR) {\n const result = {};\n if (!arrayObj || arrayObj.length <= 0) {\n return result;\n }\n\n arrayObj.map(ai => {\n if (ai.type === 'String') {\n result[ai.name] = String(ai.value);\n } else if (ai.type === 'Number') {\n result[ai.name] = Number(ai.value);\n } else if (ai.type === 'Boolean') {\n if (ai.value.toLowerCase() === 'false' || ai.value === '0') {\n result[ai.name] = false;\n } else if (ai.value.toLowerCase() === 'true' || ai.value === '1') {\n result[ai.name] = true;\n } else {\n result[ai.name] = null;\n }\n } else if (ai.type === 'Variable') {\n result[ai.name] = eval(ai.value);\n }\n });\n\n /* 加入如下两行日志打印代码,是为了防止编译打包时DSV、VFR参数被剔除!! begin */\n /* DSV、VFR入参没有在本函数中直接使用到,但在eval表达式中可能被使用到,故需确保DSV、VFR参数始终存在!! */\n console.log('test DSV: ', DSV);\n console.log('test VFR: ', VFR);\n /* 加入如下两行日志打印代码,是为了防止编译打包时DSV、VFR入参会被剔除!! end */\n\n return result;\n}\n\nfunction buildRequestConfig(dataSource, DSV, VFR, isSandbox) {\n const config = {};\n if (dataSource.requestURLType === 'String') {\n config.url = dataSource.requestURL;\n } else {\n config.url = eval(dataSource.requestURL);\n }\n config.method = dataSource.requestMethod;\n\n config.headers = assembleAxiosConfig(dataSource.headers, DSV, VFR);\n config.params = assembleAxiosConfig(dataSource.params, DSV, VFR);\n config.data = assembleAxiosConfig(dataSource.data, DSV, VFR);\n\n const chFn = new Function('config', 'isSandbox', 'DSV', 'VFR', dataSource.configHandlerCode);\n return chFn.call(null, config, isSandbox, DSV, VFR);\n}\n\nexport function getDSByName(formConfig, dsName) {\n let resultDS = null;\n if (!!dsName && !!formConfig.dataSources) {\n formConfig.dataSources.forEach(ds => {\n if (ds.uniqueName === dsName) {\n resultDS = ds;\n }\n });\n }\n\n return resultDS;\n}\n"],"names":["isNull","value","generateId","deepClone","origin","cloneDeep","overwriteObj","obj1","obj2","prop","insertCustomCssToHead","cssCode","formId","head","newStyle","insertGlobalFunctionsToHtml","functionsCode","bodyEle","newScriptEle","traverseFieldWidgets","widgetList","handler","parent","staticWidgetsIncluded","w","col","row","cell","tab","traverseContainerWidgets","handleWidgetForTraverse","widget","traverseFieldWidgetsOfContainer","con","cw","getAllFieldWidgets","result","getAllContainerWidgets","getContainerWidgetByName","containerName","foundContainer","copyToClipboard","content","clickEvent","$message","successMsg","errorMsg","clipboard","Clipboard","getDefaultFormConfig","formCode","getLocat","cloneFormConfigWithoutEventHandler","formConfig","newFC","translateOptionItems","rawData","widgetType","labelKey","valueKey","ri","getDSByName","dsName","resultDS","ds"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"util.js","sources":["../../../src/utils/util.js"],"sourcesContent":["import Clipboard from 'clipboard';\nimport { getLocat } from '@kp-ui/tool';\nimport { isArray, isEmpty, cloneDeep } from 'lodash-es';\nimport {\n containers,\n advancedFields,\n basicFields,\n customFields\n} from '@/components/form-designer/widget-panel/widgetsConfig';\nexport function isNull(value) {\n return value === null || value === undefined;\n}\n\nexport function isNotNull(value) {\n return value !== null && value !== undefined;\n}\n\nexport function isEmptyStr(str) {\n //return (str === undefined) || (!str) || (!/[^\\s]/.test(str));\n return str === undefined || (!str && str !== 0 && str !== '0') || !/[^\\s]/.test(str);\n}\n\nexport const generateId = function () {\n return Math.floor(Math.random() * 100000 + Math.random() * 20000 + Math.random() * 5000);\n};\n\nexport const deepClone = function (origin) {\n return cloneDeep(origin);\n};\n\nexport const overwriteObj = function (obj1, obj2) {\n /* 浅拷贝对象属性,obj2覆盖obj1 */\n // for (let prop in obj2) {\n // if (obj2.hasOwnProperty(prop)) {\n // obj1[prop] = obj2[prop]\n // }\n // }\n\n Object.keys(obj2).forEach(prop => {\n obj1[prop] = obj2[prop];\n });\n};\n\nconst getComTypeMap = type => {\n const allWidgets = [...containers, ...basicFields, ...advancedFields, ...customFields];\n const map = new Map();\n allWidgets.forEach(item => {\n const type = item.type.replace(/-/g, '').toLowerCase();\n map.set(type, item);\n });\n return map.get(type.replace(/-/g, '').toLowerCase());\n};\n\nexport const fmtArray = a => {\n a = a.map(item => {\n item = overwriteDeep(item);\n return item;\n });\n return a;\n};\n\nexport const overwriteDeep = (a, ops) => {\n if (isArray(a)) {\n const res = fmtArray(a);\n return res;\n }\n let b = ops;\n const type = a.type;\n\n if (a.options) {\n if (type) {\n b = getComTypeMap(type) || b;\n }\n }\n\n for (const k in b) {\n if (typeof b[k] === 'object' && b[k] !== null) {\n a[k] = isEmpty(a[k]) ? b[k] : overwriteDeep(a[k], b[k]);\n } else {\n a[k] = a[k] === void 0 ? b[k] : a[k];\n }\n }\n return a;\n};\n\nexport const insertCustomCssToHead = function (cssCode, formId = '') {\n const head = document.getElementsByTagName('head')[0];\n\n const newStyle = document.createElement('style');\n newStyle.type = 'text/css';\n newStyle.rel = 'stylesheet';\n newStyle.id = !!formId ? 'vform-custom-css' + '-' + formId : 'vform-custom-css';\n try {\n newStyle.appendChild(document.createTextNode(cssCode));\n } catch (ex) {\n newStyle.styleSheet.cssText = cssCode;\n }\n\n head.appendChild(newStyle);\n};\n\nexport const insertGlobalFunctionsToHtml = function (functionsCode, formId = '') {\n const bodyEle = document.getElementsByTagName('body')[0];\n // let oldScriptEle = document.getElementById('v_form_global_functions');\n // !!oldScriptEle && bodyEle.removeChild(oldScriptEle); //先清除后插入!!\n // if (!!formId) {\n // oldScriptEle = document.getElementById('v_form_global_functions' + '-' + formId);\n // !!oldScriptEle && bodyEle.removeChild(oldScriptEle); //先清除后插入!!\n // }\n\n const newScriptEle = document.createElement('script');\n newScriptEle.id = !!formId\n ? 'v_form_global_functions' + '-' + formId\n : 'v_form_global_functions';\n newScriptEle.type = 'text/javascript';\n newScriptEle.innerHTML = functionsCode;\n bodyEle.appendChild(newScriptEle);\n};\n\nexport const optionExists = function (optionsObj, optionName) {\n if (!optionsObj) {\n return false;\n }\n\n return Object.keys(optionsObj).indexOf(optionName) > -1;\n};\n\nexport const loadRemoteScript = function (srcPath, callback) {\n /*加载远程js,加载成功后执行回调函数*/\n const sid = encodeURIComponent(srcPath);\n const oldScriptEle = document.getElementById(sid);\n\n if (!oldScriptEle) {\n let s = document.createElement('script');\n s.src = srcPath;\n s.id = sid;\n document.body.appendChild(s);\n\n s.onload = s.onreadystatechange = function (_, isAbort) {\n /* 借鉴自ace.js */\n if (\n isAbort ||\n !s.readyState ||\n s.readyState === 'loaded' ||\n s.readyState === 'complete'\n ) {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort) {\n callback();\n }\n }\n };\n }\n};\n\nexport function traverseFieldWidgets(\n widgetList,\n handler,\n parent = null,\n staticWidgetsIncluded = false\n) {\n if (!widgetList) {\n return;\n }\n\n widgetList.map(w => {\n if (w.formItemFlag || (w.formItemFlag === false && staticWidgetsIncluded)) {\n handler(w, parent);\n } else if (w.type === 'grid') {\n w.cols.map(col => {\n traverseFieldWidgets(col.widgetList, handler, w, staticWidgetsIncluded);\n });\n } else if (w.type === 'table') {\n w.rows.map(row => {\n row.cols.map(cell => {\n traverseFieldWidgets(cell.widgetList, handler, w, staticWidgetsIncluded);\n });\n });\n } else if (w.type === 'tab') {\n w.tabs.map(tab => {\n traverseFieldWidgets(tab.widgetList, handler, w, staticWidgetsIncluded);\n });\n } else if (w.type === 'sub-form' || w.type === 'grid-sub-form') {\n traverseFieldWidgets(w.widgetList, handler, w, staticWidgetsIncluded);\n } else if (w.category === 'container') {\n //自定义容器\n traverseFieldWidgets(w.widgetList, handler, w, staticWidgetsIncluded);\n }\n });\n}\n\nexport function traverseContainerWidgets(widgetList, handler) {\n if (!widgetList?.length) {\n return;\n }\n\n widgetList.map(w => {\n if (w.category === 'container') {\n handler(w);\n }\n\n if (w.type === 'grid') {\n w.cols.map(col => {\n traverseContainerWidgets(col.widgetList, handler);\n });\n } else if (w.type === 'table') {\n w.rows.map(row => {\n row.cols.map(cell => {\n traverseContainerWidgets(cell.widgetList, handler);\n });\n });\n } else if (w.type === 'tab') {\n w.tabs.map(tab => {\n traverseContainerWidgets(tab.widgetList, handler);\n });\n } else if (w.type === 'sub-form' || w.type === 'grid-sub-form') {\n traverseContainerWidgets(w.widgetList, handler);\n } else if (w.category === 'container') {\n //自定义容器\n traverseContainerWidgets(w.widgetList, handler);\n }\n });\n}\n\nexport function traverseAllWidgets(widgetList, handler) {\n if (!widgetList) {\n return;\n }\n\n widgetList.map(w => {\n handler(w);\n\n if (w.type === 'grid') {\n w.cols.map(col => {\n handler(col);\n traverseAllWidgets(col.widgetList, handler);\n });\n } else if (w.type === 'table') {\n w.rows.map(row => {\n row.cols.map(cell => {\n handler(cell);\n traverseAllWidgets(cell.widgetList, handler);\n });\n });\n } else if (w.type === 'tab') {\n w.tabs.map(tab => {\n traverseAllWidgets(tab.widgetList, handler);\n });\n } else if (w.type === 'sub-form' || w.type === 'grid-sub-form') {\n traverseAllWidgets(w.widgetList, handler);\n } else if (w.category === 'container') {\n //自定义容器\n traverseAllWidgets(w.widgetList, handler);\n }\n });\n}\n\nfunction handleWidgetForTraverse(widget, handler) {\n if (!!widget.category && widget.category === 'container') {\n traverseFieldWidgetsOfContainer(widget, handler);\n } else if (widget.formItemFlag) {\n handler(widget);\n }\n}\n\n/**\n * 遍历容器内的字段组件\n * @param con\n * @param handler\n */\nexport function traverseFieldWidgetsOfContainer(con, handler) {\n if (con.type === 'grid') {\n con.cols.forEach(col => {\n col.widgetList.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n });\n } else if (con.type === 'table') {\n con.rows.forEach(row => {\n row.cols.forEach(cell => {\n cell.widgetList.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n });\n });\n } else if (con.type === 'tab') {\n con.tabs.forEach(tab => {\n tab.widgetList.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n });\n } else if (con.type === 'sub-form' || con.type === 'grid-sub-form') {\n con.widgetList.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n } else if (con.category === 'container') {\n //自定义容器\n con.widgetList.forEach(cw => {\n handleWidgetForTraverse(cw, handler);\n });\n }\n}\n\nfunction handleContainerTraverse(widget, fieldHandler, containerHandler) {\n if (!!widget.category && widget.category === 'container') {\n traverseWidgetsOfContainer(widget, fieldHandler, containerHandler);\n } else if (widget.formItemFlag) {\n fieldHandler(widget);\n }\n}\n\n/**\n * 遍历容器内部的字段组件和容器组件\n * @param con\n * @param fieldHandler\n * @param containerHandler\n */\nexport function traverseWidgetsOfContainer(con, fieldHandler, containerHandler) {\n if (con.type === 'grid') {\n con.cols.forEach(col => {\n col.widgetList.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n });\n } else if (con.type === 'table') {\n con.rows.forEach(row => {\n row.cols.forEach(cell => {\n cell.widgetList.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n });\n });\n } else if (con.type === 'tab') {\n con.tabs.forEach(tab => {\n tab.widgetList.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n });\n } else if (con.type === 'sub-form' || con.type === 'grid-sub-form') {\n con.widgetList.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n } else if (con.category === 'container') {\n //自定义容器\n con.widgetList.forEach(cw => {\n handleContainerTraverse(cw, fieldHandler, containerHandler);\n });\n }\n}\n\n/**\n * 获取所有字段组件\n * @param widgetList\n * @param staticWidgetsIncluded 是否包含按钮等静态组件,默认不包含\n * @returns {[]}\n */\nexport function getAllFieldWidgets(widgetList, staticWidgetsIncluded = false) {\n if (!widgetList) {\n return [];\n }\n\n const result = [];\n const handlerFn = w => {\n result.push({\n type: w.type,\n name: w.options.name,\n field: w\n });\n };\n traverseFieldWidgets(widgetList, handlerFn, null, staticWidgetsIncluded);\n\n return result;\n}\n\n/**\n * 获取所有容器组件\n * @param widgetList\n * @returns {[]}\n */\nexport function getAllContainerWidgets(widgetList) {\n if (!widgetList) {\n return [];\n }\n\n const result = [];\n const handlerFn = w => {\n result.push({\n type: w.type,\n name: w.options.name,\n container: w\n });\n };\n traverseContainerWidgets(widgetList, handlerFn);\n\n return result;\n}\n\nexport function getFieldWidgetByName(widgetList, fieldName, staticWidgetsIncluded) {\n if (!widgetList) {\n return null;\n }\n\n let foundWidget = null;\n const handlerFn = widget => {\n if (widget.options.name === fieldName) {\n foundWidget = widget;\n }\n };\n\n traverseFieldWidgets(widgetList, handlerFn, null, staticWidgetsIncluded);\n return foundWidget;\n}\n\nexport function getContainerWidgetByName(widgetList, containerName) {\n if (!widgetList) {\n return null;\n }\n\n let foundContainer = null;\n const handlerFn = con => {\n if (con.options.name === containerName) {\n foundContainer = con;\n }\n };\n\n traverseContainerWidgets(widgetList, handlerFn);\n return foundContainer;\n}\n\nexport function getContainerWidgetById(widgetList, containerId) {\n if (!widgetList) {\n return null;\n }\n\n let foundContainer = null;\n const handlerFn = con => {\n if (con.id === containerId) {\n foundContainer = con;\n }\n };\n\n traverseContainerWidgets(widgetList, handlerFn);\n return foundContainer;\n}\n\nexport function copyToClipboard(content, clickEvent, $message, successMsg, errorMsg) {\n const clipboard = new Clipboard(clickEvent.target, {\n text: () => content\n });\n\n clipboard.on('success', () => {\n $message.success(successMsg);\n clipboard.destroy();\n });\n\n clipboard.on('error', () => {\n $message.error(errorMsg);\n clipboard.destroy();\n });\n\n clipboard.onClick(clickEvent);\n}\n\nexport function getQueryParam(variable) {\n const query = window.location.search.substring(1);\n const vars = query.split('&');\n for (let i = 0; i < vars.length; i++) {\n const pair = vars[i].split('=');\n if (pair[0] == variable) {\n return pair[1];\n }\n }\n\n return undefined;\n}\n\nexport function getDefaultFormConfig() {\n const { formCode = '' } = getLocat();\n\n return {\n labelWidth: 80,\n labelPosition: 'horizontal', //'left',\n size: '',\n labelAlign: 'right',\n cssCode: '',\n customClass: [],\n\n isEnterSubmit: 0,\n\n buttonList: [],\n\n functions: '', //全局函数\n layoutType: 'PC',\n onFormCreated: '',\n onFormMounted: `\n if(!this.vfCtx) return\n if(!this.vfCtx._id) return\n const type = this.vfCtx.type\n this.setReadMode(type==='view')\n this.onFormDetail().then(res=>{\n this.setFormData({...res})\n })\n `,\n\n onFormDataChange: '',\n\n serveList: {\n list: [],\n vformUpdate: {\n http: {\n url: `/api/tmgc2-mgt/formDefinition/${formCode}/evaluate/formSubmit`,\n method: 'post',\n data: { _id: '${_id}' },\n params: {}\n },\n dataReqHandlerCode: `const d=data.data||{};\\n Object.keys(d).forEach(k=>{\\n if(d[k]==='null'){\\n d[k]=null\\n }\\n })\\nreturn {...data,data:d}`,\n dataHandlerCode: ''\n },\n vformDetail: {\n http: {\n url: `/api/tmgc2-mgt/formDefinition/${formCode}/evaluate/formLoad`,\n method: 'post',\n data: { _id: '${_id}' },\n params: {}\n },\n dataReqHandlerCode: `const d=data.data||{};\\n Object.keys(d).forEach(k=>{\\n if(d[k]==='null'){\\n d[k]=null\\n }\\n })\\nreturn {...data,data:d}`,\n dataHandlerCode: 'return data.data.object||{}'\n }\n }\n };\n}\n\nexport function buildDefaultFormJson() {\n return {\n widgetList: [],\n formConfig: deepClone(getDefaultFormConfig())\n };\n}\n\nexport function cloneFormConfigWithoutEventHandler(formConfig) {\n const newFC = deepClone(formConfig);\n newFC.onFormCreated = '';\n newFC.onFormMounted = '';\n newFC.onFormDataChange = '';\n\n return newFC;\n}\n\n/**\n * 转译选择项数据\n * @param rawData\n * @param widgetType\n * @param labelKey\n * @param valueKey\n * @returns {[]}\n */\nexport function translateOptionItems(rawData, widgetType, labelKey, valueKey) {\n if (['cascader', 'treeSelect', 'select'].includes(widgetType)) {\n // 级联选择不转译\n return deepClone(rawData);\n }\n\n const result = [];\n if (!!rawData && rawData.length > 0) {\n rawData.forEach(ri => {\n result.push({\n label: ri[labelKey],\n value: ri[valueKey]\n });\n });\n }\n\n return rawData; //result;\n}\n\n/**\n * 组装axios请求配置参数\n * @param arrayObj\n * @param DSV\n * @param VFR\n * @returns {{}}\n */\nexport function assembleAxiosConfig(arrayObj, DSV, VFR) {\n const result = {};\n if (!arrayObj || arrayObj.length <= 0) {\n return result;\n }\n\n arrayObj.map(ai => {\n if (ai.type === 'String') {\n result[ai.name] = String(ai.value);\n } else if (ai.type === 'Number') {\n result[ai.name] = Number(ai.value);\n } else if (ai.type === 'Boolean') {\n if (ai.value.toLowerCase() === 'false' || ai.value === '0') {\n result[ai.name] = false;\n } else if (ai.value.toLowerCase() === 'true' || ai.value === '1') {\n result[ai.name] = true;\n } else {\n result[ai.name] = null;\n }\n } else if (ai.type === 'Variable') {\n result[ai.name] = eval(ai.value);\n }\n });\n\n /* 加入如下两行日志打印代码,是为了防止编译打包时DSV、VFR参数被剔除!! begin */\n /* DSV、VFR入参没有在本函数中直接使用到,但在eval表达式中可能被使用到,故需确保DSV、VFR参数始终存在!! */\n console.log('test DSV: ', DSV);\n console.log('test VFR: ', VFR);\n /* 加入如下两行日志打印代码,是为了防止编译打包时DSV、VFR入参会被剔除!! end */\n\n return result;\n}\n\nfunction buildRequestConfig(dataSource, DSV, VFR, isSandbox) {\n const config = {};\n if (dataSource.requestURLType === 'String') {\n config.url = dataSource.requestURL;\n } else {\n config.url = eval(dataSource.requestURL);\n }\n config.method = dataSource.requestMethod;\n\n config.headers = assembleAxiosConfig(dataSource.headers, DSV, VFR);\n config.params = assembleAxiosConfig(dataSource.params, DSV, VFR);\n config.data = assembleAxiosConfig(dataSource.data, DSV, VFR);\n\n const chFn = new Function('config', 'isSandbox', 'DSV', 'VFR', dataSource.configHandlerCode);\n return chFn.call(null, config, isSandbox, DSV, VFR);\n}\n\nexport function getDSByName(formConfig, dsName) {\n let resultDS = null;\n if (!!dsName && !!formConfig.dataSources) {\n formConfig.dataSources.forEach(ds => {\n if (ds.uniqueName === dsName) {\n resultDS = ds;\n }\n });\n }\n\n return resultDS;\n}\n"],"names":["isNull","value","generateId","deepClone","origin","cloneDeep","overwriteObj","obj1","obj2","prop","insertCustomCssToHead","cssCode","formId","head","newStyle","insertGlobalFunctionsToHtml","functionsCode","bodyEle","newScriptEle","traverseFieldWidgets","widgetList","handler","parent","staticWidgetsIncluded","w","col","row","cell","tab","traverseContainerWidgets","handleWidgetForTraverse","widget","traverseFieldWidgetsOfContainer","con","cw","getAllFieldWidgets","result","getAllContainerWidgets","getContainerWidgetByName","containerName","foundContainer","copyToClipboard","content","clickEvent","$message","successMsg","errorMsg","clipboard","Clipboard","getDefaultFormConfig","formCode","getLocat","cloneFormConfigWithoutEventHandler","formConfig","newFC","translateOptionItems","rawData","widgetType","labelKey","valueKey","ri","getDSByName","dsName","resultDS","ds"],"mappings":"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"}
|