sh-view 2.1.0 → 2.2.0

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 (128) hide show
  1. package/package.json +9 -13
  2. package/packages/components/global-components/sh-alert/index.vue +175 -173
  3. package/packages/components/global-components/sh-badge/index.vue +57 -43
  4. package/packages/components/global-components/sh-card/index.vue +24 -16
  5. package/packages/components/global-components/sh-code-editor/index.vue +250 -260
  6. package/packages/components/global-components/sh-col/index.vue +44 -36
  7. package/packages/components/global-components/sh-corner/index.vue +230 -228
  8. package/packages/components/global-components/sh-count-to/index.vue +60 -51
  9. package/packages/components/global-components/sh-drawer/index.vue +209 -182
  10. package/packages/components/global-components/sh-drawer/scrollbar.js +44 -42
  11. package/packages/components/global-components/sh-empty/index.vue +0 -1
  12. package/packages/components/global-components/sh-form/form.vue +110 -0
  13. package/packages/components/global-components/sh-form/js/props.js +76 -63
  14. package/packages/components/global-components/sh-form/js/useForm.js +236 -0
  15. package/packages/components/global-components/sh-form/query.vue +70 -0
  16. package/packages/components/global-components/sh-header/index.vue +35 -50
  17. package/packages/components/global-components/sh-icon/css/index.scss +44 -0
  18. package/packages/components/global-components/sh-icon/index.vue +24 -11
  19. package/packages/components/global-components/sh-image/index.vue +47 -38
  20. package/packages/components/global-components/sh-list/index.vue +42 -37
  21. package/packages/components/global-components/sh-loading/index.vue +12 -8
  22. package/packages/components/global-components/sh-modal/index.vue +49 -40
  23. package/packages/components/global-components/sh-noticebar/index.vue +68 -54
  24. package/packages/components/global-components/sh-poptip/index.vue +247 -130
  25. package/packages/components/global-components/sh-progress/index.vue +71 -69
  26. package/packages/components/global-components/sh-pull-refresh/index.vue +156 -157
  27. package/packages/components/global-components/sh-result/index.vue +37 -28
  28. package/packages/components/global-components/sh-row/index.vue +21 -18
  29. package/packages/components/global-components/sh-split/index.vue +115 -109
  30. package/packages/components/global-components/sh-table/components/importModal.vue +95 -86
  31. package/packages/components/global-components/sh-table/components/sh-column.vue +54 -0
  32. package/packages/components/global-components/sh-table/{index.vue → grid.vue} +34 -145
  33. package/packages/components/global-components/sh-table/js/tableMethods.js +175 -0
  34. package/packages/components/global-components/sh-table/js/useTable.js +592 -0
  35. package/packages/components/global-components/sh-table/table.vue +269 -0
  36. package/packages/components/global-components/sh-tabs/index.vue +118 -93
  37. package/packages/components/global-components/sh-tag/index.vue +52 -51
  38. package/packages/components/global-components/sh-toolbar/index.vue +53 -47
  39. package/packages/components/global-components/sh-tree/components/table-tree.vue +152 -139
  40. package/packages/components/global-components/sh-tree/index.vue +218 -195
  41. package/packages/components/global-components/sh-tree/mixin/treeProps.js +118 -120
  42. package/packages/components/global-components/sh-upload/index.vue +308 -51
  43. package/packages/components/global-components/sh-water-fall/index.vue +4 -11
  44. package/packages/components/index.js +5 -3
  45. package/packages/components/other-components/sh-cron-modal/components/cron-content.vue +140 -129
  46. package/packages/components/other-components/sh-cron-modal/css/index.scss +0 -5
  47. package/packages/components/other-components/sh-cron-modal/index.vue +81 -67
  48. package/packages/components/other-components/sh-cron-modal/mixin/cron-emits.js +1 -0
  49. package/packages/components/other-components/sh-cron-modal/mixin/cron-hooks.js +179 -0
  50. package/packages/components/other-components/sh-cron-modal/mixin/cron-props.js +9 -0
  51. package/packages/components/other-components/sh-cron-modal/tabs/cron-day-box.vue +101 -92
  52. package/packages/components/other-components/sh-cron-modal/tabs/cron-hour-box.vue +68 -56
  53. package/packages/components/other-components/sh-cron-modal/tabs/cron-minute-box.vue +68 -56
  54. package/packages/components/other-components/sh-cron-modal/tabs/cron-month-box.vue +68 -56
  55. package/packages/components/other-components/sh-cron-modal/tabs/cron-second-box.vue +68 -56
  56. package/packages/components/other-components/sh-cron-modal/tabs/cron-week-box.vue +126 -115
  57. package/packages/components/other-components/sh-cron-modal/tabs/cron-year-box.vue +59 -46
  58. package/packages/components/other-components/sh-menu/index.vue +73 -60
  59. package/packages/components/other-components/sh-menu/menu-group-content.vue +71 -59
  60. package/packages/components/other-components/sh-menu/menu-item-content.vue +40 -30
  61. package/packages/components/other-components/sh-menu-card/index.vue +70 -64
  62. package/packages/components/other-components/sh-menu-card/menu-box.vue +50 -44
  63. package/packages/components/other-components/sh-preview/components/sh-excel.vue +182 -0
  64. package/packages/components/other-components/sh-preview/components/sh-word.vue +73 -0
  65. package/packages/components/other-components/sh-preview/index.vue +86 -85
  66. package/packages/components/other-components/sh-preview/js/data-hook.js +37 -0
  67. package/packages/components/other-components/sh-preview/js/data-props.js +11 -0
  68. package/packages/components/other-components/sh-system-tip/index.vue +28 -24
  69. package/packages/css/index.js +4 -4
  70. package/packages/directive/module/prevent-click.js +1 -1
  71. package/packages/directive/module/resize.js +11 -154
  72. package/packages/index.js +39 -39
  73. package/packages/mixin/index.js +86 -87
  74. package/packages/vxeTable/render/cell/vxe-render-checkbox.vue +14 -5
  75. package/packages/vxeTable/render/cell/vxe-render-checkgroup.vue +43 -36
  76. package/packages/vxeTable/render/cell/vxe-render-code.vue +14 -5
  77. package/packages/vxeTable/render/cell/vxe-render-goption.vue +34 -24
  78. package/packages/vxeTable/render/cell/vxe-render-href.vue +21 -11
  79. package/packages/vxeTable/render/cell/vxe-render-img.vue +16 -10
  80. package/packages/vxeTable/render/cell/vxe-render-input.vue +83 -79
  81. package/packages/vxeTable/render/cell/vxe-render-money.vue +14 -6
  82. package/packages/vxeTable/render/cell/vxe-render-progress.vue +28 -19
  83. package/packages/vxeTable/render/cell/vxe-render-radio.vue +14 -5
  84. package/packages/vxeTable/render/cell/vxe-render-radiogroup.vue +43 -36
  85. package/packages/vxeTable/render/cell/vxe-render-select.vue +44 -36
  86. package/packages/vxeTable/render/cell/vxe-render-switch.vue +14 -5
  87. package/packages/vxeTable/render/cell/vxe-render-table.vue +51 -78
  88. package/packages/vxeTable/render/cell/vxe-render-textarea.vue +14 -5
  89. package/packages/vxeTable/render/cell/vxe-render-time.vue +23 -13
  90. package/packages/vxeTable/render/cell/vxe-render-tree.vue +23 -27
  91. package/packages/vxeTable/render/cell/vxe-render-upload.vue +11 -7
  92. package/packages/vxeTable/render/filters/vxe-filter-input.vue +25 -43
  93. package/packages/vxeTable/render/footer/vxe-footer-input.vue +23 -13
  94. package/packages/vxeTable/render/footer/vxe-footer-money.vue +30 -20
  95. package/packages/vxeTable/render/globalRenders.jsx +1 -1
  96. package/packages/vxeTable/render/header/vxe-header-money.vue +31 -21
  97. package/packages/vxeTable/render/mixin/cell-hooks.js +162 -0
  98. package/packages/vxeTable/render/mixin/cell-props.js +23 -0
  99. package/packages/vxeTable/render/mixin/filter-hooks.js +28 -0
  100. package/packages/components/global-components/sh-form/components/form-item.vue +0 -25
  101. package/packages/components/global-components/sh-form/css/index.scss +0 -55
  102. package/packages/components/global-components/sh-form/index.vue +0 -114
  103. package/packages/components/global-components/sh-form/js/methods.js +0 -146
  104. package/packages/components/global-components/sh-form/mixin/defaultData.js +0 -32
  105. package/packages/components/global-components/sh-icon/css/default/index.scss +0 -27
  106. package/packages/components/global-components/sh-icon/css/font/index.scss +0 -16
  107. package/packages/components/global-components/sh-icon/icon-default.vue +0 -32
  108. package/packages/components/global-components/sh-icon/icon-font.vue +0 -32
  109. package/packages/components/global-components/sh-poptip/popper.js +0 -115
  110. package/packages/components/global-components/sh-query/index.vue +0 -317
  111. package/packages/components/global-components/sh-table/js/methods.js +0 -549
  112. package/packages/components/global-components/sh-table/mixin/defaultData.js +0 -94
  113. package/packages/components/global-components/sh-upload/js/mixin.js +0 -257
  114. package/packages/components/other-components/sh-cron-modal/mixin/cron-box.js +0 -169
  115. package/packages/vxeTable/render/mixin/cell-mixin.js +0 -195
  116. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.svg → ionicons.svg} +0 -0
  117. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.ttf → ionicons.ttf} +0 -0
  118. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.woff → ionicons.woff} +0 -0
  119. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.woff2 → ionicons.woff2} +0 -0
  120. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.js → iconfont.js} +0 -0
  121. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.json → iconfont.json} +0 -0
  122. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.ttf → iconfont.ttf} +0 -0
  123. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.woff → iconfont.woff} +0 -0
  124. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.woff2 → iconfont.woff2} +0 -0
  125. /package/packages/{assets/css → css}/animated.scss +0 -0
  126. /package/packages/{assets/css → css}/loader.scss +0 -0
  127. /package/packages/{assets/css → css}/main.scss +0 -0
  128. /package/packages/{assets/css → css}/theme.scss +0 -0
