diff --git a/packages/designer/src/components/composition/use-parameter-editor-data.ts b/packages/designer/src/components/composition/use-parameter-editor-data.ts index df6a697b2bf59ba37be2f10fd874f53d95c1a2f5..cc40bb891b210bb84a039506725409c8401e0d15 100644 --- a/packages/designer/src/components/composition/use-parameter-editor-data.ts +++ b/packages/designer/src/components/composition/use-parameter-editor-data.ts @@ -231,6 +231,14 @@ export function useParameterEditorData(useFormSchemaComposition: UseFormSchema) entity.entities.forEach(entity => { resolveEntityTreeData(entity, 1, null, data); }); + data.forEach((dataItem: any) => { + if (!dataItem.parent || !dataItem.parentId) { + dataItem.collapse = false; + } + if (dataItem.$type === 'ComplexField') { + dataItem.collapse = true; + } + }); return data; } diff --git a/packages/ui-vue/components/button-edit/src/button-edit.props.ts b/packages/ui-vue/components/button-edit/src/button-edit.props.ts index f4ef55b828650235831463dcbf6f3d0a2750b9bd..d42ca62945066b69fb2774287b86491d8f6bcade 100644 --- a/packages/ui-vue/components/button-edit/src/button-edit.props.ts +++ b/packages/ui-vue/components/button-edit/src/button-edit.props.ts @@ -149,7 +149,6 @@ export const buttonEditProps = { updateOn: { type: String, default: 'change' }, keepWidthWithReference: { type: Boolean, default: true }, placement:{ type: String, default: 'bottom-left' }, - preventScroll: { type: Boolean, default: false} } as Record; diff --git a/packages/ui-vue/components/button-edit/src/components/tag-edit.component.tsx b/packages/ui-vue/components/button-edit/src/components/tag-edit.component.tsx index fca1fd86e012e6d4212fba86e610750018d0b901..a7e9d15d1cbe2ba47f25f4b25d2675ba6c0a042d 100644 --- a/packages/ui-vue/components/button-edit/src/components/tag-edit.component.tsx +++ b/packages/ui-vue/components/button-edit/src/components/tag-edit.component.tsx @@ -10,6 +10,7 @@ export default function ( ) { const separator = ref(props.separator); const { changeTextBoxValue } = useTextBoxComposition; + const disabled = computed(() => props.readonly || props.disable); const tags = computed(() => { return modelValue.value ? @@ -21,7 +22,10 @@ export default function ( } return () => { - return ; }; } diff --git a/packages/ui-vue/components/button-edit/src/components/text-edit.component.tsx b/packages/ui-vue/components/button-edit/src/components/text-edit.component.tsx index a7dcbd5637a6265a563ca9bde286ab9810e65ff0..97c879ab66062653ad07aafc67246fb0729bfcb1 100644 --- a/packages/ui-vue/components/button-edit/src/components/text-edit.component.tsx +++ b/packages/ui-vue/components/button-edit/src/components/text-edit.component.tsx @@ -17,7 +17,7 @@ export default function ( (inputElementRef.value as HTMLInputElement)?.select(); } if (props.focusOnCreated) { - (inputElementRef.value as HTMLInputElement)?.focus({ preventScroll: props.preventScroll }); + (inputElementRef.value as HTMLInputElement)?.focus({ preventScroll: true }); } }); diff --git a/packages/ui-vue/components/checkbox/src/checkbox.component.tsx b/packages/ui-vue/components/checkbox/src/checkbox.component.tsx index 6878879b6c3f1f22ea2da3d01b9bf20d50c50b4a..40fd215ce5b0434961645e388861e8479d2a1e2e 100644 --- a/packages/ui-vue/components/checkbox/src/checkbox.component.tsx +++ b/packages/ui-vue/components/checkbox/src/checkbox.component.tsx @@ -36,7 +36,7 @@ export default defineComponent({ function allowFocus() { if (props.focusOnCreated) { - (inputElementRef.value as HTMLInputElement)?.focus(); + (inputElementRef.value as HTMLInputElement)?.focus({ preventScroll: true }); } } diff --git a/packages/ui-vue/components/combo-list/src/combo-list.component.tsx b/packages/ui-vue/components/combo-list/src/combo-list.component.tsx index 58d3b9f1ebc6b39fbe0b0726bc6a78852a6008ee..799c842d25f54dbe712b7bdb89672c984ecf14ce 100644 --- a/packages/ui-vue/components/combo-list/src/combo-list.component.tsx +++ b/packages/ui-vue/components/combo-list/src/combo-list.component.tsx @@ -32,7 +32,7 @@ export default defineComponent({ const enableSearch = ref(props.enableSearch); const readonly = ref(props.readonly); let displayTextStore = ''; - const { dataSource, displayText, editable, modelValue, getSelectedItemsByDisplayText } = useDataSource(props); + const { dataSource, displayText, editable, modelValue, getSelectedItemsByDisplayText, getItemsByDisplayText } = useDataSource(props); const isMultiSelect = computed(() => props.multiSelect); @@ -74,7 +74,7 @@ export default defineComponent({ */ function onClickInput() { if (!readonly.value) { - displayTextStore = displayText.value; + displayTextStore = displayText.value; // comboEditorRef.value.togglePopup(); } } @@ -103,6 +103,19 @@ export default defineComponent({ } } + function onChange(text: string) { + if (props.multiSelect) { + const itemList = getItemsByDisplayText(text); + const valueList = itemList.map((item: any) => item[props.idField || props.valueField]); + const value = valueList.join(props.separator); + if (modelValue.value !== value) { + modelValue.value = value; + context.emit('update:modelValue', modelValue.value); + context.emit('change', itemList, modelValue.value); + } + } + } + function getDisplayText() { return displayText.value; } @@ -157,7 +170,7 @@ export default defineComponent({ selectOnCreated={props.selectOnCreated} onClear={onClear} onClick={onClickInput} - // onChange={onDisplayTextChange} + onChange={onChange} onBlur={onClickOutside} onInput={onInput} beforeOpen={props.beforeOpen} diff --git a/packages/ui-vue/components/common/radio-checkbox/radio-checkbox.props.ts b/packages/ui-vue/components/common/radio-checkbox/radio-checkbox.props.ts index 91048c702aa9234913f86d1d13a7ab83650366f4..be3ed8dde7ad99a5662d56e09f4678500b377f4e 100644 --- a/packages/ui-vue/components/common/radio-checkbox/radio-checkbox.props.ts +++ b/packages/ui-vue/components/common/radio-checkbox/radio-checkbox.props.ts @@ -41,5 +41,5 @@ export const radioCheckboxCommonProps = { /** * 选项列表 */ - options: { type: Object, default: []} + options: { type: Object} }; diff --git a/packages/ui-vue/components/common/radio-checkbox/use-check.ts b/packages/ui-vue/components/common/radio-checkbox/use-check.ts index ed1d952f43cc903c552d6480cea2faa8387c8103..ab16d3249fdd60e3caafa55fac305154bd1c8dfc 100644 --- a/packages/ui-vue/components/common/radio-checkbox/use-check.ts +++ b/packages/ui-vue/components/common/radio-checkbox/use-check.ts @@ -49,10 +49,10 @@ export function useCheck( // 点击单选框事件 const onClickRadio = (e: MouseEvent) => { - e.stopPropagation(); if (disabled.value) { return; } + e.stopPropagation(); if (parentProps) { // 父组件双向绑定 if (!checked.value) { diff --git a/packages/ui-vue/components/data-grid/src/data-grid.component.tsx b/packages/ui-vue/components/data-grid/src/data-grid.component.tsx index 2a97061a86528ec7f1e907a3d56ad9dd0316f80f..e5549c23e98a14f87cb476cd8cc95d77c28a94ec 100644 --- a/packages/ui-vue/components/data-grid/src/data-grid.component.tsx +++ b/packages/ui-vue/components/data-grid/src/data-grid.component.tsx @@ -57,7 +57,7 @@ export default defineComponent({ const { showSelectAll, updateSelectAllStatus } = useSelectionComposition; const isDisabled = computed(() => props.disabled); const visibleCapacity = computed(() => { - return Math.min(dataView.dataView.value.length, defaultVisibleCapacity.value); + return props.virtualized ? Math.min(dataView.dataView.value.length, defaultVisibleCapacity.value): dataView.dataView.value.length; }); const loadingMessage = computed(() => props.loadingConfig.message); @@ -119,7 +119,8 @@ export default defineComponent({ useVisualDataComposition, visibleCapacity, preloadCount, - sidebarWidth + sidebarWidth, + useEditComposition ); const { onWheel, dataGridWidth, viewPortHeight, viewPortWidth, resetScroll, updateVisibleRowsOnLatestVisibleScope } = useVirtualScrollComposition; @@ -348,12 +349,13 @@ export default defineComponent({ } else { resetScroll(); } - if (showSidebarCheckBox.value && showSelectAll.value) { // 如果启用全选,更新全选状态,此处用于服务端分页简单的跨页多选场景 updateSelectAllStatus(); } } + // 清空编辑对象,解绑编辑事件 + useEditComposition.clear(); } function updatePagination(pageOptions: Partial) { diff --git a/packages/ui-vue/components/data-view/composition/types.ts b/packages/ui-vue/components/data-view/composition/types.ts index 0d1f241e92e6b1629a8d61e17991ee5bb57f3d42..cdac854a9a72b19c0798ded3d605fb06845b833a 100644 --- a/packages/ui-vue/components/data-view/composition/types.ts +++ b/packages/ui-vue/components/data-view/composition/types.ts @@ -647,10 +647,12 @@ export interface UseVisualDataCell { } export interface UseEdit { + clear: () => void; getEditor: (cell: VisualDataCell, column: DataColumn, visualDataRow: VisualData) => any; onClickCell: (payload: MouseEvent, cell: VisualDataCell, row: VisualData, column: DataColumn) => any; + onClickOutOfCell:(payload: MouseEvent) => void; onClickCellByKeyboard: (payload: MouseEvent, cell: VisualDataCell, row: VisualData, column: DataColumn) => any; onMousedownCell: (payload: MouseEvent) => any; diff --git a/packages/ui-vue/components/data-view/composition/use-edit.tsx b/packages/ui-vue/components/data-view/composition/use-edit.tsx index de7a8170b755c1eb615196dc7c08f570ae45aea3..dd96af2df87620fb46d44e35258b9e7b07ffb36e 100644 --- a/packages/ui-vue/components/data-view/composition/use-edit.tsx +++ b/packages/ui-vue/components/data-view/composition/use-edit.tsx @@ -23,9 +23,9 @@ import { import { cloneDeep, isUndefined } from 'lodash-es'; export function useEdit( - props: DataViewOptions, - context: SetupContext, - useIdentifyComposition: UseIdentify, + props: DataViewOptions, + context: SetupContext, + useIdentifyComposition: UseIdentify, useRowComposition: UseRow, visibleDatas: Ref ): UseEdit { @@ -161,8 +161,8 @@ export function useEdit( return Promise.resolve() .then(() => { const defaultEditorReadonlyStatus = column.editor?.readonly; - if (typeof props.beforeEditCell === 'function') { - return !defaultEditorReadonlyStatus && props.beforeEditCell({ row, cell, rawData: row.raw, column }); + if (!isUndefined(props.beforeEditCell) && typeof props.beforeEditCell === 'function') { + return props.beforeEditCell({ row, cell, rawData: row.raw, column }); } return !defaultEditorReadonlyStatus; }) @@ -288,9 +288,9 @@ export function useEdit( // editor.keyboard = false; } editor.context = { rowData: visualDataRow.raw, column, cell, editor: controlData }; + editor.readonly = false; return onMousedownCell(payload)} onMouseup={(payload: MouseEvent) => onMouseupCell(payload)} @@ -302,7 +302,7 @@ export function useEdit( function onEndEditCell() { allowEndEditing(editingCell); } - + watch( () => props.editable, () => { @@ -315,15 +315,25 @@ export function useEdit( }); // when datasource is changed, editing status should be reset - watch(() => visibleDatas.value, () => { + // watch(() => visibleDatas.value, (newvisibleDatas: VisualData[], oldv) => { + // editingCell = null; + // editingRow = null; + // editingColumn = null; + // mousedownTarget = null; + // document.body.removeEventListener('click', onClickOutOfCell, true); + // }); + + function clear() { editingCell = null; editingRow = null; editingColumn = null; mousedownTarget = null; document.body.removeEventListener('click', onClickOutOfCell, true); - }); + } return { + clear, + onClickOutOfCell, onClickCell, onClickCellByKeyboard, onEditingRow, diff --git a/packages/ui-vue/components/data-view/composition/use-selection.ts b/packages/ui-vue/components/data-view/composition/use-selection.ts index 1229e2085a6d79ab8f541c2434e0c51f03d4239c..62967ad7de9cff707ca3f96541cbd796946c19aa 100644 --- a/packages/ui-vue/components/data-view/composition/use-selection.ts +++ b/packages/ui-vue/components/data-view/composition/use-selection.ts @@ -344,6 +344,7 @@ export function useSelection( dataItemIds.includes(dataItemId); }); if (visibleItemToBeSelected.length || dataItemToBeSelected.length) { + // todo: should not clear,should append selected values clearSelection(); // if single select row, active current row if (isSingleSelect.value) { @@ -378,6 +379,9 @@ export function useSelection( } } } + selectedValues.value = selectedValues.value.filter((selectedId: string) => + !dataItemIds.includes(selectedId) + ); } diff --git a/packages/ui-vue/components/data-view/composition/visualization/use-virtual-scroll.ts b/packages/ui-vue/components/data-view/composition/visualization/use-virtual-scroll.ts index 8d9bb1b03f1ce2a2f78e0d80c857a8bdbfe2f1e9..f104fa8e7884e9e0e0f5938ed3b639293dc88a9c 100644 --- a/packages/ui-vue/components/data-view/composition/visualization/use-virtual-scroll.ts +++ b/packages/ui-vue/components/data-view/composition/visualization/use-virtual-scroll.ts @@ -13,7 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { ColumnContext, DataViewOptions, UseDataView, UseVirtualScroll, UseVisualData, VisualData } from '../types'; +import { + ColumnContext, DataViewOptions, UseDataView, UseEdit, + UseVirtualScroll, UseVisualData, VisualData +} from '../types'; import { DebouncedFunc, throttle } from 'lodash-es'; import { computed, ref, Ref, watch } from 'vue'; @@ -25,7 +28,8 @@ export function useVirtualScroll( visualDataComposition: UseVisualData, visibleCapacity: Ref, preloadCount: number, - sidebarWidth: Ref + sidebarWidth: Ref, + useEditComposition?: UseEdit ): UseVirtualScroll { const { dataView, visibleDataItems } = dataViewComposition; const { getVisualData, maxVisibleRowIndex, minVisibleRowIndex } = visualDataComposition; @@ -140,6 +144,14 @@ export function useVirtualScroll( const { actualStart, actualEnd } = checkVisualizeDataScope(start, end, lastVisibleRowIndexInDataView); const preDataItem = itemsToVisualize[actualStart - 1]; const visualData = getVisualData(actualStart, actualEnd, preDataItem, forceToRefresh); + // if (useEditComposition.getEditingRow()) { + // const editingRow = useEditComposition.getEditingRow(); + // const foundVisualDataItemIndex = visualData.findIndex((visualDataItem: VisualData) => + // visualDataItem.raw[useIdentifyComposition.idField.value] === editingRow?.raw[useIdentifyComposition.idField.value]); + // if (foundVisualDataItemIndex > -1) { + // visualData = [...visualData.slice(0, foundVisualDataItemIndex), editingRow!, ...visualData.slice(foundVisualDataItemIndex + 1)]; + // } + // } if (visualData.length) { visibleDatas.value = [...visualData]; } @@ -279,9 +291,11 @@ export function useVirtualScroll( return; } + payload.preventDefault(); payload.stopPropagation(); - + // 滚轮滚动时不结束编辑 + // useEditComposition.onClickOutOfCell(payload); const { deltaX, deltaY } = getDeltaFromEvent(payload); // const deltaY = ((payload as any).wheelDeltaY || payload.deltaY) / 10; @@ -448,6 +462,7 @@ export function useVirtualScroll( } function onMouseDownScrollThumb($event: MouseEvent, gridContentRef: Ref, thumbType: 'vertical' | 'horizontal') { + useEditComposition?.onClickOutOfCell($event); onDraggingScrollThumb.value = true; const scrollThumbParent = ($event.target as Element)?.parentElement; diff --git a/packages/ui-vue/components/data-view/composition/visualization/use-visual-data-bound.ts b/packages/ui-vue/components/data-view/composition/visualization/use-visual-data-bound.ts index f599bd1587bf25f12c84ab77e95979a8e859a638..ee18754b3dda1e380377f8a96504805a68e27401 100644 --- a/packages/ui-vue/components/data-view/composition/visualization/use-visual-data-bound.ts +++ b/packages/ui-vue/components/data-view/composition/visualization/use-visual-data-bound.ts @@ -15,13 +15,19 @@ export function useVisualDataBound( let preDataItemHeight = preDataItem.__fv_data_height__; if (isUndefined(preDataItemPosition) || // when virtual loading, position of tree node should recalculate after collapse tree node. - (props.virtualized && preDataItem.__fv_visible_index__ * rowHeight !== preDataItemPosition) + (props.virtualized && props.hierarchy && preDataItem.__fv_visible_index__ * rowHeight !== preDataItemPosition) ) { preDataItemPosition = preDataItem.__fv_visible_index__ * rowHeight; } if (isUndefined(preDataItemHeight)) { preDataItemHeight = rowHeight; } + // const preDataItemPosition = preDataItem ? ( + // preDataItem.__fv_data_position__ !== undefined ? preDataItem.__fv_data_position__ : preDataItem.__fv_index__ * rowHeight + // ) : 0; + // const preDataItemHeight = preDataItem ? ( + // preDataItem.__fv_data_height__ !== undefined ? preDataItem.__fv_data_height__ : rowHeight + // ) : 0; const topPosition = !visualData.visible ? preDataItem.__fv_data_position__ : preDataItemPosition + preDataItemHeight; visualData.top = topPosition; dataItem.__fv_data_position__ = topPosition; diff --git a/packages/ui-vue/components/date-picker/src/date-picker.component.tsx b/packages/ui-vue/components/date-picker/src/date-picker.component.tsx index 005fea23256894919952c9cd7447e658e957d2f1..909e811eeb82f75b04ea3ee782d40c669f096328 100644 --- a/packages/ui-vue/components/date-picker/src/date-picker.component.tsx +++ b/packages/ui-vue/components/date-picker/src/date-picker.component.tsx @@ -182,7 +182,6 @@ export default defineComponent({ editable={editable.value} enableClear={enableClear.value} popupOnClick={true} - preventScroll={true} onClear={onClearDate} onClickButton={onClickButton} focusOnCreated={props.focusOnCreated} diff --git a/packages/ui-vue/components/event-parameter/src/event-parameter.component.tsx b/packages/ui-vue/components/event-parameter/src/event-parameter.component.tsx index 162e4efdb2c512d4cedd420d5de1b2362c9e5714..c68e315ae81dbd61fd98acd556f5f0557f12b0ed 100644 --- a/packages/ui-vue/components/event-parameter/src/event-parameter.component.tsx +++ b/packages/ui-vue/components/event-parameter/src/event-parameter.component.tsx @@ -98,12 +98,12 @@ export default defineComponent({ const rowOption: Ref> = ref({ customRowStatus: (visualData: VisualData) => { if (visualData.collapse === undefined) { - if (!visualData.raw.parent || !visualData.raw.parentId) { - visualData.collapse = false; - } - if (visualData.raw.data?.$type === 'ComplexField') { - visualData.collapse = true; - } + // if (!visualData.raw.parent || !visualData.raw.parentId) { + // visualData.collapse = false; + // } + // if (visualData.raw.data?.$type === 'ComplexField') { + // visualData.collapse = true; + // } } if (visualData.raw.hasChildren) { visualData.disabled = true; @@ -231,6 +231,9 @@ export default defineComponent({ fitMode: 'expand' }} rowOption={rowOption.value} + hierarchy={{ + collapseField: 'collapse' + }} key={item.treeConfigs.id} data={item.treeConfigs.data} columns={columns.value} diff --git a/packages/ui-vue/components/input-group/src/components/text-edit.component.tsx b/packages/ui-vue/components/input-group/src/components/text-edit.component.tsx index 275d968f65bc717d57723d8234aea6f7cceb4345..4bfdac155e033e49c69cd5aa9f53c1a14e25c5d4 100644 --- a/packages/ui-vue/components/input-group/src/components/text-edit.component.tsx +++ b/packages/ui-vue/components/input-group/src/components/text-edit.component.tsx @@ -42,7 +42,7 @@ export default function ( } if (props.focusOnCreated) { // 设置默认 - (inputElementRef.value as HTMLInputElement)?.focus({ preventScroll: props.preventScroll }); + (inputElementRef.value as HTMLInputElement)?.focus({ preventScroll: true }); } }); diff --git a/packages/ui-vue/components/input-group/src/input-group.props.ts b/packages/ui-vue/components/input-group/src/input-group.props.ts index 0617ed5c79b07319610ad12f42b1a37beba78340..346aff3cd9d93668dd41b9d8917890414003a1e0 100644 --- a/packages/ui-vue/components/input-group/src/input-group.props.ts +++ b/packages/ui-vue/components/input-group/src/input-group.props.ts @@ -91,9 +91,6 @@ export const inputGroupProps = { * - change: 输入时更新 */ updateOn: { type: String, default: 'blur' }, - /** 阻止聚焦滚动 默认是浏览器行为会滚动 */ - preventScroll: { type: Boolean, default: false}, - formatValidation: { type: Object, default: {} } } as Record; diff --git a/packages/ui-vue/components/number-spinner/src/components/text-box.component.tsx b/packages/ui-vue/components/number-spinner/src/components/text-box.component.tsx index f4097d75cddbb9bd7d632f2bfdfc561d72f54bde..4a9c093bf2003a6a5137da1b9cbce72c3cb788fe 100644 --- a/packages/ui-vue/components/number-spinner/src/components/text-box.component.tsx +++ b/packages/ui-vue/components/number-spinner/src/components/text-box.component.tsx @@ -32,7 +32,7 @@ export default function ( (inputElementRef.value as HTMLInputElement)?.select(); } if (props.focusOnCreated) { - (inputElementRef.value as HTMLInputElement)?.focus({ preventScroll: props.preventScroll }); + (inputElementRef.value as HTMLInputElement)?.focus({ preventScroll: true }); } } diff --git a/packages/ui-vue/components/number-spinner/src/number-spinner.props.ts b/packages/ui-vue/components/number-spinner/src/number-spinner.props.ts index 8e65fd062524bc08fe1deae17507824b6bdf1a54..3aaf4f6921b1ee20aeba6aa0bf770a91a32aa286 100644 --- a/packages/ui-vue/components/number-spinner/src/number-spinner.props.ts +++ b/packages/ui-vue/components/number-spinner/src/number-spinner.props.ts @@ -132,8 +132,7 @@ export const numberSpinnerProps = { /** * 是否启用大数 */ - bigNumber: { type: Boolean, default: false }, - preventScroll: { type: Boolean, default: false} + bigNumber: { type: Boolean, default: false } } as Record; export type NumberSpinnerProps = ExtractPropTypes; diff --git a/packages/ui-vue/components/radio-group/src/radio-group.component.tsx b/packages/ui-vue/components/radio-group/src/radio-group.component.tsx index 9ef0ea7bb1beeb4b0c3cba9b41f67a0a1298a33f..37c0738885e5b266073796b305159e7cc590c88e 100644 --- a/packages/ui-vue/components/radio-group/src/radio-group.component.tsx +++ b/packages/ui-vue/components/radio-group/src/radio-group.component.tsx @@ -15,7 +15,7 @@ */ import { defineComponent, computed, ref, provide, watch } from 'vue'; import type { SetupContext } from 'vue'; -import { RADIOGROUP_CONTEXT } from '@farris/ui-vue/components/common'; +import { RADIOGROUP_CONTEXT, useGuid } from '@farris/ui-vue/components/common'; import { radioGroupProps, RadioGroupProps } from './radio-group.props'; import { changeRadio } from './composition/change-radio'; @@ -24,6 +24,9 @@ export default defineComponent({ props: radioGroupProps, emits: ['changeValue', 'update:modelValue'] as (string[] & ThisType) | undefined, setup(props: RadioGroupProps, context: SetupContext) { + const { guid } = useGuid(); + const defaultRadioName = `radio_${guid().slice(0,8)}`; + const name = ref(props.name || defaultRadioName); const modelValue = ref(props.modelValue); const { enumData, onClickRadio, getValue, getText } = changeRadio(props, context, modelValue); const horizontalClass = computed(() => ({ @@ -41,13 +44,13 @@ export default defineComponent({ return (
{context.slots.default ? context.slots.default() : enumData.value.map((item, index) => { - const id = 'radio_' + props.id + props.name + item[props.valueField]; + const id = 'radio_' + props.id + name.value + item[props.valueField]; return (
, default: [] + type: Array }, /** * 单选组枚举数组 */ data: { - type: Array, default: [] + type: Array }, /** * 组件值 diff --git a/packages/ui-vue/components/radio/src/radio.props.ts b/packages/ui-vue/components/radio/src/radio.props.ts index 7924af935902c1f03d3970a9b731395ec159bebb..c9a0f944f5978dc63c46b04c7b718988e65b9871 100644 --- a/packages/ui-vue/components/radio/src/radio.props.ts +++ b/packages/ui-vue/components/radio/src/radio.props.ts @@ -1,6 +1,7 @@ import { ExtractPropTypes } from "vue"; export const radioProps = { + disabled: { type: Boolean, default: false }, value: { type: String, default: '' }, /** 值 */ modelValue: { type: String, default: '' }, diff --git a/packages/ui-vue/components/tags/src/composition/use-draggable.ts b/packages/ui-vue/components/tags/src/composition/use-draggable.ts index c68735f30cccfea545e5f5cc75d2d23ec7f3b0ee..65cb552310ddaf91aaebdddb5be898fca03b452a 100644 --- a/packages/ui-vue/components/tags/src/composition/use-draggable.ts +++ b/packages/ui-vue/components/tags/src/composition/use-draggable.ts @@ -12,6 +12,9 @@ export function useDraggable( const isDragging = ref(false); function dragstart(e: DragEvent, targetItem: any, index: number) { + if (props.disable) { + return; + } e.stopPropagation(); if (targetItem) { setTimeout(() => { @@ -23,6 +26,9 @@ export function useDraggable( } function dragenter(e: DragEvent, index: number) { + if (!isDragging.value) { + return; + } e.preventDefault(); if (draggingIndex.value !== index) { const draggingItem = innerElements.value[draggingIndex.value]; @@ -33,6 +39,9 @@ export function useDraggable( } } function dragover(e: DragEvent, index: number) { + if (!isDragging.value) { + return; + } e.preventDefault(); if (e.dataTransfer) { e.dataTransfer.dropEffect = 'move'; diff --git a/packages/ui-vue/components/tags/src/tags.component.tsx b/packages/ui-vue/components/tags/src/tags.component.tsx index 3a19033dc44cd90d66ce72b9c5ec47b217cd634c..ffe87b6451f997e45491b49afcd3cab4fcac5d02 100644 --- a/packages/ui-vue/components/tags/src/tags.component.tsx +++ b/packages/ui-vue/components/tags/src/tags.component.tsx @@ -17,7 +17,7 @@ export default defineComponent({ const showColor = ref(props.showColor); const customStyle = ref(props.customStyle); const activeTag = ref(props.activeTag); - const showClose = ref(props.showClose); + // const showClose = ref(props.showClose); const addButtonText = ref(props.addButtonText); const tagsContainerRef = ref(); const wrapText = ref(props.wrapText); @@ -150,6 +150,9 @@ export default defineComponent({ } function onKeyDownTagItem(payload: KeyboardEvent, currentTag: Tag) { + if(props.disable){ + return; + } let leftScroll; switch (payload.key) { case 'Backspace': @@ -274,13 +277,15 @@ export default defineComponent({ key={tag.name} onClick={(payload: MouseEvent) => onClickTagItem(payload, tag)} onKeydown={(payload: KeyboardEvent) => onKeyDownTagItem(payload, tag)} - draggable="true" + // 暂不开启拖拽 + draggable="false" onDragstart={(payload: DragEvent) => dragstart(payload, tag, index)} onDragenter={(payload: DragEvent) => dragenter(payload, index)} onDragend={(payload: DragEvent) => dragend(payload, tag)} - onDragover={(payload: DragEvent) => dragover(payload, index)}> + onDragover={(payload: DragEvent) => dragover(payload, index)} + > {tag.name} - {!props.disable && showClose.value && ( + {!props.disable && props.showClose && ( { diff --git a/packages/ui-vue/components/textarea/src/textarea.props.ts b/packages/ui-vue/components/textarea/src/textarea.props.ts index ae35991a3f542f36a6fc3ceaeb5aedc3df79f2c2..e5495421628a65e7c1d7d930c9f037d4ec307ab2 100644 --- a/packages/ui-vue/components/textarea/src/textarea.props.ts +++ b/packages/ui-vue/components/textarea/src/textarea.props.ts @@ -68,7 +68,7 @@ export const textAreaProps = { * - blur: 离开焦点时更新 * - change: 输入时更新 */ - updateOn: { type: String, default: 'blur' }, + updateOn: { type: String, default: 'blur' } } as Record; export type TextAreaProps = ExtractPropTypes; diff --git a/packages/ui-vue/components/time-picker/src/time-picker.component.tsx b/packages/ui-vue/components/time-picker/src/time-picker.component.tsx index 05cd6e34fcce1f744ef76b3a61f55c27cd97449a..e568e97bb1ecddda35ac7c82755a5b11f764a372 100644 --- a/packages/ui-vue/components/time-picker/src/time-picker.component.tsx +++ b/packages/ui-vue/components/time-picker/src/time-picker.component.tsx @@ -60,7 +60,6 @@ export default defineComponent({ placeholder={props.placeholder} enableClear={true} popupOnClick={true} - preventScroll={true} keepWidthWithReference={false} placement={props.placement} onClear={onClearHandler} diff --git a/packages/ui-vue/demos/data-grid/operation_data.vue b/packages/ui-vue/demos/data-grid/operation_data.vue new file mode 100644 index 0000000000000000000000000000000000000000..25c8a4fe254989846811cc762bd516694944c34b --- /dev/null +++ b/packages/ui-vue/demos/data-grid/operation_data.vue @@ -0,0 +1,164 @@ + + + + diff --git a/packages/ui-vue/demos/data-grid/select_and_unselect.vue b/packages/ui-vue/demos/data-grid/select_and_unselect.vue new file mode 100644 index 0000000000000000000000000000000000000000..e9eb08780fb5d951a262819e72bde562dabe04d7 --- /dev/null +++ b/packages/ui-vue/demos/data-grid/select_and_unselect.vue @@ -0,0 +1,100 @@ + + + + diff --git a/packages/ui-vue/demos/dynamic-form/dynamic-component.vue b/packages/ui-vue/demos/dynamic-form/dynamic-component.vue index 158fa4cd4f7b0db711e068200a7a74c0edc2e156..b513748b65282e719e530be03e26bd325059ddb4 100644 --- a/packages/ui-vue/demos/dynamic-form/dynamic-component.vue +++ b/packages/ui-vue/demos/dynamic-form/dynamic-component.vue @@ -64,7 +64,7 @@ const checkboxOptions = { }; const radioGroupOptions = { type: 'radio-group', - enumData: [ + data: [ { value: 'first', name: 'Fist Item' }, { value: 'second', name: 'Second Item' }, { value: 'third', name: 'Third Item' } @@ -72,7 +72,7 @@ const radioGroupOptions = { }; const checkboxGroupOptions = { type: 'check-group', - enumData: [ + data: [ { name: '张三', value: 'zhangsan' }, { name: '李四', value: 'lisi' }, { name: '王五', value: 'wangwu' }, diff --git a/packages/ui-vue/demos/radio-group/basic.vue b/packages/ui-vue/demos/radio-group/basic.vue index c43c65c8e254543b4cc636aeb1b89a1aa2c84a4c..40ec51c388db04caba9229e94bdda5848c1ae7ff 100644 --- a/packages/ui-vue/demos/radio-group/basic.vue +++ b/packages/ui-vue/demos/radio-group/basic.vue @@ -17,7 +17,7 @@ function onValueChanged(event: any) {