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