@@ -2,11 +2,11 @@
2
2
  <div class="sh-vxe-table" :class="{ 'sh-table-ghost': tableGlobalConfig.ghost }" :style="{ height: wrapHeight }">
3
3
  <vxe-grid
4
4
  :id="id"
5
- ref="vxeGrid"
5
+ ref="tableRef"
6
6
  :key="renderKey"
7
7
  :class="{ 'is--hasfooter': showFooter }"
8
8
  :columns="tableColumns"
9
- :data="tableFilterData || dataSourse"
9
+ :data="tableViewData"
10
10
  :width="width"
11
11
  :height="height"
12
12
  :min-height="minHeight"
@@ -100,16 +100,16 @@
100
100
  共搜索到 <strong>{{ tableFilterData.length }}</strong> 条数据
101
101
  </span>
102
102
  </div>
103
- <div v-if="$slots.toolbarLeft" class="sh-table-toolbar-item">
103
+ <div v-if="slots.toolbarLeft" class="sh-table-toolbar-item">
104
104
  <slot name="toolbarLeft"></slot>
105
105
  </div>
106
106
  </div>
107
107
  <div class="sh-table-toolbar-right">
108
- <div v-if="$slots.toolbarRight" class="sh-table-toolbar-item">
108
+ <div v-if="slots.toolbarRight" class="sh-table-toolbar-item">
109
109
  <slot name="toolbarRight"></slot>
