123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- import { BASE_URL } from "@/config";
- /**
- * 获取当前页面路径
- * @returns 当前页面路径
- */
- export function getCurrentPath() {
- const pages = getCurrentPages();
- const currentPage = pages[pages.length - 1];
- return currentPage.route || "";
- }
- /**
- * 通用表单赋值方法
- * @param form 表单数据对象
- * @param data 需要赋值的数据
- * @param options 配置选项
- */
- function assignFormValues<T extends Record<string, any>>(
- form: T,
- data: Partial<T>,
- options?: {
- /**
- * 是否忽略空值(null, undefined, '')
- * @default false
- */
- ignoreEmpty?: boolean;
- /**
- * 自定义字段映射
- * @example { 'oldKey': 'newKey' }
- */
- fieldMap?: Record<string, string>;
- /**
- * 需要特殊处理的字段
- */
- transform?: Partial<Record<string, (value: any) => any>>;
- },
- ): void {
- const { ignoreEmpty = false, fieldMap = {}, transform = {} } = options || {};
- for (const key in data) {
- if (Object.prototype.hasOwnProperty.call(data, key)) {
- const targetKey = fieldMap[key] || key;
- // 检查目标表单是否有这个字段
- if (!(targetKey in form)) {
- continue;
- }
- let value = data[key];
- // 处理空值
- if (
- ignoreEmpty &&
- (value === null || value === undefined || value === "")
- ) {
- continue;
- }
- // 处理特殊转换
- if (targetKey in transform) {
- value = transform[targetKey]!(value);
- } else if (typeof value === "string") {
- // 字符串特殊处理
- if (
- key.includes("Img") ||
- key.includes("image") ||
- key.includes("photo") ||
- key.includes("certificate")
- ) {
- // 图片字段处理
- if (value) {
- value = value.split(",").map((url: string) => ({ url }));
- } else {
- value = [] as unknown as T[keyof T];
- }
- } else if (key === "selecteddeparts" || key.includes("selected")) {
- // 选择字段处理
- value = value ? value.split(",") : [];
- }
- }
- // 类数组对象特殊处理
- if (
- Array.isArray(form[targetKey]) &&
- !Array.isArray(value) &&
- typeof value === "string"
- ) {
- try {
- const parsed = JSON.parse(value);
- if (Array.isArray(parsed)) {
- form[targetKey as keyof T] = parsed as T[keyof T];
- continue;
- }
- } catch (e) {
- // 解析失败,继续使用原值
- }
- }
- form[targetKey as keyof T] = value as T[keyof T];
- }
- }
- }
- export default assignFormValues;
- export function getImageURL(url?: string) {
- return BASE_URL + "/sys/common/static/" + url;
- }
- /**
- * 判断一个对象的所有字段是否有值(非 null 和 undefined)
- * @param obj 要检查的对象
- * @returns 所有字段有值返回 true,否则 false
- */
- function areAllFieldsFilled(obj: Record<string, any>): boolean {
- return Object.values(obj).every(
- (value) =>
- unref(value) !== null &&
- unref(value) !== undefined &&
- unref(value) !== "",
- );
- }
- /**
- * 判断数组中每个对象是否所有字段都有值
- * @param arr 要检查的对象数组
- * @returns 所有对象字段都有值返回 true,否则 false
- */
- export function areAllItemsAllFieldsFilled(
- arr: Array<Record<string, any>>,
- ): boolean {
- // return arr.every((item) => areAllFieldsFilled(item));
- //修复新增的时候id校验
- return arr.every((item) => {
- const { coursesId, id, ...rest } = item;
- return areAllFieldsFilled(rest);
- });
- }
|