diff --git a/io.sc.platform.core.frontend/src/platform/components/dialog/WDialog.vue b/io.sc.platform.core.frontend/src/platform/components/dialog/WDialog.vue index 55c10827..f287c700 100644 --- a/io.sc.platform.core.frontend/src/platform/components/dialog/WDialog.vue +++ b/io.sc.platform.core.frontend/src/platform/components/dialog/WDialog.vue @@ -56,7 +56,7 @@ diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WCheckbox.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WCheckbox.vue index ba6768fa..c528a8ec 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WCheckbox.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WCheckbox.vue @@ -1,13 +1,6 @@ - + @@ -15,7 +8,6 @@ import { computed, useAttrs, ref, watch } from 'vue'; const attrs = useAttrs(); -const rules = attrs.rules; const props = defineProps({ onChange: { type: Function, @@ -48,14 +40,6 @@ watch( }, ); -const rulesComputed = computed(() => { - let result = rules || []; - if (!showIfComputed.value) { - result = []; - } - return result; -}); - const showIfComputed = computed(() => { return props.showIf({ value: checkboxValue.value, diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WCodeMirror.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WCodeMirror.vue index fd77a94d..8e5a11cd 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WCodeMirror.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WCodeMirror.vue @@ -376,9 +376,14 @@ const buttonClick = (button) => { } }; +const validate = () => { + return fieldRef.value.validate(); +}; + defineExpose({ getValue, setValue, configure, + validate, }); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInput.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInput.vue index 66cdb284..28ddcaf5 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInput.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInput.vue @@ -194,4 +194,12 @@ const restoreDefaultValue = () => { colorValueRef.value = restoreValue; emit('update:modelValue', restoreValue, props.form); }; + +const validate = () => { + return colorRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInputPalette.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInputPalette.vue index dd0b0dfd..39116327 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInputPalette.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WColorInputPalette.vue @@ -429,4 +429,12 @@ const restoreDefaultValue = () => { colorValueRef.value = restoreValue; emit('update:modelValue', restoreValue, props.form); }; + +const validate = () => { + return colorRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WCron.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WCron.vue index d1a5b19f..72d6c819 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WCron.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WCron.vue @@ -207,4 +207,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return cronRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WDate.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WDate.vue index d2018336..ec406ab0 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WDate.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WDate.vue @@ -150,4 +150,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return dateRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WFile.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WFile.vue index 7d918b3f..b0362b50 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WFile.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WFile.vue @@ -134,4 +134,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return fileRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WIcon.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WIcon.vue index bcd1d397..ffe2be8c 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WIcon.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WIcon.vue @@ -267,4 +267,12 @@ const show = () => { searchRef.value = ''; document.getElementById(valueRef.value)?.scrollIntoView(true); }; + +const validate = () => { + return iconRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WNumber.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WNumber.vue index 1c95b2c2..01a43d56 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WNumber.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WNumber.vue @@ -133,4 +133,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return numberRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WPassword.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WPassword.vue index b7e95bbd..7ace38b2 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WPassword.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WPassword.vue @@ -132,4 +132,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return pwdRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WPosition.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WPosition.vue index 855dc008..82a8e639 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WPosition.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WPosition.vue @@ -195,4 +195,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return positionRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelect.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelect.vue index 7036f486..fa6db36b 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelect.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelect.vue @@ -133,4 +133,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return selectRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelectUserText.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelectUserText.vue index b33f4452..3f93fea4 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelectUserText.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WSelectUserText.vue @@ -88,4 +88,12 @@ const readonlyIfComputed = computed(() => { const disableIfComputed = computed(() => { return props.disableIf(props.form); }); + +const validate = () => { + return textRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WText.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WText.vue index 10284350..f06ef7cb 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WText.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WText.vue @@ -131,4 +131,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return textRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextBtn.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextBtn.vue index 33f743ae..8c68b5d0 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextBtn.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextBtn.vue @@ -144,4 +144,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return textBtnRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextarea.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextarea.vue index 57400260..6a6c42e5 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextarea.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WTextarea.vue @@ -131,4 +131,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return textareaRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/form/elements/WTreeSelect.vue b/io.sc.platform.core.frontend/src/platform/components/form/elements/WTreeSelect.vue index 1007172e..1393eeeb 100644 --- a/io.sc.platform.core.frontend/src/platform/components/form/elements/WTreeSelect.vue +++ b/io.sc.platform.core.frontend/src/platform/components/form/elements/WTreeSelect.vue @@ -143,4 +143,12 @@ const changeValue = (value) => { form: props.form, }); }; + +const validate = () => { + return selectRef.value.validate(); +}; + +defineExpose({ + validate, +}); diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/GridBody.vue b/io.sc.platform.core.frontend/src/platform/components/grid/GridBody.vue new file mode 100644 index 00000000..8d6b2fe6 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components/grid/GridBody.vue @@ -0,0 +1,351 @@ + + + + + + + + + + + + + + + + + + + diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/GridConfig.vue b/io.sc.platform.core.frontend/src/platform/components/grid/GridConfig.vue index 40edd513..ad238a2f 100644 --- a/io.sc.platform.core.frontend/src/platform/components/grid/GridConfig.vue +++ b/io.sc.platform.core.frontend/src/platform/components/grid/GridConfig.vue @@ -77,7 +77,7 @@ - + @@ -122,41 +122,41 @@ - + - + 紧凑 - + - + 按钮栏紧凑 - + - + 列头紧凑 - + - + 内容紧凑 - + - + 分页栏紧凑 @@ -217,7 +217,7 @@ diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/GridEditToolbar.vue b/io.sc.platform.core.frontend/src/platform/components/grid/GridEditToolbar.vue new file mode 100644 index 00000000..dee83edb --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components/grid/GridEditToolbar.vue @@ -0,0 +1,324 @@ + + + + + + + + + + + + diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/GridEditor.vue b/io.sc.platform.core.frontend/src/platform/components/grid/GridEditor.vue new file mode 100644 index 00000000..7e83fcee --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components/grid/GridEditor.vue @@ -0,0 +1,227 @@ + + + + + + + diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/GridHeader.vue b/io.sc.platform.core.frontend/src/platform/components/grid/GridHeader.vue new file mode 100644 index 00000000..24fcf749 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components/grid/GridHeader.vue @@ -0,0 +1,539 @@ + + + + + + + + + {{ $t('rownum') }} + + + + + + + {{ $t('tip.noData') }} + + + + + + + + + + + + + + + {{ $t('tip.noData') }} + + + + + + diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/GridPagination.vue b/io.sc.platform.core.frontend/src/platform/components/grid/GridPagination.vue new file mode 100644 index 00000000..fa743364 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components/grid/GridPagination.vue @@ -0,0 +1,73 @@ + + + + + + + + + {{ $t('tip.pagenation.totalRecord', { count: props.state.pagination.rowsNumber }) }} + + {{ $t('tip.pagenation.totalRecord', { count: props.state.pagination.rowsNumber }) }} + + + diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/GridTd.vue b/io.sc.platform.core.frontend/src/platform/components/grid/GridTd.vue new file mode 100644 index 00000000..ccd5c698 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components/grid/GridTd.vue @@ -0,0 +1,77 @@ + + + + {{ scope.rowIndex + 1 }} + + + + + + + + + + + + + + + + + + + diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/GridTop.vue b/io.sc.platform.core.frontend/src/platform/components/grid/GridTop.vue new file mode 100644 index 00000000..e1cb9fe8 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components/grid/GridTop.vue @@ -0,0 +1,654 @@ + + + + + {{ $t(props.grid.props.title ? props.grid.props.title : '') }} + + + + + + + + + + + + + + + + diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/GridView.vue b/io.sc.platform.core.frontend/src/platform/components/grid/GridView.vue new file mode 100644 index 00000000..9aa02971 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components/grid/GridView.vue @@ -0,0 +1,100 @@ + + + + + + + + + diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/TreeGridRow.vue b/io.sc.platform.core.frontend/src/platform/components/grid/TreeGridRow.vue index 45c94228..916ef8e8 100644 --- a/io.sc.platform.core.frontend/src/platform/components/grid/TreeGridRow.vue +++ b/io.sc.platform.core.frontend/src/platform/components/grid/TreeGridRow.vue @@ -3,7 +3,9 @@ ref="trRef" :class="row[table.selectedField] ? 'selected ' : ''" :draggable=" - (typeof gridProps.draggable === 'boolean' && gridProps.draggable) || (typeof gridProps.draggable === 'string' && gridProps.draggable === 'local') + ((typeof props.grid.props.draggable === 'boolean' && props.grid.props.draggable) || + (typeof props.grid.props.draggable === 'string' && props.grid.props.draggable === 'local')) && + table.bodyEditStatus === 'none' ? true : false " @@ -34,7 +36,7 @@ {}" @@ -45,11 +47,24 @@ - - + + - + + + + + + @@ -61,19 +76,43 @@ :title="col.classes?.indexOf('truncate') > -1 && col.value && typeof col.value !== 'object' ? col.value : ''" :style="col.style" > - - - - - + + - + + + + + + + + + - + +./ts/grid.ts diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/WTreeGrid.vue b/io.sc.platform.core.frontend/src/platform/components/grid/WTreeGrid.vue deleted file mode 100644 index 60af4360..00000000 --- a/io.sc.platform.core.frontend/src/platform/components/grid/WTreeGrid.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - - - {{ attrs.title }} - - - - - - - - - diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/css/grid.css b/io.sc.platform.core.frontend/src/platform/components/grid/css/grid.css new file mode 100644 index 00000000..b7282f17 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components/grid/css/grid.css @@ -0,0 +1,645 @@ +.w-grid .q-table__top { + padding: var(--tableTopPadding) var(--tableTopPadding); +} +.w-grid .q-table__middle .q-table th { + padding: var(--tableHeaderPadding) 8px; + border-left-width: 0px; + border-right-width: 1px; + border-top-width: 0px; + border-bottom-width: 1px; +} +.w-grid .q-table__middle .q-table th:last-child { + border-right-width: 0px; +} +.w-grid .q-table__middle .q-table td { + height: var(--tableBodyHeight); + padding: var(--tableBodyPadding) 8px; + border-left-width: 0px; + border-right-width: 1px; + border-top-width: 0px; + border-bottom-width: 1px; +} +.w-grid .q-table__middle .q-table td:last-child { + border-right-width: 0px; +} +.w-grid .q-table__bottom { + min-height: var(--tableBottomHeight); + border-color: rgba(0, 0, 0, 0.12); + border-style: solid; + border-top-width: 0px; + border-left-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; +} +.w-grid .q-table__control .q-field__control { + min-height: var(--tableBottomButtonHeight) !important; +} +.w-grid .q-table__control .q-field__control q-field__append { + height: var(--tableBottomButtonHeight) !important; +} +.w-grid .q-table__control .q-field__control-container .q-field__native { + min-height: var(--tableBottomButtonHeight) !important; + padding: 0 !important; +} +.w-grid .q-table__control .q-field__control .q-field__marginal { + height: var(--tableBottomButtonHeight) !important; +} +.w-grid .q-table__card .q-table__middle { + border-color: rgba(0, 0, 0, 0.12); + border-style: solid; + border-left-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; +} + +.sticky-header-column-table thead tr:not(.noDataTr) { + height: var(--tableColumnTitleHeight) !important; +} + +/** 表格所有th固定、设置默认index、背景设置 */ +.sticky-header-column-table tr th { + position: sticky; + z-index: 2; + background: var(--tableHeadBgColor); +} + +/** 固定表头后,修改top距离 */ +.sticky-header-column-table thead { + position: sticky; + z-index: 2; + top: 0; +} + +.sticky-header-column-table-tr-1-1 tr:first-child th:first-child { + z-index: 3; + position: sticky; + left: 0px; +} +.sticky-header-column-table-tr-1-2 tr:first-child th:nth-child(2) { + z-index: 3; + position: sticky; + left: var(--column1Width); +} +.sticky-header-column-table-tr-1-2-rb tr:first-child th:nth-child(2) { + border-right-width: 1px; +} +.sticky-header-column-table-tr-1-3 tr:first-child th:nth-child(3) { + z-index: 3; + position: sticky; + left: var(--column2Width); +} +.sticky-header-column-table-tr-1-4 tr:first-child th:nth-child(4) { + z-index: 3; + position: sticky; + left: var(--column3Width); +} +.sticky-header-column-table-tr-1-5 tr:first-child th:nth-child(5) { + z-index: 3; + position: sticky; + left: var(--column4Width); +} +.sticky-header-column-table-tr-1-6 tr:first-child th:nth-child(6) { + z-index: 3; + position: sticky; + left: var(--column5Width); +} +.sticky-header-column-table-tr-1-7 tr:first-child th:nth-child(7) { + z-index: 3; + position: sticky; + left: var(--column6Width); +} +.sticky-header-column-table-tr-1-8 tr:first-child th:nth-child(8) { + z-index: 3; + position: sticky; + left: var(--column7Width); +} +.sticky-header-column-table-tr-1-9 tr:first-child th:nth-child(9) { + z-index: 3; + position: sticky; + left: var(--column8Width); +} +.sticky-header-column-table-tr-1-10 tr:first-child th:nth-child(10) { + z-index: 3; + position: sticky; + left: var(--column9Width); +} + +.sticky-header-column-table-tr-2-1 tr:nth-child(2) th:first-child { + z-index: 3; + position: sticky; + left: 0px; +} +.sticky-header-column-table-tr-2-2 tr:nth-child(2) th:nth-child(2) { + z-index: 3; + position: sticky; + left: var(--column1Width); +} +.sticky-header-column-table-tr-2-3 tr:nth-child(2) th:nth-child(3) { + z-index: 3; + position: sticky; + left: var(--column2Width); +} +.sticky-header-column-table-tr-2-4 tr:nth-child(2) th:nth-child(4) { + z-index: 3; + position: sticky; + left: var(--column3Width); +} +.sticky-header-column-table-tr-2-5 tr:nth-child(2) th:nth-child(5) { + z-index: 3; + position: sticky; + left: var(--column4Width); +} +.sticky-header-column-table-tr-2-6 tr:nth-child(2) th:nth-child(6) { + z-index: 3; + position: sticky; + left: var(--column5Width); +} +.sticky-header-column-table-tr-2-7 tr:nth-child(2) th:nth-child(7) { + z-index: 3; + position: sticky; + left: var(--column6Width); +} +.sticky-header-column-table-tr-2-8 tr:nth-child(2) th:nth-child(8) { + z-index: 3; + position: sticky; + left: var(--column7Width); +} +.sticky-header-column-table-tr-2-9 tr:nth-child(2) th:nth-child(9) { + z-index: 3; + position: sticky; + left: var(--column8Width); +} +.sticky-header-column-table-tr-2-10 tr:nth-child(2) th:nth-child(10) { + z-index: 3; + position: sticky; + left: var(--column9Width); +} + +.sticky-header-column-table-tr-3-1 tr:nth-child(3) th:first-child { + z-index: 3; + position: sticky; + left: 0px; +} +.sticky-header-column-table-tr-3-2 tr:nth-child(3) th:nth-child(2) { + z-index: 3; + position: sticky; + left: var(--column1Width); +} +.sticky-header-column-table-tr-3-3 tr:nth-child(3) th:nth-child(3) { + z-index: 3; + position: sticky; + left: var(--column2Width); +} +.sticky-header-column-table-tr-3-4 tr:nth-child(3) th:nth-child(4) { + z-index: 3; + position: sticky; + left: var(--column3Width); +} +.sticky-header-column-table-tr-3-5 tr:nth-child(3) th:nth-child(5) { + z-index: 3; + position: sticky; + left: var(--column4Width); +} +.sticky-header-column-table-tr-3-6 tr:nth-child(3) th:nth-child(6) { + z-index: 3; + position: sticky; + left: var(--column5Width); +} +.sticky-header-column-table-tr-3-7 tr:nth-child(3) th:nth-child(7) { + z-index: 3; + position: sticky; + left: var(--column6Width); +} +.sticky-header-column-table-tr-3-8 tr:nth-child(3) th:nth-child(8) { + z-index: 3; + position: sticky; + left: var(--column7Width); +} +.sticky-header-column-table-tr-3-9 tr:nth-child(3) th:nth-child(9) { + z-index: 3; + position: sticky; + left: var(--column8Width); +} +.sticky-header-column-table-tr-3-10 tr:nth-child(3) th:nth-child(10) { + z-index: 3; + position: sticky; + left: var(--column9Width); +} + +.sticky-header-column-table-tr-4-1 tr:nth-child(4) th:first-child { + z-index: 3; + position: sticky; + left: 0px; +} +.sticky-header-column-table-tr-4-2 tr:nth-child(4) th:nth-child(2) { + z-index: 3; + position: sticky; + left: var(--column1Width); +} +.sticky-header-column-table-tr-4-3 tr:nth-child(4) th:nth-child(3) { + z-index: 3; + position: sticky; + left: var(--column2Width); +} +.sticky-header-column-table-tr-4-4 tr:nth-child(4) th:nth-child(4) { + z-index: 3; + position: sticky; + left: var(--column3Width); +} +.sticky-header-column-table-tr-4-5 tr:nth-child(4) th:nth-child(5) { + z-index: 3; + position: sticky; + left: var(--column4Width); +} +.sticky-header-column-table-tr-4-6 tr:nth-child(4) th:nth-child(6) { + z-index: 3; + position: sticky; + left: var(--column5Width); +} +.sticky-header-column-table-tr-4-7 tr:nth-child(4) th:nth-child(7) { + z-index: 3; + position: sticky; + left: var(--column6Width); +} +.sticky-header-column-table-tr-4-8 tr:nth-child(4) th:nth-child(8) { + z-index: 3; + position: sticky; + left: var(--column7Width); +} +.sticky-header-column-table-tr-4-9 tr:nth-child(4) th:nth-child(9) { + z-index: 3; + position: sticky; + left: var(--column8Width); +} +.sticky-header-column-table-tr-4-10 tr:nth-child(4) th:nth-child(10) { + z-index: 3; + position: sticky; + left: var(--column9Width); +} + +.sticky-header-column-table-tr-5-1 tr:nth-child(5) th:first-child { + z-index: 3; + position: sticky; + left: 0px; +} +.sticky-header-column-table-tr-5-2 tr:nth-child(5) th:nth-child(2) { + z-index: 3; + position: sticky; + left: var(--column1Width); +} +.sticky-header-column-table-tr-5-3 tr:nth-child(5) th:nth-child(3) { + z-index: 3; + position: sticky; + left: var(--column2Width); +} +.sticky-header-column-table-tr-5-4 tr:nth-child(5) th:nth-child(4) { + z-index: 3; + position: sticky; + left: var(--column3Width); +} +.sticky-header-column-table-tr-5-5 tr:nth-child(5) th:nth-child(5) { + z-index: 3; + position: sticky; + left: var(--column4Width); +} +.sticky-header-column-table-tr-5-6 tr:nth-child(5) th:nth-child(6) { + z-index: 3; + position: sticky; + left: var(--column5Width); +} +.sticky-header-column-table-tr-5-7 tr:nth-child(5) th:nth-child(7) { + z-index: 3; + position: sticky; + left: var(--column6Width); +} +.sticky-header-column-table-tr-5-8 tr:nth-child(5) th:nth-child(8) { + z-index: 3; + position: sticky; + left: var(--column7Width); +} +.sticky-header-column-table-tr-5-9 tr:nth-child(5) th:nth-child(9) { + z-index: 3; + position: sticky; + left: var(--column8Width); +} +.sticky-header-column-table-tr-5-10 tr:nth-child(5) th:nth-child(10) { + z-index: 3; + position: sticky; + left: var(--column9Width); +} + +.sticky-header-column-table-tr-6-1 tr:nth-child(6) th:first-child { + z-index: 3; + position: sticky; + left: 0px; +} +.sticky-header-column-table-tr-6-2 tr:nth-child(6) th:nth-child(2) { + z-index: 3; + position: sticky; + left: var(--column1Width); +} +.sticky-header-column-table-tr-6-3 tr:nth-child(6) th:nth-child(3) { + z-index: 3; + position: sticky; + left: var(--column2Width); +} +.sticky-header-column-table-tr-6-4 tr:nth-child(6) th:nth-child(4) { + z-index: 3; + position: sticky; + left: var(--column3Width); +} +.sticky-header-column-table-tr-6-5 tr:nth-child(6) th:nth-child(5) { + z-index: 3; + position: sticky; + left: var(--column4Width); +} +.sticky-header-column-table-tr-6-6 tr:nth-child(6) th:nth-child(6) { + z-index: 3; + position: sticky; + left: var(--column5Width); +} +.sticky-header-column-table-tr-6-7 tr:nth-child(6) th:nth-child(7) { + z-index: 3; + position: sticky; + left: var(--column6Width); +} +.sticky-header-column-table-tr-6-8 tr:nth-child(6) th:nth-child(8) { + z-index: 3; + position: sticky; + left: var(--column7Width); +} +.sticky-header-column-table-tr-6-9 tr:nth-child(6) th:nth-child(9) { + z-index: 3; + position: sticky; + left: var(--column8Width); +} +.sticky-header-column-table-tr-6-10 tr:nth-child(6) th:nth-child(10) { + z-index: 3; + position: sticky; + left: var(--column9Width); +} + +.sticky-header-column-table-tr-7-1 tr:nth-child(7) th:first-child { + z-index: 3; + position: sticky; + left: 0px; +} +.sticky-header-column-table-tr-7-2 tr:nth-child(7) th:nth-child(2) { + z-index: 3; + position: sticky; + left: var(--column1Width); +} +.sticky-header-column-table-tr-7-3 tr:nth-child(7) th:nth-child(3) { + z-index: 3; + position: sticky; + left: var(--column2Width); +} +.sticky-header-column-table-tr-7-4 tr:nth-child(7) th:nth-child(4) { + z-index: 3; + position: sticky; + left: var(--column3Width); +} +.sticky-header-column-table-tr-7-5 tr:nth-child(7) th:nth-child(5) { + z-index: 3; + position: sticky; + left: var(--column4Width); +} +.sticky-header-column-table-tr-7-6 tr:nth-child(7) th:nth-child(6) { + z-index: 3; + position: sticky; + left: var(--column5Width); +} +.sticky-header-column-table-tr-7-7 tr:nth-child(7) th:nth-child(7) { + z-index: 3; + position: sticky; + left: var(--column6Width); +} +.sticky-header-column-table-tr-7-8 tr:nth-child(7) th:nth-child(8) { + z-index: 3; + position: sticky; + left: var(--column7Width); +} +.sticky-header-column-table-tr-7-9 tr:nth-child(7) th:nth-child(9) { + z-index: 3; + position: sticky; + left: var(--column8Width); +} +.sticky-header-column-table-tr-7-10 tr:nth-child(7) th:nth-child(10) { + z-index: 3; + position: sticky; + left: var(--column9Width); +} + +.sticky-header-column-table-tr-8-1 tr:nth-child(8) th:first-child { + z-index: 3; + position: sticky; + left: 0px; +} +.sticky-header-column-table-tr-8-2 tr:nth-child(8) th:nth-child(2) { + z-index: 3; + position: sticky; + left: var(--column1Width); +} +.sticky-header-column-table-tr-8-3 tr:nth-child(8) th:nth-child(3) { + z-index: 3; + position: sticky; + left: var(--column2Width); +} +.sticky-header-column-table-tr-8-4 tr:nth-child(8) th:nth-child(4) { + z-index: 3; + position: sticky; + left: var(--column3Width); +} +.sticky-header-column-table-tr-8-5 tr:nth-child(8) th:nth-child(5) { + z-index: 3; + position: sticky; + left: var(--column4Width); +} +.sticky-header-column-table-tr-8-6 tr:nth-child(8) th:nth-child(6) { + z-index: 3; + position: sticky; + left: var(--column5Width); +} +.sticky-header-column-table-tr-8-7 tr:nth-child(8) th:nth-child(7) { + z-index: 3; + position: sticky; + left: var(--column6Width); +} +.sticky-header-column-table-tr-8-8 tr:nth-child(8) th:nth-child(8) { + z-index: 3; + position: sticky; + left: var(--column7Width); +} +.sticky-header-column-table-tr-8-9 tr:nth-child(8) th:nth-child(9) { + z-index: 3; + position: sticky; + left: var(--column8Width); +} +.sticky-header-column-table-tr-8-10 tr:nth-child(8) th:nth-child(10) { + z-index: 3; + position: sticky; + left: var(--column9Width); +} + +.sticky-header-column-table-tr-9-1 tr:nth-child(9) th:first-child { + z-index: 3; + position: sticky; + left: 0px; +} +.sticky-header-column-table-tr-9-2 tr:nth-child(9) th:nth-child(2) { + z-index: 3; + position: sticky; + left: var(--column1Width); +} +.sticky-header-column-table-tr-9-3 tr:nth-child(9) th:nth-child(3) { + z-index: 3; + position: sticky; + left: var(--column2Width); +} +.sticky-header-column-table-tr-9-4 tr:nth-child(9) th:nth-child(4) { + z-index: 3; + position: sticky; + left: var(--column3Width); +} +.sticky-header-column-table-tr-9-5 tr:nth-child(9) th:nth-child(5) { + z-index: 3; + position: sticky; + left: var(--column4Width); +} +.sticky-header-column-table-tr-9-6 tr:nth-child(9) th:nth-child(6) { + z-index: 3; + position: sticky; + left: var(--column5Width); +} +.sticky-header-column-table-tr-9-7 tr:nth-child(9) th:nth-child(7) { + z-index: 3; + position: sticky; + left: var(--column6Width); +} +.sticky-header-column-table-tr-9-8 tr:nth-child(9) th:nth-child(8) { + z-index: 3; + position: sticky; + left: var(--column7Width); +} +.sticky-header-column-table-tr-9-9 tr:nth-child(9) th:nth-child(9) { + z-index: 3; + position: sticky; + left: var(--column8Width); +} +.sticky-header-column-table-tr-9-10 tr:nth-child(9) th:nth-child(10) { + z-index: 3; + position: sticky; + left: var(--column9Width); +} + +.sticky-header-column-table-tr-10-1 tr:nth-child(10) th:first-child { + z-index: 3; + position: sticky; + left: 0px; +} +.sticky-header-column-table-tr-10-2 tr:nth-child(10) th:nth-child(2) { + z-index: 3; + position: sticky; + left: var(--column1Width); +} +.sticky-header-column-table-tr-10-3 tr:nth-child(10) th:nth-child(3) { + z-index: 3; + position: sticky; + left: var(--column2Width); +} +.sticky-header-column-table-tr-10-4 tr:nth-child(10) th:nth-child(4) { + z-index: 3; + position: sticky; + left: var(--column3Width); +} +.sticky-header-column-table-tr-10-5 tr:nth-child(10) th:nth-child(5) { + z-index: 3; + position: sticky; + left: var(--column4Width); +} +.sticky-header-column-table-tr-10-6 tr:nth-child(10) th:nth-child(6) { + z-index: 3; + position: sticky; + left: var(--column5Width); +} +.sticky-header-column-table-tr-10-7 tr:nth-child(10) th:nth-child(7) { + z-index: 3; + position: sticky; + left: var(--column6Width); +} +.sticky-header-column-table-tr-10-8 tr:nth-child(10) th:nth-child(8) { + z-index: 3; + position: sticky; + left: var(--column7Width); +} +.sticky-header-column-table-tr-10-9 tr:nth-child(10) th:nth-child(9) { + z-index: 3; + position: sticky; + left: var(--column8Width); +} +.sticky-header-column-table-tr-10-10 tr:nth-child(10) th:nth-child(10) { + z-index: 3; + position: sticky; + left: var(--column9Width); +} + +.sticky-header-column-table-td-1 td:first-child { + background-color: var(--stickyBgColor); + z-index: 1; + position: sticky; + left: 0px; +} +.sticky-header-column-table-td-2 td:nth-child(2) { + background-color: var(--stickyBgColor); + z-index: 1; + position: sticky; + left: var(--column1Width); +} +.sticky-header-column-table-td-3 td:nth-child(3) { + background-color: var(--stickyBgColor); + z-index: 1; + position: sticky; + left: var(--column2Width); +} +.sticky-header-column-table-td-4 td:nth-child(4) { + background-color: var(--stickyBgColor); + z-index: 1; + position: sticky; + left: var(--column3Width); +} +.sticky-header-column-table-td-5 td:nth-child(5) { + background-color: var(--stickyBgColor); + z-index: 1; + position: sticky; + left: var(--column4Width); +} +.sticky-header-column-table-td-6 td:nth-child(6) { + background-color: var(--stickyBgColor); + z-index: 1; + position: sticky; + left: var(--column5Width); +} +.sticky-header-column-table-td-7 td:nth-child(7) { + background-color: var(--stickyBgColor); + z-index: 1; + position: sticky; + left: var(--column6Width); +} +.sticky-header-column-table-td-8 td:nth-child(8) { + background-color: var(--stickyBgColor); + z-index: 1; + position: sticky; + left: var(--column7Width); +} +.sticky-header-column-table-td-9 td:nth-child(9) { + background-color: var(--stickyBgColor); + z-index: 1; + position: sticky; + left: var(--column8Width); +} +.sticky-header-column-table-td-10 td:nth-child(10) { + background-color: var(--stickyBgColor); + z-index: 1; + position: sticky; + left: var(--column9Width); +} \ No newline at end of file diff --git a/io.sc.platform.core.frontend/src/platform/components/grid/ts/grid.ts b/io.sc.platform.core.frontend/src/platform/components/grid/ts/grid.ts new file mode 100644 index 00000000..e6682682 --- /dev/null +++ b/io.sc.platform.core.frontend/src/platform/components/grid/ts/grid.ts @@ -0,0 +1,59 @@ +import { Tools, t, componentRegistryName } from '@/platform'; + +// 列样式处理 +const columnStyle = (item: any) => { + let style = ''; + if (Tools.hasOwnProperty(item, 'style')) { + style = item.style; + } + if (Tools.hasOwnProperty(item, 'width')) { + if (typeof item.width === 'number') { + item.style = `min-width: ` + item.width + `px; width: ` + item.width + `px;max-width: ` + item.width + `px;` + style; + } else { + item.style = `min-width: ` + item.width + `; width: ` + item.width + `;max-width: ` + item.width + `;` + style; + } + delete item.width; + + if (Tools.hasOwnProperty(item, 'classes')) { + item.classes = item.classes + ' truncate'; + } else { + item.classes = 'truncate'; + } + } +}; + +// 孩子列处理 +const childrenHandler = (item: any, gridColumns: any) => { + if (item.columns && item.columns.length > 0) { + item.columns.forEach((column) => { + childrenHandler(column, gridColumns); + }); + } else { + columnStyle(item); + // 替换行编辑类型为注册名 + if (!Tools.isEmpty(item.type)) { + item.type = componentRegistryName(item.type); + } + const col = { + ...{ align: 'left', label: item.name, field: item.name, name: item.name, sortable: true, hidden: false }, + ...item, + }; + if (Tools.isEmpty(col.name)) { + col.name = Tools.uuid(); + } + gridColumns.push(col); + } +}; + +// 列的默认属性 +export const columnDefaultProps = (columns: any, sortNo: boolean = true) => { + const gridColumns = []; + if (columns && columns.length > 0) { + gridColumns.push({ name: '_sortNo_', align: 'center', label: t('rownum'), field: '_sortNo_', hidden: sortNo }); + columns.forEach((item: any) => { + childrenHandler(item, gridColumns); + }); + return gridColumns; + } + return []; +}; diff --git a/io.sc.platform.core.frontend/src/platform/components/index.ts b/io.sc.platform.core.frontend/src/platform/components/index.ts index 4389181a..f673b9e5 100644 --- a/io.sc.platform.core.frontend/src/platform/components/index.ts +++ b/io.sc.platform.core.frontend/src/platform/components/index.ts @@ -161,16 +161,6 @@ export { OptionComeFromEnum } from './utils'; export { FormComponentValidateEnum } from './utils'; export { OperatorTypeEnum } from './utils'; export type { CriteriaType } from './utils'; -export { PlatformNotifyTypeEnum } from './utils'; -export { platformNotify } from './utils'; -export { isEmpty } from './utils'; - -export { extractDialogProps } from './utils'; -export { extractFormProps } from './utils'; -export { extractFormItemComponentProps } from './utils'; -export { extractTableProps } from './utils'; -export { extractTableColumnsProps } from './utils'; -export { getQueryFormColsNumberByScreen } from './utils'; -export { arrayToMap } from './utils'; +export { arrayToMap, componentRegistryName } from './utils'; export { FormValidators } from './utils'; diff --git a/io.sc.platform.core.frontend/src/platform/components/toolbar/WToolbar.vue b/io.sc.platform.core.frontend/src/platform/components/toolbar/WToolbar.vue index 796e2d01..e724d84e 100644 --- a/io.sc.platform.core.frontend/src/platform/components/toolbar/WToolbar.vue +++ b/io.sc.platform.core.frontend/src/platform/components/toolbar/WToolbar.vue @@ -480,6 +480,10 @@ const buttonClick = async (button) => { } } }; + +defineExpose({ + buttonClick, +}); diff --git a/io.sc.platform.core.frontend/src/views/likm/QuasarGrid.vue b/io.sc.platform.core.frontend/src/views/likm/QuasarGrid.vue index b0c6f538..16d8855d 100644 --- a/io.sc.platform.core.frontend/src/views/likm/QuasarGrid.vue +++ b/io.sc.platform.core.frontend/src/views/likm/QuasarGrid.vue @@ -1,752 +1,69 @@ - - - - - - { - currentSelectedRoleId = row.id; - userGridRef?.refresh(); - menuTreeGridRef?.refresh(); - } - " - > - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/io.sc.platform.core.frontend/src/views/likm/TreeGrid.vue b/io.sc.platform.core.frontend/src/views/likm/TreeGrid.vue index a62c42e7..51263db6 100644 --- a/io.sc.platform.core.frontend/src/views/likm/TreeGrid.vue +++ b/io.sc.platform.core.frontend/src/views/likm/TreeGrid.vue @@ -8,6 +8,7 @@ tree :tree-icon="(row) => {}" :checkbox-selection="true" + db-click-operation="rowEdit" :data-url="testGrid.dataUrl" :fetch-data-url="testGrid.fetchDataUrl" :columns="testGrid.tableColumns" @@ -59,29 +60,9 @@ const testGrid = { 'reset', 'refresh', 'separator', - { - name: 'custBtn', - extend: 'add', - icon: undefined, - label: '自定义按钮', - enableIf: (selected, grid) => { - if (selected && selected.length > 0) { - return true; - } - return false; - }, - // beforeClick: (selected, context, grid) => { - // console.info('先执行before'); - // context.aaa = '111'; - // }, - click: (selected, context, _click, grid) => { - _click(selected); - }, - afterClick: (selected, context, grid) => { - console.info('=grid==', grid.getEditorForm()); - // gridRefs.addEditFormRef.setFieldValue('userName', '李四'); - }, - }, + 'rowEdit', + 'rowsEdit', + 'separator', 'addTop', 'addChild', 'expand', @@ -111,6 +92,7 @@ const testGrid = { name: 'name', label: '菜单名称', // width: 500, + type: 'text', format: (val, row) => { return t(row.name); }, @@ -118,6 +100,10 @@ const testGrid = { { name: 'icon', label: '图标', + type: 'icon', + attrs: { + required: true, + }, format: (val, row) => { return { componentType: 'q-icon', diff --git a/io.sc.platform.core.frontend/template-project/src/views/testcase/math/MathEditorForm.vue b/io.sc.platform.core.frontend/template-project/src/views/testcase/math/MathEditorForm.vue deleted file mode 100644 index 94ac5dba..00000000 --- a/io.sc.platform.core.frontend/template-project/src/views/testcase/math/MathEditorForm.vue +++ /dev/null @@ -1,178 +0,0 @@ - - - { - console.log(data); - } - " - > - - -