154 lines
4.4 KiB
JavaScript
154 lines
4.4 KiB
JavaScript
import Vue from "vue";
|
|
import ProductMixin from "./mixins/ProductMixin";
|
|
import Errors from "@admin/js/Errors";
|
|
import { generateSlug } from "@admin/js/functions";
|
|
|
|
Vue.prototype.route = route;
|
|
|
|
new Vue({
|
|
el: "#app",
|
|
|
|
mixins: [ProductMixin],
|
|
|
|
data: {
|
|
formSubmissionType: null,
|
|
form: {
|
|
brand_id: "",
|
|
tax_class_id: "",
|
|
is_active: true,
|
|
media: [],
|
|
is_virtual: false,
|
|
manage_stock: 0,
|
|
in_stock: 1,
|
|
special_price_type: "fixed",
|
|
meta: {},
|
|
attributes: [],
|
|
downloads: [],
|
|
variations: [],
|
|
variants: [],
|
|
options: [],
|
|
slug: null,
|
|
},
|
|
errors: new Errors(),
|
|
selectizeConfig: {
|
|
plugins: ["remove_button"],
|
|
},
|
|
searchableSelectizeConfig: {},
|
|
categoriesSelectizeConfig: {
|
|
plugins: ["remove_button"],
|
|
onItemAdd(value) {
|
|
this.getItem(value)[0].innerHTML = this.getItem(
|
|
value
|
|
)[0].innerHTML.replace(/¦––\s/g, "");
|
|
},
|
|
},
|
|
flatPickrConfig: {
|
|
mode: "single",
|
|
enableTime: true,
|
|
altInput: true,
|
|
},
|
|
},
|
|
|
|
created() {
|
|
this.setSearchableSelectizeConfig();
|
|
},
|
|
|
|
methods: {
|
|
setProductSlug(value) {
|
|
this.form.slug = generateSlug(value);
|
|
},
|
|
|
|
setFormDefaultData() {
|
|
this.form = {
|
|
brand_id: "",
|
|
tax_class_id: "",
|
|
is_active: true,
|
|
media: [],
|
|
is_virtual: false,
|
|
manage_stock: 0,
|
|
in_stock: 1,
|
|
special_price_type: "fixed",
|
|
meta: {},
|
|
attributes: [],
|
|
downloads: [],
|
|
variations: [],
|
|
variants: [],
|
|
options: [],
|
|
slug: null,
|
|
};
|
|
},
|
|
|
|
resetForm() {
|
|
this.setFormDefaultData();
|
|
tinyMCE.get("description").setContent("");
|
|
this.resetBulkEditVariantFields();
|
|
|
|
this.focusField({
|
|
selector: "#name",
|
|
});
|
|
},
|
|
|
|
submit({ submissionType }) {
|
|
this.formSubmissionType = submissionType;
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: route("admin.products.store", {
|
|
...((submissionType === "save_and_edit" ||
|
|
submissionType === "save_and_exit") && {
|
|
exit_flash: true,
|
|
}),
|
|
}),
|
|
data: this.transformData(this.form),
|
|
dataType: "json",
|
|
success: ({ message, product_id }) => {
|
|
if (submissionType === "save_and_edit") {
|
|
location.href = route(
|
|
"admin.products.edit",
|
|
product_id
|
|
);
|
|
|
|
return;
|
|
}
|
|
|
|
if (submissionType === "save_and_exit") {
|
|
location.href = route("admin.products.index");
|
|
|
|
return;
|
|
}
|
|
|
|
toaster(message, {
|
|
type: "success",
|
|
});
|
|
|
|
this.resetForm();
|
|
},
|
|
})
|
|
.catch((error) => {
|
|
this.formSubmissionType = null;
|
|
|
|
toaster(error.responseJSON.message, {
|
|
type: "default",
|
|
});
|
|
|
|
if (error.status === 422) {
|
|
this.errors.reset();
|
|
this.errors.record(error.responseJSON.errors);
|
|
this.scrollToFirstErrorField(this.$refs.form.elements);
|
|
|
|
return;
|
|
}
|
|
|
|
if (this.hasAnyVariant) {
|
|
this.regenerateVariationsAndVariantsUid();
|
|
}
|
|
})
|
|
.always(() => {
|
|
if (submissionType === "save") {
|
|
this.formSubmissionType = null;
|
|
}
|
|
});
|
|
},
|
|
},
|
|
});
|