Compare commits
No commits in common. "7f33a44d94b792cfb88dd500f11e74eab95dc705" and "f5c6bcff6f482a3fc919ab7cb359e5098b0a4496" have entirely different histories.
7f33a44d94
...
f5c6bcff6f
|
@ -23,13 +23,11 @@ declare namespace FG {
|
||||||
interface DrinkPrice {
|
interface DrinkPrice {
|
||||||
id: number;
|
id: number;
|
||||||
price: number;
|
price: number;
|
||||||
volume: Array<DrinkPriceVolume>;
|
|
||||||
public: boolean;
|
public: boolean;
|
||||||
description?: string;
|
description?: string;
|
||||||
}
|
}
|
||||||
interface DrinkPriceVolume {
|
interface DrinkPriceVolume {
|
||||||
id: number;
|
id: number;
|
||||||
drink: Array<Drink>;
|
|
||||||
volume: number;
|
volume: number;
|
||||||
min_prices: Array<MinPrices>;
|
min_prices: Array<MinPrices>;
|
||||||
prices: Array<DrinkPrice>;
|
prices: Array<DrinkPrice>;
|
||||||
|
|
|
@ -169,7 +169,7 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import DrinkPriceVolumes from '../components/CalculationTable/DrinkPriceVolumes.vue';
|
import DrinkPriceVolumes from '../components/CalculationTable/DrinkPriceVolumes.vue';
|
||||||
import { defineComponent, onBeforeMount, ComputedRef, computed, ref } from 'vue';
|
import { defineComponent, onMounted, ComputedRef, computed, ref } from 'vue';
|
||||||
import { Drink, usePricelistStore, DrinkPriceVolume } from '../store';
|
import { Drink, usePricelistStore, DrinkPriceVolume } from '../store';
|
||||||
import MinPriceSetting from '../components/MinPriceSetting.vue';
|
import MinPriceSetting from '../components/MinPriceSetting.vue';
|
||||||
import { api, hasPermission } from '@flaschengeist/api';
|
import { api, hasPermission } from '@flaschengeist/api';
|
||||||
|
@ -206,7 +206,7 @@ export default defineComponent({
|
||||||
setup(props) {
|
setup(props) {
|
||||||
const store = usePricelistStore();
|
const store = usePricelistStore();
|
||||||
|
|
||||||
onBeforeMount(() => {
|
onMounted(() => {
|
||||||
//void store.getDrinks();
|
//void store.getDrinks();
|
||||||
onRequest({
|
onRequest({
|
||||||
pagination: pagination.value,
|
pagination: pagination.value,
|
||||||
|
@ -404,17 +404,16 @@ export default defineComponent({
|
||||||
offset: startRow,
|
offset: startRow,
|
||||||
limit: fetchCount,
|
limit: fetchCount,
|
||||||
descending,
|
descending,
|
||||||
search_name: props.filter?.value,
|
search_name: props.filter.value,
|
||||||
search_key: props.filter?.key,
|
search_key: props.filter.key,
|
||||||
});
|
});
|
||||||
pagination.value.page = page;
|
pagination.value.page = page;
|
||||||
pagination.value.rowsPerPage = rowsPerPage;
|
pagination.value.rowsPerPage = rowsPerPage;
|
||||||
pagination.value.sortBy = sortBy;
|
pagination.value.sortBy = sortBy;
|
||||||
pagination.value.descending = descending;
|
pagination.value.descending = descending;
|
||||||
console.log('result', result.count);
|
|
||||||
if (result.count) pagination.value.rowsNumber = result.count;
|
if (result.count) pagination.value.rowsNumber = result.count;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn(error);
|
//..
|
||||||
}
|
}
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="q-pa-sm">
|
<div class="q-pa-sm">
|
||||||
<div v-for="(price, index) in volume.prices" :key="price.id">
|
<div v-for="(price, index) in volume.prices" :key="price.id">
|
||||||
<div v-if="isPublic(price, volume)" class="fit row justify-around q-py-sm">
|
<div class="fit row justify-around q-py-sm">
|
||||||
<div
|
<div
|
||||||
v-if="!editable || !hasPermission(PERMISSIONS.EDIT_PRICE)"
|
v-if="!editable || !hasPermission(PERMISSIONS.EDIT_PRICE)"
|
||||||
class="text-body1 col-3"
|
class="text-body1 col-3"
|
||||||
|
@ -294,15 +294,6 @@ export default defineComponent({
|
||||||
emit('update:modelValue', volumes.value);
|
emit('update:modelValue', volumes.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
function isPublic(price: FG.DrinkPrice, drink) {
|
|
||||||
console.log('drink', drink);
|
|
||||||
if (props.public) {
|
|
||||||
console.log(price);
|
|
||||||
return price.public;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
const isUnderMinPrice = computed(() => {
|
const isUnderMinPrice = computed(() => {
|
||||||
if (volumes.value) {
|
if (volumes.value) {
|
||||||
const this_volume = volumes.value.find((a) => a.id === volume.value);
|
const this_volume = volumes.value.find((a) => a.id === volume.value);
|
||||||
|
@ -337,7 +328,6 @@ export default defineComponent({
|
||||||
isUnderMinPrice,
|
isUnderMinPrice,
|
||||||
hasPermission,
|
hasPermission,
|
||||||
PERMISSIONS,
|
PERMISSIONS,
|
||||||
isPublic,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,13 +5,11 @@
|
||||||
:rows="drinks"
|
:rows="drinks"
|
||||||
:visible-columns="visibleColumns"
|
:visible-columns="visibleColumns"
|
||||||
:filter="search"
|
:filter="search"
|
||||||
|
:filter-method="filter"
|
||||||
dense
|
dense
|
||||||
v-model:pagination="pagination"
|
:pagination="pagination"
|
||||||
:fullscreen="fullscreen"
|
:fullscreen="fullscreen"
|
||||||
@request="onRequest"
|
|
||||||
>
|
>
|
||||||
<!--
|
|
||||||
:filter-method="filter"-->
|
|
||||||
<template #top-right>
|
<template #top-right>
|
||||||
<div class="row justify-end q-gutter-sm">
|
<div class="row justify-end q-gutter-sm">
|
||||||
<search-input v-model="search" :keys="options" />
|
<search-input v-model="search" :keys="options" />
|
||||||
|
@ -111,11 +109,11 @@ export default defineComponent({
|
||||||
if (!props.public) {
|
if (!props.public) {
|
||||||
user.value = useMainStore().currentUser.userid;
|
user.value = useMainStore().currentUser.userid;
|
||||||
void store.getPriceListColumnOrder(user.value);
|
void store.getPriceListColumnOrder(user.value);
|
||||||
|
void store.getDrinks();
|
||||||
void store.getPriceCalcColumn(user.value);
|
void store.getPriceCalcColumn(user.value);
|
||||||
} else {
|
} else {
|
||||||
user.value = '';
|
user.value = '';
|
||||||
}
|
}
|
||||||
onRequest({ pagination: pagination.value, filter: { limit: 10 } });
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const _order = ref<Array<Order>>([
|
const _order = ref<Array<Order>>([
|
||||||
|
@ -172,9 +170,7 @@ export default defineComponent({
|
||||||
{
|
{
|
||||||
name: 'name',
|
name: 'name',
|
||||||
label: 'Name',
|
label: 'Name',
|
||||||
//field: 'name',
|
field: 'name',
|
||||||
field: 'volume',
|
|
||||||
format: (val: FG.DrinkPriceVolume) => val.drink.name,
|
|
||||||
sortable: true,
|
sortable: true,
|
||||||
filterable: true,
|
filterable: true,
|
||||||
align: 'left',
|
align: 'left',
|
||||||
|
@ -182,22 +178,20 @@ export default defineComponent({
|
||||||
{
|
{
|
||||||
name: 'type',
|
name: 'type',
|
||||||
label: 'Kategorie',
|
label: 'Kategorie',
|
||||||
//field: 'type',
|
field: 'type',
|
||||||
field: 'volume',
|
|
||||||
sortable: true,
|
sortable: true,
|
||||||
filterable: true,
|
filterable: true,
|
||||||
format: (val: FG.DrinkPriceVolume) => val.drink.type.name,
|
format: (val: FG.DrinkType) => val.name,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'tags',
|
name: 'tags',
|
||||||
label: 'Tags',
|
label: 'Tags',
|
||||||
//field: 'tags',
|
field: 'tags',
|
||||||
field: 'volume',
|
|
||||||
filterable: true,
|
filterable: true,
|
||||||
|
|
||||||
format: (val: FG.DrinkPriceVolume) => {
|
format: (val: Array<FG.Tag>) => {
|
||||||
let retVal = '';
|
let retVal = '';
|
||||||
val.drink.tags.forEach((tag, index) => {
|
val.forEach((tag, index) => {
|
||||||
if (index >= val.length - 1 && index > 0) {
|
if (index >= val.length - 1 && index > 0) {
|
||||||
retVal += ', ';
|
retVal += ', ';
|
||||||
}
|
}
|
||||||
|
@ -209,11 +203,10 @@ export default defineComponent({
|
||||||
{
|
{
|
||||||
name: 'volume',
|
name: 'volume',
|
||||||
label: 'Inhalt',
|
label: 'Inhalt',
|
||||||
//field: 'volume',
|
|
||||||
field: 'volume',
|
field: 'volume',
|
||||||
filterable: true,
|
filterable: true,
|
||||||
sortable: true,
|
sortable: true,
|
||||||
format: (val: FG.DrinkPriceVolume) => `${val.volume.toFixed(3)}L`,
|
format: (val: number) => `${val.toFixed(3)}L`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'price',
|
name: 'price',
|
||||||
|
@ -304,48 +297,9 @@ export default defineComponent({
|
||||||
label: '',
|
label: '',
|
||||||
});
|
});
|
||||||
|
|
||||||
interface PaginationInterface {
|
|
||||||
sortBy: string;
|
|
||||||
descending: boolean;
|
|
||||||
page: number;
|
|
||||||
rowsPerPage: number;
|
|
||||||
rowsNumber: number;
|
|
||||||
}
|
|
||||||
async function onRequest(props: { pagination: PaginationInterface; filter?: Search }) {
|
|
||||||
const { page, rowsPerPage, sortBy, descending } = props.pagination;
|
|
||||||
loading.value = true;
|
|
||||||
//console.log('search_keys', search_keys);
|
|
||||||
const fetchCount = rowsPerPage === 0 ? pagination.value.rowsNumber : rowsPerPage;
|
|
||||||
const startRow = (page - 1) * rowsPerPage;
|
|
||||||
console.log('descending', descending);
|
|
||||||
try {
|
|
||||||
const result = await store.getPricelist({
|
|
||||||
offset: startRow,
|
|
||||||
limit: fetchCount,
|
|
||||||
descending: descending ? true : undefined,
|
|
||||||
search_name: props.filter?.value,
|
|
||||||
search_key: props.filter?.key,
|
|
||||||
sortBy: sortBy,
|
|
||||||
});
|
|
||||||
pagination.value.page = page;
|
|
||||||
pagination.value.rowsPerPage = rowsPerPage;
|
|
||||||
pagination.value.sortBy = sortBy;
|
|
||||||
pagination.value.descending = descending;
|
|
||||||
console.log('result', result);
|
|
||||||
if (result) pagination.value.rowsNumber = result;
|
|
||||||
} catch (error) {
|
|
||||||
console.warn(error);
|
|
||||||
}
|
|
||||||
loading.value = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const loading = ref(false);
|
|
||||||
const pagination = ref({
|
const pagination = ref({
|
||||||
sortBy: 'name',
|
sortBy: 'name',
|
||||||
rowsPerPage: 10,
|
rowsPerPage: 10,
|
||||||
rowsNumber: 10,
|
|
||||||
descending: false,
|
|
||||||
page: 1,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const fullscreen = ref(false);
|
const fullscreen = ref(false);
|
||||||
|
@ -360,8 +314,6 @@ export default defineComponent({
|
||||||
filter,
|
filter,
|
||||||
pagination,
|
pagination,
|
||||||
fullscreen,
|
fullscreen,
|
||||||
loading,
|
|
||||||
onRequest,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
51
src/store.ts
51
src/store.ts
|
@ -76,7 +76,6 @@ export const usePricelistStore = defineStore({
|
||||||
state: () => ({
|
state: () => ({
|
||||||
drinkTypes: [] as Array<FG.DrinkType>,
|
drinkTypes: [] as Array<FG.DrinkType>,
|
||||||
drinks: [] as Array<Drink>,
|
drinks: [] as Array<Drink>,
|
||||||
pricelist: [] as Array<FG.DrinkPrice>,
|
|
||||||
extraIngredients: [] as Array<FG.ExtraIngredient>,
|
extraIngredients: [] as Array<FG.ExtraIngredient>,
|
||||||
min_prices: [] as Array<number>,
|
min_prices: [] as Array<number>,
|
||||||
tags: [] as Array<FG.Tag>,
|
tags: [] as Array<FG.Tag>,
|
||||||
|
@ -181,12 +180,9 @@ export const usePricelistStore = defineStore({
|
||||||
}) {
|
}) {
|
||||||
if (!filter) filter = { limit: 10 };
|
if (!filter) filter = { limit: 10 };
|
||||||
console.log('filter_api', filter);
|
console.log('filter_api', filter);
|
||||||
const { data } = await api.get<{ drinks: Array<FG.Drink>; count: number }>(
|
const { data } = await api.get<Array<FG.Drink>>('pricelist/drinks', {
|
||||||
'pricelist/drinks',
|
params: filter,
|
||||||
{
|
});
|
||||||
params: filter,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
const drinks = [];
|
const drinks = [];
|
||||||
data.drinks.forEach((drink) => {
|
data.drinks.forEach((drink) => {
|
||||||
const _drink = new Drink(drink);
|
const _drink = new Drink(drink);
|
||||||
|
@ -199,25 +195,12 @@ export const usePricelistStore = defineStore({
|
||||||
calc_all_min_prices(drinks, this.min_prices);
|
calc_all_min_prices(drinks, this.min_prices);
|
||||||
return drinks;
|
return drinks;
|
||||||
},
|
},
|
||||||
async getPricelist(filter: {
|
sortPrices(volume: DrinkPriceVolume) {
|
||||||
limit?: number;
|
volume.prices.sort((a, b) => {
|
||||||
offset?: number;
|
if (a.price > b.price) return 1;
|
||||||
descending?: boolean;
|
if (b.price > a.price) return -1;
|
||||||
search_name?: string;
|
return 0;
|
||||||
search_key?: string;
|
});
|
||||||
sortBy?: string;
|
|
||||||
}) {
|
|
||||||
const { data } = await api.get<{ pricelist: Array<FG.DrinkPrice>; count: number }>(
|
|
||||||
'pricelist/list',
|
|
||||||
{
|
|
||||||
params: filter,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
this.pricelist = [];
|
|
||||||
console.log(data);
|
|
||||||
this.pricelist = data.pricelist;
|
|
||||||
console.log(this.pricelist);
|
|
||||||
return data.count;
|
|
||||||
},
|
},
|
||||||
async deletePrice(price: FG.DrinkPrice) {
|
async deletePrice(price: FG.DrinkPrice) {
|
||||||
await api.delete(`pricelist/prices/${price.id}`);
|
await api.delete(`pricelist/prices/${price.id}`);
|
||||||
|
@ -361,7 +344,7 @@ export const usePricelistStore = defineStore({
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
getters: {
|
getters: {
|
||||||
/*pricelist() {
|
pricelist() {
|
||||||
const retVal: Array<Pricelist> = [];
|
const retVal: Array<Pricelist> = [];
|
||||||
this.drinks.forEach((drink) => {
|
this.drinks.forEach((drink) => {
|
||||||
drink.volumes.forEach((volume) => {
|
drink.volumes.forEach((volume) => {
|
||||||
|
@ -379,20 +362,6 @@ export const usePricelistStore = defineStore({
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return retVal;
|
return retVal;
|
||||||
},*/
|
|
||||||
computed_pricelist() {
|
|
||||||
const retVal: Array<Pricelist> = [];
|
|
||||||
this.pricelist.forEach((price) => {
|
|
||||||
retVal.push({
|
|
||||||
name: price.volume.drink.name,
|
|
||||||
type: <FG.DrinkType>price.volume.drink.type,
|
|
||||||
tags: <Array<FG.Tag>>price.volume.drink.tags,
|
|
||||||
volume: <number>price.volume.volume,
|
|
||||||
public: price.public,
|
|
||||||
price: price.price,
|
|
||||||
description: <string>price.description,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue