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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sh-view",
3
- "version": "2.9.8",
3
+ "version": "2.9.11",
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",
@@ -19,14 +19,14 @@
19
19
  "@codemirror/lang-javascript": "^6.1.9",
20
20
  "@codemirror/lang-json": "^6.0.1",
21
21
  "@codemirror/lang-sql": "^6.5.2",
22
- "@vxe-ui/plugin-export-pdf": "^4.0.9",
23
- "@vxe-ui/plugin-export-xlsx": "^4.0.13",
24
- "@vxe-ui/plugin-menu": "^4.0.7",
25
- "@vxe-ui/plugin-render-wangeditor": "^4.0.3",
22
+ "@vxe-ui/plugin-export-pdf": "^4.2.4",
23
+ "@vxe-ui/plugin-export-xlsx": "^4.3.0",
24
+ "@vxe-ui/plugin-menu": "^4.1.0",
25
+ "@vxe-ui/plugin-render-wangeditor": "^4.0.5",
26
26
  "@wangeditor/editor": "^5.1.23",
27
27
  "@wolf-table/table": "^0.0.1",
28
28
  "babel-polyfill": "^6.26.0",
29
- "codemirror": "^6.0.1",
29
+ "codemirror": "^6.0.2",
30
30
  "core-js": "^3.32.2",
31
31
  "countup.js": "^2.8.0",
32
32
  "cron-parser": "^4.8.1",
@@ -36,12 +36,12 @@
36
36
  "jszip": "^3.10.1",
37
37
  "lunar-typescript": "^1.6.10",
38
38
  "popper.js": "^1.16.1",
39
- "sh-tools": "^2.2.15",
40
- "vue": "^3.5.13",
39
+ "sh-tools": "^2.2.19",
40
+ "vue": "^3.5.20",
41
41
  "vue-masonry": "^0.16.0",
42
- "vue-router": "^4.2.4",
43
- "vxe-pc-ui": "^4.3.79",
44
- "vxe-table": "^4.10.5"
42
+ "vue-router": "^4.5.1",
43
+ "vxe-pc-ui": "^4.9.6",
44
+ "vxe-table": "^4.16.1"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@typescript-eslint/eslint-plugin": "^6.9.0",
@@ -33,7 +33,6 @@ import ShTree from './sh-tree/index.vue'
33
33
  import ShUpload from './sh-upload/index.vue'
34
34
  import ShWaterFall from './sh-water-fall/index.vue'
35
35
  import ShWaterMark from './sh-water-mark/index.vue'
36
- import { VxeButton, VxeInput, VxeTextarea, VxeSelect } from 'vxe-pc-ui'
37
36
 