110
110
  </div>
111
111
  <div v-if="tableGlobalConfig.zoom" class="sh-table-toolbar-item">
112
- <vxe-button v-if="!tableIsFullscreen" v-ripple icon="vxe-icon-zoom-out" @click="handleTableZoomBtn(true)">全屏</vxe-button>
112
+ <vxe-button v-if="!tableIsFullscreen" v-ripple :size="size" icon="vxe-icon-zoom-out" @click="handleTableZoomBtn(true)">全屏</vxe-button>
113
113
  <vxe-button v-else v-ripple :size="size" icon="vxe-icon-zoom-in" @click="handleTableZoomBtn(false)">退出全屏</vxe-button>
114
114
  </div>
115
115
  <template v-for="(tool, toolIndex) in tableTools" :key="toolIndex">
@@ -139,8 +139,8 @@
139
139
  </vxe-grid>
140
140
  <!--导入弹窗-->
141
141
  <importModal
142
- v-if="importModal"
143
- v-model:visible="importModal"
142
+ v-if="importVisible"
143
+ v-model:visible="importVisible"
144
144
  need-validate
145
145
  :columns="tableColumns"
146
146
  :import-config="importConfig"
@@ -150,23 +150,17 @@
150
150
  </template>
151
151
 
152
152
  <script>
