cnhis-design-vue 3.1.31-beta.9 → 3.1.32-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/README.md +123 -123
  2. package/es/components/fabric-chart/index.d.ts +207 -0
  3. package/es/components/fabric-chart/src/FabricChart.vue.d.ts +208 -0
  4. package/es/components/form-render/src/components/renderer/checkbox.js +3 -5
  5. package/es/components/form-render/src/components/renderer/index.js +2 -0
  6. package/es/components/form-render/src/components/renderer/recommendSelect.d.ts +131 -0
  7. package/es/components/form-render/src/components/renderer/recommendSelect.js +213 -0
  8. package/es/components/form-render/src/components/renderer/remoteSearch.js +11 -3
  9. package/es/components/form-render/src/components/renderer/select.js +0 -2
  10. package/es/components/form-render/src/hooks/useAsyncQueue.js +2 -1
  11. package/es/components/form-render/src/hooks/useAutographOptions.js +3 -5
  12. package/es/components/form-render/src/hooks/useFieldListAdaptor.js +7 -0
  13. package/es/components/form-render/src/hooks/useFormRequest.d.ts +8 -1
  14. package/es/components/form-render/src/hooks/useFormRequest.js +24 -1
  15. package/es/components/form-render/style/index.css +1 -1
  16. package/es/components/index.css +1 -1
  17. package/es/components/recommend-search/index.d.ts +586 -51
  18. package/es/components/recommend-search/src/RecommendSearch.vue.d.ts +596 -59
  19. package/es/components/recommend-search/src/RecommendSearch.vue.js +36 -8
  20. package/es/components/recommend-search/src/components/BaseSearch.vue.d.ts +31 -16
  21. package/es/components/recommend-search/src/components/BaseSearch.vue.js +27 -23
  22. package/es/components/recommend-search/src/components/RecommendInput.vue.d.ts +136 -53
  23. package/es/components/recommend-search/src/components/RecommendInput.vue.js +66 -41
  24. package/es/components/recommend-search/src/components/RecommendMenu.vue.d.ts +14 -3
  25. package/es/components/recommend-search/src/components/RecommendMenu.vue.js +35 -25
  26. package/es/components/recommend-search/src/components/RecommendSelect.vue.d.ts +300 -1
  27. package/es/components/recommend-search/src/components/RecommendSelect.vue.js +81 -51
  28. package/es/components/recommend-search/style/index.css +1 -1
  29. package/package.json +2 -2
@@ -11,6 +11,7 @@ import * as labelSelect from './labelSelect.js';
11
11
  import * as levelSearchCascader from './levelSearchCascader.js';
12
12
  import * as index$1 from './lineBar/index.js';
13
13
  import * as radio from './radio.js';
14
+ import * as recommendSelect from './recommendSelect.js';
14
15
  import * as remoteSearch from './remoteSearch.js';
15
16
  import * as search from './search.js';
16
17
  import * as searchCascade from './searchCascade.js';
