sh-view 2.9.8 → 2.9.10
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 +11 -11
- package/packages/components/index.js +1 -7
- package/packages/components/sh-calendar/index.vue +2 -2
- package/packages/components/sh-date/index.vue +1 -1
- package/packages/components/sh-form/js/useForm.js +10 -3
- package/packages/components/sh-table/components/importModal.vue +7 -7
- package/packages/components/sh-table/grid.vue +1 -2
- package/packages/components/sh-table/js/props.js +7 -3
- package/packages/components/sh-table/js/tableMethods.js +42 -3
- package/packages/components/sh-table/js/useTable.js +38 -35
- package/packages/components/sh-table/table.vue +1 -2
- package/packages/components/sh-tree/components/table-tree.vue +48 -108
- package/packages/components/sh-tree/index.vue +127 -38
- package/packages/css/theme.scss +4 -0
- package/packages/vxeTable/css/index.scss +18 -24
- package/packages/vxeTable/index.js +81 -49
- package/packages/vxeTable/render/cell/vxe-render-checkgroup.vue +4 -4
- package/packages/vxeTable/render/cell/vxe-render-goption.vue +3 -3
- package/packages/vxeTable/render/cell/vxe-render-img.vue +6 -2
- package/packages/vxeTable/render/cell/vxe-render-input.vue +2 -2
- package/packages/vxeTable/render/cell/vxe-render-money.vue +19 -3
- package/packages/vxeTable/render/cell/vxe-render-radiogroup.vue +4 -4
- package/packages/vxeTable/render/cell/vxe-render-select.vue +2 -2
- package/packages/vxeTable/render/cell/vxe-render-table.vue +7 -6
- package/packages/vxeTable/render/cell/vxe-render-time.vue +3 -3
- package/packages/vxeTable/render/cell/vxe-render-tree.vue +1 -1
- package/packages/vxeTable/render/footer/vxe-footer-input.vue +13 -3
- package/packages/vxeTable/render/footer/vxe-footer-money.vue +13 -3
- package/packages/vxeTable/render/globalRenders.jsx +73 -205
- package/packages/vxeTable/render/header/vxe-header-money.vue +1 -1
- package/packages/vxeTable/render/mixin/cell-hooks.js +47 -53
- package/packages/vxeTable/render/mixin/cell-props.js +2 -10
- 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.
|
|
3
|
+
"version": "2.9.10",
|
|
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.
|
|
23
|
-
"@vxe-ui/plugin-export-xlsx": "^4.0
|
|
24
|
-
"@vxe-ui/plugin-menu": "^4.0
|
|
25
|
-
"@vxe-ui/plugin-render-wangeditor": "^4.0.
|
|
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.
|
|
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.
|
|
40
|
-
"vue": "^3.5.
|
|
39
|
+
"sh-tools": "^2.2.19",
|
|
40
|
+
"vue": "^3.5.20",
|
|
41
41
|
"vue-masonry": "^0.16.0",
|
|
42
|
-
"vue-router": "^4.
|
|
43
|
-
"vxe-pc-ui": "^4.
|
|
44
|
-
"vxe-table": "^4.
|
|
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
|
-
<
|
|
6
|
-
<
|
|
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:
|
|
156
|
-
props:
|
|
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
|
-
<
|
|
12
|
-
<
|
|
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
|
-
<
|
|
15
|
+
<vxe-button :size="size" status="danger">
|
|
16
16
|
共发现 <strong>{{ importErrorData.length }}</strong> 条不符合规范数据
|
|
17
|
-
</
|
|
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
|
-
<
|
|
35
|
-
<
|
|
36
|
-
<
|
|
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">单位:<
|
|
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
|
-
|
|
244
|
-
|
|
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:
|
|
141
|
-
props:
|
|
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({
|
|
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({
|
|
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
|
-
|
|
209
|
-
|
|
210
|
-
menuConfig
|
|
211
|
-
|
|
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
|
-
|
|
245
|
-
|
|
246
|
-
let
|
|
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,
|
|
250
|
-
|
|
251
|
-
|
|
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
|
-
|
|
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
|
-
|
|
269
|
-
if (rname === '$vMoney' && isUnit &&
|
|
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}(${
|
|
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
|
-
|
|
415
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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">单位:<
|
|
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"
|