You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
3.5 KiB

<template>
<w-grid
ref="treeGridRef"
:title="$t('system.shared.selectMenu.grid.title')"
1 year ago
hide-bottom
1 year ago
:config-button="false"
:tree="true"
selection="multiple"
1 year ago
:checkbox-selection="true"
tree-tick-strategy="strict"
:tree-icon="
(row) => {
if (row.type === 'SEPARATOR') {
return { name: 'bi-dash-lg' };
} else if (row.type === 'ROUTE_ACTION') {
return { name: 'sym_o_crop_16_9' };
} else {
return { name: row.icon };
}
}
"
1 year ago
:fetch-data-url="fetchDataUrl + '?' + foreignKey + '=' + foreignValue"
11 months ago
:auto-fetch-data="false"
:pageable="false"
11 months ago
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="[
'refresh',
'separator',
1 year ago
{
extend: 'expand',
enableIf: () => {
return foreignValue && treeGridRef?.getRows()?.length > 0;
},
},
{
name: 'save',
1 year ago
label: $t('save'),
11 months ago
icon: 'bi-floppy',
1 year ago
enableIf: () => {
return foreignValue && treeGridRef?.getRows()?.length > 0;
},
1 year ago
click: (arg) => {
DialogManager.confirm($t('system.shared.selectMenu.grid.toolbar.save.tip'), () => {
11 months ago
const ids = Tools.extractProperties(treeGridRef.getTickedRows(true), 'id');
emit('update', ids, treeGridRef);
});
},
},
'separator',
'view',
]"
:columns="[
{
width: '100%',
name: 'titleI18nKey',
label: $t('name'),
sortable: false,
format: (value, row) => {
if (row.type === 'SEPARATOR') {
return `<hr style='width:100px'/>`;
} else if (row.type === 'ROUTE_ACTION') {
return $t(row.i18nKey);
} else {
return $t(value);
}
},
},
{ width: 100, name: 'enable', label: $t('status'), format: Formater.enableTag(), sortable: false },
]"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t('id') },
{ name: 'type', label: $t('type') },
{ name: 'name', label: $t('name') },
{ name: 'titleI18nKey', label: $t('titleI18nKey') },
{ name: 'icon', label: $t('icon') },
{ name: 'enable', label: $t('enable') },
{ name: 'order', label: $t('order') },
{ name: 'javaScript', label: $t('javaScript') },
{ name: 'url', label: $t('url') },
{ name: 'urlOpenType', label: $t('urlOpenType') },
{ name: 'routeName', label: $t('routeName') },
{ name: 'routeQuery', label: $t('routeQuery') },
{ name: 'dataComeFrom', label: $t('dataComeFrom') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
{ name: 'lastModifier', label: $t('lastModifier') },
{ name: 'lastModifyDate', label: $t('lastModifyDate') },
{ name: 'corporationCode', label: $t('corporationCode') },
],
},
}"
></w-grid>
</template>
<script setup lang="ts">
11 months ago
import { ref, onMounted, onUpdated } from 'vue';
import { DialogManager, Formater, Tools } from 'platform-core';
11 months ago
defineProps({
fetchDataUrl: { type: String, default: '' },
foreignKey: { type: String, default: '' },
foreignValue: { type: String, default: '' },
});
const emit = defineEmits<{
(e: 'update', ids: string[], gridComponent: any): void;
}>();
const treeGridRef = ref();
const refresh = () => {
treeGridRef.value.refresh();
};
defineExpose({
refresh,
});
</script>