el-plus 0.0.21 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/index.css +1 -1
- package/dist/index.full.js +27 -10
- package/dist/index.full.min.js +1 -1
- package/dist/index.full.min.js.map +1 -1
- package/dist/index.full.min.mjs +1 -1
- package/dist/index.full.min.mjs.map +1 -1
- package/dist/index.full.mjs +28 -11
- package/es/components/date-picker-range/index.d.ts +3 -3
- package/es/components/date-picker-range/src/date-picker-range.vue.d.ts +1 -1
- package/es/components/form/index.d.ts +3 -3
- package/es/components/form/src/form.d.ts +1 -1
- package/es/components/form/src/form.mjs +1 -1
- package/es/components/form/src/form.mjs.map +1 -1
- package/es/components/form/src/form.vue.d.ts +2 -2
- package/es/components/header/src/use-header.mjs +1 -1
- package/es/components/header/src/use-header.mjs.map +1 -1
- package/es/components/search-list-page/index.d.ts +6 -6
- package/es/components/search-list-page/src/search-list-page.vue.d.ts +2 -2
- package/es/components/search-list-page/src/use-search-list-page.d.ts +2 -2
- package/es/components/select/index.d.ts +3 -3
- package/es/components/select/src/select.vue.d.ts +1 -1
- package/es/components/table/src/use-table.mjs +9 -1
- package/es/components/table/src/use-table.mjs.map +1 -1
- package/es/components/title/index.d.ts +12 -3
- package/es/components/title/src/title.d.ts +4 -1
- package/es/components/title/src/title.mjs +4 -1
- package/es/components/title/src/title.mjs.map +1 -1
- package/es/components/title/src/title.vue.d.ts +8 -2
- package/es/components/title/src/title.vue2.mjs +4 -3
- package/es/components/title/src/title.vue2.mjs.map +1 -1
- package/es/hooks/dialog/use-choose-dialog.mjs +3 -3
- package/es/hooks/dialog/use-choose-dialog.mjs.map +1 -1
- package/es/hooks/dialog/use-dialog.mjs +8 -3
- package/es/hooks/dialog/use-dialog.mjs.map +1 -1
- package/es/package.json.mjs +1 -1
- package/lib/components/date-picker-range/index.d.ts +3 -3
- package/lib/components/date-picker-range/src/date-picker-range.vue.d.ts +1 -1
- package/lib/components/form/index.d.ts +3 -3
- package/lib/components/form/src/form.d.ts +1 -1
- package/lib/components/form/src/form.js +1 -1
- package/lib/components/form/src/form.js.map +1 -1
- package/lib/components/form/src/form.vue.d.ts +2 -2
- package/lib/components/header/src/use-header.js +1 -1
- package/lib/components/header/src/use-header.js.map +1 -1
- package/lib/components/search-list-page/index.d.ts +6 -6
- package/lib/components/search-list-page/src/search-list-page.vue.d.ts +2 -2
- package/lib/components/search-list-page/src/use-search-list-page.d.ts +2 -2
- package/lib/components/select/index.d.ts +3 -3
- package/lib/components/select/src/select.vue.d.ts +1 -1
- package/lib/components/table/src/use-table.js +8 -0
- package/lib/components/table/src/use-table.js.map +1 -1
- package/lib/components/title/index.d.ts +12 -3
- package/lib/components/title/src/title.d.ts +4 -1
- package/lib/components/title/src/title.js +4 -1
- package/lib/components/title/src/title.js.map +1 -1
- package/lib/components/title/src/title.vue.d.ts +8 -2
- package/lib/components/title/src/title.vue2.js +3 -2
- package/lib/components/title/src/title.vue2.js.map +1 -1
- package/lib/hooks/dialog/use-choose-dialog.js +2 -2
- package/lib/hooks/dialog/use-choose-dialog.js.map +1 -1
- package/lib/hooks/dialog/use-dialog.js +6 -1
- package/lib/hooks/dialog/use-dialog.js.map +1 -1
- package/lib/package.json.js +1 -1
- package/package.json +1 -1
- package/theme-chalk/index.css +1 -1
- package/theme-chalk/src/title.scss +15 -8
- package/theme-chalk/title.css +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.full.min.js","sources":["../../../packages/utils/props.ts","../../../packages/components/buttons/src/buttons.ts","../../../packages/utils/bem.ts","../../../packages/directives/repeat-click/index.ts","../../../packages/locale/lang/zh-cn.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.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/el-plus/components.ts","../../../packages/el-plus/plugins/globalProperties.ts","../../../packages/hooks/dialog/use-choose-dialog.tsx","../../../packages/el-plus/index.ts"],"sourcesContent":["import type { Api, ReqBefore, ReqAfter, Method } from '@el-plus/types'\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 = Partial<\n Omit<ElButtonProps, 'disabled'> & {\n name: string\n prop: string // 唯一标识\n permission: string // 权限\n onClick: (e: MouseEvent | TableScope) => void\n scopedSlots: Record<string, () => VNode>\n disabled: IDisabled\n confirm: boolean\n confirmText: string\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","export default {\n name: 'zh-cn',\n ep: {\n dialog: {\n cancel: '取消',\n confirm: '确定',\n title: '提示',\n },\n buttons: {\n cancel: '取消',\n confirm: '确定',\n secondConfirm: '确定要',\n secondConfirmEnd: '吗',\n prompt: '提示',\n },\n input: {\n placeholder: '请输入',\n },\n datePickerRange: {\n lastWeek: '最近一周',\n lastMonth: '最近一个月',\n lastThreeMonth: '最近三个月',\n startTime: '开始时间',\n endTime: '结束时间',\n },\n formItem: {\n required: '不能为空',\n },\n form: {\n more: '更多',\n collapse: '收起',\n },\n header: {\n save: '保存',\n edit: '修改',\n cancel: '取消',\n refresh: '刷新',\n approvalLog: '审批日志',\n },\n searchListPage: {\n add: '新增',\n templateDownload: '模版下载',\n import: '导入',\n export: '导出',\n search: '搜索',\n clear: '清空',\n },\n table: {\n select: '选择',\n serialNumber: '序号',\n operation: '操作',\n },\n title: {\n collapse: '折叠',\n expand: '展开',\n },\n chooseDialog: {\n selected: '已选中',\n unit: '个',\n },\n customColumn: {\n columnSettings: '自定义列设置',\n defineColumn: '自定义列',\n hiddenField: '隐藏字段',\n visibleField: '显示字段',\n moveLeft: '左移',\n moveRight: '右移',\n moveUp: '上移',\n moveDown: '下移',\n },\n bpm: {\n approvalLog: '审批日志',\n },\n loading: {\n loading: '正在加载中...',\n },\n http: {\n networkError: '网络异常,请检查您的网络连接后重试',\n timeout: '请求超时,请稍后再试',\n requestError: '请求错误。请检查您的输入并重试',\n authExpired: '登录认证过期,请重新登录后继续',\n forbidden: '禁止访问, 您没有权限访问此资源',\n notFound: '未找到, 请求的资源不存在', //\n serverError: '内部服务器错误,请稍后再试',\n },\n },\n}\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'\nimport zhCn from '@el-plus/locale/lang/zh-cn'\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 const epLocalePath =\n process.env.NODE_ENV === 'development'\n ? `../locale/lang/${localeLang}.ts`\n : `/node_modules/el-plus/es/locale/lang/${localeLang}.mjs`\n const { default: locale = zhCn } = await import(\n /* @vite-ignore */ epLocalePath\n )\n const { t } = useElLocale(ref(locale 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 elLocalePath = `/node_modules/element-plus/es/locale/lang/${localeLang}.mjs`\n const { default: elLocale = zhCn } = await import(\n /* @vite-ignore */ elLocalePath\n )\n return elLocale\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 config?: RequestClientConfig,\n ): Promise<R> {\n return this.request<T>(url, { ...config, method: 'DELETE' }) as Promise<R>\n }\n\n /**\n * GET请求方法\n */\n public get<T = any, R = HttpSuccessResponse<T>>(\n url: string,\n config?: RequestClientConfig,\n ): Promise<R> {\n return this.request<T>(url, { ...config, method: 'GET' }) 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.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: 120,\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, computed, useTemplateRef, type SetupContext } 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\n return {\n filterFormItemList,\n elFormRef,\n validate,\n resetFields,\n clearValidate,\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) => {\n const attrs = useAttrs()\n const { type, label, render, required, labelRender } = props\n const prop = props.tableProp || props.prop\n const { scopedSlots: renderScopedSlots, ...renderProps } = props.props || {}\n const events: Record<string, (...args: any[]) => void> = {}\n for (const key in attrs) {\n if (key.startsWith('on')) {\n events[key] = attrs[key] as (...args: any[]) => void\n }\n }\n\n const formData = attrs['form-data'] as Record<string, unknown>\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 let disabled = props.disabled\n if (typeof props.disabled === 'function') {\n disabled = props.disabled(formData)\n }\n return type\n ? h(\n resolveComponent(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 },\n renderScopedSlots,\n )\n : formData[prop as string]\n },\n label: () => {\n return (\n <ElTooltip\n placement=\"top\"\n effect=\"dark\"\n content={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 && required ? (\n <span style=\"color: var(--el-color-danger);\">*</span>\n ) : null}\n {props.isShowLabel ? <span>{label}</span> : ''}\n </span>\n </ElTooltip>\n )\n },\n }\n\n if (labelRender) {\n scopedSlots.label = () => labelRender({ 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>\nexport const expandFormItemPropsKeys = Object.keys(expandFormItemProps)\n","import { defineComponent, useAttrs } 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)\n const { rules } = useFormItemRules(props)\n const { props: childProps, disabled, ...formItemProps } = props // eslint-disable-line\n return () => {\n return (\n <ElFormItem\n class={[bem.b(), prepareClassNames()]}\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 />\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 { filterFormItemList, elFormRef, validate, resetFields, clearValidate } =\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})\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} as const\nexport type InputProps = ExtractPropTypes<typeof inputProps>\nexport const inputEmits = {\n ...elInputEmits,\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, onMounted } 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 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 = 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') {\n onMounted(() => {\n inputRef.value.input.value = 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} from 'vue'\n\nexport interface TemplatePromiseOptions {\n // 过渡\n transition?: TransitionProps\n // 是否销毁\n destroy?: boolean\n // 自定义渲染\n render?: (props, ctx: SetupContext) => VNode\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 return create(...args)\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',\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 {\n h,\n getCurrentInstance,\n render as vRender,\n markRaw,\n ref,\n useTemplateRef,\n} from 'vue'\nimport type { ComponentInternalInstance } from 'vue'\nimport { ElDialog, ElButton } from 'element-plus'\nimport type { AppContext, VNode } from 'vue'\nimport type { DialogProps } from 'element-plus'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport EpForm from '@el-plus/components/form'\nimport type { FormProps } from '@el-plus/components/form'\nimport {\n prepareProps,\n prepareEvents,\n prepareClassNames,\n prepareStyles,\n} 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 onCancel: (reject) => void\n onConfirm: (resolve) => void\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 onCancel,\n showFooter = true,\n ...dialogProps\n } = options\n\n const Dialog = useTemplatePromise({\n destroy: destroyOnClose,\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={() => {\n if (onCancel) {\n onCancel(reject)\n } else {\n reject('cancel')\n }\n }}\n >\n {t('ep.dialog.cancel')}\n </ElButton>\n {scopedSlots.footerInner?.(promiseOptions)}\n <ElButton\n type=\"primary\"\n onClick={async () => {\n if (onConfirm) {\n onConfirm(resolve)\n } else {\n resolve('confirm')\n }\n }}\n loading={isResolving}\n >\n {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 vnode = h(Dialog)\n if (newInstance && newInstance.appContext) {\n // 强制继承父应用的全局组件、指令和插件\n vnode.appContext = newInstance.appContext\n }\n vRender(vnode, container)\n document.body.appendChild(container)\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/types'\nimport type { Canceler } 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 if (cancelToken) {\n config.cancelRequest = (cancel: Canceler) => {\n cancelRequest = cancel\n }\n }\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 (data.$query) {\n config.data[data.$query] = data.$searchValue\n delete data.$searchValue\n }\n\n if (reqBefore) {\n reqBefore(config)\n }\n return http.request(api, config)\n }\n } else {\n apiFn = api\n }\n const requestFn = async (data: Record<string, unknown> = {}) => {\n if (loading.value && !cancelToken) return\n loading.value = true\n try {\n cancelRequest && cancelRequest()\n const res = await apiFn(data)\n if (reqAfter) {\n reqAfter(res)\n }\n if (hooks?.success) {\n hooks.success(res.data)\n }\n } catch (error) {\n if (hooks?.fail) {\n hooks.fail(error)\n }\n } finally {\n loading.value = false\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}\n\nexport { getEnv, getBaseUrl }\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.defineColumn') }}</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[]>([])\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})\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 }\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<ButtonProps[]>,\n default: () => [],\n },\n // 是否初始化加载数据\n isInitSearch: {\n type: Boolean,\n default: true,\n },\n // 自定义列模块\n customColumnModule: {\n ...customColumnProps.module,\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 { reactive, ref } from 'vue'\nconst bem = createNameSpace('form-dialog')\n\ntype Options = {\n title?: string\n dialogProps?: DialogOptions\n formData?: FormProps['model']\n} & FormProps\nexport const useFormDialog = (options: Options = {}) => {\n const { dialogProps, title, ...formProps } = options\n const formRef = ref()\n let formData = formProps.formData || reactive({}) // eslint-disable-line\n return useDialog({\n class: bem.b(),\n width: '80%',\n title,\n render: (props) => {\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 resolve(formData)\n },\n ...dialogProps,\n })\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} 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 {\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 customData = ref<Record<string, unknown>[]>([])\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 customData.value = data\n } else if (data && typeof data === 'object') {\n const rawData = data as Record<string, any>\n customData.value = rawData?.list || rawData?.data || []\n } else {\n customData.value = []\n }\n if (props.showPagination) {\n pagination.total =\n (props.isFrontPage\n ? customData.value.length\n : (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 const { pageNo, pageSize } = pagination\n const data = customData.value.filter((item, index) => {\n return index < pageNo * pageSize && index >= (pageNo - 1) * pageSize\n })\n customData.value = data\n } else {\n if (props.api) {\n requestFn!({\n pageNo: pagination.pageNo,\n pageSize: pagination.pageSize,\n pageNum: pagination.pageNo,\n })\n } else if (props.data?.length) {\n customData.value = props.data\n }\n }\n }\n const { pagination, paginationProps } = usePagination(props, search)\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 clearValidate = (props: FormItemProp) => {\n return elFormRef.value!.clearValidate(props)\n }\n // 格式化操作按钮\n const formatActionButtons = (list: ButtonProps[], scope: TableScope) => {\n return list.map((item) => {\n if (item.onClick) {\n item.onClick = item.onClick.bind(null, scope)\n }\n return item\n })\n }\n\n return {\n loading,\n data: customData,\n search,\n pagination,\n paginationProps,\n validate,\n resetFields,\n clearValidate,\n elFormRef,\n elTableRef,\n formatActionButtons,\n customColumns: customColumns as unknown as Ref<TableColumn[]>,\n }\n}\nconst usePagination = function (props: TableProps, search: ISearch) {\n const pageSizes = [20, 50, 100, 200]\n const pagination = reactive({\n total: 0,\n pageNo: 1,\n pageSize: pageSizes[0],\n })\n const paginationProps = computed(() => {\n const defaultPaginationProps = props.paginationProps || {}\n const onSizeChange = defaultPaginationProps.onSizeChange\n const onCurrentChange = defaultPaginationProps.onCurrentChange\n return {\n ...defaultPaginationProps,\n pageSizes,\n layout: 'total, sizes, prev, pager, next, jumper',\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 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 let newColumn = { ...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 }\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 columnProps,\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 }\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 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=\"index\"\n v-bind=\"columnProps(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 :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 ...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 loading,\n search,\n elFormRef,\n elTableRef,\n formatActionButtons,\n customColumns,\n} = useTable(props)\nconst { columnProps, 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 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 { 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 showOperationColumn: Boolean, // 是否显示操作列\n // 表单列表\n formItemList: {\n ...formProps.formItemList,\n },\n // 左侧按钮\n leftButtons: {\n ...buttonsProps.list,\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 // 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>\n","import { ref, onMounted, computed, useTemplateRef } from 'vue'\nimport type { SearchListPageProps } from './search-list-page'\nimport type { ButtonsProps } 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, getEnv } from '@el-plus/utils'\nimport { useLocale } from '@el-plus/hooks/use-locale'\n\nexport const useSearchListPage = (props: SearchListPageProps, config = {}) => {\n const { calcTableHeight, tableProps, tableRef } = useTable(props, config)\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 })\n return {\n formProps,\n tableProps,\n buttonsProps,\n searchButtons,\n search,\n reset,\n tableRef,\n formRef,\n beforeSearch: validate,\n }\n}\nconst useTable = (props: SearchListPageProps, config) => {\n const instanceName = 'tableRef'\n const tableRef = useTemplateRef<TableInstance>(instanceName)\n const tableHeight = ref(window.innerHeight)\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 reqData: props.formData,\n customColumnModule: props.customColumnModule,\n minWidth: props.minWidth,\n actionColWidth: props.actionColWidth,\n ...props.tableProps,\n }\n })\n const calcTableHeight = () => {\n setTimeout(() => {\n const topHeight = (document.getElementById('top') as HTMLElement)\n .offsetHeight\n const middleHeight = (document.getElementById('middle') as HTMLElement)\n .offsetHeight\n let paginationHeight = 0\n if (tableProps.value.showPagination) {\n paginationHeight =\n (document.querySelector('.el-pagination') as HTMLElement)\n .offsetHeight + 12\n }\n const frameDistance = getEnv() ? 90 : 40\n tableHeight.value =\n window.innerHeight -\n topHeight -\n middleHeight -\n paginationHeight -\n frameDistance -\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 },\n) => {\n const { t } = useLocale()\n const defaultButtons: ButtonsProps['list'] = [\n {\n name: t('ep.searchListPage.add'),\n prop: 'add',\n permission: props.name ? `${props.name}:ADD` : '',\n show: () => {\n return !!props.add\n },\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.defineColumn'),\n prop: 'customColumn',\n type: 'primary',\n onClick: () => {\n tableRef.value.openCustomColumnDialog()\n },\n })\n }\n list.forEach((item) => {\n if (item.onClick) {\n const clickFn = item.onClick\n item.onClick = () => {\n // 增加选中项\n const rows = tableRef.value.elTableRef.getSelectionRows()\n clickFn(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 tableRef.value.search(isInitSearch)\n }\n // 清空\n const reset = async () => {\n resetFields()\n search(true)\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 :class=\"[bem.b(), prepareClassNames()]\"\n :style=\"{\n ...prepareStyles(),\n }\"\n >\n <div id=\"top\">\n <EpForm v-bind=\"formProps\" />\n </div>\n <div id=\"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 } from './search-list-page'\nimport { useSearchListPage } from './use-search-list-page'\ndefineOptions({ name: 'EpSearchListPage' })\nconst bem = createNameSpace('search-list-page')\nconst props = defineProps(searchListPageProps)\n\nconst {\n formProps,\n buttonsProps,\n searchButtons,\n search,\n reset,\n tableRef,\n formRef,\n tableProps,\n beforeSearch,\n} = useSearchListPage(props)\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 * 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 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 } 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 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 customOptions.value = data as OptionArr\n } else if (data && typeof data === 'object') {\n const rawData = data as OptionObj\n customOptions.value = rawData?.list || rawData?.data || []\n } else {\n customOptions.value = []\n }\n hasLoaded = true\n },\n fail(error) {\n console.error(error)\n },\n },\n })\n // 下拉列表\n const customOptions = ref<SelectOption[]>([]) // 下拉列表\n // 加载下拉列表\n const loadOptions = (\n value: SelectProps['modelValue'],\n desc: string | undefined,\n ) => {\n if ((value || value === 0) && desc) {\n customOptions.value = [\n {\n [props.labelKey]: desc,\n [props.valueKey]: value,\n },\n ]\n }\n if (props.api) {\n if (!props.lazy && !props.remote) {\n requestFn!()\n }\n } else if (props.options?.length) {\n customOptions.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 = {\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 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 } 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 desc = defineModel<string>('desc')\nconst customAttrs = computed(() => {\n return {\n ...prepareProps(props, ['modelValue', 'desc', ...expandSelectPropsKeys]),\n ...prepareEvents<SelectEmits>(emit, selectEmitsKeys),\n ...expandAttrs,\n }\n})\nloadOptions(value.value, desc.value)\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: Boolean,\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 :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 { PageMode } from '@el-plus/hooks/use-navigation'\nexport type defaultButtonsProps =\n | 'modify'\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 default: () => [],\n },\n // 工作流id\n workflowId: String,\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 const useNavigation = () => {\n const router = useRouter()\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 const { query } = useRoute()\n return 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 return {\n $goto,\n $closeTag,\n mode,\n isBrowse,\n isEdit,\n isAdd,\n }\n}\n","import { computed } from 'vue'\nimport { useRouter, useRoute } 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\n })\n let defaultButtons: ButtonsProps['list'] = [\n {\n name: t('ep.header.edit'),\n prop: 'modify',\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 }\n const buttons = mergeListByKey(defaultButtons, props.buttons)\n\n return {\n buttons,\n }\n}\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 </div>\n</template>\n<script setup lang=\"ts\">\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { headerProps, headerEmits } from './header'\nimport {\n prepareProps,\n prepareEvents,\n prepareClassNames,\n prepareStyles,\n} from '@el-plus/utils/props'\nimport { useHeader, useButtons } from './use-header'\nimport { ElPageHeader } from 'element-plus'\nimport EpButtons from '@el-plus/components/buttons'\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\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 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 { 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'\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] 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 { EpSearchListPage } 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 } 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 let selections = []\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.length}\n {t('ep.chooseDialog.unit')}\n </span>\n )\n }\n }\n return useDialog({\n class: bem.b(),\n width: '80%',\n showFooter: !showSingleSelectionCol,\n scopedSlots,\n title,\n onConfirm: (resolve) => {\n resolve(selections)\n },\n render: ({ resolve }) => {\n const formData = rest.formData || reactive({})\n return (\n <EpSearchListPage\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 onSelectionChange: (newSel) => {\n selections = newSel\n },\n onSingleSelectionChange: (newSel) => {\n selections = newSel\n resolve(selections)\n },\n },\n }}\n />\n )\n },\n ...dialogProps,\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","zhCn","TRANSLATER_KEY","cachedTranslater","useLocale","localeLang","addLangClass","lang","nextTick","translater","getCurrentInstance","inject","app","inSetup","provideFn","provide","resolve","epLocalePath","locale","t","useElLocale","ref","error","elLocalePath","elLocale","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","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","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","useFormItemSlots","attrs","label","render","required","labelRender","tableProp","renderScopedSlots","renderProps","events","startsWith","formData","isTipDisabled","checkOverflow","currentTarget","scrollWidth","clientWidth","h","resolveComponent","modelValue","clearable","ElTooltip","isShowLabel","hideRequiredAsterisk","_createTextVNode","useFormItemRules","rules","mergeRules","requiredDefault","push","Array","isArray","concat","Object","toString","call","forEach","r","message","expandFormItemProps","formItemProps","elFormItemProps","expandFormItemPropsKeys","EpFormItem","childProps","ElFormItem","__props","__emit","customAttrs","_useModel","validate","resetFields","clearValidate","isShowFormItem","__expose","_createElementBlock","_normalizeClass","_unref","_normalizeStyle","_renderSlot","_ctx","ElRow","_openBlock","_renderList","_createBlock","ElCol","col","labelWidth","_vShow","EpForm","Form","inputProps","elInputProps","inputEmits","elInputEmits","inputEmitsKeys","slots","useSlots","isBluring","isFocusing","val","toThousand","inputRef","watch","onMounted","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","wrapper","document","querySelector","style","dialog","zIndex","component","defineComponent","_","ctx","renderList","withDirectives","class","vShow","_slot","Transition","markRaw","useDialog","destroyOnClose","onConfirm","onCancel","showFooter","dialogProps","Dialog","promiseOptions","bind","renderFunc","footer","_slot2","footerPrepend","ElButton","footerInner","footerAppend","ElDialog","closeOnClickModal","closeOnPressEscape","title","center","beforeClose","container","createElement","newInstance","vnode","appContext","vRender","body","appendChild","customColumnProps","customColumnEmits","useRequest","api","method","reqData","reqParams","reqBefore","reqAfter","cancelToken","hooks","loading","cancelRequest","apiFn","cancel","params","res","getParentEl","className","parent","getChildEl","bus","mitt","payload","getEnv","mark","hostname","tag","gotoTaskTrace","workflowId","CustomColumnDialog","width","saveColumnsFn","module","userModuleColumnsReqs","showData","columnId","seq","then","columns","showTableColumns","allData","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","reactive","useTable","elTableRef","customData","rawData","showPagination","pagination","total","isFrontPage","fail","console","customColumns","search","init","isPagination","beforeSearch","pageNo","pageSize","pageNum","paginationProps","usePagination","isInitSearch","customColumnModule","once","on","formatActionButtons","pageSizes","defaultPaginationProps","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","useTableFormItem","rawItem","cloneDeep","cellRequired","disabledOption","btnItem","content","fn","event","Event","shift","$index","keys","customColumnRef","openCustomColumnDialog","_component_el_form","model","inline","_component_el_table","_createSlots","showSelectionCol","_component_el_table_column","selectable","fixed","showSingleSelectionCol","_component_el_link","underline","showIndexCol","indexFormatter","actionButtons","actionColWidth","_component_EpButtons","ref_for","$slots","_component_el_pagination","EpTable","Table","searchListPageProps","useSearchListPage","calcTableHeight","tableRef","searchButtons","reset","useButtons","instanceName","tableHeight","topHeight","middleHeight","paginationHeight","frameDistance","defaultButtons","rows","EpSearchListPage","SearchListPage","inheritSelectProps","elSelectProps","expandSelectProps","selectProps","expandSelectPropsKeys","selectEmits","elSelectEmits","selectEmitsKeys","useSelect","hasLoaded","customOptions","loadOptions","desc","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","buttons","EpTitle","Title","headerProps","headerEmits","useNavigation","router","useRouter","$goto","openTab","routes","projectRootPath","route","distRoute","queen","first","qs","$closeTag","currentRouterTagIndex","preIndex","currentTag","preTag","mode","useRoute","isBrowse","isEdit","isAdd","useHeader","defaultMode","isShowBack","goBack","ElPageHeader","EpHeader","Header","datePickerRangeProps","elDatePickerProps","end","datePickerRangeEmits","newValue","_component_el_date_picker","EpDatePickerRange","DatePickerRange","linkProps","elLinkProps","EpLink","Link","components","globalProperties","useChooseDialog","multiple","rest","selections","height","onSelectionChange","newSel","onSingleSelectionChange","INSTALLED_KEY","install","c","plugins","p","plugin","version"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.full.min.js","sources":["../../../packages/utils/props.ts","../../../packages/components/buttons/src/buttons.ts","../../../packages/utils/bem.ts","../../../packages/directives/repeat-click/index.ts","../../../packages/locale/lang/zh-cn.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.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/el-plus/components.ts","../../../packages/el-plus/plugins/globalProperties.ts","../../../packages/hooks/dialog/use-choose-dialog.tsx","../../../packages/el-plus/index.ts"],"sourcesContent":["import type { Api, ReqBefore, ReqAfter, Method } from '@el-plus/types'\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 = Partial<\n Omit<ElButtonProps, 'disabled'> & {\n name: string\n prop: string // 唯一标识\n permission: string // 权限\n onClick: (e: MouseEvent | TableScope) => void\n scopedSlots: Record<string, () => VNode>\n disabled: IDisabled\n confirm: boolean\n confirmText: string\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","export default {\n name: 'zh-cn',\n ep: {\n dialog: {\n cancel: '取消',\n confirm: '确定',\n title: '提示',\n },\n buttons: {\n cancel: '取消',\n confirm: '确定',\n secondConfirm: '确定要',\n secondConfirmEnd: '吗',\n prompt: '提示',\n },\n input: {\n placeholder: '请输入',\n },\n datePickerRange: {\n lastWeek: '最近一周',\n lastMonth: '最近一个月',\n lastThreeMonth: '最近三个月',\n startTime: '开始时间',\n endTime: '结束时间',\n },\n formItem: {\n required: '不能为空',\n },\n form: {\n more: '更多',\n collapse: '收起',\n },\n header: {\n save: '保存',\n edit: '修改',\n cancel: '取消',\n refresh: '刷新',\n approvalLog: '审批日志',\n },\n searchListPage: {\n add: '新增',\n templateDownload: '模版下载',\n import: '导入',\n export: '导出',\n search: '搜索',\n clear: '清空',\n },\n table: {\n select: '选择',\n serialNumber: '序号',\n operation: '操作',\n },\n title: {\n collapse: '折叠',\n expand: '展开',\n },\n chooseDialog: {\n selected: '已选中',\n unit: '个',\n },\n customColumn: {\n columnSettings: '自定义列设置',\n defineColumn: '自定义列',\n hiddenField: '隐藏字段',\n visibleField: '显示字段',\n moveLeft: '左移',\n moveRight: '右移',\n moveUp: '上移',\n moveDown: '下移',\n },\n bpm: {\n approvalLog: '审批日志',\n },\n loading: {\n loading: '正在加载中...',\n },\n http: {\n networkError: '网络异常,请检查您的网络连接后重试',\n timeout: '请求超时,请稍后再试',\n requestError: '请求错误。请检查您的输入并重试',\n authExpired: '登录认证过期,请重新登录后继续',\n forbidden: '禁止访问, 您没有权限访问此资源',\n notFound: '未找到, 请求的资源不存在', //\n serverError: '内部服务器错误,请稍后再试',\n },\n },\n}\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'\nimport zhCn from '@el-plus/locale/lang/zh-cn'\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 const epLocalePath =\n process.env.NODE_ENV === 'development'\n ? `../locale/lang/${localeLang}.ts`\n : `/node_modules/el-plus/es/locale/lang/${localeLang}.mjs`\n const { default: locale = zhCn } = await import(\n /* @vite-ignore */ epLocalePath\n )\n const { t } = useElLocale(ref(locale 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 elLocalePath = `/node_modules/element-plus/es/locale/lang/${localeLang}.mjs`\n const { default: elLocale = zhCn } = await import(\n /* @vite-ignore */ elLocalePath\n )\n return elLocale\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 config?: RequestClientConfig,\n ): Promise<R> {\n return this.request<T>(url, { ...config, method: 'DELETE' }) as Promise<R>\n }\n\n /**\n * GET请求方法\n */\n public get<T = any, R = HttpSuccessResponse<T>>(\n url: string,\n config?: RequestClientConfig,\n ): Promise<R> {\n return this.request<T>(url, { ...config, method: 'GET' }) 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.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, computed, useTemplateRef, type SetupContext } 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\n return {\n filterFormItemList,\n elFormRef,\n validate,\n resetFields,\n clearValidate,\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) => {\n const attrs = useAttrs()\n const { type, label, render, required, labelRender } = props\n const prop = props.tableProp || props.prop\n const { scopedSlots: renderScopedSlots, ...renderProps } = props.props || {}\n const events: Record<string, (...args: any[]) => void> = {}\n for (const key in attrs) {\n if (key.startsWith('on')) {\n events[key] = attrs[key] as (...args: any[]) => void\n }\n }\n\n const formData = attrs['form-data'] as Record<string, unknown>\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 let disabled = props.disabled\n if (typeof props.disabled === 'function') {\n disabled = props.disabled(formData)\n }\n return type\n ? h(\n resolveComponent(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 },\n renderScopedSlots,\n )\n : formData[prop as string]\n },\n label: () => {\n return (\n <ElTooltip\n placement=\"top\"\n effect=\"dark\"\n content={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 && required ? (\n <span style=\"color: var(--el-color-danger);\">*</span>\n ) : null}\n {props.isShowLabel ? <span>{label}</span> : ''}\n </span>\n </ElTooltip>\n )\n },\n }\n\n if (labelRender) {\n scopedSlots.label = () => labelRender({ 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>\nexport const expandFormItemPropsKeys = Object.keys(expandFormItemProps)\n","import { defineComponent, useAttrs } 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)\n const { rules } = useFormItemRules(props)\n const { props: childProps, disabled, ...formItemProps } = props // eslint-disable-line\n return () => {\n return (\n <ElFormItem\n class={[bem.b(), prepareClassNames()]}\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 />\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 { filterFormItemList, elFormRef, validate, resetFields, clearValidate } =\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})\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} as const\nexport type InputProps = ExtractPropTypes<typeof inputProps>\nexport const inputEmits = {\n ...elInputEmits,\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, onMounted } 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 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 = 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') {\n onMounted(() => {\n inputRef.value.input.value = 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} from 'vue'\n\nexport interface TemplatePromiseOptions {\n // 过渡\n transition?: TransitionProps\n // 是否销毁\n destroy?: boolean\n // 自定义渲染\n render?: (props, ctx: SetupContext) => VNode\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 return create(...args)\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',\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 {\n h,\n getCurrentInstance,\n render as vRender,\n markRaw,\n ref,\n useTemplateRef,\n inject,\n} from 'vue'\nimport type { ComponentInternalInstance } from 'vue'\nimport {\n ElDialog,\n ElButton,\n configProviderContextKey,\n ElConfigProvider,\n} from 'element-plus'\nimport type { AppContext, VNode } from 'vue'\nimport type { DialogProps } from 'element-plus'\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport EpForm from '@el-plus/components/form'\nimport type { FormProps } from '@el-plus/components/form'\nimport {\n prepareProps,\n prepareEvents,\n prepareClassNames,\n prepareStyles,\n} 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 onCancel: (reject) => void\n onConfirm: (resolve) => void\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 onCancel,\n showFooter = true,\n ...dialogProps\n } = options\n\n const Dialog = useTemplatePromise({\n destroy: destroyOnClose,\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={() => {\n if (onCancel) {\n onCancel(reject)\n } else {\n reject('cancel')\n }\n }}\n >\n {t('ep.dialog.cancel')}\n </ElButton>\n {scopedSlots.footerInner?.(promiseOptions)}\n <ElButton\n type=\"primary\"\n onClick={async () => {\n if (onConfirm) {\n onConfirm(resolve)\n } else {\n resolve('confirm')\n }\n }}\n loading={isResolving}\n >\n {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 vRender(vnode, container)\n document.body.appendChild(container)\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/types'\nimport type { Canceler } 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 if (cancelToken) {\n config.cancelRequest = (cancel: Canceler) => {\n cancelRequest = cancel\n }\n }\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 (data.$query) {\n config.data[data.$query] = data.$searchValue\n delete data.$searchValue\n }\n\n if (reqBefore) {\n reqBefore(config)\n }\n return http.request(api, config)\n }\n } else {\n apiFn = api\n }\n const requestFn = async (data: Record<string, unknown> = {}) => {\n if (loading.value && !cancelToken) return\n loading.value = true\n try {\n cancelRequest && cancelRequest()\n const res = await apiFn(data)\n if (reqAfter) {\n reqAfter(res)\n }\n if (hooks?.success) {\n hooks.success(res.data)\n }\n } catch (error) {\n if (hooks?.fail) {\n hooks.fail(error)\n }\n } finally {\n loading.value = false\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}\n\nexport { getEnv, getBaseUrl }\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.defineColumn') }}</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[]>([])\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})\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 }\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<ButtonProps[]>,\n default: () => [],\n },\n // 是否初始化加载数据\n isInitSearch: {\n type: Boolean,\n default: true,\n },\n // 自定义列模块\n customColumnModule: {\n ...customColumnProps.module,\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 { reactive, ref } from 'vue'\nconst bem = createNameSpace('form-dialog')\n\ntype Options = {\n title?: string\n dialogProps?: DialogOptions\n formData?: FormProps['model']\n} & FormProps\nexport const useFormDialog = (options: Options = {}) => {\n const { dialogProps, title, ...formProps } = options\n const formRef = ref()\n let formData = formProps.formData || reactive({}) // eslint-disable-line\n return useDialog({\n class: bem.b(),\n width: '80%',\n title,\n render: (props) => {\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 resolve(formData)\n },\n ...dialogProps,\n })\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 nextTick,\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 {\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 customData = ref<Record<string, unknown>[]>([])\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 customData.value = data\n } else if (data && typeof data === 'object') {\n const rawData = data as Record<string, any>\n customData.value = rawData?.list || rawData?.data || []\n } else {\n customData.value = []\n }\n if (props.showPagination) {\n pagination.total =\n (props.isFrontPage\n ? customData.value.length\n : (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 nextTick()\n await beforeSearch?.()\n }\n if (init) {\n pagination.pageNo = 1\n }\n // 前端分页\n if (isPagination && props.isFrontPage) {\n const { pageNo, pageSize } = pagination\n const data = customData.value.filter((item, index) => {\n return index < pageNo * pageSize && index >= (pageNo - 1) * pageSize\n })\n customData.value = data\n } else {\n if (props.api) {\n requestFn!({\n pageNo: pagination.pageNo,\n pageSize: pagination.pageSize,\n pageNum: pagination.pageNo,\n })\n } else if (props.data?.length) {\n customData.value = props.data\n }\n }\n }\n if (!props.api) {\n watch(\n () => props.data,\n (newValue) => {\n customData.value = newValue as Record<string, any>[]\n },\n {\n deep: true,\n },\n )\n }\n\n const { pagination, paginationProps } = usePagination(props, search)\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 clearValidate = (props: FormItemProp) => {\n return elFormRef.value!.clearValidate(props)\n }\n // 格式化操作按钮\n const formatActionButtons = (list: ButtonProps[], scope: TableScope) => {\n return list.map((item) => {\n if (item.onClick) {\n item.onClick = item.onClick.bind(null, scope)\n }\n return item\n })\n }\n\n return {\n loading,\n data: customData,\n search,\n pagination,\n paginationProps,\n validate,\n resetFields,\n clearValidate,\n elFormRef,\n elTableRef,\n formatActionButtons,\n customColumns: customColumns as unknown as Ref<TableColumn[]>,\n }\n}\nconst usePagination = function (props: TableProps, search: ISearch) {\n const pageSizes = [20, 50, 100, 200]\n const pagination = reactive({\n total: 0,\n pageNo: 1,\n pageSize: pageSizes[0],\n })\n const paginationProps = computed(() => {\n const defaultPaginationProps = props.paginationProps || {}\n const onSizeChange = defaultPaginationProps.onSizeChange\n const onCurrentChange = defaultPaginationProps.onCurrentChange\n return {\n ...defaultPaginationProps,\n pageSizes,\n layout: 'total, sizes, prev, pager, next, jumper',\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 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 let newColumn = { ...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 }\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 columnProps,\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 }\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 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=\"index\"\n v-bind=\"columnProps(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 :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 ...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 loading,\n search,\n elFormRef,\n elTableRef,\n formatActionButtons,\n customColumns,\n} = useTable(props)\nconst { columnProps, 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 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 { 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 showOperationColumn: Boolean, // 是否显示操作列\n // 表单列表\n formItemList: {\n ...formProps.formItemList,\n },\n // 左侧按钮\n leftButtons: {\n ...buttonsProps.list,\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 // 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>\n","import { ref, onMounted, computed, useTemplateRef } from 'vue'\nimport type { SearchListPageProps } from './search-list-page'\nimport type { ButtonsProps } 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, getEnv } from '@el-plus/utils'\nimport { useLocale } from '@el-plus/hooks/use-locale'\n\nexport const useSearchListPage = (props: SearchListPageProps, config = {}) => {\n const { calcTableHeight, tableProps, tableRef } = useTable(props, config)\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 })\n return {\n formProps,\n tableProps,\n buttonsProps,\n searchButtons,\n search,\n reset,\n tableRef,\n formRef,\n beforeSearch: validate,\n }\n}\nconst useTable = (props: SearchListPageProps, config) => {\n const instanceName = 'tableRef'\n const tableRef = useTemplateRef<TableInstance>(instanceName)\n const tableHeight = ref(window.innerHeight)\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 reqData: props.formData,\n customColumnModule: props.customColumnModule,\n minWidth: props.minWidth,\n actionColWidth: props.actionColWidth,\n ...props.tableProps,\n }\n })\n const calcTableHeight = () => {\n setTimeout(() => {\n const topHeight = (document.getElementById('top') as HTMLElement)\n .offsetHeight\n const middleHeight = (document.getElementById('middle') as HTMLElement)\n .offsetHeight\n let paginationHeight = 0\n if (tableProps.value.showPagination) {\n paginationHeight =\n (document.querySelector('.el-pagination') as HTMLElement)\n .offsetHeight + 12\n }\n const frameDistance = getEnv() ? 90 : 40\n tableHeight.value =\n window.innerHeight -\n topHeight -\n middleHeight -\n paginationHeight -\n frameDistance -\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 },\n) => {\n const { t } = useLocale()\n const defaultButtons: ButtonsProps['list'] = [\n {\n name: t('ep.searchListPage.add'),\n prop: 'add',\n permission: props.name ? `${props.name}:ADD` : '',\n show: () => {\n return !!props.add\n },\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.defineColumn'),\n prop: 'customColumn',\n type: 'primary',\n onClick: () => {\n tableRef.value.openCustomColumnDialog()\n },\n })\n }\n list.forEach((item) => {\n if (item.onClick) {\n const clickFn = item.onClick\n item.onClick = () => {\n // 增加选中项\n const rows = tableRef.value.elTableRef.getSelectionRows()\n clickFn(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 tableRef.value.search(isInitSearch)\n }\n // 清空\n const reset = async () => {\n resetFields()\n search(true)\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 :class=\"[bem.b(), prepareClassNames()]\"\n :style=\"{\n ...prepareStyles(),\n }\"\n >\n <div id=\"top\">\n <EpForm v-bind=\"formProps\" />\n </div>\n <div id=\"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 } from './search-list-page'\nimport { useSearchListPage } from './use-search-list-page'\ndefineOptions({ name: 'EpSearchListPage' })\nconst bem = createNameSpace('search-list-page')\nconst props = defineProps(searchListPageProps)\n\nconst {\n formProps,\n buttonsProps,\n searchButtons,\n search,\n reset,\n tableRef,\n formRef,\n tableProps,\n beforeSearch,\n} = useSearchListPage(props)\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 * 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 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 } 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 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 customOptions.value = data as OptionArr\n } else if (data && typeof data === 'object') {\n const rawData = data as OptionObj\n customOptions.value = rawData?.list || rawData?.data || []\n } else {\n customOptions.value = []\n }\n hasLoaded = true\n },\n fail(error) {\n console.error(error)\n },\n },\n })\n // 下拉列表\n const customOptions = ref<SelectOption[]>([]) // 下拉列表\n // 加载下拉列表\n const loadOptions = (\n value: SelectProps['modelValue'],\n desc: string | undefined,\n ) => {\n if ((value || value === 0) && desc) {\n customOptions.value = [\n {\n [props.labelKey]: desc,\n [props.valueKey]: value,\n },\n ]\n }\n if (props.api) {\n if (!props.lazy && !props.remote) {\n requestFn!()\n }\n } else if (props.options?.length) {\n customOptions.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 = {\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 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 } 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 desc = defineModel<string>('desc')\nconst customAttrs = computed(() => {\n return {\n ...prepareProps(props, ['modelValue', 'desc', ...expandSelectPropsKeys]),\n ...prepareEvents<SelectEmits>(emit, selectEmitsKeys),\n ...expandAttrs,\n }\n})\nloadOptions(value.value, desc.value)\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 { PageMode } from '@el-plus/hooks/use-navigation'\nexport type defaultButtonsProps =\n | 'modify'\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 default: () => [],\n },\n // 工作流id\n workflowId: String,\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 const useNavigation = () => {\n const router = useRouter()\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 const { query } = useRoute()\n return 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 return {\n $goto,\n $closeTag,\n mode,\n isBrowse,\n isEdit,\n isAdd,\n }\n}\n","import { computed } from 'vue'\nimport { useRouter, useRoute } 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: 'modify',\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 }\n const buttons = mergeListByKey(defaultButtons, props.buttons)\n\n return {\n buttons,\n }\n}\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 </div>\n</template>\n<script setup lang=\"ts\">\nimport { createNameSpace } from '@el-plus/utils/bem'\nimport { headerProps, headerEmits } from './header'\nimport {\n prepareProps,\n prepareEvents,\n prepareClassNames,\n prepareStyles,\n} from '@el-plus/utils/props'\nimport { useHeader, useButtons } from './use-header'\nimport { ElPageHeader } from 'element-plus'\nimport EpButtons from '@el-plus/components/buttons'\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\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 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 { 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'\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] 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 { EpSearchListPage } 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 } 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 let selections = []\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.length}\n {t('ep.chooseDialog.unit')}\n </span>\n )\n }\n }\n return useDialog({\n class: bem.b(),\n width: '80%',\n showFooter: !showSingleSelectionCol,\n scopedSlots,\n title,\n onConfirm: (resolve) => {\n resolve(toRaw(selections))\n },\n render: ({ resolve }) => {\n const formData = rest.formData || reactive({})\n return (\n <EpSearchListPage\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 onSelectionChange: (newSel) => {\n selections = newSel\n },\n onSingleSelectionChange: (newSel) => {\n selections = newSel\n resolve(toRaw(selections))\n },\n },\n }}\n />\n )\n },\n ...dialogProps,\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","zhCn","TRANSLATER_KEY","cachedTranslater","useLocale","localeLang","addLangClass","lang","nextTick","translater","getCurrentInstance","inject","app","inSetup","provideFn","provide","resolve","epLocalePath","locale","t","useElLocale","ref","error","elLocalePath","elLocale","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","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","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","useFormItemSlots","attrs","label","render","required","labelRender","tableProp","renderScopedSlots","renderProps","events","startsWith","formData","isTipDisabled","checkOverflow","currentTarget","scrollWidth","clientWidth","h","resolveComponent","modelValue","clearable","ElTooltip","isShowLabel","hideRequiredAsterisk","_createTextVNode","useFormItemRules","rules","mergeRules","requiredDefault","push","Array","isArray","concat","Object","toString","call","forEach","r","message","expandFormItemProps","formItemProps","elFormItemProps","expandFormItemPropsKeys","EpFormItem","childProps","ElFormItem","__props","__emit","customAttrs","_useModel","validate","resetFields","clearValidate","isShowFormItem","__expose","_createElementBlock","_normalizeClass","_unref","_normalizeStyle","_renderSlot","_ctx","ElRow","_openBlock","_renderList","_createBlock","ElCol","col","labelWidth","_vShow","EpForm","Form","inputProps","elInputProps","inputEmits","elInputEmits","inputEmitsKeys","slots","useSlots","isBluring","isFocusing","val","toThousand","inputRef","watch","onMounted","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","wrapper","document","querySelector","style","dialog","zIndex","component","defineComponent","_","ctx","renderList","withDirectives","class","vShow","_slot","Transition","markRaw","useDialog","destroyOnClose","onConfirm","onCancel","showFooter","dialogProps","Dialog","promiseOptions","bind","renderFunc","footer","_slot2","footerPrepend","ElButton","footerInner","footerAppend","ElDialog","closeOnClickModal","closeOnPressEscape","title","center","beforeClose","container","createElement","newInstance","configProviderContextKey","vnode","ElConfigProvider","appContext","vRender","body","appendChild","customColumnProps","customColumnEmits","useRequest","api","method","reqData","reqParams","reqBefore","reqAfter","cancelToken","hooks","loading","cancelRequest","apiFn","cancel","params","res","getParentEl","className","parent","getChildEl","bus","mitt","payload","getEnv","mark","hostname","tag","gotoTaskTrace","workflowId","CustomColumnDialog","width","saveColumnsFn","module","userModuleColumnsReqs","showData","columnId","seq","then","columns","showTableColumns","allData","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","reactive","useTable","elTableRef","customData","rawData","showPagination","pagination","total","isFrontPage","fail","console","customColumns","search","init","isPagination","beforeSearch","pageNo","pageSize","pageNum","newValue","deep","paginationProps","usePagination","isInitSearch","customColumnModule","once","on","formatActionButtons","pageSizes","defaultPaginationProps","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","useTableFormItem","rawItem","cloneDeep","cellRequired","disabledOption","btnItem","content","fn","event","Event","shift","$index","keys","customColumnRef","openCustomColumnDialog","_component_el_form","model","inline","_component_el_table","_createSlots","showSelectionCol","_component_el_table_column","selectable","fixed","showSingleSelectionCol","_component_el_link","underline","showIndexCol","indexFormatter","actionButtons","actionColWidth","_component_EpButtons","ref_for","$slots","_component_el_pagination","EpTable","Table","searchListPageProps","useSearchListPage","calcTableHeight","tableRef","searchButtons","reset","useButtons","instanceName","tableHeight","topHeight","middleHeight","paginationHeight","frameDistance","defaultButtons","rows","EpSearchListPage","SearchListPage","inheritSelectProps","elSelectProps","expandSelectProps","selectProps","expandSelectPropsKeys","selectEmits","elSelectEmits","selectEmitsKeys","useSelect","hasLoaded","customOptions","loadOptions","desc","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","router","useRouter","$goto","openTab","routes","projectRootPath","route","distRoute","queen","first","qs","$closeTag","currentRouterTagIndex","preIndex","currentTag","preTag","mode","useRoute","isBrowse","isEdit","isAdd","useHeader","defaultMode","isShowBack","goBack","ElPageHeader","EpHeader","Header","datePickerRangeProps","elDatePickerProps","end","datePickerRangeEmits","_component_el_date_picker","EpDatePickerRange","DatePickerRange","linkProps","elLinkProps","EpLink","Link","components","globalProperties","useChooseDialog","multiple","rest","selections","height","onSelectionChange","newSel","onSingleSelectionChange","INSTALLED_KEY","install","c","plugins","p","plugin","version"],"mappings":"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"}
|