From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/components/Form/src/helper.ts | 148 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 148 insertions(+), 0 deletions(-)
diff --git a/src/components/Form/src/helper.ts b/src/components/Form/src/helper.ts
new file mode 100644
index 0000000..cdfc8ca
--- /dev/null
+++ b/src/components/Form/src/helper.ts
@@ -0,0 +1,148 @@
+import type { Slots } from 'vue'
+import { getSlot } from '@/utils/tsxHelper'
+import { PlaceholderModel } from './types'
+import { FormSchema } from '@/types/form'
+import { ColProps } from '@/types/components'
+
+/**
+ *
+ * @param schema 瀵瑰簲缁勪欢鏁版嵁
+ * @returns 杩斿洖鎻愮ず淇℃伅瀵硅薄
+ * @description 鐢ㄤ簬鑷姩璁剧疆placeholder
+ */
+export const setTextPlaceholder = (schema: FormSchema): PlaceholderModel => {
+ const { t } = useI18n()
+ const textMap = ['Input', 'Autocomplete', 'InputNumber', 'InputPassword']
+ const selectMap = ['Select', 'SelectV2', 'TimePicker', 'DatePicker', 'TimeSelect', 'TimeSelect']
+ if (textMap.includes(schema?.component as string)) {
+ return {
+ placeholder: t('common.inputText') + schema.label
+ }
+ }
+ if (selectMap.includes(schema?.component as string)) {
+ // 涓�浜涜寖鍥撮�夋嫨鍣�
+ const twoTextMap = ['datetimerange', 'daterange', 'monthrange', 'datetimerange', 'daterange']
+ if (
+ twoTextMap.includes(
+ (schema?.componentProps?.type || schema?.componentProps?.isRange) as string
+ )
+ ) {
+ return {
+ startPlaceholder: t('common.startTimeText'),
+ endPlaceholder: t('common.endTimeText'),
+ rangeSeparator: '-'
+ }
+ } else {
+ return {
+ placeholder: t('common.selectText') + schema.label
+ }
+ }
+ }
+ return {}
+}
+
+/**
+ *
+ * @param col 鍐呯疆鏍呮牸
+ * @returns 杩斿洖鏍呮牸灞炴��
+ * @description 鍚堝苟浼犲叆杩涙潵鐨勬爡鏍煎睘鎬�
+ */
+export const setGridProp = (col: ColProps = {}): ColProps => {
+ const colProps: ColProps = {
+ // 濡傛灉鏈塻pan锛屼唬琛ㄧ敤鎴蜂紭鍏堢骇鏇撮珮锛屾墍浠ヤ笉闇�瑕侀粯璁ゆ爡鏍�
+ ...(col.span
+ ? {}
+ : {
+ xs: 24,
+ sm: 12,
+ md: 12,
+ lg: 12,
+ xl: 12
+ }),
+ ...col
+ }
+ return colProps
+}
+
+/**
+ *
+ * @param item 浼犲叆鐨勭粍浠跺睘鎬�
+ * @returns 榛樿娣诲姞 clearable 灞炴��
+ */
+export const setComponentProps = (item: FormSchema): Recordable => {
+ const notNeedClearable = ['ColorPicker']
+ const componentProps: Recordable = notNeedClearable.includes(item.component as string)
+ ? { ...item.componentProps }
+ : {
+ clearable: true,
+ ...item.componentProps
+ }
+ // 闇�瑕佸垹闄ら澶栫殑灞炴��
+ delete componentProps?.slots
+ return componentProps
+}
+
+/**
+ *
+ * @param slots 鎻掓Ы
+ * @param slotsProps 鎻掓Ы灞炴��
+ * @param field 瀛楁鍚�
+ */
+export const setItemComponentSlots = (
+ slots: Slots,
+ slotsProps: Recordable = {},
+ field: string
+): Recordable => {
+ const slotObj: Recordable = {}
+ for (const key in slotsProps) {
+ if (slotsProps[key]) {
+ // 鐢变簬缁勪欢鏈夊彲鑳介噸澶嶏紝闇�瑕佹湁涓�涓敮涓�鐨勫墠缂�
+ slotObj[key] = (data: Recordable) => {
+ return getSlot(slots, `${field}-${key}`, data)
+ }
+ }
+ }
+ return slotObj
+}
+
+/**
+ *
+ * @param schema Form琛ㄥ崟缁撴瀯鍖栨暟缁�
+ * @param formModel FormModel
+ * @returns FormModel
+ * @description 鐢熸垚瀵瑰簲鐨刦ormModel
+ */
+export const initModel = (schema: FormSchema[], formModel: Recordable) => {
+ const model: Recordable = { ...formModel }
+ schema.map((v) => {
+ // 濡傛灉鏄痟idden锛屽氨鍒犻櫎瀵瑰簲鐨勫��
+ if (v.hidden) {
+ delete model[v.field]
+ } else if (v.component && v.component !== 'Divider') {
+ const hasField = Reflect.has(model, v.field)
+ // 濡傛灉鍏堝墠宸茬粡鏈夊�煎瓨鍦紝鍒欎笉杩涜閲嶆柊璧嬪�硷紝鑰屾槸閲囩敤鐜版湁鐨勫��
+ model[v.field] = hasField ? model[v.field] : v.value !== void 0 ? v.value : ''
+ }
+ })
+ return model
+}
+
+/**
+ * @param slots 鎻掓Ы
+ * @param field 瀛楁鍚�
+ * @returns 杩斿洖FormIiem鎻掓Ы
+ */
+export const setFormItemSlots = (slots: Slots, field: string): Recordable => {
+ const slotObj: Recordable = {}
+ if (slots[`${field}-error`]) {
+ slotObj['error'] = (data: Recordable) => {
+ return getSlot(slots, `${field}-error`, data)
+ }
+ }
+ if (slots[`${field}-label`]) {
+ slotObj['label'] = (data: Recordable) => {
+ return getSlot(slots, `${field}-label`, data)
+ }
+ }
+ return slotObj
+}
--
Gitblit v1.8.0