@hostlink/nuxt-light 1.22.3 → 1.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,26 @@
1
+ declare const _default: {
2
+ name: string;
3
+ fields: {
4
+ name: {
5
+ label: string;
6
+ sortable: boolean;
7
+ searchable: boolean;
8
+ };
9
+ model: {
10
+ label: string;
11
+ sortable: boolean;
12
+ searchable: boolean;
13
+ };
14
+ type: {
15
+ label: string;
16
+ sortable: boolean;
17
+ searchable: boolean;
18
+ };
19
+ validation: {
20
+ label: string;
21
+ sortable: boolean;
22
+ searchable: boolean;
23
+ };
24
+ };
25
+ };
26
+ export default _default;
@@ -0,0 +1,25 @@
1
+ export default {
2
+ name: "CustomField",
3
+ fields: {
4
+ name: {
5
+ label: "Name",
6
+ sortable: true,
7
+ searchable: true
8
+ },
9
+ model: {
10
+ label: "Model",
11
+ sortable: true,
12
+ searchable: true
13
+ },
14
+ type: {
15
+ label: "Type",
16
+ sortable: true,
17
+ searchable: true
18
+ },
19
+ validation: {
20
+ label: "Validation",
21
+ sortable: true,
22
+ searchable: true
23
+ }
24
+ }
25
+ };
@@ -0,0 +1,64 @@
1
+ <script setup>
2
+ import { getObject, q } from "#imports"
3
+ import { ref } from "vue"
4
+
5
+ const obj = await getObject(["name", "model", "validation", "type", "label", "options", "default_value", "placeholder", "order", "help"]);
6
+ const types = [
7
+ { label: 'Text', value: 'text' },
8
+ { label: 'Textarea', value: 'textarea' },
9
+ { label: 'Select', value: 'select' },
10
+ { label: 'Date', value: 'date' },
11
+ { label: 'Time', value: 'time' }
12
+ ]
13
+
14
+ const { app } = await q({
15
+ app: {
16
+ customFieldModels: true
17
+ }
18
+ })
19
+ const up = (v) => {
20
+ console.log(v)
21
+
22
+ }
23
+ const v = ref("required")
24
+ </script>
25
+ <template>
26
+ <l-page>
27
+
28
+ <form-kit type="l-form" :value="obj" #default="{ value, node }">
29
+ <form-kit type="l-input" name="name" label="Name" validation="required" />
30
+
31
+ <form-kit type="l-select" name="model" label="Model" :options="app.customFieldModels"
32
+ validation="required" />
33
+
34
+ <form-kit type="l-select" name="type" label="Type" :options="types" validation="required" />
35
+
36
+ <form-kit type="hidden" name="validation" />
37
+ <l-validation-input v-model="value.validation" @update:model-value="node.at('validation').input($event)"
38
+ :type="value.type" />
39
+
40
+
41
+ <form-kit type="l-input" name="label" label="Label" validation="required" />
42
+ <form-kit type="hidden" name="options" />
43
+ <template v-if="value.type === 'select'">
44
+
45
+
46
+ <q-select label="Options" v-model="value.options" @update:model-value="node.at('options').input($event)"
47
+ use-input use-chips multiple hide-dropdown-icon input-debounce="0" new-value-mode="add-unique"
48
+ stack-label outlined placeholder="Press enter to add new option" :color="$light.color" />
49
+ </template>
50
+
51
+ <form-kit type="l-input" name="default_value" label="Default Value" />
52
+
53
+ <form-kit type="l-input" name="placeholder" label="Placeholder" />
54
+
55
+ <form-kit type="l-input" input-type="number" name="order" label="Order" number />
56
+
57
+
58
+ <form-kit type="l-input" name="help" label="Help" />
59
+
60
+
61
+
62
+ </form-kit>
63
+ </l-page>
64
+ </template>
@@ -0,0 +1,43 @@
1
+ <script setup>
2
+ import { model, q } from '#imports'
3
+ import { resolveComponent } from 'vue';
4
+
5
+ const onRequest = async (request) => {
6
+ request.loadObjects("CustomField")
7
+ }
8
+
9
+
10
+ const { app } = await q({
11
+ app: {
12
+ customFieldModels: true
13
+ }
14
+ })
15
+
16
+ const columns = model("CustomField").columns({
17
+ name: true,
18
+ model: true,
19
+ type: true,
20
+ validation: true,
21
+
22
+ })
23
+
24
+ const addComponent = await resolveComponent('l-custom-field-add')
25
+
26
+ </script>
27
+ <template>
28
+
29
+ <l-page>
30
+ <p>
31
+ Customize your Models with your own fields. Make sure to use the below added fields on the address formats
32
+ on Customization settings page.
33
+ </p>
34
+
35
+
36
+ <l-table row-key="custom_field_id" @request-data="onRequest" :columns="columns" :add-component="addComponent" :add-component-props="{
37
+ models: app.customFieldModels
38
+ }" :actions="['edit', 'delete']">
39
+ </l-table>
40
+
41
+
42
+ </l-page>
43
+ </template>
@@ -0,0 +1,68 @@
1
+ <script setup>
2
+ import { m, api } from '#imports'
3
+ import { collect } from 'collect.js';
4
+ const { app } = await api.query({
5
+ app: {
6
+ permissions: true,
7
+ }
8
+ })
9
+
10
+ //remove *
11
+ app.permissions = app.permissions.filter(permission => permission != '*');
12
+
13
+ //app.permisssions is array of string like ['config.view', 'config.edit', 'config.delete','customer.view', 'customer.edit', 'customer.delete']
14
+
15
+ //group it by first part of string
16
+ const g = collect(app.permissions).groupBy(permission => permission.split('.')[0]).all()
17
+
18
+ //map g to [{ module: 'config', permissions: ['config.view', 'config.edit', 'config.delete'] }, { module: 'customer', permissions: ['customer.view', 'customer.edit', 'customer.delete'] }]
19
+
20
+ const x = Object.keys(g).map(module => {
21
+ return {
22
+ module,
23
+ permissions: collect(g[module]).map(permission => {
24
+ return {
25
+ label: permission,
26
+ value: permission
27
+ }
28
+ }).all()
29
+ }
30
+ })
31
+
32
+ const onSubmit = () => {
33
+
34
+ }
35
+
36
+ </script>
37
+ <template>
38
+ <l-page>
39
+
40
+ <form-kit type="l-form" @submit="onSubmit" :value="{
41
+ permissions: []
42
+ }" #default="{ value }">
43
+ <form-kit type="l-input" name="name" label="Name" validation="required" />
44
+ <q-separator />
45
+
46
+ <l-row>
47
+ <l-col md="3" v-for="module in x" :key="module.module">
48
+
49
+ <q-list>
50
+ <q-item dense>
51
+ <q-item-section>
52
+ <q-item-label>
53
+ {{ module.module }}
54
+ </q-item-label>
55
+ </q-item-section>
56
+ </q-item>
57
+ <q-separator />
58
+ <q-option-group dense :options="module.permissions" type="checkbox"
59
+ v-model="value.permissions" />
60
+ </q-list>
61
+
62
+ </l-col>
63
+ </l-row>
64
+
65
+ </form-kit>
66
+
67
+ </l-page>
68
+ </template>
@@ -16,7 +16,7 @@ const { data, refresh } = await useAsyncData('database', async () => {
16
16
  return system.database;
17
17
  })