153
- import defaultData from './mixin/defaultData'
153
+ import { defineComponent, getCurrentInstance, ref } from 'vue'
154
+ import './css/index.scss'
155
+
154
156
  import props from './js/props'
155
- import methods from './js/methods'
156
157
  import importModal from './components/importModal.vue'
157
- const toolsList = [
158
- { status: 'primary', code: 'addRow', content: '新增行' },
159
- { status: 'danger', code: 'deleteRow', content: '删除行' },
160
- { status: 'primary', code: 'import', icon: 'vxe-icon-upload', content: '导入' },
161
- { status: 'success', code: 'export', icon: 'vxe-icon-download', content: '导出' },
162
- { status: 'warning', code: 'print', icon: 'vxe-icon-print', content: '打印' }
163
- ]
164
- export default {
165
- name: 'ShTable',
158
+ import useTable from './js/useTable'
159
+ export default defineComponent({
160
+ name: 'ShGrid',
166
161
  components: {
167
162
  importModal
168
163
  },
169
- mixins: [defaultData],
170
164
  props: {
171
165
  ...props
172
166
  },
@@ -197,133 +191,28 @@ export default {
197
191
  'globaloption',
198
192
  'toolbaroption'
199
193
  ],
200
- data() {
201
- return {
202
- // 渲染key值
203
- renderKey: 1,
204
- // 全选状态
205
- isAllChecked: false,
206
- // 半选状态
207
- isIndeterminate: false,
208
- // table选中keys
209
- selectedRowKeys: [],
210
- // table选中records
211
- selectionRows: [],
212
- // 表格格式化后表头
213
- tableColumnsFixed: [],
214
- // 表格全表搜索数据
215
- tableFilterData: null,
216
- // 多层转一维后表头
217
- tableColumnsFlat: [],
218
- // 根据表格表头生成表单项配置
219
- tableFormItems: [],
220
- // 表格根据表头自动生成验证规则
221
- tableEditRules: {},
222
- // 全局过滤关键字
223
- tableFilterText: '',
224
- // 表格当前高亮行
225
- tableCurrentRowData: null,
226
- // 导出入弹窗开关
227
- importModal: false,
228
- // 表格是否全屏显示状态
229
- tableIsFullscreen: false,
230
- // 根据表头生成行默认值
231
- tableRowDefaultData: {}
232
- }
233
- },
234
- computed: {
235
- wrapHeight() {
236
- return [100, '100%', 'auto'].includes(this.height) ? '100%' : 'auto'
237
- },
238
- tableVmConfig() {
239
- return { size: this.size }
240
- },
241
- tableGlobalConfig() {
242
- return Object.assign({}, this.globalConfigDefault, this.globalConfig)
243
- },
244
- tableTools() {
245
- let tools = this.globalConfig?.tools || []
246
- return toolsList.filter(tool => tools.includes(tool.code))
247
- },
248
- tableColumns() {
249
- let defaultColumns = this.columnsConfigDefault.filter(item => this.tableGlobalConfig[item.type])
250
- return defaultColumns.concat(this.tableColumnsFixed)
251
- },
252
- tableColumnConfig() {
253
- return Object.assign({ isCurrent: false, isHover: true, resizable: true }, this.columnConfig)
254
- },
255
- tablePagerConfig() {
256
- return Object.assign({ enabled: this.pagerConfig, total: 0, className: 'sh-table-footer', slots: { left: 'pagerLeft', right: 'pagerRight' } }, this.pagerConfig)
257
- },
258
- tableCheckboxConfig() {
259
- let hasTree = this.columns.some(_ => _.treeNode)
260
- return Object.assign({ range: !hasTree }, this.checkboxConfig)
261
- },
262
- tableTreeConfig() {
263
- let hasTree = this.columns.some(_ => _.treeNode)
264
- return hasTree ? Object.assign({}, this.treeConfig) : null
265
- },
266
- tableExportConfig() {
267
- return Object.assign({ filename: this.tableGlobalConfig.tableName, sheetName: 'sheet1' }, this.exportConfigDefault, this.exportConfig)
268
- },
269
- tablePrintConfig() {
270
- return Object.assign({ filename: this.tableGlobalConfig.tableName, sheetName: this.tableGlobalConfig.tableName }, this.printConfigDefault, this.printConfig)
271
- },
272
- tableEditConfig() {
273
- return Object.assign({ enabled: !this.disabled, showStatus: !this.disabled, showUpdateStatus: !this.disabled, showInsertStatus: !this.disabled }, this.editConfig)
274
- },
275
- tableQueryConfig() {
276
- // 高级查询
277
- return Object.assign(
278
- { data: this.queryData, items: this.tableFormItems, rules: this.tableEditRules, validConfig: this.validConfig, globalConfig: this.tableGlobalConfig, transformitem: false },
279
- this.tableVmConfig
280
- )
281
- },
282
- tableFilterConfig() {
283
- // 模糊搜索
284
- return Object.assign({ size: this.size, clearable: true, type: 'search', placeholder: '全局关键字搜索' }, this.tableVmConfig)
285
- },
286
- tableSlots() {
287
- let disSlots = ['head', 'form', 'formLeft', 'formRight', 'toolbar', 'toolbarLeft', 'toolbarRight', 'pagerLeft', 'pagerRight']
288
- return Object.keys(this.$slots).filter(key => !disSlots.includes(key))
194
+ setup(props, context) {
195
+ const { proxy } = getCurrentInstance()
196
+
197
+ const useTableHooks = useTable(props, context, proxy, true)
198
+
199
+ const tableIsFullscreen = ref(false) // 表格是否全屏显示状态
200
+
201
+ // 表格切换全屏缩放按钮
202
+ const handleTableZoomBtn = val => {
203
+ tableIsFullscreen.value = val
204
+ if (val) {
205
+ useTableHooks.tableRef.value.zoom()
206
+ } else {
207
+ useTableHooks.tableRef.value.revert()
208
+ }
289
209
  }
290
- },
291
- watch: {
292
- columns: {
293
- handler(newvalue, oldValue) {
294
- this.initTableColumns(newvalue)
295
- },
296
- deep: true,
297
- immediate: true
298
- },
299
- dataSourse: {
300
- handler(newvalue, oldValue) {
301
- this.initColsDefaultValue()
302
- this.selectionRows = []
303
- },
304
- immediate: true
305
- },
306
- editRules: {
307
- handler(newvalue, oldValue) {
308
- this.initEditRules(newvalue)
309
- },
310
- deep: true,
311
- immediate: true
210
+
211
+ return {
212
+ ...useTableHooks,
213
+ tableIsFullscreen,
214
+ handleTableZoomBtn
312
215
  }
313
- },
314
- created() {
315
- this.initCreated()
316
- },
317
- mounted() {},
318
- methods: {
319
- tableRef() {
320
- return this.$refs.vxeGrid
321
- },
322
- ...methods
323
216
  }
324
- }
217
+ })
325
218
  </script>
326
-
327
- <style lang="scss">
328
- @import './css/index.scss';
329
- </style>
@@ -0,0 +1,175 @@
1
+ import { utils } from 'sh-tools'
2
+ const $vUtils = utils
3
+
4
+ // 判断为true
5
+ const isTrue = value => {
6
+ return String(value) === '1' || String(value).toLowerCase() === 'true'
7
+ }
8
+ // 获取默认验证信息
9
+ const getDefaultMessage = (renderType, title) => {
10
+ let message = ''
11
+ const selectRenders = ['$vSelect', '$vTree', '$vTime', '$vSwitch', '$vCheckbox', '$vCheckgroup', '$vRadio', '$vRadiogroup', '$vUpload']
12
+ if (selectRenders.includes(renderType)) {
13
+ message = '请选择' + title
14
+ } else {
15
+ message = '请输入' + title
16
+ }
17
+ return message
18
+ }
19
+
20
+ // 表格打印、导出统一过滤列
21
+ export const columnDefaultFilterMethod = ({ column, $columnIndex }) => {
22
+ let field = column.field
23
+ let renderObj = column.cellRender || column.editRender
24
+ let renderName = renderObj && renderObj.name
25
+ let returnValue = true
26
+ if (!field || ['seq', 'checkbox', 'radio'].includes(column.type)) {
27
+ returnValue = false
28
+ } else if (renderName === '$vGlobalOption') {
29
+ returnValue = false
30
+ }
31
+ return returnValue
32
+ }
33
+
34
+ // 默认求底部计算方法(已改用footer渲染器,其他需要自行计算)
35
+ export const tableFooterCompute = (columns, data, computeType, typeObj = {}) => {
36
+ let emptyString = ''
37
+ let computeName = typeObj.name || ''
38
+ let computeData = typeObj.data || {}
39
+ let textIndex = 0
40
+ if (!computeName) {
41
+ switch (computeType) {
42
+ case 'subTotal':
43
+ computeName = '合计'
44
+ break
45
+ case 'allTotal':
46
+ computeName = '总计'
47
+ break
48
+ case 'mean':
49
+ computeName = '平均'
50
+ break
51
+ default:
52
+ }
53
+ }
54
+ return columns.map((column, columnIndex) => {
55
+ let result = null
56
+ if (column.type === 'seq' || column.type === 'total') {
57
+ result = computeName
58
+ textIndex = columnIndex
59
+ } else {
60
+ result = computeData[column.property] || emptyString
61
+ $vUtils.set(column, `rfooter.index`, textIndex)
62
+ $vUtils.set(column, `rfooter.${computeName}`, { computeType, result, typeObj })
63
+ }
64
+ return result
65
+ })
66
+ }
67
+ // 转化表头过滤配置
68
+ export const turnColumnItemFilters = (column, props) => {
69
+ let columnRender = column.cellRender || column.editRender || column.contentRender
70
+ let columnProps = Object.assign({}, props)
71
+ columnProps.colRenderName = columnRender.name
72
+ if (!column.filters) {
73
+ switch (columnRender.name) {
74
+ case '$select':
75
+ case '$vSelect':
76
+ case '$vCheckgroup':
77
+ case '$vRadiogroup':
78
+ case '$vSwitch':
79
+ column.filters = Array.isArray(columnRender.props && columnRender.props.options) ? columnRender.props.options : false
80
+ column.filterMultiple = true
81
+ break
82
+ case '$vInput':
83
+ column.filters = [{ value: '', data: '' }]
84
+ column.filterRender = { name: '$vFilterInput', props: columnProps }
85
+ break
86
+ default:
87
+ column.filters = [{ value: '', data: '' }]
88
+ column.filterRender = { name: '$vFilterInput', props: columnProps }
89
+ break
90
+ }
91
+ }
92
+ }
93
+ // 转换表头校验规则
94
+ export const getFieldsRules = columns => {
95
+ let rules = {}
96
+ $vUtils.eachTree(columns, column => {
97
+ // 首先提取校验配置
98
+ if (isTrue(column['renderRequire'])) {
99
+ // 若配置了校验参数则走校验参数,没配置则给默认校验条件
100
+ if (column['requireProps'] && Array.isArray(column['requireProps']) && column['requireProps'].length > 0) {
101
+ rules[column['field']] = column['requireProps']
102
+ } else {
103
+ let dataType = 'string'
104
+ let arrayType = ['$vCheckgroup', '$vUpload', '$vTable']
105
+ if (arrayType.includes(column['renderName']) || ((column['renderName'] === '$vSelect' || column['renderName'] === '$vTree') && isTrue(column.renderProps?.multiple))) {
106
+ dataType = 'array'
107
+ }
108
+ rules[column['field']] = [{ required: true, message: getDefaultMessage(column['renderName'], column['title']), type: dataType }]
109
+ }
110
+ }
111
+ })
112
+ return rules
113
+ }
114
+ // 转换生成新表头数据
115
+ export const getTransfarFields = (oriArr = [], columnObj, isSearch) => {
116
+ let columnsFlatArr = []
117
+ let formItemsArr = []
118
+ let columnsArr = $vUtils.mapTree(oriArr, ori => {
119
+ let tar = Object.assign({}, columnObj, ori)
120
+ if (ori.children && ori.children.length > 0) {
121
+ tar.sortable = false
122
+ tar.filter = false
123
+ } else {
124
+ let renderConfig = {
125
+ name: ori.renderName || '$vInput',
126
+ props: Object.assign({}, ori.renderProps || {})
127
+ }
128
+ // 个性化设置
129
+ if (tar.renderName === '$vGlobalOption' || ['$vImg', '$vHref', '$vUpload'].includes(tar.renderName)) {
130
+ tar.filter = false
131
+ tar.sortable = false
132
+ }
133
+ if (tar.renderName === '$vGlobalOption') {
134
+ tar.resizable = false
135
+ }
136
+ if (tar.renderName === '$vMoney' || ['number', 'float', 'integer'].includes(renderConfig.props.type)) {
137
+ tar.cellType = 'number'
138
+ }
139
+ if (tar.renderName === '$vMoney' && renderConfig.props.bill) {
140
+ tar.filter = false
141
+ tar.headerClassName = tar.headerClassName ? `${tar.headerClassName} header-bill-cell` : 'header-bill-cell'
142
+ }
143
+ // 初始化排序条件
144
+ if (Number(tar.sortable) === 0 || tar.sortable === 'false') {
145
+ tar.sortable = false
146
+ }
147
+ // 判断单元格是否可编辑
148
+ if (ori.readonly || ori.slots?.default || (!ori.renderName && !(tar.editRender && tar.editRender.name))) {
149
+ tar.cellRender = Object.assign({}, renderConfig, tar.cellRender || {})
150
+ } else {
151
+ tar.editRender = Object.assign({}, renderConfig, tar.editRender || {})
152
+ }
153
+ // 初始化表单查询配置
154
+ if (isSearch) {
155
+ let editFixedNames = ['$vImg', '$vHref', '$vUpload']
156
+ let formItem = Object.assign({}, tar)
157
+ formItem.itemRender = Object.assign({}, renderConfig, tar.editRender || {}, tar.itemRender || {})
158
+ delete formItem.cellRender
159
+ delete formItem.editRender
160
+ formItem.itemRender.name = formItem.itemRender.name || '$vInput'
161
+ // 此处修正, 对其不进行默认渲染
162
+ if (formItem.search && formItem.search !== '0' && !editFixedNames.includes(formItem.itemRender.name)) {
163
+ formItemsArr.push(formItem)
164
+ }
165
+ }
166
+ // 初始化过滤条件
167
+ if (tar.filter === true || Number(tar.filter) === 1) {
168
+ turnColumnItemFilters(tar, renderConfig.props)
169
+ }
170
+ }
171
+ columnsFlatArr.push(tar)
172
+ return tar
173
+ })
174
+ return { columnsArr, columnsFlatArr, formItemsArr }
175
+ }