sh-view 2.9.8 → 2.9.11

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.
Files changed (34) hide show
  1. package/package.json +11 -11
  2. package/packages/components/index.js +1 -7
  3. package/packages/components/sh-calendar/index.vue +2 -2
  4. package/packages/components/sh-date/index.vue +1 -1
  5. package/packages/components/sh-form/js/useForm.js +10 -3
  6. package/packages/components/sh-table/components/importModal.vue +7 -7
  7. package/packages/components/sh-table/grid.vue +1 -2
  8. package/packages/components/sh-table/js/props.js +7 -3
  9. package/packages/components/sh-table/js/tableMethods.js +42 -3
  10. package/packages/components/sh-table/js/useTable.js +38 -35
  11. package/packages/components/sh-table/table.vue +1 -2
  12. package/packages/components/sh-tree/components/table-tree.vue +49 -109
  13. package/packages/components/sh-tree/index.vue +127 -38
  14. package/packages/css/theme.scss +4 -0
  15. package/packages/index.js +0 -1
  16. package/packages/vxeTable/css/index.scss +18 -24
  17. package/packages/vxeTable/index.js +81 -49
  18. package/packages/vxeTable/render/cell/vxe-render-checkgroup.vue +4 -4
  19. package/packages/vxeTable/render/cell/vxe-render-goption.vue +3 -3
  20. package/packages/vxeTable/render/cell/vxe-render-img.vue +6 -2
  21. package/packages/vxeTable/render/cell/vxe-render-input.vue +2 -2
  22. package/packages/vxeTable/render/cell/vxe-render-money.vue +19 -3
  23. package/packages/vxeTable/render/cell/vxe-render-radiogroup.vue +4 -4
  24. package/packages/vxeTable/render/cell/vxe-render-select.vue +2 -2
  25. package/packages/vxeTable/render/cell/vxe-render-table.vue +7 -6
  26. package/packages/vxeTable/render/cell/vxe-render-time.vue +3 -3
  27. package/packages/vxeTable/render/cell/vxe-render-tree.vue +1 -1
  28. package/packages/vxeTable/render/footer/vxe-footer-input.vue +13 -3
  29. package/packages/vxeTable/render/footer/vxe-footer-money.vue +13 -3
  30. package/packages/vxeTable/render/globalRenders.jsx +73 -205
  31. package/packages/vxeTable/render/header/vxe-header-money.vue +1 -1
  32. package/packages/vxeTable/render/mixin/cell-hooks.js +47 -53
  33. package/packages/vxeTable/render/mixin/cell-props.js +2 -10
  34. package/packages/vxeTable/render/mixin/filter-hooks.js +3 -0
@@ -19,11 +19,7 @@ import ShValidators from 'sh-tools/packages/utils/validate'
19
19
  import { utils } from 'sh-tools'
20
20
  import { publicRenders, extraRenders, filterRenders, publicRendersNames } from './render/globalRenders.jsx'
21
21
 
