@mixd-id/web-scaffold 0.1.230406150 → 0.1.230406152
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/package.json +1 -1
- package/src/components/Alert.vue +3 -1
- package/src/components/Article.vue +10 -10
- package/src/components/ListView.vue +1 -2
- package/src/components/Modal.vue +1 -1
- package/src/utils/helpers.js +2 -0
- package/src/utils/listpage1.js +30 -46
- package/src/utils/listview.js +27 -41
- package/src/widgets/IconList.vue +1 -1
- package/src/widgets/WebPageBuilder.vue +2 -2
package/package.json
CHANGED
package/src/components/Alert.vue
CHANGED
|
@@ -131,7 +131,9 @@ export default{
|
|
|
131
131
|
this.alert
|
|
132
132
|
|
|
133
133
|
if(err.errors){
|
|
134
|
-
return Object.
|
|
134
|
+
return typeof err.errors === 'object' && Object.keys(err.errors).length > 0 ?
|
|
135
|
+
Object.values(err.errors).join("\n") :
|
|
136
|
+
err.errors
|
|
135
137
|
}
|
|
136
138
|
else if(err.message){
|
|
137
139
|
return err.message
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div :class="$style.comp">
|
|
3
|
-
<article :class="$style.article"
|
|
3
|
+
<article ref="article" :class="$style.article"
|
|
4
4
|
v-html="htmlText"
|
|
5
5
|
:contenteditable="editMode"
|
|
6
6
|
@input="onInput"
|
|
@@ -27,7 +27,7 @@ export default{
|
|
|
27
27
|
methods: {
|
|
28
28
|
|
|
29
29
|
getSelection(){
|
|
30
|
-
const { text = '', href = '', target = '' } = saveSelection(this.$
|
|
30
|
+
const { text = '', href = '', target = '' } = saveSelection(this.$refs.article)
|
|
31
31
|
return {
|
|
32
32
|
text,
|
|
33
33
|
href,
|
|
@@ -55,7 +55,7 @@ export default{
|
|
|
55
55
|
|
|
56
56
|
onClick(){
|
|
57
57
|
if(this.editMode){
|
|
58
|
-
let { element } = getSelection(this.$
|
|
58
|
+
let { element } = getSelection(this.$refs.article)
|
|
59
59
|
|
|
60
60
|
const table = this.closest(element, 'table')
|
|
61
61
|
|
|
@@ -81,7 +81,7 @@ export default{
|
|
|
81
81
|
uid: this.uid,
|
|
82
82
|
type: 'setProp',
|
|
83
83
|
value: {
|
|
84
|
-
htmlText: this.$
|
|
84
|
+
htmlText: this.$refs.article.innerHTML
|
|
85
85
|
}
|
|
86
86
|
}, '*')
|
|
87
87
|
},
|
|
@@ -100,7 +100,7 @@ export default{
|
|
|
100
100
|
|
|
101
101
|
addTableColumn(){
|
|
102
102
|
|
|
103
|
-
let { element } = getSelection(this.$
|
|
103
|
+
let { element } = getSelection(this.$refs.article)
|
|
104
104
|
if(element.nodeType !== 1)
|
|
105
105
|
element = element.parentNode
|
|
106
106
|
const table = this.closest(element, 'table')
|
|
@@ -129,7 +129,7 @@ export default{
|
|
|
129
129
|
|
|
130
130
|
addTableRow(){
|
|
131
131
|
|
|
132
|
-
let { element } = getSelection(this.$
|
|
132
|
+
let { element } = getSelection(this.$refs.article)
|
|
133
133
|
if(element.nodeType !== 1)
|
|
134
134
|
element = element.parentNode
|
|
135
135
|
const table = this.closest(element, 'table')
|
|
@@ -153,7 +153,7 @@ export default{
|
|
|
153
153
|
|
|
154
154
|
removeTableRow(){
|
|
155
155
|
|
|
156
|
-
let { element } = getSelection(this.$
|
|
156
|
+
let { element } = getSelection(this.$refs.article)
|
|
157
157
|
if(element.nodeType !== 1)
|
|
158
158
|
element = element.parentNode
|
|
159
159
|
const table = this.closest(element, 'table')
|
|
@@ -170,7 +170,7 @@ export default{
|
|
|
170
170
|
|
|
171
171
|
removeTableColumn(){
|
|
172
172
|
|
|
173
|
-
let { element } = getSelection(this.$
|
|
173
|
+
let { element } = getSelection(this.$refs.article)
|
|
174
174
|
if(element.nodeType !== 1)
|
|
175
175
|
element = element.parentNode
|
|
176
176
|
const table = this.closest(element, 'table')
|
|
@@ -231,7 +231,7 @@ export default{
|
|
|
231
231
|
|
|
232
232
|
case 'saveSelection':
|
|
233
233
|
case 'getSelection':
|
|
234
|
-
const sel = saveSelection(this.$
|
|
234
|
+
const sel = saveSelection(this.$refs.article)
|
|
235
235
|
const { text, target, href } = sel
|
|
236
236
|
result = {
|
|
237
237
|
text,
|
|
@@ -256,7 +256,7 @@ export default{
|
|
|
256
256
|
break
|
|
257
257
|
|
|
258
258
|
case 'removeLink':
|
|
259
|
-
const { element } = getSelection(this.$
|
|
259
|
+
const { element } = getSelection(this.$refs.article)
|
|
260
260
|
|
|
261
261
|
let a = element
|
|
262
262
|
while(a && a.tagName !== 'A'){
|
|
@@ -115,7 +115,6 @@
|
|
|
115
115
|
<VirtualGrid v-else-if="computedViewType === 'grid'"
|
|
116
116
|
:items="items"
|
|
117
117
|
:column="gridColumn"
|
|
118
|
-
:gap="gridGap"
|
|
119
118
|
class="flex-1"
|
|
120
119
|
ref="table1"
|
|
121
120
|
:opt-bar="optBar"
|
|
@@ -740,7 +739,7 @@ export default{
|
|
|
740
739
|
}
|
|
741
740
|
|
|
742
741
|
if(this.$screenPrefix.value === ''){
|
|
743
|
-
return 'gap-
|
|
742
|
+
return 'gap-0'
|
|
744
743
|
}
|
|
745
744
|
|
|
746
745
|
return this.config.gridGap
|
package/src/components/Modal.vue
CHANGED
package/src/utils/helpers.js
CHANGED
package/src/utils/listpage1.js
CHANGED
|
@@ -2,8 +2,7 @@ const { Op } = module.parent.require('sequelize')
|
|
|
2
2
|
const Sequelize = module.parent.require('sequelize')
|
|
3
3
|
const dayjs = require("dayjs");
|
|
4
4
|
const Exceljs = require("exceljs");
|
|
5
|
-
const { getPresetSortWhereParams } = require("./helpers");
|
|
6
|
-
const { sleep } = require('@mixd-id/web-scaffold/helpers')
|
|
5
|
+
const { getPresetSortWhereParams, ftWildcard } = require("./helpers");
|
|
7
6
|
|
|
8
7
|
let ListPage1 = {
|
|
9
8
|
|
|
@@ -111,7 +110,6 @@ let ListPage1 = {
|
|
|
111
110
|
async loadSummary(params){
|
|
112
111
|
|
|
113
112
|
if(!this.conn){
|
|
114
|
-
console.error('Unable to load summary, connection not found')
|
|
115
113
|
return
|
|
116
114
|
}
|
|
117
115
|
|
|
@@ -313,7 +311,7 @@ let ListPage1 = {
|
|
|
313
311
|
const sheet = workbook.addWorksheet('Export ' + this.name);
|
|
314
312
|
sheet.columns = columns
|
|
315
313
|
|
|
316
|
-
let where =
|
|
314
|
+
let where = []
|
|
317
315
|
let replacements = []
|
|
318
316
|
let order = [
|
|
319
317
|
[ 'updatedAt', 'desc' ],
|
|
@@ -350,14 +348,6 @@ let ListPage1 = {
|
|
|
350
348
|
}
|
|
351
349
|
attributes = Object.keys(attributes)
|
|
352
350
|
|
|
353
|
-
if(preset.filters){
|
|
354
|
-
const { where:presetWhere } = this.getPresetFilterParams(preset)
|
|
355
|
-
where = {
|
|
356
|
-
...where,
|
|
357
|
-
...presetWhere
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
|
|
361
351
|
if(preset.sorts){
|
|
362
352
|
const { order:presetOrder } = this.getPresetSortParams(preset)
|
|
363
353
|
if(presetOrder){
|
|
@@ -365,21 +355,25 @@ let ListPage1 = {
|
|
|
365
355
|
}
|
|
366
356
|
}
|
|
367
357
|
|
|
368
|
-
if(preset.search){
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
358
|
+
if(preset.search && this.matchAgainst){
|
|
359
|
+
where.push({
|
|
360
|
+
[Op.and]: Sequelize.literal(this.matchAgainst)
|
|
361
|
+
})
|
|
362
|
+
replacements.push(ftWildcard(preset.search))
|
|
363
|
+
}
|
|
364
|
+
else if(preset.filters){
|
|
365
|
+
const { where:presetWhere } = this.getPresetFilterParams(preset)
|
|
366
|
+
where.push(presetWhere)
|
|
375
367
|
}
|
|
376
368
|
|
|
377
369
|
if(this.downloadFilters){
|
|
378
|
-
await this.downloadFilters(params
|
|
370
|
+
where.push((await this.downloadFilters(params) ?? {}))
|
|
379
371
|
}
|
|
380
372
|
|
|
381
373
|
const rows = await this.model.findAll({
|
|
382
|
-
where
|
|
374
|
+
where: {
|
|
375
|
+
[Op.and]: where
|
|
376
|
+
},
|
|
383
377
|
attributes: {
|
|
384
378
|
...attributes,
|
|
385
379
|
include: attributeIncludes
|
|
@@ -439,7 +433,7 @@ let ListPage1 = {
|
|
|
439
433
|
|
|
440
434
|
const { afterItem, itemsPerPage = this.itemsPerPage ?? 24 } = params
|
|
441
435
|
const { preset = {} } = params
|
|
442
|
-
let where =
|
|
436
|
+
let where = []
|
|
443
437
|
let replacements = []
|
|
444
438
|
let order = [
|
|
445
439
|
[ 'updatedAt', 'desc' ],
|
|
@@ -487,19 +481,8 @@ let ListPage1 = {
|
|
|
487
481
|
}
|
|
488
482
|
attributes = Object.keys(attributes)
|
|
489
483
|
|
|
490
|
-
if(preset.filters){
|
|
491
|
-
const { where:presetWhere } = this.getPresetFilterParams(preset, includes)
|
|
492
|
-
where = {
|
|
493
|
-
...where,
|
|
494
|
-
...presetWhere
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
|
|
498
484
|
if(typeof this['loadFilters'] === 'function'){
|
|
499
|
-
where
|
|
500
|
-
...where,
|
|
501
|
-
...(await this['loadFilters'](params) ?? {})
|
|
502
|
-
}
|
|
485
|
+
where.push(await this['loadFilters'](params) ?? {})
|
|
503
486
|
}
|
|
504
487
|
|
|
505
488
|
if(preset.sorts){
|
|
@@ -509,26 +492,27 @@ let ListPage1 = {
|
|
|
509
492
|
}
|
|
510
493
|
}
|
|
511
494
|
|
|
512
|
-
if(preset.search){
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
495
|
+
if(preset.search && this.matchAgainst){
|
|
496
|
+
where.push({
|
|
497
|
+
[Op.and]: Sequelize.literal(this.matchAgainst)
|
|
498
|
+
})
|
|
499
|
+
replacements.push(ftWildcard(preset.search))
|
|
500
|
+
}
|
|
501
|
+
else if(preset.filters){
|
|
502
|
+
const { where:presetWhere } = this.getPresetFilterParams(preset, includes)
|
|
503
|
+
where.push(presetWhere)
|
|
519
504
|
}
|
|
520
505
|
|
|
521
506
|
if(afterItem){
|
|
522
507
|
const sortWhere = getPresetSortWhereParams(order, afterItem)
|
|
523
|
-
where
|
|
524
|
-
...where,
|
|
525
|
-
...sortWhere
|
|
526
|
-
}
|
|
508
|
+
where.push(sortWhere)
|
|
527
509
|
}
|
|
528
510
|
|
|
529
511
|
let derivedSql
|
|
530
512
|
let { rows:items, count } = await this.model.findAndCountAll({
|
|
531
|
-
where
|
|
513
|
+
where: {
|
|
514
|
+
[Op.and]: where
|
|
515
|
+
},
|
|
532
516
|
attributes: {
|
|
533
517
|
...attributes,
|
|
534
518
|
include: attributeIncludes
|
package/src/utils/listview.js
CHANGED
|
@@ -2,7 +2,7 @@ const { Op } = module.parent.require('sequelize')
|
|
|
2
2
|
const Sequelize = module.parent.require('sequelize')
|
|
3
3
|
const dayjs = require("dayjs");
|
|
4
4
|
const Exceljs = require("exceljs");
|
|
5
|
-
const { getPresetSortWhereParams } = require("./helpers");
|
|
5
|
+
const { getPresetSortWhereParams, ftWildcard } = require("./helpers");
|
|
6
6
|
|
|
7
7
|
let ListView = {
|
|
8
8
|
|
|
@@ -45,7 +45,6 @@ let ListView = {
|
|
|
45
45
|
async loadSummary(params, loadResults){
|
|
46
46
|
|
|
47
47
|
if(!this.conn){
|
|
48
|
-
console.error('Unable to load summary, connection not found')
|
|
49
48
|
return
|
|
50
49
|
}
|
|
51
50
|
|
|
@@ -110,7 +109,7 @@ let ListView = {
|
|
|
110
109
|
const sheet = workbook.addWorksheet('Export ' + this.name);
|
|
111
110
|
sheet.columns = columns
|
|
112
111
|
|
|
113
|
-
let where =
|
|
112
|
+
let where = []
|
|
114
113
|
let replacements = []
|
|
115
114
|
let order = [
|
|
116
115
|
[ 'updatedAt', 'desc' ],
|
|
@@ -147,14 +146,6 @@ let ListView = {
|
|
|
147
146
|
}
|
|
148
147
|
attributes = Object.keys(attributes)
|
|
149
148
|
|
|
150
|
-
if(preset.filters){
|
|
151
|
-
const { where:presetWhere } = this.getPresetFilterParams(preset)
|
|
152
|
-
where = {
|
|
153
|
-
...where,
|
|
154
|
-
...presetWhere
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
149
|
if(preset.sorts){
|
|
159
150
|
const { order:presetOrder } = this.getPresetSortParams(preset)
|
|
160
151
|
if(presetOrder){
|
|
@@ -162,21 +153,25 @@ let ListView = {
|
|
|
162
153
|
}
|
|
163
154
|
}
|
|
164
155
|
|
|
165
|
-
if(preset.search){
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
156
|
+
if(preset.search && this.matchAgainst){
|
|
157
|
+
where.push({
|
|
158
|
+
[Op.and]: Sequelize.literal(this.matchAgainst)
|
|
159
|
+
})
|
|
160
|
+
replacements.push(ftWildcard(preset.search))
|
|
161
|
+
}
|
|
162
|
+
else if(preset.filters){
|
|
163
|
+
const { where:presetWhere } = this.getPresetFilterParams(preset)
|
|
164
|
+
where.push(presetWhere)
|
|
172
165
|
}
|
|
173
166
|
|
|
174
167
|
if(this.downloadFilters){
|
|
175
|
-
await this.downloadFilters(params
|
|
168
|
+
where.push((await this.downloadFilters(params) ?? {}))
|
|
176
169
|
}
|
|
177
170
|
|
|
178
171
|
const rows = await this.model.findAll({
|
|
179
|
-
where
|
|
172
|
+
where: {
|
|
173
|
+
[Op.and]: where
|
|
174
|
+
},
|
|
180
175
|
attributes: {
|
|
181
176
|
...attributes,
|
|
182
177
|
include: attributeIncludes
|
|
@@ -237,7 +232,7 @@ let ListView = {
|
|
|
237
232
|
const { afterItem, itemsPerPage = this.itemsPerPage ?? 24 } = params
|
|
238
233
|
|
|
239
234
|
const { preset = {} } = params
|
|
240
|
-
let where =
|
|
235
|
+
let where = []
|
|
241
236
|
let replacements = []
|
|
242
237
|
let order = [
|
|
243
238
|
[ 'updatedAt', 'desc' ],
|
|
@@ -281,27 +276,19 @@ let ListView = {
|
|
|
281
276
|
}
|
|
282
277
|
attributes = Object.keys(attributes)
|
|
283
278
|
|
|
284
|
-
if(preset.search &&
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
}
|
|
290
|
-
replacements.push(preset.search)
|
|
279
|
+
if(preset.search && this.matchAgainst){
|
|
280
|
+
where.push({
|
|
281
|
+
[Op.and]: Sequelize.literal(this.matchAgainst)
|
|
282
|
+
})
|
|
283
|
+
replacements.push(ftWildcard(preset.search))
|
|
291
284
|
}
|
|
292
285
|
else if(preset.filters){
|
|
293
286
|
const { where:presetWhere } = this.getPresetFilterParams(preset, includes)
|
|
294
|
-
where
|
|
295
|
-
...where,
|
|
296
|
-
...presetWhere
|
|
297
|
-
}
|
|
287
|
+
where.push(presetWhere)
|
|
298
288
|
}
|
|
299
289
|
|
|
300
290
|
if(typeof this['loadFilters'] === 'function'){
|
|
301
|
-
where
|
|
302
|
-
...where,
|
|
303
|
-
...(await this['loadFilters'](params) ?? {})
|
|
304
|
-
}
|
|
291
|
+
where.push(await this['loadFilters'](params) ?? {})
|
|
305
292
|
}
|
|
306
293
|
|
|
307
294
|
if(preset.sorts){
|
|
@@ -313,15 +300,14 @@ let ListView = {
|
|
|
313
300
|
|
|
314
301
|
if(afterItem){
|
|
315
302
|
const sortWhere = getPresetSortWhereParams(order, afterItem)
|
|
316
|
-
where
|
|
317
|
-
...where,
|
|
318
|
-
...sortWhere
|
|
319
|
-
}
|
|
303
|
+
where.push(sortWhere)
|
|
320
304
|
}
|
|
321
305
|
|
|
322
306
|
let derivedSql
|
|
323
307
|
let { rows:items, count } = await this.model.findAndCountAll({
|
|
324
|
-
where
|
|
308
|
+
where: {
|
|
309
|
+
[Op.and]: where
|
|
310
|
+
},
|
|
325
311
|
attributes: [
|
|
326
312
|
...attributes,
|
|
327
313
|
...attributeIncludes
|
package/src/widgets/IconList.vue
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<div v-for="(icon, index) in icons" :key="index" class="text-center p-3">
|
|
4
4
|
<router-link :to="icon.target ?? ''">
|
|
5
5
|
<Image :src="imageUrl(icon)" class="inline-block aspect-square w-[90%] md:w-[95%] max-w-[64px] rounded-xl"
|
|
6
|
-
spinner-type="shimmer"/>
|
|
6
|
+
spinner-type="shimmer" edit-selectable="false"/>
|
|
7
7
|
<small class="block mt-1 text-center text-xs md:text-sm">{{ icon.text }}</small>
|
|
8
8
|
</router-link>
|
|
9
9
|
</div>
|
|
@@ -1009,10 +1009,10 @@ export default{
|
|
|
1009
1009
|
|
|
1010
1010
|
onKeyDown(e){
|
|
1011
1011
|
if(e.keyCode === 67 && (e.metaKey || e.ctrlKey)){
|
|
1012
|
-
this.copy()
|
|
1012
|
+
//this.copy()
|
|
1013
1013
|
}
|
|
1014
1014
|
else if(e.keyCode === 86 && (e.metaKey || e.ctrlKey)){
|
|
1015
|
-
this.paste(e)
|
|
1015
|
+
//this.paste(e)
|
|
1016
1016
|
}
|
|
1017
1017
|
/*else if(e.keyCode === 8){
|
|
1018
1018
|
if(this.currentItem){
|