@@ -35,6 +36,7 @@ const modules = Object.assign({
35
36
  "./levelSearchCascader.tsx": levelSearchCascader,
36
37
  "./lineBar/index.ts": index$1,
37
38
  "./radio.tsx": radio,
39
+ "./recommendSelect.tsx": recommendSelect,
38
40
  "./remoteSearch.tsx": remoteSearch,
39
41
  "./search.tsx": search,
40
42
  "./searchCascade.tsx": searchCascade,
@@ -0,0 +1,131 @@
1
+ import { AnyObject } from '../../../../../../es/shared/types';
2
+ import { PropType } from 'vue';
3
+ import { RecommendIds } from '../../../../../../es/components/form-render';
4
+ export declare const RECOMMEND_SELECT: import("vue").DefineComponent<{
5
+ value: {
6
+ type: StringConstructor;
7
+ };
8
+ commonList: {
9
+ type: PropType<AnyObject[]>;
10
+ };
11
+ recentList: {
12
+ type: PropType<AnyObject[]>;
13
+ };
14
+ options: {
15
+ type: PropType<AnyObject[]>;
16
+ default: () => never[];
17
+ };
18
+ autograph: {
19
+ type: StringConstructor;
20
+ };
21
+ lazyRequest: {
22
+ type: BooleanConstructor;
23
+ default: boolean;
24
+ };
25
+ requestCache: {
26
+ type: BooleanConstructor;
27
+ default: boolean;
28
+ };
29
+ wordbook: {
30
+ type: PropType<Partial<{
31
+ level_num: number;
32
+ id: string;
33
+ name: string;
34
+ render_key: string[];
35
+ search_key: string[];
36
+ primary_key: string;
37
+ type: string;
38
+ value_key: string;
39
+ level_key: string;
40
+ link_key: string;
41
+ link_key_split: string;
42
+ show_key: string[];
43
+ conObj: AnyObject[];
44
+ conObjFirstLevel: AnyObject[];
45
+ }>>;
46
+ };
47
+ getRecommendInfo: {
48
+ type: PropType<() => RecommendIds>;
49
+ };
50
+ recommendNum: {
51
+ type: NumberConstructor;
52
+ default: number;
53
+ };
54
+ recommendCache: {
55
+ type: BooleanConstructor;
56
+ default: boolean;
57
+ };
58
+ recommendDeletable: {
59
+ type: BooleanConstructor;
60
+ default: boolean;
61
+ };
62
+ }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("update:value" | "postRecommend" | "deleteRecommend")[], "update:value" | "postRecommend" | "deleteRecommend", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
63
+ value: {
64
+ type: StringConstructor;
65
+ };
66
+ commonList: {
67
+ type: PropType<AnyObject[]>;
68
+ };
69
+ recentList: {
70
+ type: PropType<AnyObject[]>;
71
+ };
72
+ options: {
73
+ type: PropType<AnyObject[]>;
74
+ default: () => never[];
75
+ };
76
+ autograph: {
77
+ type: StringConstructor;
78
+ };
79
+ lazyRequest: {
80
+ type: BooleanConstructor;
81
+ default: boolean;
82
+ };
83
+ requestCache: {
84
+ type: BooleanConstructor;
85
+ default: boolean;
86
+ };
87
+ wordbook: {
88
+ type: PropType<Partial<{
89
+ level_num: number;
90
+ id: string;
91
+ name: string;
92
+ render_key: string[];
93
+ search_key: string[];
94
+ primary_key: string;
95
+ type: string;
96
+ value_key: string;
97
+ level_key: string;
98
+ link_key: string;
99
+ link_key_split: string;
100
+ show_key: string[];
101
+ conObj: AnyObject[];
102
+ conObjFirstLevel: AnyObject[];
103
+ }>>;
104
+ };
105
+ getRecommendInfo: {
106
+ type: PropType<() => RecommendIds>;
107
+ };
108
+ recommendNum: {
109
+ type: NumberConstructor;
110
+ default: number;
111
+ };
112
+ recommendCache: {
113
+ type: BooleanConstructor;
114
+ default: boolean;
115
+ };
116
+ recommendDeletable: {
117
+ type: BooleanConstructor;
118
+ default: boolean;
119
+ };
120
+ }>> & {
121
+ "onUpdate:value"?: ((...args: any[]) => any) | undefined;
122
+ onPostRecommend?: ((...args: any[]) => any) | undefined;
123
+ onDeleteRecommend?: ((...args: any[]) => any) | undefined;
124
+ }, {
125
+ options: AnyObject[];
126
+ lazyRequest: boolean;
127
+ requestCache: boolean;
128
+ recommendDeletable: boolean;
129
+ recommendNum: number;
130
+ recommendCache: boolean;
131
+ }>;
@@ -0,0 +1,213 @@
1
+ import { defineComponent, inject, createVNode, ref, computed } from 'vue';
2
+ import { connect, mapProps } from '@formily/vue';
3
+ import { useVModel } from '@vueuse/core';
4
+ import { isFunction, omit } from 'lodash-es';
5
+ import '../../../index.js';
6
+ import { InjectionAsyncQueue } from '../../constants/index.js';
7
+ import RecommendSearch from '../../../../recommend-search/index.js';
8
+ import { useFormField } from '../../hooks/useFormField.js';
9
+ import { useAutographOptions } from '../../hooks/useAutographOptions.js';
10
+ import { assignUpdateValue, assignClearBindVisited } from '../../utils/schema.js';
11
+ import { useCommonInjection } from '../../hooks/useCommonInjection.js';
12
+ import { useFormRequest } from '../../hooks/useFormRequest.js';
13
+
14
+ function createPropRef(props, key) {
15
+ const _list = ref();
16
+ return computed({
17
+ get() {
18
+ if (_list.value)
19
+ return _list.value;
20
+ return props[key];
21
+ },
22
+ set(value) {
23
+ _list.value = value;
24
+ }
25
+ });
26
+ }
27
+ const script = defineComponent({
28
+ name: "FormRecommendSearch",
29
+ props: {
30
+ value: {
31
+ type: String
32
+ },
33
+ commonList: {
34
+ type: Array
35
+ },
36
+ recentList: {
37
+ type: Array
38
+ },
39
+ options: {
40
+ type: Array,
41
+ default: () => []
42
+ },
43
+ autograph: {
44
+ type: String
45
+ },
46
+ lazyRequest: {
47
+ type: Boolean,
48
+ default: false
49
+ },
50
+ requestCache: {
51
+ type: Boolean,
52
+ default: true
53
+ },
54
+ wordbook: {
55
+ type: Object
56
+ },
57
+ getRecommendInfo: {
58
+ type: Function
59
+ },
60
+ recommendNum: {
61
+ type: Number,
62
+ default: 5
63
+ },
64
+ recommendCache: {
65
+ type: Boolean,
66
+ default: false
67
+ },
68
+ recommendDeletable: {
69
+ type: Boolean,
70
+ default: true
71
+ }
72
+ },
73
+ emits: ["update:value", "postRecommend", "deleteRecommend"],
74
+ setup(props, {
75
+ emit
76
+ }) {
77
+ const valueRef = useVModel(props, "value", emit);
78
+ const {
79
+ fieldKey
80
+ } = useFormField();
81
+ const {
82
+ labelKey,
83
+ valueKey,
84
+ options,
85
+ fetchData: fetchOptions
86
+ } = useAutographOptions(props, valueRef);
87
+ const commonListRef = createPropRef(props, "commonList");
88
+ const recentListRef = createPropRef(props, "recentList");
89
+ const asyncQueue = inject(InjectionAsyncQueue);
90
+ const {
91
+ getRecommendRequestInfo,
92
+ getHttpInstance
93
+ } = useFormRequest();
94
+ function getRecommendConfig(type) {
95
+ const {
96
+ url,
97
+ getRecommendIds
98
+ } = getRecommendRequestInfo();
99
+ const globInfo = isFunction(getRecommendIds) ? getRecommendIds() : {};
100
+ const widgetInfo = isFunction(props.getRecommendInfo) ? props.getRecommendInfo() : {};
101
+ return {
102
+ url: url[type],
103
+ info: Object.assign({}, globInfo, widgetInfo)
104
+ };
105
+ }
106
+ async function getRecommend() {
107
+ if (commonListRef.value && recentListRef.value && props.recommendCache)
108
+ return;
109
+ const list = await asyncQueue.addAsync(createParams(fieldKey.value, props.recommendCache));
110
+ const {
111
+ commonly,
112
+ recently
113
+ } = classifyList(list);
114
+ commonListRef.value = commonly;
115
+ recentListRef.value = recently;
116
+ function classifyList(list2) {
117
+ return list2.reduce((res, item) => {
118
+ if (item.type === "commonly") {
119
+ res.commonly.push(omit(item, ["type"]));
120
+ } else if (item.type === "recently") {
121
+ res.recently.push(omit(item, ["type"]));
122
+ }
123
+ return res;
124
+ }, {
125
+ commonly: [],
126
+ recently: []
127
+ });
128
+ }
129
+ function createParams(key2, cache) {
130
+ const {
131
+ url,
132
+ info
133
+ } = getRecommendConfig("get");
134
+ return {
135
+ url,
136
+ method: "get",
137
+ key: key2,
138
+ cache,
139
+ params: {
140
+ ...info,
141
+ recNum: props.recommendNum,
142
+ keyword: ""
143
+ }
144
+ };
145
+ }
146
+ }
147
+ async function postRecommend({
148
+ option
149
+ }) {
150
+ const http = getHttpInstance();
151
+ if (!http)
152
+ return;
153
+ const {
154
+ url,
155
+ info
156
+ } = getRecommendConfig("post");
157
+ emit("postRecommend", await http.post(url, {
158
+ ...info,
159
+ keyword: "",
160
+ itemId: valueKey.value,
161
+ itemObj: JSON.stringify(option)
162
+ }));
163
+ }
164
+ async function deleteRecommend(recType) {
165
+ const http = getHttpInstance();
166
+ if (!http)
167
+ return;
168
+ const {
169
+ url,
170
+ info
171
+ } = getRecommendConfig("delete");
172
+ if (recType === "COMMONLY")
173
+ commonListRef.value = [];
174
+ else if (recType === "RECENTLY")
175
+ recentListRef.value = [];
176
+ emit("deleteRecommend", await http.delete(url, {
177
+ ...info,
178
+ keyword: "",
179
+ recType
180
+ }));
181
+ }
182
+ async function fetchData(content = "") {
183
+ fetchOptions(content);
184
+ getRecommend();
185
+ }
186
+ const {
187
+ injectValueBindKey
188
+ } = useCommonInjection();
189
+ const key = injectValueBindKey(valueRef);
190
+ return () => {
191
+ return createVNode(RecommendSearch, {
192
+ "mode": "select",
193
+ "value": valueRef.value,
194
+ "onUpdate:value": ($event) => valueRef.value = $event,
195
+ "label-key": labelKey.value,
196
+ "value-key": valueKey.value,
197
+ "key": key.value,
198
+ "options": options.value,
199
+ "common-list": commonListRef.value,
200
+ "recent-list": recentListRef.value,
201
+ "recommend-deletable": props.recommendDeletable,
202
+ "onSearch": fetchData,
203
+ "onChoose": postRecommend,
204
+ "onDelete": deleteRecommend
205
+ }, null);
206
+ };
207
+ }
208
+ });
209
+ const RECOMMEND_SELECT = connect(script, mapProps({
210
+ dataSource: "options"
211
+ }, assignUpdateValue, assignClearBindVisited));
212
+
213
+ export { RECOMMEND_SELECT };
@@ -1,10 +1,10 @@
1
1
  import { defineComponent, ref, computed, inject, watch, createVNode } from 'vue';
2
2
  import { connect, mapProps } from '@formily/vue';
3
3
  import { useVModel, useDebounceFn } from '@vueuse/core';
4
- import { isString, isArray, isEqual } from 'lodash-es';
4
+ import { isString, isArray, cloneDeep, isEqual } from 'lodash-es';
5
5
  import { NSelect } from 'naive-ui';
6
6
  import '../../../index.js';
7
- import { InjectionAsyncQueue, InjectionFormItemDepsCollector } from '../../constants/index.js';
7
+ import { InjectionAsyncQueue, InjectionChangeContextCollector, InjectionFormItemDepsCollector } from '../../constants/index.js';
8
8
  import { createUrlConfigParams, formRenderLog } from '../../utils/index.js';
9
9
  import { useCommonInjection, useSelectOptionProps } from '../../hooks/useCommonInjection.js';
10
10
  import { useFormField } from '../../hooks/useFormField.js';
@@ -68,7 +68,6 @@ const script = defineComponent({
68
68
  cache: props.requestCache,
69
69
  field: field.value
70
70
  }));
