refactor: refs #6897 update component props and attributes for consistency and improved functionality
gitea/salix-front/pipeline/pr-test This commit looks good
Details
gitea/salix-front/pipeline/pr-test This commit looks good
Details
This commit is contained in:
parent
3a559d37b5
commit
579786d121
|
@ -95,6 +95,10 @@ const $props = defineProps({
|
||||||
type: [String, Boolean],
|
type: [String, Boolean],
|
||||||
default: '800px',
|
default: '800px',
|
||||||
},
|
},
|
||||||
|
onDataSaved: {
|
||||||
|
type: Function,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
const emit = defineEmits(['onFetch', 'onDataSaved']);
|
const emit = defineEmits(['onFetch', 'onDataSaved']);
|
||||||
const modelValue = computed(
|
const modelValue = computed(
|
||||||
|
|
|
@ -32,7 +32,6 @@ import VnTableOrder from 'src/components/VnTable/VnOrder.vue';
|
||||||
import VnTableFilter from './VnTableFilter.vue';
|
import VnTableFilter from './VnTableFilter.vue';
|
||||||
import { getColAlign } from 'src/composables/getColAlign';
|
import { getColAlign } from 'src/composables/getColAlign';
|
||||||
import RightMenu from '../common/RightMenu.vue';
|
import RightMenu from '../common/RightMenu.vue';
|
||||||
import { QItemSection } from 'quasar';
|
|
||||||
|
|
||||||
const arrayData = useArrayData(useAttrs()['data-key']);
|
const arrayData = useArrayData(useAttrs()['data-key']);
|
||||||
const $props = defineProps({
|
const $props = defineProps({
|
||||||
|
@ -139,6 +138,10 @@ const $props = defineProps({
|
||||||
createComplement: {
|
createComplement: {
|
||||||
type: Object,
|
type: Object,
|
||||||
},
|
},
|
||||||
|
dataCy: {
|
||||||
|
type: String,
|
||||||
|
default: 'vn-table',
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
@ -167,7 +170,6 @@ const app = inject('app');
|
||||||
const editingRow = ref(null);
|
const editingRow = ref(null);
|
||||||
const editingField = ref(null);
|
const editingField = ref(null);
|
||||||
const isTableMode = computed(() => mode.value == TABLE_MODE);
|
const isTableMode = computed(() => mode.value == TABLE_MODE);
|
||||||
const showRightIcon = computed(() => $props.rightSearch || $props.rightSearchIcon);
|
|
||||||
const selectRegex = /select/;
|
const selectRegex = /select/;
|
||||||
const emit = defineEmits(['onFetch', 'update:selected', 'saveChanges']);
|
const emit = defineEmits(['onFetch', 'update:selected', 'saveChanges']);
|
||||||
const tableModes = [
|
const tableModes = [
|
||||||
|
@ -255,7 +257,9 @@ function splitColumns(columns) {
|
||||||
col.columnFilter = { inWhere: true, ...col.columnFilter };
|
col.columnFilter = { inWhere: true, ...col.columnFilter };
|
||||||
splittedColumns.value.columns.push(col);
|
splittedColumns.value.columns.push(col);
|
||||||
}
|
}
|
||||||
// Status column
|
|
||||||
|
splittedColumns.value.create = createOrderSort(splittedColumns.value.create);
|
||||||
|
|
||||||
if (splittedColumns.value.chips.length) {
|
if (splittedColumns.value.chips.length) {
|
||||||
splittedColumns.value.columnChips = splittedColumns.value.chips.filter(
|
splittedColumns.value.columnChips = splittedColumns.value.chips.filter(
|
||||||
(c) => !c.isId,
|
(c) => !c.isId,
|
||||||
|
@ -271,6 +275,24 @@ function splitColumns(columns) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createOrderSort(columns) {
|
||||||
|
const orderedColumn = columns
|
||||||
|
.map((column, index) =>
|
||||||
|
column.createOrder !== undefined ? { ...column, originalIndex: index } : null,
|
||||||
|
)
|
||||||
|
.filter((item) => item !== null);
|
||||||
|
|
||||||
|
orderedColumn.sort((a, b) => a.createOrder - b.createOrder);
|
||||||
|
|
||||||
|
const filteredColumns = columns.filter((col) => col.createOrder === undefined);
|
||||||
|
|
||||||
|
orderedColumn.forEach((col) => {
|
||||||
|
filteredColumns.splice(col.createOrder, 0, col);
|
||||||
|
});
|
||||||
|
|
||||||
|
return filteredColumns;
|
||||||
|
}
|
||||||
|
|
||||||
const rowClickFunction = computed(() => {
|
const rowClickFunction = computed(() => {
|
||||||
if ($props.rowClick != undefined) return $props.rowClick;
|
if ($props.rowClick != undefined) return $props.rowClick;
|
||||||
if ($props.redirect) return ({ id }) => redirectFn(id);
|
if ($props.redirect) return ({ id }) => redirectFn(id);
|
||||||
|
@ -340,12 +362,11 @@ function hasEditableFormat(column) {
|
||||||
|
|
||||||
const clickHandler = async (event) => {
|
const clickHandler = async (event) => {
|
||||||
const clickedElement = event.target.closest('td');
|
const clickedElement = event.target.closest('td');
|
||||||
|
|
||||||
const isDateElement = event.target.closest('.q-date');
|
const isDateElement = event.target.closest('.q-date');
|
||||||
const isTimeElement = event.target.closest('.q-time');
|
const isTimeElement = event.target.closest('.q-time');
|
||||||
const isQselectDropDown = event.target.closest('.q-select__dropdown-icon');
|
const isQSelectDropDown = event.target.closest('.q-select__dropdown-icon');
|
||||||
|
|
||||||
if (isDateElement || isTimeElement || isQselectDropDown) return;
|
if (isDateElement || isTimeElement || isQSelectDropDown) return;
|
||||||
|
|
||||||
if (clickedElement === null) {
|
if (clickedElement === null) {
|
||||||
await destroyInput(editingRow.value, editingField.value);
|
await destroyInput(editingRow.value, editingField.value);
|
||||||
|
@ -584,9 +605,24 @@ function removeTextValue(data, getChanges) {
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleRowClick(event, row) {
|
||||||
|
if (event.ctrlKey) return rowCtrlClickFunction.value(event, row);
|
||||||
|
if (rowClickFunction.value) rowClickFunction.value(row);
|
||||||
|
}
|
||||||
|
|
||||||
|
const rowCtrlClickFunction = computed(() => {
|
||||||
|
if ($props.rowCtrlClick != undefined) return $props.rowCtrlClick;
|
||||||
|
if ($props.redirect)
|
||||||
|
return (evt, { id }) => {
|
||||||
|
stopEventPropagation(evt);
|
||||||
|
window.open(`/#/${$props.redirect}/${id}`, '_blank');
|
||||||
|
};
|
||||||
|
return () => {};
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<RightMenu v-if="$props.rightSearch">
|
<RightMenu v-if="$props.rightSearch" :overlay="overlay">
|
||||||
<template #right-panel>
|
<template #right-panel>
|
||||||
<VnTableFilter
|
<VnTableFilter
|
||||||
:data-key="$attrs['data-key']"
|
:data-key="$attrs['data-key']"
|
||||||
|
@ -639,7 +675,7 @@ function removeTextValue(data, getChanges) {
|
||||||
:style="isTableMode && `max-height: ${tableHeight}`"
|
:style="isTableMode && `max-height: ${tableHeight}`"
|
||||||
:virtual-scroll="isTableMode"
|
:virtual-scroll="isTableMode"
|
||||||
@virtual-scroll="handleScroll"
|
@virtual-scroll="handleScroll"
|
||||||
@row-click="(_, row) => rowClickFunction && rowClickFunction(row)"
|
@row-click="(event, row) => handleRowClick(event, row)"
|
||||||
@update:selected="emit('update:selected', $event)"
|
@update:selected="emit('update:selected', $event)"
|
||||||
@selection="(details) => handleSelection(details, rows)"
|
@selection="(details) => handleSelection(details, rows)"
|
||||||
:hide-selected-banner="true"
|
:hide-selected-banner="true"
|
||||||
|
@ -985,7 +1021,10 @@ function removeTextValue(data, getChanges) {
|
||||||
>
|
>
|
||||||
<template #form-inputs="{ data }">
|
<template #form-inputs="{ data }">
|
||||||
<div :style="createComplement?.containerStyle">
|
<div :style="createComplement?.containerStyle">
|
||||||
<div>
|
<div
|
||||||
|
:style="createComplement?.previousStyle"
|
||||||
|
v-if="!quasar.screen.xs"
|
||||||
|
>
|
||||||
<slot name="previous-create-dialog" :data="data" />
|
<slot name="previous-create-dialog" :data="data" />
|
||||||
</div>
|
</div>
|
||||||
<div class="grid-create" :style="createComplement?.columnGridStyle">
|
<div class="grid-create" :style="createComplement?.columnGridStyle">
|
||||||
|
@ -998,7 +1037,10 @@ function removeTextValue(data, getChanges) {
|
||||||
:label="column.label"
|
:label="column.label"
|
||||||
>
|
>
|
||||||
<VnColumn
|
<VnColumn
|
||||||
:column="column"
|
:column="{
|
||||||
|
...column,
|
||||||
|
...{ disable: column?.createDisable ?? false },
|
||||||
|
}"
|
||||||
:row="{}"
|
:row="{}"
|
||||||
default="input"
|
default="input"
|
||||||
v-model="data[column.name]"
|
v-model="data[column.name]"
|
||||||
|
|
|
@ -11,6 +11,13 @@ const stateStore = useStateStore();
|
||||||
const slots = useSlots();
|
const slots = useSlots();
|
||||||
const hasContent = useHasContent('#right-panel');
|
const hasContent = useHasContent('#right-panel');
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
overlay: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
if ((!slots['right-panel'] && !hasContent.value) || quasar.platform.is.mobile)
|
if ((!slots['right-panel'] && !hasContent.value) || quasar.platform.is.mobile)
|
||||||
stateStore.rightDrawer = false;
|
stateStore.rightDrawer = false;
|
||||||
|
@ -34,7 +41,12 @@ onMounted(() => {
|
||||||
</QBtn>
|
</QBtn>
|
||||||
</div>
|
</div>
|
||||||
</Teleport>
|
</Teleport>
|
||||||
<QDrawer v-model="stateStore.rightDrawer" side="right" :width="256">
|
<QDrawer
|
||||||
|
v-model="stateStore.rightDrawer"
|
||||||
|
side="right"
|
||||||
|
:width="256"
|
||||||
|
:overlay="overlay"
|
||||||
|
>
|
||||||
<QScrollArea class="fit">
|
<QScrollArea class="fit">
|
||||||
<div id="right-panel"></div>
|
<div id="right-panel"></div>
|
||||||
<slot v-if="!hasContent" name="right-panel" />
|
<slot v-if="!hasContent" name="right-panel" />
|
||||||
|
|
|
@ -27,7 +27,7 @@ const checkboxModel = computed({
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<QCheckbox v-bind="$attrs" v-on="$attrs" v-model="checkboxModel" />
|
<QCheckbox v-bind="$attrs" v-model="checkboxModel" />
|
||||||
<QIcon
|
<QIcon
|
||||||
v-if="info"
|
v-if="info"
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
|
|
|
@ -302,8 +302,6 @@ defineExpose({ opts: myOptions, vnSelectRef });
|
||||||
|
|
||||||
function handleKeyDown(event) {
|
function handleKeyDown(event) {
|
||||||
if (event.key === 'Tab' && !event.shiftKey) {
|
if (event.key === 'Tab' && !event.shiftKey) {
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
const inputValue = vnSelectRef.value?.inputValue;
|
const inputValue = vnSelectRef.value?.inputValue;
|
||||||
|
|
||||||
if (inputValue) {
|
if (inputValue) {
|
||||||
|
|
|
@ -29,7 +29,6 @@ export async function checkEntryLock(entryFk, userFk) {
|
||||||
.dialog({
|
.dialog({
|
||||||
component: VnConfirm,
|
component: VnConfirm,
|
||||||
componentProps: {
|
componentProps: {
|
||||||
'data-cy': 'entry-lock-confirm',
|
|
||||||
title: t('entry.lock.title'),
|
title: t('entry.lock.title'),
|
||||||
message: t('entry.lock.message', {
|
message: t('entry.lock.message', {
|
||||||
userName: data?.user?.nickname,
|
userName: data?.user?.nickname,
|
||||||
|
|
|
@ -54,6 +54,7 @@ const columns = [
|
||||||
toggleIndeterminate: false,
|
toggleIndeterminate: false,
|
||||||
},
|
},
|
||||||
create: true,
|
create: true,
|
||||||
|
createOrder: 12,
|
||||||
width: '25px',
|
width: '25px',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -87,15 +88,6 @@ const columns = [
|
||||||
isEditable: false,
|
isEditable: false,
|
||||||
columnFilter: false,
|
columnFilter: false,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: 'entryFk',
|
|
||||||
isId: true,
|
|
||||||
visible: false,
|
|
||||||
isEditable: false,
|
|
||||||
disable: true,
|
|
||||||
create: true,
|
|
||||||
columnFilter: false,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
align: 'center',
|
align: 'center',
|
||||||
label: 'Id',
|
label: 'Id',
|
||||||
|
@ -137,6 +129,7 @@ const columns = [
|
||||||
name: 'itemFk',
|
name: 'itemFk',
|
||||||
visible: false,
|
visible: false,
|
||||||
create: true,
|
create: true,
|
||||||
|
createOrder: 0,
|
||||||
columnFilter: false,
|
columnFilter: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -160,6 +153,8 @@ const columns = [
|
||||||
name: 'stickers',
|
name: 'stickers',
|
||||||
component: 'input',
|
component: 'input',
|
||||||
create: true,
|
create: true,
|
||||||
|
|
||||||
|
createOrder: 1,
|
||||||
attrs: {
|
attrs: {
|
||||||
positive: false,
|
positive: false,
|
||||||
},
|
},
|
||||||
|
@ -271,6 +266,7 @@ const columns = [
|
||||||
},
|
},
|
||||||
width: '45px',
|
width: '45px',
|
||||||
create: true,
|
create: true,
|
||||||
|
createOrder: 3,
|
||||||
style: getQuantityStyle,
|
style: getQuantityStyle,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -280,6 +276,7 @@ const columns = [
|
||||||
toolTip: t('Buying value'),
|
toolTip: t('Buying value'),
|
||||||
name: 'buyingValue',
|
name: 'buyingValue',
|
||||||
create: true,
|
create: true,
|
||||||
|
createOrder: 2,
|
||||||
component: 'number',
|
component: 'number',
|
||||||
attrs: {
|
attrs: {
|
||||||
positive: false,
|
positive: false,
|
||||||
|
@ -312,6 +309,7 @@ const columns = [
|
||||||
toolTip: t('Package'),
|
toolTip: t('Package'),
|
||||||
name: 'price2',
|
name: 'price2',
|
||||||
component: 'number',
|
component: 'number',
|
||||||
|
createDisable: true,
|
||||||
width: '35px',
|
width: '35px',
|
||||||
create: true,
|
create: true,
|
||||||
format: (row) => parseFloat(row['price2']).toFixed(2),
|
format: (row) => parseFloat(row['price2']).toFixed(2),
|
||||||
|
@ -321,6 +319,7 @@ const columns = [
|
||||||
label: t('Box'),
|
label: t('Box'),
|
||||||
name: 'price3',
|
name: 'price3',
|
||||||
component: 'number',
|
component: 'number',
|
||||||
|
createDisable: true,
|
||||||
cellEvent: {
|
cellEvent: {
|
||||||
'update:modelValue': async (value, oldValue, row) => {
|
'update:modelValue': async (value, oldValue, row) => {
|
||||||
row['price2'] = row['price2'] * (value / oldValue);
|
row['price2'] = row['price2'] * (value / oldValue);
|
||||||
|
@ -508,13 +507,14 @@ async function setBuyUltimate(itemFk, data) {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const buyUltimateData = buyUltimate.data[0];
|
const buyUltimateData = buyUltimate.data[0];
|
||||||
|
if (!buyUltimateData) return;
|
||||||
|
|
||||||
const allowedKeys = columns
|
const allowedKeys = columns
|
||||||
.filter((col) => col.create === true)
|
.filter((col) => col.create === true)
|
||||||
.map((col) => col.name);
|
.map((col) => col.name);
|
||||||
|
|
||||||
allowedKeys.forEach((key) => {
|
allowedKeys.forEach((key) => {
|
||||||
if (buyUltimateData.hasOwnProperty(key) && key !== 'entryFk') {
|
if (buyUltimateData?.hasOwnProperty(key) && key !== 'entryFk') {
|
||||||
if (!['stickers', 'quantity'].includes(key)) data[key] = buyUltimateData[key];
|
if (!['stickers', 'quantity'].includes(key)) data[key] = buyUltimateData[key];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -607,6 +607,7 @@ onMounted(() => {
|
||||||
ref="entryBuysRef"
|
ref="entryBuysRef"
|
||||||
data-key="EntryBuys"
|
data-key="EntryBuys"
|
||||||
:url="`Entries/${entityId}/getBuyList`"
|
:url="`Entries/${entityId}/getBuyList`"
|
||||||
|
search-url="EntryBuys"
|
||||||
save-url="Buys/crud"
|
save-url="Buys/crud"
|
||||||
:disable-option="{ card: true }"
|
:disable-option="{ card: true }"
|
||||||
v-model:selected="selectedRows"
|
v-model:selected="selectedRows"
|
||||||
|
@ -636,16 +637,19 @@ onMounted(() => {
|
||||||
isFullWidth: true,
|
isFullWidth: true,
|
||||||
containerStyle: {
|
containerStyle: {
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
'flex-wrap': 'wrap',
|
|
||||||
gap: '16px',
|
gap: '16px',
|
||||||
position: 'relative',
|
position: 'relative',
|
||||||
height: '500px',
|
|
||||||
},
|
},
|
||||||
columnGridStyle: {
|
columnGridStyle: {
|
||||||
'max-width': '50%',
|
'max-width': '50%',
|
||||||
flex: 1,
|
|
||||||
'margin-right': '30px',
|
'margin-right': '30px',
|
||||||
|
flex: 1,
|
||||||
},
|
},
|
||||||
|
previousStyle: {
|
||||||
|
'max-width': '30%',
|
||||||
|
height: '500px',
|
||||||
|
},
|
||||||
|
displayPrevious: true,
|
||||||
}"
|
}"
|
||||||
:is-editable="editableMode"
|
:is-editable="editableMode"
|
||||||
:without-header="!editableMode"
|
:without-header="!editableMode"
|
||||||
|
@ -660,6 +664,7 @@ onMounted(() => {
|
||||||
auto-load
|
auto-load
|
||||||
footer
|
footer
|
||||||
data-cy="entry-buys"
|
data-cy="entry-buys"
|
||||||
|
overlay
|
||||||
>
|
>
|
||||||
<template #column-hex="{ row }">
|
<template #column-hex="{ row }">
|
||||||
<VnColor :colors="row?.hexJson" style="height: 100%; min-width: 2000px" />
|
<VnColor :colors="row?.hexJson" style="height: 100%; min-width: 2000px" />
|
||||||
|
|
|
@ -11,6 +11,8 @@ import VnTable from 'components/VnTable/VnTable.vue';
|
||||||
import SupplierDescriptorProxy from 'src/pages/Supplier/Card/SupplierDescriptorProxy.vue';
|
import SupplierDescriptorProxy from 'src/pages/Supplier/Card/SupplierDescriptorProxy.vue';
|
||||||
import VnSelectTravelExtended from 'src/components/common/VnSelectTravelExtended.vue';
|
import VnSelectTravelExtended from 'src/components/common/VnSelectTravelExtended.vue';
|
||||||
import { toDate } from 'src/filters';
|
import { toDate } from 'src/filters';
|
||||||
|
import { useSummaryDialog } from 'src/composables/useSummaryDialog';
|
||||||
|
import EntrySummary from './Card/EntrySummary.vue';
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const tableRef = ref();
|
const tableRef = ref();
|
||||||
|
@ -18,6 +20,7 @@ const defaultEntry = ref({});
|
||||||
const state = useState();
|
const state = useState();
|
||||||
const user = state.getUser();
|
const user = state.getUser();
|
||||||
const dataKey = 'EntryList';
|
const dataKey = 'EntryList';
|
||||||
|
const { viewSummary } = useSummaryDialog();
|
||||||
|
|
||||||
const entryQueryFilter = {
|
const entryQueryFilter = {
|
||||||
include: [
|
include: [
|
||||||
|
@ -222,6 +225,19 @@ const columns = computed(() => [
|
||||||
visible: false,
|
visible: false,
|
||||||
create: true,
|
create: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
align: 'right',
|
||||||
|
label: '',
|
||||||
|
name: 'tableActions',
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
title: t('components.smartCard.viewSummary'),
|
||||||
|
icon: 'preview',
|
||||||
|
isPrimary: true,
|
||||||
|
action: (row) => viewSummary(row.id, EntrySummary, 'xlg-width'),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
function getBadgeAttrs(row) {
|
function getBadgeAttrs(row) {
|
||||||
const date = row.landed;
|
const date = row.landed;
|
||||||
|
@ -267,16 +283,7 @@ onBeforeMount(async () => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<VnSection
|
<VnSection :data-key="dataKey" prefix="entry">
|
||||||
:data-key="dataKey"
|
|
||||||
prefix="entry"
|
|
||||||
url="Entries/filter"
|
|
||||||
:array-data-props="{
|
|
||||||
url: 'Entries/filter',
|
|
||||||
order: 'landed DESC',
|
|
||||||
userFilter: entryQueryFilter,
|
|
||||||
}"
|
|
||||||
>
|
|
||||||
<template #advanced-menu>
|
<template #advanced-menu>
|
||||||
<EntryFilter :data-key="dataKey" />
|
<EntryFilter :data-key="dataKey" />
|
||||||
</template>
|
</template>
|
||||||
|
@ -285,6 +292,7 @@ onBeforeMount(async () => {
|
||||||
v-if="defaultEntry.defaultSupplierFk"
|
v-if="defaultEntry.defaultSupplierFk"
|
||||||
ref="tableRef"
|
ref="tableRef"
|
||||||
:data-key="dataKey"
|
:data-key="dataKey"
|
||||||
|
search-url="EntryList"
|
||||||
url="Entries/filter"
|
url="Entries/filter"
|
||||||
:filter="entryQueryFilter"
|
:filter="entryQueryFilter"
|
||||||
order="landed DESC"
|
order="landed DESC"
|
||||||
|
|
|
@ -95,7 +95,7 @@ const columns = computed(() => [
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
'data-cy': 'table-actions',
|
dataCy: 'table-actions',
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,10 @@ import VnSection from 'src/components/common/VnSection.vue';
|
||||||
import VnInput from 'src/components/common/VnInput.vue';
|
import VnInput from 'src/components/common/VnInput.vue';
|
||||||
import VnSelect from 'src/components/common/VnSelect.vue';
|
import VnSelect from 'src/components/common/VnSelect.vue';
|
||||||
import FetchData from 'src/components/FetchData.vue';
|
import FetchData from 'src/components/FetchData.vue';
|
||||||
|
import { useSummaryDialog } from 'src/composables/useSummaryDialog';
|
||||||
|
import SupplierSummary from './Card/SupplierSummary.vue';
|
||||||
|
|
||||||
|
const { viewSummary } = useSummaryDialog();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const tableRef = ref();
|
const tableRef = ref();
|
||||||
const dataKey = 'SupplierList';
|
const dataKey = 'SupplierList';
|
||||||
|
@ -103,6 +106,19 @@ const columns = computed(() => [
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
align: 'right',
|
||||||
|
label: '',
|
||||||
|
name: 'tableActions',
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
title: t('components.smartCard.viewSummary'),
|
||||||
|
icon: 'preview',
|
||||||
|
isPrimary: true,
|
||||||
|
action: (row) => viewSummary(row.id, SupplierSummary, 'md-width'),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -214,6 +214,7 @@ const columns = computed(() => [
|
||||||
{
|
{
|
||||||
title: t('components.smartCard.viewSummary'),
|
title: t('components.smartCard.viewSummary'),
|
||||||
icon: 'preview',
|
icon: 'preview',
|
||||||
|
isPrimary: true,
|
||||||
action: (row, evt) => {
|
action: (row, evt) => {
|
||||||
if (evt && evt.ctrlKey) {
|
if (evt && evt.ctrlKey) {
|
||||||
const url = router.resolve({
|
const url = router.resolve({
|
||||||
|
|
|
@ -67,7 +67,7 @@ describe('Entry', () => {
|
||||||
|
|
||||||
it('Should notify when entry is lock by another user', () => {
|
it('Should notify when entry is lock by another user', () => {
|
||||||
const checkLockMessage = () => {
|
const checkLockMessage = () => {
|
||||||
cy.get('[data-cy="entry-lock-confirm"]').should('be.visible');
|
cy.get('[role="dialog"]').should('be.visible');
|
||||||
cy.get('[data-cy="VnConfirm_message"] > span').should(
|
cy.get('[data-cy="VnConfirm_message"] > span').should(
|
||||||
'contain.text',
|
'contain.text',
|
||||||
'This entry has been locked by buyerNick',
|
'This entry has been locked by buyerNick',
|
||||||
|
|
Loading…
Reference in New Issue