shift-build-2464
Nadim Salloum 2021-06-15 22:58:13 +03:00
parent fd74b2d8cb
commit 879eb46832
97 changed files with 5092 additions and 2741 deletions

19
.eslintrc.json Normal file
View File

@ -0,0 +1,19 @@
{
"env": {
"browser": true,
"es2021": true
},
"extends": [
"plugin:vue/essential",
"airbnb-base"
],
"parserOptions": {
"ecmaVersion": 12,
"sourceType": "module"
},
"plugins": [
"vue"
],
"rules": {
}
}

2331
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,8 @@
"watch-poll": "mix watch -- --watch-options-poll=1000", "watch-poll": "mix watch -- --watch-options-poll=1000",
"hot": "mix watch --hot", "hot": "mix watch --hot",
"prod": "npm run production", "prod": "npm run production",
"production": "mix --production" "production": "mix --production",
"eslint": "./node_modules/.bin/eslint resources/js/ --ext .js,.vue --fix"
}, },
"devDependencies": { "devDependencies": {
"@inertiajs/inertia": "^0.8.4", "@inertiajs/inertia": "^0.8.4",
@ -17,13 +18,13 @@
"@tailwindcss/typography": "^0.3.0", "@tailwindcss/typography": "^0.3.0",
"@types/lodash": "^4.14.168", "@types/lodash": "^4.14.168",
"@vue/compiler-sfc": "^3.0.5", "@vue/compiler-sfc": "^3.0.5",
"axios": "^0.21", "eslint": "^7.28.0",
"eslint-plugin-vue": "^7.11.1",
"laravel-mix": "^6.0.6", "laravel-mix": "^6.0.6",
"lodash": "^4.17.21",
"postcss": "^8.1.14", "postcss": "^8.1.14",
"postcss-import": "^12.0.1", "postcss-import": "^12.0.1",
"tailwindcss": "^2.0.1", "tailwindcss": "^2.0.1",
"vue": "^3.0.5",
"vue-loader": "^16.1.2" "vue-loader": "^16.1.2"
}, },
"dependencies": { "dependencies": {
@ -31,6 +32,9 @@
"vue-multiselect": "^3.0.0-alpha.2", "vue-multiselect": "^3.0.0-alpha.2",
"vue-unicons": "^3.2.1", "vue-unicons": "^3.2.1",
"vue3-datepicker": "^0.2.4", "vue3-datepicker": "^0.2.4",
"vuex": "^4.0.0" "vuex": "^4.0.0",
"axios": "^0.21",
"lodash": "^4.17.21",
"vue": "^3.0.5"
} }
} }

169
public/js/app.js vendored
View File

@ -17913,9 +17913,9 @@ __webpack_require__.r(__webpack_exports__);
}, },
computed: { computed: {
allClasses: function allClasses() { allClasses: function allClasses() {
var classes = "justify-center inline-flex items-center px-4 py-2 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest focus:outline-none focus:ring disabled:opacity-25 transition"; var classes = 'justify-center inline-flex items-center px-4 py-2 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest focus:outline-none focus:ring disabled:opacity-25 transition';
classes += " bg-".concat(this.colour, "-800 hover:bg-").concat(this.colour, "-700 active:bg-").concat(this.colour, "-900 focus:border-").concat(this.colour, "-900 focus:ring-").concat(this.colour, "-300"); classes += " bg-".concat(this.colour, "-800 hover:bg-").concat(this.colour, "-700 active:bg-").concat(this.colour, "-900 focus:border-").concat(this.colour, "-900 focus:ring-").concat(this.colour, "-300");
return classes + " " + this["class"]; return "".concat(classes, " ").concat(this["class"]);
} }
} }
}); });
@ -17966,9 +17966,9 @@ __webpack_require__.r(__webpack_exports__);
}, },
computed: { computed: {
allClasses: function allClasses() { allClasses: function allClasses() {
var classes = "justify-center inline-flex items-center px-4 py-2 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest focus:outline-none focus:ring disabled:opacity-25 transition"; var classes = 'justify-center inline-flex items-center px-4 py-2 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest focus:outline-none focus:ring disabled:opacity-25 transition';
classes += " bg-".concat(this.colour, "-800 hover:bg-").concat(this.colour, "-700 active:bg-").concat(this.colour, "-900 focus:border-").concat(this.colour, "-900 focus:ring-").concat(this.colour, "-300"); classes += " bg-".concat(this.colour, "-800 hover:bg-").concat(this.colour, "-700 active:bg-").concat(this.colour, "-900 focus:border-").concat(this.colour, "-900 focus:ring-").concat(this.colour, "-300");
return classes + " " + this["class"]; return "".concat(classes, " ").concat(this["class"]);
} }
} }
}); });
@ -17998,7 +17998,7 @@ __webpack_require__.r(__webpack_exports__);
data: function data() { data: function data() {
return { return {
meta: { meta: {
'contact': 'Verkäufer' contact: 'Verkäufer'
} }
}; };
} }
@ -18077,7 +18077,7 @@ __webpack_require__.r(__webpack_exports__);
}, },
computed: { computed: {
contractClasses: function contractClasses() { contractClasses: function contractClasses() {
return "col-span-12 h-full relative sm:col-span-" + (this.contract.car ? '4' : '6'); return "col-span-12 h-full relative sm:col-span-".concat(this.contract.car ? '4' : '6');
} }
}, },
data: function data() { data: function data() {
@ -18191,9 +18191,9 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ }); /* harmony export */ });
var STATUS_INITIAL = 0, var STATUS_INITIAL = 0;
STATUS_SAVING = 1, var STATUS_SAVING = 1;
STATUS_FAILED = 2; var STATUS_FAILED = 2;
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
props: { props: {
id: Number, id: Number,
@ -18547,7 +18547,7 @@ __webpack_require__.r(__webpack_exports__);
data: function data() { data: function data() {
return { return {
meta: { meta: {
'contact': 'Käufer' contact: 'Käufer'
} }
}; };
} }
@ -18670,8 +18670,8 @@ __webpack_require__.r(__webpack_exports__);
this.sort.by = col; this.sort.by = col;
this.$inertia.get(this.data.path, { this.$inertia.get(this.data.path, {
'sortby': this.sort.by, sortby: this.sort.by,
'direction': this.sort.direction direction: this.sort.direction
}, { }, {
preserveState: true preserveState: true
}); });
@ -18817,7 +18817,7 @@ __webpack_require__.r(__webpack_exports__);
return this.checked; return this.checked;
}, },
set: function set(val) { set: function set(val) {
this.$emit("update:checked", val); this.$emit('update:checked', val);
} }
} }
} }
@ -19068,17 +19068,19 @@ __webpack_require__.r(__webpack_exports__);
computed: { computed: {
widthClass: function widthClass() { widthClass: function widthClass() {
return { return {
'48': 'w-48' 48: 'w-48'
}[this.width.toString()]; }[this.width.toString()];
}, },
alignmentClasses: function alignmentClasses() { alignmentClasses: function alignmentClasses() {
if (this.align === 'left') { if (this.align === 'left') {
return 'origin-top-left left-0'; return 'origin-top-left left-0';
} else if (this.align === 'right') {
return 'origin-top-right right-0';
} else {
return 'origin-top';
} }
if (this.align === 'right') {
return 'origin-top-right right-0';
}
return 'origin-top';
} }
} }
}); });
@ -19131,7 +19133,7 @@ __webpack_require__.r(__webpack_exports__);
return !!this.$slots.actions; return !!this.$slots.actions;
}, },
classnames: function classnames() { classnames: function classnames() {
var classnames = !this.emptyBg ? 'px-4 py-5 bg-white sm:p-6 shadow ' : ""; var classnames = !this.emptyBg ? 'px-4 py-5 bg-white sm:p-6 shadow ' : '';
classnames += this.hasActions ? 'sm:rounded-tl-md sm:rounded-tr-md' : 'sm:rounded-md'; classnames += this.hasActions ? 'sm:rounded-tl-md sm:rounded-tr-md' : 'sm:rounded-md';
return classnames; return classnames;
} }
@ -19263,10 +19265,10 @@ __webpack_require__.r(__webpack_exports__);
computed: { computed: {
maxWidthClass: function maxWidthClass() { maxWidthClass: function maxWidthClass() {
return { return {
'sm': 'sm:max-w-sm', sm: 'sm:max-w-sm',
'md': 'sm:max-w-md', md: 'sm:max-w-md',
'lg': 'sm:max-w-lg', lg: 'sm:max-w-lg',
'xl': 'sm:max-w-xl', xl: 'sm:max-w-xl',
'2xl': 'sm:max-w-2xl' '2xl': 'sm:max-w-2xl'
}[this.maxWidth]; }[this.maxWidth];
} }
@ -19405,7 +19407,7 @@ __webpack_require__.r(__webpack_exports__);
methods: { methods: {
switchToTeam: function switchToTeam(team) { switchToTeam: function switchToTeam(team) {
this.$inertia.put(route('current-team.update'), { this.$inertia.put(route('current-team.update'), {
'team_id': team.id team_id: team.id
}, { }, {
preserveState: false preserveState: false
}); });
@ -19581,15 +19583,15 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ }); /* harmony export */ });
/* harmony import */ var _ApiTokenManager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ApiTokenManager */ "./resources/js/Pages/API/ApiTokenManager.vue"); /* harmony import */ var _Layouts_AppLayout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/AppLayout */ "./resources/js/Layouts/AppLayout.vue");
/* harmony import */ var _Layouts_AppLayout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Layouts/AppLayout */ "./resources/js/Layouts/AppLayout.vue"); /* harmony import */ var _ApiTokenManager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ApiTokenManager */ "./resources/js/Pages/API/ApiTokenManager.vue");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
props: ['tokens', 'availablePermissions', 'defaultPermissions'], props: ['tokens', 'availablePermissions', 'defaultPermissions'],
components: { components: {
ApiTokenManager: _ApiTokenManager__WEBPACK_IMPORTED_MODULE_0__.default, ApiTokenManager: _ApiTokenManager__WEBPACK_IMPORTED_MODULE_1__.default,
AppLayout: _Layouts_AppLayout__WEBPACK_IMPORTED_MODULE_1__.default AppLayout: _Layouts_AppLayout__WEBPACK_IMPORTED_MODULE_0__.default
} }
}); });
@ -20211,8 +20213,8 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ }); /* harmony export */ });
/* harmony import */ var _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/Layout */ "./resources/js/Layouts/Layout.vue"); /* harmony import */ var _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/Layout */ "./resources/js/Layouts/Layout.vue");
/* harmony import */ var _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Components/BreadCrumb.vue */ "./resources/js/Components/BreadCrumb.vue"); /* harmony import */ var _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Components/BreadCrumb.vue */ "./resources/js/Components/BreadCrumb.vue");
/* harmony import */ var _Components_CarForm_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Components/CarForm.vue */ "./resources/js/Pages/Cars/Components/CarForm.vue"); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); /* harmony import */ var _Components_CarForm_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Components/CarForm.vue */ "./resources/js/Pages/Cars/Components/CarForm.vue");
@ -20221,7 +20223,7 @@ __webpack_require__.r(__webpack_exports__);
components: { components: {
Layout: _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__.default, Layout: _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__.default,
BreadCrumb: _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__.default, BreadCrumb: _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__.default,
CarForm: _Components_CarForm_vue__WEBPACK_IMPORTED_MODULE_2__.default CarForm: _Components_CarForm_vue__WEBPACK_IMPORTED_MODULE_3__.default
}, },
props: { props: {
brands: Array brands: Array
@ -20241,8 +20243,8 @@ __webpack_require__.r(__webpack_exports__);
vin: null, vin: null,
colour: null, colour: null,
car_model_id: null, car_model_id: null,
initial_date: (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(new Date()), initial_date: (0,vue__WEBPACK_IMPORTED_MODULE_2__.ref)(new Date()),
last_check_date: (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(new Date()), last_check_date: (0,vue__WEBPACK_IMPORTED_MODULE_2__.ref)(new Date()),
kilometers: null, kilometers: null,
known_damage: null, known_damage: null,
notes: null notes: null
@ -20274,8 +20276,8 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ }); /* harmony export */ });
/* harmony import */ var _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/Layout */ "./resources/js/Layouts/Layout.vue"); /* harmony import */ var _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/Layout */ "./resources/js/Layouts/Layout.vue");
/* harmony import */ var _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Components/BreadCrumb.vue */ "./resources/js/Components/BreadCrumb.vue"); /* harmony import */ var _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Components/BreadCrumb.vue */ "./resources/js/Components/BreadCrumb.vue");
/* harmony import */ var _Components_CarForm_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Components/CarForm.vue */ "./resources/js/Pages/Cars/Components/CarForm.vue"); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); /* harmony import */ var _Components_CarForm_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Components/CarForm.vue */ "./resources/js/Pages/Cars/Components/CarForm.vue");
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@ -20286,7 +20288,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
components: { components: {
BreadCrumb: _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__.default, BreadCrumb: _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__.default,
Layout: _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__.default, Layout: _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__.default,
CarForm: _Components_CarForm_vue__WEBPACK_IMPORTED_MODULE_2__.default CarForm: _Components_CarForm_vue__WEBPACK_IMPORTED_MODULE_3__.default
}, },
props: { props: {
car: Object, car: Object,
@ -20300,7 +20302,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
out += this.brand.name; out += this.brand.name;
if (this.car_model.name) { if (this.car_model.name) {
out += ' ' + this.car_model.name; out += " ".concat(this.car_model.name);
} }
} }
@ -20311,7 +20313,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
return { return {
currentRoute: 'cars.edit', currentRoute: 'cars.edit',
meta: { meta: {
form_name: 'EditCar' + this.car.id, form_name: "EditCar".concat(this.car.id),
route: this.route('cars.update', this.car.id), route: this.route('cars.update', this.car.id),
method: 'put', method: 'put',
button_text: 'Änderungen speichern', button_text: 'Änderungen speichern',
@ -20323,11 +20325,11 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
id: this.car.id, id: this.car.id,
stammnummer: this.car.stammnummer, stammnummer: this.car.stammnummer,
vin: this.car.vin, vin: this.car.vin,
initial_date: (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(new Date(this.car.initial_date)), initial_date: (0,vue__WEBPACK_IMPORTED_MODULE_2__.ref)(new Date(this.car.initial_date)),
colour: this.car.colour, colour: this.car.colour,
notes: this.car.notes, notes: this.car.notes,
car_model_id: this.car.car_model.id, car_model_id: this.car.car_model.id,
last_check_date: (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(new Date(this.car.last_check_date)), last_check_date: (0,vue__WEBPACK_IMPORTED_MODULE_2__.ref)(new Date(this.car.last_check_date)),
kilometers: this.car.kilometers, kilometers: this.car.kilometers,
known_damage: this.car.known_damage known_damage: this.car.known_damage
}, "notes", this.car.notes) }, "notes", this.car.notes)
@ -20648,8 +20650,8 @@ __webpack_require__.r(__webpack_exports__);
/* harmony import */ var _Jetstream_Button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Jetstream/Button */ "./resources/js/Jetstream/Button.vue"); /* harmony import */ var _Jetstream_Button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Jetstream/Button */ "./resources/js/Jetstream/Button.vue");
/* harmony import */ var _Jetstream_ActionMessage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Jetstream/ActionMessage */ "./resources/js/Jetstream/ActionMessage.vue"); /* harmony import */ var _Jetstream_ActionMessage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Jetstream/ActionMessage */ "./resources/js/Jetstream/ActionMessage.vue");
/* harmony import */ var _Jetstream_FormSection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/Jetstream/FormSection */ "./resources/js/Jetstream/FormSection.vue"); /* harmony import */ var _Jetstream_FormSection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/Jetstream/FormSection */ "./resources/js/Jetstream/FormSection.vue");
/* harmony import */ var _ContactFormFields__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ContactFormFields */ "./resources/js/Pages/Contacts/Components/ContactFormFields.vue"); /* harmony import */ var _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @inertiajs/inertia-vue3 */ "./node_modules/@inertiajs/inertia-vue3/dist/index.js");
/* harmony import */ var _inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @inertiajs/inertia-vue3 */ "./node_modules/@inertiajs/inertia-vue3/dist/index.js"); /* harmony import */ var _ContactFormFields__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ContactFormFields */ "./resources/js/Pages/Contacts/Components/ContactFormFields.vue");
@ -20660,7 +20662,7 @@ __webpack_require__.r(__webpack_exports__);
JetButton: _Jetstream_Button__WEBPACK_IMPORTED_MODULE_0__.default, JetButton: _Jetstream_Button__WEBPACK_IMPORTED_MODULE_0__.default,
JetFormSection: _Jetstream_FormSection__WEBPACK_IMPORTED_MODULE_2__.default, JetFormSection: _Jetstream_FormSection__WEBPACK_IMPORTED_MODULE_2__.default,
JetActionMessage: _Jetstream_ActionMessage__WEBPACK_IMPORTED_MODULE_1__.default, JetActionMessage: _Jetstream_ActionMessage__WEBPACK_IMPORTED_MODULE_1__.default,
ContactFormFields: _ContactFormFields__WEBPACK_IMPORTED_MODULE_3__.default ContactFormFields: _ContactFormFields__WEBPACK_IMPORTED_MODULE_4__.default
}, },
props: { props: {
data: Object, data: Object,
@ -20668,7 +20670,7 @@ __webpack_require__.r(__webpack_exports__);
}, },
data: function data() { data: function data() {
return { return {
form: (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_4__.useForm)(this.meta.form_name, this.data) form: (0,_inertiajs_inertia_vue3__WEBPACK_IMPORTED_MODULE_3__.useForm)(this.meta.form_name, this.data)
}; };
}, },
methods: { methods: {
@ -20790,7 +20792,7 @@ __webpack_require__.r(__webpack_exports__);
data: function data() { data: function data() {
return { return {
meta: { meta: {
form_name: 'EditContact' + this.contact.id, form_name: "EditContact".concat(this.contact.id),
route: this.route('contacts.update', this.contact.id), route: this.route('contacts.update', this.contact.id),
method: 'put', method: 'put',
button_text: 'Änderungen speichern', button_text: 'Änderungen speichern',
@ -21057,11 +21059,11 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ }); /* harmony export */ });
/* harmony import */ var _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/Layout */ "./resources/js/Layouts/Layout.vue"); /* harmony import */ var _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/Layout */ "./resources/js/Layouts/Layout.vue");
/* harmony import */ var _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Components/BreadCrumb.vue */ "./resources/js/Components/BreadCrumb.vue"); /* harmony import */ var _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Components/BreadCrumb.vue */ "./resources/js/Components/BreadCrumb.vue");
/* harmony import */ var _Components_ContractForm_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Components/ContractForm.vue */ "./resources/js/Pages/Contracts/Components/ContractForm.vue"); /* harmony import */ var _Components_CarCard_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/Components/CarCard.vue */ "./resources/js/Components/CarCard.vue");
/* harmony import */ var _Components_CarCard_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/Components/CarCard.vue */ "./resources/js/Components/CarCard.vue"); /* harmony import */ var _Components_ContactCard_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/Components/ContactCard.vue */ "./resources/js/Components/ContactCard.vue");
/* harmony import */ var _Components_ContactCard_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/Components/ContactCard.vue */ "./resources/js/Components/ContactCard.vue"); /* harmony import */ var _Jetstream_FormSection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/Jetstream/FormSection */ "./resources/js/Jetstream/FormSection.vue");
/* harmony import */ var _Jetstream_FormSection__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/Jetstream/FormSection */ "./resources/js/Jetstream/FormSection.vue"); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); /* harmony import */ var _Components_ContractForm_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Components/ContractForm.vue */ "./resources/js/Pages/Contracts/Components/ContractForm.vue");
@ -21073,10 +21075,10 @@ __webpack_require__.r(__webpack_exports__);
components: { components: {
Layout: _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__.default, Layout: _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__.default,
BreadCrumb: _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__.default, BreadCrumb: _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__.default,
ContractForm: _Components_ContractForm_vue__WEBPACK_IMPORTED_MODULE_2__.default, ContractForm: _Components_ContractForm_vue__WEBPACK_IMPORTED_MODULE_6__.default,
CarCard: _Components_CarCard_vue__WEBPACK_IMPORTED_MODULE_3__.default, CarCard: _Components_CarCard_vue__WEBPACK_IMPORTED_MODULE_2__.default,
ContactCard: _Components_ContactCard_vue__WEBPACK_IMPORTED_MODULE_4__.default, ContactCard: _Components_ContactCard_vue__WEBPACK_IMPORTED_MODULE_3__.default,
JetFormSection: _Jetstream_FormSection__WEBPACK_IMPORTED_MODULE_5__.default JetFormSection: _Jetstream_FormSection__WEBPACK_IMPORTED_MODULE_4__.default
}, },
props: { props: {
car: Object, car: Object,
@ -21096,25 +21098,25 @@ __webpack_require__.r(__webpack_exports__);
}, },
data: { data: {
id: null, id: null,
date: (0,vue__WEBPACK_IMPORTED_MODULE_6__.ref)(new Date()), date: (0,vue__WEBPACK_IMPORTED_MODULE_5__.ref)(new Date()),
price: null, price: null,
type: this.type, type: this.type,
insurance_type: '0', insurance_type: '0',
car_id: this.car.id, car_id: this.car.id,
contact_id: this.contact.id, contact_id: this.contact.id,
is_sell_contract: this.type == "SellContract" is_sell_contract: this.type == 'SellContract'
} }
}; };
}, },
computed: { computed: {
contractType: function contractType() { contractType: function contractType() {
return this.isSellContract ? "Verkaufsvertrag" : "Ankaufsvertrag"; return this.isSellContract ? 'Verkaufsvertrag' : 'Ankaufsvertrag';
}, },
contactType: function contactType() { contactType: function contactType() {
return this.isSellContract ? "Käufer" : "Verkäufer"; return this.isSellContract ? 'Käufer' : 'Verkäufer';
}, },
isSellContract: function isSellContract() { isSellContract: function isSellContract() {
return this.type == "SellContract"; return this.type == 'SellContract';
} }
} }
}); });
@ -21192,13 +21194,13 @@ __webpack_require__.r(__webpack_exports__);
}, },
computed: { computed: {
contractType: function contractType() { contractType: function contractType() {
return this.isSellContract ? "Verkaufsvertrag" : "Ankaufsvertrag"; return this.isSellContract ? 'Verkaufsvertrag' : 'Ankaufsvertrag';
}, },
contactType: function contactType() { contactType: function contactType() {
return this.isSellContract ? "Käufer" : "Verkäufer"; return this.isSellContract ? 'Käufer' : 'Verkäufer';
}, },
isSellContract: function isSellContract() { isSellContract: function isSellContract() {
return this.type == "SellContract"; return this.type == 'SellContract';
}, },
emptyContact: function emptyContact() { emptyContact: function emptyContact() {
return { return {
@ -21335,13 +21337,13 @@ __webpack_require__.r(__webpack_exports__);
}, },
computed: { computed: {
contractType: function contractType() { contractType: function contractType() {
return this.isSellContract ? "Verkaufsvertrag" : "Ankaufsvertrag"; return this.isSellContract ? 'Verkaufsvertrag' : 'Ankaufsvertrag';
}, },
contactType: function contactType() { contactType: function contactType() {
return this.isSellContract ? "Käufer" : "Verkäufer"; return this.isSellContract ? 'Käufer' : 'Verkäufer';
}, },
isSellContract: function isSellContract() { isSellContract: function isSellContract() {
return this.type == "SellContract"; return this.type == 'SellContract';
}, },
emptyCar: function emptyCar() { emptyCar: function emptyCar() {
return { return {
@ -21410,8 +21412,8 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ }); /* harmony export */ });
/* harmony import */ var _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/Layout */ "./resources/js/Layouts/Layout.vue"); /* harmony import */ var _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/Layout */ "./resources/js/Layouts/Layout.vue");
/* harmony import */ var _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Components/BreadCrumb.vue */ "./resources/js/Components/BreadCrumb.vue"); /* harmony import */ var _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Components/BreadCrumb.vue */ "./resources/js/Components/BreadCrumb.vue");
/* harmony import */ var _Components_ContractForm_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Components/ContractForm.vue */ "./resources/js/Pages/Contracts/Components/ContractForm.vue"); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js"); /* harmony import */ var _Components_ContractForm_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Components/ContractForm.vue */ "./resources/js/Pages/Contracts/Components/ContractForm.vue");
@ -21420,7 +21422,7 @@ __webpack_require__.r(__webpack_exports__);
components: { components: {
BreadCrumb: _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__.default, BreadCrumb: _Components_BreadCrumb_vue__WEBPACK_IMPORTED_MODULE_1__.default,
Layout: _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__.default, Layout: _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__.default,
ContractForm: _Components_ContractForm_vue__WEBPACK_IMPORTED_MODULE_2__.default ContractForm: _Components_ContractForm_vue__WEBPACK_IMPORTED_MODULE_3__.default
}, },
props: { props: {
contract: Object, contract: Object,
@ -21430,14 +21432,14 @@ __webpack_require__.r(__webpack_exports__);
return { return {
currentRoute: 'contracts.edit', currentRoute: 'contracts.edit',
meta: { meta: {
form_name: 'EditContract' + this.contract.id, form_name: "EditContract".concat(this.contract.id),
route: this.route('contracts.update', this.contract.id), route: this.route('contracts.update', this.contract.id),
method: 'put', method: 'put',
button_text: 'Änderungen speichern', button_text: 'Änderungen speichern',
on_success: 'Änderungen gespeichert' on_success: 'Änderungen gespeichert'
}, },
data: { data: {
date: (0,vue__WEBPACK_IMPORTED_MODULE_3__.ref)(new Date(this.contract.date)), date: (0,vue__WEBPACK_IMPORTED_MODULE_2__.ref)(new Date(this.contract.date)),
price: this.contract.price, price: this.contract.price,
insurance_type: this.contract.insurance_type, insurance_type: this.contract.insurance_type,
is_sell_contract: this.contract.is_sell_contract is_sell_contract: this.contract.is_sell_contract
@ -21768,8 +21770,8 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ }); /* harmony export */ });
/* harmony import */ var _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/Layout */ "./resources/js/Layouts/Layout.vue"); /* harmony import */ var _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/Layout */ "./resources/js/Layouts/Layout.vue");
/* harmony import */ var _DeleteUserForm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./DeleteUserForm */ "./resources/js/Pages/Profile/DeleteUserForm.vue"); /* harmony import */ var _Jetstream_SectionBorder__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Jetstream/SectionBorder */ "./resources/js/Jetstream/SectionBorder.vue");
/* harmony import */ var _Jetstream_SectionBorder__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/Jetstream/SectionBorder */ "./resources/js/Jetstream/SectionBorder.vue"); /* harmony import */ var _DeleteUserForm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./DeleteUserForm */ "./resources/js/Pages/Profile/DeleteUserForm.vue");
/* harmony import */ var _LogoutOtherBrowserSessionsForm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./LogoutOtherBrowserSessionsForm */ "./resources/js/Pages/Profile/LogoutOtherBrowserSessionsForm.vue"); /* harmony import */ var _LogoutOtherBrowserSessionsForm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./LogoutOtherBrowserSessionsForm */ "./resources/js/Pages/Profile/LogoutOtherBrowserSessionsForm.vue");
/* harmony import */ var _TwoFactorAuthenticationForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./TwoFactorAuthenticationForm */ "./resources/js/Pages/Profile/TwoFactorAuthenticationForm.vue"); /* harmony import */ var _TwoFactorAuthenticationForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./TwoFactorAuthenticationForm */ "./resources/js/Pages/Profile/TwoFactorAuthenticationForm.vue");
/* harmony import */ var _UpdatePasswordForm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./UpdatePasswordForm */ "./resources/js/Pages/Profile/UpdatePasswordForm.vue"); /* harmony import */ var _UpdatePasswordForm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./UpdatePasswordForm */ "./resources/js/Pages/Profile/UpdatePasswordForm.vue");
@ -21785,8 +21787,8 @@ __webpack_require__.r(__webpack_exports__);
props: ['sessions'], props: ['sessions'],
components: { components: {
Layout: _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__.default, Layout: _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__.default,
DeleteUserForm: _DeleteUserForm__WEBPACK_IMPORTED_MODULE_1__.default, DeleteUserForm: _DeleteUserForm__WEBPACK_IMPORTED_MODULE_2__.default,
JetSectionBorder: _Jetstream_SectionBorder__WEBPACK_IMPORTED_MODULE_2__.default, JetSectionBorder: _Jetstream_SectionBorder__WEBPACK_IMPORTED_MODULE_1__.default,
LogoutOtherBrowserSessionsForm: _LogoutOtherBrowserSessionsForm__WEBPACK_IMPORTED_MODULE_3__.default, LogoutOtherBrowserSessionsForm: _LogoutOtherBrowserSessionsForm__WEBPACK_IMPORTED_MODULE_3__.default,
TwoFactorAuthenticationForm: _TwoFactorAuthenticationForm__WEBPACK_IMPORTED_MODULE_4__.default, TwoFactorAuthenticationForm: _TwoFactorAuthenticationForm__WEBPACK_IMPORTED_MODULE_4__.default,
UpdatePasswordForm: _UpdatePasswordForm__WEBPACK_IMPORTED_MODULE_5__.default, UpdatePasswordForm: _UpdatePasswordForm__WEBPACK_IMPORTED_MODULE_5__.default,
@ -22220,10 +22222,10 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ }); /* harmony export */ });
/* harmony import */ var _TeamMemberManager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TeamMemberManager */ "./resources/js/Pages/Teams/TeamMemberManager.vue"); /* harmony import */ var _Layouts_AppLayout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/AppLayout */ "./resources/js/Layouts/AppLayout.vue");
/* harmony import */ var _Layouts_AppLayout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Layouts/AppLayout */ "./resources/js/Layouts/AppLayout.vue"); /* harmony import */ var _Jetstream_SectionBorder__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Jetstream/SectionBorder */ "./resources/js/Jetstream/SectionBorder.vue");
/* harmony import */ var _DeleteTeamForm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./DeleteTeamForm */ "./resources/js/Pages/Teams/DeleteTeamForm.vue"); /* harmony import */ var _TeamMemberManager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TeamMemberManager */ "./resources/js/Pages/Teams/TeamMemberManager.vue");
/* harmony import */ var _Jetstream_SectionBorder__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/Jetstream/SectionBorder */ "./resources/js/Jetstream/SectionBorder.vue"); /* harmony import */ var _DeleteTeamForm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./DeleteTeamForm */ "./resources/js/Pages/Teams/DeleteTeamForm.vue");
/* harmony import */ var _UpdateTeamNameForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./UpdateTeamNameForm */ "./resources/js/Pages/Teams/UpdateTeamNameForm.vue"); /* harmony import */ var _UpdateTeamNameForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./UpdateTeamNameForm */ "./resources/js/Pages/Teams/UpdateTeamNameForm.vue");
@ -22233,10 +22235,10 @@ __webpack_require__.r(__webpack_exports__);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
props: ['team', 'availableRoles', 'permissions'], props: ['team', 'availableRoles', 'permissions'],
components: { components: {
AppLayout: _Layouts_AppLayout__WEBPACK_IMPORTED_MODULE_1__.default, AppLayout: _Layouts_AppLayout__WEBPACK_IMPORTED_MODULE_0__.default,
DeleteTeamForm: _DeleteTeamForm__WEBPACK_IMPORTED_MODULE_2__.default, DeleteTeamForm: _DeleteTeamForm__WEBPACK_IMPORTED_MODULE_3__.default,
JetSectionBorder: _Jetstream_SectionBorder__WEBPACK_IMPORTED_MODULE_3__.default, JetSectionBorder: _Jetstream_SectionBorder__WEBPACK_IMPORTED_MODULE_1__.default,
TeamMemberManager: _TeamMemberManager__WEBPACK_IMPORTED_MODULE_0__.default, TeamMemberManager: _TeamMemberManager__WEBPACK_IMPORTED_MODULE_2__.default,
UpdateTeamNameForm: _UpdateTeamNameForm__WEBPACK_IMPORTED_MODULE_4__.default UpdateTeamNameForm: _UpdateTeamNameForm__WEBPACK_IMPORTED_MODULE_4__.default
} }
}); });
@ -32572,7 +32574,7 @@ __webpack_require__.r(__webpack_exports__);
/* harmony import */ var vue_unicons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-unicons */ "./node_modules/vue-unicons/dist/vue-unicons.es.js"); /* harmony import */ var vue_unicons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-unicons */ "./node_modules/vue-unicons/dist/vue-unicons.es.js");
/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm-bundler.js"); /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm-bundler.js");
/* harmony import */ var vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-unicons/dist/icons */ "./node_modules/vue-unicons/dist/icons.js"); /* harmony import */ var vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-unicons/dist/icons */ "./node_modules/vue-unicons/dist/icons.js");
__webpack_require__(/*! ./bootstrap */ "./resources/js/bootstrap.js"); // Import modules... // Import modules...
@ -32580,6 +32582,7 @@ __webpack_require__(/*! ./bootstrap */ "./resources/js/bootstrap.js"); // Import
__webpack_require__(/*! ./bootstrap */ "./resources/js/bootstrap.js");
vue_unicons__WEBPACK_IMPORTED_MODULE_3__.default.add([vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniChart, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPalette, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniCalendarAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPlusCircle, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniMeh, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniUsersAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniCarSideview, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniDashboard, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniSearch, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFilter, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFilterSlash, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniTrashAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPen, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniExclamationTriangle, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniMapMarker, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPhone, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniEnvelope, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileDownload, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowDown, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowUp, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowRight, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleRight, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleUp, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleDown, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleLeft, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileUploadAlt]); // Create a new store instance. vue_unicons__WEBPACK_IMPORTED_MODULE_3__.default.add([vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniChart, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPalette, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniCalendarAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPlusCircle, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniMeh, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniUsersAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniCarSideview, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniDashboard, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniSearch, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFilter, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFilterSlash, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniTrashAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPen, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniExclamationTriangle, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniMapMarker, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPhone, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniEnvelope, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileDownload, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowDown, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowUp, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowRight, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleRight, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleUp, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleDown, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleLeft, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileUploadAlt]); // Create a new store instance.

