stash
This commit is contained in:
parent
f88dd9580d
commit
dc57a90cf1
8 changed files with 67 additions and 101 deletions
|
@ -22,9 +22,14 @@ class IssueViewSet(viewsets.ModelViewSet):
|
||||||
queryset = IssueThread.objects.all()
|
queryset = IssueThread.objects.all()
|
||||||
|
|
||||||
|
|
||||||
class ShippingCodeViewSet(viewsets.ModelViewSet):
|
class CommentViewSet(viewsets.ModelViewSet):
|
||||||
serializer_class = ShippingCodeSerializer
|
serializer_class = CommentSerializer
|
||||||
queryset = ShippingCode.objects.all()
|
queryset = Comment.objects.all()
|
||||||
|
|
||||||
|
|
||||||
|
class ShippingVoucherViewSet(viewsets.ModelViewSet):
|
||||||
|
serializer_class = ShippingVoucherSerializer
|
||||||
|
queryset = ShippingVoucher.objects.all()
|
||||||
|
|
||||||
|
|
||||||
@api_view(['POST'])
|
@api_view(['POST'])
|
||||||
|
@ -118,6 +123,7 @@ def add_comment(request, pk):
|
||||||
|
|
||||||
router = routers.SimpleRouter()
|
router = routers.SimpleRouter()
|
||||||
router.register(r'tickets', IssueViewSet, basename='issues')
|
router.register(r'tickets', IssueViewSet, basename='issues')
|
||||||
|
#router.register(r'comments', CommentViewSet, basename='comments')
|
||||||
router.register(r'shipping_vouchers', ShippingVoucherViewSet, basename='shipping_vouchers')
|
router.register(r'shipping_vouchers', ShippingVoucherViewSet, basename='shipping_vouchers')
|
||||||
|
|
||||||
urlpatterns = ([
|
urlpatterns = ([
|
||||||
|
|
|
@ -83,6 +83,13 @@ export default {
|
||||||
} else {
|
} else {
|
||||||
this.collapsed = this.sections.map(() => true);
|
this.collapsed = this.sections.map(() => true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//this.$router.push({...this.$router.currentRoute, query: {...this.$router.currentRoute.query, layout}});
|
||||||
|
//this.collapsed = this.sections.map(() => true);
|
||||||
|
/*this.columns.map(e => ({
|
||||||
|
k: e,
|
||||||
|
v: this.$store.getters.getFilters[e]
|
||||||
|
})).filter(e => e.v).forEach(e => this.setFilter(e.k, e.v));*/
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
grouped_items() {
|
grouped_items() {
|
||||||
|
|
|
@ -45,43 +45,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<AuthenticatedImage v-if="item.item.file" cached
|
|
||||||
:src="`/media/2/256/${item.item.file}/`"
|
|
||||||
class="card-img-left img-fluid" style="max-height: 8em"
|
|
||||||
/>
|
|
||||||
<div class="card-body">
|
|
||||||
<h6 class="card-title">{{ item.item.description }}</h6>
|
|
||||||
<h6 class="card-subtitle text-secondary">uid: {{ item.item.uid }} box: {{ item.item.box }}</h6>
|
|
||||||
<div class="row mx-auto mt-2">
|
|
||||||
<div class="btn-group">
|
|
||||||
<button class="btn btn-outline-success"
|
|
||||||
@click.stop="confirm('return Item?') && markItemReturned(item.item)" title="returned">
|
|
||||||
<font-awesome-icon icon="check"/>
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-outline-secondary" @click.stop="openEditingModalWith(item.item)" title="edit">
|
|
||||||
<font-awesome-icon icon="edit"/>
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-outline-danger" @click.stop="confirm('delete Item?') && deleteItem(item.item)"
|
|
||||||
title="delete">
|
|
||||||
<font-awesome-icon icon="trash"/>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card-header">
|
|
||||||
{ item.subject }
|
|
||||||
</div>
|
|
||||||
<!--div class="card-footer" v-if="item.attachments.length">
|
|
||||||
<ul>
|
|
||||||
<li v-for="attachment in item.attachments" @click="openLightboxModalWith(attachment)">
|
|
||||||
<AuthenticatedImage :src="`/media/2/256/${attachment.hash}/`" :alt="attachment.name"
|
|
||||||
v-if="attachment.mime_type.startsWith('image/')" cached/>
|
|
||||||
<AuthenticatedDataLink :href="`/media/2/${attachment.hash}/`" :download="attachment.name"
|
|
||||||
v-else/>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div-->
|
|
||||||
</div>
|
|
||||||
<!--button class="show-replies">
|
<!--button class="show-replies">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-arrow-forward"
|
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-arrow-forward"
|
||||||
width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
|
width="44" height="44" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
<template>
|
||||||
|
<div class="toast" :class="color && ('border-' + color)" role="alert" ref="toast" data-autohide="false">
|
||||||
|
<div class="toast-header" :class="[color && ('bg-' + color), color && 'text-light']">
|
||||||
|
<strong class="mr-auto pr-3">{{ title }}</strong>
|
||||||
|
<small>{{ displayTime }}</small>
|
||||||
|
<button type="button" class="ml-2 mb-1 close" @click="close()">
|
||||||
|
<span aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<!--div class="toast-body" v-html="message">{{ message }}</div-->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import $ from 'jquery';
|
||||||
|
import 'bootstrap/js/dist/toast';
|
||||||
|
import {DateTime} from 'luxon';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'Toast',
|
||||||
|
props: ['title', 'message', 'color'],
|
||||||
|
data: () => ({
|
||||||
|
creationTime: DateTime.local(),
|
||||||
|
displayTime: 'just now',
|
||||||
|
timer: undefined
|
||||||
|
}),
|
||||||
|
mounted() {
|
||||||
|
const {toast} = this.$refs;
|
||||||
|
$(toast).toast('show');
|
||||||
|
this.timer = setInterval(this.updateDisplayTime, 1000);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
close() {
|
||||||
|
const {toast} = this.$refs;
|
||||||
|
$(toast).toast('hide');
|
||||||
|
window.setTimeout(() => {
|
||||||
|
this.$emit('close');
|
||||||
|
}, 500);
|
||||||
|
},
|
||||||
|
updateDisplayTime() {
|
||||||
|
this.displayTime = this.creationTime.toRelative();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
clearInterval(this.timer);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -1,7 +1,6 @@
|
||||||
import {createApp} from 'vue'
|
import {createApp} from 'vue'
|
||||||
import App from './App.vue';
|
import App from './App.vue';
|
||||||
import VueQrcode from '@chenfengyuan/vue-qrcode';
|
import VueQrcode from '@chenfengyuan/vue-qrcode';
|
||||||
import {sync} from 'vuex-router-sync';
|
|
||||||
import store from './store';
|
import store from './store';
|
||||||
import router from './router';
|
import router from './router';
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import store from '@/store';
|
||||||
import Items from './views/Items';
|
import Items from './views/Items';
|
||||||
import Boxes from './views/Boxes';
|
import Boxes from './views/Boxes';
|
||||||
import Files from './views/Files';
|
import Files from './views/Files';
|
||||||
|
import Error from './views/Error';
|
||||||
import HowTo from './views/HowTo';
|
import HowTo from './views/HowTo';
|
||||||
import Login from '@/views/Login.vue';
|
import Login from '@/views/Login.vue';
|
||||||
import Register from '@/views/Register.vue';
|
import Register from '@/views/Register.vue';
|
||||||
|
|
|
@ -88,64 +88,6 @@ export default (config) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** may only be called from worker */
|
/** may only be called from worker */
|
||||||
|
|
||||||
const clone = (obj) => {
|
|
||||||
if (isProxy(obj)) {
|
|
||||||
obj = toRaw(obj);
|
|
||||||
}
|
|
||||||
if (obj === null || typeof obj !== 'object') {
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
if (obj.__proto__ === ({}).__proto__) {
|
|
||||||
return Object.assign({}, obj);
|
|
||||||
}
|
|
||||||
if (obj.__proto__ === [].__proto__) {
|
|
||||||
return obj.slice();
|
|
||||||
}
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
const deepEqual = (a, b) => {
|
|
||||||
if (a === b) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (a === null || b === null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (a.__proto__ === ({}).__proto__ && b.__proto__ === ({}).__proto__) {
|
|
||||||
|
|
||||||
if (Object.keys(a).length !== Object.keys(b).length) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
for (let key in b) {
|
|
||||||
if (!(key in a)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (let key in a) {
|
|
||||||
if (!(key in b)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!deepEqual(a[key], b[key])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (a.__proto__ === [].__proto__ && b.__proto__ === [].__proto__) {
|
|
||||||
if (a.length !== b.length) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
for (let i = 0; i < a.length; i++) {
|
|
||||||
if (!deepEqual(a[i], b[i])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const worker_fun = function (self, ctx) {
|
const worker_fun = function (self, ctx) {
|
||||||
/* globals WebSocket, SharedWorker, onconnect, onmessage, postMessage, close, location */
|
/* globals WebSocket, SharedWorker, onconnect, onmessage, postMessage, close, location */
|
||||||
|
|
||||||
|
|
|
@ -215,8 +215,8 @@ const store = createStore({
|
||||||
user.permissions = null;
|
user.permissions = null;
|
||||||
state.user = user;
|
state.user = user;
|
||||||
},
|
},
|
||||||
setThumbnail(state, {url, data}) {
|
setTest(state, test) {
|
||||||
state.thumbnailCache[url] = data;
|
state.test = test;
|
||||||
},
|
},
|
||||||
setThumbnail(state, {url, data}) {
|
setThumbnail(state, {url, data}) {
|
||||||
state.thumbnailCache[url] = data;
|
state.thumbnailCache[url] = data;
|
||||||
|
|
Loading…
Reference in a new issue