@kp-ui/lowcode 2.16.0-alpha.14 → 2.16.0-alpha.16

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kp-ui/lowcode",
3
- "version": "2.16.0-alpha.14",
3
+ "version": "2.16.0-alpha.16",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -1,8 +1,8 @@
1
- import { defineComponent as _, ref as C, computed as t, onMounted as M, createBlock as y, openBlock as F, unref as w, withKeys as D, normalizeClass as b, withCtx as E, createVNode as L } from "vue";
2
- import { Form as $ } from "ant-design-vue";
3
- import h from "../form-render/RenderWigetList.vue.js";
4
- import { useEmitter as k } from "../../utils/useEmitter.js";
5
- const j = /* @__PURE__ */ _({
1
+ import { defineComponent as x, ref as _, computed as t, onMounted as v, createBlock as g, openBlock as C, unref as y, withKeys as F, normalizeClass as w, withCtx as b, createVNode as h } from "vue";
2
+ import { Form as E } from "ant-design-vue";
3
+ import L from "../form-render/RenderWigetList.vue.js";
4
+ import { useEmitter as M } from "../../utils/useEmitter.js";
5
+ const j = /* @__PURE__ */ x({
6
6
  __name: "FormContainer",
7
7
  props: {
8
8
  context: {
@@ -11,39 +11,32 @@ const j = /* @__PURE__ */ _({
11
11
  }
12
12
  },
13
13
  emits: ["form-submit", "form-cancel"],
14
- setup(l, { expose: s, emit: K }) {
15
- const e = l, a = C(), { emit$: m, on$: i, off$: u } = k(), r = t({
16
- get: () => e.context.formDataModel.value,
17
- set: (o) => {
18
- e.context.formDataModel.value = o;
19
- }
20
- }), c = t(() => e.context.readModeFlag.value), d = t(() => e.context.formConfig.value), f = t(() => e.context.widgetList.value), p = t(() => e.context.labelPosition.value), v = t(() => e.context.customClass.value), x = () => {
14
+ setup(n, { expose: a, emit: $ }) {
15
+ const e = n, r = _(), { emit$: l, on$: s, off$: m } = M(), i = t(() => e.context.readModeFlag.value), c = t(() => e.context.formConfig.value), u = t(() => e.context.widgetList.value), d = t(() => e.context.labelPosition.value), f = t(() => e.context.customClass.value), p = () => {
21
16
  var o;
22
- ((o = d.value) == null ? void 0 : o.isEnterSubmit) === 1 && e.context.onFormUpdate();
17
+ ((o = c.value) == null ? void 0 : o.isEnterSubmit) === 1 && e.context.onFormUpdate();
23
18
  };
24
- return M(() => {
25
- }), s({
26
- renderForm: a,
27
- off$: u,
28
- on$: i,
29
- emit$: m
30
- }), (o, n) => (F(), y(w($), {
19
+ return v(() => {
20
+ }), a({
21
+ renderForm: r,
22
+ off$: m,
23
+ on$: s,
24
+ emit$: l
25
+ }), (o, k) => (C(), g(y(E), {
31
26
  ref_key: "renderForm",
32
- ref: a,
33
- layout: p.value,
34
- class: b(["render-form", "tpf-form", v.value, c.value ? "readonly-mode-form" : ""]),
27
+ ref: r,
28
+ layout: d.value,
29
+ class: w(["render-form", "tpf-form", f.value, i.value ? "readonly-mode-form" : ""]),
35
30
  scrollToFirstError: !0,
36
31
  validateOnRuleChange: !1,
37
- model: r.value,
38
- onKeydown: D(x, ["enter"])
32
+ model: e.context.formDataModel,
33
+ onKeydown: F(p, ["enter"])
39
34
  }, {
40
- default: E(() => [
41
- L(h, {
35
+ default: b(() => [
36
+ h(L, {
42
37
  parentWidget: null,
43
- widgetList: f.value,
44
- formDataModel: r.value,
45
- "onUpdate:formDataModel": n[0] || (n[0] = (g) => r.value = g)
46
- }, null, 8, ["widgetList", "formDataModel"])
38
+ widgetList: u.value
39
+ }, null, 8, ["widgetList"])
47
40
  ]),
48
41
  _: 1
49
42
  }, 8, ["layout", "class", "model"]));
@@ -1 +1 @@
1
- {"version":3,"file":"FormContainer.vue.js","sources":["../../../../src/components/FormRender/FormContainer.vue"],"sourcesContent":["<template>\n <Form\n ref=\"renderForm\"\n :layout=\"labelPosition\"\n :class=\"['render-form', 'tpf-form', customClass, readModeFlag ? 'readonly-mode-form' : '']\"\n :scrollToFirstError=\"true\"\n :validateOnRuleChange=\"false\"\n :model=\"formDataModel\"\n @keydown.enter=\"handleEnterKey\"\n >\n <RenderWigetList\n :parentWidget=\"null\"\n :widgetList=\"widgetList\"\n v-model:formDataModel=\"formDataModel\"\n />\n </Form>\n</template>\n\n<script lang=\"ts\" setup>\n import { computed, ref, onMounted, type PropType } from 'vue';\n import { Form } from 'ant-design-vue';\n import RenderWigetList from '@/components/form-render/RenderWigetList.vue';\n import { useEmitter } from '@/utils/useEmitter';\n\n /**\n * 表单容器组件\n * 负责渲染表单及其子组件\n */\n\n const props = defineProps({\n context: {\n type: Object as PropType<any>,\n required: true\n }\n });\n\n const emit = defineEmits(['form-submit', 'form-cancel']);\n\n // 组件引用\n const renderForm = ref();\n const { emit$, on$, off$ } = useEmitter();\n\n // 从上下文中获取数据\n const formDataModel = computed({\n get: () => props.context.formDataModel.value,\n set: val => {\n props.context.formDataModel.value = val;\n }\n });\n const readModeFlag = computed(() => props.context.readModeFlag.value);\n const formConfig = computed(() => props.context.formConfig.value);\n const widgetList = computed(() => props.context.widgetList.value);\n const labelPosition = computed(() => props.context.labelPosition.value);\n const customClass = computed(() => props.context.customClass.value);\n\n /**\n * 处理回车键事件\n */\n const handleEnterKey = () => {\n if (formConfig.value?.isEnterSubmit === 1) {\n props.context.onFormUpdate();\n }\n };\n\n onMounted(() => {});\n\n // 暴露方法\n defineExpose({\n renderForm,\n off$,\n on$,\n emit$\n });\n</script>\n"],"names":["props","__props","renderForm","ref","emit$","on$","off$","useEmitter","formDataModel","computed","val","readModeFlag","formConfig","widgetList","labelPosition","customClass","handleEnterKey","_a","onMounted","__expose","_createBlock","_unref","Form","_normalizeClass","_createVNode","RenderWigetList","$event"],"mappings":";;;;;;;;;;;;;;AA6BI,UAAMA,IAAQC,GAURC,IAAaC,EAAA,GACb,EAAE,OAAAC,GAAO,KAAAC,GAAK,MAAAC,EAAA,IAASC,EAAA,GAGvBC,IAAgBC,EAAS;AAAA,MAC3B,KAAK,MAAMT,EAAM,QAAQ,cAAc;AAAA,MACvC,KAAK,CAAAU,MAAO;AACR,QAAAV,EAAM,QAAQ,cAAc,QAAQU;AAAA,MACxC;AAAA,IAAA,CACH,GACKC,IAAeF,EAAS,MAAMT,EAAM,QAAQ,aAAa,KAAK,GAC9DY,IAAaH,EAAS,MAAMT,EAAM,QAAQ,WAAW,KAAK,GAC1Da,IAAaJ,EAAS,MAAMT,EAAM,QAAQ,WAAW,KAAK,GAC1Dc,IAAgBL,EAAS,MAAMT,EAAM,QAAQ,cAAc,KAAK,GAChEe,IAAcN,EAAS,MAAMT,EAAM,QAAQ,YAAY,KAAK,GAK5DgB,IAAiB,MAAM;;AACzB,QAAIC,IAAAL,EAAW,UAAX,gBAAAK,EAAkB,mBAAkB,KACpCjB,EAAM,QAAQ,aAAA;AAAA,IAEtB;AAEA,WAAAkB,EAAU,MAAM;AAAA,IAAC,CAAC,GAGlBC,EAAa;AAAA,MACT,YAAAjB;AAAA,MACA,MAAAI;AAAA,MACA,KAAAD;AAAA,MACA,OAAAD;AAAA,IAAA,CACH,mBAvEDgB,EAcOC,EAAAC,CAAA,GAAA;AAAA,eAbC;AAAA,MAAJ,KAAIpB;AAAA,MACH,QAAQY,EAAA;AAAA,MACR,OAAKS,EAAA,CAAA,eAAA,YAA8BR,EAAA,OAAaJ,EAAA,QAAY,uBAAA,EAAA,CAAA;AAAA,MAC5D,oBAAoB;AAAA,MACpB,sBAAsB;AAAA,MACtB,OAAOH,EAAA;AAAA,MACP,aAAeQ,GAAc,CAAA,OAAA,CAAA;AAAA,IAAA;iBAE9B,MAIE;AAAA,QAJFQ,EAIEC,GAAA;AAAA,UAHG,cAAc;AAAA,UACd,YAAYZ,EAAA;AAAA,UACL,eAAeL,EAAA;AAAA,2DAAAA,EAAa,QAAAkB;AAAA,QAAA;;;;;;"}
1
+ {"version":3,"file":"FormContainer.vue.js","sources":["../../../../src/components/FormRender/FormContainer.vue"],"sourcesContent":["<template>\n <Form\n ref=\"renderForm\"\n :layout=\"labelPosition\"\n :class=\"['render-form', 'tpf-form', customClass, readModeFlag ? 'readonly-mode-form' : '']\"\n :scrollToFirstError=\"true\"\n :validateOnRuleChange=\"false\"\n :model=\"props.context.formDataModel\"\n @keydown.enter=\"handleEnterKey\"\n >\n <RenderWigetList :parentWidget=\"null\" :widgetList=\"widgetList\" />\n </Form>\n</template>\n\n<script lang=\"ts\" setup>\n import { computed, ref, onMounted, type PropType } from 'vue';\n import { Form } from 'ant-design-vue';\n import RenderWigetList from '@/components/form-render/RenderWigetList.vue';\n import { useEmitter } from '@/utils/useEmitter';\n\n /**\n * 表单容器组件\n * 负责渲染表单及其子组件\n */\n\n const props = defineProps({\n context: {\n type: Object as PropType<any>,\n required: true\n }\n });\n\n const emit = defineEmits(['form-submit', 'form-cancel']);\n\n // 组件引用\n const renderForm = ref();\n const { emit$, on$, off$ } = useEmitter();\n\n const readModeFlag = computed(() => props.context.readModeFlag.value);\n const formConfig = computed(() => props.context.formConfig.value);\n const widgetList = computed(() => props.context.widgetList.value);\n const labelPosition = computed(() => props.context.labelPosition.value);\n const customClass = computed(() => props.context.customClass.value);\n\n /**\n * 处理回车键事件\n */\n const handleEnterKey = () => {\n if (formConfig.value?.isEnterSubmit === 1) {\n props.context.onFormUpdate();\n }\n };\n\n onMounted(() => {});\n\n // 暴露方法\n defineExpose({\n renderForm,\n off$,\n on$,\n emit$\n });\n</script>\n"],"names":["props","__props","renderForm","ref","emit$","on$","off$","useEmitter","readModeFlag","computed","formConfig","widgetList","labelPosition","customClass","handleEnterKey","_a","onMounted","__expose","_createBlock","_unref","Form","_normalizeClass","_createVNode","RenderWigetList"],"mappings":";;;;;;;;;;;;;;AAyBI,UAAMA,IAAQC,GAURC,IAAaC,EAAA,GACb,EAAE,OAAAC,GAAO,KAAAC,GAAK,MAAAC,EAAA,IAASC,EAAA,GAEvBC,IAAeC,EAAS,MAAMT,EAAM,QAAQ,aAAa,KAAK,GAC9DU,IAAaD,EAAS,MAAMT,EAAM,QAAQ,WAAW,KAAK,GAC1DW,IAAaF,EAAS,MAAMT,EAAM,QAAQ,WAAW,KAAK,GAC1DY,IAAgBH,EAAS,MAAMT,EAAM,QAAQ,cAAc,KAAK,GAChEa,IAAcJ,EAAS,MAAMT,EAAM,QAAQ,YAAY,KAAK,GAK5Dc,IAAiB,MAAM;;AACzB,QAAIC,IAAAL,EAAW,UAAX,gBAAAK,EAAkB,mBAAkB,KACpCf,EAAM,QAAQ,aAAA;AAAA,IAEtB;AAEA,WAAAgB,EAAU,MAAM;AAAA,IAAC,CAAC,GAGlBC,EAAa;AAAA,MACT,YAAAf;AAAA,MACA,MAAAI;AAAA,MACA,KAAAD;AAAA,MACA,OAAAD;AAAA,IAAA,CACH,mBA5DDc,EAUOC,EAAAC,CAAA,GAAA;AAAA,eATC;AAAA,MAAJ,KAAIlB;AAAA,MACH,QAAQU,EAAA;AAAA,MACR,OAAKS,EAAA,CAAA,eAAA,YAA8BR,EAAA,OAAaL,EAAA,QAAY,uBAAA,EAAA,CAAA;AAAA,MAC5D,oBAAoB;AAAA,MACpB,sBAAsB;AAAA,MACtB,OAAOR,EAAM,QAAQ;AAAA,MACrB,aAAec,GAAc,CAAA,OAAA,CAAA;AAAA,IAAA;iBAE9B,MAAiE;AAAA,QAAjEQ,EAAiEC,GAAA;AAAA,UAA/C,cAAc;AAAA,UAAO,YAAYZ,EAAA;AAAA,QAAA;;;;;;"}
@@ -1,90 +1,90 @@
1
- import { ref as l, provide as c, computed as m, watchEffect as ue, onMounted as me, nextTick as de } from "vue";
1
+ import { ref as l, provide as f, computed as m, watchEffect as ue, onMounted as me, nextTick as de } from "vue";
2
2
  import { useFormValidation as B } from "./formValidation.js";
3
3
  import { insertCustomCssToHead as ve, insertGlobalFunctionsToHtml as ge, getContainerWidgetByName as H, cloneFormConfigWithoutEventHandler as pe, generateId as Ce } from "../../utils/util.js";
4
4
  import { set as Fe, cloneDeep as we } from "lodash-es";
5
5
  import { message as J } from "ant-design-vue";
6
6
  import { useI18n as he } from "../../utils/i18n.js";
7
7
  import { getUuidKey as xe } from "@kp-ui/tool";
8
- import { useComRef as De, useRef as Re, useExecFunction as Le } from "tmgc2-share";
9
- import be from "../form-render/dynamic-dialog.vue.js";
8
+ import { useComRef as Re, useRef as De, useExecFunction as ye } from "tmgc2-share";
9
+ import Le from "../form-render/dynamic-dialog.vue.js";
10
10
  /* empty css */
11
- import { useEmitter as ye } from "../../utils/useEmitter.js";
11
+ import { useEmitter as be } from "../../utils/useEmitter.js";
12
12
  import { useAppRef as Me } from "../form-designer/useAppRef.js";
13
- const _e = ({ renderForm: x, props: a }) => {
14
- const { formJson: D } = a, p = De(be), { i18nt: d } = he(), [R, P] = Re(!1), C = ye(), v = l(), s = l({}), L = l(!1), F = l(/* @__PURE__ */ new Map()), b = l({}), T = l(), w = Symbol("formWidget");
15
- c("refList", F), c("getFormConfig", () => o.value), c("formData", s), c("getReadMode", () => R.value), c("designState", !1);
16
- const y = l(), { executeFunction: $, context: g, execHttpFunction: M } = Le(), { getFormRef: h, getWidgetRef: U, registerToRefList: _ } = Me(F, w), o = m(() => {
13
+ const Ue = ({ renderForm: x, props: i }) => {
14
+ const { formJson: R } = i, p = Re(Le), { i18nt: d } = he(), [D, P] = De(!1), C = be(), v = l(), s = l({}), y = l(!1), F = l(/* @__PURE__ */ new Map()), L = l({}), T = l(), w = Symbol("formWidget");
15
+ f("refList", F), f("getFormConfig", () => o.value), f("formData", s), f("getReadMode", () => D.value), f("designState", !1);
16
+ const b = l(), { executeFunction: $, context: g, execHttpFunction: M } = ye(), { getFormRef: h, getWidgetRef: k, registerToRefList: U } = Me(F, w), o = m(() => {
17
17
  var e;
18
18
  return ((e = v.value) == null ? void 0 : e.formConfig) || {};
19
19
  });
20
- c("formConfig", o), c("formWidgetId", w);
20
+ f("formConfig", o), f("formWidgetId", w);
21
21
  const W = m(() => {
22
22
  var e;
23
23
  return ((e = v.value) == null ? void 0 : e.widgetList) || [];
24
- }), j = m(() => {
24
+ }), _ = m(() => {
25
25
  var e;
26
26
  return ((e = o.value) == null ? void 0 : e.labelPosition) || "horizontal";
27
- }), q = (e) => {
27
+ }), j = (e) => {
28
28
  T.value = e;
29
- }, S = m(() => {
29
+ }, q = m(() => {
30
30
  var e;
31
31
  return (e = o.value) != null && e.labelWidth ? `${o.value.labelWidth}px` : "80px";
32
- }), k = m(() => {
32
+ }), S = m(() => {
33
33
  var e;
34
34
  return ((e = o.value) == null ? void 0 : e.customClass) || "";
35
35
  });
36
- let f = B(x);
36
+ let c = B(x);
37
37
  ue(() => {
38
- f = B(x);
38
+ c = B(x);
39
39
  });
40
40
  const V = async (e) => {
41
41
  console.log({ json: e }), v.value = e || { widgetList: [], formConfig: {} }, s.value = {}, await de(), re();
42
42
  }, z = () => s.value || {}, A = (e) => {
43
43
  e && Object.keys(e).forEach((t) => {
44
- t === "processingDescribe" && console.log(e[t]), Object.prototype.hasOwnProperty.call(s.value, t) && (s.value[t] = e[t]);
44
+ Object.prototype.hasOwnProperty.call(s.value, t) && (s.value[t] = e[t]);
45
45
  });
46
46
  }, G = (e) => {
47
- L.value = e;
47
+ y.value = e;
48
48
  }, K = () => {
49
- f.resetValidation();
49
+ c.resetValidation();
50
50
  }, Q = () => {
51
- f.clearValidate();
51
+ c.clearValidate();
52
52
  }, X = (e) => {
53
- y.value = e;
53
+ b.value = e;
54
54
  }, Y = () => {
55
- if (!a.parentForm)
55
+ if (!i.parentForm)
56
56
  return h();
57
- let e = a.parentForm;
57
+ let e = i.parentForm;
58
58
  for (; e.parentForm; )
59
59
  e = e.parentForm;
60
60
  return e;
61
61
  }, Z = (e, t = {}, r = {}) => {
62
62
  var I, O;
63
- const n = Y(), i = H((n == null ? void 0 : n.widgetList) || [], e) || H(W.value || [], e);
64
- if (i === null) {
63
+ const n = Y(), a = H((n == null ? void 0 : n.widgetList) || [], e) || H(W.value || [], e);
64
+ if (a === null) {
65
65
  J.error(d("render.hint.refNotFound") + e);
66
66
  return;
67
67
  }
68
- if (!e || i.type !== "vf-dialog") {
68
+ if (!e || a.type !== "vf-dialog") {
69
69
  J.error(d("render.hint.refNotFound") + e);
70
70
  return;
71
71
  }
72
72
  const u = {
73
- widgetList: we((i == null ? void 0 : i.widgetList) || []),
73
+ widgetList: we((a == null ? void 0 : a.widgetList) || []),
74
74
  formConfig: pe(((I = n == null ? void 0 : n.formConfig) == null ? void 0 : I.value) || {})
75
- }, fe = xe();
76
- b.value = {
77
- options: i.options,
75
+ }, ce = xe();
76
+ L.value = {
77
+ options: a.options,
78
78
  formJson: u,
79
79
  formData: { ...t },
80
80
  optionData: n.optionData,
81
81
  globalDsv: n.globalDsv,
82
82
  parentFormRef: g.value,
83
83
  extraData: r,
84
- wrapperId: fe,
84
+ wrapperId: ce,
85
85
  vfCtx: { ...t }
86
86
  }, (O = p.value) == null || O.show();
87
- }, N = () => a.parentForm, ee = () => {
87
+ }, N = () => i.parentForm, ee = () => {
88
88
  var e;
89
89
  return (e = p.value) == null ? void 0 : e.getFormRef();
90
90
  }, te = () => {
@@ -93,14 +93,14 @@ const _e = ({ renderForm: x, props: a }) => {
93
93
  });
94
94
  }, oe = async () => {
95
95
  const e = o.value.serveList, t = await M(e.vformDetail, {
96
- vfCtx: a.vfCtx
96
+ vfCtx: i.vfCtx
97
97
  });
98
98
  return console.log("res: ", t), t;
99
99
  }, ne = async () => {
100
- if (!await f.validate()) throw new Error(d("表单验证失败"));
100
+ if (!await c.validate()) throw new Error(d("表单验证失败"));
101
101
  const t = o.value.serveList, r = await M(t.vformUpdate, {
102
102
  data: s.value,
103
- vfCtx: a.vfCtx
103
+ vfCtx: i.vfCtx
104
104
  });
105
105
  return console.log("res: ", r), r;
106
106
  }, re = () => {
@@ -111,7 +111,7 @@ const _e = ({ renderForm: x, props: a }) => {
111
111
  }, se = () => {
112
112
  const e = "vfRender" + Ce(), { cssCode: t, functions: r } = o.value;
113
113
  t && ve(t, e || ""), r && ge(r, e || "");
114
- }, ie = () => {
114
+ }, ae = () => {
115
115
  var t;
116
116
  const e = (t = g.value) == null ? void 0 : t.$router;
117
117
  e == null || e.replace({
@@ -120,32 +120,32 @@ const _e = ({ renderForm: x, props: a }) => {
120
120
  _t: Date.now()
121
121
  }
122
122
  });
123
- }, ae = (e, t) => {
124
- var n, i;
123
+ }, ie = (e, t) => {
124
+ var n, a;
125
125
  const r = (n = h().vfCtx) == null ? void 0 : n.goBack;
126
126
  if (typeof r == "function")
127
127
  r(e, t);
128
128
  else {
129
- const u = (i = g.value) == null ? void 0 : i.$router;
129
+ const u = (a = g.value) == null ? void 0 : a.$router;
130
130
  u == null || u.go(-1);
131
131
  }
132
- }, le = (e) => s.value[e], ce = () => a.vfCtx;
132
+ }, le = (e) => s.value[e], fe = () => i.vfCtx;
133
133
  me(() => {
134
- D && V(D), te(), se();
134
+ R && V(R), te(), se();
135
135
  });
136
136
  const E = {
137
137
  context: g,
138
138
  i18nt: d,
139
- goBack: ae,
140
- reload: ie,
141
- formValidator: f,
139
+ goBack: ie,
140
+ reload: ae,
141
+ formValidator: c,
142
142
  getFieldValue: le,
143
143
  resetValidation: K,
144
144
  clearValidate: Q,
145
- getVfCtx: ce,
145
+ getVfCtx: fe,
146
146
  getParentFormRef: N,
147
147
  getFormRef: h,
148
- getWidgetRef: U,
148
+ getWidgetRef: k,
149
149
  showDialog: Z,
150
150
  getFormData: z,
151
151
  getChildFormRef: ee,
@@ -156,34 +156,34 @@ const _e = ({ renderForm: x, props: a }) => {
156
156
  onFormDetail: oe,
157
157
  onFormUpdate: ne,
158
158
  formDataModel: s,
159
- isLoading: L,
160
- vfCtx: a.vfCtx,
159
+ isLoading: y,
160
+ vfCtx: i.vfCtx,
161
161
  // 计算属性
162
162
  formConfig: o,
163
163
  dynamicDialgRef: p,
164
- setChildFormRef: q,
164
+ setChildFormRef: j,
165
165
  setDialogOrDrawerRef: X
166
166
  };
167
167
  return {
168
168
  formWidgetId: w,
169
- registerToRefList: _,
170
- dialogOrDrawerRef: y,
169
+ registerToRefList: U,
170
+ dialogOrDrawerRef: b,
171
171
  emitter: C,
172
172
  // 状态
173
173
  formJsonObj: v,
174
- readModeFlag: R,
174
+ readModeFlag: D,
175
175
  // 引用
176
176
  widgetRefList: F,
177
177
  widgetList: W,
178
- labelPosition: j,
179
- labelWidth: S,
180
- customClass: k,
181
- dialogProps: b,
178
+ labelPosition: _,
179
+ labelWidth: q,
180
+ customClass: S,
181
+ dialogProps: L,
182
182
  expose: E,
183
183
  ...E
184
184
  };
185
185
  };
186
186
  export {
187
- _e as useFormContext
187
+ Ue as useFormContext
188
188
  };
189
189
  //# sourceMappingURL=useFormContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFormContext.js","sources":["../../../../src/components/FormRender/useFormContext.ts"],"sourcesContent":["import { computed, nextTick, onMounted, provide, ref, watchEffect } from 'vue';\nimport { useFormValidation } from './formValidation';\n\n/**\n * 表单上下文接口\n */\nimport { Widget } from '@/types/schema';\nimport {\n cloneFormConfigWithoutEventHandler,\n generateId,\n getContainerWidgetByName,\n insertCustomCssToHead,\n insertGlobalFunctionsToHtml\n} from '@/utils/util';\nimport { cloneDeep, set } from 'lodash-es';\nimport { message } from 'ant-design-vue';\nimport { useI18n } from '@/utils/i18n';\nimport { getUuidKey } from '@kp-ui/tool';\nimport { routerReloadStatus, useComRef, useExecFunction, useRef } from 'tmgc2-share';\nimport DynamicDialog from '../form-render/dynamic-dialog.vue';\nimport { useEmitter } from '@/utils/useEmitter';\nimport { useAppRef } from '../form-designer/useAppRef';\nexport interface FormRenderProps {\n vfCtx?: Record<string, any>;\n formJson?: any;\n formData?: Record<string, any>;\n optionData?: Record<string, any>;\n disabledMode?: boolean;\n renderConfig?: {\n languageName?: string;\n };\n globalDsv?: Record<string, any>;\n parentForm?: any;\n dynamicCreation?: boolean;\n debug?: boolean;\n}\n\n/**\n * 表单上下文配置\n */\nexport interface FormContextOptions {\n props: FormRenderProps;\n renderForm: any;\n}\n\n/**\n * 创建表单上下文\n * @param options 表单上下文配置\n * @returns 表单上下文\n */\nexport const useFormContext = ({ renderForm, props }: FormContextOptions) => {\n const { formJson } = props;\n const dynamicDialgRef = useComRef(DynamicDialog);\n const { i18nt } = useI18n();\n const [readModeFlag, setReadMode] = useRef(false);\n\n const emitter = useEmitter();\n\n const formJsonObj = ref();\n // 状态变量\n const formDataModel = ref<Record<string, any>>({});\n const isLoading = ref(false);\n const widgetRefList = ref<Map<string, any>>(new Map());\n const dialogProps = ref({});\n const childFormRef = ref();\n\n const formWidgetId = Symbol('formWidget');\n\n // 提供给子组件的数据\n provide('refList', widgetRefList);\n provide('getFormConfig', () => formConfig.value);\n provide('formData', formDataModel);\n provide('getReadMode', () => readModeFlag.value);\n provide('designState', false); // 设计态标识\n\n const dialogOrDrawerRef = ref();\n\n const { executeFunction, context, execHttpFunction } = useExecFunction();\n const { getFormRef, getWidgetRef, registerToRefList } = useAppRef(widgetRefList, formWidgetId);\n\n // 计算属性\n const formConfig = computed(() => formJsonObj.value?.formConfig || {});\n\n provide('formConfig', formConfig);\n provide('formWidgetId', formWidgetId);\n\n const widgetList = computed(() => formJsonObj.value?.widgetList || []);\n const labelPosition = computed(() => {\n return formConfig.value?.labelPosition || 'horizontal';\n });\n\n const setChildFormRef = chid => {\n childFormRef.value = chid;\n };\n\n const labelWidth = computed(() => {\n return formConfig.value?.labelWidth ? `${formConfig.value.labelWidth}px` : '80px';\n });\n\n const customClass = computed(() => {\n return formConfig.value?.customClass || '';\n });\n\n // 初始化表单验证器\n let formValidator = useFormValidation(renderForm);\n\n // 监听 widgetList 变化,重新初始化验证器\n watchEffect(() => {\n formValidator = useFormValidation(renderForm);\n });\n\n /**\n * 设置表单JSON数据\n */\n const setFormJson = async (json: any) => {\n console.log({ json });\n\n formJsonObj.value = json || { widgetList: [], formConfig: {} };\n // 重新构建表单数据模型\n formDataModel.value = {};\n\n await nextTick();\n handleOnMounted();\n };\n\n /**\n * 获取表单数据\n */\n const getFormData = () => {\n return formDataModel.value || {};\n };\n\n /**\n * 设置表单数据\n */\n const setFormData = (data: Record<string, any>) => {\n if (!data) return;\n // 更新表单数据模型\n Object.keys(data).forEach(key => {\n if (key === 'processingDescribe') {\n console.log(data[key]);\n }\n if (Object.prototype.hasOwnProperty.call(formDataModel.value, key)) {\n formDataModel.value[key] = data[key];\n }\n });\n };\n\n /**\n * 设置加载状态\n */\n const setLoading = (loading: boolean) => {\n isLoading.value = loading;\n };\n\n /**\n * 重置表单验证\n */\n const resetValidation = () => {\n formValidator.resetValidation();\n };\n\n /**\n * 清除表单验证\n */\n const clearValidate = () => {\n formValidator.clearValidate();\n };\n\n const setDialogOrDrawerRef = (ddRef: any) => {\n dialogOrDrawerRef.value = ddRef;\n };\n\n /**\n * 当显示多级嵌套弹窗或抽屉时,获取最顶层VFormRender组件实例\n * @returns {object}\n */\n const getTopFormRef = () => {\n if (!props.parentForm) {\n return getFormRef();\n }\n\n let topFormRef = props.parentForm;\n while (topFormRef.parentForm) {\n topFormRef = topFormRef.parentForm;\n }\n\n return topFormRef;\n };\n\n /**\n * 显示弹窗表单,动态创建v-form-render组件,option-data、global-dsv等属性继承父级表单\n * @param dialogName\n * @param formData\n * @param extraData\n */\n const showDialog = (dialogName, formData = {}, extraData = {}) => {\n const topFormRef = getTopFormRef();\n const dialogCon = (getContainerWidgetByName(topFormRef?.widgetList || [], dialogName) ||\n getContainerWidgetByName(widgetList.value || [], dialogName)) as Widget | null;\n\n if (dialogCon === null) {\n message.error(i18nt('render.hint.refNotFound') + dialogName);\n return;\n }\n\n if (!dialogName || dialogCon.type !== 'vf-dialog') {\n message.error(i18nt('render.hint.refNotFound') + dialogName);\n return;\n }\n const dFormJson = {\n widgetList: cloneDeep(dialogCon?.widgetList || []),\n formConfig: cloneFormConfigWithoutEventHandler(topFormRef?.formConfig?.value || {})\n };\n const wrapperDivId = getUuidKey();\n dialogProps.value = {\n options: dialogCon.options,\n formJson: dFormJson,\n formData: { ...formData },\n optionData: topFormRef.optionData,\n globalDsv: topFormRef.globalDsv,\n parentFormRef: context.value,\n extraData: extraData,\n wrapperId: wrapperDivId,\n vfCtx: { ...formData }\n };\n\n dynamicDialgRef.value?.show();\n };\n /**\n * 获取父级VFormRender组件实例\n * @returns {object}\n */\n const getParentFormRef = () => {\n return props.parentForm;\n };\n\n const getChildFormRef = () => {\n return dynamicDialgRef.value?.getFormRef();\n };\n\n /**\n * 字段值变化事件处理器\n */\n const fieldChangeEventHandler = () => {\n emitter.off$('fieldChange');\n emitter.on$('fieldChange', ({ fieldName, value }) => {\n // 过滤掉错误值\n if (typeof fieldName !== 'undefined' && typeof value !== 'undefined') {\n set(formDataModel.value, fieldName, value);\n }\n });\n };\n\n const onFormDetail = async () => {\n const serveList = formConfig.value.serveList;\n const res = await execHttpFunction(serveList.vformDetail, {\n vfCtx: props.vfCtx\n });\n console.log('res: ', res);\n return res;\n };\n\n const onFormUpdate = async () => {\n const valid = await formValidator.validate();\n if (!valid) throw new Error(i18nt('表单验证失败'));\n\n const serveList = formConfig.value.serveList;\n const res = await execHttpFunction(serveList.vformUpdate, {\n data: formDataModel.value,\n vfCtx: props.vfCtx\n });\n console.log('res: ', res);\n return res;\n };\n\n const handleOnMounted = () => {\n if (formConfig.value?.onFormMounted) {\n console.log('onFormMounted: ');\n executeFunction({\n functionBody: formConfig.value?.onFormMounted\n });\n }\n };\n\n /**\n * 插入自定义样式和脚本\n * @param cssCode CSS代码\n * @param functions 自定义函数\n * @param formId 表单ID\n */\n const insertCustomCode = () => {\n const formId = 'vfRender' + generateId();\n const { cssCode, functions } = formConfig.value;\n if (cssCode) {\n insertCustomCssToHead(cssCode, formId || '');\n }\n if (functions) {\n insertGlobalFunctionsToHtml(functions, formId || '');\n }\n };\n\n const reload = () => {\n const router = context.value?.$router;\n router?.replace({\n query: {\n ...router.currentRoute.value.query,\n _t: Date.now()\n }\n });\n };\n\n const goBack = (reloadStatus?: routerReloadStatus, cb?: () => void) => {\n const goBack = getFormRef().vfCtx?.goBack;\n if (typeof goBack === 'function') {\n goBack(reloadStatus, cb);\n } else {\n const router = context.value?.$router;\n router?.go(-1);\n }\n };\n\n const getFieldValue = (field: string) => {\n return formDataModel.value[field];\n };\n\n const getVfCtx = () => {\n return props.vfCtx;\n };\n\n onMounted(() => {\n if (formJson) {\n setFormJson(formJson);\n }\n fieldChangeEventHandler();\n insertCustomCode();\n });\n\n const expose = {\n context,\n i18nt,\n goBack,\n reload,\n formValidator,\n getFieldValue,\n resetValidation,\n clearValidate,\n getVfCtx,\n getParentFormRef,\n getFormRef,\n getWidgetRef,\n showDialog,\n getFormData,\n getChildFormRef,\n setFormData,\n setReadMode,\n setFormJson,\n setLoading,\n onFormDetail,\n onFormUpdate,\n formDataModel,\n isLoading,\n vfCtx: props.vfCtx,\n // 计算属性\n formConfig,\n dynamicDialgRef,\n setChildFormRef,\n setDialogOrDrawerRef\n };\n\n return {\n formWidgetId,\n registerToRefList,\n dialogOrDrawerRef,\n\n emitter,\n // 状态\n formJsonObj,\n readModeFlag,\n // 引用\n widgetRefList,\n\n widgetList,\n labelPosition,\n labelWidth,\n customClass,\n dialogProps,\n\n expose,\n ...expose\n };\n};\n"],"names":["useFormContext","renderForm","props","formJson","dynamicDialgRef","useComRef","DynamicDialog","i18nt","useI18n","readModeFlag","setReadMode","useRef","emitter","useEmitter","formJsonObj","ref","formDataModel","isLoading","widgetRefList","dialogProps","childFormRef","formWidgetId","provide","formConfig","dialogOrDrawerRef","executeFunction","context","execHttpFunction","useExecFunction","getFormRef","getWidgetRef","registerToRefList","useAppRef","computed","_a","widgetList","labelPosition","setChildFormRef","chid","labelWidth","customClass","formValidator","useFormValidation","watchEffect","setFormJson","json","nextTick","handleOnMounted","getFormData","setFormData","data","key","setLoading","loading","resetValidation","clearValidate","setDialogOrDrawerRef","ddRef","getTopFormRef","topFormRef","showDialog","dialogName","formData","extraData","dialogCon","getContainerWidgetByName","message","dFormJson","cloneDeep","cloneFormConfigWithoutEventHandler","wrapperDivId","getUuidKey","_b","getParentFormRef","getChildFormRef","fieldChangeEventHandler","fieldName","value","set","onFormDetail","serveList","res","onFormUpdate","insertCustomCode","formId","generateId","cssCode","functions","insertCustomCssToHead","insertGlobalFunctionsToHtml","reload","router","goBack","reloadStatus","cb","getFieldValue","field","getVfCtx","onMounted","expose"],"mappings":"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"}
1
+ {"version":3,"file":"useFormContext.js","sources":["../../../../src/components/FormRender/useFormContext.ts"],"sourcesContent":["import { computed, nextTick, onMounted, provide, ref, watchEffect } from 'vue';\nimport { useFormValidation } from './formValidation';\n\n/**\n * 表单上下文接口\n */\nimport { Widget } from '@/types/schema';\nimport {\n cloneFormConfigWithoutEventHandler,\n generateId,\n getContainerWidgetByName,\n insertCustomCssToHead,\n insertGlobalFunctionsToHtml\n} from '@/utils/util';\nimport { cloneDeep, set } from 'lodash-es';\nimport { message } from 'ant-design-vue';\nimport { useI18n } from '@/utils/i18n';\nimport { getUuidKey } from '@kp-ui/tool';\nimport { routerReloadStatus, useComRef, useExecFunction, useRef } from 'tmgc2-share';\nimport DynamicDialog from '../form-render/dynamic-dialog.vue';\nimport { useEmitter } from '@/utils/useEmitter';\nimport { useAppRef } from '../form-designer/useAppRef';\nexport interface FormRenderProps {\n vfCtx?: Record<string, any>;\n formJson?: any;\n formData?: Record<string, any>;\n optionData?: Record<string, any>;\n disabledMode?: boolean;\n renderConfig?: {\n languageName?: string;\n };\n globalDsv?: Record<string, any>;\n parentForm?: any;\n dynamicCreation?: boolean;\n debug?: boolean;\n}\n\n/**\n * 表单上下文配置\n */\nexport interface FormContextOptions {\n props: FormRenderProps;\n renderForm: any;\n}\n\n/**\n * 创建表单上下文\n * @param options 表单上下文配置\n * @returns 表单上下文\n */\nexport const useFormContext = ({ renderForm, props }: FormContextOptions) => {\n const { formJson } = props;\n const dynamicDialgRef = useComRef(DynamicDialog);\n const { i18nt } = useI18n();\n const [readModeFlag, setReadMode] = useRef(false);\n\n const emitter = useEmitter();\n\n const formJsonObj = ref();\n // 状态变量\n const formDataModel = ref<Record<string, any>>({});\n const isLoading = ref(false);\n const widgetRefList = ref<Map<string, any>>(new Map());\n const dialogProps = ref({});\n const childFormRef = ref();\n\n const formWidgetId = Symbol('formWidget');\n\n // 提供给子组件的数据\n provide('refList', widgetRefList);\n provide('getFormConfig', () => formConfig.value);\n provide('formData', formDataModel);\n provide('getReadMode', () => readModeFlag.value);\n provide('designState', false); // 设计态标识\n\n const dialogOrDrawerRef = ref();\n\n const { executeFunction, context, execHttpFunction } = useExecFunction();\n const { getFormRef, getWidgetRef, registerToRefList } = useAppRef(widgetRefList, formWidgetId);\n\n // 计算属性\n const formConfig = computed(() => formJsonObj.value?.formConfig || {});\n\n provide('formConfig', formConfig);\n provide('formWidgetId', formWidgetId);\n\n const widgetList = computed(() => formJsonObj.value?.widgetList || []);\n const labelPosition = computed(() => {\n return formConfig.value?.labelPosition || 'horizontal';\n });\n\n const setChildFormRef = chid => {\n childFormRef.value = chid;\n };\n\n const labelWidth = computed(() => {\n return formConfig.value?.labelWidth ? `${formConfig.value.labelWidth}px` : '80px';\n });\n\n const customClass = computed(() => {\n return formConfig.value?.customClass || '';\n });\n\n // 初始化表单验证器\n let formValidator = useFormValidation(renderForm);\n\n // 监听 widgetList 变化,重新初始化验证器\n watchEffect(() => {\n formValidator = useFormValidation(renderForm);\n });\n\n /**\n * 设置表单JSON数据\n */\n const setFormJson = async (json: any) => {\n console.log({ json });\n\n formJsonObj.value = json || { widgetList: [], formConfig: {} };\n // 重新构建表单数据模型\n formDataModel.value = {};\n\n await nextTick();\n handleOnMounted();\n };\n\n /**\n * 获取表单数据\n */\n const getFormData = () => {\n return formDataModel.value || {};\n };\n\n /**\n * 设置表单数据\n */\n const setFormData = (data: Record<string, any>) => {\n if (!data) return;\n // 更新表单数据模型\n Object.keys(data).forEach(key => {\n if (Object.prototype.hasOwnProperty.call(formDataModel.value, key)) {\n formDataModel.value[key] = data[key];\n }\n });\n };\n\n /**\n * 设置加载状态\n */\n const setLoading = (loading: boolean) => {\n isLoading.value = loading;\n };\n\n /**\n * 重置表单验证\n */\n const resetValidation = () => {\n formValidator.resetValidation();\n };\n\n /**\n * 清除表单验证\n */\n const clearValidate = () => {\n formValidator.clearValidate();\n };\n\n const setDialogOrDrawerRef = (ddRef: any) => {\n dialogOrDrawerRef.value = ddRef;\n };\n\n /**\n * 当显示多级嵌套弹窗或抽屉时,获取最顶层VFormRender组件实例\n * @returns {object}\n */\n const getTopFormRef = () => {\n if (!props.parentForm) {\n return getFormRef();\n }\n\n let topFormRef = props.parentForm;\n while (topFormRef.parentForm) {\n topFormRef = topFormRef.parentForm;\n }\n\n return topFormRef;\n };\n\n /**\n * 显示弹窗表单,动态创建v-form-render组件,option-data、global-dsv等属性继承父级表单\n * @param dialogName\n * @param formData\n * @param extraData\n */\n const showDialog = (dialogName, formData = {}, extraData = {}) => {\n const topFormRef = getTopFormRef();\n const dialogCon = (getContainerWidgetByName(topFormRef?.widgetList || [], dialogName) ||\n getContainerWidgetByName(widgetList.value || [], dialogName)) as Widget | null;\n\n if (dialogCon === null) {\n message.error(i18nt('render.hint.refNotFound') + dialogName);\n return;\n }\n\n if (!dialogName || dialogCon.type !== 'vf-dialog') {\n message.error(i18nt('render.hint.refNotFound') + dialogName);\n return;\n }\n const dFormJson = {\n widgetList: cloneDeep(dialogCon?.widgetList || []),\n formConfig: cloneFormConfigWithoutEventHandler(topFormRef?.formConfig?.value || {})\n };\n const wrapperDivId = getUuidKey();\n dialogProps.value = {\n options: dialogCon.options,\n formJson: dFormJson,\n formData: { ...formData },\n optionData: topFormRef.optionData,\n globalDsv: topFormRef.globalDsv,\n parentFormRef: context.value,\n extraData: extraData,\n wrapperId: wrapperDivId,\n vfCtx: { ...formData }\n };\n\n dynamicDialgRef.value?.show();\n };\n /**\n * 获取父级VFormRender组件实例\n * @returns {object}\n */\n const getParentFormRef = () => {\n return props.parentForm;\n };\n\n const getChildFormRef = () => {\n return dynamicDialgRef.value?.getFormRef();\n };\n\n /**\n * 字段值变化事件处理器\n */\n const fieldChangeEventHandler = () => {\n emitter.off$('fieldChange');\n emitter.on$('fieldChange', ({ fieldName, value }) => {\n // 过滤掉错误值\n if (typeof fieldName !== 'undefined' && typeof value !== 'undefined') {\n set(formDataModel.value, fieldName, value);\n }\n });\n };\n\n const onFormDetail = async () => {\n const serveList = formConfig.value.serveList;\n const res = await execHttpFunction(serveList.vformDetail, {\n vfCtx: props.vfCtx\n });\n console.log('res: ', res);\n return res;\n };\n\n const onFormUpdate = async () => {\n const valid = await formValidator.validate();\n if (!valid) throw new Error(i18nt('表单验证失败'));\n\n const serveList = formConfig.value.serveList;\n const res = await execHttpFunction(serveList.vformUpdate, {\n data: formDataModel.value,\n vfCtx: props.vfCtx\n });\n console.log('res: ', res);\n return res;\n };\n\n const handleOnMounted = () => {\n if (formConfig.value?.onFormMounted) {\n console.log('onFormMounted: ');\n executeFunction({\n functionBody: formConfig.value?.onFormMounted\n });\n }\n };\n\n /**\n * 插入自定义样式和脚本\n * @param cssCode CSS代码\n * @param functions 自定义函数\n * @param formId 表单ID\n */\n const insertCustomCode = () => {\n const formId = 'vfRender' + generateId();\n const { cssCode, functions } = formConfig.value;\n if (cssCode) {\n insertCustomCssToHead(cssCode, formId || '');\n }\n if (functions) {\n insertGlobalFunctionsToHtml(functions, formId || '');\n }\n };\n\n const reload = () => {\n const router = context.value?.$router;\n router?.replace({\n query: {\n ...router.currentRoute.value.query,\n _t: Date.now()\n }\n });\n };\n\n const goBack = (reloadStatus?: routerReloadStatus, cb?: () => void) => {\n const goBack = getFormRef().vfCtx?.goBack;\n if (typeof goBack === 'function') {\n goBack(reloadStatus, cb);\n } else {\n const router = context.value?.$router;\n router?.go(-1);\n }\n };\n\n const getFieldValue = (field: string) => {\n return formDataModel.value[field];\n };\n\n const getVfCtx = () => {\n return props.vfCtx;\n };\n\n onMounted(() => {\n if (formJson) {\n setFormJson(formJson);\n }\n fieldChangeEventHandler();\n insertCustomCode();\n });\n\n const expose = {\n context,\n i18nt,\n goBack,\n reload,\n formValidator,\n getFieldValue,\n resetValidation,\n clearValidate,\n getVfCtx,\n getParentFormRef,\n getFormRef,\n getWidgetRef,\n showDialog,\n getFormData,\n getChildFormRef,\n setFormData,\n setReadMode,\n setFormJson,\n setLoading,\n onFormDetail,\n onFormUpdate,\n formDataModel,\n isLoading,\n vfCtx: props.vfCtx,\n // 计算属性\n formConfig,\n dynamicDialgRef,\n setChildFormRef,\n setDialogOrDrawerRef\n };\n\n return {\n formWidgetId,\n registerToRefList,\n dialogOrDrawerRef,\n\n emitter,\n // 状态\n formJsonObj,\n readModeFlag,\n // 引用\n widgetRefList,\n\n widgetList,\n labelPosition,\n labelWidth,\n customClass,\n dialogProps,\n\n expose,\n ...expose\n };\n};\n"],"names":["useFormContext","renderForm","props","formJson","dynamicDialgRef","useComRef","DynamicDialog","i18nt","useI18n","readModeFlag","setReadMode","useRef","emitter","useEmitter","formJsonObj","ref","formDataModel","isLoading","widgetRefList","dialogProps","childFormRef","formWidgetId","provide","formConfig","dialogOrDrawerRef","executeFunction","context","execHttpFunction","useExecFunction","getFormRef","getWidgetRef","registerToRefList","useAppRef","computed","_a","widgetList","labelPosition","setChildFormRef","chid","labelWidth","customClass","formValidator","useFormValidation","watchEffect","setFormJson","json","nextTick","handleOnMounted","getFormData","setFormData","data","key","setLoading","loading","resetValidation","clearValidate","setDialogOrDrawerRef","ddRef","getTopFormRef","topFormRef","showDialog","dialogName","formData","extraData","dialogCon","getContainerWidgetByName","message","dFormJson","cloneDeep","cloneFormConfigWithoutEventHandler","wrapperDivId","getUuidKey","_b","getParentFormRef","getChildFormRef","fieldChangeEventHandler","fieldName","value","set","onFormDetail","serveList","res","onFormUpdate","insertCustomCode","formId","generateId","cssCode","functions","insertCustomCssToHead","insertGlobalFunctionsToHtml","reload","router","goBack","reloadStatus","cb","getFieldValue","field","getVfCtx","onMounted","expose"],"mappings":"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"}