sh-view 2.7.7 → 2.7.9

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 (118) hide show
  1. package/README.md +13 -13
  2. package/other.js +8 -0
  3. package/package.json +4 -3
  4. package/packages/components/index.js +35 -35
  5. package/packages/components/{global-components/sh-alert → sh-alert}/index.vue +8 -15
  6. package/packages/components/{global-components/sh-badge → sh-badge}/index.vue +6 -5
  7. package/packages/components/{global-components/sh-drawer → sh-drawer}/index.vue +49 -27
  8. package/packages/components/{global-components/sh-form → sh-form}/js/useForm.js +2 -2
  9. package/packages/components/sh-header/index.vue +260 -0
  10. package/packages/components/{global-components/sh-poptip → sh-poptip}/index.vue +1 -1
  11. package/packages/components/{global-components/sh-progress → sh-progress}/index.vue +2 -18
  12. package/packages/components/{global-components/sh-table → sh-table}/css/index.scss +18 -0
  13. package/packages/components/{global-components/sh-table → sh-table}/js/useTable.js +4 -6
  14. package/packages/components/{global-components/sh-table → sh-table}/table.vue +217 -218
  15. package/packages/components/{global-components/sh-tabs → sh-tabs}/index.vue +97 -34
  16. package/packages/components/{global-components/sh-tree → sh-tree}/components/table-tree.vue +1 -1
  17. package/packages/components/{global-components/sh-tree → sh-tree}/css/index.scss +1 -0
  18. package/packages/components/{global-components/sh-tree → sh-tree}/index.vue +16 -5
  19. package/packages/components/{global-components/sh-tree → sh-tree}/mixin/treeProps.js +1 -1
  20. package/packages/index.js +39 -39
  21. package/packages/{components/other-components → other}/sh-cron-modal/tabs/cron-week-box.vue +126 -126
  22. package/packages/{components/other-components → other}/sh-menu/index.vue +3 -0
  23. package/packages/{components/other-components → other}/sh-menu/menu-item-content.vue +3 -3
  24. package/packages/other/sh-preview/components/sh-excel.vue +163 -0
  25. package/packages/{components/other-components → other}/sh-preview/index.vue +92 -80
  26. package/packages/vxeTable/css/index.scss +1 -2
  27. package/packages/vxeTable/index.js +1 -1
  28. package/packages/vxeTable/render/cell/vxe-render-tree.vue +70 -63
  29. package/packages/components/global-components/sh-header/index.vue +0 -278
  30. package/packages/components/other-components/sh-preview/components/sh-excel.vue +0 -929
  31. /package/packages/components/{global-components/sh-calendar → sh-calendar}/index.vue +0 -0
  32. /package/packages/components/{global-components/sh-card → sh-card}/index.vue +0 -0
  33. /package/packages/components/{global-components/sh-code-editor → sh-code-editor}/index.vue +0 -0
  34. /package/packages/components/{global-components/sh-code-editor → sh-code-editor}/themes/dark.js +0 -0
  35. /package/packages/components/{global-components/sh-code-editor → sh-code-editor}/themes/dracula.js +0 -0
  36. /package/packages/components/{global-components/sh-code-editor → sh-code-editor}/themes/index.js +0 -0
  37. /package/packages/components/{global-components/sh-col → sh-col}/css/index.scss +0 -0
  38. /package/packages/components/{global-components/sh-col → sh-col}/index.vue +0 -0
  39. /package/packages/components/{global-components/sh-corner → sh-corner}/index.vue +0 -0
  40. /package/packages/components/{global-components/sh-count-to → sh-count-to}/index.vue +0 -0
  41. /package/packages/components/{global-components/sh-date → sh-date}/index.vue +0 -0
  42. /package/packages/components/{global-components/sh-drawer → sh-drawer}/scrollbar.js +0 -0
  43. /package/packages/components/{global-components/sh-empty → sh-empty}/index.vue +0 -0
  44. /package/packages/components/{global-components/sh-form → sh-form}/form.vue +0 -0
  45. /package/packages/components/{global-components/sh-form → sh-form}/js/props.js +0 -0
  46. /package/packages/components/{global-components/sh-form → sh-form}/query.vue +0 -0
  47. /package/packages/components/{global-components/sh-icon → sh-icon}/css/default/icons.scss +0 -0
  48. /package/packages/components/{global-components/sh-icon → sh-icon}/css/default/ionicons.svg +0 -0
  49. /package/packages/components/{global-components/sh-icon → sh-icon}/css/default/ionicons.ttf +0 -0
  50. /package/packages/components/{global-components/sh-icon → sh-icon}/css/default/ionicons.woff +0 -0
  51. /package/packages/components/{global-components/sh-icon → sh-icon}/css/default/ionicons.woff2 +0 -0
  52. /package/packages/components/{global-components/sh-icon → sh-icon}/css/font/iconfont.js +0 -0
  53. /package/packages/components/{global-components/sh-icon → sh-icon}/css/font/iconfont.json +0 -0
  54. /package/packages/components/{global-components/sh-icon → sh-icon}/css/font/iconfont.ttf +0 -0
  55. /package/packages/components/{global-components/sh-icon → sh-icon}/css/font/iconfont.woff +0 -0
  56. /package/packages/components/{global-components/sh-icon → sh-icon}/css/font/iconfont.woff2 +0 -0
  57. /package/packages/components/{global-components/sh-icon → sh-icon}/css/font/icons.scss +0 -0
  58. /package/packages/components/{global-components/sh-icon → sh-icon}/css/index.scss +0 -0
  59. /package/packages/components/{global-components/sh-icon → sh-icon}/index.vue +0 -0
  60. /package/packages/components/{global-components/sh-image → sh-image}/index.vue +0 -0
  61. /package/packages/components/{global-components/sh-list → sh-list}/index.vue +0 -0
  62. /package/packages/components/{global-components/sh-loading → sh-loading}/index.vue +0 -0
  63. /package/packages/components/{global-components/sh-modal → sh-modal}/index.vue +0 -0
  64. /package/packages/components/{global-components/sh-noticebar → sh-noticebar}/index.vue +0 -0
  65. /package/packages/components/{global-components/sh-pull-refresh → sh-pull-refresh}/index.vue +0 -0
  66. /package/packages/components/{global-components/sh-result → sh-result}/index.vue +0 -0
  67. /package/packages/components/{global-components/sh-row → sh-row}/css/index.scss +0 -0
  68. /package/packages/components/{global-components/sh-row → sh-row}/index.vue +0 -0
  69. /package/packages/components/{global-components/sh-split → sh-split}/components/trigger.vue +0 -0
  70. /package/packages/components/{global-components/sh-split → sh-split}/index.vue +0 -0
  71. /package/packages/components/{global-components/sh-table → sh-table}/components/importModal.vue +0 -0
  72. /package/packages/components/{global-components/sh-table → sh-table}/components/sh-column.vue +0 -0
  73. /package/packages/components/{global-components/sh-table → sh-table}/grid.vue +0 -0
  74. /package/packages/components/{global-components/sh-table → sh-table}/js/excel_to_json.js +0 -0
  75. /package/packages/components/{global-components/sh-table → sh-table}/js/props.js +0 -0
  76. /package/packages/components/{global-components/sh-table → sh-table}/js/tableMethods.js +0 -0
  77. /package/packages/components/{global-components/sh-tag → sh-tag}/index.vue +0 -0
  78. /package/packages/components/{global-components/sh-toolbar → sh-toolbar}/index.vue +0 -0
  79. /package/packages/components/{global-components/sh-upload → sh-upload}/index.vue +0 -0
  80. /package/packages/components/{global-components/sh-upload → sh-upload}/js/ajax.js +0 -0
  81. /package/packages/components/{global-components/sh-water-fall → sh-water-fall}/index.vue +0 -0
  82. /package/packages/components/{global-components/sh-water-mark → sh-water-mark}/index.vue +0 -0
  83. /package/packages/{components/other-components → other}/sh-cron-modal/components/cron-content.vue +0 -0
  84. /package/packages/{components/other-components → other}/sh-cron-modal/css/index.scss +0 -0
  85. /package/packages/{components/other-components → other}/sh-cron-modal/index.vue +0 -0
  86. /package/packages/{components/other-components → other}/sh-cron-modal/mixin/cron-emits.js +0 -0
  87. /package/packages/{components/other-components → other}/sh-cron-modal/mixin/cron-hooks.js +0 -0
  88. /package/packages/{components/other-components → other}/sh-cron-modal/mixin/cron-props.js +0 -0
  89. /package/packages/{components/other-components → other}/sh-cron-modal/tabs/cron-day-box.vue +0 -0
  90. /package/packages/{components/other-components → other}/sh-cron-modal/tabs/cron-hour-box.vue +0 -0
  91. /package/packages/{components/other-components → other}/sh-cron-modal/tabs/cron-minute-box.vue +0 -0
  92. /package/packages/{components/other-components → other}/sh-cron-modal/tabs/cron-month-box.vue +0 -0
  93. /package/packages/{components/other-components → other}/sh-cron-modal/tabs/cron-second-box.vue +0 -0
  94. /package/packages/{components/other-components → other}/sh-cron-modal/tabs/cron-year-box.vue +0 -0
  95. /package/packages/{components/other-components → other}/sh-cron-modal/utils/index.js +0 -0
  96. /package/packages/{components/other-components → other}/sh-markdown/index.vue +0 -0
  97. /package/packages/{components/other-components → other}/sh-markdown/tinymce/langs/zh-Hans.js +0 -0
  98. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/content/default/content.css +0 -0
  99. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/ui/oxide/content.css +0 -0
  100. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/ui/oxide/content.inline.css +0 -0
  101. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/ui/oxide/content.inline.min.css +0 -0
  102. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/ui/oxide/content.min.css +0 -0
  103. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/ui/oxide/content.mobile.css +0 -0
  104. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/ui/oxide/content.mobile.min.css +0 -0
  105. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff +0 -0
  106. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/ui/oxide/skin.css +0 -0
  107. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/ui/oxide/skin.min.css +0 -0
  108. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/ui/oxide/skin.mobile.css +0 -0
  109. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/ui/oxide/skin.mobile.min.css +0 -0
  110. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/ui/oxide/skin.shadowdom.css +0 -0
  111. /package/packages/{components/other-components → other}/sh-markdown/tinymce/skins/ui/oxide/skin.shadowdom.min.css +0 -0
  112. /package/packages/{components/other-components → other}/sh-menu/menu-group-content.vue +0 -0
  113. /package/packages/{components/other-components → other}/sh-menu-card/index.vue +0 -0
  114. /package/packages/{components/other-components → other}/sh-menu-card/menu-box.vue +0 -0
  115. /package/packages/{components/other-components → other}/sh-preview/components/sh-word.vue +0 -0
  116. /package/packages/{components/other-components → other}/sh-preview/js/data-hook.js +0 -0
  117. /package/packages/{components/other-components → other}/sh-preview/js/data-props.js +0 -0
  118. /package/packages/{components/other-components → other}/sh-system-tip/index.vue +0 -0