View File

@ -10,5 +10,5 @@ export default {
href: String, href: String,
text: String, text: String,
}, },
} };
</script> </script>

View File

@ -10,9 +10,9 @@ import StandardButton from './StandardButton.vue';
export default { export default {
components: { StandardButton }, components: { StandardButton },
props: { props: {
class: String, class: String,
href: String, href: String,
}, },
} };
</script> </script>

View File

@ -10,9 +10,9 @@ import StandardButton from './StandardButton.vue';
export default { export default {
components: { StandardButton }, components: { StandardButton },
props: { props: {
class: String, class: String,
href: String, href: String,
}, },
} };
</script> </script>

View File

@ -7,21 +7,21 @@
<script> <script>
export default { export default {
props: { props: {
class: String, class: String,
href: String, href: String,
},
data() {
return {
colour: 'indigo',
};
},
computed: {
allClasses() {
let classes = 'justify-center inline-flex items-center px-4 py-2 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest focus:outline-none focus:ring disabled:opacity-25 transition';
classes += ` bg-${this.colour}-800 hover:bg-${this.colour}-700 active:bg-${this.colour}-900 focus:border-${this.colour}-900 focus:ring-${this.colour}-300`;
return `${classes} ${this.class}`;
}, },
data() { },
return { };
colour: 'indigo', </script>
}
},
computed: {
allClasses: function () {
let classes = "justify-center inline-flex items-center px-4 py-2 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest focus:outline-none focus:ring disabled:opacity-25 transition"
classes += ` bg-${this.colour}-800 hover:bg-${this.colour}-700 active:bg-${this.colour}-900 focus:border-${this.colour}-900 focus:ring-${this.colour}-300`;
return classes + " " + this.class;
}
},
}
</script>

View File

@ -10,9 +10,9 @@ import StandardButton from './StandardButton.vue';
export default { export default {
components: { StandardButton }, components: { StandardButton },
props: { props: {
class: String, class: String,
href: String, href: String,
}, },
} };
</script> </script>

View File

@ -7,18 +7,18 @@
<script> <script>
export default { export default {
props: { props: {
class: String, class: String,
href: String, href: String,
colour: String colour: String,
},
computed: {
allClasses() {
let classes = 'justify-center inline-flex items-center px-4 py-2 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest focus:outline-none focus:ring disabled:opacity-25 transition';
classes += ` bg-${this.colour}-800 hover:bg-${this.colour}-700 active:bg-${this.colour}-900 focus:border-${this.colour}-900 focus:ring-${this.colour}-300`;
return `${classes} ${this.class}`;
}, },
computed: { },
allClasses: function () {
let classes = "justify-center inline-flex items-center px-4 py-2 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest focus:outline-none focus:ring disabled:opacity-25 transition" };
classes += ` bg-${this.colour}-800 hover:bg-${this.colour}-700 active:bg-${this.colour}-900 focus:border-${this.colour}-900 focus:ring-${this.colour}-300`; </script>
return classes + " " + this.class;
}
},
}
</script>

View File

@ -3,21 +3,21 @@
</template> </template>
<script> <script>
import ContractCard from '@/Components/ContractCard.vue' import ContractCard from '@/Components/ContractCard.vue';
export default { export default {
components: { components: {
ContractCard, ContractCard,
}, },
props: { props: {
contract: Object, contract: Object,
}, },
data() { data() {
return { return {
meta: { meta: {
'contact': 'Verkäufer', contact: 'Verkäufer',
}, },
} };
}, },
} };
</script> </script>

View File

@ -61,9 +61,9 @@
<script> <script>
export default ({ export default ({
props: { props: {
car: Object, car: Object,
hideEmpty: String, hideEmpty: String,
}, },
}) });
</script> </script>

View File

@ -14,13 +14,13 @@
</div> </div>
<div v-if="contact.email" class="mt-3"> <div v-if="contact.email" class="mt-3">
<a :href="'mailto:' + contact.email" class="pt-1 pb-1 flex items-center hover:text-indigo-600"> <a :href="'mailto:' + contact.email" class="pt-1 pb-1 flex items-center hover:text-indigo-600">
<unicon fill="currentColor" class="mr-1" height="22" width="22" name="envelope"></unicon> <unicon fill="currentColor" class="mr-1" height="22" width="22" name="envelope"></unicon>
{{ contact.email }} {{ contact.email }}
</a> </a>
</div> </div>
<div v-if="contact.phone" class="mt-1"> <div v-if="contact.phone" class="mt-1">
<a :href="'phone:' + contact.phone" class="pt-1 pb-1 flex items-center hover:text-indigo-600"> <a :href="'phone:' + contact.phone" class="pt-1 pb-1 flex items-center hover:text-indigo-600">
<unicon fill="currentColor" class="mr-1" height="22" width="22" name="phone"></unicon> <unicon fill="currentColor" class="mr-1" height="22" width="22" name="phone"></unicon>
{{ contact.phone }} {{ contact.phone }}
</a> </a>
</div> </div>
@ -40,8 +40,8 @@
<script> <script>
export default ({ export default ({
props: { props: {
contact: Object, contact: Object,
}, },
}) });
</script> </script>

View File

@ -55,36 +55,36 @@
</template> </template>
<script> <script>
import SimpleTable from '@/Components/SimpleTable.vue' import SimpleTable from '@/Components/SimpleTable.vue';
import ContactCard from '@/Components/ContactCard.vue' import ContactCard from '@/Components/ContactCard.vue';
import CarCard from '@/Components/CarCard.vue' import CarCard from '@/Components/CarCard.vue';
import PrintButton from './Buttons/PrintButton.vue' import PrintButton from './Buttons/PrintButton.vue';
export default { export default {
components: { components: {
SimpleTable, SimpleTable,
ContactCard, ContactCard,
CarCard, CarCard,
PrintButton, PrintButton,
},
props: {
contract: Object,
meta: Object,
},
computed: {
contractClasses() {
return `col-span-12 h-full relative sm:col-span-${this.contract.car ? '4' : '6'}`;
}, },
props: { },
contract: Object, data() {
meta: Object, return {
}, sellContractsColumns: [
computed: { { key: 'buyer', value: 'Käufer' },
contractClasses() { { key: 'date', value: 'Verkaufsdatum' },
return "col-span-12 h-full relative sm:col-span-" + (this.contract.car ? '4' : '6'); { key: 'price', value: 'Verkaufspreis' },
}, { key: 'insurance_type', value: 'Versicherungstyp' },
}, ],
data() { };
return { },
sellContractsColumns: [ };
{key: 'buyer', value: 'Käufer'}, </script>
{key: 'date', value: 'Verkaufsdatum'},
{key: 'price', value: 'Verkaufspreis'},
{key: 'insurance_type', value: 'Versicherungstyp'},
],
}
},
}
</script>

View File

@ -3,18 +3,18 @@
</template> </template>
<script> <script>
import useCurrencyInput from 'vue-currency-input' import useCurrencyInput from 'vue-currency-input';
export default { export default {
name: 'CurrencyInput', name: 'CurrencyInput',
props: { props: {
modelValue: Number, modelValue: Number,
options: Object options: Object,
}, },
setup (props) { setup(props) {
const { formattedValue, inputRef } = useCurrencyInput(props.options) const { formattedValue, inputRef } = useCurrencyInput(props.options);
return { inputRef, formattedValue } return { inputRef, formattedValue };
} },
} };
</script> </script>

View File

