From 4e3b8cc5171732a4ba335be6cb8892e70f0df586 Mon Sep 17 00:00:00 2001 From: ShineKOT <1917095344@qq.com> Date: Tue, 3 Jun 2025 14:32:34 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E9=A1=B9=E5=B1=9E=E6=80=A7=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 ++++ .../form-item-container/form-item-container.scss | 14 ++++++++++---- .../form-item-container/form-item-container.tsx | 6 ++++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8423e545..4699a854 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,10 @@ - 修复下拉列表样式异常,导致表格内高度异常 +### Changed + +- 优化表单项属性提示 + ## [0.7.40-alpha.21] - 2025-05-28 ### Added 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 a06b685e..51955c44 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 @@ -26,8 +26,8 @@ $form-item-container: ( @include m(content) { display: flex; - max-width: 100%; align-items: center; + max-width: 100%; @include when(tooltip) { cursor: pointer; @@ -46,9 +46,9 @@ $form-item-container: ( @include e(popper) { &.el-popper { - border-radius: 0; padding: getCssVar(spacing, extra-tight); border: 1px solid getCssVar(color, border); + border-radius: 0; box-shadow: getCssVar(shadow, elevated); table { @@ -58,8 +58,8 @@ $form-item-container: ( table tr td, table tr th { - border: 1px solid getCssVar(color, border); padding: getCssVar(spacing, extra-tight) getCssVar(spacing, tight); + border: 1px solid getCssVar(color, border); } .el-popper__arrow { @@ -70,10 +70,16 @@ $form-item-container: ( @include m(content) { max-width: 500px; padding: getCssVar(spacing, extra-tight); + a { color: getCssVar(color, link); } } + + @include m(tooltip) { + min-width: 50px; + min-height: 20px; + } } @include m((left, right)) { @@ -164,9 +170,9 @@ $form-item-container: ( @include e(error) { @include utils-ellipsis; + position: absolute; top: 100%; width: 100%; - position: absolute; font-size: getCssVar('form-item-container', 'error-font-size'); line-height: calc( getCssVar('form-item-container', 'error-font-size') + 2px diff --git a/src/control/form/form-detail/form-item/form-item-container/form-item-container.tsx b/src/control/form/form-detail/form-item/form-item-container/form-item-container.tsx index f941ba0b..dd290151 100644 --- a/src/control/form/form-detail/form-item/form-item-container/form-item-container.tsx +++ b/src/control/form/form-detail/form-item/form-item-container/form-item-container.tsx @@ -1,5 +1,5 @@ import { IBizIcon, useNamespace } from '@ibiz-template/vue3-util'; -import { ref, PropType, defineComponent, watch } from 'vue'; +import { ref, PropType, defineComponent, watch, onUnmounted } from 'vue'; import { showTitle } from '@ibiz-template/core'; import { FormItemController } from '@ibiz-template/runtime'; import './form-item-container.scss'; @@ -25,6 +25,8 @@ export const IBizFormItemContainer = defineComponent({ }, ); + onUnmounted(() => c.clearTipsCache()); + const renderInputTip = () => { return ( - {enableInputTip && ( + {enableInputTip && ibiz.config.form.showTipsIcon && ( Date: Tue, 3 Jun 2025 17:10:45 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=E5=86=85=E7=BD=AE=E5=AF=BC=E8=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../control-navigation/control-navigation.tsx | 15 ++++ .../provider/calendar-navigation.provider.ts | 8 +- .../control-navigation/provider/index.ts | 9 +-- .../provider/map-navigation.provider.ts | 56 +++++++++++++ .../provider/navigation-base.provider.ts | 13 +++- src/common/map-chart/map-chart.tsx | 4 +- src/control/map/map.scss | 8 ++ src/control/map/map.tsx | 78 ++++++++++++------- 9 files changed, 147 insertions(+), 45 deletions(-) create mode 100644 src/common/control-navigation/provider/map-navigation.provider.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 4699a854..03a1beff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - appUtil新增获取应用上下文 - 新增表格列过滤功能 - 新增表格,列表支持行明细内置导航模式 +- 新增地图内置导航 ### Fixed diff --git a/src/common/control-navigation/control-navigation.tsx b/src/common/control-navigation/control-navigation.tsx index d46d30e4..f9767120 100644 --- a/src/common/control-navigation/control-navigation.tsx +++ b/src/common/control-navigation/control-navigation.tsx @@ -8,6 +8,7 @@ import { Ref, watch, PropType, + computed, onMounted, defineComponent, resolveComponent, @@ -88,6 +89,18 @@ export const IBizControlNavigation = defineComponent({ : 'horizontal', ); + // 特殊处理地图上下导航样式,防止地图样式异常 + const style = computed(() => { + const { controlType, height } = props.controller.model; + if (controlType === 'MAP' && splitMode.value === 'vertical') + return { + height: `${ + height ? height + (navViewMaxHeight || navViewHeight || 400) : 1000 + }px`, + }; + return undefined; + }); + watch( () => provider.navViewMsg.value, async (newVal, oldVal) => { @@ -146,6 +159,7 @@ export const IBizControlNavigation = defineComponent({ return { ns, + style, navStyle, provider, splitMode, @@ -159,6 +173,7 @@ export const IBizControlNavigation = defineComponent({ return (
{state.enableNavView ? ( diff --git a/src/common/control-navigation/provider/calendar-navigation.provider.ts b/src/common/control-navigation/provider/calendar-navigation.provider.ts index ea6b9c85..93238f0e 100644 --- a/src/common/control-navigation/provider/calendar-navigation.provider.ts +++ b/src/common/control-navigation/provider/calendar-navigation.provider.ts @@ -1,7 +1,7 @@ import { - CalendarController, - ICalendarItemData, INavViewMsg, + ICalendarItemData, + CalendarController, } from '@ibiz-template/runtime'; import { ISysCalendar } from '@ibiz/model-core'; import { NavgationBaseProvider } from './navigation-base.provider'; @@ -50,9 +50,9 @@ export class CalendarNavigationProvider extends NavgationBaseProvider { this.controller.params, ); return { - key: item.navId, - context, params, + context, + key: item.navId, viewId: itemModel.navAppViewId, }; } diff --git a/src/common/control-navigation/provider/index.ts b/src/common/control-navigation/provider/index.ts index ede1da57..71209757 100644 --- a/src/common/control-navigation/provider/index.ts +++ b/src/common/control-navigation/provider/index.ts @@ -2,6 +2,7 @@ import { MDControlController } from '@ibiz-template/runtime'; import { NavgationBaseProvider } from './navigation-base.provider'; import { CalendarNavigationProvider } from './calendar-navigation.provider'; import { TreeNavigationProvider } from './tree-navigation.provider'; +import { MapNavigationProvider } from './map-navigation.provider'; /** * 获取部件导航适配器 @@ -14,11 +15,9 @@ export function getNavigationProvider( controller: MDControlController, ): NavgationBaseProvider { const { controlType } = controller.model; - if (controlType === 'CALENDAR') { + if (controlType === 'CALENDAR') return new CalendarNavigationProvider(controller); - } - if (controlType === 'TREEVIEW') { - return new TreeNavigationProvider(controller); - } + if (controlType === 'TREEVIEW') return new TreeNavigationProvider(controller); + if (controlType === 'MAP') return new MapNavigationProvider(controller); return new NavgationBaseProvider(controller); } diff --git a/src/common/control-navigation/provider/map-navigation.provider.ts b/src/common/control-navigation/provider/map-navigation.provider.ts new file mode 100644 index 00000000..2387a1c5 --- /dev/null +++ b/src/common/control-navigation/provider/map-navigation.provider.ts @@ -0,0 +1,56 @@ +import { IMapData, INavViewMsg, MapController } from '@ibiz-template/runtime'; +import { ISysMap } from '@ibiz/model-core'; +import { NavgationBaseProvider } from './navigation-base.provider'; + +/** + * 地图导航适配器 + * + * @export + * @class MapNavigationProvider + * @extends {NavgationBaseProvider} + */ +export class MapNavigationProvider extends NavgationBaseProvider { + keyName = 'id'; + + declare controller: MapController; + + declare model: ISysMap; + + onNavDataByStack(): void { + const { items } = this.controller.state; + const navData = + this.navStack + .map(key => items.find(item => item._id === key)) + .find(item => item !== undefined) || items[0]; + if (navData) { + this.controller.setNavData(navData); + } else { + this.navStack = []; + this.navViewMsg.value = undefined; + } + } + + getNavViewMsg(item: IMapData): INavViewMsg { + const { sysMapItems } = this.model; + const itemModel = sysMapItems?.find(_item => _item.id === item._mapItemId); + if (itemModel) { + const { context, params } = this.prepareParams( + itemModel, + item._deData, + this.controller.context, + this.controller.params, + ); + return { + params, + context, + key: item._id, + viewId: itemModel.navAppViewId, + }; + } + return { + key: item._id, + context: this.controller.context, + params: this.controller.params, + }; + } +} diff --git a/src/common/control-navigation/provider/navigation-base.provider.ts b/src/common/control-navigation/provider/navigation-base.provider.ts index 8d9165c6..b249c428 100644 --- a/src/common/control-navigation/provider/navigation-base.provider.ts +++ b/src/common/control-navigation/provider/navigation-base.provider.ts @@ -134,11 +134,11 @@ export class NavgationBaseProvider { * @memberof NavgationBaseProvider */ onNavDataChange(event: IMDControlEvent['onNavDataChange']['event']): void { - const { navData, context, params } = event; + const { navData } = event; // 数据变更才重新导航 if (this.navViewMsg.value?.key !== navData[this.keyName]) { this.navStack.unshift(navData[this.keyName]); - this.navViewMsg.value = this.getNavViewMsg(navData, context, params); + this.navViewMsg.value = this.getNavViewMsg(navData); } } @@ -151,9 +151,14 @@ export class NavgationBaseProvider { * @return {*} {INavViewMsg} * @memberof NavgationBaseProvider */ - getNavViewMsg(data: IData, context: IContext, params: IParams): INavViewMsg { + getNavViewMsg(data: IData): INavViewMsg { const viewModelId = (this.model as INavigatable).navAppViewId; - const result = this.prepareParams(this.model, data, context, params); + const result = this.prepareParams( + this.model, + data, + this.controller.context, + this.controller.params, + ); return { key: data[this.keyName], context: result.context, diff --git a/src/common/map-chart/map-chart.tsx b/src/common/map-chart/map-chart.tsx index b2604eab..258f9020 100644 --- a/src/common/map-chart/map-chart.tsx +++ b/src/common/map-chart/map-chart.tsx @@ -192,10 +192,10 @@ export const IBizMapChart = defineComponent({ emit('mapChange', e); break; case 'pointClick': - emit('pointClick', { data: findData(e._id, 'point') }); + emit('pointClick', findData(e._id, 'point')); break; case 'areaClick': - emit('areaClick', { data: findData(e._id, 'area') }); + emit('areaClick', findData(e._id, 'area')); break; default: break; diff --git a/src/control/map/map.scss b/src/control/map/map.scss index d7f94ce4..ace82d90 100644 --- a/src/control/map/map.scss +++ b/src/control/map/map.scss @@ -1,10 +1,18 @@ $control-map: (); @include b(control-map) { + position: relative; width: 100%; height: 100%; @include e(map) { width: 100%; height: 100%; } + @include e(nav-icon) { + position: absolute; + top: 18px; + right: 10px; + color: getCssVar(color, primary); + cursor: pointer; + } } diff --git a/src/control/map/map.tsx b/src/control/map/map.tsx index e77d56c1..96dc5cc4 100644 --- a/src/control/map/map.tsx +++ b/src/control/map/map.tsx @@ -1,3 +1,4 @@ +/* eslint-disable no-nested-ternary */ import { useControlController, useNamespace } from '@ibiz-template/vue3-util'; import { computed, defineComponent, PropType, ref } from 'vue'; import { ISysMap } from '@ibiz/model-core'; @@ -68,37 +69,54 @@ const MapControl = defineComponent({ }, render() { const { state } = this.c; - if (!state.isLoaded) { - return; - } + if (!state.isCreated) return; return ( - - {this.mapStyle === 'USER' ? ( - - ) : ( - { - this.c.onMapChange(e.areaCode); - }} - onPointChange={(e: IMapData) => { - this.c.onAreaClick(e); - }} - onAreaChange={(e: IMapData) => { - this.c.onPointClick(e); - }} - > - )} - + + + {this.mapStyle === 'USER' ? ( + + ) : ( + { + this.c.onMapChange(e.areaCode); + }} + onPointClick={(e: IMapData) => { + this.c.onPointClick(e); + }} + onAreaClick={(e: IMapData) => { + this.c.onAreaClick(e); + }} + > + )} + {this.c.state.enableNavView && this.c.state.showNavIcon ? ( + !this.c.state.showNavView ? ( + this.c.onShowNavViewChange()} + > + ) : ( + this.c.onShowNavViewChange()} + > + ) + ) : null} + + ); }, }); -- Gitee