waibu-db 1.1.8 → 1.1.9
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.
- package/bajoTemplate/partial/crud/_add-btns.html +15 -0
- package/bajoTemplate/partial/crud/_details-btns.html +17 -0
- package/bajoTemplate/partial/crud/_edit-btns.html +15 -0
- package/bajoTemplate/partial/crud/_form.html +1 -1
- package/bajoTemplate/partial/crud/_list-btns.html +16 -0
- package/bajoTemplate/partial/crud/add-handler.html +1 -15
- package/bajoTemplate/partial/crud/details-handler.html +1 -17
- package/bajoTemplate/partial/crud/edit-handler.html +1 -15
- package/bajoTemplate/partial/crud/list-handler.html +1 -16
- package/package.json +1 -1
- package/plugin/method/get-schema-ext.js +14 -7
- package/plugin/method/record/get.js +2 -2
- package/waibuBootstrap/theme/component/factory/echarts.js +1 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<c:grid-row gutter="2">
|
|
2
|
+
<c:grid-col col="6-md">
|
|
3
|
+
<c:wdb-btn-back />
|
|
4
|
+
</c:grid-col>
|
|
5
|
+
<c:grid-col col="6-md">
|
|
6
|
+
<c:div flex="justify-content:end-md align-items:center">
|
|
7
|
+
<c:btn type="reset" color="secondary" t:content="reset" />
|
|
8
|
+
<c:btn type="submit" color="primary" t:content="submit" margin="start-2"/>
|
|
9
|
+
</c:div>
|
|
10
|
+
</c:grid-col>
|
|
11
|
+
<c:grid-col col="12" margin="top-4">
|
|
12
|
+
<c:form-switch name="_addmore" t:label="addMoreAfterSubmit"/>
|
|
13
|
+
<c:form-switch name="_cloneprev" t:label="clonePrevious"/>
|
|
14
|
+
</c:grid-col>
|
|
15
|
+
</c:grid-row>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<c:grid-row gutter="2">
|
|
2
|
+
<c:grid-col col="6-lg">
|
|
3
|
+
<c:wdb-btn-back />
|
|
4
|
+
<% if (schema.disabled.includes('remove') && schema.disabled.includes('update')) { %>
|
|
5
|
+
<c:wdb-btn-export selector="#main-form" handler="details" launch-margin="start-1"/>
|
|
6
|
+
<% } else { %>
|
|
7
|
+
<c:btn-group margin="start-1">
|
|
8
|
+
<c:wdb-btn-edit />
|
|
9
|
+
<c:wdb-btn-clone />
|
|
10
|
+
<c:wdb-btn-export selector="#main-form" handler="details" launch-on-end/>
|
|
11
|
+
</c:btn-group>
|
|
12
|
+
<% } %>
|
|
13
|
+
</c:grid-col>
|
|
14
|
+
<c:grid-col col="6-lg" flex="justify-content:end-lg align-items:center">
|
|
15
|
+
<c:wdb-btn-delete/>
|
|
16
|
+
</c:grid-col>
|
|
17
|
+
</c:grid-row>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<c:grid-row gutter="2">
|
|
2
|
+
<c:grid-col col="6-lg">
|
|
3
|
+
<c:wdb-btn-back />
|
|
4
|
+
<c:btn-group margin="start-1">
|
|
5
|
+
<c:wdb-btn-details />
|
|
6
|
+
<c:wdb-btn-clone/>
|
|
7
|
+
<c:wdb-btn-export selector="#main-form" handler="edit" launch-on-end/>
|
|
8
|
+
</c:btn-group>
|
|
9
|
+
</c:grid-col>
|
|
10
|
+
<c:grid-col col="6-lg" flex="justify-content:end-lg align-items:center">
|
|
11
|
+
<c:wdb-btn-delete/>
|
|
12
|
+
<c:btn type="reset" color="secondary" t:content="reset" margin="start-2"/>
|
|
13
|
+
<c:btn type="submit" color="primary" t:content="submit" margin="start-2"/>
|
|
14
|
+
</c:grid-col>
|
|
15
|
+
</c:grid-row>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<% for (const l of schema.view.layout) { %>
|
|
2
|
-
<c:fieldset card <% if (l.name[0] !== '_') print('t:legend="' + l.name + '"') %> grid-gutter="2">
|
|
2
|
+
<c:fieldset <%= schema.view.card === false ? '' : 'card' %> <% if (l.name[0] !== '_') print('t:legend="' + l.name + '"') %> grid-gutter="2">
|
|
3
3
|
<% for (const w of l.widgets) {
|
|
4
4
|
const prop = _.find(schema.properties, { name: w.name })
|
|
5
5
|
const attr = []
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<c:grid-row gutter="3">
|
|
2
|
+
<c:grid-col col="4-lg">
|
|
3
|
+
<c:wdb-query />
|
|
4
|
+
</c:grid-col>
|
|
5
|
+
<c:grid-col col="8-lg" flex="justify-content:end-lg">
|
|
6
|
+
<c:btn-group margin="end-2">
|
|
7
|
+
<c:wdb-btn-add text="nowrap"/>
|
|
8
|
+
<c:wdb-btn-edit on-list menu="end"/>
|
|
9
|
+
</c:btn-group>
|
|
10
|
+
<c:wdb-btn-delete on-list margin="end-2" />
|
|
11
|
+
<c:btn-group>
|
|
12
|
+
<c:wdb-btn-export selector="#main-table" handler="list"/>
|
|
13
|
+
<c:wdb-btn-columns menu="end"/>
|
|
14
|
+
</c:btn-group>
|
|
15
|
+
</c:grid-col>
|
|
16
|
+
</c:grid-row>
|
|
@@ -1,19 +1,5 @@
|
|
|
1
1
|
<c:form>
|
|
2
2
|
<!-- include waibuDb.partial:/crud/_form.html -->
|
|
3
|
-
|
|
4
|
-
<c:grid-col col="6-md">
|
|
5
|
-
<c:wdb-btn-back />
|
|
6
|
-
</c:grid-col>
|
|
7
|
-
<c:grid-col col="6-md">
|
|
8
|
-
<c:div flex="justify-content:end-md align-items:center">
|
|
9
|
-
<c:btn type="reset" color="secondary" t:content="reset" />
|
|
10
|
-
<c:btn type="submit" color="primary" t:content="submit" margin="start-2"/>
|
|
11
|
-
</c:div>
|
|
12
|
-
</c:grid-col>
|
|
13
|
-
<c:grid-col col="12" margin="top-4">
|
|
14
|
-
<c:form-switch name="_addmore" t:label="addMoreAfterSubmit"/>
|
|
15
|
-
<c:form-switch name="_cloneprev" t:label="clonePrevious"/>
|
|
16
|
-
</c:grid-col>
|
|
17
|
-
</c:grid-row>
|
|
3
|
+
<!-- include waibuDb.partial:/crud/_add-btns.html -->
|
|
18
4
|
</c:form>
|
|
19
5
|
<!-- include waibuDb.partial:/crud/_addons.html -->
|
|
@@ -1,21 +1,5 @@
|
|
|
1
1
|
<c:div id="main-form">
|
|
2
2
|
<!-- include waibuDb.partial:/crud/_form.html -->
|
|
3
3
|
</c:div>
|
|
4
|
-
|
|
5
|
-
<c:grid-col col="6-lg">
|
|
6
|
-
<c:wdb-btn-back />
|
|
7
|
-
<% if (schema.disabled.includes('remove') && schema.disabled.includes('update')) { %>
|
|
8
|
-
<c:wdb-btn-export selector="#main-form" handler="details" launch-margin="start-1"/>
|
|
9
|
-
<% } else { %>
|
|
10
|
-
<c:btn-group margin="start-1">
|
|
11
|
-
<c:wdb-btn-edit />
|
|
12
|
-
<c:wdb-btn-clone />
|
|
13
|
-
<c:wdb-btn-export selector="#main-form" handler="details" launch-on-end/>
|
|
14
|
-
</c:btn-group>
|
|
15
|
-
<% } %>
|
|
16
|
-
</c:grid-col>
|
|
17
|
-
<c:grid-col col="6-lg" flex="justify-content:end-lg align-items:center">
|
|
18
|
-
<c:wdb-btn-delete/>
|
|
19
|
-
</c:grid-col>
|
|
20
|
-
</c:grid-row>
|
|
4
|
+
<!-- include waibuDb.partial:/crud/_details-btns.html -->
|
|
21
5
|
<!-- include waibuDb.partial:/crud/_addons.html -->
|
|
@@ -1,19 +1,5 @@
|
|
|
1
1
|
<c:form id="main-form">
|
|
2
2
|
<!-- include waibuDb.partial:/crud/_form.html -->
|
|
3
|
-
|
|
4
|
-
<c:grid-col col="6-lg">
|
|
5
|
-
<c:wdb-btn-back />
|
|
6
|
-
<c:btn-group margin="start-1">
|
|
7
|
-
<c:wdb-btn-details />
|
|
8
|
-
<c:wdb-btn-clone/>
|
|
9
|
-
<c:wdb-btn-export selector="#main-form" handler="edit" launch-on-end/>
|
|
10
|
-
</c:btn-group>
|
|
11
|
-
</c:grid-col>
|
|
12
|
-
<c:grid-col col="6-lg" flex="justify-content:end-lg align-items:center">
|
|
13
|
-
<c:wdb-btn-delete/>
|
|
14
|
-
<c:btn type="reset" color="secondary" t:content="reset" margin="start-2"/>
|
|
15
|
-
<c:btn type="submit" color="primary" t:content="submit" margin="start-2"/>
|
|
16
|
-
</c:grid-col>
|
|
17
|
-
</c:grid-row>
|
|
3
|
+
<!-- include waibuDb.partial:/crud/_edit-btns.html -->
|
|
18
4
|
</c:form>
|
|
19
5
|
<!-- include waibuDb.partial:/crud/_addons.html -->
|
|
@@ -1,19 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
<c:grid-col col="4-lg">
|
|
3
|
-
<c:wdb-query />
|
|
4
|
-
</c:grid-col>
|
|
5
|
-
<c:grid-col col="8-lg" flex="justify-content:end-lg">
|
|
6
|
-
<c:btn-group margin="end-2">
|
|
7
|
-
<c:wdb-btn-add text="nowrap"/>
|
|
8
|
-
<c:wdb-btn-edit on-list menu="end"/>
|
|
9
|
-
</c:btn-group>
|
|
10
|
-
<c:wdb-btn-delete on-list margin="end-2" />
|
|
11
|
-
<c:btn-group>
|
|
12
|
-
<c:wdb-btn-export selector="#main-table" handler="list"/>
|
|
13
|
-
<c:wdb-btn-columns menu="end"/>
|
|
14
|
-
</c:btn-group>
|
|
15
|
-
</c:grid-col>
|
|
16
|
-
</c:grid-row>
|
|
1
|
+
<!-- include waibuDb.partial:/crud/_list-btns.html -->
|
|
17
2
|
<c:wdb-table id="main-table" border body-divider strip responsive />
|
|
18
3
|
<!-- include waibuDb.partial:/crud/_list-footer.html -->
|
|
19
4
|
<!-- include waibuDb.partial:/crud/_addons.html -->
|
package/package.json
CHANGED
|
@@ -5,6 +5,7 @@ const defReadonly = ['id', 'createdAt', 'updatedAt']
|
|
|
5
5
|
function getCommons (action, schema, ext, opts = {}) {
|
|
6
6
|
const { map, get, set, without, uniq } = this.lib._
|
|
7
7
|
const label = get(ext, `view.${action}.label`, get(ext, 'common.label', {}))
|
|
8
|
+
const card = get(ext, `view.${action}.card`, get(ext, 'common.card', true))
|
|
8
9
|
const hidden = get(ext, `view.${action}.hidden`, get(ext, 'common.hidden', []))
|
|
9
10
|
hidden.push(...schema.hidden, ...(opts.hidden ?? []))
|
|
10
11
|
const allFields = without(map(schema.properties, 'name'), ...hidden)
|
|
@@ -18,7 +19,7 @@ function getCommons (action, schema, ext, opts = {}) {
|
|
|
18
19
|
}
|
|
19
20
|
fields = uniq(without(fields, ...hidden))
|
|
20
21
|
if (action !== 'add' && !fields.includes('id')) fields.unshift('id')
|
|
21
|
-
return { fields, allFields, label }
|
|
22
|
+
return { fields, allFields, label, card }
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
function autoLayout ({ action, schema, ext, layout, allWidgets }) {
|
|
@@ -37,15 +38,18 @@ function autoLayout ({ action, schema, ext, layout, allWidgets }) {
|
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
function customLayout ({ action, schema, ext, layout, allWidgets, readonly }) {
|
|
40
|
-
const { find, omit, merge, isString } = this.lib._
|
|
41
|
+
const { find, omit, merge, isString, isEmpty } = this.lib._
|
|
41
42
|
const items = [...layout]
|
|
42
43
|
layout.splice(0, layout.length)
|
|
43
44
|
for (const item of items) {
|
|
44
45
|
const widgets = []
|
|
45
46
|
for (let f of item.fields) {
|
|
46
47
|
if (isString(f)) {
|
|
47
|
-
const [name, col, label] = f.split(':')
|
|
48
|
-
f = { name
|
|
48
|
+
const [name, col, label, component] = f.split(':')
|
|
49
|
+
f = { name }
|
|
50
|
+
f.label = isEmpty(label) ? `field.${name}` : label
|
|
51
|
+
if (!isEmpty(col)) f.col = col
|
|
52
|
+
if (!isEmpty(component)) f.component = component
|
|
49
53
|
}
|
|
50
54
|
const widget = find(allWidgets, { name: f.name })
|
|
51
55
|
if (!widget && !f.component) continue
|
|
@@ -59,7 +63,7 @@ function customLayout ({ action, schema, ext, layout, allWidgets, readonly }) {
|
|
|
59
63
|
|
|
60
64
|
function applyLayout (action, schema, ext) {
|
|
61
65
|
const { set, get, isEmpty, map, find } = this.lib._
|
|
62
|
-
const { fields, label } = getCommons.call(this, action, schema, ext)
|
|
66
|
+
const { fields, label, card } = getCommons.call(this, action, schema, ext)
|
|
63
67
|
const layout = get(ext, `view.${action}.layout`, get(ext, 'common.layout', []))
|
|
64
68
|
const readonly = get(ext, `view.${action}.readonly`, get(ext, 'common.readonly', defReadonly))
|
|
65
69
|
const allWidgets = map(fields, f => {
|
|
@@ -91,6 +95,7 @@ function applyLayout (action, schema, ext) {
|
|
|
91
95
|
set(schema, 'view.layout', layout)
|
|
92
96
|
set(schema, 'view.fields', fields)
|
|
93
97
|
set(schema, 'view.label', label)
|
|
98
|
+
set(schema, 'view.card', card)
|
|
94
99
|
}
|
|
95
100
|
|
|
96
101
|
const handler = {
|
|
@@ -121,13 +126,15 @@ const handler = {
|
|
|
121
126
|
}
|
|
122
127
|
|
|
123
128
|
async function getSchemaExt (model, view, opts) {
|
|
124
|
-
const { readConfig } = this.app.bajo
|
|
129
|
+
const { readConfig, defaultsDeep } = this.app.bajo
|
|
125
130
|
const { getSchema } = this.app.dobo
|
|
126
131
|
const { pick } = this.lib._
|
|
127
132
|
|
|
128
133
|
let schema = getSchema(model)
|
|
129
134
|
const base = path.basename(schema.file, path.extname(schema.file))
|
|
130
|
-
|
|
135
|
+
let ext = await readConfig(`${schema.ns}:/waibuDb/schema/${base}.*`, { ignoreError: true })
|
|
136
|
+
const over = await readConfig(`main:/waibuDb/extend/${schema.ns}/schema/${base}.*`, { ignoreError: true })
|
|
137
|
+
ext = defaultsDeep(over, ext)
|
|
131
138
|
await handler[view].call(this, schema, ext, opts)
|
|
132
139
|
schema = pick(schema, ['name', 'properties', 'indexes', 'disabled', 'attachment', 'sortables', 'view'])
|
|
133
140
|
return { schema, ext }
|
|
@@ -2,8 +2,8 @@ import prepCrud from '../../../lib/prep-crud.js'
|
|
|
2
2
|
|
|
3
3
|
async function get ({ model, req, reply, id, options = {} }) {
|
|
4
4
|
const { recordFindOne } = this.app.dobo
|
|
5
|
-
const { name, filter, opts } = prepCrud.call(this, { model, req, reply, id, options, args: ['model', 'id'] })
|
|
6
|
-
filter.query = { $and: [filter.query ?? {}, { id:
|
|
5
|
+
const { name, recId, filter, opts } = prepCrud.call(this, { model, req, reply, id, options, args: ['model', 'id'] })
|
|
6
|
+
filter.query = { $and: [filter.query ?? {}, { id: recId }] }
|
|
7
7
|
const ret = await recordFindOne(name, filter, opts)
|
|
8
8
|
return ret
|
|
9
9
|
}
|