@dt-frames/ui 1.0.0 → 1.0.1

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 (165) hide show
  1. package/package.json +1 -10
  2. package/src/assets/data/icons/actions.ts +0 -427
  3. package/src/assets/data/icons/code.ts +0 -10
  4. package/src/assets/data/icons/commuticate.ts +0 -190
  5. package/src/assets/data/icons/currency.ts +0 -46
  6. package/src/assets/data/icons/devices.ts +0 -128
  7. package/src/assets/data/icons/edit.ts +0 -165
  8. package/src/assets/data/icons/file.ts +0 -104
  9. package/src/assets/data/icons/math.ts +0 -53
  10. package/src/assets/data/icons/message.ts +0 -75
  11. package/src/assets/data/icons/navigate.ts +0 -181
  12. package/src/assets/data/icons/other.ts +0 -333
  13. package/src/assets/data/icons.ts +0 -58
  14. package/src/assets/imgs/logo/logo.png +0 -0
  15. package/src/assets/locales/en_US.json +0 -3
  16. package/src/assets/locales/zh_CN.json +0 -3
  17. package/src/assets/style/index.less +0 -10
  18. package/src/assets/style/reset.less +0 -20
  19. package/src/components/container/index.less +0 -85
  20. package/src/components/container/index.ts +0 -8
  21. package/src/components/container/src/bar.ts +0 -107
  22. package/src/components/container/src/lazy-container.vue +0 -9
  23. package/src/components/container/src/scroll-bar.vue +0 -117
  24. package/src/components/container/src/scroll-container.vue +0 -61
  25. package/src/components/curd/index.ts +0 -5
  26. package/src/components/curd/src/components/dialog.vue +0 -65
  27. package/src/components/curd/src/components/props.ts +0 -32
  28. package/src/components/curd/src/hooks/useCurd.tsx +0 -72
  29. package/src/components/curd/src/types/curd.type.ts +0 -29
  30. package/src/components/excel/index.ts +0 -6
  31. package/src/components/excel/src/export2Excel.ts +0 -44
  32. package/src/components/forms/index.ts +0 -12
  33. package/src/components/forms/src/componentMap.ts +0 -44
  34. package/src/components/forms/src/components/formButton.vue +0 -150
  35. package/src/components/forms/src/components/formIcon.vue +0 -50
  36. package/src/components/forms/src/components/formItem.vue +0 -407
  37. package/src/components/forms/src/components/radioButton.vue +0 -58
  38. package/src/components/forms/src/const/form.const.ts +0 -7
  39. package/src/components/forms/src/hooks/helper.ts +0 -70
  40. package/src/components/forms/src/hooks/useForm.ts +0 -130
  41. package/src/components/forms/src/hooks/useFormActions.ts +0 -63
  42. package/src/components/forms/src/hooks/useFormEvents.ts +0 -247
  43. package/src/components/forms/src/hooks/useFormValue.ts +0 -49
  44. package/src/components/forms/src/hooks/useFormValues.ts +0 -131
  45. package/src/components/forms/src/hooks/useLabelWidth.ts +0 -57
  46. package/src/components/forms/src/index.less +0 -82
  47. package/src/components/forms/src/index.vue +0 -306
  48. package/src/components/forms/src/prop.ts +0 -80
  49. package/src/components/forms/src/types/form.type.ts +0 -269
  50. package/src/components/icons/index.ts +0 -7
  51. package/src/components/icons/src/index.less +0 -96
  52. package/src/components/icons/src/pick-icon.vue +0 -117
  53. package/src/components/icons/src/svg-icon.vue +0 -117
  54. package/src/components/iframe/index.ts +0 -5
  55. package/src/components/iframe/src/index.less +0 -3
  56. package/src/components/iframe/src/index.vue +0 -38
  57. package/src/components/index.ts +0 -46
  58. package/src/components/modal/index.ts +0 -8
  59. package/src/components/modal/src/components/close-icon.vue +0 -47
  60. package/src/components/modal/src/components/modal-wrap.vue +0 -118
  61. package/src/components/modal/src/components/modal.tsx +0 -30
  62. package/src/components/modal/src/components/modalFooter.vue +0 -38
  63. package/src/components/modal/src/hooks/useDrag.ts +0 -107
  64. package/src/components/modal/src/hooks/useFullScreen.ts +0 -27
  65. package/src/components/modal/src/hooks/useModal.ts +0 -177
  66. package/src/components/modal/src/index.less +0 -60
  67. package/src/components/modal/src/index.vue +0 -173
  68. package/src/components/modal/src/props.ts +0 -43
  69. package/src/components/modal/src/types/modal.type.ts +0 -27
  70. package/src/components/router/base-router.vue +0 -11
  71. package/src/components/router/index.ts +0 -3
  72. package/src/components/source/index.ts +0 -1
  73. package/src/components/source/src/hooks/useFetch.ts +0 -70
  74. package/src/components/source/src/hooks/usePage.ts +0 -3
  75. package/src/components/source/src/hooks/useSource.ts +0 -178
  76. package/src/components/source/src/index.ts +0 -5
  77. package/src/components/source/src/types/source.type.ts +0 -68
  78. package/src/components/source/src/types/table.type.ts +0 -8
  79. package/src/components/table/index.ts +0 -7
  80. package/src/components/table/src/components/TableActions.vue +0 -108
  81. package/src/components/table/src/components/TableHeader.vue +0 -77
  82. package/src/components/table/src/components/TableRender.vue +0 -76
  83. package/src/components/table/src/components/setting/Column.vue +0 -355
  84. package/src/components/table/src/components/setting/Download.vue +0 -55
  85. package/src/components/table/src/components/setting/Fullscreen.vue +0 -43
  86. package/src/components/table/src/components/setting/Size.vue +0 -42
  87. package/src/components/table/src/components/setting/index.vue +0 -64
  88. package/src/components/table/src/const.ts +0 -13
  89. package/src/components/table/src/hooks/useColumns.ts +0 -319
  90. package/src/components/table/src/hooks/useCustomRow.ts +0 -0
  91. package/src/components/table/src/hooks/useDataSource.ts +0 -99
  92. package/src/components/table/src/hooks/useLoading.ts +0 -29
  93. package/src/components/table/src/hooks/usePagination.ts +0 -76
  94. package/src/components/table/src/hooks/useRowSelection.ts +0 -146
  95. package/src/components/table/src/hooks/useRows.ts +0 -30
  96. package/src/components/table/src/hooks/useTable.ts +0 -77
  97. package/src/components/table/src/hooks/useTableHeader.ts +0 -48
  98. package/src/components/table/src/hooks/useTableInstance.ts +0 -29
  99. package/src/components/table/src/hooks/useTableScroll.ts +0 -227
  100. package/src/components/table/src/index.less +0 -162
  101. package/src/components/table/src/index.vue +0 -198
  102. package/src/components/table/src/props.ts +0 -152
  103. package/src/components/table/src/types/table.type.ts +0 -133
  104. package/src/components/table/src/types/tableHeader.type.ts +0 -27
  105. package/src/components/type.ts +0 -0
  106. package/src/directives/icon.ts +0 -36
  107. package/src/directives/index.ts +0 -26
  108. package/src/directives/permission.ts +0 -21
  109. package/src/global.d.ts +0 -8
  110. package/src/index.ts +0 -4
  111. package/src/theme/content/index.vue +0 -37
  112. package/src/theme/feature/back-top.vue +0 -11
  113. package/src/theme/feature/index.vue +0 -7
  114. package/src/theme/footer/index.less +0 -16
  115. package/src/theme/footer/index.vue +0 -24
  116. package/src/theme/header/components/bread-crumb.vue +0 -26
  117. package/src/theme/header/components/fullscreen.vue +0 -14
  118. package/src/theme/header/components/handler.ts +0 -81
  119. package/src/theme/header/components/index.ts +0 -21
  120. package/src/theme/header/components/lang-picker.vue +0 -36
  121. package/src/theme/header/components/logo.vue +0 -33
  122. package/src/theme/header/components/menu-search.vue +0 -62
  123. package/src/theme/header/components/notify.vue +0 -23
  124. package/src/theme/header/components/setting-theme.vue +0 -123
  125. package/src/theme/header/components/theme-drawer/enum.ts +0 -12
  126. package/src/theme/header/components/theme-drawer/feature.vue +0 -75
  127. package/src/theme/header/components/theme-drawer/index.ts +0 -7
  128. package/src/theme/header/components/theme-drawer/menu-type.vue +0 -40
  129. package/src/theme/header/components/theme-drawer/select-item.vue +0 -46
  130. package/src/theme/header/components/theme-drawer/switch-item.vue +0 -39
  131. package/src/theme/header/components/theme-drawer/theme-color.vue +0 -26
  132. package/src/theme/header/components/trigger.vue +0 -14
  133. package/src/theme/header/components/user-info.vue +0 -43
  134. package/src/theme/header/const/index.ts +0 -40
  135. package/src/theme/header/helper/menu-tree.ts +0 -67
  136. package/src/theme/header/index.less +0 -438
  137. package/src/theme/header/index.ts +0 -0
  138. package/src/theme/header/index.vue +0 -96
  139. package/src/theme/header/multiple-header.vue +0 -67
  140. package/src/theme/header/set-theme.less +0 -68
  141. package/src/theme/index.ts +0 -3
  142. package/src/theme/sider/components/basic-menu/basic-menu-item.vue +0 -14
  143. package/src/theme/sider/components/basic-menu/basic-menu.vue +0 -122
  144. package/src/theme/sider/components/basic-menu/basic-sub-menu-item.vue +0 -46
  145. package/src/theme/sider/components/basic-menu/menu-item-content.vue +0 -13
  146. package/src/theme/sider/components/drag-bar.vue +0 -26
  147. package/src/theme/sider/components/layout-menu.vue +0 -132
  148. package/src/theme/sider/components/props.ts +0 -97
  149. package/src/theme/sider/components/sider-trigger.vue +0 -24
  150. package/src/theme/sider/helper/sider.ts +0 -52
  151. package/src/theme/sider/helper/split-menu.ts +0 -147
  152. package/src/theme/sider/hooks/useDragLine.ts +0 -86
  153. package/src/theme/sider/hooks/useOpenKeys.ts +0 -57
  154. package/src/theme/sider/index.less +0 -203
  155. package/src/theme/sider/index.vue +0 -88
  156. package/src/theme/tabs/components/TabContent.vue +0 -37
  157. package/src/theme/tabs/components/TabRedo.vue +0 -18
  158. package/src/theme/tabs/hooks/useMultifyTabs.ts +0 -96
  159. package/src/theme/tabs/hooks/useTabDropdown.ts +0 -89
  160. package/src/theme/tabs/index.less +0 -165
  161. package/src/theme/tabs/index.vue +0 -98
  162. package/src/theme/tabs/types/tabs.type.ts +0 -8
  163. package/src/theme/theme.less +0 -66
  164. package/src/theme/theme.vue +0 -89
  165. package/src/theme/transition.less +0 -99
