sh-view 2.6.2 → 2.6.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.
Files changed (40) hide show
  1. package/package.json +1 -1
  2. package/packages/components/global-components/sh-form/form.vue +110 -108
  3. package/packages/components/global-components/sh-form/js/useForm.js +3 -0
  4. package/packages/components/global-components/sh-form/query.vue +70 -68
  5. package/packages/components/global-components/sh-table/components/sh-column.vue +69 -69
  6. package/packages/components/global-components/sh-table/grid.vue +160 -159
  7. package/packages/components/global-components/sh-table/js/useTable.js +12 -6
  8. package/packages/components/global-components/sh-table/table.vue +218 -217
  9. package/packages/components/other-components/sh-cron-modal/mixin/cron-hooks.js +179 -177
  10. package/packages/components/other-components/sh-cron-modal/tabs/cron-day-box.vue +101 -99
  11. package/packages/components/other-components/sh-cron-modal/tabs/cron-hour-box.vue +68 -66
  12. package/packages/components/other-components/sh-cron-modal/tabs/cron-minute-box.vue +68 -66
  13. package/packages/components/other-components/sh-cron-modal/tabs/cron-month-box.vue +68 -66
  14. package/packages/components/other-components/sh-cron-modal/tabs/cron-second-box.vue +68 -66
  15. package/packages/components/other-components/sh-cron-modal/tabs/cron-week-box.vue +126 -125
  16. package/packages/components/other-components/sh-cron-modal/tabs/cron-year-box.vue +59 -57
  17. package/packages/components/other-components/sh-preview/components/sh-excel.vue +929 -927
  18. package/packages/components/other-components/sh-preview/components/sh-word.vue +78 -76
  19. package/packages/vxeTable/render/cell/vxe-render-checkbox.vue +28 -26
  20. package/packages/vxeTable/render/cell/vxe-render-checkgroup.vue +43 -42
  21. package/packages/vxeTable/render/cell/vxe-render-code.vue +36 -34
  22. package/packages/vxeTable/render/cell/vxe-render-goption.vue +104 -103
  23. package/packages/vxeTable/render/cell/vxe-render-href.vue +21 -19
  24. package/packages/vxeTable/render/cell/vxe-render-input.vue +53 -52
  25. package/packages/vxeTable/render/cell/vxe-render-money.vue +33 -31
  26. package/packages/vxeTable/render/cell/vxe-render-progress.vue +28 -26
  27. package/packages/vxeTable/render/cell/vxe-render-radio.vue +28 -26
  28. package/packages/vxeTable/render/cell/vxe-render-radiogroup.vue +43 -42
  29. package/packages/vxeTable/render/cell/vxe-render-select.vue +52 -51
  30. package/packages/vxeTable/render/cell/vxe-render-switch.vue +28 -26
  31. package/packages/vxeTable/render/cell/vxe-render-table.vue +51 -50
  32. package/packages/vxeTable/render/cell/vxe-render-textarea.vue +28 -26
  33. package/packages/vxeTable/render/cell/vxe-render-time.vue +44 -41
  34. package/packages/vxeTable/render/cell/vxe-render-tree.vue +63 -60
  35. package/packages/vxeTable/render/cell/vxe-render-upload.vue +28 -26
  36. package/packages/vxeTable/render/filters/vxe-filter-input.vue +25 -23
  37. package/packages/vxeTable/render/footer/vxe-footer-input.vue +23 -21
  38. package/packages/vxeTable/render/footer/vxe-footer-money.vue +30 -28
  39. package/packages/vxeTable/render/header/vxe-header-money.vue +31 -29
  40. package/packages/vxeTable/render/mixin/cell-hooks.js +4 -1
