diff --git a/CHANGELOG.md b/CHANGELOG.md index 892efcfdcc8133ece15bacbd47679bd3df4f3611..5c2629e2dbdd24a8b4bf94e95fa63033f7358c9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,15 @@ ## [Unreleased] +### Added + +- 新增vue-text-format依赖 + +### Change + +- 分页导航、树导航视图引擎监听实体数据变化 +- 表单项标签垂直对齐 + ## [0.0.32] - 2024-10-29 ### Added diff --git a/package.json b/package.json index 62b6c978bf7f577bf75cb1160d81b3869c04b782..a49998f104859f89fdb1f158e396883955e3294c 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "async-validator": "^4.2.5", "cherry-markdown": "^0.8.26", "dingtalk-jsapi": "^3.0.38", + "vue-text-format": "^3.1.2", "dayjs": "^1.11.10", "echarts": "^5.4.3", "lodash-es": "^4.17.21", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5f04e9708c272ebc9a40a36023ec3301d54c746..808bb3e05c28d8f3ed50c63b8b09bc2be609c81b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,6 +80,9 @@ dependencies: vue-router: specifier: ^4.2.5 version: 4.2.5(vue@3.3.9) + vue-text-format: + specifier: ^3.1.2 + version: 3.1.2 vue3-hash-calendar: specifier: ^1.1.3 version: 1.1.3(vue@3.3.9) @@ -4604,7 +4607,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /function-bind@1.1.2: @@ -7291,7 +7293,6 @@ packages: hasBin: true optionalDependencies: fsevents: 2.3.3 - dev: true /rollup@4.6.1: resolution: {integrity: sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==} @@ -8605,6 +8606,12 @@ packages: he: 1.2.0 dev: true + /vue-text-format@3.1.2: + resolution: {integrity: sha512-TxwtpH3Oj5ezzqNAZ6kAsncuaPUbhoMosBW1mMmtP53ju+EhclO6xH1yGvD884CB0inKRNfiqFXvktez7DQ+Iw==} + dependencies: + rollup: 3.29.4 + dev: false + /vue-tsc@1.8.24(typescript@5.3.2): resolution: {integrity: sha512-eH1CSj231OzVEY5Hi7wS6ubzyOEwgr5jCptR0Ddf2SitGcaXIsPVDvrprm3eolCdyhDt3WS1Eb2F4fGX9BsUUw==} hasBin: true diff --git a/src/control/form/form-detail/form-item/form-item-container/form-item-container.scss b/src/control/form/form-detail/form-item/form-item-container/form-item-container.scss index 8af1af17d6962fab9aef96c24b9a400e15622483..d4b89a4fed86a40b7777f4aa7ce5ded8f832d9c7 100644 --- a/src/control/form/form-detail/form-item/form-item-container/form-item-container.scss +++ b/src/control/form/form-detail/form-item/form-item-container/form-item-container.scss @@ -72,6 +72,7 @@ $form-item-label: (line-height: 1, overflow: visible; color: getCssVar(form-item-label, text-color); height: getCssVar(form-item, line-height); + line-height: getCssVar(form-item, line-height); span { @include utils-ellipsis; diff --git a/src/view-engine/mob-tab-exp-view.engine.ts b/src/view-engine/mob-tab-exp-view.engine.ts index a21a4362cd687bc39471b2ab2a43be61251e8117..50cfc2d73aa253591cdbf23e7ac3f69ab80caa2c 100644 --- a/src/view-engine/mob-tab-exp-view.engine.ts +++ b/src/view-engine/mob-tab-exp-view.engine.ts @@ -1,3 +1,5 @@ +/* eslint-disable no-case-declarations */ +import { IPortalMessage } from '@ibiz-template/core'; import { ViewController, ITabExpPanelController, @@ -7,7 +9,7 @@ import { calcDeCodeNameById, IToolbarController, } from '@ibiz-template/runtime'; -import { IAppDETabExplorerView } from '@ibiz/model-core'; +import { IAppDataEntity, IAppDETabExplorerView } from '@ibiz/model-core'; export class MobTabExpViewEngine extends ViewEngineBase { /** @@ -80,6 +82,14 @@ export class MobTabExpViewEngine extends ViewEngineBase { return this.view.getController('footertoolbar') as IToolbarController; } + /** + * @description 当前多数据部件对应的应用实体对象 + * @protected + * @type {IAppDataEntity} + * @memberof MobTreeExpViewEngine + */ + protected dataEntity!: IAppDataEntity; + /** * 视图created生命周期执行逻辑 * @@ -96,6 +106,13 @@ export class MobTabExpViewEngine extends ViewEngineBase { this.view.slotProps.tabexppanel = {}; } this.view.slotProps.tabexppanel.defaultTabName = this.view.state.srfnav; + if (this.view.model.appDataEntityId) { + // 初始化实体属性id和name的映射 + this.dataEntity = await ibiz.hub.getAppDataEntity( + this.view.model.appDataEntityId!, + this.view.model.appId, + ); + } } async onMounted(): Promise { @@ -160,4 +177,40 @@ export class MobTabExpViewEngine extends ViewEngineBase { toolbar?.calcButtonState(data, appDeId); }); } + + /** + * @description 检测实体数据变更 + * @protected + * @param {IPortalMessage} msg + * @return {*} {void} + * @memberof MobTreeExpViewEngine + */ + protected onDEDataChange(msg: IPortalMessage): void { + // 非这个实体的数据变更,则不处理 + if ( + !msg.data || + (msg.data as IData).srfdecodename !== this.dataEntity?.codeName + ) { + return; + } + + let isRefresh = false; + const { srfkey } = msg.data as IData; + + // 只监听更新事件 + switch (msg.subtype) { + case 'OBJECTUPDATED': + const { srfactiveviewdata } = this.view.state; + if (srfactiveviewdata && srfactiveviewdata.srfkey === srfkey) { + isRefresh = true; + } + break; + default: + break; + } + + if (isRefresh) { + this.loadEntityData(); + } + } } diff --git a/src/view-engine/mob-tree-exp-view.engine.ts b/src/view-engine/mob-tree-exp-view.engine.ts index 304800dcee5b7de7f06f393fc02b3deb3c273d60..4e3b55e1523b5cba8941435ac6199d24e16801c5 100644 --- a/src/view-engine/mob-tree-exp-view.engine.ts +++ b/src/view-engine/mob-tree-exp-view.engine.ts @@ -1,3 +1,5 @@ +/* eslint-disable no-case-declarations */ +import { IPortalMessage } from '@ibiz-template/core'; import { ViewController, ITreeExpViewEvent, @@ -7,7 +9,7 @@ import { IExpBarControlController, calcDeCodeNameById, } from '@ibiz-template/runtime'; -import { IAppDETreeExplorerView } from '@ibiz/model-core'; +import { IAppDataEntity, IAppDETreeExplorerView } from '@ibiz/model-core'; export class MobTreeExpViewEngine extends ViewEngineBase { /** @@ -45,6 +47,14 @@ export class MobTreeExpViewEngine extends ViewEngineBase { return this.expBar.xDataController as ITreeController; } + /** + * @description 当前多数据部件对应的应用实体对象 + * @protected + * @type {IAppDataEntity} + * @memberof MobTreeExpViewEngine + */ + protected dataEntity!: IAppDataEntity; + async onCreated(): Promise { await super.onCreated(); const { childNames } = this.view; @@ -52,6 +62,13 @@ export class MobTreeExpViewEngine extends ViewEngineBase { if (!this.view.slotProps.treeexppanel) { this.view.slotProps.treeexppanel = {}; } + if (this.view.model.appDataEntityId) { + // 初始化实体属性id和name的映射 + this.dataEntity = await ibiz.hub.getAppDataEntity( + this.view.model.appDataEntityId!, + this.view.model.appId, + ); + } } async onMounted(): Promise { @@ -63,4 +80,40 @@ export class MobTreeExpViewEngine extends ViewEngineBase { } await this.loadEntityData(); } + + /** + * @description 检测实体数据变更 + * @protected + * @param {IPortalMessage} msg + * @return {*} {void} + * @memberof MobTreeExpViewEngine + */ + protected onDEDataChange(msg: IPortalMessage): void { + // 非这个实体的数据变更,则不处理 + if ( + !msg.data || + (msg.data as IData).srfdecodename !== this.dataEntity?.codeName + ) { + return; + } + + let isRefresh = false; + const { srfkey } = msg.data as IData; + + // 只监听更新事件 + switch (msg.subtype) { + case 'OBJECTUPDATED': + const { srfactiveviewdata } = this.view.state; + if (srfactiveviewdata && srfactiveviewdata.srfkey === srfkey) { + isRefresh = true; + } + break; + default: + break; + } + + if (isRefresh) { + this.loadEntityData(); + } + } }