sh-view 2.8.11 → 2.8.13
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 +5 -7
- package/packages/components/sh-form/form.vue +1 -0
- 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/packages/vxeTable/render/globalRenders.jsx +1 -1
- package/packages/vxeTable/render/mixin/cell-hooks.js +13 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sh-view",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.13",
|
|
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: '起始日期' },
|
|
@@ -110,7 +109,7 @@ export default defineComponent({
|
|
|
110
109
|
|
|
111
110
|
const pulldownValue = ref(false)
|
|
112
111
|
const inputValue = ref(props.modelValue)
|
|
113
|
-
const rangeValue = ref(props.modelValue
|
|
112
|
+
const rangeValue = ref(Array.isArray(props.modelValue) ? props.modelValue : [])
|
|
114
113
|
|
|
115
114
|
const inputConfig = computed(() => {
|
|
116
115
|
let defaultProps = {}
|
|
@@ -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(() => {
|
|
@@ -219,7 +217,7 @@ export default defineComponent({
|
|
|
219
217
|
watch(
|
|
220
218
|
() => props.modelValue,
|
|
221
219
|
(value, oldValue) => {
|
|
222
|
-
if (props.range) {
|
|
220
|
+
if (props.range && Array.isArray(value)) {
|
|
223
221
|
rangeValue.value = value
|
|
224
222
|
} else {
|
|
225
223
|
inputValue.value = value
|
|
@@ -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>
|
|
@@ -43,7 +43,7 @@ let defaultProps = {
|
|
|
43
43
|
$vTextArea: { placeholder: '请输入', rows: 2, transfer: true, resize: 'none', showWordCount: true },
|
|
44
44
|
$vSelect: { placeholder: '请选择', filterable: true, transfer: true, showType: 'text', tagColor: 'default', split: ',', options: [] },
|
|
45
45
|
$vTree: { placeholder: '请选择', transfer: true, split: ',', nodeKey: 'id', labelField: 'label' },
|
|
46
|
-
$vTime: { type: 'date', placeholder: '请选择时间', transfer: true, editable: false, prefixType: 'text', suffixType: 'text' },
|
|
46
|
+
$vTime: { type: 'date', placeholder: '请选择时间', transfer: true, editable: false, prefixType: 'text', suffixType: 'text', separator: '至' },
|
|
47
47
|
$vProgress: { strokeWidth: 20, strokeColor: ['#108ee9', '#87d068'], textInside: true, min: 0, max: 100, digits: 2 },
|
|
48
48
|
$vSwitch: { placeholder: '请选择', openLabel: '是', openValue: '1', closeLabel: '否', closeValue: '0' },
|
|
49
49
|
$vMoney: { type: 'number', placeholder: '请输入', transfer: true, commafy: true, digits: 2, moneyUnit: 1, min: 0, max: 1000000000000 },
|
|
@@ -27,6 +27,7 @@ export default function (props, context, proxy) {
|
|
|
27
27
|
// 初始化数据
|
|
28
28
|
const initData = () => {
|
|
29
29
|
let keyValue = $vUtils.get(props.rdata, props.rkey)
|
|
30
|
+
if (keyValue && $vUtils.isEqual(keyValue, renderValue.value)) return
|
|
30
31
|
formatValueFun(keyValue)
|
|
31
32
|
}
|
|
32
33
|
|
|
@@ -98,10 +99,18 @@ export default function (props, context, proxy) {
|
|
|
98
99
|
renderText.value = footerText
|
|
99
100
|
return
|
|
100
101
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
102
|
+
const { rvalue, rtext } = $vUtils.formatRender(value, props.rkey, props.rdata, props.rname, props.rprops, proxy, editable)
|
|
103
|
+
if (['$vMoney'].includes(props.rname)) {
|
|
104
|
+
renderValue.value = rtext
|
|
105
|
+
} else {
|
|
106
|
+
renderValue.value = rvalue
|
|
107
|
+
}
|
|
108
|
+
if (props.rname === '$vTime' && props.rprops.range && Array.isArray(rtext) && rtext.length > 0) {
|
|
109
|
+
renderText.value = `${rtext[0] || ''}${props.rprops.separator}${rtext[1] || ''}`
|
|
110
|
+
} else {
|
|
111
|
+
renderText.value = rtext
|
|
112
|
+
}
|
|
113
|
+
return { rvalue, rtext }
|
|
105
114
|
}
|
|
106
115
|
const getBillClass = bil => {
|
|
107
116
|
return { basic: bil.fullText === '元', commafy: ['千', '百万', '十亿', '兆'].includes(bil.fullText) }
|