iov-pro-components 0.0.3
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/.eslintignore +5 -0
- package/.eslintrc.js +192 -0
- package/.gitignore +3 -0
- package/README.md +4 -0
- package/babel.config.js +5 -0
- package/docs/.vuepress/config.js +169 -0
- package/docs/.vuepress/styles/index.styl +62 -0
- package/docs/.vuepress/styles/palette.styl +20 -0
- package/docs/.vuepress/theme/enhanceApp.js +100 -0
- package/docs/.vuepress/theme/index.js +3 -0
- package/docs/README.md +13 -0
- package/docs/components/description.md +519 -0
- package/docs/components/dialog-select.md +91 -0
- package/docs/components/display.md +36 -0
- package/docs/components/enums.md +33 -0
- package/docs/components/icon.md +406 -0
- package/docs/components/link-group.md +39 -0
- package/docs/components/page-detail.md +48 -0
- package/docs/components/page-module.md +51 -0
- package/docs/components/pro-form.md +958 -0
- package/docs/components/pro-table.md +683 -0
- package/docs/components/request.md +44 -0
- package/docs/components/search-table.md +963 -0
- package/docs/components/space.md +35 -0
- package/docs/components/sub-title.md +24 -0
- package/docs/components/submit-module.md +24 -0
- package/docs/template/add.md +124 -0
- package/docs/template/confirm.md +28 -0
- package/docs/template/detail.md +240 -0
- package/docs/template/dialog.md +339 -0
- package/docs/template/list.md +464 -0
- package/docs/template/tabs-mini.md +32 -0
- package/docs/template/tabs.md +32 -0
- package/jsconfig.json +19 -0
- package/lib/iov-pro-components.css +1 -0
- package/lib/iov-pro-components.min.js +7 -0
- package/lib/postcss.config.js +8 -0
- package/package.json +75 -0
- package/patches/vue-server-renderer+2.7.16.patch +13 -0
- package/rollup.config.mjs +79 -0
- package/src/App.vue +103 -0
- package/src/main.js +33 -0
- package/src/packages/column-tooltip/index.js +7 -0
- package/src/packages/column-tooltip/src/main.vue +127 -0
- package/src/packages/description/index.js +7 -0
- package/src/packages/description/src/main.vue +375 -0
- package/src/packages/description/src/text.vue +103 -0
- package/src/packages/dialog-select/index.js +7 -0
- package/src/packages/dialog-select/src/main.vue +308 -0
- package/src/packages/display/index.js +7 -0
- package/src/packages/display/src/main.vue +44 -0
- package/src/packages/enums/index.js +7 -0
- package/src/packages/enums/src/main.vue +23 -0
- package/src/packages/export/index.js +7 -0
- package/src/packages/export/src/main.vue +316 -0
- package/src/packages/fixed-button-group/index.js +7 -0
- package/src/packages/fixed-button-group/src/main.vue +104 -0
- package/src/packages/form/index.js +7 -0
- package/src/packages/form/src/collapse.vue +149 -0
- package/src/packages/form/src/main.vue +1190 -0
- package/src/packages/form-collapse/index.js +7 -0
- package/src/packages/index.js +86 -0
- package/src/packages/link-group/index.js +7 -0
- package/src/packages/link-group/src/main.vue +52 -0
- package/src/packages/page-detail/index.js +7 -0
- package/src/packages/page-detail/src/main.vue +123 -0
- package/src/packages/page-module/index.js +7 -0
- package/src/packages/page-module/src/main.vue +56 -0
- package/src/packages/preview/index.js +7 -0
- package/src/packages/preview/src/eval-image-viewer.js +50 -0
- package/src/packages/preview/src/image-viewer.vue +366 -0
- package/src/packages/preview/src/main.vue +97 -0
- package/src/packages/request/index.js +7 -0
- package/src/packages/request/src/main.vue +125 -0
- package/src/packages/search-table/index.js +7 -0
- package/src/packages/search-table/src/inner-tabs.vue +237 -0
- package/src/packages/search-table/src/main.vue +472 -0
- package/src/packages/search-table/src/outer-tabs.vue +45 -0
- package/src/packages/search-table-inner-tabs/index.js +7 -0
- package/src/packages/search-table-outer-tabs/index.js +7 -0
- package/src/packages/space/index.js +7 -0
- package/src/packages/space/src/main.vue +74 -0
- package/src/packages/sub-title/index.js +7 -0
- package/src/packages/sub-title/src/main.vue +70 -0
- package/src/packages/submit-module/index.js +7 -0
- package/src/packages/submit-module/src/main.vue +67 -0
- package/src/packages/table/index.js +7 -0
- package/src/packages/table/src/filter.vue +89 -0
- package/src/packages/table/src/main.vue +668 -0
- package/src/packages/table/src/search.vue +90 -0
- package/src/packages/table/src/sort.vue +118 -0
- package/src/packages/theme/index.scss +15 -0
- package/src/packages/theme/src/column-tooltip.scss +23 -0
- package/src/packages/theme/src/common/color.scss +134 -0
- package/src/packages/theme/src/description.scss +56 -0
- package/src/packages/theme/src/dialog-select.scss +32 -0
- package/src/packages/theme/src/fixed-button-group.scss +25 -0
- package/src/packages/theme/src/form.scss +11 -0
- package/src/packages/theme/src/link-group.scss +43 -0
- package/src/packages/theme/src/page-detail.scss +61 -0
- package/src/packages/theme/src/page-module.scss +46 -0
- package/src/packages/theme/src/preview.scss +67 -0
- package/src/packages/theme/src/search-table.scss +185 -0
- package/src/packages/theme/src/space.scss +12 -0
- package/src/packages/theme/src/sub-title.scss +47 -0
- package/src/packages/theme/src/submit-module.scss +13 -0
- package/src/packages/theme/src/table.scss +129 -0
- package/src/packages/theme/src/toolbar.scss +109 -0
- package/src/packages/toolbar/index.js +7 -0
- package/src/packages/toolbar/src/main.vue +126 -0
- package/src/packages/toolbar/src/setting.vue +217 -0
- package/src/packages/toolbar/src/style.vue +68 -0
- package/src/packages/toolbar/src/zoom.vue +65 -0
- package/src/router.js +83 -0
- package/src/utils/config-center.js +218 -0
- package/src/utils/function-eval.js +84 -0
- package/src/utils/index.js +104 -0
- package/src/views/column-tooltip.vue +37 -0
- package/src/views/components/OtherSelect.vue +18 -0
- package/src/views/description.vue +60 -0
- package/src/views/detail.vue +146 -0
- package/src/views/directive/number.js +82 -0
- package/src/views/enums.vue +22 -0
- package/src/views/export.vue +9 -0
- package/src/views/form-collapse.vue +185 -0
- package/src/views/form.vue +402 -0
- package/src/views/link-group.vue +16 -0
- package/src/views/preview.vue +33 -0
- package/src/views/request.vue +56 -0
- package/src/views/search-table.vue +297 -0
- package/src/views/table.vue +145 -0
- package/src/views/toolbar.vue +30 -0
- package/vue.config.js +22 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import Draggable from 'vuedraggable'
|
|
3
|
+
import { getComponentNames } from '@/utils/config-center'
|
|
4
|
+
import { randomString } from '@/utils'
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
name: 'IovProToolbarSetting',
|
|
8
|
+
props: {
|
|
9
|
+
placement: {
|
|
10
|
+
type: String,
|
|
11
|
+
default: ''
|
|
12
|
+
},
|
|
13
|
+
table: {
|
|
14
|
+
type: [Object, Function],
|
|
15
|
+
default: null
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
data() {
|
|
19
|
+
return {
|
|
20
|
+
settingVisible: false,
|
|
21
|
+
selectAll: false,
|
|
22
|
+
prevState: {
|
|
23
|
+
columns: [],
|
|
24
|
+
checked: []
|
|
25
|
+
},
|
|
26
|
+
tableColumns: [],
|
|
27
|
+
checkedColumns: []
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
mounted() {
|
|
31
|
+
// 初始化表头列
|
|
32
|
+
this.initTableColumns()
|
|
33
|
+
},
|
|
34
|
+
methods: {
|
|
35
|
+
/**
|
|
36
|
+
* 获取表格列数据
|
|
37
|
+
* @time 2024-11-27 16:18:44
|
|
38
|
+
*/
|
|
39
|
+
initTableColumns() {
|
|
40
|
+
// 获取IovProTable示例
|
|
41
|
+
const iovProTable = this.table instanceof Function ? this.table() : this.table
|
|
42
|
+
// 记录当前表格列
|
|
43
|
+
this.tableColumns = iovProTable.columns
|
|
44
|
+
.map(column => ({
|
|
45
|
+
label: column.label || column.type,
|
|
46
|
+
value: randomString(32),
|
|
47
|
+
disabled: column.keepInPlace,
|
|
48
|
+
target: column
|
|
49
|
+
}))
|
|
50
|
+
// 设置全选
|
|
51
|
+
this.onSelectAll(true)
|
|
52
|
+
// 重置历史数据
|
|
53
|
+
this.prevState = {
|
|
54
|
+
columns: [...this.tableColumns],
|
|
55
|
+
checked: [...this.checkedColumns]
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* 当复选框选中了
|
|
61
|
+
* @param {Array} val 当前所有值
|
|
62
|
+
* @time 2024-11-27 17:12:07
|
|
63
|
+
*/
|
|
64
|
+
onCheckboxSelected(val) {
|
|
65
|
+
// 设置当前选中的值
|
|
66
|
+
this.checkedColumns = val
|
|
67
|
+
// 如果当前是选中的状态
|
|
68
|
+
this.selectAll = val.length === this.tableColumns.length
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* 当选中了全部
|
|
73
|
+
* @param {} data 参数说明
|
|
74
|
+
* @param {参数类型} data 参数说明
|
|
75
|
+
* @return {返回类型} data 返回说明
|
|
76
|
+
* @time 2024-11-27 17:13:27
|
|
77
|
+
*/
|
|
78
|
+
onSelectAll(val) {
|
|
79
|
+
// 设置当前值
|
|
80
|
+
this.selectAll = val
|
|
81
|
+
// 如果当前是选中的状态,则取出所有值。否则清空
|
|
82
|
+
this.checkedColumns = val
|
|
83
|
+
? this.tableColumns.map(column => column.value)
|
|
84
|
+
: this.tableColumns.filter(column => column.disabled).map(column => column.value)
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* 恢复到预设
|
|
89
|
+
* @time 2024-11-27 18:04:28
|
|
90
|
+
*/
|
|
91
|
+
onResetToDefault() {
|
|
92
|
+
// 取消全选状态
|
|
93
|
+
this.selectAll = false
|
|
94
|
+
// 清空选中项目
|
|
95
|
+
this.checkedColumns = []
|
|
96
|
+
// 重新生成表头数据
|
|
97
|
+
this.initTableColumns()
|
|
98
|
+
// 获取IovProTable示例
|
|
99
|
+
const iovProTable = this.table instanceof Function ? this.table() : this.table
|
|
100
|
+
// 隐藏当前选中的数据
|
|
101
|
+
iovProTable.doLayout(this.tableColumns.map(column => column.target))
|
|
102
|
+
// 关闭弹出框
|
|
103
|
+
this.settingVisible = false
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* 确认用户选择的表头
|
|
108
|
+
* @time 2024-11-27 18:47:11
|
|
109
|
+
*/
|
|
110
|
+
onConfirm() {
|
|
111
|
+
// 需要默认选中的列
|
|
112
|
+
const defaultCheckedColumns = this.tableColumns.filter(column => column.disabled)
|
|
113
|
+
// 如果一个都没有选中,则不让点确定
|
|
114
|
+
if (this.checkedColumns.length === defaultCheckedColumns.length) {
|
|
115
|
+
return
|
|
116
|
+
}
|
|
117
|
+
// 获取IovProTable示例
|
|
118
|
+
const iovProTable = this.table instanceof Function ? this.table() : this.table
|
|
119
|
+
// 当前需要展示的key
|
|
120
|
+
const displayColumns = this.tableColumns
|
|
121
|
+
.filter(column => this.checkedColumns.includes(column.value))
|
|
122
|
+
.map(column => column.target)
|
|
123
|
+
// 隐藏当前选中的数据
|
|
124
|
+
iovProTable.doLayout(displayColumns)
|
|
125
|
+
// 记录当前选中的数据到历史数据中
|
|
126
|
+
this.prevState = {
|
|
127
|
+
columns: [...this.tableColumns],
|
|
128
|
+
checked: [...this.checkedColumns]
|
|
129
|
+
}
|
|
130
|
+
// 关闭弹框
|
|
131
|
+
this.settingVisible = false
|
|
132
|
+
},
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* 点击取消方法
|
|
136
|
+
* @time 2024-11-27 18:49:10
|
|
137
|
+
*/
|
|
138
|
+
onCancel() {
|
|
139
|
+
// 关闭弹框
|
|
140
|
+
this.settingVisible = false
|
|
141
|
+
// 等弹框关闭了再恢复之前的数据
|
|
142
|
+
this.$nextTick(() => {
|
|
143
|
+
// 还原胡乱排序的表头
|
|
144
|
+
this.tableColumns = [...this.prevState.columns]
|
|
145
|
+
// 设置当前选中的值
|
|
146
|
+
this.onCheckboxSelected([...this.prevState.checked])
|
|
147
|
+
})
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
render() {
|
|
151
|
+
const [
|
|
152
|
+
Tooltip,
|
|
153
|
+
Popover,
|
|
154
|
+
Checkbox,
|
|
155
|
+
Link,
|
|
156
|
+
Button,
|
|
157
|
+
CheckboxGroup
|
|
158
|
+
] = getComponentNames(['tooltip', 'popover', 'checkbox', 'link', 'button', 'checkbox-group'])
|
|
159
|
+
// 是否需要模态
|
|
160
|
+
const indeterminate = this.checkedColumns.length > 0 && this.checkedColumns.length < this.tableColumns.length
|
|
161
|
+
return (
|
|
162
|
+
<Popover
|
|
163
|
+
value={this.settingVisible}
|
|
164
|
+
width='184'
|
|
165
|
+
popper-class='iov-pro-toolbar__setting-popper'
|
|
166
|
+
onInput={val => (this.settingVisible = val)}
|
|
167
|
+
>
|
|
168
|
+
<Tooltip
|
|
169
|
+
slot='reference'
|
|
170
|
+
effect='dark'
|
|
171
|
+
content='设置'
|
|
172
|
+
placement={this.placement}
|
|
173
|
+
>
|
|
174
|
+
<i class={['iov-pro-toolbar__icon iov-icon-setting', this.settingVisible ? 'is-active' : ''].join(' ')} />
|
|
175
|
+
</Tooltip>
|
|
176
|
+
<div class='iov-pro-toolbar__setting'>
|
|
177
|
+
<div class='iov-pro-toolbar__setting-header'>
|
|
178
|
+
<Checkbox
|
|
179
|
+
value={this.selectAll}
|
|
180
|
+
indeterminate={indeterminate}
|
|
181
|
+
onInput={this.onSelectAll}
|
|
182
|
+
>列展示</Checkbox>
|
|
183
|
+
<Link type='primary' onClick={this.onResetToDefault}>恢复预设</Link>
|
|
184
|
+
</div>
|
|
185
|
+
<div class='iov-pro-toolbar__setting-body'>
|
|
186
|
+
<CheckboxGroup
|
|
187
|
+
value={this.checkedColumns}
|
|
188
|
+
onInput={this.onCheckboxSelected}
|
|
189
|
+
>
|
|
190
|
+
<Draggable
|
|
191
|
+
list={this.tableColumns}
|
|
192
|
+
item-key='value'
|
|
193
|
+
group='column'
|
|
194
|
+
handle='.iov-pro-toolbar__setting-item--drag'
|
|
195
|
+
filter='.undraggable'
|
|
196
|
+
>
|
|
197
|
+
{ // 遍历表格列
|
|
198
|
+
this.tableColumns.map(column => (
|
|
199
|
+
<div class='iov-pro-toolbar__setting-item'>
|
|
200
|
+
<Checkbox label={column.value} disabled={column.disabled}>{column.label}</Checkbox>
|
|
201
|
+
<i class={['iov-pro-toolbar__setting-item--drag iov-icon-line-drag', column.disabled ? 'undraggable' : ''].join(' ')} />
|
|
202
|
+
</div>
|
|
203
|
+
))
|
|
204
|
+
}
|
|
205
|
+
</Draggable>
|
|
206
|
+
</CheckboxGroup>
|
|
207
|
+
</div>
|
|
208
|
+
<div class='iov-pro-toolbar__setting-footer'>
|
|
209
|
+
<Button size='mini' onClick={this.onCancel}>取消</Button>
|
|
210
|
+
<Button type='info' size='mini' onClick={this.onConfirm}>确定</Button>
|
|
211
|
+
</div>
|
|
212
|
+
</div>
|
|
213
|
+
</Popover>
|
|
214
|
+
)
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
</script>
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { getComponentNames } from '../../../utils/config-center'
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
name: 'IovProToolbarStyle',
|
|
6
|
+
props: {
|
|
7
|
+
placement: {
|
|
8
|
+
type: String,
|
|
9
|
+
default: ''
|
|
10
|
+
},
|
|
11
|
+
table: {
|
|
12
|
+
type: [Object, Function],
|
|
13
|
+
default: null
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
data() {
|
|
17
|
+
return {
|
|
18
|
+
visible: false
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
methods: {
|
|
22
|
+
/**
|
|
23
|
+
* 切换表格的是否展示border
|
|
24
|
+
* @param {String} size 当前尺寸
|
|
25
|
+
* @time 2024-11-27 18:10:59
|
|
26
|
+
*/
|
|
27
|
+
onChangeTableBorder(border) {
|
|
28
|
+
// 获取IovProTable示例
|
|
29
|
+
const iovProTable = this.table instanceof Function ? this.table() : this.table
|
|
30
|
+
// 更新配置
|
|
31
|
+
iovProTable.updateTableConfig({
|
|
32
|
+
border: border === 'border',
|
|
33
|
+
outerBorder: border === 'none'
|
|
34
|
+
})
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
render() {
|
|
38
|
+
const [
|
|
39
|
+
Dropdown,
|
|
40
|
+
DropdownMenu,
|
|
41
|
+
DropdownItem,
|
|
42
|
+
Tooltip
|
|
43
|
+
] = getComponentNames(['dropdown', 'dropdown-menu', 'dropdown-item', 'tooltip'])
|
|
44
|
+
return (
|
|
45
|
+
<Dropdown
|
|
46
|
+
trigger='click'
|
|
47
|
+
onCommand={this.onChangeTableBorder}
|
|
48
|
+
on={{
|
|
49
|
+
command: this.onChangeTableBorder,
|
|
50
|
+
'visible-change': val => (this.visible = val)
|
|
51
|
+
}}
|
|
52
|
+
>
|
|
53
|
+
<Tooltip
|
|
54
|
+
effect='dark'
|
|
55
|
+
content='样式'
|
|
56
|
+
placement={this.placement}
|
|
57
|
+
>
|
|
58
|
+
<i class={['iov-pro-toolbar__icon iov-icon-wand', this.visible ? 'is-active' : ''].join(' ')} />
|
|
59
|
+
</Tooltip>
|
|
60
|
+
<DropdownMenu slot='dropdown' class='iov-pro-toolbar__dropdown-menu'>
|
|
61
|
+
<DropdownItem command='none'>无分割线</DropdownItem>
|
|
62
|
+
<DropdownItem command='border'>有分割线</DropdownItem>
|
|
63
|
+
</DropdownMenu>
|
|
64
|
+
</Dropdown>
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
</script>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { getComponentNames } from '@/utils/config-center'
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
name: 'IovProToolbarZoom',
|
|
6
|
+
props: {
|
|
7
|
+
placement: {
|
|
8
|
+
type: String,
|
|
9
|
+
default: ''
|
|
10
|
+
},
|
|
11
|
+
table: {
|
|
12
|
+
type: [Object, Function],
|
|
13
|
+
default: null
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
data() {
|
|
17
|
+
return {
|
|
18
|
+
visible: false
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
methods: {
|
|
22
|
+
/**
|
|
23
|
+
* 切换表格的尺寸
|
|
24
|
+
* @param {String} size 当前尺寸
|
|
25
|
+
* @time 2024-11-27 18:10:59
|
|
26
|
+
*/
|
|
27
|
+
onChangeTableSize(size) {
|
|
28
|
+
// 获取IovProTable示例
|
|
29
|
+
const iovProTable = this.table instanceof Function ? this.table() : this.table
|
|
30
|
+
// 更新配置
|
|
31
|
+
iovProTable.updateTableConfig({ size })
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
render() {
|
|
35
|
+
const [
|
|
36
|
+
Dropdown,
|
|
37
|
+
DropdownMenu,
|
|
38
|
+
DropdownItem,
|
|
39
|
+
Tooltip
|
|
40
|
+
] = getComponentNames(['dropdown', 'dropdown-menu', 'dropdown-item', 'tooltip'])
|
|
41
|
+
return (
|
|
42
|
+
<Dropdown
|
|
43
|
+
trigger='click'
|
|
44
|
+
on={{
|
|
45
|
+
command: this.onChangeTableSize,
|
|
46
|
+
'visible-change': val => (this.visible = val)
|
|
47
|
+
}}
|
|
48
|
+
>
|
|
49
|
+
<Tooltip
|
|
50
|
+
effect='dark'
|
|
51
|
+
content='密度'
|
|
52
|
+
placement={this.placement}
|
|
53
|
+
>
|
|
54
|
+
<i class={['iov-pro-toolbar__icon iov-icon-zoom', this.visible ? 'is-active' : ''].join(' ')} />
|
|
55
|
+
</Tooltip>
|
|
56
|
+
<DropdownMenu slot='dropdown' class='iov-pro-toolbar__dropdown-menu'>
|
|
57
|
+
<DropdownItem command='medium'>默认</DropdownItem>
|
|
58
|
+
<DropdownItem command='small'>中等</DropdownItem>
|
|
59
|
+
<DropdownItem command='mini'>紧凑</DropdownItem>
|
|
60
|
+
</DropdownMenu>
|
|
61
|
+
</Dropdown>
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
</script>
|
package/src/router.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import VueRouter from 'vue-router'
|
|
2
|
+
|
|
3
|
+
// 当前路由
|
|
4
|
+
const routes = [
|
|
5
|
+
{
|
|
6
|
+
path: '/debug/column-tooltip',
|
|
7
|
+
name: 'ColumnTooltipDemo',
|
|
8
|
+
component: () => import('./views/column-tooltip.vue'),
|
|
9
|
+
meta: { title: '单元格提示' }
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
path: '/debug/description',
|
|
13
|
+
name: 'DescriptionDemo',
|
|
14
|
+
component: () => import('./views/description.vue'),
|
|
15
|
+
meta: { title: '描述组件' }
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
path: '/debug/detail',
|
|
19
|
+
name: 'DetailPageDemo',
|
|
20
|
+
component: () => import('./views/detail.vue'),
|
|
21
|
+
meta: { title: '描述' }
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
path: '/debug/enums',
|
|
25
|
+
name: 'EnumsDemo',
|
|
26
|
+
component: () => import('./views/enums.vue'),
|
|
27
|
+
meta: { title: '枚举' }
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
path: '/debug/export',
|
|
31
|
+
name: 'ExportDemo',
|
|
32
|
+
component: () => import('./views/export.vue'),
|
|
33
|
+
meta: { title: '导出' }
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
path: '/debug/link-group',
|
|
37
|
+
name: 'LinkGroupDemo',
|
|
38
|
+
component: () => import('./views/link-group.vue'),
|
|
39
|
+
meta: { title: '按钮组' }
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
path: '/debug/form-collapse',
|
|
43
|
+
name: 'FormCollapseDemo',
|
|
44
|
+
component: () => import('./views/form-collapse.vue'),
|
|
45
|
+
meta: { title: '表格收起/展开' }
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
path: '/debug/form',
|
|
49
|
+
name: 'FormDemo',
|
|
50
|
+
component: () => import('./views/form.vue'),
|
|
51
|
+
meta: { title: '表单' }
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
path: '/debug/table',
|
|
55
|
+
name: 'TableDemo',
|
|
56
|
+
component: () => import('./views/table.vue'),
|
|
57
|
+
meta: { title: '表格' }
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
path: '/debug/request',
|
|
61
|
+
name: 'RequestDemo',
|
|
62
|
+
component: () => import('./views/request.vue'),
|
|
63
|
+
meta: { title: '接口请求' }
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
path: '/debug/search-table',
|
|
67
|
+
name: 'SearchTableDemo',
|
|
68
|
+
component: () => import('./views/search-table.vue'),
|
|
69
|
+
meta: { title: '搜索表单' }
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
path: '/debug/toolbar',
|
|
73
|
+
name: 'ToolbarDemo',
|
|
74
|
+
component: () => import('./views/toolbar.vue'),
|
|
75
|
+
meta: { title: '工具栏' }
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
export default new VueRouter({
|
|
80
|
+
mode: 'history',
|
|
81
|
+
base: process.env.VUE_APP_ROUTER,
|
|
82
|
+
routes
|
|
83
|
+
})
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { toUpperCamelCase } from './index'
|
|
2
|
+
|
|
3
|
+
let Vue = null
|
|
4
|
+
let componentConfig = {}
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 初始化方法
|
|
8
|
+
* @param {Object} vue vue实例
|
|
9
|
+
* @time 2024-10-28 17:53:17
|
|
10
|
+
*/
|
|
11
|
+
export const init = (vue, config) => {
|
|
12
|
+
Vue = vue
|
|
13
|
+
componentConfig = config
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* 判断当前是否是ElementUI库
|
|
18
|
+
* @time 2024-10-28 17:52:27
|
|
19
|
+
*/
|
|
20
|
+
export function isElementUI() {
|
|
21
|
+
const {
|
|
22
|
+
$ELEMENT,
|
|
23
|
+
$loading,
|
|
24
|
+
$msgbox,
|
|
25
|
+
$alert,
|
|
26
|
+
$confirm,
|
|
27
|
+
$prompt,
|
|
28
|
+
$notify,
|
|
29
|
+
$message
|
|
30
|
+
} = Vue?.prototype || {}
|
|
31
|
+
return $ELEMENT && $loading && $msgbox && $alert && $confirm && $prompt && $notify && $message
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* 判断当前是否是AntDesign
|
|
36
|
+
* @time 2024-10-28 17:54:53
|
|
37
|
+
*/
|
|
38
|
+
export function isAntDesign() {
|
|
39
|
+
const {
|
|
40
|
+
$message,
|
|
41
|
+
$notification,
|
|
42
|
+
$info,
|
|
43
|
+
$success,
|
|
44
|
+
$error,
|
|
45
|
+
$warning,
|
|
46
|
+
$confirm,
|
|
47
|
+
$destroyAll
|
|
48
|
+
} = Vue?.prototype || {}
|
|
49
|
+
return $message && $notification && $info && $success && $error && $warning && $confirm && $destroyAll
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* 是否是组件支持的标签名
|
|
54
|
+
* @param {String} tagName 标签名
|
|
55
|
+
* @time 2024-10-31 17:54:07
|
|
56
|
+
*/
|
|
57
|
+
const isSupportTagName = tagName => {
|
|
58
|
+
// 如果是elementUI
|
|
59
|
+
if (isElementUI()) {
|
|
60
|
+
// 字段映射
|
|
61
|
+
const ALIAS_MAP = {
|
|
62
|
+
'Button': 'Button',
|
|
63
|
+
'Link': 'Link',
|
|
64
|
+
'Input': 'Input',
|
|
65
|
+
'Row': 'Row',
|
|
66
|
+
'Col': 'Col',
|
|
67
|
+
'InputNumber': 'InputNumber',
|
|
68
|
+
'Checkbox': 'Checkbox',
|
|
69
|
+
'CheckboxButton': 'CheckboxButton',
|
|
70
|
+
'CheckboxGroup': 'CheckboxGroup',
|
|
71
|
+
'Radio': 'Radio',
|
|
72
|
+
'RadioButton': 'RadioButton',
|
|
73
|
+
'RadioGroup': 'RadioGroup',
|
|
74
|
+
'Select': 'Select',
|
|
75
|
+
'Option': 'Option',
|
|
76
|
+
'Cascader': 'Cascader',
|
|
77
|
+
'Switch': 'Switch',
|
|
78
|
+
'Slider': 'Slider',
|
|
79
|
+
'Rate': 'Rate',
|
|
80
|
+
'ColorPicker': 'ColorPicker',
|
|
81
|
+
'Transfer': 'Transfer',
|
|
82
|
+
'TimePicker': 'TimePicker',
|
|
83
|
+
'DatePicker': 'DatePicker',
|
|
84
|
+
'Upload': 'Upload',
|
|
85
|
+
'Dropdown': 'Dropdown',
|
|
86
|
+
'DropdownMenu': 'DropdownMenu',
|
|
87
|
+
'DropdownItem': 'DropdownItem',
|
|
88
|
+
'Tooltip': 'Tooltip',
|
|
89
|
+
'Tree': 'Tree',
|
|
90
|
+
'Tag': 'Tag',
|
|
91
|
+
'Tabs': 'Tabs',
|
|
92
|
+
'TabPane': 'TabPane',
|
|
93
|
+
'Table': 'Table',
|
|
94
|
+
'TableColumn': 'TableColumn',
|
|
95
|
+
'Form': 'Form',
|
|
96
|
+
'FormItem': 'FormItem',
|
|
97
|
+
'Pagination': 'Pagination',
|
|
98
|
+
'Popover': 'Popover'
|
|
99
|
+
}
|
|
100
|
+
return Object.keys(ALIAS_MAP).includes(tagName)
|
|
101
|
+
}
|
|
102
|
+
// 如果是AntDesign
|
|
103
|
+
if (isAntDesign()) {
|
|
104
|
+
// 字段映射
|
|
105
|
+
const ALIAS_MAP = {
|
|
106
|
+
'Button': 'Button',
|
|
107
|
+
'Link': 'Link',
|
|
108
|
+
'Icon': 'Icon',
|
|
109
|
+
'Row': 'Row',
|
|
110
|
+
'Col': 'Col',
|
|
111
|
+
'Input': 'Input',
|
|
112
|
+
'InputNumber': 'InputNumber',
|
|
113
|
+
'Checkbox': 'Checkbox',
|
|
114
|
+
'Radio': 'Radio',
|
|
115
|
+
'Select': 'Select',
|
|
116
|
+
'Option': 'Option',
|
|
117
|
+
'Cascader': 'Cascader',
|
|
118
|
+
'Switch': 'Switch',
|
|
119
|
+
'Slider': 'Slider',
|
|
120
|
+
'Rate': 'Rate',
|
|
121
|
+
'ColorPicker': 'ColorPicker',
|
|
122
|
+
'Transfer': 'Transfer',
|
|
123
|
+
'TimePicker': 'TimePicker',
|
|
124
|
+
'DatePicker': 'DatePicker',
|
|
125
|
+
'Upload': 'Upload',
|
|
126
|
+
'TreeSelect': 'TreeSelect',
|
|
127
|
+
'Dropdown': 'Dropdown',
|
|
128
|
+
'DropdownMenu': 'Menu',
|
|
129
|
+
'DropdownItem': 'MenuItem',
|
|
130
|
+
'Tooltip': 'Tooltip',
|
|
131
|
+
'Tree': 'Tree',
|
|
132
|
+
'Tag': 'Tag',
|
|
133
|
+
'Tabs': 'Tabs',
|
|
134
|
+
'TabPane': 'TabPane',
|
|
135
|
+
'Table': 'Table',
|
|
136
|
+
'TableColumn': 'TableColumn',
|
|
137
|
+
'Form': 'FormModel',
|
|
138
|
+
'FormItem': 'FormModelItem',
|
|
139
|
+
'Pagination': 'Pagination',
|
|
140
|
+
'Popover': 'Popover'
|
|
141
|
+
}
|
|
142
|
+
return Object.keys(ALIAS_MAP).includes(tagName)
|
|
143
|
+
}
|
|
144
|
+
return false
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* 获取组件名称
|
|
149
|
+
* @param {String} componentTagName 组件tag名称
|
|
150
|
+
* @time 2024-10-28 17:50:19
|
|
151
|
+
*/
|
|
152
|
+
export const getComponentName = componentTagName => {
|
|
153
|
+
// 首字母大写,并且去掉中划线的格式
|
|
154
|
+
const tagName = toUpperCamelCase(componentTagName)
|
|
155
|
+
// 如果当前是ElementUI
|
|
156
|
+
if (isElementUI() && isSupportTagName(tagName)) {
|
|
157
|
+
return `El${tagName}`
|
|
158
|
+
}
|
|
159
|
+
// 如果当前是AntDesign
|
|
160
|
+
if (isAntDesign() && isSupportTagName(tagName)) {
|
|
161
|
+
return `A${tagName}`
|
|
162
|
+
}
|
|
163
|
+
return componentTagName
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* 获取组件名称
|
|
168
|
+
* @param {Array} tagNames 组件名
|
|
169
|
+
* @time 2024-11-13 14:18:18
|
|
170
|
+
*/
|
|
171
|
+
export const getComponentNames = componentTagNames => {
|
|
172
|
+
return componentTagNames.map(getComponentName)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* 获取组件配置
|
|
177
|
+
* @param {String} componentTagName 组件名
|
|
178
|
+
* @time 2025-05-09 09:46:46
|
|
179
|
+
*/
|
|
180
|
+
export const getComponentConfig = componentTagName => componentConfig[componentTagName]
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* 是否是需要过滤的属性数据key
|
|
184
|
+
* @param {String} tagName 标签名称
|
|
185
|
+
* @param {String} propKey 属性key
|
|
186
|
+
* @time 2024-12-10 09:34:34
|
|
187
|
+
*/
|
|
188
|
+
export const isFilteredDataKey = (tagName, propKey) => {
|
|
189
|
+
return !!getFilteredDataType(tagName, propKey)
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* 获取当前需要过滤的数据类型
|
|
194
|
+
* @param {String} tagName 标签名称
|
|
195
|
+
* @param {String} propKey 属性key
|
|
196
|
+
* @time 2024-12-10 09:36:38
|
|
197
|
+
*/
|
|
198
|
+
export const getFilteredDataType = (tagName, propKey) => {
|
|
199
|
+
// 将标签名称转换成大驼峰
|
|
200
|
+
const tagNameUpperCase = toUpperCamelCase(tagName)
|
|
201
|
+
// 如果当前是ElementUI
|
|
202
|
+
if (isElementUI()) {
|
|
203
|
+
// 当前过滤的数据
|
|
204
|
+
const FILTERED_TYPE = {
|
|
205
|
+
'Select': {
|
|
206
|
+
options: ['remoteMethod', 'filterMethod']
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// 如果没找到对应字段
|
|
210
|
+
if (!FILTERED_TYPE[tagNameUpperCase]) {
|
|
211
|
+
return null
|
|
212
|
+
}
|
|
213
|
+
// 返回需要过滤的key
|
|
214
|
+
return Object
|
|
215
|
+
.keys(FILTERED_TYPE[tagNameUpperCase])
|
|
216
|
+
.find(key => FILTERED_TYPE[tagNameUpperCase][key].includes(propKey))
|
|
217
|
+
}
|
|
218
|
+
}
|