sh-view 2.8.1 → 2.8.2
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/.eslintrc.js +25 -20
- package/other.js +8 -8
- package/package.json +9 -6
- package/packages/components/index.js +91 -91
- package/packages/components/sh-alert/alert.ts +30 -0
- package/packages/components/sh-alert/index.vue +143 -168
- package/packages/components/sh-badge/index.vue +242 -242
- package/packages/components/sh-calendar/index.vue +650 -650
- package/packages/components/sh-card/index.vue +148 -148
- package/packages/components/sh-code-editor/index.vue +19 -19
- package/packages/components/sh-col/index.vue +92 -92
- package/packages/components/sh-corner/index.vue +230 -230
- package/packages/components/sh-count-to/index.vue +131 -131
- package/packages/components/sh-date/index.vue +301 -301
- package/packages/components/sh-drawer/index.vue +579 -579
- package/packages/components/sh-drawer/scrollbar.js +78 -78
- package/packages/components/sh-empty/index.vue +42 -42
- package/packages/components/sh-form/js/props.js +76 -76
- package/packages/components/sh-form/js/useForm.js +229 -229
- package/packages/components/sh-header/index.vue +261 -260
- package/packages/components/sh-icon/css/default/ionicons.svg +869 -869
- package/packages/components/sh-icon/css/font/iconfont.json +247 -247
- package/packages/components/sh-icon/index.vue +41 -41
- package/packages/components/sh-image/index.vue +133 -133
- package/packages/components/sh-list/index.vue +146 -146
- package/packages/components/sh-loading/index.vue +53 -53
- package/packages/components/sh-modal/index.vue +188 -188
- package/packages/components/sh-noticebar/index.vue +215 -215
- package/packages/components/sh-poptip/index.vue +597 -597
- package/packages/components/sh-progress/index.vue +276 -276
- package/packages/components/sh-pull-refresh/index.vue +289 -289
- package/packages/components/sh-result/index.vue +114 -114
- package/packages/components/sh-row/index.vue +66 -66
- package/packages/components/sh-split/components/trigger.vue +33 -33
- package/packages/components/sh-split/index.vue +342 -342
- package/packages/components/sh-table/components/importModal.vue +363 -363
- package/packages/components/sh-table/components/sh-column.vue +68 -68
- package/packages/components/sh-table/js/excel_to_json.js +313 -313
- package/packages/components/sh-table/js/props.js +305 -305
- package/packages/components/sh-table/js/tableMethods.js +167 -167
- package/packages/components/sh-table/js/useTable.js +636 -636
- package/packages/components/sh-table/table.vue +217 -217
- package/packages/components/sh-tabs/index.vue +426 -426
- package/packages/components/sh-tag/index.vue +168 -168
- package/packages/components/sh-toolbar/index.vue +182 -182
- package/packages/components/sh-tree/components/table-tree.vue +289 -289
- package/packages/components/sh-tree/mixin/treeProps.js +122 -122
- package/packages/components/sh-upload/index.vue +535 -535
- package/packages/components/sh-water-fall/index.vue +80 -80
- package/packages/components/sh-water-mark/index.vue +96 -96
- package/packages/css/index.js +4 -4
- package/packages/directive/index.js +19 -19
- package/packages/directive/module/click-out.js +14 -14
- package/packages/directive/module/draggable.js +42 -42
- package/packages/directive/module/line-clamp.js +22 -22
- package/packages/directive/module/prevent-click.js +18 -18
- package/packages/directive/module/resize.js +14 -14
- package/packages/directive/module/ripple.js +166 -166
- package/packages/index.js +39 -39
- package/packages/mixin/index.js +86 -86
- package/packages/other/sh-cron-modal/components/cron-content.vue +294 -294
- package/packages/other/sh-cron-modal/index.vue +81 -81
- package/packages/other/sh-cron-modal/mixin/cron-emits.js +1 -1
- package/packages/other/sh-cron-modal/mixin/cron-props.js +9 -9
- package/packages/other/sh-cron-modal/tabs/cron-week-box.vue +126 -126
- package/packages/other/sh-menu/index.vue +326 -326
- package/packages/other/sh-menu/menu-group-content.vue +136 -136
- package/packages/other/sh-menu/menu-item-content.vue +71 -71
- package/packages/other/sh-menu-card/index.vue +250 -250
- package/packages/other/sh-menu-card/menu-box.vue +87 -87
- package/packages/other/sh-preview/components/sh-excel.vue +163 -163
- package/packages/other/sh-preview/js/data-hook.js +41 -41
- package/packages/other/sh-preview/js/data-props.js +15 -15
- package/packages/other/sh-system-tip/index.vue +115 -115
- package/packages/utils/resize.js +69 -70
- package/packages/utils/transfer-queue.js +12 -12
- package/packages/vxeTable/index.js +193 -184
- package/packages/vxeTable/plugins/export.js +450 -450
- package/packages/vxeTable/render/cell/vxe-render-img.vue +27 -27
- package/packages/vxeTable/render/cell/vxe-render-table.vue +51 -51
- package/packages/vxeTable/render/cell/vxe-render-time.vue +44 -44
- package/packages/vxeTable/render/cell/vxe-render-tree.vue +70 -70
- package/packages/vxeTable/render/filters/vxe-filter-input.vue +26 -26
- package/packages/vxeTable/render/filters/vxe-filter-time.vue +26 -26
- package/packages/vxeTable/render/globalRenders.jsx +514 -514
- package/packages/vxeTable/render/mixin/cell-hooks.js +198 -198
- package/packages/vxeTable/render/mixin/cell-props.js +23 -23
- package/packages/vxeTable/render/mixin/filter-hooks.js +46 -46
- package/tsconfig.json +25 -0
- package/types/component.d.ts +1 -0
- package/types/index.ts +0 -0
|
@@ -1,229 +1,229 @@
|
|
|
1
|
-
import { computed, onBeforeMount, ref, watch } from 'vue'
|
|
2
|
-
import { getFieldsRules } from '../../sh-table/js/tableMethods'
|
|
3
|
-
|
|
4
|
-
// 表单默认配置
|
|
5
|
-
const formConfigDefault = {
|
|
6
|
-
span: 6,
|
|
7
|
-
align: 'left',
|
|
8
|
-
titleAlign: 'right',
|
|
9
|
-
titleWidth: 100,
|
|
10
|
-
titleColon: true,
|
|
11
|
-
titleAsterisk: true,
|
|
12
|
-
titleOverflow: true,
|
|
13
|
-
customLayout: false,
|
|
14
|
-
preventSubmit: false
|
|
15
|
-
}
|
|
16
|
-
// 标题项默认配置
|
|
17
|
-
const titleConfigDefault = {
|
|
18
|
-
align: 'left',
|
|
19
|
-
titleAlign: 'left',
|
|
20
|
-
titleWidth: '100%',
|
|
21
|
-
titleOverflow: false,
|
|
22
|
-
className: 'shFormTitleItem'
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export default function (props, context, proxy, isForm) {
|
|
26
|
-
const { $vUtils } = proxy
|
|
27
|
-
const { emit, slots } = context
|
|
28
|
-
|
|
29
|
-
const formRef = ref()
|
|
30
|
-
const renderKey = ref(1)
|
|
31
|
-
const formCollapsed = ref(false) // 表单展开状态
|
|
32
|
-
const formToggleBtnShow = ref(false) // 是否渲染表单展开全部按钮
|
|
33
|
-
const formOriginItems = ref([]) // 表单初始项
|
|
34
|
-
const formItems = ref([])
|
|
35
|
-
const formRules = ref({})
|
|
36
|
-
|
|
37
|
-
const formBindConfig = computed(() => {
|
|
38
|
-
return Object.assign({ size: isForm ? 'medium' : 'small' }, formConfigDefault, props.formConfig, {
|
|
39
|
-
items: formItems.value,
|
|
40
|
-
data: props.data,
|
|
41
|
-
rules: props.valid ? formRules.value : {},
|
|
42
|
-
validConfig: props.validConfig
|
|
43
|
-
})
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
// 重新渲染表单
|
|
47
|
-
const refreshRender = () => {
|
|
48
|
-
renderKey.value++
|
|
49
|
-
}
|
|
50
|
-
// 表单提交
|
|
51
|
-
const onFormSubmit = async params => {
|
|
52
|
-
let errMap = await formRef.value.validate()
|
|
53
|
-
if (props.valid && errMap) {
|
|
54
|
-
return
|
|
55
|
-
}
|
|
56
|
-
emit('submit', params)
|
|
57
|
-
}
|
|
58
|
-
// 表单重置
|
|
59
|
-
const onFormReset = params => {
|
|
60
|
-
$vUtils.clear(props.data)
|
|
61
|
-
refreshRender()
|
|
62
|
-
emit('reset', params)
|
|
63
|
-
}
|
|
64
|
-
// 表单项编辑回调
|
|
65
|
-
const onFormEditClosed = async params => {
|
|
66
|
-
emit('edit-closed', params)
|
|
67
|
-
Object.assign(props.data, params.data)
|
|
68
|
-
}
|
|
69
|
-
// 表单校验不通过
|
|
70
|
-
const onFormSubmitInvalid = params => {
|
|
71
|
-
emit('submit-invalid', params)
|
|
72
|
-
}
|
|
73
|
-
// 表单折叠按钮被手动点击时会触发该事件
|
|
74
|
-
const onFormCollapse = params => {
|
|
75
|
-
emit('collapse', params)
|
|
76
|
-
}
|
|
77
|
-
// 前缀点击事件
|
|
78
|
-
const onPrefixClick = params => {
|
|
79
|
-
emit('prefix-click', params)
|
|
80
|
-
}
|
|
81
|
-
// 后缀点击事件
|
|
82
|
-
const onSuffixClick = params => {
|
|
83
|
-
emit('suffix-click', params)
|
|
84
|
-
}
|
|
85
|
-
// 表单验证方法
|
|
86
|
-
const validate = callback => {
|
|
87
|
-
return formRef.value.validate(callback)
|
|
88
|
-
}
|
|
89
|
-
// 初始化表单字段
|
|
90
|
-
const initFormData = () => {
|
|
91
|
-
let initItems = isForm ? props.items : props.items.filter(item => item.search && item.search !== '0')
|
|
92
|
-
$vUtils.eachTree(initItems, item => {
|
|
93
|
-
let renderProps = item.renderProps || item.itemRender?.props || {}
|
|
94
|
-
if (!$vUtils.isNone(renderProps?.defaultValue) && $vUtils.isNone($vUtils.get(props.data, item.field))) {
|
|
95
|
-
$vUtils.set(props.data, item.field, renderProps.defaultValue)
|
|
96
|
-
}
|
|
97
|
-
})
|
|
98
|
-
}
|
|
99
|
-
// 初始化表单项
|
|
100
|
-
const initFormItems = () => {
|
|
101
|
-
let rules = getFieldsRules(props.items)
|
|
102
|
-
initEditRules(rules)
|
|
103
|
-
|
|
104
|
-
let formItemsArr = props.items
|
|
105
|
-
if (props.transformitem) {
|
|
106
|
-
let { groupItemsArr, flatItemsArr } = generateFormItem(formItemsArr)
|
|
107
|
-
// 表单支持分组 搜索组件不需要分组
|
|
108
|
-
formItemsArr = isForm ? groupItemsArr : flatItemsArr
|
|
109
|
-
}
|
|
110
|
-
if (!isForm) {
|
|
111
|
-
formItemsArr = formItemsArr.filter(item => item.search && !['0', 'false'].includes(item.search))
|
|
112
|
-
formItemsArr.forEach(item => {
|
|
113
|
-
item.visible = true
|
|
114
|
-
item.itemRender.props.disabled = false
|
|
115
|
-
item.slots = undefined
|
|
116
|
-
})
|
|
117
|
-
}
|
|
118
|
-
formOriginItems.value = $vUtils.clone(formItemsArr, true)
|
|
119
|
-
formItems.value = formItemsArr
|
|
120
|
-
if (!isForm && formItemsArr.length > props.globalConfig.formToggleNum && props.globalConfig.formToggle) {
|
|
121
|
-
formToggleBtnShow.value = true // 显示展开全部按钮
|
|
122
|
-
formBtnCollapsed(false)
|
|
123
|
-
} else if (!formItems.value.length) {
|
|
124
|
-
// tag: vxe-form在 item监听时数据length为0时没有刷新视图补充
|
|
125
|
-
refreshRender()
|
|
126
|
-
}
|
|
127
|
-
initFormData()
|
|
128
|
-
}
|
|
129
|
-
// 初始化验证规则
|
|
130
|
-
const initEditRules = rules => {
|
|
131
|
-
if (rules && $vUtils.isPlainObject(rules)) {
|
|
132
|
-
Object.keys(rules).forEach(key => {
|
|
133
|
-
if (formRules.value[key]) {
|
|
134
|
-
formRules.value[key] = Array.from(new Set(formRules.value[key].concat(rules[key])))
|
|
135
|
-
} else {
|
|
136
|
-
formRules.value[key] = rules[key]
|
|
137
|
-
}
|
|
138
|
-
})
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
// 表单展开全部/收起切换事件
|
|
142
|
-
const formBtnCollapsed = (value, isEmit) => {
|
|
143
|
-
formCollapsed.value = value
|
|
144
|
-
formItems.value = value ? formOriginItems.value : formOriginItems.value.slice(0, props.globalConfig.formToggleNum)
|
|
145
|
-
if (isEmit) emit('collapsed', value)
|
|
146
|
-
}
|
|
147
|
-
// 自动生成表单渲染项
|
|
148
|
-
const generateFormItem = (items = []) => {
|
|
149
|
-
const { isItemTitle, readonly, disabled } = props
|
|
150
|
-
// 表单不支持编辑渲染过滤
|
|
151
|
-
let notRenderName = ['seq', 'checkbox', 'radio', '$vImg', '$vHref', '$vGlobalOption']
|
|
152
|
-
let renderItems = $vUtils.searchTree(items, item => !((item.renderName && notRenderName.includes(item.renderName)) || notRenderName.includes(item.type)))
|
|
153
|
-
let flatItemsArr = []
|
|
154
|
-
let groupItemsArr = $vUtils.mapTree(renderItems, ori => {
|
|
155
|
-
let tar = Object.assign({}, ori)
|
|
156
|
-
if (ori.children && ori.children.length > 0) {
|
|
157
|
-
if (isItemTitle) Object.assign(tar, titleConfigDefault)
|
|
158
|
-
return tar
|
|
159
|
-
}
|
|
160
|
-
let renderConfig = {
|
|
161
|
-
name: ori.renderName || '$vInput',
|
|
162
|
-
props: Object.assign({}, ori.renderProps || {})
|
|
163
|
-
}
|
|
164
|
-
if (readonly || disabled) {
|
|
165
|
-
renderConfig.props.disabled = true
|
|
166
|
-
}
|
|
167
|
-
tar.itemRender = Object.assign({}, renderConfig, ori.itemRender || {})
|
|
168
|
-
flatItemsArr.push(tar)
|
|
169
|
-
return tar
|
|
170
|
-
})
|
|
171
|
-
return { groupItemsArr, flatItemsArr }
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
watch(
|
|
175
|
-
() => props.readonly,
|
|
176
|
-
() => {
|
|
177
|
-
initFormItems()
|
|
178
|
-
}
|
|
179
|
-
)
|
|
180
|
-
watch(
|
|
181
|
-
() => props.data,
|
|
182
|
-
() => {
|
|
183
|
-
initFormData()
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
immediate: true
|
|
187
|
-
}
|
|
188
|
-
)
|
|
189
|
-
watch(
|
|
190
|
-
() => props.items,
|
|
191
|
-
nv => {
|
|
192
|
-
initFormItems()
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
deep: true,
|
|
196
|
-
immediate: true
|
|
197
|
-
}
|
|
198
|
-
)
|
|
199
|
-
watch(
|
|
200
|
-
() => props.rules,
|
|
201
|
-
nv => {
|
|
202
|
-
initEditRules(nv)
|
|
203
|
-
},
|
|
204
|
-
{
|
|
205
|
-
deep: true,
|
|
206
|
-
immediate: true
|
|
207
|
-
}
|
|
208
|
-
)
|
|
209
|
-
|
|
210
|
-
onBeforeMount(() => {})
|
|
211
|
-
|
|
212
|
-
return {
|
|
213
|
-
slots,
|
|
214
|
-
formRef,
|
|
215
|
-
renderKey,
|
|
216
|
-
formBindConfig,
|
|
217
|
-
formCollapsed,
|
|
218
|
-
formToggleBtnShow,
|
|
219
|
-
validate,
|
|
220
|
-
formBtnCollapsed,
|
|
221
|
-
onFormSubmit,
|
|
222
|
-
onFormSubmitInvalid,
|
|
223
|
-
onFormReset,
|
|
224
|
-
onFormCollapse,
|
|
225
|
-
onFormEditClosed,
|
|
226
|
-
onPrefixClick,
|
|
227
|
-
onSuffixClick
|
|
228
|
-
}
|
|
229
|
-
}
|
|
1
|
+
import { computed, onBeforeMount, ref, watch } from 'vue'
|
|
2
|
+
import { getFieldsRules } from '../../sh-table/js/tableMethods'
|
|
3
|
+
|
|
4
|
+
// 表单默认配置
|
|
5
|
+
const formConfigDefault = {
|
|
6
|
+
span: 6,
|
|
7
|
+
align: 'left',
|
|
8
|
+
titleAlign: 'right',
|
|
9
|
+
titleWidth: 100,
|
|
10
|
+
titleColon: true,
|
|
11
|
+
titleAsterisk: true,
|
|
12
|
+
titleOverflow: true,
|
|
13
|
+
customLayout: false,
|
|
14
|
+
preventSubmit: false
|
|
15
|
+
}
|
|
16
|
+
// 标题项默认配置
|
|
17
|
+
const titleConfigDefault = {
|
|
18
|
+
align: 'left',
|
|
19
|
+
titleAlign: 'left',
|
|
20
|
+
titleWidth: '100%',
|
|
21
|
+
titleOverflow: false,
|
|
22
|
+
className: 'shFormTitleItem'
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default function (props, context, proxy, isForm) {
|
|
26
|
+
const { $vUtils } = proxy
|
|
27
|
+
const { emit, slots } = context
|
|
28
|
+
|
|
29
|
+
const formRef = ref()
|
|
30
|
+
const renderKey = ref(1)
|
|
31
|
+
const formCollapsed = ref(false) // 表单展开状态
|
|
32
|
+
const formToggleBtnShow = ref(false) // 是否渲染表单展开全部按钮
|
|
33
|
+
const formOriginItems = ref([]) // 表单初始项
|
|
34
|
+
const formItems = ref([])
|
|
35
|
+
const formRules = ref({})
|
|
36
|
+
|
|
37
|
+
const formBindConfig = computed(() => {
|
|
38
|
+
return Object.assign({ size: isForm ? 'medium' : 'small' }, formConfigDefault, props.formConfig, {
|
|
39
|
+
items: formItems.value,
|
|
40
|
+
data: props.data,
|
|
41
|
+
rules: props.valid ? formRules.value : {},
|
|
42
|
+
validConfig: props.validConfig
|
|
43
|
+
})
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
// 重新渲染表单
|
|
47
|
+
const refreshRender = () => {
|
|
48
|
+
renderKey.value++
|
|
49
|
+
}
|
|
50
|
+
// 表单提交
|
|
51
|
+
const onFormSubmit = async params => {
|
|
52
|
+
let errMap = await formRef.value.validate()
|
|
53
|
+
if (props.valid && errMap) {
|
|
54
|
+
return
|
|
55
|
+
}
|
|
56
|
+
emit('submit', params)
|
|
57
|
+
}
|
|
58
|
+
// 表单重置
|
|
59
|
+
const onFormReset = params => {
|
|
60
|
+
$vUtils.clear(props.data)
|
|
61
|
+
refreshRender()
|
|
62
|
+
emit('reset', params)
|
|
63
|
+
}
|
|
64
|
+
// 表单项编辑回调
|
|
65
|
+
const onFormEditClosed = async params => {
|
|
66
|
+
emit('edit-closed', params)
|
|
67
|
+
Object.assign(props.data, params.data)
|
|
68
|
+
}
|
|
69
|
+
// 表单校验不通过
|
|
70
|
+
const onFormSubmitInvalid = params => {
|
|
71
|
+
emit('submit-invalid', params)
|
|
72
|
+
}
|
|
73
|
+
// 表单折叠按钮被手动点击时会触发该事件
|
|
74
|
+
const onFormCollapse = params => {
|
|
75
|
+
emit('collapse', params)
|
|
76
|
+
}
|
|
77
|
+
// 前缀点击事件
|
|
78
|
+
const onPrefixClick = params => {
|
|
79
|
+
emit('prefix-click', params)
|
|
80
|
+
}
|
|
81
|
+
// 后缀点击事件
|
|
82
|
+
const onSuffixClick = params => {
|
|
83
|
+
emit('suffix-click', params)
|
|
84
|
+
}
|
|
85
|
+
// 表单验证方法
|
|
86
|
+
const validate = callback => {
|
|
87
|
+
return formRef.value.validate(callback)
|
|
88
|
+
}
|
|
89
|
+
// 初始化表单字段
|
|
90
|
+
const initFormData = () => {
|
|
91
|
+
let initItems = isForm ? props.items : props.items.filter(item => item.search && item.search !== '0')
|
|
92
|
+
$vUtils.eachTree(initItems, item => {
|
|
93
|
+
let renderProps = item.renderProps || item.itemRender?.props || {}
|
|
94
|
+
if (!$vUtils.isNone(renderProps?.defaultValue) && $vUtils.isNone($vUtils.get(props.data, item.field))) {
|
|
95
|
+
$vUtils.set(props.data, item.field, renderProps.defaultValue)
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
}
|
|
99
|
+
// 初始化表单项
|
|
100
|
+
const initFormItems = () => {
|
|
101
|
+
let rules = getFieldsRules(props.items)
|
|
102
|
+
initEditRules(rules)
|
|
103
|
+
|
|
104
|
+
let formItemsArr = props.items
|
|
105
|
+
if (props.transformitem) {
|
|
106
|
+
let { groupItemsArr, flatItemsArr } = generateFormItem(formItemsArr)
|
|
107
|
+
// 表单支持分组 搜索组件不需要分组
|
|
108
|
+
formItemsArr = isForm ? groupItemsArr : flatItemsArr
|
|
109
|
+
}
|
|
110
|
+
if (!isForm) {
|
|
111
|
+
formItemsArr = formItemsArr.filter(item => item.search && !['0', 'false'].includes(item.search))
|
|
112
|
+
formItemsArr.forEach(item => {
|
|
113
|
+
item.visible = true
|
|
114
|
+
item.itemRender.props.disabled = false
|
|
115
|
+
item.slots = undefined
|
|
116
|
+
})
|
|
117
|
+
}
|
|
118
|
+
formOriginItems.value = $vUtils.clone(formItemsArr, true)
|
|
119
|
+
formItems.value = formItemsArr
|
|
120
|
+
if (!isForm && formItemsArr.length > props.globalConfig.formToggleNum && props.globalConfig.formToggle) {
|
|
121
|
+
formToggleBtnShow.value = true // 显示展开全部按钮
|
|
122
|
+
formBtnCollapsed(false)
|
|
123
|
+
} else if (!formItems.value.length) {
|
|
124
|
+
// tag: vxe-form在 item监听时数据length为0时没有刷新视图补充
|
|
125
|
+
refreshRender()
|
|
126
|
+
}
|
|
127
|
+
initFormData()
|
|
128
|
+
}
|
|
129
|
+
// 初始化验证规则
|
|
130
|
+
const initEditRules = rules => {
|
|
131
|
+
if (rules && $vUtils.isPlainObject(rules)) {
|
|
132
|
+
Object.keys(rules).forEach(key => {
|
|
133
|
+
if (formRules.value[key]) {
|
|
134
|
+
formRules.value[key] = Array.from(new Set(formRules.value[key].concat(rules[key])))
|
|
135
|
+
} else {
|
|
136
|
+
formRules.value[key] = rules[key]
|
|
137
|
+
}
|
|
138
|
+
})
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// 表单展开全部/收起切换事件
|
|
142
|
+
const formBtnCollapsed = (value, isEmit) => {
|
|
143
|
+
formCollapsed.value = value
|
|
144
|
+
formItems.value = value ? formOriginItems.value : formOriginItems.value.slice(0, props.globalConfig.formToggleNum)
|
|
145
|
+
if (isEmit) emit('collapsed', value)
|
|
146
|
+
}
|
|
147
|
+
// 自动生成表单渲染项
|
|
148
|
+
const generateFormItem = (items = []) => {
|
|
149
|
+
const { isItemTitle, readonly, disabled } = props
|
|
150
|
+
// 表单不支持编辑渲染过滤
|
|
151
|
+
let notRenderName = ['seq', 'checkbox', 'radio', '$vImg', '$vHref', '$vGlobalOption']
|
|
152
|
+
let renderItems = $vUtils.searchTree(items, item => !((item.renderName && notRenderName.includes(item.renderName)) || notRenderName.includes(item.type)))
|
|
153
|
+
let flatItemsArr = []
|
|
154
|
+
let groupItemsArr = $vUtils.mapTree(renderItems, ori => {
|
|
155
|
+
let tar = Object.assign({}, ori)
|
|
156
|
+
if (ori.children && ori.children.length > 0) {
|
|
157
|
+
if (isItemTitle) Object.assign(tar, titleConfigDefault)
|
|
158
|
+
return tar
|
|
159
|
+
}
|
|
160
|
+
let renderConfig = {
|
|
161
|
+
name: ori.renderName || '$vInput',
|
|
162
|
+
props: Object.assign({}, ori.renderProps || {})
|
|
163
|
+
}
|
|
164
|
+
if (readonly || disabled) {
|
|
165
|
+
renderConfig.props.disabled = true
|
|
166
|
+
}
|
|
167
|
+
tar.itemRender = Object.assign({}, renderConfig, ori.itemRender || {})
|
|
168
|
+
flatItemsArr.push(tar)
|
|
169
|
+
return tar
|
|
170
|
+
})
|
|
171
|
+
return { groupItemsArr, flatItemsArr }
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
watch(
|
|
175
|
+
() => props.readonly,
|
|
176
|
+
() => {
|
|
177
|
+
initFormItems()
|
|
178
|
+
}
|
|
179
|
+
)
|
|
180
|
+
watch(
|
|
181
|
+
() => props.data,
|
|
182
|
+
() => {
|
|
183
|
+
initFormData()
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
immediate: true
|
|
187
|
+
}
|
|
188
|
+
)
|
|
189
|
+
watch(
|
|
190
|
+
() => props.items,
|
|
191
|
+
nv => {
|
|
192
|
+
initFormItems()
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
deep: true,
|
|
196
|
+
immediate: true
|
|
197
|
+
}
|
|
198
|
+
)
|
|
199
|
+
watch(
|
|
200
|
+
() => props.rules,
|
|
201
|
+
nv => {
|
|
202
|
+
initEditRules(nv)
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
deep: true,
|
|
206
|
+
immediate: true
|
|
207
|
+
}
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
onBeforeMount(() => {})
|
|
211
|
+
|
|
212
|
+
return {
|
|
213
|
+
slots,
|
|
214
|
+
formRef,
|
|
215
|
+
renderKey,
|
|
216
|
+
formBindConfig,
|
|
217
|
+
formCollapsed,
|
|
218
|
+
formToggleBtnShow,
|
|
219
|
+
validate,
|
|
220
|
+
formBtnCollapsed,
|
|
221
|
+
onFormSubmit,
|
|
222
|
+
onFormSubmitInvalid,
|
|
223
|
+
onFormReset,
|
|
224
|
+
onFormCollapse,
|
|
225
|
+
onFormEditClosed,
|
|
226
|
+
onPrefixClick,
|
|
227
|
+
onSuffixClick
|
|
228
|
+
}
|
|
229
|
+
}
|