22
- let uiOptions = {}
23
-
24
- let tableOptions = {
25
- zIndex: 1500,
26
- version: 0,
22
+ let uiOptions = {
27
23
  input: {
28
24
  controls: false,
29
25
  clearable: true
@@ -34,6 +30,55 @@ let tableOptions = {
34
30
  keyField: 'value'
35
31
  }
36
32
  },
33
+ numberInput: {
34
+ clearable: true,
35
+ controlConfig: { enabled: false }
36
+ },
37
+ pager: {
38
+ currentPage: 1,
39
+ pageSize: 50,
40
+ total: 0,
41
+ layouts: ['Sizes', 'PrevJump', 'PrevPage', 'Number', 'NextPage', 'NextJump', 'FullJump', 'Total'],
42
+ pagerCount: 7,
43
+ pageSizes: [
44
+ { label: '50条', value: 50 },
45
+ { label: '100条', value: 100 },
46
+ { label: '500条', value: 500 },
47
+ { label: '1000条', value: 1000 },
48
+ { label: '10000条', value: 10000 },
49
+ { label: '10万条', value: 100000 }
50
+ ],
51
+ align: 'right',
52
+ border: true,
53
+ background: false,
54
+ perfect: true,
55
+ autoHidden: false,
56
+ enabled: true
57
+ },
58
+ toolbar: {
59
+ custom: {
60
+ immediate: false
61
+ }
62
+ },
63
+ form: {},
64
+ modal: {
65
+ lockView: true,
66
+ resize: true,
67
+ mask: true,
68
+ duration: 3000,
69
+ dblclickZoom: true,
70
+ showTitleOverflow: true
71
+ },
72
+ icon: {},
73
+ loading: {
74
+ icon: 'vxe-icon-spinner roll',
75
+ text: '加载中...'
76
+ }
77
+ }
78
+
79
+ let tableOptions = {
80
+ zIndex: 1500,
81
+ version: 0,
37
82
  table: {
38
83
  fit: true,
39
84
  stripe: false,
@@ -44,14 +89,40 @@ let tableOptions = {
44
89
  rowConfig: {
45
90
  useKey: true,
46
91
  keyField: '_XID',
47
- isCurrent: true,
48
- isHover: true
92
+ isHover: true,
93
+ drag: false,
94
+ resizable: false
95
+ },
96
+ columnConfig: {
97
+ useKey: true,
98
+ isHover: true,
99
+ drag: false,
100
+ resizable: false
49
101
  },
102
+ currentRowConfig: {},
50
103
  sortConfig: {
51
104
  multiple: false,
52
105
  chronological: false,
53
106
  trigger: 'cell'
54
107
  },
108
+ rowDragConfig: {
109
+ showIcon: true,
110
+ showDragTip: true,
111
+ isPeerDrag: false,
112
+ isCrossDrag: false,
113
+ isToChildDrag: false,
114
+ isSelfToChildDrag: false,
115
+ showGuidesStatus: true
116
+ },
117
+ columnDragConfig: {
118
+ showIcon: true,
119
+ showDragTip: true,
120
+ isPeerDrag: false,
121
+ isCrossDrag: false,
122
+ isToChildDrag: false,
123
+ isSelfToChildDrag: false,
124
+ showGuidesStatus: true
125
+ },
55
126
  radioConfig: {
56
127
  strict: true,
57
128
  highlight: true
@@ -99,6 +170,7 @@ let tableOptions = {
99
170
  mode: 'cell'
100
171
  },
101
172
  customConfig: {
173
+ enabled: true,
102
174
  storage: true
103
175
  },
104
176
  seqConfig: {
@@ -107,48 +179,8 @@ let tableOptions = {
107
179
  resizeConfig: {
108
180
  refreshDelay: 200
109
181
  },
110
- scrollX: { enabled: false, gt: 40, oSize: 0 },
111
- scrollY: { enabled: true, gt: 60, oSize: 0 }
112
- },
113
- pager: {
114
- currentPage: 1,
115
- pageSize: 50,
116
- total: 0,
117
- layouts: ['Sizes', 'PrevJump', 'PrevPage', 'Number', 'NextPage', 'NextJump', 'FullJump', 'Total'],
118
- pagerCount: 7,
119
- pageSizes: [
120
- { label: '50条', value: 50 },
121
- { label: '100条', value: 100 },
122
- { label: '500条', value: 500 },
123
- { label: '1000条', value: 1000 },
124
- { label: '10000条', value: 10000 },
125
- { label: '10万条', value: 100000 }
126
- ],
127
- align: 'right',
128
- border: true,
129
- background: false,
130
- perfect: true,
131
- autoHidden: false,
132
- enabled: true
133
- },
134
- toolbar: {
135
- custom: {
136
- immediate: false
137
- }
138
- },
139
- form: {},
140
- modal: {
141
- lockView: true,
142
- resize: true,
143
- mask: true,
144
- duration: 3000,
145
- dblclickZoom: true,
146
- showTitleOverflow: true
147
- },
148
- icon: {},
149
- loading: {
150
- icon: 'vxe-icon-spinner roll',
151
- text: '加载中...'
182
+ virtualXConfig: { enabled: false, gt: 40, oSize: 0 },
183
+ virtualYConfig: { enabled: true, gt: 60, oSize: 0 }
152
184
  },
153
185
  moneyConfig: {
154
186
  enabled: false,
@@ -6,9 +6,9 @@
6
6
  </vxe-checkbox-group>
7
7
  </template>
8
8
  <template v-else-if="!redit && showType">
9
- <div v-for="roption in rprops.options" :key="roption">
9
+ <template v-for="roption in rprops.options" :key="roption">
10
10
  <sh-tag v-if="roptionShow(roption)" :color="roption.tagColor || rprops.tagColor" :type="roption.tagType || rprops.tagType">{{ roption.label }}</sh-tag>
11
- </div>
11
+ </template>
12
12
  </template>
13
13
  <template v-else>
14
14
  <span v-html="renderText"></span>
@@ -27,10 +27,10 @@ export default defineComponent({
27
27
  const { proxy } = getCurrentInstance()
28
28
  const useCell = cellHooks(props, context, proxy)
29
29
 
30
- const showType = computed(() => props.rprops.showType === 'tag')
30
+ const showType = computed(() => useCell.rprops.value.showType === 'tag')
31
31
 
32
32
  const roptionShow = roption => {
33
- return useCell.renderText.value.split(props.rprops.split).includes(roption.label)
33
+ return useCell.renderText.value.split(useCell.rprops.value.split).includes(roption.label)
34
34
  }
35
35
 
36
36
  return {
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <span class="vxe-render--inner">
3
3
  <template v-for="renderBtn in renderBtns" :key="renderBtn.code">
4
- <sh-button
4
+ <vxe-button
5
5
  v-if="isBtnRender(renderBtn)"
6
6
  v-ripple
7
7
  :type="rprops.type"
@@ -10,7 +10,7 @@
10
10
  :status="getBtnContent(renderBtn).status"
11
11
  @click="vxeBtnCallback($event, renderBtn)">
12
12
  {{ getBtnContent(renderBtn).content }}
13
- </sh-button>
13
+ </vxe-button>
14
14
  </template>
15
15
  </span>
16
16
  </template>
@@ -29,7 +29,7 @@ export default defineComponent({
29
29
 
30
30
  const renderBtns = computed(() => {
31
31
  let renderBtns = []
32
- let { btnContain, btnsConfig } = props.rprops
32
+ let { btnContain, btnsConfig } = useCell.rprops.value
33
33
  if (btnsConfig && Array.isArray(btnsConfig)) {
34
34
  renderBtns = btnsConfig
35
35
  }
@@ -7,18 +7,22 @@
7
7
  <script>
8
8
  import { computed, defineComponent, getCurrentInstance } from 'vue'
9
9
  import cellProps from '../mixin/cell-props'
10
+ import cellHooks from '../mixin/cell-hooks'
10
11
  export default defineComponent({
11
12
  name: 'VxeRenderImg',
12
13
  props: cellProps,
13
14
  setup(props, context) {
14
15
  const { proxy } = getCurrentInstance()
15
16
  const { $vUtils } = proxy
16
- const imgSrc = computed(() => $vUtils.get(props.rdata, props.rkey))
17
+ const useCell = cellHooks(props, context, proxy)
18
+
19
+ const imgSrc = computed(() => $vUtils.get(useCell.rdata.value, useCell.rkey.value))
17
20
  const imgHeight = computed(() => {
18
- return props.rprops.square ? props.rprops.width : props.rprops.height
21
+ return useCell.rprops.value.square ? useCell.rprops.value.width : useCell.rprops.value.height
19
22
  })
20
23
 
21
24
  return {
25
+ ...useCell,
22
26
  imgSrc,
23
27
  imgHeight
24
28
  }
@@ -33,11 +33,11 @@ export default defineComponent({
33
33
  const { $vUtils } = proxy
34
34
  const useCell = cellHooks(props, context, proxy)
35
35
 
36
- const controlButton = computed(() => props.rprops.control && ['number', 'float', 'integer'].includes(props.rprops.type))
36
+ const controlButton = computed(() => useCell.rprops.value.control && ['number', 'float', 'integer'].includes(useCell.rprops.value.type))
37
37
 
38
38
  // 输入框数字加减控制
39
39
  const vxeControlClick = bol => {
40
- const { step = 1, min, max } = props.rprops
40
+ const { step = 1, min, max } = useCell.rprops.value
41
41
  let value = bol ? $vUtils.add(useCell.renderValue.value, step) : $vUtils.subtract(useCell.renderValue.value, step)
42
42
  if ((min !== undefined && value < min) || (max !== undefined && value > max)) return
43
43
  useCell.setRenderValue(value)
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <span class="vxe-render--inner" :class="{ 'form-render': rform, 'td-render': !rform, 'td-all': rprops.bill }">
3
3
  <template v-if="redit || isEditAll">
4
- <vxe-input v-model="renderValue" type="number" v-bind="rprops" :size="rsize" :immediate="false" @change="vxeInputChange" @blur="vxeBlurCallback" @clear="vxeBlurCallback" />
4
+ <vxe-number-input v-model="renderText" v-bind="rprops" :size="rsize" :immediate="false" @change="vxeInputChange" @blur="vxeMoneyCallback" @clear="vxeMoneyCallback" />
5
5
  </template>
6
6
  <template v-else-if="rprops.bill">
7
7
  <template v-for="(bil, bilindex) in billGroups" :key="bilindex">
@@ -9,7 +9,7 @@
9
9
  </template>
10
10
  </template>
11
11
  <template v-else>
12
- <span class="blue" v-html="renderText"></span>
12
+ <span class="blue" v-html="cellFormatValue"></span>
13
13
  </template>
14
14
  </span>
15
15
  </template>
@@ -23,10 +23,26 @@ export default defineComponent({
23
23
  props: cellProps,
24
24
  setup(props, context) {
25
25
  const { proxy } = getCurrentInstance()
26
+ const { $vUtils } = proxy
26
27
  const useCell = cellHooks(props, context, proxy)
27
28
 
29
+ const cellFormatValue = computed(() => {
30
+ let cellValue = useCell.renderText.value
31
+ if (useCell.rprops.value.commafy) {
32
+ return $vUtils.commafy(Number(cellValue), { digits: useCell.rprops.value.digits })
33
+ }
34
+ return cellValue
35
+ })
36
+
37
+ const vxeMoneyCallback = async ({ value, $event }) => {
38
+ let cellValue = $vUtils.multiply(value, useCell.rprops.value.moneyUnit || 1)
39
+ useCell.setRenderValue(cellValue)
40
+ }
41
+
28
42
  return {
29
- ...useCell
43
+ ...useCell,
44
+ cellFormatValue,
45
+ vxeMoneyCallback
30
46
  }
31
47
  }
32
48
  })
@@ -6,9 +6,9 @@
6
6
  </vxe-radio-group>
7
7
  </template>
8
8
  <template v-else-if="!redit && showType">
9
- <div v-for="roption in rprops.options" :key="roption">
9
+ <template v-for="roption in rprops.options" :key="roption">
10
10
  <sh-tag v-if="roptionShow(roption)" :color="roption.tagColor || rprops.tagColor" :type="roption.tagType || rprops.tagType">{{ roption.label }}</sh-tag>
11
- </div>
11
+ </template>
12
12
  </template>
13
13
  <template v-else>
14
14
  <span v-html="renderText"></span>
@@ -27,10 +27,10 @@ export default defineComponent({
27
27
  const { proxy } = getCurrentInstance()
28
28
  const useCell = cellHooks(props, context, proxy)
29
29
 
30
- const showType = computed(() => props.rprops.showType === 'tag')
30
+ const showType = computed(() => useCell.rprops.value.showType === 'tag')
31
31
 
32
32
  const roptionShow = roption => {
33
- return useCell.renderText.value.split(props.rprops.split).includes(roption.label)
33
+ return useCell.renderText.value.split(useCell.rprops.value.split).includes(roption.label)
34
34
  }
35
35
 
36
36
  return {
@@ -31,11 +31,11 @@ export default defineComponent({
31
31
  const { proxy } = getCurrentInstance()
32
32
  const useCell = cellHooks(props, context, proxy)
33
33
 
34
- const showType = computed(() => props.rprops.showType === 'tag')
34
+ const showType = computed(() => useCell.rprops.value.showType === 'tag')
35
35
 
36
36
  const showTags = computed(() => {
37
37
  const renderValue = useCell.renderValue.value
38
- const { options = [], multiple } = props.rprops
38
+ const { options = [], multiple } = useCell.rprops.value
39
39
  if (multiple && Array.isArray(renderValue)) {
40
40
  return options.filter(option => renderValue.includes(option.value))
41
41
  }
@@ -6,7 +6,7 @@
6
6
  v-bind="rprops"
7
7
  :size="rsize"
8
8
  :data-sourse="renderValue"
9
- @edit-closed="vxeInputCallback"
9
+ @edit-closed="vxeTableCallback"
10
10
  @toolbaroption="onToolbaroption"></sh-table>
11
11
  </span>
12
12
  </template>
@@ -24,22 +24,23 @@ export default defineComponent({
24
24
  const shTableRef = ref()
25
25
 
26
26
  // 输入框回调
27
- const vxeInputCallback = ({ $table, row }) => {
28
- driveBackData()
29
- }
27
+ const vxeTableCallback = params => {}
28
+
30
29
  // 新增、删除行回调
31
30
  const onToolbaroption = (code, data, $table) => {
32
31
  driveBackData()
33
32
  }
33
+
34
34
  // 回填数据
35
35
  const driveBackData = value => {
36
- useCell.setRenderValue(shTableRef.value.getFullData(), true)
36
+ let cellValue = shTableRef.value.getFullData()
37
+ useCell.setRenderValue(cellValue)
37
38
  }
38
39
 
39
40
  return {
40
41
  ...useCell,
41
42
  shTableRef,
42
- vxeInputCallback,
43
+ vxeTableCallback,
43
44
  onToolbaroption
44
45
  }
45
46
  }
@@ -23,13 +23,13 @@ export default defineComponent({
23
23
 
24
24
  // 禁用事件
25
25
  const vxeDisabledMethod = ({ date, viewType }) => {
26
- let { startTime, endTime } = props.rprops
26
+ let { startTime, endTime } = useCell.rprops.value
27
27
  if (startTime) {
28
- startTime = $vUtils.format(startTime, props.rdata)
28
+ startTime = $vUtils.format(startTime, useCell.rdata.value)
29
29
  let { done, time } = $vUtils.getDateDiff(startTime, date)
30
30
  return startTime ? !done : false
31
31
  } else if (endTime) {
32
- endTime = $vUtils.format(endTime, props.rdata)
32
+ endTime = $vUtils.format(endTime, useCell.rdata.value)
33
33
  let { done, time } = $vUtils.getDateDiff(endTime, date)
34
34
  return done
35
35
  }
@@ -31,7 +31,7 @@ export default defineComponent({
31
31
 
32
32
  // 输入框回调
33
33
  const vxeTreeCallback = (selectedKeys, selectedRows) => {
34
- let { valueKeys, multiple } = props.rprops
34
+ let { valueKeys, multiple } = useCell.rprops.value
35
35
  let rvalue = selectedKeys
36
36
  if (!multiple) {
37
37
  rvalue = selectedKeys[0] || ''
@@ -1,9 +1,9 @@
1
1
  <template>
2
- <span v-html="renderText"></span>
2
+ <span v-html="cellFormatValue"></span>
3
3
  </template>
4
4
 
5
5
  <script>
6
- import { defineComponent, getCurrentInstance } from 'vue'
6
+ import { computed, defineComponent, getCurrentInstance } from 'vue'
7
7
  import cellProps from '../mixin/cell-props'
8
8
  import cellHooks from '../mixin/cell-hooks'
9
9
  export default defineComponent({
@@ -11,10 +11,20 @@ export default defineComponent({
11
11
  props: cellProps,
12
12
  setup(props, context) {
13
13
  const { proxy } = getCurrentInstance()
14
+ const { $vUtils } = proxy
14
15
  const useCell = cellHooks(props, context, proxy)
15
16
 
17
+ const cellFormatValue = computed(() => {
18
+ let cellValue = useCell.renderText.value
19
+ if (useCell.rprops.value.commafy) {
20
+ return $vUtils.commafy(Number(cellValue), { digits: useCell.rprops.value.digits })
21
+ }
22
+ return cellValue
23
+ })
24
+
16
25
  return {
17
- ...useCell
26
+ ...useCell,
27
+ cellFormatValue
18
28
  }
19
29
  }
20
30
  })
@@ -5,12 +5,12 @@
5
5
  </template>
6
6
  </div>
7
7
  <template v-else>
8
- <span class="blue" v-html="renderText"></span>
8
+ <span class="blue" v-html="cellFormatValue"></span>
9
9
  </template>
10
10
  </template>
11
11
 
12
12
  <script>
13
- import { defineComponent, getCurrentInstance } from 'vue'
13
+ import { computed, defineComponent, getCurrentInstance } from 'vue'
14
14
  import cellProps from '../mixin/cell-props'
15
15
  import cellHooks from '../mixin/cell-hooks'
16
16
  export default defineComponent({
@@ -18,10 +18,20 @@ export default defineComponent({
18
18
  props: cellProps,
19
19
  setup(props, context) {
20
20
  const { proxy } = getCurrentInstance()
21
+ const { $vUtils } = proxy
21
22
  const useCell = cellHooks(props, context, proxy)
22
23
 
24
+ const cellFormatValue = computed(() => {
25
+ let cellValue = useCell.renderText.value
26
+ if (useCell.rprops.value.commafy) {
27
+ return $vUtils.commafy(Number(cellValue), { digits: useCell.rprops.value.digits })
28
+ }
29
+ return cellValue
30
+ })
31
+
23
32
  return {
24
- ...useCell
33
+ ...useCell,
34
+ cellFormatValue
25
35
  }
26
36
  }
27
37
  })