71
- console.log(remoteOptions.value);
72
71
  } catch (e) {
73
72
  isString(e) && formRenderLog(e);
74
73
  }
@@ -91,6 +90,15 @@ const script = defineComponent({
91
90
  return;
92
91
  return fetchData(value, "value");
93
92
  });
93
+ const changeContextCollector = inject(InjectionChangeContextCollector);
94
+ changeContextCollector.setContext(fieldKey.value, (v) => {
95
+ return {
96
+ currentOption: cloneDeep(getCurrentOption(v))
97
+ };
98
+ function getCurrentOption(v2) {
99
+ return parsedOptions.value.find((option) => option[valueKey.value] === v2);
100
+ }
101
+ });
94
102
  const formItemDepsCollector = inject(InjectionFormItemDepsCollector);
95
103
  watch(() => props.urlConfig, (config, oldConfig) => {
96
104
  if (isEqual(config, oldConfig))
@@ -77,8 +77,6 @@ const script = defineComponent({
77
77
  if (!props.urlConfig) {
78
78
  return remoteOptions.value = null;
79
79
  }
80
- if (remoteOptions.value && props.requestCache)
81
- return;
82
80
  try {
83
81
  remoteOptions.value = await asyncQueue.addAsync(await createUrlConfigParams({
84
82
  config: props.urlConfig,
@@ -116,7 +116,7 @@ function useAsyncQueue(requestInstance) {
116
116
  return new AsyncQueue({
117
117
  name: "FormRenderAsyncQueue",
118
118
  parallelism,
119
- async processor({ key, method = "post", params, url }, cb, removeCache) {
119
+ async processor({ key, method = "post", cache, params, url }, cb, removeCache) {
120
120
  var _a, _b;
121
121
  const http = (_a = unref(requestInstance)) != null ? _a : getHttpInstance();
122
122
  if (!http) {
@@ -134,6 +134,7 @@ function useAsyncQueue(requestInstance) {
134
134
  res = option.afterRequest(key, res);
135
135
  }
136
136
  cb(void 0, Array.isArray(res) ? res : []);
137
+ !cache && removeCache();
137
138
  } catch (e) {
138
139
  cb(new Error(`Request error => ${e}`));
139
140
  removeCache();
@@ -21,22 +21,20 @@ function useAutographOptions(props, valueRef) {
21
21
  });
22
22
  const remoteOptions = ref(null);
23
23
  const lastSearch = ref("");
24
- const { field, fieldKey } = useFormField();
24
+ const { fieldKey } = useFormField();
25
25
  const { getSearchRequestInfo } = useFormRequest();
26
26
  const fetchData = useDebounceFn(async function(content) {
27
27
  if (!props.autograph || !props.wordbook)
28
28
  return;
29
29
  lastSearch.value = content || "";
30
- if (remoteOptions.value && props.requestCache)
31
- return;
32
30
  try {
33
31
  remoteOptions.value = await asyncQueue.addAsync(
34
- createParams(props.wordbook, props.autograph, field.value, fieldKey.value)
32
+ createParams(props.wordbook, props.autograph, fieldKey.value)
35
33
  );
36
34
  } catch (e) {
37
35
  isString(e) && formRenderLog(e);
38
36
  }
39
- function createParams(wordbook, autograph, field2, key) {
37
+ function createParams(wordbook, autograph, key) {
40
38
  const params = {
41
39
  autograph,
42
40
  wordbookId: wordbook.id,
@@ -89,6 +89,12 @@ function useFieldListAdaptor(collector) {
89
89
  multiple && (schema2.type = "array");
90
90
  }
91
91
  };
92
+ const createRecommendSelectSchema = (item) => {
93
+ const schema = createSelectSchema(item);
94
+ schema["x-component"] = "RECOMMEND_SELECT";
95
+ Object.assign(schema["x-component-props"], pick(item, ["commonList", "recentList"]));
96
+ return schema;
97
+ };
92
98
  const createRadioSchema = (item) => {
93
99
  const schema = createStandardSchema(item);
94
100
  Object.assign(schema["x-component-props"], {
@@ -219,6 +225,7 @@ function useFieldListAdaptor(collector) {
219
225
  ["INPUT", createInputSchema],
220
226
  ["INPUT_NUMBER", createInputNumberSchema],
221
227
  ["SELECT", createSelectSchema],
228
+ ["RECOMMEND_SELECT", createRecommendSelectSchema],
222
229
  ["REMOTE_SEARCH", createSelectSchema],
223
230
  ["DATE", createDateSchema],
224
231
  ["LEVEL_SEARCH_CASCADER", createLevelSearchCascadeSchema],
@@ -6,14 +6,21 @@ declare type SearchRequestInfo = {
6
6
  url: string;
7
7
  primaryKeyUrl?: string;
8
8
  };
9
+ export declare type RecommendIds = Partial<Record<'businessId' | 'componentId' | 'deptId' | 'userId', string>>;
10
+ declare type RecommendRequestInfo = {
11
+ getRecommendIds(): RecommendIds;
12
+ url: Record<'get' | 'post' | 'delete', string>;
13
+ };
9
14
  export declare function useFormRequest(): {
10
15
  getHttpInstance: () => Nullable<RequestInstance>;
11
16
  registGlobHttpInstance: (instance: RequestInstance) => void;
17
+ registGlobRecommendInfo: (info: Partial<RecommendRequestInfo>) => void;
18
+ registGlobSearchInfo: (info: SearchRequestInfo) => void;
12
19
  getSearchRequestInfo: () => {
13
20
  method: FormRequestType;
14
21
  url: string;
15
22
  primaryKeyUrl?: string | undefined;
16
23
  };
17
- registGlobSearchInfo: (info: SearchRequestInfo) => void;
24
+ getRecommendRequestInfo: () => RecommendRequestInfo;
18
25
  };
19
26
  export {};
@@ -1,5 +1,15 @@
1
+ import { cloneDeep } from 'lodash-es';
2
+
1
3
  let http = null;
2
4
  const searchRequestInfo = { method: "post", url: "", primaryKeyUrl: "" };
5
+ const recommendRequestInfo = {
6
+ url: {
7
+ get: "/fdp-api/fdp/aiRec/search",
8
+ post: "/fdp-api/fdp/aiRec/sendBehaviorData",
9
+ delete: "/fdp-api/fdp/aiRec/delete"
10
+ },
11
+ getRecommendIds: () => ({})
12
+ };
3
13
  function useFormRequest() {
4
14
  function getHttpInstance() {
5
15
  return http;
@@ -10,10 +20,23 @@ function useFormRequest() {
10
20
  function getSearchRequestInfo() {
11
21
  return { ...searchRequestInfo };
12
22
  }
23
+ function getRecommendRequestInfo() {
24
+ return cloneDeep(recommendRequestInfo);
25
+ }
13
26
  function registGlobSearchInfo(info) {
14
27
  Object.assign(searchRequestInfo, info);
15
28
  }
16
- return { getHttpInstance, registGlobHttpInstance, getSearchRequestInfo, registGlobSearchInfo };
29
+ function registGlobRecommendInfo(info) {
30
+ Object.assign(recommendRequestInfo, info);
31
+ }
32
+ return {
33
+ getHttpInstance,
34
+ registGlobHttpInstance,
35
+ registGlobRecommendInfo,
36
+ registGlobSearchInfo,
37
+ getSearchRequestInfo,
38
+ getRecommendRequestInfo
39
+ };
17
40
  }
18
41
 
19
42
  export { useFormRequest };
@@ -1 +1 @@
1
- .annotation-edit{align-items:center;color:#0067ee;cursor:pointer;display:inline-flex;font-size:16px;user-select:none}.annotation-edit.is-active{color:#ff9828}.annotation-edit__icon{align-items:center;display:inline-flex}.form-render__wrapper{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr));max-height:var(--form-height);overflow-y:auto;position:relative}.form-render__formItem{grid-column:span min(var(--column),var(--form-item-column)) /span min(var(--column),var(--form-item-column))}.form-render__formItem .n-date-picker,.form-render__formItem .n-input-number{width:100%}.form-render__formItemLabel{align-items:center;display:inline-flex;position:relative}.form-render__formItemLabel--text.has-annotation{margin-right:15px}.form-render__formItemLabel--annotation{position:absolute;right:calc(var(--icon-right)*1px);top:50%;transform:translateY(-50%)}.form-render__formItem .n-form-item-label{display:inline-flex}.form-render__formItem .n-form-item-label [annotation-hover-show=true]{visibility:hidden}.form-render__formItem .n-form-item-label:hover [annotation-hover-show=true]{visibility:visible}.form-render__linebar{grid-column:span min(var(--column),var(--column)) /span min(var(--column),var(--column))}.form-render__linebarHeader{align-items:center;background:#f2f2f2;border-radius:4px;cursor:pointer;display:flex;font-size:14px;font-weight:500;height:32px;justify-content:space-between;margin-bottom:8px;padding:0 16px}.form-render__linebarHeader svg{color:rgba(33,33,33,.4);width:14px}.form-render__linebarItem{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr))}.form-render__linebreaks{grid-column:span min(var(--column),var(--form-item-column)) /span min(var(--column),var(--form-item-column))}.form-render__inputGroup{align-items:flex-start;display:flex;grid-column:span min(var(--column),var(--column)) /span min(var(--column),var(--column))}.form-render__inputGroup>div{flex:1}.form-render__inputGroup>div:not(:last-of-type) .n-base-selection__border,.form-render__inputGroup>div:not(:last-of-type) .n-input__border{border-bottom-right-radius:0;border-right:0;border-top-right-radius:0}.form-render__inputGroup>div:last-of-type .n-base-selection__border,.form-render__inputGroup>div:last-of-type .n-input__border{border-bottom-left-radius:0;border-top-left-radius:0}.form-render__combination{width:100%}.form-render__combinationHeader{display:flex;gap:12px}.form-render__combinationHeader>h3{font-size:16px;font-weight:700;margin:0;padding:0}.form-render__combinationHeader .n-button__icon{font-size:14px;margin:0 2px 0 0}.form-render__combinationHeaderText{font-size:16px;font-weight:500}.form-render__combinationClose{font-size:16px;height:14px;position:absolute;right:5px;top:5px;width:14px}.form-render__combinationContentJson{position:relative}.form-render__combinationContent{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr));position:relative}.form-render__complex{width:100%}.form-render__complexContent--grid{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr))}.form-render__complexContent--flex{display:flex!important;gap:0 8px}.form-render__selectMenu .n-scrollbar-rail__scrollbar{display:none!important}.form-render__selectMenu .n-virtual-list::-webkit-scrollbar,.form-render__selectMenu .n-virtual-list::-webkit-scrollbar-thumb{display:unset!important;height:6px;width:6px}.form-render__selectMenu .n-virtual-list::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px}.form-render__selectMenu .v-vl-items{min-width:100%;width:max-content}.form-render__selectOption .n-base-select-option__content{overflow:visible!important;text-overflow:unset!important;word-break:keep-all!important}
1
+ .annotation-edit{align-items:center;color:#0067ee;cursor:pointer;display:inline-flex;font-size:16px;user-select:none}.annotation-edit.is-active{color:#ff9828}.annotation-edit__icon{align-items:center;display:inline-flex}.recommend-search__menu{min-height:100px}.recommend-search__menuRecommendList{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}.recommend-search__menuRecommendList .n-tag{cursor:pointer}.recommend-search__recentRecommend{margin-bottom:8px}.recommend-search__recentRecommend>header{align-items:center;color:rgba(0,0,0,.4);display:flex;justify-content:space-between}.recommend-search__recentRecommend>header .n-icon:hover{color:rgba(0,0,0,.6);cursor:pointer}.recommend-search__commonRecommend{margin-bottom:8px}.recommend-search__commonRecommend>header{align-items:center;color:rgba(0,0,0,.4);display:flex;justify-content:space-between}.recommend-search__commonRecommend>header .n-icon:hover{color:rgba(0,0,0,.6);cursor:pointer}.recommend-search__option{align-items:center;border-radius:4px;cursor:pointer;display:flex;height:32px;justify-content:space-between;padding:0 8px}.recommend-search__optionText{max-width:calc(100% - 24px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recommend-search__option.is-active{color:var(--n-color)!important}.recommend-search__option.is-active .n-icon{font-size:20px}.recommend-search__option:hover{background:rgba(0,0,0,.03)}.recommend-search__optionContainer{margin:-8px -10px}.recommend-search__empty{align-items:center;color:rgba(0,0,0,.3);display:flex;height:100px;justify-content:center}.search-cascader__menuWrapper{display:flex;flex-wrap:nowrap;margin:-8px -14px}.search-cascader__input input{cursor:pointer!important}.search-cascader__option{align-items:center;border-radius:4px;box-sizing:border-box;display:flex;height:32px;justify-content:space-between;padding:0 8px 0 16px;width:100%}.search-cascader__option--active{background:#f8f8f8}.search-cascader__option:hover{background:#f5f5f5;cursor:pointer}.search-cascader__optionWrapper{background:#fff;height:256px;overflow-x:auto;width:calc(var(--menu-width)*1px)}.search-cascader__optionWrapper:not(:last-of-type){border:solid #e5e5e5;border-width:0 1px 0 0}.search-cascader__optionText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 20px)}.search-cascader__option svg{color:#bfbfbf;flex-shrink:0;font-size:12px;width:20px}.search-cascader__option svg.rotate{animation:rotate 1s linear infinite}.search-cascader__emptyWrapper{align-items:center;background:#fff;box-sizing:border-box;display:flex;height:300px;justify-content:center;padding:16px;width:100%}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.form-render__wrapper{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr));max-height:var(--form-height);overflow-y:auto;position:relative}.form-render__formItem{grid-column:span min(var(--column),var(--form-item-column)) /span min(var(--column),var(--form-item-column))}.form-render__formItem .n-date-picker,.form-render__formItem .n-input-number{width:100%}.form-render__formItemLabel{align-items:center;display:inline-flex;position:relative}.form-render__formItemLabel--text.has-annotation{margin-right:15px}.form-render__formItemLabel--annotation{position:absolute;right:calc(var(--icon-right)*1px);top:50%;transform:translateY(-50%)}.form-render__formItem .n-form-item-label{display:inline-flex}.form-render__formItem .n-form-item-label [annotation-hover-show=true]{visibility:hidden}.form-render__formItem .n-form-item-label:hover [annotation-hover-show=true]{visibility:visible}.form-render__linebar{grid-column:span min(var(--column),var(--column)) /span min(var(--column),var(--column))}.form-render__linebarHeader{align-items:center;background:#f2f2f2;border-radius:4px;cursor:pointer;display:flex;font-size:14px;font-weight:500;height:32px;justify-content:space-between;margin-bottom:8px;padding:0 16px}.form-render__linebarHeader svg{color:rgba(33,33,33,.4);width:14px}.form-render__linebarItem{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr))}.form-render__linebreaks{grid-column:span min(var(--column),var(--form-item-column)) /span min(var(--column),var(--form-item-column))}.form-render__inputGroup{align-items:flex-start;display:flex;grid-column:span min(var(--column),var(--column)) /span min(var(--column),var(--column))}.form-render__inputGroup>div{flex:1}.form-render__inputGroup>div:not(:last-of-type) .n-base-selection__border,.form-render__inputGroup>div:not(:last-of-type) .n-input__border{border-bottom-right-radius:0;border-right:0;border-top-right-radius:0}.form-render__inputGroup>div:last-of-type .n-base-selection__border,.form-render__inputGroup>div:last-of-type .n-input__border{border-bottom-left-radius:0;border-top-left-radius:0}.form-render__combination{width:100%}.form-render__combinationHeader{display:flex;gap:12px}.form-render__combinationHeader>h3{font-size:16px;font-weight:700;margin:0;padding:0}.form-render__combinationHeader .n-button__icon{font-size:14px;margin:0 2px 0 0}.form-render__combinationHeaderText{font-size:16px;font-weight:500}.form-render__combinationClose{font-size:16px;height:14px;position:absolute;right:5px;top:5px;width:14px}.form-render__combinationContentJson{position:relative}.form-render__combinationContent{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr));position:relative}.form-render__complex{width:100%}.form-render__complexContent--grid{align-items:start;display:grid!important;gap:0 16px;grid-template-columns:repeat(var(--column),minmax(0,1fr))}.form-render__complexContent--flex{display:flex!important;gap:0 8px}.form-render__selectMenu .n-scrollbar-rail__scrollbar{display:none!important}.form-render__selectMenu .n-virtual-list::-webkit-scrollbar,.form-render__selectMenu .n-virtual-list::-webkit-scrollbar-thumb{display:unset!important;height:6px;width:6px}.form-render__selectMenu .n-virtual-list::-webkit-scrollbar-thumb{background:#bfbfbf;border-radius:4px}.form-render__selectMenu .v-vl-items{min-width:100%;width:max-content}.form-render__selectOption .n-base-select-option__content{overflow:visible!important;text-overflow:unset!important;word-break:keep-all!important}