diff --git a/app/src/main/java/com/tinyengine/it/TinyEngineApplication.java b/app/src/main/java/com/tinyengine/it/TinyEngineApplication.java index 78c56cd8..34fc2366 100644 --- a/app/src/main/java/com/tinyengine/it/TinyEngineApplication.java +++ b/app/src/main/java/com/tinyengine/it/TinyEngineApplication.java @@ -13,10 +13,16 @@ package com.tinyengine.it; import org.mybatis.spring.annotation.MapperScan; +import org.springframework.ai.tool.ToolCallbackProvider; +import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.EnableAspectJAutoProxy; +import java.util.Map; + /** * The type Tiny engine application. * @@ -24,7 +30,7 @@ */ @SpringBootApplication @EnableAspectJAutoProxy -@MapperScan({"com.tinyengine.it.mapper","com.tinyengine.it.dynamic.dao"}) +@MapperScan({"com.tinyengine.it.mapper","com.tinyengine.it.dynamic.dao","com.tinyengine.it.mcp.tools"}) public class TinyEngineApplication { /** * The entry point of application. @@ -34,4 +40,7 @@ public class TinyEngineApplication { public static void main(String[] args) { SpringApplication.run(TinyEngineApplication.class, args); } + + + } diff --git a/app/src/main/resources/application-alpha.yml b/app/src/main/resources/application-alpha.yml index ed635829..d84c5b8c 100644 --- a/app/src/main/resources/application-alpha.yml +++ b/app/src/main/resources/application-alpha.yml @@ -28,6 +28,24 @@ spring: min-evictable-idle-time-millis: 300000 # 连接在池中保持空闲的最小时间(单位:毫秒)。如果空闲时间超过这个值,连接将被回收,默认值为 1800000。 pool-prepared-statements: true # 是否缓存 PreparedStatement 对象,默认值为 true。 max-open-prepared-statements: 20 # 最大缓存的 PreparedStatement 数量,默认值为 -1,表示无限制。如果 `pool-prepared-statements` 设置为 true,设置此值以限制缓存数量。 + ai: + mcp: + server: + enabled: true + protocol: STREAMABLE + version: 1.0.0 + tool-change-notification: true + type: SYNC + annotation-scanner: + enabled: false + capabilities: + tool: true + streamable-http: + mcp-endpoint: /mcp + name: tiny-engine-mcp + + + # 清空任务配置 cleanup: enabled: false @@ -89,3 +107,19 @@ logging: cors: allowed-origins: "*" + +openai: + api-key: your-api-key + base-url: https://api.deepseek.com/v1/chat/completions + default-model: deepseek-chat + timeout-seconds: 300 + streamable-tools: + doc_tools: https://agent.opentiny.design/servers/doc-tools-mcp/mcp # 工具名 -> SSE服务URL + + + streamable-http: + max-connections: 10 + connection-timeout-seconds: 30 + request-timeout-seconds: 60 + protocol-version: 2025-06-18 + diff --git a/app/src/main/resources/sql/mysql/init_data_for_test_v1.0.0.sql b/app/src/main/resources/sql/mysql/init_data_for_test_v1.0.0.sql index 90cac118..4b0af31e 100644 --- a/app/src/main/resources/sql/mysql/init_data_for_test_v1.0.0.sql +++ b/app/src/main/resources/sql/mysql/init_data_for_test_v1.0.0.sql @@ -24,13 +24,13 @@ INSERT INTO `t_component` VALUES (5, '2.4.2', '{\"zh_CN\":\"表单子项\"}', 'E INSERT INTO `t_component` VALUES (6, '2.4.2', '{\"zh_CN\":\"表单\"}', 'ElTable', 'table', '用于展示多条结构类似的数据, 可对数据进行排序、筛选、对比或其他自定义操作', '', '', '', '', 'proCode', '{\"package\":\"element-plus\",\"exportName\":\"ElTable\",\"destructuring\":true}', '数据展示', 'element-plus', NULL, '[{\"name\":{\"zh_CN\":\"表格\"},\"icon\":\"grid\",\"screenshot\":\"\",\"snippetName\":\"ElTable\",\"schema\":{\"props\":{\"data\":[{\"date\":\"2016-05-03\",\"name\":\"Tom\",\"address\":\"No. 189, Grove St, Los Angeles\"},{\"date\":\"2016-05-02\",\"name\":\"Tom\",\"address\":\"No. 189, Grove St, Los Angeles\"},{\"date\":\"2016-05-04\",\"name\":\"Tom\",\"address\":\"No. 189, Grove St, Los Angeles\"},{\"date\":\"2016-05-01\",\"name\":\"Tom\",\"address\":\"No. 189, Grove St, Los Angeles\"}],\"columns\":[{\"type\":\"index\"},{\"label\":\"Date\",\"prop\":\"date\"},{\"label\":\"Name\",\"prop\":\"name\"},{\"label\":\"Address\",\"prop\":\"address\"}]}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"description\":{\"zh_CN\":\"显示的数据\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"top\",\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}}},{\"property\":\"columns\",\"label\":{\"text\":{\"zh_CN\":\"表格列配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"type\",\"type\":\"string\",\"labelPosition\":\"top\",\"label\":{\"text\":{\"zh_CN\":\"type\"}},\"description\":{\"text\":{\"zh_CN\":\"对应列的类型。 如果设置了selection则显示多选框; 如果设置了 index 则显示该行的索引(从 1 开始计算); 如果设置了 expand 则显示为一个可展开的按钮\"}},\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"selection\",\"value\":\"selection\"},{\"label\":\"index\",\"value\":\"index\"},{\"label\":\"expand\",\"value\":\"expand\"}]}}},{\"property\":\"index\",\"type\":\"string\",\"labelPosition\":\"top\",\"label\":{\"text\":{\"zh_CN\":\"index\"}},\"description\":{\"text\":{\"zh_CN\":\"如果设置了 type=index,可以通过传递 index 属性来自定义索引\"}},\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}}},{\"property\":\"label\",\"type\":\"string\",\"labelPosition\":\"top\",\"label\":{\"text\":{\"zh_CN\":\"label\"}},\"description\":{\"text\":{\"zh_CN\":\"显示的标题\"}},\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}}},{\"property\":\"column-key\",\"type\":\"string\",\"labelPosition\":\"top\",\"label\":{\"text\":{\"zh_CN\":\"column-key\"}},\"description\":{\"text\":{\"zh_CN\":\"column 的 key, column 的 key, 如果需要使用 filter-change 事件,则需要此属性标识是哪个 column 的筛选条件\"}},\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}}},{\"property\":\"prop\",\"type\":\"string\",\"labelPosition\":\"top\",\"label\":{\"text\":{\"zh_CN\":\"prop\"}},\"description\":{\"text\":{\"zh_CN\":\"字段名称 对应列内容的字段名, 也可以使用 property属性\"}},\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}}},{\"property\":\"width\",\"type\":\"number\",\"labelPosition\":\"top\",\"label\":{\"text\":{\"zh_CN\":\"width\"}},\"description\":{\"text\":{\"zh_CN\":\"对应列的宽度\"}},\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}}},{\"property\":\"min-width\",\"type\":\"number\",\"labelPosition\":\"top\",\"label\":{\"text\":{\"zh_CN\":\"min-width\"}},\"description\":{\"text\":{\"zh_CN\":\"对应列的最小宽度, 对应列的最小宽度, 与 width 的区别是 width 是固定的,min-width 会把剩余宽度按比例分配给设置了 min-width 的列\"}},\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}}},{\"property\":\"fixed\",\"type\":\"string\",\"labelPosition\":\"top\",\"label\":{\"text\":{\"zh_CN\":\"fixed\"}},\"description\":{\"text\":{\"zh_CN\":\"列是否固定在左侧或者右侧。 true 表示固定在左侧\"}},\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"left\",\"value\":\"left\"},{\"label\":\"right\",\"value\":\"right\"}]}}},{\"property\":\"sortable\",\"type\":\"boolean\",\"labelPosition\":\"left\",\"label\":{\"text\":{\"zh_CN\":\"sortable\"}},\"description\":{\"text\":{\"zh_CN\":\"对应列是否可以排序\"}},\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}}},{\"property\":\"sort-method\",\"type\":\"function\",\"labelPosition\":\"top\",\"label\":{\"text\":{\"zh_CN\":\"sort-method\"}},\"description\":{\"text\":{\"zh_CN\":\"指定数据按照哪个属性进行排序,仅当sortable设置为true的时候有效。 应该如同 Array.sort 那样返回一个 Number\"}},\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}}},{\"property\":\"sort-by\",\"type\":\"array\",\"labelPosition\":\"top\",\"label\":{\"text\":{\"zh_CN\":\"sort-by\"}},\"description\":{\"text\":{\"zh_CN\":\"指定数据按照哪个属性进行排序,仅当 sortable 设置为 true 且没有设置 sort-method 的时候有效。 如果 sort-by 为数组,则先按照第 1 个属性排序,如果第 1 个相等,再按照第 2 个排序,以此类推\"}},\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}}},{\"property\":\"sort-orders\",\"type\":\"array\",\"labelPosition\":\"top\",\"label\":{\"text\":{\"zh_CN\":\"sort-orders\"}},\"description\":{\"text\":{\"zh_CN\":\"数据在排序时所使用排序策略的轮转顺序,仅当 sortable 为 true 时有效。 需传入一个数组,随着用户点击表头,该列依次按照数组中元素的顺序进行排序\"}},\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}}},{\"property\":\"resizable\",\"type\":\"boolean\",\"labelPosition\":\"left\",\"defaultValue\":true,\"label\":{\"text\":{\"zh_CN\":\"resizable\"}},\"description\":{\"text\":{\"zh_CN\":\"对应列是否可以通过拖动改变宽度(需要在 el-table 上设置 border 属性为真)\"}},\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}}},{\"property\":\"formatter\",\"type\":\"function\",\"labelPosition\":\"top\",\"defaultValue\":true,\"label\":{\"text\":{\"zh_CN\":\"formatter\"}},\"description\":{\"text\":{\"zh_CN\":\"用来格式化内容\"}},\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"dataType\":\"JSFunction\"}}},{\"property\":\"show-overflow-tooltip\",\"type\":\"boolean\",\"labelPosition\":\"left\",\"defaultValue\":true,\"label\":{\"text\":{\"zh_CN\":\"show-overflow-tooltip\"}},\"description\":{\"text\":{\"zh_CN\":\"当内容过长被隐藏时显示 tooltip\"}},\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}}},{\"property\":\"align\",\"type\":\"string\",\"labelPosition\":\"top\",\"defaultValue\":\"left\",\"label\":{\"text\":{\"zh_CN\":\"align\"}},\"description\":{\"text\":{\"zh_CN\":\"对齐方式\"}},\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"left\",\"value\":\"left\"},{\"label\":\"center\",\"value\":\"center\"},{\"label\":\"right\",\"value\":\"right\"}]}}},{\"property\":\"header-align\",\"type\":\"string\",\"labelPosition\":\"top\",\"defaultValue\":\"left\",\"label\":{\"text\":{\"zh_CN\":\"header-align\"}},\"description\":{\"text\":{\"zh_CN\":\"表头对齐方式, 若不设置该项,则使用表格的对齐方式\"}},\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"left\",\"value\":\"left\"},{\"label\":\"center\",\"value\":\"center\"},{\"label\":\"right\",\"value\":\"right\"}]}}},{\"property\":\"class-name\",\"type\":\"string\",\"labelPosition\":\"top\",\"defaultValue\":\"left\",\"label\":{\"text\":{\"zh_CN\":\"class-name\"}},\"description\":{\"text\":{\"zh_CN\":\"列的 className\"}},\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}}},{\"property\":\"label-class-name\",\"type\":\"string\",\"labelPosition\":\"top\",\"defaultValue\":\"left\",\"label\":{\"text\":{\"zh_CN\":\"label-class-name\"}},\"description\":{\"text\":{\"zh_CN\":\"当前列标题的自定义类名\"}},\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}}},{\"property\":\"selectable\",\"type\":\"function\",\"labelPosition\":\"top\",\"defaultValue\":true,\"label\":{\"text\":{\"zh_CN\":\"selectable\"}},\"description\":{\"text\":{\"zh_CN\":\"仅对 type=selection 的列有效,类型为 Function,Function 的返回值用来决定这一行的 CheckBox 是否可以勾选\"}},\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}}},{\"property\":\"reserve-selection\",\"type\":\"boolean\",\"labelPosition\":\"left\",\"defaultValue\":true,\"label\":{\"text\":{\"zh_CN\":\"reserve-selection\"}},\"description\":{\"text\":{\"zh_CN\":\"数据刷新后是否保留选项,仅对 type=selection 的列有效, 请注意, 需指定 row-key 来让这个功能生效。\"}},\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}}},{\"property\":\"filters\",\"type\":\"array\",\"labelPosition\":\"top\",\"defaultValue\":true,\"label\":{\"text\":{\"zh_CN\":\"filters\"}},\"description\":{\"text\":{\"zh_CN\":\"数据刷新后是否保留选项,仅对 type=selection 的列有效, 请注意, 需指定 row-key 来让这个功能生效。\"}},\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}}},{\"property\":\"filter-placement\",\"type\":\"string\",\"labelPosition\":\"top\",\"label\":{\"text\":{\"zh_CN\":\"filter-placement\"}},\"description\":{\"text\":{\"zh_CN\":\"过滤弹出框的定位\"}},\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}}},{\"property\":\"filter-multiple\",\"type\":\"string\",\"labelPosition\":\"left\",\"defaultValue\":true,\"label\":{\"text\":{\"zh_CN\":\"filter-multiple\"}},\"description\":{\"text\":{\"zh_CN\":\"数据过滤的选项是否多选\"}},\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}}},{\"property\":\"filter-method\",\"type\":\"function\",\"labelPosition\":\"top\",\"defaultValue\":true,\"label\":{\"text\":{\"zh_CN\":\"filter-method\"}},\"description\":{\"text\":{\"zh_CN\":\"数据过滤使用的方法, 如果是多选的筛选项,对每一条数据会执行多次,任意一次返回 true 就会显示\"}},\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}}},{\"property\":\"filtered-value\",\"type\":\"array\",\"labelPosition\":\"top\",\"defaultValue\":true,\"label\":{\"text\":{\"zh_CN\":\"filtered-value\"}},\"description\":{\"text\":{\"zh_CN\":\"选中的数据过滤项,如果需要自定义表头过滤的渲染方式,可能会需要此属性\"}},\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}}}]}],\"widget\":{\"component\":\"TableColumnsConfigurator\",\"props\":{\"type\":\"object\",\"textField\":\"label\",\"language\":\"json\",\"buttonText\":\"编辑列配置\",\"title\":\"编辑列配置\",\"expand\":true}},\"description\":{\"zh_CN\":\"表格列的配置信息\"},\"labelPosition\":\"top\"},{\"property\":\"max-height\",\"label\":{\"text\":{\"zh_CN\":\"最大高度\"}},\"description\":{\"zh_CN\":\"Table 的最大高度。\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"left\",\"type\":\"number\",\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"device\":[]},{\"property\":\"height\",\"label\":{\"text\":{\"zh_CN\":\"表格高度\"}},\"description\":{\"zh_CN\":\"Table 的高度, 默认为自动高度。 这个高度会设置为 Table 的 style.height 的值,Table 的高度会受控于外部样式。\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"left\",\"type\":\"string\",\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"device\":[]},{\"property\":\"stripe\",\"label\":{\"text\":{\"zh_CN\":\"斑马纹\"}},\"description\":{\"zh_CN\":\"是否为斑马纹 table\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"left\",\"defaultValue\":false,\"type\":\"boolean\",\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}}},{\"property\":\"border\",\"label\":{\"text\":{\"zh_CN\":\"纵向边框\"}},\"description\":{\"zh_CN\":\"是否带有纵向边框\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"left\",\"defaultValue\":false,\"type\":\"boolean\",\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}}},{\"property\":\"size\",\"label\":{\"text\":{\"zh_CN\":\"表格尺寸\"}},\"description\":{\"zh_CN\":\"Table 的尺寸\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"left\",\"type\":\"string\",\"defaultValue\":\"default\",\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"large\",\"value\":\"large\"},{\"label\":\"default\",\"value\":\"default\"},{\"label\":\"small\",\"value\":\"small\"}]}}},{\"property\":\"fit\",\"label\":{\"text\":{\"zh_CN\":\"列宽自撑开\"}},\"description\":{\"zh_CN\":\"列的宽度是否自撑开\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"left\",\"defaultValue\":true,\"type\":\"boolean\",\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}}},{\"property\":\"show-header\",\"label\":{\"text\":{\"zh_CN\":\"显示表头\"}},\"description\":{\"zh_CN\":\"是否显示表头\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"left\",\"defaultValue\":true,\"type\":\"boolean\",\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}}},{\"property\":\"highlight-current-row\",\"label\":{\"text\":{\"zh_CN\":\"高亮当前行\"}},\"description\":{\"zh_CN\":\"是否要高亮当前行\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"left\",\"defaultValue\":false,\"type\":\"boolean\",\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}}},{\"property\":\"current-row-key\",\"label\":{\"text\":{\"zh_CN\":\"当前行的 key\"}},\"description\":{\"zh_CN\":\"当前行的 key,只写属性\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"top\",\"type\":\"string\",\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"device\":[]},{\"property\":\"row-class-name\",\"label\":{\"text\":{\"zh_CN\":\"行的类名\"}},\"description\":{\"zh_CN\":\"行的 className\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"left\",\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"device\":[]},{\"property\":\"row-key\",\"label\":{\"text\":{\"zh_CN\":\"行数据的 Key\"}},\"description\":{\"zh_CN\":\"行数据的 Key,用来优化 Table 的渲染; 在使用reserve-selection功能与显示树形数据时,该属性是必填的。 类型为 String 时,支持多层访问:user.info.id,但不支持 user.info[0].id,此种情况请使用 Function\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"top\",\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"device\":[]},{\"property\":\"empty-text\",\"label\":{\"text\":{\"zh_CN\":\"空数据文本\"}},\"description\":{\"zh_CN\":\"空数据时显示的文本内容\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"left\",\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"device\":[]},{\"property\":\"table-layout\",\"label\":{\"text\":{\"zh_CN\":\"表格布局方式\"}},\"description\":{\"zh_CN\":\"设置表格单元、行和列的布局方式\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"top\",\"defaultValue\":\"fixed\",\"widget\":{\"component\":\"InputConfigurator\",\"props\":{\"options\":[{\"label\":\"fixed\",\"value\":\"fixed\"},{\"label\":\"auto\",\"value\":\"auto\"}]}},\"device\":[]},{\"property\":\"scrollbar-always-on\",\"label\":{\"text\":{\"zh_CN\":\"显示滚动条\"}},\"description\":{\"zh_CN\":\"总是显示滚动条\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"left\",\"defaultValue\":false,\"type\":\"boolean\",\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}}},{\"property\":\"flexible\",\"label\":{\"text\":{\"zh_CN\":\"主轴最小尺寸\"}},\"description\":{\"zh_CN\":\"确保主轴的最小尺寸,以便不超过内容\"},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"labelPosition\":\"left\",\"defaultValue\":false,\"type\":\"boolean\",\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}}}],\"description\":{\"zh_CN\":\"\"}}],\"events\":{\"onSelect\":{\"label\":{\"zh_CN\":\"勾选数据行的 Checkbox 时触发\"},\"description\":{\"zh_CN\":\"当用户手动勾选数据行的 Checkbox 时触发的事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"selection\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前选中项\"}},{\"name\":\"row\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前行\"}}],\"returns\":{}}},\"onSelectAll\":{\"label\":{\"zh_CN\":\"勾选全选时触发\"},\"description\":{\"zh_CN\":\"当用户手动勾选全选 Checkbox 时触发的事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"selection\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前选中项\"}}],\"returns\":{}}},\"onSelectionChange\":{\"label\":{\"zh_CN\":\"选择项发生变化时会触发\"},\"description\":{\"zh_CN\":\"当选择项发生变化时会触发该事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"selection\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前选中项\"}}],\"returns\":{}}},\"onCellMouseEnter\":{\"label\":{\"zh_CN\":\"单元格 hover 时会触发\"},\"description\":{\"zh_CN\":\"当单元格 hover 进入时会触发该事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"row\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前行\"}},{\"name\":\"column\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前列\"}},{\"name\":\"cell\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前单元格\"}},{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"原生事件 event\"}}],\"returns\":{}}},\"onCellMouseLeave\":{\"label\":{\"zh_CN\":\"单元格 hover 退出时会触发\"},\"description\":{\"zh_CN\":\"当单元格 hover 退出时会触发该事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"row\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前行\"}},{\"name\":\"column\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前列\"}},{\"name\":\"cell\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前单元格\"}},{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"原生事件 event\"}}],\"returns\":{}}}},\"slots\":{\"empty\":{\"label\":{\"zh_CN\":\"empty\"},\"description\":{\"zh_CN\":\"当数据为空时自定义的内容\"}},\"append\":{\"label\":{\"zh_CN\":\"append\"},\"description\":{\"zh_CN\":\"插入至表格最后一行之后的内容, 如果需要对表格的内容进行无限滚动操作,可能需要用到这个 slot。 若表格有合计行,该 slot 会位于合计行之上。\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"isPopper\":false,\"nestingRule\":{\"childWhitelist\":[\"ElTableColumn\"],\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"inline\",\"label-width\"]},\"contextMenu\":{\"actions\":[\"copy\",\"remove\",\"insert\",\"updateAttr\",\"bindEvent\",\"createBlock\"],\"disable\":[]},\"invalidity\":[\"\"],\"clickCapture\":true,\"framework\":\"Vue\"}', 1, 'Vue', 1, 1, 0, NULL, 2, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); INSERT INTO `t_component` VALUES (7, '2.4.2', '{\"zh_CN\":\"表单\"}', 'ElTableColumn', 'table', '用于展示多条结构类似的数据, 可对数据进行排序、筛选、对比或其他自定义操作', '', '', '', '', 'proCode', '{\"package\":\"element-plus\",\"exportName\":\"ElTableColumn\",\"destructuring\":true}', '表单组件', 'element-plus', NULL, NULL, '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[],\"description\":{\"zh_CN\":\"\"}}],\"events\":{},\"slots\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"isPopper\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"inline\",\"label-width\"]},\"contextMenu\":{\"actions\":[\"copy\",\"remove\",\"insert\",\"updateAttr\",\"bindEvent\",\"createBlock\"],\"disable\":[]},\"invalidity\":[\"\"],\"clickCapture\":true,\"framework\":\"Vue\"}', 1, 'Vue', 1, 1, 0, NULL, 2, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); INSERT INTO `t_component` VALUES (8, '3.20.0', '{\"zh_CN\":\"走马灯子项\"}', 'TinyCarouselItem', 'carouselitem', '常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现。', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"CarouselItem\",\"destructuring\":true}', 'component', '容器组件', 2, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"name\",\"label\":{\"text\":{\"zh_CN\":\"名称\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"幻灯片的名字,可用作 setActiveItem 的参数\"},\"labelPosition\":\"left\"},{\"property\":\"title\",\"label\":{\"text\":{\"zh_CN\":\"标题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"幻灯片的标题\"},\"labelPosition\":\"left\"},{\"property\":\"indicator-position\",\"label\":{\"text\":{\"zh_CN\":\"指示器位置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"ButtonGroupConfigurator\",\"props\":{\"options\":[{\"label\":\"outside\",\"value\":\"outside\"},{\"label\":\"none\",\"value\":\"none\"}]}},\"description\":{\"zh_CN\":\"指示器的位置\"},\"labelPosition\":\"left\"}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":true,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":[],\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"disabled\",\"size\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); -INSERT INTO `t_component` VALUES (9, '3.20.0', '{\"zh_CN\":\"走马灯\"}', 'TinyCarousel', 'carousel', '常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现。', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Carousel\",\"destructuring\":true}', 'component', '容器组件', 2, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"arrow\",\"label\":{\"text\":{\"zh_CN\":\"箭头显示时机\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{\"options\":[{\"label\":\"总是显示\",\"value\":\"always\"},{\"label\":\"鼠标悬停时显示\",\"value\":\"hover\"},{\"label\":\"从不显示\",\"value\":\"never\"}]}},\"description\":{\"zh_CN\":\"切换箭头的显示时机\"}},{\"property\":\"autoplay\",\"label\":{\"text\":{\"zh_CN\":\"自动切换\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否自动切换\"},\"labelPosition\":\"left\"},{\"property\":\"tabs\",\"label\":{\"text\":{\"zh_CN\":\"选项卡\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"\",\"cols\":12,\"bindState\":false,\"widget\":{\"component\":\"ContainerConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"tabs 选项卡\"},\"labelPosition\":\"none\"},{\"property\":\"height\",\"label\":{\"text\":{\"zh_CN\":\"高度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"走马灯的高度\"}},{\"property\":\"indicator-position\",\"label\":{\"text\":{\"zh_CN\":\"位置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{\"options\":[{\"label\":\"走马灯外部\",\"value\":\"outside\"},{\"label\":\"不显示\",\"value\":\"none\"}]}},\"description\":{\"zh_CN\":\"指示器的位置\"}},{\"property\":\"initial-index\",\"label\":{\"text\":{\"zh_CN\":\"初始索引\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"初始状态激活的幻灯片的索引,从 0 开始 \"}},{\"property\":\"interval\",\"label\":{\"text\":{\"zh_CN\":\"自动切换间隔\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"自动切换的时间间隔,单位为毫秒\"}},{\"property\":\"loop\",\"label\":{\"text\":{\"zh_CN\":\"循环显示\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否循环显示\"},\"labelPosition\":\"left\"},{\"property\":\"show-title\",\"label\":{\"text\":{\"zh_CN\":\"显示标题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否显示标题\"},\"labelPosition\":\"left\"},{\"property\":\"trigger\",\"label\":{\"text\":{\"zh_CN\":\"触发方式\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{\"options\":[{\"label\":\"点击\",\"value\":\"click\"},{\"label\":\"悬停\",\"value\":\"hover\"}]}},\"description\":{\"zh_CN\":\"指示器的触发方式,默认为 hover\"}},{\"property\":\"type\",\"label\":{\"text\":{\"zh_CN\":\"类型\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{\"options\":[{\"label\":\"水平\",\"value\":\"horizontal\"},{\"label\":\"垂直\",\"value\":\"vertical\"},{\"label\":\"卡片\",\"value\":\"card\"}]}},\"description\":{\"zh_CN\":\"走马灯的类型\"}}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":true,\"clickCapture\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":[\"TinyCarouselItem\"],\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"disabled\",\"size\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); +INSERT INTO `t_component` VALUES (9, '3.20.0', '{\"zh_CN\":\"走马灯\"}', 'TinyCarousel', 'carousel', '常用于一组图片或卡片轮播,当内容空间不足时,可以用走马灯的形式进行收纳,进行轮播展现。', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Carousel\",\"destructuring\":true}', 'component', '容器组件', 2, '[{\"name\":{\"zh_CN\":\"走马灯\"},\"icon\":\"carousel\",\"screenshot\":\"\",\"snippetName\":\"TinyCarousel\",\"schema\":{\"componentName\":\"TinyCarousel\",\"props\":{\"height\":\"180px\"},\"children\":[{\"componentName\":\"TinyCarouselItem\",\"props\":{\"title\":\"carousel-item-a\"},\"children\":[{\"componentName\":\"div\",\"props\":{\"style\":\"margin:10px 0 0 30px\"}}]},{\"componentName\":\"TinyCarouselItem\",\"props\":{\"title\":\"carousel-item-b\"},\"children\":[{\"componentName\":\"div\",\"props\":{\"style\":\"margin:10px 0 0 30px\"}}]}]}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"arrow\",\"label\":{\"text\":{\"zh_CN\":\"箭头显示时机\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{\"options\":[{\"label\":\"总是显示\",\"value\":\"always\"},{\"label\":\"鼠标悬停时显示\",\"value\":\"hover\"},{\"label\":\"从不显示\",\"value\":\"never\"}]}},\"description\":{\"zh_CN\":\"切换箭头的显示时机\"}},{\"property\":\"autoplay\",\"label\":{\"text\":{\"zh_CN\":\"自动切换\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否自动切换\"},\"labelPosition\":\"left\"},{\"property\":\"tabs\",\"label\":{\"text\":{\"zh_CN\":\"选项卡\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"\",\"cols\":12,\"bindState\":false,\"widget\":{\"component\":\"ContainerConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"tabs 选项卡\"},\"labelPosition\":\"none\"},{\"property\":\"height\",\"label\":{\"text\":{\"zh_CN\":\"高度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"走马灯的高度\"}},{\"property\":\"indicator-position\",\"label\":{\"text\":{\"zh_CN\":\"位置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{\"options\":[{\"label\":\"走马灯外部\",\"value\":\"outside\"},{\"label\":\"不显示\",\"value\":\"none\"}]}},\"description\":{\"zh_CN\":\"指示器的位置\"}},{\"property\":\"initial-index\",\"label\":{\"text\":{\"zh_CN\":\"初始索引\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"初始状态激活的幻灯片的索引,从 0 开始 \"}},{\"property\":\"interval\",\"label\":{\"text\":{\"zh_CN\":\"自动切换间隔\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"自动切换的时间间隔,单位为毫秒\"}},{\"property\":\"loop\",\"label\":{\"text\":{\"zh_CN\":\"循环显示\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否循环显示\"},\"labelPosition\":\"left\"},{\"property\":\"show-title\",\"label\":{\"text\":{\"zh_CN\":\"显示标题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否显示标题\"},\"labelPosition\":\"left\"},{\"property\":\"trigger\",\"label\":{\"text\":{\"zh_CN\":\"触发方式\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{\"options\":[{\"label\":\"点击\",\"value\":\"click\"},{\"label\":\"悬停\",\"value\":\"hover\"}]}},\"description\":{\"zh_CN\":\"指示器的触发方式,默认为 hover\"}},{\"property\":\"type\",\"label\":{\"text\":{\"zh_CN\":\"类型\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{\"options\":[{\"label\":\"水平\",\"value\":\"horizontal\"},{\"label\":\"垂直\",\"value\":\"vertical\"},{\"label\":\"卡片\",\"value\":\"card\"}]}},\"description\":{\"zh_CN\":\"走马灯的类型\"}}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":true,\"clickCapture\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":[\"TinyCarouselItem\"],\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"disabled\",\"size\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); INSERT INTO `t_component` VALUES (10, '1.0.0', '{\"zh_CN\":\"提示框\"}', 'a', 'link', '链接', '', '', '', '', 'proCode', '{}', 'component', 'basic', 7, '[{\"name\":{\"zh_CN\":\"链接\"},\"icon\":\"link\",\"screenshot\":\"\",\"snippetName\":\"a\",\"schema\":{\"componentName\":\"a\",\"children\":\"链接\"}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"children\",\"label\":{\"text\":{\"zh_CN\":\"类型\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"HtmlTextConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"类型\"},\"labelPosition\":\"none\"},{\"property\":\"href\",\"label\":{\"text\":{\"zh_CN\":\"链接\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"指定链接的 URL\"},\"labelPosition\":\"left\"},{\"property\":\"target\",\"label\":{\"text\":{\"zh_CN\":\"打开方式\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"ButtonGroupConfigurator\",\"props\":{\"options\":[{\"label\":\"当前页面\",\"value\":\"_self\"},{\"label\":\"打开新页面\",\"value\":\"_blank\"}]}},\"description\":{\"zh_CN\":\"指定链接的打开方式,例如在当前窗口中打开或在新窗口中打开。\"}},{\"property\":\"attributes3\",\"label\":{\"text\":{\"zh_CN\":\"原生属性\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"HtmlAttributesConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"原生属性\"},\"labelPosition\":\"none\"}]}]}', '{\"loop\":true,\"condition\":true,\"slots\":[],\"styles\":true,\"isContainer\":true,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[],\"disable\":[]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); INSERT INTO `t_component` VALUES (11, '1.0.0', '{\"zh_CN\":\"标题\"}', '[h1, h2, h3, h4, h5, h6]', 'h16', '标题', '', '', '', '', 'proCode', '{}', 'component', 'html', 20, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"children\",\"label\":{\"text\":{\"zh_CN\":\"类型\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"HtmlTextConfigurator\",\"props\":{\"showRadioButton\":true}},\"description\":{\"zh_CN\":\"\"},\"labelPosition\":\"none\"},{\"property\":\"attributes3\",\"label\":{\"text\":{\"zh_CN\":\"原生属性\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"HtmlAttributesConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"\"},\"labelPosition\":\"none\"}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":[],\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"disabled\",\"size\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); INSERT INTO `t_component` VALUES (12, '1.0.0', '{\"zh_CN\":\"段落\"}', 'p', 'paragraph', '段落', '', '', '', '', 'proCode', '{}', 'component', 'html', 30, '[{\"name\":{\"zh_CN\":\"段落\"},\"icon\":\"paragraph\",\"screenshot\":\"\",\"snippetName\":\"p\",\"schema\":{\"componentName\":\"p\",\"children\":\"TinyEngine 前端可视化设计器致力于通过友好的用户交互提升业务应用的开发效率。\"}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"children\",\"label\":{\"text\":{\"zh_CN\":\"类型\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"HtmlTextConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"类型\"},\"labelPosition\":\"none\"},{\"property\":\"attributes3\",\"label\":{\"text\":{\"zh_CN\":\"原生属性\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"HtmlAttributesConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"原生属性\"},\"labelPosition\":\"none\"}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":[],\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[],\"disable\":[]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); INSERT INTO `t_component` VALUES (13, '1.0.0', '{\"zh_CN\":\"输入框\"}', 'input', 'input', '输入框', '', '', '', '', 'proCode', '{}', 'component', 'html', 40, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"type\",\"label\":{\"text\":{\"zh_CN\":\"类型\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"checkbox\",\"value\":\"checkbox\"},{\"label\":\"color\",\"value\":\"color\"},{\"label\":\"date\",\"value\":\"date\"},{\"label\":\"button\",\"value\":\"button\"},{\"label\":\"email\",\"value\":\"email\"},{\"label\":\"file\",\"value\":\"file\"},{\"label\":\"hidden\",\"value\":\"hidden\"},{\"label\":\"image\",\"value\":\"image\"},{\"label\":\"month\",\"value\":\"month\"},{\"label\":\"number\",\"value\":\"number\"},{\"label\":\"password\",\"value\":\"password\"},{\"label\":\"radio\",\"value\":\"radio\"},{\"label\":\"range\",\"value\":\"range\"},{\"label\":\"reset\",\"value\":\"reset\"},{\"label\":\"search\",\"value\":\"search\"},{\"label\":\"submit\",\"value\":\"submit\"},{\"label\":\"text\",\"value\":\"text\"},{\"label\":\"time\",\"value\":\"time\"},{\"label\":\"week\",\"value\":\"week\"},{\"label\":\"url\",\"value\":\"url\"}]}},\"description\":{\"zh_CN\":\"类型\"}},{\"property\":\"placeholder\",\"label\":{\"text\":{\"zh_CN\":\"占位符\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"占位符\"}},{\"property\":\"attributes3\",\"label\":{\"text\":{\"zh_CN\":\"原生属性\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"HtmlAttributesConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"原生属性\"},\"labelPosition\":\"none\"}]}],\"events\":{\"onBlur\":{\"label\":{\"zh_CN\":\"失去焦点时触发\"},\"description\":{\"zh_CN\":\"在 Input 失去焦点时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"原生 event\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onFocus\":{\"label\":{\"zh_CN\":\"获取焦点时触发\"},\"description\":{\"zh_CN\":\"在 Input 获取焦点时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"原生 event\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onChange\":{\"label\":{\"zh_CN\":\"输入值改变时触发\"},\"description\":{\"zh_CN\":\"在 Input 输入值改变时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"原生 event\"}}],\"returns\":{}},\"defaultValue\":\"\"}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":[],\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"disabled\",\"size\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); INSERT INTO `t_component` VALUES (14, '1.0.0', '{\"zh_CN\":\"视频\"}', 'video', 'video', '视频', '', '', '', '', 'proCode', '{}', 'component', 'html', 50, '[{\"name\":{\"zh_CN\":\"视频\"},\"icon\":\"video\",\"screenshot\":\"\",\"snippetName\":\"video\",\"schema\":{\"componentName\":\"video\",\"props\":{\"src\":\"https://tinyengine-assets.obs.myhuaweicloud.com/files/in-action.mp4#t=1.5\",\"width\":\"200\",\"height\":\"100\",\"style\":\"border:1px solid #ccc\"}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"src\",\"label\":{\"text\":{\"zh_CN\":\"资源\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"视频的 URL\"}},{\"property\":\"width\",\"label\":{\"text\":{\"zh_CN\":\"播放器宽度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"视频播放器的宽度\"}},{\"property\":\"height\",\"label\":{\"text\":{\"zh_CN\":\"播放器高度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"视频播放器的高度\"}},{\"property\":\"controls\",\"label\":{\"text\":{\"zh_CN\":\"显示控件\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否显示控件\"},\"labelPosition\":\"left\"},{\"property\":\"autoplay\",\"label\":{\"text\":{\"zh_CN\":\"马上播放\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否马上播放\"},\"labelPosition\":\"left\"},{\"property\":\"attributes3\",\"label\":{\"text\":{\"zh_CN\":\"原生属性\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"HtmlAttributesConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"原生属性\"},\"labelPosition\":\"none\"}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":[],\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[],\"disable\":[]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); -INSERT INTO `t_component` VALUES (15, '1.0.0', '{\"zh_CN\":\"Img\"}', 'Img', 'Image', NULL, NULL, '', '', '', 'proCode', '{}', 'component', 'html', 60, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"src\",\"type\":\"string\",\"defaultValue\":\"\",\"bindState\":true,\"label\":{\"text\":{\"zh_CN\":\"资源\"}},\"cols\":12,\"rules\":[],\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"src路径\"}},{\"property\":\"attributes3\",\"label\":{\"text\":{\"zh_CN\":\"原生属性\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"HtmlAttributesConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"原生属性\"},\"labelPosition\":\"none\"}]}],\"events\":{},\"shortcuts\":{\"properties\":[\"src\"]},\"contentMenu\":{\"actions\":[]}}', NULL, 1, 'Vue', 1, 1, 0, NULL, NULL, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); +INSERT INTO `t_component` VALUES (15, '1.0.0', '{\"zh_CN\":\"Img\"}', 'Img', 'Image', NULL, NULL, '', '', '', 'proCode', '{}', 'component', 'html', 60, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"src\",\"type\":\"string\",\"defaultValue\":\"\",\"bindState\":true,\"label\":{\"text\":{\"zh_CN\":\"资源选择\"}},\"cols\":12,\"rules\":[],\"widget\":{\"component\":\"SourceSelectConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"src路径\"},\"labelPosition\":\"top\"},{\"property\":\"attributes3\",\"label\":{\"text\":{\"zh_CN\":\"原生属性\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"HtmlAttributesConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"原生属性\"},\"labelPosition\":\"none\"}]}],\"events\":{},\"shortcuts\":{\"properties\":[\"src\"]},\"contentMenu\":{\"actions\":[]}}', NULL, 1, 'Vue', 1, 1, 0, NULL, NULL, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); INSERT INTO `t_component` VALUES (16, '1.0.0', '{\"zh_CN\":\"Button\"}', 'button', 'button', NULL, NULL, '', '', '', 'proCode', '{}', 'component', 'html', 70, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"attributes3\",\"label\":{\"text\":{\"zh_CN\":\"原生属性\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"HtmlAttributesConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"原生属性\"},\"labelPosition\":\"none\"}]}],\"events\":{\"onClick\":{\"label\":{\"zh_CN\":\"点击时触发\"},\"description\":{\"zh_CN\":\"点击时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[],\"returns\":{}},\"defaultValue\":\"\"}},\"shortcuts\":{\"properties\":[]},\"contentMenu\":{\"actions\":[]}}', '{\"isContainer\":true}', 1, 'Vue', 1, 1, 0, NULL, NULL, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); INSERT INTO `t_component` VALUES (17, '1.0.0', '{\"zh_CN\":\"表格\"}', 'table', 'table', NULL, NULL, '', '', '', 'proCode', '{}', 'component', 'html', 80, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"width\",\"label\":{\"text\":{\"zh_CN\":\"宽度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表格的宽度\"}},{\"property\":\"border\",\"label\":{\"text\":{\"zh_CN\":\"边框宽度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表格边框的宽度\"}},{\"property\":\"attributes3\",\"label\":{\"text\":{\"zh_CN\":\"原生属性\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"HtmlAttributesConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"原生属性\"},\"labelPosition\":\"none\"}]}],\"events\":{\"onClick\":{\"label\":{\"zh_CN\":\"点击时触发\"},\"description\":{\"zh_CN\":\"点击时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[],\"returns\":{}},\"defaultValue\":\"\"}},\"shortcuts\":{\"properties\":[]},\"contentMenu\":{\"actions\":[]}}', NULL, 1, 'Vue', 1, 1, 0, NULL, NULL, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); INSERT INTO `t_component` VALUES (18, '1.0.0', '{\"zh_CN\":\"表格单元格\"}', 'td', 'td', NULL, NULL, '', '', '', 'proCode', '{}', 'component', 'html', 90, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"colspan\",\"label\":{\"text\":{\"zh_CN\":\"合并列\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"单元格可横跨的列数\"}},{\"property\":\"rowspan\",\"label\":{\"text\":{\"zh_CN\":\"合并行\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"单元格可横跨的行数\"}},{\"property\":\"attributes3\",\"label\":{\"text\":{\"zh_CN\":\"原生属性\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"HtmlAttributesConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"原生属性\"},\"labelPosition\":\"none\"}]}],\"events\":{\"onClick\":{\"label\":{\"zh_CN\":\"点击时触发\"},\"description\":{\"zh_CN\":\"点击时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[],\"returns\":{}},\"defaultValue\":\"\"}},\"shortcuts\":{\"properties\":[]},\"contentMenu\":{\"actions\":[]}}', NULL, 1, 'Vue', 1, 1, 0, NULL, NULL, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); @@ -39,7 +39,7 @@ INSERT INTO `t_component` VALUES (20, '1.0.0', '{\"zh_CN\":\"表单标签\"}', ' INSERT INTO `t_component` VALUES (21, '3.20.0', '{\"zh_CN\":\"按钮组\"}', 'TinyButtonGroup', 'buttonGroup', '以按钮组的方式出现,常用于多项类似操作', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"ButtonGroup\",\"destructuring\":true}', 'component', 'general', 2, '[{\"name\":{\"zh_CN\":\"互斥按钮组\"},\"icon\":\"MutexButtons\",\"screenshot\":\"\",\"snippetName\":\"TinyButtonGroup\",\"schema\":{\"componentName\":\"TinyButtonGroup\",\"props\":{\"data\":[{\"text\":\"Button1\",\"value\":\"1\"},{\"text\":\"Button2\",\"value\":\"2\"},{\"text\":\"Button3\",\"value\":\"3\"}],\"modelValue\":\"1\"}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"配置按钮组数据\"}},{\"property\":\"size\",\"label\":{\"text\":{\"zh_CN\":\"大小\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"mini\",\"value\":\"mini\"},{\"label\":\"small\",\"value\":\"small\"},{\"label\":\"medium\",\"value\":\"medium\"}]}},\"description\":{\"zh_CN\":\"组件大小\"},\"labelPosition\":\"left\"},{\"property\":\"plain\",\"label\":{\"text\":{\"zh_CN\":\"朴素按钮\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否是朴素按钮\"},\"labelPosition\":\"left\"},{\"property\":\"disabled\",\"label\":{\"text\":{\"zh_CN\":\"禁用\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否禁用\"},\"labelPosition\":\"left\"}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":[],\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"disabled\",\"size\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); INSERT INTO `t_component` VALUES (22, '3.20.0', '{\"zh_CN\":\"row\"}', 'TinyRow', 'row', '定义 Layout 的行配置信息', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Row\",\"destructuring\":true}', 'component', NULL, 5, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"layout\",\"label\":{\"text\":{\"zh_CN\":\"布局\"}},\"cols\":12,\"widget\":{\"component\":\"LayoutGridConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"选择布局方式\"},\"labelPosition\":\"none\"},{\"property\":\"align\",\"label\":{\"text\":{\"zh_CN\":\"子项对齐方式\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"top\",\"value\":\"top\"},{\"label\":\"middle\",\"value\":\"middle\"},{\"label\":\"bottom\",\"value\":\"bottom\"}]}},\"description\":{\"zh_CN\":\"子项的副轴对齐方向,可取值:top, middle, bottom\"}},{\"property\":\"flex\",\"label\":{\"text\":{\"zh_CN\":\"flex容器\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否为flex容器\"},\"labelPosition\":\"left\"},{\"property\":\"gutter\",\"label\":{\"text\":{\"zh_CN\":\"子项间隔\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"子项的间隔的像素\"}}]}]}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":[],\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"label-width\",\"disabled\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); INSERT INTO `t_component` VALUES (23, '3.20.0', '{\"zh_CN\":\"row\"}', 'TinyLayout', 'row', '定义 Layout 的行配置信息', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Layout\",\"version\":\"3.20.0\",\"destructuring\":true}', 'component', 'layout', 5, '[{\"name\":{\"zh_CN\":\"栅格布局\"},\"icon\":\"row\",\"screenshot\":\"\",\"snippetName\":\"TinyLayout\",\"schema\":{\"componentName\":\"TinyLayout\",\"props\":{},\"children\":[{\"componentName\":\"TinyRow\",\"props\":{\"style\":\"padding: 10px;\"},\"children\":[{\"componentName\":\"TinyCol\",\"props\":{\"span\":3}},{\"componentName\":\"TinyCol\",\"props\":{\"span\":3}},{\"componentName\":\"TinyCol\",\"props\":{\"span\":3}},{\"componentName\":\"TinyCol\",\"props\":{\"span\":3}}]},{\"componentName\":\"TinyRow\",\"props\":{\"style\":\"padding: 10px;\"},\"children\":[{\"componentName\":\"TinyCol\",\"props\":{\"span\":3}},{\"componentName\":\"TinyCol\",\"props\":{\"span\":3}},{\"componentName\":\"TinyCol\",\"props\":{\"span\":3}},{\"componentName\":\"TinyCol\",\"props\":{\"span\":3}}]}]}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"cols\",\"label\":{\"text\":{\"zh_CN\":\"总栅格数\"}},\"cols\":12,\"widget\":{\"component\":\"ButtonGroupConfigurator\",\"props\":{\"options\":[{\"label\":\"12\",\"value\":12},{\"label\":\"24\",\"value\":24}]}},\"description\":{\"zh_CN\":\"选择总栅格数\"},\"labelPosition\":\"none\"},{\"property\":\"tag\",\"label\":{\"text\":{\"zh_CN\":\"layout渲染的标签\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"定义Layout元素渲染后的标签,默认为 div\"}}]}]}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":true,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":[\"TinyRow\",\"TinyCol\"],\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"disabled\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:14', '1', '2025-08-03 19:54:14'); -INSERT INTO `t_component` VALUES (24, '3.20.0', '{\"zh_CN\":\"表单\"}', 'TinyForm', 'form', '由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Form\",\"destructuring\":true}', 'component', NULL, 5, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"disabled\",\"label\":{\"text\":{\"zh_CN\":\"禁用\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否禁用\"},\"labelPosition\":\"left\"},{\"property\":\"label-width\",\"label\":{\"text\":{\"zh_CN\":\"标签宽度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表单中标签占位宽度,默认为 80px\"},\"labelPosition\":\"left\"},{\"property\":\"inline\",\"label\":{\"text\":{\"zh_CN\":\"行内布局\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"行内布局模式,默认为 false\"},\"labelPosition\":\"left\"},{\"property\":\"label-align\",\"label\":{\"text\":{\"zh_CN\":\"必填标识占位\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"必填标识 * 是否占位\"},\"labelPosition\":\"left\"},{\"property\":\"label-suffix\",\"label\":{\"text\":{\"zh_CN\":\"标签后缀\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表单中标签后缀\"},\"labelPosition\":\"left\"},{\"property\":\"label-position\",\"label\":{\"text\":{\"zh_CN\":\"标签位置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"right\",\"value\":\"right\"},{\"label\":\"left \",\"value\":\"left \"},{\"label\":\"top\",\"value\":\"top\"}]}},\"description\":{\"zh_CN\":\"表单中标签的布局位置\"},\"labelPosition\":\"left\"}]},{\"name\":\"1\",\"label\":{\"zh_CN\":\"校验属性\"},\"content\":[{\"property\":\"model\",\"label\":{\"text\":{\"zh_CN\":\"数据对象\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表单数据对象\"},\"labelPosition\":\"top\"},{\"property\":\"rules\",\"label\":{\"text\":{\"zh_CN\":\"校验规则\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表单验证规则\"},\"labelPosition\":\"top\"}],\"description\":{\"zh_CN\":\"\"}}],\"events\":{\"onValidate\":{\"label\":{\"zh_CN\":\"表单项被校验后触发\"},\"description\":{\"zh_CN\":\"表单项被校验后触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"function\",\"type\":\"Function\",\"defaultValue\":\"(valid) => {}\",\"description\":{\"zh_CN\":\"校验回调函数\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onInput\":{\"label\":{\"zh_CN\":\"输入值改变时触发\"},\"description\":{\"zh_CN\":\"在 Input 输入值改变时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"输入框输入的值\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onBlur\":{\"label\":{\"zh_CN\":\"失去焦点时触发\"},\"description\":{\"zh_CN\":\"在 Input 失去焦点时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"原生 event\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onFocus\":{\"label\":{\"zh_CN\":\"获取焦点时触发\"},\"description\":{\"zh_CN\":\"在 Input 获取焦点时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"原生 event\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onClear\":{\"label\":{\"zh_CN\":\"点击清空按钮时触发\"},\"description\":{\"zh_CN\":\"点击清空按钮时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[],\"returns\":{}},\"defaultValue\":\"\"}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":[],\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"label-width\",\"disabled\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:14', '1', '2025-08-03 19:54:14'); +INSERT INTO `t_component` VALUES (24, '3.20.0', '{\"zh_CN\":\"表单\"}', 'TinyForm', 'form', '由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Form\",\"destructuring\":true}', 'component', 'form', 5, '[{\"name\":{\"zh_CN\":\"表单\"},\"icon\":\"form\",\"screenshot\":\"\",\"snippetName\":\"TinyForm\",\"schema\":{\"componentName\":\"TinyForm\",\"props\":{\"labelWidth\":\"80px\",\"labelPosition\":\"top\"},\"children\":[{\"componentName\":\"TinyFormItem\",\"props\":{\"label\":\"人员\"},\"children\":[{\"componentName\":\"TinyInput\",\"props\":{\"placeholder\":\"请输入\",\"modelValue\":\"\"}}]},{\"componentName\":\"TinyFormItem\",\"props\":{\"label\":\"密码\"},\"children\":[{\"componentName\":\"TinyInput\",\"props\":{\"placeholder\":\"请输入\",\"modelValue\":\"\",\"type\":\"password\"}}]},{\"componentName\":\"TinyFormItem\",\"props\":{\"label\":\"\"},\"children\":[{\"componentName\":\"TinyButton\",\"props\":{\"text\":\"提交\",\"type\":\"primary\",\"style\":\"margin-right: 10px\"}},{\"componentName\":\"TinyButton\",\"props\":{\"text\":\"重置\",\"type\":\"primary\"}}]}]}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"disabled\",\"label\":{\"text\":{\"zh_CN\":\"禁用\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否禁用\"},\"labelPosition\":\"left\"},{\"property\":\"label-width\",\"label\":{\"text\":{\"zh_CN\":\"标签宽度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表单中标签占位宽度,默认为 80px\"},\"labelPosition\":\"left\"},{\"property\":\"inline\",\"label\":{\"text\":{\"zh_CN\":\"行内布局\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"行内布局模式,默认为 false\"},\"labelPosition\":\"left\"},{\"property\":\"label-align\",\"label\":{\"text\":{\"zh_CN\":\"必填标识占位\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"必填标识 * 是否占位\"},\"labelPosition\":\"left\"},{\"property\":\"label-suffix\",\"label\":{\"text\":{\"zh_CN\":\"标签后缀\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表单中标签后缀\"},\"labelPosition\":\"left\"},{\"property\":\"label-position\",\"label\":{\"text\":{\"zh_CN\":\"标签位置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"right\",\"value\":\"right\"},{\"label\":\"left \",\"value\":\"left \"},{\"label\":\"top\",\"value\":\"top\"}]}},\"description\":{\"zh_CN\":\"表单中标签的布局位置\"},\"labelPosition\":\"left\"}]},{\"name\":\"1\",\"label\":{\"zh_CN\":\"校验属性\"},\"content\":[{\"property\":\"model\",\"label\":{\"text\":{\"zh_CN\":\"数据对象\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表单数据对象\"},\"labelPosition\":\"top\"},{\"property\":\"rules\",\"label\":{\"text\":{\"zh_CN\":\"校验规则\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表单验证规则\"},\"labelPosition\":\"top\"}],\"description\":{\"zh_CN\":\"\"}}],\"events\":{\"onValidate\":{\"label\":{\"zh_CN\":\"表单项被校验后触发\"},\"description\":{\"zh_CN\":\"表单项被校验后触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"function\",\"type\":\"Function\",\"defaultValue\":\"(valid) => {}\",\"description\":{\"zh_CN\":\"校验回调函数\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onInput\":{\"label\":{\"zh_CN\":\"输入值改变时触发\"},\"description\":{\"zh_CN\":\"在 Input 输入值改变时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"输入框输入的值\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onBlur\":{\"label\":{\"zh_CN\":\"失去焦点时触发\"},\"description\":{\"zh_CN\":\"在 Input 失去焦点时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"原生 event\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onFocus\":{\"label\":{\"zh_CN\":\"获取焦点时触发\"},\"description\":{\"zh_CN\":\"在 Input 获取焦点时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"原生 event\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onClear\":{\"label\":{\"zh_CN\":\"点击清空按钮时触发\"},\"description\":{\"zh_CN\":\"点击清空按钮时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[],\"returns\":{}},\"defaultValue\":\"\"}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":[],\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"label-width\",\"disabled\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:14', '1', '2025-08-03 19:54:14'); INSERT INTO `t_component` VALUES (25, '3.20.0', '{\"zh_CN\":\"表单项\"}', 'TinyFormItem', 'formitem', '由按钮、输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"FormItem\",\"destructuring\":true}', 'component', NULL, 12, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"label\",\"label\":{\"text\":{\"zh_CN\":\"标签文本\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"标签\",\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"标签文本\"},\"labelPosition\":\"left\"},{\"property\":\"prop\",\"label\":{\"text\":{\"zh_CN\":\"校验字段\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表单域 model 字段,在使用 validate、resetFields 方法的情况下,该属性是必填的\"},\"labelPosition\":\"left\"},{\"property\":\"required\",\"label\":{\"text\":{\"zh_CN\":\"必填\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否必填\"},\"labelPosition\":\"left\"}]}],\"events\":{},\"slots\":{\"label\":{\"label\":{\"zh_CN\":\"字段名\"},\"description\":{\"zh_CN\":\"自定义显示字段名称\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":true,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":[\"TinyForm\"],\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"label\",\"rules\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:14', '1', '2025-08-03 19:54:14'); INSERT INTO `t_component` VALUES (26, '3.20.0', '{\"zh_CN\":\"col\"}', 'TinyCol', 'col', '列配置信息', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Col\",\"destructuring\":true}', 'component', NULL, 2, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"span\",\"label\":{\"text\":{\"zh_CN\":\"栅格列格数\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"整行\",\"value\":12},{\"label\":\"6格\",\"value\":6},{\"label\":\"4格\",\"value\":4},{\"label\":\"3格\",\"value\":3},{\"label\":\"1格\",\"value\":1}]}},\"description\":{\"zh_CN\":\"当一行分为12格时,一列可占位多少格\"}},{\"property\":\"move\",\"label\":{\"text\":{\"zh_CN\":\"栅格移动格数\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{\"min\":-12,\"max\":12}},\"description\":{\"zh_CN\":\"栅格左右移动格数(正数向右,负数向左)\"}},{\"property\":\"no\",\"label\":{\"text\":{\"zh_CN\":\"排序编号\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{\"max\":12}},\"description\":{\"zh_CN\":\"排序编号(row中启用order生效)\"}},{\"property\":\"offset\",\"label\":{\"text\":{\"zh_CN\":\"间隔格数\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{\"min\":0,\"max\":12}},\"description\":{\"zh_CN\":\"栅格左侧的间隔格数\"}},{\"property\":\"xs\",\"label\":{\"text\":{\"zh_CN\":\"超小屏格数\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{\"min\":1,\"max\":12}},\"description\":{\"zh_CN\":\"<768px 响应式栅格数\"}},{\"property\":\"sm\",\"label\":{\"text\":{\"zh_CN\":\"小屏格数\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{\"min\":1,\"max\":12}},\"description\":{\"zh_CN\":\"≥768px 响应式栅格数\"}},{\"property\":\"md\",\"label\":{\"text\":{\"zh_CN\":\"中屏格数\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{\"min\":1,\"max\":12}},\"description\":{\"zh_CN\":\"≥992px 响应式栅格数\"}},{\"property\":\"lg\",\"label\":{\"text\":{\"zh_CN\":\"大屏格数\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{\"min\":1,\"max\":12}},\"description\":{\"zh_CN\":\"≥1200px 响应式栅格数\"}},{\"property\":\"xl\",\"label\":{\"text\":{\"zh_CN\":\"超大屏格数\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{\"min\":1,\"max\":12}},\"description\":{\"zh_CN\":\"≥1920px 响应式栅格数\"}}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":true,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"label\",\"rules\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:14', '1', '2025-08-03 19:54:14'); INSERT INTO `t_component` VALUES (27, '3.20.0', '{\"zh_CN\":\"按钮\"}', 'TinyButton', 'button', '常用的操作按钮,提供包括默认按钮、图标按钮、图片按钮、下拉按钮等类型', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Button\",\"destructuring\":true}', 'component', 'basic', 2, '[{\"name\":{\"zh_CN\":\"按钮\"},\"icon\":\"button\",\"screenshot\":\"\",\"snippetName\":\"TinyButton\",\"schema\":{\"componentName\":\"TinyButton\",\"props\":{\"text\":\"按钮文案\"}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"text\",\"type\":\"string\",\"defaultValue\":\"按钮文案\",\"label\":{\"text\":{\"zh_CN\":\"按钮文字\"}},\"cols\":12,\"hidden\":false,\"required\":true,\"readOnly\":false,\"disabled\":false,\"widget\":{\"component\":\"I18nConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"按钮文字\"},\"labelPosition\":\"left\"},{\"property\":\"size\",\"type\":\"select\",\"label\":{\"text\":{\"zh_CN\":\"大小\"}},\"cols\":12,\"rules\":[],\"hidden\":false,\"required\":true,\"readOnly\":false,\"disabled\":false,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"large\",\"value\":\"large\"},{\"label\":\"medium\",\"value\":\"medium\"},{\"label\":\"small\",\"value\":\"small\"},{\"label\":\"mini\",\"value\":\"mini\"}]}},\"description\":{\"zh_CN\":\"按钮大小\"},\"labelPosition\":\"left\"},{\"property\":\"disabled\",\"label\":{\"text\":{\"zh_CN\":\"禁用\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否被禁用\"},\"labelPosition\":\"left\"},{\"property\":\"type\",\"label\":{\"text\":{\"zh_CN\":\"类型\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"primary\",\"value\":\"primary\"},{\"label\":\"success\",\"value\":\"success\"},{\"label\":\"info\",\"value\":\"info\"},{\"label\":\"warning\",\"value\":\"warning\"},{\"label\":\"danger\",\"value\":\"danger\"},{\"label\":\"text\",\"value\":\"text\"}]}},\"description\":{\"zh_CN\":\"设置不同的主题样式\"},\"labelPosition\":\"left\"}]},{\"name\":\"1\",\"label\":{\"zh_CN\":\"其他\"},\"content\":[{\"property\":\"round\",\"label\":{\"text\":{\"zh_CN\":\"圆角\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否圆角按钮\"},\"labelPosition\":\"left\"},{\"property\":\"plain\",\"label\":{\"text\":{\"zh_CN\":\"朴素按钮\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否为朴素按钮\"},\"labelPosition\":\"left\"},{\"property\":\"reset-time\",\"label\":{\"text\":{\"zh_CN\":\"禁用时间\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"设置禁用时间,防止重复提交,单位毫秒\"},\"labelPosition\":\"left\"},{\"property\":\"circle\",\"label\":{\"text\":{\"zh_CN\":\"圆形按钮\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否圆形按钮\"},\"labelPosition\":\"left\"},{\"property\":\"autofocus\",\"label\":{\"text\":{\"zh_CN\":\"自动聚焦\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否默认聚焦\"},\"labelPosition\":\"left\"},{\"property\":\"loading\",\"label\":{\"text\":{\"zh_CN\":\"加载中样式\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否展示位加载中样式\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"\"}}],\"events\":{\"onClick\":{\"label\":{\"zh_CN\":\"点击事件\"},\"description\":{\"zh_CN\":\"按钮被点击时触发的回调函数\"},\"type\":\"event\",\"functionInfo\":{\"params\":[],\"returns\":{}},\"defaultValue\":\"\"}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"text\",\"size\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:14', '1', '2025-08-03 19:54:14'); @@ -58,7 +58,7 @@ INSERT INTO `t_component` VALUES (39, '3.20.0', '{\"zh_CN\":\"面包屑\"}', 'Ti INSERT INTO `t_component` VALUES (40, '3.20.0', '{\"zh_CN\":\"面包屑项\"}', 'TinyBreadcrumbItem', 'breadcrumb', '', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"BreadcrumbItem\",\"destructuring\":true}', 'component', NULL, 1, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"to\",\"label\":{\"text\":{\"zh_CN\":\"路由跳转\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"路由跳转对象,同 vue-router 的 to\"}}]}],\"slots\":{\"default\":{\"label\":{\"zh_CN\":\"面包屑项标签\"},\"description\":{\"zh_CN\":\"面包屑项\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":true,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":[\"TinyBreadcrumb\"],\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"to\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:15', '1', '2025-08-03 19:54:15'); INSERT INTO `t_component` VALUES (41, '3.20.0', '{\"zh_CN\":\"折叠面板\"}', 'TinyCollapse', 'collapse', '内容区可指定动态页面或自定义 html 等,支持展开收起操作', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Collapse\",\"destructuring\":true}', 'component', 'data-display', 3, '[{\"name\":{\"zh_CN\":\"折叠面板\"},\"icon\":\"collapse\",\"screenshot\":\"\",\"snippetName\":\"TinyCollapse\",\"schema\":{\"componentName\":\"TinyCollapse\",\"props\":{\"modelValue\":\"collapse1\"},\"children\":[{\"componentName\":\"TinyCollapseItem\",\"props\":{\"name\":\"collapse1\",\"title\":\"折叠项1\"},\"children\":[{\"componentName\":\"div\"}]},{\"componentName\":\"TinyCollapseItem\",\"props\":{\"name\":\"collapse2\",\"title\":\"折叠项2\"},\"children\":[{\"componentName\":\"div\"}]},{\"componentName\":\"TinyCollapseItem\",\"props\":{\"name\":\"collapse3\",\"title\":\"折叠项3\"},\"children\":[{\"componentName\":\"div\"}]}]}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"modelValue\",\"label\":{\"text\":{\"zh_CN\":\"当前激活面板\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"双向绑定当前激活的面板\"}}]}],\"events\":{\"onChange\":{\"label\":{\"zh_CN\":\"激活面板改变时触发\"},\"description\":{\"zh_CN\":\"当前激活面板改变时触发(如果是手风琴模式,参数 activeNames 类型为string,否则为array)\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"data\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前激活面板的值\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onUpdate:modelValue\":{\"label\":{\"zh_CN\":\"双向绑定的值改变时触发\"},\"description\":{\"zh_CN\":\"当前激活面板的值改变时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"双向绑定的值\"}}],\"returns\":{}},\"defaultValue\":\"\"}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"label-width\",\"disabled\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:15', '1', '2025-08-03 19:54:15'); INSERT INTO `t_component` VALUES (42, '3.20.0', '{\"zh_CN\":\"折叠面板项\"}', 'TinyCollapseItem', 'collapseitem', '内容区可指定动态页面或自定义 html 等,支持展开收起操作', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"CollapseItem\",\"destructuring\":true}', 'component', NULL, 2, NULL, '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"name\",\"label\":{\"text\":{\"zh_CN\":\"唯一标识符\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"唯一标识符: String | Number\"},\"labelPosition\":\"left\"},{\"property\":\"title\",\"label\":{\"text\":{\"zh_CN\":\"标题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"面板标题\"},\"labelPosition\":\"left\"}]}],\"events\":{},\"slots\":{\"title\":{\"label\":{\"zh_CN\":\"标题\"},\"description\":{\"zh_CN\":\"自定义标题\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":true,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"label-width\",\"disabled\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:15', '1', '2025-08-03 19:54:15'); -INSERT INTO `t_component` VALUES (43, '3.20.0', '{\"zh_CN\":\"表格\"}', 'TinyGrid', 'grid', '提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Grid\",\"destructuring\":true}', 'component', 'table', 2, '[{\"name\":{\"zh_CN\":\"表格\"},\"icon\":\"grid\",\"screenshot\":\"\",\"snippetName\":\"tinyGrid\",\"schema\":{\"componentName\":\"TinyGrid\",\"props\":{\"editConfig\":{\"trigger\":\"click\",\"mode\":\"cell\",\"showStatus\":true},\"columns\":[{\"type\":\"index\",\"width\":60},{\"type\":\"selection\",\"width\":60},{\"field\":\"employees\",\"title\":\"员工数\"},{\"field\":\"created_date\",\"title\":\"创建日期\"},{\"field\":\"city\",\"title\":\"城市\"}],\"data\":[{\"id\":\"1\",\"name\":\"GFD科技有限公司\",\"city\":\"福州\",\"employees\":800,\"created_date\":\"2014-04-30 00:56:00\",\"boole\":false},{\"id\":\"2\",\"name\":\"WWW科技有限公司\",\"city\":\"深圳\",\"employees\":300,\"created_date\":\"2016-07-08 12:36:22\",\"boole\":true}]}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础属性\"},\"description\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"表格数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"onChange\":\"this.delProp(\'fetchData\')\",\"description\":{\"zh_CN\":\"设置表格的数据\"},\"labelPosition\":\"top\"},{\"property\":\"columns\",\"label\":{\"text\":{\"zh_CN\":\"表格列\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"title\",\"type\":\"string\",\"defaultValue\":\"\",\"label\":{\"text\":{\"zh_CN\":\"列标题\"}},\"widget\":{\"component\":\"I18nConfigurator\",\"props\":{}}},{\"property\":\"field\",\"type\":\"string\",\"defaultValue\":\"\",\"label\":{\"text\":{\"zh_CN\":\"列键值\"}},\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}}},{\"property\":\"sortable\",\"type\":\"boolean\",\"defaultValue\":true,\"label\":{\"text\":{\"zh_CN\":\"是否排序\"}},\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"labelPosition\":\"left\"},{\"property\":\"width\",\"type\":\"string\",\"defaultValue\":\"\",\"label\":{\"text\":{\"zh_CN\":\"列宽\"}},\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}}},{\"property\":\"formatText\",\"type\":\"string\",\"defaultValue\":\"\",\"label\":{\"text\":{\"zh_CN\":\"内置渲染器\"}},\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"整数\",\"value\":\"integer\"},{\"label\":\"小数\",\"value\":\"number\"},{\"label\":\"金额\",\"value\":\"money\"},{\"label\":\"百分比\",\"value\":\"rate\"},{\"label\":\"布尔\",\"value\":\"boole\"},{\"label\":\"年月日\",\"value\":\"date\"},{\"label\":\"年月日时分\",\"value\":\"dateTime\"},{\"label\":\"时间\",\"value\":\"time\"},{\"label\":\"省略\",\"value\":\"ellipsis\"}]}}},{\"property\":\"renderer\",\"type\":\"object\",\"defaultValue\":\"\",\"label\":{\"text\":{\"zh_CN\":\"渲染函数\"}},\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"dataType\":\"JSFunction\"}}},{\"property\":\"slots\",\"type\":\"object\",\"defaultValue\":\"\",\"label\":{\"text\":{\"zh_CN\":\"插槽\"}},\"labelPosition\":\"none\",\"widget\":{\"component\":\"JsSlotConfigurator\",\"props\":{\"slots\":[\"header\",\"default\"]}}},{\"property\":\"type\",\"label\":{\"text\":{\"zh_CN\":\"列类型\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"索引列\",\"value\":\"index\"},{\"label\":\"单选列\",\"value\":\"radio\"},{\"label\":\"多选列\",\"value\":\"selection\"},{\"label\":\"展开列\",\"value\":\"expand\"}],\"clearable\":true}},\"description\":{\"zh_CN\":\"设置内置列的类型,该属性的可选值为 index(序号)/ selection(复选框)/ radio(单选框)/ expand(展开行)\"},\"labelPosition\":\"left\"},{\"property\":\"editor\",\"label\":{\"text\":{\"zh_CN\":\"编辑配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"单元格编辑渲染配置项,也可以是函数 Function(h, params)\"}},{\"property\":\"filter\",\"label\":{\"text\":{\"zh_CN\":\"筛选配置\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"设置表格列的筛选配置信息。默认值为 false 不配置筛选信息\"}},{\"property\":\"showOverflow\",\"label\":{\"text\":{\"zh_CN\":\"内容超出部分省略号配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"只显示省略号\",\"value\":\"ellipsis\"},{\"label\":\"显示为原生 title\",\"value\":\"title\"},{\"label\":\"显示为 tooltip 提示\",\"value\":\"tooltip\"}],\"clearable\":true}},\"description\":{\"zh_CN\":\"设置内置列的内容超出部分显示省略号配置,该属性的可选值为 ellipsis(只显示省略号)/ title(显示为原生 title)/ tooltip(显示为 tooltip 提示)\"},\"labelPosition\":\"top\"}]}],\"widget\":{\"component\":\"ArrayItemConfigurator\",\"props\":{\"type\":\"object\",\"textField\":\"title\",\"language\":\"json\",\"buttonText\":\"编辑列配置\",\"title\":\"编辑列配置\",\"expand\":true}},\"description\":{\"zh_CN\":\"表格列的配置信息\"},\"labelPosition\":\"left\"},{\"property\":\"fetchData\",\"label\":{\"text\":{\"zh_CN\":\"服务端查询\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"onChange\":\"function () { this.delProp(\'data\') } \",\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"name\":\"fetchData\",\"dataType\":\"JSExpression\"}},\"description\":{\"zh_CN\":\"服务端数据查询方法\"},\"labelPosition\":\"top\"},{\"property\":\"pager\",\"label\":{\"text\":{\"zh_CN\":\"分页配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"defaultValue\":{\"attrs\":{\"currentPage\":1}},\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"name\":\"pager\",\"dataType\":\"JSExpression\"}},\"description\":{\"zh_CN\":\"分页配置,需结合fetchData使用\"},\"labelPosition\":\"top\"},{\"property\":\"resizable\",\"label\":{\"text\":{\"zh_CN\":\"调整列宽\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否允许调整列宽\"},\"labelPosition\":\"left\"},{\"property\":\"row-id\",\"label\":{\"text\":{\"zh_CN\":\"行数据主键\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{\"placeholder\":\"比如:id\"}},\"description\":{\"zh_CN\":\"自定义行数据唯一主键的字段名(行数据必须要有唯一主键,默认自动生成)\"},\"labelPosition\":\"left\"},{\"property\":\"select-config\",\"label\":{\"text\":{\"zh_CN\":\"行复选框配置\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"dataType\":\"JSExpression\"}},\"description\":{\"zh_CN\":\"表格行数据复选框配置项\"}},{\"property\":\"edit-rules\",\"label\":{\"text\":{\"zh_CN\":\"校验规则\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表格校验规则配置项\"},\"labelPosition\":\"top\"},{\"property\":\"edit-config\",\"label\":{\"text\":{\"zh_CN\":\"编辑配置项\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表格编辑配置项\"},\"labelPosition\":\"top\"},{\"property\":\"expand-config\",\"label\":{\"text\":{\"zh_CN\":\"展开行配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"展开行配置项\"},\"labelPosition\":\"top\"},{\"property\":\"sortable\",\"label\":{\"text\":{\"zh_CN\":\"可排序\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否允许列数据排序。默认为 true 可排序\"},\"labelPosition\":\"left\"}]},{\"label\":{\"zh_CN\":\"其他\"},\"description\":{\"zh_CN\":\"其他属性\"},\"content\":[{\"property\":\"auto-resize\",\"label\":{\"text\":{\"zh_CN\":\"响应式监听\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表格属性设置 autoResize 属性开启响应式表格宽高的同时,将高度height设置为auto就可以自动跟随父容器高度。\"},\"labelPosition\":\"left\"},{\"property\":\"border\",\"label\":{\"text\":{\"zh_CN\":\"边框\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否带有纵向边框\"},\"labelPosition\":\"left\"},{\"property\":\"seq-serial\",\"label\":{\"text\":{\"zh_CN\":\"行号连续\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"设置行序号是否连续,开启分页时有效,该属性的默认值为 false\"},\"labelPosition\":\"left\"},{\"property\":\"highlight-current-row\",\"label\":{\"text\":{\"zh_CN\":\"高亮当前行\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"高亮当前行\"},\"labelPosition\":\"left\"},{\"property\":\"highlight-hover-row\",\"label\":{\"text\":{\"zh_CN\":\"移入行高亮\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"鼠标移到行是否要高亮显示\"},\"labelPosition\":\"left\"},{\"property\":\"row-class-name\",\"label\":{\"text\":{\"zh_CN\":\"设置行高亮\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"给行附加 className,也可以是函数 Function({seq, row, rowIndex, $rowIndex})\"},\"labelPosition\":\"top\"},{\"property\":\"max-height\",\"label\":{\"text\":{\"zh_CN\":\"内容最大高度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"设置表格内容区域(不含表格头部,底部)的最大高度。\"}},{\"property\":\"row-span\",\"label\":{\"text\":{\"zh_CN\":\"行合并\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"设置行合并,该属性仅适用于普通表格,不可与 tree-config 同时使用\"},\"labelPosition\":\"top\"}]}],\"events\":{\"onFilterChange\":{\"label\":{\"zh_CN\":\"筛选条件改变时触发改事件\"},\"description\":{\"zh_CN\":\"配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"table\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"{$table,filters} 包含 table 实例对象和过滤条件的对象\"}}],\"returns\":{}},\"defaultValue\":\"function onClick(e) {}\"},\"onSortChange\":{\"label\":{\"zh_CN\":\"点击列头,执行数据排序前触发的事件\"},\"description\":{\"zh_CN\":\"配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"table\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"{$table,filters} 包含 table 实例对象和过滤条件的对象\"}}],\"returns\":{}},\"defaultValue\":\"function onClick(e) {}\"},\"onSelectAll\":{\"label\":{\"zh_CN\":\"当手动勾选全选时触发的事件\"},\"description\":{\"zh_CN\":\"只对 type=selection 有效,当手动勾选全选时触发的事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"table\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\" 包含 table 实例对象\"}},{\"name\":\"checked\",\"type\":\"boolean\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"勾选状态\"}},{\"name\":\"selction\",\"type\":\"Array\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"选中的表格数据数组\"}}],\"returns\":{}},\"defaultValue\":\"function onClick(e) {}\"},\"onSelectChange\":{\"label\":{\"zh_CN\":\"手动勾选并且值发生改变时触发的事件\"},\"description\":{\"zh_CN\":\"只对 type=selection 有效,当手动勾选并且值发生改变时触发的事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"table\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\" table 实例对象\"}},{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\" 原生 Event\"}}],\"returns\":{}},\"defaultValue\":\"function onClick(e) {}\"},\"onToggleExpandChange\":{\"label\":{\"zh_CN\":\"当行展开或收起时会触发该事件\"},\"description\":{\"zh_CN\":\"当行展开或收起时会触发该事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"table\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"{$table,row,rowIndex} 包含 table 实例对象和当前行数据的对象\"}},{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\" 原生 Event\"}}],\"returns\":{}},\"defaultValue\":\"function onClick(e) {}\"},\"onCurrentChange\":{\"label\":{\"zh_CN\":\"行点击时触发\"},\"description\":{\"zh_CN\":\"行点击时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[],\"returns\":{}},\"defaultValue\":\"\"}},\"shortcuts\":{\"properties\":[\"sortable\",\"columns\"]},\"contentMenu\":{\"actions\":[\"create symbol\"]},\"onBeforeMount\":\"console.log(\'table on load\'); this.pager = source.pager; this.fetchData = source.fetchData; this.data = source.data ;this.columns = source.columns\"}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"sortable\",\"columns\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:15', '1', '2025-08-03 19:54:15'); +INSERT INTO `t_component` VALUES (43, '3.20.0', '{\"zh_CN\":\"表格\"}', 'TinyGrid', 'grid', '提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Grid\",\"destructuring\":true}', 'component', 'table', 2, '[{\"name\":{\"zh_CN\":\"表格\"},\"icon\":\"grid\",\"screenshot\":\"\",\"snippetName\":\"TinyGrid\",\"schema\":{\"componentName\":\"TinyGrid\",\"props\":{\"editConfig\":{\"trigger\":\"click\",\"mode\":\"cell\",\"showStatus\":true},\"columns\":[{\"type\":\"index\",\"width\":60},{\"type\":\"selection\",\"width\":60},{\"field\":\"employees\",\"title\":\"员工数\"},{\"field\":\"created_date\",\"title\":\"创建日期\"},{\"field\":\"city\",\"title\":\"城市\"}],\"data\":[{\"id\":\"1\",\"name\":\"GFD科技有限公司\",\"city\":\"福州\",\"employees\":800,\"created_date\":\"2014-04-30 00:56:00\",\"boole\":false},{\"id\":\"2\",\"name\":\"WWW科技有限公司\",\"city\":\"深圳\",\"employees\":300,\"created_date\":\"2016-07-08 12:36:22\",\"boole\":true}]}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础属性\"},\"description\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"表格数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"onChange\":\"this.delProp(\'fetchData\')\",\"description\":{\"zh_CN\":\"设置表格的数据\"},\"labelPosition\":\"top\"},{\"property\":\"columns\",\"label\":{\"text\":{\"zh_CN\":\"表格列\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"title\",\"type\":\"string\",\"defaultValue\":\"\",\"label\":{\"text\":{\"zh_CN\":\"列标题\"}},\"widget\":{\"component\":\"I18nConfigurator\",\"props\":{}}},{\"property\":\"field\",\"type\":\"string\",\"defaultValue\":\"\",\"label\":{\"text\":{\"zh_CN\":\"列键值\"}},\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}}},{\"property\":\"sortable\",\"type\":\"boolean\",\"defaultValue\":true,\"label\":{\"text\":{\"zh_CN\":\"是否排序\"}},\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"labelPosition\":\"left\"},{\"property\":\"width\",\"type\":\"string\",\"defaultValue\":\"\",\"label\":{\"text\":{\"zh_CN\":\"列宽\"}},\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}}},{\"property\":\"formatText\",\"type\":\"string\",\"defaultValue\":\"\",\"label\":{\"text\":{\"zh_CN\":\"内置渲染器\"}},\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"整数\",\"value\":\"integer\"},{\"label\":\"小数\",\"value\":\"number\"},{\"label\":\"金额\",\"value\":\"money\"},{\"label\":\"百分比\",\"value\":\"rate\"},{\"label\":\"布尔\",\"value\":\"boole\"},{\"label\":\"年月日\",\"value\":\"date\"},{\"label\":\"年月日时分\",\"value\":\"dateTime\"},{\"label\":\"时间\",\"value\":\"time\"},{\"label\":\"省略\",\"value\":\"ellipsis\"}]}}},{\"property\":\"renderer\",\"type\":\"object\",\"defaultValue\":\"\",\"label\":{\"text\":{\"zh_CN\":\"渲染函数\"}},\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"dataType\":\"JSFunction\"}}},{\"property\":\"slots\",\"type\":\"object\",\"defaultValue\":\"\",\"label\":{\"text\":{\"zh_CN\":\"插槽\"}},\"labelPosition\":\"none\",\"widget\":{\"component\":\"JsSlotConfigurator\",\"props\":{\"slots\":[\"header\",\"default\"]}}},{\"property\":\"type\",\"label\":{\"text\":{\"zh_CN\":\"列类型\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"索引列\",\"value\":\"index\"},{\"label\":\"单选列\",\"value\":\"radio\"},{\"label\":\"多选列\",\"value\":\"selection\"},{\"label\":\"展开列\",\"value\":\"expand\"}],\"clearable\":true}},\"description\":{\"zh_CN\":\"设置内置列的类型,该属性的可选值为 index(序号)/ selection(复选框)/ radio(单选框)/ expand(展开行)\"},\"labelPosition\":\"left\"},{\"property\":\"editor\",\"label\":{\"text\":{\"zh_CN\":\"编辑配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"单元格编辑渲染配置项,也可以是函数 Function(h, params)\"}},{\"property\":\"filter\",\"label\":{\"text\":{\"zh_CN\":\"筛选配置\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"设置表格列的筛选配置信息。默认值为 false 不配置筛选信息\"}},{\"property\":\"showOverflow\",\"label\":{\"text\":{\"zh_CN\":\"内容超出部分省略号配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"只显示省略号\",\"value\":\"ellipsis\"},{\"label\":\"显示为原生 title\",\"value\":\"title\"},{\"label\":\"显示为 tooltip 提示\",\"value\":\"tooltip\"}],\"clearable\":true}},\"description\":{\"zh_CN\":\"设置内置列的内容超出部分显示省略号配置,该属性的可选值为 ellipsis(只显示省略号)/ title(显示为原生 title)/ tooltip(显示为 tooltip 提示)\"},\"labelPosition\":\"top\"}]}],\"widget\":{\"component\":\"ArrayItemConfigurator\",\"props\":{\"type\":\"object\",\"textField\":\"title\",\"language\":\"json\",\"buttonText\":\"编辑列配置\",\"title\":\"编辑列配置\",\"expand\":true}},\"description\":{\"zh_CN\":\"表格列的配置信息\"},\"labelPosition\":\"left\"},{\"property\":\"fetchData\",\"label\":{\"text\":{\"zh_CN\":\"服务端查询\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"onChange\":\"function () { this.delProp(\'data\') } \",\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"name\":\"fetchData\",\"dataType\":\"JSExpression\"}},\"description\":{\"zh_CN\":\"服务端数据查询方法\"},\"labelPosition\":\"top\"},{\"property\":\"pager\",\"label\":{\"text\":{\"zh_CN\":\"分页配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"defaultValue\":{\"attrs\":{\"currentPage\":1}},\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"name\":\"pager\",\"dataType\":\"JSExpression\"}},\"description\":{\"zh_CN\":\"分页配置,需结合fetchData使用\"},\"labelPosition\":\"top\"},{\"property\":\"resizable\",\"label\":{\"text\":{\"zh_CN\":\"调整列宽\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否允许调整列宽\"},\"labelPosition\":\"left\"},{\"property\":\"row-id\",\"label\":{\"text\":{\"zh_CN\":\"行数据主键\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{\"placeholder\":\"比如:id\"}},\"description\":{\"zh_CN\":\"自定义行数据唯一主键的字段名(行数据必须要有唯一主键,默认自动生成)\"},\"labelPosition\":\"left\"},{\"property\":\"select-config\",\"label\":{\"text\":{\"zh_CN\":\"行复选框配置\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"dataType\":\"JSExpression\"}},\"description\":{\"zh_CN\":\"表格行数据复选框配置项\"}},{\"property\":\"edit-rules\",\"label\":{\"text\":{\"zh_CN\":\"校验规则\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表格校验规则配置项\"},\"labelPosition\":\"top\"},{\"property\":\"edit-config\",\"label\":{\"text\":{\"zh_CN\":\"编辑配置项\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表格编辑配置项\"},\"labelPosition\":\"top\"},{\"property\":\"expand-config\",\"label\":{\"text\":{\"zh_CN\":\"展开行配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"展开行配置项\"},\"labelPosition\":\"top\"},{\"property\":\"sortable\",\"label\":{\"text\":{\"zh_CN\":\"可排序\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否允许列数据排序。默认为 true 可排序\"},\"labelPosition\":\"left\"}]},{\"label\":{\"zh_CN\":\"其他\"},\"description\":{\"zh_CN\":\"其他属性\"},\"content\":[{\"property\":\"auto-resize\",\"label\":{\"text\":{\"zh_CN\":\"响应式监听\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"表格属性设置 autoResize 属性开启响应式表格宽高的同时,将高度height设置为auto就可以自动跟随父容器高度。\"},\"labelPosition\":\"left\"},{\"property\":\"border\",\"label\":{\"text\":{\"zh_CN\":\"边框\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否带有纵向边框\"},\"labelPosition\":\"left\"},{\"property\":\"seq-serial\",\"label\":{\"text\":{\"zh_CN\":\"行号连续\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"设置行序号是否连续,开启分页时有效,该属性的默认值为 false\"},\"labelPosition\":\"left\"},{\"property\":\"highlight-current-row\",\"label\":{\"text\":{\"zh_CN\":\"高亮当前行\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"高亮当前行\"},\"labelPosition\":\"left\"},{\"property\":\"highlight-hover-row\",\"label\":{\"text\":{\"zh_CN\":\"移入行高亮\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"鼠标移到行是否要高亮显示\"},\"labelPosition\":\"left\"},{\"property\":\"row-class-name\",\"label\":{\"text\":{\"zh_CN\":\"设置行高亮\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"给行附加 className,也可以是函数 Function({seq, row, rowIndex, $rowIndex})\"},\"labelPosition\":\"top\"},{\"property\":\"max-height\",\"label\":{\"text\":{\"zh_CN\":\"内容最大高度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"设置表格内容区域(不含表格头部,底部)的最大高度。\"}},{\"property\":\"row-span\",\"label\":{\"text\":{\"zh_CN\":\"行合并\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"设置行合并,该属性仅适用于普通表格,不可与 tree-config 同时使用\"},\"labelPosition\":\"top\"}]}],\"events\":{\"onFilterChange\":{\"label\":{\"zh_CN\":\"筛选条件改变时触发改事件\"},\"description\":{\"zh_CN\":\"配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"table\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"{$table,filters} 包含 table 实例对象和过滤条件的对象\"}}],\"returns\":{}},\"defaultValue\":\"function onClick(e) {}\"},\"onSortChange\":{\"label\":{\"zh_CN\":\"点击列头,执行数据排序前触发的事件\"},\"description\":{\"zh_CN\":\"配置 remote-filter 开启服务端过滤,服务端过滤会调用表格 fetch-data 进行查询,filter-change 服务端过滤后触发的事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"table\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"{$table,filters} 包含 table 实例对象和过滤条件的对象\"}}],\"returns\":{}},\"defaultValue\":\"function onClick(e) {}\"},\"onSelectAll\":{\"label\":{\"zh_CN\":\"当手动勾选全选时触发的事件\"},\"description\":{\"zh_CN\":\"只对 type=selection 有效,当手动勾选全选时触发的事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"table\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\" 包含 table 实例对象\"}},{\"name\":\"checked\",\"type\":\"boolean\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"勾选状态\"}},{\"name\":\"selction\",\"type\":\"Array\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"选中的表格数据数组\"}}],\"returns\":{}},\"defaultValue\":\"function onClick(e) {}\"},\"onSelectChange\":{\"label\":{\"zh_CN\":\"手动勾选并且值发生改变时触发的事件\"},\"description\":{\"zh_CN\":\"只对 type=selection 有效,当手动勾选并且值发生改变时触发的事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"table\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\" table 实例对象\"}},{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\" 原生 Event\"}}],\"returns\":{}},\"defaultValue\":\"function onClick(e) {}\"},\"onToggleExpandChange\":{\"label\":{\"zh_CN\":\"当行展开或收起时会触发该事件\"},\"description\":{\"zh_CN\":\"当行展开或收起时会触发该事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"table\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"{$table,row,rowIndex} 包含 table 实例对象和当前行数据的对象\"}},{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\" 原生 Event\"}}],\"returns\":{}},\"defaultValue\":\"function onClick(e) {}\"},\"onCurrentChange\":{\"label\":{\"zh_CN\":\"行点击时触发\"},\"description\":{\"zh_CN\":\"行点击时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[],\"returns\":{}},\"defaultValue\":\"\"}},\"shortcuts\":{\"properties\":[\"sortable\",\"columns\"]},\"contentMenu\":{\"actions\":[\"create symbol\"]},\"onBeforeMount\":\"console.log(\'table on load\'); this.pager = source.pager; this.fetchData = source.fetchData; this.data = source.data ;this.columns = source.columns\"}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"sortable\",\"columns\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:15', '1', '2025-08-03 19:54:15'); INSERT INTO `t_component` VALUES (44, '3.20.0', '{\"zh_CN\":\"表格行\"}', 'TinyGridColumn', 'grid', '提供了非常强大数据表格功能,可以展示数据列表,可以对数据列表进行选择、编辑等', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyGridColumn\",\"destructuring\":true}', 'component', NULL, 2, NULL, '{\"properties\":[],\"events\":{},\"shortcuts\":{},\"contentMenu\":{\"actions\":[\"create symbol\"]}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:15', '1', '2025-08-03 19:54:15'); INSERT INTO `t_component` VALUES (45, '3.20.0', '{\"zh_CN\":\"分页\"}', 'TinyPager', 'pager', '当数据量过多时,使用分页分解数据,常用于 Grid 和 Repeater 组件', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Pager\",\"destructuring\":true}', 'component', 'table', 1, '[{\"name\":{\"zh_CN\":\"分页\"},\"icon\":\"pager\",\"screenshot\":\"\",\"snippetName\":\"TinyPager\",\"schema\":{\"componentName\":\"TinyPager\",\"props\":{\"layout\":\"total, sizes, prev, pager, next\",\"total\":100,\"pageSize\":10,\"currentPage\":1}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"currentPage\",\"label\":{\"text\":{\"zh_CN\":\"当前页数\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"当前页数,支持 .sync 修饰符\"},\"labelPosition\":\"left\"},{\"property\":\"pageSize\",\"label\":{\"text\":{\"zh_CN\":\"每页条数\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"每页显示条目个数\"},\"labelPosition\":\"left\"},{\"property\":\"pageSizes\",\"label\":{\"text\":{\"zh_CN\":\"可选每页条数\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"设置可选择的每页显示条数\"}},{\"property\":\"total\",\"label\":{\"text\":{\"zh_CN\":\"总条数\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"数据总条数\"},\"labelPosition\":\"left\"},{\"property\":\"layout\",\"label\":{\"text\":{\"zh_CN\":\"布局\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"defaultValue\":\"total,sizes,prev, pager, next\",\"widget\":{\"component\":\"InputConfigurator\",\"props\":{\"type\":\"textarea\"}},\"description\":{\"zh_CN\":\"组件布局,子组件名用逗号分隔\"},\"labelPosition\":\"left\"}]}],\"events\":{\"onCurrentChange \":{\"label\":{\"zh_CN\":\"切换页码时触发\"},\"description\":{\"zh_CN\":\"切换页码时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前页的值\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onPrevClick \":{\"label\":{\"zh_CN\":\"点击上一页按钮时触发\"},\"description\":{\"zh_CN\":\"点击上一页按钮时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"page\",\"type\":\"String\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前页的页码值\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onNextClick\":{\"label\":{\"zh_CN\":\"点击下一页按钮时触发\"},\"description\":{\"zh_CN\":\"点击上一页按钮时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"page\",\"type\":\"String\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前页的页码值\"}}],\"returns\":{}},\"defaultValue\":\"\"}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"currentPage\",\"total\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:15', '1', '2025-08-03 19:54:15'); INSERT INTO `t_component` VALUES (46, '3.20.0', '{\"zh_CN\":\"弹出编辑\"}', 'TinyPopeditor', 'popEditor', '该组件只能在弹出的面板中选择数据,不能手动输入数据;弹出面板中显示为 Tree 组件或者 Grid 组件', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Popeditor\",\"destructuring\":true}', 'component', 'data-display', 6, '[{\"name\":{\"zh_CN\":\"弹出编辑\"},\"icon\":\"popeditor\",\"screenshot\":\"\",\"snippetName\":\"TinyPopeditor\",\"schema\":{\"componentName\":\"TinyPopeditor\",\"props\":{\"modelValue\":\"\",\"placeholder\":\"请选择\",\"grid-op\":{\"columns\":[{\"field\":\"id\",\"title\":\"ID\",\"width\":40},{\"field\":\"name\",\"title\":\"名称\",\"showOverflow\":\"tooltip\"},{\"field\":\"province\",\"title\":\"省份\",\"width\":80},{\"field\":\"city\",\"title\":\"城市\",\"width\":80}],\"data\":[{\"id\":\"1\",\"name\":\"GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司GFD科技有限公司\",\"city\":\"福州\",\"province\":\"福建\"},{\"id\":\"2\",\"name\":\"WWW科技有限公司\",\"city\":\"深圳\",\"province\":\"广东\"},{\"id\":\"3\",\"name\":\"RFV有限责任公司\",\"city\":\"中山\",\"province\":\"广东\"},{\"id\":\"4\",\"name\":\"TGB科技有限公司\",\"city\":\"龙岩\",\"province\":\"福建\"},{\"id\":\"5\",\"name\":\"YHN科技有限公司\",\"city\":\"韶关\",\"province\":\"广东\"},{\"id\":\"6\",\"name\":\"WSX科技有限公司\",\"city\":\"黄冈\",\"province\":\"武汉\"}]}}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"modelValue\",\"label\":{\"text\":{\"zh_CN\":\"绑定值\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"双向绑定值\"},\"labelPosition\":\"left\"},{\"property\":\"placeholder\",\"label\":{\"text\":{\"zh_CN\":\"占位文本\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"输入框占位文本\"},\"labelPosition\":\"left\"},{\"property\":\"show-clear-btn\",\"label\":{\"text\":{\"zh_CN\":\"清除按钮\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否显示清除按钮\"},\"labelPosition\":\"left\"},{\"property\":\"disabled\",\"label\":{\"text\":{\"zh_CN\":\"禁用\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否禁用\"},\"labelPosition\":\"left\"},{\"property\":\"auto-lookup\",\"label\":{\"text\":{\"zh_CN\":\"自动请求数据\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"defaultValue\":true,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"初始化时是否自动请求数据,默认 true\"},\"labelPosition\":\"left\"}]},{\"name\":\"1\",\"label\":{\"zh_CN\":\"其他\"},\"content\":[{\"property\":\"width\",\"label\":{\"text\":{\"zh_CN\":\"宽度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"设置弹出面板的宽度(单位像素)\"},\"labelPosition\":\"left\"},{\"property\":\"conditions\",\"label\":{\"text\":{\"zh_CN\":\"过滤条件\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"当弹出面板配置的是表格时,设置弹出面板中的过滤条件\"},\"labelPosition\":\"top\"},{\"property\":\"grid-op\",\"label\":{\"text\":{\"zh_CN\":\"面板表格配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"设置弹出面板中表格组件的配置信息\"}},{\"property\":\"pager-op\",\"label\":{\"text\":{\"zh_CN\":\"分页配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"设置弹出编辑框中分页配置\"},\"labelPosition\":\"top\"},{\"property\":\"multi\",\"label\":{\"text\":{\"zh_CN\":\"多选\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"设置弹出面板中的数据是否可多选\"},\"labelPosition\":\"left\"},{\"property\":\"show-pager\",\"label\":{\"text\":{\"zh_CN\":\"启用分页\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"当 popseletor 为 grid 时才能生效,配置为 true 后还需配置 pagerOp 属性\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"\"}}],\"events\":{\"onChange\":{\"label\":{\"zh_CN\":\"选中值改变时触发\"},\"description\":{\"zh_CN\":\"在 Input 值改变时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前选中项的值\"}},{\"name\":\"value\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前选中对象\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onUpdate:modelValue\":{\"label\":{\"zh_CN\":\"双向绑定的值改变时触发\"},\"description\":{\"zh_CN\":\"当前选中的值改变时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"双向绑定的当前选中值\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onClose\":{\"label\":{\"zh_CN\":\"弹框关闭时触发的事件\"},\"description\":{\"zh_CN\":\"弹框关闭时触发的事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[],\"returns\":{}},\"defaultValue\":\"\"},\"onPageChange\":{\"label\":{\"zh_CN\":\"分页切换事件\"},\"description\":{\"zh_CN\":\"表格模式下分页切换事件\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"String\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"当前页码数\"}}],\"returns\":{}},\"defaultValue\":\"\"}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"modelValue\",\"disabled\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:15', '1', '2025-08-03 19:54:15'); @@ -69,9 +69,38 @@ INSERT INTO `t_component` VALUES (50, '3.20.0', '{\"zh_CN\":\"提示框\"}', 'Ti INSERT INTO `t_component` VALUES (51, '3.20.0', '{\"zh_CN\":\"日期选择\"}', 'TinyDatePicker', 'datepick', '用于输入或选择日期', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"DatePicker\",\"destructuring\":true}', 'component', 'form', 1, '[{\"name\":{\"zh_CN\":\"日期选择\"},\"icon\":\"datepick\",\"screenshot\":\"\",\"snippetName\":\"TinyDatePicker\",\"schema\":{\"componentName\":\"TinyDatePicker\",\"props\":{\"placeholder\":\"请输入\",\"modelValue\":\"\"}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"modelValue\",\"label\":{\"text\":{\"zh_CN\":\"绑定值\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"I18nConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"双向绑定值\"},\"labelPosition\":\"left\"},{\"property\":\"type\",\"label\":{\"text\":{\"zh_CN\":\"类型\"}},\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"日期\",\"value\":\"date\"},{\"label\":\"日期时间\",\"value\":\"datetime\"},{\"label\":\"周\",\"value\":\"week\"},{\"label\":\"月份\",\"value\":\"month\"},{\"label\":\"年份\",\"value\":\"year\"}]}},\"description\":{\"zh_CN\":\"设置日期框的type属性\"},\"labelPosition\":\"left\"},{\"property\":\"placeholder\",\"label\":{\"text\":{\"zh_CN\":\"占位文本\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"I18nConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"输入框占位文本\"},\"labelPosition\":\"left\"},{\"property\":\"clearable\",\"label\":{\"text\":{\"zh_CN\":\"清除按钮\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否显示清除按钮\"},\"labelPosition\":\"left\"},{\"property\":\"disabled\",\"label\":{\"text\":{\"zh_CN\":\"禁用\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否禁用\"},\"labelPosition\":\"left\"},{\"property\":\"readonly\",\"label\":{\"text\":{\"zh_CN\":\"只读\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否只读\"},\"labelPosition\":\"left\"},{\"property\":\"size\",\"label\":{\"text\":{\"zh_CN\":\"尺寸\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"medium\",\"value\":\"medium\"},{\"label\":\"small\",\"value\":\"small\"},{\"label\":\"mini\",\"value\":\"mini\"}]}},\"description\":{\"zh_CN\":\"日期框尺寸。该属性的可选值为 medium / small / mini\"},\"labelPosition\":\"left\"}]},{\"name\":\"1\",\"label\":{\"zh_CN\":\"其他\"},\"content\":[{\"property\":\"maxlength\",\"label\":{\"text\":{\"zh_CN\":\"输入最大长度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"设置 input 框的maxLength\"}},{\"property\":\"autofocus\",\"label\":{\"text\":{\"zh_CN\":\"聚焦\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"自动获取焦点\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"\"}}],\"events\":{\"onChange\":{\"label\":{\"zh_CN\":\"值改变时触发\"},\"description\":{\"zh_CN\":\"在 Input 值改变时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"输入框改变后的值\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onInput\":{\"label\":{\"zh_CN\":\"输入值改变时触发\"},\"description\":{\"zh_CN\":\"在 Input 输入值改变时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"输入框输入的值\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onUpdate:modelValue\":{\"label\":{\"zh_CN\":\"双向绑定的值改变时触发\"},\"description\":{\"zh_CN\":\"在 Input 输入值改变时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"双向绑定的值\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onBlur\":{\"label\":{\"zh_CN\":\"失去焦点时触发\"},\"description\":{\"zh_CN\":\"在 Input 失去焦点时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"原生 event\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onFocus\":{\"label\":{\"zh_CN\":\"获取焦点时触发\"},\"description\":{\"zh_CN\":\"在 Input 获取焦点时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"原生 event\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onClear\":{\"label\":{\"zh_CN\":\"点击清空按钮时触发\"},\"description\":{\"zh_CN\":\"点击清空按钮时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[],\"returns\":{}},\"defaultValue\":\"\"}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":true,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"value\",\"disabled\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:16', '1', '2025-08-03 19:54:16'); INSERT INTO `t_component` VALUES (52, '3.20.0', '{\"zh_CN\":\"数字输入框\"}', 'TinyNumeric', 'numeric', '通过鼠标或键盘输入字符', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"Numeric\",\"destructuring\":true}', 'component', 'form', 1, '[{\"name\":{\"zh_CN\":\"数字输入框\"},\"icon\":\"numeric\",\"screenshot\":\"\",\"snippetName\":\"TinyNumeric\",\"schema\":{\"componentName\":\"TinyNumeric\",\"props\":{\"allow-empty\":true,\"placeholder\":\"请输入\",\"controls-position\":\"right\",\"step\":1}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"modelValue\",\"label\":{\"text\":{\"zh_CN\":\"绑定值\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"widget\":{\"component\":\"I18nConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"双向绑定值\"},\"labelPosition\":\"left\"},{\"property\":\"placeholder\",\"label\":{\"text\":{\"zh_CN\":\"占位文本\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"I18nConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"输入框占位文本\"},\"labelPosition\":\"left\"},{\"property\":\"allow-empty\",\"label\":{\"text\":{\"zh_CN\":\"内容可清空\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否内容可清空\"},\"labelPosition\":\"left\"},{\"property\":\"disabled\",\"label\":{\"text\":{\"zh_CN\":\"禁用\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否禁用\"},\"labelPosition\":\"left\"},{\"property\":\"size\",\"label\":{\"text\":{\"zh_CN\":\"尺寸\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"medium\",\"value\":\"medium\"},{\"label\":\"small\",\"value\":\"small\"},{\"label\":\"mini\",\"value\":\"mini\"}]}},\"description\":{\"zh_CN\":\"输入框尺寸。该属性的可选值为 medium / small / mini\"},\"labelPosition\":\"left\"},{\"property\":\"controls\",\"label\":{\"text\":{\"zh_CN\":\"加减按钮\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否使用加减按钮\"},\"labelPosition\":\"left\"},{\"property\":\"controls-position\",\"label\":{\"text\":{\"zh_CN\":\"加减按钮位置\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"左右两侧\",\"value\":\"\"},{\"label\":\"只在右侧\",\"value\":\"right\"}]}},\"description\":{\"zh_CN\":\"加减按钮位置\"}},{\"property\":\"precision\",\"label\":{\"text\":{\"zh_CN\":\"精度\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{\"allowEmpty\":true}},\"description\":{\"zh_CN\":\"数值精度\"},\"labelPosition\":\"left\"},{\"property\":\"step\",\"label\":{\"text\":{\"zh_CN\":\"步长\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{\"allowEmpty\":true}},\"description\":{\"zh_CN\":\"步长\"},\"labelPosition\":\"left\"},{\"property\":\"max\",\"label\":{\"text\":{\"zh_CN\":\"最大数值\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{\"allowEmpty\":true}},\"description\":{\"zh_CN\":\"可输入的最大数值\"},\"labelPosition\":\"left\"},{\"property\":\"min\",\"label\":{\"text\":{\"zh_CN\":\"最小数值\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{\"allowEmpty\":true}},\"description\":{\"zh_CN\":\"可输入的最大数值\"},\"labelPosition\":\"left\"}]}],\"events\":{\"onChange\":{\"label\":{\"zh_CN\":\"值改变时触发\"},\"description\":{\"zh_CN\":\"在 Input 值改变时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"输入框改变后的值\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onInput\":{\"label\":{\"zh_CN\":\"输入值改变时触发\"},\"description\":{\"zh_CN\":\"在 Input 输入值改变时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"输入框输入的值\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onUpdate:modelValue\":{\"label\":{\"zh_CN\":\"双向绑定的值改变时触发\"},\"description\":{\"zh_CN\":\"在 Input 输入值改变时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"双向绑定的值\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onBlur\":{\"label\":{\"zh_CN\":\"失去焦点时触发\"},\"description\":{\"zh_CN\":\"在 Input 失去焦点时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"原生 event\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onFocus\":{\"label\":{\"zh_CN\":\"获取焦点时触发\"},\"description\":{\"zh_CN\":\"在 Input 获取焦点时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Object\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"原生 event\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onClear\":{\"label\":{\"zh_CN\":\"点击清空按钮时触发\"},\"description\":{\"zh_CN\":\"点击清空按钮时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[],\"returns\":{}},\"defaultValue\":\"\"}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":true,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"value\",\"disabled\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:16', '1', '2025-08-03 19:54:16'); INSERT INTO `t_component` VALUES (53, '3.20.0', '{\"zh_CN\":\"穿梭框\"}', 'TinyTransfer', 'transfer', '穿梭框,实现左右表格数据的双向交换的组件', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyTransfer\",\"destructuring\":true}', 'component', 'form', 1, '[{\"name\":{\"zh_CN\":\"穿梭框\"},\"icon\":\"transfer\",\"screenshot\":\"\",\"snippetName\":\"TinyTransfer\",\"schema\":{\"componentName\":\"TinyTransfer\",\"props\":{\"modelValue\":[3],\"data\":[{\"key\":1,\"label\":\"备选项1\",\"disabled\":false},{\"key\":2,\"label\":\"备选项2\",\"disabled\":false},{\"key\":3,\"label\":\"备选项3\",\"disabled\":false},{\"key\":4,\"label\":\"备选项4\",\"disabled\":false}]}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"modelValue\",\"label\":{\"text\":{\"zh_CN\":\"绑定值\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"widget\":{\"component\":\"I18nConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"双向绑定值\"},\"labelPosition\":\"left\"},{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"左右列表的全量数据源\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"左右列表的全量数据源\"},\"labelPosition\":\"left\"},{\"property\":\"filterable\",\"label\":{\"text\":{\"zh_CN\":\"是否启用搜索的功能\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否启用搜索的功能\"},\"labelPosition\":\"left\"},{\"property\":\"showAllBtn\",\"label\":{\"text\":{\"zh_CN\":\"是否显示全部移动按钮\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"是否显示全部移动按钮\"},\"labelPosition\":\"left\"},{\"property\":\"toLeftDisable\",\"label\":{\"text\":{\"zh_CN\":\"组件初始化状态下未选中时,默认按钮显示禁用状态\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"组件初始化状态下未选中时,默认按钮显示禁用状态\"},\"labelPosition\":\"left\"},{\"property\":\"toRightDisable\",\"label\":{\"text\":{\"zh_CN\":\"组件初始化状态下未选中时,默认按钮显示禁用状态\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"widget\":{\"component\":\"CheckBoxConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"组件初始化状态下未选中时,默认按钮显示禁用状态\"},\"labelPosition\":\"left\"},{\"property\":\"titles\",\"label\":{\"text\":{\"zh_CN\":\"自定义列表的标题\"}},\"required\":false,\"readOnly\":false,\"disabled\":false,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"自定义列表的标题;不设置titles时,左右列表的标题默认显示为: 列表 1, 列表 2\"},\"labelPosition\":\"left\"}]}],\"events\":{\"onChange\":{\"label\":{\"zh_CN\":\"右侧列表元素变化时触发\"},\"description\":{\"zh_CN\":\"右侧列表元素变化时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"右侧列表元素变化时触发\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onLeftCheckChange\":{\"label\":{\"zh_CN\":\"左侧列表元素被用户选中 / 取消选中时触发;\"},\"description\":{\"zh_CN\":\"左侧列表元素被用户选中 / 取消选中时触发;\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"左侧列表元素被用户选中 / 取消选中时触发;\"}}],\"returns\":{}},\"defaultValue\":\"\"},\"onRightCheckChange\":{\"label\":{\"zh_CN\":\"右侧列表元素被用户选中 / 取消选中时触发\"},\"description\":{\"zh_CN\":\"右侧列表元素被用户选中 / 取消选中时触发\"},\"type\":\"event\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"string\",\"defaultValue\":\"\",\"description\":{\"zh_CN\":\"右侧列表元素被用户选中 / 取消选中时触发\"}}],\"returns\":{}},\"defaultValue\":\"\"}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[\"value\",\"disabled\"]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:16', '1', '2025-08-03 19:54:16'); +INSERT INTO `t_component` VALUES (54, '3.22.0', '{\"zh_CN\":\"评分\"}', 'TinyRate', 'line', '评分', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyRate\",\"destructuring\":true}', 'component', '评分组件', 2, '[{\"name\":{\"zh_CN\":\"评分\"},\"icon\":\"rate\",\"screenshot\":\"\",\"snippetName\":\"TinyRate\",\"schema\":{\"props\":{\"allow-half\":true,\"modelValue\":3,\"show-score\":true}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"绑定值\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"modelValue\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"绑定值\"},\"defaultValue\":0,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"最大分值\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"max\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"最大分值\"},\"defaultValue\":5,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 name、size、type 等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"样式属性\"},\"content\":[{\"cols\":12,\"type\":\"array\",\"label\":{\"text\":{\"zh_CN\":\"颜色数组\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"colors\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"icon 的颜色数组,为 Threshold 三个分段所对应的颜色\"},\"defaultValue\":\"[\'#FADB14\', \'#FADB14\', \'#FADB14\']\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"禁用未选中颜色\"}},\"widget\":{\"props\":{},\"component\":\"ColorConfigurator\"},\"disabled\":false,\"property\":\"disabled-void-color\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"禁用状态下未选中 icon 的颜色\"},\"defaultValue\":\"#D9D9D9\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"禁用未选中图标类\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入图标名称\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"disabled-void-icon-class\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"只读状态下未选中的图标样式名\"},\"defaultValue\":\"icon-starActive\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"array\",\"label\":{\"text\":{\"zh_CN\":\"图标类数组\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"icon-classes\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"三个分段对应的图标样式名\"},\"defaultValue\":\"[\'icon-starActive\', \'icon-starActive\', \'icon-starActive\']\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"图标大小\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"size\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"图标字体大小\"},\"defaultValue\":\"18px\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"图标间距\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"space\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"每个图标所占宽度\"},\"defaultValue\":\"24px\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"文字颜色\"}},\"widget\":{\"props\":{},\"component\":\"ColorConfigurator\"},\"disabled\":false,\"property\":\"text-color\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"辅助文字的颜色\"},\"defaultValue\":\"#666666\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"未选中颜色\"}},\"widget\":{\"props\":{},\"component\":\"ColorConfigurator\"},\"disabled\":false,\"property\":\"void-color\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"未选中 icon 的颜色\"},\"defaultValue\":\"#BFBFBF\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"未选中图标类\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入图标名称\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"void-icon-class\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"未选中 icon 的图标样式名\"},\"defaultValue\":\"icon-starDisable\",\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件外观、颜色、尺寸相关的配置,包括 width、height、backgroundColor、color 等与视觉呈现相关的属性\"}},{\"name\":\"2\",\"label\":{\"zh_CN\":\"行为属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"允许半选\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"allow-half\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否允许半选\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"禁用\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"disabled\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否为只读\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"高分阈值\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"high-threshold\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"高分和中等分数的界限值,值本身被划分在高分中\"},\"defaultValue\":4,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"低分阈值\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"low-threshold\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"低分和中等分数的界限值,值本身被划分在低分中\"},\"defaultValue\":2,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"单选形态\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"radio\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"评分其他形态单选\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"分数模板\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"score-template\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"分数显示模板,用“{value}”代表分数\"},\"defaultValue\":\"{value}\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示分数\"}},\"widget\":{\"props\":{},\"component\":\"SwitchConfigurator\"},\"disabled\":false,\"property\":\"show-score\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否显示当前分数,show-score 和 show-text 不能同时为真\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示文字\"}},\"widget\":{\"props\":{},\"component\":\"SwitchConfigurator\"},\"disabled\":false,\"property\":\"show-text\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否显示辅助文字,若为真,则会从 texts 数组中选取当前分数对应的文字内容\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"文字在底部\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"text-on-bottom\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否在图标下显示对应的文字\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"array\",\"label\":{\"text\":{\"zh_CN\":\"文字数组\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"texts\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"辅助文字数组,文字的数量应该与max属性一致\"},\"defaultValue\":\"[\'很差\', \'差\', \'一般\', \'好\', \'很好\']\",\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件交互、事件、状态相关的配置,包括 disabled、loading、onClick 等与用户操作和状态相关的属性\"}}],\"events\":{\"onChange\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"分值改变时触发\"},\"description\":{\"zh_CN\":\"分值改变时触发\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"number\",\"description\":{\"zh_CN\":\"改变后的分值\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"\",\"description\":{\"zh_CN\":\"\"},\"defaultValue\":\"\"}}}},\"slots\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-03-12 01:29:44', '2', '2026-03-12 01:29:44'); +INSERT INTO `t_component` VALUES (55, '3.22.0', '{\"zh_CN\":\"滑块\"}', 'TinySlider', 'slider', '滑块', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinySlider\",\"destructuring\":true}', 'component', '滑块组件', 2, '[{\"name\":{\"zh_CN\":\"滑块\"},\"icon\":\"slider\",\"screenshot\":\"\",\"snippetName\":\"TinySlider\",\"schema\":{\"componentName\":\"TinySlider\",\"props\":{\"max\":100,\"min\":0,\"step\":1,\"modelValue\":50}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"object\",\"label\":{\"text\":{\"zh_CN\":\"绑定值\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"modelValue\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"设置单滑块的当前值,必需是整数或数组\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"最小值\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"min\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"设置最小值\"},\"defaultValue\":0,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"最大值\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"max\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"设置最大值,必需是整数,可以负数,必需大于所设置的最小值\"},\"defaultValue\":100,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"步长\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"step\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"设置滑块移动时,每步位移距离,必需是大于0的正整数\"},\"defaultValue\":1,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 name、size、type 等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"样式属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"高度\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"height\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"Slider 组件的高度,当 vertical 为 true 时有效\"},\"defaultValue\":\"300px\",\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件外观、颜色、尺寸相关的配置,包括 width、height、backgroundColor、color 等与视觉呈现相关的属性\"}},{\"name\":\"2\",\"label\":{\"zh_CN\":\"行为属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"禁用\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"disabled\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否禁用\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示输入框\"}},\"widget\":{\"props\":{},\"component\":\"SwitchConfigurator\"},\"disabled\":false,\"property\":\"show-input\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否显示输入框\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示提示\"}},\"widget\":{\"props\":{},\"component\":\"SwitchConfigurator\"},\"disabled\":false,\"property\":\"show-tip\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否显示 tooltip\"},\"defaultValue\":true,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"单位\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"unit\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"输入框后面显示的单位,仅在输入框模式下有效\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"竖向模式\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"vertical\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否竖向模式\"},\"defaultValue\":false,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件交互、事件、状态相关的配置,包括 disabled、loading、onClick 等与用户操作和状态相关的属性\"}},{\"name\":\"3\",\"label\":{\"zh_CN\":\"高级属性\"},\"content\":[{\"cols\":12,\"type\":\"function\",\"label\":{\"text\":{\"zh_CN\":\"格式化提示\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"javascript\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"format-tooltip\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"格式化 tooltip 提示\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"object\",\"label\":{\"text\":{\"zh_CN\":\"刻度\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"marks\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"设置滑杆的刻度值\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"总步数\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"num-pages\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"设置总步数,即按快捷键 PageDown/PageUp 时,每次移动的距离是 \\\"⌈(max-min)/num-pages⌉\\\"\"},\"defaultValue\":1,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件可选的专业配置项,包括复杂对象配置、高级功能选项等不常用的特殊配置\"}}],\"events\":{\"onStop\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"滑动结束时触发\"},\"description\":{\"zh_CN\":\"设置滑块滑动结束时,触发该事件\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"number | [number, number]\",\"description\":{\"zh_CN\":\"当前值\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"\",\"description\":{\"zh_CN\":\"\"},\"defaultValue\":\"\"}}},\"onStart\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"滑动开始时触发\"},\"description\":{\"zh_CN\":\"设置滑块滑动开始时,触发该事件\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Event\",\"description\":{\"zh_CN\":\"事件对象\"},\"defaultValue\":\"\"},{\"name\":\"value\",\"type\":\"number | [number, number]\",\"description\":{\"zh_CN\":\"当前值\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"\",\"description\":{\"zh_CN\":\"\"},\"defaultValue\":\"\"}}},\"onChange\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"值改变时触发\"},\"description\":{\"zh_CN\":\"值改变时触发(使用鼠标拖曳时,只在松开鼠标后触发)\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"number | [number, number]\",\"description\":{\"zh_CN\":\"当前值\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"\",\"description\":{\"zh_CN\":\"\"},\"defaultValue\":\"\"}}}},\"slots\":{\"default\":{\"label\":{\"zh_CN\":\"默认内容\"},\"description\":{\"zh_CN\":\"显示滑块值的插槽,仅仅 v-model 是单数值时才有效\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-03-12 01:29:44', '2', '2026-03-12 01:29:44'); +INSERT INTO `t_component` VALUES (56, '3.22.0', '{\"zh_CN\":\"级联选择器\"}', 'TinyCascader', 'cascader', '级联选择器', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyCascader\",\"destructuring\":true}', 'component', '组件', 2, '[{\"name\":{\"zh_CN\":\"级联选择器\"},\"icon\":\"cascader\",\"screenshot\":\"\",\"snippetName\":\"TinyCascader\",\"schema\":{\"componentName\":\"TinyCascader\",\"props\":{\"modelValue\":\"anzhuangcli\",\"options\":[{\"value\":\"zhinan\",\"label\":\"指南\",\"children\":[{\"value\":\"anzhuang\",\"label\":\"安装\",\"children\":[{\"value\":\"xiangmudengji\",\"label\":\"项目登记\"},{\"value\":\"huanjingzhunbei\",\"label\":\"环境准备\"},{\"value\":\"anzhuangcli\",\"label\":\"安装 CLI\"},{\"value\":\"chuangjianxiangmu\",\"label\":\"创建项目\"}]},{\"value\":\"kaifa\",\"label\":\"开发\",\"children\":[{\"value\":\"yinruzujian\",\"label\":\"引入组件\"},{\"value\":\"monishuju\",\"label\":\"模拟数据\"}]}]},{\"value\":\"zujian\",\"label\":\"组件\",\"children\":[{\"value\":\"basic\",\"label\":\"框架风格\",\"children\":[{\"value\":\"layout\",\"label\":\"Layout 布局\"},{\"value\":\"color\",\"label\":\"Color 色彩\"},{\"value\":\"font\",\"label\":\"Font 字体\"},{\"value\":\"icon\",\"label\":\"Icon 图标\"}]},{\"value\":\"data\",\"label\":\"数据组件\",\"children\":[{\"value\":\"tree\",\"label\":\"Tree 树形控件\"},{\"value\":\"pager\",\"label\":\"Pager 分页\"}]}]}],\"placeholder\":\"请选择\"}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"object\",\"label\":{\"text\":{\"zh_CN\":\"绑定值\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"modelValue\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"选中项绑定值, 其类型由 props.multiple、props.emitPath 共同决定\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"array\",\"label\":{\"text\":{\"zh_CN\":\"选项数据\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"options\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"可选项数据源,键名可通过 Props 属性配置\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"占位文本\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"placeholder\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"输入框占位文本\"},\"defaultValue\":\"请选择\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"enum\",\"label\":{\"text\":{\"zh_CN\":\"尺寸\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"medium\",\"value\":\"medium\"},{\"label\":\"small\",\"value\":\"small\"},{\"label\":\"mini\",\"value\":\"mini\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"size\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"尺寸\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"分隔符\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"separator\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"选项分隔符\"},\"defaultValue\":\"/\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示所有层级\"}},\"widget\":{\"props\":{},\"component\":\"SwitchConfigurator\"},\"disabled\":false,\"property\":\"show-all-levels\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"输入框中是否显示选中值的完整路径\"},\"defaultValue\":true,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 name、size、type 等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"行为属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"禁用\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"disabled\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否禁用\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"可清空\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"clearable\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否支持清空选项\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"折叠标签\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"collapse-tags\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"多选模式下是否折叠 Tag\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"可筛选\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"filterable\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否可搜索选项\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"去抖延迟\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"debounce\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"搜索关键词输入的去抖延迟,单位毫秒\"},\"defaultValue\":300,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件交互、事件、状态相关的配置,包括 disabled、loading、onClick 等与用户操作和状态相关的属性\"}},{\"name\":\"2\",\"label\":{\"zh_CN\":\"高级属性\"},\"content\":[{\"cols\":12,\"type\":\"object\",\"label\":{\"text\":{\"zh_CN\":\"筛选前钩子\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"before-filter\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"筛选之前的钩子,参数为输入的值,若返回 false 或者返回 Promise 且被 reject,则停止筛选\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"object\",\"label\":{\"text\":{\"zh_CN\":\"筛选方法\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"filter-method\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"自定义搜索逻辑,第一个参数是节点 node,第二个参数是搜索关键词 keyword,通过返回布尔值表示是否命中\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"object\",\"label\":{\"text\":{\"zh_CN\":\"配置选项\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"props\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"配置选项,具体见 ICascaderPanelConfig 表\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"形状模式\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"shape\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"通过 shape=\'filter\' 属性切换至过滤器模式\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"标签\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"label\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"shape=\'filter\' 时生效,可传入 label 显示标题\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"提示信息\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"tip\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"shape=\'filter\' 时生效,可传入 tip 显示提示信息\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"透明背景\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"blank\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"shape=\'filter\' 时生效,设置过滤器模式背景为透明\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"弹出框插入 body\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"popper-append-to-body\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否将弹出框插入至 body 元素。在弹出框的定位出现问题时,可将该属性设置为 false (可参考 select 组件)\"},\"defaultValue\":true,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"弹出框类名\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"popper-class\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"为 popper 添加类名(可参考 popover 组件)\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件可选的专业配置项,包括复杂对象配置、高级功能选项等不常用的特殊配置\"}}],\"events\":{\"onBlur\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"当失去焦点时触发\"},\"description\":{\"zh_CN\":\"当失去焦点时触发\"},\"defaultValue\":\"\"},\"onFocus\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"当获得焦点时触发\"},\"description\":{\"zh_CN\":\"当获得焦点时触发\"},\"defaultValue\":\"\"},\"onChange\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"当选中节点变化时触发\"},\"description\":{\"zh_CN\":\"当选中节点变化时触发\"},\"defaultValue\":\"\"},\"onRemoveTag\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"在多选模式下,移除Tag时触发\"},\"description\":{\"zh_CN\":\"在多选模式下,移除Tag时触发\"},\"defaultValue\":\"\"},\"onExpandChange\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"当展开节点发生变化时触发\"},\"description\":{\"zh_CN\":\"当展开节点发生变化时触发\"},\"defaultValue\":\"\"},\"onVisibleChange\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"下拉框出现/隐藏时触发\"},\"description\":{\"zh_CN\":\"下拉框出现/隐藏时触发\"},\"defaultValue\":\"\"}},\"slots\":{\"empty\":{\"label\":{\"zh_CN\":\"空状态\"},\"description\":{\"zh_CN\":\"无匹配选项时的内容\"}},\"default\":{\"label\":{\"zh_CN\":\"默认内容\"},\"description\":{\"zh_CN\":\"自定义备选项的节点内容,参数为 { node: ICascaderPanelNode, data: ICascaderPanelData },分别为当前节点的 Node 对象和数据\"}},\"no-data\":{\"label\":{\"zh_CN\":\"无数据\"},\"description\":{\"zh_CN\":\"通过 no-data 插槽设置没有数据时显示的内容\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-03-12 01:29:44', '2', '2026-03-12 01:29:44'); +INSERT INTO `t_component` VALUES (57, '3.22.0', '{\"zh_CN\":\"单选组\"}', 'TinyRadioGroup', 'radiogroup', '单选组', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyRadioGroup\",\"destructuring\":true}', 'component', '组件', 2, '[{\"name\":{\"zh_CN\":\"单选组\"},\"icon\":\"radiogroup\",\"screenshot\":\"\",\"snippetName\":\"TinyRadioGroup\",\"schema\":{\"props\":{\"type\":\"radio\",\"modelValue\":\"1\",\"options\":[{\"label\":\"1\",\"text\":\"选项一\"},{\"label\":\"2\",\"text\":\"选项二\"}]}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"array\",\"label\":{\"text\":{\"zh_CN\":\"绑定值\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"modelValue\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"单选组绑定值\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"尺寸\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"medium\",\"value\":\"medium\"},{\"label\":\"small\",\"value\":\"small\"},{\"label\":\"mini\",\"value\":\"mini\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"size\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"单选组尺寸\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"类型\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"radio\",\"value\":\"radio\"},{\"label\":\"button\",\"value\":\"button\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"type\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"配置式单选组的展示形式\"},\"defaultValue\":\"radio\",\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 name、size、type 等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"样式属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"填充颜色\"}},\"widget\":{\"props\":{},\"component\":\"ColorConfigurator\"},\"disabled\":false,\"property\":\"fill\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"按钮形式单选选中时的背景颜色\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"文本颜色\"}},\"widget\":{\"props\":{},\"component\":\"ColorConfigurator\"},\"disabled\":false,\"property\":\"text-color\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"按钮形式单选激活时的文本颜色\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件外观、颜色、尺寸相关的配置,包括 width、height、backgroundColor、color 等与视觉呈现相关的属性\"}},{\"name\":\"2\",\"label\":{\"zh_CN\":\"行为属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"禁用\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"disabled\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否禁用单选组\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"只读\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"display-only\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否只读状态\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"垂直显示\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"vertical\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"垂直显示单选组\"},\"defaultValue\":false,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件交互、事件、状态相关的配置,包括 disabled、loading、onClick 等与用户操作和状态相关的属性\"}},{\"name\":\"3\",\"label\":{\"zh_CN\":\"高级属性\"},\"content\":[{\"cols\":12,\"type\":\"array\",\"label\":{\"text\":{\"zh_CN\":\"选项配置\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"options\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"配置式单选组设置列表\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件可选的专业配置项,包括复杂对象配置、高级功能选项等不常用的特殊配置\"}}],\"events\":{\"onChange\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"绑定值变化时触发\"},\"description\":{\"zh_CN\":\"绑定值变化时触发的事件\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"value\",\"type\":\"number[] | string[]\",\"description\":{\"zh_CN\":\"变化后的值\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"void\",\"description\":{\"zh_CN\":\"无返回值\"},\"defaultValue\":\"\"}}}},\"slots\":{\"default\":{\"label\":{\"zh_CN\":\"默认内容\"},\"description\":{\"zh_CN\":\"radio-group 的默认插槽\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-03-12 01:29:44', '2', '2026-03-12 01:29:44'); +INSERT INTO `t_component` VALUES (58, '3.22.0', '{\"zh_CN\":\"步骤条\"}', 'TinySteps', 'steps', '步骤条', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinySteps\",\"destructuring\":true}', 'component', '步骤条', 2, '[{\"name\":{\"zh_CN\":\"步骤条\"},\"icon\":\"steps\",\"screenshot\":\"\",\"snippetName\":\"TinySteps\",\"schema\":{\"componentName\":\"TinySteps\",\"props\":{\"data\":[{\"name\":\"步骤一\",\"status\":\"wait\"},{\"name\":\"步骤二\",\"status\":\"process\"},{\"name\":\"步骤三\",\"status\":\"finish\"}],\"active\":1}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"当前步骤\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"active\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"当前步骤索引,从0开始计数\"},\"defaultValue\":-1,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"array\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"data\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"步骤条的数据\"},\"defaultValue\":[],\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"名称字段\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入字段名\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"name-field\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"节点名称对应的字段名\"},\"defaultValue\":\"\",\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括当前步骤、数据等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"样式属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"内容居中\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"content-center\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"使步骤条内容默认居中显示\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"点状样式\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"dot\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"点状形步骤条,当值只支持垂直样式\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"自适应宽度\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"flex\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"节点是否自适应宽度\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"横向单链\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"line\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"通过 line 设置横向单链型步骤条\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"间距\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入宽度值\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"space\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"节点宽度, 可取值数字、带长度单位数值与百分比,传数字则默认以 px 为长度单位\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件外观、颜色、尺寸相关的配置,包括 width、height、backgroundColor、color 等与视觉呈现相关的属性\"}},{\"name\":\"2\",\"label\":{\"zh_CN\":\"行为属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"高级模式\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"advanced\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否开启高级向导模式\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"持续时间\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"duration\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"节点滚动的持续时间(单位 ms),仅高级向导模式有效\"},\"defaultValue\":300,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"可见节点数\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"visible-num\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"控制信息可见的节点数,默认可见5个\"},\"defaultValue\":5,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件交互、事件、状态相关的配置,包括 disabled、loading、onClick 等与用户操作和状态相关的属性\"}},{\"name\":\"3\",\"label\":{\"zh_CN\":\"高级属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"计数字段\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入字段名\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"count-field\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"条形步骤条里徽标计数对应的字段名\"},\"defaultValue\":\"\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"状态字段\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入字段名\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"status-field\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"数据状态对应的字段名,用于条形步骤条\"},\"defaultValue\":\"\",\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件可选的专业配置项,包括复杂对象配置、高级功能选项等不常用的特殊配置\"}}],\"events\":{\"onClick\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"节点点击事件\"},\"description\":{\"zh_CN\":\"节点点击事件,参数:index: 点击节点的索引node:点击节点的数据\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"index\",\"type\":\"number\",\"description\":{\"zh_CN\":\"点击节点的索引\"},\"defaultValue\":\"\"},{\"name\":\"node\",\"type\":\"IStepsItem\",\"description\":{\"zh_CN\":\"点击节点的数据\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"\",\"description\":{\"zh_CN\":\"\"},\"defaultValue\":\"\"}}}},\"slots\":{\"item\":{\"label\":{\"zh_CN\":\"数据项\"},\"description\":{\"zh_CN\":\"步骤条数据项插槽,用于条形步骤条\"}},\"itemFooter\":{\"label\":{\"zh_CN\":\"itemFooter\"},\"description\":{\"zh_CN\":\"步骤条数据项底部插槽,用于条形步骤条\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-03-12 01:29:44', '2', '2026-03-12 01:29:44'); +INSERT INTO `t_component` VALUES (59, '3.22.0', '{\"zh_CN\":\"树形菜单\"}', 'TinyTreeMenu', 'tree', '树形菜单', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyTreeMenu\",\"destructuring\":true}', 'component', '组件', 2, '[{\"name\":{\"zh_CN\":\"树形菜单\"},\"icon\":\"treemenu\",\"screenshot\":\"\",\"snippetName\":\"TinyTreeMenu\",\"schema\":{\"componentName\":\"TinyTreeMenu\",\"props\":{\"data\":[{\"id\":1,\"label\":\"一级节点1\",\"children\":[{\"id\":2,\"label\":\"二级节点1-1\"},{\"id\":3,\"label\":\"二级节点1-2\"}]},{\"id\":4,\"label\":\"一级节点2\"}],\"placeholder\":\"输入关键字搜索\",\"node-key\":\"id\"}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"array\",\"label\":{\"text\":{\"zh_CN\":\"数据源\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"data\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"静态数据源\"},\"defaultValue\":[],\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"节点键\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入节点键字段名\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"node-key\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"设置每个树节点唯一标识(key)的属性,在整棵树中都是唯一的\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"object\",\"label\":{\"text\":{\"zh_CN\":\"映射字段\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"props\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"映射字段\"},\"defaultValue\":{\"label\":\"label\",\"isLeaf\":\"isLeaf\",\"children\":\"children\",\"disabled\":\"disabled\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"array\",\"label\":{\"text\":{\"zh_CN\":\"默认勾选键\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"default-checked-keys\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"默认勾选节点的 key 的数组\"},\"defaultValue\":[],\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"默认展开所有\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"default-expand-all\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否默认展开所有子节点\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"array\",\"label\":{\"text\":{\"zh_CN\":\"默认展开键\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"default-expanded-keys\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"默认展开节点的 key 的数组\"},\"defaultValue\":[],\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"默认展开高亮键\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入高亮节点键\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"default-expanded-keys-highlight\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"设置默认展开节点中的某个节点高亮,配合 default-expanded-keys 属性使用\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 data、node-key、props 等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"样式属性\"},\"content\":[{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"缩进距离\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"indent\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"子级相对于父级节点的水平缩进距离,单位 px\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"节点高度\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"node-height\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"节点高度\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"文字省略\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"ellipsis\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否文字超长省略显示。优先级高于 wrap\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"换行显示\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"wrap\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否换行显示\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"component\",\"label\":{\"text\":{\"zh_CN\":\"自定义图标\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"javascript\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"customIcon\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"设置带图标树形菜单\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"component\",\"label\":{\"text\":{\"zh_CN\":\"搜索图标\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"javascript\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"search-icon\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"自定义搜索图标\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"component\",\"label\":{\"text\":{\"zh_CN\":\"后缀图标\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"javascript\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"suffix-icon\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"全局设置带图标树形菜单\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示数字\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"show-number\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"右侧下拉图标区域是否显示为 number 属性定义的数字内容,建议不超过 4 个字符\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"width-adapt\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"width-adapt\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"通过 widthAdapt 属性,是否让组件宽度自适应父容器。\"},\"defaultValue\":false,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件外观、颜色、尺寸相关的配置,包括 indent、node-height、ellipsis 等与视觉呈现相关的属性\"}},{\"name\":\"2\",\"label\":{\"zh_CN\":\"行为属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"手风琴效果\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"accordion\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否设置为手风琴效果(只能展开一个同级别的节点)\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"严格勾选\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"check-strictly\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否遵循父级和子级严格不相关联的做法,配合 show-checkbox 属性使用\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"可清空\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"clearable\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"搜索框是否可清空\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"可收起\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"collapsible\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否允许展开后的菜单收起,未和 show-number 配套使用时,仍可以点击图标收起\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"可拖动\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"draggable\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否可拖动菜单节点\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"点击节点展开\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"expand-on-click-node\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否能点击节点即展开/收起。配置为 fasle 则只能点击下拉图标展开/收起\"},\"defaultValue\":true,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"highlight-query\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"highlight-query\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"通过 highlightQuery 属性,是否在匹配的节点中,高亮搜索文字。\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"懒加载\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"lazy\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否懒加载子节点,配合 load 属性使用\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"侧边折叠按钮\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"menu-collapsible\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否显示侧边折叠与展开按钮\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"仅子级可选\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"only-check-children\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"父级是否不可选,只能展开不能跳转\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示复选框\"}},\"widget\":{\"props\":{},\"component\":\"SwitchConfigurator\"},\"disabled\":false,\"property\":\"show-checkbox\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"节点是否可被选择\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示展开收起\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"show-expand\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否启用一键展开/收起功能。点击左下角图标可展开/收起菜单注意:配合 customIcon 属性使用,纯文本菜单不支持此功能\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示搜索框\"}},\"widget\":{\"props\":{},\"component\":\"SwitchConfigurator\"},\"disabled\":false,\"property\":\"show-filter\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否显示搜索框,可搜索过滤节点\"},\"defaultValue\":true,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示标题提示\"}},\"widget\":{\"props\":{},\"component\":\"SwitchConfigurator\"},\"disabled\":false,\"property\":\"show-title\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否显示节点的 title 提示,鼠标悬浮节点之上触发\"},\"defaultValue\":true,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件交互、事件、状态相关的配置,包括 accordion、draggable、show-checkbox 等与用户操作和状态相关的属性\"}},{\"name\":\"3\",\"label\":{\"zh_CN\":\"高级属性\"},\"content\":[{\"cols\":12,\"type\":\"function\",\"label\":{\"text\":{\"zh_CN\":\"允许拖拽回调\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"javascript\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"allow-drag\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"拖拽开始前的回调事件,定义节点是否允许拖拽的规则,返回 true 则允许拖拽,配合 draggable 属性使用\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"function\",\"label\":{\"text\":{\"zh_CN\":\"允许放置回调\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"javascript\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"allow-drop\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"拖拽结束前的回调事件,定义节点是否允许放置到模板节点的规则,返回 true 则允许放置,配合 draggable 属性使用\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"function\",\"label\":{\"text\":{\"zh_CN\":\"节点过滤方法\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"javascript\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"filter-node-method\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"自定义树节点过滤的方法,返回 true 表示这个节点可以显示,返回 false 则表示这个节点会被隐藏\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"function\",\"label\":{\"text\":{\"zh_CN\":\"获取数据方法\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"javascript\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"get-menu-data-sync\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"自定义获取服务端数据源的方法,返回一个 Promise 对象\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"function\",\"label\":{\"text\":{\"zh_CN\":\"加载子树方法\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"javascript\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"load\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"加载子树数据的方法,仅当 lazy 属性为 true 时生效\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件可选的专业配置项,包括复杂对象配置、高级功能选项等不常用的特殊配置\"}},{\"name\":\"4\",\"label\":{\"zh_CN\":\"其他属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"空文本\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入空文本\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"empty-text\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"内容为空时展示的文本\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"占位符\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入占位符\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"placeholder\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"当数据为空时的占位符\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"无法归属到 “基础/样式/行为/高级属性” 的特殊配置项,这类属性通常不具备前四类分组的明确功能共性\"}}],\"events\":{\"onNodeClick\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"节点点击\"},\"description\":{\"zh_CN\":\"监听节点被点击时的事件\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"nodeData\",\"type\":\"ITreeNodeData\",\"description\":{\"zh_CN\":\"节点数据\"},\"defaultValue\":\"\"},{\"name\":\"node\",\"type\":\"ITreeNodeVm\",\"description\":{\"zh_CN\":\"节点对象\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"void\",\"description\":{\"zh_CN\":\"无返回值\"},\"defaultValue\":\"\"}}},\"onNodeExpand\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"节点展开\"},\"description\":{\"zh_CN\":\"监听节点被点击展开时的事件;\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"nodeData\",\"type\":\"ITreeNodeData\",\"description\":{\"zh_CN\":\"节点数据\"},\"defaultValue\":\"\"},{\"name\":\"node\",\"type\":\"ITreeNodeVm\",\"description\":{\"zh_CN\":\"节点对象\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"void\",\"description\":{\"zh_CN\":\"无返回值\"},\"defaultValue\":\"\"}}},\"onCheckChange\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"勾选状态变化\"},\"description\":{\"zh_CN\":\"监听可勾选节点的勾选状态发生变化时的事件\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"node\",\"type\":\"ITreeNodeVm\",\"description\":{\"zh_CN\":\"节点对象\"},\"defaultValue\":\"\"},{\"name\":\"checked\",\"type\":\"boolean\",\"description\":{\"zh_CN\":\"是否勾选\"},\"defaultValue\":\"\"},{\"name\":\"indeterminate\",\"type\":\"boolean\",\"description\":{\"zh_CN\":\"是否半选\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"void\",\"description\":{\"zh_CN\":\"无返回值\"},\"defaultValue\":\"\"}}},\"onNodeDragEnd\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"节点拖拽结束\"},\"description\":{\"zh_CN\":\"监听节点拖拽结束(可能未成功)的事件\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"draggingNode\",\"type\":\"ITreeNodeVm\",\"description\":{\"zh_CN\":\"拖拽节点\"},\"defaultValue\":\"\"},{\"name\":\"targetNode\",\"type\":\"ITreeNodeVm\",\"description\":{\"zh_CN\":\"目标节点\"},\"defaultValue\":\"\"},{\"name\":\"dropType\",\"type\":\"IDropType\",\"description\":{\"zh_CN\":\"放置类型\"},\"defaultValue\":\"\"},{\"name\":\"event\",\"type\":\"DragEvent\",\"description\":{\"zh_CN\":\"拖拽事件\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"void\",\"description\":{\"zh_CN\":\"无返回值\"},\"defaultValue\":\"\"}}},\"onNodeCollapse\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"节点收起\"},\"description\":{\"zh_CN\":\"监听节点被点击收起时的事件;\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"nodeData\",\"type\":\"ITreeNodeData\",\"description\":{\"zh_CN\":\"节点数据\"},\"defaultValue\":\"\"},{\"name\":\"node\",\"type\":\"ITreeNodeVm\",\"description\":{\"zh_CN\":\"节点对象\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"void\",\"description\":{\"zh_CN\":\"无返回值\"},\"defaultValue\":\"\"}}},\"onCurrentChange\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"当前节点变化\"},\"description\":{\"zh_CN\":\"监听当前选中节点发生变化时的事件\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"nodeData\",\"type\":\"ITreeNodeData\",\"description\":{\"zh_CN\":\"节点数据\"},\"defaultValue\":\"\"},{\"name\":\"node\",\"type\":\"ITreeNodeVm\",\"description\":{\"zh_CN\":\"节点对象\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"void\",\"description\":{\"zh_CN\":\"无返回值\"},\"defaultValue\":\"\"}}},\"onNodeDragStart\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"节点拖拽开始\"},\"description\":{\"zh_CN\":\"监听节点开始拖拽的事件\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"node\",\"type\":\"ITreeNodeVm\",\"description\":{\"zh_CN\":\"节点对象\"},\"defaultValue\":\"\"},{\"name\":\"event\",\"type\":\"DragEvent\",\"description\":{\"zh_CN\":\"拖拽事件\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"void\",\"description\":{\"zh_CN\":\"无返回值\"},\"defaultValue\":\"\"}}}},\"slots\":{\"default\":{\"label\":{\"zh_CN\":\"默认内容\"},\"description\":{\"zh_CN\":\"自定义树节点的内容,参数为 { node, data }\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-03-12 01:29:45', '2', '2026-03-12 01:29:45'); +INSERT INTO `t_component` VALUES (60, '3.22.0', '{\"zh_CN\":\"折线图\"}', 'TinyHuichartsLine', 'line', '折线图', '', '', '', '', 'proCode', '{\"destructuring\":true,\"exportName\":\"TinyHuichartsLine\",\"name\":\"TinyVueHuicharts组件库\",\"package\":\"@opentiny/vue-huicharts\",\"version\":\"3.22.0\",\"script\":\"https://registry.npmmirror.com/@opentiny/vue-runtime/3.22/files/dist3/tiny-vue-huicharts.mjs\"}', 'chart', '图表组件', 2, '[{\"name\":{\"zh_CN\":\"折线图\"},\"icon\":\"line\",\"screenshot\":\"\",\"snippetName\":\"TinyHuichartsLine\",\"schema\":{\"componentName\":\"TinyHuichartsLine\",\"props\":{\"options\":{\"theme\":\"hdesign-light\",\"padding\":[50,30,50,20],\"legend\":{\"show\":true,\"icon\":\"line\"},\"data\":[{\"Month\":\"Jan\",\"Domestics\":33,\"Abroad\":37},{\"Month\":\"Feb\",\"Domestics\":27,\"Abroad\":39},{\"Month\":\"Mar\",\"Domestics\":31,\"Abroad\":20},{\"Month\":\"Apr\",\"Domestics\":30,\"Abroad\":15},{\"Month\":\"May\",\"Domestics\":37,\"Abroad\":13},{\"Month\":\"Jun\",\"Domestics\":36,\"Abroad\":17},{\"Month\":\"Jul\",\"Domestics\":42,\"Abroad\":22},{\"Month\":\"Aug\",\"Domestics\":22,\"Abroad\":12},{\"Month\":\"Sep\",\"Domestics\":17,\"Abroad\":30},{\"Month\":\"Oct\",\"Domestics\":40,\"Abroad\":33},{\"Month\":\"Nov\",\"Domestics\":42,\"Abroad\":22},{\"Month\":\"Dec\",\"Domestics\":32,\"Abroad\":11}],\"xAxis\":{\"data\":\"Month\"},\"yAxis\":{\"name\":\"Percentage(%)\"}}}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"options\",\"label\":{\"text\":{\"zh_CN\":\"图表配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"color\",\"label\":{\"text\":{\"zh_CN\":\"颜色\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[\"#6D8FF0\",\"#00A874\",\"#BD72F0\",\"#54BCCE\",\"#FDC000\",\"#9185F0\",\"#00A2B5\"],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"颜色, 类型Array\"},\"labelPosition\":\"left\"},{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"Month\":\"Jan\",\"Domestic\":33,\"Abroad\":37},{\"Month\":\"Feb\",\"Domestic\":27,\"Abroad\":39},{\"Month\":\"Mar\",\"Domestic\":31,\"Abroad\":20}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"图表数据\"},\"labelPosition\":\"left\"},{\"property\":\"dataZoom\",\"label\":{\"text\":{\"zh_CN\":\"区域缩放轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"itemStyle\",\"label\":{\"text\":{\"zh_CN\":\"数据点文本样式\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"barWidth\":8,\"barGap\":\"60%\"},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"padding\",\"label\":{\"text\":{\"zh_CN\":\"图表内边距\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"[50, 20, 50, 20]\",\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"theme\",\"label\":{\"text\":{\"zh_CN\":\"主题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"cloud-light\",\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"light\",\"value\":\"light\"},{\"label\":\"dark\",\"value\":\"dark\"},{\"label\":\"hdesign-light\",\"value\":\"hdesign-light\"},{\"label\":\"hdesign-dark\",\"value\":\"hdesign-dark\"},{\"label\":\"cloud-light\",\"value\":\"cloud-light\"},{\"label\":\"bpit-light\",\"value\":\"bpit-light\"},{\"label\":\"bpit-dark\",\"value\":\"bpit-dark\"}]}},\"labelPosition\":\"left\"},{\"property\":\"tooltip\",\"label\":{\"text\":{\"zh_CN\":\"悬浮框内容\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"悬浮提示框内容配置\"},\"labelPosition\":\"left\"},{\"property\":\"xAxis\",\"label\":{\"text\":{\"zh_CN\":\"配置x轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"data\":\"Month\",\"name\":\"Utils\",\"line\":{\"show\":true,\"lineStyle\":{\"color\":\"red\",\"type\":\"dashed\",\"width\":2}},\"interval\":2,\"fullGrid\":true,\"labelRotate\":45,\"ellipsis\":{\"overflow\":\"truncate\",\"labelWidth\":20},\"nameLocation\":\"end\",\"nameTextStyle\":{\"fontSize\":12,\"color\":\"#4e4e4e\"}},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"默认值:图表数据data中data[0]对象的第一个key值\"},\"labelPosition\":\"left\"},{\"property\":\"yAxis\",\"label\":{\"text\":{\"zh_CN\":\"配置y轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"max\":60,\"min\":0,\"interval\":5,\"position\":\"right\",\"name\":\"Percent(%)\",\"unit\":\"%\",\"minInterval\":12,\"maxInterval\":8},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"}]}],\"widget\":{\"component\":\"NestedPropertyConfigurator\",\"props\":{\"type\":\"object\",\"language\":\"json\"}},\"description\":{\"zh_CN\":\"折线图配置\"},\"labelPosition\":\"top\"}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 3, NULL, NULL, NULL, '2', '2026-03-12 01:29:45', '2', '2026-03-12 01:29:45'); +INSERT INTO `t_component` VALUES (61, '3.22.0', '{\"zh_CN\":\"柱状图\"}', 'TinyHuichartsHistogram', 'histogram', '柱状图', '', '', '', '', 'proCode', '{\"destructuring\":true,\"exportName\":\"TinyHuichartsHistogram\",\"name\":\"TinyVueHuicharts组件库\",\"package\":\"@opentiny/vue-huicharts\",\"version\":\"3.22.0\",\"script\":\"https://registry.npmmirror.com/@opentiny/vue-runtime/3.22/files/dist3/tiny-vue-huicharts.mjs\"}', 'chart', '图表组件', 2, '[{\"name\":{\"zh_CN\":\"柱状图\"},\"icon\":\"histogram\",\"screenshot\":\"\",\"snippetName\":\"TinyHuichartsHistogram\",\"schema\":{\"componentName\":\"TinyHuichartsHistogram\",\"props\":{\"options\":{\"theme\":\"hdesign-light\",\"padding\":[50,30,50,20],\"data\":[{\"Month\":\"Jan\",\"Domestic\":33,\"Abroad\":1},{\"Month\":\"Feb\",\"Domestic\":27,\"Abroad\":39},{\"Month\":\"Mar\",\"Domestic\":31,\"Abroad\":20},{\"Month\":\"Apr\",\"Domestic\":30,\"Abroad\":15},{\"Month\":\"May\",\"Domestic\":37,\"Abroad\":1},{\"Month\":\"Jun\",\"Domestic\":36,\"Abroad\":17},{\"Month\":\"Jul\",\"Domestic\":42,\"Abroad\":22},{\"Month\":\"Aug\",\"Domestic\":22,\"Abroad\":12},{\"Month\":\"Sep\",\"Domestic\":17,\"Abroad\":30},{\"Month\":\"Oct\",\"Domestic\":40,\"Abroad\":33},{\"Month\":\"Nov\",\"Domestic\":42,\"Abroad\":22},{\"Month\":\"Dec\",\"Domestic\":32,\"Abroad\":1}],\"xAxis\":{\"data\":\"Month\"},\"yAxis\":{\"name\":\"Percentage(%)\"}}}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"options\",\"label\":{\"text\":{\"zh_CN\":\"图表配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"color\",\"label\":{\"text\":{\"zh_CN\":\"颜色\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[\"#6D8FF0\",\"#00A874\",\"#BD72F0\",\"#54BCCE\",\"#FDC000\",\"#9185F0\",\"#00A2B5\"],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"颜色, 类型Array\"},\"labelPosition\":\"left\"},{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"Month\":\"Jan\",\"Domestic\":33,\"Abroad\":37},{\"Month\":\"Feb\",\"Domestic\":27,\"Abroad\":39},{\"Month\":\"Mar\",\"Domestic\":31,\"Abroad\":20}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"图表数据\"},\"labelPosition\":\"left\"},{\"property\":\"dataRules\",\"label\":{\"text\":{\"zh_CN\":\"数据规则\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"display\":[\"Domestic\"]},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"dataZoom\",\"label\":{\"text\":{\"zh_CN\":\"区域缩放轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"start\":0,\"end\":100,\"show\":false,\"position\":{\"left\":36,\"bottom\":20},\"height\":24},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"direction\",\"label\":{\"text\":{\"zh_CN\":\"柱体方向\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"vertical\",\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"language\":\"json\",\"options\":[{\"label\":\"vertical\",\"value\":\"vertical\"},{\"label\":\"horizontal\",\"value\":\"horizontal\"}]}},\"description\":{\"zh_CN\":\"柱体方向\"},\"labelPosition\":\"left\"},{\"property\":\"itemStyle\",\"label\":{\"text\":{\"zh_CN\":\"柱体样式\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"barWidth\":8,\"barGap\":\"60%\"},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"label\",\"label\":{\"text\":{\"zh_CN\":\"柱体文本\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"show\":false,\"position\":\"inside\",\"offset\":[0,0]}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"柱体文本,默认不显示\"},\"labelPosition\":\"left\"},{\"property\":\"legend\",\"label\":{\"text\":{\"zh_CN\":\"图例配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"show\":false,\"position\":{\"left\":\"center\",\"bottom\":15},\"itemGap\":28,\"orient\":\"horizontal\",\"reverseEvent\":false,\"selectedMode\":true,\"icon\":\"circle\",\"itemHeight\":14,\"itemWeight\":14,\"textStyle\":{\"fontSize\":12,\"padding\":[4,0,0,0],\"color\":\"#4e4e4e\",\"overflow\":\"none\"}},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"图例配置,默认显示\"},\"labelPosition\":\"left\"},{\"property\":\"lineDataName\",\"label\":{\"text\":{\"zh_CN\":\"更改数据名\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"柱状图更改为折线图的数据名\"},\"labelPosition\":\"left\"},{\"property\":\"markline\",\"label\":{\"text\":{\"zh_CN\":\"阈值线配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"top\":38,\"bottom\":20,\"color\":\"red\"},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"padding\",\"label\":{\"text\":{\"zh_CN\":\"图表内边距\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"[50, 20, 50, 20]\",\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"theme\",\"label\":{\"text\":{\"zh_CN\":\"主题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"cloud-light\",\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"light\",\"value\":\"light\"},{\"label\":\"dark\",\"value\":\"dark\"},{\"label\":\"hdesign-light\",\"value\":\"hdesign-light\"},{\"label\":\"hdesign-dark\",\"value\":\"hdesign-dark\"},{\"label\":\"cloud-light\",\"value\":\"cloud-light\"},{\"label\":\"bpit-light\",\"value\":\"bpit-light\"},{\"label\":\"bpit-dark\",\"value\":\"bpit-dark\"}]}},\"labelPosition\":\"left\"},{\"property\":\"tooltip\",\"label\":{\"text\":{\"zh_CN\":\"悬浮框内容\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"悬浮提示框内容配置\"},\"labelPosition\":\"left\"},{\"property\":\"type\",\"label\":{\"text\":{\"zh_CN\":\"柱状图类型\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"bar\",\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"bar\",\"value\":\"bar\"},{\"label\":\"range\",\"value\":\"range\"},{\"label\":\"water-fall\",\"value\":\"water-fall\"}]}},\"labelPosition\":\"left\"},{\"property\":\"xAxis\",\"label\":{\"text\":{\"zh_CN\":\"配置x轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"data\":\"Month\",\"name\":\"Utils\",\"line\":{\"show\":true,\"lineStyle\":{\"color\":\"red\",\"type\":\"dashed\",\"width\":2}},\"interval\":2,\"fullGrid\":true,\"labelRotate\":45,\"ellipsis\":{\"overflow\":\"truncate\",\"labelWidth\":20},\"nameLocation\":\"end\",\"nameTextStyle\":{\"fontSize\":12,\"color\":\"#4e4e4e\"}},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"默认值:图表数据data中data[0]对象的第一个key值\"},\"labelPosition\":\"left\"},{\"property\":\"yAxis\",\"label\":{\"text\":{\"zh_CN\":\"配置y轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"max\":60,\"min\":0,\"interval\":10,\"position\":\"left\",\"dataName\":[\"Domestic\"],\"name\":\"value\",\"unit\":\"元\",\"nameTextStyle\":{\"padding\":[0,0,0,-45]}},{\"max\":90,\"min\":0,\"interval\":15,\"position\":\"right\",\"dataName\":[\"Abroad\"],\"name\":\"kal\",\"unit\":\"$\",\"offset\":45,\"nameTextStyle\":{\"padding\":[0,-45,0,0]}}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"}]}],\"widget\":{\"component\":\"NestedPropertyConfigurator\",\"props\":{\"type\":\"object\",\"language\":\"json\"}},\"description\":{\"zh_CN\":\"柱状图配置\"},\"labelPosition\":\"top\"}]}],\"events\":{\"onReady\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"每次渲染完成后触发\"},\"description\":{\"zh_CN\":\"图表渲染完成后触发,每次渲染都会触发一次\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[],\"returns\":{}}},\"onReadyOnce\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"首次渲染完成后触发\"},\"description\":{\"zh_CN\":\"图表渲染完成后触发,只会在首次渲染完成后触发\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[],\"returns\":{}}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 3, NULL, NULL, NULL, '2', '2026-03-12 01:29:45', '2', '2026-03-12 01:29:45'); +INSERT INTO `t_component` VALUES (62, '3.22.0', '{\"zh_CN\":\"条形图\"}', 'TinyHuichartsBar', 'bar', '条形图', '', '', '', '', 'proCode', '{\"destructuring\":true,\"exportName\":\"TinyHuichartsBar\",\"name\":\"TinyVueHuicharts组件库\",\"package\":\"@opentiny/vue-huicharts\",\"version\":\"3.22.0\",\"script\":\"https://registry.npmmirror.com/@opentiny/vue-runtime/3.22/files/dist3/tiny-vue-huicharts.mjs\"}', 'chart', '图表组件', 2, '[{\"name\":{\"zh_CN\":\"条形图\"},\"icon\":\"bar\",\"screenshot\":\"\",\"snippetName\":\"TinyHuichartsBar\",\"schema\":{\"componentName\":\"TinyHuichartsBar\",\"props\":{\"options\":{\"theme\":\"hdesign-light\",\"padding\":[50,30,50,20],\"data\":[{\"Month\":\"Jan\",\"Domestic\":33,\"Abroad\":1},{\"Month\":\"Feb\",\"Domestic\":27,\"Abroad\":39},{\"Month\":\"Mar\",\"Domestic\":31,\"Abroad\":20},{\"Month\":\"Apr\",\"Domestic\":30,\"Abroad\":15},{\"Month\":\"May\",\"Domestic\":37,\"Abroad\":1},{\"Month\":\"Jun\",\"Domestic\":36,\"Abroad\":17},{\"Month\":\"Jul\",\"Domestic\":42,\"Abroad\":22},{\"Month\":\"Aug\",\"Domestic\":22,\"Abroad\":12},{\"Month\":\"Sep\",\"Domestic\":17,\"Abroad\":30},{\"Month\":\"Oct\",\"Domestic\":40,\"Abroad\":33},{\"Month\":\"Nov\",\"Domestic\":42,\"Abroad\":22},{\"Month\":\"Dec\",\"Domestic\":32,\"Abroad\":1}],\"xAxis\":{\"data\":\"Month\"},\"yAxis\":{\"name\":\"Percentage(%)\"},\"direction\":\"horizontal\"}}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"options\",\"label\":{\"text\":{\"zh_CN\":\"图表配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"color\",\"label\":{\"text\":{\"zh_CN\":\"颜色\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[\"#6D8FF0\",\"#00A874\",\"#BD72F0\",\"#54BCCE\",\"#FDC000\",\"#9185F0\",\"#00A2B5\"],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"颜色, 类型Array\"},\"labelPosition\":\"left\"},{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"Month\":\"Jan\",\"Domestic\":33,\"Abroad\":37},{\"Month\":\"Feb\",\"Domestic\":27,\"Abroad\":39},{\"Month\":\"Mar\",\"Domestic\":31,\"Abroad\":20}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"图表数据\"},\"labelPosition\":\"left\"},{\"property\":\"dataZoom\",\"label\":{\"text\":{\"zh_CN\":\"区域缩放轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"start\":0,\"end\":100,\"show\":false,\"position\":{\"left\":36,\"bottom\":20},\"height\":24},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"itemStyle\",\"label\":{\"text\":{\"zh_CN\":\"柱体样式\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"barWidth\":8,\"barGap\":\"60%\"},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"padding\",\"label\":{\"text\":{\"zh_CN\":\"图表内边距\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"[50, 20, 50, 20]\",\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"theme\",\"label\":{\"text\":{\"zh_CN\":\"主题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"cloud-light\",\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"light\",\"value\":\"light\"},{\"label\":\"dark\",\"value\":\"dark\"},{\"label\":\"hdesign-light\",\"value\":\"hdesign-light\"},{\"label\":\"hdesign-dark\",\"value\":\"hdesign-dark\"},{\"label\":\"cloud-light\",\"value\":\"cloud-light\"},{\"label\":\"bpit-light\",\"value\":\"bpit-light\"},{\"label\":\"bpit-dark\",\"value\":\"bpit-dark\"}]}},\"labelPosition\":\"left\"},{\"property\":\"tooltip\",\"label\":{\"text\":{\"zh_CN\":\"悬浮框内容\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"悬浮提示框内容配置\"},\"labelPosition\":\"left\"},{\"property\":\"xAxis\",\"label\":{\"text\":{\"zh_CN\":\"配置x轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"data\":\"Month\",\"name\":\"Utils\",\"line\":{\"show\":true,\"lineStyle\":{\"color\":\"red\",\"type\":\"dashed\",\"width\":2}},\"interval\":2,\"fullGrid\":true,\"labelRotate\":45,\"ellipsis\":{\"overflow\":\"truncate\",\"labelWidth\":20},\"nameLocation\":\"end\",\"nameTextStyle\":{\"fontSize\":12,\"color\":\"#4e4e4e\"}},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"默认值:图表数据data中data[0]对象的第一个key值\"},\"labelPosition\":\"left\"},{\"property\":\"yAxis\",\"label\":{\"text\":{\"zh_CN\":\"配置y轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"max\":60,\"min\":0,\"interval\":10,\"position\":\"left\",\"dataName\":[\"Domestic\"],\"name\":\"value\",\"unit\":\"元\",\"nameTextStyle\":{\"padding\":[0,0,0,-45]}},{\"max\":90,\"min\":0,\"interval\":15,\"position\":\"right\",\"dataName\":[\"Abroad\"],\"name\":\"kal\",\"unit\":\"$\",\"offset\":45,\"nameTextStyle\":{\"padding\":[0,-45,0,0]}}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"}]}],\"widget\":{\"component\":\"NestedPropertyConfigurator\",\"props\":{\"type\":\"object\",\"language\":\"json\"}},\"description\":{\"zh_CN\":\"条形图配置\"},\"labelPosition\":\"top\"}]}],\"events\":{\"onReady\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"图表渲染完成后触发\"},\"description\":{\"zh_CN\":\"图表渲染完成后触发,每次渲染都会触发一次\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[],\"returns\":{}}},\"onReadyOnce\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"图表渲染完成后触发\"},\"description\":{\"zh_CN\":\"图表渲染完成后触发,只会在首次渲染完成后触发\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[],\"returns\":{}}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 3, NULL, NULL, NULL, '2', '2026-03-12 01:29:45', '2', '2026-03-12 01:29:45'); +INSERT INTO `t_component` VALUES (63, '3.22.0', '{\"zh_CN\":\"圆盘图\"}', 'TinyHuichartsPie', 'pie', '圆盘图', '', '', '', '', 'proCode', '{\"destructuring\":true,\"exportName\":\"TinyHuichartsPie\",\"name\":\"TinyVueHuicharts组件库\",\"package\":\"@opentiny/vue-huicharts\",\"version\":\"3.22.0\",\"script\":\"https://registry.npmmirror.com/@opentiny/vue-runtime/3.22/files/dist3/tiny-vue-huicharts.mjs\"}', 'chart', '图表组件', 2, '[{\"name\":{\"zh_CN\":\"圆盘图\"},\"icon\":\"pie\",\"screenshot\":\"\",\"snippetName\":\"TinyHuichartsPie\",\"schema\":{\"componentName\":\"TinyHuichartsPie\",\"props\":{\"options\":{\"type\":\"pie\",\"theme\":\"hdesign-light\",\"label\":{\"show\":true,\"line\":true,\"labelHtml\":\"{a|}{b|{b}:}{c|{d}%}\",\"rich\":{\"a\":{\"width\":12,\"height\":12,\"backgroundColor\":{\"image\":\"./image/charts/pie/ic_jiantou_hong.svg\"}},\"b\":{\"padding\":[2,4,0,0]},\"c\":{\"fontWeight\":\"bold\",\"padding\":[2,0,0,0]}}},\"data\":[{\"value\":100,\"name\":\"VPC\"},{\"value\":90,\"name\":\"IM\"},{\"value\":49,\"name\":\"EIP\"},{\"value\":14,\"name\":\"SG\"}]}}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"options\",\"label\":{\"text\":{\"zh_CN\":\"图表配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"color\",\"label\":{\"text\":{\"zh_CN\":\"颜色\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[\"#6D8FF0\",\"#00A874\",\"#BD72F0\",\"#54BCCE\",\"#FDC000\",\"#9185F0\",\"#00A2B5\"],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"颜色, 类型Array\"},\"labelPosition\":\"left\"},{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"value\":100,\"name\":\"VPC\"},{\"value\":90,\"name\":\"IM\"},{\"value\":49,\"name\":\"EIP\"}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"图表数据\"},\"labelPosition\":\"left\"},{\"property\":\"title\",\"label\":{\"text\":{\"zh_CN\":\"中心文本配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"text\":\" \",\"subtext\":\" \",\"top\":\"center\",\"left\":\"center\",\"itemGap\":8,\"textStyle\":{\"color\":\"#191919\",\"fontSize\":28,\"lineHeight\":28,\"fontWeight\":\"normal\"},\"subtextStyle\":{\"color\":\"#bbbbbb\",\"fontSize\":16,\"lineHeight\":24,\"fontWeight\":\"normal\"}},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"itemStyle\",\"label\":{\"text\":{\"zh_CN\":\"描边配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"borderColor\":\"#ffffff\",\"borderWidth\":3,\"borderRadius\":0},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"position\",\"label\":{\"text\":{\"zh_CN\":\"图表位置及大小\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"center\":[\"50%\",\"45%\"],\"radius\":[\"44%\",\"50%\"]},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"theme\",\"label\":{\"text\":{\"zh_CN\":\"主题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"cloud-light\",\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"light\",\"value\":\"light\"},{\"label\":\"dark\",\"value\":\"dark\"},{\"label\":\"hdesign-light\",\"value\":\"hdesign-light\"},{\"label\":\"hdesign-dark\",\"value\":\"hdesign-dark\"},{\"label\":\"cloud-light\",\"value\":\"cloud-light\"},{\"label\":\"bpit-light\",\"value\":\"bpit-light\"},{\"label\":\"bpit-dark\",\"value\":\"bpit-dark\"}]}},\"labelPosition\":\"left\"},{\"property\":\"tooltip\",\"label\":{\"text\":{\"zh_CN\":\"悬浮框内容\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"悬浮提示框内容配置\"},\"labelPosition\":\"left\"}]}],\"widget\":{\"component\":\"NestedPropertyConfigurator\",\"props\":{\"type\":\"object\",\"language\":\"json\"}},\"description\":{\"zh_CN\":\"圆盘图配置\"},\"labelPosition\":\"top\"}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 3, NULL, NULL, NULL, '2', '2026-03-12 01:29:45', '2', '2026-03-12 01:29:45'); +INSERT INTO `t_component` VALUES (64, '3.22.0', '{\"zh_CN\":\"环形图\"}', 'TinyHuichartsRing', 'ring', '环形图', '', '', '', '', 'proCode', '{\"destructuring\":true,\"exportName\":\"TinyHuichartsRing\",\"name\":\"TinyVueHuicharts组件库\",\"package\":\"@opentiny/vue-huicharts\",\"version\":\"3.22.0\",\"script\":\"https://registry.npmmirror.com/@opentiny/vue-runtime/3.22/files/dist3/tiny-vue-huicharts.mjs\"}', 'chart', '图表组件', 2, '[{\"name\":{\"zh_CN\":\"环形图\"},\"icon\":\"ring\",\"screenshot\":\"\",\"snippetName\":\"TinyHuichartsRing\",\"schema\":{\"componentName\":\"TinyHuichartsRing\",\"props\":{\"options\":{\"theme\":\"hdesign-light\",\"type\":\"circle\",\"data\":[{\"value\":100,\"name\":\"VPC\"},{\"value\":90,\"name\":\"IM\"},{\"value\":49,\"name\":\"EIP\"},{\"value\":14,\"name\":\"SG\"}]}}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"options\",\"label\":{\"text\":{\"zh_CN\":\"图表配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"color\",\"label\":{\"text\":{\"zh_CN\":\"颜色\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[\"#6D8FF0\",\"#00A874\",\"#BD72F0\",\"#54BCCE\",\"#FDC000\",\"#9185F0\",\"#00A2B5\"],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"颜色, 类型Array\"},\"labelPosition\":\"left\"},{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"value\":100,\"name\":\"VPC\"},{\"value\":90,\"name\":\"IM\"},{\"value\":49,\"name\":\"EIP\"}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"图表数据\"},\"labelPosition\":\"left\"},{\"property\":\"position\",\"label\":{\"text\":{\"zh_CN\":\"图表位置及大小\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"center\":[\"50%\",\"45%\"],\"radius\":[\"44%\",\"50%\"]},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"itemStyle\",\"label\":{\"text\":{\"zh_CN\":\"描边配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"borderColor\":\"#ffffff\",\"borderWidth\":3,\"borderRadius\":0},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"title\",\"label\":{\"text\":{\"zh_CN\":\"中心文本配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"text\":\" \",\"subtext\":\" \",\"top\":\"center\",\"left\":\"center\",\"itemGap\":8,\"textStyle\":{\"color\":\"#191919\",\"fontSize\":28,\"lineHeight\":28,\"fontWeight\":\"normal\"},\"subtextStyle\":{\"color\":\"#bbbbbb\",\"fontSize\":16,\"lineHeight\":24,\"fontWeight\":\"normal\"}},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"theme\",\"label\":{\"text\":{\"zh_CN\":\"主题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"cloud-light\",\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"light\",\"value\":\"light\"},{\"label\":\"dark\",\"value\":\"dark\"},{\"label\":\"hdesign-light\",\"value\":\"hdesign-light\"},{\"label\":\"hdesign-dark\",\"value\":\"hdesign-dark\"},{\"label\":\"cloud-light\",\"value\":\"cloud-light\"},{\"label\":\"bpit-light\",\"value\":\"bpit-light\"},{\"label\":\"bpit-dark\",\"value\":\"bpit-dark\"}]}},\"labelPosition\":\"left\"},{\"property\":\"tooltip\",\"label\":{\"text\":{\"zh_CN\":\"悬浮框内容\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"悬浮提示框内容配置\"},\"labelPosition\":\"left\"}]}],\"widget\":{\"component\":\"NestedPropertyConfigurator\",\"props\":{\"type\":\"object\",\"language\":\"json\"}},\"description\":{\"zh_CN\":\"环形图配置\"},\"labelPosition\":\"top\"}]}],\"events\":{\"onReady\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"图表渲染完成后触发\"},\"description\":{\"zh_CN\":\"图表渲染完成后触发,每次渲染都会触发一次\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[],\"returns\":{}}},\"onReadyOnce\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"图表渲染完成后触发\"},\"description\":{\"zh_CN\":\"图表渲染完成后触发,只会在首次渲染完成后触发\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[],\"returns\":{}}}},\"slots\":{\"default\":{\"label\":{\"zh_CN\":\"默认内容\"},\"description\":{\"zh_CN\":\"组件默认插槽\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 3, NULL, NULL, NULL, '2', '2026-03-12 01:29:45', '2', '2026-03-12 01:29:45'); +INSERT INTO `t_component` VALUES (65, '3.22.0', '{\"zh_CN\":\"雷达图\"}', 'TinyHuichartsRadar', 'radar', '雷达图', '', '', '', '', 'proCode', '{\"destructuring\":true,\"exportName\":\"TinyHuichartsRadar\",\"name\":\"TinyVueHuicharts组件库\",\"package\":\"@opentiny/vue-huicharts\",\"version\":\"3.22.0\",\"script\":\"https://registry.npmmirror.com/@opentiny/vue-runtime/3.22/files/dist3/tiny-vue-huicharts.mjs\"}', 'chart', '图表组件', 2, '[{\"name\":{\"zh_CN\":\"雷达图\"},\"icon\":\"radar\",\"screenshot\":\"\",\"snippetName\":\"TinyHuichartsRadar\",\"schema\":{\"componentName\":\"TinyHuichartsRadar\",\"props\":{\"options\":{\"theme\":\"hdesign-light\",\"legend\":{\"show\":true,\"position\":{\"left\":\"center\",\"bottom\":20.1}},\"radarMax\":100,\"data\":{\"Domestic\":{\"Equipment\":41,\"VM\":91,\"CSP\":81,\"RD\":51,\"Markets\":71},\"Abroad\":{\"Equipment\":72,\"VM\":55,\"CSP\":93,\"RD\":90,\"Markets\":82}}}}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"options\",\"label\":{\"text\":{\"zh_CN\":\"图表配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"color\",\"label\":{\"text\":{\"zh_CN\":\"颜色\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[\"#6D8FF0\",\"#00A874\",\"#BD72F0\",\"#54BCCE\",\"#FDC000\",\"#9185F0\",\"#00A2B5\"],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"颜色, 类型Array\"},\"labelPosition\":\"left\"},{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"Domestic\":{\"Equipment\":43,\"VM\":90,\"CSP\":80,\"RD\":53,\"Markets\":78},\"Abroad\":{\"Equipment\":75,\"VM\":55,\"CSP\":93,\"RD\":90,\"Markets\":86}},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"图表数据\"},\"labelPosition\":\"left\"},{\"property\":\"area\",\"label\":{\"text\":{\"zh_CN\":\"图形区域配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"radar\",\"label\":{\"text\":{\"zh_CN\":\"坐标系配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"triggerEvent\":true,\"color\":\"#191919\"},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"position\",\"label\":{\"text\":{\"zh_CN\":\"图表位置及大小\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"center\":[\"50%\",\"50%\"],\"radius\":\"50%\"},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"theme\",\"label\":{\"text\":{\"zh_CN\":\"主题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"cloud-light\",\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"light\",\"value\":\"light\"},{\"label\":\"dark\",\"value\":\"dark\"},{\"label\":\"hdesign-light\",\"value\":\"hdesign-light\"},{\"label\":\"hdesign-dark\",\"value\":\"hdesign-dark\"},{\"label\":\"cloud-light\",\"value\":\"cloud-light\"},{\"label\":\"bpit-light\",\"value\":\"bpit-light\"},{\"label\":\"bpit-dark\",\"value\":\"bpit-dark\"}]}},\"labelPosition\":\"left\"},{\"property\":\"tooltip\",\"label\":{\"text\":{\"zh_CN\":\"悬浮框内容\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"悬浮提示框内容配置\"},\"labelPosition\":\"left\"}]}],\"widget\":{\"component\":\"NestedPropertyConfigurator\",\"props\":{\"type\":\"object\",\"language\":\"json\"}},\"description\":{\"zh_CN\":\"雷达图配置\"},\"labelPosition\":\"top\"}]}],\"events\":{\"onReady\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"图表渲染完成后触发\"},\"description\":{\"zh_CN\":\"图表渲染完成后触发,每次渲染都会触发一次\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[],\"returns\":{}}},\"onReadyOnce\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"图表渲染完成后触发\"},\"description\":{\"zh_CN\":\"图表渲染完成后触发,只会在首次渲染完成后触发\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[],\"returns\":{}}}},\"slots\":{\"default\":{\"label\":{\"zh_CN\":\"默认内容\"},\"description\":{\"zh_CN\":\"组件默认插槽\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 3, NULL, NULL, NULL, '2', '2026-03-12 01:29:45', '2', '2026-03-12 01:29:45'); +INSERT INTO `t_component` VALUES (66, '3.22.0', '{\"zh_CN\":\"漏斗图\"}', 'TinyHuichartsFunnel', 'funnel', '漏斗图', '', '', '', '', 'proCode', '{\"destructuring\":true,\"exportName\":\"TinyHuichartsFunnel\",\"name\":\"TinyVueHuicharts组件库\",\"package\":\"@opentiny/vue-huicharts\",\"version\":\"3.22.0\",\"script\":\"https://registry.npmmirror.com/@opentiny/vue-runtime/3.22/files/dist3/tiny-vue-huicharts.mjs\"}', 'chart', '图表组件', 2, '[{\"name\":{\"zh_CN\":\"漏斗图\"},\"icon\":\"funnel\",\"screenshot\":\"\",\"snippetName\":\"TinyHuichartsFunnel\",\"schema\":{\"componentName\":\"TinyHuichartsFunnel\",\"props\":{\"options\":{\"data\":[{\"value\":100,\"name\":\"Show\"},{\"value\":75,\"name\":\"Click\"},{\"value\":50,\"name\":\"Visit\"},{\"value\":25,\"name\":\"Order\"}]}}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"options\",\"label\":{\"text\":{\"zh_CN\":\"图表配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"color\",\"label\":{\"text\":{\"zh_CN\":\"颜色\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[\"#6D8FF0\",\"#00A874\",\"#BD72F0\",\"#54BCCE\",\"#FDC000\",\"#9185F0\",\"#00A2B5\"],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"颜色, 类型Array\"},\"labelPosition\":\"left\"},{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"value\":60,\"name\":\"Visit\"},{\"value\":40,\"name\":\"Inquiry\"},{\"value\":20,\"name\":\"Order\"},{\"value\":80,\"name\":\"Click\"},{\"value\":100,\"name\":\"Show\"}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"图表数据\"},\"labelPosition\":\"left\"},{\"property\":\"position\",\"label\":{\"text\":{\"zh_CN\":\"图表位置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"left\":\"center\",\"right\":\"80\",\"top\":60,\"bottom\":60,\"funnelAlign\":\"center\",\"orient\":\"horizontal\"},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"size\",\"label\":{\"text\":{\"zh_CN\":\"图表大小\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"width\":\"80%\",\"height\":\"80%\",\"min\":0,\"max\":100,\"minSize\":\"0%\",\"maxSize\":\"100%\"},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"theme\",\"label\":{\"text\":{\"zh_CN\":\"主题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"cloud-light\",\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"light\",\"value\":\"light\"},{\"label\":\"dark\",\"value\":\"dark\"},{\"label\":\"hdesign-light\",\"value\":\"hdesign-light\"},{\"label\":\"hdesign-dark\",\"value\":\"hdesign-dark\"},{\"label\":\"cloud-light\",\"value\":\"cloud-light\"},{\"label\":\"bpit-light\",\"value\":\"bpit-light\"},{\"label\":\"bpit-dark\",\"value\":\"bpit-dark\"}]}},\"labelPosition\":\"left\"},{\"property\":\"tooltip\",\"label\":{\"text\":{\"zh_CN\":\"悬浮框内容\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"悬浮提示框内容配置\"},\"labelPosition\":\"left\"}]}],\"widget\":{\"component\":\"NestedPropertyConfigurator\",\"props\":{\"type\":\"object\",\"language\":\"json\"}},\"description\":{\"zh_CN\":\"漏斗图配置\"},\"labelPosition\":\"top\"}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 3, NULL, NULL, NULL, '2', '2026-03-12 01:29:45', '2', '2026-03-12 01:29:45'); +INSERT INTO `t_component` VALUES (67, '3.22.0', '{\"zh_CN\":\"散点图\"}', 'TinyHuichartsScatter', 'scatter', '散点图', '', '', '', '', 'proCode', '{\"destructuring\":true,\"exportName\":\"TinyHuichartsScatter\",\"name\":\"TinyVueHuicharts组件库\",\"package\":\"@opentiny/vue-huicharts\",\"version\":\"3.22.0\",\"script\":\"https://registry.npmmirror.com/@opentiny/vue-runtime/3.22/files/dist3/tiny-vue-huicharts.mjs\"}', 'chart', '图表组件', 2, '[{\"name\":{\"zh_CN\":\"散点图\"},\"icon\":\"scatter\",\"screenshot\":\"\",\"snippetName\":\"TinyHuichartsScatter\",\"schema\":{\"componentName\":\"TinyHuichartsScatter\",\"props\":{\"options\":{\"padding\":[50,30,50,20],\"legend\":{\"orient\":\"horizontal\",\"show\":true,\"position\":{\"left\":\"center\",\"bottom\":15}},\"bubbleSize\":[20,100],\"xAxisType\":\"value\",\"data\":{\"1990\":[[28604,77,1709866,\"Australia\",1990],[31163,77.4,27662440,\"Canada\",1990],[60001,68,1154605773,\"China\",1990],[13670,74.7,10582082,\"Cuba\",1990],[28599,75,4986705,\"Finland\",1990]],\"2000\":[[19349,69.6,147568552,\"Russia\",2000],[10670,67.3,53994606,\"Turkey\",2000],[26424,75.7,57110117,\"United Kingdom\",2000],[37062,75.4,252847810,\"United States\",2000],[23038,73.13,143456918,\"Russia\",2000]],\"2015\":[[44056,81.8,23968976,\"Australia\",2015],[43294,81.7,35939927,\"Canada\",2015],[13334,76.9,1376048943,\"Cuba\",2015],[21291,78.5,11389566,\"Finland\",2015],[38923,80.8,5503457,\"France\",2015]]}}}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"options\",\"label\":{\"text\":{\"zh_CN\":\"图表配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"color\",\"label\":{\"text\":{\"zh_CN\":\"颜色\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[\"#6D8FF0\",\"#00A874\",\"#BD72F0\",\"#54BCCE\",\"#FDC000\",\"#9185F0\",\"#00A2B5\"],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"颜色, 类型Array\"},\"labelPosition\":\"left\"},{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"1990\":[[28604,77,17096869,\"Australia\",1990],[31163,77.4,27662440,\"Canada\",1990],[60001,68,1154605773,\"China\",1990]],\"2000\":[[19349,69.6,147568552,\"Russia\",2000],[10670,67.3,53994605,\"Turkey\",2000],[26424,75.7,57110117,\"United Kingdom\",2000]],\"2015\":[[44056,81.8,23968973,\"Australia\",2015],[43294,81.7,35939927,\"Canada\",2015],[13334,76.9,1376048943,\"China\",2015]]},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"图表数据\"},\"labelPosition\":\"left\"},{\"property\":\"bubbleSize\",\"label\":{\"text\":{\"zh_CN\":\"气泡大小范围\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"[10, 70]\",\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"itemStyle\",\"label\":{\"text\":{\"zh_CN\":\"节点图形样式\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"padding\",\"label\":{\"text\":{\"zh_CN\":\"图表内边距\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"[50, 20, 50, 20]\",\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"theme\",\"label\":{\"text\":{\"zh_CN\":\"主题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"cloud-light\",\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"light\",\"value\":\"light\"},{\"label\":\"dark\",\"value\":\"dark\"},{\"label\":\"hdesign-light\",\"value\":\"hdesign-light\"},{\"label\":\"hdesign-dark\",\"value\":\"hdesign-dark\"},{\"label\":\"cloud-light\",\"value\":\"cloud-light\"},{\"label\":\"bpit-light\",\"value\":\"bpit-light\"},{\"label\":\"bpit-dark\",\"value\":\"bpit-dark\"}]}},\"labelPosition\":\"left\"},{\"property\":\"tooltip\",\"label\":{\"text\":{\"zh_CN\":\"悬浮框内容\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"悬浮提示框内容配置\"},\"labelPosition\":\"left\"},{\"property\":\"xAxis\",\"label\":{\"text\":{\"zh_CN\":\"配置x轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"默认值:图表数据data中data[0]对象的第一个key值\"},\"labelPosition\":\"left\"},{\"property\":\"yAxis\",\"label\":{\"text\":{\"zh_CN\":\"配置y轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"}]}],\"widget\":{\"component\":\"NestedPropertyConfigurator\",\"props\":{\"type\":\"object\",\"language\":\"json\"}},\"description\":{\"zh_CN\":\"散点图配置\"},\"labelPosition\":\"top\"}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 3, NULL, NULL, NULL, '2', '2026-03-12 01:29:45', '2', '2026-03-12 01:29:45'); +INSERT INTO `t_component` VALUES (68, '3.22.0', '{\"zh_CN\":\"瀑布图\"}', 'TinyHuichartsWaterfall', 'waterfall', '瀑布图', '', '', '', '', 'proCode', '{\"destructuring\":true,\"exportName\":\"TinyHuichartsWaterfall\",\"name\":\"TinyVueHuicharts组件库\",\"package\":\"@opentiny/vue-huicharts\",\"version\":\"3.22.0\",\"script\":\"https://registry.npmmirror.com/@opentiny/vue-runtime/3.22/files/dist3/tiny-vue-huicharts.mjs\"}', 'chart', '图表组件', 2, '[{\"name\":{\"zh_CN\":\"瀑布图\"},\"icon\":\"waterfall\",\"screenshot\":\"\",\"snippetName\":\"TinyHuichartsWaterfall\",\"schema\":{\"componentName\":\"TinyHuichartsWaterfall\",\"props\":{\"options\":{\"padding\":[50,30,20,20],\"legend\":{\"show\":false},\"type\":\"water-fall\",\"data\":[{\"Name\":\"NLE\",\"User\":10},{\"Name\":\"HIN\",\"User\":20},{\"Name\":\"FBP\",\"User\":9},{\"Name\":\"VEDIO\",\"User\":35},{\"Name\":\"SASS\",\"User\":20},{\"Name\":\"RDS\",\"User\":35},{\"Name\":\"E-SYS\",\"User\":9}],\"xAxis\":{\"data\":\"Name\"},\"yAxis\":{\"name\":\"Number\"}}}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"options\",\"label\":{\"text\":{\"zh_CN\":\"图表配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"color\",\"label\":{\"text\":{\"zh_CN\":\"颜色\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[\"#6D8FF0\",\"#00A874\",\"#BD72F0\",\"#54BCCE\",\"#FDC000\",\"#9185F0\",\"#00A2B5\"],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"颜色, 类型Array\"},\"labelPosition\":\"left\"},{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"Month\":\"Jan\",\"Domestic\":[5,20],\"Abroad\":[5,23]},{\"Month\":\"Feb\",\"Domestic\":[10,30],\"Abroad\":[8,25]},{\"Month\":\"Mar\",\"Domestic\":[8,25],\"Abroad\":[2,20]}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"图表数据\"},\"labelPosition\":\"left\"},{\"property\":\"dataZoom\",\"label\":{\"text\":{\"zh_CN\":\"区域缩放轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"start\":0,\"end\":100,\"show\":false,\"position\":{\"left\":36,\"bottom\":20},\"height\":24},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"itemStyle\",\"label\":{\"text\":{\"zh_CN\":\"柱体样式\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"barWidth\":8,\"barGap\":\"60%\"},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"padding\",\"label\":{\"text\":{\"zh_CN\":\"图表内边距\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"[50, 20, 50, 20]\",\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"theme\",\"label\":{\"text\":{\"zh_CN\":\"主题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"cloud-light\",\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"light\",\"value\":\"light\"},{\"label\":\"dark\",\"value\":\"dark\"},{\"label\":\"hdesign-light\",\"value\":\"hdesign-light\"},{\"label\":\"hdesign-dark\",\"value\":\"hdesign-dark\"},{\"label\":\"cloud-light\",\"value\":\"cloud-light\"},{\"label\":\"bpit-light\",\"value\":\"bpit-light\"},{\"label\":\"bpit-dark\",\"value\":\"bpit-dark\"}]}},\"labelPosition\":\"left\"},{\"property\":\"tooltip\",\"label\":{\"text\":{\"zh_CN\":\"悬浮框内容\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"悬浮提示框内容配置\"},\"labelPosition\":\"left\"},{\"property\":\"xAxis\",\"label\":{\"text\":{\"zh_CN\":\"配置x轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"data\":\"Month\",\"name\":\"Utils\",\"line\":{\"show\":true,\"lineStyle\":{\"color\":\"red\",\"type\":\"dashed\",\"width\":2}},\"interval\":2,\"fullGrid\":true,\"labelRotate\":45,\"ellipsis\":{\"overflow\":\"truncate\",\"labelWidth\":20},\"nameLocation\":\"end\",\"nameTextStyle\":{\"fontSize\":12,\"color\":\"#4e4e4e\"}},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"默认值:图表数据data中data[0]对象的第一个key值\"},\"labelPosition\":\"left\"},{\"property\":\"yAxis\",\"label\":{\"text\":{\"zh_CN\":\"配置y轴\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"max\":60,\"min\":0,\"interval\":10,\"position\":\"left\",\"dataName\":[\"Domestic\"],\"name\":\"value\",\"unit\":\"元\",\"nameTextStyle\":{\"padding\":[0,0,0,-45]}},{\"max\":90,\"min\":0,\"interval\":15,\"position\":\"right\",\"dataName\":[\"Abroad\"],\"name\":\"kal\",\"unit\":\"$\",\"offset\":45,\"nameTextStyle\":{\"padding\":[0,-45,0,0]}}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"}]}],\"widget\":{\"component\":\"NestedPropertyConfigurator\",\"props\":{\"type\":\"object\",\"language\":\"json\"}},\"description\":{\"zh_CN\":\"瀑布图配置\"},\"labelPosition\":\"top\"}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 3, NULL, NULL, NULL, '2', '2026-03-12 01:29:45', '2', '2026-03-12 01:29:45'); +INSERT INTO `t_component` VALUES (69, '3.22.0', '{\"zh_CN\":\"仪表盘\"}', 'TinyHuichartsGauge', 'gauge', '仪表盘', '', '', '', '', 'proCode', '{\"destructuring\":true,\"exportName\":\"TinyHuichartsGauge\",\"name\":\"TinyVueHuicharts组件库\",\"package\":\"@opentiny/vue-huicharts\",\"version\":\"3.22.0\",\"script\":\"https://registry.npmmirror.com/@opentiny/vue-runtime/3.22/files/dist3/tiny-vue-huicharts.mjs\"}', 'chart', '图表组件', 2, '[{\"name\":{\"zh_CN\":\"仪表盘\"},\"icon\":\"gauge\",\"screenshot\":\"\",\"snippetName\":\"TinyHuichartsGauge\",\"schema\":{\"componentName\":\"TinyHuichartsGauge\",\"props\":{\"options\":{\"splitColor\":[[0.25,\"#0d9458\"],[0.5,\"#eeba18\"],[0.75,\"#ec6f1a\"],[1,\"#f43146\"]],\"pointer\":true,\"data\":[{\"value\":71,\"name\":\"Utilization rate\"}]}}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"options\",\"label\":{\"text\":{\"zh_CN\":\"图表配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"color\",\"label\":{\"text\":{\"zh_CN\":\"颜色\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[\"#6D8FF0\",\"#00A874\",\"#BD72F0\",\"#54BCCE\",\"#FDC000\",\"#9185F0\",\"#00A2B5\"],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"颜色, 类型Array\"},\"labelPosition\":\"left\"},{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"value\":90,\"name\":\"Utilization rate\"}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"图表数据\"},\"labelPosition\":\"left\"},{\"property\":\"startAngle\",\"label\":{\"text\":{\"zh_CN\":\"起始角度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":225,\"cols\":12,\"type\":\"number\",\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"仪表盘起始角度。圆心正右手侧为 0 度,正上方为 90 度,正左手侧为 180 度\"},\"labelPosition\":\"left\"},{\"property\":\"endAngle\",\"label\":{\"text\":{\"zh_CN\":\"结束角度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":-45,\"cols\":12,\"type\":\"number\",\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"仪表盘结束角度。圆心正右手侧为 0 度,正上方为 90 度,正左手侧为 180 度\"},\"labelPosition\":\"left\"},{\"property\":\"min\",\"label\":{\"text\":{\"zh_CN\":\"最小刻度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":0,\"cols\":12,\"type\":\"number\",\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"仪表盘的最小值\"},\"labelPosition\":\"left\"},{\"property\":\"max\",\"label\":{\"text\":{\"zh_CN\":\"最大刻度\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":100,\"cols\":12,\"type\":\"number\",\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"仪表盘的最大值\"},\"labelPosition\":\"left\"},{\"property\":\"pointer\",\"label\":{\"text\":{\"zh_CN\":\"刻度指针\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":false,\"cols\":12,\"type\":\"boolean\",\"widget\":{\"component\":\"SwitchConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"刻度指针是否显示\"},\"labelPosition\":\"left\"},{\"property\":\"splitColor\",\"label\":{\"text\":{\"zh_CN\":\"分割区间\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[[0.25,\"#0d9458\"],[0.5,\"#eeba18\"],[0.75,\"#ec6f1a\"],[1,\"#f43146\"]],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"仪表盘的分割颜色,splitColor[i][0] 的值代表整根轴线的百分比,应在 0 到 1 之间, splitColor[i][1] 是对应的颜色\"},\"labelPosition\":\"left\"},{\"property\":\"theme\",\"label\":{\"text\":{\"zh_CN\":\"主题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"cloud-light\",\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"light\",\"value\":\"light\"},{\"label\":\"dark\",\"value\":\"dark\"},{\"label\":\"hdesign-light\",\"value\":\"hdesign-light\"},{\"label\":\"hdesign-dark\",\"value\":\"hdesign-dark\"},{\"label\":\"cloud-light\",\"value\":\"cloud-light\"},{\"label\":\"bpit-light\",\"value\":\"bpit-light\"},{\"label\":\"bpit-dark\",\"value\":\"bpit-dark\"}]}},\"labelPosition\":\"left\"},{\"property\":\"tooltip\",\"label\":{\"text\":{\"zh_CN\":\"悬浮框内容\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"悬浮提示框内容配置\"},\"labelPosition\":\"left\"}]}],\"widget\":{\"component\":\"NestedPropertyConfigurator\",\"props\":{\"type\":\"object\",\"language\":\"json\"}},\"description\":{\"zh_CN\":\"仪表盘配置\"},\"labelPosition\":\"top\"}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 3, NULL, NULL, NULL, '2', '2026-03-12 01:29:45', '2', '2026-03-12 01:29:45'); +INSERT INTO `t_component` VALUES (70, '3.22.0', '{\"zh_CN\":\"拓扑图\"}', 'TinyHuichartsGraph', 'graph', '拓扑图', '', '', '', '', 'proCode', '{\"destructuring\":true,\"exportName\":\"TinyHuichartsGraph\",\"name\":\"TinyVueHuicharts组件库\",\"package\":\"@opentiny/vue-huicharts\",\"version\":\"3.22.0\",\"script\":\"https://registry.npmmirror.com/@opentiny/vue-runtime/3.22/files/dist3/tiny-vue-huicharts.mjs\"}', 'chart', '图表组件', 2, '[{\"name\":{\"zh_CN\":\"拓扑图\"},\"icon\":\"graph\",\"screenshot\":\"\",\"snippetName\":\"TinyHuichartsGraph\",\"schema\":{\"componentName\":\"TinyHuichartsGraph\",\"props\":{\"options\":{\"animationDurationUpdate\":1600,\"animationEasingUpdate\":\"quinticInOut\",\"series\":[{\"type\":\"graph\",\"layout\":\"none\",\"symbolSize\":48,\"color\":\"#42A5F5\",\"roam\":true,\"label\":{\"normal\":{\"show\":true}},\"edgeSymbol\":[\"circle\",\"arrow\"],\"edgeSymbolSize\":[3,10],\"edgeLabel\":{\"normal\":{\"textStyle\":{\"fontSize\":18}}},\"data\":[{\"name\":\"节点 1\",\"x\":300,\"y\":300},{\"name\":\"节点 2\",\"x\":800,\"y\":300},{\"name\":\"节点 3\",\"x\":550,\"y\":100},{\"name\":\"节点 4\",\"x\":550,\"y\":500}],\"links\":[{\"source\":0,\"target\":1,\"symbolSize\":[5,20],\"label\":{\"normal\":{\"show\":true}},\"lineStyle\":{\"normal\":{\"width\":5,\"curveness\":0.2}}},{\"source\":\"节点 2\",\"target\":\"节点 1\",\"label\":{\"normal\":{\"show\":true}},\"lineStyle\":{\"normal\":{\"curveness\":0.2}}},{\"source\":\"节点 1\",\"target\":\"节点 3\"},{\"source\":\"节点 2\",\"target\":\"节点 3\"},{\"source\":\"节点 2\",\"target\":\"节点 4\"},{\"source\":\"节点 1\",\"target\":\"节点 4\"}],\"lineStyle\":{\"normal\":{\"opacity\":0.9,\"width\":2,\"curveness\":0}}}]}}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"options\",\"label\":{\"text\":{\"zh_CN\":\"图表配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"series\",\"label\":{\"text\":{\"zh_CN\":\"系列\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"type\":\"graph\",\"layout\":\"none\",\"symbolSize\":48,\"color\":\"#42A5F5\",\"roam\":true,\"label\":{\"normal\":{\"show\":true}},\"edgeSymbol\":[\"circle\",\"arrow\"],\"edgeSymbolSize\":[3,10],\"edgeLabel\":{\"normal\":{\"textStyle\":{\"fontSize\":18}}},\"data\":[{\"name\":\"节点 1\",\"x\":300,\"y\":300},{\"name\":\"节点 2\",\"x\":800,\"y\":300},{\"name\":\"节点 3\",\"x\":550,\"y\":100},{\"name\":\"节点 4\",\"x\":550,\"y\":500}],\"links\":[{\"source\":0,\"target\":1,\"symbolSize\":[5,20],\"label\":{\"normal\":{\"show\":true}},\"lineStyle\":{\"normal\":{\"width\":5,\"curveness\":0.2}}},{\"source\":\"节点 2\",\"target\":\"节点 1\",\"label\":{\"normal\":{\"show\":true}},\"lineStyle\":{\"normal\":{\"curveness\":0.2}}},{\"source\":\"节点 1\",\"target\":\"节点 3\"},{\"source\":\"节点 2\",\"target\":\"节点 3\"},{\"source\":\"节点 2\",\"target\":\"节点 4\"},{\"source\":\"节点 1\",\"target\":\"节点 4\"}],\"lineStyle\":{\"normal\":{\"opacity\":0.9,\"width\":2,\"curveness\":0}}}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"图表数据\"},\"labelPosition\":\"left\"},{\"property\":\"animationEasing\",\"label\":{\"text\":{\"zh_CN\":\"初始缓动效果\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"cubicOut\",\"cols\":12,\"type\":\"string\",\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"初始动画的缓动效果\"},\"labelPosition\":\"left\"},{\"property\":\"animationEasingUpdate\",\"label\":{\"text\":{\"zh_CN\":\"更新缓动效果\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"cubicInOut\",\"cols\":12,\"type\":\"string\",\"widget\":{\"component\":\"InputConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"更新动画的缓动效果\"},\"labelPosition\":\"left\"},{\"property\":\"animationDurationUpdate\",\"label\":{\"text\":{\"zh_CN\":\"动画时长\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":300,\"cols\":12,\"type\":\"number\",\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"数据更新动画的时长\"},\"labelPosition\":\"left\"},{\"property\":\"animationDelayUpdate\",\"label\":{\"text\":{\"zh_CN\":\"动画延迟\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":100,\"cols\":12,\"type\":\"number\",\"widget\":{\"component\":\"NumberConfigurator\",\"props\":{}},\"description\":{\"zh_CN\":\"数据更新动画的延迟\"},\"labelPosition\":\"left\"}]}],\"widget\":{\"component\":\"NestedPropertyConfigurator\",\"props\":{\"type\":\"object\",\"language\":\"json\"}},\"description\":{\"zh_CN\":\"拓扑图配置\"},\"labelPosition\":\"top\"}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 3, NULL, NULL, NULL, '2', '2026-03-12 01:29:46', '2', '2026-03-12 01:29:46'); +INSERT INTO `t_component` VALUES (71, '3.22.0', '{\"zh_CN\":\"进度图\"}', 'TinyHuichartsProcess', 'process', '进度图', '', '', '', '', 'proCode', '{\"destructuring\":true,\"exportName\":\"TinyHuichartsProcess\",\"name\":\"TinyVueHuicharts组件库\",\"package\":\"@opentiny/vue-huicharts\",\"version\":\"3.22.0\",\"script\":\"https://registry.npmmirror.com/@opentiny/vue-runtime/3.22/files/dist3/tiny-vue-huicharts.mjs\"}', 'chart', '图表组件', 2, '[{\"name\":{\"zh_CN\":\"进度图\"},\"icon\":\"process\",\"screenshot\":\"\",\"snippetName\":\"TinyHuichartsProcess\",\"schema\":{\"componentName\":\"TinyHuichartsProcess\",\"props\":{\"options\":{\"name\":\"ProcessBarChart\",\"theme\":\"light\",\"padding\":[32,32,0,32],\"color\":[\"#fa2a2d\",\"#ff7500\",\"#ffbf00\",\"#41ba41\",\"#00aaee\"],\"data\":[{\"name\":\"UniEPMgr\",\"value\":80},{\"name\":\"SMLoglic\",\"value\":65},{\"name\":\"SSO\",\"value\":45},{\"name\":\"APIMgr\",\"value\":20},{\"name\":\"Logtransfer\",\"value\":12}]}}}}]', '{\"properties\":[{\"label\":{\"zh_CN\":\"基础信息\"},\"description\":{\"zh_CN\":\"基础信息\"},\"content\":[{\"property\":\"options\",\"label\":{\"text\":{\"zh_CN\":\"图表配置\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"properties\":[{\"label\":{\"zh_CN\":\"默认分组\"},\"content\":[{\"property\":\"color\",\"label\":{\"text\":{\"zh_CN\":\"颜色\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[\"#6D8FF0\",\"#00A874\",\"#BD72F0\",\"#54BCCE\",\"#FDC000\",\"#9185F0\",\"#00A2B5\"],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"颜色, 类型Array\"},\"labelPosition\":\"left\"},{\"property\":\"data\",\"label\":{\"text\":{\"zh_CN\":\"数据\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":[{\"name\":\"UniEPMgr\",\"value\":80},{\"name\":\"SMLoglic\",\"value\":65},{\"name\":\"SSO\",\"value\":45}],\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"图表数据\"},\"labelPosition\":\"left\"},{\"property\":\"name\",\"label\":{\"text\":{\"zh_CN\":\"图表数据(必填)\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"state\",\"label\":{\"text\":{\"zh_CN\":\"根据状态设置颜色\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":{\"error\":75,\"warning\":60,\"subwarning\":50,\"success\":20},\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"padding\",\"label\":{\"text\":{\"zh_CN\":\"图表内边距\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"[50, 20, 50, 20]\",\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"labelPosition\":\"left\"},{\"property\":\"theme\",\"label\":{\"text\":{\"zh_CN\":\"主题\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"defaultValue\":\"cloud-light\",\"cols\":12,\"widget\":{\"component\":\"SelectConfigurator\",\"props\":{\"options\":[{\"label\":\"light\",\"value\":\"light\"},{\"label\":\"dark\",\"value\":\"dark\"},{\"label\":\"hdesign-light\",\"value\":\"hdesign-light\"},{\"label\":\"hdesign-dark\",\"value\":\"hdesign-dark\"},{\"label\":\"cloud-light\",\"value\":\"cloud-light\"},{\"label\":\"bpit-light\",\"value\":\"bpit-light\"},{\"label\":\"bpit-dark\",\"value\":\"bpit-dark\"}]}},\"labelPosition\":\"left\"},{\"property\":\"tooltip\",\"label\":{\"text\":{\"zh_CN\":\"悬浮框内容\"}},\"required\":true,\"readOnly\":false,\"disabled\":false,\"cols\":12,\"widget\":{\"component\":\"CodeConfigurator\",\"props\":{\"language\":\"json\"}},\"description\":{\"zh_CN\":\"悬浮提示框内容配置\"},\"labelPosition\":\"left\"}]}],\"widget\":{\"component\":\"NestedPropertyConfigurator\",\"props\":{\"type\":\"object\",\"language\":\"json\"}},\"description\":{\"zh_CN\":\"进度图配置\"},\"labelPosition\":\"top\"}]}],\"events\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, 3, NULL, NULL, NULL, '2', '2026-03-12 01:29:46', '2', '2026-03-12 01:29:46'); +INSERT INTO `t_component` VALUES (72, '3.22.0', '{\"zh_CN\":\"进度条\"}', 'TinyProgress', 'progress', '进度条', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyProgress\",\"destructuring\":true}', 'component', '进度条', 2, '[{\"name\":{\"zh_CN\":\"进度条\"},\"icon\":\"progress\",\"screenshot\":\"\",\"snippetName\":\"TinyProgress\",\"schema\":{\"componentName\":\"TinyProgress\",\"props\":{\"type\":\"line\",\"status\":\"success\",\"percentage\":50}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"百分比\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"percentage\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"百分比(必填);该属性的可选值为 0-100\"},\"defaultValue\":0,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"enum\",\"label\":{\"text\":{\"zh_CN\":\"类型\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"line\",\"value\":\"line\"},{\"label\":\"circle\",\"value\":\"circle\"},{\"label\":\"dashboard\",\"value\":\"dashboard\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"type\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"进度条类型\"},\"defaultValue\":\"line\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"enum\",\"label\":{\"text\":{\"zh_CN\":\"状态\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"success\",\"value\":\"success\"},{\"label\":\"exception\",\"value\":\"exception\"},{\"label\":\"warning\",\"value\":\"warning\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"status\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"进度条当前状态\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 name、size、type 等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"样式属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"颜色\"}},\"widget\":{\"props\":{},\"component\":\"ColorConfigurator\"},\"disabled\":false,\"property\":\"color\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"进度条背景色(会覆盖 status 状态颜色)\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"线条宽度\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"stroke-width\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"line 类型进度条的宽度,单位 px\"},\"defaultValue\":6,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"宽度\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"width\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"环形进度条画布宽度(只在 type 为 circle 或 dashboard 时可用)\"},\"defaultValue\":126,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件外观、颜色、尺寸相关的配置,包括 width、height、backgroundColor、color 等与视觉呈现相关的属性\"}},{\"name\":\"2\",\"label\":{\"zh_CN\":\"行为属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示文字\"}},\"widget\":{\"props\":{},\"component\":\"SwitchConfigurator\"},\"disabled\":false,\"property\":\"show-text\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否显示进度条文字内容\"},\"defaultValue\":true,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"文字内置\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"text-inside\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"进度条显示文字内置在进度条内(只在 type=line 时可用)\"},\"defaultValue\":false,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件交互、事件、状态相关的配置,包括 disabled、loading、onClick 等与用户操作和状态相关的属性\"}},{\"name\":\"3\",\"label\":{\"zh_CN\":\"高级属性\"},\"content\":[{\"cols\":12,\"type\":\"function\",\"label\":{\"text\":{\"zh_CN\":\"格式\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"javascript\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"format\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"自定义进度条的文字\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"状态图标\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"successIcon\",\"value\":\"successIcon\"},{\"label\":\"exceptionIcon\",\"value\":\"exceptionIcon\"},{\"label\":\"warningIcon\",\"value\":\"warningIcon\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"statusIcon\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"状态插槽,successIcon / exceptionIcon / warningIcon\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件可选的专业配置项,包括复杂对象配置、高级功能选项等不常用的特殊配置\"}}],\"events\":{},\"slots\":{}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-03-12 01:29:46', '2', '2026-03-12 01:29:46'); +INSERT INTO `t_component` VALUES (73, '3.22.0', '{\"zh_CN\":\"骨架屏\"}', 'TinySkeleton', 'skeleton', '骨架屏', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinySkeleton\",\"destructuring\":true}', 'component', '骨架屏', 2, '[{\"name\":{\"zh_CN\":\"骨架屏\"},\"icon\":\"skeleton\",\"screenshot\":\"\",\"snippetName\":\"TinySkeleton\",\"schema\":{\"componentName\":\"TinySkeleton\",\"props\":{\"rows\":3,\"loading\":true,\"animated\":true},\"children\":[{\"props\":{\"text\":\"实际内容\"},\"componentName\":\"Text\"}]}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示头像\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"avatar\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否显示头像\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"行数\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"rows\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"默认样式,可配置段落显示行数\"},\"defaultValue\":3,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"形态\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"image\",\"value\":\"image\"},{\"label\":\"circle\",\"value\":\"circle\"},{\"label\":\"square\",\"value\":\"square\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"variant\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"骨架屏形态\"},\"defaultValue\":\"square\",\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 name、size、type 等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"样式属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"尺寸\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"large\",\"value\":\"large\"},{\"label\":\"medium\",\"value\":\"medium\"},{\"label\":\"small\",\"value\":\"small\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"size\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"针对 image 和 circle 形态,内置三种大小\"},\"defaultValue\":\"medium\",\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件外观、颜色、尺寸相关的配置,包括 width、height、backgroundColor、color 等与视觉呈现相关的属性\"}},{\"name\":\"2\",\"label\":{\"zh_CN\":\"行为属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"开启动画\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"animated\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否开启动画\"},\"defaultValue\":true,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示骨架屏\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"loading\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否显示骨架屏,传 false 时会展示加载完成后的内容\"},\"defaultValue\":true,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件交互、事件、状态相关的配置,包括 disabled、loading、onClick 等与用户操作和状态相关的属性\"}},{\"name\":\"3\",\"label\":{\"zh_CN\":\"高级属性\"},\"content\":[{\"cols\":12,\"type\":\"array\",\"label\":{\"text\":{\"zh_CN\":\"行宽度\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"rows-width\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"自定义段落每一行的宽度,数组中的每一项可以为 number 或 string ,当为 number 时,组件会自动增加 px 单位\"},\"defaultValue\":[],\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件可选的专业配置项,包括复杂对象配置、高级功能选项等不常用的特殊配置\"}}],\"events\":{},\"slots\":{\"default\":{\"label\":{\"zh_CN\":\"默认内容\"},\"description\":{\"zh_CN\":\"加载完成后显示的内容\"}},\"placeholder\":{\"label\":{\"zh_CN\":\"占位符\"},\"description\":{\"zh_CN\":\"自定义骨架屏结构\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-03-12 01:29:46', '2', '2026-03-12 01:29:46'); +INSERT INTO `t_component` VALUES (74, '3.22.0', '{\"zh_CN\":\"卡片\"}', 'TinyCard', 'card', '卡片', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyCard\",\"destructuring\":true}', 'component', '组件', 2, '[{\"name\":{\"zh_CN\":\"卡片\"},\"icon\":\"card\",\"screenshot\":\"\",\"snippetName\":\"TinyCard\",\"schema\":{\"componentName\":\"TinyCard\",\"props\":{\"type\":\"text\",\"title\":\"卡片标题\"},\"children\":[{\"props\":{\"text\":\"这是一个文本卡片的示例内容。\"},\"componentName\":\"Text\"}]}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"源地址\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"src\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"图片或者视频的地址\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"标题\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"title\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"卡片的标题\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"enum\",\"label\":{\"text\":{\"zh_CN\":\"类型\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"text\",\"value\":\"text\"},{\"label\":\"image\",\"value\":\"image\"},{\"label\":\"video\",\"value\":\"video\"},{\"label\":\"logo\",\"value\":\"logo\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"type\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"设置卡片类型\"},\"defaultValue\":\"text\",\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 name、size、type 等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"样式属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"自动宽度\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"auto-width\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"卡片的宽度是否自动撑开,设置后将不再给卡片设置固定宽度\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"自定义类名\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"custom-class\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"卡片的class\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"高度\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"height\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"卡片内容区域的高度\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件外观、颜色、尺寸相关的配置,包括 width、height、backgroundColor、color 等与视觉呈现相关的属性\"}}],\"events\":{},\"slots\":{\"title\":{\"label\":{\"zh_CN\":\"标题\"},\"description\":{\"zh_CN\":\"标题插槽\"}},\"footer\":{\"label\":{\"zh_CN\":\"底部\"},\"description\":{\"zh_CN\":\"组件底部插槽\"}},\"default\":{\"label\":{\"zh_CN\":\"默认内容\"},\"description\":{\"zh_CN\":\"组件默认插槽\"}},\"title-left\":{\"label\":{\"zh_CN\":\"标题左侧\"},\"description\":{\"zh_CN\":\"标题左侧插槽\"}},\"title-right\":{\"label\":{\"zh_CN\":\"标题右侧\"},\"description\":{\"zh_CN\":\"标题右侧插槽\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-03-12 01:29:46', '2', '2026-03-12 01:29:46'); +INSERT INTO `t_component` VALUES (75, '3.22.0', '{\"zh_CN\":\"日历\"}', 'TinyCalendar', 'calendar', '日历', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyCalendar\",\"destructuring\":true}', 'component', '组件', 2, '[{\"name\":{\"zh_CN\":\"日历\"},\"icon\":\"calendar\",\"screenshot\":\"\",\"snippetName\":\"TinyCalendar\",\"schema\":{\"componentName\":\"TinyCalendar\",\"props\":{\"mode\":\"month\",\"show-selected\":false}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"enum\",\"label\":{\"text\":{\"zh_CN\":\"显示模式\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"month\",\"value\":\"month\"},{\"label\":\"year\",\"value\":\"year\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"mode\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"日历显示模式\"},\"defaultValue\":\"month\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"月份\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"month\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"指定月份,默认当前月份\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"年份\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"year\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"指定年份,默认当前年份\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 name、size、type 等核心属性\"}},{\"name\":\"2\",\"label\":{\"zh_CN\":\"行为属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示选中日期\"}},\"widget\":{\"props\":{},\"component\":\"SwitchConfigurator\"},\"disabled\":false,\"property\":\"show-selected\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否显示选中的日期\"},\"defaultValue\":false,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件交互、事件、状态相关的配置,包括 disabled、loading、onClick 等与用户操作和状态相关的属性\"}},{\"name\":\"3\",\"label\":{\"zh_CN\":\"高级属性\"},\"content\":[{\"cols\":12,\"type\":\"array\",\"label\":{\"text\":{\"zh_CN\":\"事件列表\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"events\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"事件列表\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件可选的专业配置项,包括复杂对象配置、高级功能选项等不常用的特殊配置\"}}],\"events\":{},\"slots\":{\"day\":{\"label\":{\"zh_CN\":\"日期单元格\"},\"description\":{\"zh_CN\":\"日期单元格插槽\"}},\"tool\":{\"label\":{\"zh_CN\":\"日历工具栏\"},\"description\":{\"zh_CN\":\"日历工具栏插槽\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-03-12 01:29:46', '2', '2026-03-12 01:29:46'); +INSERT INTO `t_component` VALUES (76, '3.22.0', '{\"zh_CN\":\"标记\"}', 'TinyBadge', 'badge', '标记', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyBadge\",\"destructuring\":true}', 'component', '组件', 2, '[{\"name\":{\"zh_CN\":\"标记\"},\"icon\":\"badge\",\"screenshot\":\"\",\"snippetName\":\"TinyBadge\",\"schema\":{\"componentName\":\"TinyBadge\",\"props\":{\"value\":10,\"data\":\"我的待办\"}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"数据条目数\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"value\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"相关数据条目数\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"标记类型\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"type\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"标记的类型\"},\"defaultValue\":\"danger\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"文本内容\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"data\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"文本内容\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 name、size、type 等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"行为属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"是否隐藏\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"hidden\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否隐藏标记\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"是否小圆点\"}},\"widget\":{\"props\":{},\"component\":\"SwitchConfigurator\"},\"disabled\":false,\"property\":\"is-dot\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否以小圆点的形式来显示标记\"},\"defaultValue\":false,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件交互、事件、状态相关的配置,包括 disabled、loading、onClick 等与用户操作和状态相关的属性\"}},{\"name\":\"2\",\"label\":{\"zh_CN\":\"样式属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"自定义标记类名\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"badge-class\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"自定义标记的类名\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"偏移量\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"offset\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"设置标记位置的偏移量\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件外观、颜色、尺寸相关的配置,包括 width、height、backgroundColor、color 等与视觉呈现相关的属性\"}},{\"name\":\"3\",\"label\":{\"zh_CN\":\"高级属性\"},\"content\":[{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"最大值\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"max\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"指定徽章显示的最大值,如果实际获取的徽章值超过该最大值,则以最大值后接一个 \'+\' 的形式显示徽章数,要求 value 是 number 类型\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"跳转地址\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"href\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"指定跳转的目标页面地址\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"跳转方式\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"target\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"点击标记时链接到目标页面的跳转方式,仅在 href 属性存在时使用\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件可选的专业配置项,包括复杂对象配置、高级功能选项等不常用的特殊配置\"}}],\"events\":{},\"slots\":{\"content\":{\"label\":{\"zh_CN\":\"内容\"},\"description\":{\"zh_CN\":\"消息提示内容\"}},\"default\":{\"label\":{\"zh_CN\":\"默认内容\"},\"description\":{\"zh_CN\":\"默认插槽,有data属性时,默认插槽不生效\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-03-12 01:29:46', '2', '2026-03-12 01:29:46'); +INSERT INTO `t_component` VALUES (77, '3.22.0', '{\"zh_CN\":\"标签\"}', 'TinyTag', 'tag', '标签', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyTag\",\"destructuring\":true}', 'component', '组件', 2, '[{\"name\":{\"zh_CN\":\"标签\"},\"icon\":\"tag\",\"screenshot\":\"\",\"snippetName\":\"TinyTag\",\"schema\":{\"componentName\":\"TinyTag\",\"props\":{\"type\":\"success\",\"value\":\"成功\"}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"显示类型\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"type\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"显示类型\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"标签内容\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"value\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"配置式标签,自定义标签内容\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 name、size、type 等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"样式属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"颜色\"}},\"widget\":{\"props\":{},\"component\":\"ColorConfigurator\"},\"disabled\":false,\"property\":\"color\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"控制标签文本色和背景色,可使用 IColor 类型中的预设值,也可自定义值\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"主题\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"effect\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"主题\"},\"defaultValue\":\"light\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"最大宽度\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"max-width\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"设置最大宽度\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"尺寸\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"size\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"尺寸\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件外观、颜色、尺寸相关的配置,包括 width、height、backgroundColor、color 等与视觉呈现相关的属性\"}},{\"name\":\"2\",\"label\":{\"zh_CN\":\"行为属性\"},\"content\":[{\"cols\":12,\"type\":\"function\",\"label\":{\"text\":{\"zh_CN\":\"删除前回调\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"javascript\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"before-delete\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"删除前回调函数\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"可关闭\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"closable\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否可关闭\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"禁用\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"disabled\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否禁用\"},\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"纯图标模式\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"only-icon\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"是否为纯图标的模式\"},\"defaultValue\":false,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件交互、事件、状态相关的配置,包括 disabled、loading、onClick 等与用户操作和状态相关的属性\"}}],\"events\":{\"onClick\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"点击标签时触发\"},\"description\":{\"zh_CN\":\"点击标签时触发的事件\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Event\",\"description\":{\"zh_CN\":\"事件对象\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"\",\"description\":{\"zh_CN\":\"\"},\"defaultValue\":\"\"}}},\"onClose\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"点击关闭按钮时触发\"},\"description\":{\"zh_CN\":\"点击关闭按钮时触发的事件\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"event\",\"type\":\"Event\",\"description\":{\"zh_CN\":\"事件对象\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"\",\"description\":{\"zh_CN\":\"\"},\"defaultValue\":\"\"}}}},\"slots\":{\"default\":{\"label\":{\"zh_CN\":\"默认内容\"},\"description\":{\"zh_CN\":\"标签内容\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-03-12 01:29:47', '2', '2026-03-12 01:29:47'); +INSERT INTO `t_component` VALUES (78, '3.22.0', '{\"zh_CN\":\"统计数值\"}', 'TinyStatistic', 'statistic', '统计数值', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyStatistic\",\"destructuring\":true}', 'component', '组件', 2, '[{\"name\":{\"zh_CN\":\"统计数值\"},\"icon\":\"statistic\",\"screenshot\":\"\",\"snippetName\":\"TinyStatistic\",\"schema\":{\"componentName\":\"TinyStatistic\",\"props\":{\"value\":36256.22,\"precision\":2}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"值\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"value\",\"readOnly\":false,\"required\":false,\"description\":{\"zh_CN\":\"数字显示内容\"},\"defaultValue\":\"0\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"精度\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"precision\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"精度值\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 name、size、type 等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"样式属性\"},\"content\":[{\"cols\":12,\"type\":\"object\",\"label\":{\"text\":{\"zh_CN\":\"值样式\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"value-style\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"设置数字样式\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件外观、颜色、尺寸相关的配置,包括 width、height、backgroundColor、color 等与视觉呈现相关的属性\"}},{\"name\":\"2\",\"label\":{\"zh_CN\":\"高级属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"前缀\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"prefix\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"设置数字内容前缀\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"后缀\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"suffix\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"设置数字内容后缀\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"标题\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"title\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"设置数字内容标题\"},\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件可选的专业配置项,包括复杂对象配置、高级功能选项等不常用的特殊配置\"}}],\"events\":{},\"slots\":{\"title\":{\"label\":{\"zh_CN\":\"标题\"},\"description\":{\"zh_CN\":\"数字内容标题插槽\"}},\"prefix\":{\"label\":{\"zh_CN\":\"前缀\"},\"description\":{\"zh_CN\":\"数字内容前置插槽\"}},\"suffix\":{\"label\":{\"zh_CN\":\"后缀\"},\"description\":{\"zh_CN\":\"数字内容后置插槽\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-03-12 01:29:47', '2', '2026-03-12 01:29:47'); +INSERT INTO `t_component` VALUES (79, '3.22.0', '{\"zh_CN\":\"动作菜单\"}', 'TinyActionMenu', 'dropdown', '动作菜单', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyActionMenu\",\"destructuring\":true}', 'component', '动作菜单', 2, '[{\"name\":{\"zh_CN\":\"动作菜单\"},\"icon\":\"dropdown\",\"screenshot\":\"\",\"snippetName\":\"TinyActionMenu\",\"schema\":{\"componentName\":\"TinyActionMenu\",\"props\":{\"options\":[{\"label\":\"远程登录\"},{\"label\":\"开机\"},{\"label\":\"关机\"},{\"label\":\"重启\",\"divided\":true},{\"label\":\"网络设置\",\"children\":[{\"label\":\"更改安全组\"},{\"label\":\"切换 VPC\",\"divided\":true}]}]}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"object\",\"label\":{\"text\":{\"zh_CN\":\"绑定值\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"options\",\"readOnly\":false,\"required\":true,\"description\":{\"zh_CN\":\"菜单项列表的数据\"},\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"最大显示数量\"}},\"widget\":{\"props\":{\"step\":2},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"maxShowNum\",\"readOnly\":false,\"required\":false,\"description\":\"最多显示菜单按钮的个数,其他菜单在下拉弹框显示\",\"defaultValue\":2,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"按钮模式\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"default\",\"value\":\"default\"},{\"label\":\"card\",\"value\":\"card\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"mode\",\"readOnly\":false,\"required\":false,\"description\":\"菜单按钮模式\",\"defaultValue\":\"default\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"下拉按钮文本\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"moreText\",\"readOnly\":false,\"required\":false,\"description\":\"下拉按钮文本\",\"defaultValue\":\"更多\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"二级下拉面板的显示位置\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"bottom-start\",\"value\":\"bottom-start\"},{\"label\":\"bottom-end\",\"value\":\"bottom-end\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"placement\",\"readOnly\":false,\"required\":false,\"description\":\"二级下拉面板的显示位置\",\"defaultValue\":\"bottom-end\",\"labelPosition\":\"top\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"show-icon\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"showIcon\",\"readOnly\":false,\"required\":false,\"description\":\"是否显示下拉触发源图标\",\"defaultValue\":true,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"text-field\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"textField\",\"readOnly\":false,\"required\":false,\"description\":\"菜单按钮文本的键值\",\"defaultValue\":\"label\",\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 name、size、type 等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"样式属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"按钮间距\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"spacing\",\"readOnly\":false,\"required\":false,\"description\":\"菜单按钮之间的间距\",\"defaultValue\":\"5px\",\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件外观、颜色、尺寸相关的配置,包括 width、height、backgroundColor、color 等与视觉呈现相关的属性\"}}],\"events\":{\"onItemClick\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"菜单项点击\"},\"description\":{\"zh_CN\":\"监听点击菜单项事件\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"data\",\"type\":\"IItemClickParam\",\"description\":{\"zh_CN\":\"点击的菜单项参数数据\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"\",\"description\":{\"zh_CN\":\"事件返回值的描述文字\"},\"defaultValue\":\"\"}}},\"onButtonClick\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"左侧按钮点击\"},\"description\":{\"zh_CN\":\"监听左侧按钮点击事件,仅 split-button 为 true 时生效\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[],\"returns\":{\"type\":\"\",\"description\":{\"zh_CN\":\"事件返回值的描述文字\"},\"defaultValue\":\"\"}}},\"onVisibleChange\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"显隐状态变化\"},\"description\":{\"zh_CN\":\"监听下拉框的显示或隐藏状态\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"status\",\"type\":\"boolean\",\"description\":{\"zh_CN\":\"下拉框的显示或隐藏状态\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"\",\"description\":{\"zh_CN\":\"事件返回值的描述文字\"},\"defaultValue\":\"\"}}}},\"slots\":{\"default\":{\"label\":{\"zh_CN\":\"默认内容\"},\"description\":{\"zh_CN\":\"自定义触发源文本区域。 注意: 必须是一个元素或者或者组件\"}},\"dropdown\":{\"label\":{\"zh_CN\":\"下拉列表\"},\"description\":{\"zh_CN\":\"自定义下拉列表区域,通常使用 tiny-dropdown-menu 组件\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-04-10 00:56:27', '2', '2026-04-10 00:56:27'); +INSERT INTO `t_component` VALUES (80, '3.22.0', '{\"zh_CN\":\"下拉菜单\"}', 'TinyDropdown', 'dropdown', '下拉菜单', '', '', '', '', 'proCode', '{\"package\":\"@opentiny/vue\",\"exportName\":\"TinyDropdown\",\"destructuring\":true}', 'component', '下拉菜单', 2, '[{\"name\":{\"zh_CN\":\"下拉菜单\"},\"icon\":\"dropdown\",\"screenshot\":\"\",\"snippetName\":\"TinyDropdown\",\"schema\":{\"componentName\":\"TinyDropdown\",\"props\":{\"menu-options\":{\"options\":[{\"name\":\"老友粉\",\"disabled\":true},{\"name\":\"狮子头\",\"divided\":true},{\"name\":\"黄金糕\",\"divided\":true}],\"textField\":\"name\"}}}}]', '{\"properties\":[{\"name\":\"0\",\"label\":{\"zh_CN\":\"基础属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"尺寸\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"medium\",\"value\":\"medium\"},{\"label\":\"small\",\"value\":\"small\"},{\"label\":\"mini\",\"value\":\"mini\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"size\",\"readOnly\":false,\"required\":false,\"description\":\"菜单尺寸。注意:只在 split-button为 true 的情况下生效\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"分割按钮\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"split-button\",\"readOnly\":false,\"required\":false,\"description\":\"下拉触发元素呈现为按钮\",\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"ibuttontype\",\"label\":{\"text\":{\"zh_CN\":\"按钮类型\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"type\",\"readOnly\":false,\"required\":false,\"description\":\"按钮类型。注意:只在 split-button 为 true 的情况下有效\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"触发方式\"}},\"widget\":{\"props\":{\"options\":[{\"label\":\"hover\",\"value\":\"hover\"},{\"label\":\"click\",\"value\":\"click\"},{\"label\":\"contextmenu\",\"value\":\"contextmenu\"}]},\"component\":\"SelectConfigurator\"},\"disabled\":false,\"property\":\"trigger\",\"readOnly\":false,\"required\":false,\"description\":\"触发下拉的方式\",\"defaultValue\":\"hover\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"iplacementtype\",\"label\":{\"text\":{\"zh_CN\":\"弹出位置\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"placement\",\"readOnly\":false,\"required\":false,\"description\":\"菜单弹出位置\",\"defaultValue\":\"bottom-end\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显隐状态\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"visible\",\"readOnly\":false,\"required\":false,\"description\":\"手动控制下拉弹框显隐,优先级高于trigger\",\"defaultValue\":false,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件核心功能相关的配置,包括 name、size、type 等核心属性\"}},{\"name\":\"1\",\"label\":{\"zh_CN\":\"样式属性\"},\"content\":[{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"标题\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"title\",\"readOnly\":false,\"required\":false,\"description\":\"自定义触发源的文本\",\"defaultValue\":\"下拉菜单\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示图标\"}},\"widget\":{\"props\":{},\"component\":\"SwitchConfigurator\"},\"disabled\":false,\"property\":\"show-icon\",\"readOnly\":false,\"required\":false,\"description\":\"是否显示下拉触发源图标\",\"defaultValue\":true,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"component\",\"label\":{\"text\":{\"zh_CN\":\"图标\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入图标名称\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"suffix-icon\",\"readOnly\":false,\"required\":false,\"description\":\"下拉触发源图标\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"继承宽度\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"inherit-width\",\"readOnly\":false,\"required\":false,\"description\":\"下拉弹框的最小宽度是否继承触发源的宽度,默认不继承\",\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"显示箭头\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"visible-arrow\",\"readOnly\":false,\"required\":false,\"description\":\"下拉弹框是否显示箭头,默认不显示\",\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"弹框类名\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"popper-class\",\"readOnly\":false,\"required\":false,\"description\":\"下拉弹框的类名,用于自定义样式\",\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件外观、颜色、尺寸相关的配置,包括 width、height、backgroundColor、color 等与视觉呈现相关的属性\"}},{\"name\":\"2\",\"label\":{\"zh_CN\":\"行为属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"禁用\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"disabled\",\"readOnly\":false,\"required\":false,\"description\":\"是否禁用\",\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"点击收起\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"hide-on-click\",\"readOnly\":false,\"required\":false,\"description\":\"点击菜单项后是否收起菜单。默认点击后收起\",\"defaultValue\":true,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"收起延时\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"hide-timeout\",\"readOnly\":false,\"required\":false,\"description\":\"延时多久收起下拉菜单,单位毫秒。注意:仅在 trigger 为 hover 时有效\",\"defaultValue\":150,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"展开延时\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"show-timeout\",\"readOnly\":false,\"required\":false,\"description\":\"延时多久展开下拉菜单,单位毫秒。注意:仅在 trigger 为 hover 时有效\",\"defaultValue\":250,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"number\",\"label\":{\"text\":{\"zh_CN\":\"Tab索引\"}},\"widget\":{\"props\":{\"step\":1},\"component\":\"NumberConfigurator\"},\"disabled\":false,\"property\":\"tabindex\",\"readOnly\":false,\"required\":false,\"description\":\"初始化触发元素的原生属性 tabindex\",\"defaultValue\":0,\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件交互、事件、状态相关的配置,包括 disabled、loading、onClick 等与用户操作和状态相关的属性\"}},{\"name\":\"3\",\"label\":{\"zh_CN\":\"高级属性\"},\"content\":[{\"cols\":12,\"type\":\"boolean\",\"label\":{\"text\":{\"zh_CN\":\"懒加载\"}},\"widget\":{\"props\":{},\"component\":\"CheckBoxConfigurator\"},\"disabled\":false,\"property\":\"lazy-show-popper\",\"readOnly\":false,\"required\":false,\"description\":\"是否懒加载下拉菜单及内部的项,以优化性能,默认初始全加载菜单及内部项。\",\"defaultValue\":false,\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"imenuoption\",\"label\":{\"text\":{\"zh_CN\":\"菜单配置\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"menu-options\",\"readOnly\":false,\"required\":false,\"description\":\"配置式且只使用 tiny-dropdown 组件时使用\",\"defaultValue\":\"{ options:[], textField:\\\"label\\\", popperClass:\\\"\\\", placement:\\\"bottom-end\\\" }\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"iitemdata[]\",\"label\":{\"text\":{\"zh_CN\":\"菜单项配置\"}},\"widget\":{\"props\":{\"height\":150,\"language\":\"json\"},\"component\":\"CodeConfigurator\"},\"disabled\":false,\"property\":\"options\",\"readOnly\":false,\"required\":false,\"description\":\"通过配置式设置菜单项的属性\",\"defaultValue\":\"[]\",\"labelPosition\":\"left\"},{\"cols\":12,\"type\":\"string\",\"label\":{\"text\":{\"zh_CN\":\"文本字段\"}},\"widget\":{\"props\":{\"placeholder\":\"请输入...\"},\"component\":\"InputConfigurator\"},\"disabled\":false,\"property\":\"text-field\",\"readOnly\":false,\"required\":false,\"description\":\"菜单项文本的字段,结合 options 属性使用\",\"defaultValue\":\"label\",\"labelPosition\":\"left\"}],\"description\":{\"zh_CN\":\"组件可选的专业配置项,包括复杂对象配置、高级功能选项等不常用的特殊配置\"}}],\"events\":{\"onItemClick\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"菜单项点击\"},\"description\":{\"zh_CN\":\"监听点击菜单项事件\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"data\",\"type\":\"IItemClickParam\",\"description\":{\"zh_CN\":\"点击的菜单项参数数据\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"\",\"description\":{\"zh_CN\":\"事件返回值的描述文字\"},\"defaultValue\":\"\"}}},\"onButtonClick\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"左侧按钮点击\"},\"description\":{\"zh_CN\":\"监听左侧按钮点击事件,仅 split-button 为 true 时生效\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[],\"returns\":{\"type\":\"\",\"description\":{\"zh_CN\":\"事件返回值的描述文字\"},\"defaultValue\":\"\"}}},\"onVisibleChange\":{\"type\":\"event\",\"label\":{\"zh_CN\":\"显隐状态变化\"},\"description\":{\"zh_CN\":\"监听下拉框的显示或隐藏状态\"},\"defaultValue\":\"\",\"functionInfo\":{\"params\":[{\"name\":\"status\",\"type\":\"boolean\",\"description\":{\"zh_CN\":\"下拉框的显示或隐藏状态\"},\"defaultValue\":\"\"}],\"returns\":{\"type\":\"\",\"description\":{\"zh_CN\":\"事件返回值的描述文字\"},\"defaultValue\":\"\"}}}},\"slots\":{\"default\":{\"label\":{\"zh_CN\":\"默认内容\"},\"description\":{\"zh_CN\":\"自定义触发源文本区域。 注意: 必须是一个元素或者或者组件\"}},\"dropdown\":{\"label\":{\"zh_CN\":\"下拉列表\"},\"description\":{\"zh_CN\":\"自定义下拉列表区域,通常使用 tiny-dropdown-menu 组件\"}}}}', '{\"loop\":true,\"condition\":true,\"styles\":true,\"isContainer\":false,\"isModal\":false,\"nestingRule\":{\"childWhitelist\":\"\",\"parentWhitelist\":\"\",\"descendantBlacklist\":\"\",\"ancestorWhitelist\":\"\"},\"isNullNode\":false,\"isLayout\":false,\"rootSelector\":\"\",\"shortcuts\":{\"properties\":[]},\"contextMenu\":{\"actions\":[\"create symbol\"],\"disable\":[\"copy\",\"remove\"]}}', 1, 'Vue', 1, 1, 0, NULL, NULL, NULL, NULL, NULL, '2', '2026-04-10 00:56:27', '2', '2026-04-10 00:56:27'); + INSERT INTO `t_component_library` VALUES (1, '3.20.0', 'TinyVue组件库', NULL, '@opentiny/vue', NULL, 'Vue', NULL, 'https://registry.npmmirror.com/@opentiny/vue-runtime/~3.20/files/dist3/tiny-vue-pc.mjs', 'https://registry.npmmirror.com/@opentiny/vue-theme/~3.20/files/index.css', NULL, NULL, NULL, NULL, NULL, 1, 1, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); INSERT INTO `t_component_library` VALUES (2, '2.4.2', 'element-plus组件库', NULL, 'element-plus', NULL, 'Vue', NULL, 'https://registry.npmmirror.com/element-plus/2.4.2/files/dist/index.full.mjs', 'https://registry.npmmirror.com/element-plus/2.4.2/files/dist/index.css', NULL, NULL, NULL, NULL, NULL, 1, 1, 1, '1', NULL, NULL, '1', '2025-08-03 19:54:13', '1', '2025-08-03 19:54:13'); +INSERT INTO `t_component_library` VALUES (3, '3.22.0', 'TinyVueHuicharts组件库', NULL, '@opentiny/vue-huicharts', NULL, 'Vue', NULL, 'https://registry.npmmirror.com/@opentiny/vue-runtime/3.22/files/dist3/tiny-vue-huicharts.mjs', NULL, NULL, NULL, NULL, NULL, NULL, 1, 1, 1, NULL, NULL, NULL, '2', '2026-03-12 01:29:44', '2', '2026-03-12 01:29:44'); INSERT INTO `r_material_history_component` VALUES (1, 1, 1); INSERT INTO `r_material_history_component` VALUES (2, 1, 2); @@ -126,6 +155,33 @@ INSERT INTO `r_material_history_component` VALUES (50, 1, 50); INSERT INTO `r_material_history_component` VALUES (51, 1, 51); INSERT INTO `r_material_history_component` VALUES (52, 1, 52); INSERT INTO `r_material_history_component` VALUES (53, 1, 53); +INSERT INTO `r_material_history_component` VALUES (54, 1, 54); +INSERT INTO `r_material_history_component` VALUES (55, 1, 55); +INSERT INTO `r_material_history_component` VALUES (56, 1, 56); +INSERT INTO `r_material_history_component` VALUES (57, 1, 57); +INSERT INTO `r_material_history_component` VALUES (58, 1, 58); +INSERT INTO `r_material_history_component` VALUES (59, 1, 59); +INSERT INTO `r_material_history_component` VALUES (60, 1, 60); +INSERT INTO `r_material_history_component` VALUES (61, 1, 61); +INSERT INTO `r_material_history_component` VALUES (62, 1, 62); +INSERT INTO `r_material_history_component` VALUES (63, 1, 63); +INSERT INTO `r_material_history_component` VALUES (64, 1, 64); +INSERT INTO `r_material_history_component` VALUES (65, 1, 65); +INSERT INTO `r_material_history_component` VALUES (66, 1, 66); +INSERT INTO `r_material_history_component` VALUES (67, 1, 67); +INSERT INTO `r_material_history_component` VALUES (68, 1, 68); +INSERT INTO `r_material_history_component` VALUES (69, 1, 69); +INSERT INTO `r_material_history_component` VALUES (70, 1, 70); +INSERT INTO `r_material_history_component` VALUES (71, 1, 71); +INSERT INTO `r_material_history_component` VALUES (72, 1, 72); +INSERT INTO `r_material_history_component` VALUES (73, 1, 73); +INSERT INTO `r_material_history_component` VALUES (74, 1, 74); +INSERT INTO `r_material_history_component` VALUES (75, 1, 75); +INSERT INTO `r_material_history_component` VALUES (76, 1, 76); +INSERT INTO `r_material_history_component` VALUES (77, 1, 77); +INSERT INTO `r_material_history_component` VALUES (78, 1, 78); +INSERT INTO `r_material_history_component` VALUES (79, 1, 79); +INSERT INTO `r_material_history_component` VALUES (80, 1, 80); INSERT INTO `r_material_component` VALUES (1, 1, 1); INSERT INTO `r_material_component` VALUES (2, 1, 2); @@ -180,3 +236,30 @@ INSERT INTO `r_material_component` VALUES (50, 1, 50); INSERT INTO `r_material_component` VALUES (51, 1, 51); INSERT INTO `r_material_component` VALUES (52, 1, 52); INSERT INTO `r_material_component` VALUES (53, 1, 53); +INSERT INTO `r_material_component` VALUES (54, 1, 54); +INSERT INTO `r_material_component` VALUES (55, 1, 55); +INSERT INTO `r_material_component` VALUES (56, 1, 56); +INSERT INTO `r_material_component` VALUES (57, 1, 57); +INSERT INTO `r_material_component` VALUES (58, 1, 58); +INSERT INTO `r_material_component` VALUES (59, 1, 59); +INSERT INTO `r_material_component` VALUES (60, 1, 60); +INSERT INTO `r_material_component` VALUES (61, 1, 61); +INSERT INTO `r_material_component` VALUES (62, 1, 62); +INSERT INTO `r_material_component` VALUES (63, 1, 63); +INSERT INTO `r_material_component` VALUES (64, 1, 64); +INSERT INTO `r_material_component` VALUES (65, 1, 65); +INSERT INTO `r_material_component` VALUES (66, 1, 66); +INSERT INTO `r_material_component` VALUES (67, 1, 67); +INSERT INTO `r_material_component` VALUES (68, 1, 68); +INSERT INTO `r_material_component` VALUES (69, 1, 69); +INSERT INTO `r_material_component` VALUES (70, 1, 70); +INSERT INTO `r_material_component` VALUES (71, 1, 71); +INSERT INTO `r_material_component` VALUES (72, 1, 72); +INSERT INTO `r_material_component` VALUES (73, 1, 73); +INSERT INTO `r_material_component` VALUES (74, 1, 74); +INSERT INTO `r_material_component` VALUES (75, 1, 75); +INSERT INTO `r_material_component` VALUES (76, 1, 76); +INSERT INTO `r_material_component` VALUES (77, 1, 77); +INSERT INTO `r_material_component` VALUES (78, 1, 78); +INSERT INTO `r_material_component` VALUES (79, 1, 79); +INSERT INTO `r_material_component` VALUES (80, 1, 80); diff --git a/base/src/main/java/com/tinyengine/it/config/OpenAIConfig.java b/base/src/main/java/com/tinyengine/it/config/OpenAIConfig.java index 0de5a4fd..3b228f29 100644 --- a/base/src/main/java/com/tinyengine/it/config/OpenAIConfig.java +++ b/base/src/main/java/com/tinyengine/it/config/OpenAIConfig.java @@ -13,7 +13,11 @@ package com.tinyengine.it.config; import lombok.Data; -import org.springframework.context.annotation.Configuration; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; /** * The type Open AI config. @@ -21,10 +25,26 @@ * @since 2025-08-06 */ @Data -@Configuration +@Component +@ConfigurationProperties(prefix = "openai") public class OpenAIConfig { private String apiKey = "your-api-key"; private String baseUrl = "https://api.deepseek.com/chat/completions"; private String defaultModel = "deepseek-chat"; private int timeoutSeconds = 300; + + // Streamable HTTP 工具映射(工具名 -> 服务URL) + private Map streamableTools = new HashMap<>(); + + // Streamable HTTP 连接池配置 + private StreamableHttpConfig streamableHttp = new StreamableHttpConfig(); + + @Data + public static class StreamableHttpConfig { + private int maxConnections = 20; + private int connectionTimeoutSeconds = 30; + private int requestTimeoutSeconds = 60; + private String protocolVersion = "2025-06-18"; // 协议版本 + private boolean keepAlive = true; + } } diff --git a/base/src/main/java/com/tinyengine/it/mcp/annotation/MCPTool.java b/base/src/main/java/com/tinyengine/it/mcp/annotation/MCPTool.java new file mode 100644 index 00000000..efdd69fe --- /dev/null +++ b/base/src/main/java/com/tinyengine/it/mcp/annotation/MCPTool.java @@ -0,0 +1,14 @@ +package com.tinyengine.it.mcp.annotation; + +import java.lang.annotation.*; + +/** + * The interface MCPTool. MCP工具注解,用于标识MCP工具方法,提供工具名称和描述信息。 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface MCPTool { + String name() default ""; + String description() default ""; +} diff --git a/base/src/main/java/com/tinyengine/it/mcp/config/McpToolsConfig.java b/base/src/main/java/com/tinyengine/it/mcp/config/McpToolsConfig.java new file mode 100644 index 00000000..a5d370bc --- /dev/null +++ b/base/src/main/java/com/tinyengine/it/mcp/config/McpToolsConfig.java @@ -0,0 +1,33 @@ +package com.tinyengine.it.mcp.config; + +import com.tinyengine.it.mcp.core.StreamableMcpClient; +import com.tinyengine.it.mcp.tools.DemoMcpTools; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.ai.tool.ToolCallbackProvider; +import org.springframework.ai.tool.method.MethodToolCallbackProvider; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +@Configuration +public class McpToolsConfig { + private static final Logger log = LoggerFactory.getLogger(McpToolsConfig.class); + + + /** + * 方式一:通过 ToolCallbackProvider 批量注册工具 + */ + @Bean + @Primary + public ToolCallbackProvider toolCallbackProvider(DemoMcpTools demoMcpTools) { + + + MethodToolCallbackProvider provider = MethodToolCallbackProvider.builder() + .toolObjects(demoMcpTools) + .build(); + // 立即验证 + log.info("Tool count from provider: " + provider.getToolCallbacks().length); + return provider; + } +} diff --git a/base/src/main/java/com/tinyengine/it/mcp/core/MCPToolDefinition.java b/base/src/main/java/com/tinyengine/it/mcp/core/MCPToolDefinition.java new file mode 100644 index 00000000..1513c6dd --- /dev/null +++ b/base/src/main/java/com/tinyengine/it/mcp/core/MCPToolDefinition.java @@ -0,0 +1,40 @@ +package com.tinyengine.it.mcp.core; + +import com.fasterxml.jackson.databind.JsonNode; +import lombok.Data; + +import java.lang.reflect.Method; + +@Data +public class MCPToolDefinition { + private String name; + private String description; + private Object bean; + private Method method; + private JsonNode inputSchema; // JSON Schema 格式 + + /** + * 执行工具方法 + * @param arguments + * @return + * @throws Exception + */ + public Object execute(JsonNode arguments) throws Exception { + // 参数转换:根据方法参数类型从 JsonNode 中提取值 + // 这里简化:假设方法只有一个参数,且为 JsonNode 或 String + Class[] paramTypes = method.getParameterTypes(); + Object[] args = new Object[paramTypes.length]; + for (int i = 0; i < paramTypes.length; i++) { + Class type = paramTypes[i]; + if (type == JsonNode.class) { + args[i] = arguments; + } else if (type == String.class) { + args[i] = arguments.toString(); + } else { + // 可以扩展更复杂的转换,例如使用 ObjectMapper 转换为指定类型 + args[i] = null; + } + } + return method.invoke(bean, args); + } +} diff --git a/base/src/main/java/com/tinyengine/it/mcp/core/MCPToolRegistry.java b/base/src/main/java/com/tinyengine/it/mcp/core/MCPToolRegistry.java new file mode 100644 index 00000000..6c0dd2c8 --- /dev/null +++ b/base/src/main/java/com/tinyengine/it/mcp/core/MCPToolRegistry.java @@ -0,0 +1,82 @@ +package com.tinyengine.it.mcp.core; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.tinyengine.it.mcp.annotation.MCPTool; + +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.Collection; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@Component +public class MCPToolRegistry { + private final Map tools = new ConcurrentHashMap<>(); + private final ObjectMapper objectMapper = new ObjectMapper(); + private final ApplicationContext applicationContext; + private volatile boolean initialized = false; + + public MCPToolRegistry(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + + private void initialize() { + if (initialized) return; + synchronized (this) { + if (initialized) return; + // 扫描所有 bean + Map beans = applicationContext.getBeansWithAnnotation(org.springframework.stereotype.Component.class); + for (Object bean : beans.values()) { + for (Method method : bean.getClass().getDeclaredMethods()) { + if (method.isAnnotationPresent(MCPTool.class)) { + registerTool(bean, method); + } + + } + } + initialized = true; + } + } + + public MCPToolDefinition getTool(String name) { + initialize(); + return tools.get(name); + } + + public Collection getAllTools() { + initialize(); + return tools.values(); + } + + private void registerTool(Object bean, Method method) { + MCPTool annotation = method.getAnnotation(MCPTool.class); + MCPToolDefinition def = new MCPToolDefinition(); + def.setName(annotation.name().isEmpty() ? method.getName() : annotation.name()); + def.setDescription(annotation.description()); + def.setBean(bean); + def.setMethod(method); + def.setInputSchema(generateSchema(method)); + tools.put(def.getName(), def); + } + + private JsonNode generateSchema(Method method) { + ObjectNode schema = objectMapper.createObjectNode(); + schema.put("type", "object"); + ObjectNode properties = objectMapper.createObjectNode(); + for (Parameter param : method.getParameters()) { + String paramName = param.getName(); + ObjectNode prop = objectMapper.createObjectNode(); + // 简化:假设参数都是 String + prop.put("type", "string"); + properties.set(paramName, prop); + } + schema.set("properties", properties); + return schema; + } + +} diff --git a/base/src/main/java/com/tinyengine/it/mcp/core/RemoteToolDefinition.java b/base/src/main/java/com/tinyengine/it/mcp/core/RemoteToolDefinition.java new file mode 100644 index 00000000..a25c3b3d --- /dev/null +++ b/base/src/main/java/com/tinyengine/it/mcp/core/RemoteToolDefinition.java @@ -0,0 +1,12 @@ +package com.tinyengine.it.mcp.core; + +import com.fasterxml.jackson.databind.JsonNode; +import lombok.Data; + +@Data +public class RemoteToolDefinition { + private String name; + private String description; + private JsonNode parameters; // JSON Schema + private String serverUrl; +} diff --git a/base/src/main/java/com/tinyengine/it/mcp/core/StreamableHttpClientManager.java b/base/src/main/java/com/tinyengine/it/mcp/core/StreamableHttpClientManager.java new file mode 100644 index 00000000..8e9ac93d --- /dev/null +++ b/base/src/main/java/com/tinyengine/it/mcp/core/StreamableHttpClientManager.java @@ -0,0 +1,112 @@ +package com.tinyengine.it.mcp.core; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.tinyengine.it.config.OpenAIConfig; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Streamable HTTP 客户端管理器 + * 负责创建、缓存和销毁 StreamableMcpClient 实例,提供统一的工具调用入口 + */ +@Component +public class StreamableHttpClientManager { + + private static final Logger log = LoggerFactory.getLogger(StreamableHttpClientManager.class); + + private final OpenAIConfig config; + private final ObjectMapper objectMapper; + private final ConcurrentHashMap clientCache = new ConcurrentHashMap<>(); + private final ConcurrentHashMap toolCache = new ConcurrentHashMap<>(); + + public StreamableHttpClientManager(OpenAIConfig config, ObjectMapper objectMapper) { + this.config = config; + this.objectMapper = objectMapper; + } + public void init() { + System.out.println("初始化 StreamableHttpClientManager,配置: " + config); + Set uniqueUrls = new HashSet<>(config.getStreamableTools().values()); + for (String url : uniqueUrls) { + try { + StreamableMcpClient client = getOrCreateClient(url); + client.initSession().block(Duration.ofSeconds(config.getStreamableHttp().getConnectionTimeoutSeconds())); + log.info("已获取会话 ID: {}", client.getSessionId()); + JsonNode toolsResponse = client.listTools().block(Duration.ofSeconds(config.getStreamableHttp().getRequestTimeoutSeconds())); + log.info("从 {} 获取工具列表成功,响应: {}", url, toolsResponse); + if (toolsResponse != null && toolsResponse.has("tools") && toolsResponse.get("tools").isArray()) { + for (JsonNode toolNode : toolsResponse.get("tools")) { + RemoteToolDefinition def = new RemoteToolDefinition(); + def.setName(toolNode.get("name").asText()); + if (toolNode.has("description")) { + def.setDescription(toolNode.get("description").asText()); + } + def.setParameters(toolNode.get("inputSchema")); // 注意字段名可能为 inputSchema + def.setServerUrl(url); + toolCache.put(def.getName(), def); + log.info("缓存远程工具: {} (来自 {})", def.getName(), url); + } + } else { + log.warn("从 {} 获取工具列表失败,响应格式异常", url); + } + } catch (Exception e) { + log.error("初始化服务 {} 失败: {}", url, e.getMessage()); + } + } + log.info("共缓存 {} 个远程工具定义", toolCache.size()); + } + + private StreamableMcpClient getOrCreateClient(String serverUrl) { + return clientCache.computeIfAbsent(serverUrl, url -> new StreamableMcpClient( + url, + config.getStreamableHttp().getProtocolVersion(), + config.getStreamableHttp().getConnectionTimeoutSeconds(), + config.getStreamableHttp().getRequestTimeoutSeconds() + )); + } + + public RemoteToolDefinition getToolDefinition(String toolName) { + return toolCache.get(toolName); + } + + public JsonNode callTool(String toolName, JsonNode arguments) { + RemoteToolDefinition def = toolCache.get(toolName); + if (def == null) { + throw new IllegalArgumentException("未找到远程工具定义: " + toolName); + } + StreamableMcpClient client = getOrCreateClient(def.getServerUrl()); + try { + return client.callTool(toolName, arguments) + .block(Duration.ofSeconds(config.getStreamableHttp().getRequestTimeoutSeconds())); + } catch (Exception e) { + log.error("调用远程工具失败: {}", toolName, e); + throw new RuntimeException("远程工具调用失败: " + e.getMessage(), e); + } + } + public String getSessionId(String serverUrl) { + StreamableMcpClient client = clientCache.get(serverUrl); + return client != null ? client.getSessionId() : null; + } + @PreDestroy + public void shutdown() { + clientCache.values().forEach(client -> { + try { + client.closeSession().block(Duration.ofSeconds(5)); + } catch (Exception e) { + log.warn("关闭客户端失败: {}", client.getServerUrl(), e); + } + }); + clientCache.clear(); + toolCache.clear(); + } + + +} diff --git a/base/src/main/java/com/tinyengine/it/mcp/core/StreamableMcpClient.java b/base/src/main/java/com/tinyengine/it/mcp/core/StreamableMcpClient.java new file mode 100644 index 00000000..b5a015b4 --- /dev/null +++ b/base/src/main/java/com/tinyengine/it/mcp/core/StreamableMcpClient.java @@ -0,0 +1,453 @@ +package com.tinyengine.it.mcp.core; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import io.netty.channel.ChannelOption; +import jakarta.annotation.Nullable; +import lombok.Data; +import lombok.Getter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.client.reactive.ReactorClientHttpConnector; +import org.springframework.http.codec.ServerSentEvent; +import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.web.reactive.function.client.ClientResponse; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; +import reactor.core.publisher.Sinks; +import reactor.netty.http.client.HttpClient; +import reactor.util.retry.Retry; + +import java.time.Duration; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; + +/** + * 支持 Streamable HTTP 的 MCP 客户端 + * 统一端点处理所有请求,支持会话管理和动态流升级 + */ + +public class StreamableMcpClient { + private static final Logger log = LoggerFactory.getLogger(StreamableMcpClient.class); + + @Getter + private final String serverUrl; + private final String protocolVersion; + private final Duration requestTimeout; + private final ObjectMapper objectMapper; + private final WebClient webClient; + + private final AtomicReference sessionIdRef = new AtomicReference<>(); + private final AtomicInteger requestIdGen = new AtomicInteger(1); + private final ConcurrentHashMap> pendingRequests = new ConcurrentHashMap<>(); + private volatile Flux> sseFlux; + + /** + * 构造 Streamable MCP 客户端 + * + * @param serverUrl MCP 服务器端点(如 https://example.com/mcp) + * @param protocolVersion 协议版本(如 "2025-06-18") + * @param connectionTimeoutSeconds 连接超时(秒) + * @param requestTimeoutSeconds 请求超时(秒) + */ + public StreamableMcpClient(String serverUrl, String protocolVersion, + int connectionTimeoutSeconds, int requestTimeoutSeconds) { + this.serverUrl = serverUrl; + this.protocolVersion = protocolVersion; + this.requestTimeout = Duration.ofSeconds(requestTimeoutSeconds); + this.objectMapper = new ObjectMapper(); + + // 1. 创建 Netty HttpClient,配置自动重定向和超时 + HttpClient httpClient = HttpClient.create() + .followRedirect(true) // 自动处理 307 重定向 + .responseTimeout(Duration.ofSeconds(requestTimeoutSeconds)) + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectionTimeoutSeconds * 1000); // 连接超时(毫秒) + + // 2. 使用 ReactorClientHttpConnector 包装 HttpClient + ReactorClientHttpConnector connector = new ReactorClientHttpConnector(httpClient); + this.webClient = WebClient.builder() + .baseUrl(serverUrl) + .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .defaultHeader("MCP-Protocol-Version", protocolVersion) + .defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE + ", " + MediaType.TEXT_EVENT_STREAM_VALUE) + .clientConnector(connector) + .build(); + } + + // ========== 公共 API ========== + + /** + * 初始化会话(发送 initialize 请求) + */ + public Mono initSession() { + // 构建 initialize 参数 + ObjectNode params = objectMapper.createObjectNode(); + params.put("protocolVersion", this.protocolVersion); // 例如 "2025-06-18" + + // 客户端信息 + ObjectNode clientInfo = objectMapper.createObjectNode(); + clientInfo.put("name", "StreamableMcpClient"); + clientInfo.put("version", "1.0.0"); + params.set("clientInfo", clientInfo); + + // 客户端能力 + ObjectNode capabilities = objectMapper.createObjectNode(); + ObjectNode toolsCap = objectMapper.createObjectNode(); + toolsCap.put("listChanged", true); + capabilities.set("tools", toolsCap); + params.set("capabilities", capabilities); + return sendRequest("initialize", params).then(); + } + + /** + * 发送 JSON-RPC 请求,自动管理会话 ID 和流式响应 + * + * @param method 方法名(如 "tools/list") + * @param params 参数(可为 null) + * @return 响应结果的 Mono + */ + public Mono sendRequest(String method, @Nullable Object params) { + int requestId = requestIdGen.getAndIncrement(); + ObjectNode requestBody = createRequestBody(method, params, requestId); + log.info("发送请求 [id={}, method={}]", requestId, method); + log.info("请求体: {}", requestBody); + + // 创建 sink 用于接收最终响应 + Sinks.One sink = Sinks.one(); + pendingRequests.put(requestId, sink); + + return doSendRequest(requestBody, requestId) + .timeout(requestTimeout) + .onErrorResume(e -> { + pendingRequests.remove(requestId); + return Mono.error(e); + }) + .then(sink.asMono()); + } + + public Mono sendGetRequest(String method, @Nullable Object params) { + int requestId = requestIdGen.getAndIncrement(); + ObjectNode requestBody = createRequestBody(method, params, requestId); + log.info("发送请求 [id={}, method={}]", requestId, method); + log.info("请求体: {}", requestBody); + + // 创建 sink 用于接收最终响应 + Sinks.One sink = Sinks.one(); + pendingRequests.put(requestId, sink); + + return doGetRequest(requestBody, requestId) + .timeout(requestTimeout) + .onErrorResume(e -> { + pendingRequests.remove(requestId); + return Mono.error(e); + }) + .then(sink.asMono()); + } + + /** + * 主动建立 SSE 流,用于接收服务器后续推送(如进度通知) + */ + public Flux> connectStream() { + if (sseFlux == null) { + synchronized (this) { + if (sseFlux == null) { + sseFlux = createStream(); + } + } + } + return sseFlux; + } + + /** + * 关闭当前会话,释放服务器资源 + */ + public Mono closeSession() { + String sessionId = sessionIdRef.get(); + if (sessionId == null) { + return Mono.empty(); + } + return webClient.delete() + .headers(headers -> headers.set("Mcp-Session-Id", sessionId)) + .retrieve() + .toBodilessEntity() + .doOnSuccess(resp -> { + log.info("会话已关闭: {}", sessionId); + sessionIdRef.set(null); + }) + .then(); + } + + // ========== 便捷工具方法 ========== + + public Mono listTools() { + return sendRequest("tools/list", null); + + } + public JsonNode listTools(int requestTimeoutSeconds) { + return webClient.get() + .uri("tools/list") + .accept(MediaType.APPLICATION_JSON,MediaType.TEXT_EVENT_STREAM) + .headers(headers -> { + String sessionId = sessionIdRef.get(); + if (sessionId != null) { + headers.set("Mcp-Session-Id", sessionId); + } + }) + .exchangeToMono(response -> { + updateSessionId(response.headers().asHttpHeaders()); + + if (response.statusCode().is2xxSuccessful()) { + return response.bodyToMono(JsonNode.class); + } else if (response.statusCode() == HttpStatus.CONFLICT) { + // 409 表示服务器认为已存在活跃 SSE 流,可能是在同一个会话中重复请求 + // 等待短暂时间后重试 + return Mono.delay(Duration.ofMillis(500)) + .then(Mono.error(new RuntimeException("Conflict, retry later"))); + } else { + return response.bodyToMono(String.class) + .flatMap(errorBody -> Mono.error(new RuntimeException( + "获取工具列表失败,HTTP " + response.statusCode() + ": " + errorBody))); + } + }) + .retryWhen(Retry.backoff(2, Duration.ofSeconds(1)) + .maxBackoff(Duration.ofSeconds(3)) + .filter(throwable -> throwable.getMessage().contains("Conflict")) + .doBeforeRetry(rs -> log.warn("重试获取工具列表,尝试次数: {}", rs.totalRetries() + 1))) + .timeout(Duration.ofSeconds(requestTimeoutSeconds)) + .doOnSuccess(json -> log.debug("成功获取工具列表,共 {} 个工具", + json != null && json.isArray() ? json.size() : 0)) + .doOnError(e -> log.error("获取工具列表最终失败: {}", e.getMessage())) + .block(); + } + public JsonNode fetchToolsList(int requestTimeoutSeconds) { + try { + return webClient.get() + .uri("tools/list") + .accept(MediaType.APPLICATION_JSON) + .headers(headers -> { + String sid = sessionIdRef.get(); + if (sid != null) { + headers.set("Mcp-Session-Id", sid); + } + }) + .retrieve() + .bodyToMono(JsonNode.class) + .block(Duration.ofSeconds(requestTimeoutSeconds)); + } catch (Exception e) { + log.error("获取工具列表失败", e); + throw new RuntimeException("无法获取工具列表: " + e.getMessage(), e); + } + } + public Mono callTool(String toolName, JsonNode arguments) { + ObjectNode params = objectMapper.createObjectNode(); + params.put("name", toolName); + params.set("arguments", arguments); + return sendRequest("tools/call", params); + } + + // ========== 内部实现 ========== + + /** + * 实际发送 HTTP 请求 + */ + private Mono doSendRequest(ObjectNode requestBody, int requestId) { + return webClient.post() + .accept(MediaType.APPLICATION_JSON,MediaType.TEXT_EVENT_STREAM) + .body(BodyInserters.fromValue(requestBody)) + .headers(headers -> { + String sessionId = sessionIdRef.get(); + if (sessionId != null) { + headers.set("Mcp-Session-Id", sessionId); + } + }) + .exchangeToMono(response -> { + // 更新会话 ID + updateSessionId(response.headers().asHttpHeaders()); + + if (response.statusCode() == HttpStatus.ACCEPTED) { + // 202 Accepted:升级为流式响应 + return handleStreamingResponse(response, requestId); + } else if (response.statusCode().is2xxSuccessful()) { + // 普通 JSON 响应 + return handleNormalResponse(response, requestId); + } else { + return handleErrorResponse(response); + } + }) + .doOnError(e -> { + log.error("请求失败 [id={}]", requestId, e); + Sinks.One sink = pendingRequests.remove(requestId); + if (sink != null) { + sink.tryEmitError(e); + } + }); + } + + private Mono doGetRequest(ObjectNode requestBody,int requestId) { + return webClient.get() + .accept(MediaType.APPLICATION_JSON,MediaType.TEXT_EVENT_STREAM) + .headers(headers -> { + String sessionId = sessionIdRef.get(); + if (sessionId != null) { + headers.set("Mcp-Session-Id", sessionId); + } + }) + .exchangeToMono(response -> { + // 更新会话 ID + updateSessionId(response.headers().asHttpHeaders()); + + if (response.statusCode() == HttpStatus.ACCEPTED) { + // 202 Accepted:升级为流式响应 + return handleStreamingResponse(response, requestId); + } else if (response.statusCode().is2xxSuccessful()) { + // 普通 JSON 响应 + return handleNormalResponse(response, requestId); + } else { + return handleErrorResponse(response); + } + }) + .doOnError(e -> { + log.error("请求失败 [id={}]", requestId, e); + Sinks.One sink = pendingRequests.remove(requestId); + if (sink != null) { + sink.tryEmitError(e); + } + }); + } + + /** + * 处理普通 JSON 响应(ClientResponse 版本) + */ + private Mono handleNormalResponse(ClientResponse response, int requestId) { + return response.bodyToMono(JsonNode.class) + .doOnNext(json -> { + log.debug("收到普通响应 [id={}]: {}", requestId, json); + Sinks.One sink = pendingRequests.remove(requestId); + if (sink != null) { + if (json.has("error")) { + JsonNode error = json.get("error"); + String msg = error.path("message").asText(); + String data = error.path("data").isMissingNode() ? "" : error.path("data").toString(); + sink.tryEmitError(new RuntimeException("JSON-RPC error: " + msg + " - " + data)); + } else { + sink.tryEmitValue(json); + } + } + }) + .then(); + } + + /** + * 处理流式响应(202 Accepted) + */ + + private Mono handleStreamingResponse(ClientResponse response, int requestId) { + return response.bodyToFlux(new ParameterizedTypeReference>() { + }) + .doOnNext(this::handleServerSentEvent) + .doOnComplete(() -> log.debug("SSE流结束 [id={}]", requestId)) + .then(); + } + + /** + * 处理错误响应 + */ + private Mono handleErrorResponse(ClientResponse response) { + return response.bodyToMono(String.class) + .flatMap(errorBody -> { + log.error("HTTP错误 [{}]: {}", response.statusCode(), errorBody); + return Mono.error(new RuntimeException( + "HTTP " + response.statusCode() + ": " + errorBody)); + }); + } + + /** + * 处理服务器推送的 SSE 事件 + */ + private void handleServerSentEvent(ServerSentEvent sse) { + if (sse.data() == null) return; + try { + JsonNode event = objectMapper.readTree(sse.data()); + if (event.has("id")) { + int respId = event.get("id").asInt(); + Sinks.One sink = pendingRequests.remove(respId); + if (sink != null) { + if (event.has("error")) { + sink.tryEmitError(new RuntimeException(event.get("error").toString())); + } else { + sink.tryEmitValue(event); + } + } + } else if (event.has("method")) { + // 服务器发起的通知,可根据需要处理 + log.info("收到服务器通知: {}", event); + // TODO: 可回复 acknowledgement + } + } catch (Exception e) { + log.error("解析 SSE 事件失败", e); + } + } + + /** + * 创建 JSON-RPC 请求体 + */ + private ObjectNode createRequestBody(String method, @Nullable Object params, int id) { + ObjectNode node = objectMapper.createObjectNode(); + node.put("jsonrpc", "2.0"); + node.put("method", method); + node.put("id", id); + if (params == null) { + node.set("params", objectMapper.createObjectNode()); + } else { + node.set("params", objectMapper.valueToTree(params)); + } + return node; + } + + /** + * 从响应头更新会话 ID + */ + private void updateSessionId(HttpHeaders headers) { + String newId = headers.getFirst("Mcp-Session-Id"); + log.info("响应头: {}", headers); + if (newId != null) { + String oldId = sessionIdRef.getAndSet(newId); + if (oldId == null) { + log.info("会话ID已设置: {}", newId); + } else if (!oldId.equals(newId)) { + log.warn("会话ID变更: {} -> {}", oldId, newId); + } + } + } + public String getSessionId() { + return sessionIdRef.get(); + } + /** + * 创建并配置主动 SSE 流 + */ + private Flux> createStream() { + return webClient.get() + .headers(headers -> { + String sessionId = sessionIdRef.get(); + if (sessionId != null) { + headers.set("Mcp-Session-Id", sessionId); + } + }) + .retrieve() + .bodyToFlux(new ParameterizedTypeReference>() { + }) + .doOnNext(this::handleServerSentEvent) + .doOnError(e -> log.error("SSE流异常", e)) + .share(); + } + + + +} \ No newline at end of file diff --git a/base/src/main/java/com/tinyengine/it/mcp/tools/DemoMcpTools.java b/base/src/main/java/com/tinyengine/it/mcp/tools/DemoMcpTools.java new file mode 100644 index 00000000..9d5d348d --- /dev/null +++ b/base/src/main/java/com/tinyengine/it/mcp/tools/DemoMcpTools.java @@ -0,0 +1,45 @@ +package com.tinyengine.it.mcp.tools; +import org.springframework.ai.tool.annotation.Tool; +import org.springframework.ai.tool.annotation.ToolParam; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; + +@Service +public class DemoMcpTools { + + @Tool(description = "获取当前服务器时间",name = "current_time") + public String getCurrentTime() { + return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } + + @Tool(description = "计算两个数字的和",name = "calculate_sum") + public int calculateSum( + @ToolParam(description = "第一个数字") int a, + @ToolParam(description = "第二个数字") int b) { + return a + b; + } + + @Tool(description = "获取天气信息",name = "get_weather") + public String getWeather( + @ToolParam(description = "城市名称") String city) { + // 模拟天气查询 + Map weatherMap = new HashMap<>(); + weatherMap.put("北京", "晴天 25°C"); + weatherMap.put("上海", "多云 22°C"); + weatherMap.put("广州", "阵雨 28°C"); + weatherMap.put("深圳", "晴天 27°C"); + + return weatherMap.getOrDefault(city, "未知城市: " + city + ",请尝试北京、上海、广州、深圳"); + } + + @Tool(description = "发送通知消息",name = "send_notification") + public String sendNotification( + @ToolParam(description = "接收者") String recipient, + @ToolParam(description = "消息内容") String message) { + return String.format("已发送通知给 %s: %s", recipient, message); + } +} diff --git a/base/src/main/java/com/tinyengine/it/mcp/tools/GitFileReaderService.java b/base/src/main/java/com/tinyengine/it/mcp/tools/GitFileReaderService.java new file mode 100644 index 00000000..23dd37e3 --- /dev/null +++ b/base/src/main/java/com/tinyengine/it/mcp/tools/GitFileReaderService.java @@ -0,0 +1,391 @@ +package com.tinyengine.it.mcp.tools; + +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.core.type.TypeReference; +import com.tinyengine.it.common.base.Result; +import com.tinyengine.it.common.exception.ExceptionEnum; +import com.tinyengine.it.common.utils.JsonUtils; +import com.tinyengine.it.mapper.ComponentLibraryMapper; +import com.tinyengine.it.mapper.ComponentMapper; +import com.tinyengine.it.mcp.annotation.MCPTool; +import com.tinyengine.it.model.dto.*; +import com.tinyengine.it.model.entity.Component; +import com.tinyengine.it.model.entity.ComponentLibrary; +import com.tinyengine.it.model.entity.MaterialComponent; +import com.tinyengine.it.model.entity.MaterialHistoryComponent; + +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.LocalDateTime; +import java.util.*; + + +@Service +public class GitFileReaderService { + + private static final Logger log = LoggerFactory.getLogger(GitFileReaderService.class); + + private static final int CONNECT_TIMEOUT = 30000; + private static final int READ_TIMEOUT = 30000; + @Autowired + private ComponentLibraryMapper componentLibraryMapper; + @Autowired + private ComponentMapper baseMapper; + + @MCPTool(name="bundle_create",description = "给定的Raw GitHub URL 读取内容.") + public String readFileFromRepo(String rawGitHubUrl) { + try { + JSONObject arg = JSONObject.parseObject(rawGitHubUrl); + rawGitHubUrl = (String) arg.get("rawGitHubUrl"); + log.info("准备从 Raw GitHub URL {} 中读取文件内容", rawGitHubUrl); + // 1. 克隆远程仓库并读取文件内容(字节数组) + //byte[] fileBytes = readFileFromRemoteRepo(repoUrl, filePath); + //1.从给定的 Raw GitHub URL 读取内容 + byte[] fileBytes = fetchBytes(rawGitHubUrl); + + // 2. 获取文件名和json内容 + JsonFile jsonFile = new JsonFile(); + URI uri = new URI(rawGitHubUrl); + String path = uri.getPath(); // 获取路径部分,例如 /opentiny/tiny-engine/main/designer-demo/public/mock/bundle.json + if (path == null || path.isEmpty()) { + return ""; + } + String fileName = Path.of(path).getFileName().toString(); + String jsonContent = new String(fileBytes, StandardCharsets.UTF_8); + + String jsonString = removeBOM(jsonContent); + Map jsonData = + JsonUtils.MAPPER.readValue(jsonString, new TypeReference>() { + }); + + jsonFile.setFileName(fileName); + jsonFile.setFileContent(jsonData); + + // 获取组件数据 + Object dataObj = jsonFile.getFileContent().get("data"); + Map data = new HashMap<>(); + + if (dataObj instanceof Map) { + data = (Map) dataObj; + } + BundleDto bundleDto = BeanUtil.mapToBean(data, BundleDto.class, true); + Result bundleResultDtoResult = parseBundle(bundleDto); + log.info("从Raw GitHub URL {} 中读取文件 '{}' 的内容并解析完成", rawGitHubUrl, path); + log.info("组件列表: {}", bundleResultDtoResult.getData().getComponentList()); + + BundleResultDto bundleResultDto = bundleResultDtoResult.getData(); + List componentList = bundleResultDto.getComponentList(); + List packageList = bundleResultDto.getPackageList(); + if (packageList == null || packageList.isEmpty()) { + FileResult fileResult = bulkCreate(componentList); + return JsonUtils.mapper().writeValueAsString(fileResult); + + } + log.info("开始遍历: {}", packageList); + for (ComponentLibrary componentLibrary : packageList) { + componentLibrary.setIsDefault(true); + componentLibrary.setIsStarted(true); + componentLibrary.setIsOfficial(true); + ComponentLibrary library = new ComponentLibrary(); + library.setName(componentLibrary.getName()); + // 默认覆盖更新 其他业务需求多版本组件可放开 library.setVersion(componentLibrary.getVersion()); + // 查询是否存在组件库 + List componentLibraryList = componentLibraryMapper.queryComponentLibraryByCondition( + library); + log.info("查询组件库: {}, 结果: {}", library, componentLibraryList); + int result = 0; + if (!componentLibraryList.isEmpty()) { + componentLibrary.setId(componentLibraryList.get(0).getId()); + result = componentLibraryMapper.updateComponentLibraryById(componentLibrary); + if (result != 1) { + throw new Exception("更新失败:" + result); + } + continue; + } + result = componentLibraryMapper.createComponentLibrary(componentLibrary); + if (result != 1) { + throw new Exception("createComponentLibrary失败:" + result); + } + } + FileResult fileResult = bulkCreate(componentList); + return JsonUtils.mapper().writeValueAsString(fileResult); + } catch (Exception e) { + e.printStackTrace(); + log.error("从Raw GitHub URL {} 中读取文件 '{}' 失败: {}", rawGitHubUrl, "bundle.json", e.getMessage()); + return "Error: " + e.getMessage(); + } + + + } + + + + /** + * 从给定的 Raw GitHub URL 读取内容并返回字节数组 + * @param urlString Raw 内容链接 + * @return 文件内容的字节数组 + * @throws IOException 网络或IO错误 + */ + public static byte[] fetchBytes(String urlString) throws IOException { + log.info("开始从 Raw GitHub URL {} 中读取内容", urlString); + URL url = new URL(urlString); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.setConnectTimeout(CONNECT_TIMEOUT); + connection.setReadTimeout(READ_TIMEOUT); + connection.setRequestProperty("User-Agent", "Java-URL-Client"); + + try { + int responseCode = connection.getResponseCode(); + if (responseCode != HttpURLConnection.HTTP_OK) { + throw new IOException("HTTP response code: " + responseCode); + } + + try (InputStream inputStream = connection.getInputStream(); + ByteArrayOutputStream baos = new ByteArrayOutputStream()) { + byte[] buffer = new byte[8192]; + int len; + while ((len = inputStream.read(buffer)) != -1) { + baos.write(buffer, 0, len); + } + return baos.toByteArray(); + } + } finally { + connection.disconnect(); + } + } + /** + * 通过浅克隆仓库到临时目录,以字节数组形式读取指定文件 + * + * @param gitUrl Git 仓库地址(如 https://github.com/opentiny/tiny-engine.git) + * @param filePath 文件在仓库中的相对路径,如 "README.md" + * @param branch 分支名,如 "main" + * @return 文件的原始字节内容 + */ + public static byte[] getFileBytesViaClone(String gitUrl, String filePath, String branch) + throws GitAPIException, IOException, URISyntaxException { + + // 1. 创建临时目录 + Path tempDir = Files.createTempDirectory("git-clone-"); + + try { + // 2. 浅克隆指定分支(depth=1 只拉取最新快照,不含完整历史) + System.out.println("正在克隆仓库到临时目录: " + tempDir); + try (Git git = Git.cloneRepository() + .setURI(gitUrl) + .setDirectory(tempDir.toFile()) + .setBranch(branch) + .setDepth(1) + .setCloneAllBranches(false) + .call()) { + System.out.println("克隆完成。"); + } + + // 3. 读取目标文件为字节数组(不做任何字符编码转换) + Path targetFile = tempDir.resolve(filePath); + if (!Files.exists(targetFile)) { + throw new IOException("文件不存在于仓库中: " + filePath); + } + return Files.readAllBytes(targetFile); + + } finally { + // 4. 清理临时目录 + if (Files.exists(tempDir)) { + Files.walk(tempDir) + .sorted(Comparator.reverseOrder()) + .forEach(path -> { + try { + Files.delete(path); + } catch (IOException e) { + System.err.println("删除临时文件失败: " + path); + } + }); + System.out.println("临时目录已清理。"); + } + } + } + + + private void deleteDirectory(java.io.File dir) { + if (dir.isDirectory()) { + java.io.File[] children = dir.listFiles(); + if (children != null) { + for (java.io.File child : children) { + deleteDirectory(child); + } + } + } + dir.delete(); + } + + + public static String removeBOM(String input) { + if (input != null && input.startsWith("\uFEFF")) { + return input.substring(1); + } + return input; + } + private String toPascalCase(String input) { + if (input == null || input.isEmpty()) { + return input; + } + StringBuilder result = new StringBuilder(); + boolean isNextUpper = true; + for (char c : input.toCharArray()) { + if (isNextUpper) { + result.append(Character.toUpperCase(c)); + isNextUpper = false; + } else { + result.append(Character.toLowerCase(c)); + } + } + return result.toString(); + } + private List buildComponentList(BundleDto bundleDto, List> components, + List snippets) { + List componentList = new ArrayList<>(); + for (Map comp : components) { + Component component = BeanUtil.mapToBean(comp, Component.class, true); + component.setId(null); + component.setIsDefault(true); + component.setIsOfficial(true); + component.setDevMode("proCode"); + component.setFramework(bundleDto.getFramework()); + component.setPublicStatus(1); + component.setIsTinyReserved(false); + Object schemaObject = comp.get("schema"); + if (schemaObject instanceof Map) { + component.setSchemaFragment((Map) schemaObject); + } + if (snippets == null || snippets.isEmpty()) { + componentList.add(component); + continue; + } + for (Child child : snippets) { + Snippet snippet = child.getChildren().stream() + .filter(item -> toPascalCase(comp.get("component").toString()) + .equals(toPascalCase(item.getSnippetName()))) + .findFirst() + .orElse(null); + + if (snippet == null) { + continue; + } + Map snippetMap = BeanUtil.beanToMap(snippet); + component.setSnippets(Arrays.asList(snippetMap)); + if (Objects.isNull(component.getCategory())) { + component.setCategory(child.getGroup()); + } + } + componentList.add(component); + } + return componentList; + } + + public Result parseBundle(BundleDto bundleDto) { + List> components = bundleDto.getMaterials().getComponents(); + List snippets = bundleDto.getMaterials().getSnippets(); + + if (components == null || components.isEmpty()) { + return Result.failed(ExceptionEnum.CM009); + } + List componentList = buildComponentList(bundleDto, components, snippets); + List> packages = bundleDto.getMaterials().getPackages(); + + BundleResultDto bundleList = new BundleResultDto(); + bundleList.setComponentList(componentList); + if (null == packages || packages.isEmpty()) { + return Result.success(bundleList); + } + List packageList = new ArrayList<>(); + for (Map library : packages) { + ComponentLibrary componentLibrary = BeanUtil.mapToBean(library, ComponentLibrary.class, true); + componentLibrary.setPackageName(String.valueOf(library.get("package"))); + componentLibrary.setFramework("Vue"); + packageList.add(componentLibrary); + } + bundleList.setPackageList(packageList); + return Result.success(bundleList); + } + + + public FileResult bulkCreate(List componentList) { + int addNum = 0; + int updateNum = 0; + for (Component component : componentList) { + // 构建查询条件,假设 key 作为唯一键 + // 查询数据库中是否存在该记录 + Component componentParam = new Component(); + componentParam.setComponent(component.getComponent()); + componentParam.setName(component.getName()); + componentParam.setVersion(component.getVersion()); + List queryComponent = baseMapper.queryComponentByCondition(componentParam); + // 查询组件库id + String packageName = null; + if (component.getNpm() != null && component.getNpm().get("package") != null) { + packageName = String.valueOf(component.getNpm().get("package")); + } + if (packageName != null && !packageName.isEmpty()) { + ComponentLibrary componentLibrary = new ComponentLibrary(); + componentLibrary.setPackageName(String.valueOf(component.getNpm().get("package"))); + componentLibrary.setVersion(component.getVersion()); + List componentLibraryList = componentLibraryMapper.queryComponentLibraryByCondition( + componentLibrary); + Integer componentLibraryId = null; + if (!componentLibraryList.isEmpty()) { + componentLibraryId = componentLibraryList.get(0).getId(); + } + component.setLibraryId(componentLibraryId); + } + + if (queryComponent.isEmpty()) { + // 插入新记录 + Integer result = baseMapper.createComponent(component); + if (result == 1) { + MaterialComponent materialComponent = new MaterialComponent(); + materialComponent.setMaterialId(1); + materialComponent.setComponentId(component.getId()); + baseMapper.createMaterialComponent(materialComponent); + MaterialHistoryComponent materialHistoryComponent = new MaterialHistoryComponent(); + materialHistoryComponent.setComponentId(component.getId()); + materialHistoryComponent.setMaterialHistoryId(1); + baseMapper.createMaterialHistoryComponent(materialHistoryComponent); + } + addNum = addNum + 1; + } else { + // 更新记录 + component.setId(queryComponent.get(0).getId()); + component.setLastUpdatedTime(LocalDateTime.now()); + baseMapper.updateComponentById(component); + updateNum = updateNum + 1; + } + } + + // 构造返回插入和更新的条数 + FileResult fileResult = new FileResult(); + fileResult.setInsertNum(addNum); + fileResult.setUpdateNum(updateNum); + return fileResult; + } + + + + +} diff --git a/base/src/main/java/com/tinyengine/it/service/app/impl/v1/AiChatV1ServiceImpl.java b/base/src/main/java/com/tinyengine/it/service/app/impl/v1/AiChatV1ServiceImpl.java index 2d5d88a9..850abf96 100644 --- a/base/src/main/java/com/tinyengine/it/service/app/impl/v1/AiChatV1ServiceImpl.java +++ b/base/src/main/java/com/tinyengine/it/service/app/impl/v1/AiChatV1ServiceImpl.java @@ -13,14 +13,23 @@ package com.tinyengine.it.service.app.impl.v1; import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.tinyengine.it.common.exception.ServiceException; import com.tinyengine.it.common.log.SystemServiceLog; import com.tinyengine.it.common.utils.JsonUtils; import com.tinyengine.it.common.utils.SM4Utils; import com.tinyengine.it.config.OpenAIConfig; +import com.tinyengine.it.mcp.core.MCPToolDefinition; +import com.tinyengine.it.mcp.core.MCPToolRegistry; +import com.tinyengine.it.mcp.core.RemoteToolDefinition; +import com.tinyengine.it.mcp.core.StreamableHttpClientManager; import com.tinyengine.it.model.dto.ChatRequest; import com.tinyengine.it.service.app.v1.AiChatV1Service; import lombok.extern.slf4j.Slf4j; + +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; @@ -43,10 +52,26 @@ @Slf4j @Service public class AiChatV1ServiceImpl implements AiChatV1Service { - private final OpenAIConfig config = new OpenAIConfig(); - private HttpClient httpClient = HttpClient.newBuilder() - .connectTimeout(Duration.ofSeconds(config.getTimeoutSeconds())) + + private static final double DEFAULT_TEMPERATURE = 0.7; + private static final int DEFAULT_MAX_TOKENS = 1000; + + private final MCPToolRegistry toolRegistry; + private final ObjectMapper objectMapper; + private final OpenAIConfig openAIConfig; + private final HttpClient httpClient; + + + public AiChatV1ServiceImpl(MCPToolRegistry toolRegistry, + ObjectMapper objectMapper, + OpenAIConfig openAIConfig) { + this.toolRegistry = toolRegistry; + this.objectMapper = objectMapper; + this.openAIConfig = openAIConfig; + this.httpClient = HttpClient.newBuilder() + .connectTimeout(Duration.ofSeconds(openAIConfig.getTimeoutSeconds())) .build(); + } /** * chatCompletion. @@ -57,13 +82,20 @@ public class AiChatV1ServiceImpl implements AiChatV1Service { @Override @SystemServiceLog(description = "chatCompletion") public Object chatCompletion(ChatRequest request) throws Exception { - String requestBody = buildRequestBody(request); - String encryptApiKey = request.getApiKey() != null ? request.getApiKey() : config.getApiKey(); + log.info("base url: "+openAIConfig.getBaseUrl()); + log.info("Streamable tools config: {}", openAIConfig.getStreamableTools()); + log.info("Received chatCompletion request: model={}, stream={}, tools={}", + request.getModel(), request.isStream(), request.getTools()); + // 1. 确定 API Key 和 Base URL + String encryptApiKey = request.getApiKey() != null ? request.getApiKey() : openAIConfig.getApiKey(); String apiKey = getApiKey(encryptApiKey); - String baseUrl = request.getBaseUrl(); - + String baseUrl = request.getBaseUrl() != null ? request.getBaseUrl() : openAIConfig.getBaseUrl(); // 规范化URL处理 String normalizedUrl = normalizeApiUrl(baseUrl); + // 2. 构建初始请求体 + String requestBody = buildRequestBody(request); + + HttpRequest.Builder requestBuilder = HttpRequest.newBuilder() .uri(URI.create(normalizedUrl)) @@ -71,9 +103,25 @@ public Object chatCompletion(ChatRequest request) throws Exception { .header("Authorization", "Bearer " + apiKey) .POST(HttpRequest.BodyPublishers.ofString(requestBody)); if (request.isStream()) { - requestBuilder.header("Accept", "text/event-stream"); - return processStreamResponse(requestBuilder); + if(request.getTools() != null ) { + log.info("流式请求不支持工具调用,已自动切换为非流式模式"); + request.setStream(false); + String finalAnswer = (String) processNonStreamWithTools(requestBuilder, request); + // 将最终回答包装成 SSE 格式的 StreamingResponseBody + return (StreamingResponseBody) outputStream -> { + System.out.println("Final answer: " + finalAnswer); + outputStream.write(("data: " + finalAnswer + "\n\n").getBytes(StandardCharsets.UTF_8)); + outputStream.write("data: [DONE]\n\n".getBytes(StandardCharsets.UTF_8)); + outputStream.flush(); + }; + }else{ + log.info("处理流式请求,URL: {}", normalizedUrl); + requestBuilder.header("Accept", "text/event-stream"); + return processStreamResponse(requestBuilder); + } + } else { + return processStandardResponse(requestBuilder); } } @@ -96,7 +144,7 @@ public String getToken(String apiKey) throws Exception { */ private String normalizeApiUrl(String baseUrl) { if (baseUrl == null || baseUrl.trim().isEmpty()) { - baseUrl = config.getBaseUrl(); + baseUrl = openAIConfig.getBaseUrl(); } baseUrl = baseUrl.trim(); @@ -125,9 +173,97 @@ private String ensureUrlProtocol(String url) { return "https://" + url; } - private String buildRequestBody(ChatRequest request) { + // 构建请求体(仅处理本地工具) + private String buildRequestBody(ChatRequest request) throws Exception { + ObjectNode root = objectMapper.createObjectNode(); + root.put("model", request.getModel() != null ? request.getModel() : openAIConfig.getDefaultModel()); + root.put("stream", request.isStream()); + + if (request.getTemperature() != null) { + root.put("temperature", request.getTemperature()); + } else { + root.put("temperature", DEFAULT_TEMPERATURE); + } + if (request.getMaxTokens() != null) { + root.put("max_tokens", request.getMaxTokens()); + } else { + root.put("max_tokens", DEFAULT_MAX_TOKENS); + } + if (request.getPresencePenalty() != null) { + root.put("presence_penalty", request.getPresencePenalty()); + } + if (request.getFrequencyPenalty() != null) { + root.put("frequency_penalty", request.getFrequencyPenalty()); + } + if (request.getStop() != null) { + root.put("stop", request.getStop()); + } + if (request.getResponseFormat() != null) { + root.set("response_format", objectMapper.valueToTree(request.getResponseFormat())); + } + if (request.getToolChoice() != null) { + root.put("tool_choice", request.getToolChoice().toString()); + } + if (request.getParallelToolCalls() != null) { + root.put("parallel_tool_calls", request.getParallelToolCalls()); + } + if (request.getEnableSearch() != null) { + root.put("enable_search", request.getEnableSearch()); + } + if (request.getEnableThinking() != null) { + root.put("enable_thinking", request.getEnableThinking()); + } + + // 处理 messages + ArrayNode messagesArray = objectMapper.createArrayNode(); + if (request.getMessages() != null) { + JsonNode messagesNode = objectMapper.valueToTree(request.getMessages()); + if (messagesNode.isArray()) { + messagesArray = (ArrayNode) messagesNode; + } else { + throw new ServiceException("400", "messages must be an array"); + } + } + root.set("messages", messagesArray); + + // 处理 tools(仅本地工具) + if (request.getTools() != null) { + JsonNode toolsNode = objectMapper.valueToTree(request.getTools()); + if (toolsNode.isArray()) { + ArrayNode toolsArray = objectMapper.createArrayNode(); + for (JsonNode toolItem : toolsNode) { + String toolName = null; + if (toolItem.isTextual()) { + toolName = toolItem.asText(); + } else if (toolItem.isObject() && toolItem.has("name")) { + toolName = toolItem.get("name").asText(); + } else { + log.warn("无法识别的工具项: {}", toolItem); + continue; + } + + MCPToolDefinition localDef = toolRegistry.getTool(toolName); + if (localDef != null) { + toolsArray.add(convertToolToSchema(localDef)); + } else { + log.warn("本地工具 {} 未注册", toolName); + } + } + if (toolsArray.size() > 0) { + root.set("tools", toolsArray); + } + } else { + log.warn("tools 字段不是数组,忽略"); + } + } + + return objectMapper.writeValueAsString(root); + } + + + private String buildRequestBody2(ChatRequest request) { Map body = new HashMap<>(); - body.put("model", request.getModel() != null ? request.getModel() : config.getDefaultModel()); + body.put("model", request.getModel() != null ? request.getModel() : openAIConfig.getDefaultModel()); body.put("messages", request.getMessages()); body.put("stream", request.isStream()); body.put("tools", request.getTools()); @@ -174,7 +310,58 @@ private String buildRequestBody(ChatRequest request) { return JsonUtils.encode(body); } + /** + * 将本地工具定义转换为 OpenAI 函数格式 + * @param def 本地工具定义(来自 MCPToolRegistry) + * @return OpenAI 函数格式的 JSON 节点 + */ + private ObjectNode convertLocalToolToSchema(MCPToolDefinition def) { + ObjectNode toolNode = objectMapper.createObjectNode(); + toolNode.put("type", "function"); + ObjectNode function = objectMapper.createObjectNode(); + function.put("name", def.getName()); + function.put("description", def.getDescription()); + // 直接使用本地工具的 inputSchema(已经是 JSON Schema 对象) + function.set("parameters", def.getInputSchema()); + + toolNode.set("function", function); + return toolNode; + } + + /** + * 将远程工具定义转换为 OpenAI 函数格式 + * @param def 远程工具定义(从 MCP 服务器缓存获取) + * @return OpenAI 函数格式的 JSON 节点 + */ + private ObjectNode convertRemoteToolToSchema(RemoteToolDefinition def) { + ObjectNode toolNode = objectMapper.createObjectNode(); + toolNode.put("type", "function"); + + ObjectNode function = objectMapper.createObjectNode(); + function.put("name", def.getName()); + function.put("description", def.getDescription()); + // 远程工具的 parameters 字段就是 JSON Schema(可能包含 type: "object" 和 properties) + function.set("parameters", def.getParameters()); + + toolNode.set("function", function); + return toolNode; + } + /** + * 将本地工具定义转换为 OpenAI 函数格式 + */ + private ObjectNode convertToolToSchema(MCPToolDefinition def) { + ObjectNode toolNode = objectMapper.createObjectNode(); + toolNode.put("type", "function"); + + ObjectNode function = objectMapper.createObjectNode(); + function.put("name", def.getName()); + function.put("description", def.getDescription()); + function.set("parameters", def.getInputSchema()); + + toolNode.set("function", function); + return toolNode; + } private JsonNode processStandardResponse(HttpRequest.Builder requestBuilder) { HttpResponse response = null; String code = null; @@ -198,7 +385,120 @@ private JsonNode processStandardResponse(HttpRequest.Builder requestBuilder) { } + /** + * 非流式处理,支持多轮工具调用 + * 动态维护 messages 数组(ArrayNode) + */ + private Object processNonStreamWithTools(HttpRequest.Builder requestBuilder, ChatRequest originalRequest) throws Exception { + ArrayNode messagesArray; + if (originalRequest.getMessages() == null) { + messagesArray = objectMapper.createArrayNode(); + } else { + JsonNode messagesNode = objectMapper.valueToTree(originalRequest.getMessages()); + if (!messagesNode.isArray()) { + throw new ServiceException("400", "messages must be an array"); + } + messagesArray = (ArrayNode) messagesNode; + } + + while (true) { + originalRequest.setMessages(messagesArray); + String requestBody = buildRequestBody(originalRequest); + String apiKey = getApiKey(originalRequest.getApiKey() != null ? originalRequest.getApiKey() : openAIConfig.getApiKey()); + String baseUrl = originalRequest.getBaseUrl() != null ? originalRequest.getBaseUrl() : openAIConfig.getBaseUrl(); + requestBuilder = HttpRequest.newBuilder() + .uri(URI.create(normalizeApiUrl(baseUrl))) + .header("Content-Type", "application/json") + .header("Authorization", "Bearer " + apiKey) + .POST(HttpRequest.BodyPublishers.ofString(requestBody)); + + HttpRequest request = requestBuilder.build(); + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + + if (response.statusCode() != 200) { + handleErrorResponse(response); + return null; + } + + JsonNode root = objectMapper.readTree(response.body()); + JsonNode choices = root.get("choices"); + if (choices == null || choices.isEmpty()) { + throw new ServiceException("500", "Invalid LLM response: " + response.body()); + } + JsonNode messageJson = choices.get(0).get("message"); + log.info("LLM response message: {}", messageJson); + + ObjectNode assistantMsg = objectMapper.createObjectNode(); + assistantMsg.put("role", messageJson.get("role").asText()); + if (messageJson.has("content") && !messageJson.get("content").isNull()) { + assistantMsg.put("content", messageJson.get("content").asText()); + } + + JsonNode toolCallsJson = messageJson.get("tool_calls"); + if (toolCallsJson != null && toolCallsJson.isArray() && toolCallsJson.size() > 0) { + assistantMsg.set("tool_calls", toolCallsJson); + } + + messagesArray.add(assistantMsg); + + if (toolCallsJson == null || toolCallsJson.isEmpty()) { + return assistantMsg.has("content") ? assistantMsg.get("content").asText() : ""; + } + + // 执行工具调用(仅本地) + for (JsonNode tc : toolCallsJson) { + String toolCallId = tc.get("id").asText(); + JsonNode function = tc.get("function"); + String toolName = function.get("name").asText(); + String arguments = function.get("arguments").asText(); + + log.info("执行本地工具: {},参数: {}", toolName, arguments); + String toolResult = executeLocalTool(toolName, arguments); + + ObjectNode toolMsg = objectMapper.createObjectNode(); + toolMsg.put("role", "tool"); + toolMsg.put("tool_call_id", toolCallId); + toolMsg.put("content", toolResult); + messagesArray.add(toolMsg); + } + + originalRequest.setMessages(messagesArray); + } + } + + + private String executeLocalTool(String toolName, String argumentsJson) { + try { + MCPToolDefinition def = toolRegistry.getTool(toolName); + if (def == null) { + return "错误:未找到本地工具 " + toolName; + } + JsonNode args = objectMapper.readTree(argumentsJson); + Object result = def.execute(args); + return result instanceof String ? (String) result : objectMapper.writeValueAsString(result); + } catch (Exception e) { + log.error("本地工具执行失败", e); + return "工具执行错误: " + e.getMessage(); + } + } + /** + * 处理错误响应 + */ + private void handleErrorResponse(HttpResponse response) { + String code = String.valueOf(response.statusCode()); + String message; + try { + JsonNode errorNode = objectMapper.readTree(response.body()); + message = errorNode.path("error").path("message").asText("未知错误"); + } catch (Exception e) { + message = response.body(); + } + throw new ServiceException(code, message); + } + /** + * 流式响应处理(无工具调用) + */ private StreamingResponseBody processStreamResponse(HttpRequest.Builder requestBuilder) { return outputStream -> { HttpResponse response = null; diff --git a/pom.xml b/pom.xml index c651a73c..5cacd248 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,10 @@ 1.5.0-beta11 1.79 1.0-SNAPSHOT + 4.1.118.Final + 1.1.4 + + @@ -51,6 +55,12 @@ org.springframework.boot spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-webflux + org.springframework.boot @@ -68,6 +78,23 @@ druid-spring-boot-starter ${druid-spring-boot-starter.version} + + org.springframework.ai + spring-ai-starter-mcp-client + ${spring-ai.version} + + + org.springframework.ai + spring-ai-starter-mcp-server-webmvc + ${spring-ai.version} + + + + + org.eclipse.jgit + org.eclipse.jgit + 7.3.0.202506031305-r + com.alibaba @@ -188,7 +215,17 @@ netty-buffer ${netty-buffer.version} - + + io.netty + netty-bom + ${netty.version} + pom + import + + + io.netty + netty-all + io.jsonwebtoken jjwt