@ -2,21 +2,21 @@
<div class="lg:col-span-4 sm:col-span-6 col-span-12 shadow bg-white rounded-md sm:rounded-lg text-center"> <div class="lg:col-span-4 sm:col-span-6 col-span-12 shadow bg-white rounded-md sm:rounded-lg text-center">
<inertia-link v-if="link" :href="link" class="group"> <inertia-link v-if="link" :href="link" class="group">
<p class="font-bold text-6xl text-indigo-800 group-hover:text-indigo-700 py-5 transition">{{ number }}</p> <p class="font-bold text-6xl text-indigo-800 group-hover:text-indigo-700 py-5 transition">{{ number }}</p>
<p class="font-semibold text-2xl bg-indigo-800 group-hover:bg-indigo-700 text-white py-4 rounded-b-lg transition">{{ title }}</p> <p class="font-semibold text-2xl bg-indigo-800 group-hover:bg-indigo-700 text-white py-4 rounded-b-lg transition">{{ title }}</p>
</inertia-link> </inertia-link>
<span v-else> <span v-else>
<p class="font-bold text-6xl text-indigo-800 py-5">{{ number }}</p> <p class="font-bold text-6xl text-indigo-800 py-5">{{ number }}</p>
<p class="font-semibold text-2xl bg-indigo-800 text-white py-4 rounded-b-lg">{{ title }}</p> <p class="font-semibold text-2xl bg-indigo-800 text-white py-4 rounded-b-lg">{{ title }}</p>
</span> </span>
</div> </div>
</template> </template>
<script> <script>
export default { export default {
props: { props: {
title: String, title: String,
number: Number, number: Number,
link: String, link: String,
}, },
} };
</script> </script>

View File

@ -15,14 +15,14 @@
<script> <script>
export default { export default {
props: { props: {
document: Object, document: Object,
},
methods: {
deleteDocument(e) {
e.preventDefault();
this.$emit('delete', this.document.id);
}, },
methods: { },
deleteDocument(e) { };
e.preventDefault(); </script>
this.$emit('delete', this.document.id);
},
},
}
</script>

View File

@ -18,69 +18,70 @@
<script> <script>
const STATUS_INITIAL = 0, STATUS_SAVING = 1, STATUS_FAILED = 2; const STATUS_INITIAL = 0; const STATUS_SAVING = 1; const
STATUS_FAILED = 2;
export default { export default {
props: { props: {
id: Number, id: Number,
documents: Object, documents: Object,
},
data() {
return {
uploadError: null,
currentStatus: null,
uploadFieldName: 'document',
};
},
computed: {
isInitial() {
return this.currentStatus === STATUS_INITIAL;
}, },
data() { isSaving() {
return { return this.currentStatus === STATUS_SAVING;
uploadError: null,
currentStatus: null,
uploadFieldName: 'document',
}
}, },
computed: { isFailed() {
isInitial() { return this.currentStatus === STATUS_FAILED;
return this.currentStatus === STATUS_INITIAL;
},
isSaving() {
return this.currentStatus === STATUS_SAVING;
},
isFailed() {
return this.currentStatus === STATUS_FAILED;
},
}, },
methods: { },
reset() { methods: {
// reset form to initial state reset() {
this.currentStatus = STATUS_INITIAL; // reset form to initial state
this.uploadError = null; this.currentStatus = STATUS_INITIAL;
}, this.uploadError = null;
save(formData) { },
// upload data to the server save(formData) {
this.currentStatus = STATUS_SAVING; // upload data to the server
axios.post(this.route('documents.store', this.id), formData) this.currentStatus = STATUS_SAVING;
.then(response => { axios.post(this.route('documents.store', this.id), formData)
this.documents.push(response.data); .then((response) => {
this.reset(); this.documents.push(response.data);
}) this.reset();
.catch(err => { })
this.uploadError = err.response; .catch((err) => {
this.currentStatus = STATUS_FAILED; this.uploadError = err.response;
}); this.currentStatus = STATUS_FAILED;
}, });
filesChange(fieldName, fileList) { },
// handle file changes filesChange(fieldName, fileList) {
const formData = new FormData(); // handle file changes
const formData = new FormData();
if (!fileList.length) return; if (!fileList.length) return;
// append the files to FormData // append the files to FormData
Array Array
.from(Array(fileList.length).keys()) .from(Array(fileList.length).keys())
.map(x => { .map((x) => {
formData.append(fieldName, fileList[x], fileList[x].name); formData.append(fieldName, fileList[x], fileList[x].name);
}); });
// save it // save it
this.save(formData); this.save(formData);
},
}, },
mounted() { },
this.reset(); mounted() {
}, this.reset();
} },
</script> };
</script>

View File

@ -9,36 +9,36 @@
</template> </template>
<script> <script>
import { useForm } from '@inertiajs/inertia-vue3' import { useForm } from '@inertiajs/inertia-vue3';
import DocumentItem from '@/Components/Documents/Item.vue' import DocumentItem from '@/Components/Documents/Item.vue';
import DocumentUpload from '@/Components/Documents/Upload.vue' import DocumentUpload from '@/Components/Documents/Upload.vue';
export default { export default {
components: { components: {
DocumentItem, DocumentItem,
DocumentUpload, DocumentUpload,
}, },
props: { props: {
initial_documents: Object, initial_documents: Object,
id: Number, id: Number,
show_upload: Boolean, show_upload: Boolean,
}, },
data() { data() {
return { return {
documents: this.initial_documents, documents: this.initial_documents,
} };
}, },
methods: { methods: {
deleteDocument(documentId) { deleteDocument(documentId) {
let form = useForm(`deleteDocument${documentId}`, {id: documentId}); const form = useForm(`deleteDocument${documentId}`, { id: documentId });
form.delete(route('documents.destroy', this.id), { form.delete(route('documents.destroy', this.id), {
preserveScroll: true, preserveScroll: true,
onSuccess: () => { onSuccess: () => {
form.reset(); form.reset();
this.documents = this.initial_documents; this.documents = this.initial_documents;
}
});
}, },
} });
} },
</script> },
};
</script>

View File

@ -32,7 +32,7 @@ export default {
data() { data() {
return { return {
show: false, show: false,
} };
}, },
watch: { watch: {
show(show) { show(show) {
@ -43,19 +43,19 @@ export default {
modifiers: { modifiers: {
preventOverflow: { boundariesElement: this.boundary }, preventOverflow: { boundariesElement: this.boundary },
}, },
}) });
}) });
} else if (this.popper) { } else if (this.popper) {
setTimeout(() => this.popper.destroy(), 100) setTimeout(() => this.popper.destroy(), 100);
} }
}, },
}, },
mounted() { mounted() {
document.addEventListener('keydown', e => { document.addEventListener('keydown', (e) => {
if (e.keyCode === 27) { if (e.keyCode === 27) {
this.show = false this.show = false;
} }
}) });
}, },
} };
</script> </script>

View File

@ -59,30 +59,31 @@
</template> </template>
<script> <script>
import JetDropdown from '@/Jetstream/Dropdown' import JetDropdown from '@/Jetstream/Dropdown';
import JetDropdownLink from '@/Jetstream/DropdownLink' import JetDropdownLink from '@/Jetstream/DropdownLink';
import { mapState } from 'vuex' import { mapState } from 'vuex';
export default {
components: {
JetDropdown,
JetDropdownLink,
},
computed: { export default {
...mapState(['sideBarOpen']) components: {
JetDropdown,
JetDropdownLink,
},
computed: {
...mapState(['sideBarOpen']),
},
data() {
return {
dropDownOpen: false,
};
},
methods: {
toggleSidebar() {
this.$store.dispatch('toggleSidebar');
}, },
data() { logout() {
return { this.$inertia.post(route('logout'));
dropDownOpen: false
}
}, },
methods: { },
toggleSidebar() { };
this.$store.dispatch('toggleSidebar') </script>
},
logout() {
this.$inertia.post(route('logout'));
},
}
}
</script>

View File

@ -14,5 +14,5 @@ export default {
props: { props: {
links: Array, links: Array,
}, },
} };
</script> </script>

View File

@ -38,57 +38,57 @@
</template> </template>
<script> <script>
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetLabel from '@/Jetstream/Label.vue' import JetLabel from '@/Jetstream/Label.vue';
import JetInput from '@/Jetstream/Input.vue' import JetInput from '@/Jetstream/Input.vue';
import JetInputError from '@/Jetstream/InputError' import JetInputError from '@/Jetstream/InputError';
import Datepicker from 'vue3-datepicker' import Datepicker from 'vue3-datepicker';
import { useForm } from '@inertiajs/inertia-vue3' import { useForm } from '@inertiajs/inertia-vue3';
import { ref } from 'vue' import { ref } from 'vue';
import DialogModal from '@/Jetstream/DialogModal.vue' import DialogModal from '@/Jetstream/DialogModal.vue';
import CurrencyInput from '@/Components/CurrencyInput' import CurrencyInput from '@/Components/CurrencyInput';
export default { export default {
components: { components: {
JetButton, JetButton,
JetLabel, JetLabel,
JetInput, JetInput,
JetInputError, JetInputError,
DialogModal, DialogModal,
Datepicker, Datepicker,
CurrencyInput, CurrencyInput,
}, },
props: { props: {
id: Number, id: Number,
showModal: Boolean, showModal: Boolean,
}, },
data() { data() {
return { return {
form: useForm('CreatePayment', { form: useForm('CreatePayment', {
id: null, id: null,
date: ref(new Date()), date: ref(new Date()),
amount: null, amount: null,
type: '1', type: '1',
contract_id: this.id, contract_id: this.id,
}), }),
currencyOptions: { currencyOptions: {
currency: 'CHF', currency: 'CHF',
locale: 'de-CH', locale: 'de-CH',
exportValueAsInteger: true, exportValueAsInteger: true,
hideGroupingSeparatorOnFocus: false, hideGroupingSeparatorOnFocus: false,
}, },
} };
}, },
methods: { methods: {
submitForm() { submitForm() {
this.form.post(this.route('payments.store', this.id), { this.form.post(this.route('payments.store', this.id), {
preserveScroll: true, preserveScroll: true,
onSuccess: () => { onSuccess: () => {
this.$emit('close'); this.$emit('close');
form.reset(); form.reset();
},
});
}, },
});
}, },
} },
</script> };
</script>

View File

@ -8,51 +8,51 @@
</span> </span>
<div class="w-full mx-auto"> <div class="w-full mx-auto">
<simple-table :data="payments" :columns="columns" @delete="deletePayment" /> <simple-table :data="payments" :columns="columns" @delete="deletePayment" />
<p class="py-5 text-xl">Total <span class="font-bold ml-5">{{ contract.paid }}</span> / {{ contract.price }}</p> <p class="py-5 text-xl">Total <span class="font-bold ml-5">{{ contract.paid }}</span> / {{ contract.price }}</p>
</div> </div>
<payment-create-modal :id="contract.id" :show="showModal" @close="showModal = false" /> <payment-create-modal :id="contract.id" :show="showModal" @close="showModal = false" />
</template> </template>
<script> <script>
import SimpleTable from '@/Components/SimpleTable.vue' import SimpleTable from '@/Components/SimpleTable.vue';
import PaymentCreateModal from '@/Components/Payments/CreateModal.vue' import PaymentCreateModal from '@/Components/Payments/CreateModal.vue';
import StandardButton from '@/Components/Buttons/StandardButton.vue' import StandardButton from '@/Components/Buttons/StandardButton.vue';
import { useForm } from '@inertiajs/inertia-vue3' import { useForm } from '@inertiajs/inertia-vue3';
export default { export default {
components: { components: {
SimpleTable, SimpleTable,
PaymentCreateModal, PaymentCreateModal,
StandardButton, StandardButton,
},
props: {
payments: Object,
contract: Object,
show_upload: Boolean,
},
data() {
return {
showModal: false,
columns: [
{ key: 'date', value: 'Datum', sortable: false },
{ key: 'amount', value: 'Betrag', sortable: false },
{ key: 'type', value: 'Bezahlart', sortable: false },
{ key: 'delete', value: '', sortable: false },
],
};
},
methods: {
openModal(e) {
e.preventDefault();
this.showModal = true;
}, },
props: { deletePayment(id) {
payments: Object, const form = useForm(`deletePayment${id}`, { id });
contract: Object, form.delete(route('payments.destroy', this.contract.id), {
show_upload: Boolean, preserveScroll: true,
onSuccess: () => form.reset(),
});
}, },
data() { },
return { };
showModal: false, </script>
columns: [
{key: 'date', value: 'Datum', sortable: false},
{key: 'amount', value: 'Betrag', sortable: false},
{key: 'type', value: 'Bezahlart', sortable: false},
{key: 'delete', value: '', sortable: false},
],
}
},
methods: {
openModal(e) {
e.preventDefault();
this.showModal = true;
},
deletePayment(id) {
let form = useForm(`deletePayment${id}`, {id: id});
form.delete(route('payments.destroy', this.contract.id), {
preserveScroll: true,
onSuccess: () => form.reset(),
});
},
},
}
</script>

View File

@ -17,5 +17,5 @@ export default {
default: 300, default: 300,
}, },
}, },
} };
</script> </script>

View File

@ -3,21 +3,21 @@
</template> </template>
<script> <script>
import ContractCard from '@/Components/ContractCard.vue' import ContractCard from '@/Components/ContractCard.vue';
export default { export default {
components: { components: {
ContractCard, ContractCard,
}, },
props: { props: {
contract: Object, contract: Object,
}, },
data() { data() {
return { return {
meta: { meta: {
'contact': 'Käufer', contact: 'Käufer',
}, },
} };
}, },
} };
</script> </script>

View File

@ -20,11 +20,11 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
export default { export default {
components: { components: {
Layout, Layout,
}, },
} };
</script> </script>

View File

@ -29,7 +29,7 @@
Alle Autos Alle Autos
</jet-nav-link> </jet-nav-link>
<jet-nav-link :href="route('cars.unsold')" :active="route().current('cars.unsold')"> <jet-nav-link :href="route('cars.unsold')" :active="route().current('cars.unsold')">
<unicon fill="currentColor" class="mr-2 ml-3" height="22" width="22" name="angle-right"></unicon> <unicon fill="currentColor" class="mr-2 ml-3" height="22" width="22" name="angle-right"></unicon>
Meine Autos Meine Autos
</jet-nav-link> </jet-nav-link>
<jet-nav-link :href="route('cars.sold')" :active="route().current('cars.sold')"> <jet-nav-link :href="route('cars.sold')" :active="route().current('cars.sold')">
@ -63,15 +63,15 @@
</template> </template>
<script> <script>
import { mapState } from 'vuex' import { mapState } from 'vuex';
import JetNavLink from '@/Jetstream/NavLink' import JetNavLink from '@/Jetstream/NavLink';
export default { export default {
components: { components: {
JetNavLink, JetNavLink,
}, },
computed: { computed: {
...mapState(['sideBarOpen']) ...mapState(['sideBarOpen']),
} },
} };
</script> </script>

View File

@ -60,72 +60,70 @@
</span> </span>
</div> </div>
</div> </div>
<Paginator v-if="data.links" class="mt-6" :links="data.links" /> <Paginator v-if="data.links" class="mt-6" :links="data.links" />
</div> </div>
</template> </template>
<script> <script>
import Paginator from "@/Components/Paginator" import Paginator from '@/Components/Paginator';
import StandardButton from "@/Components/Buttons/StandardButton.vue" import StandardButton from '@/Components/Buttons/StandardButton.vue';
import { pickBy, throttle, mapValues } from 'lodash' import { pickBy, throttle, mapValues } from 'lodash';
export default { export default {
components: { components: {
Paginator, Paginator,
StandardButton, StandardButton,
},
props: {
data: Object,
columns: Array,
title: String,
currentRoute: String,
defaultSort: Object,
filters: Object,
print: Boolean,
hideArrow: Boolean,
},
data() {
return {
form: this.filters,
sort: this.defaultSort,
};
},
watch: {
form: {
deep: true,
handler: throttle(function () {
this.refreshTable();
}, 300),
}, },
props: { },
data: Object, methods: {
columns: Array, resolve(path, obj) {
title: String, return path.split('.').reduce((prev, curr) => (prev ? prev[curr] : null), obj || self);
currentRoute: String,
defaultSort: Object,
filters: Object,
print: Boolean,
hideArrow: Boolean,
}, },
data() { sortTable(col) {
return { event.preventDefault();
form: this.filters, if (this.sort.by == col) {
sort: this.defaultSort, this.sort.direction = this.sort.direction == 'asc' ? 'desc' : 'asc';
} } else {
this.sort.direction = 'asc';
}
this.sort.by = col;
this.$inertia.get(this.data.path, { sortby: this.sort.by, direction: this.sort.direction }, { preserveState: true });
}, },
watch: { reset() {
form: { this.form = mapValues(this.form, () => null);
deep: true,
handler: throttle(function() {
this.refreshTable();
}, 300),
},
}, },
methods: { refreshTable() {
resolve(path, obj) { if (this.currentRoute) {
return path.split('.').reduce(function(prev, curr) { this.$inertia.get(this.route(this.currentRoute), pickBy(this.form), { preserveState: true });
return prev ? prev[curr] : null }
}, obj || self)
},
sortTable(col) {
event.preventDefault();
if (this.sort.by == col) {
this.sort.direction = this.sort.direction == 'asc' ? 'desc' : 'asc';
} else {
this.sort.direction = 'asc';
}
this.sort.by = col;
this.$inertia.get(this.data.path, {'sortby': this.sort.by, 'direction': this.sort.direction}, { preserveState: true })
},
reset() {
this.form = mapValues(this.form, () => null)
},
refreshTable() {
if (this.currentRoute) {
this.$inertia.get(this.route(this.currentRoute), pickBy(this.form), { preserveState: true })
}
},
isActiveSort(col, dir) {
return col == this.sort.by && dir == this.sort.direction;
},
}, },
} isActiveSort(col, dir) {
</script> return col == this.sort.by && dir == this.sort.direction;
},
},
};
</script>

View File

@ -9,7 +9,7 @@
</template> </template>
<script> <script>
export default { export default {
props: ['on'], props: ['on'],
} };
</script> </script>

View File

@ -14,11 +14,11 @@
</template> </template>
<script> <script>
import JetSectionTitle from './SectionTitle' import JetSectionTitle from './SectionTitle';
export default { export default {
components: { components: {
JetSectionTitle, JetSectionTitle,
} },
} };
</script> </script>

View File

@ -38,21 +38,21 @@
</template> </template>
<script> <script>
export default { export default {
data() { data() {
return { return {
show: true, show: true,
} };
}, },
computed: { computed: {
style() { style() {
return this.$page.props.jetstream.flash?.bannerStyle || 'success' return this.$page.props.jetstream.flash?.bannerStyle || 'success';
}, },
message() { message() {
return this.$page.props.jetstream.flash?.banner || '' return this.$page.props.jetstream.flash?.banner || '';
}, },
} },
} };
</script> </script>

View File

@ -5,12 +5,12 @@
</template> </template>
<script> <script>
export default { export default {
props: { props: {
type: { type: {
type: String, type: String,
default: 'submit', default: 'submit',
}, },
} },
} };
</script> </script>

View File

@ -5,28 +5,28 @@
<script> <script>
export default { export default {
emits: ['update:checked'], emits: ['update:checked'],
props: { props: {
checked: { checked: {
type: [Array, Boolean], type: [Array, Boolean],
default: false, default: false,
},
value: {
default: null,
},
}, },
value: {
computed: { default: null,
proxyChecked: {
get() {
return this.checked;
},
set(val) {
this.$emit("update:checked", val);
},
},
}, },
} },
computed: {
proxyChecked: {
get() {
return this.checked;
},
set(val) {
this.$emit('update:checked', val);
},
},
},
};
</script> </script>

View File

@ -28,31 +28,31 @@
</template> </template>
<script> <script>
import Modal from './Modal' import Modal from './Modal';
export default { export default {
emits: ['close'], emits: ['close'],
components: { components: {
Modal, Modal,
}, },
props: { props: {
show: { show: {
default: false default: false,
}, },
maxWidth: { maxWidth: {
default: '2xl' default: '2xl',
}, },
closeable: { closeable: {
default: true default: true,
}, },
}, },
methods: { methods: {
close() { close() {
this.$emit('close') this.$emit('close');
}, },
} },
} };
</script> </script>

View File

