sh-view 2.8.3 → 2.8.4

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sh-view",
3
- "version": "2.8.3",
3
+ "version": "2.8.4",
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",
@@ -21,10 +21,36 @@
21
21
 
22
22
  <script>
23
23
  import { defineComponent, ref, computed } from 'vue'
24
- import { alertProps } from './alert.ts'
25
24
  export default defineComponent({
26
25
  name: 'ShAlert',
27
- props: alertProps,
26
+ props: {
27
+ type: {
28
+ type: String,
29
+ default: 'info'
30
+ },
31
+ title: {
32
+ type: String
33
+ },
34
+ content: {
35
+ type: String
36
+ },
37
+ closable: {
38
+ type: Boolean,
39
+ default: false
40
+ },
41
+ showIcon: {
42
+ type: Boolean,
43
+ default: false
44
+ },
45
+ fade: {
46
+ type: Boolean,
47
+ default: true
48
+ },
49
+ block: {
50
+ type: Boolean,
51
+ default: false
52
+ }
53
+ },
28
54
  emits: ['close'],
29
55
  setup(props, context) {
30
56
  const { slots, emit } = context
@@ -68,18 +68,19 @@ export const tableFooterCompute = (columns, data, computeType, typeObj = {}) =>
68
68
  export const turnColumnItemFilters = (column, props) => {
69
69
  if (column.filters) return
70
70
  let columnRender = column.cellRender || column.editRender || column.contentRender
71
- let columnProps = Object.assign({}, props)
72
71
  let renderSelects = ['$select', '$vSelect', '$vCheckgroup', '$vRadiogroup', '$vSwitch']
73
- let renderTimes = ['$vTime']
74
- if (renderTimes.includes(columnRender.name)) {
75
- column.filters = [{ data: null }]
76
- column.filterRender = { name: '$vFilterTime', props: columnProps }
72
+ let renderComplexs = ['$vTime', '$vMoney', '$vProgress']
73
+ let defaultProps = { colRender: columnRender }
74
+ if (renderComplexs.includes(columnRender.name)) {
75
+ defaultProps.type = columnRender.name === '$vTime' ? 'date' : 'number'
76
+ column.filters = [{ data: { type: 'has', valueSt: null, valueEd: null }, resetValue: { type: 'has', valueSt: null, valueEd: null } }]
77
+ column.filterRender = { name: '$vFilterComplex', props: Object.assign(defaultProps, props) }
77
78
  } else if (renderSelects.includes(columnRender.name)) {
78
79
  column.filters = Array.isArray(columnRender.props && columnRender.props.options) ? columnRender.props.options : []
79
80
  if (column.filterMultiple === undefined) column.filterMultiple = true
80
81
  } else {
81
82
  column.filters = [{ data: null }]
82
- column.filterRender = { name: '$vFilterInput', props: columnProps }
83
+ column.filterRender = { name: '$vFilterInput', props: Object.assign(defaultProps, props) }
83
84
  }
84
85
  }
85
86
  // 转换表头校验规则
@@ -198,6 +198,13 @@ button:focus, .vxe-button.type--button:not(.is--disabled):focus{
198
198
  box-sizing: border-box;
199
199
  }
200
200
  &--input{
201
+ display: flex;
202
+ justify-content: space-between;
203
+ align-items: center;
204
+ .vxe-input{
205
+ width: 120px;
206
+ flex: 1;
207
+ }
201
208
  }
202
209
  &--list {
203
210
  margin: 0;
@@ -215,14 +222,16 @@ button:focus, .vxe-button.type--button:not(.is--disabled):focus{
215
222
  display: block;
216
223
  }
217
224
  }
225
+ &--inner{
226
+ }
218
227
  &--top{
219
228
  position: relative;
220
- margin-bottom: 5px;
229
+ margin-bottom: 8px;
221
230
  }
222
231
  &--body{
223
232
  }
224
233
  &--footer{
225
- margin-top: 5px;
234
+ margin-top: 8px;
226
235
  padding: 5px 0 2px;
227
236
  .vxe-button{
228
237
  margin-left: 0;
@@ -0,0 +1,45 @@
1
+ <template>
2
+ <div class="vxe-filter--wrap">
3
+ <div class="vxe-filter--top">
4
+ <vxe-radio-group v-model="renderOption.data.type">
5
+ <template v-for="filterType in filterTypes" :key="filterType.value">
6
+ <vxe-radio-button v-ripple :label="filterType.value" size="mini">{{ filterType.label }}</vxe-radio-button>
7
+ </template>
8
+ </vxe-radio-group>
9
+ </div>
10
+ <div class="vxe-filter--input">
11
+ <vxe-input v-model="renderOption.data.valueSt" v-bind="rprops" :disabled="false" />
12
+ <template v-if="renderOption.data.type === 'ltgt'">
13
+ <span style="margin: 0 8px">至</span>
14
+ <vxe-input v-model="renderOption.data.valueEd" v-bind="rprops" :disabled="false" />
15
+ </template>
16
+ </div>
17
+ </div>
18
+ </template>
19
+
20
+ <script>
21
+ import { defineComponent, getCurrentInstance, reactive, ref } from 'vue'
22
+ import cellProps from '../mixin/cell-props'
23
+ import filterHooks from '../mixin/filter-hooks'
24
+ export default defineComponent({
25
+ name: 'VxeFilterTime',
26
+ props: cellProps,
27
+ setup(props, context) {
28
+ const { proxy } = getCurrentInstance()
29
+ const filterTypes = [
30
+ { value: 'has', label: '包含' },
31
+ { value: 'eq', label: '等于' },
32
+ { value: 'gt', label: '大于' },
33
+ { value: 'lt', label: '小于' },
34
+ { value: 'ltgt', label: '区间' }
35
+ ]
36
+
37
+ const useFilter = filterHooks(props, context, proxy)
38
+
39
+ return {
40
+ ...useFilter,
41
+ filterTypes
42
+ }
43
+ }
44
+ })
45
+ </script>
@@ -29,7 +29,7 @@ import vxeFooterMoney from './footer/vxe-footer-money.vue'
29
29
 
30
30
  // 过滤器组件封装
31
31
  import vxeFilterInput from './filters/vxe-filter-input.vue'
32
- import vxeFilterTime from './filters/vxe-filter-time.vue'
32
+ import vxeFilterComplex from './filters/vxe-filter-complex.vue'
33
33
 
34
34
  // 渲染器通用默认配置
35
35
  let defaultPublicProps = {
@@ -464,8 +464,7 @@ const extraRenders = {
464
464
  const filterRenders = {
465
465
  $vFilterInput: {
466
466
  renderFilter(renderOpts, params) {
467
- let props = getFixedProp(renderOpts, params)
468
- return [<vxeFilterInput rparams={params} rname={renderOpts.name} rprops={props.rprops} rkey={props.rkey} />]
467
+ return [<vxeFilterInput rparams={params} rprops={renderOpts.props} />]
469
468
  },
470
469
  filterResetMethod({ options, column }) {
471
470
  options.forEach(option => {
@@ -479,26 +478,36 @@ const filterRenders = {
479
478
  return String(rtext).toLowerCase().indexOf(data.toLowerCase()) > -1
480
479
  }
481
480
  },
482
- $vFilterTime: {
481
+ $vFilterComplex: {
483
482
  renderFilter(renderOpts, params) {
484
- let props = getFixedProp(renderOpts, params)
485
- return [<vxeFilterTime rparams={params} rname={renderOpts.name} rprops={props.rprops} rkey={props.rkey} />]
483
+ return [<vxeFilterComplex rparams={params} rprops={renderOpts.props} />]
486
484
  },
487
485
  filterResetMethod({ options, column }) {
488
486
  options.forEach(option => {
489
- option.data = option.resetValue || []
487
+ option.data = option.resetValue || {}
490
488
  })
491
489
  },
492
490
  filterMethod({ value, option, cellValue, row, column, $table }) {
493
491
  const { data } = option
494
492
  const { rname, rprops, property } = column
495
- let { rtext } = utils.formatRender(cellValue, property, row, rname, rprops, { $vUtils: utils })
496
- if (rprops.range || rprops.range === undefined) {
497
- let startDiff = utils.getDateDiff(data[0], rtext)
498
- let endDiff = utils.getDateDiff(rtext, data[1])
499
- return startDiff.done && endDiff.done
493
+ const { type, valueSt, valueEd } = data
494
+ let { rvalue, rtext } = utils.formatRender(cellValue, property, row, rname, rprops, { $vUtils: utils })
495
+ let isDate = ['date', 'time', 'datetime', 'week', 'month', 'year'].includes(rprops.type)
496
+ switch (type) {
497
+ case 'has':
498
+ return String(rtext).indexOf(valueSt) > -1
499
+ case 'eq':
500
+ return utils.isEqual(rvalue, valueSt)
501
+ case 'gt':
502
+ return isDate ? utils.getDateDiff(valueSt, rvalue).done : Number(rvalue) > Number(valueSt)
503
+ case 'lt':
504
+ return isDate ? utils.getDateDiff(rvalue, valueSt).done : Number(rvalue) < Number(valueSt)
505
+ case 'ltgt':
506
+ if (isDate) {
507
+ return utils.getDateDiff(valueSt, rvalue).done && utils.getDateDiff(rvalue, valueEd).done
508
+ }
509
+ return Number(rvalue) > Number(valueSt) && Number(rvalue) < Number(valueEd)
500
510
  }
501
- return data === rtext
502
511
  }
503
512
  }
504
513
  }
@@ -1,4 +1,4 @@
1
- import { ShType } from '../../../types/component'
1
+ import { ShType } from './component'
2
2
 
3
3
  export const alertProps = {
4
4
  type: {
@@ -1,26 +0,0 @@
1
- <template>
2
- <div class="vxe-filter--wrap">
3
- <span class="vxe-filter--inner">
4
- <sh-date v-model="renderOption.data" v-bind="rprops" :disabled="false" @change="vxeFilterChange" />
5
- </span>
6
- </div>
7
- </template>
8
-
9
- <script>
10
- import { defineComponent, getCurrentInstance, reactive, ref } from 'vue'
11
- import cellProps from '../mixin/cell-props'
12
- import filterHooks from '../mixin/filter-hooks'
13
- export default defineComponent({
14
- name: 'VxeFilterTime',
15
- props: cellProps,
16
- setup(props, context) {
17
- const { proxy } = getCurrentInstance()
18
-
19
- const useFilter = filterHooks(props, context, proxy)
20
-
21
- return {
22
- ...useFilter
23
- }
24
- }
25
- })
26
- </script>