@tmagic/editor 1.8.0-beta.13 → 1.8.0-beta.15
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/dist/es/Editor.vue_vue_type_script_setup_true_lang.js +15 -3
- package/dist/es/components/ContentMenu.vue_vue_type_script_setup_true_lang.js +31 -8
- package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +7 -2
- package/dist/es/fields/Code.vue_vue_type_script_setup_true_lang.js +15 -4
- package/dist/es/fields/CodeLink.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +80 -55
- package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +5 -1
- package/dist/es/fields/CondOpSelect.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +10 -7
- package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +4 -1
- package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/DataSourceSelect.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +8 -2
- package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +99 -64
- package/dist/es/fields/KeyValue.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/PageFragmentSelect.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +5 -4
- package/dist/es/fields/StyleSetter/components/BackgroundPosition.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/icons/align-items/Center.js +31 -0
- package/dist/es/fields/StyleSetter/icons/align-items/FlexEnd.js +31 -0
- package/dist/es/fields/StyleSetter/icons/align-items/FlexStart.js +31 -0
- package/dist/es/fields/StyleSetter/icons/align-items/SpaceAround.js +50 -0
- package/dist/es/fields/StyleSetter/icons/align-items/SpaceBetween.js +50 -0
- package/dist/es/fields/StyleSetter/icons/background-repeat/NoRepeat.js +6 -6
- package/dist/es/fields/StyleSetter/icons/background-repeat/Repeat.js +5 -2
- package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatX.js +28 -5
- package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatY.js +31 -5
- package/dist/es/fields/StyleSetter/icons/flex-direction/Column.js +10 -2
- package/dist/es/fields/StyleSetter/icons/flex-direction/ColumnReverse.js +10 -2
- package/dist/es/fields/StyleSetter/icons/flex-direction/Row.js +10 -2
- package/dist/es/fields/StyleSetter/icons/flex-direction/RowReverse.js +10 -2
- package/dist/es/fields/StyleSetter/icons/justify-content/Center.js +16 -2
- package/dist/es/fields/StyleSetter/icons/justify-content/FlexEnd.js +18 -2
- package/dist/es/fields/StyleSetter/icons/justify-content/FlexStart.js +18 -2
- package/dist/es/fields/StyleSetter/icons/justify-content/SpaceAround.js +36 -2
- package/dist/es/fields/StyleSetter/icons/justify-content/SpaceBetween.js +32 -2
- package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +7 -6
- package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +6 -3
- package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +47 -25
- package/dist/es/fields/UISelect.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/es/icons/DatasourceIcon.js +17 -0
- package/dist/es/index.js +2 -2
- package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +14 -10
- package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +13 -4
- package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/es/plugin.js +2 -1
- package/dist/es/services/editor.js +86 -24
- package/dist/es/services/history.js +16 -0
- package/dist/es/services/ui.js +5 -3
- package/dist/es/style.css +307 -40
- package/dist/es/utils/config.js +4 -1
- package/dist/es/utils/const.js +2 -2
- package/dist/es/utils/data-source/index.js +4 -2
- package/dist/es/utils/props.js +43 -29
- package/dist/es/utils/type-match-rules.js +12 -5
- package/dist/style.css +307 -40
- package/dist/themes/magic-admin.css +3004 -0
- package/dist/tmagic-editor.umd.cjs +1161 -476
- package/package.json +7 -7
- package/src/Editor.vue +22 -1
- package/src/components/ContentMenu.vue +44 -8
- package/src/components/FloatingBox.vue +8 -2
- package/src/editorProps.ts +4 -0
- package/src/fields/Code.vue +10 -2
- package/src/fields/CodeSelect.vue +54 -43
- package/src/fields/CodeSelectCol.vue +1 -0
- package/src/fields/DataSourceFieldSelect/Index.vue +14 -5
- package/src/fields/DisplayConds.vue +4 -1
- package/src/fields/EventSelect.vue +56 -32
- package/src/fields/StyleSetter/Index.vue +1 -4
- package/src/fields/StyleSetter/components/Border.vue +1 -1
- package/src/fields/StyleSetter/icons/align-items/Center.vue +19 -0
- package/src/fields/StyleSetter/icons/align-items/FlexEnd.vue +19 -0
- package/src/fields/StyleSetter/icons/align-items/FlexStart.vue +19 -0
- package/src/fields/StyleSetter/icons/align-items/SpaceAround.vue +34 -0
- package/src/fields/StyleSetter/icons/align-items/SpaceBetween.vue +34 -0
- package/src/fields/StyleSetter/icons/align-items/index.ts +5 -0
- package/src/fields/StyleSetter/icons/background-repeat/NoRepeat.vue +20 -4
- package/src/fields/StyleSetter/icons/background-repeat/Repeat.vue +10 -28
- package/src/fields/StyleSetter/icons/background-repeat/RepeatX.vue +4 -5
- package/src/fields/StyleSetter/icons/background-repeat/RepeatY.vue +4 -5
- package/src/fields/StyleSetter/icons/flex-direction/Column.vue +4 -3
- package/src/fields/StyleSetter/icons/flex-direction/ColumnReverse.vue +4 -3
- package/src/fields/StyleSetter/icons/flex-direction/Row.vue +4 -3
- package/src/fields/StyleSetter/icons/flex-direction/RowReverse.vue +4 -3
- package/src/fields/StyleSetter/icons/justify-content/Center.vue +5 -2
- package/src/fields/StyleSetter/icons/justify-content/FlexEnd.vue +15 -2
- package/src/fields/StyleSetter/icons/justify-content/FlexStart.vue +15 -2
- package/src/fields/StyleSetter/icons/justify-content/SpaceAround.vue +28 -3
- package/src/fields/StyleSetter/icons/justify-content/SpaceBetween.vue +28 -2
- package/src/fields/StyleSetter/pro/Background.vue +7 -2
- package/src/fields/StyleSetter/pro/Font.vue +3 -3
- package/src/fields/StyleSetter/pro/Layout.vue +98 -28
- package/src/icons/DatasourceIcon.vue +7 -0
- package/src/index.ts +3 -0
- package/src/layouts/Framework.vue +7 -1
- package/src/layouts/props-panel/PropsPanel.vue +38 -12
- package/src/layouts/sidebar/Sidebar.vue +3 -3
- package/src/plugin.ts +3 -2
- package/src/services/editor.ts +76 -11
- package/src/services/history.ts +22 -1
- package/src/services/ui.ts +20 -5
- package/src/theme/code-block.scss +37 -0
- package/src/theme/common/var.scss +1 -1
- package/src/theme/component-list-panel.scss +2 -2
- package/src/theme/data-source-field.scss +4 -0
- package/src/theme/display-conds.scss +11 -0
- package/src/theme/event.scss +58 -4
- package/src/theme/framework.scss +4 -1
- package/src/theme/history-list-panel.scss +9 -9
- package/src/theme/nav-menu.scss +5 -1
- package/src/theme/props-panel.scss +2 -1
- package/src/theme/style-setter/border.scss +14 -5
- package/src/theme/theme.scss +1 -0
- package/src/theme/themes/magic-admin/index.scss +214 -0
- package/src/theme/ui-select.scss +1 -1
- package/src/type.ts +33 -6
- package/src/utils/config.ts +9 -1
- package/src/utils/const.ts +3 -2
- package/src/utils/data-source/index.ts +3 -3
- package/src/utils/props.ts +22 -9
- package/src/utils/type-match-rules.ts +11 -5
- package/types/index.d.ts +114 -35
package/src/utils/const.ts
CHANGED
|
@@ -5,10 +5,11 @@ export const LEFT_COLUMN_WIDTH_STORAGE_KEY = '$MagicEditorLeftColumnWidthData';
|
|
|
5
5
|
export const RIGHT_COLUMN_WIDTH_STORAGE_KEY = '$MagicEditorRightColumnWidthData';
|
|
6
6
|
export const PROPS_PANEL_WIDTH_STORAGE_KEY = '$MagicEditorPropsPanelWidthData';
|
|
7
7
|
|
|
8
|
-
export const DEFAULT_LEFT_COLUMN_WIDTH =
|
|
8
|
+
export const DEFAULT_LEFT_COLUMN_WIDTH = 345;
|
|
9
9
|
export const DEFAULT_RIGHT_COLUMN_WIDTH = 480;
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
// 2026-06-11 设计稿修改,固定左侧栏存在时最小宽度为 345
|
|
12
|
+
export const MIN_LEFT_COLUMN_WIDTH = 345;
|
|
12
13
|
export const MIN_CENTER_COLUMN_WIDTH = 400;
|
|
13
14
|
export const MIN_RIGHT_COLUMN_WIDTH = 300;
|
|
14
15
|
|
|
@@ -243,7 +243,7 @@ export const resolveFieldByPath = (
|
|
|
243
243
|
fields: DataSchema[] | undefined,
|
|
244
244
|
fieldNames: string[],
|
|
245
245
|
options: { skipNumberIndices?: boolean } = {},
|
|
246
|
-
): { ok: boolean; field?: DataSchema; fields: DataSchema[] } => {
|
|
246
|
+
): { ok: boolean; field?: DataSchema; fields: DataSchema[]; failedName?: string } => {
|
|
247
247
|
let currentFields = fields || [];
|
|
248
248
|
let field: DataSchema | undefined;
|
|
249
249
|
|
|
@@ -252,11 +252,11 @@ export const resolveFieldByPath = (
|
|
|
252
252
|
continue;
|
|
253
253
|
}
|
|
254
254
|
if (!currentFields.length) {
|
|
255
|
-
return { ok: false, fields: currentFields };
|
|
255
|
+
return { ok: false, fields: currentFields, failedName: name };
|
|
256
256
|
}
|
|
257
257
|
field = currentFields.find((item) => item.name === name);
|
|
258
258
|
if (!field) {
|
|
259
|
-
return { ok: false, fields: currentFields };
|
|
259
|
+
return { ok: false, fields: currentFields, failedName: name };
|
|
260
260
|
}
|
|
261
261
|
currentFields = field.fields || [];
|
|
262
262
|
}
|
package/src/utils/props.ts
CHANGED
|
@@ -180,6 +180,7 @@ export const advancedTabConfig: TabPaneConfig = {
|
|
|
180
180
|
name: NODE_DISABLE_CODE_BLOCK_KEY,
|
|
181
181
|
text: '禁用代码块',
|
|
182
182
|
type: 'switch',
|
|
183
|
+
labelPosition: 'left',
|
|
183
184
|
defaultValue: false,
|
|
184
185
|
extra: '开启后,配置的代码块将不会被执行',
|
|
185
186
|
},
|
|
@@ -187,15 +188,16 @@ export const advancedTabConfig: TabPaneConfig = {
|
|
|
187
188
|
name: NODE_DISABLE_DATA_SOURCE_KEY,
|
|
188
189
|
text: '禁用数据源',
|
|
189
190
|
type: 'switch',
|
|
191
|
+
labelPosition: 'left',
|
|
190
192
|
defaultValue: false,
|
|
191
193
|
extra: '开启后,组件内配置的数据源相关配置将不会被编译,显隐条件将失效',
|
|
192
194
|
},
|
|
193
195
|
{
|
|
194
196
|
name: 'created',
|
|
195
|
-
text: '
|
|
197
|
+
text: 'Created',
|
|
196
198
|
labelPosition: 'top',
|
|
197
199
|
type: 'code-select',
|
|
198
|
-
|
|
200
|
+
titleExtra: '组件初始化时执行',
|
|
199
201
|
rules: [
|
|
200
202
|
{ typeMatch: true, trigger: 'change' },
|
|
201
203
|
{
|
|
@@ -210,10 +212,10 @@ export const advancedTabConfig: TabPaneConfig = {
|
|
|
210
212
|
},
|
|
211
213
|
{
|
|
212
214
|
name: 'mounted',
|
|
213
|
-
text: '
|
|
215
|
+
text: 'Mounted',
|
|
214
216
|
labelPosition: 'top',
|
|
215
217
|
type: 'code-select',
|
|
216
|
-
|
|
218
|
+
titleExtra: '组件挂载到dom时执行',
|
|
217
219
|
rules: [
|
|
218
220
|
{ typeMatch: true, trigger: 'change' },
|
|
219
221
|
{
|
|
@@ -228,8 +230,8 @@ export const advancedTabConfig: TabPaneConfig = {
|
|
|
228
230
|
},
|
|
229
231
|
{
|
|
230
232
|
name: 'display',
|
|
231
|
-
text: '
|
|
232
|
-
|
|
233
|
+
text: 'Display',
|
|
234
|
+
titleExtra: '控制组件是否渲染,关系的代码块返回值为false时不渲染',
|
|
233
235
|
labelPosition: 'top',
|
|
234
236
|
type: 'code-select',
|
|
235
237
|
rules: [
|
|
@@ -263,10 +265,17 @@ export const displayTabConfig: TabPaneConfig<DisplayCondsConfig> = {
|
|
|
263
265
|
extra: (_state, { model }) =>
|
|
264
266
|
`条件成立时${model[NODE_CONDS_RESULT_KEY] ? '隐藏' : '显示'},不成立时${model[NODE_CONDS_RESULT_KEY] ? '显示' : '隐藏'};<br />同一条件组内的所有条件配置同时成立时表示该条件组成立,任意一个条件组成立时表示条件成立(条件组内为且的关系,条件组间为或的关系);<br />条件为空时表示成立;`,
|
|
265
267
|
},
|
|
268
|
+
{
|
|
269
|
+
text: '条件组配置',
|
|
270
|
+
static: true,
|
|
271
|
+
className: 'display-conds-title',
|
|
272
|
+
},
|
|
266
273
|
{
|
|
267
274
|
type: 'display-conds',
|
|
268
275
|
name: NODE_CONDS_KEY,
|
|
269
276
|
titlePrefix: '条件组',
|
|
277
|
+
fixed: 'right',
|
|
278
|
+
operateColWidth: 112,
|
|
270
279
|
defaultValue: [],
|
|
271
280
|
rules: [{ typeMatch: true }],
|
|
272
281
|
},
|
|
@@ -303,10 +312,13 @@ export const fillConfig = (
|
|
|
303
312
|
name: 'id',
|
|
304
313
|
text: 'ID',
|
|
305
314
|
type: 'text',
|
|
306
|
-
disabled
|
|
315
|
+
// 走纯文本渲染,避免出现 disabled 的灰底输入框;append 仍正常显示。
|
|
316
|
+
static: true,
|
|
317
|
+
|
|
307
318
|
append: {
|
|
308
|
-
type: '
|
|
309
|
-
text: '
|
|
319
|
+
type: 'icon',
|
|
320
|
+
text: 'https://vip.image.video.qpic.cn/vupload/20260615/36cf7e1781493669935.svg',
|
|
321
|
+
extra: '复制',
|
|
310
322
|
handler: (vm, { model }) => {
|
|
311
323
|
navigator.clipboard
|
|
312
324
|
.writeText(`${model.id}`)
|
|
@@ -339,6 +351,7 @@ export const fillConfig = (
|
|
|
339
351
|
const tabConfig: TabConfig = {
|
|
340
352
|
type: 'tab',
|
|
341
353
|
labelWidth,
|
|
354
|
+
className: 'magic-right-panel-tabs-top',
|
|
342
355
|
items: [
|
|
343
356
|
{
|
|
344
357
|
title: '属性',
|
|
@@ -20,6 +20,7 @@ import type { DataSourceFieldType, DataSourceSchema, Id } from '@tmagic/core';
|
|
|
20
20
|
import { NodeType } from '@tmagic/core';
|
|
21
21
|
import { appendValidateSuggestion } from '@tmagic/design';
|
|
22
22
|
import type { TypeMatchValidateContext, TypeMatchValidator } from '@tmagic/form';
|
|
23
|
+
import { validateTypeMatch } from '@tmagic/form';
|
|
23
24
|
import {
|
|
24
25
|
DATA_SOURCE_FIELDS_SELECT_VALUE_PREFIX,
|
|
25
26
|
DATA_SOURCE_SET_DATA_METHOD_NAME,
|
|
@@ -261,16 +262,20 @@ const validateDataSourceFieldPath = (
|
|
|
261
262
|
|
|
262
263
|
const ds = findDataSource(`${dsId}`);
|
|
263
264
|
if (!ds) {
|
|
264
|
-
return defaultMessage(options.message,
|
|
265
|
+
return defaultMessage(options.message, `数据源(${dsId})不存在`, dataSourceIdSuggestion());
|
|
265
266
|
}
|
|
266
267
|
|
|
267
268
|
if (!fieldNames.length) {
|
|
268
269
|
return undefined;
|
|
269
270
|
}
|
|
270
271
|
|
|
271
|
-
const { field, ok } = resolveFieldByPath(ds.fields, fieldNames);
|
|
272
|
+
const { field, ok, fields, failedName } = resolveFieldByPath(ds.fields, fieldNames);
|
|
272
273
|
if (!ok) {
|
|
273
|
-
return defaultMessage(
|
|
274
|
+
return defaultMessage(
|
|
275
|
+
options.message,
|
|
276
|
+
`数据源字段(${failedName})不存在`,
|
|
277
|
+
listSuggestion(fields.map((item) => item.name)),
|
|
278
|
+
);
|
|
274
279
|
}
|
|
275
280
|
|
|
276
281
|
const allowedTypes = options.dataSourceFieldType || ['any'];
|
|
@@ -471,11 +476,12 @@ const isDataSourceFieldPathValue = (value: any, config: any): value is string[]
|
|
|
471
476
|
return `${value[0]}`.startsWith(DATA_SOURCE_FIELDS_SELECT_VALUE_PREFIX);
|
|
472
477
|
};
|
|
473
478
|
|
|
474
|
-
const validateDataSourceFieldSelect: TypeMatchValidator = (value, { message, props }) => {
|
|
479
|
+
const validateDataSourceFieldSelect: TypeMatchValidator = (value, { mForm, message, props }) => {
|
|
475
480
|
const config = props.config || {};
|
|
476
481
|
|
|
477
482
|
if (config.fieldConfig && !isDataSourceFieldPathValue(value, config)) {
|
|
478
|
-
|
|
483
|
+
// 值不是数据源字段路径时,按 fieldConfig 的类型校验(与表单项自身 typeMatch 行为一致)
|
|
484
|
+
return validateTypeMatch(value, mForm, { ...props, config: { name: config.name, ...config.fieldConfig } }, message);
|
|
479
485
|
}
|
|
480
486
|
|
|
481
487
|
if (!Array.isArray(value) || value.some((item) => typeof item !== 'string')) {
|