sh-view 2.8.10 → 2.8.12
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 +2 -2
- package/packages/components/sh-date/index.vue +3 -5
- package/packages/components/sh-form/form.vue +1 -0
- package/packages/components/sh-table/grid.vue +0 -4
- package/packages/components/sh-table/js/tableMethods.js +11 -2
- package/packages/components/sh-table/js/useTable.js +2 -2
- package/packages/components/sh-table/table.vue +0 -4
- package/packages/components/sh-tabs/index.vue +111 -13
- package/packages/components/sh-tree/components/table-tree.vue +4 -14
- package/packages/vxeTable/index.js +5 -4
- package/packages/vxeTable/render/cell/vxe-render-time.vue +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sh-view",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.12",
|
|
4
4
|
"description": "基于vxe-table二次封装,更包含Alert,Badge,Card,CodeEditor,Col,Corner,CountTo,Drawer,Empty,Form,Header,Icon,List,Loading,Modal,Noticebar,Poptip,Progress,PullRefresh,Query,Result,Row,Split,Grid,Table,Tabs,Tag,Toolbar,Tree,Upload,WaterFall,WaterMark等丰富组件库",
|
|
5
5
|
"main": "packages/index.js",
|
|
6
6
|
"typings": "types/index.d.ts",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"jszip": "^3.10.1",
|
|
33
33
|
"lunar-typescript": "^1.6.10",
|
|
34
34
|
"popper.js": "^1.16.1",
|
|
35
|
-
"sh-tools": "^2.2.
|
|
35
|
+
"sh-tools": "^2.2.10",
|
|
36
36
|
"tinymce": "^5.10.5",
|
|
37
37
|
"vue": "^3.3.4",
|
|
38
38
|
"vue-masonry": "^0.16.0",
|
|
@@ -66,7 +66,7 @@ export default defineComponent({
|
|
|
66
66
|
maxDate: [String, Number, Date],
|
|
67
67
|
startDay: { type: [String, Number] },
|
|
68
68
|
labelFormat: { type: String },
|
|
69
|
-
|
|
69
|
+
format: { type: String },
|
|
70
70
|
editable: { type: Boolean, default: true },
|
|
71
71
|
festivalMethod: { type: Function },
|
|
72
72
|
disabledMethod: { type: Function },
|
|
@@ -78,7 +78,6 @@ export default defineComponent({
|
|
|
78
78
|
transfer: Boolean,
|
|
79
79
|
// 个性化参数
|
|
80
80
|
range: Boolean,
|
|
81
|
-
rangeFormat: String,
|
|
82
81
|
autoBlur: { type: Boolean, default: true },
|
|
83
82
|
separator: { type: String, default: '至' },
|
|
84
83
|
startPlaceholder: { type: String, default: '起始日期' },
|
|
@@ -124,10 +123,9 @@ export default defineComponent({
|
|
|
124
123
|
return Object.assign({ transfer: true }, props.pulldown)
|
|
125
124
|
})
|
|
126
125
|
const calendarFormat = computed(() => {
|
|
127
|
-
if (props.
|
|
128
|
-
else if (props.type === 'month') return 'yyyy-MM'
|
|
126
|
+
if (props.type === 'month') return 'yyyy-MM'
|
|
129
127
|
else if (props.type === 'year') return 'yyyy'
|
|
130
|
-
return props.
|
|
128
|
+
return props.format || 'yyyy-MM-dd'
|
|
131
129
|
})
|
|
132
130
|
const rangeInputConfig = computed(() => ({ type: 'text', readonly: true }))
|
|
133
131
|
const startInputConfig = computed(() => {
|
|
@@ -82,10 +82,6 @@
|
|
|
82
82
|
<template #empty>
|
|
83
83
|
<sh-empty :icon="emptyIcon" :content="emptyText"></sh-empty>
|
|
84
84
|
</template>
|
|
85
|
-
<template v-for="slot in tableSlots" #[slot]="scope">
|
|
86
|
-
<!-- 以之前的名字命名插槽,同时把数据原样绑定 -->
|
|
87
|
-
<slot :name="slot" v-bind="scope"></slot>
|
|
88
|
-
</template>
|
|
89
85
|
</vxe-grid>
|
|
90
86
|
<!--导入弹窗-->
|
|
91
87
|
<importModal v-if="importBindConfig.modalConfig.modelValue" v-bind="importBindConfig" @confirm="setImportData"></importModal>
|
|
@@ -103,12 +103,21 @@ export const getFieldRules = (ori, rules) => {
|
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
// 转换生成新表头数据
|
|
106
|
-
export const getTransfarFields = (oriArr = [], columnObj, isSearch) => {
|
|
106
|
+
export const getTransfarFields = (oriArr = [], { slots, columnObj, isSearch }) => {
|
|
107
107
|
let rules = {}
|
|
108
108
|
let columnsFlatArr = []
|
|
109
109
|
let formItemsArr = []
|
|
110
110
|
let columnsArr = $vUtils.mapTree(oriArr, ori => {
|
|
111
|
-
let
|
|
111
|
+
let slotObj = {}
|
|
112
|
+
// 将插槽转换为函数式
|
|
113
|
+
if (slots && ori.slots) {
|
|
114
|
+
Object.keys(ori.slots).forEach(slotKey => {
|
|
115
|
+
if ($vUtils.isString(ori.slots[slotKey])) {
|
|
116
|
+
$vUtils.set(slotObj, `slots.${slotKey}`, slots[ori.slots[slotKey]])
|
|
117
|
+
}
|
|
118
|
+
})
|
|
119
|
+
}
|
|
120
|
+
let tar = Object.assign({}, columnObj, ori, slotObj)
|
|
112
121
|
if (ori.children && ori.children.length > 0) {
|
|
113
122
|
tar.sortable = false
|
|
114
123
|
tar.filter = false
|
|
@@ -259,7 +259,7 @@ export default function (props, context, proxy, isGrid) {
|
|
|
259
259
|
selectionRows.value = selections
|
|
260
260
|
}
|
|
261
261
|
const updateExpended = () => {
|
|
262
|
-
if (tableRef.value && tableTreeConfig.value.expandAll) {
|
|
262
|
+
if (tableRef.value && tableTreeConfig.value && tableTreeConfig.value.expandAll) {
|
|
263
263
|
setTimeout(() => {
|
|
264
264
|
tableRef.value.setAllTreeExpand(true)
|
|
265
265
|
})
|
|
@@ -404,7 +404,7 @@ export default function (props, context, proxy, isGrid) {
|
|
|
404
404
|
|
|
405
405
|
// 初始化生成新表头数据
|
|
406
406
|
const initTableColumns = () => {
|
|
407
|
-
let transResult = getTransfarFields(props.columns, tableColumnObjConfig.value, tableGlobalConfig.value.search)
|
|
407
|
+
let transResult = getTransfarFields(props.columns, { slots, columnObj: tableColumnObjConfig.value, isSearch: tableGlobalConfig.value.search })
|
|
408
408
|
tableColumnsFlat.value = transResult.columnsFlatArr
|
|
409
409
|
tableFormItems.value = transResult.formItemsArr
|
|
410
410
|
tableColumnsFixed.value = transResult.columnsArr
|
|
@@ -71,10 +71,6 @@
|
|
|
71
71
|
<template #empty>
|
|
72
72
|
<sh-empty :icon="emptyIcon" :content="emptyText"></sh-empty>
|
|
73
73
|
</template>
|
|
74
|
-
<template v-for="slot in tableSlots" #[slot]="scope">
|
|
75
|
-
<!-- 以之前的名字命名插槽,同时把数据原样绑定 -->
|
|
76
|
-
<slot :name="slot" v-bind="scope"></slot>
|
|
77
|
-
</template>
|
|
78
74
|
</vxe-table>
|
|
79
75
|
<div v-if="isFootSlot" ref="footSlotRef" v-resize="handleResize" class="sh-table-foot"><slot name="foot"></slot></div>
|
|
80
76
|
<div v-if="isPagerSlot" ref="pagerSlotRef" v-resize="handleResize" class="sh-table-pager">
|
|
@@ -63,11 +63,11 @@ export default defineComponent({
|
|
|
63
63
|
},
|
|
64
64
|
type: {
|
|
65
65
|
type: String,
|
|
66
|
-
default: 'line' // 'line', 'card'
|
|
66
|
+
default: 'line' // 'line', 'card', 'tab'
|
|
67
67
|
},
|
|
68
68
|
size: {
|
|
69
69
|
type: String,
|
|
70
|
-
default: 'default' //
|
|
70
|
+
default: 'default' // medium / small / mini
|
|
71
71
|
},
|
|
72
72
|
animated: {
|
|
73
73
|
type: Boolean,
|
|
@@ -110,7 +110,9 @@ export default defineComponent({
|
|
|
110
110
|
const tabClass = computed(() => {
|
|
111
111
|
return {
|
|
112
112
|
'sh-tabs-card': props.type === 'card',
|
|
113
|
+
'sh-tabs-tab': props.type === 'tab',
|
|
113
114
|
'sh-tabs-reverse': ['bottom', 'right'].includes(props.placement),
|
|
115
|
+
[`sh-tabs-size-${props.size}`]: true,
|
|
114
116
|
[isHorizontal.value ? 'sh-tabs-horizontal' : 'sh-tabs-vertical']: true
|
|
115
117
|
}
|
|
116
118
|
})
|
|
@@ -284,10 +286,25 @@ export default defineComponent({
|
|
|
284
286
|
width: 100%;
|
|
285
287
|
position: relative;
|
|
286
288
|
display: flex;
|
|
289
|
+
line-height: 2.3em;
|
|
290
|
+
&-size {
|
|
291
|
+
&-default {
|
|
292
|
+
font-size: var(--vxe-font-size);
|
|
293
|
+
}
|
|
294
|
+
&-medium {
|
|
295
|
+
font-size: var(--vxe-font-size-medium);
|
|
296
|
+
}
|
|
297
|
+
&-small {
|
|
298
|
+
font-size: var(--vxe-font-size-small);
|
|
299
|
+
}
|
|
300
|
+
&-mini {
|
|
301
|
+
font-size: var(--vxe-font-size-mini);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
287
304
|
.sh-tab-close {
|
|
288
305
|
display: inline-flex;
|
|
289
306
|
align-items: center;
|
|
290
|
-
|
|
307
|
+
font-size: 1.4em;
|
|
291
308
|
&:hover {
|
|
292
309
|
background-color: rgba(0, 0, 0, 0.1);
|
|
293
310
|
}
|
|
@@ -296,12 +313,32 @@ export default defineComponent({
|
|
|
296
313
|
width: 100%;
|
|
297
314
|
flex-wrap: wrap;
|
|
298
315
|
flex-direction: column;
|
|
299
|
-
&.sh-tabs-reverse {
|
|
300
|
-
flex-direction: column-reverse;
|
|
301
|
-
}
|
|
302
316
|
.sh-tabs-nav {
|
|
303
317
|
width: 100%;
|
|
304
318
|
}
|
|
319
|
+
&.sh-tabs-reverse {
|
|
320
|
+
flex-direction: column-reverse;
|
|
321
|
+
&.sh-tabs-tab {
|
|
322
|
+
.sh-tabs-nav-inner {
|
|
323
|
+
.sh-tab-item {
|
|
324
|
+
border-radius: 0 0 0.7em 0.7em;
|
|
325
|
+
}
|
|
326
|
+
.sh-tab-item-active {
|
|
327
|
+
&:before,
|
|
328
|
+
&:after {
|
|
329
|
+
top: 0;
|
|
330
|
+
bottom: auto;
|
|
331
|
+
}
|
|
332
|
+
&:before {
|
|
333
|
+
background: radial-gradient(circle at 0 100%, transparent 14px, var(--primary-weak-color) 14px);
|
|
334
|
+
}
|
|
335
|
+
&:after {
|
|
336
|
+
background: radial-gradient(circle at 100% 100%, transparent 14px, var(--primary-weak-color) 14px);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
305
342
|
}
|
|
306
343
|
&-horizontal {
|
|
307
344
|
flex-wrap: nowrap;
|
|
@@ -317,10 +354,30 @@ export default defineComponent({
|
|
|
317
354
|
.sh-tabs-nav-prev,
|
|
318
355
|
.sh-tabs-nav-next {
|
|
319
356
|
width: 100%;
|
|
320
|
-
height:
|
|
357
|
+
height: 2em;
|
|
358
|
+
}
|
|
359
|
+
&.sh-tabs-tab {
|
|
360
|
+
.sh-tabs-nav-inner {
|
|
361
|
+
.sh-tab-item {
|
|
362
|
+
border-radius: 0.7em 0 0 0.7em !important;
|
|
363
|
+
}
|
|
364
|
+
.sh-tab-item-active {
|
|
365
|
+
&:before,
|
|
366
|
+
&:after {
|
|
367
|
+
display: none;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
321
371
|
}
|
|
322
372
|
&.sh-tabs-reverse {
|
|
323
373
|
flex-direction: row-reverse;
|
|
374
|
+
&.sh-tabs-tab {
|
|
375
|
+
.sh-tabs-nav-inner {
|
|
376
|
+
.sh-tab-item {
|
|
377
|
+
border-radius: 0 0.7em 0.7em 0 !important;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
324
381
|
}
|
|
325
382
|
}
|
|
326
383
|
&-nav {
|
|
@@ -337,7 +394,7 @@ export default defineComponent({
|
|
|
337
394
|
}
|
|
338
395
|
&-prev,
|
|
339
396
|
&-next {
|
|
340
|
-
width:
|
|
397
|
+
width: 2.5em;
|
|
341
398
|
height: 100%;
|
|
342
399
|
display: inline-flex;
|
|
343
400
|
align-items: center;
|
|
@@ -364,15 +421,22 @@ export default defineComponent({
|
|
|
364
421
|
display: inline-flex;
|
|
365
422
|
align-items: stretch;
|
|
366
423
|
cursor: pointer;
|
|
367
|
-
line-height: 20px;
|
|
368
424
|
box-sizing: border-box;
|
|
369
|
-
|
|
425
|
+
position: relative;
|
|
370
426
|
&:hover {
|
|
371
427
|
color: var(--vxe-primary-color);
|
|
372
428
|
}
|
|
373
429
|
&.sh-tab-item-active {
|
|
374
|
-
border-bottom: 2px solid var(--vxe-primary-darken-color);
|
|
375
430
|
color: var(--vxe-primary-color) !important;
|
|
431
|
+
&:after {
|
|
432
|
+
position: absolute;
|
|
433
|
+
height: 2px;
|
|
434
|
+
background-color: var(--vxe-primary-darken-color);
|
|
435
|
+
width: 100%;
|
|
436
|
+
bottom: 0;
|
|
437
|
+
content: '';
|
|
438
|
+
display: block;
|
|
439
|
+
}
|
|
376
440
|
}
|
|
377
441
|
&.sh-tab-item-disabled {
|
|
378
442
|
cursor: not-allowed;
|
|
@@ -381,11 +445,11 @@ export default defineComponent({
|
|
|
381
445
|
.sh-tab-icon {
|
|
382
446
|
display: inline-flex;
|
|
383
447
|
align-items: center;
|
|
384
|
-
padding: 0
|
|
448
|
+
padding: 0 0.2em 0 0.7em;
|
|
385
449
|
}
|
|
386
450
|
.sh-tab-label {
|
|
387
451
|
flex: 1;
|
|
388
|
-
padding:
|
|
452
|
+
padding: 0 0.5em;
|
|
389
453
|
}
|
|
390
454
|
}
|
|
391
455
|
}
|
|
@@ -403,6 +467,40 @@ export default defineComponent({
|
|
|
403
467
|
background-color: var(--vxe-primary-color);
|
|
404
468
|
border-color: var(--vxe-primary-color);
|
|
405
469
|
color: #fff !important;
|
|
470
|
+
&:after {
|
|
471
|
+
display: none;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
&.sh-tabs-tab {
|
|
477
|
+
.sh-tabs-nav-inner {
|
|
478
|
+
.sh-tab-item {
|
|
479
|
+
position: relative;
|
|
480
|
+
border: none;
|
|
481
|
+
border-radius: 0.7em 0.7em 0 0;
|
|
482
|
+
}
|
|
483
|
+
.sh-tab-item-active {
|
|
484
|
+
background-color: var(--primary-weak-color);
|
|
485
|
+
color: var(--vxe-primary-color) !important;
|
|
486
|
+
&:before,
|
|
487
|
+
&:after {
|
|
488
|
+
position: absolute;
|
|
489
|
+
width: 14px;
|
|
490
|
+
height: 14px;
|
|
491
|
+
background-color: var(--primary-weak-color);
|
|
492
|
+
content: '';
|
|
493
|
+
display: inline-block;
|
|
494
|
+
bottom: 0;
|
|
495
|
+
}
|
|
496
|
+
&:before {
|
|
497
|
+
left: -14px;
|
|
498
|
+
background: radial-gradient(circle at 0 0, transparent 14px, var(--primary-weak-color) 14px);
|
|
499
|
+
}
|
|
500
|
+
&:after {
|
|
501
|
+
right: -14px;
|
|
502
|
+
background: radial-gradient(circle at 100% 0, transparent 14px, var(--primary-weak-color) 14px);
|
|
503
|
+
}
|
|
406
504
|
}
|
|
407
505
|
}
|
|
408
506
|
}
|
|
@@ -29,20 +29,10 @@ const tableConfigDefault = {
|
|
|
29
29
|
showHeader: false,
|
|
30
30
|
showFooter: false,
|
|
31
31
|
showOverflow: true,
|
|
32
|
-
resizeConfig: {
|
|
33
|
-
|
|
34
|
-
},
|
|
35
|
-
|
|
36
|
-
width: 120
|
|
37
|
-
},
|
|
38
|
-
scrollX: {
|
|
39
|
-
enabled: true,
|
|
40
|
-
gt: 20
|
|
41
|
-
},
|
|
42
|
-
scrollY: {
|
|
43
|
-
enabled: true,
|
|
44
|
-
gt: 20
|
|
45
|
-
}
|
|
32
|
+
resizeConfig: { refreshDelay: 100 },
|
|
33
|
+
columnConfig: { width: 120 },
|
|
34
|
+
scrollX: { enabled: true, gt: 20 },
|
|
35
|
+
scrollY: { enabled: true, gt: 20 }
|
|
46
36
|
}
|
|
47
37
|
import mixinProps from '../mixin/treeProps'
|
|
48
38
|
export default defineComponent({
|
|
@@ -5,6 +5,7 @@ import VXETablePluginExportPDF from 'vxe-table-plugin-export-pdf'
|
|
|
5
5
|
import { jsPDF } from 'jspdf'
|
|
6
6
|
import XEClipboard from 'xe-clipboard'
|
|
7
7
|
import ShValidators from 'sh-tools/packages/utils/validate'
|
|
8
|
+
import { utils } from 'sh-tools'
|
|
8
9
|
import { publicRenders, extraRenders, filterRenders, publicRendersNames } from './render/globalRenders.jsx'
|
|
9
10
|
|
|
10
11
|
let vxeOptions = {
|
|
@@ -28,7 +29,7 @@ let vxeOptions = {
|
|
|
28
29
|
keepSource: false,
|
|
29
30
|
minHeight: 30,
|
|
30
31
|
rowConfig: {
|
|
31
|
-
useKey:
|
|
32
|
+
useKey: true,
|
|
32
33
|
keyField: '_XID',
|
|
33
34
|
isCurrent: true,
|
|
34
35
|
isHover: true
|
|
@@ -207,9 +208,9 @@ VXETable.renderer.mixin(filterRenders)
|
|
|
207
208
|
|
|
208
209
|
const index = {
|
|
209
210
|
install(Vue, { vxeOption = {}, vxePdfOption = {}, vxeXlsxOption }) {
|
|
210
|
-
let setupOption =
|
|
211
|
-
let xlsxSetUpOption =
|
|
212
|
-
let pdfSetUpOption =
|
|
211
|
+
let setupOption = utils.merge(vxeOptions, vxeOption)
|
|
212
|
+
let xlsxSetUpOption = utils.merge(vxeXlsxOptions, vxeXlsxOption)
|
|
213
|
+
let pdfSetUpOption = utils.merge(vxePdfOptions, vxePdfOption)
|
|
213
214
|
VXETable.setup(setupOption)
|
|
214
215
|
VXETable.use(VXETablePluginExportXLSX, xlsxSetUpOption)
|
|
215
216
|
VXETable.use(VXETablePluginExportPDF, pdfSetUpOption)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<span class="vxe-render--inner" :class="{ 'form-render': rform, 'td-render': !rform }">
|
|
3
3
|
<template v-if="redit || isEditAll">
|
|
4
|
-
<sh-date v-model="renderValue" v-bind="rprops" :size="rsize" :disabled-method="vxeDisabledMethod" @change="vxeChangeCallBack"></sh-date>
|
|
4
|
+
<sh-date v-model="renderValue" v-bind="rprops" :size="rsize" :disabled-method="vxeDisabledMethod" @change="vxeChangeCallBack" @clear="vxeBlurCallback"></sh-date>
|
|
5
5
|
</template>
|
|
6
6
|
<template v-else>
|
|
7
7
|
<span v-html="renderText"></span>
|