Compare commits
No commits in common. "7aa2ff1d3ace103b3a40893e631042f269e05158" and "2b088892184db9b18a5206c2a4065b60b7f26b49" have entirely different histories.
7aa2ff1d3a
...
2b08889218
9 changed files with 9 additions and 200 deletions
|
|
@ -1,27 +0,0 @@
|
||||||
import { apiClient } from '@/services/apiClient.js'
|
|
||||||
|
|
||||||
export const useZeroPrices = () => {
|
|
||||||
const getZeroPrices = async () => {
|
|
||||||
try {
|
|
||||||
return await apiClient.get('/merch/zeroprices')
|
|
||||||
} catch (error) {
|
|
||||||
console.log('Get zero prices error: ', error)
|
|
||||||
throw error
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const deleteZeroPrices = async (list) => {
|
|
||||||
try {
|
|
||||||
await apiClient.delete('/merch/zeroprices', list)
|
|
||||||
}
|
|
||||||
catch (error) {
|
|
||||||
console.log('Delete zero prices error: ', error)
|
|
||||||
throw error
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
getZeroPrices,
|
|
||||||
deleteZeroPrices,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -17,7 +17,6 @@ const mainMenu = computed(() => {
|
||||||
{ label: 'Collection', key: 'collection' },
|
{ label: 'Collection', key: 'collection' },
|
||||||
{ label: 'Charts', key: 'charts' },
|
{ label: 'Charts', key: 'charts' },
|
||||||
{ label: 'Parsers', key: 'parsers' },
|
{ label: 'Parsers', key: 'parsers' },
|
||||||
{ label: 'Zero prices', key: 'zeroprices' },
|
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import PersonalView from '@/views/PersonalView.vue'
|
||||||
import AddMerchView from '@/views/AddMerchView.vue'
|
import AddMerchView from '@/views/AddMerchView.vue'
|
||||||
import DetailsView from '@/views/DetailsView.vue'
|
import DetailsView from '@/views/DetailsView.vue'
|
||||||
import LabelsView from '@/views/LabelsView.vue'
|
import LabelsView from '@/views/LabelsView.vue'
|
||||||
import ZeroPricesView from '@/views/ZeroPricesView.vue'
|
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
history: createWebHistory(import.meta.env.BASE_URL),
|
history: createWebHistory(import.meta.env.BASE_URL),
|
||||||
|
|
@ -59,11 +58,6 @@ const router = createRouter({
|
||||||
name: 'labels',
|
name: 'labels',
|
||||||
component: LabelsView,
|
component: LabelsView,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: '/zeroprices',
|
|
||||||
name: 'zeroprices',
|
|
||||||
component: ZeroPricesView,
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -138,14 +138,12 @@ export const apiClient = {
|
||||||
return request(url, {
|
return request(url, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: isFormData ? data : JSON.stringify(data),
|
body: isFormData ? data : JSON.stringify(data),
|
||||||
|
// headers: isFormData ? {} : { 'Content-Type': 'application/json' }
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
put: (url, data) => request(url, {
|
put: (url, data) => request(url, {
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
body: JSON.stringify(data),
|
body: JSON.stringify(data),
|
||||||
}),
|
}),
|
||||||
delete: (url, data) => request(url, {
|
delete: (url) => request(url, { method: 'DELETE' }),
|
||||||
method: 'DELETE',
|
|
||||||
body: data ? JSON.stringify(data) : undefined,
|
|
||||||
}),
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -197,8 +197,3 @@ body,
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.padding-lr-30 {
|
|
||||||
padding-left: 30px;
|
|
||||||
padding-right: 30px;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed } from 'vue'
|
import { computed, ref, watch } from 'vue'
|
||||||
import router from '@/router/index.js'
|
import router from '@/router/index.js'
|
||||||
import { useLabelsStore } from '@/stores/labelsStore.js'
|
import { useLabelsStore } from '@/stores/labelsStore.js'
|
||||||
|
|
||||||
|
|
@ -21,13 +21,14 @@ const addMerch = () => {
|
||||||
router.push({ name: 'addMerch' })
|
router.push({ name: 'addMerch' })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const localSearch = computed({
|
const localSearch = computed({
|
||||||
get() {
|
get() {
|
||||||
return props.modelValue
|
return props.modelValue
|
||||||
},
|
},
|
||||||
set(value) {
|
set(value) {
|
||||||
emit('update:modelValue', value)
|
emit('update:modelValue', value)
|
||||||
},
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const selectedLabelUuids = computed({
|
const selectedLabelUuids = computed({
|
||||||
|
|
@ -36,7 +37,7 @@ const selectedLabelUuids = computed({
|
||||||
},
|
},
|
||||||
set(value) {
|
set(value) {
|
||||||
emit('update:labelUuids', value)
|
emit('update:labelUuids', value)
|
||||||
},
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const labelOptions = computed(() => {
|
const labelOptions = computed(() => {
|
||||||
|
|
@ -68,4 +69,6 @@ const labelOptions = computed(() => {
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped></style>
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
||||||
<script setup>
|
|
||||||
import { onMounted, ref } from 'vue'
|
|
||||||
import { useZeroPrices } from '@/api/zeroPrices.js'
|
|
||||||
import ZeroPriceCard from '@/views/ZeroPricesView/ZeroPriceCard.vue'
|
|
||||||
import ZeroPricesToolbar from '@/views/ZeroPricesView/ZeroPricesToolbar.vue'
|
|
||||||
|
|
||||||
const { getZeroPrices } = useZeroPrices()
|
|
||||||
|
|
||||||
const zeroPrices = ref([])
|
|
||||||
const toDelete = ref([])
|
|
||||||
|
|
||||||
const handleToggle = ({ id, merch_uuid, checked }) => {
|
|
||||||
if (checked) {
|
|
||||||
toDelete.value.push({ id, merch_uuid });
|
|
||||||
} else {
|
|
||||||
toDelete.value = toDelete.value.filter(item => item.id !== id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const fetchZeroPrices = async () => {
|
|
||||||
try {
|
|
||||||
const response = await getZeroPrices()
|
|
||||||
zeroPrices.value = response.data
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleDeleted = () => {
|
|
||||||
toDelete.value = []
|
|
||||||
fetchZeroPrices()
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
fetchZeroPrices()
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div v-if="zeroPrices.length === 0">
|
|
||||||
<n-h2 class="text-center">Zero prices</n-h2>
|
|
||||||
<n-h3 class="text-center">No data</n-h3>
|
|
||||||
</div>
|
|
||||||
<div v-else>
|
|
||||||
<div class="sticky-search-container">
|
|
||||||
<ZeroPricesToolbar :selected="toDelete" @deleted="handleDeleted" />
|
|
||||||
</div>
|
|
||||||
<div v-for="item in zeroPrices" :key="item.created_at">
|
|
||||||
<ZeroPriceCard :zero-price="item" @toggle="handleToggle" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped></style>
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
<script setup>
|
|
||||||
import { ref } from 'vue'
|
|
||||||
|
|
||||||
const props = defineProps({
|
|
||||||
zeroPrice: {
|
|
||||||
type: Object,
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
const isChecked = ref(false)
|
|
||||||
const emit = defineEmits(['toggle'])
|
|
||||||
const handleCheckboxChange = () => {
|
|
||||||
isChecked.value = !isChecked.value
|
|
||||||
emit('toggle', {
|
|
||||||
id: props.zeroPrice.id,
|
|
||||||
merch_uuid: props.zeroPrice.merch_uuid,
|
|
||||||
checked: isChecked.value,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="zeroPriceCard mt-10">
|
|
||||||
<n-grid responsive="screen" item-responsive cols="4" :x-gap="16" :y-gap="16" class="shift">
|
|
||||||
<n-gi>
|
|
||||||
<n-checkbox :checked="isChecked" @update:checked="handleCheckboxChange">
|
|
||||||
<strong>Delete</strong>
|
|
||||||
</n-checkbox>
|
|
||||||
</n-gi>
|
|
||||||
<n-gi><strong>Name:</strong> {{ props.zeroPrice.name }}</n-gi>
|
|
||||||
<n-gi><strong>Created:</strong> {{ props.zeroPrice.created_at }}</n-gi>
|
|
||||||
<n-gi><strong>Origin:</strong> {{ props.zeroPrice.origin }}</n-gi>
|
|
||||||
</n-grid>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.zeroPriceCard {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
padding: 8px 16px;
|
|
||||||
background: #f5f5f5;
|
|
||||||
border-radius: 8px;
|
|
||||||
font-family: Arial, sans-serif;
|
|
||||||
font-size: 14px;
|
|
||||||
gap: 12px;
|
|
||||||
border: 1px solid #e0e0e0;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
||||||
<script setup>
|
|
||||||
import { useMessage } from 'naive-ui'
|
|
||||||
import { useZeroPrices } from '@/api/zeroPrices.js'
|
|
||||||
const props = defineProps({
|
|
||||||
selected: {
|
|
||||||
type: Array,
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
const messages = useMessage()
|
|
||||||
const { deleteZeroPrices } = useZeroPrices()
|
|
||||||
const emit = defineEmits(['deleted'])
|
|
||||||
|
|
||||||
const handleDelete = async () => {
|
|
||||||
try {
|
|
||||||
await deleteZeroPrices(props.selected)
|
|
||||||
messages.success("Selected zero prices deleted")
|
|
||||||
emit('deleted')
|
|
||||||
} catch (error) {
|
|
||||||
console.log(error)
|
|
||||||
messages.error("Error deleting selected prices")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="toolbar button-container-evenly padding-lr-30">
|
|
||||||
<div v-if="props.selected.length === 0" class="toolbar-item">
|
|
||||||
<span>Select records to delete</span>
|
|
||||||
</div>
|
|
||||||
<div v-else class="toolbar-item">
|
|
||||||
{{ props.selected.length }} items selected
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="toolbar-item">
|
|
||||||
<n-button
|
|
||||||
type="error"
|
|
||||||
:disabled="props.selected.length === 0"
|
|
||||||
@click="handleDelete"
|
|
||||||
>
|
|
||||||
Delete Selected
|
|
||||||
</n-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped></style>
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue