vap1 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/components/SearchBar/_register.d.ts +1 -1
  2. package/components/SearchBar/_register.js +1 -1
  3. package/components/Trees/COTree/COButton.js +1 -1
  4. package/components/Trees/COTree/COSelect.js +1 -1
  5. package/components/UForm/_input.d.ts +1 -1
  6. package/components/UForm/index.d.ts +2 -2
  7. package/hooks/useApiBase.d.ts +36 -1
  8. package/hooks/useApiBase.js +21 -10
  9. package/package.json +1 -1
  10. package/uform/FormEditor.d.ts +20 -3
  11. package/uform/FormEditor.js +5 -5
  12. package/uform/FormViewer.d.ts +10 -1
  13. package/uform/FormViewer.js +10 -1
  14. package/uform/hooks/useEditor.d.ts +5 -2
  15. package/uform/hooks/useEditor.js +33 -1
  16. package/uform/index.js +31 -21
  17. package/uform/panel/Editor/GroupEditor.d.ts +3 -1
  18. package/uform/panel/Editor/GroupEditor.js +8 -2
  19. package/uform/panel/Editor/ListEditor.d.ts +3 -1
  20. package/uform/panel/Editor/ListEditor.js +7 -1
  21. package/uform/panel/Editor/index.js +55 -14
  22. package/uform/panel/Items/Fields.d.ts +3 -0
  23. package/uform/panel/Items/Fields.js +42 -0
  24. package/uform/panel/Items/InputSelector.d.ts +6 -0
  25. package/uform/panel/Items/InputSelector.js +122 -0
  26. package/uform/panel/Items/Inputs.d.ts +4 -0
  27. package/uform/panel/Items/Inputs.js +38 -0
  28. package/uform/panel/Items/index.d.ts +2 -1
  29. package/uform/panel/Items/index.js +8 -28
  30. package/uform/panel/Propreties/_ItemBase.js +4 -1
  31. package/uform/plugins/index.js +1 -1
  32. package/uform/schema.d.ts +5 -1
  33. package/uform/utils/arr.d.ts +2 -2
  34. package/uform/utils/arr.js +6 -1
  35. package/utils/Renders/ApiGetRender.js +4 -4
  36. package/utils/Renders/ApiPostRender.js +2 -2
  37. package/utils/Renders/StringRender.d.ts +1 -1
  38. package/utils/Renders/_define.d.ts +5 -1
  39. package/utils/Renders/_define.js +12 -2
