@opentiny/tiny-engine-plugin-model-manager 2.10.0-alpha.2 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +407 -400
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +5 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/ModelBasicForm.vue","../src/components/FieldManager.vue","../src/composable/useModelManager.js","../src/components/ModelSetting.vue","../src/Main.vue","../meta.js","../index.ts"],"sourcesContent":["<template>\n <div class=\"section\">\n <tiny-form\n ref=\"ruleFormRef\"\n :model=\"localValue\"\n :rules=\"rules\"\n label-width=\"120px\"\n validate-type=\"text\"\n :inline-message=\"true\"\n :label-align=\"true\"\n label-position=\"top\"\n >\n <div class=\"form-item\">\n <tiny-form-item label=\"中文名称\" prop=\"nameCn\">\n <tiny-input v-model=\"localValue.nameCn\" placeholder=\"请输入模型中文名称\" />\n </tiny-form-item>\n </div>\n <div class=\"form-item\">\n <tiny-form-item label=\"英文名称\" prop=\"nameEn\">\n <tiny-input v-model=\"localValue.nameEn\" placeholder=\"请输入模型英文名称\" />\n </tiny-form-item>\n </div>\n <div class=\"form-item\">\n <tiny-form-item label=\"版本号\" prop=\"version\">\n <tiny-input v-model=\"localValue.version\" placeholder=\"1.0.0\" />\n </tiny-form-item>\n </div>\n <div class=\"form-item\">\n <tiny-form-item label=\"模型地址\" prop=\"modelUrl\">\n <tiny-input v-model=\"localValue.modelUrl\" placeholder=\"请输入模型地址,如:https://api.example.com/model\" />\n </tiny-form-item>\n </div>\n <div class=\"form-item\">\n <tiny-form-item label=\"描述\" prop=\"description\">\n <tiny-input type=\"textarea\" :rows=\"3\" v-model=\"localValue.description\" placeholder=\"请输入模型描述\" />\n </tiny-form-item>\n </div>\n </tiny-form>\n </div>\n</template>\n\n<script setup>\nimport { ref, watch } from 'vue'\nimport { TinyInput, Form as TinyForm, FormItem as TinyFormItem } from '@opentiny/vue'\n\nconst props = defineProps({\n model: { type: Object, required: true }\n})\n\n// 创建本地副本,直接编辑本地数据\nconst localValue = ref({ modelUrl: `${import.meta.env.VITE_ORIGIN}/platform-center/api/model-data`, ...props.model })\n\nconst ruleFormRef = ref()\n\nconst rules = ref({\n nameCn: [\n { required: true, message: '必填', trigger: 'blur' },\n { min: 1, max: 32, message: '长度在1-32之间', trigger: 'blur' }\n ],\n nameEn: [\n { required: true, message: '必填', trigger: 'blur' },\n { min: 1, max: 32, message: '长度在1-32之间', trigger: 'blur' }\n ],\n version: [{ required: true, message: '必填', trigger: 'blur' }],\n modelUrl: [{ min: 1, max: 200, message: '长度在1-200之间', trigger: 'blur' }]\n})\n\n// 监听 props 变化,同步到本地(当选择不同模型时)\nwatch(\n () => props.model,\n (newModel) => {\n localValue.value = newModel\n },\n { deep: true }\n)\n\nconst validate = () => ruleFormRef.value.validate()\n\n// 暴露本地数据给父组件访问\ndefineExpose({\n getLocalValue: () => localValue.value,\n validate\n})\n</script>\n\n<style scoped>\n.section {\n margin-bottom: 16px;\n border-radius: 6px;\n padding: 12px;\n}\n.section-title {\n font-size: 16px;\n font-weight: 600;\n color: #262626;\n margin: 0 0 16px 0;\n padding-bottom: 8px;\n border-bottom: 1px solid #f0f0f0;\n}\n.form-item {\n margin-bottom: 20px;\n}\n.form-item label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #262626;\n font-size: 14px;\n}\n</style>\n","<template>\n <div class=\"section\">\n <tiny-button class=\"add-field-btn\" size=\"mini\" @click=\"$emit('add-field')\">\n <svg-icon name=\"add\"></svg-icon> 添加字段\n </tiny-button>\n <div class=\"field-table\">\n <tiny-grid\n :data=\"model.parameters\"\n :header-fixed=\"true\"\n :scrollable=\"{ y: true }\"\n :expand-config=\"expandConfig\"\n ref=\"fieldGrid\"\n style=\"height: 100%\"\n >\n <tiny-grid-column type=\"expand\" width=\"20\">\n <template #default=\"{ row }\">\n <div v-if=\"row.type === 'Enum'\" class=\"expand-content\">\n <div class=\"expand-section\">\n <h4>默认选项(下拉框)</h4>\n <div class=\"enum-values\">\n <div v-for=\"(opt, index) in row.options || []\" :key=\"index\" class=\"enum-item\">\n <tiny-input\n v-model=\"opt.value\"\n placeholder=\"值\"\n size=\"small\"\n style=\"width: 150px; margin-right: 8px\"\n />\n <tiny-input\n v-model=\"opt.label\"\n placeholder=\"显示标签\"\n size=\"small\"\n style=\"width: 200px; margin-right: 8px\"\n />\n <tiny-button type=\"text\" size=\"small\" @click=\"$emit('insert-enum-after', row, index)\"\n >新增</tiny-button\n >\n <tiny-button type=\"text\" size=\"small\" @click=\"$emit('remove-enum', row, index)\">删除</tiny-button>\n </div>\n </div>\n </div>\n </div>\n <div v-else-if=\"row.type === 'ModelRef'\" class=\"expand-content\">\n <div class=\"expand-section\">\n <h4>引用的模型</h4>\n <div class=\"model-ref-section\">\n <tiny-select\n v-model=\"row.defaultValue\"\n placeholder=\"请选择要引用的模型\"\n size=\"small\"\n style=\"width: 100%\"\n >\n <tiny-option\n v-for=\"model in relativeModels\"\n :key=\"model.id\"\n :value=\"model.id\"\n :label=\"`${model.nameCn} (${model.nameEn})`\"\n />\n </tiny-select>\n <div class=\"model-ref-info\" v-if=\"row.defaultValue\">\n <p>已选择模型:{{ getModelName(row.defaultValue) }}</p>\n </div>\n </div>\n </div>\n </div>\n </template>\n </tiny-grid-column>\n <tiny-grid-column field=\"prop\" title=\"字段名称\" width=\"100\">\n <template #default=\"{ row }\">\n <div v-if=\"row.isEditing\" class=\"editing-cell\">\n <tiny-input v-model=\"row.prop\" placeholder=\"请输入字段名称\" size=\"small\" />\n </div>\n <div v-else class=\"readonly-cell\">{{ row.prop || '点击编辑' }}</div>\n </template>\n </tiny-grid-column>\n <tiny-grid-column field=\"type\" title=\"类型\" width=\"80\">\n <template #default=\"{ row }\">\n <div v-if=\"row.isEditing\" class=\"editing-cell\">\n <tiny-select v-model=\"row.type\" size=\"small\" @change=\"handleTypeChange(row)\">\n <tiny-option value=\"String\" label=\"字符串\" />\n <tiny-option value=\"Number\" label=\"数字\" />\n <tiny-option value=\"Boolean\" label=\"布尔值\" />\n <tiny-option value=\"Date\" label=\"日期\" />\n <tiny-option value=\"Enum\" label=\"枚举值\" />\n <tiny-option value=\"ModelRef\" label=\"模型引用\" />\n </tiny-select>\n </div>\n <div v-else class=\"readonly-cell\">{{ getFieldTypeLabel(row.type) }}</div>\n </template>\n </tiny-grid-column>\n <tiny-grid-column field=\"defaultValue\" title=\"默认值\" width=\"100\">\n <template #default=\"{ row }\">\n <div v-if=\"row.isEditing\" class=\"editing-cell\">\n <tiny-input v-model=\"row.defaultValue\" placeholder=\"请输入默认值\" size=\"small\" />\n </div>\n <div v-else class=\"readonly-cell\">{{ row.defaultValue }}</div>\n </template>\n </tiny-grid-column>\n <tiny-grid-column field=\"required\" title=\"必填\" width=\"60\">\n <template #default=\"{ row }\">\n <div v-if=\"row.isEditing\" class=\"editing-cell\">\n <tiny-checkbox v-model=\"row.required\" />\n </div>\n <div v-else class=\"readonly-cell\"><tiny-checkbox v-model=\"row.required\" disabled /></div>\n </template>\n </tiny-grid-column>\n <tiny-grid-column field=\"description\" title=\"描述\" width=\"100\">\n <template #default=\"{ row }\">\n <div v-if=\"row.isEditing\" class=\"editing-cell\">\n <tiny-input v-model=\"row.description\" placeholder=\"请输入字段描述\" size=\"small\" />\n </div>\n <div v-else class=\"readonly-cell\">{{ row.description || '点击编辑' }}</div>\n </template>\n </tiny-grid-column>\n <tiny-grid-column field=\"operation\" title=\"操作\" width=\"90\">\n <template #default=\"{ row }\">\n <div class=\"field-actions\">\n <template v-if=\"row.isEditing\">\n <span type=\"text\" size=\"mini\" @click=\"saveFieldEdit(row)\">保存</span>\n <span type=\"text\" size=\"mini\" @click=\"cancelFieldEdit(row)\">取消</span>\n </template>\n <template v-else>\n <span><svg-icon name=\"to-edit\" @click.stop=\"startFieldEdit(row)\" /></span>\n <span><svg-icon name=\"delete\" @click.stop=\"handleDeleteField(row)\" /></span>\n </template>\n </div>\n </template>\n </tiny-grid-column>\n </tiny-grid>\n </div>\n </div>\n</template>\n\n<script setup>\n// 字段表格与展开编辑内容组件\n// 仅承载表格与展开内容,具体列通过插槽从父组件传入,保证与现有逻辑一致\nimport { ref, computed, nextTick } from 'vue'\nimport { TinyButton, TinyGrid, TinyGridColumn, TinyInput, TinySelect, TinyOption, TinyCheckbox } from '@opentiny/vue'\n\nconst props = defineProps({\n model: { type: Object, required: true },\n expandConfig: { type: Object, required: true },\n availableModels: { type: Array, default: () => [] }\n})\n\ndefineEmits(['insert-enum-after', 'remove-enum'])\n\nconst fieldGrid = ref(null)\n\nconst selectedModel = ref(props.model)\n\nconst relativeModels = computed(() => props.availableModels.filter((item) => item.id !== props.model.id))\n\n// 父组件需要:\n// 1) 读取 grid 数据以拿到 _RID\nconst getGridData = () => fieldGrid.value?.getData?.() || []\n\n// 根据模型ID获取模型名称\nconst getModelName = (modelId) => {\n const model = relativeModels.value.find((m) => m.id === modelId)\n return model ? `${model.nameCn} (${model.nameEn})` : '未知模型'\n}\n\n// 字段类型变化处理\nconst handleTypeChange = (field) => {\n if (field.type === 'Enum' || field.type === 'ModelRef') {\n field.isExpanded = true\n // 初始化相应的数据结构\n if (field.type === 'Enum' && (!Array.isArray(field.options) || field.options.length === 0)) {\n field.options = [{ value: '', label: '' }]\n }\n // 模型引用类型:初始化模型引用\n if (field.type === 'ModelRef') {\n field.isModel = true\n field.defaultValue = field.defaultValue || null\n }\n // 将对应 _RID 推入展开 keys(去重)\n nextTick(() => {\n const gridData = fieldGrid.value?.getGridData?.() || []\n gridData.forEach((item) => {\n if (item.id === field.id && !expandConfig.value.expandRowKeys.includes(item._RID)) {\n expandConfig.value.expandRowKeys.push(item._RID)\n }\n })\n })\n } else {\n field.isExpanded = false\n // 按 _RID 从展开 keys 移除\n const gridData = fieldGrid.value?.getGridData?.() || []\n const current = gridData.find((item) => item.id === field.id)\n if (current) {\n const idx = expandConfig.value.expandRowKeys.indexOf(current._RID)\n if (idx > -1) expandConfig.value.expandRowKeys.splice(idx, 1)\n }\n }\n // 强制更新视图\n nextTick(() => {\n if (selectedModel.value && selectedModel.value.parameters) {\n selectedModel.value.parameters = [...selectedModel.value.parameters]\n }\n })\n}\n\n// 字段类型label转换\nconst getFieldTypeLabel = (type) => {\n const typeMap = {\n String: '字符串',\n Number: '数字',\n Boolean: '布尔值',\n Date: '日期',\n Enum: '枚举值',\n ModelRef: '模型引用'\n }\n return typeMap[type] || type\n}\n\n// 字段进入编辑状态\nconst startFieldEdit = (field) => {\n field._editCache = { ...field } // 缓存原始数据\n field.isEditing = true\n // 如果字段类型是枚举值或模型引用类型,自动展开\n if (field.type === 'Enum' || field.type === 'ModelRef') {\n field.isExpanded = true\n // 枚举类型:至少保证一条空数据\n if (field.type === 'Enum' && (!Array.isArray(field.options) || field.options.length === 0)) {\n field.options = [{ value: '', label: '' }]\n }\n // 模型引用类型:初始化模型引用\n if (field.type === 'ModelRef') {\n field.isModel = true\n field.defaultValue = field.defaultValue || null\n }\n // 添加到展开行keys(使用 _RID),并避免重复\n const gridData = fieldGrid.value?.getGridData() || []\n gridData.forEach((item) => {\n if (item.id === field.id && !expandConfig.value.expandRowKeys.includes(item._RID)) {\n expandConfig.value.expandRowKeys.push(item._RID)\n }\n })\n }\n}\n// 字段保存编辑\nconst saveFieldEdit = (field) => {\n field.isEditing = false\n field.isExpanded = false // 保存时收起展开行\n if (field._editCache && JSON.stringify(field._editCache) !== JSON.stringify(field)) {\n field._editCache = null\n }\n // 保存后移除 isNew 标记\n if (field.isNew) delete field.isNew\n}\n\n// 字段取消编辑\nconst cancelFieldEdit = (field) => {\n field.isEditing = false\n field.isExpanded = false // 取消时收起展开行\n // 从展开行keys中移除(使用 _RID)\n const gridData = fieldGrid.value?.getGridData?.() || []\n const current = gridData.find((item) => item.id === field.id)\n if (current) {\n const idx = expandConfig.value.expandRowKeys.indexOf(current._RID)\n if (idx > -1) expandConfig.value.expandRowKeys.splice(idx, 1)\n }\n // 取消编辑时,还原到缓存的数据\n if (field._editCache) {\n Object.assign(field, field._editCache)\n field._editCache = null\n }\n // 如果字段是新增的,则直接删除\n if (field.isNew) {\n const index = selectedModel.value.parameters.findIndex((f) => f.id === field.id)\n if (index > -1) selectedModel.value.parameters.splice(index, 1)\n }\n}\n// 删除字段\nconst handleDeleteField = (field) => {\n const index = selectedModel.value.parameters.findIndex((f) => f.prop === field.prop)\n if (index > -1) selectedModel.value.parameters.splice(index, 1)\n}\n\ndefineExpose({\n fieldGrid,\n getGridData\n})\n</script>\n\n<style lang=\"less\" scoped>\n.section {\n .add-field-btn {\n margin-bottom: 16px;\n }\n\n :deep(.tiny-grid-body__expanded-row) {\n background-color: var(--te-model-manage-input-bg-color);\n }\n .expand-section {\n margin-bottom: 16px;\n\n h4 {\n font-size: 14px;\n font-weight: 600;\n color: var(--te-model-manage-title-text-color);\n margin: 0 0 8px 0;\n padding-bottom: 1px;\n }\n\n .enum-item {\n display: flex;\n align-items: center;\n margin-bottom: 8px;\n padding: 8px;\n background-color: var(--te-model-manage-input-bg-color);\n border-radius: 4px;\n }\n\n .model-ref-section {\n margin-top: 8px;\n }\n\n .model-ref-info {\n margin-top: 8px;\n padding: 8px;\n background: #f0f8ff;\n border-radius: 4px;\n border: 1px solid #d6e4ff;\n\n p {\n margin: 0;\n font-size: 12px;\n color: #1890ff;\n }\n }\n }\n\n .editing-cell {\n :deep(.tiny-input),\n :deep(.tiny-select) {\n width: 100%;\n }\n }\n\n .readonly-cell {\n cursor: pointer;\n border-radius: 4px;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: #f5f5f5;\n }\n }\n\n .field-actions,\n .editing-cell,\n .readonly-cell {\n background: transparent !important;\n }\n\n .field-actions {\n display: flex;\n gap: 8px;\n span {\n color: var(--te-common-text-emphasize);\n }\n }\n}\n</style>\n","import { getMetaApi, META_SERVICE } from '@opentiny/tiny-engine-meta-register'\n\n// 示例API路径,请根据实际后端接口调整\nconst modelApi = '/material-center/api/model'\n\nexport function getModelList(params = {}) {\n return getMetaApi(META_SERVICE.Http).get(`${modelApi}/list`, { params })\n}\n\nexport function createModel(data) {\n return getMetaApi(META_SERVICE.Http).post(`${modelApi}/create`, data)\n}\n\nexport function updateModel(id, data) {\n return getMetaApi(META_SERVICE.Http).put(`${modelApi}/update/${id}`, data)\n}\n\nexport function deleteModel(id) {\n return getMetaApi(META_SERVICE.Http).delete(`${modelApi}/delete/${id}`)\n}\n\nexport function getModelSql() {\n return getMetaApi(META_SERVICE.Http).get(`${modelApi}/table/list`)\n}\n\nexport function getModelSqlById(id) {\n return getMetaApi(META_SERVICE.Http).get(`${modelApi}/table/${id}`)\n}\n","<template>\n <plugin-setting\n v-if=\"isShow\"\n :fixed-name=\"PLUGIN_NAME.ModelManager\"\n :align=\"align\"\n title=\"模型设置\"\n class=\"modelmanager-plugin-setting\"\n >\n <template #header>\n <button-group>\n <tiny-button @click=\"$emit('exportModel', selectedModel?.id)\">导出SQL</tiny-button>\n <tiny-button type=\"primary\" @click=\"saveModel\">保存</tiny-button>\n <svg-button name=\"delete\" v-if=\"selectedModel?.id\" @click=\"$emit('deleteCallback', selectedModel)\"></svg-button>\n <svg-button name=\"close\" @click=\"closeModelSettingPanel\"></svg-button>\n </button-group>\n </template>\n\n <template #content>\n <tiny-collapse v-model=\"activeName\" class=\"page-setting-collapse\">\n <tiny-collapse-item title=\"基本设置\" name=\"general\">\n <model-basic-form ref=\"modelBasicFormRef\" :model=\"selectedModel\"></model-basic-form>\n </tiny-collapse-item>\n\n <tiny-collapse-item class=\"base-setting\" title=\"字段管理\" name=\"fields\">\n <field-manager\n ref=\"fieldManagerRef\"\n :model=\"selectedModel\"\n :expand-config=\"expandConfig\"\n :available-models=\"models\"\n @add-field=\"handleAddField\"\n @insert-enum-after=\"insertEnumValueAfter\"\n @remove-enum=\"removeEnumValue\"\n >\n </field-manager>\n </tiny-collapse-item>\n </tiny-collapse>\n </template>\n </plugin-setting>\n</template>\n<script>\nimport { ref, watch, nextTick } from 'vue'\nimport { Button, Collapse, CollapseItem, Notify } from '@opentiny/vue'\nimport { PluginSetting, ButtonGroup, SvgButton } from '@opentiny/tiny-engine-common'\nimport { useLayout } from '@opentiny/tiny-engine-meta-register'\nimport ModelBasicForm from './ModelBasicForm.vue'\nimport FieldManager from './FieldManager.vue'\nimport { createModel, updateModel } from '../composable/useModelManager'\n\nconst isShow = ref(false)\n\nexport const openModelSettingPanel = () => {\n isShow.value = true\n}\n\nexport const closeModelSettingPanel = () => {\n isShow.value = false\n}\n\nexport default {\n components: {\n PluginSetting,\n SvgButton,\n ButtonGroup,\n ModelBasicForm,\n FieldManager,\n TinyButton: Button,\n TinyCollapse: Collapse,\n TinyCollapseItem: CollapseItem\n },\n props: {\n model: {\n type: Object,\n default: () => ({})\n },\n models: {\n type: Array,\n default: () => []\n }\n },\n emits: ['editCallback', 'exportModel', 'deleteCallback'],\n setup(props, { emit }) {\n const { PLUGIN_NAME } = useLayout()\n const activeName = ref(['general', 'fields'])\n const selectedModel = ref()\n const modelBasicFormRef = ref()\n // 展开行配置\n const expandConfig = ref({\n expandAll: false,\n trigger: 'row',\n expandRowKeys: [],\n accordion: false,\n activeMethod: (row) => row.type === 'Enum' || row.type === 'ModelRef', // 枚举类型和模型引用类型都显示展开箭头\n showIcon: (row) => row.type === 'Enum' || row.type === 'ModelRef' // 枚举类型和模型引用类型都显示展开箭头\n })\n\n // 添加字段,自动进入编辑状态\n const handleAddField = () => {\n if (!selectedModel.value) return\n const newField = {\n prop: '',\n type: 'String',\n required: false,\n description: '',\n isEditing: true,\n isNew: true // 新增字段标记\n }\n selectedModel.value.parameters.push(newField)\n nextTick(() => {\n const nameInputs = document.querySelectorAll('.editing-cell .tiny-input')\n if (nameInputs.length > 0) nameInputs[nameInputs.length - 1].focus()\n })\n }\n\n // 在当前行后插入一条枚举值\n const insertEnumValueAfter = (field, index) => {\n if (!field.options) {\n field.options = []\n }\n field.options.splice(index + 1, 0, { value: '', label: '' })\n }\n\n // 删除枚举值\n const removeEnumValue = (field, index) => {\n if (!Array.isArray(field.options)) return\n if (field.options.length <= 1) {\n // 只剩一条时,不删除,清空内容\n field.options[0] = { value: '', label: '' }\n return\n }\n field.options.splice(index, 1)\n }\n\n // 保存模型时一并保存version字段\n const saveModel = async () => {\n // 从子组件获取最新的数据\n const latestModelData = modelBasicFormRef.value?.getLocalValue()\n modelBasicFormRef.value.validate().then(async (valid) => {\n if (valid) {\n const newModel = {\n description: latestModelData.description,\n modelUrl: latestModelData.modelUrl,\n nameCn: latestModelData.nameCn,\n nameEn: latestModelData.nameEn,\n version: latestModelData.version,\n id: latestModelData.id,\n parameters: latestModelData.parameters.filter((item) => !!item.prop)\n }\n let isModelRefRelative = true\n let propertyName = ''\n if (newModel.parameters?.length > 0) {\n newModel.parameters.forEach((item) => {\n if (item.type === 'Enum') {\n item.options = JSON.stringify(item.options)\n }\n if (item.type === 'ModelRef') {\n item.isModel = true\n delete item.options\n item.defaultValue = item.defaultValue || null\n isModelRefRelative = !!item.defaultValue\n propertyName = item.prop\n }\n })\n }\n if (!isModelRefRelative) {\n Notify({\n type: 'error',\n message: `字段${propertyName}未关联模型引用`\n })\n return\n }\n if (latestModelData.id === null) {\n delete newModel.id\n await createModel(newModel)\n } else {\n await updateModel(newModel.id, newModel)\n }\n emit('editCallback')\n Notify({\n type: 'success',\n message: '保存成功'\n })\n selectedModel.value = null\n }\n })\n }\n // 监听 props 变化,同步到本地(当选择不同模型时)\n watch(\n () => props.model,\n (newModel) => {\n selectedModel.value = newModel\n },\n { deep: true }\n )\n return {\n isShow,\n PLUGIN_NAME,\n activeName,\n modelBasicFormRef,\n expandConfig,\n selectedModel,\n closeModelSettingPanel,\n handleAddField,\n insertEnumValueAfter,\n removeEnumValue,\n saveModel\n }\n }\n}\n</script>\n<style lang=\"less\" scoped>\n.modelmanager-plugin-setting {\n width: fit-content;\n\n :deep(.tiny-collapse .tiny-collapse-item) {\n .tiny-collapse-item__header {\n padding: 0;\n }\n\n .tiny-collapse-item__wrap .tiny-collapse-item__content {\n padding: 0;\n .section {\n padding: 0;\n }\n }\n }\n}\n</style>\n","<template>\n <div class=\"plugin-modelmanager\">\n <plugin-panel\n :title=\"title\"\n :fixed-name=\"PLUGIN_NAME.ModelManager\"\n :fixedPanels=\"fixedPanels\"\n @close=\"pluginPanelClosed\"\n >\n <template #header>\n <svg-button\n class=\"flow-download-icon\"\n name=\"flow-download\"\n placement=\"bottom\"\n tips=\"导出SQL\"\n @click=\"exportModel\"\n ></svg-button>\n </template>\n <template #content>\n <tiny-button class=\"add-model\" @click=\"handleAddModel\"> <svg-icon name=\"add\"></svg-icon>新建模型 </tiny-button>\n <div class=\"model-manager-search\" clearable placeholder=\"搜索\">\n <tiny-search v-model=\"localKeyword\">\n <template #prefix>\n <tiny-icon-search />\n </template>\n </tiny-search>\n </div>\n <div class=\"model-list\">\n <template v-if=\"models.length\">\n <div\n v-for=\"model in filteredModels\"\n :key=\"model.id\"\n :class=\"['model-item', { active: selectedModel?.id === model.id }]\"\n >\n <div class=\"item-label\">\n <div class=\"item-name\">\n <svg-icon name=\"plugin-icon-modelmanager\" class=\"plugin-icon-modelmanager\"> </svg-icon>\n {{ model.nameCn }}\n </div>\n <div class=\"item-handler\">\n <svg-button\n class=\"set-page\"\n :hoverBgColor=\"false\"\n tips=\"设置模型\"\n name=\"setting\"\n @mousedown.stop.prevent=\"selectModel(model)\"\n >\n </svg-button>\n </div>\n </div>\n </div>\n </template>\n <search-empty :isShow=\"!models.length\" />\n </div>\n </template>\n </plugin-panel>\n <model-setting\n :model=\"selectedModel\"\n :models=\"models\"\n @deleteCallback=\"handleDeleteModel\"\n @editCallback=\"editCallback\"\n @exportModel=\"exportModel\"\n ></model-setting>\n </div>\n</template>\n\n<script setup>\nimport { ref, reactive, provide, computed, onMounted } from 'vue'\nimport { TinySearch, Modal, TinyButton } from '@opentiny/vue'\nimport { IconSearch } from '@opentiny/vue-icon'\nimport { PluginPanel, SvgButton, SearchEmpty } from '@opentiny/tiny-engine-common'\nimport { useLayout } from '@opentiny/tiny-engine-meta-register'\nimport ModelSetting, { openModelSettingPanel, closeModelSettingPanel } from './components/ModelSetting.vue'\nimport { getModelList, deleteModel, getModelSql, getModelSqlById } from './composable/useModelManager'\n\ndefineProps({\n title: {\n type: String,\n default: '模型管理'\n },\n fixedPanels: {\n type: Array\n }\n})\nconst emit = defineEmits(['close'])\n\nconst { PLUGIN_NAME } = useLayout()\nconst TinyIconSearch = IconSearch()\nconst selectedModel = ref(null) // 当前选中的模型\n// 模型数据列表,包含模型及其字段\nconst models = ref([])\nconst localKeyword = ref('')\n\nconst panelState = reactive({\n emitEvent: emit\n})\n\nprovide('panelState', panelState)\n// 根据搜索关键字过滤模型列表\nconst filteredModels = computed(() => {\n if (!localKeyword.value) return models.value\n return models.value.filter(\n (model) =>\n (model.nameCn || '').toLowerCase().includes(localKeyword.value.toLowerCase()) ||\n (model.description || '').toLowerCase().includes(localKeyword.value.toLowerCase())\n )\n})\n\nconst pluginPanelClosed = () => {\n emit('close')\n closeModelSettingPanel()\n}\n\n// 选中模型\nconst selectModel = (model) => {\n if (model.parameters?.length > 0) {\n model.parameters.forEach((item) => {\n item.isModel = false\n if (item.type === 'Enum') {\n item.options = typeof item.options === 'string' ? JSON.parse(item.options) : item.options || []\n }\n if (item.type === 'ModelRef') {\n item.isModel = true\n item.defaultValue = Number(item.defaultValue)\n }\n })\n }\n selectedModel.value = model\n openModelSettingPanel()\n}\n// 添加新模型\nconst handleAddModel = () => {\n selectedModel.value = {\n id: null,\n nameCn: '',\n nameEn: '',\n version: '',\n modelUrl: '',\n description: '',\n parameters: []\n }\n openModelSettingPanel()\n}\n\n// 删除模型(TinyVue 二次确认)\nconst handleDeleteModel = async (model) => {\n const name = model.nameCn || model.nameEn || model.id\n try {\n const result = await Modal.confirm({\n title: '提示',\n message: `确认删除模型「${name}」吗?该操作不可恢复。`\n })\n const confirmed = result === 'confirm' || result?.action === 'confirm' || result === true || result === undefined\n if (!confirmed) return\n await deleteModel(model.id)\n const index = models.value.findIndex((m) => m.id === model.id)\n if (index > -1) {\n models.value.splice(index, 1)\n if (selectedModel.value?.id === model.id) selectedModel.value = null\n }\n } catch (error) {\n // 用户取消或弹窗异常,不做处理\n }\n}\n\nconst getModelLists = async () => {\n const data = await getModelList({\n currentPage: 1,\n pageSize: 500\n })\n models.value = data.records || []\n}\n// 导出模型的sql\nconst exportModel = async (id) => {\n const sqlContent = id ? await getModelSqlById(id) : await getModelSql()\n // 创建 Blob 对象,指定 MIME 类型为 text/sql\n const blob = new Blob([sqlContent], { type: 'text/sql' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = `${id ? selectedModel.value?.nameEn : 'models'}.sql`\n // 将 <a> 元素添加到 DOM 中\n document.body.appendChild(a)\n a.click()\n document.body.removeChild(a)\n URL.revokeObjectURL(url)\n}\n\nconst editCallback = async () => {\n await getModelLists()\n selectedModel.value = null\n closeModelSettingPanel()\n}\n\n// 生命周期:页面加载时拉取模型列表\nonMounted(async () => {\n await getModelLists()\n})\n</script>\n\n<style lang=\"less\" scoped>\n.plugin-modelmanager {\n height: 100%;\n width: 280px;\n .add-model {\n margin: 0 12px 12px 12px;\n width: calc(100% - 24px);\n }\n .model-manager-search {\n padding: 0 12px 12px 12px;\n }\n\n .model-list {\n border-top: 1px solid var(--te-model-common-border-color-divider);\n padding-top: 12px;\n overflow-y: scroll;\n color: var(--te-common-text-primary);\n font-size: var(--te-base-font-size-base);\n\n .model-item {\n box-shadow: var(--te-model-manage-input-border-color) 0, -1px;\n height: 24px;\n line-height: 24px;\n align-items: center;\n display: grid;\n padding: 0 12px;\n position: relative;\n color: var(--te-model-manage-text-color);\n cursor: pointer;\n &:hover,\n &.active {\n background: var(--te-model-manage-tree-node-bg-color-hover);\n .item-handler {\n display: inline-block;\n }\n }\n .item-label {\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--te-model-manage-draggable-text-color);\n .item-name {\n display: flex;\n align-items: center;\n }\n .plugin-icon-modelmanager {\n color: var(--te-model-manage-draggable-icon-color);\n margin-right: 8px;\n }\n }\n .item-handler {\n height: 24px;\n line-height: 24px;\n display: none;\n }\n }\n }\n}\n</style>\n","export default {\n id: 'engine.plugins.modelmanager',\n title: '模型管理',\n type: 'plugins',\n width: 280,\n icon: 'plugin-icon-modelmanager'\n}\n","import entry from './src/Main.vue'\nimport metaData from './meta'\nimport './src/styles/vars.less'\n\nexport default {\n ...metaData,\n entry\n}\n"],"names":["props","__props","localValue","ref","ruleFormRef","rules","watch","newModel","__expose","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","TinyForm","_createElementVNode","_hoisted_2","TinyFormItem","TinyInput","_cache","$event","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","fieldGrid","selectedModel","relativeModels","computed","item","getGridData","_b","_a","getModelName","modelId","model","m","handleTypeChange","field","nextTick","current","idx","getFieldTypeLabel","type","startFieldEdit","saveFieldEdit","cancelFieldEdit","index","f","handleDeleteField","TinyButton","$emit","_component_svg_icon","TinyGrid","TinyGridColumn","_withCtx","row","_Fragment","opt","_hoisted_7","_hoisted_8","TinySelect","_renderList","_createBlock","TinyOption","_hoisted_9","_toDisplayString","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","TinyCheckbox","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_withModifiers","modelApi","getModelList","params","getMetaApi","META_SERVICE","createModel","data","updateModel","id","deleteModel","getModelSql","getModelSqlById","isShow","openModelSettingPanel","closeModelSettingPanel","_sfc_main","PluginSetting","SvgButton","ButtonGroup","ModelBasicForm","FieldManager","Button","Collapse","CollapseItem","emit","PLUGIN_NAME","useLayout","activeName","modelBasicFormRef","expandConfig","handleAddField","newField","nameInputs","insertEnumValueAfter","removeEnumValue","saveModel","latestModelData","valid","isModelRefRelative","propertyName","Notify","$setup","_component_plugin_setting","_ctx","_component_button_group","_component_tiny_button","_component_svg_button","_component_tiny_collapse","_component_tiny_collapse_item","_component_model_basic_form","_component_field_manager","$props","__emit","TinyIconSearch","IconSearch","models","localKeyword","panelState","reactive","provide","filteredModels","pluginPanelClosed","selectModel","handleAddModel","handleDeleteModel","name","result","Modal","getModelLists","exportModel","sqlContent","blob","url","a","editCallback","onMounted","PluginPanel","TinySearch","SearchEmpty","ModelSetting","metaData","entry"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/ModelBasicForm.vue","../src/components/FieldManager.vue","../src/composable/useModelManager.js","../src/components/ModelSetting.vue","../src/Main.vue","../meta.js","../index.ts"],"sourcesContent":["<template>\n <div class=\"section\">\n <tiny-form\n ref=\"ruleFormRef\"\n :model=\"localValue\"\n :rules=\"rules\"\n label-width=\"120px\"\n validate-type=\"text\"\n :inline-message=\"true\"\n :label-align=\"true\"\n label-position=\"top\"\n >\n <div class=\"form-item\">\n <tiny-form-item label=\"中文名称\" prop=\"nameCn\">\n <tiny-input v-model=\"localValue.nameCn\" placeholder=\"请输入模型中文名称\" />\n </tiny-form-item>\n </div>\n <div class=\"form-item\">\n <tiny-form-item label=\"英文名称\" prop=\"nameEn\">\n <tiny-input v-model=\"localValue.nameEn\" placeholder=\"请输入模型英文名称\" />\n </tiny-form-item>\n </div>\n <div class=\"form-item\">\n <tiny-form-item label=\"模型地址\" prop=\"modelUrl\">\n <tiny-input v-model=\"localValue.modelUrl\" placeholder=\"请输入模型地址,如:https://api.example.com/model\" />\n </tiny-form-item>\n </div>\n <div class=\"form-item\">\n <tiny-form-item label=\"描述\" prop=\"description\">\n <tiny-input type=\"textarea\" :rows=\"3\" v-model=\"localValue.description\" placeholder=\"请输入模型描述\" />\n </tiny-form-item>\n </div>\n </tiny-form>\n </div>\n</template>\n\n<script setup>\nimport { ref, watch } from 'vue'\nimport { TinyInput, Form as TinyForm, FormItem as TinyFormItem } from '@opentiny/vue'\n\nconst props = defineProps({\n model: { type: Object, required: true }\n})\n\n// 创建本地副本,直接编辑本地数据\nconst localValue = ref(props.model)\n\nconst ruleFormRef = ref()\n\nconst rules = ref({\n nameCn: [\n { required: true, message: '必填', trigger: 'blur' },\n { min: 1, max: 32, message: '长度在1-32之间', trigger: 'blur' }\n ],\n nameEn: [\n { required: true, message: '必填', trigger: 'blur' },\n { min: 1, max: 32, message: '长度在1-32之间', trigger: 'blur' }\n ],\n modelUrl: [{ min: 1, max: 200, message: '长度在1-200之间', trigger: 'blur' }]\n})\n\n// 监听 props 变化,同步到本地(当选择不同模型时)\nwatch(\n () => props.model,\n (newModel) => {\n localValue.value = newModel\n },\n { deep: true }\n)\n\nconst validate = () => ruleFormRef.value.validate()\n\n// 暴露本地数据给父组件访问\ndefineExpose({\n getLocalValue: () => localValue.value,\n validate\n})\n</script>\n\n<style scoped>\n.section {\n margin-bottom: 16px;\n border-radius: 6px;\n padding: 12px;\n}\n.section-title {\n font-size: 16px;\n font-weight: 600;\n color: #262626;\n margin: 0 0 16px 0;\n padding-bottom: 8px;\n border-bottom: 1px solid #f0f0f0;\n}\n.form-item {\n margin-bottom: 20px;\n}\n.form-item label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #262626;\n font-size: 14px;\n}\n</style>\n","<template>\n <div class=\"section\">\n <tiny-button class=\"add-field-btn\" size=\"mini\" @click=\"$emit('add-field')\">\n <svg-icon name=\"add\"></svg-icon> 添加字段\n </tiny-button>\n <div class=\"field-table\">\n <tiny-grid\n :data=\"model.parameters\"\n :header-fixed=\"true\"\n :scrollable=\"{ y: true }\"\n :expand-config=\"expandConfig\"\n ref=\"fieldGrid\"\n style=\"height: 100%\"\n >\n <tiny-grid-column type=\"expand\" width=\"20\">\n <template #default=\"{ row }\">\n <div v-if=\"row.type === 'Enum'\" class=\"expand-content\">\n <div class=\"expand-section\">\n <h4>默认选项(下拉框)</h4>\n <div class=\"enum-values\">\n <div v-for=\"(opt, index) in row.options || []\" :key=\"index\" class=\"enum-item\">\n <tiny-input\n v-model=\"opt.value\"\n placeholder=\"值\"\n size=\"small\"\n style=\"width: 150px; margin-right: 8px\"\n />\n <tiny-input\n v-model=\"opt.label\"\n placeholder=\"显示标签\"\n size=\"small\"\n style=\"width: 200px; margin-right: 8px\"\n />\n <tiny-button type=\"text\" size=\"small\" @click=\"$emit('insert-enum-after', row, index)\"\n >新增</tiny-button\n >\n <tiny-button type=\"text\" size=\"small\" @click=\"$emit('remove-enum', row, index)\">删除</tiny-button>\n </div>\n </div>\n </div>\n </div>\n <div v-else-if=\"row.type === 'ModelRef'\" class=\"expand-content\">\n <div class=\"expand-section\">\n <h4>引用的模型</h4>\n <div class=\"model-ref-section\">\n <tiny-select\n v-model=\"row.defaultValue\"\n placeholder=\"请选择要引用的模型\"\n size=\"small\"\n style=\"width: 100%\"\n >\n <tiny-option\n v-for=\"model in relativeModels\"\n :key=\"model.id\"\n :value=\"model.id\"\n :label=\"`${model.nameCn} (${model.nameEn})`\"\n />\n </tiny-select>\n <div class=\"model-ref-info\" v-if=\"row.defaultValue\">\n <p>已选择模型:{{ getModelName(row.defaultValue) }}</p>\n </div>\n </div>\n </div>\n </div>\n </template>\n </tiny-grid-column>\n <tiny-grid-column field=\"prop\" title=\"字段名称\" width=\"100\">\n <template #default=\"{ row }\">\n <div v-if=\"row.isEditing\" class=\"editing-cell\">\n <tiny-input v-model=\"row.prop\" placeholder=\"请输入字段名称\" size=\"small\" />\n </div>\n <div v-else class=\"readonly-cell\">{{ row.prop || '点击编辑' }}</div>\n </template>\n </tiny-grid-column>\n <tiny-grid-column field=\"type\" title=\"类型\" width=\"80\">\n <template #default=\"{ row }\">\n <div v-if=\"row.isEditing\" class=\"editing-cell\">\n <tiny-select v-model=\"row.type\" size=\"small\" @change=\"handleTypeChange(row)\">\n <tiny-option value=\"String\" label=\"字符串\" />\n <tiny-option value=\"Number\" label=\"数字\" />\n <tiny-option value=\"Boolean\" label=\"布尔值\" />\n <tiny-option value=\"Date\" label=\"日期\" />\n <tiny-option value=\"Enum\" label=\"枚举值\" />\n <tiny-option value=\"ModelRef\" label=\"模型引用\" />\n </tiny-select>\n </div>\n <div v-else class=\"readonly-cell\">{{ getFieldTypeLabel(row.type) }}</div>\n </template>\n </tiny-grid-column>\n <tiny-grid-column field=\"defaultValue\" title=\"默认值\" width=\"100\">\n <template #default=\"{ row }\">\n <div v-if=\"row.isEditing\" class=\"editing-cell\">\n <tiny-input v-model=\"row.defaultValue\" placeholder=\"请输入默认值\" size=\"small\" />\n </div>\n <div v-else class=\"readonly-cell\">{{ row.defaultValue }}</div>\n </template>\n </tiny-grid-column>\n <tiny-grid-column field=\"required\" title=\"必填\" width=\"60\">\n <template #default=\"{ row }\">\n <div v-if=\"row.isEditing\" class=\"editing-cell\">\n <tiny-checkbox v-model=\"row.required\" />\n </div>\n <div v-else class=\"readonly-cell\"><tiny-checkbox v-model=\"row.required\" disabled /></div>\n </template>\n </tiny-grid-column>\n <tiny-grid-column field=\"description\" title=\"描述\" width=\"100\">\n <template #default=\"{ row }\">\n <div v-if=\"row.isEditing\" class=\"editing-cell\">\n <tiny-input v-model=\"row.description\" placeholder=\"请输入字段描述\" size=\"small\" />\n </div>\n <div v-else class=\"readonly-cell\">{{ row.description || '点击编辑' }}</div>\n </template>\n </tiny-grid-column>\n <tiny-grid-column field=\"operation\" title=\"操作\" width=\"90\">\n <template #default=\"{ row }\">\n <div class=\"field-actions\">\n <template v-if=\"row.isEditing\">\n <span type=\"text\" size=\"mini\" @click=\"saveFieldEdit(row)\">保存</span>\n <span type=\"text\" size=\"mini\" @click=\"cancelFieldEdit(row)\">取消</span>\n </template>\n <template v-else>\n <span><svg-icon name=\"to-edit\" @click.stop=\"startFieldEdit(row)\" /></span>\n <span><svg-icon name=\"delete\" @click.stop=\"handleDeleteField(row)\" /></span>\n </template>\n </div>\n </template>\n </tiny-grid-column>\n </tiny-grid>\n </div>\n </div>\n</template>\n\n<script setup>\n// 字段表格与展开编辑内容组件\n// 仅承载表格与展开内容,具体列通过插槽从父组件传入,保证与现有逻辑一致\nimport { ref, computed, nextTick } from 'vue'\nimport { TinyButton, TinyGrid, TinyGridColumn, TinyInput, TinySelect, TinyOption, TinyCheckbox } from '@opentiny/vue'\n\nconst props = defineProps({\n model: { type: Object, required: true },\n expandConfig: { type: Object, required: true },\n availableModels: { type: Array, default: () => [] }\n})\n\ndefineEmits(['insert-enum-after', 'remove-enum'])\n\nconst fieldGrid = ref(null)\n\nconst selectedModel = ref(props.model)\n\nconst relativeModels = computed(() => props.availableModels.filter((item) => item.id !== props.model.id))\n\n// 父组件需要:\n// 1) 读取 grid 数据以拿到 _RID\nconst getGridData = () => fieldGrid.value?.getData?.() || []\n\n// 根据模型ID获取模型名称\nconst getModelName = (modelId) => {\n const model = relativeModels.value.find((m) => m.id === modelId)\n return model ? `${model.nameCn} (${model.nameEn})` : '未知模型'\n}\n\n// 字段类型变化处理\nconst handleTypeChange = (field) => {\n if (field.type === 'Enum' || field.type === 'ModelRef') {\n field.isExpanded = true\n // 初始化相应的数据结构\n if (field.type === 'Enum' && (!Array.isArray(field.options) || field.options.length === 0)) {\n field.options = [{ value: '', label: '' }]\n }\n // 模型引用类型:初始化模型引用\n if (field.type === 'ModelRef') {\n field.isModel = true\n field.defaultValue = field.defaultValue || null\n }\n // 将对应 _RID 推入展开 keys(去重)\n nextTick(() => {\n const gridData = fieldGrid.value?.getGridData?.() || []\n gridData.forEach((item) => {\n if (item.id === field.id && !expandConfig.value.expandRowKeys.includes(item._RID)) {\n expandConfig.value.expandRowKeys.push(item._RID)\n }\n })\n })\n } else {\n field.isExpanded = false\n // 按 _RID 从展开 keys 移除\n const gridData = fieldGrid.value?.getGridData?.() || []\n const current = gridData.find((item) => item.id === field.id)\n if (current) {\n const idx = expandConfig.value.expandRowKeys.indexOf(current._RID)\n if (idx > -1) expandConfig.value.expandRowKeys.splice(idx, 1)\n }\n }\n // 强制更新视图\n nextTick(() => {\n if (selectedModel.value && selectedModel.value.parameters) {\n selectedModel.value.parameters = [...selectedModel.value.parameters]\n }\n })\n}\n\n// 字段类型label转换\nconst getFieldTypeLabel = (type) => {\n const typeMap = {\n String: '字符串',\n Number: '数字',\n Boolean: '布尔值',\n Date: '日期',\n Enum: '枚举值',\n ModelRef: '模型引用'\n }\n return typeMap[type] || type\n}\n\n// 字段进入编辑状态\nconst startFieldEdit = (field) => {\n field._editCache = { ...field } // 缓存原始数据\n field.isEditing = true\n // 如果字段类型是枚举值或模型引用类型,自动展开\n if (field.type === 'Enum' || field.type === 'ModelRef') {\n field.isExpanded = true\n // 枚举类型:至少保证一条空数据\n if (field.type === 'Enum' && (!Array.isArray(field.options) || field.options.length === 0)) {\n field.options = [{ value: '', label: '' }]\n }\n // 模型引用类型:初始化模型引用\n if (field.type === 'ModelRef') {\n field.isModel = true\n field.defaultValue = field.defaultValue || null\n }\n // 添加到展开行keys(使用 _RID),并避免重复\n const gridData = fieldGrid.value?.getGridData() || []\n gridData.forEach((item) => {\n if (item.id === field.id && !expandConfig.value.expandRowKeys.includes(item._RID)) {\n expandConfig.value.expandRowKeys.push(item._RID)\n }\n })\n }\n}\n// 字段保存编辑\nconst saveFieldEdit = (field) => {\n field.isEditing = false\n field.isExpanded = false // 保存时收起展开行\n if (field._editCache && JSON.stringify(field._editCache) !== JSON.stringify(field)) {\n field._editCache = null\n }\n // 保存后移除 isNew 标记\n if (field.isNew) delete field.isNew\n}\n\n// 字段取消编辑\nconst cancelFieldEdit = (field) => {\n field.isEditing = false\n field.isExpanded = false // 取消时收起展开行\n // 从展开行keys中移除(使用 _RID)\n const gridData = fieldGrid.value?.getGridData?.() || []\n const current = gridData.find((item) => item.id === field.id)\n if (current) {\n const idx = expandConfig.value.expandRowKeys.indexOf(current._RID)\n if (idx > -1) expandConfig.value.expandRowKeys.splice(idx, 1)\n }\n // 取消编辑时,还原到缓存的数据\n if (field._editCache) {\n Object.assign(field, field._editCache)\n field._editCache = null\n }\n // 如果字段是新增的,则直接删除\n if (field.isNew) {\n const index = selectedModel.value.parameters.findIndex((f) => f.id === field.id)\n if (index > -1) selectedModel.value.parameters.splice(index, 1)\n }\n}\n// 删除字段\nconst handleDeleteField = (field) => {\n const index = selectedModel.value.parameters.findIndex((f) => f.prop === field.prop)\n if (index > -1) selectedModel.value.parameters.splice(index, 1)\n}\n\ndefineExpose({\n fieldGrid,\n getGridData\n})\n</script>\n\n<style lang=\"less\" scoped>\n.section {\n .add-field-btn {\n margin-bottom: 16px;\n }\n\n :deep(.tiny-grid-body__expanded-row) {\n background-color: var(--te-model-manage-input-bg-color);\n }\n .expand-section {\n margin-bottom: 16px;\n\n h4 {\n font-size: 14px;\n font-weight: 600;\n color: var(--te-model-manage-title-text-color);\n margin: 0 0 8px 0;\n padding-bottom: 1px;\n }\n\n .enum-item {\n display: flex;\n align-items: center;\n margin-bottom: 8px;\n padding: 8px;\n background-color: var(--te-model-manage-input-bg-color);\n border-radius: 4px;\n }\n\n .model-ref-section {\n margin-top: 8px;\n }\n\n .model-ref-info {\n margin-top: 8px;\n padding: 8px;\n background: #f0f8ff;\n border-radius: 4px;\n border: 1px solid #d6e4ff;\n\n p {\n margin: 0;\n font-size: 12px;\n color: #1890ff;\n }\n }\n }\n\n .editing-cell {\n :deep(.tiny-input),\n :deep(.tiny-select) {\n width: 100%;\n }\n }\n\n .readonly-cell {\n cursor: pointer;\n border-radius: 4px;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: #f5f5f5;\n }\n }\n\n .field-actions,\n .editing-cell,\n .readonly-cell {\n background: transparent !important;\n }\n\n .field-actions {\n display: flex;\n gap: 8px;\n span {\n color: var(--te-common-text-emphasize);\n }\n }\n}\n</style>\n","import { getMetaApi, META_SERVICE } from '@opentiny/tiny-engine-meta-register'\n\n// 示例API路径,请根据实际后端接口调整\nconst modelApi = '/material-center/api/model'\n\nexport function getModelList(params = {}) {\n return getMetaApi(META_SERVICE.Http).get(`${modelApi}/list`, { params })\n}\n\nexport function createModel(data) {\n return getMetaApi(META_SERVICE.Http).post(`${modelApi}/create`, data)\n}\n\nexport function updateModel(id, data) {\n return getMetaApi(META_SERVICE.Http).put(`${modelApi}/update/${id}`, data)\n}\n\nexport function deleteModel(id) {\n return getMetaApi(META_SERVICE.Http).delete(`${modelApi}/delete/${id}`)\n}\n\nexport function getModelSql() {\n return getMetaApi(META_SERVICE.Http).get(`${modelApi}/table/list`)\n}\n\nexport function getModelSqlById(id) {\n return getMetaApi(META_SERVICE.Http).get(`${modelApi}/table/${id}`)\n}\n","<template>\n <plugin-setting\n v-if=\"isShow\"\n :fixed-name=\"PLUGIN_NAME.ModelManager\"\n :align=\"align\"\n title=\"模型设置\"\n class=\"modelmanager-plugin-setting\"\n >\n <template #header>\n <button-group>\n <tiny-button v-if=\"showExport\" @click=\"$emit('exportModel', selectedModel?.id)\">导出SQL</tiny-button>\n <tiny-button type=\"primary\" @click=\"saveModel\">保存</tiny-button>\n <svg-button name=\"delete\" v-if=\"selectedModel?.id\" @click=\"deleteModel\"></svg-button>\n <svg-button name=\"close\" @click=\"closeModelSettingPanel\"></svg-button>\n </button-group>\n </template>\n\n <template #content>\n <tiny-collapse v-model=\"activeName\" class=\"page-setting-collapse\">\n <tiny-collapse-item title=\"基本设置\" name=\"general\">\n <model-basic-form ref=\"modelBasicFormRef\" :model=\"selectedModel\"></model-basic-form>\n </tiny-collapse-item>\n\n <tiny-collapse-item class=\"base-setting\" title=\"字段管理\" name=\"fields\">\n <field-manager\n ref=\"fieldManagerRef\"\n :model=\"selectedModel\"\n :expand-config=\"expandConfig\"\n :available-models=\"models\"\n @add-field=\"handleAddField\"\n @insert-enum-after=\"insertEnumValueAfter\"\n @remove-enum=\"removeEnumValue\"\n >\n </field-manager>\n </tiny-collapse-item>\n </tiny-collapse>\n </template>\n </plugin-setting>\n</template>\n<script>\nimport { ref, watch, nextTick } from 'vue'\nimport { Button, Collapse, CollapseItem, Notify } from '@opentiny/vue'\nimport { PluginSetting, ButtonGroup, SvgButton } from '@opentiny/tiny-engine-common'\nimport { useLayout } from '@opentiny/tiny-engine-meta-register'\nimport ModelBasicForm from './ModelBasicForm.vue'\nimport FieldManager from './FieldManager.vue'\nimport { createModel, updateModel } from '../composable/useModelManager'\n\nconst isShow = ref(false)\n\nexport const openModelSettingPanel = () => {\n isShow.value = true\n}\n\nexport const closeModelSettingPanel = () => {\n isShow.value = false\n}\n\nexport default {\n components: {\n PluginSetting,\n SvgButton,\n ButtonGroup,\n ModelBasicForm,\n FieldManager,\n TinyButton: Button,\n TinyCollapse: Collapse,\n TinyCollapseItem: CollapseItem\n },\n props: {\n model: {\n type: Object,\n default: () => ({})\n },\n models: {\n type: Array,\n default: () => []\n },\n showExport: {\n type: Boolean,\n default: false\n }\n },\n emits: ['editCallback', 'exportModel', 'deleteCallback'],\n setup(props, { emit }) {\n const { PLUGIN_NAME } = useLayout()\n const activeName = ref(['general', 'fields'])\n const selectedModel = ref()\n const modelBasicFormRef = ref()\n // 展开行配置\n const expandConfig = ref({\n expandAll: false,\n trigger: 'row',\n expandRowKeys: [],\n accordion: false,\n activeMethod: (row) => row.type === 'Enum' || row.type === 'ModelRef', // 枚举类型和模型引用类型都显示展开箭头\n showIcon: (row) => row.type === 'Enum' || row.type === 'ModelRef' // 枚举类型和模型引用类型都显示展开箭头\n })\n\n // 添加字段,自动进入编辑状态\n const handleAddField = () => {\n if (!selectedModel.value) return\n const newField = {\n prop: '',\n type: 'String',\n required: false,\n description: '',\n isEditing: true,\n isNew: true // 新增字段标记\n }\n selectedModel.value.parameters.push(newField)\n nextTick(() => {\n const nameInputs = document.querySelectorAll('.editing-cell .tiny-input')\n if (nameInputs.length > 0) nameInputs[nameInputs.length - 1].focus()\n })\n }\n\n // 在当前行后插入一条枚举值\n const insertEnumValueAfter = (field, index) => {\n if (!field.options) {\n field.options = []\n }\n field.options.splice(index + 1, 0, { value: '', label: '' })\n }\n\n // 删除枚举值\n const removeEnumValue = (field, index) => {\n if (!Array.isArray(field.options)) return\n if (field.options.length <= 1) {\n // 只剩一条时,不删除,清空内容\n field.options[0] = { value: '', label: '' }\n return\n }\n field.options.splice(index, 1)\n }\n\n const isSaving = ref(false)\n\n // 保存模型时一并保存version字段\n const saveModel = async () => {\n // 从子组件获取最新的数据\n const latestModelData = modelBasicFormRef.value?.getLocalValue()\n modelBasicFormRef.value\n .validate()\n .then(async (valid) => {\n if (valid) {\n isSaving.value = true // 设置保存标志\n\n // 深拷贝一份数据用于保存\n const newModel = {\n description: latestModelData.description,\n modelUrl: latestModelData.modelUrl,\n nameCn: latestModelData.nameCn,\n nameEn: latestModelData.nameEn,\n version: latestModelData.version,\n id: latestModelData.id,\n parameters: JSON.parse(JSON.stringify(latestModelData.parameters.filter((item) => !!item.prop)))\n }\n\n let isModelRefRelative = true\n let propertyName = ''\n\n if (newModel.parameters?.length > 0) {\n newModel.parameters.forEach((item) => {\n if (item.type === 'Enum') {\n // 保存时序列化为字符串\n item.options = JSON.stringify(item.options || [])\n }\n if (item.type === 'ModelRef') {\n item.isModel = true\n delete item.options\n item.defaultValue = item.defaultValue || null\n isModelRefRelative = !!item.defaultValue\n propertyName = item.prop\n }\n })\n }\n\n if (!isModelRefRelative) {\n Notify({\n type: 'error',\n message: `字段${propertyName}未关联模型引用`\n })\n isSaving.value = false\n return\n }\n\n if (latestModelData.id === null) {\n delete newModel.id\n await createModel(newModel)\n } else {\n await updateModel(newModel.id, newModel)\n }\n\n emit('editCallback')\n Notify({\n type: 'success',\n message: '保存成功'\n })\n\n // 关闭面板\n closeModelSettingPanel()\n selectedModel.value = null\n isSaving.value = false\n }\n })\n .catch(() => {\n isSaving.value = false\n })\n }\n\n const deleteModel = () => {\n emit('deleteCallback', selectedModel.value)\n closeModelSettingPanel()\n }\n\n // 监听 props 变化,同步到本地(当选择不同模型时)\n watch(\n () => props.model,\n (newModel) => {\n if (!isSaving.value && newModel) {\n // 只在非保存过程中处理\n // 深拷贝避免修改props\n const modelCopy = JSON.parse(JSON.stringify(newModel))\n\n // 加载时反序列化枚举字段\n if (modelCopy.parameters) {\n modelCopy.parameters.forEach((param) => {\n if (param.type === 'Enum' && typeof param.options === 'string') {\n try {\n param.options = JSON.parse(param.options)\n } catch (e) {\n param.options = [{ value: '', label: '' }]\n }\n }\n })\n }\n\n selectedModel.value = modelCopy\n } else {\n selectedModel.value = newModel\n }\n },\n { deep: true, immediate: true }\n )\n return {\n isShow,\n PLUGIN_NAME,\n activeName,\n modelBasicFormRef,\n expandConfig,\n selectedModel,\n closeModelSettingPanel,\n handleAddField,\n insertEnumValueAfter,\n removeEnumValue,\n saveModel,\n deleteModel\n }\n }\n}\n</script>\n<style lang=\"less\" scoped>\n.modelmanager-plugin-setting {\n width: 578px;\n\n :deep(.tiny-collapse .tiny-collapse-item) {\n .tiny-collapse-item__header {\n padding: 0;\n }\n\n .tiny-collapse-item__wrap .tiny-collapse-item__content {\n padding: 0;\n .section {\n padding: 0;\n }\n }\n }\n}\n</style>\n","<template>\n <div class=\"plugin-modelmanager\">\n <plugin-panel\n :title=\"title\"\n :fixed-name=\"PLUGIN_NAME.ModelManager\"\n :fixedPanels=\"fixedPanels\"\n @close=\"pluginPanelClosed\"\n >\n <template #header>\n <svg-button\n v-if=\"showExportSql\"\n class=\"flow-download-icon\"\n name=\"flow-download\"\n placement=\"bottom\"\n tips=\"导出SQL\"\n @click=\"exportModel\"\n ></svg-button>\n </template>\n <template #content>\n <tiny-button class=\"add-model\" @click=\"handleAddModel\"> <svg-icon name=\"add\"></svg-icon>新建模型 </tiny-button>\n <div class=\"model-manager-search\" clearable placeholder=\"搜索\">\n <tiny-search v-model=\"localKeyword\">\n <template #prefix>\n <tiny-icon-search />\n </template>\n </tiny-search>\n </div>\n <div class=\"model-list\">\n <template v-if=\"models.length\">\n <div\n v-for=\"model in filteredModels\"\n :key=\"model.id\"\n :class=\"['model-item', { active: selectedModel?.id === model.id }]\"\n >\n <div class=\"item-label\">\n <div class=\"item-name\">\n <svg-icon name=\"plugin-icon-modelmanager\" class=\"plugin-icon-modelmanager\"> </svg-icon>\n {{ model.nameCn }}\n </div>\n <div class=\"item-handler\">\n <svg-button\n class=\"set-page\"\n :hoverBgColor=\"false\"\n tips=\"设置模型\"\n name=\"setting\"\n @mousedown.stop.prevent=\"selectModel(model)\"\n >\n </svg-button>\n </div>\n </div>\n </div>\n </template>\n <search-empty :isShow=\"!models.length\" />\n </div>\n </template>\n </plugin-panel>\n <model-setting\n :model=\"selectedModel\"\n :models=\"models\"\n :showExport=\"showExportSql\"\n @deleteCallback=\"handleDeleteModel\"\n @editCallback=\"editCallback\"\n @exportModel=\"exportModel\"\n ></model-setting>\n </div>\n</template>\n\n<script setup>\nimport { ref, reactive, provide, computed, onMounted } from 'vue'\nimport { TinySearch, Modal, TinyButton } from '@opentiny/vue'\nimport { IconSearch } from '@opentiny/vue-icon'\nimport { PluginPanel, SvgButton, SearchEmpty } from '@opentiny/tiny-engine-common'\nimport { useLayout, useEnv } from '@opentiny/tiny-engine-meta-register'\nimport ModelSetting, { openModelSettingPanel, closeModelSettingPanel } from './components/ModelSetting.vue'\nimport { getModelList, deleteModel, getModelSql, getModelSqlById } from './composable/useModelManager'\n\ndefineProps({\n title: {\n type: String,\n default: '模型管理'\n },\n fixedPanels: {\n type: Array\n }\n})\nconst emit = defineEmits(['close'])\n\nconst { PLUGIN_NAME } = useLayout()\nconst { VITE_ORIGIN } = useEnv()\nconst TinyIconSearch = IconSearch()\nconst selectedModel = ref(null) // 当前选中的模型\n// 模型数据列表,包含模型及其字段\nconst models = ref([])\nconst localKeyword = ref('')\nconst showExportSql = ref(false)\nconst panelState = reactive({\n emitEvent: emit\n})\n\nprovide('panelState', panelState)\n// 根据搜索关键字过滤模型列表\nconst filteredModels = computed(() => {\n if (!localKeyword.value) return models.value\n return models.value.filter(\n (model) =>\n (model.nameCn || '').toLowerCase().includes(localKeyword.value.toLowerCase()) ||\n (model.description || '').toLowerCase().includes(localKeyword.value.toLowerCase())\n )\n})\n\nconst pluginPanelClosed = () => {\n emit('close')\n closeModelSettingPanel()\n}\n\n// 选中模型\nconst selectModel = (model) => {\n if (model.parameters?.length > 0) {\n model.parameters.forEach((item) => {\n item.isModel = false\n if (item.type === 'Enum') {\n item.options = typeof item.options === 'string' ? JSON.parse(item.options) : item.options || []\n }\n if (item.type === 'ModelRef') {\n item.isModel = true\n item.defaultValue = Number(item.defaultValue)\n }\n })\n }\n selectedModel.value = model\n openModelSettingPanel()\n}\n// 添加新模型\nconst handleAddModel = () => {\n selectedModel.value = {\n id: null,\n nameCn: '',\n nameEn: '',\n modelUrl: `${VITE_ORIGIN}platform-center/api/model-data`,\n description: '',\n parameters: []\n }\n openModelSettingPanel()\n}\n\n// 删除模型(TinyVue 二次确认)\nconst handleDeleteModel = async (model) => {\n const name = model.nameCn || model.nameEn || model.id\n try {\n const result = await Modal.confirm({\n title: '提示',\n message: `确认删除模型「${name}」吗?该操作不可恢复。`\n })\n const confirmed = result === 'confirm' || result?.action === 'confirm' || result === true || result === undefined\n if (!confirmed) return\n await deleteModel(model.id)\n const index = models.value.findIndex((m) => m.id === model.id)\n if (index > -1) {\n models.value.splice(index, 1)\n if (selectedModel.value?.id === model.id) selectedModel.value = null\n }\n } catch (error) {\n // 用户取消或弹窗异常,不做处理\n }\n}\n\nconst getModelLists = async () => {\n const data = await getModelList({\n currentPage: 1,\n pageSize: 500\n })\n models.value = data.records || []\n}\n// 导出模型的sql\nconst exportModel = async (id) => {\n const sqlContent = id ? await getModelSqlById(id) : await getModelSql()\n // 创建 Blob 对象,指定 MIME 类型为 text/sql\n const blob = new Blob([sqlContent], { type: 'text/sql' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = `${id ? selectedModel.value?.nameEn : 'models'}.sql`\n // 将 <a> 元素添加到 DOM 中\n document.body.appendChild(a)\n a.click()\n document.body.removeChild(a)\n URL.revokeObjectURL(url)\n}\n\nconst editCallback = async () => {\n await getModelLists()\n selectedModel.value = null\n closeModelSettingPanel()\n}\n\n// 生命周期:页面加载时拉取模型列表\nonMounted(async () => {\n await getModelLists()\n})\n</script>\n\n<style lang=\"less\" scoped>\n.plugin-modelmanager {\n height: 100%;\n width: 280px;\n .add-model {\n margin: 0 12px 12px 12px;\n width: calc(100% - 24px);\n }\n .model-manager-search {\n padding: 0 12px 12px 12px;\n }\n\n .model-list {\n border-top: 1px solid var(--te-model-common-border-color-divider);\n padding-top: 12px;\n overflow-y: scroll;\n color: var(--te-common-text-primary);\n font-size: var(--te-base-font-size-base);\n\n .model-item {\n box-shadow: var(--te-model-manage-input-border-color) 0, -1px;\n height: 24px;\n line-height: 24px;\n align-items: center;\n display: grid;\n padding: 0 12px;\n position: relative;\n color: var(--te-model-manage-text-color);\n cursor: pointer;\n &:hover,\n &.active {\n background: var(--te-model-manage-tree-node-bg-color-hover);\n .item-handler {\n display: inline-block;\n }\n }\n .item-label {\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--te-model-manage-draggable-text-color);\n .item-name {\n display: flex;\n align-items: center;\n }\n .plugin-icon-modelmanager {\n color: var(--te-model-manage-draggable-icon-color);\n margin-right: 8px;\n }\n }\n .item-handler {\n height: 24px;\n line-height: 24px;\n display: none;\n }\n }\n }\n}\n</style>\n","export default {\n id: 'engine.plugins.modelmanager',\n title: '模型管理',\n type: 'plugins',\n width: 280,\n icon: 'plugin-icon-modelmanager'\n}\n","import entry from './src/Main.vue'\nimport metaData from './meta'\nimport './src/styles/vars.less'\n\nexport default {\n ...metaData,\n entry\n}\n"],"names":["props","__props","localValue","ref","ruleFormRef","rules","watch","newModel","__expose","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","TinyForm","_createElementVNode","_hoisted_2","TinyFormItem","TinyInput","_cache","$event","_hoisted_3","_hoisted_4","_hoisted_5","fieldGrid","selectedModel","relativeModels","computed","item","getGridData","_b","_a","getModelName","modelId","model","m","handleTypeChange","field","nextTick","current","idx","getFieldTypeLabel","type","startFieldEdit","saveFieldEdit","cancelFieldEdit","index","f","handleDeleteField","TinyButton","$emit","_component_svg_icon","TinyGrid","TinyGridColumn","_withCtx","row","_Fragment","opt","_hoisted_6","_hoisted_7","_hoisted_8","TinySelect","_renderList","_createBlock","TinyOption","_hoisted_9","_toDisplayString","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","TinyCheckbox","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_withModifiers","modelApi","getModelList","params","getMetaApi","META_SERVICE","createModel","data","updateModel","id","deleteModel","getModelSql","getModelSqlById","isShow","openModelSettingPanel","closeModelSettingPanel","_sfc_main","PluginSetting","SvgButton","ButtonGroup","ModelBasicForm","FieldManager","Button","Collapse","CollapseItem","emit","PLUGIN_NAME","useLayout","activeName","modelBasicFormRef","expandConfig","handleAddField","newField","nameInputs","insertEnumValueAfter","removeEnumValue","isSaving","saveModel","latestModelData","valid","isModelRefRelative","propertyName","Notify","modelCopy","param","$setup","_component_plugin_setting","_ctx","_component_button_group","$props","_component_tiny_button","_component_svg_button","_component_tiny_collapse","_component_tiny_collapse_item","_component_model_basic_form","_component_field_manager","__emit","VITE_ORIGIN","useEnv","TinyIconSearch","IconSearch","models","localKeyword","showExportSql","panelState","reactive","provide","filteredModels","pluginPanelClosed","selectModel","handleAddModel","handleDeleteModel","name","result","Modal","getModelLists","exportModel","sqlContent","blob","url","a","editCallback","onMounted","PluginPanel","TinySearch","SearchEmpty","ModelSetting","metaData","entry"],"mappings":"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"}
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.section[data-v-
|
|
1
|
+
.section[data-v-7966159f]{margin-bottom:16px;border-radius:6px;padding:12px}.section-title[data-v-7966159f]{font-size:16px;font-weight:600;color:#262626;margin:0 0 16px;padding-bottom:8px;border-bottom:1px solid #f0f0f0}.form-item[data-v-7966159f]{margin-bottom:20px}.form-item label[data-v-7966159f]{display:block;margin-bottom:8px;font-weight:500;color:#262626;font-size:14px}.section .add-field-btn[data-v-d15af5f8]{margin-bottom:16px}.section[data-v-d15af5f8] .tiny-grid-body__expanded-row{background-color:var(--te-model-manage-input-bg-color)}.section .expand-section[data-v-d15af5f8]{margin-bottom:16px}.section .expand-section h4[data-v-d15af5f8]{font-size:14px;font-weight:600;color:var(--te-model-manage-title-text-color);margin:0 0 8px;padding-bottom:1px}.section .expand-section .enum-item[data-v-d15af5f8]{display:flex;align-items:center;margin-bottom:8px;padding:8px;background-color:var(--te-model-manage-input-bg-color);border-radius:4px}.section .expand-section .model-ref-section[data-v-d15af5f8]{margin-top:8px}.section .expand-section .model-ref-info[data-v-d15af5f8]{margin-top:8px;padding:8px;background:#f0f8ff;border-radius:4px;border:1px solid #d6e4ff}.section .expand-section .model-ref-info p[data-v-d15af5f8]{margin:0;font-size:12px;color:#1890ff}.section .editing-cell[data-v-d15af5f8] .tiny-input,.section .editing-cell[data-v-d15af5f8] .tiny-select{width:100%}.section .readonly-cell[data-v-d15af5f8]{cursor:pointer;border-radius:4px;transition:background-color .2s ease}.section .readonly-cell[data-v-d15af5f8]:hover{background-color:#f5f5f5}.section .field-actions[data-v-d15af5f8],.section .editing-cell[data-v-d15af5f8],.section .readonly-cell[data-v-d15af5f8]{background:transparent!important}.section .field-actions[data-v-d15af5f8]{display:flex;gap:8px}.section .field-actions span[data-v-d15af5f8]{color:var(--te-common-text-emphasize)}.modelmanager-plugin-setting[data-v-6c838220]{width:578px}.modelmanager-plugin-setting[data-v-6c838220] .tiny-collapse .tiny-collapse-item .tiny-collapse-item__header,.modelmanager-plugin-setting[data-v-6c838220] .tiny-collapse .tiny-collapse-item .tiny-collapse-item__wrap .tiny-collapse-item__content,.modelmanager-plugin-setting[data-v-6c838220] .tiny-collapse .tiny-collapse-item .tiny-collapse-item__wrap .tiny-collapse-item__content .section{padding:0}.plugin-modelmanager[data-v-d102b73c]{height:100%;width:280px}.plugin-modelmanager .add-model[data-v-d102b73c]{margin:0 12px 12px;width:calc(100% - 24px)}.plugin-modelmanager .model-manager-search[data-v-d102b73c]{padding:0 12px 12px}.plugin-modelmanager .model-list[data-v-d102b73c]{border-top:1px solid var(--te-model-common-border-color-divider);padding-top:12px;overflow-y:scroll;color:var(--te-common-text-primary);font-size:var(--te-base-font-size-base)}.plugin-modelmanager .model-list .model-item[data-v-d102b73c]{box-shadow:var(--te-model-manage-input-border-color) 0,-1px;height:24px;line-height:24px;align-items:center;display:grid;padding:0 12px;position:relative;color:var(--te-model-manage-text-color);cursor:pointer}.plugin-modelmanager .model-list .model-item[data-v-d102b73c]:hover,.plugin-modelmanager .model-list .model-item.active[data-v-d102b73c]{background:var(--te-model-manage-tree-node-bg-color-hover)}.plugin-modelmanager .model-list .model-item:hover .item-handler[data-v-d102b73c],.plugin-modelmanager .model-list .model-item.active .item-handler[data-v-d102b73c]{display:inline-block}.plugin-modelmanager .model-list .model-item .item-label[data-v-d102b73c]{overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;justify-content:space-between;color:var(--te-model-manage-draggable-text-color)}.plugin-modelmanager .model-list .model-item .item-label .item-name[data-v-d102b73c]{display:flex;align-items:center}.plugin-modelmanager .model-list .model-item .item-label .plugin-icon-modelmanager[data-v-d102b73c]{color:var(--te-model-manage-draggable-icon-color);margin-right:8px}.plugin-modelmanager .model-list .model-item .item-handler[data-v-d102b73c]{height:24px;line-height:24px;display:none}.plugin-modelmanager{--te-model-manage-title-text-color: var(--te-common-text-primary);--te-model-manage-input-bg-color: var(--te-common-bg-default);--te-model-manage-input-border-color: var(--te-common-border-default);--te-model-manage-tip-color: var(--te-common-text-primary);--te-model-manage-tip-text-color: var(--te-common-text-weaken);--te-model-manage-tip-dim-text-color: var(--te-common-text-primary);--te-model-manage-tree-text-bg-color: var(--te-common-bg-default);--te-model-manage-tree-node-bg-color: var(--te-common-bg-default);--te-model-manage-tree-node-bg-color-hover: var(--te-common-bg-container);--te-model-manage-text-color: var(--te-common-text-secondary);--te-model-manage-input-head-text-color: var(--te-common-text-primary);--te-model-manage-input-or-output-text-color: var(--te-common-text-secondary);--te-model-manage-life-cycle-alert-text-color: var(--te-common-text-weaken);--te-model-manage-icon-color: var(--te-common-icon-secondary);--te-model-manage-draggable-row-bg-color-hover: var(--te-common-bg-container);--te-model-manage-draggable-text-color: var(--te-common-text-primary);--te-model-manage-draggable-icon-color: var(--te-common-icon-secondary);--te-model-manage-draggable-border-color: var(--te-common-border-checked);--te-model-common-border-color-divider: var(--te-common-border-divider)}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentiny/tiny-engine-plugin-model-manager",
|
|
3
|
-
"version": "2.10.0
|
|
3
|
+
"version": "2.10.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -29,11 +29,11 @@
|
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"homepage": "https://opentiny.design/tiny-engine",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@opentiny/tiny-engine-common": "2.10.0
|
|
33
|
-
"@opentiny/tiny-engine-meta-register": "2.10.0
|
|
32
|
+
"@opentiny/tiny-engine-common": "2.10.0",
|
|
33
|
+
"@opentiny/tiny-engine-meta-register": "2.10.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@opentiny/tiny-engine-vite-plugin-meta-comments": "2.10.0
|
|
36
|
+
"@opentiny/tiny-engine-vite-plugin-meta-comments": "2.10.0",
|
|
37
37
|
"@vitejs/plugin-vue": "^5.1.2",
|
|
38
38
|
"@vitejs/plugin-vue-jsx": "^4.0.1",
|
|
39
39
|
"vite": "^5.4.2"
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"@opentiny/vue-renderless": "^3.20.0",
|
|
45
45
|
"vue": "^3.4.15"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "d956d78cf9f2572f6a2b50540ef2082e68f3777a"
|
|
48
48
|
}
|