diff --git a/.vscode/extensions.json b/.vscode/extensions.json index cb1a84c..ad6b6e4 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,3 @@ { - "recommendations": ["johnsoncodehk.volar", "lokalise.i18n-ally", "esbenp.prettier-vscode"] + "recommendations": ["johnsoncodehk.volar", "lokalise.i18n-ally"] } diff --git a/src/App.vue b/src/App.vue index ac3808c..fd77942 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,14 +3,14 @@ import { ref, onMounted, unref } from 'vue' import { ElConfigProvider } from 'element-plus' import zhCn from 'element-plus/lib/locale/lang/zh-cn' // import en from 'element-plus/lib/locale/lang/en' -import { BfFrom, BfFormExpose } from '@/components/Form' -const formRef = ref & BfFormExpose>() +import { VFrom, VFormExpose } from '@/components/Form' +const formRef = ref & VFormExpose>() onMounted(() => { const form = unref(formRef.value) console.log(form?.$el) - const schema: BfFormSchema = [ + const schema: VFormSchema = [ { field: '1', colProps: {} @@ -22,8 +22,8 @@ onMounted(() => { diff --git a/src/components/Form/index.ts b/src/components/Form/index.ts index 77b74d0..1e1142b 100644 --- a/src/components/Form/index.ts +++ b/src/components/Form/index.ts @@ -1,8 +1,8 @@ -import BfFrom from './src/BfForm.vue' +import VFrom from './src/VForm.vue' -export interface BfFormExpose { +export interface VFormExpose { count: number sayHello: () => void } -export { BfFrom } +export { VFrom } diff --git a/src/components/Form/src/BfForm.vue b/src/components/Form/src/BfForm.vue deleted file mode 100644 index 4564e6a..0000000 --- a/src/components/Form/src/BfForm.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - - - diff --git a/src/components/Form/src/VForm.vue b/src/components/Form/src/VForm.vue new file mode 100644 index 0000000..4b75e14 --- /dev/null +++ b/src/components/Form/src/VForm.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/components/Form/src/componentMap.ts b/src/components/Form/src/componentMap.ts new file mode 100644 index 0000000..376df7d --- /dev/null +++ b/src/components/Form/src/componentMap.ts @@ -0,0 +1,42 @@ +import type { Component } from 'vue' +import { + ElCascader, + ElCheckboxGroup, + ElColorPicker, + ElDatePicker, + ElInput, + ElInputNumber, + ElRadioGroup, + ElRate, + ElSelect, + ElSelectV2, + ElSlider, + ElSwitch, + ElTimePicker, + ElTimeSelect, + ElTransfer, + ElAutocomplete, + ElDivider +} from 'element-plus' + +const COMPONENT_MAP: Recordable = { + Radio: ElRadioGroup, + Checkbox: ElCheckboxGroup, + Input: ElInput, + Autocomplete: ElAutocomplete, + InputNumber: ElInputNumber, + Select: ElSelect, + Cascader: ElCascader, + Switch: ElSwitch, + Slider: ElSlider, + TimePicker: ElTimePicker, + DatePicker: ElDatePicker, + Rate: ElRate, + ColorPicker: ElColorPicker, + Transfer: ElTransfer, + Divider: ElDivider, + TimeSelect: ElTimeSelect, + SelectV2: ElSelectV2 +} + +export { COMPONENT_MAP } diff --git a/src/components/Form/src/helper.ts b/src/components/Form/src/helper.ts new file mode 100644 index 0000000..bca7a1b --- /dev/null +++ b/src/components/Form/src/helper.ts @@ -0,0 +1,8 @@ +/** + * + * @param schema 对应组件数据 + * @description 用于自动设置placeholder + */ +export function setTextPlaceholder(schema: VFormSchema) { + console.log(schema) +} diff --git a/src/locales/en.ts b/src/locales/en.ts index 4b68246..f7d0a48 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -1,8 +1,8 @@ export default { - test: { - about: 'About' - }, - test2: { - go: 'Go' + common: { + inputText: 'Please input', + selectText: 'Please select', + startTimeText: 'Start time', + endTimeText: 'End time' } } diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 8cb48c6..340b78b 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -1,8 +1,8 @@ export default { - test: { - about: '关于' - }, - test2: { - go: '去' + common: { + inputText: '请输入', + selectText: '请选择', + startTimeText: '开始时间', + endTimeText: '结束时间' } } diff --git a/src/styles/variable.less b/src/styles/variable.less index fde84b4..c7d3f7c 100644 --- a/src/styles/variable.less +++ b/src/styles/variable.less @@ -1,2 +1,2 @@ // 命名空间 -@namespace: vbf; +@namespace: v; diff --git a/src/types/components-type.d.ts b/src/types/componentType.d.ts similarity index 95% rename from src/types/components-type.d.ts rename to src/types/componentType.d.ts index 8a130db..069a17e 100644 --- a/src/types/components-type.d.ts +++ b/src/types/componentType.d.ts @@ -472,24 +472,9 @@ declare global { } declare type FormSchema = { - /** - * @field form model key - */ field: string - - /** - * @label form-item label - */ label?: string - - /** - * @colProps ElCol props - */ colProps?: ColProps - - /** - * @componentProps El Components props - */ componentProps?: | RadioProps | CheckboxProps @@ -508,38 +493,14 @@ declare global { | DividerProps | TimeSelectProps | SelectV2Props - - /** - * @formItemProps form-item props - */ formItemProps?: FormItemProps - - /** - * @component Component - */ component?: ComponentName - - /** - * @value form model value - */ value?: FormValueTypes - - /** - * @options Component options - */ options?: FormOptions[] - - /** - * @optionsField option alias - */ optionsField?: FormOptionsAlias - - /** - * @hidden form-item hidden - */ hidden?: boolean } - // BfForm types end - declare type BfFormSchema = FormSchema[] + // VForm types end + declare type VFormSchema = FormSchema[] } diff --git a/src/types/global.d.ts b/src/types/global.d.ts index c87538c..2658a69 100644 --- a/src/types/global.d.ts +++ b/src/types/global.d.ts @@ -10,6 +10,6 @@ declare type ElememtPlusSzie = 'medium' | 'small' | 'mini' declare type ElementPlusInfoType = 'success' | 'info' | 'warning' | 'danger' -declare type Recordable = Record +declare type Recordable = Record declare type ComponentRef = InstanceType diff --git a/src/utils/is.ts b/src/utils/is.ts new file mode 100644 index 0000000..d9a0824 --- /dev/null +++ b/src/utils/is.ts @@ -0,0 +1,101 @@ +// copy to vben-admin + +const toString = Object.prototype.toString + +export function is(val: unknown, type: string) { + return toString.call(val) === `[object ${type}]` +} + +export function isDef(val?: T): val is T { + return typeof val !== 'undefined' +} + +export function isUnDef(val?: T): val is T { + return !isDef(val) +} + +export function isObject(val: any): val is Record { + return val !== null && is(val, 'Object') +} + +export function isEmpty(val: T): val is T { + if (isArray(val) || isString(val)) { + return val.length === 0 + } + + if (val instanceof Map || val instanceof Set) { + return val.size === 0 + } + + if (isObject(val)) { + return Object.keys(val).length === 0 + } + + return false +} + +export function isDate(val: unknown): val is Date { + return is(val, 'Date') +} + +export function isNull(val: unknown): val is null { + return val === null +} + +export function isNullAndUnDef(val: unknown): val is null | undefined { + return isUnDef(val) && isNull(val) +} + +export function isNullOrUnDef(val: unknown): val is null | undefined { + return isUnDef(val) || isNull(val) +} + +export function isNumber(val: unknown): val is number { + return is(val, 'Number') +} + +export function isPromise(val: unknown): val is Promise { + return is(val, 'Promise') && isObject(val) && isFunction(val.then) && isFunction(val.catch) +} + +export function isString(val: unknown): val is string { + return is(val, 'String') +} + +export function isFunction(val: unknown): val is Function { + return typeof val === 'function' +} + +export function isBoolean(val: unknown): val is boolean { + return is(val, 'Boolean') +} + +export function isRegExp(val: unknown): val is RegExp { + return is(val, 'RegExp') +} + +export function isArray(val: any): val is Array { + return val && Array.isArray(val) +} + +export function isWindow(val: any): val is Window { + return typeof window !== 'undefined' && is(val, 'Window') +} + +export function isElement(val: unknown): val is Element { + return isObject(val) && !!val.tagName +} + +export function isMap(val: unknown): val is Map { + return is(val, 'Map') +} + +export const isServer = typeof window === 'undefined' + +export const isClient = !isServer + +export function isUrl(path: string): boolean { + const reg = + /(((^https?:(?:\/\/)?)(?:[-:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&%@.\w_]*)#?(?:[\w]*))?)$/ + return reg.test(path) +} diff --git a/src/utils/propTypes.ts b/src/utils/propTypes.ts index a5e8606..5d685f3 100644 --- a/src/utils/propTypes.ts +++ b/src/utils/propTypes.ts @@ -15,8 +15,6 @@ const propTypes = createTypes({ integer: undefined }) as PropTypes -console.log(propTypes.array) - // 需要自定义扩展的类型 // see: https://dwightjack.github.io/vue-types/advanced/extending-vue-types.html#the-extend-method propTypes.extend([