@@ -41,7 +41,7 @@ export type SearchFieldOptions = {
41
41
  /**
42
42
  * 字段个数, 默认为 1
43
43
  */
44
- filedNum?: number;
44
+ fieldNum?: number;
45
45
  /**
46
46
  * 默认占格 , 默认为 1
47
47
  */
@@ -4,7 +4,7 @@ exports.getSearchField = exports.registerSearchField = void 0;
4
4
  var _Support_1 = require("../../utils/_Support");
5
5
  var StringUtil_1 = require("../../utils/StringUtil");
6
6
  var _RegisterUtil_1 = require("../_RegisterUtil");
7
- var DEFAULT = { outside: false, filedNum: 1, defaultSpan: 1, };
7
+ var DEFAULT = { outside: false, fieldNum: 1, defaultSpan: 1, };
8
8
  var _C_SEARCH_FIELD = (0, _Support_1.globalDefault)('_C_SEARCH_FIELD', new Map());
9
9
  /**
10
10
  * @param type
@@ -66,7 +66,7 @@ var COButton = function (props) {
66
66
  var orgCodeRender = (0, react_1.useMemo)(function () { return utils_1.Renders.ApiPostRender({
67
67
  api: props.api || utils_1.GLOBAL.CONFIG.BASIC.ORG_API,
68
68
  nameField: props.titleField || utils_1.GLOBAL.CONFIG.BASIC.ORG_FIELDS[1],
69
- valueFiled: props.keyField || utils_1.GLOBAL.CONFIG.BASIC.ORG_FIELDS[0],
69
+ valueField: props.keyField || utils_1.GLOBAL.CONFIG.BASIC.ORG_FIELDS[0],
70
70
  render: function (info) {
71
71
  if (info.label)
72
72
  return react_1.default.createElement("span", { title: info.label }, info.label);
@@ -49,7 +49,7 @@ var SelectedTable = function (props) {
49
49
  var orgCodeRender = (0, react_1.useMemo)(function () { return utils_1.Renders.ApiPostRender({
50
50
  api: props.api || utils_1.GLOBAL.CONFIG.BASIC.ORG_API,
51
51
  nameField: props.titleField || utils_1.GLOBAL.CONFIG.BASIC.ORG_FIELDS[1],
52
- valueFiled: props.keyField || utils_1.GLOBAL.CONFIG.BASIC.ORG_FIELDS[0],
52
+ valueField: props.keyField || utils_1.GLOBAL.CONFIG.BASIC.ORG_FIELDS[0],
53
53
  render: function (info) {
54
54
  if (info.label)
55
55
  return react_1.default.createElement("span", { title: info.label }, info.label);
@@ -36,7 +36,7 @@ type ApiTableBuilderOptions = {
36
36
  /**
37
37
  * 支持连带返回的字段
38
38
  * 1. 字段为数据本身的字段,支持一至多个
39
- * 2. Field 配置里面,filed 参数
39
+ * 2. Field 配置里面,field 参数
40
40
  */
41
41
  itemFields: string[];
42
42
  /**
@@ -16,7 +16,7 @@ import type { ValidationRule } from 'antd/es/form/Form';
16
16
  * 2. 大于8个字段时,默认使用 common
17
17
  */
18
18
  export type UFormLayout = 'common' | 'simple' | 'compress';
19
- export type FieldDataType = 'string' | 'array' | 'object';
19
+ export type FieldDataType = 'string' | 'number' | 'boolean' | 'array' | 'object';
20
20
  /**
21
21
  * 分组展示的方式 default = 默认 | tabs = 标签 | collapse = 折叠风琴
22
22
  */
@@ -66,7 +66,7 @@ export type Link = {
66
66
  /**
67
67
  * 联动事件
68
68
  * 返回值为 string | number | boolean 时,改变目标field 的 value
69
- * 返回值为 LinkResult, 类型时,根据返回结果改变目标 filed 的 显示/置灰/选项集/值的状态
69
+ * 返回值为 LinkResult, 类型时,根据返回结果改变目标 field 的 显示/置灰/选项集/值的状态
70
70
  * 支持 返回 Promise 对象,返回Promise时,resolve也必须为一个LinkResult
71
71
  *
72
72
  * 参数
@@ -1,5 +1,10 @@
1
1
  import type { Key, PlainObject } from '../basetype';
2
2
  import type { ListInit, ApiListState, ListQueryState } from './_list';
3
+ type VList = {
4
+ list?: PlainObject[];
5
+ total?: number;
6
+ totalAcc?: number;
7
+ };
3
8
  /**
4
9
  * 自定义 单个 Api 的AOP行为
5
10
  *
@@ -13,15 +18,45 @@ import type { ListInit, ApiListState, ListQueryState } from './_list';
13
18
  *
14
19
  */
15
20
  export type AOP = {
21
+ /**
22
+ * 查询前,可修改请求参数
23
+ */
16
24
  beforeQuery?: (queryParam: PlainObject) => PlainObject;
17
- afterQuery?: (isSuccess: boolean, queryParam: PlainObject, response: PlainObject) => void;
25
+ /**
26
+ * 查询后,可自定义行为,也可修改响应结果,
27
+ */
28
+ afterQuery?: (isSuccess: boolean, queryParam: PlainObject, response: PlainObject) => void | VList;
29
+ /**
30
+ * 添加前,可修改请求参数
31
+ */
18
32
  beforeAdd?: (queryParam: PlainObject) => PlainObject;
33
+ /**
34
+ * 添加后,可自定义行为,如:清理缓存等
35
+ */
19
36
  afterAdd?: (isSuccess: boolean, data: PlainObject, response: PlainObject) => void;
37
+ /**
38
+ * 修改前,可修改请求参数
39
+ */
20
40
  beforeUpdate?: (queryParam: PlainObject) => PlainObject;
41
+ /**
42
+ * 修改后,可自定义行为,如:清理缓存等
43
+ */
21
44
  afterUpdate?: (isSuccess: boolean, data: PlainObject, response: PlainObject) => void;
45
+ /**
46
+ * 删除前,可修改请求参数
47
+ */
22
48
  beforeDelete?: (queryParam: PlainObject | PlainObject[] | Key | Key[]) => PlainObject | PlainObject[] | Key | Key[];
49
+ /**
50
+ * 删除后,可自定义行为,如:清理缓存等
51
+ */
23
52
  afterDelete?: (isSuccess: boolean, data: PlainObject | PlainObject[] | Key | Key[], response: PlainObject) => void;
53
+ /**
54
+ * 添加/修改 前,可修改请求参数
55
+ */
24
56
  beforeAll?: (queryParam: PlainObject) => PlainObject;
57
+ /**
58
+ * 添加/修改/删除 后,可自定义行为,如:清理缓存等
59
+ */
25
60
  afterAll?: (action: 'ADD' | 'UPDATE' | 'DELETE', isSuccess: boolean, data: PlainObject, response: PlainObject) => void;
26
61
  };
27
62
  export type ApiOption = ListInit & {
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
14
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
15
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -151,7 +162,7 @@ var useApiBase = function (config, state, doLoad, mode) {
151
162
  }
152
163
  }, [param, pageNo, pageSize]);
153
164
  var _query = function (param) { return __awaiter(void 0, void 0, void 0, function () {
154
- var _start, queryParam, response;
165
+ var _start, queryParam, response, rtnData;
155
166
  return __generator(this, function (_a) {
156
167
  switch (_a.label) {
157
168
  case 0:
@@ -160,22 +171,22 @@ var useApiBase = function (config, state, doLoad, mode) {
160
171
  return [4 /*yield*/, utils_1.Ajax.POST(config.api, queryParam)];
161
172
  case 1:
162
173
  response = _a.sent();
174
+ rtnData = null;
175
+ if (lodash_1.default.isFunction(AOP.afterQuery)) {
176
+ rtnData = AOP.afterQuery(response.code == '0', queryParam, response);
177
+ }
178
+ if (rtnData != null && lodash_1.default.isPlainObject(rtnData)) {
179
+ doLoad(__assign({ list: response.list || [], total: response.total || 0, totalAcc: response.totalAcc || response.total || 0, cost: Date.now() - _start, isQuerying: false }, rtnData));
180
+ return [2 /*return*/];
181
+ }
163
182
  if (response.code != '0') {
164
- doLoad({ isQuerying: false, cost: 0 }, function () {
165
- if (lodash_1.default.isFunction(AOP.afterQuery)) {
166
- AOP.afterQuery(false, queryParam, response);
167
- }
168
- });
183
+ doLoad({ isQuerying: false, cost: 0 });
169
184
  throw response;
170
185
  }
171
186
  doLoad({
172
187
  list: response.list, total: response.total, totalAcc: response.totalAcc || response.total,
173
188
  cost: Date.now() - _start,
174
189
  isQuerying: false
175
- }, function () {
176
- if (lodash_1.default.isFunction(AOP.afterQuery)) {
177
- AOP.afterQuery(true, queryParam, response);
178
- }
179
190
  });
180
191
  return [2 /*return*/];
181
192
  }
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"vap1","version":"0.3.2","description":"vap1, Both support MicroService and SAP FrameWork, Support IE>9","main":"index.js","author":"Xiang da","license":"ISC"}
1
+ {"name":"vap1","version":"0.3.3","description":"vap1, Both support MicroService and SAP FrameWork, Support IE>9","main":"index.js","author":"Xiang da","license":"ISC"}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { FormSchema } from './schema';
2
+ import type { FormSchema, FixField } from './schema';
3
3
  /**
4
4
  * TODO
5
5
  * 1. input-with-select
@@ -11,11 +11,28 @@ import type { FormSchema } from './schema';
11
11
  * 5. dtree-select
12
12
  * 6. 所有日期:日期格式设置
13
13
  * */
14
- type FormEditorProps = {
14
+ export type FormEditorProps = {
15
+ /**
16
+ * schema 数据,可以为 FormSchema 或 FormSchema序列化后的 JSON
17
+ */
15
18
  data?: string | FormSchema;
19
+ /**
20
+ * 表单名称
21
+ */
16
22
  name?: string;
23
+ /**
24
+ * 保存方法,
25
+ * isCtrls = true 时,代码使用快捷键保存
26
+ */
17
27
  onSave: (schema: string, isCtrlS?: boolean) => void;
28
+ /**
29
+ * 传 onBack 方法时,编辑器上会多出一个返回按钮
30
+ */
18
31
  onBack?: () => void;
32
+ /**
33
+ * 当传 fields 时,切换为字段模式
34
+ * 字段模式时,为字段选择,字段不可变
35
+ */
36
+ fields?: FixField[];
19
37
  };
20
38
  export declare const FormEditor: React.FC<FormEditorProps>;
21
- export {};
@@ -46,8 +46,8 @@ exports.FormEditor = void 0;
46
46
  var react_1 = __importStar(require("react"));
47
47
  var lodash_1 = __importDefault(require("lodash"));
48
48
  var index_1 = require("../index");
49
- var index_2 = __importDefault(require("./panel/Items/index"));
50
- var index_3 = __importDefault(require("./panel/Editor/index"));
49
+ var Items_1 = __importDefault(require("./panel/Items"));
50
+ var index_2 = __importDefault(require("./panel/Editor/index"));
51
51
  var useForm_1 = require("./hooks/useForm");
52
52
  var FormViewer_1 = require("./FormViewer");
53
53
  var CanvasProperties_1 = __importDefault(require("./panel/Propreties/CanvasProperties"));
@@ -57,7 +57,7 @@ var useEditor_1 = require("./hooks/useEditor");
57
57
  var FormViewer_2 = require("./FormViewer");
58
58
  var FormEditor = function (props) {
59
59
  var schema = (0, react_1.useMemo)(function () { return (0, FormViewer_2.initSchama)(props.data); }, [props.data]);
60
- var editor = (0, useEditor_1.useFormEditor)(schema);
60
+ var editor = (0, useEditor_1.useFormEditor)(schema, props.fields);
61
61
  var _a = __read((0, react_1.useState)(false), 2), open = _a[0], setOpen = _a[1];
62
62
  var save = function (isCtrlS) {
63
63
  if (isCtrlS === void 0) { isCtrlS = false; }
@@ -78,7 +78,7 @@ var FormEditor = function (props) {
78
78
  react_1.default.createElement(useEditor_1.FORM_EDITOR.Provider, { value: editor },
79
79
  react_1.default.createElement(index_1.Row, { className: 'uform-editor' },
80
80
  react_1.default.createElement(index_1.Col, { style: { width: 210, flexShrink: 0 } },
81
- react_1.default.createElement(index_2.default, null)),
81
+ react_1.default.createElement(Items_1.default, { fields: props.fields })),
82
82
  react_1.default.createElement(index_1.Col, { style: { flexGrow: 1 } },
83
83
  react_1.default.createElement("div", { className: 'panel-title' },
84
84
  "\u8868\u5355 ",
@@ -94,7 +94,7 @@ var FormEditor = function (props) {
94
94
  index_1.message.error('至少添加一个字段');
95
95
  }
96
96
  } }, "\u9884\u89C8"))),
97
- react_1.default.createElement(index_3.default, null)),
97
+ react_1.default.createElement(index_2.default, null)),
98
98
  react_1.default.createElement(index_1.Col, { style: { width: 320, flexShrink: 0 }, className: "uform-prperties" },
99
99
  react_1.default.createElement("div", { className: 'panel-title' },
100
100
  "\u5C5E\u6027",
@@ -1,7 +1,15 @@
1
1
  import type { FormSchema } from './schema';
2
2
  import type { RefAttributes, ForwardRefExoticComponent, FC } from 'react';
3
3
  import type { UModalProps, UFormRef, PlainObject } from '../index';
4
- type ModalProps = Pick<UModalProps, 'open' | 'onOk' | 'onCancel' | 'title' | 'data'>;
4
+ /**
5
+ * ˵���� �༭���� UFormϵ����� ����Ӧ��ϵ����
6
+ * InfoViewer �൱�� UInfo
7
+ * FormViewer �൱�� UForm
8
+ * FormModal �൱�� UFormModal
9
+ * InfoModal �൱�� UInfoModal
10
+ * FormInfoModal �൱�� UModal
11
+ */
12
+ type ModalProps = Pick<UModalProps, 'open' | 'onOk' | 'onCancel' | 'title' | 'data' | 'isEdit' | 'autoTitle'>;
5
13
  type FormViewProps = {
6
14
  schema: FormSchema | string;
7
15
  data?: PlainObject;
@@ -9,4 +17,5 @@ type FormViewProps = {
9
17
  export declare const initSchama: (data: string | FormSchema) => FormSchema;
10
18
  export declare const FormViewer: ForwardRefExoticComponent<FormViewProps & RefAttributes<UFormRef>>;
11
19
  export declare const FormModal: FC<FormViewProps & ModalProps>;
20
+ export declare const FormInfoModal: FC<FormViewProps & ModalProps>;
12
21
  export {};
@@ -37,7 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
38
  };
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.FormModal = exports.FormViewer = exports.initSchama = void 0;
40
+ exports.FormInfoModal = exports.FormModal = exports.FormViewer = exports.initSchama = void 0;
41
41
  var lodash_1 = __importDefault(require("lodash"));
42
42
  var react_1 = __importStar(require("react"));
43
43
  var index_1 = require("../index");
@@ -70,6 +70,10 @@ var _ModalRender = function (props) {
70
70
  modalProps.title = props.title || props.schema.title || '';
71
71
  return react_1.default.createElement(index_1.UFormModal, __assign({}, uformProps, modalProps, { data: props.data, open: props.open, onOk: props.onOk, onCancel: props.onCancel }));
72
72
  };
73
+ var _UModalRender = function (props) {
74
+ var uformProps = (0, react_1.useMemo)(function () { return (0, Convert_1.schemaToForm)(props.schema); }, [props]);
75
+ return react_1.default.createElement(index_1.UModal, __assign({}, props, uformProps));
76
+ };
73
77
  exports.FormViewer = (0, react_1.forwardRef)(function (props, ref) {
74
78
  var schema = (0, react_1.useMemo)(function () { return (0, exports.initSchama)(props.schema); }, [props.schema]);
75
79
  return react_1.default.createElement(_FormRender, { schema: schema, data: props.data, ref: ref });
@@ -79,3 +83,8 @@ var FormModal = function (props) {
79
83
  return react_1.default.createElement(_ModalRender, __assign({}, props, { schema: schema }));
80
84
  };
81
85
  exports.FormModal = FormModal;
86
+ var FormInfoModal = function (props) {
87
+ var schema = (0, react_1.useMemo)(function () { return (0, exports.initSchama)(props.schema); }, [props.schema]);
88
+ return react_1.default.createElement(_UModalRender, __assign({}, props, { schema: schema }));
89
+ };
90
+ exports.FormInfoModal = FormInfoModal;
@@ -1,11 +1,13 @@
1
1
  /// <reference types="react" />
2
- import type { FormGroup, FormItem, FormSchema, Cursor } from '../schema';
2
+ import type { FormGroup, FormItem, FormSchema, Cursor, FixField } from '../schema';
3
3
  type CurrentSelected = {
4
4
  group?: string;
5
5
  field?: string;
6
6
  };
7
7
  type FormEditorContext = {
8
8
  form: FormSchema;
9
+ fieldFixed: false | FixField[];
10
+ fieldUsed: Set<string>;
9
11
  selected: CurrentSelected;
10
12
  baseSpan: number;
11
13
  getForm: () => FormSchema;
@@ -19,10 +21,11 @@ type FormEditorContext = {
19
21
  getSelect: () => FormItem | FormGroup;
20
22
  sortField: (itemId: string, targetPos: any, groupId?: string) => void;
21
23
  addField: (type: string, pointer?: Cursor, groupId?: string) => void;
24
+ addFixedField: (field: FixField, pointer?: Cursor, groupId?: string) => void;
22
25
  setFormProperties: (param: Partial<FormSchema>) => void;
23
26
  setFieldProperties: (properties: string, value: any) => void;
24
27
  };
25
28
  export declare const FORM_EDITOR: import("react").Context<FormEditorContext>;
26
29
  export declare const useEditor: () => FormEditorContext;
27
- export declare const useFormEditor: (dataJson: FormSchema) => FormEditorContext;
30
+ export declare const useFormEditor: (dataJson: FormSchema, fixFields?: FixField[]) => FormEditorContext;
28
31
  export {};
@@ -49,8 +49,25 @@ exports.FORM_EDITOR = (0, react_1.createContext)(null);
49
49
  var useEditor = function () { return (0, react_1.useContext)(exports.FORM_EDITOR); };
50
50
  exports.useEditor = useEditor;
51
51
  var BASESPAN_MAP = new Map([['simple', 24], ['compress', 8], ['common', 12]]);
52
- var useFormEditor = function (dataJson) {
52
+ var useFormEditor = function (dataJson, fixFields) {
53
53
  var _a = __read((0, hooks_1.useSetState)(dataJson), 2), form = _a[0], setForm = _a[1];
54
+ var fieldFixed = (0, react_1.useMemo)(function () {
55
+ if (!lodash_1.default.isArray(fixFields) || fixFields.length == 0)
56
+ return false;
57
+ return fixFields;
58
+ }, [fixFields]);
59
+ var fieldUsed = (0, react_1.useMemo)(function () {
60
+ if (fieldFixed == false)
61
+ return null;
62
+ var used = new Set();
63
+ if (form.isGroup) {
64
+ form.fields.map(function (group) { return group.fields.map(function (field) { return used.add(field.field); }); });
65
+ }
66
+ else {
67
+ form.fields.map(function (field) { return used.add(field.field); });
68
+ }
69
+ return used;
70
+ }, [fieldFixed, form]);
54
71
  var FORM_REF = (0, react_1.useRef)(form);
55
72
  var layout = form.layout, isGroup = form.isGroup, fields = form.fields;
56
73
  (0, react_1.useLayoutEffect)(function () { FORM_REF.current = form; }, [form]);
@@ -65,6 +82,18 @@ var useFormEditor = function (dataJson) {
65
82
  return len >= 8 ? 12 : 24;
66
83
  }, [isGroup, layout, fields === null || fields === void 0 ? void 0 : fields.length]);
67
84
  // 添加字段
85
+ var addFixedField = function (field, temPosition, groupId) {
86
+ if (groupId) {
87
+ // setFields(insertInGroup(type, fields as FormGroup[], groupId, temPosition))
88
+ // } else {
89
+ // setFields(insertInList(type, fields as FormItem[], temPosition))
90
+ }
91
+ else {
92
+ console.log(field);
93
+ setFields((0, arr_1.insertInList)(field.type, fields, temPosition, field));
94
+ }
95
+ };
96
+ // 添加字段
68
97
  var addField = function (type, temPosition, groupId) {
69
98
  if (groupId) {
70
99
  setFields((0, arr_1.insertInGroup)(type, fields, groupId, temPosition));
@@ -163,6 +192,8 @@ var useFormEditor = function (dataJson) {
163
192
  // const getForm = useCallback(()=>{})
164
193
  return {
165
194
  form: form,
195
+ fieldFixed: fieldFixed,
196
+ fieldUsed: fieldUsed,
166
197
  selected: selected,
167
198
  baseSpan: baseSpan,
168
199
  getForm: function () { return FORM_REF.current; },
@@ -173,6 +204,7 @@ var useFormEditor = function (dataJson) {
173
204
  sortField: sortField,
174
205
  addGroup: addGroup,
175
206
  addField: addField,
207
+ addFixedField: addFixedField,
176
208
  setFormProperties: setForm,
177
209
  setFieldProperties: setFieldProperties,
178
210
  };
package/uform/index.js CHANGED
@@ -1,12 +1,6 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.registerCustom = exports.registerGroupPlugin = exports.registerFieldPlugin = exports.registerEditorPlugin = exports.FormModal = exports.FormViewer = exports.FormEditor = void 0;
7
- var react_1 = __importDefault(require("react"));
8
- var index_1 = require("../index");
9
- var lodash_1 = __importDefault(require("lodash"));
10
4
  var FormEditor_1 = require("./FormEditor");
11
5
  Object.defineProperty(exports, "FormEditor", { enumerable: true, get: function () { return FormEditor_1.FormEditor; } });
12
6
  var FormViewer_1 = require("./FormViewer");
@@ -18,18 +12,34 @@ Object.defineProperty(exports, "registerFieldPlugin", { enumerable: true, get: f
18
12
  Object.defineProperty(exports, "registerGroupPlugin", { enumerable: true, get: function () { return plugins_1.registerGroupPlugin; } });
19
13
  var register_1 = require("./inputs/register");
20
14
  Object.defineProperty(exports, "registerCustom", { enumerable: true, get: function () { return register_1.registerCustom; } });
21
- var picOptions = lodash_1.default.range(1, 17).map(function (key) { return ({ label: key, value: "/data/images/dashboard/".concat(key, ".png") }); });
22
- (0, register_1.registerCustom)({
23
- type: 'dashboard-cover',
24
- title: '快速图片选择',
25
- icon: 'text.png',
26
- Component: function () {
27
- var width = 144, height = 81;
28
- return react_1.default.createElement("div", null,
29
- react_1.default.createElement(index_1.Upload, { name: "file", withCredentials: true, listType: "picture", showUploadList: false, onChange: function () { }, accept: "image/*", className: 'upload-icon-empty', data: { namespace: 'app-data', } }, react_1.default.createElement("div", { style: { width: width, height: height, marginRight: 6, textAlign: 'center', paddingTop: 12, cursor: 'pointer', borderRadius: 4, marginBottom: 6, border: '1px solid rgb(24 144 255 / 24%)' } },
30
- react_1.default.createElement(index_1.Icon, { type: 'plus' }),
31
- react_1.default.createElement("div", { className: "ant-upload-text" }, "\u4E0A\u4F20"))),
32
- react_1.default.createElement(index_1.Row, { style: { height: 140, width: 436, overflowX: 'hidden', overflowY: 'auto', flexWrap: 'wrap' }, gutter: 8 }, picOptions.map(function (img) { return react_1.default.createElement(index_1.Col, { span: 6, style: { height: 64, marginBottom: 6, cursor: 'pointer' } },
33
- react_1.default.createElement("img", { style: { height: '100%', width: '100%', borderWidth: 1, borderStyle: 'solid', borderRadius: 6, borderColor: 'transparent' }, src: img.value })); })));
34
- }
35
- });
15
+ // const picOptions = _.range(1, 17).map((key) => ({ label: key, value: `/data/images/dashboard/${key}.png` }));
16
+ // registerCustom({
17
+ // type: 'dashboard-cover',
18
+ // title: '快速图片选择',
19
+ // icon: 'text.png',
20
+ // Component: () => {
21
+ // const width = 144, height = 81;
22
+ // return <div>
23
+ // <Upload
24
+ // name="file"
25
+ // withCredentials={true}
26
+ // listType="picture"
27
+ // showUploadList={false}
28
+ // onChange={() => { }}
29
+ // accept="image/*"
30
+ // className={'upload-icon-empty'}
31
+ // data={{ namespace: 'app-data', }}
32
+ // >{<div style={{ width, height, marginRight: 6, textAlign: 'center', paddingTop: 12, cursor: 'pointer', borderRadius: 4, marginBottom: 6, border: '1px solid rgb(24 144 255 / 24%)' }}>
33
+ // <Icon type={'plus'} />
34
+ // <div className="ant-upload-text">上传</div>
35
+ // </div>}</Upload >
36
+ // <Row style={{ height: 140, width: 436, overflowX: 'hidden', overflowY: 'auto', flexWrap: 'wrap' }} gutter={8}>
37
+ // {picOptions.map((img) => <Col span={6} style={{ height: 64, marginBottom: 6, cursor: 'pointer' }}><img
38
+ // style={{ height: '100%', width: '100%', borderWidth: 1, borderStyle: 'solid', borderRadius: 6, borderColor: 'transparent' }}
39
+ // src={img.value}
40
+ // // onClick={() => onChange(img.value)}
41
+ // /></Col>)}
42
+ // </Row>
43
+ // </div>
44
+ // }
45
+ // },)
@@ -3,5 +3,7 @@ export declare const getFieldInGroup: (el: HTMLElement) => {
3
3
  group: HTMLElement;
4
4
  field?: HTMLElement;
5
5
  };
6
- declare const _default: () => React.JSX.Element;
6
+ declare const _default: ({ showSelector }: {
7
+ showSelector: any;
8
+ }) => React.JSX.Element;
7
9
  export default _default;
@@ -37,12 +37,13 @@ var getFieldInGroup = function (el) {
37
37
  exports.getFieldInGroup = getFieldInGroup;
38
38
  var temPosition = null;
39
39
  var gid = null;
40
- exports.default = (function () {
40
+ exports.default = (function (_a) {
41
+ var showSelector = _a.showSelector;
41
42
  var editor = (0, useEditor_1.useEditor)();
42
43
  if (!editor.form.isGroup) {
43
44
  return react_1.default.createElement(react_1.default.Fragment, null);
44
45
  }
45
- var _a = editor.form, groupType = _a.groupType, baseSpan = _a.baseSpan;
46
+ var _b = editor.form, groupType = _b.groupType, baseSpan = _b.baseSpan;
46
47
  var Editor = function () {
47
48
  switch (groupType) {
48
49
  case 'collapse':
@@ -69,6 +70,11 @@ exports.default = (function () {
69
70
  editor.sortField(data, temPosition, gid);
70
71
  return;
71
72
  }
73
+ if (editor.fieldFixed) {
74
+ var fieldType = evt.dataTransfer.getData('field');
75
+ showSelector(fieldType, temPosition, gid);
76
+ return;
77
+ }
72
78
  var viewType = evt.dataTransfer.getData('view');
73
79
  editor.addField(viewType, temPosition, gid);
74
80
  };
@@ -1,4 +1,6 @@
1
1
  import React from 'react';
2
2
  export declare const getFieldInList: (el: HTMLElement) => HTMLElement;
3
- declare const _default: () => React.JSX.Element;
3
+ declare const _default: ({ showSelector }: {
4
+ showSelector: any;
5
+ }) => React.JSX.Element;
4
6
  export default _default;
@@ -18,7 +18,8 @@ var getFieldInList = function (el) {
18
18
  return (0, exports.getFieldInList)(el.parentElement);
19
19
  };
20
20
  exports.getFieldInList = getFieldInList;
21
- exports.default = (function () {
21
+ exports.default = (function (_a) {
22
+ var showSelector = _a.showSelector;
22
23
  var editor = (0, useEditor_1.useEditor)();
23
24
  var fields = editor.form.fields, baseSpan = editor.baseSpan;
24
25
  var onDrop = function (evt) {
@@ -30,6 +31,11 @@ exports.default = (function () {
30
31
  editor.sortField(data, temPosition);
31
32
  return;
32
33
  }
34
+ if (editor.fieldFixed) {
35
+ var fieldType = evt.dataTransfer.getData('field');
36
+ showSelector(fieldType, temPosition);
37
+ return;
38
+ }
33
39
  var viewType = evt.dataTransfer.getData('view');
34
40
  editor.addField(viewType, temPosition);
35
41
  };
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
14
  if (k2 === undefined) k2 = k;
4
15
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -26,14 +37,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
38
  };
28
39
  Object.defineProperty(exports, "__esModule", { value: true });
29
- var react_1 = __importDefault(require("react"));
40
+ var react_1 = __importStar(require("react"));
41
+ var lodash_1 = __importDefault(require("lodash"));
30
42
  var useEditor_1 = require("../../hooks/useEditor");
31
43
  var index_1 = require("../../../index");
32
44
  var ListEditor_1 = __importStar(require("./ListEditor"));
33
45
  var GroupEditor_1 = __importStar(require("./GroupEditor"));
46
+ var hooks_1 = require("../../../hooks");
47
+ var InputSelector_1 = require("../Items/InputSelector");
34
48
  exports.default = (function () {
35
49
  var editor = (0, useEditor_1.useEditor)();
36
- var _a = editor.form, isGroup = _a.isGroup, tip = _a.tip;
50
+ var _a = (0, hooks_1.useOpenState)(), open = _a.open, data = _a.data, show = _a.show, hide = _a.hide;
51
+ var _b = editor.form, isGroup = _b.isGroup, tip = _b.tip;
52
+ var typeRef = (0, react_1.useRef)('text');
37
53
  var clazz = ['panel-content', 'uform-canvas'];
38
54
  if (editor.baseSpan == 24) {
39
55
  clazz.push('uform-canvas-single');
@@ -41,11 +57,27 @@ exports.default = (function () {
41
57
  else {
42
58
  clazz.push('uform-canvas-multi');
43
59
  }
44
- var CanvasEditor = function () {
45
- if (isGroup) {
46
- return react_1.default.createElement(GroupEditor_1.default, null);
60
+ var showSelector = function (field, pos, groupId) {
61
+ if (editor.fieldUsed.has(field)) {
62
+ index_1.message.error("\u5B57\u6BB5: ".concat(field, " \u5DF2\u7ECF\u88AB\u4F7F\u7528\u4E86"));
63
+ return;
47
64
  }
48
- return react_1.default.createElement(ListEditor_1.default, null);
65
+ var f = lodash_1.default.find(editor.fieldFixed, { field: field });
66
+ if (f == null) {
67
+ index_1.message.error("\u6CA1\u6709\u5B9A\u4E49\u5B57\u6BB5: ".concat(field, " "));
68
+ return;
69
+ }
70
+ typeRef.current = f.type || 'text';
71
+ show({ field: __assign(__assign({}, f), { type: typeRef.current }), pos: pos, groupId: groupId });
72
+ };
73
+ var onSelector = function () {
74
+ hide();
75
+ editor.addFixedField(__assign(__assign({}, data.field), { type: typeRef.current }), data.pos, data.groupId);
76
+ };
77
+ var CanvasEditor = function () {
78
+ if (isGroup)
79
+ return react_1.default.createElement(GroupEditor_1.default, { showSelector: showSelector });
80
+ return react_1.default.createElement(ListEditor_1.default, { showSelector: showSelector });
49
81
  };
50
82
  var onClick = function (evt) {
51
83
  evt.preventDefault();
@@ -72,12 +104,21 @@ exports.default = (function () {
72
104
  editor.setSelected({ group: el.group.id });
73
105
  }
74
106
  };
75
- return react_1.default.createElement(index_1.Form, { labelCol: { sm: 6 }, wrapperCol: { sm: 18 }, onClick: onClick, className: clazz.join(' ') },
76
- (tip && tip.text) && react_1.default.createElement("div", { onClick: function (evt) {
77
- evt.preventDefault();
78
- evt.stopPropagation();
79
- editor.setSelected(null);
80
- } },
81
- react_1.default.createElement(index_1.Alert, { type: tip.type || 'info', message: tip.text })),
82
- react_1.default.createElement(CanvasEditor, null));
107
+ return react_1.default.createElement(react_1.default.Fragment, null,
108
+ react_1.default.createElement(index_1.Form, { labelCol: { sm: 6 }, wrapperCol: { sm: 18 }, onClick: onClick, className: clazz.join(' ') },
109
+ (tip && tip.text) && react_1.default.createElement("div", { onClick: function (evt) {
110
+ evt.preventDefault();
111
+ evt.stopPropagation();
112
+ editor.setSelected(null);
113
+ } },
114
+ react_1.default.createElement(index_1.Alert, { type: tip.type || 'info', message: tip.text })),
115
+ react_1.default.createElement(CanvasEditor, null)),
116
+ open && react_1.default.createElement(index_1.Modal, { onCancel: hide, open: true, title: react_1.default.createElement("span", null,
117
+ "\u8BF7\u9009\u62E9\u5B57\u6BB5\u7C7B\u578B ",
118
+ open && react_1.default.createElement("span", null,
119
+ data.field.title,
120
+ " / ",
121
+ react_1.default.createElement("small", null,
122
+ react_1.default.createElement("i", null, data.field.field)))), width: 960, bodyStyle: { maxHeight: 520, overflow: 'auto' }, onOk: onSelector },
123
+ react_1.default.createElement(InputSelector_1.InputSelector, { field: data.field, onChange: function (type) { return typeRef.current = type; } })));
83
124
  });
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import type { FormEditorProps } from '../../FormEditor';
3
+ export declare const Fields: React.FC<Pick<FormEditorProps, 'fields'>>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Fields = void 0;
27
+ var react_1 = __importStar(require("react"));
28
+ var useEditor_1 = require("../../hooks/useEditor");
29
+ var Fields = function (props) {
30
+ var _a = (0, useEditor_1.useEditor)(), fieldFixed = _a.fieldFixed, fieldUsed = _a.fieldUsed;
31
+ var fields = (0, react_1.useMemo)(function () {
32
+ if (fieldFixed == false)
33
+ return [];
34
+ return fieldFixed.filter(function (item) { return !fieldUsed.has(item.field); });
35
+ }, [fieldFixed, fieldUsed]);
36
+ return react_1.default.createElement(react_1.default.Fragment, null,
37
+ react_1.default.createElement("ul", { className: 'uform-editor-fields' }, fields.map(function (item) { return react_1.default.createElement("li", { key: item.field, draggable: true, onDragStart: function (evt) { return evt.dataTransfer.setData("field", item.field); } },
38
+ react_1.default.createElement("span", null, item.field),
39
+ " ",
40
+ react_1.default.createElement("small", null, item.title)); })));
41
+ };
42
+ exports.Fields = Fields;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { FixField } from '../../schema';
3
+ export declare const InputSelector: React.FC<{
4
+ field: FixField;
5
+ onChange: (type: string) => void;
6
+ }>;
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __read = (this && this.__read) || function (o, n) {
37
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
38
+ if (!m) return o;
39
+ var i = m.call(o), r, ar = [], e;
40
+ try {
41
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
42
+ }
43
+ catch (error) { e = { error: error }; }
44
+ finally {
45
+ try {
46
+ if (r && !r.done && (m = i["return"])) m.call(i);
47
+ }
48
+ finally { if (e) throw e.error; }
49
+ }
50
+ return ar;
51
+ };
52
+ var __values = (this && this.__values) || function(o) {
53
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
54
+ if (m) return m.call(o);
55
+ if (o && typeof o.length === "number") return {
56
+ next: function () {
57
+ if (o && i >= o.length) o = void 0;
58
+ return { value: o && o[i++], done: !o };
59
+ }
60
+ };
61
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
62
+ };
63
+ Object.defineProperty(exports, "__esModule", { value: true });
64
+ exports.InputSelector = void 0;
65
+ var react_1 = __importStar(require("react"));
66
+ var inputs_1 = require("../../inputs");
67
+ var index_1 = require("../../../index");
68
+ var Inputs_1 = require("./Inputs");
69
+ var InputSelector = function (props) {
70
+ var _a = __read((0, react_1.useState)(props.field.type || 'text'), 2), currentType = _a[0], setCurrentType = _a[1];
71
+ var currentGroup = (0, react_1.useMemo)(function () {
72
+ var e_1, _a, e_2, _b;
73
+ try {
74
+ for (var Groups_1 = __values(inputs_1.Groups), Groups_1_1 = Groups_1.next(); !Groups_1_1.done; Groups_1_1 = Groups_1.next()) {
75
+ var group = Groups_1_1.value;
76
+ try {
77
+ for (var _c = (e_2 = void 0, __values(group.inputs)), _d = _c.next(); !_d.done; _d = _c.next()) {
78
+ var input = _d.value;
79
+ if (input.type == currentType) {
80
+ return group.title;
81
+ }
82
+ }
83
+ }
84
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
85
+ finally {
86
+ try {
87
+ if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
88
+ }
89
+ finally { if (e_2) throw e_2.error; }
90
+ }
91
+ }
92
+ }
93
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
94
+ finally {
95
+ try {
96
+ if (Groups_1_1 && !Groups_1_1.done && (_a = Groups_1.return)) _a.call(Groups_1);
97
+ }
98
+ finally { if (e_1) throw e_1.error; }
99
+ }
100
+ return inputs_1.Groups[0].title;
101
+ }, []);
102
+ (0, react_1.useLayoutEffect)(function () {
103
+ props.onChange(currentType);
104
+ }, [currentType]);
105
+ return react_1.default.createElement(index_1.Collapse, { className: 'uform-editor-item uform-editor-item-fields',
106
+ // size="small"
107
+ bordered: false, defaultActiveKey: currentGroup }, inputs_1.Groups.map(function (group) {
108
+ var inputs = group.inputs.filter(function (item) {
109
+ var ipt = (0, inputs_1.getInput)(item.type);
110
+ if (ipt.fieldCount && ipt.fieldCount > 1)
111
+ return false;
112
+ return true;
113
+ });
114
+ // const
115
+ if (inputs.length == 0)
116
+ return react_1.default.createElement(react_1.default.Fragment, null);
117
+ return react_1.default.createElement(index_1.Collapse.Panel, { key: group.title, header: group.title },
118
+ react_1.default.createElement("ul", null, inputs.map(function (item) { return react_1.default.createElement("li", { className: item.type == currentType ? 'uform-editor-item-field-active' : undefined, key: item.type, onClick: function () { return setCurrentType(item.type); } },
119
+ react_1.default.createElement(Inputs_1.Item, __assign({}, item))); })));
120
+ }));
121
+ };
122
+ exports.InputSelector = InputSelector;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { FormInput } from '../../inputs';
3
+ export declare const Item: React.FC<FormInput>;
4
+ export declare const Inputs: () => React.JSX.Element;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Inputs = exports.Item = void 0;
18
+ var react_1 = __importDefault(require("react"));
19
+ var inputs_1 = require("../../inputs");
20
+ var utils_1 = require("../../../utils");
21
+ var index_1 = require("../../../index");
22
+ var Item = function (props) { return react_1.default.createElement("div", { className: 'field-type-item' },
23
+ react_1.default.createElement("img", { src: utils_1.PageUtil.resolveURL('/images/vform/' + props.icon) }),
24
+ react_1.default.createElement("span", null, props.title)); };
25
+ exports.Item = Item;
26
+ var Inputs = function () { return react_1.default.createElement(react_1.default.Fragment, null,
27
+ react_1.default.createElement("div", { className: 'panel-title' }, "\u8F93\u5165"),
28
+ react_1.default.createElement("div", { className: 'panel-content uform-editor-item' },
29
+ react_1.default.createElement(index_1.Collapse, { accordion: true, defaultActiveKey: inputs_1.Groups[0].title }, inputs_1.Groups.map(function (group) {
30
+ var inputs = group.inputs;
31
+ if (inputs.length == 0) {
32
+ return [];
33
+ }
34
+ return react_1.default.createElement(index_1.Collapse.Panel, { key: group.title, header: group.title },
35
+ react_1.default.createElement("ul", null, inputs.map(function (item) { return react_1.default.createElement("li", { key: item.type, draggable: true, onDragStart: function (evt) { return evt.dataTransfer.setData("view", item.type); } },
36
+ react_1.default.createElement(exports.Item, __assign({}, item))); })));
37
+ })))); };
38
+ exports.Inputs = Inputs;
@@ -1,3 +1,4 @@
1
1
  import React from 'react';
2
- declare const _default: () => React.JSX.Element;
2
+ import type { FormEditorProps } from '../../FormEditor';
3
+ declare const _default: (props: Pick<FormEditorProps, 'fields'>) => React.JSX.Element;
3
4
  export default _default;
@@ -1,34 +1,14 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
4
  };
16
5
  Object.defineProperty(exports, "__esModule", { value: true });
17
6
  var react_1 = __importDefault(require("react"));
18
- var inputs_1 = require("../../inputs");
19
- var index_1 = require("../../../index");
20
- var Item = function (props) { return react_1.default.createElement("div", { className: 'field-type-item' },
21
- react_1.default.createElement("img", { src: '/images/vform/' + props.icon }),
22
- react_1.default.createElement("span", null, props.title)); };
23
- exports.default = (function () { return react_1.default.createElement(react_1.default.Fragment, null,
24
- react_1.default.createElement("div", { className: 'panel-title' }, "\u8F93\u5165"),
25
- react_1.default.createElement("div", { className: 'panel-content', id: "uform-editor-item" },
26
- react_1.default.createElement(index_1.Collapse, { accordion: true, defaultActiveKey: inputs_1.Groups[0].title }, inputs_1.Groups.map(function (group) {
27
- var inputs = group.inputs;
28
- if (inputs.length == 0) {
29
- return [];
30
- }
31
- return react_1.default.createElement(index_1.Collapse.Panel, { key: group.title, header: group.title },
32
- react_1.default.createElement("ul", null, inputs.map(function (item) { return react_1.default.createElement("li", { key: item.type, draggable: true, onDragStart: function (evt) { return evt.dataTransfer.setData("view", item.type); } },
33
- react_1.default.createElement(Item, __assign({}, item))); })));
34
- })))); });
7
+ var lodash_1 = __importDefault(require("lodash"));
8
+ var Fields_1 = require("./Fields");
9
+ var Inputs_1 = require("./Inputs");
10
+ exports.default = (function (props) {
11
+ if (lodash_1.default.isArray(props.fields) && props.fields.length)
12
+ return react_1.default.createElement(Fields_1.Fields, { fields: props.fields });
13
+ return react_1.default.createElement(Inputs_1.Inputs, null);
14
+ });
@@ -41,8 +41,11 @@ var plugins_1 = require("../../plugins");
41
41
  var FieldPlugin_1 = require("./Component/FieldPlugin");
42
42
  var OptionTable_1 = require("./Component/OptionTable");
43
43
  var _register_1 = require("../../../components/UForm/_register");
44
+ var useEditor_1 = require("../../hooks/useEditor");
44
45
  exports.default = (function (props) {
45
46
  var _a, _b;
47
+ var fieldFixed = (0, useEditor_1.useEditor)().fieldFixed;
48
+ var disabled = fieldFixed !== false;
46
49
  var setFieldProperties = props.setFieldProperties, field = props.field, input = props.input, baseSpan = props.baseSpan;
47
50
  var config = field.config || {};
48
51
  var setConfig = function (key, value) {
@@ -55,7 +58,7 @@ exports.default = (function (props) {
55
58
  };
56
59
  return react_1.default.createElement(react_1.default.Fragment, null,
57
60
  react_1.default.createElement(index_1.Form.Item, { label: "\u5B57\u6BB5\u540D", required: true },
58
- react_1.default.createElement(index_1.Input, { size: 'small', value: field.field, onChange: function (evt) { return setFieldProperties('field', evt.target.value); } })),
61
+ react_1.default.createElement(index_1.Input, { disabled: disabled, size: 'small', value: field.field, onChange: function (evt) { return setFieldProperties('field', evt.target.value); } })),
59
62
  react_1.default.createElement(index_1.Form.Item, { label: "\u6807\u9898", required: true },
60
63
  react_1.default.createElement(index_1.Input, { size: 'small', value: field.title, onChange: function (evt) { return setFieldProperties('title', evt.target.value); } })),
61
64
  input.defaultPlaceholder && react_1.default.createElement(index_1.Form.Item, { label: "\u7A7A\u503C\u5360\u4F4D" },
@@ -18,7 +18,7 @@ var PluginSlot;
18
18
  // 字段属性 - 高级
19
19
  PluginSlot[PluginSlot["FIELD_ADVANCE"] = 6] = "FIELD_ADVANCE";
20
20
  })(PluginSlot || (exports.PluginSlot = PluginSlot = {}));
21
- // const FiledPlugins = new Map()
21
+ // const FieldPlugins = new Map()
22
22
  var FieldPlugins = new Map();
23
23
  var registerFieldPlugin = function (slot, type) {
24
24
  return [];
package/uform/schema.d.ts CHANGED
@@ -49,7 +49,7 @@ export type Link = FunctionCode & {
49
49
  * 说明:为了保证兼容性,所有字段尽量与VAP UFormField 一致。以保证 schema Json 可以支持使用。
50
50
  * 如果有 点 _开头的属性,说明需要使用转换工具进行转换
51
51
  */
52
- export type FormItem = Pick<UFormField, 'field' | 'title' | 'span' | 'placeholder' | 'roleCode' | 'ik' | 'required' | 'tip' | 'extra' | 'help' | 'options' | 'ignore' | 'show' | 'disabled' | 'config' | 'columns'> & {
52
+ export type FormItem = Pick<UFormField, 'field' | 'title' | 'span' | 'placeholder' | 'roleCode' | 'ik' | 'dataType' | 'required' | 'tip' | 'extra' | 'help' | 'options' | 'ignore' | 'show' | 'disabled' | 'config' | 'columns'> & {
53
53
  /**
54
54
  * itemId 唯一标识
55
55
  * */
@@ -157,4 +157,8 @@ type BaseForm = {
157
157
  [properties: string]: any;
158
158
  };
159
159
  export type FormSchema = BaseForm & (_ListSchema | _GroupSchema);
160
+ /**
161
+ * 固定字段定义,用于字段接取模式
162
+ */
163
+ export type FixField = Pick<UFormField, 'field' | 'title' | 'type' | 'dataType' | 'config'>;
160
164
  export {};
@@ -1,6 +1,6 @@
1
- import type { FormItem, FormGroup, Cursor } from "../schema";
1
+ import type { FormItem, FormGroup, Cursor, FixField } from "../schema";
2
2
  import type { PlainObject } from '../../basetype';
3
- export declare const insertInList: (fieldType: string, list: FormItem[], pos?: Cursor) => FormItem[];
3
+ export declare const insertInList: (fieldType: string, list: FormItem[], pos?: Cursor, fixField?: FixField) => FormItem[];
4
4
  export declare const insertInGroup: (fieldType: string, list: FormGroup[], groupId: string, pos?: Cursor) => FormGroup[];
5
5
  export declare const sortList: (id: string, fields: FormItem[], pos: Cursor) => FormItem[];
6
6
  export declare const sortListInGroup: (id: string, fields: FormGroup[], groupId: string, pos?: Cursor) => FormGroup[];
@@ -58,9 +58,10 @@ var insertFieldInList = function (field, list, pos) {
58
58
  return __spreadArray(__spreadArray(__spreadArray([], __read(lodash_1.default.slice(list, 0, inSertPos)), false), [field], false), __read(lodash_1.default.slice(list, inSertPos)), false);
59
59
  };
60
60
  // 插入一个字段到列表指定位置
61
- var insertInList = function (fieldType, list, pos) {
61
+ var insertInList = function (fieldType, list, pos, fixField) {
62
62
  var _a;
63
63
  if (pos === void 0) { pos = null; }
64
+ if (fixField === void 0) { fixField = null; }
64
65
  var info = (0, inputs_1.getInput)(fieldType);
65
66
  if (info == null) {
66
67
  antd_1.message.error('无此类型');
@@ -68,6 +69,10 @@ var insertInList = function (fieldType, list, pos) {
68
69
  }
69
70
  var key = utils_1.StringUtil.genKey();
70
71
  var field = { id: key, type: fieldType, title: info.title, field: key };
72
+ if (fixField) {
73
+ field.field = fixField.field;
74
+ field.title = fixField.title;
75
+ }
71
76
  if (info.defaultProperties)
72
77
  lodash_1.default.assign(field, info.defaultProperties);
73
78
  if (info.defaultConfig)
@@ -122,7 +122,7 @@ var loadApi = function (option) { return __awaiter(void 0, void 0, void 0, funct
122
122
  result = _a.sent();
123
123
  if (!cache.loaded) {
124
124
  arr = (0, _define_1.getList)(result);
125
- arr.map(function (item) { return cache.map.set(item[option.valueFiled] + '', item[option.nameField]); });
125
+ arr.map(function (item) { return cache.map.set(item[option.valueField] + '', item[option.nameField]); });
126
126
  cache.loaded = true;
127
127
  }
128
128
  return [2 /*return*/, true];
@@ -234,7 +234,7 @@ var ApiGetRender = function (options) {
234
234
  }
235
235
  arr = (0, _define_1.getList)(result);
236
236
  arr.map(function (item) {
237
- apiOptions.push({ label: item[options.nameField], value: format(item[options.valueFiled]) });
237
+ apiOptions.push({ label: item[options.nameField], value: format(item[options.valueField]) });
238
238
  });
239
239
  setState(apiOptions);
240
240
  return [2 /*return*/];
@@ -255,7 +255,7 @@ var ApiGetRender = function (options) {
255
255
  var resp = (0, XHR_1.GETSYNC)(options.api);
256
256
  var map = new Map();
257
257
  var arr = (0, _define_1.getList)(resp);
258
- arr.map(function (item) { return map.set(item[options.valueFiled] + '', item[options.nameField]); });
258
+ arr.map(function (item) { return map.set(item[options.valueField] + '', item[options.nameField]); });
259
259
  API_CACHES.set(options.api, {
260
260
  fetcher: index_1.Ajax.GET(options.api),
261
261
  loaded: true,
@@ -276,4 +276,4 @@ var ApiGetRender = function (options) {
276
276
  return fn;
277
277
  };
278
278
  exports.ApiGetRender = ApiGetRender;
279
- // export const roleRender = ApiGetRender({ api: GLOBAL.CONFIG.ADMIN.ROLE, nameField: 'name', valueFiled: 'id', });
279
+ // export const roleRender = ApiGetRender({ api: GLOBAL.CONFIG.ADMIN.ROLE, nameField: 'name', valueField: 'id', });
@@ -141,7 +141,7 @@ var _ApiPostRender = function (props) {
141
141
  cache[cacheKey] = true;
142
142
  index_1.CacheUtil.set(KEY, cache);
143
143
  update();
144
- return [4 /*yield*/, index_1.Ajax.POST(props.api, __assign(__assign({}, props.param), (_a = {}, _a[props.valueFiled] = props.value, _a)), { process: false })];
144
+ return [4 /*yield*/, index_1.Ajax.POST(props.api, __assign(__assign({}, props.param), (_a = {}, _a[props.valueField] = props.value, _a)), { process: false })];
145
145
  case 5:
146
146
  resp = _b.sent();
147
147
  result = getLabel(props, resp, cacheKey);
@@ -203,7 +203,7 @@ var ApiPostRender = function (options) {
203
203
  var _a;
204
204
  var result = getInCache(KEY, key);
205
205
  if (result === null) {
206
- var resp = (0, XHR_1.POSTSYNC)(options.api, __assign(__assign({}, options.param), (_a = {}, _a[options.valueFiled] = key, _a)));
206
+ var resp = (0, XHR_1.POSTSYNC)(options.api, __assign(__assign({}, options.param), (_a = {}, _a[options.valueField] = key, _a)));
207
207
  result = getLabel(options, resp, key);
208
208
  }
209
209
  if (result == false)
@@ -1,4 +1,4 @@
1
- import { BaseRenderOptions, Render } from './_define';
1
+ import type { BaseRenderOptions, Render } from './_define';
2
2
  export declare const StrRender: (options?: number | BaseRenderOptions) => Render;
3
3
  /**
4
4
  * 返回一个 htmlRender,用于显示自定义的html,会用div包住
@@ -4,13 +4,17 @@ export type BaseRenderOptions = {
4
4
  className?: string;
5
5
  default?: React.ReactNode;
6
6
  onlyText?: boolean;
7
+ bold?: boolean;
8
+ underline?: boolean;
9
+ italic?: boolean;
10
+ color?: string;
7
11
  format?: (param: string) => string;
8
12
  len?: number;
9
13
  };
10
14
  export type ApiRenderOptions = BaseRenderOptions & {
11
15
  api: string;
12
16
  nameField: string;
13
- valueFiled: string;
17
+ valueField: string;
14
18
  render?: (info: BaseOption) => React.ReactNode;
15
19
  };
16
20
  export declare const getValue: (txt: string, options: BaseRenderOptions) => string | React.ReactNode;
@@ -24,9 +24,19 @@ var getValue = function (txt, options) {
24
24
  if (options.len && str.length > options.len) {
25
25
  str = str.substring(0, options.len) + '...';
26
26
  }
27
- if (options.onlyText || options.className == null)
27
+ var clazz = [];
28
+ if (options.className)
29
+ clazz.push(options.className);
30
+ if (options.bold)
31
+ clazz.push('font-bold');
32
+ if (options.italic)
33
+ clazz.push('font-italic');
34
+ if (options.underline)
35
+ clazz.push('font-underline');
36
+ var style = options.color ? { color: options.color } : undefined;
37
+ if (options.onlyText || (clazz.length == 0 && style == undefined))
28
38
  return str;
29
- return react_1.default.createElement("span", { className: options.className, title: txt }, str);
39
+ return react_1.default.createElement("span", { className: clazz.join(' '), style: style, title: txt }, str);
30
40
  };
31
41
  exports.getValue = getValue;
32
42
  var convertValue = function (value, config) {