@@ -1,159 +1,160 @@
1
- <template>
2
- <div class="sh-vxe-table" :class="{ 'sh-table-ghost': tableGlobalConfig.ghost }" :style="{ height: wrapHeight }">
3
- <vxe-grid
4
- :id="id"
5
- ref="tableRef"
6
- :key="renderKey"
7
- :class="{ 'is--hasfooter': showFooter }"
8
- v-bind="tableBindConfig"
9
- :columns="tableColumns"
10
- @current-change="onCurrentChange"
11
- @radio-change="onRadioChange"
12
- @checkbox-change="onSelectionChange"
13
- @checkbox-all="onSelectionChange"
14
- @checkbox-range-end="onSelectionChange"
15
- @cell-click="onCellClick"
16
- @cell-dblclick="onCellDblClick"
17
- @header-cell-click="onHeaderCellClick"
18
- @sort-change="onSortChange"
19
- @filter-change="onFilterChange"
20
- @toggle-row-expand="onToggleRowExpand"
21
- @toggle-tree-expand="onToggleTreeExpand"
22
- @edit-closed="onEditClosed"
23
- @edit-actived="onEditActived"
24
- @scroll="onScroll"
25
- @custom="onCustom"
26
- @page-change="onPageChange"
27
- @toolbar-button-click="onToolbarButtonClick"
28
- @toolbar-tool-click="onToolbarToolClick"
29
- @option-click="handleGoptionClick">
30
- <template #form>
31
- <slot name="head"></slot>
32
- <slot name="form">
33
- <sh-query v-if="tableGlobalConfig.search" v-bind="tableQueryConfig" @submit="onFormSubmit" @reset="onFormReset" @collapsed="onFormCollapsed" @edit-closed="onFormEditClosed">
34
- <template #footLeft><slot name="formLeft"></slot></template>
35
- <template #footRight><slot name="formRight"></slot></template>
36
- </sh-query>
37
- </slot>
38
- </template>
39
- <template #toolbar>
40
- <div class="sh-table-toolbar-wrap">
41
- <div class="sh-table-toolbar-left">
42
- <div v-if="tableGlobalConfig.title" class="sh-table-toolbar-item">
43
- <h3 class="tableName">{{ tableGlobalConfig.tableName }}</h3>
44
- </div>
45
- <!--ps:全表搜索不支持反转-->
46
- <div v-if="tableGlobalConfig.globalFilter" class="sh-table-toolbar-item">
47
- <vxe-input v-model="tableFilterText" v-bind="tableFilterConfig" @blur="handleTableFilter" @clear="handleTableFilter" @search-click="handleTableFilter" />
48
- <span v-if="tableFilterData">
49
- 共搜索到 <strong>{{ tableFilterData.length }}</strong> 条数据
50
- </span>
51
- </div>
52
- <div v-if="slots.toolbarLeft" class="sh-table-toolbar-item">
53
- <slot name="toolbarLeft"></slot>
54
- </div>
55
- </div>
56
- <div class="sh-table-toolbar-right">
57
- <div v-if="slots.toolbarRight" class="sh-table-toolbar-item">
58
- <slot name="toolbarRight"></slot>
59
- </div>
60
- <div v-if="tableGlobalConfig.zoom" class="sh-table-toolbar-item">
61
- <vxe-button v-if="!tableIsFullscreen" v-ripple :size="size" icon="vxe-icon-zoom-out" @click="handleTableZoomBtn(true)">全屏</vxe-button>
62
- <vxe-button v-else v-ripple :size="size" icon="vxe-icon-zoom-in" @click="handleTableZoomBtn(false)">退出全屏</vxe-button>
63
- </div>
64
- <template v-for="(tool, toolIndex) in tableTools" :key="toolIndex">
65
- <div class="sh-table-toolbar-item">
66
- <vxe-button v-ripple :size="size" v-bind="tool" @click="handleTableTool(tool)"></vxe-button>
67
- </div>
68
- </template>
69
- </div>
70
- </div>
71
- </template>
72
- <template #pagerLeft>
73
- <div v-if="selectionRows.length" class="sh-table-footer-info">
74
- 已选择 <strong>{{ selectionRows.length }}</strong> 项
75
- </div>
76
- <slot name="pagerLeft"></slot>
77
- </template>
78
- <template #pagerRight>
79
- <slot name="pagerRight"></slot>
80
- </template>
81
- <template #empty>
82
- <sh-empty :icon="emptyIcon" :content="emptyText"></sh-empty>
83
- </template>
84
- <template v-for="slot in tableSlots" #[slot]="scope">
85
- <!-- 以之前的名字命名插槽,同时把数据原样绑定 -->
86
- <slot :name="slot" v-bind="scope"></slot>
87
- </template>
88
- </vxe-grid>
89
- <!--导入弹窗-->
90
- <importModal v-if="importBindConfig.modalConfig.modelValue" v-bind="importBindConfig" @confirm="setImportData"></importModal>
91
- </div>
92
- </template>
93
-
94
- <script>
95
- import { defineComponent, getCurrentInstance, ref } from 'vue'
96
- import './css/index.scss'
97
-
98
- import props from './js/props'
99
- import importModal from './components/importModal.vue'
100
- import useTable from './js/useTable'
101
- export default defineComponent({
102
- name: 'ShGrid',
103
- components: {
104
- importModal
105
- },
106
- props: {
107
- ...props
108
- },
109
- emits: [
110
- 'current-change',
111
- 'radio-change',
112
- 'selection-change',
113
- 'cell-click',
114
- 'cell-dblclick',
115
- 'header-cell-click',
116
- 'sort-change',
117
- 'filter-change',
118
- 'toggle-row-expand',
119
- 'toggle-tree-expand',
120
- 'edit-closed',
121
- 'edit-actived',
122
- 'scroll',
123
- 'custom',
124
- 'page-change',
125
- 'toolbar-button-click',
126
- 'toolbar-tool-click',
127
-
128
- 'form-submit',
129
- 'form-reset',
130
- 'form-edit-closed',
131
- 'form-submit-invalid',
132
- 'import-confirm',
133
- 'globaloption',
134
- 'toolbaroption'
135
- ],
136
- setup(props, context) {
137
- const { proxy } = getCurrentInstance()
138
-
139
- const useTableHooks = useTable(props, context, proxy, true)
140
-
141
- const tableIsFullscreen = ref(false) // 表格是否全屏显示状态
142
-
143
- // 表格切换全屏缩放按钮
144
- const handleTableZoomBtn = val => {
145
- tableIsFullscreen.value = val
146
- if (val) {
147
- useTableHooks.tableRef.value.zoom()
148
- } else {
149
- useTableHooks.tableRef.value.revert()
150
- }
151
- }
152
-
153
- return Object.assign({}, useTableHooks, {
154
- tableIsFullscreen,
155
- handleTableZoomBtn
156
- })
157
- }
158
- })
159
- </script>
1
+ <template>
2
+ <div class="sh-vxe-table" :class="{ 'sh-table-ghost': tableGlobalConfig.ghost }" :style="{ height: wrapHeight }">
3
+ <vxe-grid
4
+ :id="id"
5
+ ref="tableRef"
6
+ :key="renderKey"
7
+ :class="{ 'is--hasfooter': showFooter }"
8
+ v-bind="tableBindConfig"
9
+ :columns="tableColumns"
10
+ @current-change="onCurrentChange"
11
+ @radio-change="onRadioChange"
12
+ @checkbox-change="onSelectionChange"
13
+ @checkbox-all="onSelectionChange"
14
+ @checkbox-range-end="onSelectionChange"
15
+ @cell-click="onCellClick"
16
+ @cell-dblclick="onCellDblClick"
17
+ @header-cell-click="onHeaderCellClick"
18
+ @sort-change="onSortChange"
19
+ @filter-change="onFilterChange"
20
+ @toggle-row-expand="onToggleRowExpand"
21
+ @toggle-tree-expand="onToggleTreeExpand"
22
+ @edit-closed="onEditClosed"
23
+ @edit-actived="onEditActived"
24
+ @scroll="onScroll"
25
+ @custom="onCustom"
26
+ @page-change="onPageChange"
27
+ @toolbar-button-click="onToolbarButtonClick"
28
+ @toolbar-tool-click="onToolbarToolClick"
29
+ @option-click="handleGoptionClick">
30
+ <template #form>
31
+ <slot name="head"></slot>
32
+ <slot name="form">
33
+ <sh-query v-if="tableGlobalConfig.search" v-bind="tableQueryConfig" @submit="onFormSubmit" @reset="onFormReset" @collapsed="onFormCollapsed" @edit-closed="onFormEditClosed">
34
+ <template #footLeft><slot name="formLeft"></slot></template>
35
+ <template #footRight><slot name="formRight"></slot></template>
36
+ </sh-query>
37
+ </slot>
38
+ </template>
39
+ <template #toolbar>
40
+ <div class="sh-table-toolbar-wrap">
41
+ <div class="sh-table-toolbar-left">
42
+ <div v-if="tableGlobalConfig.title" class="sh-table-toolbar-item">
43
+ <h3 class="tableName">{{ tableGlobalConfig.tableName }}</h3>
44
+ </div>
45
+ <!--ps:全表搜索不支持反转-->
46
+ <div v-if="tableGlobalConfig.globalFilter" class="sh-table-toolbar-item">
47
+ <vxe-input v-model="tableFilterText" v-bind="tableFilterConfig" @blur="handleTableFilter" @clear="handleTableFilter" @search-click="handleTableFilter" />
48
+ <span v-if="tableFilterData">
49
+ 共搜索到 <strong>{{ tableFilterData.length }}</strong> 条数据
50
+ </span>
51
+ </div>
52
+ <div v-if="slots.toolbarLeft" class="sh-table-toolbar-item">
53
+ <slot name="toolbarLeft"></slot>
54
+ </div>
55
+ </div>
56
+ <div class="sh-table-toolbar-right">
57
+ <div v-if="slots.toolbarRight" class="sh-table-toolbar-item">
58
+ <slot name="toolbarRight"></slot>
59
+ </div>
60
+ <div v-if="tableGlobalConfig.zoom" class="sh-table-toolbar-item">
61
+ <vxe-button v-if="!tableIsFullscreen" v-ripple :size="size" icon="vxe-icon-zoom-out" @click="handleTableZoomBtn(true)">全屏</vxe-button>
62
+ <vxe-button v-else v-ripple :size="size" icon="vxe-icon-zoom-in" @click="handleTableZoomBtn(false)">退出全屏</vxe-button>
63
+ </div>
64
+ <template v-for="(tool, toolIndex) in tableTools" :key="toolIndex">
65
+ <div class="sh-table-toolbar-item">
66
+ <vxe-button v-ripple :size="size" v-bind="tool" @click="handleTableTool(tool)"></vxe-button>
67
+ </div>
68
+ </template>
69
+ </div>
70
+ </div>
71
+ </template>
72
+ <template #pagerLeft>
73
+ <div v-if="selectionRows.length" class="sh-table-footer-info">
74
+ 已选择 <strong>{{ selectionRows.length }}</strong> 项
75
+ </div>
76
+ <slot name="pagerLeft"></slot>
77
+ </template>
78
+ <template #pagerRight>
79
+ <slot name="pagerRight"></slot>
80
+ </template>
81
+ <template #empty>
82
+ <sh-empty :icon="emptyIcon" :content="emptyText"></sh-empty>
83
+ </template>
84
+ <template v-for="slot in tableSlots" #[slot]="scope">
85
+ <!-- 以之前的名字命名插槽,同时把数据原样绑定 -->
86
+ <slot :name="slot" v-bind="scope"></slot>
87
+ </template>
88
+ </vxe-grid>
89
+ <!--导入弹窗-->
90
+ <importModal v-if="importBindConfig.modalConfig.modelValue" v-bind="importBindConfig" @confirm="setImportData"></importModal>
91
+ </div>
92
+ </template>
93
+
94
+ <script>
95
+ import { defineComponent, getCurrentInstance, ref } from 'vue'
96
+ import './css/index.scss'
97
+
98
+ import props from './js/props'
99
+ import importModal from './components/importModal.vue'
100
+ import useTable from './js/useTable'
101
+ export default defineComponent({
102
+ name: 'ShGrid',
103
+ components: {
104
+ importModal
105
+ },
106
+ props: {
107
+ ...props
108
+ },
109
+ emits: [
110
+ 'current-change',
111
+ 'radio-change',
112
+ 'selection-change',
113
+ 'cell-click',
114
+ 'cell-dblclick',
115
+ 'header-cell-click',
116
+ 'sort-change',
117
+ 'filter-change',
118
+ 'toggle-row-expand',
119
+ 'toggle-tree-expand',
120
+ 'edit-closed',
121
+ 'edit-actived',
122
+ 'scroll',
123
+ 'custom',
124
+ 'page-change',
125
+ 'toolbar-button-click',
126
+ 'toolbar-tool-click',
127
+
128
+ 'form-submit',
129
+ 'form-reset',
130
+ 'form-edit-closed',
131
+ 'form-submit-invalid',
132
+ 'import-confirm',
133
+ 'globaloption',
134
+ 'toolbaroption'
135
+ ],
136
+ setup(props, context) {
137
+ const { proxy } = getCurrentInstance()
138
+
139
+ const useTableHooks = useTable(props, context, proxy, true)
140
+
141
+ const tableIsFullscreen = ref(false) // 表格是否全屏显示状态
142
+
143
+ // 表格切换全屏缩放按钮
144
+ const handleTableZoomBtn = val => {
145
+ tableIsFullscreen.value = val
146
+ if (val) {
147
+ useTableHooks.tableRef.value.zoom()
148
+ } else {
149
+ useTableHooks.tableRef.value.revert()
150
+ }
151
+ }
152
+
153
+ return {
154
+ ...useTableHooks,
155
+ tableIsFullscreen,
156
+ handleTableZoomBtn
157
+ }
158
+ }
159
+ })
160
+ </script>
@@ -204,7 +204,7 @@ export default function (props, context, proxy, isGrid) {
204
204
  let cellValue = $vUtils.get(row, property)
205
205
  if (!$vUtils.isNone(cellValue)) {
206
206
  let { rvalue, rtext } = $vUtils.formatRender(cellValue, property, row, rname, rprops, proxy)
207
- $vUtils.set(row, property, visible || ['$vMoney'].includes(rname) ? rtext : rvalue)
207
+ $vUtils.set(row, property, visible ? rtext : rvalue)
208
208
  }
209
209
  if (deleteXid) delete row._XID
210
210
  })