18
18
 
19
- const SYSTEM_TABLES = ["Config", "EventLog", "MailLog", "Permission", "Role", "SystemValue", "Translate", "User", "UserLog", "UserRole", "MyFavorite"];
19
+ const SYSTEM_TABLES = ["Config", "EventLog", "MailLog", "Permission", "Role", "SystemValue", "Translate", "User", "UserLog", "UserRole", "MyFavorite", "CustomField"];
20
20
 
21
21
  const custom_tables = computed(() => {
22
22
  return data.value.tableStatus.filter(table => !SYSTEM_TABLES.includes(table.Name))
@@ -203,7 +203,7 @@ const truncatTable = async () => {
203
203
  </script>
204
204
  <template>
205
205
  <l-page title="Database">
206
-
206
+
207
207
  <l-card>
208
208
  <l-list>
209
209
  <l-item label="Version">{{ data.version }}</l-item>
@@ -79,6 +79,9 @@ const onSubmit = async (d) => {
79
79
  <l-system-setting-developer v-if="tab == 'developer'" v-model="obj" />
80
80
  <l-system-setting-forget-password v-if="tab == 'forget-password'" v-model="obj" />
81
81
  <l-system-setting-authentication v-if="tab == 'authentication'" v-bind="obj" @submit="onSubmit" />
82
+
83
+
84
+
82
85
  </template>
83
86
  </q-splitter>
84
87
  </l-card>
@@ -17,9 +17,11 @@ import TypeUserLog from "./types/UserLog.js";
17
17
  import TypeSystemValue from "./types/SystemValue.js";
18
18
  import TypeMailLog from "./types/MailLog.js";
19
19
  import TypeEventLog from "./types/EventLog.js";
20
+ import TypeCustomerField from "./model/CustomField.js";
20
21
  import { zhTW } from "@formkit/i18n";
21
22
  export default defineNuxtPlugin((nuxtApp) => {
22
23
  api.axios.defaults.baseURL = getApiBase();
24
+ api.models.create(TypeCustomerField.name, TypeCustomerField.fields);
23
25
  api.models.create("User", TypeUser);
24
26
  api.models.create("UserLog", TypeUserLog);
25
27
  api.models.create("SystemValue", TypeSystemValue);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostlink/nuxt-light",
3
- "version": "1.22.3",
3
+ "version": "1.23.0",
4
4
  "description": "HostLink Nuxt Light Framework",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@azure/msal-browser": "^3.26.1",
36
- "@formkit/drag-and-drop": "^0.1.6",
36
+ "@formkit/drag-and-drop": "^0.2.6",
37
37
  "@hostlink/light": "^2.5.2",
38
38
  "@nuxt/kit": "^3.7.4",
39
39
  "@nuxt/module-builder": "^0.8.3",