{"version":3,"file":"index.full.min.mjs","sources":["../../../packages/utils/props.ts","../../../packages/components/buttons/src/buttons.ts","../../../packages/utils/bem.ts","../../../packages/directives/repeat-click/index.ts","../../../packages/hooks/use-locale.ts","../../../packages/utils/http/core/modules/loading.ts","../../../packages/utils/cookie.ts","../../../packages/utils/http/core/preset-interceptors.ts","../../../packages/utils/utils.ts","../../../packages/utils/http/core/modules/interceptor.ts","../../../packages/utils/http/core/request-client.ts","../../../packages/utils/http/index.ts","../../../packages/directives/permission/index.ts","../../../packages/components/buttons/src/buttons-vue.tsx","../../../packages/utils/with-install.ts","../../../packages/components/buttons/index.ts","../../../packages/components/form/src/form.ts","../../../packages/components/form/src/hooks/use-form.ts","../../../packages/components/form/src/hooks/use-form-item.tsx","../../../packages/components/form/src/form-item.ts","../../../packages/components/form/src/form-item-vue.tsx","../../../packages/components/form/src/form.vue","../../../packages/components/form/index.ts","../../../packages/components/input/src/input.ts","../../../packages/components/input/src/input.vue","../../../packages/components/input/index.ts","../../../packages/hooks/use-template-promise.tsx","../../../packages/hooks/dialog/use-dialog.tsx","../../../packages/components/custom-column/src/custom-column.ts","../../../packages/hooks/use-request.ts","../../../packages/utils/dom.ts","../../../packages/utils/mitt.ts","../../../packages/utils/env.ts","../../../packages/utils/navigation.ts","../../../packages/components/custom-column/src/custom-column.vue","../../../packages/components/custom-column/index.ts","../../../packages/components/table/src/table.ts","../../../packages/hooks/dialog/use-form-dialog.tsx","../../../packages/components/table/src/use-table.tsx","../../../packages/components/table/src/table.vue","../../../packages/components/table/index.ts","../../../packages/components/search-list-page/src/search-list-page.ts","../../../packages/components/search-list-page/src/use-search-list-page.ts","../../../packages/components/search-list-page/src/search-list-page.vue","../../../packages/components/search-list-page/index.ts","../../../packages/components/select/src/select.ts","../../../packages/components/select/src/use-select.ts","../../../packages/components/select/src/select.vue","../../../packages/components/select/index.ts","../../../packages/components/title/src/title.ts","../../../packages/components/title/src/use-title.ts","../../../packages/components/title/src/title.vue","../../../packages/components/title/index.ts","../../../packages/components/header/src/header.ts","../../../packages/hooks/use-navigation.ts","../../../packages/components/header/src/use-header.tsx","../../../packages/components/attachment/src/attachment.ts","../../../packages/utils/file.ts","../../../packages/components/attachment/src/use-attachment.ts","../../../packages/components/attachment/src/attachment.vue","../../../packages/components/attachment/index.ts","../../../packages/components/header/src/header.vue","../../../packages/components/header/index.ts","../../../packages/components/date-picker-range/src/date-picker-range.ts","../../../packages/components/date-picker-range/src/date-picker-range.vue","../../../packages/components/date-picker-range/index.ts","../../../packages/components/link/src/link.ts","../../../packages/components/link/src/link.vue","../../../packages/components/link/index.ts","../../../packages/components/uni-vue/src/uni-vue.ts","../../../packages/components/uni-vue/src/use-uni-vue.ts","../../../packages/components/uni-vue/src/uni-vue.vue","../../../packages/components/uni-vue/index.ts","../../../packages/utils/time.ts","../../../packages/components/footer-info/src/footer-info.ts","../../../packages/components/footer-info/src/footer-info.vue","../../../packages/components/footer-info/index.ts","../../../packages/el-plus/components.ts","../../../packages/el-plus/plugins/globalProperties.ts","../../../packages/hooks/dialog/use-choose-dialog.tsx","../../../packages/hooks/dialog/use-confirm-dialog.tsx","../../../packages/hooks/use-utils.ts","../../../packages/el-plus/index.ts"],"sourcesContent":["import type { Api, ReqBefore, ReqAfter, Method } from '@el-plus/utils/http'\nimport type { PropType, SetupContext, MaybeRef, ExtractPropTypes } from 'vue'\nimport { useAttrs } from 'vue'\nexport const apiProps = {\n  api: {\n    type: [String, Function] as PropType<Api>,\n  },\n  method: {\n    type: String as PropType<Method>,\n  },\n  reqData: {\n    type: Object,\n  },\n  reqParams: {\n    type: Object,\n  },\n  reqBefore: {\n    type: Function as PropType<ReqBefore>,\n  },\n  reqAfter: {\n    type: Function as PropType<ReqAfter>,\n  },\n}\ntype IVisible = boolean | ((T: unknown) => boolean)\nexport const visibleProps = {\n  show: {\n    type: [Boolean, Function] as PropType<IVisible>,\n  },\n  hide: {\n    type: [Boolean, Function] as PropType<IVisible>,\n  },\n}\nexport type VisibleProps = ExtractPropTypes<typeof visibleProps>\nexport const prepareProps = <T extends Record<string, any>>( // eslint-disable-line @typescript-eslint/no-explicit-any\n  props: T,\n  excludeKeys: string[] = [],\n): Partial<T> => {\n  return Object.keys(props).reduce((acc, key) => {\n    if (!excludeKeys.includes(key)) {\n      acc[key as keyof T] = props[key]\n    }\n    return acc\n  }, {} as Partial<T>)\n}\n\nexport type IDisabled = boolean | ((...args: any[]) => boolean)\nexport const disabledProps = {\n  disabled: {\n    type: [Boolean, Function] as PropType<IDisabled>,\n  },\n}\nexport type DisabledProps = ExtractPropTypes<typeof disabledProps>\nexport const prepareEvents = <T extends Record<string, unknown> | string[]>(\n  emit: SetupContext<T>['emit'],\n  eventKeys: string[],\n  // (keyof T & string)[] = [],\n) => {\n  return eventKeys.reduce(\n    (acc, key) => {\n      // 转换on+事件名\n      let eventName\n      if (key.startsWith('on')) {\n        eventName = key\n      } else {\n        if (key.includes('-')) {\n          eventName =\n            'on' +\n            key\n              .split('-')\n              .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n              .join('')\n        } else {\n          eventName = `on${key.charAt(0).toUpperCase()}${key.slice(1)}`\n        }\n      }\n      acc[eventName] = (...args: unknown[]) => emit(key, ...args)\n      return acc\n    },\n    {} as Record<string, unknown>,\n  )\n}\n\nexport const prepareClassNames = () => {\n  return useAttrs().class || ''\n}\nexport const prepareStyles = () => {\n  return useAttrs().style || {}\n}\n","import type { PropType, ExtractPublicPropTypes, VNode } from 'vue'\nimport {\n  buttonProps as elButtonProps,\n  // buttonEmits as elButtonEmits,\n  type ButtonProps as ElButtonProps,\n} from 'element-plus'\nimport { disabledProps } from '@el-plus/utils/props'\nimport type { VisibleProps, IDisabled } from '@el-plus/utils/props'\nimport type { TableScope } from '@el-plus/components/table'\n\nexport type ButtonProps<TClickArg = MouseEvent | TableScope> = Partial<\n  Omit<ElButtonProps, 'disabled'> & {\n    name: string\n    prop: string // 唯一标识\n    permission: string // 权限\n    onClick: (e: TClickArg) => void\n    scopedSlots: Record<string, () => VNode>\n    disabled: IDisabled\n    confirm: boolean\n    confirmText: string\n    confirmBefore: (e: TClickArg) => Promise<void>\n  } & VisibleProps\n>\nexport const buttonsProps = {\n  ...elButtonProps,\n  ...disabledProps,\n  list: {\n    type: Array as PropType<ButtonProps[]>,\n    default: () => [],\n  },\n  size: {\n    ...elButtonProps.size,\n    default: 'small',\n  },\n  type: {\n    ...elButtonProps.type,\n    default: 'default',\n  },\n} as const\nexport type ButtonsProps = ExtractPublicPropTypes<typeof buttonsProps>\n// export const buttonsEmits = {\n//   ...elButtonEmits,\n// }\n// export type ButtonsEmits = typeof buttonsEmits\n// export const buttonsEmitsKeys = Object.keys(buttonsEmits)\n","// block-代码块      ep-button\n// element-元素     ep-button__icon\n// modifier-修饰符  ep-button__icon--active\n// state-状态      is-checked\n\nfunction _bem(\n  prefix: string,\n  block: string,\n  element: string,\n  modifier: string,\n) {\n  if (block) {\n    prefix += '-' + block\n  }\n  if (element) {\n    prefix += '__' + element\n  }\n  if (modifier) {\n    prefix += '--' + modifier\n  }\n  return prefix\n}\nfunction createBEM(prefix: string) {\n  return {\n    b: (block: string = '') => _bem(prefix, block, '', ''),\n    e: (element: string = '') => (element ? _bem(prefix, '', element, '') : ''),\n    m: (modifier: string = '') =>\n      modifier ? _bem(prefix, '', '', modifier) : '',\n    be: (block: string = '', element: string = '') =>\n      block && element ? _bem(prefix, block, element, '') : '',\n    bm: (block: string = '', modifier: string = '') =>\n      block && modifier ? _bem(prefix, block, '', modifier) : '',\n    em: (element: string = '', modifier: string = '') =>\n      element && modifier ? _bem(prefix, '', element, modifier) : '',\n    bem: (block: string = '', element: string = '', modifier: string) =>\n      block && element && modifier\n        ? _bem(prefix, block, element, modifier)\n        : '',\n    is: (name: string = '', state: boolean) => (state ? `is-${name}` : ''),\n  }\n}\n\nexport function createNameSpace(name) {\n  const prefix = `ep-${name}`\n  return createBEM(prefix)\n}\n","import type { Directive } from 'vue'\nconst SCOPE = '_RepeatClick'\nexport interface RepeatClickEl extends HTMLElement {\n  [SCOPE]: null | {\n    start?: (evt: MouseEvent) => void\n  }\n}\nexport interface RepeatClickOptions {\n  immediate?: boolean\n  delay?: number\n  handler: (...args: unknown[]) => unknown\n}\nconst vRepeatClick: Directive<RepeatClickEl, RepeatClickOptions> & {\n  name: string\n} = {\n  name: 'repeatClick',\n  // 在绑定元素的 attribute 前\n  // 或事件监听器应用前调用\n  // created(el, binding, vnode) {\n  //   // el.style.display = 'none'\n  //   // 下面会介绍各个参数的细节\n  //   console.log('created', el, binding, vnode)\n  // },\n\n  // 在元素被插入到 DOM 前调用\n  beforeMount(el, binding) {\n    const { delay = 300, immediate } =\n      typeof binding.value === 'object' ? binding.value : {}\n    const handler =\n      typeof binding.value === 'object' ? binding.value.handler : binding.value\n    let isPending = false\n    let timer: ReturnType<typeof setTimeout>\n    const start = (e: MouseEvent) => {\n      if (e.button !== 0) return // 只处理左键点击\n      timer && clearTimeout(timer)\n      timer = setTimeout(() => {\n        if (immediate) {\n          isPending = false\n        } else {\n          handler?.(e)\n        }\n      }, delay)\n      if (immediate) {\n        if (isPending) {\n          return\n        }\n        isPending = true\n        handler?.(e)\n      }\n    }\n    el[SCOPE] = { start }\n    el.addEventListener('click', start)\n  },\n  //   // 在绑定元素的父组件\n  //   // 及他自己的所有子节点都挂载完成后调用\n  //   mounted(el, binding, vnode) {\n  //     console.log('mounted', el, binding, vnode)\n  //   },\n  //   // 绑定元素的父组件更新前调用\n  //   beforeUpdate(el, binding, vnode, prevVnode) {\n  //     console.log('beforeUpdate', el, binding, vnode, prevVnode)\n  //   },\n  //   // 在绑定元素的父组件\n  //   // 及他自己的所有子节点都更新后调用\n  //   updated(el, binding, vnode, prevVnode) {\n  //     console.log('updated', el, binding, vnode, prevVnode)\n  //   },\n  //   // 绑定元素的父组件卸载前调用\n  //   beforeUnmount(el, binding, vnode) {\n  //     console.log('beforeUnmount', el, binding, vnode)\n  //   },\n  // 绑定元素的父组件卸载后调用\n  unmounted(el) {\n    if (!el[SCOPE]) return\n    const { start } = el[SCOPE]\n\n    if (start) {\n      el.removeEventListener('mousedown', start)\n    }\n    el[SCOPE] = null\n  },\n}\nexport default vRepeatClick\n","import {\n  ref,\n  inject,\n  provide,\n  getCurrentInstance,\n  type App,\n  nextTick,\n} from 'vue'\nimport { useLocale as useElLocale } from 'element-plus'\nimport type { Language } from 'element-plus/es/locale'\nconst elLocaleModules = import.meta.glob(\n  '/node_modules/element-plus/es/locale/lang/*.mjs',\n)\nlet localeModules = import.meta.glob('../locale/lang/*.{mjs,ts}')\nif (process.env.NODE_ENV === 'production') {\n  localeModules = import.meta.glob(\n    '/node_modules/el-plus/es/locale/lang/*.{mjs,ts}', // 打包后到vite项目,因为有optimizeDeps,会找不到, 所以要在生产环境下重新判断\n  )\n}\nconst TRANSLATER_KEY = Symbol('TRANSLATER_KEY')\nexport type Translater = (key: string) => string\nlet cachedTranslater: Translater | null = null\nexport const useLocale = () => {\n  const localeLang = window.hxlang?.toLocaleLowerCase().split('_').join('-')\n  const addLangClass = async (lang: string) => {\n    await nextTick()\n    const el = document.querySelector('html')\n    const langclass = 'no-cn'\n    if (el && lang !== 'ZH_CN') {\n      el.classList.add(langclass)\n    }\n  }\n  const inSetup = !!getCurrentInstance()\n  const translater = inSetup ? inject<Translater>(TRANSLATER_KEY) : null\n  if (translater) {\n    cachedTranslater = translater\n  }\n  const loadLocale = (app?: App) => {\n    const inSetup = !!getCurrentInstance()\n    if (!inSetup && !app) {\n      return console.error(\n        'app is required when useLocale is called outside of setup',\n      )\n    }\n    const provideFn = inSetup ? provide : app!.provide\n    // eslint-disable-next-line no-async-promise-executor\n    return new Promise<void>(async (resolve) => {\n      try {\n        let basePath = '../locale/lang/'\n        if (process.env.NODE_ENV === 'production') {\n          basePath = '/node_modules/el-plus/es/locale/lang/'\n        }\n        const ext = process.env.NODE_ENV === 'production' ? '.mjs' : '.ts'\n        const modulePath = basePath + localeLang + ext\n        let loader = localeModules[modulePath]\n        if (!loader) {\n          loader = localeModules[basePath + 'en' + ext]\n        }\n        const module = (await loader()) as { default: Language }\n        const { t } = useElLocale(ref(module.default as unknown as Language))\n        provideFn(TRANSLATER_KEY, t)\n        resolve()\n        addLangClass(window.hxlang!)\n      } catch (error) {\n        console.error(error)\n      }\n    })\n  }\n  const loadElLocale = async () => {\n    const basePath = '/node_modules/element-plus/es/locale/lang/'\n    const ext = '.mjs'\n    const modulePath = basePath + localeLang + ext\n    let loader = elLocaleModules[modulePath]\n    if (!loader) {\n      loader = elLocaleModules[basePath + 'en' + ext]\n    }\n    const module = (await loader()) as { default: Language }\n    return module.default\n  }\n  return {\n    loadLocale,\n    loadElLocale,\n    t: (key) => {\n      // // 如果已经有缓存的 translater，直接使用\n      if (cachedTranslater) {\n        return cachedTranslater(key)\n      }\n      // const translater = inject<Translater>(TRANSLATER_KEY)\n      if (translater) {\n        // cachedTranslater = translater // 缓存起来\n        return translater(key)\n      }\n      return key\n    },\n  }\n}\n","import { ElLoading } from 'element-plus'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nconst { t } = useLocale()\n\n// 1. Loading 计数器与实例\nlet reqNum = 0\nlet loadingInstance\nconst startLoading = () => {\n  if (reqNum === 0) {\n    loadingInstance = ElLoading.service({\n      lock: true,\n      text: t('ep.loading.loading'),\n      background: 'rgba(0, 0, 0, 0.7)',\n    })\n  }\n  reqNum++\n}\nconst endLoading = () => {\n  if (reqNum <= 0) return\n  reqNum--\n  if (reqNum === 0 && loadingInstance) {\n    loadingInstance.close()\n    loadingInstance = null\n  }\n}\nexport { startLoading, endLoading }\n","import Cookies from 'js-cookie'\nconst tokenKey = 'access_token'\nexport const getToken = () => Cookies.get(tokenKey)\nexport const setToken = (token: string) => Cookies.set(tokenKey, token)\nexport const removeToken = () => Cookies.remove(tokenKey)\nexport { Cookies }\n","import type { MakeErrorMessageFn, ResponseInterceptorConfig } from './types'\nimport { isFunction } from '@vue/shared'\nimport axios from 'axios'\nimport { startLoading, endLoading } from './modules/loading'\nimport { getToken } from '@el-plus/utils/cookie'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nconst { t } = useLocale()\n\nexport const defaultRequestInterceptor = () => {\n  return {\n    fulfilled: async (config) => {\n      if (config.loading) {\n        startLoading()\n      }\n      const token = getToken()\n      config.headers.Authorization = token ? `Bearer ${token}` : null\n      config.headers = {\n        ...config.headers,\n        ...window.hx.getSignHeaders({\n          sign: window.$EP_SIGN || {},\n          config,\n        }),\n      }\n      return config\n    },\n    rejected: (error) => {\n      return Promise.reject(error)\n    },\n  }\n}\nexport const defaultResponseInterceptor = (options?: {\n  /** 响应数据中代表访问结果的字段名 */\n  codeField?: string\n  /** 响应数据中装载实际数据的字段名，或者提供一个函数从响应数据中解析需要返回的数据 */\n  dataField?: ((response: any) => any) | string\n  /** 当codeField所指定的字段值与successCode相同时，代表接口访问成功。如果提供一个函数，则返回true代表接口访问成功 */\n  successCode?: ((code: any) => boolean) | number | string\n  makeInfoMessage?: MakeErrorMessageFn\n}): ResponseInterceptorConfig => {\n  const {\n    codeField = 'code',\n    dataField = 'data',\n    successCode = 200,\n    makeInfoMessage,\n  } = options || {}\n  return {\n    fulfilled: (response) => {\n      const { config, data: responseData, status } = response\n      if (config.loading) {\n        endLoading()\n      }\n      if (config.responseReturn === 'raw') {\n        return response\n      }\n      if (!responseData.success && !config.noErrorMsg) {\n        const msg = responseData.msg || responseData.message || 'Error'\n        const error = new Error(msg) as Error & { type: string }\n        error.type = 'service-error'\n        makeInfoMessage?.(msg, error)\n        return Promise.reject(error)\n      }\n\n      if (status >= 200 && status < 400) {\n        if (config.responseReturn === 'body') {\n          return responseData\n        } else if (\n          isFunction(successCode)\n            ? successCode(responseData[codeField])\n            : responseData[codeField] === successCode\n        ) {\n          return isFunction(dataField)\n            ? dataField(responseData)\n            : responseData[dataField]\n        }\n      }\n      throw Object.assign({}, response, { response })\n    },\n  }\n}\n\n// 错误信息拦截器\nexport const errorMessageResponseInterceptor = (\n  makeErrorMessage?: MakeErrorMessageFn,\n): ResponseInterceptorConfig => {\n  return {\n    rejected: (error: any) => {\n      endLoading()\n      if (axios.isCancel(error) || error.type === 'service-error') {\n        return Promise.reject(error)\n      }\n\n      const err: string = error?.toString?.() ?? ''\n      let errMsg = ''\n      if (err?.includes('Network Error')) {\n        errMsg = t('ep.http.networkError')\n      } else if (error?.message?.includes?.('timeout')) {\n        errMsg = t('ep.http.timeout')\n      }\n      if (errMsg) {\n        makeErrorMessage?.(errMsg, error)\n        return Promise.reject(error)\n      }\n\n      let errorMessage = ''\n      const status = error?.response?.status\n      switch (status) {\n        case 400: {\n          errorMessage = t('ep.http.requestError')\n          break\n        }\n        case 401: {\n          errorMessage = t('ep.http.authExpired')\n          break\n        }\n        case 403: {\n          errorMessage = t('ep.http.forbidden')\n          break\n        }\n        case 404: {\n          errorMessage = t('ep.http.notFound')\n          break\n        }\n        default: {\n          errorMessage = t('ep.http.serverError')\n        }\n      }\n      makeErrorMessage?.(errorMessage, error)\n      return Promise.reject(error)\n    },\n  }\n}\n","export const mergeListByKey = (defaultList, list, key = 'prop') => {\n  // 合并默认按钮属性\n  list.forEach((item) => {\n    const defaultIndex = defaultList.findIndex(\n      (item1) => item1[key] === item[key],\n    )\n    if (defaultIndex !== -1) {\n      defaultList[defaultIndex] = {\n        ...defaultList[defaultIndex],\n        ...item,\n      }\n    }\n  })\n  const allList = defaultList.concat(list!)\n  const mergeList = allList.reduce((arr, item) => {\n    if (!Reflect.has(item, key) || !arr.some((obj) => obj[key] === item[key])) {\n      arr.push(item)\n    }\n    return arr\n  }, [])\n  return mergeList\n}\n\nexport function bindMethods<T extends object>(instance: T): void {\n  const prototype = Object.getPrototypeOf(instance)\n  const propertyNames = Object.getOwnPropertyNames(prototype)\n\n  propertyNames.forEach((propertyName) => {\n    const descriptor = Object.getOwnPropertyDescriptor(prototype, propertyName)\n    const propertyValue = instance[propertyName as keyof T]\n\n    if (\n      typeof propertyValue === 'function' &&\n      propertyName !== 'constructor' &&\n      descriptor &&\n      !descriptor.get &&\n      !descriptor.set\n    ) {\n      instance[propertyName as keyof T] = propertyValue.bind(instance)\n    }\n  })\n}\n","import type { AxiosInstance, AxiosResponse } from 'axios';\n\nimport type {\n  RequestInterceptorConfig,\n  ResponseInterceptorConfig,\n} from '../types';\n\nconst defaultRequestInterceptorConfig: RequestInterceptorConfig = {\n  fulfilled: (response) => response,\n  rejected: (error) => Promise.reject(error),\n};\n\nconst defaultResponseInterceptorConfig: ResponseInterceptorConfig = {\n  fulfilled: (response: AxiosResponse) => response,\n  rejected: (error) => Promise.reject(error),\n};\n\nclass InterceptorManager {\n  private axiosInstance: AxiosInstance;\n\n  constructor(instance: AxiosInstance) {\n    this.axiosInstance = instance;\n  }\n\n  addRequestInterceptor({\n    fulfilled,\n    rejected,\n  }: RequestInterceptorConfig = defaultRequestInterceptorConfig) {\n    this.axiosInstance.interceptors.request.use(fulfilled, rejected);\n  }\n\n  addResponseInterceptor<T = any>({\n    fulfilled,\n    rejected,\n  }: ResponseInterceptorConfig<T> = defaultResponseInterceptorConfig) {\n    this.axiosInstance.interceptors.response.use(fulfilled, rejected);\n  }\n}\n\nexport { InterceptorManager };\n","import type { AxiosInstance, AxiosResponse } from 'axios'\nimport type {\n  RequestClientConfig,\n  RequestClientOptions,\n  HttpSuccessResponse,\n} from './types'\nimport defu from 'defu'\nimport axios from 'axios'\n// import qs from 'qs'\nimport * as qs from 'qs'\nimport { isString } from '@vue/shared'\nimport { bindMethods } from '@el-plus/utils/utils'\nimport { InterceptorManager } from './modules/interceptor'\nfunction getParamsSerializer(\n  paramsSerializer: RequestClientOptions['paramsSerializer'],\n) {\n  if (isString(paramsSerializer)) {\n    switch (paramsSerializer) {\n      case 'brackets': {\n        return (params: any) =>\n          qs.stringify(params, { arrayFormat: 'brackets' })\n      }\n      case 'comma': {\n        return (params: any) => qs.stringify(params, { arrayFormat: 'comma' })\n      }\n      case 'indices': {\n        return (params: any) => qs.stringify(params, { arrayFormat: 'indices' })\n      }\n      case 'repeat': {\n        return (params: any) => qs.stringify(params, { arrayFormat: 'repeat' })\n      }\n    }\n  }\n  return paramsSerializer\n}\n\nclass RequestClient {\n  public readonly instance: AxiosInstance\n  // 拦截器\n  public addRequestInterceptor: InterceptorManager['addRequestInterceptor']\n  public addResponseInterceptor: InterceptorManager['addResponseInterceptor']\n  constructor(options: RequestClientOptions = {}) {\n    // 合并默认配置和传入的配置\n    const defaultConfig: RequestClientOptions = {\n      headers: {\n        'Content-Type': 'application/json;charset=utf-8',\n      },\n      responseReturn: 'raw',\n      // 默认超时时间10s\n      timeout: 10_000,\n    }\n    const { ...axiosConfig } = options\n    const requestConfig = defu(axiosConfig, defaultConfig)\n    // requestConfig.paramsSerializer = getParamsSerializer(\n    //   requestConfig.paramsSerializer,\n    // )\n    this.instance = axios.create(requestConfig)\n\n    bindMethods(this)\n\n    // 实例化拦截器管理器\n    const interceptorManager = new InterceptorManager(this.instance)\n    this.addRequestInterceptor =\n      interceptorManager.addRequestInterceptor.bind(interceptorManager)\n    this.addResponseInterceptor =\n      interceptorManager.addResponseInterceptor.bind(interceptorManager)\n  }\n\n  /**\n   * DELETE请求方法\n   */\n  public delete<T = any, R = HttpSuccessResponse<T>>(\n    url: string,\n    data?: any,\n    config?: RequestClientConfig,\n  ): Promise<R> {\n    return this.request<T>(url, {\n      ...config,\n      data,\n      method: 'DELETE',\n    }) as Promise<R>\n  }\n\n  /**\n   * GET请求方法\n   */\n  public get<T = any, R = HttpSuccessResponse<T>>(\n    url: string,\n    params?: any,\n    config?: RequestClientConfig,\n  ): Promise<R> {\n    return this.request<T>(url, {\n      ...config,\n      method: 'GET',\n      params,\n    }) as Promise<R>\n  }\n\n  /**\n   * 获取基础URL\n   */\n  public getBaseUrl() {\n    return this.instance.defaults.baseURL\n  }\n\n  /**\n   * POST请求方法\n   */\n  public post<T = any, R = HttpSuccessResponse<T>>(\n    url: string,\n    data?: any,\n    config?: RequestClientConfig,\n  ): Promise<R> {\n    return this.request(url, { ...config, data, method: 'POST' }) as Promise<R>\n  }\n\n  /**\n   * PUT请求方法\n   */\n  public put<T = any, R = HttpSuccessResponse<T>>(\n    url: string,\n    data?: any,\n    config?: RequestClientConfig,\n  ): Promise<R> {\n    return this.request(url, { ...config, data, method: 'PUT' }) as Promise<R>\n  }\n\n  /**\n   * 通用的请求方法\n   */\n  public async request<T, R = HttpSuccessResponse<T>>(\n    url: string,\n    config: RequestClientConfig,\n  ): Promise<R> {\n    try {\n      const response: AxiosResponse<R> = await this.instance({\n        url,\n        ...config,\n        // ...(config.paramsSerializer\n        //   ? { paramsSerializer: getParamsSerializer(config.paramsSerializer) }\n        //   : {}),\n      })\n      return response as R\n    } catch (error: any) {\n      throw error.response ? error.response.data : error\n    }\n  }\n}\nexport { RequestClient }\n","import {\n  defaultRequestInterceptor,\n  defaultResponseInterceptor,\n  errorMessageResponseInterceptor,\n} from './core/preset-interceptors'\nimport { RequestClient } from './core/request-client'\nimport { ElMessage } from 'element-plus'\n\nlet baseURL = '/vue-api'\nif (import.meta.env.DEV) {\n  const urlParams = new URLSearchParams(window.location.search)\n  const devProxy = urlParams.get('devProxy')\n  baseURL = devProxy || '/sit-api'\n}\n\nconst client = new RequestClient({\n  baseURL,\n  responseReturn: 'body',\n  timeout: 50_000,\n})\n\n/**\n * 重新认证逻辑\n */\nasync function doReAuthenticate() {\n  let loginUrl = '/pc-vue/login'\n  if (import.meta.env.DEV) {\n    loginUrl = `${location.pathname}${location.search}#/login`\n  }\n\n  if (window.parent) {\n    window.parent.location.href = loginUrl\n  } else {\n    window.location.href = loginUrl\n  }\n}\n\n// 请求头处理\nclient.addRequestInterceptor(defaultRequestInterceptor())\n\n// 处理成功返回的响应数据格式\nclient.addResponseInterceptor(\n  defaultResponseInterceptor({\n    makeInfoMessage: (msg) => {\n      ElMessage.error(msg)\n    },\n  }),\n)\n\n// 通用的错误处理,如果没有进入上面的错误处理逻辑，就会进入这里\nclient.addResponseInterceptor(\n  errorMessageResponseInterceptor((msg: string, error) => {\n    const responseData = error?.response?.data ?? {}\n    const errorMessage = responseData?.error ?? responseData?.message ?? ''\n    // 如果没有错误信息，则会根据状态码进行提示\n    ElMessage.error({\n      message: errorMessage || msg,\n      onClose: () => {\n        if (error?.response?.status === 401) {\n          doReAuthenticate()\n        }\n      },\n    })\n  }),\n)\n\nexport const http = client\nexport * from './core/types'\n","import type { Directive } from 'vue'\nimport { http } from '@el-plus/utils/http'\n\n// v-permisson:CGXQD:QXSP\nexport type Permission = `${string}:${string}`\nexport type HasPermission = Permission | boolean\nconst vPermisson: Directive<HTMLElement> & { name: string } = {\n  name: 'permission',\n  mounted(el, binding) {\n    const { arg, value } = binding.value\n    if (!arg && !value) {\n      return\n    }\n    el.style.display = 'none'\n    const permission: Permission = `${arg}:${value}`\n    checkPermission(permission, el)\n  },\n  updated(el, binding) {\n    const { arg, value } = binding.value\n    if (!arg && !value) {\n      if (el.style.display === 'none') {\n        el.style.display = ''\n      }\n      return\n    }\n    const permission = `${arg}:${value}`\n    checkPermission(permission, el)\n  },\n}\n\nexport async function checkPermission(permission: string, el: HTMLElement) {\n  const { data: roles = [] } = await queryRoles()\n  const hasPermission = roles.indexOf(permission) > -1\n  if (!hasPermission) {\n    el && el.parentNode && el.parentNode.removeChild(el)\n  } else {\n    el.style.display = ''\n  }\n  return hasPermission\n}\ntype RequestPromise = Promise<{ data: string[] }>\nlet requestPromise: RequestPromise | null = null\nasync function queryRoles(): RequestPromise {\n  try {\n    if (requestPromise) {\n      return requestPromise\n    }\n    requestPromise = http.post('/api-u/api/saas/user/appButtonRoleList', {\n      loading: true,\n    })\n    return requestPromise\n  } catch (error) {\n    console.error(error)\n    return { data: [] }\n  }\n}\n\nexport default vPermisson\n","import { defineComponent, computed } from 'vue'\nimport { buttonsProps } from './buttons'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport {\n  prepareProps,\n  prepareEvents,\n  prepareClassNames,\n  prepareStyles,\n} from '@el-plus/utils/props'\nimport { vRepeatClick, vPermission } from '@el-plus/directives'\nimport { ElMessageBox } from 'element-plus'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nconst bem = createNameSpace('button')\n\nexport default defineComponent({\n  name: 'EpButtons',\n  directives: {\n    [vRepeatClick.name]: vRepeatClick,\n    [vPermission.name]: vPermission,\n  },\n  inheritAttrs: false,\n  props: buttonsProps,\n  setup(props, { emit }) {\n    const { t } = useLocale()\n    const { list, ...buttonProps } = props\n    const customList = computed(() => {\n      return list.filter((button) => {\n        if ('show' in button) {\n          return typeof button.show === 'function'\n            ? button.show(button)\n            : button.show\n        } else if ('hide' in button) {\n          return typeof button.hide === 'function'\n            ? !button.hide(button)\n            : !button.hide\n        }\n        return true\n      })\n    })\n    const clickFn = async (item) => {\n      if (item.confirmBefore) {\n        await item.confirmBefore()\n      }\n      if (item.confirm) {\n        const confirmText =\n          item.confirmText ||\n          `${t('ep.buttons.secondConfirm')}${item.name}${t('ep.buttons.secondConfirmEnd')}？`\n        await ElMessageBox.confirm(confirmText, t('ep.buttons.prompt'), {\n          confirmButtonText: t('ep.buttons.confirm'),\n          cancelButtonText: t('ep.buttons.cancel'),\n          type: 'warning',\n        })\n      }\n      item.onClick && item.onClick()\n    }\n    const getDisabled = (item) => {\n      if (typeof item.disabled === 'function') {\n        return item.disabled()\n      }\n      if (typeof props.disabled === 'function') {\n        return props.disabled()\n      }\n      return props.disabled\n    }\n\n    return () => (\n      <>\n        {customList.value.map((item) => {\n          const permissionArr = item.permission?.split(':') || []\n          return (\n            <el-button\n              class={[bem.b(), prepareClassNames()]}\n              style={prepareStyles()}\n              key={item.prop || item.name}\n              v-slots={{\n                default: () => item.name,\n                ...item.scopedSlots,\n              }}\n              {...{\n                ...prepareProps(buttonProps),\n                ...prepareProps(item, ['scopedSlots', 'name', 'onClick']),\n                disabled: getDisabled(item),\n              }}\n              v-repeat-click={\n                typeof item.onClick === 'function'\n                  ? {\n                      handler: () => clickFn(item),\n                      immediate: true,\n                    }\n                  : () => clickFn(item)\n              }\n              v-permission={{\n                arg: permissionArr[0],\n                value: permissionArr[1],\n              }}\n            ></el-button>\n          )\n        })}\n      </>\n    )\n  },\n})\n","import type { Plugin, App, Component } from 'vue'\n\n// 绑定install,使得可以app.use注册为全局组件\ntype SFCWithInstall<T> = T & Plugin\nexport function withInstall<T extends Component>(comp: T) {\n  ;(comp as SFCWithInstall<T>).install = (app: App) => {\n    app.component((comp as { name: string }).name, comp)\n  }\n  return comp as SFCWithInstall<T>\n}\n","import Buttons from './src/buttons-vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpButtons = withInstall(Buttons)\nexport default EpButtons\nexport * from './src/buttons'\n","import type { ExtractPropTypes, PropType, ExtractPublicPropTypes } from 'vue'\nimport {\n  formProps as elFormProps,\n  formEmits as elFormEmits,\n} from 'element-plus'\nimport type { FormItemProps } from './form-item'\nconst expandFormProps = {\n  // 表单列表\n  formItemList: {\n    type: Array as PropType<FormItemProps[]>,\n    default: () => [] as FormItemProps[],\n  },\n  // 是否显示折叠\n  isShowFold: Boolean,\n\n  // 最大显示的表单数\n  showFieldCount: {\n    type: Number,\n    default: 8,\n  },\n  // 每行的列数\n  col: {\n    type: Number,\n    default: 4,\n  },\n}\nexport const formProps = {\n  ...elFormProps,\n  ...expandFormProps,\n  size: {\n    ...elFormProps.size,\n    default: 'small',\n  },\n  // 标签的长度\n  labelWidth: {\n    ...elFormProps.labelWidth,\n    default: 100,\n  },\n  scrollIntoViewOptions: {\n    ...elFormProps.scrollIntoViewOptions,\n    default: () => {\n      return { inline: 'center' }\n    },\n  },\n} as const\nexport type FormProps = ExtractPublicPropTypes<typeof formProps>\nexport const expandFormPropsKeys = Object.keys(expandFormProps)\n/* eslint-disable @typescript-eslint/no-unused-vars */\nexport const formEmits = {\n  ...elFormEmits,\n  toggleStatus: (status: boolean) => true, // 折叠状态切换时触发\n}\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\nexport type FormEmits = typeof formEmits\nexport const formEmitsKeys = Object.keys(formEmits)\n","import { ref, reactive, computed, useTemplateRef, type SetupContext, onBeforeUpdate } from 'vue'\nimport type { FormItemProps } from '../form-item'\nimport type { FormProps, FormEmits } from '../form'\nimport type { FormInstance, FormItemProp } from 'element-plus'\n\ninterface UseCollapseParams {\n  isShowFold: boolean\n  showFieldCount: number\n  filterFormItemList: { value: FormItemProps[] }\n}\nexport const useCollapse = (\n  { isShowFold, showFieldCount, filterFormItemList }: UseCollapseParams,\n  emit: SetupContext<FormEmits>['emit'],\n) => {\n  const open = ref(false)\n  const toggleStatus = () => {\n    open.value = !open.value\n    emit('toggleStatus', open.value)\n  }\n  // 是否显示折叠按钮\n  const isShowFoldBtn = computed(() => {\n    return isShowFold && filterFormItemList.value.length > showFieldCount\n  })\n  //   展开收起隐藏formItem逻辑\n  const isShowFormItem = (index: number) => {\n    return index < showFieldCount || open.value || !isShowFoldBtn.value\n  }\n  return {\n    open,\n    toggleStatus,\n    isShowFoldBtn,\n    isShowFormItem,\n  }\n}\n\nexport const useForm = (props: FormProps) => {\n  const elFormRef = useTemplateRef<FormInstance>('elFormRef')\n  const filterFormItemList = computed(() => {\n    return (props.formItemList || []).filter((item: FormItemProps) => {\n      if ('show' in item) {\n        return typeof item.show === 'function' ? item.show(item) : item.show\n      } else if ('hide' in item) {\n        return typeof item.hide === 'function' ? !item.hide(item) : !item.hide\n      }\n      return true\n    })\n  })\n  // 校验\n  const validate = () => {\n    return elFormRef.value!.validate()\n  }\n  // 重置校验\n  const resetFields = (props: FormItemProp) => {\n    return elFormRef.value!.resetFields(props)\n  }\n  // 清理某个字段的表单验证信息\n  const clearValidate = (props: FormItemProp) => {\n    return elFormRef.value!.clearValidate(props)\n  }\n  // 存储form-item的ref\n  const formItemRenderRefs = reactive(new Map())\n  // 每次更新前清空，防止内存泄漏或引用过时\n  onBeforeUpdate(() => {\n    formItemRenderRefs.clear();\n  });\n  // 获取form-item渲染render的ref\n  const getFormItemRenderRef = (refName: string) => {\n    return formItemRenderRefs.get(refName)\n  }\n  // 注册form-item的ref\n  const registerFormItemRenderRef = (refName: string, ref: any) => {\n    if (refName && ref) {\n      formItemRenderRefs.set(refName, ref)\n    }\n  }\n\n  return {\n    filterFormItemList,\n    elFormRef,\n    validate,\n    resetFields,\n    clearValidate,\n    getFormItemRenderRef,\n    registerFormItemRenderRef,\n  }\n}\n","import { h, resolveComponent, useAttrs, ref } from 'vue'\nimport type { FormItemProps } from '../form-item'\nimport type { FormItemRule } from 'element-plus'\nimport { ElTooltip } from 'element-plus'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nexport const useFormItem = () => {\n  return {}\n}\nexport const useFormItemSlots = (props: FormItemProps,emit) => {\n  const attrs = useAttrs()\n  const { render, labelRender } = props\n  const prop = props.tableProp || props.prop\n  const events: Record<string, (...args: any[]) => void> = {}\n  for (const key in attrs) {\n    if (key.startsWith('on')) {\n      // 包装事件处理函数，确保在事件触发时使用最新的 scope\n      // fix: table筛选后，点击事件触发时，scope.row仍为筛选前的行数据\n      events[key] = (...args: any[]) => {\n        const tableScope = attrs['table-scope']\n        const eventFn = attrs[key] as (...args: any[]) => void\n        return eventFn(...args, tableScope)\n      }\n    }\n  }\n  const isTipDisabled = ref(true) // 默认禁用提示\n  const checkOverflow = (e: MouseEvent) => {\n    const el = e.currentTarget as HTMLElement\n    isTipDisabled.value = el.scrollWidth <= el.clientWidth\n  }\n  const scopedSlots = {\n    default: () => {\n      const formData = attrs['form-data'] as Record<string, unknown>\n      const { scopedSlots: renderScopedSlots, ...renderProps } =\n        props.props || {}\n      let disabled = props.disabled\n      if (typeof props.disabled === 'function') {\n        disabled = props.disabled(formData)\n      }\n      return props.type\n        ? h(\n            resolveComponent(props.type),\n            {\n              modelValue: formData[prop as string],\n              'onUpdate:modelValue': (value: unknown) => {\n                formData[prop as string] = value\n              },\n              disabled,\n              clearable: true,\n              ...renderProps,\n              ...events,\n              ref: (el: any) => {\n                if (el) {\n                  emit('registerFormItemRenderRef', el)\n                }\n              },\n            },\n            renderScopedSlots,\n          )\n        : formData[prop as string]\n    },\n    label: () => {\n      return (\n        <ElTooltip\n          placement=\"top\"\n          effect=\"dark\"\n          content={props.label}\n          disabled={!props.isShowLabel || isTipDisabled.value}\n        >\n          <span\n            onMouseenter={checkOverflow}\n            style=\"display: block;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;\"\n          >\n            {!props.hideRequiredAsterisk && props.required ? (\n              <span style=\"color: var(--el-color-danger);\">*</span>\n            ) : null}\n            {props.isShowLabel ? <span>{props.label}</span> : ''}\n          </span>\n        </ElTooltip>\n      )\n    },\n  }\n\n  if (labelRender) {\n    scopedSlots.label = () => labelRender({ label: props.label })\n  }\n  if (render) {\n    scopedSlots.default = () => {\n      return render(attrs['table-scope'])\n    }\n  }\n  return {\n    scopedSlots,\n  }\n}\nexport const useFormItemRules = (props: FormItemProps) => {\n  const { t } = useLocale()\n  const { required, rules, label } = props\n  let mergeRules: FormItemRule[] = []\n  if (required) {\n    const requiredDefault = { required: true }\n    mergeRules.push(requiredDefault)\n  }\n  if (rules) {\n    if (Array.isArray(rules)) {\n      mergeRules = mergeRules.concat(rules)\n    }\n\n    if (Object.prototype.toString.call(rules) === '[object Object]') {\n      mergeRules.push(rules as FormItemRule)\n    }\n  }\n\n  if (mergeRules) {\n    mergeRules.forEach((r) => {\n      if (r.required && typeof r.message === 'undefined') {\n        r.message = `${label || ''}${t('ep.formItem.required')}`\n      }\n    })\n  }\n  return { rules: mergeRules }\n}\n","import { formItemProps as elFormItemProps } from 'element-plus'\nimport { visibleProps, disabledProps } from '@el-plus/utils/props'\nimport { CSSProperties } from 'vue'\nimport type {\n  VNode,\n  PropType,\n  ExtractPropTypes,\n  ExtractPublicPropTypes,\n} from 'vue'\nconst expandFormItemProps = {\n  type: {\n    type: String,\n    default: 'EpInput',\n  },\n  col: Number,\n  render: Function as PropType<(...args: any[]) => VNode>,\n  labelRender: Function as PropType<\n    ({ label }: { label: string | undefined }) => VNode\n  >,\n  props: Object,\n  ...visibleProps,\n  ...disabledProps,\n  class: String,\n  style: {\n    type: [String, Object] as PropType<string | CSSProperties>,\n  },\n  isShowLabel: {\n    type: Boolean,\n    default: true,\n  },\n  hideRequiredAsterisk: Boolean,\n  tableProp: String, // 用于table里的表单需要绑定的prop\n}\nexport const formItemProps = {\n  ...elFormItemProps,\n  ...expandFormItemProps,\n  prop: String,\n} as const\nexport type FormItemProps = ExtractPublicPropTypes<typeof formItemProps> & {\n  [key: `on${string}`]: ((...args: any[]) => any) | undefined\n}\nexport const expandFormItemPropsKeys = Object.keys(expandFormItemProps)\n","import { defineComponent, useAttrs ,computed} from 'vue'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { useFormItemRules, useFormItemSlots } from './hooks/use-form-item'\nimport { ElFormItem } from 'element-plus'\n\nimport { formItemProps, expandFormItemPropsKeys } from './form-item'\nimport {\n  prepareProps,\n  prepareEvents,\n  prepareClassNames,\n  prepareStyles,\n} from '@el-plus/utils/props'\nconst bem = createNameSpace('form-item')\nexport default defineComponent({\n  name: 'EpFormItem',\n  inheritAttrs: false,\n  props: formItemProps,\n  setup(props, { emit }) {\n    // const {} = useFormItem(props)\n    const attrs = useAttrs()\n    const { scopedSlots } = useFormItemSlots(props,emit)\n    const { rules } = useFormItemRules(props)\n    const { props: childProps, disabled, ...formItemProps } = props // eslint-disable-line\n    const isShowLabel = computed(() =>{\n      if(!props.label) return false\n      return props.isShowLabel\n    })\n    return () => {\n      return (\n        <ElFormItem\n          class={[\n            bem.b(),\n            bem.is('hide-label', !isShowLabel.value),\n            prepareClassNames(),\n          ]}\n          style={prepareStyles()}\n          v-slots={scopedSlots}\n          {...{\n            ...prepareProps(formItemProps, [...expandFormItemPropsKeys]),\n            rules,\n            'label-width': attrs['form-label-width'],\n          }}\n          // scopedSlots={scopedSlots}\n          // label={label}\n          // prop={prop}\n          // rules={mergeRules}\n          // {...{ props: formItemProps }}\n        />\n      )\n    }\n  },\n})\n","<template>\n  <div\n    :class=\"[\n      bem.b(),\n      prepareClassNames(),\n      bem.is('open', open),\n      bem.is('fold', isShowFoldBtn),\n    ]\"\n    :style=\"{\n      ...prepareStyles(),\n    }\"\n  >\n    <el-form ref=\"elFormRef\" :model=\"formData\" v-bind=\"customAttrs\">\n      <slot>\n        <el-row>\n          <el-col\n            v-for=\"(item, index) in filterFormItemList\"\n            v-show=\"isShowFormItem(index)\"\n            :key=\"item.prop || index\"\n            :class=\"bem.e('col')\"\n            :span=\"item.col || 24 / col\"\n          >\n            <FormItem\n              :form-data=\"formData\"\n              :form-label-width=\"labelWidth\"\n              v-bind=\"item\"\n              @registerFormItemRenderRef=\"\n                (ref) => registerFormItemRenderRef(item.props?.ref, ref)\n              \"\n            />\n          </el-col>\n        </el-row>\n      </slot>\n    </el-form>\n    <div v-if=\"isShowFoldBtn\" :class=\"bem.e('fold')\" @click=\"toggleStatus\">\n      {{ open ? t('ep.form.collapse') : t('ep.form.more') }}\n    </div>\n  </div>\n</template>\n<script setup lang=\"ts\">\nimport { computed, reactive, ref, useTemplateRef } from 'vue'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport {\n  formProps,\n  formEmits,\n  formEmitsKeys,\n  expandFormPropsKeys,\n} from './form'\nimport type { FormEmits } from './form'\nimport {\n  prepareProps,\n  prepareEvents,\n  prepareClassNames,\n  prepareStyles,\n} from '@el-plus/utils/props'\nimport { ElForm, ElRow, ElCol } from 'element-plus'\nimport { useCollapse, useForm } from './hooks/use-form'\nimport FormItem from './form-item-vue'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nconst { t } = useLocale()\ndefineOptions({\n  name: 'EpForm',\n  inheritAttrs: false,\n})\nconst bem = createNameSpace('form')\nconst props = defineProps(formProps)\nconst emit = defineEmits(formEmits)\nconst customAttrs = computed(() => {\n  return {\n    ...prepareProps(props, ['modelValue', 'model', ...expandFormPropsKeys]),\n    hideRequiredAsterisk: true, // 隐藏必填星号, 使用自己的*\n    scrollToError: true,\n    ...prepareEvents<FormEmits>(emit, formEmitsKeys),\n  }\n})\nconst formData = defineModel<Record<string, unknown>>({\n  default: () => reactive({}),\n})\n\nconst {\n  filterFormItemList,\n  elFormRef,\n  validate,\n  resetFields,\n  clearValidate,\n  getFormItemRenderRef,\n  registerFormItemRenderRef,\n} = useForm(props)\n\nconst { open, toggleStatus, isShowFoldBtn, isShowFormItem } = useCollapse(\n  {\n    filterFormItemList,\n    isShowFold: props.isShowFold,\n    showFieldCount: props.showFieldCount,\n  },\n  emit,\n)\n\ndefineExpose({\n  elFormRef,\n  validate,\n  resetFields,\n  clearValidate,\n  getFormItemRenderRef\n})\n</script>\n","import Form from './src/form.vue'\nimport FormItem from './src/form-item-vue'\nimport { withInstall } from '@el-plus/utils/with-install'\nexport const EpForm = withInstall(Form)\nexport default EpForm\nexport * from './src/form'\nexport * from './src/form-item'\nexport { FormItem as EpFormItem }\nexport type FormInstance = InstanceType<typeof Form>\nexport type FormItemInstance = InstanceType<typeof FormItem>\n","import type { ExtractPropTypes } from 'vue'\nimport {\n  inputProps as elInputProps,\n  inputEmits as elInputEmits,\n} from 'element-plus'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nconst { t } = useLocale()\n\nexport const inputProps = {\n  ...elInputProps,\n  max: Number,\n  min: Number,\n  radix: Number,\n  nonzero: Boolean,\n  placeholder: {\n    type: String,\n    default: () => {\n      return t('ep.input.placeholder')\n    },\n  },\n  thousand: {\n    type: Boolean,\n    default: true,\n  },\n  clearable: {\n    ...elInputProps.clearable,\n    default: true,\n  },\n  clearableFocus: {\n    type: Boolean,\n    default: true,\n  },\n} as const\nexport type InputProps = ExtractPropTypes<typeof inputProps>\nexport const inputEmits = {\n  ...elInputEmits,\n  click: (evt: MouseEvent) => evt instanceof MouseEvent,\n}\nexport type InputEmits = typeof inputEmits\nexport const inputEmitsKeys = Object.keys(inputEmits)\n\n//  max: Number,\n//     min: Number,\n//     nonzero: Boolean,\n//     format: Function,\n//     radix: {\n//       type: [String, Number],\n//       default: 5,\n//     },\n//     thousand: {\n//       type: Boolean,\n//       default: false,\n//     },\n","<template>\n  <el-input\n    ref=\"inputRef\"\n    v-model=\"value\"\n    :class=\"`${bem.b()} ${prepareClassNames()}`\"\n    :style=\"{\n      ...prepareStyles(),\n    }\"\n    v-bind=\"customAttrs\"\n    :type=\"type === 'number' ? 'text' : type\"\n  >\n    <template v-for=\"name in slots\" #[name]=\"scope\">\n      <slot :name=\"name\" v-bind=\"scope\" />\n    </template>\n  </el-input>\n</template>\n<script setup lang=\"ts\">\nimport { computed, useSlots, watch, ref, nextTick} from 'vue'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { inputProps, inputEmits, inputEmitsKeys } from './input'\nimport type { InputProps, InputEmits } from './input'\nimport {\n  prepareProps,\n  prepareEvents,\n  prepareClassNames,\n  prepareStyles,\n} from '@el-plus/utils/props'\ndefineOptions({\n  name: 'EpInput',\n  inheritAttrs: false,\n})\nconst bem = createNameSpace('input')\nconst props = defineProps(inputProps)\nconst emit = defineEmits(inputEmits)\nconst slots = computed(() => {\n  return Object.keys(useSlots())\n})\nlet isBluring = false\nlet isFocusing = false\nconst customAttrs = computed(() => {\n  return {\n    ...prepareProps(props, ['modelValue']),\n    ...prepareEvents<InputEmits>(emit, inputEmitsKeys),\n    placeholder: props.disabled ? '' : props.placeholder,\n    onClear: () => {\n      emit('clear')\n      if (!props.clearableFocus) {\n        nextTick(() => {\n          inputRef.value?.blur?.()\n        })\n      }\n    },\n    onFocus: (e: FocusEvent) => {\n      isFocusing = true\n      if (props.thousand) {\n        ;(e.target as HTMLInputElement).value = value.value\n          ? String(value.value)\n          : ''\n      }\n      emit('focus', e)\n    },\n    onBlur: (e: FocusEvent) => {\n      if (props.type === 'number') {\n        let val = value.value as string\n        if (props.nonzero && +val === 0) {\n          val = ''\n        }\n        if (val && val[val.length - 1] === '.') {\n          val = String(val).slice(0, -1)\n        }\n\n        if (val && val === '-') {\n          val = ''\n        }\n        value.value = val ? +val : val\n        ;(e.target as HTMLInputElement).value =value.value? toThousand(value.value):''\n      }\n      isBluring = true\n      isFocusing = false\n      emit('blur', e)\n    },\n  }\n})\nconst value = defineModel<InputProps['modelValue']>()\nconst inputRef = ref()\nconst toThousand = (val: string | number) => {\n  if (props.thousand) {\n    return val ? window.hx.thousand(val) : val\n  }\n  return val\n}\nwatch(\n  () => value.value,\n  (val) => {\n    if (props.type === 'number' && !isFocusing) {\n      nextTick(() => {\n        inputRef.value.input.value = val?toThousand(val as number):''\n      })\n    }\n    if (isBluring) {\n      isBluring = false\n      return\n    }\n    if (!isFocusing) {\n      return\n    }\n    if (props.type === 'number') {\n      if (typeof val === 'number') {\n        val = '' + val\n      }\n      if (typeof val === 'string') {\n        // 校验一次是否0+数字开头，这种情况直接把0去除\n        const zeroReg = new RegExp('^[-+]?0[0-9]\\\\d*')\n        if (zeroReg.test(val)) {\n          val = val.replace('0', '')\n        }\n        const reg = new RegExp('^([-+])?\\\\d*(\\\\.?\\\\d*)', 'g')\n        val = val.match(reg) ? val.match(reg)![0] : ''\n\n        // 限制小数位数\n        if (props.radix || props.radix === 0) {\n          const reg =\n            props.radix === 0\n              ? new RegExp('^([-+])?\\\\d*', 'g')\n              : new RegExp(`^([-+])?\\\\d*(\\\\.?\\\\d{0,${props.radix}})`, 'g')\n          val = val.match(reg) ? val.match(reg)![0] : ''\n        }\n        if ((props.max || props.max === 0) && +val > props.max) {\n          val = props.max\n        }\n        // 最大最小值\n        if (\n          (props.min || props.min === 0) &&\n          (val || val === 0) &&\n          +val < props.min\n        ) {\n          val = props.min\n        }\n      }\n    } else if (props.type === 'text') {\n      val = (val as string).trim()\n    }\n    value.value = val\n  },\n  {\n    immediate: true,\n  },\n)\n</script>\n","import Input from './src/input.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpInput = withInstall(Input)\nexport default EpInput\nexport * from './src/input'\n\n","// 参考 https://github.com/vueuse/vueuse/blob/main/packages/core/createTemplatePromise/index.ts\n\nimport type {\n  DefineComponent,\n  Ref,\n  TransitionProps,\n  VNode,\n  SetupContext,\n} from 'vue'\nimport {\n  defineComponent,\n  ref,\n  shallowReactive,\n  Transition,\n  Fragment,\n  h,\n  createApp,\n  getCurrentInstance,\n  render as vRender,\n  markRaw,\n  withDirectives,\n  vShow,\n  nextTick,\n} from 'vue'\n\nexport interface TemplatePromiseOptions {\n  // 过渡\n  transition?: TransitionProps\n  // 是否销毁\n  destroy?: boolean\n  //   自定义渲染\n  render?: (props, ctx: SetupContext) => VNode\n  // class 名\n  class?: string\n}\nexport type TemplatePromise<\n  Return,\n  Args extends any[] = [],\n> = DefineComponent<object> & {\n  //   new (): {\n  //     $slots: {\n  //       default: (_: TemplatePromiseProps<Return, Args>) => any\n  //     }\n  //   }\n} & {\n  open: (...args: Args) => Promise<Return>\n}\nexport interface TemplatePromiseProps<Return, Args extends any[] = []> {\n  promise: Promise<Return> | undefined\n  resolve: (v: Return) => void\n  reject: (v: any) => void\n  args: Args\n  options: TemplatePromiseOptions\n  isResolving: boolean\n  isVisible: boolean\n  key: number\n}\nexport const useTemplatePromise = <Return, Args extends any[] = []>(\n  options: TemplatePromiseOptions = {},\n): TemplatePromise<Return, Args> => {\n  const {\n    destroy = false,\n    render,\n    transition = {\n      name: 'fade',\n      appear: true,\n    },\n  } = options\n  const instances = ref([]) as Ref<TemplatePromiseProps<Return, Args>[]>\n  let index = 0\n\n  const create = (...args: Args) => {\n    const key = index++\n    const props = shallowReactive<TemplatePromiseProps<Return, Args>>({\n      key,\n      args,\n      promise: undefined,\n      resolve: () => {},\n      reject: () => {},\n      isResolving: false,\n      isVisible: true,\n      options,\n    })\n    instances.value.push(props)\n    props.promise = new Promise<Return>((_resolve, _reject) => {\n      props.resolve = (v) => {\n        props.isResolving = true\n        return _resolve(v)\n      }\n      props.reject = _reject\n    }).finally(() => {\n      if (destroy) {\n        props.promise = undefined\n        const index = instances.value.indexOf(props)\n        if (index !== -1) instances.value.splice(index, 1)\n      } else {\n        props.isVisible = false\n        // const wrapper = document.querySelector(\n        //   '.ep-template-promise',\n        // ) as HTMLElement\n        // if (wrapper.style['zIndex']) {\n        //   return\n        // }\n        // const dialog = wrapper?.querySelector('.el-modal-dialog') as HTMLElement\n        // const zIndex = dialog ? dialog.style['z-index'] : ''\n        // if (zIndex && wrapper) {\n        //   wrapper.style.zIndex = zIndex\n        // }\n      }\n    })\n    return props.promise\n  }\n  const open = (...args: Args) => {\n    instances.value = []\n    const com = create(...args)\n    nextTick(() => {\n      const wrapper = document.querySelector(\n        '.ep-template-promise.is-init',\n      ) as HTMLElement\n      if (wrapper) {\n        const dialog = wrapper?.querySelector('.el-modal-dialog') as HTMLElement\n        const zIndex = dialog ? dialog.style['z-index'] : ''\n        if (zIndex && wrapper) {\n          wrapper.style.zIndex = zIndex\n        }\n        // 删除is-init的class\n        wrapper.classList.remove('is-init')\n      }\n    })\n    return com\n  }\n  const component = defineComponent((_, ctx) => {\n    const { slots } = ctx\n    const renderList = () =>\n      instances.value.map((props) => {\n        return withDirectives(\n          h(\n            'div',\n            {\n              // key: props.key,\n              class: `ep-template-promise is-init ${options.class || ''}`,\n            },\n            render ? render(props, ctx) : slots.default?.(props),\n          ),\n          [[vShow, props.isVisible]],\n        )\n      })\n    if (transition)\n      return () => <Transition {...transition}>{renderList()}</Transition>\n\n    return renderList\n  })\n  // @ts-expect-error There's a breaking type change in Vue 3.3 <https://github.com/vuejs/core/pull/7963>\n  component.open = open\n  return markRaw(component as TemplatePromise<Return, Args>)\n}\n","import { useTemplatePromise } from '../use-template-promise'\nimport { h, getCurrentInstance, render as vRender, inject, nextTick } from 'vue'\nimport type { ComponentInternalInstance } from 'vue'\nimport {\n  ElDialog,\n  ElButton,\n  configProviderContextKey,\n  ElConfigProvider,\n} from 'element-plus'\nimport type { VNode } from 'vue'\nimport type { DialogProps } from 'element-plus'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { prepareProps } from '@el-plus/utils/props'\nimport { useLocale } from '../use-locale'\n\nexport type DialogOptions = Partial<\n  DialogProps & {\n    instance: ComponentInternalInstance | null\n    render: (props) => VNode\n    scopedSlots: Record<string, (props) => VNode>\n    class: string\n    templatePromiseClass: string\n    onCancel: (reject) => void\n    onBeforeCancel: (reject) => void\n    cancelText?: string\n    onConfirm: (resolve) => void\n    onBeforeConfirm: (resolve) => void\n    confirmText?: string\n    showFooter: boolean\n  }\n>\nexport type ExpandDialogOptions = {\n  title?: string\n  dialogProps?: DialogOptions\n}\nconst bem = createNameSpace('dialog')\n\nexport const useDialog = (options: DialogOptions = {}) => {\n  const { t } = useLocale()\n  const {\n    scopedSlots = {},\n    instance,\n    render,\n    destroyOnClose,\n    onConfirm,\n    onBeforeConfirm,\n    confirmText,\n    onCancel,\n    onBeforeCancel,\n    cancelText,\n    showFooter = true,\n    templatePromiseClass,\n    ...dialogProps\n  } = options\n\n  const Dialog = useTemplatePromise<any>({\n    destroy: destroyOnClose,\n    class: templatePromiseClass,\n    render: (promiseOptions, ctx) => {\n      // 插槽参数增加promiseOptions\n      for (const key in scopedSlots) {\n        scopedSlots[key] = scopedSlots[key].bind(null, promiseOptions)\n      }\n      const { resolve, reject, isResolving } = promiseOptions\n      const renderFunc = () => {\n        return render\n          ? render(promiseOptions)\n          : ctx.slots.default?.(promiseOptions)\n      }\n      const slots: DialogOptions['scopedSlots'] = {}\n      if (showFooter) {\n        slots.footer = () => (\n          <div class={bem.e('footer')}>\n            {scopedSlots.footerPrepend?.(promiseOptions)}\n            <ElButton\n              size=\"default\"\n              onClick={async () => {\n                if (onBeforeCancel) {\n                  await onBeforeCancel(reject)\n                }\n                if (onCancel) {\n                  onCancel(reject)\n                } else {\n                  reject('cancel')\n                }\n              }}\n            >\n              {cancelText || t('ep.dialog.cancel')}\n            </ElButton>\n            {scopedSlots.footerInner?.(promiseOptions)}\n            <ElButton\n              type=\"primary\"\n              onClick={async () => {\n                if (onBeforeConfirm) {\n                  await onBeforeConfirm(resolve)\n                }\n                if (onConfirm) {\n                  onConfirm(resolve)\n                } else {\n                  resolve('confirm')\n                }\n              }}\n              loading={isResolving}\n            >\n              {confirmText || t('ep.dialog.confirm')}\n            </ElButton>\n            {scopedSlots.footerAppend?.(promiseOptions)}\n          </div>\n        )\n      }\n      return (\n        <ElDialog\n          class={bem.b()}\n          modelValue={true}\n          {...{\n            closeOnClickModal: false,\n            closeOnPressEscape: false,\n            title: t('ep.dialog.title'),\n            center: false,\n            // 'append-to-body': true,\n            beforeClose: () => {\n              reject('cancel')\n            },\n            ...prepareProps(dialogProps, ['modelValue']),\n          }}\n          v-slots={{\n            ...slots,\n            ...scopedSlots,\n          }}\n        >\n          {renderFunc()}\n        </ElDialog>\n      )\n    },\n  })\n  if (render) {\n    // const app = createApp(component)\n    // Object.assign(app._context, parentInstance.appContext)\n    // app.mount(container)\n    const container = document.createElement('div')\n    // container.setAttribute('id', 'ep-dialog-container')\n    const newInstance = instance || getCurrentInstance()\n    const config = inject(configProviderContextKey) as any\n    // const parentConfig =\n    //   newInstance?.provides[configProviderContextKey] ||\n    //   newInstance?.appContext?.provides[configProviderContextKey]\n    // const vnode = h(Dialog)\n    const vnode = h(\n      ElConfigProvider,\n      { locale: config?.locale },\n      { default: () => h(Dialog) },\n    )\n    if (newInstance && newInstance.appContext) {\n      // 强制继承父应用的全局组件、指令和插件\n      vnode.appContext = newInstance.appContext\n    }\n    nextTick(() => {\n      vRender(vnode, container)\n      document.body.appendChild(container)\n    })\n  }\n\n  return Dialog\n}\n","import type { PropType, ExtractPublicPropTypes } from 'vue'\nimport { apiProps } from '@el-plus/utils/props'\nimport type { TransferDataItem } from 'element-plus'\n\nexport const customColumnProps = {\n  module: {\n    type: [Number, String] as PropType<number | string>,\n  },\n  api: {\n    ...apiProps.api,\n    default: '/api-item/api/customizedColumns/find',\n  },\n  saveApi: {\n    ...apiProps.api,\n    default: '/api-item/api/customizedColumns/save',\n  },\n  showHandler: {\n    type: Boolean,\n    default: true,\n  },\n} as const\nexport type CustomColumnProps = ExtractPublicPropTypes<typeof customColumnProps>\nexport const customColumnEmits = {\n  confirm: (data: TransferDataItem[]) => true,\n  loaded: (data: TransferDataItem[]) => true,\n}\nexport type CustomColumnEmits = typeof customColumnEmits\n","import { ref } from 'vue'\nimport { type Ref } from 'vue'\nimport type { Api, ReqAfter, ReqBefore, Method } from '@el-plus/utils/http'\nimport type { Canceler } from 'axios'\nimport axios from 'axios'\nimport { http } from '@el-plus/utils/http'\ntype UseRequest = (config: {\n  api?: Api\n  method?: Method\n  reqData?: Record<string, unknown>\n  reqParams?: Record<string, unknown>\n  reqBefore?: ReqBefore\n  reqAfter?: ReqAfter\n  cancelToken?: boolean\n  hooks?: {\n    success?: (data: unknown) => void\n    fail?: (error: unknown) => void\n  }\n}) => {\n  loading?: Ref<boolean>\n  requestFn?: (data?: Record<string, unknown>) => Promise<void>\n}\n\nexport const useRequest: UseRequest = ({\n  api,\n  method = 'post',\n  reqData,\n  reqParams,\n  reqBefore,\n  reqAfter,\n  cancelToken,\n  hooks,\n}) => {\n  if (!api) return {}\n  const loading = ref(false)\n  let cancelRequest: Canceler\n  let apiFn\n  if (typeof api === 'string') {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const config: Record<string, any> = {\n      method,\n    }\n    apiFn = (data: Record<string, any> = {}, params?: Record<string, any>) => {\n      if (config.method === 'get') {\n        config.params = data\n      } else {\n        config.data = data\n        config.params = params\n      }\n      config.data = {\n        ...reqData,\n        ...config.data,\n      }\n      config.params = {\n        ...reqParams,\n        ...config.params,\n      }\n      // 替换$query为$searchValue\n      if (config.data.$query) {\n        config.data[config.data.$query] = data.$searchValue\n        delete config.data.$searchValue\n        delete config.data.$query\n      }\n\n      if (reqBefore) {\n        reqBefore(config)\n      }\n      if (cancelToken) {\n        config.cancelToken = new axios.CancelToken(function (cancel) {\n          cancelRequest = cancel\n        })\n      }\n      return http.request(api, config)\n    }\n  } else {\n    apiFn = api\n  }\n  const requestFn = async (data: Record<string, unknown> = {}, params?: Record<string, unknown>) => {\n    if (loading.value && !cancelToken) return\n    loading.value = true\n    try {\n      cancelRequest && cancelRequest()\n      const res = await apiFn(data, params)\n      // 如果api是函数,直接追加success,data\n      if (reqAfter) {\n        reqAfter(res)\n      }\n      if (hooks?.success) {\n        hooks.success(typeof api === 'function' ? res : res.data)\n      }\n      loading.value = false\n\n    } catch (error) {\n      if (hooks?.fail) {\n        hooks.fail(error)\n      }\n      if(axios.isCancel(error)){\n        return\n      }\n      loading.value = false\n    } finally {\n    }\n  }\n  return {\n    loading,\n    requestFn,\n  }\n}\n","/**\n * @description: 根据el和父节点class获取父节点\n * @param   el 节点\n * @param   className 父节点class\n */\nexport function getParentEl(el: HTMLElement, className: string) {\n  let parent = el.parentNode as HTMLElement\n  while (parent && !parent.classList.contains(className)) {\n    parent = parent.parentNode as HTMLElement\n  }\n  return parent as HTMLElement\n}\n\n/**\n * @description: 根据class,获取el的子节点\n * @param   el 节点\n * @param   className 子节点class\n */\nexport function getChildEl(el: HTMLElement, className: string) {\n  return el.querySelector(`.${className}`) as HTMLElement\n}\n","import mitt, { Emitter, EventType, Handler } from 'mitt'\n\n// 扩展Emitter类型，添加asyncOn方法\n// interface ExtendedEmitter<T = Record<EventType, unknown>> extends Emitter<T> {\n//   once: <T = any>(eventName: EventType) => Promise<T>\n// }\n// 1. 定义你的事件类型映射\ntype Events = {\n  [key: string]: any\n}\ntype CustomEmitter<T extends Record<EventType, unknown>> = Emitter<T> & {\n  once<K extends keyof T>(eventName: K): Promise<T[K]>\n}\nexport const bus = mitt<Events>() as CustomEmitter<Events>\nbus.once = (eventName) => {\n  return new Promise((resolve) => {\n    const handler: Handler<Events[typeof eventName]> = (payload) => {\n      // 触发后立即注销，防止内存泄漏\n      bus.off(eventName, handler)\n      resolve(payload)\n    }\n    bus.on(eventName, handler)\n  })\n}\n","const getEnv = (mark = 'hxjf', hostname = window.location.hostname) => {\n  const tag = hostname.match(new RegExp(`.*(?=${mark})`))\n  if (!tag) {\n    return 'local'\n  }\n  return tag[0] ? tag[0].replace('-', '') : 'production'\n}\n\nconst getBaseUrl = (env = 'sit', isOpenApi?: boolean) => {\n  let url = ''\n  if (getEnv() === 'local') {\n    const query: {\n      devProxy?: string\n      [propName: string]: string | undefined\n    } = {}\n    // for (const key in new URLSearchParams(location.search.slice(1))) {\n    //   query[key] = location.search.slice(1)[key]\n    // }\n    query.devProxy =\n      location.search.slice(1).split('=')[1] ||\n      location.hash.slice(1).split('=')[1]\n    // const query = querystring.parse(location.search.slice(1));\n    const devProxy = query.devProxy || `${env}-api`\n    url = `${devProxy}${isOpenApi ? '/vue-openapi' : ''}`\n  } else if (isOpenApi) {\n    url = '/vue-openapi'\n  } else {\n    url = '/vue-api'\n  }\n  return url\n}\nconst getLocationEnv = () => {\n  const urlParams = new URLSearchParams(window.location.search)\n  const devProxy = urlParams.get('devProxy')\n  if (devProxy) {\n    return devProxy.split('-')[0].replace('/', '')\n  }\n  return ''\n}\n\nexport { getEnv, getBaseUrl, getLocationEnv }\n","import { useLocale } from '@el-plus/hooks/use-locale'\nconst { t } = useLocale()\n\nexport interface NavigationConfig {\n  id?: number\n  name?: string // 路由name\n  title?: string // 标题\n  url?: string\n  query?: Record<string, string>\n}\nexport const gotoTaskTrace = (workflowId: string) => {\n  const item: NavigationConfig = {\n    id: Date.now(),\n    name: t('ep.bpm.approvalLog'),\n    url: `/bpm-pc/#/bpm/trace/taskTrace?pid=&aid=&wid=&tid=${workflowId}`,\n  }\n  if (window.parent && window.parent.openMenuSelect) {\n    window.parent.openMenuSelect(item)\n  } else {\n    window.open(item.url)\n  }\n}\n","<template>\n  <el-button\n    v-if=\"showHandler\"\n    type=\"primary\"\n    :class=\"[bem.b(), 'ep-button']\"\n    size=\"small\"\n    @click=\"open\"\n    >{{ t('ep.customColumn.columnSettings') }}</el-button\n  >\n  <CustomColumnDialog>\n    <el-transfer\n      v-model=\"showData\"\n      :class=\"bem.e('transfer')\"\n      filterable\n      :titles=\"[\n        t('ep.customColumn.hiddenField'),\n        t('ep.customColumn.visibleField'),\n      ]\"\n      :button-texts=\"[\n        t('ep.customColumn.moveLeft'),\n        t('ep.customColumn.moveRight'),\n      ]\"\n      :data=\"allData\"\n      target-order=\"push\"\n      @right-check-change=\"rightCheckChange\"\n      @change=\"change\"\n    >\n      <template #left-footer>\n        <div :class=\"bem.e('operate')\">\n          <el-button\n            type=\"primary\"\n            class=\"up\"\n            :disabled=\"isDiabledMoveUpDown\"\n            @click=\"moveUp\"\n          >\n            <el-icon><arrow-up /></el-icon>\n            {{ t('ep.customColumn.moveUp') }}\n          </el-button>\n          <el-button\n            type=\"primary\"\n            class=\"down\"\n            :disabled=\"isDiabledMoveUpDown\"\n            @click=\"moveDown\"\n          >\n            {{ t('ep.customColumn.moveDown') }}\n            <el-icon><arrow-down /></el-icon>\n          </el-button>\n        </div>\n      </template>\n    </el-transfer>\n  </CustomColumnDialog>\n</template>\n\n<script setup lang=\"tsx\">\nimport { ref, computed, watch, provide } from 'vue'\nimport { useDialog } from '@el-plus/hooks/dialog/use-dialog'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nimport { ArrowUp, ArrowDown } from '@element-plus/icons-vue'\nimport { customColumnEmits, customColumnProps } from './custom-column'\nimport { useRequest } from '@el-plus/hooks/use-request'\nimport type { TransferDataItem } from 'element-plus'\nimport { bus } from '@el-plus/utils'\n\nconst { t } = useLocale()\nconst bem = createNameSpace('custom-column')\ndefineOptions({ name: 'EpCustomColumn', inheritAttrs: false })\nconst props = defineProps(customColumnProps)\nconst emit = defineEmits(customColumnEmits)\nconst CustomColumnDialog = useDialog({\n  class: bem.e('dialog'),\n  width: 850,\n  center: true,\n  title: t('ep.customColumn.columnSettings'),\n  onConfirm: async (resolve) => {\n    resolve(\n      saveColumnsFn!({\n        module: props.module,\n        userModuleColumnsReqs: showData.value.map((item, index) => {\n          return {\n            columnId: item,\n            seq: index,\n          }\n        }),\n      }).then(() => {\n        const columns = showTableColumns()\n        emit('confirm', columns)\n        bus.emit('loadedCustomColumn', columns)\n      }),\n    )\n  },\n})\nconst allData = ref<TransferDataItem[]>([])\nconst showData = ref<TransferDataItem[]>([])\nif (typeof props.api === 'function') {\n  console.warn(\n    `请按照默认自定义列的格式返回数据，\n    格式为{\n        hiddenColumns: [{id: '', showName: '', showField: ''}], \n        showColumns: [{id: '', showName: '', showField: ''}]\n      }\n    `,\n  )\n}\nconst { requestFn: getColumnsFn } = useRequest({\n  api: props.api,\n  method: 'post',\n  hooks: {\n    success(data) {\n      const { hiddenColumns, showColumns } = data as {\n        hiddenColumns: TransferDataItem[]\n        showColumns: TransferDataItem[]\n      }\n      allData.value = [...hiddenColumns, ...showColumns].map((item) => ({\n        label: item.showName,\n        key: item.id,\n        prop: item.showField,\n      }))\n      showData.value = showColumns.map((item) => item.id)\n      const columns = showTableColumns()\n      emit('loaded', columns)\n      bus.emit('loadedCustomColumn', columns)\n    },\n  },\n})\nif (typeof props.saveApi === 'function') {\n  console.warn(\n    `请按照默认自定义列的格式提交数据，\n    格式为{\n          module: xx,\n          userModuleColumnsReqs: [{columnId: xx, seq: 序号index}]\n      }\n    `,\n  )\n}\nconst { requestFn: saveColumnsFn } = useRequest({\n  api: props.saveApi,\n  method: 'post',\n  hooks: {\n    success() {\n      emit('confirm', showTableColumns())\n    },\n  },\n})\nconst showTableColumns = () => {\n  return showData.value.map((id) => {\n    const item = allData.value.find((item) => item.key === id)\n    return {\n      prop: item!.prop,\n      label: item!.label,\n      key: item!.key,\n    }\n  })\n}\nif (props.module) {\n  getColumnsFn!({\n    module: props.module,\n  })\n}\nconst rightChecked = ref([])\n\nconst moveUp = () => {\n  const index = showData.value.indexOf(rightChecked.value[0])\n  const temp = showData.value[index]\n  if (index === 0) {\n    showData.value[index] = showData.value[showData.value.length - 1]\n    showData.value[showData.value.length - 1] = temp\n  } else {\n    showData.value[index] = showData.value[index - 1]\n    showData.value[index - 1] = temp\n  }\n  scrollIntoView()\n}\nconst moveDown = () => {\n  const index = showData.value.indexOf(rightChecked.value[0])\n  const temp = showData.value[index]\n  if (index === showData.value.length - 1) {\n    showData.value[index] = showData.value[0]\n    showData.value[0] = temp\n  } else {\n    showData.value[index] = showData.value[index + 1]\n    showData.value[index + 1] = temp\n  }\n  scrollIntoView()\n}\nconst scrollIntoView = () => {\n  // 选中项要在可视范围\n  const checkedEl = document.querySelectorAll(\n    '.ep-custom-column__transfer .el-transfer-panel',\n  )\n  const rightEl = checkedEl[1].querySelector(\n    '.el-transfer-panel__item.is-checked',\n  )\n  if (rightEl) {\n    requestAnimationFrame(() => {\n      rightEl.scrollIntoView({\n        behavior: 'smooth',\n        block: 'center',\n      })\n    })\n  }\n}\n\nconst rightCheckChange = (val) => {\n  rightChecked.value = val\n}\nconst change = () => {\n  if (!showData.value.some((item) => item === rightChecked.value[0])) {\n    rightChecked.value = []\n  }\n}\n\nconst isDiabledMoveUpDown = computed(() => {\n  return rightChecked.value.length !== 1\n})\n\nconst open = async () => {\n  try {\n    await CustomColumnDialog.open()\n  } catch (error) {}\n}\ndefineExpose({ open })\n</script>\n","import CustomColumn from './src/custom-column.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpCustomColumn = withInstall(CustomColumn)\nexport default EpCustomColumn\nexport type CustomColumnInstance = InstanceType<typeof EpCustomColumn>\nexport * from './src/custom-column'\n","import type { PropType, ExtractPublicPropTypes } from 'vue'\nimport elTableProps from 'element-plus/es/components/table/src/table/defaults'\nimport { ElTable } from 'element-plus'\nimport { apiProps, type VisibleProps } from '@el-plus/utils/props'\nimport type { WithOnPrefixAndCamelCase } from '@el-plus/types'\nimport type {\n  TableColumnCtx,\n  PaginationProps,\n  PaginationEmits,\n} from 'element-plus'\nimport type { ButtonProps } from '@el-plus/components/buttons'\nimport { customColumnProps } from '@el-plus/components/custom-column'\nconst inheritTableProps = {\n  ...elTableProps,\n  // Table 的尺寸\n  size: {\n    ...elTableProps.size,\n    default: 'default',\n  },\n  // 是否带有纵向边框\n  border: {\n    ...elTableProps.border,\n    default: true,\n  },\n  // 表头样式\n  headerCellStyle: {\n    ...elTableProps.headerCellStyle,\n    default: () => ({\n      background: '#EEEFF3',\n      // textAlign: 'center',\n      fontSize: '14px',\n      color: '#505050',\n    }),\n  },\n}\nexport type TableColumn = Partial<\n  TableColumnCtx & {\n    required: boolean | (() => boolean)\n    cellRequired: (scope: TableScope) => boolean\n    headerRender: TableColumnCtx['renderHeader']\n    disabled: boolean | ((scope: TableScope) => boolean)\n    type: string\n    props: Record<string, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n    filter: boolean // 是否显示筛选\n    editable: boolean | ((formData: Record<string, any>) => void) // 是否可批量编辑\n    [key: string]: any\n  } & VisibleProps\n>\nexport type TableScope<\n  T extends Record<string, unknown> = Record<string, unknown>,\n> = {\n  column: TableColumnCtx<T>\n  row: T\n  $index: number\n  store: unknown\n  _self: unknown\n}\nconst expandTableProps = {\n  ...apiProps,\n  columns: {\n    type: Array as PropType<TableColumn[]>,\n    default: () => [],\n  },\n  // 是否显示复选勾选列\n  showSelectionCol: Boolean,\n  // 是否显示单选勾选列\n  showSingleSelectionCol: Boolean,\n  // 是否显示序号列\n  showIndexCol: {\n    type: Boolean,\n    default: true,\n  },\n  // 对齐方式\n  align: {\n    type: String as PropType<'left' | 'center' | 'right'>,\n    default: 'center',\n  },\n  // 最小宽度\n  minWidth: {\n    type: [Number, String] as PropType<TableColumnCtx['minWidth']>,\n  },\n  // 操作列宽度\n  actionColWidth: {\n    type: [Number, String] as PropType<TableColumnCtx['width']>,\n    default: 200,\n  },\n  // 序号列自定义\n  indexFormatter: {\n    type: [Number, Function] as PropType<TableColumnCtx['index']>,\n  },\n  disabled: Boolean,\n  reserveSelection: Boolean,\n  selectable: {\n    type: Function as PropType<TableColumnCtx['selectable']>,\n  },\n  paginationProps: {\n    type: Object as PropType<\n      Partial<PaginationProps & WithOnPrefixAndCamelCase<PaginationEmits>>\n    >,\n    default: () => ({}),\n  },\n  showPagination: Boolean,\n  isFrontPage: Boolean,\n  // 操作列\n  actionButtons: {\n    type: Array as PropType<ButtonProps[]>,\n    default: () => [],\n  },\n  // 格式化列\n  formatColumns: {\n    type: Array as PropType<TableColumn[]>,\n    default: () => [],\n  },\n  // 是否初始化加载数据\n  isInitSearch: {\n    type: Boolean,\n    default: true,\n  },\n  // 自定义列模块\n  customColumnModule: {\n    ...customColumnProps.module,\n  },\n  customColumnApi: {\n    ...customColumnProps.api,\n  },\n  customColumnSaveApi: {\n    ...customColumnProps.saveApi,\n  },\n}\n\nexport const tableProps = {\n  ...inheritTableProps,\n  ...expandTableProps,\n} as const\nexport type TableProps = ExtractPublicPropTypes<typeof tableProps>\nexport const expandTablePropsKeys = Object.keys(expandTableProps)\n\nexport const tableEmits = [...ElTable.emits!, 'single-selection-change']\nexport type TableEmits = typeof tableEmits\nexport const tableEmitsKeys = tableEmits\n","import type { DialogOptions } from './use-dialog'\nimport type { FormProps } from '@el-plus/components/form'\nimport EpForm from '@el-plus/components/form'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { useDialog } from './use-dialog'\nimport { nextTick, reactive, ref, toRaw } from 'vue'\nconst bem = createNameSpace('form-dialog')\n\ntype Options = {\n  title?: string\n  width?: string\n  dialogProps?: DialogOptions\n  formData?: FormProps['model']\n  onBeforeConfirm?: (\n    formData: FormProps['model'],\n    resolve: (value: FormProps['model']) => void,\n  ) => Promise<void>\n  onBeforeCancel?: (\n    formData: FormProps['model'],\n    resolve: (value: string) => void,\n  ) => Promise<void>\n} & FormProps\nexport const useFormDialog = (options: Options = {}) => {\n  const {\n    dialogProps,\n    title,\n    width = '80%',\n    onBeforeConfirm,\n    onBeforeCancel,\n    ...formProps\n  } = options\n  const formRef = ref()\n  const isUseComFormData = !formProps.formData\n  let formData\n  const Dialog = useDialog({\n    class: bem.b(),\n    width,\n    title,\n    render: () => {\n      formData = isUseComFormData ? reactive({}) : formProps.formData // eslint-disable-line\n      return (\n        <EpForm\n          ref={formRef}\n          v-model={formData}\n          {...{\n            col: 1,\n            'label-width': 'auto',\n            ...formProps,\n          }}\n        />\n      )\n    },\n    onConfirm: async (resolve) => {\n      await formRef.value.validate()\n      if (onBeforeConfirm) {\n        await onBeforeConfirm(formData, resolve)\n      }\n      return resolve(formData)\n    },\n    onCancel: async (resolve) => {\n      if (onBeforeCancel) {\n        await onBeforeCancel(formData, resolve)\n      }\n      resolve('cancel')\n    },\n    ...dialogProps,\n  })\n  const open = Dialog.open\n  Dialog.open = async (...args) => {\n    // 清除校验(fix: 不销毁且外面传递formData时, 再次打开校验不清除)\n    if (!dialogProps?.destroyOnClose) {\n      setTimeout(() => {\n        formRef.value?.clearValidate()\n      }, 0)\n    }\n    const res = await open(...args)\n    return res\n  }\n  return Dialog\n}\n","import type { FormInstance, TableInstance, FormItemProp } from 'element-plus'\nimport {\n  ref,\n  computed,\n  type Ref,\n  reactive,\n  useTemplateRef,\n  getCurrentInstance,\n  toRaw,\n  useAttrs,\n  watch,\n} from 'vue'\nimport { useRequest } from '@el-plus/hooks/use-request'\nimport type { TableColumn, TableProps, TableScope } from './table'\nimport type { ButtonProps } from '@el-plus/components/buttons'\nimport type { FormProps } from '@el-plus/components/form'\nimport { bus } from '@el-plus/utils'\nimport { merge } from 'lodash-unified'\nimport {\n  prepareProps,\n  prepareEvents,\n  prepareClassNames,\n  prepareStyles,\n} from '@el-plus/utils/props'\nimport { cloneDeep } from 'lodash-unified'\nimport { EditPen } from '@element-plus/icons-vue'\nimport { ElIcon } from 'element-plus'\nimport { useFormDialog } from '@el-plus/hooks/dialog/use-form-dialog'\n\nexport type ISearch = (init: boolean, isPagination?: boolean) => void\nexport const useTable = (props: TableProps) => {\n  const elFormRef = useTemplateRef<FormInstance>('elFormRef')\n  const elTableRef = useTemplateRef<TableInstance>('elTableRef')\n  const allData = ref<Record<string, unknown>[]>([]) // 所有数据\n  const customData = ref<Record<string, unknown>[]>([]) // 当前展示数据\n  const apiTotal = ref(0) // 后端分页total\n  const { loading, requestFn } = useRequest({\n    api: props.api,\n    method: props.method,\n    reqData: props.reqData,\n    reqParams: props.reqParams,\n    reqBefore: props.reqBefore,\n    reqAfter: props.reqAfter,\n    cancelToken: true,\n    hooks: {\n      success(data) {\n        if (Array.isArray(data)) {\n          allData.value = data\n        } else if (data && typeof data === 'object') {\n          const rawData = data as Record<string, any>\n          allData.value = rawData?.list || rawData?.data || []\n        } else {\n          allData.value = []\n        }\n        if (props.isFrontPage) {\n          frontPaginationHandler()\n        }else{\n          customData.value = allData.value\n          apiTotal.value = (data as { total: number }).total || 0\n        }\n      },\n      fail(error) {\n        console.error(error)\n      },\n    },\n  })\n  // 自定义列\n  const customColumns = ref<TableColumn[]>([])\n  // 加载列表\n  const attrs = useAttrs()\n  const search: ISearch = async (init = false, isPagination = false) => {\n    const beforeSearch = attrs['before-search']\n    if (typeof beforeSearch === 'function') {\n      await beforeSearch?.()\n    }\n    if (init) {\n      pagination.pageNo = 1\n    }\n    // 前端分页+点击分页/切换页码\n    if (isPagination && props.isFrontPage) {\n      frontPaginationHandler()\n    } else {\n      if (props.api) {\n        requestFn!({\n          pageNo: pagination.pageNo,\n          pageSize: pagination.pageSize,\n          pageNum: pagination.pageNo,\n        })\n      } \n    }\n  }\n  const { pagination, paginationProps } = usePagination(\n    props,\n    search,\n    allData,\n    apiTotal,\n  )\n  // 前端分页\n  const frontPaginationHandler = () => {\n    const { pageNo, pageSize } = pagination\n    const data = allData.value.filter((item, index) => {\n      return index < pageNo * pageSize && index >= (pageNo - 1) * pageSize\n    })\n    customData.value = data\n  }\n  if (!props.api) {\n    watch(\n      () => props.data,\n      (newValue) => {\n        allData.value = newValue as Record<string, any>[]\n        if (props.isFrontPage) {\n          frontPaginationHandler()\n        } else {\n          customData.value = allData.value\n        }\n      },\n      {\n        deep: true,\n        immediate: true,\n      },\n    )\n  }\n\n  // 初始化加载\n  ;(async () => {\n    if (props.isInitSearch) {\n      if (props.customColumnModule) {\n        loading!.value = true\n        const columns = await bus.once('loadedCustomColumn')\n        loading!.value = false\n        customColumns.value = columns\n        bus.on('loadedCustomColumn', (columns: TableColumn[]) => {\n          customColumns.value = columns\n        })\n      }\n      search(true)\n    }\n  })()\n\n  // 校验\n  const validate = () => {\n    return elFormRef.value!.validate()\n  }\n  // 重置校验\n  const resetFields = (props: FormItemProp) => {\n    return elFormRef.value!.resetFields(props)\n  }\n  // 清理选择,用于多选表格，清空用户的选择\n  const clearSelection = () => {\n    return elTableRef.value!.clearSelection()\n  }\n  // 清理某个字段的表单验证信息\n  const clearValidate = (props: FormItemProp) => {\n    return elFormRef.value!.clearValidate(props)\n  }\n  // 获取选中数据\n  const getSelectionRows = () => {\n    return elTableRef.value!.getSelectionRows()\n  }\n  // 格式化操作按钮\n  const formatActionButtons = (list: ButtonProps[], scope: TableScope) => {\n    return list.map((item) => {\n      if (item.onClick) {\n        return {\n          ...item,\n          onClick: item.onClick.bind(null, scope),\n        }\n      }\n      return item\n    })\n  }\n\n  return {\n    loading,\n    data: customData,\n    search,\n    pagination,\n    paginationProps,\n    validate,\n    clearSelection,\n    resetFields,\n    clearValidate,\n    getSelectionRows,\n    elFormRef,\n    elTableRef,\n    formatActionButtons,\n    customColumns: customColumns as unknown as Ref<TableColumn[]>,\n  }\n}\nconst usePagination = function (\n  props: TableProps,\n  search: ISearch,\n  allData: Ref<Record<string, any>[]>,\n  apiTotal: Ref<number>,\n) {\n  const defaultPaginationProps = props.paginationProps || {}\n  const pageSizes = defaultPaginationProps.pageSizes || [20, 50, 100, 200]\n  const pagination = reactive({\n    total: computed(() => {\n      return !props.isFrontPage && props.api ? apiTotal.value : allData.value.length\n    }),\n    pageNo: 1,\n    pageSize: pageSizes[0],\n  })\n  const paginationProps = computed(() => {\n    const onSizeChange = defaultPaginationProps.onSizeChange\n    const onCurrentChange = defaultPaginationProps.onCurrentChange\n    return {\n      layout: 'total, sizes, prev, pager, next, jumper',\n      ...defaultPaginationProps,\n      pageSizes,\n      onSizeChange: (value: number) => {\n        onSizeChange && onSizeChange(value)\n        search(true, true)\n      },\n      onCurrentChange: (value: number) => {\n        onCurrentChange && onCurrentChange(value)\n        search(false, true)\n      },\n    }\n  })\n  return {\n    pagination,\n    paginationProps,\n  }\n}\n\nexport const useTableColumn = (\n  props: TableProps,\n  tableData: Ref<TableProps['data']>,\n  customColumns: Ref<TableColumn[]>,\n) => {\n  const instance = getCurrentInstance()\n  const columnProps = (column: TableColumn) => {\n    column.props = column.props || {}\n    const attrs = {\n      'show-overflow-tooltip': true,\n      align: column.align || props.align,\n      minWidth: column.minWidth || props.minWidth,\n      // ...prepareEvents<TableEmits>(emit, tableEmits),\n    } as TableColumn\n    if (!column.renderHeader) {\n      // 必填\n      let required = column.required\n      if (typeof column.required === 'function') {\n        required = column.required()\n      }\n      // 批量编辑\n      const editable = column.editable\n      attrs['renderHeader'] = () => {\n        return (\n          <span>\n            {required ? (\n              <span style=\"color:var(--el-color-danger)\"> * </span>\n            ) : (\n              ''\n            )}\n            <span\n              class={{ 'is-edit': editable }}\n              onClick={\n                editable\n                  ? async () => {\n                      const cloneColumn = { ...column }\n                      delete cloneColumn.editable\n                      const rawRender = cloneColumn.render\n                      const formData = reactive({})\n                      if (rawRender) {\n                        cloneColumn.render = () => {\n                          return rawRender({\n                            row: formData,\n                          })\n                        }\n                      }\n                      const formDialog = useFormDialog({\n                        title: cloneColumn.label,\n                        dialogProps: {\n                          destroyOnClose: true,\n                          instance,\n                        },\n                        formItemList: [\n                          cloneColumn,\n                        ] as FormProps['formItemList'],\n                        formData,\n                        // formData: reactive({}),\n                      })\n                      const data = (await formDialog.open()) as Record<\n                        string,\n                        any\n                      >\n                      ;(tableData.value || []).forEach((item) => {\n                        item[column.prop!] = data![column.prop!]\n                      })\n                      if (typeof editable === 'function') {\n                        editable(toRaw(data))\n                      }\n                    }\n                  : void 0\n              }\n            >\n              {column.label}\n              {editable ? (\n                <ElIcon>\n                  <EditPen />\n                </ElIcon>\n              ) : (\n                ''\n              )}\n            </span>\n          </span>\n        )\n      }\n    }\n    if (column.filter) {\n      const arr = tableData.value!.map((item) => item[column.prop!])\n      attrs.filters = [...new Set(arr)].map((item) => {\n        return {\n          text: item,\n          value: item,\n        }\n      })\n      attrs.filterMethod = (value, row) => {\n        return row[column.prop!] === value\n      }\n    }\n    if (column.type === 'EpLink') {\n      attrs.className = 'table-column-link'\n    }\n\n    return {\n      ...attrs,\n      ...prepareProps(column),\n    }\n  }\n  const columnList = computed(() => {\n    const columns = props.customColumnModule\n      ? customColumns.value\n      : props.columns\n    return columns!\n      .map((column: TableColumn) => {\n        const newColumn = columnProps(column)\n        if (props.formatColumns!.length) {\n          const formatColumn = props.formatColumns!.find(\n            (item) => item.prop === column.prop,\n          )\n          if (formatColumn) {\n            // newColumn = { ...newColumn, ...formatColumn }\n            merge(newColumn, formatColumn)\n          }\n        }\n        return newColumn\n      })\n      .filter((column) => {\n        if ('show' in column) {\n          return typeof column.show === 'function'\n            ? column.show(column)\n            : column.show\n        } else if ('hide' in column) {\n          return typeof column.hide === 'function'\n            ? !column.hide(column)\n            : !column.hide\n        }\n        return true\n      })\n  })\n  return {\n    columnList,\n  }\n}\n\nexport const useTableFormItem = (props: TableProps) => {\n  const formItemProps = (scope: TableScope, rawItem: TableColumn) => {\n    const item = cloneDeep(rawItem)\n    let required = item.required\n    if (typeof required === 'function') {\n      required = required()\n    }\n    if (item.cellRequired) {\n      required = item.cellRequired(scope)\n    }\n    let disabled = props.disabled\n    if ('disabled' in item) {\n      if (typeof item.disabled === 'function') {\n        disabled = item.disabled(scope)\n      } else {\n        disabled = item.disabled || false\n      }\n    }\n    if (item.type === 'EpSelect' && item.props) {\n      if ('options' in item.props && typeof item.props.options === 'function') {\n        item.props.options = item.props.options(scope)\n      }\n      if (\n        'disabledOption' in item.props &&\n        typeof item.props.disabledOption === 'function'\n      ) {\n        const disabledOption = item.props.disabledOption\n        item.props.disabledOption = (...args: unknown[]) =>\n          disabledOption(...args, scope)\n      }\n      if ('desc' in item.props && typeof item.props.desc === 'function') {\n        item.props.desc = item.props.desc(scope)\n      }\n    }\n\n    if (item.type === 'EpButtons' && item.props) {\n      item.props.list.forEach((btnItem: ButtonProps) => {\n        if (btnItem.prop) {\n          btnItem.name = scope.row[btnItem.prop] as string\n        }\n        if (btnItem.onClick) {\n          btnItem.onClick = btnItem.onClick.bind(null, scope)\n        }\n      })\n    }\n    if (item.type === 'EpLink') {\n      ;(item.props ? item.props : (item.props = {})).content =\n        item.props.content || scope.row[item.prop!]\n    }\n    for (const key in item) {\n      if (key.startsWith('on') && typeof item[key] === 'function') {\n        const fn = item[key]\n        item[key] = (...args: unknown[]) => {\n          let event: Event | unknown\n          if (args[0] instanceof Event) {\n            // 删除 event\n            event = args.shift()\n          }\n          return fn(...args, scope, event)\n        }\n      }\n    }\n    return {\n      ...prepareProps(item),\n      isShowLabel: false,\n      required,\n      hideRequiredAsterisk: 'cellRequired' in item ? false : required,\n      prop: `table.${scope.$index}.${item.prop}`,\n      tableProp: item.prop, // table里的表单需要绑定的prop\n      props: {\n        ...item.props,\n        disabled,\n      },\n    }\n  }\n  return {\n    formItemProps,\n  }\n}\n","<template>\n  <div\n    :class=\"`${bem.b()} ${prepareClassNames()}`\"\n    :style=\"{\n      ...prepareStyles(),\n    }\"\n  >\n    <el-form\n      ref=\"elFormRef\"\n      :model=\"{ table: data }\"\n      size=\"small\"\n      hide-required-asterisk\n      scroll-to-error\n      :scroll-into-view-options=\"{ inline: 'center' }\"\n      class=\"ep-form\"\n    >\n      <el-table ref=\"elTableRef\" v-loading=\"loading\" v-bind=\"customAttrs\">\n        <el-table-column\n          v-if=\"showSelectionCol\"\n          type=\"selection\"\n          width=\"55\"\n          :align\n          :selectable\n          :reserve-selection=\"reserveSelection\"\n          fixed\n        />\n        <el-table-column\n          v-if=\"showSingleSelectionCol\"\n          width=\"55\"\n          :align\n          :selectable\n          fixed\n        >\n          <template #default=\"scope\">\n            <el-link\n              type=\"primary\"\n              underline=\"never\"\n              style=\"font-size: 12px\"\n              @click=\"emit('single-selection-change', scope.row)\"\n              >{{ t('ep.table.select') }}</el-link\n            >\n          </template>\n        </el-table-column>\n        <el-table-column\n          v-if=\"showIndexCol\"\n          type=\"index\"\n          width=\"56\"\n          :align\n          :label=\"t('ep.table.serialNumber')\"\n          fixed\n          :index=\"indexFormatter\"\n        />\n\n        <el-table-column\n          v-if=\"actionButtons.length\"\n          :label=\"t('ep.table.operation')\"\n          :align\n          fixed\n          :width=\"actionColWidth\"\n        >\n          <template #default=\"scope\">\n            <span :class=\"bem.e('action-buttons')\">\n              <EpButtons\n                :list=\"formatActionButtons(actionButtons, scope)\"\n                type=\"text\"\n              />\n            </span>\n          </template>\n        </el-table-column>\n        <el-table-column\n          v-for=\"(item, index) in columnList\"\n          :key=\"`${item.prop}_${item.type}_${index}`\"\n          v-bind=\"item\"\n        >\n          <template #default=\"scope\">\n            <EpFormItem\n              v-if=\"item.type || item.render\"\n              :form-data=\"scope.row\"\n              :table-scope=\"scope\"\n              v-bind=\"formItemProps(scope, item)\"\n            />\n            <template v-else>\n              {{ scope.row[item.prop] }}\n            </template>\n          </template>\n        </el-table-column>\n        <template v-for=\"name in slots\" #[name]=\"scope\">\n          <slot :name=\"name\" v-bind=\"scope\" />\n        </template>\n      </el-table>\n    </el-form>\n    <el-pagination\n      v-if=\"showPagination\"\n      v-model:current-page=\"pagination.pageNo\"\n      v-model:page-size=\"pagination.pageSize\"\n      :total=\"pagination.total\"\n      v-bind=\"paginationProps\"\n    />\n    <EpCustomColumn\n      v-if=\"customColumnModule\"\n      ref=\"customColumnRef\"\n      :module=\"customColumnModule\"\n      :api=\"customColumnApi\"\n      :save-api=\"customColumnSaveApi\"\n      :show-handler=\"false\"\n    />\n  </div>\n</template>\n<script setup lang=\"tsx\">\nimport { computed, useSlots, useTemplateRef } from 'vue'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport {\n  tableProps,\n  tableEmits,\n  expandTablePropsKeys,\n  tableEmitsKeys,\n} from './table'\nimport type { TableEmits } from './table'\nimport {\n  prepareProps,\n  prepareEvents,\n  prepareClassNames,\n  prepareStyles,\n} from '@el-plus/utils/props'\nimport { EpFormItem } from '@el-plus/components/form'\nimport EpCustomColumn from '@el-plus/components/custom-column'\nimport type { CustomColumnInstance } from '@el-plus/components/custom-column'\nimport { useTable, useTableColumn, useTableFormItem } from './use-table'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nconst { t } = useLocale()\ndefineOptions({\n  name: 'EpTable',\n  inheritAttrs: false,\n})\nconst bem = createNameSpace('table')\nconst props = defineProps(tableProps)\nconst emit = defineEmits(tableEmits!)\n\nconst slots = computed(() => {\n  return Object.keys(useSlots())\n  // .filter((item) => item !== 'default')\n})\nconst customAttrs = computed(() => {\n  return {\n    'row-key': props.rowKey || 'id',\n    ...prepareProps(props, ['modelValue', ...expandTablePropsKeys]),\n    // 'tooltip-effect': 'light',\n    size: 'small',\n    data: data.value,\n    ...prepareEvents<NonNullable<TableEmits>>(emit, tableEmitsKeys!),\n  }\n})\nconst {\n  pagination,\n  paginationProps,\n  data,\n  validate,\n  resetFields,\n  clearValidate,\n  clearSelection,\n  getSelectionRows,\n  loading,\n  search,\n  elFormRef,\n  elTableRef,\n  formatActionButtons,\n  customColumns,\n} = useTable(props)\nconst { columnList } = useTableColumn(props, data, customColumns)\nconst { formItemProps } = useTableFormItem(props)\nconst customColumnRef = useTemplateRef<CustomColumnInstance>('customColumnRef')\n\ndefineExpose({\n  elFormRef,\n  elTableRef,\n  validate,\n  resetFields,\n  clearValidate,\n  clearSelection,\n  getSelectionRows,\n  search,\n  openCustomColumnDialog: () => {\n    customColumnRef.value?.open()\n  },\n})\n</script>\n","import Table from './src/table.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpTable = withInstall(Table)\nexport default EpTable\nexport * from './src/table'\nexport type TableInstance = InstanceType<typeof Table>\n\n","import type { PropType, ExtractPublicPropTypes } from 'vue'\nimport { apiProps } from '@el-plus/utils/props'\nimport { formProps } from '@el-plus/components/form'\nimport { buttonsProps } from '@el-plus/components/buttons'\nimport type { ButtonProps } from '@el-plus/components/buttons'\nimport { tableProps } from '@el-plus/components/table'\nimport { customColumnProps } from '@el-plus/components/custom-column'\n\nexport const searchListPageProps = {\n  ...apiProps,\n  // 自定义列模块\n  customColumnModule: {\n    ...customColumnProps.module,\n  },\n  customColumnApi: {\n    ...customColumnProps.api,\n  },\n  customColumnSaveApi: {\n    ...customColumnProps.saveApi,\n  },\n  showOperationColumn: Boolean, // 是否显示操作列\n  // 表单列表\n  formItemList: {\n    ...formProps.formItemList,\n  },\n  // 左侧按钮\n  leftButtons: {\n    type: Array as PropType<ButtonProps<any[]>[]>,\n    default: () => [],\n  },\n  // 表格列\n  columns: {\n    ...tableProps.columns,\n  },\n  // 列最小宽度\n  minWidth: {\n    ...tableProps.minWidth,\n  },\n  // 操作列宽度\n  actionColWidth: {\n    ...tableProps.actionColWidth,\n  },\n  // 操作列\n  actionButtons: {\n    ...tableProps.actionButtons,\n  },\n  // 格式化列\n  formatColumns: {\n    ...tableProps.formatColumns,\n  },\n  showSelectionCol: Boolean,\n  showSingleSelectionCol: Boolean,\n  showIndexCol: {\n    type: Boolean,\n    default: true,\n  },\n  add: Function, // 新增\n  clearBefore: Function, // 清空前钩子，返回 false 阻止清空\n  // templateDownloadApi: String, // 模板下载\n  // importApi: String, // 导入\n  // exportApi: String, // 导出\n  // 表格额外距离\n  offsetTop: {\n    type: Number,\n    default: 0,\n  },\n  formData: {\n    type: Object,\n    default: () => ({}),\n  },\n  tableProps: Object,\n  formProps: Object,\n  buttonsProps: Object,\n  name: String, // 权限前缀\n  // 是否初始化加载数据\n  isInitSearch: {\n    type: Boolean,\n    default: true,\n  },\n} as const\nexport type SearchListPageProps = ExtractPublicPropTypes<\n  typeof searchListPageProps\n>\nexport const searchListPageEmits = {\n  // 点击「清空」按钮后触发\n  clear: () => true,\n}\nexport type SearchListPageEmits = typeof searchListPageEmits\n","import { ref, onMounted, computed, useTemplateRef, nextTick } from 'vue'\nimport type { SetupContext } from 'vue'\nimport type { SearchListPageProps, SearchListPageEmits } from './search-list-page'\nimport type { ButtonsProps, ButtonProps } from '@el-plus/components/buttons'\nimport type { FormInstance } from '@el-plus/components/form'\nimport type { TableInstance } from '@el-plus/components/table'\nimport type { FormItemProp } from 'element-plus'\nimport { mergeListByKey } from '@el-plus/utils'\nimport { useLocale } from '@el-plus/hooks/use-locale'\n\nconst getAvailableHeight = (el: HTMLElement): number => {\n  const elRect = el.getBoundingClientRect()\n  let parent = el.parentElement\n  while (parent) {\n    const style = getComputedStyle(parent)\n    const height = style.height\n    if (height && height !== 'auto' && !height.endsWith('%')) {\n      const parentRect = parent.getBoundingClientRect()\n      const paddingBottom = parseFloat(style.paddingBottom) || 0\n      return parentRect.bottom - elRect.top - paddingBottom\n    }\n    if (parent === document.documentElement || parent === document.body) {\n      break\n    }\n    parent = parent.parentElement\n  }\n  return window.innerHeight - elRect.top\n}\n\nexport const useSearchListPage = (\n  props: SearchListPageProps,\n  config = {},\n  emit?: SetupContext<SearchListPageEmits>['emit'],\n) => {\n  const rootRef = useTemplateRef<HTMLDivElement>('rootRef')\n  const topRef = useTemplateRef<HTMLDivElement>('topRef')\n  const middleRef = useTemplateRef<HTMLDivElement>('middleRef')\n  const { calcTableHeight, tableProps, tableRef } = useTable(props, config, rootRef, topRef, middleRef)\n  const { formProps, validate, resetFields, formRef } = useForm(props, {\n    calcTableHeight,\n  })\n  const { buttonsProps, searchButtons, search, reset } = useButtons(props, {\n    validate,\n    resetFields,\n    tableRef,\n    emit,\n  })\n  return {\n    formProps,\n    tableProps,\n    buttonsProps,\n    searchButtons,\n    search,\n    reset,\n    tableRef,\n    formRef,\n    beforeSearch: async () => {\n      if (!formRef.value) {\n        await nextTick()\n      }\n      await validate()\n    }\n  }\n}\nconst useTable = (props: SearchListPageProps, config, rootRef: ReturnType<typeof useTemplateRef<HTMLDivElement>>, topRef: ReturnType<typeof useTemplateRef<HTMLDivElement>>, middleRef: ReturnType<typeof useTemplateRef<HTMLDivElement>>) => {\n  const instanceName = 'tableRef'\n  const tableRef = useTemplateRef<TableInstance>(instanceName)\n  const tableHeight = ref(0)\n  const tableProps = computed(() => {\n    return {\n      ref: instanceName,\n      columns: props.columns,\n      showPagination: true,\n      height: tableHeight.value,\n      showIndexCol: props.showIndexCol,\n      showSelectionCol: props.showSelectionCol,\n      showSingleSelectionCol: props.showSingleSelectionCol,\n      actionButtons: props.actionButtons,\n      formatColumns: props.formatColumns,\n      api: props.api,\n      reqAfter: props.reqAfter,\n      reqBefore: props.reqBefore,\n      reqData: props.formData,\n      customColumnModule: props.customColumnModule,\n      customColumnApi: props.customColumnApi,\n      customColumnSaveApi: props.customColumnSaveApi,\n      minWidth: props.minWidth,\n      actionColWidth: props.actionColWidth,\n      ...props.tableProps,\n    }\n  })\n  const calcTableHeight = () => {\n    setTimeout(() => {\n      const topHeight = topRef.value?.offsetHeight ?? 0\n      const middleHeight = middleRef.value?.offsetHeight ?? 0\n      let paginationHeight = 0\n      if (tableProps.value.showPagination) {\n        const paginationEl = rootRef.value?.querySelector('.el-pagination') as HTMLElement | null\n        paginationHeight = paginationEl ? paginationEl.offsetHeight + 12 : 0\n      }\n      const containerHeight = rootRef.value\n        ? getAvailableHeight(rootRef.value)\n        : window.innerHeight\n\n      tableHeight.value =\n        containerHeight -\n        topHeight -\n        middleHeight -\n        paginationHeight -\n        props.offsetTop!\n    }, 0)\n  }\n\n  onMounted(calcTableHeight)\n  return {\n    tableRef,\n    tableProps,\n    calcTableHeight,\n  }\n}\nconst useForm = (props: SearchListPageProps, { calcTableHeight }) => {\n  const instanceName = 'formRef'\n  const formRef = useTemplateRef<FormInstance>(instanceName)\n  const formProps = computed(() => {\n    return {\n      ref: instanceName,\n      formItemList: props.formItemList,\n      isShowFold: true,\n      modelValue: props.formData,\n      ...props.formProps,\n      onToggleStatus: () => {\n        calcTableHeight()\n      },\n    }\n  })\n  // 校验\n  const validate = () => {\n    return formRef.value!.validate()\n  }\n  // 重置校验\n  const resetFields = (props: FormItemProp) => {\n    return formRef.value!.resetFields(props)\n  }\n  // 清理某个字段的表单验证信息\n  const clearValidate = (props: FormItemProp) => {\n    return formRef.value!.clearValidate(props)\n  }\n  return {\n    formProps,\n    formRef,\n    validate,\n    resetFields,\n    clearValidate,\n  }\n}\nconst useButtons = (\n  props: SearchListPageProps,\n  { validate, resetFields, tableRef, emit },\n) => {\n  const { t } = useLocale()\n  const defaultButtons: ButtonProps<any[]>[] = [\n    {\n      name: t('ep.searchListPage.add'),\n      prop: 'add',\n      permission: props.name ? `${props.name}:ADD` : '',\n      show: () => {\n        return !!props.add || !!props.leftButtons?.some((item) => item.prop === 'add')\n      },\n      type: 'primary',\n      onClick: () => {\n        props.add?.()\n      },\n    },\n    // {\n    //   name: t('ep.searchListPage.templateDownload'),\n    //   prop: 'templateDownload',\n    //   permission: props.name ? `${props.name}:TEMPLATEDOWNLOAD` : '',\n    //   show: !!props.templateDownloadApi,\n    // },\n    // {\n    //   name: t('ep.searchListPage.import'),\n    //   prop: 'import',\n    //   permission: props.name ? `${props.name}:IMPORT` : '',\n    //   show: !!props.importApi,\n    // },\n    // {\n    //   name: t('ep.searchListPage.export'),\n    //   prop: 'export',\n    //   permission: props.name ? `${props.name}:EXPORT` : '',\n    //   show: !!props.exportApi,\n    // },\n  ]\n  const list = mergeListByKey(defaultButtons, props.leftButtons)\n  if (props.customColumnModule) {\n    list.push({\n      name: t('ep.customColumn.columnSettings'),\n      prop: 'customColumn',\n      type: 'primary',\n      onClick: () => {\n        tableRef.value.openCustomColumnDialog()\n      },\n    })\n  }\n  list.forEach((item: ButtonProps<any[]>) => {\n    if (item.onClick) {\n      const clickFn = item.onClick\n      item.onClick = () => {\n        const rows = tableRef.value.elTableRef.getSelectionRows()\n        clickFn(rows)\n      }\n    }\n    if (item.confirmBefore) {\n      const confirmBeforeFn = item.confirmBefore\n      item.confirmBefore = async () => {\n        const rows = tableRef.value.elTableRef.getSelectionRows()\n        await confirmBeforeFn(rows)\n      }\n    }\n  })\n\n  const buttonsProps = computed(() => {\n    return {\n      list,\n      ...props.buttonsProps,\n    }\n  })\n  // 搜索\n  const search = async (isInitSearch = false) => {\n    // await validate()\n    // 如果isInitSearch为true+reserveSelection为true，清空选中状态\n    if (isInitSearch && props.tableProps?.reserveSelection) {\n      tableRef.value.elTableRef.clearSelection()\n    }\n    tableRef.value.search(isInitSearch)\n  }\n  // 清空\n  const reset = async () => {\n    // 清空前钩子，返回 false 阻止清空\n    if (props.clearBefore && props.clearBefore() === false) return\n    resetFields()\n    search(true)\n    emit?.('clear')\n  }\n  const searchButtons: ButtonsProps['list'] = [\n    {\n      name: t('ep.searchListPage.search'),\n      type: 'primary',\n      onClick: search.bind(null, true),\n    },\n    {\n      name: t('ep.searchListPage.clear'),\n      onClick: reset,\n    },\n  ]\n  return {\n    buttonsProps,\n    searchButtons,\n    search,\n    reset,\n  }\n}\n","<template>\n  <div\n    ref=\"rootRef\"\n    :class=\"[bem.b(), prepareClassNames()]\"\n    :style=\"{\n      ...prepareStyles(),\n    }\"\n  >\n    <div ref=\"topRef\">\n      <EpForm v-bind=\"formProps\" />\n    </div>\n    <div ref=\"middleRef\" :class=\"bem.e('middle')\">\n      <div :class=\"bem.e('middle-left')\">\n        <EpButtons v-bind=\"buttonsProps\" />\n      </div>\n      <div :class=\"bem.e('middle-right')\">\n        <EpButtons :list=\"searchButtons\" />\n      </div>\n    </div>\n    <slot name=\"tableBefore\"></slot>\n    <EpTable v-bind=\"tableProps\" :before-search=\"beforeSearch\" />\n  </div>\n</template>\n<script setup lang=\"ts\">\nimport { nextTick, ref } from 'vue'\nimport EpForm from '@el-plus/components/form'\nimport EpTable from '@el-plus/components/table'\nimport EpButtons from '@el-plus/components/buttons'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport {\n  prepareProps,\n  prepareEvents,\n  prepareClassNames,\n  prepareStyles,\n} from '@el-plus/utils/props'\nimport { searchListPageProps, searchListPageEmits } from './search-list-page'\nimport { useSearchListPage } from './use-search-list-page'\ndefineOptions({ name: 'EpSearchListPage' })\nconst bem = createNameSpace('search-list-page')\nconst props = defineProps(searchListPageProps)\nconst emit = defineEmits(searchListPageEmits)\n\nconst {\n  formProps,\n  buttonsProps,\n  searchButtons,\n  search,\n  reset,\n  tableRef,\n  formRef,\n  tableProps,\n  beforeSearch,\n} = useSearchListPage(props, {}, emit)\n\ndefineExpose({\n  search,\n  reset,\n  tableRef,\n  formRef,\n})\n</script>\n","import SearchListPage from './src/search-list-page.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpSearchListPage = withInstall(SearchListPage)\nexport default EpSearchListPage\nexport type SearchListPageInstance = InstanceType<typeof SearchListPage>\nexport * from './src/search-list-page'\n","import type { ExtractPropTypes, PropType, ExtractPublicPropTypes } from 'vue'\nimport {\n  selectProps as elSelectProps,\n  selectEmits as elSelectEmits,\n  type SelectProps as ElSelectProps,\n} from 'element-plus'\nimport { apiProps } from '@el-plus/utils/props'\n\nexport type SelectOption = NonNullable<ElSelectProps['options']>[number]\nexport const inheritSelectProps = {\n  ...elSelectProps,\n  clearable: {\n    ...elSelectProps.clearable,\n    default: true,\n  },\n} as const\nconst expandSelectProps = {\n  ...apiProps,\n  // 回显文本:异步 value 到达时,用 desc 构造占位项(只读)\n  desc: {\n    type: String,\n    default: '',\n  },\n  disabledOption: {\n    type: Function as PropType<(item: SelectOption) => boolean>,\n    default: () => false,\n  },\n  labelKey: {\n    type: String,\n    default: 'label',\n  },\n  valueKey: {\n    type: String,\n    default: 'value',\n  },\n  formatLabel: {\n    type: Function as PropType<(item: SelectOption) => string>,\n  },\n  // api模式生效\n  lazy: Boolean,\n  // option是否同时展示code label, 默认值展示label, 传string展示指定字段\n  codeInLabel: {\n    type: [String, Boolean] as PropType<boolean | string>,\n  },\n}\nexport const selectProps = {\n  ...inheritSelectProps,\n  ...expandSelectProps,\n} as const\nexport const expandSelectPropsKeys = Object.keys(expandSelectProps)\n\nexport type SelectProps = ExtractPropTypes<typeof selectProps>\nexport type SelectPropsPublic = ExtractPublicPropTypes<typeof selectProps>\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\nexport const selectEmits = {\n  ...elSelectEmits,\n  change: (\n    value: SelectProps['modelValue'],\n    item?: SelectOption | SelectOption[],\n  ) => true,\n}\n/* eslint-enable @typescript-eslint/no-unused-vars */\nexport type SelectEmits = typeof selectEmits\nexport const selectEmitsKeys = Object.keys(selectEmits)\n","import { ref ,computed} from 'vue'\nimport type { SetupContext } from 'vue'\nimport { useRequest } from '@el-plus/hooks/use-request'\nimport type { SelectProps, SelectOption, SelectEmits } from './select'\nexport function useSelect(\n  props: SelectProps,\n  emit: SetupContext<SelectEmits>['emit'],\n) {\n  let hasLoaded = false\n  // 已加载的选项(api 请求结果 / props.options / 搜索结果)\n  const loadedOptions = ref<SelectOption[]>([])\n  const { loading, requestFn } = useRequest({\n    api: props.api,\n    method: props.method,\n    reqData: props.reqData,\n    reqParams: props.reqParams,\n    reqBefore: props.reqBefore,\n    reqAfter: props.reqAfter,\n    cancelToken: props.remote,\n    hooks: {\n      success(data) {\n        type OptionArr = SelectOption[]\n        interface OptionObj {\n          list?: OptionArr\n          data?: OptionArr\n        }\n        if (Array.isArray(data)) {\n          loadedOptions.value = data as OptionArr\n        } else if (data && typeof data === 'object') {\n          const rawData = data as OptionObj\n          loadedOptions.value = rawData?.list || rawData?.data || []\n        } else {\n          loadedOptions.value = []\n        }\n        hasLoaded = true\n      },\n      fail(error) {\n        console.error(error)\n      },\n    },\n  })\n  // 回显占位项:value/desc 存在且不在已加载列表中时,补充一项\n  // 由 computed 自动响应 value/desc/loadedOptions 的变化,无需 watch\n  const echoOption = computed<SelectOption[]>(() => {\n    const v = props.modelValue\n    const d = props.desc\n    if ((v || v === 0) && d) {\n      const exists = loadedOptions.value.some(\n        (item: SelectOption) => item[props.valueKey] === v,\n      )\n      if (!exists) {\n        return [{ [props.labelKey]: d, [props.valueKey]: v }]\n      }\n    }\n    return []\n  })\n  // 最终下拉项 = 回显占位 + 已加载\n  const customOptions = computed<SelectOption[]>(() => [\n    ...echoOption.value,\n    ...loadedOptions.value,\n  ])\n  // 加载下拉列表(只负责加载,不处理回显)\n  const loadOptions = () => {\n    if (props.api) {\n      if (!props.lazy && !props.remote) {\n        requestFn!()\n      }\n    } else if (props.options?.length) {\n      loadedOptions.value = props.options\n    }\n  }\n  // 获取选中项\n  const getSelectItem = (value: SelectProps['modelValue']) => {\n    if (Array.isArray(value)) {\n      if (!customOptions.value) return []\n      return customOptions.value.filter((item: SelectOption) => {\n        return value.indexOf(item[props.valueKey]) > -1\n      })\n    }\n    if (!customOptions.value) return {}\n    return (\n      customOptions.value.find((item: SelectOption) => {\n        return item[props.valueKey] === value\n      }) || {}\n    )\n  }\n  const expandAttrs = computed(() => {\n    return {\n      loading: props.loading || loading?.value,\n      remoteMethod: (query: string) => {\n        if (!query) return\n        requestFn!({\n          $searchValue: query,\n        })\n      },\n      onChange(value: SelectProps['modelValue']) {\n        emit('change', value, getSelectItem(value))\n      },\n      onVisibleChange(visible: boolean) {\n        if (props.api && props.lazy && visible && !hasLoaded && !props.remote) {\n          requestFn!()\n        }\n        emit('visible-change', visible)\n      },\n    }\n  })\n  return {\n    customOptions,\n    loadOptions,\n    expandAttrs,\n  }\n}\n","<template>\n  <el-select\n    v-model=\"value\"\n    :class=\"`${bem.b()} ${prepareClassNames()}`\"\n    v-bind=\"customAttrs\"\n    :style=\"{\n      ...prepareStyles(),\n    }\"\n  >\n    <el-option\n      v-for=\"item in customOptions\"\n      :key=\"item[valueKey]\"\n      :class=\"bem.e('option')\"\n      :label=\"\n        item.formatLabel\n          ? item.formatLabel(item)\n          : formatLabel\n            ? formatLabel(item)\n            : item[labelKey]\n      \"\n      :value=\"item[valueKey]\"\n      :disabled=\"disabledOption(item)\"\n    >\n      <slot name=\"option\" :item=\"item\">\n        <template v-if=\"codeInLabel || codeInLabel === ''\">\n          <span style=\"float: left\">{{ item[labelKey] }}</span>\n          <span\n            style=\"\n              float: right;\n              color: var(--el-text-color-secondary);\n              font-size: 13px;\n            \"\n          >\n            {{\n              item[\n                typeof codeInLabel === 'string' && codeInLabel\n                  ? codeInLabel\n                  : valueKey\n              ]\n            }}\n          </span>\n        </template>\n      </slot>\n    </el-option>\n    <template v-for=\"name in slots\" #[name]=\"scope\">\n      <slot :name=\"name\" v-bind=\"scope\" />\n    </template>\n  </el-select>\n</template>\n<script setup lang=\"ts\">\nimport { computed, useSlots, watch } from 'vue'\nimport {\n  selectProps,\n  selectEmits,\n  expandSelectPropsKeys,\n  selectEmitsKeys,\n} from './select'\nimport type { SelectProps, SelectEmits } from './select'\nimport {\n  prepareProps,\n  prepareEvents,\n  prepareClassNames,\n  prepareStyles,\n} from '@el-plus/utils/props'\nimport { useSelect } from './use-select'\nimport { createNameSpace } from '@el-plus/utils/bem'\ndefineOptions({\n  name: 'EpSelect',\n  inheritAttrs: false,\n})\nconst bem = createNameSpace('select')\nconst props = defineProps(selectProps)\nconst emit = defineEmits(selectEmits)\nconst slots = computed(() => {\n  return Object.keys(useSlots())\n})\n\nconst { customOptions, loadOptions, expandAttrs } = useSelect(props, emit)\nconst value = defineModel<SelectProps['modelValue']>()\nconst customAttrs = computed(() => {\n  return {\n    ...prepareProps(props, ['modelValue', 'desc', ...expandSelectPropsKeys]),\n    ...prepareEvents<SelectEmits>(emit, selectEmitsKeys),\n    ...expandAttrs.value,\n  }\n})\n// 回显由 echoOption computed 自动处理,这里只负责加载选项\nloadOptions()\nwatch(\n  () => props.options,\n  () => {\n    loadOptions()\n  },\n  {\n    deep: true,\n  },\n)\n</script>\n","import Select from './src/select.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpSelect = withInstall(Select)\nexport default EpSelect\nexport * from './src/select'\n","import type { ExtractPublicPropTypes } from 'vue'\nimport { buttonsProps } from '@el-plus/components/buttons'\n\nexport const titleProps = {\n  // 右侧按钮\n  buttons: {\n    ...buttonsProps.list,\n  },\n  // 标题名称\n  title: String,\n  // 是否显示展开折叠\n  showDownUp: {\n    type: Boolean,\n    default: false,\n  },\n} as const\nexport type TitleProps = ExtractPublicPropTypes<typeof titleProps>\nexport const titleEmits = {\n  toggle: (expanded: boolean) => true,\n}\nexport type TitleEmits = typeof titleEmits\n","import { useToggle } from '@vueuse/core'\nimport { onMounted } from 'vue'\nimport { getParentEl, getChildEl } from '@el-plus/utils'\nimport { ref, computed, useTemplateRef, type SetupContext } from 'vue'\nimport type { titleEmits } from './title'\nexport const useTitle = (emit: SetupContext<typeof titleEmits>['emit']) => {\n  const [value, toggle] = useToggle(true)\n  const expanded = value\n  const contentRef = useTemplateRef<HTMLElement>('contentRef')\n  onMounted(() => {\n    contentRef.value!.addEventListener('transitionend', (e) => {\n      if (e.propertyName === 'max-height') {\n        if (!expanded.value) {\n          // 收起动画结束后隐藏\n          contentRef.value!.style.display = 'none'\n        } else {\n          contentRef.value?.style.removeProperty('max-height')\n        }\n      }\n    })\n  })\n\n  const toggleState = (e: MouseEvent) => {\n    let contentHeight = getContentHeight(e.target as HTMLElement) + 'px'\n    if (expanded.value) {\n      contentRef.value!.style.maxHeight = contentHeight\n    } else {\n      contentRef.value?.style.removeProperty('display')\n      contentHeight = getContentHeight(e.target as HTMLElement) + 'px'\n    }\n    requestAnimationFrame(() => {\n      contentRef.value!.style.maxHeight = expanded.value ? '0' : contentHeight\n      toggle()\n      emit('toggle', expanded.value)\n    })\n  }\n  // 获取高度\n  const getContentHeight = (target: HTMLElement) => {\n    const parentEl = getParentEl(target, 'ep-title')!\n    const contentEl = getChildEl(parentEl, 'ep-title__content')\n    return contentEl?.scrollHeight || 0\n  }\n  return {\n    expanded,\n    toggleState,\n  }\n}\n","<template>\n  <div\n    :class=\"[bem.b(), bem.is('expanded', expanded), prepareClassNames()]\"\n    :style=\"{\n      ...prepareStyles(),\n    }\"\n  >\n    <div :class=\"bem.e('header')\">\n      <div :class=\"bem.e('title')\">\n        <slot name=\"title-prepend\"></slot>\n        <slot name=\"title\" :title=\"title\">\n          {{ title }}\n        </slot>\n        <div v-if=\"showDownUp\" :class=\"bem.e('toggle')\" @click=\"toggleState\">\n          {{ expanded ? t('ep.title.collapse') : t('ep.title.expand') }}\n          <el-icon>\n            <ArrowDown />\n          </el-icon>\n        </div>\n        <slot name=\"title-append\"></slot>\n      </div>\n      <div :class=\"bem.e('buttons')\">\n        <slot name=\"buttons-prepend\"></slot>\n        <EpButtons :list=\"buttons\" />\n        <slot name=\"buttons-append\"></slot>\n      </div>\n    </div>\n    <div\n      ref=\"contentRef\"\n      :class=\"[bem.e('content'), bem.is('expanded', expanded)]\"\n    >\n      <slot></slot>\n      <!-- <div :class=\"[bem.e('content-inner')]\">\n      </div> -->\n    </div>\n  </div>\n</template>\n<script setup lang=\"ts\">\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { titleProps, titleEmits } from './title'\nimport { prepareClassNames, prepareStyles } from '@el-plus/utils/props'\nimport EpButtons from '@el-plus/components/buttons'\nimport { useTitle } from './use-title'\nimport { ArrowDown } from '@element-plus/icons-vue'\nimport { ElIcon } from 'element-plus'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nconst { t } = useLocale()\ndefineOptions({\n  name: 'EpTitle',\n  inheritAttrs: false,\n})\nconst bem = createNameSpace('title')\nconst props = defineProps(titleProps)\nconst emit = defineEmits(titleEmits)\nconst { expanded, toggleState } = useTitle(emit)\n</script>\n","import Title from './src/title.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpTitle = withInstall(Title)\nexport default EpTitle\nexport * from './src/title'\n\n","import type { ExtractPropTypes, PropType } from 'vue'\nimport { buttonsProps } from '@el-plus/components/buttons'\nimport type { AttachmentProps } from '@el-plus/components/attachment'\nimport type { PageMode } from '@el-plus/hooks/use-navigation'\nexport type defaultButtonsProps =\n  | 'edit'\n  | 'save'\n  | 'cancel'\n  | 'refresh'\n  | 'auditLog'\n\nexport const headerProps = {\n  // 页面模式\n  mode: {\n    type: String as PropType<PageMode>,\n  },\n  allowBack: {\n    type: Boolean,\n    default: true,\n  },\n  buttons: {\n    ...buttonsProps.list,\n  },\n  name: String, // 权限前缀\n  // 要展示的默认按钮\n  defaultButtons: {\n    type: Array as PropType<defaultButtonsProps[]>,\n  },\n  // 工作流id\n  workflowId: String,\n  // 是否显示附件按钮\n  isShowAttachmentButton: {\n    type: Boolean,\n    default: false,\n  },\n  // 附件列表\n  fileList: {\n    type: Array as PropType<Record<string, any>[]>,\n    default: () => [],\n  },\n  attachmentProps: {\n    type: Object as PropType<AttachmentProps>,\n    default: () => {},\n  },\n} as const\nexport type HeaderProps = ExtractPropTypes<typeof headerProps>\n\nexport const headerEmits = {}\nexport type HeaderEmits = typeof headerEmits\n","import { useRouter, useRoute } from 'vue-router'\nimport { computed } from 'vue'\nimport type { NavigationConfig } from '@el-plus/utils'\nimport * as qs from 'qs'\nexport type PageMode = 'add' | 'edit' | 'browse'\n\nexport interface Config {\n  // mode变化时调用\n  onModeChange?: (mode: PageMode) => void\n}\n\nexport const useNavigation = (config: Config = {}) => {\n  const { onModeChange } = config\n  const router = useRouter()\n  const route = useRoute()\n  /**\n   *  打开saas窗口\n   * @param id  菜单id\n   * @param name  路由模块name, 适用于内部跳转\n   * @param title  菜单名称,适用于传外部url跳转\n   * @param url  菜单url\n   * @param query  url参数\n   */\n  const $goto = (r: NavigationConfig) => {\n    const item: NavigationConfig = {\n      id: Date.now(),\n      name: '',\n      url: '',\n    }\n    const openTab = window.parent.openMenuSelect\n\n    if (r.url) {\n      item.url = r.url\n      item.name = r.name\n      if (openTab) {\n        openTab(item)\n      } else {\n        window.open(item.url)\n      }\n      return\n    }\n    const routes = router.getRoutes() || []\n\n    const projectRootPath = window.location.pathname\n\n    const findRoute = (routes, distRoute) => {\n      let queen = [...routes]\n\n      while (queen.length) {\n        const first = queen.shift()\n        if (first.children) {\n          queen = queen.concat(first.children)\n        }\n\n        if (first.name == distRoute.name) {\n          return first\n        }\n      }\n    }\n    const route = findRoute(routes, r)\n\n    if (route) {\n      item.id = r.id || item.id\n\n      item.name =\n        r.title ||\n        (window.$hxt ? window.$hxt(route.meta.title) : route.meta.title)\n\n      item.url = `${projectRootPath}#${route.path}?${qs.stringify(r.query, { encode: false })}`\n\n      if (openTab) {\n        openTab(item)\n      } else {\n        router.push(r)\n      }\n    } else {\n      console.error('没有找到对应的路由')\n    }\n  }\n\n  const $closeTag = () => {\n    if (!window.parent.selectedRouterTags) {\n      return\n    }\n    const currentRouterTagIndex = window.parent.currentRouterTagIndex!\n    const preIndex = window.parent.currentRouterTagIndex! - 1\n    const currentTag = window.parent.selectedRouterTags[currentRouterTagIndex]\n    const preTag = window.parent.selectedRouterTags[preIndex]\n    window.parent?.closeTag?.(currentTag)\n    window.parent?.openMenuSelect?.(preTag)\n  }\n  const mode = computed(() => {\n    return route.query.mode as PageMode\n  })\n  const isBrowse = computed(() => mode.value === 'browse')\n  const isEdit = computed(() => mode.value === 'edit')\n  const isAdd = computed(() => mode.value === 'add')\n  // 修改mode\n  const setMode = (newMode: PageMode, callBack?: (mode: PageMode) => void) => {\n    router.replace({\n      query: {\n        ...route.query,\n        mode: newMode,\n      },\n    })\n    if (callBack) {\n      callBack(newMode)\n    } else {\n      onModeChange?.(newMode)\n    }\n  }\n  return {\n    $goto,\n    $closeTag,\n    mode,\n    isBrowse,\n    isEdit,\n    isAdd,\n    setMode,\n  }\n}\n","import { computed } from 'vue'\nimport { useRouter } from 'vue-router'\nimport type { HeaderProps } from '@el-plus/components/header'\nimport type { ButtonsProps } from '@el-plus/components/buttons'\nimport { mergeListByKey, gotoTaskTrace } from '@el-plus/utils'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nimport { useNavigation } from '@el-plus/hooks/use-navigation'\nexport const useHeader = (props, emit) => {\n  const router = useRouter()\n  const isShowBack = computed(() => {\n    if (!props.allowBack) {\n      return false\n    }\n    if (window.parent.openMenuSelect) {\n      return false\n    }\n    return true\n  })\n  const goBack = () => {\n    router?.back()\n  }\n  return {\n    isShowBack,\n    goBack,\n  }\n}\nexport const useButtons = (props: HeaderProps, emit) => {\n  const { t } = useLocale()\n  const { mode: defaultMode } = useNavigation()\n  const mode = computed(() => {\n    return props.mode || defaultMode.value\n  })\n  let defaultButtons: ButtonsProps['list'] = [\n    {\n      name: t('ep.header.edit'),\n      prop: 'edit',\n      permission: props.name ? `${props.name}:UPDATE` : '',\n      disabled: () => {\n        return mode.value !== 'browse'\n      },\n    },\n    {\n      name: t('ep.header.save'),\n      prop: 'save',\n      permission: props.name ? `${props.name}:SAVE` : '',\n      disabled: () => {\n        return !(mode.value === 'edit' || mode.value === 'add')\n      },\n    },\n    {\n      name: t('ep.header.cancel'),\n      prop: 'cancel',\n      disabled: () => {\n        return mode.value !== 'edit'\n      },\n    },\n    {\n      name: t('ep.header.refresh'),\n      prop: 'refresh',\n      permission: props.name ? `${props.name}:REFRESH` : '',\n      disabled: () => {\n        return mode.value !== 'browse'\n      },\n    },\n    {\n      name: t('ep.header.approvalLog'),\n      prop: 'approvalLog',\n      permission: props.name ? `${props.name}:APPROVALLOG` : '',\n      show: () => {\n        return !!props.workflowId\n      },\n      onClick: () => {\n        gotoTaskTrace(props.workflowId!)\n      },\n    },\n  ]\n  // 过滤要显示的\n  if (props.defaultButtons?.length) {\n    defaultButtons = defaultButtons.filter((item) => {\n      return props.defaultButtons!.some((item1) => item1 === item.prop)\n    })\n  }else if(props.defaultButtons?.length===0){\n    defaultButtons = []\n  }\n  const buttons = mergeListByKey(defaultButtons, props.buttons)\n  return {\n    buttons,\n  }\n}\n","import type { ExtractPublicPropTypes, PropType } from 'vue'\nimport { tableProps } from '@el-plus/components/table'\nimport type { PageMode } from '@el-plus/hooks/use-navigation'\nimport type {Permission} from '@el-plus/directives/permission'\nexport const attachmentProps = {\n  // 格式化列\n  formatColumns: {\n    ...tableProps.formatColumns,\n  },\n  // 页面模式\n  mode: {\n    type: String as PropType<PageMode>,\n  },\n  // 展示模式\n  openType: {\n    type: String as PropType<'dialog' | 'normal'>,\n    default: 'dialog',\n  },\n  // 是否需要类型\n  isType: {\n    type: Boolean,\n    default: true,\n  },\n  // 是否需要备注\n  isNote: {\n    type: Boolean,\n    default: false,\n  },\n  // 是否需要打开弹窗按钮\n  isShowOpenDialogButton: {\n    type: Boolean,\n    default: false,\n  },\n  // 添加前校验\n  beforeAdd: {\n    type: Function as PropType<(fileItem: Record<string, any>) => boolean>,\n  },\n  // 权限\n  permission: {\n    type: String as PropType<Permission>,\n  },\n\n} as const\nexport type AttachmentProps = ExtractPublicPropTypes<typeof attachmentProps>\n","import { http, type AxiosResponse } from './http'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport { getEnv, getLocationEnv } from './env'\nimport { encode} from 'js-base64'\n/**\n *  获取全路径\n * @param filePath 附件地址\n * @returns  全路径\n */\n\nexport const getFullUrl = (filePath: string) => {\n  return filePath.indexOf('hongxinshop.com') > -1\n    ? filePath\n    : `${window.location.protocol}//${getEnv() === 'local' ? `${getLocationEnv()}-hxjf.hongxinshop.com` : window.location.host}/image/${filePath}`\n}\nconst downloadSrc = ({\n  src,\n  fileName,\n  blob,\n}: {\n  src: string\n  fileName: string\n  blob?: boolean\n}) => {\n  if (src) {\n    fileName = fileName || src.split('/')[src.split('/').length - 1]\n    const a = document.createElement('a')\n    a.style.display = 'none'\n    document.body.appendChild(a)\n    const event = new MouseEvent('click')\n    a.download = fileName\n    a.href = blob ? src : getFullUrl(src)\n\n    a.target = '_blank'\n    a.dispatchEvent(event)\n    document.body.removeChild(a)\n  }\n}\n\n// 下载文件\nexport async function downloadFile({\n  api = '',\n  blob,\n  data = {},\n  src,\n  fileName = '',\n  config = {},\n}: {\n  api?: string\n  blob?: boolean\n  data?: Record<string, any>\n  src?: string\n  fileName?: string\n  config?: Record<string, any>\n}) {\n  if (src) {\n    downloadSrc({ src, fileName })\n    return\n  }\n  http\n    .request<any, AxiosResponse>(api, {\n      method: config.method || 'post',\n      data,\n      loading: true,\n      responseType: blob ? 'blob' : undefined,\n      responseReturn: 'raw',\n      ...config,\n    })\n    .then((res) => {\n      const { headers } = res\n      if (Object.prototype.toString.call(res.data) === '[object Object]' && !res.data?.success) {\n        return ElMessage.error(res.data.msg)\n      }\n      const data = blob?res.data:res.data?.data || res.data?.data?.url || ''\n      const lowerHeaders = {}\n      for (const key in headers) {\n        lowerHeaders[key.toLowerCase()] = headers[key]\n      }\n      let src = ''\n      if (blob) {\n        const contentDisposition = lowerHeaders['content-disposition'] || ''\n        fileName =\n          fileName ||\n          decodeURIComponent(contentDisposition.split('filename=')[1])\n        const blob = new Blob([data], {\n          type: headers['content-type'],\n        })\n        src = window.URL.createObjectURL(blob)\n        setTimeout(() => window.URL.revokeObjectURL(src), 100) // 释放内存\n      } else {\n        src = data\n      }\n      downloadSrc({ src, fileName, blob })\n    })\n}\n\n// 导入文件\nexport interface ImportFileOptions {\n  accept?: string\n  multiple?: boolean\n  fieldName?: string\n  api?: string\n  failedFileName?: string // 导入失败时提示的文件名\n  extraData?: Record<string, any> // 随文件一同发送的其他表单数据\n}\nexport const importFile = async ({\n  accept = '*',\n  multiple = false,\n  fieldName = 'file',\n  failedFileName = '',\n  extraData = {},\n  api = '',\n}: ImportFileOptions) => {\n  return new Promise<Record<string, any>>((resolve, reject) => {\n    const input = document.createElement('input')\n    input.type = 'file'\n    input.accept = accept\n    input.multiple = multiple\n    const formData = new FormData()\n    Object.keys(extraData).forEach((key) => {\n      formData.append(key, extraData[key])\n    })\n    input.onchange = async (event: Event) => {\n      const target = event.target as HTMLInputElement\n      const files = target.files\n      if (files && files.length > 0) {\n        if (!multiple) {\n          formData.append(fieldName, files[0])\n        } else {\n          Array.from(files).forEach((file, index) => {\n            formData.append(`${fieldName}${index}`, file)\n          })\n        }\n        try {\n          const { data } = await http.request<any, AxiosResponse>(api, {\n            method: 'post',\n            data: formData,\n            loading: true,\n            responseReturn: 'raw',\n            transformRequest: [\n              function (data) {\n                return data\n              },\n            ],\n          })\n          if (data.success) {\n            return resolve(data.data)\n          }\n          if (data.code === -2) {\n            const fileName =\n              failedFileName ||\n              data.data.split('/')[data.data.split('/').length - 1]\n            const url = `${window.location.origin}/image/${data.data}`\n            const failedHtml = `<div style=\"word-break: break-all;\">失败详情：<a style=\"color:#409EFF;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap\" title=\"${url}\" href=\"${url}\" download=\"${fileName}\">${url}</a></div>`\n            ElMessageBox.alert(failedHtml, '提示', {\n              confirmButtonText: '确定',\n              type: 'error',\n              dangerouslyUseHTMLString: true,\n            })\n            return\n          }\n          return ElMessage.error(data.msg)\n        } catch (error) {\n          console.error(error)\n        }\n        input.onchange = null\n      }\n    }\n    input.click()\n  })\n}\n\n// 预览文件\nexport const previewFile = (url: string) => {\n  url = getFullUrl(url)\n  const origin = getFullUrl('').replace('/image/', '')\n  const previewUrl = `${origin}/kfv/onlinePreview?url=${encode(url)}`\n  window.open(previewUrl, '_blank')\n}\n","import { ref, computed, useTemplateRef } from 'vue'\nimport { useNavigation } from '@el-plus/hooks/use-navigation'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nimport { downloadFile, previewFile, importFile } from '@el-plus/utils/file'\nimport { Cookies } from '@el-plus/utils/cookie'\nimport type { TableInstance } from '@el-plus/components/table'\n\nexport const useAttachment = (props, { data }) => {\n  const { mode: defaultMode } = useNavigation()\n  const { t } = useLocale()\n  const mode = computed(() => {\n    return props.mode || defaultMode.value\n  })\n  const tableRef = useTemplateRef<TableInstance>('tableRef')\n  const isNormalOpen = props.openType === 'normal'\n  const isDialogOpen = props.openType === 'dialog'\n\n  // 待确认的附件列表\n  let toBeConfirmData: Record<string, any>[] = []\n  // 待删除的附件列表\n  let toBeDeleteData: {\n    [key: number]: Record<string, any> // key要存储原来索引以便保留原顺序\n  } = {}\n  const actionButtons = ref<any>([\n    {\n      name: t('ep.attachment.download'),\n      onClick({ row }) {\n        downloadFile({\n          src: row.filePath,\n          fileName: row.originalFilename || row.originalFileName,\n        })\n      },\n    },\n    {\n      name: t('ep.attachment.delete'),\n      disabled: () => {\n        return mode.value === 'browse'\n      },\n      onClick: ({ $index, row }) => {\n        if (isDialogOpen) {\n          // 待删除的附件列表\n          toBeDeleteData[$index] = row\n        }\n        data.value.splice($index, 1)\n      },\n    },\n  ])\n  const columns = ref([\n    {\n      label: t('ep.attachment.attachmentType'),\n      prop: 'type',\n      type: 'EpSelect',\n      required: true,\n      show: () => props.isType,\n      props: {\n        desc: ({ row }) => {\n          return row.typeDesc\n        },\n      },\n    },\n    {\n      label: t('ep.attachment.fileName'),\n      prop: 'originalFilename',\n      type: 'EpLink',\n      onClick({ row }) {\n        previewFile(row.filePath)\n      },\n    },\n    {\n      label: t('ep.attachment.creator'),\n      prop: 'createBy',\n    },\n    {\n      label: t('ep.attachment.createTime'),\n      prop: 'createTime',\n    },\n    {\n      label: t('ep.attachment.description'),\n      prop: 'note',\n      type: 'EpInput',\n      show: () => props.isNote,\n    },\n  ])\n  const addAttachment = async () => {\n    toBeConfirmData = []\n    const fileData = await importFile({\n      api: 'api-f/fast/files/save',\n      extraData: {\n        createBy: Cookies.get('accountName') || '',\n      },\n    })\n    fileData.fileId = fileData.id\n    delete fileData.id\n    if (isDialogOpen) {\n      // 待确认的附件列表\n      toBeConfirmData.push(fileData)\n    }\n    if (props.beforeAdd) {\n      await props.beforeAdd?.(fileData)\n    }\n    data.value.push(fileData)\n  }\n  // 确认\n  const onConfirm = async (resolve) => {\n    await tableRef.value?.validate()\n    resolve(data.value)\n    toBeConfirmData = []\n    toBeDeleteData = {}\n  }\n  // 取消\n  const onCancel = (resolve) => {\n    if (toBeConfirmData.length) {\n      // 找到待确认的附件\n      const index = data.value.findIndex((item) => {\n        return item.fileId === toBeConfirmData[0].fileId\n      })\n      if (index !== -1) {\n        // 删除待确认的附件\n        data.value.splice(index, 1)\n      }\n      // 清空待确认的附件列表\n      toBeConfirmData = []\n    }\n    if (Object.keys(toBeDeleteData).length) {\n      // 找到待删除的附件在原位置插入\n      Object.keys(toBeDeleteData).forEach((oldIndex) => {\n        data.value.splice(Number(oldIndex), 0, toBeDeleteData[oldIndex])\n      })\n      // 清空待删除的附件列表\n      toBeDeleteData = {}\n    }\n    resolve()\n  }\n  const permission = computed(() => {\n    const arr = props.permission?.split(':') || []\n    return {\n      arg: arr[0],\n      value: arr[1]\n    }\n  })\n  return {\n    columns,\n    actionButtons,\n    addAttachment,\n    isNormalOpen,\n    isDialogOpen,\n    onConfirm,\n    onCancel,\n    mode,\n    permission\n  }\n}\n","<template>\n  <ElButton\n    v-if=\"props.isShowOpenDialogButton\"\n    type=\"primary\"\n    plain\n    size=\"small\"\n    :class=\"bem.e('handler')\"\n    @click=\"open\"\n    v-permission=\"permission\"\n  >\n    {{ t('ep.attachment.manageAttachment') }}({{ modelValue?.length || 0 }})\n  </ElButton>\n  <AttachmentDialog>\n    <div style=\"margin-bottom: 10px; text-align: right\">\n      <EpButtons\n        v-if=\"props.openType === 'dialog' && mode !== 'browse'\"\n        type=\"primary\"\n        :list=\"[\n          {\n            name: t('ep.attachment.addAttachment'),\n            type: 'primary',\n            onClick: addAttachment,\n          },\n        ]\"\n      />\n    </div>\n\n    <EpTable\n      ref=\"tableRef\"\n      :class=\"`${bem.b()} ${prepareClassNames()}`\"\n      :style=\"{\n        ...prepareStyles(),\n      }\"\n      :columns=\"columns\"\n      :action-buttons=\"actionButtons\"\n      actionColWidth=\"110\"\n      :data=\"modelValue\"\n      v-bind=\"props\"\n    >\n    </EpTable>\n  </AttachmentDialog>\n</template>\n<script setup lang=\"ts\">\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { prepareClassNames, prepareStyles } from '@el-plus/utils/props'\nimport { attachmentProps } from './attachment'\nimport EpTable from '@el-plus/components/table'\nimport { useAttachment } from './use-attachment'\nimport type { TableProps } from '@el-plus/components/table'\nimport { useDialog } from '@el-plus/hooks/dialog/use-dialog'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nimport { ElButton } from 'element-plus'\nimport { vPermission } from '@el-plus/directives'\n\nconst { t } = useLocale()\ndefineOptions({\n  name: 'EpAttachment',\n  inheritAttrs: false,\n})\nconst bem = createNameSpace('attachment')\nconst props = defineProps(attachmentProps)\nconst modelValue = defineModel<TableProps['data']>()\nconst {\n  columns,\n  actionButtons,\n  addAttachment,\n  isNormalOpen,\n  permission,\n  onConfirm,\n  onCancel,\n  mode,\n} = useAttachment(props, {\n  data: modelValue,\n})\nconst AttachmentDialog = useDialog({\n  width: isNormalOpen ? '' : 850,\n  center: true,\n  title: isNormalOpen ? '' : t('ep.attachment.manageAttachment'),\n  modal: !isNormalOpen,\n  showClose: !isNormalOpen,\n  showFooter: !isNormalOpen,\n  transition: isNormalOpen ? '' : 'dialog-fade',\n  modalClass: bem.em(\n    'dialog',\n    props.openType === 'normal' ? props.openType : '',\n  ),\n  templatePromiseClass: bem.e('promise'),\n  onConfirm: async (resolve) => {\n    onConfirm(resolve)\n  },\n  onCancel: (resolve) => {\n    onCancel(resolve)\n  },\n})\nconst open = AttachmentDialog.open\nif (isNormalOpen) {\n  open()\n}\ndefineExpose({\n  open,\n})\n</script>\n","import Attachment from './src/attachment.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpAttachment = withInstall(Attachment)\nexport default EpAttachment\nexport * from './src/attachment'\n","<template>\n  <div\n    :class=\"[bem.b(), prepareClassNames()]\"\n    :style=\"{\n      ...prepareStyles(),\n    }\"\n  >\n    <el-page-header v-if=\"isShowBack\" @back=\"goBack\">\n      <template #content> </template>\n    </el-page-header>\n    <EpButtons :list=\"buttons\" />\n    <EpAttachment\n      v-if=\"props.isShowAttachmentButton\"\n      :model-value=\"props.fileList\"\n      is-show-open-dialog-button\n      v-bind=\"props.attachmentProps\"\n    />\n  </div>\n</template>\n<script setup lang=\"ts\">\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { headerProps, headerEmits } from './header'\nimport { prepareClassNames, prepareStyles } from '@el-plus/utils/props'\nimport { useHeader, useButtons } from './use-header'\nimport { ElPageHeader } from 'element-plus'\nimport EpButtons from '@el-plus/components/buttons'\nimport EpAttachment from '@el-plus/components/attachment'\ndefineOptions({\n  name: 'EpHeader',\n  inheritAttrs: false,\n})\nconst bem = createNameSpace('header')\nconst props = defineProps(headerProps)\nconst emit = defineEmits(headerEmits)\nconst { isShowBack, goBack } = useHeader(props, emit)\nconst { buttons } = useButtons(props, emit)\n</script>\n","import Header from './src/header.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpHeader = withInstall(Header)\nexport default EpHeader\nexport * from './src/header'\n\n","import type { ExtractPropTypes } from 'vue'\nimport { datePickerProps as elDatePickerProps } from 'element-plus'\nimport type { DatePickerProps as ElDatePickerProps } from 'element-plus'\nimport { useLocale } from '@el-plus/hooks/use-locale'\nconst { t } = useLocale()\nexport const datePickerRangeProps = {\n  ...elDatePickerProps,\n  type: {\n    ...elDatePickerProps.type,\n    default: 'daterange',\n  },\n  valueFormat: {\n    ...elDatePickerProps.valueFormat,\n    default: 'x',\n  },\n  shortcuts: {\n    ...elDatePickerProps.shortcuts,\n    default: () => {\n      return [\n        {\n          text: t('ep.datePickerRange.lastWeek'),\n          value: () => {\n            const end = new Date()\n            const start = new Date()\n            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)\n            return [start, end]\n          },\n        },\n        {\n          text: t('ep.datePickerRange.lastMonth'),\n          value: () => {\n            const end = new Date()\n            const start = new Date()\n            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)\n            return [start, end]\n          },\n        },\n        {\n          text: t('ep.datePickerRange.lastThreeMonth'),\n          value: () => {\n            const end = new Date()\n            const start = new Date()\n            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)\n            return [start, end]\n          },\n        },\n      ]\n    },\n  },\n  rangeSeparator: {\n    ...elDatePickerProps.rangeSeparator,\n    default: '~',\n  },\n  startPlaceholder: {\n    ...elDatePickerProps.startPlaceholder,\n    default: () => {\n      return t('ep.datePickerRange.startTime')\n    },\n  },\n  endPlaceholder: {\n    ...elDatePickerProps.endPlaceholder,\n    default: () => {\n      return t('ep.datePickerRange.endTime')\n    },\n  },\n  size: {\n    ...elDatePickerProps.size,\n    default: 'default',\n  },\n} as const\nexport type DatePickerRangeProps = ExtractPropTypes<typeof datePickerRangeProps>\nexport const datePickerRangeEmits = {}\nexport type DatePickerRangeEmits = typeof datePickerRangeEmits\n","<template>\n  <el-date-picker\n    v-model=\"value\"\n    :class=\"`${bem.b()} ${prepareClassNames()}`\"\n    :style=\"{\n      ...prepareStyles(),\n    }\"\n    v-bind=\"customAttrs\"\n  />\n</template>\n<script setup lang=\"ts\">\nimport { computed, useSlots, watch, ref, onMounted } from 'vue'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { datePickerRangeProps, datePickerRangeEmits } from './date-picker-range'\nimport type {\n  DatePickerRangeProps,\n  DatePickerRangeEmits,\n} from './date-picker-range'\nimport {\n  prepareProps,\n  prepareEvents,\n  prepareClassNames,\n  prepareStyles,\n} from '@el-plus/utils/props'\n\ndefineOptions({\n  name: 'EpDatePickerRange',\n  inheritAttrs: false,\n})\nconst bem = createNameSpace('datePickerRange')\nconst props = defineProps(datePickerRangeProps)\nconst emit = defineEmits(datePickerRangeEmits)\nconst slots = computed(() => {\n  return Object.keys(useSlots())\n})\nconst value = defineModel<DatePickerRangeProps['modelValue']>()\nconst start = defineModel<DatePickerRangeProps['modelValue']>('start')\nconst end = defineModel<DatePickerRangeProps['modelValue']>('end')\nwatch(\n  value,\n  (newValue) => {\n    if (props.type === 'daterange') {\n      if (newValue && newValue[1]) {\n        const endDate = new Date(newValue[1])\n        newValue[1] = endDate.setHours(23, 59, 59, 0)\n      }\n      start.value = newValue ? newValue[0] : ''\n      end.value = newValue ? newValue[1] : ''\n    }\n  },\n  {\n    immediate: true,\n  },\n)\nconst customAttrs = computed(() => {\n  return {\n    ...prepareProps(props, ['modelValue']),\n    // ...prepareEvents<InputEmits>(emit, inputEmitsKeys),\n  }\n})\n</script>\n","import DatePickerRange from './src/date-picker-range.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpDatePickerRange = withInstall(DatePickerRange)\nexport default EpDatePickerRange\nexport * from './src/date-picker-range'\n","import type { ExtractPropTypes } from 'vue'\nimport { linkProps as elLinkProps } from 'element-plus'\n\nexport const linkProps = {\n  ...elLinkProps,\n  content: {\n    type: String,\n  },\n  type: {\n    ...elLinkProps.type,\n    default: 'primary',\n  },\n  underline: {\n    ...elLinkProps.underline,\n    default: 'never',\n  },\n} as const\nexport type LinkProps = ExtractPropTypes<typeof linkProps>\n","<template>\n  <el-link\n    :class=\"`${bem.b()} ${prepareClassNames()}`\"\n    :style=\"{\n      ...prepareStyles(),\n    }\"\n    v-bind=\"{\n      ...props,\n      ...attrs,\n    }\"\n  >\n    <template v-if=\"content\">\n      {{ content }}\n    </template>\n    <template v-for=\"name in slots\" #[name]=\"scope\">\n      <slot :name=\"name\" v-bind=\"scope\"> </slot>\n    </template>\n  </el-link>\n</template>\n<script setup lang=\"ts\">\nimport { computed, useSlots, useAttrs } from 'vue'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { linkProps } from './link'\nimport { prepareClassNames, prepareStyles } from '@el-plus/utils/props'\ndefineOptions({\n  name: 'EpLink',\n  inheritAttrs: false,\n})\nconst bem = createNameSpace('link')\nconst props = defineProps(linkProps)\nconst attrs = useAttrs()\nconst slots = computed(() => {\n  return Object.keys(useSlots())\n})\n</script>\n","import Link from './src/link.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpLink = withInstall(Link)\nexport default EpLink\nexport * from './src/link'\n","import type { ExtractPublicPropTypes, PropType } from 'vue'\n\nexport const componentType = ['bpm', 'address'] as const\nexport const uniVueProps = {\n  name: String, // 组件名字\n  type: String as PropType<(typeof componentType)[number]>, // 组件类型 bpm、 address\n} as const\nexport type UniVueProps = ExtractPublicPropTypes<typeof uniVueProps>\n","import { onMounted, ref, useAttrs, nextTick, useTemplateRef, watch } from 'vue'\nimport { http } from '@el-plus/utils/http'\nimport { componentType } from './uni-vue'\nimport axios from 'axios'\nimport { ElMessage, ElLoading } from 'element-plus'\n\nlet Vue2: any = null\nlet VueRouter3: any = null\n\nconst loadModules = async () => {\n  if (!Vue2) {\n    const vue2Module = await import('vue2')\n    Vue2 = vue2Module.default\n  }\n  if (!VueRouter3) {\n    const routerModule = await import('vue-router3')\n    VueRouter3 = routerModule.default\n  }\n}\n\nexport const useUniVue = (props, _emit) => {\n  const uniVue = useTemplateRef<HTMLElement>('uniVue')\n  const { type } = props\n  const loading = ref(true)\n  const isAddress = type === 'address'\n  const isBpm = type === 'bpm'\n  //   是否需要加载静态资源\n  const isLoadStatic = componentType.indexOf(type) > -1\n  const attrs = useAttrs()\n  const setupWindow = () => {\n    Vue2.use(VueRouter3)\n    if (!window.Vue) {\n      window.Vue = Vue2\n    }\n    // 地址\n    if (isAddress) {\n      if (!window.axios) {\n        window.axios = axios\n      }\n      if (!window.ElementUI) {\n        window.ElementUI = {\n          Message: ElMessage,\n          Loading: ElLoading,\n        }\n      }\n    }\n  }\n  const prepareVueAttributes = () => {\n    const events = {}\n    const _props = {} as Record<string, any>\n    Object.keys(attrs).forEach((key) => {\n      if (key.startsWith('on')) {\n        let eventName = key.slice(2) // 去掉 'on' 前缀\n        if (eventName.startsWith('Update:')) {\n          // 处理 v-model:xxx 事件，转换为 update:xxx\n          // 例如：onUpdate:modelValue -> update:modelValue、onUpdate:dialogFormData -> update:dialogFormData\n          eventName = 'update:' + eventName.slice(7)\n\n          // 如果是v-model, 转换为vue2对应的input\n          if (eventName === 'update:modelValue') {\n            eventName = 'input'\n          }\n        } else {\n          // 将驼峰命名转换为短横线命名\n          // 例如： onInitComplete-> init-complete (因为测试发现用initComplete不生效)\n          eventName = eventName.replace(/([A-Z])/g, '-$1').toLowerCase()\n          // 删除第一位的-\n          eventName = eventName.slice(1)\n        }\n        events[eventName] = attrs[key]\n      } else {\n        if (key === 'modelValue') {\n          // 处理 v-model转换为vue2的value\n          _props.value = attrs[key] // eslint-disable-line\n        } else {\n          _props[key] = attrs[key]\n        }\n      }\n    })\n    return {\n      on: events,\n      props: _props,\n    }\n  }\n\n  const cdn = '//j01.hongxinshop.com/'\n  const getStaticJsUrl = () => {\n    switch (type) {\n      case 'bpm':\n        return `${cdn}bpm-common/common/index.umd.min.js`\n      case 'address':\n        return `http://localhost:8001/dist/hx-address.js`\n        return `./hx-address.js`\n        return `${cdn}address/static/hx-address.js`\n      default:\n        return ''\n    }\n  }\n  const getStaticCssUrl = () => {\n    switch (type) {\n      case 'bpm':\n        return `/bpm-common/common/index.css`\n      case 'address':\n        return `/address/static/hx-address.css`\n      default:\n        return ''\n    }\n  }\n  const loadStaticJsResource = async () => {\n    const promises: Promise<void>[] = []\n\n    // 检查并加载element-ui.js（非bpm类型）\n    if (!isBpm && !window.ElementUIComponents) {\n      await new Promise((resolve, reject) => {\n        const script = document.createElement('script')\n        script.src = '/element-ui.js'\n        script.onload = resolve\n        script.onerror = reject\n        document.body.appendChild(script)\n      })\n    }\n\n    // 检查并加载原有的JS资源\n    let globalName\n    if (isAddress) {\n      globalName = 'hxAddress'\n    }\n    if (isBpm) {\n      globalName = 'index'\n    }\n\n    if (globalName && !window[globalName]) {\n      promises.push(\n        new Promise((resolve, reject) => {\n          const script = document.createElement('script')\n          script.src = getStaticJsUrl()\n          script.onload = () => resolve()\n          script.onerror = reject\n          document.body.appendChild(script)\n        }),\n      )\n    }\n\n    return Promise.all(promises)\n  }\n  const loadStaticCssResource = async () => {\n    const cssPromises: Promise<string>[] = []\n\n    // 为非bpm类型加载element-ui.css\n    if (!isBpm) {\n      cssPromises.push(\n        http\n          .request<string>('/index.css', {\n            responseReturn: 'raw',\n            baseURL: '',\n          })\n          .then((res) => res.data),\n      )\n    }\n\n    // 加载原有的CSS资源\n    const staticCssUrl = getStaticCssUrl()\n    if (staticCssUrl) {\n      cssPromises.push(\n        http\n          .request<string>(staticCssUrl, {\n            responseReturn: 'raw',\n          })\n          .then((res) => res.data),\n      )\n    }\n\n    const cssContents = await Promise.all(cssPromises)\n    return cssContents.join('\\n')\n  }\n  let instance\n  const setupInstance = async () => {\n    if (instance) {\n      return\n    }\n    await loadModules()\n    setupWindow()\n    const el = uniVue.value\n    const shadowRoot = el!.attachShadow({ mode: 'open' })\n    const container = document.createElement('div')\n    if (isLoadStatic) {\n      try {\n        loading.value = true\n        const [_res1, css] = await Promise.all([\n          loadStaticJsResource(),\n          loadStaticCssResource(),\n        ])\n        const style = document.createElement('style')\n        style.textContent = css\n        shadowRoot.appendChild(style)\n        if (isAddress && !document.querySelector('style[data-hx-address-style]')) {\n          const headStyle = document.createElement('style')\n          headStyle.textContent = css\n          headStyle.setAttribute('data-hx-address-style', 'true')\n          document.head.appendChild(headStyle)\n        }\n      } catch (error) {\n        console.log(error)\n      } finally {\n        loading.value = false\n      }\n    }\n    shadowRoot.appendChild(container)\n\n    instance = new Vue2({\n      el: container,\n      router: new VueRouter3(),\n      render: (h) => {\n        const { on: vue2Events, props: vue2Props } = prepareVueAttributes()\n        return h(props.name, {\n          props: vue2Props,\n          on: vue2Events,\n        })\n      },\n    })\n  }\n\n  const updateVue2Instance = () => {\n    if (!instance) return\n    const child = instance.$children[0]\n    if (child) {\n      const { props: vue2Props } = prepareVueAttributes()\n      Object.assign(child.$options.propsData, vue2Props)\n      if (child._props) {\n        Object.keys(vue2Props).forEach((key) => {\n          const newValue = vue2Props[key]\n          const oldValue = child._props[key]\n          if (newValue === oldValue && typeof newValue === 'object' && newValue !== null) {\n            const temp = {}\n            child._props[key] = temp\n          }\n          child._props[key] = newValue\n        })\n      }\n      child.$forceUpdate()\n    }\n    instance.$forceUpdate()\n  }\n\n  Object.keys(attrs).forEach((key) => {\n    if (!key.startsWith('on')) {\n      \n      watch(\n        () => attrs[key],\n        () => {\n          console.log(key,'key');\n          nextTick(() => {\n            try {\n              updateVue2Instance()\n            } catch (e) {\n              // 忽略更新异常\n            }\n          })\n        },\n        {\n          deep: true,\n        },\n      )\n    }\n  })\n\n  onMounted(() => {\n    setupInstance()\n  })\n\n  return {\n    loading,\n  }\n}\n","<template>\n  <el-skeleton\n    :class=\"bem.e('skeleton')\"\n    :loading=\"loading\"\n    style=\"background: #fff; padding: 5px 15px\"\n    :rows=\"1\"\n  />\n  <div\n    ref=\"uniVue\"\n    :class=\"`${bem.b()} ${prepareClassNames()}`\"\n    :style=\"{\n      ...prepareStyles(),\n    }\"\n  />\n</template>\n<script setup lang=\"ts\">\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { uniVueProps } from './uni-vue'\nimport { prepareClassNames, prepareStyles } from '@el-plus/utils/props'\nimport { ElSkeleton } from 'element-plus'\nimport { useUniVue } from './use-uni-vue'\ndefineOptions({\n  name: 'EpUniVue',\n  inheritAttrs: false,\n})\nconst bem = createNameSpace('uni-vue')\nconst props = defineProps(uniVueProps)\nconst emit = defineEmits<{\n  (e: `update:${string}`, value: any): void\n}>()\nconst { loading } = useUniVue(props, emit)\n</script>\n","import UniVue from './src/uni-vue.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpUniVue = withInstall(UniVue)\nexport default EpUniVue\nexport * from './src/uni-vue'\n","import dayjs from 'dayjs'\nexport const getUnifyTime = function (\n  date: string | number | Date,\n  format?: string,\n): string | number | null {\n  if (!date) return date === 0 ? null : date\n  if (format === 'date') {\n    format = 'YYYY-MM-DD'\n  } else if (format === 'time') {\n    format = 'YYYY-MM-DD HH:mm:ss'\n  }\n  if (format === 's') return dayjs(date).startOf('day').valueOf()\n  if (format === 'e') return dayjs(date).endOf('day').valueOf()\n  return format ? dayjs(date).format(format) : dayjs(date).valueOf()\n}\nexport { dayjs }\n","import type { ExtractPublicPropTypes } from 'vue'\nimport {getUnifyTime} from '@el-plus/utils/time'\nexport interface FooterInfoFieldConfig {\n  name: string\n  prop: string\n  formatter?: (value: any, modelValue: any) => string\n}\n\nexport const defaultFields: FooterInfoFieldConfig[] = [\n  {\n    name: '制单人',\n    prop: 'creator',\n    formatter: (value, modelValue) => `${modelValue.creator}/${modelValue.creatorName}`,\n  },\n  {\n    name: '创建时间',\n    prop: 'createTime',\n    // 如果有createTimestamp，用createTimestamp格式化\n    formatter: (value, modelValue) =>\n      modelValue.createTimestamp\n        ? getUnifyTime(modelValue.createTimestamp,'time')\n        : value,\n  },\n  {\n    name: '最新修改人',\n    prop: 'editor',\n    formatter: (value, modelValue) => `${modelValue.editor}/${modelValue.editorName}`,\n  },\n  {\n    name: '最新修改时间',\n    prop: 'editTime',\n    // 如果有editTimestamp，用editTimestamp格式化\n    formatter: (value, modelValue) =>\n      modelValue.editTimestamp\n        ? getUnifyTime(modelValue.editTimestamp,'time')\n        : value,\n  },\n]\n\n\nexport interface FooterInfoFieldMap {\n  [key: string]:\n  | ((value: any, modelValue: any) => string)\n  | {\n    name?: string\n    formatter: (value: any, modelValue: any) => string\n  }\n}\n\nexport const footerInfoProps = {\n  modelValue: {\n    type: Object as () => Record<string, any>,\n    default: () => ({}),\n  },\n  list: {\n    type: Array as () => FooterInfoFieldConfig[],\n    default: () => defaultFields,\n  },\n  fieldMap: {\n    type: Object as () => FooterInfoFieldMap,\n    default: () => ({}),\n  },\n} as const\n\nexport type FooterInfoProps = ExtractPublicPropTypes<typeof footerInfoProps>\n","<template>\n  <div :class=\"[bem.b(), prepareClassNames()]\" :style=\"{ ...prepareStyles() }\">\n    <div v-for=\"(field, index) in list\" :key=\"index\" :class=\"bem.e('item')\">\n      <span :class=\"bem.e('label')\">{{ getFieldName(field) }}</span>\n      <span :class=\"bem.e('value')\">{{ getFieldValue(field) }}</span>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { footerInfoProps, type FooterInfoFieldConfig } from './footer-info'\nimport { prepareClassNames, prepareStyles } from '@el-plus/utils/props'\n\ndefineOptions({\n  name: 'EpFooterInfo',\n  inheritAttrs: false,\n})\n\nconst bem = createNameSpace('footer-info')\nconst props = defineProps(footerInfoProps)\n\nconst getFieldName = (field: FooterInfoFieldConfig) => {\n  const fieldMapValue = props.fieldMap[field.prop]\n  if (\n    fieldMapValue &&\n    typeof fieldMapValue === 'object' &&\n    'name' in fieldMapValue\n  ) {\n    return fieldMapValue.name || field.name\n  }\n  return field.name\n}\n\nconst getFieldValue = (field: FooterInfoFieldConfig) => {\n  const fieldMapValue = props.fieldMap[field.prop]\n  if (fieldMapValue) {\n    if (typeof fieldMapValue === 'function') {\n      return fieldMapValue(props.modelValue[field.prop], props.modelValue)\n    }\n    if (typeof fieldMapValue === 'object' && 'formatter' in fieldMapValue) {\n      return fieldMapValue.formatter(\n        props.modelValue[field.prop],\n        props.modelValue,\n      )\n    }\n  }\n  if (field.formatter) {\n    return field.formatter(props.modelValue[field.prop], props.modelValue)\n  }\n  return props.modelValue[field.prop] || ''\n}\n</script>\n","import FooterInfo from './src/footer-info.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpFooterInfo = withInstall(FooterInfo)\nexport default EpFooterInfo\nexport * from './src/footer-info'\n","import type { Plugin } from 'vue'\nimport Buttons from '@el-plus/components/buttons'\nimport Form from '@el-plus/components/form'\nimport Input from '@el-plus/components/input'\nimport SearchListPage from '@el-plus/components/search-list-page'\nimport Select from '@el-plus/components/select'\nimport Table from '@el-plus/components/table'\nimport Title from '@el-plus/components/title'\nimport Header from '@el-plus/components/header'\nimport DatePickerRange from '@el-plus/components/date-picker-range'\nimport CustomColumn from '@el-plus/components/custom-column'\nimport Link from '@el-plus/components/link'\nimport Attachment from '@el-plus/components/attachment'\nimport UniVue from '@el-plus/components/uni-vue'\nimport FooterInfo from '@el-plus/components/footer-info'\n\nexport default [\n  Buttons,\n  Form,\n  Input,\n  SearchListPage,\n  Select,\n  Table,\n  Title,\n  Header,\n  DatePickerRange,\n  CustomColumn,\n  Link,\n  Attachment,\n  UniVue,\n  FooterInfo,\n] as Plugin[]\n","export default {\n  install(app) {\n    app.config.globalProperties.$test = 'test'\n  },\n}\n","import { useDialog } from './use-dialog'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport {\n  EpSearchListPage,\n  type SearchListPageInstance,\n} from '@el-plus/components/search-list-page'\nimport type { DialogOptions } from './use-dialog'\nimport type { SearchListPageProps } from '@el-plus/components/search-list-page'\nimport { reactive, ref, toRaw,unref, useTemplateRef, nextTick } from 'vue'\nconst bem = createNameSpace('choose-dialog')\nimport { useLocale } from '@el-plus/hooks/use-locale'\n\ntype Options = {\n  title?: string\n  dialogProps?: DialogOptions\n  multiple?: boolean\n} & SearchListPageProps\nexport const useChooseDialog = (options: Options = {}) => {\n  const { t } = useLocale()\n  const { dialogProps, title, multiple, ...rest } = options\n  const selections = ref([])\n  const showSingleSelectionCol = !multiple\n  const scopedSlots: DialogOptions['scopedSlots'] = {}\n  if (!showSingleSelectionCol) {\n    scopedSlots.footerPrepend = () => {\n      return (\n        <span class={bem.e('selected-count')}>\n          {t('ep.chooseDialog.selected')}\n          {selections.value.length}\n          {t('ep.chooseDialog.unit')}\n        </span>\n      )\n    }\n  }\n  const clearSelections = async () => {\n    selections.value = []\n    searchListPageRef.value?.tableRef?.clearSelection() // 清理表格选中\n  }\n  let searchListPageRef\n  return useDialog({\n    class: bem.b(),\n    width: '80%',\n    showFooter: !showSingleSelectionCol,\n    scopedSlots,\n    title,\n    onConfirm: (resolve) => {\n      resolve(JSON.parse(JSON.stringify(selections.value)))\n      clearSelections()\n    },\n    onCancel: async (resolve) => {\n      clearSelections()\n      resolve()\n    },\n    render: ({ resolve }) => {\n      if (!searchListPageRef) {\n        searchListPageRef =\n          useTemplateRef<SearchListPageInstance>('searchListPage')\n      }\n\n      const formData = rest.formData || reactive({})\n      return (\n        <EpSearchListPage\n          ref=\"searchListPage\"\n          {...{\n            showSelectionCol: multiple,\n            showSingleSelectionCol,\n            formData,\n            ...rest,\n            formProps: {\n              col: 3,\n              ...rest.formProps,\n            },\n            tableProps: {\n              height: 300,\n              ...rest.tableProps,\n              onSelectionChange: (newSel) => {\n                selections.value = newSel\n              },\n              onSingleSelectionChange: (newSel) => {\n                selections.value = newSel\n                resolve(toRaw(unref(selections)))\n              },\n            },\n          }}\n        />\n      )\n    },\n    ...dialogProps,\n  })\n}\n","import { useFormDialog } from './use-form-dialog'\nimport type { DialogOptions } from './use-dialog'\nimport type { FormItemProps } from '@el-plus/components/form'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport type { InputProps } from 'element-plus'\nconst bem = createNameSpace('confirm-dialog')\ntype Options = Partial<\n  {\n    title?: string\n    width?: string\n    dialogProps?: DialogOptions\n  } & TextareaProps &\n    TextareaFormItemProps\n>\ntype TextareaProps = Pick<\n  InputProps,\n  'rows' | 'maxlength' | 'minlength' | 'showWordLimit' | 'placeholder'\n>\ntype TextareaFormItemProps = Pick<FormItemProps, 'rules' | 'required'>\nexport const useConfirmDialog = (options: Options = {}) => {\n  const {\n    dialogProps = {},\n    width = '50%',\n    title,\n    /** TextareaProps */\n    rows = 5,\n    maxlength = 500,\n    minlength,\n    showWordLimit = true,\n    /** TextareaFormItemProps */\n    rules,\n    required = true,\n    placeholder,\n  } = options\n  const formItemList: FormItemProps[] = [\n    {\n      rules,\n      prop: 'value',\n      label: ' ',\n      required,\n      props: {\n        placeholder,\n        type: 'textarea',\n        rows,\n        maxlength,\n        minlength,\n        showWordLimit,\n      },\n    },\n  ]\n  return useFormDialog({\n    title,\n    width,\n    formItemList,\n    dialogProps: {\n      ...dialogProps,\n      class: bem.b(),\n      destroyOnClose: true,\n    },\n  })\n}\n","import { getUnifyTime, dayjs } from '@el-plus/utils/time'\nimport { Cookies } from '@el-plus/utils/cookie'\nimport { importFile, downloadFile, previewFile } from '@el-plus/utils/file'\n\nexport const useUtils = () => {\n  return {\n    getUnifyTime,\n    dayjs,\n    importFile,\n    downloadFile,\n    previewFile,\n    Cookies,\n  }\n}\n","import type { App, Plugin } from 'vue'\nimport components from './components'\nimport { version } from './package.json'\nimport * as plugins from './plugins'\n// import type { RouteRecordRaw } from 'vue-router'\n\nconst INSTALLED_KEY = Symbol('INSTALLED_KEY')\nconst provideGlobalConfig = (config, app) => {}\nexport type EpOptions = {\n  // routes?: RouteRecordRaw\n}\nexport const install = (app: App, options?: EpOptions) => {\n  if (app[INSTALLED_KEY]) return // 防止多次use导致重复安装注册,控制台警告\n  app[INSTALLED_KEY] = true\n  components.forEach((c) => app.use(c))\n  Object.values(plugins).forEach((p) => app.use(p))\n  if (options) {\n    provideGlobalConfig(options, app)\n  }\n}\n\nconst plugin: Plugin & { version: string } = {\n  install,\n  version,\n}\nexport default plugin\nexport * from '@el-plus/components/index'\nexport * from '@el-plus/hooks'\nexport * from '@el-plus/directives'\n"],"names":["apiProps","visibleProps","prepareProps","props","excludeKeys","acc","key","disabledProps","prepareEvents","emit","eventKeys","eventName","word","args","prepareClassNames","useAttrs","prepareStyles","buttonsProps","elButtonProps","_bem","prefix","block","element","modifier","createBEM","name","state","createNameSpace","SCOPE","vRepeatClick","el","binding","delay","immediate","handler","isPending","timer","start","e","elLocaleModules","localeModules","TRANSLATER_KEY","cachedTranslater","useLocale","localeLang","addLangClass","lang","nextTick","translater","getCurrentInstance","inject","app","inSetup","provideFn","provide","resolve","basePath","ext","modulePath","loader","module","t","useElLocale","ref","error","reqNum","loadingInstance","startLoading","ElLoading","endLoading","tokenKey","getToken","Cookies","defaultRequestInterceptor","config","token","defaultResponseInterceptor","options","codeField","dataField","successCode","makeInfoMessage","response","responseData","status","msg","isFunction","errorMessageResponseInterceptor","makeErrorMessage","axios","err","errMsg","errorMessage","mergeListByKey","defaultList","list","item","defaultIndex","item1","arr","obj","bindMethods","instance","prototype","propertyName","descriptor","propertyValue","defaultRequestInterceptorConfig","defaultResponseInterceptorConfig","InterceptorManager","fulfilled","rejected","RequestClient","defaultConfig","axiosConfig","requestConfig","defu","interceptorManager","url","data","params","baseURL","client","doReAuthenticate","loginUrl","ElMessage","http","vPermisson","arg","value","permission","checkPermission","roles","queryRoles","hasPermission","requestPromise","bem","Buttons","directives","vPermission","inheritAttrs","setup","buttonProps","customList","computed","filter","button","show","hide","clickFn","confirmBefore","confirm","confirmText","ElMessageBox","confirmButtonText","cancelButtonText","type","onClick","getDisabled","disabled","_createVNode","_Fragment","map","permissionArr","split","_withDirectives","_resolveComponent","_mergeProps","b","prop","default","scopedSlots","_resolveDirective","withInstall","comp","EpButtons","expandFormProps","formProps","elFormProps","expandFormPropsKeys","formEmits","elFormEmits","formEmitsKeys","useCollapse","isShowFold","showFieldCount","filterFormItemList","open","toggleStatus","isShowFoldBtn","index","useForm","elFormRef","useTemplateRef","validate","resetFields","clearValidate","formItemRenderRefs","reactive","onBeforeUpdate","refName","useFormItemSlots","attrs","render","labelRender","tableProp","events","startsWith","tableScope","eventFn","isTipDisabled","checkOverflow","currentTarget","scrollWidth","clientWidth","formData","renderScopedSlots","renderProps","h","resolveComponent","modelValue","clearable","label","ElTooltip","isShowLabel","hideRequiredAsterisk","required","_createTextVNode","useFormItemRules","rules","mergeRules","requiredDefault","push","Array","isArray","concat","Object","toString","call","forEach","r","message","expandFormItemProps","formItemProps","elFormItemProps","expandFormItemPropsKeys","EpFormItem","childProps","ElFormItem","is","__props","__emit","customAttrs","_useModel","getFormItemRenderRef","registerFormItemRenderRef","isShowFormItem","__expose","_createElementBlock","_normalizeClass","_unref","_normalizeStyle","_renderSlot","_ctx","ElRow","_openBlock","_renderList","_createBlock","ElCol","col","labelWidth","_vShow","EpForm","Form","inputProps","elInputProps","inputEmits","elInputEmits","evt","inputEmitsKeys","slots","useSlots","isBluring","isFocusing","inputRef","val","toThousand","watch","reg","_component_el_input","$event","_withCtx","scope","_normalizeProps","_guardReactiveProps","EpInput","Input","_isSlot","s","_isVNode","useTemplatePromise","destroy","transition","appear","instances","create","shallowReactive","promise","undefined","reject","isResolving","isVisible","Promise","_resolve","_reject","v","finally","indexOf","splice","com","wrapper","document","querySelector","dialog","zIndex","style","classList","remove","component","defineComponent","_","ctx","renderList","withDirectives","class","vShow","_slot","Transition","markRaw","useDialog","destroyOnClose","onConfirm","onBeforeConfirm","onCancel","onBeforeCancel","cancelText","showFooter","templatePromiseClass","dialogProps","Dialog","promiseOptions","bind","renderFunc","footer","footerPrepend","ElButton","footerInner","footerAppend","ElDialog","closeOnClickModal","closeOnPressEscape","title","center","beforeClose","container","createElement","newInstance","configProviderContextKey","vnode","ElConfigProvider","locale","appContext","vRender","body","appendChild","customColumnProps","customColumnEmits","useRequest","api","method","reqData","reqParams","reqBefore","reqAfter","cancelToken","hooks","loading","cancelRequest","apiFn","cancel","res","getParentEl","className","parent","getChildEl","bus","mitt","payload","getEnv","mark","hostname","tag","getLocationEnv","devProxy","gotoTaskTrace","workflowId","CustomColumnDialog","width","saveColumnsFn","userModuleColumnsReqs","showData","columnId","seq","then","columns","showTableColumns","allData","console","warn","requestFn","getColumnsFn","success","hiddenColumns","showColumns","showName","id","showField","saveApi","find","rightChecked","moveUp","temp","length","scrollIntoView","moveDown","rightEl","querySelectorAll","requestAnimationFrame","behavior","rightCheckChange","change","some","isDiabledMoveUpDown","showHandler","_component_el_button","size","_component_el_transfer","filterable","titles","onRightCheckChange","onChange","_createElementVNode","_component_el_icon","ArrowUp","_toDisplayString","ArrowDown","EpCustomColumn","CustomColumn","inheritTableProps","elTableProps","expandTableProps","tableProps","expandTablePropsKeys","tableEmits","ElTable","tableEmitsKeys","useFormDialog","formRef","isUseComFormData","setTimeout","useTable","elTableRef","customData","apiTotal","rawData","isFrontPage","frontPaginationHandler","total","fail","customColumns","search","init","isPagination","beforeSearch","pagination","pageNo","pageSize","pageNum","paginationProps","usePagination","newValue","deep","isInitSearch","customColumnModule","once","on","clearSelection","getSelectionRows","formatActionButtons","defaultPaginationProps","pageSizes","onSizeChange","onCurrentChange","layout","useTableColumn","tableData","columnProps","column","align","minWidth","renderHeader","editable","cloneColumn","rawRender","row","formItemList","toRaw","ElIcon","EditPen","filters","Set","text","filterMethod","columnList","newColumn","formatColumns","formatColumn","merge","useTableFormItem","rawItem","cloneDeep","cellRequired","disabledOption","desc","btnItem","content","fn","event","Event","shift","$index","keys","rowKey","customColumnRef","openCustomColumnDialog","_component_el_form","model","inline","_component_el_table","_createSlots","showSelectionCol","_component_el_table_column","selectable","reserveSelection","fixed","showSingleSelectionCol","_component_el_link","underline","showIndexCol","indexFormatter","actionButtons","actionColWidth","_component_EpButtons","$slots","showPagination","_component_el_pagination","customColumnApi","customColumnSaveApi","EpTable","Table","searchListPageProps","searchListPageEmits","getAvailableHeight","elRect","height","parentRect","paddingBottom","useSearchListPage","rootRef","topRef","middleRef","calcTableHeight","tableRef","searchButtons","reset","useButtons","instanceName","tableHeight","topHeight","middleHeight","paginationHeight","paginationEl","containerHeight","onMounted","defaultButtons","rows","confirmBeforeFn","EpSearchListPage","SearchListPage","inheritSelectProps","elSelectProps","expandSelectProps","selectProps","expandSelectPropsKeys","selectEmits","elSelectEmits","selectEmitsKeys","useSelect","hasLoaded","loadedOptions","echoOption","d","customOptions","loadOptions","getSelectItem","expandAttrs","query","visible","_component_el_select","_component_el_option","valueKey","formatLabel","labelKey","codeInLabel","EpSelect","Select","titleProps","titleEmits","expanded","useTitle","toggle","useToggle","contentRef","toggleState","contentHeight","getContentHeight","target","parentEl","showDownUp","buttons","EpTitle","Title","headerProps","headerEmits","useNavigation","onModeChange","router","useRouter","route","useRoute","$goto","openTab","routes","projectRootPath","distRoute","queen","first","qs","$closeTag","currentRouterTagIndex","preIndex","currentTag","preTag","mode","isBrowse","isEdit","isAdd","newMode","callBack","useHeader","isShowBack","allowBack","window","openMenuSelect","goBack","back","defaultMode","attachmentProps","getFullUrl","filePath","downloadSrc","src","fileName","blob","a","downloadFile","headers","lowerHeaders","contentDisposition","importFile","accept","multiple","fieldName","failedFileName","extraData","input","files","file","failedHtml","previewFile","previewUrl","encode","useAttachment","isNormalOpen","isDialogOpen","toBeConfirmData","toBeDeleteData","addAttachment","fileData","oldIndex","AttachmentDialog","EpAttachment","Attachment","ElPageHeader","EpHeader","Header","datePickerRangeProps","elDatePickerProps","end","datePickerRangeEmits","endDate","_component_el_date_picker","EpDatePickerRange","DatePickerRange","linkProps","elLinkProps","EpLink","Link","componentType","uniVueProps","Vue2","VueRouter3","loadModules","useUniVue","_emit","uniVue","isAddress","isBpm","isLoadStatic","setupWindow","prepareVueAttributes","_props","cdn","getStaticJsUrl","getStaticCssUrl","loadStaticJsResource","promises","script","globalName","loadStaticCssResource","cssPromises","staticCssUrl","setupInstance","shadowRoot","_res1","css","headStyle","vue2Events","vue2Props","updateVue2Instance","child","oldValue","ElSkeleton","EpUniVue","UniVue","getUnifyTime","date","format","dayjs","defaultFields","footerInfoProps","getFieldName","field","fieldMapValue","getFieldValue","EpFooterInfo","FooterInfo","components","globalProperties","useChooseDialog","rest","selections","clearSelections","searchListPageRef","JSON","parse","stringify","onSelectionChange","newSel","onSingleSelectionChange","unref","useConfirmDialog","maxlength","minlength","showWordLimit","placeholder","useUtils","INSTALLED_KEY","install","c","plugins","p","plugin","version"],"mappings":"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"}