@ -36,79 +36,79 @@
</template> </template>
<script> <script>
import JetButton from './Button' import JetButton from './Button';
import JetDialogModal from './DialogModal' import JetDialogModal from './DialogModal';
import JetInput from './Input' import JetInput from './Input';
import JetInputError from './InputError' import JetInputError from './InputError';
import JetSecondaryButton from './SecondaryButton' import JetSecondaryButton from './SecondaryButton';
export default { export default {
emits: ['confirmed'], emits: ['confirmed'],
props: { props: {
title: { title: {
default: 'Confirm Password', default: 'Confirm Password',
}, },
content: { content: {
default: 'For your security, please confirm your password to continue.', default: 'For your security, please confirm your password to continue.',
}, },
button: { button: {
default: 'Confirm', default: 'Confirm',
} },
}, },
components: { components: {
JetButton, JetButton,
JetDialogModal, JetDialogModal,
JetInput, JetInput,
JetInputError, JetInputError,
JetSecondaryButton, JetSecondaryButton,
}, },
data() { data() {
return { return {
confirmingPassword: false, confirmingPassword: false,
form: { form: {
password: '', password: '',
error: '', error: '',
}, },
} };
}, },
methods: { methods: {
startConfirmingPassword() { startConfirmingPassword() {
axios.get(route('password.confirmation')).then(response => { axios.get(route('password.confirmation')).then((response) => {
if (response.data.confirmed) { if (response.data.confirmed) {
this.$emit('confirmed'); this.$emit('confirmed');
} else { } else {
this.confirmingPassword = true; this.confirmingPassword = true;
setTimeout(() => this.$refs.password.focus(), 250) setTimeout(() => this.$refs.password.focus(), 250);
}
})
},
confirmPassword() {
this.form.processing = true;
axios.post(route('password.confirm'), {
password: this.form.password,
}).then(() => {
this.form.processing = false;
this.closeModal()
this.$nextTick(() => this.$emit('confirmed'));
}).catch(error => {
this.form.processing = false;
this.form.error = error.response.data.errors.password[0];
this.$refs.password.focus()
});
},
closeModal() {
this.confirmingPassword = false
this.form.password = '';
this.form.error = '';
},
} }
} });
},
confirmPassword() {
this.form.processing = true;
axios.post(route('password.confirm'), {
password: this.form.password,
}).then(() => {
this.form.processing = false;
this.closeModal();
this.$nextTick(() => this.$emit('confirmed'));
}).catch((error) => {
this.form.processing = false;
this.form.error = error.response.data.errors.password[0];
this.$refs.password.focus();
});
},
closeModal() {
this.confirmingPassword = false;
this.form.password = '';
this.form.error = '';
},
},
};
</script> </script>

View File

@ -5,12 +5,12 @@
</template> </template>
<script> <script>
export default { export default {
props: { props: {
type: { type: {
type: String, type: String,
default: 'button', default: 'button',
}, },
} },
} };
</script> </script>

View File

@ -20,31 +20,31 @@
</template> </template>
<script> <script>
import Modal from './Modal' import Modal from './Modal';
export default { export default {
emits: ['close'], emits: ['close'],
components: { components: {
Modal, Modal,
}, },
props: { props: {
show: { show: {
default: false default: false,
}, },
maxWidth: { maxWidth: {
default: '2xl' default: '2xl',
}, },
closeable: { closeable: {
default: true default: true,
}, },
}, },
methods: { methods: {
close() { close() {
this.$emit('close') this.$emit('close');
}, },
} },
} };
</script> </script>

View File

@ -29,54 +29,53 @@
</template> </template>
<script> <script>
import { onMounted, onUnmounted, ref } from "vue"; import { onMounted, onUnmounted, ref } from 'vue';
export default { export default {
props: { props: {
align: { align: {
default: 'right' default: 'right',
}, },
width: { width: {
default: '48' default: '48',
}, },
contentClasses: { contentClasses: {
default: () => ['py-1', 'bg-white'] default: () => ['py-1', 'bg-white'],
} },
},
setup() {
const open = ref(false);
const closeOnEscape = (e) => {
if (open.value && e.keyCode === 27) {
open.value = false;
}
};
onMounted(() => document.addEventListener('keydown', closeOnEscape));
onUnmounted(() => document.removeEventListener('keydown', closeOnEscape));
return {
open,
};
},
computed: {
widthClass() {
return {
48: 'w-48',
}[this.width.toString()];
}, },
setup() { alignmentClasses() {
let open = ref(false) if (this.align === 'left') {
return 'origin-top-left left-0';
const closeOnEscape = (e) => { } if (this.align === 'right') {
if (open.value && e.keyCode === 27) { return 'origin-top-right right-0';
open.value = false }
} return 'origin-top';
}
onMounted(() => document.addEventListener('keydown', closeOnEscape))
onUnmounted(() => document.removeEventListener('keydown', closeOnEscape))
return {
open,
}
}, },
},
computed: { };
widthClass() {
return {
'48': 'w-48',
}[this.width.toString()]
},
alignmentClasses() {
if (this.align === 'left') {
return 'origin-top-left left-0'
} else if (this.align === 'right') {
return 'origin-top-right right-0'
} else {
return 'origin-top'
}
},
}
}
</script> </script>

View File

@ -3,7 +3,7 @@
<button type="submit" class="block w-full px-4 py-2 text-sm leading-5 text-gray-700 text-left hover:bg-gray-100 focus:outline-none focus:bg-gray-100 transition" v-if="as == 'button'"> <button type="submit" class="block w-full px-4 py-2 text-sm leading-5 text-gray-700 text-left hover:bg-gray-100 focus:outline-none focus:bg-gray-100 transition" v-if="as == 'button'">
<slot></slot> <slot></slot>
</button> </button>
<a :href="href" class="block px-4 py-2 text-sm leading-5 text-gray-700 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 transition" v-else-if="as =='a'"> <a :href="href" class="block px-4 py-2 text-sm leading-5 text-gray-700 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 transition" v-else-if="as =='a'">
<slot></slot> <slot></slot>
</a> </a>
@ -15,7 +15,7 @@
</template> </template>
<script> <script>
export default { export default {
props: ['href', 'as'] props: ['href', 'as'],
} };
</script> </script>

View File

