diff --git a/quasar.config.js b/quasar.config.js index 755e96bd3..3e98e3618 100644 --- a/quasar.config.js +++ b/quasar.config.js @@ -29,7 +29,8 @@ module.exports = configure(function (/* ctx */) { // app boot file (/src/boot) // --> boot files are part of "main.js" // https://v2.quasar.dev/quasar-cli/boot-files - boot: ['i18n', 'axios', 'vnDate', 'validations'], + // + boot: ['i18n', 'axios', 'vnDate','quasar','setDefaults', 'validations'], // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#css css: ['app.scss'], diff --git a/src/boot/qformMixin.js b/src/boot/qformMixin.js new file mode 100644 index 000000000..5e06497c5 --- /dev/null +++ b/src/boot/qformMixin.js @@ -0,0 +1,22 @@ +import { QForm } from 'quasar'; +import { getCurrentInstance } from 'vue'; + +export default { + inject: { QForm }, + component: { QForm }, + components: { QForm }, + extends: { QForm }, + mounted: function () { + const vm = getCurrentInstance(); + if (vm.type.name === 'QForm') + if (this.$el?.id !== 'searchbarForm') { + let that = this; + + document.addEventListener('keyup', function (evt) { + if (evt.keyCode === 13) { + that.onSubmit(); + } + }); + } + }, +}; diff --git a/src/boot/quasar.js b/src/boot/quasar.js new file mode 100644 index 000000000..a8d9b7ad9 --- /dev/null +++ b/src/boot/quasar.js @@ -0,0 +1,6 @@ +import { boot } from 'quasar/wrappers'; +import qFormMixin from './qformMixin'; + +export default boot(({ app }) => { + app.mixin(qFormMixin); +}); diff --git a/src/boot/setDefaults.js b/src/boot/setDefaults.js new file mode 100644 index 000000000..d54baa63e --- /dev/null +++ b/src/boot/setDefaults.js @@ -0,0 +1,41 @@ +import { QInput, QSelect } from "quasar"; +import { QTable} from "quasar"; +const setDefault = (component, key, value) => { + const prop = component.props[key]; + switch (typeof prop) { + case "object": + prop.default = value; + break; + case "function": + component.props[key] = { + type: prop, + default: value + }; + break; + case "undefined": + throw new Error("unknown prop: " + key); + default: + throw new Error("unhandled type: " + typeof prop); + } + }; + +QInput.props.outlined = { + type: QInput.props.outlined, + default: true +}; +QInput.props.dense = { + type: QInput.props.dense, + default: true +}; +QInput.props.stackLabel = { + type: QInput.props.stackLabel, + default: true +}; + +setDefault(QInput, "outlined", false); +setDefault(QTable, "gridHeader", true); +setDefault(QTable, "color", 'red-8'); +setDefault(QTable, "pagination", { rowsPerPage: 25 }); +setDefault(QTable, "rowKey", 'id'); +setDefault(QSelect,'optionValue','id'); +setDefault(QSelect,'optionLabel','name'); diff --git a/src/components/EditTableCellValueForm.vue b/src/components/EditTableCellValueForm.vue index d0561107e..f67dcc7ba 100644 --- a/src/components/EditTableCellValueForm.vue +++ b/src/components/EditTableCellValueForm.vue @@ -42,7 +42,7 @@ const onDataSaved = () => { closeForm(); }; -const submitData = async () => { +const onSubmit = async () => { try { isLoading.value = true; const rowsToEdit = $props.rows.map((row) => ({ id: row.id, itemFk: row.itemFk })); @@ -66,7 +66,7 @@ const closeForm = () => {