38
37
  const components = {
39
38
  ShAlert,
@@ -69,12 +68,7 @@ const components = {
69
68
  ShTree,
70
69
  ShUpload,
71
70
  ShWaterFall,
72
- ShWaterMark,
73
-
74
- ShButton: VxeButton,
75
- ShInput: VxeInput,
76
- ShTextarea: VxeTextarea,
77
- ShSelect: VxeSelect
71
+ ShWaterMark
78
72
  }
79
73
 
80
74
  const index = {
@@ -2,8 +2,8 @@
2
2
  <div class="sh-calendar">
3
3
  <div v-if="header" class="sh-calendar-row sh-calendar-head">
4
4
  <div class="info">
5
- <sh-select v-if="type !== 'year'" v-bind="yearSelectConfig" @change="onYearChange" />
6
- <sh-select v-if="!['month', 'year'].includes(type)" v-bind="monthSelectConfig" @change="onMonthChange"></sh-select>
5
+ <vxe-select v-if="type !== 'year'" v-bind="yearSelectConfig" @change="onYearChange" />
6
+ <vxe-select v-if="!['month', 'year'].includes(type)" v-bind="monthSelectConfig" @change="onMonthChange"></vxe-select>
7
7
  </div>
8
8
  <div class="extra">
9
9
  <template v-for="item in headerHandles" :key="item.code">
@@ -52,7 +52,7 @@ export default defineComponent({
52
52
  props: {
53
53
  modelValue: [String, Number, Date, Array],
54
54
  type: { type: String, default: 'date' },
55
- clearable: { type: Boolean },
55
+ clearable: { type: Boolean, default: true },
56
56
  readonly: Boolean,
57
57
  disabled: Boolean,
58
58
  placeholder: String,
@@ -1,5 +1,5 @@
1
1
  import { computed, onBeforeMount, ref, watch } from 'vue'
2
- import { formulaReplaceAll, getFieldRules } from '../../sh-table/js/tableMethods'
2
+ import { formulaReplaceAll, getFieldRules, transKeys, defaultProps } from '../../sh-table/js/tableMethods'
3
3
 
4
4
  // 表单默认配置
5
5
  const formConfigDefault = {
@@ -151,9 +151,16 @@ export default function (props, context, proxy, isForm) {
151
151
  if (isItemTitle) Object.assign(tar, titleConfigDefault)
152
152
  return tar
153
153
  }
154
+ let rname = ori.renderName || '$vInput'
155
+ let rprops = Object.assign({}, defaultProps[rname], ori.renderProps)
156
+ transKeys.forEach(key => {
157
+ if (!$vUtils.isNone(rprops[key])) {
158
+ rprops[key] = Boolean(+rprops[key])
159
+ }
160
+ })
154
161
  let renderConfig = {
155
- name: ori.renderName || '$vInput',
156
- props: Object.assign({}, ori.renderProps || {})
162
+ name: rname,
163
+ props: rprops
157
164
  }
158
165
  // 首先提取校验配置
159
166
  getFieldRules(ori, rules)
@@ -8,13 +8,13 @@
8
8
  </transition>
9
9
  </div>
10
10
  <div class="import-template-head">
11
- <sh-button :size="size" @click="handleDownloadTemplateBtn">下载导入模板</sh-button>
12
- <sh-button :size="size" status="primary" @click="handleImportFileBtn">选择导入文件</sh-button>
11
+ <vxe-button :size="size" @click="handleDownloadTemplateBtn">下载导入模板</vxe-button>
12
+ <vxe-button :size="size" status="primary" @click="handleImportFileBtn">选择导入文件</vxe-button>
13
13
  <div class="floatright">
14
14
  <sh-poptip v-if="importErrorData.length > 0" trigger="click" title="错误信息" placement="bottom-end">
15
- <sh-button :size="size" status="danger">
15
+ <vxe-button :size="size" status="danger">
16
16
  共发现 <strong>{{ importErrorData.length }}</strong> 条不符合规范数据
17
- </sh-button>
17
+ </vxe-button>
18
18
  <template #content>
19
19
  <div class="import-template-error-list">
20
20
  <div v-for="(errData, errDataIndex) in importErrorData" :key="errDataIndex" class="error-item">
@@ -31,9 +31,9 @@
31
31
  <div class="import-template-foot">
32
32
  <div class="foot-left"></div>
33
33
  <div class="foot-right">
34
- <sh-button :size="size" @click="onModalClose">取消</sh-button>
35
- <sh-button :size="size" status="primary" @click="handleImportDataBtn('all')">全部导入</sh-button>
36
- <sh-button v-if="tableGlobalConfig.selectType" :size="size" status="warning" @click="handleImportDataBtn('select')">导入选中</sh-button>
34
+ <vxe-button :size="size" @click="onModalClose">取消</vxe-button>
35
+ <vxe-button :size="size" status="primary" @click="handleImportDataBtn('all')">全部导入</vxe-button>
36
+ <vxe-button v-if="tableGlobalConfig.selectType" :size="size" status="warning" @click="handleImportDataBtn('select')">导入选中</vxe-button>
37
37
  </div>
38
38
  </div>
39
39
  </sh-modal>
@@ -2,7 +2,6 @@
2
2
  <div class="sh-vxe-table" :class="{ 'sh-table-ghost': tableGlobalConfig.ghost }" :style="{ height: wrapHeight }">
3
3
  <vxe-grid
4
4
  ref="tableRef"
5
- :key="renderKey"
6
5
  :class="{ 'is--hasfooter': showFooter }"
7
6
  v-bind="tableBindConfig"
8
7
  :columns="tableColumns"
@@ -60,7 +59,7 @@
60
59
  <div class="sh-table-toolbar-item" v-for="(tool, toolIndex) in tableTools" :key="toolIndex">
61
60
  <vxe-button v-ripple :size="size" v-bind="tool" @click="handleTableTool(tool)"></vxe-button>
62
61
  </div>
63
- <div v-if="tableMoneyConfig.enabled" @click.stop class="sh-table-toolbar-item">单位:<sh-select v-model="tableMoneyUnit" v-bind="tableMoneyConfig" /></div>
62
+ <div v-if="tableMoneyConfig.enabled" @click.stop class="sh-table-toolbar-item">单位:<vxe-select v-model="tableMoneyUnit" v-bind="tableMoneyConfig" /></div>
64
63
  </template>
65
64
  </vxe-toolbar>
66
65
  </div>
@@ -112,7 +112,8 @@ export default {
112
112
  type: [Function]
113
113
  },
114
114
  keepSource: {
115
- type: Boolean
115
+ type: Boolean,
116
+ default: true
116
117
  },
117
118
  emptyIcon: {
118
119
  type: String
@@ -240,8 +241,11 @@ export default {
240
241
  return {}
241
242
  }
242
243
  },
243
- scrollX: Object,
244
- scrollY: Object,
244
+ virtualXConfig: Object,
245
+ virtualYConfig: Object,
246
+ currentRowConfig: Object,
247
+ rowDragConfig: Object,
248
+ columnDragConfig: Object,
245
249
  params: Object,
246
250
  footerData: Array,
247
251
 
@@ -1,6 +1,32 @@
1
1
  import { utils } from 'sh-tools'
2
2
  const $vUtils = utils
3
3
 
4
+ export const transKeys = ['transfer', 'disabled', 'multiple', 'isLeaf', 'commafy', 'border', 'filterable', 'showWordCount', 'editable', 'bill', 'range']
5
+
6
+ // 渲染器个性化默认配置
7
+ export const defaultProps = {
8
+ $vInput: { type: 'text', placeholder: '请输入', transfer: true, digits: 2, prefixType: 'text', suffixType: 'text' },
9
+ $vTextArea: { placeholder: '请输入', rows: 2, transfer: true, resize: 'none', showWordCount: true },
10
+ $vSelect: { placeholder: '请选择', filterable: true, transfer: true, showType: 'text', tagColor: 'default', split: ',', options: [] },
11
+ $vTree: { placeholder: '请选择', transfer: true, split: ',', nodeKey: 'id', labelField: 'label' },
12
+ $vTime: { type: 'date', placeholder: '请选择时间', transfer: true, editable: false, prefixType: 'text', suffixType: 'text', separator: '至' },
13
+ $vProgress: { strokeWidth: 20, strokeColor: ['#108ee9', '#87d068'], textInside: true, min: 0, max: 100, digits: 2 },
14
+ $vSwitch: { placeholder: '请选择', openLabel: '是', openValue: '1', closeLabel: '否', closeValue: '0' },
15
+ $vMoney: { type: 'number', placeholder: '请输入', transfer: true, commafy: true, digits: 2, moneyUnit: 1, min: 0, max: 1000000000000 },
16
+ $vCheckbox: { placeholder: '请选择', uncheckedValue: '0', checkedValue: '1' },
17
+ $vCheckgroup: { placeholder: '请选择', showType: 'text', tagColor: 'default', tagType: '', split: ',' },
18
+ $vRadio: { placeholder: '请选择' },
19
+ $vRadiogroup: { placeholder: '请选择', showType: 'text', tagColor: 'default', tagType: '' },
20
+ $vImg: { square: false, preview: true, width: '100%', height: '34px', fit: 'scale-down' },
21
+ $vHref: { disabled: true, target: '_blank' },
22
+ $vUpload: { split: ',' },
23
+ $vFilterInput: { placeholder: '请输入关键词' },
24
+ $vFilterTime: { range: true },
25
+ $vTable: { size: 'mini' },
26
+ $vCode: { placeholder: '请输入', border: true, height: '100px' },
27
+ $vGlobalOption: { type: 'text' }
28
+ }
29
+
4
30
  // 判断为true
5
31
  const isTrue = value => {
6
32
  return String(value) === '1' || String(value).toLowerCase() === 'true'
@@ -121,6 +147,12 @@ export const getTransfarFields = (oriArr = [], { slots, columnObj, isSearch }) =
121
147
  let rules = {}
122
148
  let columnsFlatArr = []
123
149
  let formItemsArr = []
150
+ let formulaMap = {}
151
+ $vUtils.eachTree(oriArr, column => {
152
+ let rformula = $vUtils.get(column, 'renderProps.formula')
153
+ if (rformula && column.field) formulaMap[column.field] = rformula
154
+ })
155
+ let formulaFullMap = formulaReplaceAll(formulaMap)
124
156
  let columnsArr = $vUtils.mapTree(oriArr, ori => {
125
157
  let slotObj = {}
126
158
  // 将插槽转换为函数式
@@ -136,9 +168,16 @@ export const getTransfarFields = (oriArr = [], { slots, columnObj, isSearch }) =
136
168
  tar.sortable = false
137
169
  tar.filter = false
138
170
  } else {
171
+ let rname = ori.renderName || '$vInput'
172
+ let rprops = Object.assign({}, defaultProps[rname], ori.renderProps, { formulaMap: formulaFullMap })
173
+ transKeys.forEach(key => {
174
+ if (!$vUtils.isNone(rprops[key])) {
175
+ rprops[key] = Boolean(+rprops[key])
176
+ }
177
+ })
139
178
  let renderConfig = {
140
- name: ori.renderName || '$vInput',
141
- props: Object.assign({}, ori.renderProps)
179
+ name: rname,
180
+ props: rprops
142
181
  }
143
182
  // 首先提取校验配置
144
183
  getFieldRules(ori, rules)
@@ -167,7 +206,7 @@ export const getTransfarFields = (oriArr = [], { slots, columnObj, isSearch }) =
167
206
  if (isSearch) {
168
207
  let editFixedNames = ['$vImg', '$vHref', '$vUpload']
169
208
  let formItem = { ...tar }
170
- formItem.itemRender = Object.assign({ name: '$vInput' }, renderConfig, tar.editRender, tar.itemRender)
209
+ formItem.itemRender = Object.assign({}, renderConfig, tar.editRender, tar.itemRender)
171
210
  delete formItem.cellRender
172
211
  delete formItem.editRender
173
212
  // 此处修正, 对其不进行默认渲染
@@ -86,7 +86,6 @@ export default function (props, context, proxy, isGrid) {
86
86
 
87
87
  const tableRef = ref()
88
88
  const toolbarRef = ref()
89
- const renderKey = ref(1) // 渲染key值
90
89
  const selectedRowKeys = ref([]) // table选中keys
91
90
  const selectionRows = ref([]) // table选中records
92
91
  const tableColumnsFixed = ref([]) // 表格格式化后表头
@@ -118,7 +117,7 @@ export default function (props, context, proxy, isGrid) {
118
117
  return tablePrevColumns.value.concat(tableColumnsFixed.value)
119
118
  })
120
119
  const tableColumnObjConfig = computed(() => Object.assign({}, columnObjDefault, props.columnObj))
121
- const tableColumnConfig = computed(() => Object.assign({ isCurrent: false, isHover: true, resizable: true }, props.columnConfig))
120
+ const tableColumnConfig = computed(() => Object.assign({ isHover: true, resizable: true }, props.columnConfig))
122
121
  const tablePagerConfig = computed(() =>
123
122
  Object.assign({ enabled: Boolean(props.pagerConfig), total: 0, className: 'sh-table-footer', slots: { left: 'pagerLeft', right: 'pagerRight' } }, props.pagerConfig)
124
123
  )
@@ -189,11 +188,6 @@ export default function (props, context, proxy, isGrid) {
189
188
  const tableBindConfig = computed(() => {
190
189
  let defaultProps = { id: `sh-table-${$route.fullPath}`, footerMethod: tableFooterMethod, footerSpanMethod: tableFooterSpanMethod }
191
190
  let tableProps = $vUtils.omit(props, (val, key) => omitProps.includes(key) || $vUtils.isNone(val))
192
- let formulaMap = {}
193
- $vUtils.eachTree(props.columns, column => {
194
- let rformula = $vUtils.get(column, 'renderProps.formula')
195
- if (rformula) formulaMap[column.field] = rformula
196
- })
197
191
  let shProps = {
198
192
  data: tableViewData.value,
199
193
  stripe: props.stripe && !tableTreeConfig.value,
@@ -204,13 +198,15 @@ export default function (props, context, proxy, isGrid) {
204
198
  editConfig: tableEditConfig.value,
205
199
  editRules: tableEditRules.value,
206
200
  exportConfig: tableExportConfig.value,
207
- printConfig: tablePrintConfig.value,
208
- moneyConfig: tableMoneyConfig.value,
209
- moneyUnit: tableMoneyUnit.value,
210
- menuConfig: tableMenuConfig.value,
211
- formulaMap: formulaReplaceAll(formulaMap)
201
+ printConfig: tablePrintConfig.value
202
+ }
203
+ if (tableMenuConfig.value.enabled) {
204
+ shProps.menuConfig = tableMenuConfig.value
205
+ }
206
+ if (tableMoneyConfig.value.enabled && tableMoneyUnit.value) {
207
+ let moneyOption = tableMoneyConfig.value.options.find(item => item.value === tableMoneyUnit.value)
208
+ shProps.moneyConfig = { moneyUnit: tableMoneyUnit.value, moneyOption, digits: moneyOption.digits }
212
209
  }
213
- if (tableMenuConfig.value.enabled) shProps.menuConfig = tableMenuConfig.value
214
210
  return Object.assign(defaultProps, tableProps, shProps)
215
211
  })
216
212
  const importBindConfig = reactive({
@@ -237,23 +233,25 @@ export default function (props, context, proxy, isGrid) {
237
233
  // 获取全部数据
238
234
  // visible为true获取视图数据
239
235
  const getFullData = params => {
240
- const { visible = false, deleteXid = false, datas = null } = params || {}
236
+ const { visible = false, deleteXid = false, isUnit, datas = null } = params || {}
241
237
  let fullData = datas || tableRef.value.internalData.afterFullData
242
238
  let data = $vUtils.clone(fullData, true)
243
239
  const { fullColumn } = tableRef.value.getTableColumn()
244
- let rnameColumns = fullColumn.filter(col => col.rname)
245
- rnameColumns.forEach(col => {
246
- let { property, rname, rprops } = col
240
+ fullColumn.forEach(col => {
241
+ let cprops = $vUtils.get(col, 'editRender.props') || $vUtils.get(col, 'cellRender.props')
242
+ let rname = $vUtils.get(col, 'editRender.name') || $vUtils.get(col, 'cellRender.name')
243
+ let rprops = Object.assign({}, cprops, tableBindConfig.value.moneyConfig)
244
+ let { property } = col
247
245
  data.forEach(row => {
248
246
  let cellValue = $vUtils.get(row, property)
249
- let { rvalue, rtext } = $vUtils.formatRender(cellValue, property, row, rname, { ...rprops, commafy: false }, proxy)
250
- if (rprops.bill && rprops.bill !== '0') {
251
- $vUtils.set(row, property, rvalue)
247
+ let { rvalue, rtext } = $vUtils.formatRender(cellValue, property, row, rname, rprops, proxy)
248
+ let resultValue = rvalue
249
+ if (rname === '$vMoney') {
250
+ resultValue = isUnit && !rprops.bill ? rtext : rvalue
252
251
  } else if (visible) {
253
- $vUtils.set(row, property, rtext)
254
- } else {
255
- $vUtils.set(row, property, rvalue)
252
+ resultValue = rtext
256
253
  }
254
+ $vUtils.set(row, property, resultValue)
257
255
  if (deleteXid) delete row._XID
258
256
  })
259
257
  })
@@ -265,15 +263,15 @@ export default function (props, context, proxy, isGrid) {
265
263
  let { data, columns, mode, original, isUnit } = options
266
264
  let exportDatas = data
267
265
  $vUtils.eachTree(columns, col => {
268
- const { rname, rprops } = col
269
- if (rname === '$vMoney' && isUnit && rprops.moneyOption?.label && !col.headerExportMethod && !original) {
266
+ let rname = $vUtils.get(col, 'editRender.name') || $vUtils.get(col, 'cellRender.name')
267
+ if (rname === '$vMoney' && isUnit && tableBindConfig.value.moneyConfig?.moneyOption?.label && !col.headerExportMethod && !original) {
270
268
  col.headerExportMethod = () => {
271
- return `${col.title}(${rprops.moneyOption.label})`
269
+ return `${col.title}(${tableBindConfig.value.moneyConfig?.moneyOption?.label})`
272
270
  }
273
271
  }
274
272
  })
275
273
  if (mode === 'selected') exportDatas = getSelectionData()
276
- options.data = getFullData({ deleteXid: true, visible: !original, datas: exportDatas })
274
+ options.data = getFullData({ deleteXid: true, isUnit, visible: !original, datas: exportDatas })
277
275
  return type === 'print' ? content : obj
278
276
  }
279
277
 
@@ -411,9 +409,11 @@ export default function (props, context, proxy, isGrid) {
411
409
  // -------- 搜索
412
410
  // 表单展开全部/收起切换事件
413
411
  const onFormCollapsed = value => {
414
- setTimeout(() => {
415
- tableRef.value.recalculate(true)
416
- })
412
+ if (isGrid) {
413
+ setTimeout(() => {
414
+ tableRef.value.recalculate(true)
415
+ })
416
+ }
417
417
  }
418
418
  const onFormSubmit = () => {
419
419
  emit('form-submit', props.queryData)
@@ -448,6 +448,11 @@ export default function (props, context, proxy, isGrid) {
448
448
  tableRef.value.loadColumn(tableColumns.value)
449
449
  }
450
450
  }
451
+ // 初始化页面数据
452
+ const initTableData = () => {
453
+ updateSelection([])
454
+ updateExpended()
455
+ }
451
456
  // 初始化验证规则
452
457
  const initEditRules = rules => {
453
458
  if (rules && $vUtils.isPlainObject(rules)) {
@@ -492,8 +497,8 @@ export default function (props, context, proxy, isGrid) {
492
497
  return tableRef.value.validate(rows)
493
498
  }
494
499
  // 刷新表格视图
495
- const refreshRender = () => {
496
- renderKey.value++
500
+ const refreshRender = data => {
501
+ return tableRef.value.reloadData(data || props.dataSourse)
497
502
  }
498
503
  // 表格工具按钮点击
499
504
  const handleTableTool = ({ code }) => {
@@ -606,8 +611,7 @@ export default function (props, context, proxy, isGrid) {
606
611
  watch(
607
612
  () => props.dataSourse,
608
613
  value => {
609
- updateSelection([])
610
- updateExpended()
614
+ initTableData()
611
615
  },
612
616
  { immediate: true }
613
617
  )
@@ -630,7 +634,6 @@ export default function (props, context, proxy, isGrid) {
630
634
  slots,
631
635
  tableRef,
632
636
  toolbarRef,
633
- renderKey,
634
637
  wrapHeight,
635
638
  tableGlobalConfig,
636
639
  tablePrevColumns,
@@ -34,7 +34,7 @@
34
34
  <div class="sh-table-toolbar-item" v-for="(tool, toolIndex) in tableTools" :key="toolIndex">
35
35
  <vxe-button v-ripple :size="size" v-bind="tool" @click="handleTableTool(tool)"></vxe-button>
36
36
  </div>
37
- <div v-if="tableMoneyConfig.enabled" @click.stop class="sh-table-toolbar-item">单位:<sh-select v-model="tableMoneyUnit" v-bind="tableMoneyConfig" /></div>
37
+ <div v-if="tableMoneyConfig.enabled" @click.stop class="sh-table-toolbar-item">单位:<vxe-select v-model="tableMoneyUnit" v-bind="tableMoneyConfig" /></div>
38
38
  </template>
39
39
  </vxe-toolbar>
40
40
  </slot>
@@ -42,7 +42,6 @@
42
42
  <div v-if="isHeadSlot" ref="headSlotRef" v-resize="handleResize" class="sh-table-head"><slot name="head"></slot></div>
43
43
  <vxe-table
44
44
  ref="tableRef"
45
- :key="renderKey"
46
45
  :class="{ 'is--hasfooter': showFooter }"
47
46
  v-bind="tableBindConfig"
48
47
  :height="tableHeight"