@@ -41,6 +41,9 @@ export default defineComponent({
41
41
  collapsed: {
42
42
  type: Boolean
43
43
  },
44
+ defaultIcon: {
45
+ type: Boolean
46
+ },
44
47
  options: {
45
48
  type: Array,
46
49
  default() {
@@ -31,9 +31,9 @@ export default defineComponent({
31
31
  const itemRef = ref()
32
32
 
33
33
  const defaultIcon = computed(() => {
34
- if (!props.menuLevel || props.menuLevel < 1) return 'md-folder'
35
- else if (props.menuLevel === 1) return 'md-bookmark'
36
- else return ''
34
+ if (MenuInstance.props.defaultIcon && (!props.menuLevel || props.menuLevel < 1)) return 'md-folder'
35
+ else if (MenuInstance.props.defaultIcon && props.menuLevel === 1) return 'md-bookmark'
36
+ return ''
37
37
  })
38
38
  const iconType = computed(() => {
39
39
  return props.menuItem.meta?.icon || props.menuItem.icon || defaultIcon.value
@@ -0,0 +1,163 @@
1
+ <script>
2
+ import { defineComponent, computed, getCurrentInstance, ref } from 'vue'
3
+ import dataHook from '../js/data-hook'
4
+ import dataProps from '../js/data-props'
5
+ import ExcelJS from 'exceljs'
6
+ import ExcelTable from '@wolf-table/table'
7
+ import '@wolf-table/table/dist/table.min.css'
8
+ export default defineComponent({
9
+ name: 'ShExcel',
10
+ props: dataProps,
11
+ emits: ['rendered', 'error'],
12
+ setup(props, context) {
13
+ const { proxy } = getCurrentInstance()
14
+ const { $vUtils } = proxy
15
+
16
+ const wordBooks = ref([])
17
+
18
+ let defaultOption = {
19
+ scrollable: true,
20
+ resizable: true,
21
+ selectable: true,
22
+ editable: false,
23
+ copyable: true
24
+ }
25
+ const excelOptions = computed(() => {
26
+ return Object.assign({}, defaultOption, props.options)
27
+ })
28
+ const tabConfig = computed(() => {
29
+ return {
30
+ modelValue: wordBooks.value.length ? wordBooks.value[0].name : '',
31
+ options: wordBooks.value,
32
+ labelKey: 'name',
33
+ labelField: 'name',
34
+ placement: 'bottom',
35
+ type: 'card',
36
+ animated: false
37
+ }
38
+ })
39
+
40
+ const getWorkBookByBuffer = async buffer => {
41
+ const wb = new ExcelJS.Workbook()
42
+ let workbook = await wb.xlsx.load(buffer)
43
+ let workbookData = []
44
+ workbook.eachSheet(sheet => {
45
+ // 构造数据源结构
46
+ let sheetData = { name: sheet.name, styles: [], cells: [], merges: [] }
47
+ for (let mergeRange in sheet._merges) {
48
+ sheetData.merges.push(sheet._merges[mergeRange].shortRange)
49
+ }
50
+ // 遍历行
51
+ sheet.eachRow((row, rowNumber) => {
52
+ let cellResult = {}
53
+ // includeEmpty = false 不包含空白单元格
54
+ row.eachCell({ includeEmpty: true }, function (cell, colNumber) {
55
+ let cellText = ''
56
+ if (cell.value && cell.value.result) {
57
+ // Excel 单元格有公式
58
+ cellText = cell.value.result
59
+ } else if (cell.value && cell.value.richText) {
60
+ // Excel 单元格是多行文本
61
+ for (let text in cell.value.richText) {
62
+ // 多行文本做累加
63
+ cellText += cell.value.richText[text].text
64
+ }
65
+ } else {
66
+ // Excel 单元格无公式
67
+ cellText = cell.value
68
+ }
69
+ // 解析单元格,包含样式
70
+ // 单元格存在背景色
71
+ if (cell.style?.fill?.fgColor?.argb) {
72
+ let cellBgcolor = cell.style.fill.fgColor.argb.trim().toLowerCase() //去掉前后空格
73
+ let argb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(cellBgcolor)
74
+ let rgb = `rgba(${parseInt(argb[2], 16)}, ${parseInt(argb[3], 16)}, ${parseInt(argb[4], 16)})`
75
+ let percent = (parseInt(argb[1], 16) / 255) * 100
76
+ cell.style.bgcolor = $vUtils.fade(rgb, percent)
77
+ }
78
+ // 字体颜色
79
+ if (cell.style?.font?.color?.argb) {
80
+ let cellcolor = cell.style.font.color.argb.trim().toLowerCase() //去掉前后空格
81
+ let argb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(cellcolor)
82
+ let rgb = `rgba(${parseInt(argb[2], 16)}, ${parseInt(argb[3], 16)}, ${parseInt(argb[4], 16)})`
83
+ let percent = (parseInt(argb[1], 16) / 255) * 100
84
+ cell.style.color = $vUtils.fade(rgb, percent)
85
+ }
86
+ // exceljs 对齐的格式转成能识别的对齐格式
87
+ if (cell.style?.alignment?.horizontal) {
88
+ cell.style.align = cell.style.alignment.horizontal
89
+ cell.style.valign = cell.style.alignment.vertical
90
+ }
91
+ // 单元格
92
+ cellResult = { value: cellText, style: sheetData.styles.length }
93
+ // 解析单元格,包含样式
94
+ sheetData.styles.push(cell.style)
95
+ sheetData.cells.push([rowNumber - 1, colNumber - 1, cellResult])
96
+ })
97
+ })
98
+ workbookData.push(sheetData)
99
+ })
100
+ return workbookData
101
+ }
102
+
103
+ const domRender = async (data, container) => {
104
+ if (!data || typeof data === 'string') {
105
+ container.innerHTML = data
106
+ return true
107
+ }
108
+ const { width, height } = container.getBoundingClientRect()
109
+ const buffer = await data.arrayBuffer()
110
+ const workData = await getWorkBookByBuffer(buffer)
111
+ wordBooks.value = workData
112
+ let tables = []
113
+ setTimeout(() => {
114
+ workData.forEach((sheet, sheetIndex) => {
115
+ let refName = `sheet${sheet.name}Ref`
116
+ sheet.workTable = ExcelTable.create(
117
+ proxy.$refs[refName][0],
118
+ () => width,
119
+ () => (height ? height - 32 : 300),
120
+ excelOptions.value
121
+ )
122
+ sheet.workTable.data(sheet).render()
123
+ })
124
+ })
125
+ return tables
126
+ }
127
+
128
+ const useData = dataHook(props, context, proxy, {
129
+ domRender
130
+ })
131
+
132
+ return {
133
+ ...useData,
134
+ tabConfig
135
+ }
136
+ }
137
+ })
138
+ </script>
139
+
140
+ <template>
141
+ <div ref="rootRef" class="sh-office-excel">
142
+ <sh-tabs v-bind="tabConfig">
143
+ <template #tabContent="tabs">
144
+ <template v-for="(tab, tabIndex) in tabs" :key="tabIndex">
145
+ <div style="position: relative; width: 100%">
146
+ <div :ref="`sheet${tab.name}Ref`"></div>
147
+ </div>
148
+ </template>
149
+ </template>
150
+ </sh-tabs>
151
+ </div>
152
+ </template>
153
+
154
+ <style lang="scss">
155
+ .sh-office-excel {
156
+ position: relative;
157
+ .wolf-table-scrollbar {
158
+ &.vertical {
159
+ opacity: 1 !important;
160
+ }
161
+ }
162
+ }
163
+ </style>
@@ -1,80 +1,92 @@
1
- <template>
2
- <div class="sh-preview">
3
- <component :is="componentName" v-bind="componentProps" :style="componentStyles" @rendered="onRendered" @error="onError" />
4
- </div>
5
- </template>
6
-
7
- <script>
8
- import { defineComponent, computed, defineAsyncComponent } from 'vue'
9
- export default defineComponent({
10
- name: 'ShPreview',
11
- props: {
12
- type: {
13
- type: String
14
- },
15
- base: {
16
- type: String
17
- },
18
- url: {
19
- type: String
20
- },
21
- width: {
22
- type: String,
23
- default: '100%'
24
- },
25
- height: {
26
- type: String,
27
- default: '600px'
28
- }
29
- },
30
- emits: ['ready', 'error'],
31
- setup(props, context) {
32
- const { emit, slots } = context
33
- const previewType = computed(() => (props.type && props.type.toLowerCase()) || (props.url && props.url.substr(props.url.lastIndexOf('.') + 1).toLowerCase()))
34
- const componentName = computed(() => {
35
- if (['word', 'doc', 'docx'].includes(previewType.value)) {
36
- return defineAsyncComponent(() => import('./components/sh-word.vue'))
37
- } else if (['excel', 'xlsx'].includes(previewType.value)) {
38
- // return defineAsyncComponent(() => import('./components/sh-excel.vue'))
39
- }
40
- return 'iframe'
41
- })
42
- const componentProps = computed(() => {
43
- let srcPrefix = props.base || ''
44
- let srcSuffix = componentName.value === 'iframe' ? '#scrollbars=0&toolbar=0&statusbar=0' : ''
45
- return {
46
- src: srcPrefix + props.url + srcSuffix,
47
- frameborder: 0
48
- }
49
- })
50
- const componentStyles = computed(() => {
51
- return {
52
- width: props.width,
53
- height: props.height
54
- }
55
- })
56
-
57
- const onRendered = data => {
58
- emit('ready', data)
59
- }
60
- const onError = data => {
61
- emit('error', data)
62
- }
63
-
64
- return {
65
- componentName,
66
- componentProps,
67
- componentStyles,
68
- onRendered,
69
- onError
70
- }
71
- }
72
- })
73
- </script>
74
-
75
- <style lang="scss" scoped>
76
- .sh-preview {
77
- position: relative;
78
- overflow: auto;
79
- }
80
- </style>
1
+ <template>
2
+ <div class="sh-preview">
3
+ <component :is="componentName" v-bind="componentProps" :style="componentStyles" @rendered="onRendered" @error="onError" />
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ import { defineComponent, computed, defineAsyncComponent } from 'vue'
9
+ export default defineComponent({
10
+ name: 'ShPreview',
11
+ props: {
12
+ type: {
13
+ type: String
14
+ },
15
+ base: {
16
+ type: String
17
+ },
18
+ url: {
19
+ type: String
20
+ },
21
+ width: {
22
+ type: String,
23
+ default: '100%'
24
+ },
25
+ height: {
26
+ type: String,
27
+ default: '600px'
28
+ }
29
+ },
30
+ emits: ['ready', 'error'],
31
+ setup(props, context) {
32
+ const { emit, slots } = context
33
+ const previewType = computed(() => {
34
+ if (props.type) {
35
+ return props.type.toLowerCase()
36
+ } else if (props.url) {
37
+ return props.url.substr(props.url.lastIndexOf('.') + 1).toLowerCase()
38
+ }
39
+ return ''
40
+ })
41
+ const componentName = computed(() => {
42
+ if (!props.url || !previewType.value) {
43
+ return 'div'
44
+ } else if (['word', 'doc', 'docx'].includes(previewType.value)) {
45
+ return defineAsyncComponent(() => import('./components/sh-word.vue'))
46
+ } else if (['excel', 'xlsx'].includes(previewType.value)) {
47
+ return defineAsyncComponent(() => import('./components/sh-excel.vue'))
48
+ }
49
+ return 'iframe'
50
+ })
51
+ const componentProps = computed(() => {
52
+ let srcPrefix = props.base || ''
53
+ let srcProps = {
54
+ src: srcPrefix + props.url,
55
+ frameborder: 0
56
+ }
57
+ if (componentName.value === 'iframe') {
58
+ srcProps.src += '#scrollbars=0&toolbar=0&statusbar=0'
59
+ }
60
+ return srcProps
61
+ })
62
+ const componentStyles = computed(() => {
63
+ return {
64
+ width: props.width,
65
+ height: props.height
66
+ }
67
+ })
68
+
69
+ const onRendered = data => {
70
+ emit('ready', data)
71
+ }
72
+ const onError = data => {
73
+ emit('error', data)
74
+ }
75
+
76
+ return {
77
+ componentName,
78
+ componentProps,
79
+ componentStyles,
80
+ onRendered,
81
+ onError
82
+ }
83
+ }
84
+ })
85
+ </script>
86
+
87
+ <style lang="scss" scoped>
88
+ .sh-preview {
89
+ position: relative;
90
+ overflow: auto;
91
+ }
92
+ </style>
@@ -231,7 +231,7 @@ button:focus, .vxe-button.type--button:not(.is--disabled):focus{
231
231
  }
232
232
  &.form-render {
233
233
  display: inline-flex;
234
- align-items: center;
234
+ align-items: stretch;
235
235
  width: 100%;
236
236
  vertical-align: middle;
237
237
  .prefix, .suffix{
@@ -259,7 +259,6 @@ button:focus, .vxe-button.type--button:not(.is--disabled):focus{
259
259
  min-width: 30px;
260
260
  cursor: pointer;
261
261
  user-select: none;
262
- font-size: 20px;
263
262
  border: 1px solid var(--vxe-input-border-color);
264
263
  border-radius: var(--vxe-border-radius);
265
264
  &.before{
@@ -6,7 +6,7 @@ import XEClipboard from 'xe-clipboard'
6
6
  import { publicRenders, extraRenders, filterRenders, publicRendersNames } from './render/globalRenders.jsx'
7
7
 
8
8
  let vxeOptions = {
9
- zIndex: 599,
9
+ zIndex: 1500,
10
10
  version: 0,
11
11
  input: {
12
12
  controls: false,
@@ -1,63 +1,70 @@
1
- <template>
2
- <span class="vxe-render--inner" :class="{ 'form-render': rform, 'td-render': !rform }">
3
- <template v-if="redit || isEditAll">
4
- <span v-if="rprops.prefixText && rform" class="prefix">
5
- <vxe-button v-if="prefixButton" v-bind="psButtonConfig" @click="vxeInputPrefixClick">{{ rprops.prefixText }}</vxe-button>
6
- <span v-else @click="vxeInputPrefixClick">{{ rprops.prefixText }}</span>
7
- </span>
8
- <sh-tree v-model="renderValue" v-bind="rprops" :field="rkey" :value-data="rdata" :size="rsize" is-select @change="vxeTreeCallback"></sh-tree>
9
- <span v-if="rprops.suffixText && rform" class="suffix">
10
- <vxe-button v-if="suffixButton" v-bind="psButtonConfig" @click="vxeInputSuffixClick">{{ rprops.suffixText }}</vxe-button>
11
- <span v-else @click="vxeInputSuffixClick">{{ rprops.suffixText }}</span>
12
- </span>
13
- </template>
14
- <template v-else>
15
- <span v-html="renderText"></span>
16
- </template>
17
- </span>
18
- </template>
19
-
20
- <script>
21
- import { defineComponent, getCurrentInstance } from 'vue'
22
- import cellProps from '../mixin/cell-props'
23
- import cellHooks from '../mixin/cell-hooks'
24
- export default defineComponent({
25
- name: 'VxeRenderTree',
26
- props: cellProps,
27
- setup(props, context) {
28
- const { proxy } = getCurrentInstance()
29
- const { $vUtils } = proxy
30
- const useCell = cellHooks(props, context, proxy)
31
-
32
- // 输入框回调
33
- const vxeTreeCallback = (selectedKeys, selectedRows) => {
34
- let { valueKeys, multiple } = props.rprops
35
- if (!multiple) {
36
- selectedKeys = selectedKeys[0] || ''
37
- }
38
- if (valueKeys && selectedRows && selectedRows.length > 0) {
39
- let prefixKey = props.rkey.endsWith('Id') ? String(props.rkey).replace('Id', '') : props.rkey
40
- let valueks = Array.isArray(valueKeys) ? valueKeys : valueKeys.split(',')
41
- valueks.forEach(key => {
42
- let keySplits = key.split('=')
43
- let fromDefaultKey = String(keySplits[0]).replace(/@/gi, '').toLowerCase()
44
- let fromKey = keySplits[1] || String(keySplits[0]).replace(/@/gi, prefixKey)
45
- let fromvalue = null
46
- if (multiple) {
47
- fromvalue = selectedRows.map(item => $vUtils.get(item, fromKey) || $vUtils.get(item, fromDefaultKey))
48
- } else {
49
- fromvalue = $vUtils.get(selectedRows[0], fromKey) || $vUtils.get(selectedRows[0], fromDefaultKey)
50
- }
51
- $vUtils.set(props.rdata, fromKey, fromvalue)
52
- })
53
- }
54
- useCell.setRenderValue(selectedKeys, true)
55
- }
56
-
57
- return {
58
- ...useCell,
59
- vxeTreeCallback
60
- }
61
- }
62
- })
63
- </script>
1
+ <template>
2
+ <span class="vxe-render--inner" :class="{ 'form-render': rform, 'td-render': !rform }">
3
+ <template v-if="redit || isEditAll">
4
+ <span v-if="rprops.prefixText && rform" class="prefix">
5
+ <vxe-button v-if="prefixButton" v-bind="psButtonConfig" @click="vxeInputPrefixClick">{{ rprops.prefixText }}</vxe-button>
6
+ <span v-else @click="vxeInputPrefixClick">{{ rprops.prefixText }}</span>
7
+ </span>
8
+ <sh-tree v-model="renderValue" v-bind="rprops" :field="rkey" :value-data="rdata" :size="rsize" is-select @change="vxeTreeCallback"></sh-tree>
9
+ <span v-if="rprops.suffixText && rform" class="suffix">
10
+ <vxe-button v-if="suffixButton" v-bind="psButtonConfig" @click="vxeInputSuffixClick">{{ rprops.suffixText }}</vxe-button>
11
+ <span v-else @click="vxeInputSuffixClick">{{ rprops.suffixText }}</span>
12
+ </span>
13
+ </template>
14
+ <template v-else>
15
+ <span v-html="renderText"></span>
16
+ </template>
17
+ </span>
18
+ </template>
19
+
20
+ <script>
21
+ import { defineComponent, getCurrentInstance } from 'vue'
22
+ import cellProps from '../mixin/cell-props'
23
+ import cellHooks from '../mixin/cell-hooks'
24
+ export default defineComponent({
25
+ name: 'VxeRenderTree',
26
+ props: cellProps,
27
+ setup(props, context) {
28
+ const { proxy } = getCurrentInstance()
29
+ const { $vUtils } = proxy
30
+ const useCell = cellHooks(props, context, proxy)
31
+
32
+ // 输入框回调
33
+ const vxeTreeCallback = (selectedKeys, selectedRows) => {
34
+ let { valueKeys, multiple } = props.rprops
35
+ let rvalue = selectedKeys
36
+ if (!multiple) {
37
+ rvalue = selectedKeys[0] || ''
38
+ }
39
+ if (valueKeys && selectedRows && selectedRows.length > 0) {
40
+ let prefixKey = props.rkey
41
+ let endStrs = ['Id', '_id']
42
+ endStrs.forEach(end => {
43
+ if (props.rkey.endsWith(end)) {
44
+ prefixKey = props.rkey.replace(end, '')
45
+ }
46
+ })
47
+ let valueks = Array.isArray(valueKeys) ? valueKeys : valueKeys.split(',')
48
+ valueks.forEach(key => {
49
+ let keySplits = key.split('=')
50
+ let fromDefaultKey = String(keySplits[0]).replace(/@/gi, '').toLowerCase()
51
+ let fromKey = keySplits[1] || String(keySplits[0]).replace(/@/gi, prefixKey)
52
+ let fromvalue = null
53
+ if (multiple) {
54
+ fromvalue = selectedRows.map(item => $vUtils.get(item, fromKey) || $vUtils.get(item, fromDefaultKey))
55
+ } else {
56
+ fromvalue = $vUtils.get(selectedRows[0], fromKey) || $vUtils.get(selectedRows[0], fromDefaultKey)
57
+ }
58
+ $vUtils.set(props.rdata, fromKey, fromvalue)
59
+ })
60
+ }
61
+ useCell.setRenderValue(rvalue, true)
62
+ }
63
+
64
+ return {
65
+ ...useCell,
66
+ vxeTreeCallback
67
+ }
68
+ }
69
+ })
70
+ </script>