@ -22,31 +22,31 @@
</template> </template>
<script> <script>
import JetSectionTitle from './SectionTitle' import JetSectionTitle from './SectionTitle';
export default { export default {
emits: ['submitted'], emits: ['submitted'],
props: { props: {
emptyBg: { emptyBg: {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
}, },
components: { components: {
JetSectionTitle, JetSectionTitle,
}, },
computed: { computed: {
hasActions() { hasActions() {
return !! this.$slots.actions return !!this.$slots.actions;
}, },
classnames() { classnames() {
let classnames = !this.emptyBg ? 'px-4 py-5 bg-white sm:p-6 shadow ' :""; let classnames = !this.emptyBg ? 'px-4 py-5 bg-white sm:p-6 shadow ' : '';
classnames += this.hasActions ? 'sm:rounded-tl-md sm:rounded-tr-md' : 'sm:rounded-md'; classnames += this.hasActions ? 'sm:rounded-tl-md sm:rounded-tr-md' : 'sm:rounded-md';
return classnames; return classnames;
}, },
} },
} };
</script> </script>

View File

@ -3,16 +3,15 @@
</template> </template>
<script> <script>
export default { export default {
props: ['modelValue'], props: ['modelValue'],
emits: ['update:modelValue'], emits: ['update:modelValue'],
methods: { methods: {
focus() { focus() {
this.$refs.input.focus() this.$refs.input.focus();
} },
} },
} };
</script> </script>

View File

@ -7,7 +7,7 @@
</template> </template>
<script> <script>
export default { export default {
props: ['message'] props: ['message'],
} };
</script> </script>

View File

@ -6,7 +6,7 @@
</template> </template>
<script> <script>
export default { export default {
props: ['value'] props: ['value'],
} };
</script> </script>

View File

@ -29,67 +29,67 @@
</template> </template>
<script> <script>
import { onMounted, onUnmounted } from "vue"; import { onMounted, onUnmounted } from 'vue';
export default { export default {
emits: ['close'], emits: ['close'],
props: { props: {
show: { show: {
default: false default: false,
}, },
maxWidth: { maxWidth: {
default: '2xl' default: '2xl',
}, },
closeable: { closeable: {
default: true default: true,
}, },
}, },
watch: { watch: {
show: { show: {
immediate: true, immediate: true,
handler: (show) => { handler: (show) => {
if (show) { if (show) {
document.body.style.overflow = 'hidden' document.body.style.overflow = 'hidden';
} else { } else {
document.body.style.overflow = null document.body.style.overflow = null;
}
}
}
},
setup(props, {emit}) {
const close = () => {
if (props.closeable) {
emit('close')
}
}
const closeOnEscape = (e) => {
if (e.key === 'Escape' && props.show) {
close()
}
}
onMounted(() => document.addEventListener('keydown', closeOnEscape))
onUnmounted(() => document.removeEventListener('keydown', closeOnEscape))
return {
close,
}
},
computed: {
maxWidthClass() {
return {
'sm': 'sm:max-w-sm',
'md': 'sm:max-w-md',
'lg': 'sm:max-w-lg',
'xl': 'sm:max-w-xl',
'2xl': 'sm:max-w-2xl',
}[this.maxWidth]
}
} }
} },
},
},
setup(props, { emit }) {
const close = () => {
if (props.closeable) {
emit('close');
}
};
const closeOnEscape = (e) => {
if (e.key === 'Escape' && props.show) {
close();
}
};
onMounted(() => document.addEventListener('keydown', closeOnEscape));
onUnmounted(() => document.removeEventListener('keydown', closeOnEscape));
return {
close,
};
},
computed: {
maxWidthClass() {
return {
sm: 'sm:max-w-sm',
md: 'sm:max-w-md',
lg: 'sm:max-w-lg',
xl: 'sm:max-w-xl',
'2xl': 'sm:max-w-2xl',
}[this.maxWidth];
},
},
};
</script> </script>

View File

@ -5,15 +5,15 @@
</template> </template>
<script> <script>
export default { export default {
props: ['href', 'active'], props: ['href', 'active'],
computed: { computed: {
classes() { classes() {
return this.active return this.active
? 'w-full flex items-center text-indigo-100 h-10 pl-4 rounded-lg cursor-pointer transition' ? 'w-full flex items-center text-indigo-100 h-10 pl-4 rounded-lg cursor-pointer transition'
: 'w-full flex items-center hover:text-indigo-100 text-indigo-300 h-10 pl-4 rounded-lg cursor-pointer transition' : 'w-full flex items-center hover:text-indigo-100 text-indigo-300 h-10 pl-4 rounded-lg cursor-pointer transition';
} },
} },
} };
</script> </script>

View File

@ -11,15 +11,15 @@
</template> </template>
<script> <script>
export default { export default {
props: ['active', 'href', 'as'], props: ['active', 'href', 'as'],
computed: { computed: {
classes() { classes() {
return this.active return this.active
? 'block pl-3 pr-4 py-2 border-l-4 border-indigo-400 text-base font-medium text-indigo-700 bg-indigo-50 focus:outline-none focus:text-indigo-800 focus:bg-indigo-100 focus:border-indigo-700 transition' ? 'block pl-3 pr-4 py-2 border-l-4 border-indigo-400 text-base font-medium text-indigo-700 bg-indigo-50 focus:outline-none focus:text-indigo-800 focus:bg-indigo-100 focus:border-indigo-700 transition'
: 'block pl-3 pr-4 py-2 border-l-4 border-transparent text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-50 hover:border-gray-300 focus:outline-none focus:text-gray-800 focus:bg-gray-50 focus:border-gray-300 transition' : 'block pl-3 pr-4 py-2 border-l-4 border-transparent text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-50 hover:border-gray-300 focus:outline-none focus:text-gray-800 focus:bg-gray-50 focus:border-gray-300 transition';
} },
} },
} };
</script> </script>

View File

@ -5,12 +5,12 @@
</template> </template>
<script> <script>
export default { export default {
props: { props: {
type: { type: {
type: String, type: String,
default: 'button', default: 'button',
}, },
} },
} };
</script> </script>

View File

@ -9,15 +9,15 @@
</template> </template>
<script> <script>
export default { export default {
computed: { computed: {
errors() { errors() {
return this.$page.props.errors return this.$page.props.errors;
}, },
hasErrors() { hasErrors() {
return Object.keys(this.errors).length > 0; return Object.keys(this.errors).length > 0;
}, },
} },
} };
</script> </script>

View File

@ -242,41 +242,41 @@
</template> </template>
<script> <script>
import JetApplicationMark from '@/Jetstream/ApplicationMark' import JetApplicationMark from '@/Jetstream/ApplicationMark';
import JetBanner from '@/Jetstream/Banner' import JetBanner from '@/Jetstream/Banner';
import JetDropdown from '@/Jetstream/Dropdown' import JetDropdown from '@/Jetstream/Dropdown';
import JetDropdownLink from '@/Jetstream/DropdownLink' import JetDropdownLink from '@/Jetstream/DropdownLink';
import JetNavLink from '@/Jetstream/NavLink' import JetNavLink from '@/Jetstream/NavLink';
import JetResponsiveNavLink from '@/Jetstream/ResponsiveNavLink' import JetResponsiveNavLink from '@/Jetstream/ResponsiveNavLink';
export default { export default {
components: { components: {
JetApplicationMark, JetApplicationMark,
JetBanner, JetBanner,
JetDropdown, JetDropdown,
JetDropdownLink, JetDropdownLink,
JetNavLink, JetNavLink,
JetResponsiveNavLink, JetResponsiveNavLink,
}, },
data() { data() {
return { return {
showingNavigationDropdown: false, showingNavigationDropdown: false,
} };
}, },
methods: { methods: {
switchToTeam(team) { switchToTeam(team) {
this.$inertia.put(route('current-team.update'), { this.$inertia.put(route('current-team.update'), {
'team_id': team.id team_id: team.id,
}, { }, {
preserveState: false preserveState: false,
}) });
}, },
logout() { logout() {
this.$inertia.post(route('logout')); this.$inertia.post(route('logout'));
}, },
} },
} };
</script> </script>

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="leading-normal tracking-normal" id="main-body"> <div class="leading-normal tracking-normal" id="main-body">
<div class="flex flex-wrap"> <div class="flex flex-wrap">
<Sidebar /> <Sidebar />
<div class="w-full bg-gray-100 pl-0 lg:pl-64 min-h-screen" :class="sideBarOpen ? 'overlay' : ''" id="main-content"> <div class="w-full bg-gray-100 pl-0 lg:pl-64 min-h-screen" :class="sideBarOpen ? 'overlay' : ''" id="main-content">
<Navbar> <Navbar>
@ -20,19 +20,19 @@
</template> </template>
<script> <script>
import { mapState } from 'vuex' import { mapState } from 'vuex';
import Sidebar from "@/Components/Sidebar" import Sidebar from '@/Components/Sidebar';
import Navbar from "@/Components/Navbar" import Navbar from '@/Components/Navbar';
import JetBanner from '@/Jetstream/Banner' import JetBanner from '@/Jetstream/Banner';
export default { export default {
computed: { computed: {
...mapState(['sideBarOpen']) ...mapState(['sideBarOpen']),
}, },
components: { components: {
Sidebar, Sidebar,
Navbar, Navbar,
JetBanner, JetBanner,
} },
} };
</script> </script>

View File

@ -164,98 +164,98 @@
</template> </template>
<script> <script>
import JetActionMessage from '@/Jetstream/ActionMessage' import JetActionMessage from '@/Jetstream/ActionMessage';
import JetActionSection from '@/Jetstream/ActionSection' import JetActionSection from '@/Jetstream/ActionSection';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetConfirmationModal from '@/Jetstream/ConfirmationModal' import JetConfirmationModal from '@/Jetstream/ConfirmationModal';
import JetDangerButton from '@/Jetstream/DangerButton' import JetDangerButton from '@/Jetstream/DangerButton';
import JetDialogModal from '@/Jetstream/DialogModal' import JetDialogModal from '@/Jetstream/DialogModal';
import JetFormSection from '@/Jetstream/FormSection' import JetFormSection from '@/Jetstream/FormSection';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetCheckbox from '@/Jetstream/Checkbox' import JetCheckbox from '@/Jetstream/Checkbox';
import JetInputError from '@/Jetstream/InputError' import JetInputError from '@/Jetstream/InputError';
import JetLabel from '@/Jetstream/Label' import JetLabel from '@/Jetstream/Label';
import JetSecondaryButton from '@/Jetstream/SecondaryButton' import JetSecondaryButton from '@/Jetstream/SecondaryButton';
import JetSectionBorder from '@/Jetstream/SectionBorder' import JetSectionBorder from '@/Jetstream/SectionBorder';
export default { export default {
components: { components: {
JetActionMessage, JetActionMessage,
JetActionSection, JetActionSection,
JetButton, JetButton,
JetConfirmationModal, JetConfirmationModal,
JetDangerButton, JetDangerButton,
JetDialogModal, JetDialogModal,
JetFormSection, JetFormSection,
JetInput, JetInput,
JetCheckbox, JetCheckbox,
JetInputError, JetInputError,
JetLabel, JetLabel,
JetSecondaryButton, JetSecondaryButton,
JetSectionBorder, JetSectionBorder,
},
props: [
'tokens',
'availablePermissions',
'defaultPermissions',
],
data() {
return {
createApiTokenForm: this.$inertia.form({
name: '',
permissions: this.defaultPermissions,
}),
updateApiTokenForm: this.$inertia.form({
permissions: [],
}),
deleteApiTokenForm: this.$inertia.form(),
displayingToken: false,
managingPermissionsFor: null,
apiTokenBeingDeleted: null,
};
},
methods: {
createApiToken() {
this.createApiTokenForm.post(route('api-tokens.store'), {
preserveScroll: true,
onSuccess: () => {
this.displayingToken = true;
this.createApiTokenForm.reset();
}, },
});
},
props: [ manageApiTokenPermissions(token) {
'tokens', this.updateApiTokenForm.permissions = token.abilities;
'availablePermissions',
'defaultPermissions',
],
data() { this.managingPermissionsFor = token;
return { },
createApiTokenForm: this.$inertia.form({
name: '',
permissions: this.defaultPermissions,
}),
updateApiTokenForm: this.$inertia.form({ updateApiToken() {
permissions: [] this.updateApiTokenForm.put(route('api-tokens.update', this.managingPermissionsFor), {
}), preserveScroll: true,
preserveState: true,
onSuccess: () => (this.managingPermissionsFor = null),
});
},
deleteApiTokenForm: this.$inertia.form(), confirmApiTokenDeletion(token) {
this.apiTokenBeingDeleted = token;
},
displayingToken: false, deleteApiToken() {
managingPermissionsFor: null, this.deleteApiTokenForm.delete(route('api-tokens.destroy', this.apiTokenBeingDeleted), {
apiTokenBeingDeleted: null, preserveScroll: true,
} preserveState: true,
}, onSuccess: () => (this.apiTokenBeingDeleted = null),
});
methods: { },
createApiToken() { },
this.createApiTokenForm.post(route('api-tokens.store'), { };
preserveScroll: true,
onSuccess: () => {
this.displayingToken = true
this.createApiTokenForm.reset()
}
})
},
manageApiTokenPermissions(token) {
this.updateApiTokenForm.permissions = token.abilities
this.managingPermissionsFor = token
},
updateApiToken() {
this.updateApiTokenForm.put(route('api-tokens.update', this.managingPermissionsFor), {
preserveScroll: true,
preserveState: true,
onSuccess: () => (this.managingPermissionsFor = null),
})
},
confirmApiTokenDeletion(token) {
this.apiTokenBeingDeleted = token
},
deleteApiToken() {
this.deleteApiTokenForm.delete(route('api-tokens.destroy', this.apiTokenBeingDeleted), {
preserveScroll: true,
preserveState: true,
onSuccess: () => (this.apiTokenBeingDeleted = null),
})
},
},
}
</script> </script>

View File

@ -17,19 +17,19 @@
</template> </template>
<script> <script>
import ApiTokenManager from './ApiTokenManager' import AppLayout from '@/Layouts/AppLayout';
import AppLayout from '@/Layouts/AppLayout' import ApiTokenManager from './ApiTokenManager';
export default { export default {
props: [ props: [
'tokens', 'tokens',
'availablePermissions', 'availablePermissions',
'defaultPermissions', 'defaultPermissions',
], ],
components: { components: {
ApiTokenManager, ApiTokenManager,
AppLayout, AppLayout,
}, },
} };
</script> </script>

View File

@ -26,37 +26,37 @@
</template> </template>
<script> <script>
import JetAuthenticationCard from '@/Jetstream/AuthenticationCard' import JetAuthenticationCard from '@/Jetstream/AuthenticationCard';
import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo' import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetLabel from '@/Jetstream/Label' import JetLabel from '@/Jetstream/Label';
import JetValidationErrors from '@/Jetstream/ValidationErrors' import JetValidationErrors from '@/Jetstream/ValidationErrors';
export default { export default {
components: { components: {
JetAuthenticationCard, JetAuthenticationCard,
JetAuthenticationCardLogo, JetAuthenticationCardLogo,
JetButton, JetButton,
JetInput, JetInput,
JetLabel, JetLabel,
JetValidationErrors JetValidationErrors,
}, },
data() { data() {
return { return {
form: this.$inertia.form({ form: this.$inertia.form({
password: '', password: '',
}) }),
} };
}, },
methods: { methods: {
submit() { submit() {
this.form.post(this.route('password.confirm'), { this.form.post(this.route('password.confirm'), {
onFinish: () => this.form.reset(), onFinish: () => this.form.reset(),
}) });
} },
} },
} };
</script> </script>

View File

@ -30,39 +30,39 @@
</template> </template>
<script> <script>
import JetAuthenticationCard from '@/Jetstream/AuthenticationCard' import JetAuthenticationCard from '@/Jetstream/AuthenticationCard';
import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo' import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetLabel from '@/Jetstream/Label' import JetLabel from '@/Jetstream/Label';
import JetValidationErrors from '@/Jetstream/ValidationErrors' import JetValidationErrors from '@/Jetstream/ValidationErrors';
export default { export default {
components: { components: {
JetAuthenticationCard, JetAuthenticationCard,
JetAuthenticationCardLogo, JetAuthenticationCardLogo,
JetButton, JetButton,
JetInput, JetInput,
JetLabel, JetLabel,
JetValidationErrors JetValidationErrors,
}, },
props: { props: {
status: String status: String,
}, },
data() { data() {
return { return {
form: this.$inertia.form({ form: this.$inertia.form({
email: '' email: '',
}) }),
} };
}, },
methods: { methods: {
submit() { submit() {
this.form.post(this.route('password.email')) this.form.post(this.route('password.email'));
} },
} },
} };
</script> </script>

View File

@ -42,51 +42,51 @@
</template> </template>
<script> <script>
import JetAuthenticationCard from '@/Jetstream/AuthenticationCard' import JetAuthenticationCard from '@/Jetstream/AuthenticationCard';
import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo' import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetCheckbox from '@/Jetstream/Checkbox' import JetCheckbox from '@/Jetstream/Checkbox';
import JetLabel from '@/Jetstream/Label' import JetLabel from '@/Jetstream/Label';
import JetValidationErrors from '@/Jetstream/ValidationErrors' import JetValidationErrors from '@/Jetstream/ValidationErrors';
export default { export default {
components: { components: {
JetAuthenticationCard, JetAuthenticationCard,
JetAuthenticationCardLogo, JetAuthenticationCardLogo,
JetButton, JetButton,
JetInput, JetInput,
JetCheckbox, JetCheckbox,
JetLabel, JetLabel,
JetValidationErrors JetValidationErrors,
}, },
props: { props: {
canResetPassword: Boolean, canResetPassword: Boolean,
status: String status: String,
}, },
data() { data() {
return { return {
form: this.$inertia.form({ form: this.$inertia.form({
email: '', email: '',
password: '', password: '',
remember: false remember: false,
}) }),
} };
}, },
methods: { methods: {
submit() { submit() {
this.form this.form
.transform(data => ({ .transform((data) => ({
... data, ...data,
remember: this.form.remember ? 'on' : '' remember: this.form.remember ? 'on' : '',
})) }))
.post(this.route('login'), { .post(this.route('login'), {
onFinish: () => this.form.reset('password'), onFinish: () => this.form.reset('password'),
}) });
} },
} },
} };
</script> </script>

View File

@ -53,43 +53,43 @@
</template> </template>
<script> <script>
import JetAuthenticationCard from '@/Jetstream/AuthenticationCard' import JetAuthenticationCard from '@/Jetstream/AuthenticationCard';
import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo' import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetCheckbox from "@/Jetstream/Checkbox"; import JetCheckbox from '@/Jetstream/Checkbox';
import JetLabel from '@/Jetstream/Label' import JetLabel from '@/Jetstream/Label';
import JetValidationErrors from '@/Jetstream/ValidationErrors' import JetValidationErrors from '@/Jetstream/ValidationErrors';
export default { export default {
components: { components: {
JetAuthenticationCard, JetAuthenticationCard,
JetAuthenticationCardLogo, JetAuthenticationCardLogo,
JetButton, JetButton,
JetInput, JetInput,
JetCheckbox, JetCheckbox,
JetLabel, JetLabel,
JetValidationErrors JetValidationErrors,
}, },
data() { data() {
return { return {
form: this.$inertia.form({ form: this.$inertia.form({
name: '', name: '',
email: '', email: '',
password: '', password: '',
password_confirmation: '', password_confirmation: '',
terms: false, terms: false,
}) }),
} };
}, },
methods: { methods: {
submit() { submit() {
this.form.post(this.route('register'), { this.form.post(this.route('register'), {
onFinish: () => this.form.reset('password', 'password_confirmation'), onFinish: () => this.form.reset('password', 'password_confirmation'),
}) });
} },
} },
} };
</script> </script>

View File

@ -32,45 +32,45 @@
</template> </template>
<script> <script>
import JetAuthenticationCard from '@/Jetstream/AuthenticationCard' import JetAuthenticationCard from '@/Jetstream/AuthenticationCard';
import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo' import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetLabel from '@/Jetstream/Label' import JetLabel from '@/Jetstream/Label';
import JetValidationErrors from '@/Jetstream/ValidationErrors' import JetValidationErrors from '@/Jetstream/ValidationErrors';
export default { export default {
components: { components: {
JetAuthenticationCard, JetAuthenticationCard,
JetAuthenticationCardLogo, JetAuthenticationCardLogo,
JetButton, JetButton,
JetInput, JetInput,
JetLabel, JetLabel,
JetValidationErrors JetValidationErrors,
}, },
props: { props: {
email: String, email: String,
token: String, token: String,
}, },
data() { data() {
return { return {
form: this.$inertia.form({ form: this.$inertia.form({
token: this.token, token: this.token,
email: this.email, email: this.email,
password: '', password: '',
password_confirmation: '', password_confirmation: '',
}) }),
} };
}, },
methods: { methods: {
submit() { submit() {
this.form.post(this.route('password.update'), { this.form.post(this.route('password.update'), {
onFinish: () => this.form.reset('password', 'password_confirmation'), onFinish: () => this.form.reset('password', 'password_confirmation'),
}) });
} },
} },
} };
</script> </script>

View File

@ -47,51 +47,51 @@
</template> </template>
<script> <script>
import JetAuthenticationCard from '@/Jetstream/AuthenticationCard' import JetAuthenticationCard from '@/Jetstream/AuthenticationCard';
import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo' import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetLabel from '@/Jetstream/Label' import JetLabel from '@/Jetstream/Label';
import JetValidationErrors from '@/Jetstream/ValidationErrors' import JetValidationErrors from '@/Jetstream/ValidationErrors';
export default { export default {
components: { components: {
JetAuthenticationCard, JetAuthenticationCard,
JetAuthenticationCardLogo, JetAuthenticationCardLogo,
JetButton, JetButton,
JetInput, JetInput,
JetLabel, JetLabel,
JetValidationErrors, JetValidationErrors,
}, },
data() { data() {
return { return {
recovery: false, recovery: false,
form: this.$inertia.form({ form: this.$inertia.form({
code: '', code: '',
recovery_code: '', recovery_code: '',
}) }),
} };
}, },
methods: { methods: {
toggleRecovery() { toggleRecovery() {
this.recovery ^= true this.recovery ^= true;
this.$nextTick(() => { this.$nextTick(() => {
if (this.recovery) { if (this.recovery) {
this.$refs.recovery_code.focus() this.$refs.recovery_code.focus();
this.form.code = ''; this.form.code = '';
} else { } else {
this.$refs.code.focus() this.$refs.code.focus();
this.form.recovery_code = '' this.form.recovery_code = '';
}
})
},
submit() {
this.form.post(this.route('two-factor.login'))
}
} }
} });
},
submit() {
this.form.post(this.route('two-factor.login'));
},
},
};
</script> </script>

View File

@ -25,37 +25,37 @@
</template> </template>
<script> <script>
import JetAuthenticationCard from '@/Jetstream/AuthenticationCard' import JetAuthenticationCard from '@/Jetstream/AuthenticationCard';
import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo' import JetAuthenticationCardLogo from '@/Jetstream/AuthenticationCardLogo';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
export default { export default {
components: { components: {
JetAuthenticationCard, JetAuthenticationCard,
JetAuthenticationCardLogo, JetAuthenticationCardLogo,
JetButton, JetButton,
}, },
props: { props: {
status: String status: String,
}, },
data() { data() {
return { return {
form: this.$inertia.form() form: this.$inertia.form(),
} };
}, },
methods: { methods: {
submit() { submit() {
this.form.post(this.route('verification.send')) this.form.post(this.route('verification.send'));
}, },
}, },
computed: { computed: {
verificationLinkSent() { verificationLinkSent() {
return this.status === 'verification-link-sent'; return this.status === 'verification-link-sent';
} },
} },
} };
</script> </script>

View File

@ -27,35 +27,35 @@
</template> </template>
<script> <script>
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetActionMessage from '@/Jetstream/ActionMessage' import JetActionMessage from '@/Jetstream/ActionMessage';
import JetFormSection from '@/Jetstream/FormSection' import JetFormSection from '@/Jetstream/FormSection';
import CarFormFields from '@/Pages/Cars/Components/CarFormFields.vue' import CarFormFields from '@/Pages/Cars/Components/CarFormFields.vue';
import { useForm } from '@inertiajs/inertia-vue3' import { useForm } from '@inertiajs/inertia-vue3';
export default { export default {
components: { components: {
JetButton, JetButton,
JetFormSection, JetFormSection,
JetActionMessage, JetActionMessage,
CarFormFields, CarFormFields,
},
props: {
data: Object,
brands: Array,
meta: Object,
brand: Object,
car_model: Object,
},
data() {
return {
form: useForm(this.meta.form_name, this.data),
};
},
methods: {
submitForm() {
this.form.submit(this.meta.method, this.meta.route);
}, },
props: { },
data: Object, };
brands: Array, </script>
meta: Object,
brand: Object,
car_model: Object,
},
data() {
return {
form: useForm(this.meta.form_name, this.data),
}
},
methods: {
submitForm() {
this.form.submit(this.meta.method, this.meta.route);
},
}
}
</script>

View File

@ -81,110 +81,110 @@
</template> </template>
<script> <script>
import JetLabel from '@/Jetstream/Label.vue' import JetLabel from '@/Jetstream/Label.vue';
import JetInput from '@/Jetstream/Input.vue' import JetInput from '@/Jetstream/Input.vue';
import JetActionMessage from '@/Jetstream/ActionMessage' import JetActionMessage from '@/Jetstream/ActionMessage';
import JetInputError from '@/Jetstream/InputError' import JetInputError from '@/Jetstream/InputError';
import Multiselect from 'vue-multiselect' import Multiselect from 'vue-multiselect';
import Datepicker from 'vue3-datepicker' import Datepicker from 'vue3-datepicker';
import CurrencyInput from '@/Components/CurrencyInput' import CurrencyInput from '@/Components/CurrencyInput';
export default { export default {
components: { components: {
JetLabel, JetLabel,
JetInput, JetInput,
JetInputError, JetInputError,
JetActionMessage, JetActionMessage,
Multiselect, Multiselect,
Datepicker, Datepicker,
CurrencyInput, CurrencyInput,
},
props: {
form: Object,
brands: Array,
brand: Object,
car_model: Object,
},
data() {
return {
brandSearch: null,
modelSearch: null,
carModels: [],
brandSelection: this.brand,
car_modelSelection: this.car_model,
currencyOptions: {
currency: 'CHF',
locale: 'de-CH',
exportValueAsInteger: true,
hideGroupingSeparatorOnFocus: false,
precision: 0,
currencyDisplay: 'hidden',
},
};
},
methods: {
updateBrand(brand) {
if (brand) {
this.brand.id = brand.id;
this.brand.name = brand.name;
this.brand.models = brand.models;
} else {
this.brand.id = null;
this.brand.name = null;
this.brand.models = [];
}
this.updateCarModelsList(brand);
}, },
props: { updateCarModel(car_model) {
form: Object, if (car_model) {
brands: Array, this.car_model.id = car_model.id;
brand: Object, this.car_model.name = car_model.name;
car_model: Object, this.form.car_model_id = car_model.id;
} else {
this.car_model.id = null;
this.car_model.name = null;
this.form.car_model_id = null;
}
}, },
data() { updateCarModelsList(brand) {
return { this.carModels = brand.models ?? [];
brandSearch: null, this.car_modelSelection = null;
modelSearch: null, this.updateCarModel(null);
carModels: [],
brandSelection: this.brand,
car_modelSelection: this.car_model,
currencyOptions: {
currency: 'CHF',
locale: 'de-CH',
exportValueAsInteger: true,
hideGroupingSeparatorOnFocus: false,
precision: 0,
currencyDisplay: 'hidden',
},
}
}, },
methods: { updateBrandSearch(searchQuery, id) {
updateBrand(brand) { this.brandSearch = searchQuery;
if (brand) {
this.brand.id = brand.id;
this.brand.name = brand.name;
this.brand.models = brand.models;
} else {
this.brand.id = null;
this.brand.name = null;
this.brand.models = [];
}
this.updateCarModelsList(brand);
},
updateCarModel(car_model) {
if (car_model) {
this.car_model.id = car_model.id;
this.car_model.name = car_model.name;
this.form.car_model_id = car_model.id;
} else {
this.car_model.id = null;
this.car_model.name = null;
this.form.car_model_id = null;
}
},
updateCarModelsList(brand) {
this.carModels = brand.models ?? [];
this.car_modelSelection = null;
this.updateCarModel(null);
},
updateBrandSearch(searchQuery, id) {
this.brandSearch = searchQuery
},
addBrand() {
axios.post(this.route('brands.store'), {
name: this.brandSearch,
}).then((response) => {
this.brandSelection = response.data;
this.brands.push(this.brandSelection);
this.updateBrand(this.brandSelection);
});
},
updateCarModelSearch(searchQuery, id) {
this.modelSearch = searchQuery
},
addCarModel() {
axios.post(this.route('models.store'), {
name: this.modelSearch,
brand_id: this.brand.id,
}).then((response) => {
this.car_modelSelection = response.data;
this.carModels.push(this.car_modelSelection);
this.updateCarModel(this.car_modelSelection);
});
},
}, },
mounted: function () { addBrand() {
this.$nextTick(function () { axios.post(this.route('brands.store'), {
this.brandSelection = this.brands.find(x => x.id === this.brand.id); name: this.brandSearch,
if (this.brandSelection) { }).then((response) => {
this.carModels = this.brandSelection.models ?? []; this.brandSelection = response.data;
} this.brands.push(this.brandSelection);
}) this.updateBrand(this.brandSelection);
});
}, },
} updateCarModelSearch(searchQuery, id) {
this.modelSearch = searchQuery;
},
addCarModel() {
axios.post(this.route('models.store'), {
name: this.modelSearch,
brand_id: this.brand.id,
}).then((response) => {
this.car_modelSelection = response.data;
this.carModels.push(this.car_modelSelection);
this.updateCarModel(this.car_modelSelection);
});
},
},
mounted() {
this.$nextTick(function () {
this.brandSelection = this.brands.find((x) => x.id === this.brand.id);
if (this.brandSelection) {
this.carModels = this.brandSelection.models ?? [];
}
});
},
};
</script> </script>
<style src="vue-multiselect/dist/vue-multiselect.css"></style> <style src="vue-multiselect/dist/vue-multiselect.css"></style>

View File

@ -6,7 +6,7 @@
Neues Auto erfassen Neues Auto erfassen
</h2> </h2>
</template> </template>
<div> <div>
<car-form :data="data" :meta="meta" :car_model="car_model" :brand="brand" :brands="brands"> <car-form :data="data" :meta="meta" :car_model="car_model" :brand="brand" :brands="brands">
<template #title>Neues Auto erfassen</template> <template #title>Neues Auto erfassen</template>
@ -17,44 +17,44 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import CarForm from './Components/CarForm.vue' import { ref } from 'vue';
import { ref } from 'vue' import CarForm from './Components/CarForm.vue';
export default { export default {
components: { components: {
Layout, Layout,
BreadCrumb, BreadCrumb,
CarForm, CarForm,
}, },
props: { props: {
brands: Array, brands: Array,
}, },
data() { data() {
return { return {
meta: { meta: {
form_name: 'CreateCar', form_name: 'CreateCar',
route: this.route('cars.store'), route: this.route('cars.store'),
method: 'post', method: 'post',
button_text: 'Auto speichern', button_text: 'Auto speichern',
on_success: 'Auto gespeichert', on_success: 'Auto gespeichert',
}, },
data: { data: {
id: null, id: null,
stammnummer: null, stammnummer: null,
vin: null, vin: null,
colour: null, colour: null,
car_model_id: null, car_model_id: null,
initial_date: ref(new Date()), initial_date: ref(new Date()),
last_check_date: ref(new Date()), last_check_date: ref(new Date()),
kilometers: null, kilometers: null,
known_damage: null, known_damage: null,
notes: null, notes: null,
}, },
brand: {id: null, name: null}, brand: { id: null, name: null },
car_model: {id: null, name: null}, car_model: { id: null, name: null },
} };
}, },
} };
</script> </script>

View File

@ -19,59 +19,59 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import CarForm from './Components/CarForm.vue' import { ref } from 'vue';
import { ref } from 'vue' import CarForm from './Components/CarForm.vue';
export default { export default {
components: { components: {
BreadCrumb, BreadCrumb,
Layout, Layout,
CarForm, CarForm,
}, },
props: { props: {
car: Object, car: Object,
brands: Array, brands: Array,
}, },
computed: { computed: {
name: function () { name() {
let out = ''; let out = '';
if (this.brand.name) { if (this.brand.name) {
out += this.brand.name; out += this.brand.name;
if (this.car_model.name) { if (this.car_model.name) {
out += ' ' + this.car_model.name; out += ` ${this.car_model.name}`;
}
}
return out;
},
},
data() {
return {
currentRoute: 'cars.edit',
meta: {
form_name: 'EditCar' + this.car.id,
route: this.route('cars.update', this.car.id),
method: 'put',
button_text: 'Änderungen speichern',
on_success: 'Änderungen gespeichert',
},
brand: this.car.brand,
car_model: this.car.car_model,
data: {
id: this.car.id,
stammnummer: this.car.stammnummer,
vin: this.car.vin,
initial_date: ref(new Date(this.car.initial_date)),
colour: this.car.colour,
notes: this.car.notes,
car_model_id: this.car.car_model.id,
last_check_date: ref(new Date(this.car.last_check_date)),
kilometers: this.car.kilometers,
known_damage: this.car.known_damage,
notes: this.car.notes,
},
} }
}
return out;
}, },
} },
</script> data() {
return {
currentRoute: 'cars.edit',
meta: {
form_name: `EditCar${this.car.id}`,
route: this.route('cars.update', this.car.id),
method: 'put',
button_text: 'Änderungen speichern',
on_success: 'Änderungen gespeichert',
},
brand: this.car.brand,
car_model: this.car.car_model,
data: {
id: this.car.id,
stammnummer: this.car.stammnummer,
vin: this.car.vin,
initial_date: ref(new Date(this.car.initial_date)),
colour: this.car.colour,
notes: this.car.notes,
car_model_id: this.car.car_model.id,
last_check_date: ref(new Date(this.car.last_check_date)),
kilometers: this.car.kilometers,
known_damage: this.car.known_damage,
notes: this.car.notes,
},
};
},
};
</script>

View File

@ -13,34 +13,34 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import SimpleTable from '@/Components/SimpleTable.vue' import SimpleTable from '@/Components/SimpleTable.vue';
export default { export default {
components: { components: {
BreadCrumb, BreadCrumb,
Layout, Layout,
SimpleTable, SimpleTable,
}, },
props: { props: {
filters: Object, filters: Object,
sort: Object, sort: Object,
cars: Object, cars: Object,
}, },
data() { data() {
return { return {
currentRoute: 'cars', currentRoute: 'cars',
columns: [ columns: [
{key: 'name', value: 'Name', sortable: true}, { key: 'name', value: 'Name', sortable: true },
{key: 'stammnummer', value: 'Stammummer', sortable: true}, { key: 'stammnummer', value: 'Stammummer', sortable: true },
{key: 'buy_contract.date', value: 'Einkaufsdatum', sortable: true}, { key: 'buy_contract.date', value: 'Einkaufsdatum', sortable: true },
{key: 'buy_contract.price', value: 'Einkaufspreis', sortable: true}, { key: 'buy_contract.price', value: 'Einkaufspreis', sortable: true },
{key: 'sell_contract.date', value: 'Verkaufssdatum', sortable: true}, { key: 'sell_contract.date', value: 'Verkaufssdatum', sortable: true },
{key: 'sell_contract.price', value: 'Verkaufspreis', sortable: true}, { key: 'sell_contract.price', value: 'Verkaufspreis', sortable: true },
{key: 'profit', value: 'Profit', sortable: true}, { key: 'profit', value: 'Profit', sortable: true },
], ],
} };
}, },
} };
</script> </script>

View File

@ -51,33 +51,33 @@
</template> </template>
<script> <script>
import ShowPage from '@/Components/ShowPage.vue' import ShowPage from '@/Components/ShowPage.vue';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import CarCard from '@/Components/CarCard.vue' import CarCard from '@/Components/CarCard.vue';
import BuyContractCard from '@/Components/BuyContractCard.vue' import BuyContractCard from '@/Components/BuyContractCard.vue';
import SellContractCard from '@/Components/SellContractCard.vue' import SellContractCard from '@/Components/SellContractCard.vue';
import EditButton from '@/Components/Buttons/EditButton.vue' import EditButton from '@/Components/Buttons/EditButton.vue';
import DeleteButton from '@/Components/Buttons/DeleteButton.vue' import DeleteButton from '@/Components/Buttons/DeleteButton.vue';
import RestoreButton from '@/Components/Buttons/RestoreButton.vue' import RestoreButton from '@/Components/Buttons/RestoreButton.vue';
export default { export default {
components: { components: {
ShowPage, ShowPage,
BreadCrumb, BreadCrumb,
CarCard, CarCard,
BuyContractCard, BuyContractCard,
SellContractCard, SellContractCard,
EditButton, EditButton,
DeleteButton, DeleteButton,
RestoreButton, RestoreButton,
}, },
props: { props: {
car: Object, car: Object,
}, },
data() { data() {
return { return {
currentRoute: 'cars.show', currentRoute: 'cars.show',
} };
}, },
} };
</script> </script>

View File

@ -13,34 +13,34 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import SimpleTable from '@/Components/SimpleTable.vue' import SimpleTable from '@/Components/SimpleTable.vue';
export default { export default {
components: { components: {
BreadCrumb, BreadCrumb,
Layout, Layout,
SimpleTable, SimpleTable,
}, },
props: { props: {
filters: Object, filters: Object,
sort: Object, sort: Object,
cars: Object, cars: Object,
}, },
data() { data() {
return { return {
currentRoute: 'cars.sold', currentRoute: 'cars.sold',
columns: [ columns: [
{key: 'name', value: 'Name', sortable: true}, { key: 'name', value: 'Name', sortable: true },
{key: 'stammnummer', value: 'Stammummer', sortable: true}, { key: 'stammnummer', value: 'Stammummer', sortable: true },
{key: 'buy_contract.date', value: 'Einkaufsdatum', sortable: true}, { key: 'buy_contract.date', value: 'Einkaufsdatum', sortable: true },
{key: 'buy_contract.price', value: 'Einkaufspreis', sortable: true}, { key: 'buy_contract.price', value: 'Einkaufspreis', sortable: true },
{key: 'sell_contract.date', value: 'Verkaufssdatum', sortable: true}, { key: 'sell_contract.date', value: 'Verkaufssdatum', sortable: true },
{key: 'sell_contract.price', value: 'Verkaufspreis', sortable: true}, { key: 'sell_contract.price', value: 'Verkaufspreis', sortable: true },
{key: 'profit', value: 'Profit', sortable: true}, { key: 'profit', value: 'Profit', sortable: true },
], ],
} };
}, },
} };
</script> </script>

View File

@ -13,32 +13,32 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import SimpleTable from '@/Components/SimpleTable.vue' import SimpleTable from '@/Components/SimpleTable.vue';
export default { export default {
components: { components: {
BreadCrumb, BreadCrumb,
Layout, Layout,
SimpleTable, SimpleTable,
}, },
props: { props: {
filters: Object, filters: Object,
sort: Object, sort: Object,
cars: Object, cars: Object,
}, },
data() { data() {
return { return {
currentRoute: 'cars.unsold', currentRoute: 'cars.unsold',
columns: [ columns: [
{key: 'name', value: 'Name', sortable: true}, { key: 'name', value: 'Name', sortable: true },
{key: 'stammnummer', value: 'Stammummer', sortable: true}, { key: 'stammnummer', value: 'Stammummer', sortable: true },
{key: 'initial_date', value: 'Inverkehrssetzung', sortable: true}, { key: 'initial_date', value: 'Inverkehrssetzung', sortable: true },
{key: 'buy_contract.date', value: 'Einkaufsdatum', sortable: true}, { key: 'buy_contract.date', value: 'Einkaufsdatum', sortable: true },
{key: 'buy_contract.price', value: 'Einkaufspreis', sortable: true}, { key: 'buy_contract.price', value: 'Einkaufspreis', sortable: true },
], ],
} };
}, },
} };
</script> </script>

View File

@ -13,9 +13,9 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import SimpleTable from '@/Components/SimpleTable.vue' import SimpleTable from '@/Components/SimpleTable.vue';
export default { export default {
components: { components: {
@ -32,13 +32,13 @@ export default {
return { return {
currentRoute: 'contacts.buyers', currentRoute: 'contacts.buyers',
columns: [ columns: [
{key: 'name', value: 'Name', sortable: true}, { key: 'name', value: 'Name', sortable: true },
{key: 'company', value: 'Firma', sortable: true}, { key: 'company', value: 'Firma', sortable: true },
{key: 'address', value: 'Adresse', sortable: true}, { key: 'address', value: 'Adresse', sortable: true },
{key: 'fullCity', value: 'Ort', sortable: true}, { key: 'fullCity', value: 'Ort', sortable: true },
{key: 'phone', value: 'Telefon'}, { key: 'phone', value: 'Telefon' },
], ],
} };
}, },
} };
</script> </script>

View File

@ -27,32 +27,32 @@
</template> </template>
<script> <script>
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetActionMessage from '@/Jetstream/ActionMessage' import JetActionMessage from '@/Jetstream/ActionMessage';
import JetFormSection from '@/Jetstream/FormSection' import JetFormSection from '@/Jetstream/FormSection';
import ContactFormFields from './ContactFormFields' import { useForm } from '@inertiajs/inertia-vue3';
import { useForm } from '@inertiajs/inertia-vue3' import ContactFormFields from './ContactFormFields';
export default { export default {
components: { components: {
JetButton, JetButton,
JetFormSection, JetFormSection,
JetActionMessage, JetActionMessage,
ContactFormFields, ContactFormFields,
},
props: {
data: Object,
meta: Object,
},
data() {
return {
form: useForm(this.meta.form_name, this.data),
};
},
methods: {
submitForm() {
this.form.submit(this.meta.method, this.meta.route);
}, },
props: { },
data: Object, };
meta: Object, </script>
},
data() {
return {
form: useForm(this.meta.form_name, this.data),
}
},
methods: {
submitForm() {
this.form.submit(this.meta.method, this.meta.route);
},
},
}
</script>

View File

@ -70,18 +70,18 @@
</template> </template>
<script> <script>
import JetLabel from '@/Jetstream/Label.vue' import JetLabel from '@/Jetstream/Label.vue';
import JetInput from '@/Jetstream/Input.vue' import JetInput from '@/Jetstream/Input.vue';
import JetInputError from '@/Jetstream/InputError' import JetInputError from '@/Jetstream/InputError';
export default { export default {
components: { components: {
JetLabel, JetLabel,
JetInput, JetInput,
JetInputError, JetInputError,
}, },
props: { props: {
form: Object, form: Object,
}, },
} };
</script> </script>

View File

@ -6,7 +6,7 @@
Neuen Kontakt erfassen Neuen Kontakt erfassen
</h2> </h2>
</template> </template>
<div> <div>
<contact-form :data="data" :meta="meta"> <contact-form :data="data" :meta="meta">
<template #title>Neuen Kontakt erfassen</template> <template #title>Neuen Kontakt erfassen</template>
@ -17,39 +17,39 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import ContactForm from './Components/ContactForm.vue' import ContactForm from './Components/ContactForm.vue';
export default { export default {
components: { components: {
Layout, Layout,
BreadCrumb, BreadCrumb,
ContactForm, ContactForm,
}, },
data() { data() {
return { return {
meta: { meta: {
form_name: 'CreateContact', form_name: 'CreateContact',
route: this.route('contacts.store'), route: this.route('contacts.store'),
method: 'post', method: 'post',
button_text: 'Kontakt speichern', button_text: 'Kontakt speichern',
on_success: 'Kontakt gespeichert', on_success: 'Kontakt gespeichert',
}, },
data: { data: {
id: null, id: null,
firstname: null, firstname: null,
lastname: null, lastname: null,
company: null, company: null,
email: null, email: null,
phone: null, phone: null,
address: null, address: null,
zip: null, zip: null,
city: null, city: null,
country: 'CH', country: 'CH',
notes: null, notes: null,
}, },
} };
}, },
} };
</script> </script>

View File

@ -7,7 +7,7 @@
bearbeiten bearbeiten
</h2> </h2>
</template> </template>
<div> <div>
<contact-form :data="data" :meta="meta"> <contact-form :data="data" :meta="meta">
<template #title>Kontaktinformationen</template> <template #title>Kontaktinformationen</template>
@ -20,43 +20,43 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import ContactForm from './Components/ContactForm.vue' import ContactForm from './Components/ContactForm.vue';
export default { export default {
components: { components: {
Layout, Layout,
BreadCrumb, BreadCrumb,
ContactForm, ContactForm,
}, },
props: { props: {
contact: Object, contact: Object,
}, },
data() { data() {
return { return {
meta: { meta: {
form_name: 'EditContact' + this.contact.id, form_name: `EditContact${this.contact.id}`,
route: this.route('contacts.update', this.contact.id), route: this.route('contacts.update', this.contact.id),
method: 'put', method: 'put',
button_text: 'Änderungen speichern', button_text: 'Änderungen speichern',
on_success: 'Änderungen gespeichert', on_success: 'Änderungen gespeichert',
}, },
data: { data: {
id: this.contact.id, id: this.contact.id,
firstname: this.contact.firstname, firstname: this.contact.firstname,
lastname: this.contact.lastname, lastname: this.contact.lastname,
company: this.contact.company, company: this.contact.company,
email: this.contact.email, email: this.contact.email,
phone: this.contact.phone, phone: this.contact.phone,
address: this.contact.address, address: this.contact.address,
zip: this.contact.zip, zip: this.contact.zip,
city: this.contact.city, city: this.contact.city,
country: this.contact.country, country: this.contact.country,
notes: this.contact.notes, notes: this.contact.notes,
}, },
} };
}, },
} };
</script> </script>

View File

@ -13,9 +13,9 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import SimpleTable from '@/Components/SimpleTable.vue' import SimpleTable from '@/Components/SimpleTable.vue';
export default { export default {
components: { components: {
@ -32,13 +32,13 @@ export default {
return { return {
currentRoute: 'contacts', currentRoute: 'contacts',
columns: [ columns: [
{key: 'name', value: 'Name', sortable: true}, { key: 'name', value: 'Name', sortable: true },
{key: 'company', value: 'Firma', sortable: true}, { key: 'company', value: 'Firma', sortable: true },
{key: 'address', value: 'Adresse', sortable: true}, { key: 'address', value: 'Adresse', sortable: true },
{key: 'fullCity', value: 'Ort', sortable: true}, { key: 'fullCity', value: 'Ort', sortable: true },
{key: 'phone', value: 'Telefon'}, { key: 'phone', value: 'Telefon' },
], ],
} };
}, },
} };
</script> </script>

View File

@ -13,9 +13,9 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import SimpleTable from '@/Components/SimpleTable.vue' import SimpleTable from '@/Components/SimpleTable.vue';
export default { export default {
components: { components: {
@ -32,13 +32,13 @@ export default {
return { return {
currentRoute: 'contacts.sellers', currentRoute: 'contacts.sellers',
columns: [ columns: [
{key: 'name', value: 'Name', sortable: true}, { key: 'name', value: 'Name', sortable: true },
{key: 'company', value: 'Firma', sortable: true}, { key: 'company', value: 'Firma', sortable: true },
{key: 'address', value: 'Adresse', sortable: true}, { key: 'address', value: 'Adresse', sortable: true },
{key: 'fullCity', value: 'Ort', sortable: true}, { key: 'fullCity', value: 'Ort', sortable: true },
{key: 'phone', value: 'Telefon'}, { key: 'phone', value: 'Telefon' },
], ],
} };
}, },
} };
</script> </script>

View File

@ -19,7 +19,7 @@
gelöscht: {{ contact.deleted_at }} gelöscht: {{ contact.deleted_at }}
</div> </div>
</template> </template>
<template #more> <template #more>
<div class="sm:col-span-10 col-span-12"> <div class="sm:col-span-10 col-span-12">
<div class="whitespace-nowrap"> <div class="whitespace-nowrap">
@ -54,34 +54,34 @@
</template> </template>
<script> <script>
import ShowPage from '@/Components/ShowPage.vue' import ShowPage from '@/Components/ShowPage.vue';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import ContactCard from '@/Components/ContactCard.vue' import ContactCard from '@/Components/ContactCard.vue';
import BuyContractCard from '@/Components/BuyContractCard.vue' import BuyContractCard from '@/Components/BuyContractCard.vue';
import SellContractCard from '@/Components/SellContractCard.vue' import SellContractCard from '@/Components/SellContractCard.vue';
import EditButton from '@/Components/Buttons/EditButton.vue' import EditButton from '@/Components/Buttons/EditButton.vue';
import DeleteButton from '@/Components/Buttons/DeleteButton.vue' import DeleteButton from '@/Components/Buttons/DeleteButton.vue';
import RestoreButton from '@/Components/Buttons/RestoreButton.vue' import RestoreButton from '@/Components/Buttons/RestoreButton.vue';
export default { export default {
components: { components: {
ShowPage, ShowPage,
BreadCrumb, BreadCrumb,
ContactCard, ContactCard,
BuyContractCard, BuyContractCard,
SellContractCard, SellContractCard,
EditButton, EditButton,
DeleteButton, DeleteButton,
RestoreButton, RestoreButton,
}, },
props: { props: {
contact: Object, contact: Object,
}, },
data() { data() {
return { return {
currentRoute: 'contacts.show', currentRoute: 'contacts.show',
} };
}, },
} };
</script> </script>

View File

@ -47,47 +47,47 @@
</template> </template>
<script> <script>
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetLabel from '@/Jetstream/Label.vue' import JetLabel from '@/Jetstream/Label.vue';
import JetInput from '@/Jetstream/Input.vue' import JetInput from '@/Jetstream/Input.vue';
import JetActionMessage from '@/Jetstream/ActionMessage' import JetActionMessage from '@/Jetstream/ActionMessage';
import JetInputError from '@/Jetstream/InputError' import JetInputError from '@/Jetstream/InputError';
import JetFormSection from '@/Jetstream/FormSection' import JetFormSection from '@/Jetstream/FormSection';
import Datepicker from 'vue3-datepicker' import Datepicker from 'vue3-datepicker';
import { useForm } from '@inertiajs/inertia-vue3' import { useForm } from '@inertiajs/inertia-vue3';
import CurrencyInput from '@/Components/CurrencyInput' import CurrencyInput from '@/Components/CurrencyInput';
export default { export default {
components: { components: {
JetButton, JetButton,
JetFormSection, JetFormSection,
JetLabel, JetLabel,
JetInput, JetInput,
JetInputError, JetInputError,
JetActionMessage, JetActionMessage,
Datepicker, Datepicker,
CurrencyInput, CurrencyInput,
},
props: {
data: Object,
meta: Object,
insurance_types: Array,
},
data() {
return {
form: useForm(this.meta.form_name, this.data),
currencyOptions: {
currency: 'CHF',
locale: 'de-CH',
exportValueAsInteger: true,
hideGroupingSeparatorOnFocus: false,
},
};
},
methods: {
submitForm() {
this.form.submit(this.meta.method, this.meta.route);
}, },
props: { },
data: Object, };
meta: Object, </script>
insurance_types: Array,
},
data() {
return {
form: useForm(this.meta.form_name, this.data),
currencyOptions: {
currency: 'CHF',
locale: 'de-CH',
exportValueAsInteger: true,
hideGroupingSeparatorOnFocus: false,
},
}
},
methods: {
submitForm() {
this.form.submit(this.meta.method, this.meta.route);
},
},
}
</script>

View File

@ -10,7 +10,7 @@
Neuen {{ contractType }} erstellen Neuen {{ contractType }} erstellen
</h2> </h2>
</template> </template>
<div> <div>
<jet-form-section v-if="!car_first" :emptyBg="true" class="max-w-7xl mb-5"> <jet-form-section v-if="!car_first" :emptyBg="true" class="max-w-7xl mb-5">
<template #title> <template #title>
@ -54,61 +54,61 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import ContractForm from './Components/ContractForm.vue' import CarCard from '@/Components/CarCard.vue';
import CarCard from '@/Components/CarCard.vue' import ContactCard from '@/Components/ContactCard.vue';
import ContactCard from '@/Components/ContactCard.vue' import JetFormSection from '@/Jetstream/FormSection';
import JetFormSection from '@/Jetstream/FormSection' import { ref } from 'vue';
import { ref } from 'vue' import ContractForm from './Components/ContractForm.vue';
export default { export default {
components: { components: {
Layout, Layout,
BreadCrumb, BreadCrumb,
ContractForm, ContractForm,
CarCard, CarCard,
ContactCard, ContactCard,
JetFormSection, JetFormSection,
},
props: {
car: Object,
contact: Object,
type: String,
car_first: Boolean,
insurance_types: Array,
},
data() {
return {
meta: {
form_name: 'CreateContract',
route: this.route('contracts.store'),
method: 'post',
button_text: 'Vertrag speichern',
on_success: 'Vertrag gespeichert',
},
data: {
id: null,
date: ref(new Date()),
price: null,
type: this.type,
insurance_type: '0',
car_id: this.car.id,
contact_id: this.contact.id,
is_sell_contract: this.type == 'SellContract',
},
};
},
computed: {
contractType() {
return this.isSellContract ? 'Verkaufsvertrag' : 'Ankaufsvertrag';
}, },
props: { contactType() {
car: Object, return this.isSellContract ? 'Käufer' : 'Verkäufer';
contact: Object,
type: String,
car_first: Boolean,
insurance_types: Array,
}, },
data() { isSellContract() {
return { return this.type == 'SellContract';
meta: {
form_name: 'CreateContract',
route: this.route('contracts.store'),
method: 'post',
button_text: 'Vertrag speichern',
on_success: 'Vertrag gespeichert',
},
data: {
id: null,
date: ref(new Date()),
price: null,
type: this.type,
insurance_type: '0',
car_id: this.car.id,
contact_id: this.contact.id,
is_sell_contract: this.type == "SellContract",
},
}
}, },
computed: { },
contractType: function () { };
return this.isSellContract ? "Verkaufsvertrag" : "Ankaufsvertrag"; </script>
},
contactType: function () {
return this.isSellContract ? "Käufer" : "Verkäufer";
},
isSellContract: function () {
return this.type == "SellContract";
},
}
}
</script>

View File

@ -67,114 +67,113 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import ContactFormFields from '@/Pages/Contacts/Components/ContactFormFields.vue' import ContactFormFields from '@/Pages/Contacts/Components/ContactFormFields.vue';
import CarCard from '@/Components/CarCard.vue' import CarCard from '@/Components/CarCard.vue';
import ContactCard from '@/Components/ContactCard.vue' import ContactCard from '@/Components/ContactCard.vue';
import JetFormSection from '@/Jetstream/FormSection' import JetFormSection from '@/Jetstream/FormSection';
import Multiselect from 'vue-multiselect' import Multiselect from 'vue-multiselect';
import JetLabel from '@/Jetstream/Label.vue' import JetLabel from '@/Jetstream/Label.vue';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetActionMessage from '@/Jetstream/ActionMessage' import JetActionMessage from '@/Jetstream/ActionMessage';
export default { export default {
components: { components: {
Layout, Layout,
BreadCrumb, BreadCrumb,
CarCard, CarCard,
ContactCard, ContactCard,
JetFormSection, JetFormSection,
ContactFormFields, ContactFormFields,
Multiselect, Multiselect,
JetLabel, JetLabel,
JetButton, JetButton,
JetActionMessage, JetActionMessage,
},
props: {
car: Object,
contacts: Object,
type: String,
},
data() {
return {
contactsChoice: this.contacts,
contact: {
id: null,
firstname: null,
lastname: null,
company: null,
email: null,
phone: null,
address: null,
zip: null,
city: null,
country: null,
notes: null,
errors: {},
},
createContact: false,
};
},
computed: {
contractType() {
return this.isSellContract ? 'Verkaufsvertrag' : 'Ankaufsvertrag';
}, },
props: { contactType() {
car: Object, return this.isSellContract ? 'Käufer' : 'Verkäufer';
contacts: Object,
type: String,
}, },
data() { isSellContract() {
return { return this.type == 'SellContract';
contactsChoice: this.contacts,
contact: {
id: null,
firstname: null,
lastname: null,
company: null,
email: null,
phone: null,
address: null,
zip: null,
city: null,
country: null,
notes: null,
errors: {},
},
createContact: false,
}
}, },
computed: { emptyContact() {
contractType: function () { return {
return this.isSellContract ? "Verkaufsvertrag" : "Ankaufsvertrag"; id: null,
}, firstname: null,
contactType: function () { lastname: null,
return this.isSellContract ? "Käufer" : "Verkäufer"; company: null,
}, email: null,
isSellContract: function () { phone: null,
return this.type == "SellContract"; address: null,
}, zip: null,
emptyContact: function() { city: null,
return { country: null,
id: null, notes: null,
firstname: null, errors: {},
lastname: null, };
company: null,
email: null,
phone: null,
address: null,
zip: null,
city: null,
country: null,
notes: null,
errors: {},
};
},
}, },
methods: { },
nextPage() { methods: {
this.$inertia.get(route('contracts.create', { nextPage() {
type: this.isSellContract ? 1 : 0, this.$inertia.get(route('contracts.create', {
car: this.car.id, type: this.isSellContract ? 1 : 0,
contact: this.contact.id, car: this.car.id,
}), { preserveScroll: true, carFirst: true, }); contact: this.contact.id,
}, }), { preserveScroll: true, carFirst: true });
openContactForm() { },
this.createContact = true; openContactForm() {
this.contact = this.emptyContact; this.createContact = true;
}, this.contact = this.emptyContact;
submitCreateContactForm(e) { },
e.preventDefault(); submitCreateContactForm(e) {
axios.post(this.route('contacts.store_for_contract'), this.contact) e.preventDefault();
.then(res => { axios.post(this.route('contacts.store_for_contract'), this.contact)
this.contactsChoice.push(res.data); .then((res) => {
this.contact = res.data; this.contactsChoice.push(res.data);
this.createContact = false; this.contact = res.data;
}).catch(err => { this.createContact = false;
if (err.response) { }).catch((err) => {
let errors = err.response.data.errors; if (err.response) {
const { errors } = err.response.data;
Object.keys(errors).map(function(key, index) { Object.keys(errors).map((key, index) => {
errors[key] = errors[key].join(' '); errors[key] = errors[key].join(' ');
}); });
this.contact.errors = errors; this.contact.errors = errors;
} }
});
});
},
}, },
} },
};
</script> </script>
<style src="vue-multiselect/dist/vue-multiselect.css"></style> <style src="vue-multiselect/dist/vue-multiselect.css"></style>

View File

@ -67,115 +67,114 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import CarFormFields from '@/Pages/Cars/Components/CarFormFields.vue' import CarFormFields from '@/Pages/Cars/Components/CarFormFields.vue';
import CarCard from '@/Components/CarCard.vue' import CarCard from '@/Components/CarCard.vue';
import ContactCard from '@/Components/ContactCard.vue' import ContactCard from '@/Components/ContactCard.vue';
import JetFormSection from '@/Jetstream/FormSection' import JetFormSection from '@/Jetstream/FormSection';
import Multiselect from 'vue-multiselect' import Multiselect from 'vue-multiselect';
import JetLabel from '@/Jetstream/Label.vue' import JetLabel from '@/Jetstream/Label.vue';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetActionMessage from '@/Jetstream/ActionMessage' import JetActionMessage from '@/Jetstream/ActionMessage';
export default { export default {
components: { components: {
Layout, Layout,
BreadCrumb, BreadCrumb,
CarCard, CarCard,
ContactCard, ContactCard,
CarFormFields, CarFormFields,
JetFormSection, JetFormSection,
Multiselect, Multiselect,
JetLabel, JetLabel,
JetButton, JetButton,
JetActionMessage, JetActionMessage,
},
props: {
contact: Object,
cars: Object,
brands: Object,
type: String,
},
data() {
return {
carsChoice: this.cars,
car: {
id: null,
stammnummer: null,
vin: null,
colour: null,
car_model_id: null,
initial_date: null,
last_check_date: null,
kilometers: null,
known_damage: null,
notes: null,
errors: {},
},
brand: { id: null, name: null },
car_model: { id: null, name: null },
createCar: false,
};
},
computed: {
contractType() {
return this.isSellContract ? 'Verkaufsvertrag' : 'Ankaufsvertrag';
}, },
props: { contactType() {
contact: Object, return this.isSellContract ? 'Käufer' : 'Verkäufer';
cars: Object,
brands: Object,
type: String,
}, },
data() { isSellContract() {
return { return this.type == 'SellContract';
carsChoice: this.cars,
car: {
id: null,
stammnummer: null,
vin: null,
colour: null,
car_model_id: null,
initial_date: null,
last_check_date: null,
kilometers: null,
known_damage: null,
notes: null,
errors: {},
},
brand: {id: null, name: null},
car_model: {id: null, name: null},
createCar: false,
}
}, },
computed: { emptyCar() {
contractType: function () { return {
return this.isSellContract ? "Verkaufsvertrag" : "Ankaufsvertrag"; id: null,
}, stammnummer: null,
contactType: function () { vin: null,
return this.isSellContract ? "Käufer" : "Verkäufer"; colour: null,
}, car_model_id: null,
isSellContract: function () { initial_date: null,
return this.type == "SellContract"; last_check_date: null,
}, kilometers: null,
emptyCar: function() { known_damage: null,
return { notes: null,
id: null, errors: {},
stammnummer: null, };
vin: null,
colour: null,
car_model_id: null,
initial_date: null,
last_check_date: null,
kilometers: null,
known_damage: null,
notes: null,
errors: {},
};
},
}, },
methods: { },
nextPage() { methods: {
this.$inertia.get(route('contracts.create', { nextPage() {
type: this.isSellContract ? 1 : 0, this.$inertia.get(route('contracts.create', {
car: this.car.id, type: this.isSellContract ? 1 : 0,
contact: this.contact.id, car: this.car.id,
}), { preserveScroll: true }); contact: this.contact.id,
}, }), { preserveScroll: true });
openCarForm() { },
this.createCar = true; openCarForm() {
this.car = this.emptyCar; this.createCar = true;
}, this.car = this.emptyCar;
submitCreateCarForm(e) { },
e.preventDefault(); submitCreateCarForm(e) {
axios.post(this.route('cars.store_for_contract'), this.car) e.preventDefault();
.then(res => { axios.post(this.route('cars.store_for_contract'), this.car)
this.carsChoice.push(res.data); .then((res) => {
this.car = res.data; this.carsChoice.push(res.data);
this.createCar = false; this.car = res.data;
}).catch(err => { this.createCar = false;
if (err.response) { }).catch((err) => {
let errors = err.response.data.errors; if (err.response) {
const { errors } = err.response.data;
Object.keys(errors).map(function(key, index) { Object.keys(errors).map((key, index) => {
errors[key] = errors[key].join(' '); errors[key] = errors[key].join(' ');
}); });
this.car.errors = errors; this.car.errors = errors;
} }
});
});
},
}, },
} },
};
</script> </script>
<style src="vue-multiselect/dist/vue-multiselect.css"></style> <style src="vue-multiselect/dist/vue-multiselect.css"></style>

View File

@ -20,38 +20,38 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import ContractForm from './Components/ContractForm.vue' import { ref } from 'vue';
import { ref } from 'vue' import ContractForm from './Components/ContractForm.vue';
export default { export default {
components: { components: {
BreadCrumb, BreadCrumb,
Layout, Layout,
ContractForm, ContractForm,
}, },
props: { props: {
contract: Object, contract: Object,
insurance_types: Array, insurance_types: Array,
}, },
data() { data() {
return { return {
currentRoute: 'contracts.edit', currentRoute: 'contracts.edit',
meta: { meta: {
form_name: 'EditContract' + this.contract.id, form_name: `EditContract${this.contract.id}`,
route: this.route('contracts.update', this.contract.id), route: this.route('contracts.update', this.contract.id),
method: 'put', method: 'put',
button_text: 'Änderungen speichern', button_text: 'Änderungen speichern',
on_success: 'Änderungen gespeichert', on_success: 'Änderungen gespeichert',
}, },
data: { data: {
date: ref(new Date(this.contract.date)), date: ref(new Date(this.contract.date)),
price: this.contract.price, price: this.contract.price,
insurance_type: this.contract.insurance_type, insurance_type: this.contract.insurance_type,
is_sell_contract: this.contract.is_sell_contract, is_sell_contract: this.contract.is_sell_contract,
} },
} };
}, },
} };
</script> </script>

View File

@ -73,57 +73,56 @@
</template> </template>
<script> <script>
import ShowPage from '@/Components/ShowPage.vue' import ShowPage from '@/Components/ShowPage.vue';
import BreadCrumb from '@/Components/BreadCrumb.vue' import BreadCrumb from '@/Components/BreadCrumb.vue';
import SimpleTable from '@/Components/SimpleTable.vue' import SimpleTable from '@/Components/SimpleTable.vue';
import DeleteButton from '@/Components/Buttons/DeleteButton.vue' import DeleteButton from '@/Components/Buttons/DeleteButton.vue';
import RestoreButton from '@/Components/Buttons/RestoreButton.vue' import RestoreButton from '@/Components/Buttons/RestoreButton.vue';
import CarCard from '@/Components/CarCard.vue' import CarCard from '@/Components/CarCard.vue';
import PrintButton from '@/Components/Buttons/PrintButton.vue' import PrintButton from '@/Components/Buttons/PrintButton.vue';
import ContactCard from '@/Components/ContactCard.vue' import ContactCard from '@/Components/ContactCard.vue';
import EditButton from '@/Components/Buttons/EditButton.vue' import EditButton from '@/Components/Buttons/EditButton.vue';
import DocumentsView from '@/Components/Documents/View.vue' import DocumentsView from '@/Components/Documents/View.vue';
import PaymentsView from '@/Components/Payments/View.vue' import PaymentsView from '@/Components/Payments/View.vue';
export default { export default {
components: { components: {
BreadCrumb, BreadCrumb,
ShowPage, ShowPage,
SimpleTable, SimpleTable,
CarCard, CarCard,
DeleteButton, DeleteButton,
RestoreButton, RestoreButton,
PrintButton, PrintButton,
ContactCard, ContactCard,
EditButton, EditButton,
CarCard, CarCard,
DocumentsView, DocumentsView,
PaymentsView, PaymentsView,
},
props: {
contract: Object,
},
computed: {
contactTitle() {
return this.contract.is_sell_contract ? 'Käufer' : 'Verkäufer';
}, },
props: { },
contract: Object, data() {
}, return {
computed: { currentRoute: 'contracts.show',
contactTitle: function() { buyContractsColumns: [
return this.contract.is_sell_contract ? 'Käufer' : 'Verkäufer'; { key: 'contact', value: 'Verkäufer' },
} { key: 'date', value: 'Kaufdatum' },
}, { key: 'price', value: 'Kaufpreis' },
data() { ],
return { sellContractsColumns: [
currentRoute: 'contracts.show', { key: 'contact', value: 'Käufer' },
buyContractsColumns: [ { key: 'date', value: 'Verkaufsdatum' },
{key: 'contact', value: 'Verkäufer'}, { key: 'price', value: 'Verkaufspreis' },
{key: 'date', value: 'Kaufdatum'}, { key: 'insurance_type', value: 'Versicherungstyp' },
{key: 'price', value: 'Kaufpreis'}, ],
], };
sellContractsColumns: [ },
{key: 'contact', value: 'Käufer'}, };
{key: 'date', value: 'Verkaufsdatum'}, </script>
{key: 'price', value: 'Verkaufspreis'},
{key: 'insurance_type', value: 'Versicherungstyp'},
],
}
},
}
</script>

View File

@ -22,39 +22,39 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import SimpleTable from '@/Components/SimpleTable.vue' import SimpleTable from '@/Components/SimpleTable.vue';
import DashItem from '@/Components/Dashboard/DashItem.vue' import DashItem from '@/Components/Dashboard/DashItem.vue';
export default { export default {
components: { components: {
Layout, Layout,
SimpleTable, SimpleTable,
DashItem, DashItem,
}, },
props: { props: {
buy_contracts: Object, buy_contracts: Object,
sell_contracts: Object, sell_contracts: Object,
sold_this_year: Number, sold_this_year: Number,
bought_this_year: Number, bought_this_year: Number,
my_cars: Number, my_cars: Number,
}, },
data() { data() {
return { return {
currentRoute: 'cars', currentRoute: 'cars',
buyContractColumns: [ buyContractColumns: [
{key: 'date', value: 'Datum', sortable: false}, { key: 'date', value: 'Datum', sortable: false },
// {key: 'car', value: 'Auto', sortable: false}, // {key: 'car', value: 'Auto', sortable: false},
{key: 'contact', value: 'Verkäufer', sortable: false}, { key: 'contact', value: 'Verkäufer', sortable: false },
{key: 'price', value: 'Einkaufspreis', sortable: false}, { key: 'price', value: 'Einkaufspreis', sortable: false },
], ],
sellContractColumns: [ sellContractColumns: [
{key: 'date', value: 'Datum', sortable: false}, { key: 'date', value: 'Datum', sortable: false },
// {key: 'car', value: 'Auto', sortable: false}, // {key: 'car', value: 'Auto', sortable: false},
{key: 'contact', value: 'Käufer', sortable: false}, { key: 'contact', value: 'Käufer', sortable: false },
{key: 'price', value: 'Verkaufspreis', sortable: false}, { key: 'price', value: 'Verkaufspreis', sortable: false },
], ],
} };
}, },
} };
</script> </script>

View File

@ -53,54 +53,54 @@
</template> </template>
<script> <script>
import JetActionSection from '@/Jetstream/ActionSection' import JetActionSection from '@/Jetstream/ActionSection';
import JetDialogModal from '@/Jetstream/DialogModal' import JetDialogModal from '@/Jetstream/DialogModal';
import JetDangerButton from '@/Jetstream/DangerButton' import JetDangerButton from '@/Jetstream/DangerButton';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetInputError from '@/Jetstream/InputError' import JetInputError from '@/Jetstream/InputError';
import JetSecondaryButton from '@/Jetstream/SecondaryButton' import JetSecondaryButton from '@/Jetstream/SecondaryButton';
export default { export default {
components: { components: {
JetActionSection, JetActionSection,
JetDangerButton, JetDangerButton,
JetDialogModal, JetDialogModal,
JetInput, JetInput,
JetInputError, JetInputError,
JetSecondaryButton, JetSecondaryButton,
}, },
data() { data() {
return { return {
confirmingUserDeletion: false, confirmingUserDeletion: false,
form: this.$inertia.form({ form: this.$inertia.form({
password: '', password: '',
}) }),
} };
}, },
methods: { methods: {
confirmUserDeletion() { confirmUserDeletion() {
this.confirmingUserDeletion = true; this.confirmingUserDeletion = true;
setTimeout(() => this.$refs.password.focus(), 250) setTimeout(() => this.$refs.password.focus(), 250);
}, },
deleteUser() { deleteUser() {
this.form.delete(route('current-user.destroy'), { this.form.delete(route('current-user.destroy'), {
preserveScroll: true, preserveScroll: true,
onSuccess: () => this.closeModal(), onSuccess: () => this.closeModal(),
onError: () => this.$refs.password.focus(), onError: () => this.$refs.password.focus(),
onFinish: () => this.form.reset(), onFinish: () => this.form.reset(),
}) });
}, },
closeModal() { closeModal() {
this.confirmingUserDeletion = false this.confirmingUserDeletion = false;
this.form.reset() this.form.reset();
}, },
}, },
} };
</script> </script>

View File

@ -87,58 +87,58 @@
</template> </template>
<script> <script>
import JetActionMessage from '@/Jetstream/ActionMessage' import JetActionMessage from '@/Jetstream/ActionMessage';
import JetActionSection from '@/Jetstream/ActionSection' import JetActionSection from '@/Jetstream/ActionSection';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetDialogModal from '@/Jetstream/DialogModal' import JetDialogModal from '@/Jetstream/DialogModal';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetInputError from '@/Jetstream/InputError' import JetInputError from '@/Jetstream/InputError';
import JetSecondaryButton from '@/Jetstream/SecondaryButton' import JetSecondaryButton from '@/Jetstream/SecondaryButton';
export default { export default {
props: ['sessions'], props: ['sessions'],
components: { components: {
JetActionMessage, JetActionMessage,
JetActionSection, JetActionSection,
JetButton, JetButton,
JetDialogModal, JetDialogModal,
JetInput, JetInput,
JetInputError, JetInputError,
JetSecondaryButton, JetSecondaryButton,
}, },
data() { data() {
return { return {
confirmingLogout: false, confirmingLogout: false,
form: this.$inertia.form({ form: this.$inertia.form({
password: '', password: '',
}) }),
} };
}, },
methods: { methods: {
confirmLogout() { confirmLogout() {
this.confirmingLogout = true this.confirmingLogout = true;
setTimeout(() => this.$refs.password.focus(), 250) setTimeout(() => this.$refs.password.focus(), 250);
}, },
logoutOtherBrowserSessions() { logoutOtherBrowserSessions() {
this.form.delete(route('other-browser-sessions.destroy'), { this.form.delete(route('other-browser-sessions.destroy'), {
preserveScroll: true, preserveScroll: true,
onSuccess: () => this.closeModal(), onSuccess: () => this.closeModal(),
onError: () => this.$refs.password.focus(), onError: () => this.$refs.password.focus(),
onFinish: () => this.form.reset(), onFinish: () => this.form.reset(),
}) });
}, },
closeModal() { closeModal() {
this.confirmingLogout = false this.confirmingLogout = false;
this.form.reset() this.form.reset();
}, },
}, },
} };
</script> </script>

View File

@ -39,25 +39,25 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import DeleteUserForm from './DeleteUserForm' import JetSectionBorder from '@/Jetstream/SectionBorder';
import JetSectionBorder from '@/Jetstream/SectionBorder' import DeleteUserForm from './DeleteUserForm';
import LogoutOtherBrowserSessionsForm from './LogoutOtherBrowserSessionsForm' import LogoutOtherBrowserSessionsForm from './LogoutOtherBrowserSessionsForm';
import TwoFactorAuthenticationForm from './TwoFactorAuthenticationForm' import TwoFactorAuthenticationForm from './TwoFactorAuthenticationForm';
import UpdatePasswordForm from './UpdatePasswordForm' import UpdatePasswordForm from './UpdatePasswordForm';
import UpdateProfileInformationForm from './UpdateProfileInformationForm' import UpdateProfileInformationForm from './UpdateProfileInformationForm';
export default { export default {
props: ['sessions'], props: ['sessions'],
components: { components: {
Layout, Layout,
DeleteUserForm, DeleteUserForm,
JetSectionBorder, JetSectionBorder,
LogoutOtherBrowserSessionsForm, LogoutOtherBrowserSessionsForm,
TwoFactorAuthenticationForm, TwoFactorAuthenticationForm,
UpdatePasswordForm, UpdatePasswordForm,
UpdateProfileInformationForm, UpdateProfileInformationForm,
}, },
} };
</script> </script>

View File

@ -87,80 +87,80 @@
</template> </template>
<script> <script>
import JetActionSection from '@/Jetstream/ActionSection' import JetActionSection from '@/Jetstream/ActionSection';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetConfirmsPassword from '@/Jetstream/ConfirmsPassword' import JetConfirmsPassword from '@/Jetstream/ConfirmsPassword';
import JetDangerButton from '@/Jetstream/DangerButton' import JetDangerButton from '@/Jetstream/DangerButton';
import JetSecondaryButton from '@/Jetstream/SecondaryButton' import JetSecondaryButton from '@/Jetstream/SecondaryButton';
export default { export default {
components: { components: {
JetActionSection, JetActionSection,
JetButton, JetButton,
JetConfirmsPassword, JetConfirmsPassword,
JetDangerButton, JetDangerButton,
JetSecondaryButton, JetSecondaryButton,
}, },
data() { data() {
return { return {
enabling: false, enabling: false,
disabling: false, disabling: false,
qrCode: null, qrCode: null,
recoveryCodes: [], recoveryCodes: [],
} };
}, },
methods: { methods: {
enableTwoFactorAuthentication() { enableTwoFactorAuthentication() {
this.enabling = true this.enabling = true;
this.$inertia.post('/user/two-factor-authentication', {}, { this.$inertia.post('/user/two-factor-authentication', {}, {
preserveScroll: true, preserveScroll: true,
onSuccess: () => Promise.all([ onSuccess: () => Promise.all([
this.showQrCode(), this.showQrCode(),
this.showRecoveryCodes(), this.showRecoveryCodes(),
]), ]),
onFinish: () => (this.enabling = false), onFinish: () => (this.enabling = false),
}) });
}, },
showQrCode() { showQrCode() {
return axios.get('/user/two-factor-qr-code') return axios.get('/user/two-factor-qr-code')
.then(response => { .then((response) => {
this.qrCode = response.data.svg this.qrCode = response.data.svg;
}) });
}, },
showRecoveryCodes() { showRecoveryCodes() {
return axios.get('/user/two-factor-recovery-codes') return axios.get('/user/two-factor-recovery-codes')
.then(response => { .then((response) => {
this.recoveryCodes = response.data this.recoveryCodes = response.data;
}) });
}, },
regenerateRecoveryCodes() { regenerateRecoveryCodes() {
axios.post('/user/two-factor-recovery-codes') axios.post('/user/two-factor-recovery-codes')
.then(response => { .then((response) => {
this.showRecoveryCodes() this.showRecoveryCodes();
}) });
}, },
disableTwoFactorAuthentication() { disableTwoFactorAuthentication() {
this.disabling = true this.disabling = true;
this.$inertia.delete('/user/two-factor-authentication', { this.$inertia.delete('/user/two-factor-authentication', {
preserveScroll: true, preserveScroll: true,
onSuccess: () => (this.disabling = false), onSuccess: () => (this.disabling = false),
}) });
}, },
}, },
computed: { computed: {
twoFactorEnabled() { twoFactorEnabled() {
return ! this.enabling && this.$page.props.user.two_factor_enabled return !this.enabling && this.$page.props.user.two_factor_enabled;
} },
} },
} };
</script> </script>

View File

@ -41,52 +41,52 @@
</template> </template>
<script> <script>
import JetActionMessage from '@/Jetstream/ActionMessage' import JetActionMessage from '@/Jetstream/ActionMessage';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetFormSection from '@/Jetstream/FormSection' import JetFormSection from '@/Jetstream/FormSection';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetInputError from '@/Jetstream/InputError' import JetInputError from '@/Jetstream/InputError';
import JetLabel from '@/Jetstream/Label' import JetLabel from '@/Jetstream/Label';
export default { export default {
components: { components: {
JetActionMessage, JetActionMessage,
JetButton, JetButton,
JetFormSection, JetFormSection,
JetInput, JetInput,
JetInputError, JetInputError,
JetLabel, JetLabel,
},
data() {
return {
form: this.$inertia.form({
current_password: '',
password: '',
password_confirmation: '',
}),
};
},
methods: {
updatePassword() {
this.form.put(route('user-password.update'), {
errorBag: 'updatePassword',
preserveScroll: true,
onSuccess: () => this.form.reset(),
onError: () => {
if (this.form.errors.password) {
this.form.reset('password', 'password_confirmation');
this.$refs.password.focus();
}
if (this.form.errors.current_password) {
this.form.reset('current_password');
this.$refs.current_password.focus();
}
}, },
});
data() { },
return { },
form: this.$inertia.form({ };
current_password: '',
password: '',
password_confirmation: '',
}),
}
},
methods: {
updatePassword() {
this.form.put(route('user-password.update'), {
errorBag: 'updatePassword',
preserveScroll: true,
onSuccess: () => this.form.reset(),
onError: () => {
if (this.form.errors.password) {
this.form.reset('password', 'password_confirmation')
this.$refs.password.focus()
}
if (this.form.errors.current_password) {
this.form.reset('current_password')
this.$refs.current_password.focus()
}
}
})
},
},
}
</script> </script>

View File

@ -69,72 +69,72 @@
</template> </template>
<script> <script>
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetFormSection from '@/Jetstream/FormSection' import JetFormSection from '@/Jetstream/FormSection';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetInputError from '@/Jetstream/InputError' import JetInputError from '@/Jetstream/InputError';
import JetLabel from '@/Jetstream/Label' import JetLabel from '@/Jetstream/Label';
import JetActionMessage from '@/Jetstream/ActionMessage' import JetActionMessage from '@/Jetstream/ActionMessage';
import JetSecondaryButton from '@/Jetstream/SecondaryButton' import JetSecondaryButton from '@/Jetstream/SecondaryButton';
export default { export default {
components: { components: {
JetActionMessage, JetActionMessage,
JetButton, JetButton,
JetFormSection, JetFormSection,
JetInput, JetInput,
JetInputError, JetInputError,
JetLabel, JetLabel,
JetSecondaryButton, JetSecondaryButton,
}, },
props: ['user'], props: ['user'],
data() { data() {
return { return {
form: this.$inertia.form({ form: this.$inertia.form({
_method: 'PUT', _method: 'PUT',
name: this.user.name, name: this.user.name,
email: this.user.email, email: this.user.email,
photo: null, photo: null,
}), }),
photoPreview: null, photoPreview: null,
} };
}, },
methods: { methods: {
updateProfileInformation() { updateProfileInformation() {
if (this.$refs.photo) { if (this.$refs.photo) {
this.form.photo = this.$refs.photo.files[0] this.form.photo = this.$refs.photo.files[0];
} }
this.form.post(route('user-profile-information.update'), { this.form.post(route('user-profile-information.update'), {
errorBag: 'updateProfileInformation', errorBag: 'updateProfileInformation',
preserveScroll: true preserveScroll: true,
}); });
}, },
selectNewPhoto() { selectNewPhoto() {
this.$refs.photo.click(); this.$refs.photo.click();
}, },
updatePhotoPreview() { updatePhotoPreview() {
const reader = new FileReader(); const reader = new FileReader();
reader.onload = (e) => { reader.onload = (e) => {
this.photoPreview = e.target.result; this.photoPreview = e.target.result;
}; };
reader.readAsDataURL(this.$refs.photo.files[0]); reader.readAsDataURL(this.$refs.photo.files[0]);
}, },
deletePhoto() { deletePhoto() {
this.$inertia.delete(route('current-user-photo.destroy'), { this.$inertia.delete(route('current-user-photo.destroy'), {
preserveScroll: true, preserveScroll: true,
onSuccess: () => (this.photoPreview = null), onSuccess: () => (this.photoPreview = null),
}); });
}, },
}, },
} };
</script> </script>

View File

@ -31,28 +31,28 @@
</template> </template>
<script> <script>
import Layout from '@/Layouts/Layout' import Layout from '@/Layouts/Layout';
import JetLabel from '@/Jetstream/Label.vue' import JetLabel from '@/Jetstream/Label.vue';
import JetFormSection from '@/Jetstream/FormSection' import JetFormSection from '@/Jetstream/FormSection';
export default { export default {
components: { components: {
Layout, Layout,
JetLabel, JetLabel,
JetFormSection, JetFormSection,
},
props: {
year: Number,
years: Array,
},
data() {
return {
};
},
computed: {
link() {
return route('reports.print', { year: this.year });
}, },
props: { },
year: Number, };
years: Array, </script>
},
data() {
return {
}
},
computed: {
link() {
return route('reports.print', {year: this.year});
},
},
}
</script>

View File

@ -15,13 +15,13 @@
</template> </template>
<script> <script>
import AppLayout from '@/Layouts/AppLayout' import AppLayout from '@/Layouts/AppLayout';
import CreateTeamForm from './CreateTeamForm' import CreateTeamForm from './CreateTeamForm';
export default { export default {
components: { components: {
AppLayout, AppLayout,
CreateTeamForm, CreateTeamForm,
}, },
} };
</script> </script>

View File

@ -38,36 +38,36 @@
</template> </template>
<script> <script>
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetFormSection from '@/Jetstream/FormSection' import JetFormSection from '@/Jetstream/FormSection';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetInputError from '@/Jetstream/InputError' import JetInputError from '@/Jetstream/InputError';
import JetLabel from '@/Jetstream/Label' import JetLabel from '@/Jetstream/Label';
export default { export default {
components: { components: {
JetButton, JetButton,
JetFormSection, JetFormSection,
JetInput, JetInput,
JetInputError, JetInputError,
JetLabel, JetLabel,
}, },
data() { data() {
return { return {
form: this.$inertia.form({ form: this.$inertia.form({
name: '', name: '',
}) }),
} };
}, },
methods: { methods: {
createTeam() { createTeam() {
this.form.post(route('teams.store'), { this.form.post(route('teams.store'), {
errorBag: 'createTeam', errorBag: 'createTeam',
preserveScroll: true preserveScroll: true,
}); });
}, },
}, },
} };
</script> </script>

View File

@ -44,40 +44,40 @@
</template> </template>
<script> <script>
import JetActionSection from '@/Jetstream/ActionSection' import JetActionSection from '@/Jetstream/ActionSection';
import JetConfirmationModal from '@/Jetstream/ConfirmationModal' import JetConfirmationModal from '@/Jetstream/ConfirmationModal';
import JetDangerButton from '@/Jetstream/DangerButton' import JetDangerButton from '@/Jetstream/DangerButton';
import JetSecondaryButton from '@/Jetstream/SecondaryButton' import JetSecondaryButton from '@/Jetstream/SecondaryButton';
export default { export default {
props: ['team'], props: ['team'],
components: { components: {
JetActionSection, JetActionSection,
JetConfirmationModal, JetConfirmationModal,
JetDangerButton, JetDangerButton,
JetSecondaryButton, JetSecondaryButton,
}, },
data() { data() {
return { return {
confirmingTeamDeletion: false, confirmingTeamDeletion: false,
deleting: false, deleting: false,
form: this.$inertia.form() form: this.$inertia.form(),
} };
}, },
methods: { methods: {
confirmTeamDeletion() { confirmTeamDeletion() {
this.confirmingTeamDeletion = true this.confirmingTeamDeletion = true;
}, },
deleteTeam() { deleteTeam() {
this.form.delete(route('teams.destroy', this.team), { this.form.delete(route('teams.destroy', this.team), {
errorBag: 'deleteTeam' errorBag: 'deleteTeam',
}); });
}, },
}, },
} };
</script> </script>

View File

@ -26,25 +26,25 @@
</template> </template>
<script> <script>
import TeamMemberManager from './TeamMemberManager' import AppLayout from '@/Layouts/AppLayout';
import AppLayout from '@/Layouts/AppLayout' import JetSectionBorder from '@/Jetstream/SectionBorder';
import DeleteTeamForm from './DeleteTeamForm' import TeamMemberManager from './TeamMemberManager';
import JetSectionBorder from '@/Jetstream/SectionBorder' import DeleteTeamForm from './DeleteTeamForm';
import UpdateTeamNameForm from './UpdateTeamNameForm' import UpdateTeamNameForm from './UpdateTeamNameForm';
export default { export default {
props: [ props: [
'team', 'team',
'availableRoles', 'availableRoles',
'permissions', 'permissions',
], ],
components: { components: {
AppLayout, AppLayout,
DeleteTeamForm, DeleteTeamForm,
JetSectionBorder, JetSectionBorder,
TeamMemberManager, TeamMemberManager,
UpdateTeamNameForm, UpdateTeamNameForm,
}, },
} };
</script> </script>

View File

@ -247,114 +247,114 @@
</template> </template>
<script> <script>
import JetActionMessage from '@/Jetstream/ActionMessage' import JetActionMessage from '@/Jetstream/ActionMessage';
import JetActionSection from '@/Jetstream/ActionSection' import JetActionSection from '@/Jetstream/ActionSection';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetConfirmationModal from '@/Jetstream/ConfirmationModal' import JetConfirmationModal from '@/Jetstream/ConfirmationModal';
import JetDangerButton from '@/Jetstream/DangerButton' import JetDangerButton from '@/Jetstream/DangerButton';
import JetDialogModal from '@/Jetstream/DialogModal' import JetDialogModal from '@/Jetstream/DialogModal';
import JetFormSection from '@/Jetstream/FormSection' import JetFormSection from '@/Jetstream/FormSection';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetInputError from '@/Jetstream/InputError' import JetInputError from '@/Jetstream/InputError';
import JetLabel from '@/Jetstream/Label' import JetLabel from '@/Jetstream/Label';
import JetSecondaryButton from '@/Jetstream/SecondaryButton' import JetSecondaryButton from '@/Jetstream/SecondaryButton';
import JetSectionBorder from '@/Jetstream/SectionBorder' import JetSectionBorder from '@/Jetstream/SectionBorder';
export default { export default {
components: { components: {
JetActionMessage, JetActionMessage,
JetActionSection, JetActionSection,
JetButton, JetButton,
JetConfirmationModal, JetConfirmationModal,
JetDangerButton, JetDangerButton,
JetDialogModal, JetDialogModal,
JetFormSection, JetFormSection,
JetInput, JetInput,
JetInputError, JetInputError,
JetLabel, JetLabel,
JetSecondaryButton, JetSecondaryButton,
JetSectionBorder, JetSectionBorder,
}, },
props: [ props: [
'team', 'team',
'availableRoles', 'availableRoles',
'userPermissions' 'userPermissions',
], ],
data() { data() {
return { return {
addTeamMemberForm: this.$inertia.form({ addTeamMemberForm: this.$inertia.form({
email: '', email: '',
role: null, role: null,
}), }),
updateRoleForm: this.$inertia.form({ updateRoleForm: this.$inertia.form({
role: null, role: null,
}), }),
leaveTeamForm: this.$inertia.form(), leaveTeamForm: this.$inertia.form(),
removeTeamMemberForm: this.$inertia.form(), removeTeamMemberForm: this.$inertia.form(),
currentlyManagingRole: false, currentlyManagingRole: false,
managingRoleFor: null, managingRoleFor: null,
confirmingLeavingTeam: false, confirmingLeavingTeam: false,
teamMemberBeingRemoved: null, teamMemberBeingRemoved: null,
} };
}, },
methods: { methods: {
addTeamMember() { addTeamMember() {
this.addTeamMemberForm.post(route('team-members.store', this.team), { this.addTeamMemberForm.post(route('team-members.store', this.team), {
errorBag: 'addTeamMember', errorBag: 'addTeamMember',
preserveScroll: true, preserveScroll: true,
onSuccess: () => this.addTeamMemberForm.reset(), onSuccess: () => this.addTeamMemberForm.reset(),
}); });
}, },
cancelTeamInvitation(invitation) { cancelTeamInvitation(invitation) {
this.$inertia.delete(route('team-invitations.destroy', invitation), { this.$inertia.delete(route('team-invitations.destroy', invitation), {
preserveScroll: true preserveScroll: true,
}); });
}, },
manageRole(teamMember) { manageRole(teamMember) {
this.managingRoleFor = teamMember this.managingRoleFor = teamMember;
this.updateRoleForm.role = teamMember.membership.role this.updateRoleForm.role = teamMember.membership.role;
this.currentlyManagingRole = true this.currentlyManagingRole = true;
}, },
updateRole() { updateRole() {
this.updateRoleForm.put(route('team-members.update', [this.team, this.managingRoleFor]), { this.updateRoleForm.put(route('team-members.update', [this.team, this.managingRoleFor]), {
preserveScroll: true, preserveScroll: true,
onSuccess: () => (this.currentlyManagingRole = false), onSuccess: () => (this.currentlyManagingRole = false),
}) });
}, },
confirmLeavingTeam() { confirmLeavingTeam() {
this.confirmingLeavingTeam = true this.confirmingLeavingTeam = true;
}, },
leaveTeam() { leaveTeam() {
this.leaveTeamForm.delete(route('team-members.destroy', [this.team, this.$page.props.user])) this.leaveTeamForm.delete(route('team-members.destroy', [this.team, this.$page.props.user]));
}, },
confirmTeamMemberRemoval(teamMember) { confirmTeamMemberRemoval(teamMember) {
this.teamMemberBeingRemoved = teamMember this.teamMemberBeingRemoved = teamMember;
}, },
removeTeamMember() { removeTeamMember() {
this.removeTeamMemberForm.delete(route('team-members.destroy', [this.team, this.teamMemberBeingRemoved]), { this.removeTeamMemberForm.delete(route('team-members.destroy', [this.team, this.teamMemberBeingRemoved]), {
errorBag: 'removeTeamMember', errorBag: 'removeTeamMember',
preserveScroll: true, preserveScroll: true,
preserveState: true, preserveState: true,
onSuccess: () => (this.teamMemberBeingRemoved = null), onSuccess: () => (this.teamMemberBeingRemoved = null),
}) });
}, },
displayableRole(role) { displayableRole(role) {
return this.availableRoles.find(r => r.key === role).name return this.availableRoles.find((r) => r.key === role).name;
}, },
}, },
} };
</script> </script>

View File

@ -50,40 +50,40 @@
</template> </template>
<script> <script>
import JetActionMessage from '@/Jetstream/ActionMessage' import JetActionMessage from '@/Jetstream/ActionMessage';
import JetButton from '@/Jetstream/Button' import JetButton from '@/Jetstream/Button';
import JetFormSection from '@/Jetstream/FormSection' import JetFormSection from '@/Jetstream/FormSection';
import JetInput from '@/Jetstream/Input' import JetInput from '@/Jetstream/Input';
import JetInputError from '@/Jetstream/InputError' import JetInputError from '@/Jetstream/InputError';
import JetLabel from '@/Jetstream/Label' import JetLabel from '@/Jetstream/Label';
export default { export default {
components: { components: {
JetActionMessage, JetActionMessage,
JetButton, JetButton,
JetFormSection, JetFormSection,
JetInput, JetInput,
JetInputError, JetInputError,
JetLabel, JetLabel,
}, },
props: ['team', 'permissions'], props: ['team', 'permissions'],
data() { data() {
return { return {
form: this.$inertia.form({ form: this.$inertia.form({
name: this.team.name, name: this.team.name,
}) }),
} };
}, },
methods: { methods: {
updateTeamName() { updateTeamName() {
this.form.put(route('teams.update', this.team), { this.form.put(route('teams.update', this.team), {
errorBag: 'updateTeamName', errorBag: 'updateTeamName',
preserveScroll: true preserveScroll: true,
}); });
}, },
}, },
} };
</script> </script>

75
resources/js/app.js vendored
View File

@ -1,56 +1,55 @@
require('./bootstrap');
// Import modules... // Import modules...
import { createApp, h } from 'vue'; import { createApp, h } from 'vue';
import { App as InertiaApp, plugin as InertiaPlugin } from '@inertiajs/inertia-vue3'; import { App as InertiaApp, plugin as InertiaPlugin } from '@inertiajs/inertia-vue3';
import { InertiaProgress } from '@inertiajs/progress'; import { InertiaProgress } from '@inertiajs/progress';
import Unicon from 'vue-unicons'; import Unicon from 'vue-unicons';
import { createStore } from 'vuex' import { createStore } from 'vuex';
import { uniChart, uniFileAlt, uniPalette, uniCalendarAlt, uniPlusCircle, uniMeh, uniUsersAlt, uniCarSideview, uniDashboard, uniSearch, uniFilter, uniFilterSlash, uniTrashAlt, uniPen, uniExclamationTriangle, uniMapMarker, uniPhone, uniEnvelope, uniFileDownload, uniArrowDown, uniArrowUp, uniArrowRight, uniAngleRight, uniAngleUp, uniAngleDown, uniAngleLeft, uniFileUploadAlt } from 'vue-unicons/dist/icons' import {
uniChart, uniFileAlt, uniPalette, uniCalendarAlt, uniPlusCircle, uniMeh, uniUsersAlt, uniCarSideview, uniDashboard, uniSearch, uniFilter, uniFilterSlash, uniTrashAlt, uniPen, uniExclamationTriangle, uniMapMarker, uniPhone, uniEnvelope, uniFileDownload, uniArrowDown, uniArrowUp, uniArrowRight, uniAngleRight, uniAngleUp, uniAngleDown, uniAngleLeft, uniFileUploadAlt,
} from 'vue-unicons/dist/icons';
Unicon.add([uniChart, uniFileAlt, uniPalette, uniCalendarAlt, uniPlusCircle, uniMeh, uniUsersAlt, uniCarSideview, uniDashboard, uniSearch, uniFilter, uniFilterSlash, uniTrashAlt, uniPen, uniExclamationTriangle, uniMapMarker, uniPhone, uniEnvelope, uniFileDownload, uniArrowDown, uniArrowUp, uniArrowRight, uniAngleRight, uniAngleUp, uniAngleDown, uniAngleLeft, uniFileUploadAlt]) require('./bootstrap');
Unicon.add([uniChart, uniFileAlt, uniPalette, uniCalendarAlt, uniPlusCircle, uniMeh, uniUsersAlt, uniCarSideview, uniDashboard, uniSearch, uniFilter, uniFilterSlash, uniTrashAlt, uniPen, uniExclamationTriangle, uniMapMarker, uniPhone, uniEnvelope, uniFileDownload, uniArrowDown, uniArrowUp, uniArrowRight, uniAngleRight, uniAngleUp, uniAngleDown, uniAngleLeft, uniFileUploadAlt]);
// Create a new store instance. // Create a new store instance.
const store = createStore({ const store = createStore({
state () { state() {
return { return {
sideBarOpen: false sideBarOpen: false,
} };
},
getters: {
sideBarOpen: (state) => state.sideBarOpen,
},
mutations: {
toggleSidebar(state) {
state.sideBarOpen = !state.sideBarOpen;
}, },
getters: { },
sideBarOpen: state => { actions: {
return state.sideBarOpen toggleSidebar(context) {
} context.commit('toggleSidebar');
}, },
mutations: { },
toggleSidebar (state) { });
state.sideBarOpen = !state.sideBarOpen
}
},
actions: {
toggleSidebar(context) {
context.commit('toggleSidebar')
}
}
})
const el = document.getElementById('app'); const el = document.getElementById('app');
createApp({ createApp({
render: () => render: () => h(InertiaApp, {
h(InertiaApp, { initialPage: JSON.parse(el.dataset.page),
initialPage: JSON.parse(el.dataset.page), resolveComponent: (name) => require(`./Pages/${name}`).default,
resolveComponent: (name) => require(`./Pages/${name}`).default, }),
}),
}) })
.mixin({ methods: { route } }) .mixin({ methods: { route } })
.use(InertiaPlugin) .use(InertiaPlugin)
.use(store) .use(store)
.use(Unicon, { .use(Unicon, {
fill: '#4B5563', fill: '#4B5563',
height: 32, height: 32,
width: 32 width: 32,
}) })
.mount(el); .mount(el);
InertiaProgress.init({ color: '#4B5563' }); InertiaProgress.init({ color: '#4B5563' });