Compare commits
2 Commits
a7225eb054
...
d656bb15ff
Author | SHA1 | Date | |
---|---|---|---|
d656bb15ff | |||
9fe860b526 |
@ -6,7 +6,7 @@ const pb = new PocketBase('http://127.0.0.1:8090')
|
|||||||
async function main () {
|
async function main () {
|
||||||
try {
|
try {
|
||||||
// Authenticate as an admin
|
// Authenticate as an admin
|
||||||
await pb.admins.authWithPassword('karkinge@gmail.com', 'PBk4rk1ng3*') // Replace with your admin credentials
|
await pb.admins.authWithPassword('karkinge@gmail.com', 'XXXXXXX') // Replace with your admin credentials
|
||||||
|
|
||||||
// Parse JSON file with categories
|
// Parse JSON file with categories
|
||||||
const data = require('../../gyoza/database_backups/20250320.json')
|
const data = require('../../gyoza/database_backups/20250320.json')
|
||||||
|
@ -6,7 +6,7 @@ const pb = new PocketBase('http://127.0.0.1:8090')
|
|||||||
async function main () {
|
async function main () {
|
||||||
try {
|
try {
|
||||||
// Authenticate as an admin
|
// Authenticate as an admin
|
||||||
await pb.admins.authWithPassword('karkinge@gmail.com', 'PBk4rk1ng3*') // Replace with your admin credentials
|
await pb.admins.authWithPassword('karkinge@gmail.com', 'XXXXXXX') // Replace with your admin credentials
|
||||||
|
|
||||||
// Parse JSON file with categories
|
// Parse JSON file with categories
|
||||||
const data = require('../../gyoza/database_backups/20250320.json')
|
const data = require('../../gyoza/database_backups/20250320.json')
|
||||||
|
@ -7,7 +7,7 @@ const pb = new PocketBase('http://127.0.0.1:8090')
|
|||||||
async function main () {
|
async function main () {
|
||||||
try {
|
try {
|
||||||
// Authenticate as an admin
|
// Authenticate as an admin
|
||||||
await pb.admins.authWithPassword('karkinge@gmail.com', 'PBk4rk1ng3*') // Replace with your admin credentials
|
await pb.admins.authWithPassword('karkinge@gmail.com', 'XXXXXXX') // Replace with your admin credentials
|
||||||
|
|
||||||
// Parse JSON file with categories
|
// Parse JSON file with categories
|
||||||
const filesPath = '../gyoza/storage/'
|
const filesPath = '../gyoza/storage/'
|
||||||
|
@ -6,7 +6,7 @@ const pb = new PocketBase('http://127.0.0.1:8090')
|
|||||||
async function main () {
|
async function main () {
|
||||||
try {
|
try {
|
||||||
// Authenticate as an admin
|
// Authenticate as an admin
|
||||||
await pb.admins.authWithPassword('karkinge@gmail.com', 'PBk4rk1ng3*') // Replace with your admin credentials
|
await pb.admins.authWithPassword('karkinge@gmail.com', 'XXXXXXX') // Replace with your admin credentials
|
||||||
|
|
||||||
// Parse JSON file with categories
|
// Parse JSON file with categories
|
||||||
const data = require('../../gyoza/database_backups/20250320.json')
|
const data = require('../../gyoza/database_backups/20250320.json')
|
||||||
|
@ -8,7 +8,7 @@ async function main () {
|
|||||||
try {
|
try {
|
||||||
// Authenticate as an admin
|
// Authenticate as an admin
|
||||||
// await pb.admins.authWithPassword('gyoza@hfsplay.fr', 'gyozagyoza') // Replace with your admin credentials
|
// await pb.admins.authWithPassword('gyoza@hfsplay.fr', 'gyozagyoza') // Replace with your admin credentials
|
||||||
await pb.collection('_superusers').authWithPassword('karkinge@gmail.com', 'k4rk1ng3*') // Replace with your admin credentials
|
await pb.collection('_superusers').authWithPassword('karkinge@gmail.com', 'XXXXXXX') // Replace with your admin credentials
|
||||||
console.log('connected !')
|
console.log('connected !')
|
||||||
let stock = await pb.collection('stock').getFullList({
|
let stock = await pb.collection('stock').getFullList({
|
||||||
sort: 'created'
|
sort: 'created'
|
||||||
|
@ -66,7 +66,15 @@
|
|||||||
<!-- PRINT STUFF-->
|
<!-- PRINT STUFF-->
|
||||||
<q-separator/>
|
<q-separator/>
|
||||||
<q-item-label header>Utilitaires</q-item-label>
|
<q-item-label header>Utilitaires</q-item-label>
|
||||||
|
<q-item :to="'/tasks'"
|
||||||
|
>
|
||||||
|
<q-item-section>Tâches</q-item-section>
|
||||||
|
<q-item-section side>
|
||||||
|
<q-icon name="task"></q-icon>
|
||||||
|
</q-item-section>
|
||||||
|
</q-item>
|
||||||
<q-item :to="'/print-settings'"
|
<q-item :to="'/print-settings'"
|
||||||
|
disable
|
||||||
>
|
>
|
||||||
<q-item-section>Impression</q-item-section>
|
<q-item-section>Impression</q-item-section>
|
||||||
<q-item-section side>
|
<q-item-section side>
|
||||||
|
@ -230,7 +230,7 @@
|
|||||||
<span>{{ getDate(selectedHistory.created) }}</span>
|
<span>{{ getDate(selectedHistory.created) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
<q-card-section>
|
<q-card-section v-if="selectedHistory.type === 'issue' && !selectedHistory.solved_at">
|
||||||
<q-btn outline color="secondary" label="Marquer comme terminé" @click="setTaskDone(selectedHistory)"></q-btn>
|
<q-btn outline color="secondary" label="Marquer comme terminé" @click="setTaskDone(selectedHistory)"></q-btn>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
<q-separator/>
|
<q-separator/>
|
||||||
@ -391,10 +391,16 @@ export default {
|
|||||||
collection: 'history',
|
collection: 'history',
|
||||||
itemId: history.id,
|
itemId: history.id,
|
||||||
data: {
|
data: {
|
||||||
...history,
|
id: history.id,
|
||||||
solved_at: new Date().toISOString(),
|
solved_at: new Date().toISOString(),
|
||||||
solved_by: this.username
|
solved_by: this.username
|
||||||
}
|
}
|
||||||
|
}).then(_ => {
|
||||||
|
this.$store.dispatch('core/loadAppData').then(_ => {
|
||||||
|
this.loadItem()
|
||||||
|
this.showHistory = false
|
||||||
|
this.selectedHistory = null
|
||||||
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
async uploadFile (file) {
|
async uploadFile (file) {
|
||||||
|
142
src/pages/TasksPage.vue
Normal file
142
src/pages/TasksPage.vue
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
<template>
|
||||||
|
<q-page padding>
|
||||||
|
<h4 class="q-mt-none">Tâches</h4>
|
||||||
|
|
||||||
|
<q-list bordered separator class="rounded-borders">
|
||||||
|
<q-item clickable
|
||||||
|
v-for="issue in issues"
|
||||||
|
:key="issue.id"
|
||||||
|
@click="showHistory = true;selectedHistory = issue"
|
||||||
|
>
|
||||||
|
<q-item-section top thumbnail class="q-ml-none" style="margin:-8px 0 -8px -16px">
|
||||||
|
<img
|
||||||
|
:src="getImageUrl(issue, issue.image_file, true)"
|
||||||
|
alt="photo"
|
||||||
|
v-if="issue.image_file"
|
||||||
|
/>
|
||||||
|
</q-item-section>
|
||||||
|
<q-item-section avatar>
|
||||||
|
<q-icon name="task"
|
||||||
|
:color="issue.solved_at ? 'green' : 'grey'"
|
||||||
|
/>
|
||||||
|
</q-item-section>
|
||||||
|
<q-item-section>
|
||||||
|
<q-item-label lines="3" v-html="issue.text.split('\n').join('</br>')"></q-item-label>
|
||||||
|
<q-item-label caption>
|
||||||
|
<span class="text-secondary">{{ issue.item.type }} / </span>
|
||||||
|
<span class="text-secondary q-mr-sm">{{ issue.item.name }}</span>
|
||||||
|
<span v-if="issue.item.ref">#{{ issue.item.ref }}</span>
|
||||||
|
</q-item-label>
|
||||||
|
<q-item-label caption>
|
||||||
|
<span class="text-capitalize">{{ issue.user }}</span>
|
||||||
|
<template v-if="issue.solved_at">
|
||||||
|
<q-icon name="arrow_right" size="sm"/>
|
||||||
|
fait par <span class="text-capitalize">{{ issue.solved_by }}</span> le {{ getDate(issue.solved_at) }}
|
||||||
|
</template>
|
||||||
|
</q-item-label>
|
||||||
|
</q-item-section>
|
||||||
|
<q-item-section side top>
|
||||||
|
<q-item-label caption>{{ getDate(issue.created) }}</q-item-label>
|
||||||
|
</q-item-section>
|
||||||
|
</q-item>
|
||||||
|
</q-list>
|
||||||
|
|
||||||
|
<q-dialog v-model="showHistory">
|
||||||
|
<q-card>
|
||||||
|
<img :src="getImageUrl(selectedHistory, selectedHistory.image_file)"
|
||||||
|
alt="photo"
|
||||||
|
v-if="selectedHistory.image_file"
|
||||||
|
/>
|
||||||
|
<q-card-section>
|
||||||
|
<div v-html="selectedHistory.text.split('\n').join('</br>')"></div>
|
||||||
|
<div class="text-caption text-grey">
|
||||||
|
<span class="text-secondary">{{ selectedHistory.item.type }} / </span>
|
||||||
|
<span class="text-secondary q-mr-sm">{{ selectedHistory.item.name }}</span>
|
||||||
|
<span v-if="selectedHistory.item.ref">#{{ selectedHistory.item.ref }}</span>
|
||||||
|
<q-separator class="q-my-md"/>
|
||||||
|
<span class="text-capitalize q-mr-sm">{{ selectedHistory.user }}</span>
|
||||||
|
<template v-if="selectedHistory.solved_at">
|
||||||
|
<q-icon name="arrow_right" size="sm"/>
|
||||||
|
fait par <span class="text-capitalize">{{ selectedHistory.solved_by }}</span> le {{ getDate(selectedHistory.solved_at) }}
|
||||||
|
</template>
|
||||||
|
<!-- <span>{{ getDate(selectedHistory.created) }}</span>-->
|
||||||
|
</div>
|
||||||
|
</q-card-section>
|
||||||
|
<q-card-section v-if="!selectedHistory.solved_at">
|
||||||
|
<q-btn outline color="secondary" label="Marquer comme terminé" @click="setTaskDone(selectedHistory)"></q-btn>
|
||||||
|
</q-card-section>
|
||||||
|
<q-separator/>
|
||||||
|
<q-card-actions align="right">
|
||||||
|
<q-btn flat color="red" @click.stop="removeHistory(selectedHistory)">Supprimer</q-btn>
|
||||||
|
<q-btn flat color="grey" @click.stop="showHistory = false;selectedHistory = null">Fermer</q-btn>
|
||||||
|
</q-card-actions>
|
||||||
|
</q-card>
|
||||||
|
</q-dialog>
|
||||||
|
|
||||||
|
<!-- <pre>{{ issues }}</pre>-->
|
||||||
|
</q-page>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { date, debounce } from 'quasar'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'TasksPage',
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
showHistory: false,
|
||||||
|
selectedHistory: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created () {
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
rawIssues () {
|
||||||
|
return this.$store.state.core.firebase.history.filter(item => {
|
||||||
|
return item.type === 'issue'
|
||||||
|
}) || []
|
||||||
|
},
|
||||||
|
items () {
|
||||||
|
return this.$store.state.core.firebase.stock.filter(item => {
|
||||||
|
let refs = Array.from(new Set(this.rawIssues.map(issue => issue.ref)))
|
||||||
|
return refs.includes(item.ref)
|
||||||
|
}) || []
|
||||||
|
},
|
||||||
|
issues () {
|
||||||
|
return this.rawIssues.map(issue => {
|
||||||
|
let item = this.items.find(item => item.ref === issue.ref) || {}
|
||||||
|
return {
|
||||||
|
...issue,
|
||||||
|
item
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getDate (timestamp) {
|
||||||
|
return date.formatDate(timestamp, 'DD/MM/YY - HH:mm')
|
||||||
|
},
|
||||||
|
setTaskDone (history) {
|
||||||
|
this.$store.dispatch('core/updateItem', {
|
||||||
|
collection: 'history',
|
||||||
|
itemId: history.id,
|
||||||
|
data: {
|
||||||
|
id: history.id,
|
||||||
|
solved_at: new Date().toISOString(),
|
||||||
|
solved_by: this.$store.state.core.username
|
||||||
|
}
|
||||||
|
}).then(_ => {
|
||||||
|
this.$q.notify('Terminé !')
|
||||||
|
this.$store.dispatch('core/loadAppData').then(_ => {
|
||||||
|
this.showHistory = false
|
||||||
|
this.selectedHistory = null
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
@ -14,6 +14,7 @@ const routes = [
|
|||||||
{ path: 'category/:categoryCode', props: true, component: () => import('pages/StockItems.vue') },
|
{ path: 'category/:categoryCode', props: true, component: () => import('pages/StockItems.vue') },
|
||||||
{ path: 'item/:itemRef', props: true, component: () => import('pages/StockItem.vue') },
|
{ path: 'item/:itemRef', props: true, component: () => import('pages/StockItem.vue') },
|
||||||
{ path: 'print-settings', props: true, component: () => import('pages/PrintSettings.vue') },
|
{ path: 'print-settings', props: true, component: () => import('pages/PrintSettings.vue') },
|
||||||
|
{ path: 'tasks', props: true, component: () => import('pages/TasksPage.vue') },
|
||||||
{ path: ':shortId', props: true, component: () => import('pages/StockItem.vue') }
|
{ path: ':shortId', props: true, component: () => import('pages/StockItem.vue') }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user