diff --git a/packages/index-blank-placeholder/CHANGELOG.md b/packages/index-blank-placeholder/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..4b6e838a9f8023a199dbd2046ab76a11c2e01ea2 --- /dev/null +++ b/packages/index-blank-placeholder/CHANGELOG.md @@ -0,0 +1,12 @@ +# 版本变更日志 + +这个项目的所有关键变化都将记录在此文件中. + +此日志格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/), +并且此项目遵循 [Semantic Versioning](https://semver.org/lang/zh-CN/). + +## [Unreleased] + +## [0.0.2] - 2024-06-07 + +- 初始化 diff --git a/packages/index-blank-placeholder/ibiz.config.ts b/packages/index-blank-placeholder/ibiz.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..10e243cb9639ad91c97c6549702336dfdd1fc3de --- /dev/null +++ b/packages/index-blank-placeholder/ibiz.config.ts @@ -0,0 +1,65 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import path from 'path'; +import { defineConfig } from '@ibiz-template/cli'; + +const cwd = process.cwd(); + +export default defineConfig({ + bundles: [ + { + input: 'index.ts', + output: [ + { + format: 'system', + dir: 'dist', + entryFileNames: '[name].system.min.js', + sourcemap: false, + }, + ], + }, + ], + eslint: true, + stylelint: true, + theme: { + prefix: `@import "${path.resolve( + cwd, + 'node_modules/@ibiz-template/theme/style/global.scss', + )}";`, + }, + isCustomElement: tag => tag.startsWith('ion-'), + external: [ + 'vue', + 'vue-router', + 'vue-i18n', + 'element-plus', + 'async-validator', + 'dayjs', + 'dayjs/plugin/minMax', + 'dayjs/plugin/isSameOrBefore', + 'dayjs/plugin/quarterOfYear', + 'dayjs/plugin/weekOfYear', + 'dayjs/plugin/isoWeek', + 'echarts', + 'axios', + 'qs', + 'ramda', + 'interactjs', + 'lodash-es', + 'qx-util', + 'vuedraggable', + 'pinia', + 'cherry-markdown', + '@floating-ui/dom', + '@ibiz-template/core', + '@ibiz-template/runtime', + '@ibiz-template/vue3-util', + '@ibiz-template/model-helper', + '@ibiz-template/vue3-components', + '@ibiz-template-plugin/model-design', + '@wangeditor/editor', + '@ibiz-template-plugin/design-base', + '@wangeditor/editor-for-vue', + '@imengyu/vue3-context-menu', + '@ibiz-template-plugin/ai-chat', + ], +}); diff --git a/packages/index-blank-placeholder/package.json b/packages/index-blank-placeholder/package.json new file mode 100644 index 0000000000000000000000000000000000000000..42f571da260239c0a4067b1972d6003005e78eca --- /dev/null +++ b/packages/index-blank-placeholder/package.json @@ -0,0 +1,67 @@ +{ + "name": "@ibiz-template-plugin/index-blank-placeholder", + "version": "0.0.3-alpha.109", + "description": "首页空白占位", + "author": "tony001", + "license": "MIT", + "main": "lib/index.cjs", + "module": "es/index.mjs", + "types": "es/index.d.ts", + "system": "dist/index.system.min.js", + "styles": [ + "dist/index.min.css" + ], + "files": [ + "dist", + "es", + "lit", + "src", + "CHANGELOG.md", + "README.md" + ], + "publishConfig": { + "registry": "http://172.16.240.221:8081/repository/local/" + }, + "scripts": { + "dev": "ibiz-temp build -w", + "lint": "vue-tsc --noEmit && eslint 'src/**/*.tsx' 'src/**/*.ts'", + "build": "ibiz-temp build -c && vue-tsc --declaration --emitDeclarationOnly", + "preview": "vite preview", + "publish:next": "npm run build && npm publish --access public --tag=next --registry=http://172.16.240.221:8081/repository/local/", + "publish:dev": "npm run build && npm publish --access public --tag=dev --registry=http://172.16.240.221:8081/repository/local/", + "publish:beta": "npm run build && npm publish --access public --tag=beta --registry=http://172.16.240.221:8081/repository/local/", + "publish:npm": "npm run build && npm publish --access public --registry=http://172.16.240.221:8081/repository/local/" + }, + "dependencies": { + "@ibiz-template-plugin/ai-chat": "^0.0.20", + "@ibiz-template/core": "0.7.39-alpha.2", + "@ibiz-template/model-helper": "0.7.39-alpha.2", + "@ibiz-template/runtime": "0.7.39-alpha.2", + "@ibiz-template/theme": "^0.7.0", + "@ibiz-template/vue3-util": "0.7.39-alpha.2", + "@ibiz-template/web-theme": "2.0.0", + "@ibiz/model-core": "^0.1.67", + "@monaco-editor/loader": "^1.4.0", + "axios": "^1.6.2", + "element-plus": "^2.4.2", + "monaco-editor": "^0.45.0", + "qx-util": "^0.4.8", + "vue": "^3.3.8" + }, + "peerDependencies": { + "@ibiz-template/core": "^0.7.0", + "@ibiz-template/model-helper": "^0.7.0", + "@ibiz-template/runtime": "^0.7.0", + "@ibiz-template/theme": "^0.7.0", + "@ibiz-template/vue3-util": "^0.7.0", + "@ibiz/model-core": "^0.1.3", + "element-plus": "^2.4.2", + "vue": "^3.3.8" + }, + "devDependencies": { + "@types/lodash-es": "^4.17.12", + "@types/ramda": "^0.29.9", + "@types/sortablejs": "^1.15.7", + "@types/swagger-ui": "^3.52.4" + } +} diff --git "a/packages/index-blank-placeholder/public/images/modeling/common/\344\272\244\344\272\222\350\247\206\345\233\276\345\273\272\346\250\241.png" "b/packages/index-blank-placeholder/public/images/modeling/common/\344\272\244\344\272\222\350\247\206\345\233\276\345\273\272\346\250\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..a92c84b46358c832a57b1abc203aa0f9a3998954 Binary files /dev/null and "b/packages/index-blank-placeholder/public/images/modeling/common/\344\272\244\344\272\222\350\247\206\345\233\276\345\273\272\346\250\241.png" differ diff --git "a/packages/index-blank-placeholder/public/images/modeling/common/\346\225\260\346\215\256\347\273\223\346\236\204\345\273\272\346\250\241.png" "b/packages/index-blank-placeholder/public/images/modeling/common/\346\225\260\346\215\256\347\273\223\346\236\204\345\273\272\346\250\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..7bb2c68b1ae0fc7eaafcaafefbeb3e73741768b3 Binary files /dev/null and "b/packages/index-blank-placeholder/public/images/modeling/common/\346\225\260\346\215\256\347\273\223\346\236\204\345\273\272\346\250\241.png" differ diff --git "a/packages/index-blank-placeholder/public/images/modeling/common/\346\231\272\350\203\275\344\270\216\346\211\251\345\261\225\350\203\275\345\212\233.png" "b/packages/index-blank-placeholder/public/images/modeling/common/\346\231\272\350\203\275\344\270\216\346\211\251\345\261\225\350\203\275\345\212\233.png" new file mode 100644 index 0000000000000000000000000000000000000000..86e88c0e2db5b263c25b74aeba48d7e780e838f2 Binary files /dev/null and "b/packages/index-blank-placeholder/public/images/modeling/common/\346\231\272\350\203\275\344\270\216\346\211\251\345\261\225\350\203\275\345\212\233.png" differ diff --git "a/packages/index-blank-placeholder/public/images/modeling/common/\346\265\201\347\250\213\344\270\216\350\241\214\344\270\272\345\273\272\346\250\241.png" "b/packages/index-blank-placeholder/public/images/modeling/common/\346\265\201\347\250\213\344\270\216\350\241\214\344\270\272\345\273\272\346\250\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..df8a48ed5e9d4892a7aaa34ef26b3c5cc81c274f Binary files /dev/null and "b/packages/index-blank-placeholder/public/images/modeling/common/\346\265\201\347\250\213\344\270\216\350\241\214\344\270\272\345\273\272\346\250\241.png" differ diff --git "a/packages/index-blank-placeholder/public/images/modeling/common/\347\263\273\347\273\237\347\273\204\347\273\207\345\273\272\346\250\241.png" "b/packages/index-blank-placeholder/public/images/modeling/common/\347\263\273\347\273\237\347\273\204\347\273\207\345\273\272\346\250\241.png" new file mode 100644 index 0000000000000000000000000000000000000000..7d539ad56cdacd70ad372fd06fbeef36291c3341 Binary files /dev/null and "b/packages/index-blank-placeholder/public/images/modeling/common/\347\263\273\347\273\237\347\273\204\347\273\207\345\273\272\346\250\241.png" differ diff --git a/packages/index-blank-placeholder/public/images/modeling/screenshot/ai-output.gif b/packages/index-blank-placeholder/public/images/modeling/screenshot/ai-output.gif new file mode 100644 index 0000000000000000000000000000000000000000..c4f7be57c8260510b23babb48f6b3218659f2ce7 Binary files /dev/null and b/packages/index-blank-placeholder/public/images/modeling/screenshot/ai-output.gif differ diff --git a/packages/index-blank-placeholder/public/images/modeling/screenshot/entity-output.gif b/packages/index-blank-placeholder/public/images/modeling/screenshot/entity-output.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ae7b136307aa1784648dd5c1b0510f2afa9ea4f Binary files /dev/null and b/packages/index-blank-placeholder/public/images/modeling/screenshot/entity-output.gif differ diff --git a/packages/index-blank-placeholder/public/images/modeling/screenshot/logic-output.gif b/packages/index-blank-placeholder/public/images/modeling/screenshot/logic-output.gif new file mode 100644 index 0000000000000000000000000000000000000000..a1a997236cba58295905a1df647b935ac4ef11a9 Binary files /dev/null and b/packages/index-blank-placeholder/public/images/modeling/screenshot/logic-output.gif differ diff --git a/packages/index-blank-placeholder/public/images/modeling/screenshot/route-output.gif b/packages/index-blank-placeholder/public/images/modeling/screenshot/route-output.gif new file mode 100644 index 0000000000000000000000000000000000000000..a89daa2a3d93a4d896c3c9f2b36105a3e167d1a1 Binary files /dev/null and b/packages/index-blank-placeholder/public/images/modeling/screenshot/route-output.gif differ diff --git a/packages/index-blank-placeholder/public/images/modeling/screenshot/view-output.gif b/packages/index-blank-placeholder/public/images/modeling/screenshot/view-output.gif new file mode 100644 index 0000000000000000000000000000000000000000..cfb668792b5d049a127b97e0d187c0d46d486fc9 Binary files /dev/null and b/packages/index-blank-placeholder/public/images/modeling/screenshot/view-output.gif differ diff --git a/packages/index-blank-placeholder/scripts/link.sh b/packages/index-blank-placeholder/scripts/link.sh new file mode 100755 index 0000000000000000000000000000000000000000..6a1803718bcace84f8790d863347cd23c7be3e6a --- /dev/null +++ b/packages/index-blank-placeholder/scripts/link.sh @@ -0,0 +1,5 @@ +pnpm link --global "@ibiz-template/vue3-util" +pnpm link --global "@ibiz-template/model-helper" +pnpm link --global "@ibiz-template/runtime" +pnpm link --global "@ibiz-template/core" +pnpm link --global "@ibiz-template/theme" \ No newline at end of file diff --git a/packages/index-blank-placeholder/src/global.ts b/packages/index-blank-placeholder/src/global.ts new file mode 100644 index 0000000000000000000000000000000000000000..0fa10431b9670ddb5003e3e2fafbf06ce1dfd368 --- /dev/null +++ b/packages/index-blank-placeholder/src/global.ts @@ -0,0 +1,7 @@ +// 文件路径: [插件项目的根目录]/src/global.ts + +import { PluginStaticResource } from '@ibiz-template/runtime'; + +const resource = new PluginStaticResource(import.meta.url); + +export { resource }; diff --git a/packages/index-blank-placeholder/src/index-blank-placeholder.controller.ts b/packages/index-blank-placeholder/src/index-blank-placeholder.controller.ts new file mode 100644 index 0000000000000000000000000000000000000000..b1ff8df48bc36a18dcd660bcd89372986ef59330 --- /dev/null +++ b/packages/index-blank-placeholder/src/index-blank-placeholder.controller.ts @@ -0,0 +1,75 @@ +import { IPanelRawItem } from '@ibiz/model-core'; +import { PanelItemController } from '@ibiz-template/runtime'; +import { IndexBlankPlaceholderState } from './index-blank-placeholder.state'; + +/** + * 首页空白占位控制器 + * + * @export + * @class IndexBlankPlaceholderController + * @extends {PanelItemController} + */ +export class IndexBlankPlaceholderController extends PanelItemController { + declare state: IndexBlankPlaceholderState; + + protected createState(): IndexBlankPlaceholderState { + return new IndexBlankPlaceholderState(this.parent?.state); + } + + /** + * @description 当前视图路由层级 + * @exposedoc + * @readonly + * @type {(number | undefined)} + * @memberof IndexBlankPlaceholderController + */ + get routeDepth(): number | undefined { + return this.panel.view.modal.routeDepth; + } + + /** + * @description 首页导航栏 + * @exposedoc + * @readonly + * @type {(IData | undefined)} + * @memberof IndexBlankPlaceholderController + */ + get navPos(): IData | undefined { + return this.panel.panelItems.nav_pos_index; + } + + /** + * 初始化 + * + * @protected + * @return {*} {Promise} + * @memberof IndexBlankPlaceholderController + */ + protected async onInit(): Promise { + await super.onInit(); + this.state.keepAlive = true; + this.state.visible = false; + } + + /** + * @description 设置显示状态 + * @exposedoc + * @param {boolean} state + * @memberof IndexBlankPlaceholderController + */ + setVisible(state: boolean): void { + this.state.visible = state; + if (this.navPos) this.navPos.state.visible = !state; + if (!state) this.setTabActive(0); + } + + /** + * @description 设置分页激活 + * @exposedoc + * @param {number} index + * @memberof IndexBlankPlaceholderController + */ + setTabActive(index: number): void { + this.state.activeTabIndex = index; + } +} diff --git a/packages/index-blank-placeholder/src/index-blank-placeholder.provider.ts b/packages/index-blank-placeholder/src/index-blank-placeholder.provider.ts new file mode 100644 index 0000000000000000000000000000000000000000..1f120c0d7fe595ebd7c9fd385d1506fda37fd3a1 --- /dev/null +++ b/packages/index-blank-placeholder/src/index-blank-placeholder.provider.ts @@ -0,0 +1,28 @@ +import { + PanelController, + IPanelItemProvider, + PanelItemController, +} from '@ibiz-template/runtime'; +import { IPanelContainer } from '@ibiz/model-core'; +import { IndexBlankPlaceholderController } from './index-blank-placeholder.controller'; + +/** + * 首页空白占位适配器 + * + * @export + * @class IndexBlankPlaceholderProvider + * @implements {IPanelItemProvider} + */ +export class IndexBlankPlaceholderProvider implements IPanelItemProvider { + component: string = 'IndexBlankPlaceholder'; + + async createController( + panelItem: IPanelContainer, + panel: PanelController, + parent: PanelItemController | undefined, + ): Promise { + const c = new IndexBlankPlaceholderController(panelItem, panel, parent); + await c.init(); + return c; + } +} diff --git a/packages/index-blank-placeholder/src/index-blank-placeholder.scss b/packages/index-blank-placeholder/src/index-blank-placeholder.scss new file mode 100644 index 0000000000000000000000000000000000000000..c6f5f64356ec64cf486b9e6af20ef12fd3138d27 --- /dev/null +++ b/packages/index-blank-placeholder/src/index-blank-placeholder.scss @@ -0,0 +1,141 @@ +@include b(studio-index-blank-placeholder) { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + height: 100%; + padding: 24px; + + @include e(font-neon) { + background-image: linear-gradient(to right, #178cde, #00ffe4 50%, #178cde); + background-clip: text; + -webkit-text-fill-color: transparent; + } + + @include e(container) { + display: flex; + flex-direction: column; + width: 70%; + height: 100%; + } + + @include e(header) { + flex-shrink: 0; + margin: 0 auto; + margin-bottom: 50px; + text-align: center; + + @include m(title) { + font-size: 42px; + font-weight: 600; + line-height: 55px; + color: #dfdfd6; + } + + @include m(description) { + margin-top: 20px; + font-size: 20px; + line-height: 36px; + color: #dfdfd6; + } + } + + @include e(tabs) { + display: flex; + flex-shrink: 0; + justify-content: space-around; + padding-bottom: 16px; + border-bottom: 4px solid #f0f0f0; + + @include m(item) { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: 24px; + color: #dfdfd6; + cursor: pointer; + + img { + width: 80px; + height: 80px; + margin: 0 auto; + } + + @include when(active) { + position: relative; + font-weight: bold; + color: #2c8ff3; + + &::after { + position: absolute; + bottom: -20px; + left: 0; + width: 100%; + height: 4px; + content: ''; + background-color: #2c8ff3; + border-radius: 4px; + } + } + } + } + + @include e(content) { + display: flex; + flex-grow: 1; + gap: 24px; + margin-top: 30px; + overflow: auto; + + @include m(left) { + width: 25%; + } + + @include m(right) { + width: 75%; + height: 610px; + margin-top: 20px; + + img { + width: 100%; + height: 100%; + } + } + + @include m(title) { + font-size: 28px; + font-weight: bold; + line-height: 37px; + color: #dfdfd6; + } + } + + @include e(list) { + @include m(item) { + position: relative; + padding-left: 22px; + margin-top: 16px; + + &::before { + position: absolute; + top: 8px; + left: 0; + width: 10px; + height: 10px; + content: ""; + background-color: #2c8ff3; + border-radius: 50%; + } + } + } + + .#{bem(studio-index-blank-placeholder, content, tagline)}, + .#{bem(studio-index-blank-placeholder, content, description)}, + .#{bem(studio-index-blank-placeholder, list)} { + margin-top: 16px; + font-size: 20px; + line-height: 26px; + color: #98989f; + } +} diff --git a/packages/index-blank-placeholder/src/index-blank-placeholder.state.ts b/packages/index-blank-placeholder/src/index-blank-placeholder.state.ts new file mode 100644 index 0000000000000000000000000000000000000000..37a262ade406fcaac78e4236d5d61cf65c8efb8c --- /dev/null +++ b/packages/index-blank-placeholder/src/index-blank-placeholder.state.ts @@ -0,0 +1,161 @@ +import { PanelItemState } from '@ibiz-template/runtime'; + +export interface ITabItem { + /** + * @description 分页标题 + * @type {string} + * @memberof ITabItem + */ + title: string; + /** + * @description 分页图标 + * @type {string} + * @memberof ITabItem + */ + icon: string; + /** + * @description 分页内容 + * @type {{ + * title: string; + * tagline: string; + * description: string; + * items: string[]; + * image: string; + * }} + * @memberof ITabItem + */ + content: { + /** + * @description 内容标题 + * @type {string} + */ + title: string; + /** + * @description 内容标语 + * @type {string} + */ + tagline: string; + /** + * @description 内容描述 + * @type {string} + */ + description: string; + /** + * @description 内容项集合 + * @type {string[]} + */ + items: string[]; + /** + * @description 内容图片 + * @type {string} + */ + image: string; + }; +} + +/** + * 首页空白占位状态 + * + * @export + * @class IndexBlankPlaceholderState + * @extends {PanelItemState} + */ +export class IndexBlankPlaceholderState extends PanelItemState { + /** + * @description 激活项标签页索引 + * @type {number} + * @memberof IndexBlankPlaceholderState + */ + activeTabIndex: number = 0; + + /** + * @description 标签页集合 + * @type {ITabItem[]} + * @memberof IndexBlankPlaceholderState + */ + tabs: ITabItem[] = [ + { + title: '数据结构建模', + icon: './images/modeling/common/数据结构建模.png', + content: { + title: '数据结构建模', + tagline: '以标准 ER 设计器为核心,构建系统的数据骨架。', + description: '', + items: [ + '标准 ER 设计器:图形化实体建模', + '支持数据实体、属性、关系等建模操作。为其他模块提供数据支撑', + '关系数据库导入插件:一键导入表结构为模型', + '模型透视工具:模型依赖分析与可视视图', + ], + image: './images/modeling/screenshot/entity-output.gif', + }, + }, + { + title: '交互视图建模', + icon: './images/modeling/common/交互视图建模.png', + content: { + title: '交互视图建模', + tagline: + '统一的 UI 组件体系,支持表单、表格、图表、树、看板等设计器,所建即所见,组合灵活。', + description: '', + items: [ + '标准表单设计器:字段布局、交互规则、校验逻辑', + '标准表格设计器:列配置、分页过滤、行为按钮', + '标准图表设计器:多种可视化图表构建', + '标准视图设计器与视图建立向导插件:构建业务页面整体结构', + '多数据部件设计器 / 树部件 / 看板设计器:复合组件建模支持', + '标准工具栏设计器:按钮区逻辑编排与权限控制', + ], + image: './images/modeling/screenshot/view-output.gif', + }, + }, + { + title: '流程与行为建模', + icon: './images/modeling/common/流程与行为建模.png', + content: { + title: '流程与行为建模', + tagline: + '构建系统的行为逻辑与数据流动过程,包括审批流、业务流、数据触发逻辑等。', + description: '', + items: [ + '标准工作流设计器:图形化流程编辑器', + '数据流设计器:事件驱动的数据加工过程', + '属性值规则设计器:字段间联动与规则设置', + '服务动作定义:行为、规则、逻辑设计器以及接口发布器', + ], + image: './images/modeling/screenshot/logic-output.gif', + }, + }, + { + title: '系统组织建模', + icon: './images/modeling/common/系统组织建模.png', + content: { + title: '系统组织建模', + tagline: '定义应用的导航、菜单结构、权限入口等,组织系统整体结构。', + description: ' ', + items: [ + '应用菜单设计器:模块、路由以及视图导航建模', + '系统权限管理:设计时配置数据、行为与视图权限', + '通过系统自动映射接口服务,将接口与对应的服务实现进行关联,实体、集合、实体行为、属性映射为接口对象、方法、参数。', + ], + image: './images/modeling/screenshot/route-output.gif', + }, + }, + { + title: '智能与扩展能力', + icon: './images/modeling/common/智能与扩展能力.png', + content: { + title: '智能与扩展能力', + tagline: '构建过程中使用 AI 与插件提升效率,实现自我演进与社区协作。', + description: '', + items: [ + 'AI 建模助手:推荐字段、草图生成、流程建议', + 'DSL 描述引擎:模型描述即配置,支持版本管理与合并', + '插件机制:全栈插件支持,开发者可参与二次开发', + '版本对比/差异合并:多人协作场景下高效协同', + ], + image: './images/modeling/screenshot/ai-output.gif', + }, + }, + ]; +} diff --git a/packages/index-blank-placeholder/src/index-blank-placeholder.tsx b/packages/index-blank-placeholder/src/index-blank-placeholder.tsx new file mode 100644 index 0000000000000000000000000000000000000000..dd2b32c8a3f8de4b713b1f61ad991b12e21ec71c --- /dev/null +++ b/packages/index-blank-placeholder/src/index-blank-placeholder.tsx @@ -0,0 +1,96 @@ +import { IPanelRawItem } from '@ibiz/model-core'; +import { computed, defineComponent, PropType } from 'vue'; +import { onRouteChange, useNamespace } from '@ibiz-template/vue3-util'; +import { IndexBlankPlaceholderController } from './index-blank-placeholder.controller'; +import { resource } from './global'; +import './index-blank-placeholder.scss'; + +export const IndexBlankPlaceholder = defineComponent({ + name: 'IndexBlankPlaceholder', + props: { + modelData: { + type: Object as PropType, + required: true, + }, + controller: { + type: Object as PropType, + required: true, + }, + }, + setup(props) { + const c = props.controller; + const ns = useNamespace('studio-index-blank-placeholder'); + + const activeTab = computed(() => { + return c.state.tabs[c.state.activeTabIndex]; + }); + + if (c.routeDepth) { + onRouteChange(args => { + // 如果有2级视图则不显示 + c.setVisible(!args.currentKey); + }, c.routeDepth + 1); + } + + return { ns, activeTab }; + }, + render() { + return ( +
+
+
+
+ 设计能力矩阵 +
+
+ iBizModeling + 将系统建模过程抽象为独立能力,每一个都是可插拔的建模子系统,组成完整的数字应用建模工具体系。 +
+
+
+ {this.controller.state.tabs.map((tab, index) => { + return ( +
this.controller.setTabActive(index)} + > + + {tab.title} +
+ ); + })} +
+
+
+
+ {this.activeTab.content.title} +
+
+ {this.activeTab.content.tagline} +
+
+ {this.activeTab.content.description} +
+
+ {this.activeTab.content.items.map(item => { + return
{item}
; + })} +
+
+
+ {this.activeTab.content.image && ( + + )} +
+
+
+
+ ); + }, +}); diff --git a/packages/index-blank-placeholder/src/index.ts b/packages/index-blank-placeholder/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..4800ba4767c3c703288555f25dc001de14e5d2f7 --- /dev/null +++ b/packages/index-blank-placeholder/src/index.ts @@ -0,0 +1,14 @@ +import { App } from 'vue'; +import { registerPanelItemProvider } from '@ibiz-template/runtime'; +import { IndexBlankPlaceholder } from './index-blank-placeholder'; +import { IndexBlankPlaceholderProvider } from './index-blank-placeholder.provider'; + +export default { + install(app: App) { + app.component(IndexBlankPlaceholder.name!, IndexBlankPlaceholder); + registerPanelItemProvider( + 'CUSTOM_INDEX_BLANK_PLACEHOLDER', + () => new IndexBlankPlaceholderProvider(), + ); + }, +}; diff --git a/packages/index-blank-placeholder/tsconfig.json b/packages/index-blank-placeholder/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..3fabbe1ca57708f83f99951487e109287745e784 --- /dev/null +++ b/packages/index-blank-placeholder/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "jsx": "preserve", + "jsxImportSource": "vue", + "declarationDir": "es", + "noImplicitAny": false, + }, + "include": [ + "src/**/*.ts" + ], + "exclude": [ + "node_modules", + "test" + ] +}