feat(): 改为vite

This commit is contained in:
2026-03-16 17:58:57 +08:00
parent cd734d8524
commit 1ccbd4e872
74 changed files with 46574 additions and 2145 deletions
+1
View File
@@ -0,0 +1 @@
export * from "./vue-helper"
+110
View File
@@ -0,0 +1,110 @@
import { ComponentInternalInstance, ComponentPublicInstance } from "vue";
type CustomClassObj = Record<string, boolean>;
type CustomClass = string | Array<string> | CustomClassObj;
type DistCustomClass = Record<string, true>;
export function createCustomClassObj(customClass: string): DistCustomClass;
export function createCustomClassObj(
customClass: Array<string>
): DistCustomClass;
export function createCustomClassObj(
customClass: string | Array<string>
): DistCustomClass {
let customClassObj = <DistCustomClass>{};
if (typeof customClass === "string") {
const customClassStr = customClass.trim().replace(" +", " ");
if (customClassStr.length > 0) {
const customClassEntries = customClassStr
.split(" ")
.map((name) => [name, true]);
customClassObj = Object.fromEntries(customClassEntries);
}
} else if (Array.isArray(customClass)) {
if (customClass.length > 0) {
const customClassEntries = customClass.map((name) => [name, true]);
customClassObj = Object.fromEntries(customClassEntries);
}
} else {
throw new TypeError(
`customClass只能是字符串或数组类型,customClass: ${customClass}`
);
}
return customClassObj;
}
/**
* 转换 vue class 为 vue class 对象
* @param sourceClass 原始 class
* @returns
*/
export function convertCustomClass(sourceClass: CustomClass): CustomClassObj {
let customClassObj = <CustomClassObj>{};
if (typeof sourceClass === "string") {
const customClassStr = sourceClass.trim().replace(" +", " ");
if (customClassStr.length > 0) {
const customClassEntries = customClassStr
.split(" ")
.map((name) => [name, true]);
customClassObj = Object.fromEntries(customClassEntries);
}
} else if (Array.isArray(sourceClass)) {
if (sourceClass.length > 0) {
const customClassEntries = sourceClass.map((name) => [name, true]);
customClassObj = Object.fromEntries(customClassEntries);
}
} else if (sourceClass instanceof Object) {
customClassObj = sourceClass;
} else {
throw new TypeError(
`sourceClass不是有效的vue classsourceClass: ${sourceClass}`
);
}
return customClassObj;
}
/**
* 合并 class
* @param customClass vue class
* @returns
*/
export function mergeClass(...customClass: CustomClass[]) {
return customClass
.map((cc) => convertCustomClass(cc))
.reduce((a, b) => Object.assign(a, b));
}
/**
* 发送祖先组件事件
* @param thisArg 调用的源组件实例
* @param componentName 需要触发事件的组件名
* @param eventName 事件名称
* @param params 参数
* @returns
*/
export function dispatch(
thisArg: ComponentPublicInstance,
componentName: ComponentPublicInstance,
eventName: string,
params: unknown
): void {
let parent = thisArg.$parent || thisArg.$root;
if (parent == null) {
return;
}
let name = parent.$options.componentName;
while (parent && (!name || name !== componentName)) {
parent = parent.$parent;
if (parent) {
name = parent.$options.componentName;
}
}
if (parent) {
parent.$emit.call(parent, eventName, params);
}
}