@@ -302,11 +302,17 @@ export default function (props, context, proxy, isGrid) {
302
302
  // 只对 edit-config 配置时有效,单元格编辑状态下被关闭时会触发该事件
303
303
  const onEditClosed = params => {
304
304
  // 此操作火狐浏览器(bug(vxe):编辑后不触发渲染器的blur问题)
305
- let { row, column } = params
306
- let editModel = $vUtils.get(column, 'params.__RowEditModelValue')
307
- if (editModel !== undefined) {
308
- $vUtils.set(row, column.property, editModel)
309
- delete column.params.__RowEditModelValue
305
+ const userAgent = navigator.userAgent
306
+ if (userAgent.indexOf('Firefox') !== -1) {
307
+ let { row, column } = params
308
+ let editModel = $vUtils.get(column, 'params.__RowEditModelValue')
309
+ if (editModel !== undefined) {
310
+ if (['$vMoney'].includes(column.rname) && !$vUtils.isNone(editModel)) editModel = $vUtils.multiply(editModel, column.rprops.moneyUnit || 1)
311
+ let { rvalue, rtext } = $vUtils.formatRender(editModel, column.property, row, column.rname, column.rprops, proxy, true)
312
+ editModel = rvalue
313
+ $vUtils.set(row, column.property, editModel)
314
+ delete column.params.__RowEditModelValue
315
+ }
310
316
  }
311
317
  emit('edit-closed', params)
312
318
  }