@@ -1,150 +0,0 @@
1
- <template>
2
- <Col v-bind="colOpt" v-if="show">
3
- <FormItem class="form-btns" :style="{
4
- 'margin-bottom': mode === 'search' ? '24px' : '0px'
5
- }">
6
- <template v-for="button in buttonList">
7
- <Button
8
- v-if="button.show === undefined ? true : button.show"
9
- :type="button.type"
10
- :class="button.class"
11
- :disabled="button.disabled"
12
- :permission="button.auth"
13
- :loading="button.loading"
14
- @click="handleBtnClick(button)"
15
- >
16
- <template #icon>
17
- <span v-if="button.preIcon" v-icon="button.preIcon" className="preIcon"></span>
18
- </template>
19
-
20
- {{ button.name }}
21
- <span v-if="button.postIcon" v-icon="button.postIcon" className="preIcon"></span>
22
- </Button>
23
- </template>
24
-
25
- <Button
26
- type="link"
27
- class="advanced"
28
- v-if="showAdvanceRef"
29
- @click="toggleAdvanced">
30
- <span class="text">{{ advancedRef ? '收起' : '展开' }}</span>
31
- <span :class="getAdvanceClass">
32
- <DtIcon :icon-class="'ic:baseline-arrow-drop-down'" :size="22"></DtIcon>
33
- </span>
34
- </Button>
35
-
36
- </FormItem>
37
- </Col>
38
- </template>
39
-
40
- <script lang="ts">
41
- import { computed, defineComponent, PropType, ref, watch, nextTick } from 'vue'
42
- import { ButtonProps } from '../types/form.type'
43
- import { Col, FormItem, Button } from 'ant-design-vue'
44
- import { authMounted } from '../../../../directives'
45
- import { DtIcon } from '../../../icons'
46
- import { isFunction, Recordable } from '@dt-frames/core'
47
-
48
-
49
- export default defineComponent({
50
- name: 'form-buttons',
51
- props: {
52
- mode: {
53
- type: String as PropType<'search' | 'dialog' | null>,
54
- default: 'search'
55
- },
56
- show: {
57
- type: Boolean,
58
- default: true
59
- },
60
- showAdvancedButton: {
61
- type: Boolean,
62
- default: true
63
- },
64
- minShowColumn: {
65
- type: Number,
66
- default: 2
67
- },
68
- buttonList: {
69
- type: [Array] as PropType<ButtonProps[]>,
70
- default: []
71
- },
72
- isAdvanced: {
73
- type: Boolean,
74
- default: true
75
- }
76
- },
77
- components: {
78
- Col,
79
- FormItem,
80
- Button,
81
- DtIcon
82
- },
83
- directives: {
84
- 'permission': authMounted
85
- },
86
- setup(props, { emit }) {
87
- const advancedRef = ref<Boolean>(props.isAdvanced)
88
-
89
- // 是否显示折叠按钮
90
- const showAdvanceRef = computed(() => {
91
- return props.mode === 'search' ? props.showAdvancedButton : false
92
- })
93
-
94
- // 计算options属性
95
- const colOpt = computed(() => {
96
- let style: Recordable = {
97
- textAlign: 'right'
98
- }
99
-
100
- if( props.mode === 'dialog' ) {
101
- Object.assign(style, {
102
- display: 'inline-block',
103
- })
104
- }
105
-
106
- return { style }
107
- })
108
-
109
- // 计算更多图标的css样式
110
- const getAdvanceClass = computed(() => {
111
- return [
112
- 'basic-arrow',
113
- { 'basic-arrow--active': !advancedRef.value }
114
- ]
115
- })
116
-
117
- const toggleAdvanced = () => {
118
- advancedRef.value = !advancedRef.value
119
-
120
- emit('handle-method', advancedRef.value)
121
- }
122
-
123
- watch(() => props.isAdvanced, (v) => {
124
- if( v ) {
125
- nextTick(() => toggleAdvanced())
126
- }
127
- }, {
128
- immediate: true
129
- })
130
-
131
- // 处理按钮点击事件
132
- function handleBtnClick(button: ButtonProps) {
133
- if( button.onClick && isFunction(button.onClick) ) {
134
- button.onClick()
135
- }else {
136
- emit('handle-method', button)
137
- }
138
- }
139
-
140
- return {
141
- colOpt,
142
- advancedRef,
143
- showAdvanceRef,
144
- getAdvanceClass,
145
- toggleAdvanced,
146
- handleBtnClick
147
- }
148
- }
149
- })
150
- </script>
@@ -1,50 +0,0 @@
1
- <template>
2
- <div>
3
- <InputGroup compact>
4
- <Input ref="iconRef" v-model:value="state" :placeholder="props.placeholder" style="width: calc(100% - 32px)" />
5
- <Button @click="openModal()" :style="{
6
- padding: '0',
7
- textAlign: 'center'
8
- }">
9
- <template #icon>
10
- <span class="i" :class="state || 'ic:baseline-dialpad'"></span>
11
- </template>
12
- </Button>
13
- </InputGroup>
14
-
15
- <DtModal @register="register">
16
- <DtPickIcon @chooseIcon="chooseIcon($event)"/>
17
- </DtModal>
18
- </div>
19
-
20
- </template>
21
-
22
- <script lang="ts" setup>
23
- import { ref } from 'vue'
24
- import { InputGroup, Input, Button } from 'ant-design-vue'
25
- import { DtPickIcon } from '../../../icons'
26
- import { DtModal, useModal } from '../../../modal'
27
- import { useFormValue } from '../hooks/useFormValue'
28
-
29
- const iconRef = ref(null)
30
- const [register, { openModal, closeModal }] = useModal({
31
- title: '选择字体图标',
32
- width: '70%',
33
- showSave: false,
34
- centered: true
35
- })
36
-
37
- const props = defineProps({
38
- value: String,
39
- placeholder: String
40
- })
41
-
42
- let [state, setState] = useFormValue(props)
43
-
44
- function chooseIcon(icon) {
45
- setState(icon)
46
-
47
- closeModal()
48
- }
49
-
50
- </script>
@@ -1,407 +0,0 @@
1
- <script lang="tsx">
2
- import { defineComponent, PropType, Ref, toRefs, unref, computed } from "vue"
3
- import { Col, Tooltip, Divider, Form, FormItem } from 'ant-design-vue'
4
- import { upperFirst, cloneDeep } from 'lodash-es'
5
- import { isFunction, isBoolean, isNull, Recordable, useSlots, useAppStore, isString, isArray } from "@dt-frames/core"
6
- import type { ValidationRule } from 'ant-design-vue/lib/form/Form'
7
-
8
- import { useLabelWidth } from "../hooks/useLabelWidth"
9
- import { componentMap } from '../componentMap'
10
- import { createPlaceholder, setComponentRuleType } from '../hooks/helper'
11
- import { FormSchema, FormProps, FormCallBackParams, FormActionType } from '../types/form.type'
12
- import { FormItemProps } from "../prop"
13
-
14
-
15
- export default defineComponent({
16
- name: 'FormItem',
17
- inheritAttrs: false,
18
- props: FormItemProps,
19
- setup( props, { emit, slots } ) {
20
- // 获取指定的slot
21
- const { getSlot } = useSlots()
22
- // 获取全局配置
23
- const { appConf } = useAppStore()
24
-
25
- const { schema, formProps } = toRefs(props) as {
26
- schema: Ref<FormSchema>
27
- formProps: Ref<FormProps>
28
- }
29
-
30
- // 计算每个条目的props
31
- const getValues = computed(() => {
32
- const { defaultValues, formModel, schema } = props;
33
-
34
- return {
35
- name: schema.name,
36
- model: formModel,
37
- values: {
38
- ...defaultValues,
39
- ...formModel
40
- },
41
- schema: schema
42
- } as FormCallBackParams
43
- })
44
-
45
- // 是否显示当前条目
46
- const getShow = computed(() => {
47
- const { show = true, isAdvanced = true } = props.schema
48
-
49
- // 是否处于收缩状态
50
- if( !isAdvanced ) {
51
- return false
52
- }
53
-
54
- if( isFunction(show) ) {
55
- return show(unref(getValues))
56
- }
57
-
58
- return show
59
- })
60
-
61
- // 设置表单绑定的特殊属性,如前后缀、禁用启用、日期格式等
62
- const getComponentProps = computed(() => {
63
- const { schema, formModel, formActionType } = props
64
- let { props: cProps = {} } = schema
65
-
66
- if (isFunction(cProps)) {
67
- cProps = cProps( { schema, formModel, formActionType } ) ?? {}
68
- }
69
-
70
- if (schema.component === 'Divider') {
71
- cProps = Object.assign({ type: 'horizontal' }, cProps, {
72
- orientation: 'left',
73
- plain: true,
74
- });
75
- }
76
-
77
- return cProps as Recordable
78
- })
79
-
80
-
81
- /**
82
- * 动态渲染单个条目
83
- * 支持的类型参照 ../types/form.type.ts 中 ComponentType
84
- */
85
- function renderItem() {
86
- const { component, props: cProps, slot, render, name, colon = appConf.ui.form.colon, suffix } = props.schema
87
-
88
- // 计算label的属性
89
- const { labelCol, wrapperCol } = unref( useLabelWidth( schema, formProps ) )
90
-
91
- if( component === 'Divider' ) {
92
- return (
93
- <Col span={24}>
94
- <Divider {...unref(cProps)}>{ renderLabel() }</Divider>
95
- </Col>
96
- )
97
- } else {
98
- const getContent = () => {
99
- let value = unref(getValues)
100
-
101
- let _con = slot
102
- ? getSlot(slots, slot, value)
103
- : render
104
- ? render(value)
105
- : renderFormItem()
106
-
107
- return (component === 'InputGroup' || component === 'Icon')
108
- ? (
109
- <FormItem rules = { handleRules() } class="M0">{ _con }</FormItem>
110
- )
111
- : _con
112
- }
113
-
114
- const getSuffix = () => {
115
- return isFunction( suffix ) ? suffix(unref(getValues)) : suffix
116
- }
117
-
118
- return (
119
- <Form.Item
120
- name = { name }
121
- colon = { colon }
122
- class = {{ 'suffix-item': !!suffix }}
123
- label = { renderLabel() }
124
- rules = { handleRules() }
125
- labelCol = { labelCol }
126
- wrapperCol = { wrapperCol }
127
- >
128
- <div style="display:flex">
129
- <div style="flex:1;">{ getContent() }</div>
130
- {!!suffix && <span class="suffix">{getSuffix()}</span>}
131
- </div>
132
- </Form.Item>
133
- )
134
- }
135
- }
136
-
137
-
138
- /**
139
- * 渲染Label标签元素
140
- */
141
- function renderLabel() {
142
- const { label, toolTip, subLabel, toolTipProps } = props.schema
143
-
144
- const renderLabel
145
- = subLabel
146
- ? ( <span> {label} <span class="text-secondary">({subLabel})</span></span> )
147
- : ( label )
148
-
149
- // 判断是否需要显示tooltips
150
- const _toolTip = isFunction(toolTip) ? toolTip( unref(getValues) ) : toolTip
151
-
152
- return _toolTip
153
- ? (
154
- <span>
155
- { renderLabel }
156
- <Tooltip v-bind={ toolTipProps }>{ _toolTip }</Tooltip>
157
- </span>
158
- )
159
- : renderLabel
160
- }
161
-
162
- /**
163
- * 渲染表单元素
164
- */
165
- function renderFormItem() {
166
- const { schema, formModel, formActionType } = props
167
- const { component, name, changeEvent = 'change', valueField, renderComponent, props: sProps } = props.schema
168
-
169
- const isCheck = component && ['Switch', 'Checkbox'].includes(component)
170
-
171
- /**
172
- * 监听表单事件,默认是change
173
- */
174
- const eventKey = `on${upperFirst(changeEvent)}`
175
- // 绑定事件
176
- const _sProps = isFunction( sProps )
177
- ? sProps({ schema, formModel, formActionType })
178
- : sProps
179
-
180
- // 绑定onChange事件
181
- const on: {
182
- [key: string]: ( ...args: Array<any> ) => void
183
- } = {
184
- [ eventKey ]: ( ...args: Array<any> ) => {
185
- const [e] = args
186
-
187
- const target = e ? e.target : null
188
- const value = target ? (isCheck ? target.checked : target.value) : e
189
-
190
- if( isString( name ) ) {
191
- props.setFormModel(name, value)
192
- } else if( isArray( name ) ) {
193
- name.forEach( key => {
194
- props.setFormModel(key, value)
195
- } )
196
- }
197
-
198
- if( _sProps && _sProps[eventKey] ) _sProps[eventKey](...args, props)
199
- }
200
- }
201
-
202
- // 监听其它事件
203
- for(let it in _sProps) {
204
- if( it.startsWith('on') && it !== eventKey ) {
205
- on[it] = ( ...args: Array<any> ) => {
206
- _sProps[it]( ...args, props )
207
- }
208
- }
209
- }
210
-
211
- /**
212
- * 设置表单绑定的属性
213
- */
214
- const { size } = props.formProps as FormProps
215
-
216
- // 设置表单禁用启用
217
- const getDisable = computed(() => {
218
- const { disabled: gDisabled } = props.formProps as FormProps
219
- const { dynamicDisabled } = props.schema
220
- const { disabled: itemDisabled = false } = unref( getComponentProps )
221
-
222
- let disabled = !!gDisabled || itemDisabled
223
-
224
- if (isBoolean(dynamicDisabled)) disabled = dynamicDisabled
225
- if (isFunction(dynamicDisabled)) disabled = dynamicDisabled(unref(getValues))
226
-
227
- return disabled
228
- })
229
-
230
- const { enterToSearch = appConf.ui.form.enterToSearch, onSearch, mode } = props.formProps as FormProps
231
-
232
- const itemProps: Recordable = {
233
- allowClear: appConf.ui.form.allowClear,
234
- getPopupContainer: (trigger: Element) => trigger.parentNode,
235
- size: size || appConf.ui.form.size,
236
- ...unref(getComponentProps),
237
- disabled: unref(getDisable),
238
- onPressEnter: (mode === 'search' && enterToSearch) ? onSearch : () => { }
239
- }
240
-
241
- // 设置表单占位符,注意:RangePicker是一个数组
242
- if( !itemProps.disabled && component !== 'RangePicker' ) {
243
- itemProps.placeholder = unref(getComponentProps)?.placeholder || createPlaceholder( component )
244
- }
245
-
246
- // 处理默认值
247
- if( ['DatePicker', 'MonthPicker', 'RangePicker'].includes(component) ) {
248
- itemProps.defaultValue = props.formModel[ name as string ]
249
- }
250
-
251
- itemProps.codeName = name
252
- itemProps.formValues = unref(getValues)
253
-
254
- /**
255
- * 定义表单绑定的值v-bind:value
256
- */
257
- const bindValue: Recordable = {
258
- [valueField || (isCheck ? 'checked' : 'value')]: props.formModel[ name as string ]
259
- }
260
-
261
- /**
262
- * 所有属性汇总,包括方法、属性及值的绑定
263
- */
264
- const compAttr: Recordable = {
265
- ...itemProps,
266
- ...bindValue,
267
- ...on
268
- }
269
-
270
- // 设置返回的DOM元素
271
- const Comp = componentMap.get(component) as ReturnType<typeof defineComponent>
272
-
273
- if( !renderComponent ) {
274
- return <Comp {...compAttr} />
275
- }
276
-
277
- // 定义一个组件插槽,用于处理后缀、前缀等问题,返回的是{ default: () => {} )这种数据格式
278
- const compSlot = isFunction( renderComponent )
279
- ? { ...renderComponent( unref( getValues ) ) }
280
- : {
281
- default: () => renderComponent
282
- }
283
-
284
- return <Comp {...compAttr}>{compSlot}</Comp>
285
- }
286
-
287
- /**
288
- * 处理验证规则
289
- */
290
- function handleRules(): ValidationRule[] {
291
- const { rules: defaultRules = [], component, label, dynamicRules, required } = props.schema
292
-
293
- // 1、如果为动态规则,则直接返回rules
294
- if( isFunction( dynamicRules ) ) {
295
- return dynamicRules( unref(getValues) ) as ValidationRule[]
296
- }
297
-
298
-
299
- // 2、如果没有静态规则,并且require为true
300
- // 默认提示信息
301
- const defaultMsg = createPlaceholder(component) + label
302
-
303
- let rules = cloneDeep(defaultRules) as ValidationRule[]
304
- // 是否必填
305
- const getRequired = isFunction(required) ? required(unref(getValues)) : required
306
-
307
- // 非空校验
308
- function validator(rule: any, value: any) {
309
- const msg = rule.message || defaultMsg
310
-
311
- if(
312
- // 空值
313
- (value === undefined || isNull(value)) ||
314
- // 数组
315
- (Array.isArray(value) && value.length === 0) ||
316
- // 空字符串
317
- (typeof value === 'string' && value.trim() === '') ||
318
- // 树组件未选择
319
- (
320
- typeof value === 'object' &&
321
- Reflect.has(value, 'checked') &&
322
- Reflect.has(value, 'halfChecked') &&
323
- Array.isArray(value.checked) &&
324
- Array.isArray(value.halfChecked) &&
325
- value.checked.length === 0 &&
326
- value.halfChecked.length === 0
327
- )
328
- ) {
329
- return Promise.reject(msg)
330
- }
331
-
332
- return Promise.resolve()
333
- }
334
-
335
- if( (!rules || !rules.length) && getRequired ) {
336
- rules = [{ required: getRequired, validator }]
337
- }
338
-
339
- // 3、如果有自定义的规则,则使用自定义的规则
340
- const requiredIndex = rules.findIndex( rule => Reflect.has(rule, 'required') && !Reflect.has(rule, 'validator') )
341
-
342
- if( requiredIndex !== -1 ) {
343
- const rule = rules[requiredIndex]
344
-
345
- if( !unref(getShow) ) {
346
- rule.required = false
347
- }
348
-
349
- if (!Reflect.has(rule, 'type')) {
350
- rule.type = component === 'InputNumber' ? 'number' : 'string';
351
- }
352
-
353
- rule.message = rule.message || defaultMsg
354
-
355
- if (component.includes('Input') || component.includes('Textarea')) {
356
- rule.whitespace = true
357
- }
358
- const valueFormat = unref(getComponentProps)?.valueFormat;
359
-
360
- setComponentRuleType(rule, component, valueFormat)
361
- }
362
-
363
- const maxIndex = rules.findIndex((val) => val.max)
364
-
365
- if (maxIndex !== -1 && !rules[maxIndex].validator) {
366
- rules[maxIndex].message = rules[maxIndex].message || `最大值为${ rules[maxIndex].max }`
367
- }
368
-
369
- return rules
370
- }
371
-
372
-
373
- /**
374
- * 返回整个Col元素
375
- * 1、如果有slot 则渲染slot元素
376
- * 2、如果有renderCol自定义dom元素,则使用renderCol
377
- * 3、否则通过属性去动态设置渲染条目
378
- */
379
- return () => {
380
- const { colSlot, renderCol, colProps } = props.schema
381
- const { colProps: gColProps, mode } = props.formProps as FormProps
382
-
383
- let _colProps = colProps
384
- ? colProps
385
- : gColProps
386
- ? gColProps
387
- : (mode === 'search' ? appConf.ui.form.searchColspan : appConf.ui.form.dialogColspan)
388
-
389
- const values = unref(getValues)
390
-
391
- const getContent = () => {
392
- return colSlot
393
- ? getSlot(slots, colSlot, values)
394
- : renderCol
395
- ? renderCol( values )
396
- : renderItem()
397
- }
398
-
399
- return unref(getShow) && (
400
- <Col { ..._colProps }>
401
- { getContent() }
402
- </Col>
403
- )
404
- }
405
- }
406
- })
407
- </script>
@@ -1,58 +0,0 @@
1
-
2
-
3
- <template>
4
- <RadioGroup v-bind="attrs" v-model:value="state" button-style="solid">
5
- <template v-for="item in getOptions" :key="`${item.value}`">
6
- <RadioButton :value="item.value" :disabled="item.disabled">
7
- {{ item.label }}
8
- </RadioButton>
9
- </template>
10
- </RadioGroup>
11
- </template>
12
-
13
- <script lang="ts">
14
- import { computed, defineComponent, PropType } from "vue"
15
- import { RadioGroup, RadioButton } from 'ant-design-vue'
16
- import { isString } from "@dt-frames/core"
17
- import { useFormValue } from "../hooks/useFormValue";
18
-
19
- type OptionsItem = { label: string; value: string | number | boolean; disabled?: boolean }
20
- type RadioItem = string | OptionsItem
21
-
22
- export default defineComponent({
23
- name: 'radio-button',
24
- props: {
25
- value: {
26
- type: [String, Number, Boolean] as PropType<string | number | boolean>,
27
- },
28
- options: {
29
- type: Array as PropType<RadioItem[]>,
30
- default: () => [],
31
- },
32
- },
33
- components: {
34
- RadioGroup,
35
- RadioButton
36
- },
37
- setup(props, { attrs }) {
38
- const [state] = useFormValue(props)
39
-
40
- const getOptions = computed((): OptionsItem[] => {
41
- const { options } = props;
42
- if (!options || options?.length === 0) return [];
43
-
44
- const isStringArr = options.some((item) => isString(item));
45
- if (!isStringArr) return options as OptionsItem[];
46
-
47
- return options.map((item) => ({ label: item, value: item })) as OptionsItem[];
48
- });
49
-
50
-
51
- return {
52
- attrs,
53
- getOptions,
54
- state
55
- }
56
- }
57
- })
58
- </script>
@@ -1,7 +0,0 @@
1
- export const SEARCH_BTN_NAME = '查询'
2
- export const RESET_BTN_NAME = '重置'
3
-
4
- export const SEARCH_BTNS = [
5
- { name: SEARCH_BTN_NAME, preIcon: 'mdi:magnify', type: 'primary' },
6
- { name: RESET_BTN_NAME, preIcon: 'mdi:refresh', type: 'default' }
7
- ]