el-plus2 0.0.0 → 0.0.3
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/dist/index.full.js +16 -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 +11 -11
- package/es/components/buttons/index.d.ts +2 -2
- package/es/components/buttons/index.mjs +3 -3
- package/es/components/buttons/index.mjs.map +1 -1
- package/es/components/form/index.d.ts +2 -2
- package/es/components/form/index.mjs +2 -2
- package/es/components/form/index.mjs.map +1 -1
- package/es/components/index.mjs +6 -0
- package/es/components/index.mjs.map +1 -1
- package/es/components/input/index.d.ts +2 -2
- package/es/components/input/index.mjs +2 -2
- package/es/components/input/index.mjs.map +1 -1
- package/es/components/searchListPage/index.d.ts +2 -2
- package/es/components/searchListPage/index.mjs +2 -2
- package/es/components/searchListPage/index.mjs.map +1 -1
- package/es/components/searchListPage/src/searchListPage.vue2.mjs +4 -4
- package/es/components/select/index.d.ts +2 -2
- package/es/components/select/index.mjs +2 -2
- package/es/components/select/index.mjs.map +1 -1
- package/es/components/table/index.d.ts +2 -2
- package/es/components/table/index.mjs +2 -2
- package/es/components/table/index.mjs.map +1 -1
- package/es/components.mjs +7 -7
- package/es/components.mjs.map +1 -1
- package/es/index.mjs +6 -0
- package/es/index.mjs.map +1 -1
- package/global.d.ts +8 -6
- package/lib/components/buttons/index.d.ts +2 -2
- package/lib/components/buttons/index.js +3 -2
- package/lib/components/buttons/index.js.map +1 -1
- package/lib/components/form/index.d.ts +2 -2
- package/lib/components/form/index.js +3 -2
- package/lib/components/form/index.js.map +1 -1
- package/lib/components/index.js +12 -0
- package/lib/components/index.js.map +1 -1
- package/lib/components/input/index.d.ts +2 -2
- package/lib/components/input/index.js +3 -2
- package/lib/components/input/index.js.map +1 -1
- package/lib/components/searchListPage/index.d.ts +2 -2
- package/lib/components/searchListPage/index.js +3 -2
- package/lib/components/searchListPage/index.js.map +1 -1
- package/lib/components/searchListPage/src/searchListPage.vue2.js +2 -2
- package/lib/components/select/index.d.ts +2 -2
- package/lib/components/select/index.js +3 -2
- package/lib/components/select/index.js.map +1 -1
- package/lib/components/table/index.d.ts +2 -2
- package/lib/components/table/index.js +3 -2
- package/lib/components/table/index.js.map +1 -1
- package/lib/components.js +1 -1
- package/lib/components.js.map +1 -1
- package/lib/index.js +16 -4
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/es/version.d.ts +0 -1
- package/es/version.mjs +0 -4
- package/es/version.mjs.map +0 -1
- package/lib/version.d.ts +0 -1
- package/lib/version.js +0 -6
- package/lib/version.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.full.min.js","sources":["../../../packages/components/buttons/src/buttons.ts","../../../packages/utils/bem.ts","../../../packages/utils/props.ts","../../../packages/directives/repeat-click/index.ts","../../../packages/utils/env.ts","../../../packages/utils/cookie.ts","../../../packages/utils/request.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/components/table/src/table.ts","../../../packages/hooks/use-request.ts","../../../packages/components/table/src/use-table.tsx","../../../packages/components/table/src/table.vue","../../../packages/components/table/index.ts","../../../packages/components/searchListPage/src/searchListPage.ts","../../../packages/components/searchListPage/src/use-search-list-page.ts","../../../packages/components/searchListPage/src/searchListPage.vue","../../../packages/components/searchListPage/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/el-plus/components.ts","../../../packages/el-plus/index.ts"],"sourcesContent":["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 type { VisibleProps } from '@el-plus/utils/props'\nimport type { TableScope } from '@el-plus/components/table'\n\nexport type ButtonProps = Partial<\n ElButtonProps & {\n name: string\n prop: string // 唯一标识\n permission: string // 权限\n onClick: (e: MouseEvent | TableScope) => void\n scopedSlots: Record<string, () => VNode>\n confirm: boolean\n confirmText: string\n } & VisibleProps\n>\nexport const buttonsProps = {\n ...elButtonProps,\n disabled: {\n type: [Boolean, Function] as PropType<\n boolean | ((...args: any[]) => boolean)\n >,\n },\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}\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 { Api, ReqBefore, ReqAfter, Method } from './type'\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}\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 { 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","const getEnv = (mark = 'hxjf', hostname = window.location.hostname) => {\n const tag = hostname.match(new RegExp(`.*(?=${mark})`))\n if (hostname === 'hxdv-ui.hongxinshop.com') {\n return 'production'\n }\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","const setCookie = (\n name: string,\n value: string,\n expiresHours: number,\n path: string = '',\n) => {\n let cookieString = `${name}=${escape(value)}`\n if (expiresHours === Infinity) {\n cookieString = `${cookieString}; expires=Fri, 31 Dec 9999 23:59:59 GMT`\n }\n // 判断是否设置过期时间\n else if (expiresHours > 0) {\n // debugger;\n const date = new Date()\n date.setTime(date.getTime() + expiresHours * 60 * 60 * 1000)\n cookieString = `${cookieString}; expires=\" + date.toGMTString()`\n }\n\n document.cookie = `${cookieString};path=${path}`\n}\n\nconst getCookie = (name: string) => {\n const reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')\n const arr = document.cookie.match(reg)\n if (arr) {\n return decodeURIComponent(arr[2])\n }\n return null\n}\n\nconst delCookie = ({ name, path = '' }: { name: string; path: string }) => {\n if (path === 'all') {\n document.cookie = name + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;path=/'\n } else {\n document.cookie =\n name + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;path=' + path\n }\n}\n\nexport { setCookie, getCookie, delCookie }\n","import axios from 'axios'\nimport { getBaseUrl } from './env'\nimport { getCookie } from './cookie'\nimport { ElMessage, ElLoading } from 'element-plus'\nimport 'element-plus/es/components/message/style/css'\nimport 'element-plus/es/components/loading/style/css'\n\n// 创建一个axios实例\nconst instance = axios.create({\n method: 'post',\n timeout: 20000,\n baseURL: getBaseUrl(),\n headers: {\n 'Content-Type': 'application/json',\n },\n})\nlet reqNum = 0\nlet loading = { close: () => {} }\nfunction startLoading() {\n if (reqNum === 0) {\n loading = ElLoading.service({\n fullscreen: true,\n lock: true,\n text: '请稍等,正在加载中...',\n spinner: 'el-icon-loading',\n background: 'rgba(0,0,0,0.7)',\n })\n }\n\n reqNum++\n}\n\nfunction closeLoading() {\n if (reqNum <= 0) {\n return\n }\n\n reqNum--\n\n if (reqNum === 0) {\n loading.close()\n }\n}\n\nfunction endLoading() {\n closeLoading()\n}\ninstance.interceptors.request.use(\n async (config) => {\n const token = getCookie('access_token')\n if (token) {\n config.headers['Authorization'] = `Bearer ${token}`\n }\n if (config.loading) {\n startLoading()\n }\n config.headers = {\n ...config.headers,\n ...(window.hx &&\n window.hx.getSignHeaders({\n // 只有openapi接口需要传sign\n sign: config.sign || window.ELPLUSSIGN,\n config,\n })),\n }\n const cancelRequest = config.cancelRequest\n config.cancelToken = new axios.CancelToken(function (cancel) {\n cancelRequest && cancelRequest(cancel)\n })\n return config\n },\n (error) => {\n console.log(error)\n return Promise.reject(error)\n },\n)\ninstance.interceptors.response.use(\n (response) => {\n const config = response.config\n if (config.loading) {\n endLoading()\n }\n const responseCode = response.data.code\n const { hideToast, hideToastCode = {} } = response.config.headers\n // 由于数组会被axios自动转换成对象,所以将其先转换成伪数组然后转换成数组\n hideToastCode.length = Object.keys(hideToastCode).length\n if (responseCode === 200) {\n return Promise.resolve(response.data)\n } else if (\n hideToast ||\n Array.prototype.slice.call(hideToastCode).indexOf(responseCode) > -1\n ) {\n return Promise.reject(response.data)\n } else {\n setTimeout(() => {\n ElMessage.error({\n message: `<pre>${response.data.msg}</pre>`,\n type: 'error',\n duration: 2000,\n dangerouslyUseHTMLString: true,\n })\n }, 300)\n return Promise.reject(response.data)\n }\n },\n (error) => {\n const { config = {}, message } = error\n const { url } = config\n if (config.loading) {\n endLoading()\n }\n\n if (error && error.response) {\n const { status } = error.response\n switch (status) {\n case 400:\n error.message = error.response.data.message || error.response.data.msg\n break\n case 403:\n error.message = '拒绝访问(403)'\n break\n case 404:\n error.message = '请求出错(404)'\n break\n case 408:\n error.message = '请求超时(408)'\n break\n case 500:\n error.message = '服务器错误(500)'\n break\n case 501:\n error.message = '服务未实现(501)'\n break\n case 502:\n error.message = '网络错误(502)'\n break\n case 503:\n error.message = '服务不可用(503)'\n break\n case 504:\n error.message = '网络超时(504)'\n break\n case 505:\n error.message = 'HTTP版本不受支持(505)'\n break\n default:\n error.message = `连接出错(${error.response.status})!`\n }\n } else {\n // 请求超时状态\n if (error.message.includes('timeout')) {\n error.message = `请求${url ? url : ''}超时,请检查网络是否连接正常`\n } else {\n error.message = `请求${url ? url : ''}失败,请检查网络是否已连接`\n }\n }\n if (!axios.isCancel(error) || !config.noErrorMsg) {\n ElMessage.error({\n message: error.message,\n type: 'error',\n duration: 2000,\n dangerouslyUseHTMLString: true,\n })\n }\n\n return Promise.reject(error)\n },\n)\nconst fetch = instance.request\nexport { instance }\nexport default fetch\n","import type { Directive } from 'vue'\nimport request from '@el-plus/utils/request'\n\n// v-permisson:CGXQD:QXSP\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 = `${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 = request({\n url: '/api-u/api/saas/user/appButtonRoleList',\n loading: true,\n noErrorMsg: 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'\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 { 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 = item.confirmText || `确定要${item.name}吗?`\n await ElMessageBox.confirm(confirmText, 'Warning', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning',\n })\n }\n item.onClick()\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 }}\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 default withInstall(Buttons)\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}\nexport type FormProps = ExtractPropTypes<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 } from 'vue'\nimport type { FormItemProps } from '../form-item'\nimport type { FormItemRule } from 'element-plus'\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 scopedSlots = {\n default: () => {\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 ...renderProps,\n ...events,\n },\n renderScopedSlots,\n )\n : formData[prop as string]\n },\n label: () => {\n return (\n <el-tooltip\n placement=\"top\"\n effect=\"light\"\n content={label}\n disabled={!props.isShowLabel}\n >\n <span>\n {!props.hideRequiredAsterisk && required ? (\n <span style=\"color: var(--el-color-danger);\">*</span>\n ) : null}\n {props.isShowLabel ? <span>{label}</span> : ''}\n </span>\n </el-tooltip>\n )\n },\n }\n\n if (labelRender) {\n scopedSlots.label = () => labelRender({ label })\n }\n if (render) {\n scopedSlots.default = render\n }\n return {\n scopedSlots,\n }\n}\nexport const useFormItemRules = (props: FormItemProps) => {\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 || ''}不能为空`\n }\n })\n }\n return { rules: mergeRules }\n}\n","import { formItemProps as elFormItemProps } from 'element-plus'\nimport { visibleProps } 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<() => VNode>,\n labelRender: Function as PropType<\n ({ label }: { label: string | undefined }) => VNode\n >,\n props: Object,\n ...visibleProps,\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}\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 { 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, ...formItemProps } = props // eslint-disable-line\n return () => {\n return (\n <el-form-item\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 ? '收起' : '更多' }}\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 { useCollapse, useForm } from './hooks/use-form'\nimport FormItem from './form-item-vue'\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 default withInstall(Form)\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\n","import type { ExtractPropTypes } from 'vue'\nimport {\n inputProps as elInputProps,\n inputEmits as elInputEmits,\n} from 'element-plus'\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 },\n thousand: {\n type: Boolean,\n default: true,\n },\n clearable: {\n ...elInputProps.clearable,\n default: true,\n },\n}\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 default withInstall(Input)\nexport * from './src/input'\n\n// GlobalComponents是vue3自带,用于扩展接口,给用户自定义全局组件补充类型提示\ndeclare module 'vue' {\n export interface GlobalComponents {\n // 接口自动合并\n EpInput: typeof Input\n }\n}\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/utils/type'\nimport type {\n TableColumnCtx,\n PaginationProps,\n PaginationEmits,\n} from 'element-plus'\nimport type { ButtonProps } from '@el-plus/components/buttons'\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 props: Record<string, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n filter: boolean // 是否显示筛选\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 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 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 linkProps: {\n type: Array as PropType<ButtonProps[]>,\n default: () => [],\n },\n}\n\nexport const tableProps = {\n ...inheritTableProps,\n ...expandTableProps,\n}\nexport type TableProps = ExtractPublicPropTypes<typeof tableProps>\nexport const expandTablePropsKeys = Object.keys(expandTableProps)\n\nexport const tableEmits = ElTable.emits\n\nexport type TableEmits = typeof tableEmits\nexport const tableEmitsKeys = tableEmits\n","import { ref } from 'vue'\nimport { type Ref } from 'vue'\nimport type { Api, ReqAfter, ReqBefore, Method } from '@el-plus/utils/type'\nimport type { Canceler } from 'axios'\n\nimport request from '@el-plus/utils/request'\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,\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 url: api,\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 request(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","import type { FormInstance, TableInstance, FormItemProp } from 'element-plus'\nimport { ref, computed, type Ref, reactive, useTemplateRef } 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 {\n prepareProps,\n prepareEvents,\n prepareClassNames,\n prepareStyles,\n} from '@el-plus/utils/props'\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 search: ISearch = (init = false, isPagination = false) => {\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 })\n } else if (props.data?.length) {\n customData.value = props.data\n }\n }\n }\n const { pagination, paginationProps } = usePagination(props, search)\n search(true)\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 }\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) => {\n const columnProps = (column: TableColumn) => {\n const attrs = {\n align: column.align || props.align,\n // ...prepareEvents<TableEmits>(emit, tableEmits),\n } as TableColumn\n // console.log(attrs)\n\n if (!column.renderHeader) {\n let required = column.required\n if (typeof column.required === 'function') {\n required = column.required()\n }\n if (required) {\n attrs['renderHeader'] = (data) => {\n const { column } = data\n return (\n <span>\n <span style=\"color:var(--el-color-danger)\"> * </span>\n {column.label}\n </span>\n )\n }\n }\n }\n if (column.headerRender) {\n attrs.renderHeader = column.headerRender\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 return {\n ...attrs,\n ...prepareProps(column),\n }\n }\n const columnList = computed(() => {\n return props.columns!.filter((column: TableColumn) => {\n if (props.linkProps!.length) {\n const linkColumn = props.linkProps!.find(\n (item) => item.prop === column.prop,\n )\n if (linkColumn) {\n column.type = 'EpButtons'\n column.className = 'table-column-link'\n column.props = {\n list: [linkColumn],\n type: 'text',\n ...column.props,\n }\n }\n }\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, item: TableColumn) => {\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 for (const key in item) {\n if (key.startsWith('on') && typeof item[key] === 'function') {\n const fn = item[key]\n item[key] = (...args: unknown[]) => fn(...args, scope)\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=\"showIndexCol\"\n type=\"index\"\n width=\"56\"\n :align\n label=\"序号\"\n fixed\n :index=\"indexFormatter\"\n />\n\n <el-table-column\n v-if=\"actionButtons.length\"\n label=\"操作\"\n :align\n fixed\n width=\"200\"\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\"\n :form-data=\"scope.row\"\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 </div>\n</template>\n<script setup lang=\"tsx\">\nimport { computed, useSlots, ref } 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 { useTable, useTableColumn, useTableFormItem } from './use-table'\nimport { linkProps } from 'element-plus'\n\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 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} = useTable(props)\nconst { columnProps, columnList } = useTableColumn(props, data)\nconst { formItemProps } = useTableFormItem(props)\n\ndefineExpose({\n elFormRef,\n elTableRef,\n validate,\n resetFields,\n clearValidate,\n search,\n})\n// const value = defineModel<TableProps['modelValue']>()\n</script>\n","import Table from './src/table.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport default withInstall(Table)\nexport * from './src/table'\nexport type TableInstance = InstanceType<typeof Table>\n// GlobalComponents是vue3自带,用于扩展接口,给用户自定义全局组件补充类型提示\ndeclare module 'vue' {\n export interface GlobalComponents {\n // 接口自动合并\n EpTable: typeof Table\n }\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'\nconsole.log(formProps.formItemList)\n\nexport const searchListPageProps = {\n ...apiProps,\n customColumnModule: Number, // 自定义列模块\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 actionButtons: {\n ...tableProps.actionButtons,\n },\n // 链接列\n linkProps: {\n ...tableProps.linkProps,\n },\n showSelectionCol: 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}\nexport type SearchListPageProps = ExtractPublicPropTypes<\n typeof searchListPageProps\n>\n","import { ref, onMounted, computed, useTemplateRef } from 'vue'\nimport type { SearchListPageProps } from './searchListPage'\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'\nexport const useSearchListPage = (props: SearchListPageProps) => {\n const { calcTableHeight, tableProps, tableRef } = useTable(props)\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 }\n}\nconst useTable = (props: SearchListPageProps) => {\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 actionButtons: props.actionButtons,\n linkProps: props.linkProps,\n api: props.api,\n reqData: props.formData,\n ...props.tableProps,\n }\n })\n const calcTableHeight = () => {\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).offsetHeight +\n 12\n }\n const frameDistance = 40\n tableHeight.value =\n window.innerHeight -\n topHeight -\n middleHeight -\n paginationHeight -\n frameDistance -\n props.offsetTop!\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 setTimeout(() => {\n calcTableHeight()\n }, 0) // 等展开后计算表格高度\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 defaultButtons: ButtonsProps['list'] = [\n {\n name: '新增',\n prop: 'add',\n show: () => {\n return !!props.add\n },\n onClick: () => {\n props.add?.()\n },\n },\n {\n name: '模版下载',\n prop: 'templateDownload',\n show: !!props.templateDownloadApi,\n },\n {\n name: '导入',\n prop: 'import',\n show: !!props.importApi,\n },\n {\n name: '导出',\n prop: 'export',\n show: !!props.exportApi,\n },\n ]\n props.leftButtons?.forEach((item) => {\n const defaultIndex = defaultButtons.findIndex(\n (item1) => item1.prop === item.prop,\n )\n if (defaultIndex !== -1) {\n defaultButtons[defaultIndex] = {\n ...defaultButtons[defaultIndex],\n ...item,\n }\n }\n })\n const list = defaultButtons.concat(props.leftButtons!)\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 () => {\n await validate()\n tableRef.value.search(true)\n }\n // 清空\n const reset = async () => {\n resetFields()\n search()\n }\n const searchButtons: ButtonsProps['list'] = [\n {\n name: '搜索',\n type: 'primary',\n onClick: search,\n },\n {\n name: '清空',\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\" />\n </div>\n</template>\n<script setup lang=\"ts\">\nimport EpForm from '@el-plus/components/form'\nimport EpTable from '@el-plus/components/table'\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 './searchListPage'\nimport { useSearchListPage } from './use-search-list-page'\nimport { computed } from 'vue'\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} = useSearchListPage(props)\n\ndefineExpose({\n search,\n reset,\n tableRef,\n formRef,\n})\n</script>\n","import SearchListPage from './src/searchListPage.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport default withInstall(SearchListPage)\nexport * from './src/searchListPage'\n\n// GlobalComponents是vue3自带,用于扩展接口,给用户自定义全局组件补充类型提示\ndeclare module 'vue' {\n export interface GlobalComponents {\n // 接口自动合并\n EpSearchListPage: typeof SearchListPage\n }\n}\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}\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 (!props.options) return []\n return props.options.filter((item: SelectOption) => {\n return value.indexOf(item[props.valueKey]) > -1\n })\n }\n if (!props.options) return {}\n return (\n props.options.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 default withInstall(Select)\nexport * from './src/select'\n\ndeclare module 'vue' {\n export interface GlobalComponents {\n EpSelect: typeof Select\n }\n}\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/searchListPage'\nimport Select from '@el-plus/components/select'\nimport Table from '@el-plus/components/table'\n\nexport default [Buttons, Form, Input, SearchListPage, Select, Table] as Plugin[]\n","import type { App, Plugin } from 'vue'\nimport components from './components'\nimport { version } from './package.json'\nexport const install = (app: App, options?: Record<string, any>) => {\n components.forEach((c) => app.use(c))\n if (options) {\n }\n}\n\nconst plugin: Plugin & { version: string } = {\n install,\n version,\n}\nexport default plugin\nexport * from '@el-plus/components'\nexport * from '@el-plus/hooks'\nexport * from '@el-plus/directives'\n"],"names":["buttonsProps","elButtonProps","_bem","prefix","block","element","modifier","createBEM","name","state","createNameSpace","apiProps","visibleProps","prepareProps","props","excludeKeys","acc","key","prepareEvents","emit","eventKeys","eventName","word","args","prepareClassNames","useAttrs","prepareStyles","SCOPE","vRepeatClick","el","binding","delay","immediate","handler","isPending","timer","start","e","getEnv","mark","hostname","tag","getBaseUrl","env","isOpenApi","url","query","getCookie","reg","arr","instance","axios","reqNum","loading","startLoading","ElLoading","closeLoading","endLoading","config","token","cancelRequest","cancel","error","response","responseCode","hideToast","hideToastCode","ElMessage","message","status","fetch","vPermisson","arg","value","permission","checkPermission","roles","queryRoles","hasPermission","requestPromise","request","bem","Buttons$1","directives","vPermission","inheritAttrs","setup","list","buttonProps","customList","computed","filter","button","show","hide","clickFn","item","confirm","confirmText","ElMessageBox","confirmButtonText","cancelButtonText","type","onClick","_createVNode","_Fragment","map","permissionArr","split","_withDirectives","_resolveComponent","_mergeProps","b","prop","default","scopedSlots","_resolveDirective","withInstall","comp","app","Buttons","expandFormProps","formProps","elFormProps","expandFormPropsKeys","formEmits","elFormEmits","formEmitsKeys","useCollapse","isShowFold","showFieldCount","filterFormItemList","open","ref","toggleStatus","isShowFoldBtn","index","useForm","elFormRef","useTemplateRef","useFormItemSlots","attrs","label","render","required","labelRender","tableProp","renderScopedSlots","renderProps","events","startsWith","formData","h","resolveComponent","modelValue","isShowLabel","hideRequiredAsterisk","_createTextVNode","useFormItemRules","rules","mergeRules","requiredDefault","push","Array","isArray","concat","Object","prototype","toString","call","forEach","r","expandFormItemProps","formItemProps","elFormItemProps","expandFormItemPropsKeys","EpFormItem","childProps","__props","__emit","customAttrs","_useModel","validate","resetFields","clearValidate","isShowFormItem","__expose","_createElementBlock","_normalizeClass","_unref","_normalizeStyle","_component_el_form","_renderSlot","_ctx","_component_el_row","_openBlock","_renderList","_createBlock","_component_el_col","col","labelWidth","_vShow","Form","inputProps","elInputProps","inputEmits","elInputEmits","inputEmitsKeys","slots","useSlots","isBluring","isFocusing","val","toThousand","inputRef","watch","onMounted","_component_el_input","$event","_withCtx","scope","_normalizeProps","_guardReactiveProps","Input","inheritTableProps","elTableProps","expandTableProps","tableProps","expandTablePropsKeys","tableEmits","ElTable","tableEmitsKeys","useRequest","api","method","reqData","reqParams","reqBefore","reqAfter","cancelToken","hooks","apiFn","data","params","res","useTable","elTableRef","customData","requestFn","success","rawData","showPagination","pagination","total","isFrontPage","length","fail","console","search","init","isPagination","pageNo","pageSize","paginationProps","usePagination","formatActionButtons","bind","pageSizes","reactive","defaultPaginationProps","onSizeChange","onCurrentChange","layout","useTableColumn","tableData","columnProps","column","align","renderHeader","headerRender","filters","Set","text","filterMethod","row","columnList","columns","linkProps","linkColumn","find","className","useTableFormItem","cellRequired","disabled","options","disabledOption","btnItem","fn","$index","keys","size","class","style","model","inline","_component_el_table","_createSlots","showSelectionCol","_component_el_table_column","width","selectable","fixed","showIndexCol","indexFormatter","actionButtons","_createElementVNode","_component_EpButtons","ref_for","_toDisplayString","$slots","_component_el_pagination","Table","searchListPageProps","useSearchListPage","calcTableHeight","tableRef","formRef","searchButtons","reset","useButtons","instanceName","tableHeight","topHeight","middleHeight","paginationHeight","frameDistance","defaultButtons","defaultIndex","item1","rows","SearchListPage","inheritSelectProps","elSelectProps","expandSelectProps","selectProps","expandSelectPropsKeys","selectEmits","elSelectEmits","selectEmitsKeys","useSelect","hasLoaded","customOptions","loadOptions","desc","getSelectItem","expandAttrs","visible","_component_el_select","_component_el_option","valueKey","formatLabel","labelKey","codeInLabel","Select","components","install","c","plugin","version"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.full.min.js","sources":["../../../packages/components/buttons/src/buttons.ts","../../../packages/utils/bem.ts","../../../packages/utils/props.ts","../../../packages/directives/repeat-click/index.ts","../../../packages/utils/env.ts","../../../packages/utils/cookie.ts","../../../packages/utils/request.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/components/table/src/table.ts","../../../packages/hooks/use-request.ts","../../../packages/components/table/src/use-table.tsx","../../../packages/components/table/src/table.vue","../../../packages/components/table/index.ts","../../../packages/components/searchListPage/src/searchListPage.ts","../../../packages/components/searchListPage/src/use-search-list-page.ts","../../../packages/components/searchListPage/src/searchListPage.vue","../../../packages/components/searchListPage/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/el-plus/components.ts","../../../packages/el-plus/index.ts"],"sourcesContent":["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 type { VisibleProps } from '@el-plus/utils/props'\nimport type { TableScope } from '@el-plus/components/table'\n\nexport type ButtonProps = Partial<\n ElButtonProps & {\n name: string\n prop: string // 唯一标识\n permission: string // 权限\n onClick: (e: MouseEvent | TableScope) => void\n scopedSlots: Record<string, () => VNode>\n confirm: boolean\n confirmText: string\n } & VisibleProps\n>\nexport const buttonsProps = {\n ...elButtonProps,\n disabled: {\n type: [Boolean, Function] as PropType<\n boolean | ((...args: any[]) => boolean)\n >,\n },\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}\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 { Api, ReqBefore, ReqAfter, Method } from './type'\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}\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 { 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","const getEnv = (mark = 'hxjf', hostname = window.location.hostname) => {\n const tag = hostname.match(new RegExp(`.*(?=${mark})`))\n if (hostname === 'hxdv-ui.hongxinshop.com') {\n return 'production'\n }\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","const setCookie = (\n name: string,\n value: string,\n expiresHours: number,\n path: string = '',\n) => {\n let cookieString = `${name}=${escape(value)}`\n if (expiresHours === Infinity) {\n cookieString = `${cookieString}; expires=Fri, 31 Dec 9999 23:59:59 GMT`\n }\n // 判断是否设置过期时间\n else if (expiresHours > 0) {\n // debugger;\n const date = new Date()\n date.setTime(date.getTime() + expiresHours * 60 * 60 * 1000)\n cookieString = `${cookieString}; expires=\" + date.toGMTString()`\n }\n\n document.cookie = `${cookieString};path=${path}`\n}\n\nconst getCookie = (name: string) => {\n const reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')\n const arr = document.cookie.match(reg)\n if (arr) {\n return decodeURIComponent(arr[2])\n }\n return null\n}\n\nconst delCookie = ({ name, path = '' }: { name: string; path: string }) => {\n if (path === 'all') {\n document.cookie = name + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;path=/'\n } else {\n document.cookie =\n name + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;path=' + path\n }\n}\n\nexport { setCookie, getCookie, delCookie }\n","import axios from 'axios'\nimport { getBaseUrl } from './env'\nimport { getCookie } from './cookie'\nimport { ElMessage, ElLoading } from 'element-plus'\nimport 'element-plus/es/components/message/style/css'\nimport 'element-plus/es/components/loading/style/css'\n\n// 创建一个axios实例\nconst instance = axios.create({\n method: 'post',\n timeout: 20000,\n baseURL: getBaseUrl(),\n headers: {\n 'Content-Type': 'application/json',\n },\n})\nlet reqNum = 0\nlet loading = { close: () => {} }\nfunction startLoading() {\n if (reqNum === 0) {\n loading = ElLoading.service({\n fullscreen: true,\n lock: true,\n text: '请稍等,正在加载中...',\n spinner: 'el-icon-loading',\n background: 'rgba(0,0,0,0.7)',\n })\n }\n\n reqNum++\n}\n\nfunction closeLoading() {\n if (reqNum <= 0) {\n return\n }\n\n reqNum--\n\n if (reqNum === 0) {\n loading.close()\n }\n}\n\nfunction endLoading() {\n closeLoading()\n}\ninstance.interceptors.request.use(\n async (config) => {\n const token = getCookie('access_token')\n if (token) {\n config.headers['Authorization'] = `Bearer ${token}`\n }\n if (config.loading) {\n startLoading()\n }\n config.headers = {\n ...config.headers,\n ...(window.hx &&\n window.hx.getSignHeaders({\n // 只有openapi接口需要传sign\n sign: config.sign || window.ELPLUSSIGN,\n config,\n })),\n }\n const cancelRequest = config.cancelRequest\n config.cancelToken = new axios.CancelToken(function (cancel) {\n cancelRequest && cancelRequest(cancel)\n })\n return config\n },\n (error) => {\n console.log(error)\n return Promise.reject(error)\n },\n)\ninstance.interceptors.response.use(\n (response) => {\n const config = response.config\n if (config.loading) {\n endLoading()\n }\n const responseCode = response.data.code\n const { hideToast, hideToastCode = {} } = response.config.headers\n // 由于数组会被axios自动转换成对象,所以将其先转换成伪数组然后转换成数组\n hideToastCode.length = Object.keys(hideToastCode).length\n if (responseCode === 200) {\n return Promise.resolve(response.data)\n } else if (\n hideToast ||\n Array.prototype.slice.call(hideToastCode).indexOf(responseCode) > -1\n ) {\n return Promise.reject(response.data)\n } else {\n setTimeout(() => {\n ElMessage.error({\n message: `<pre>${response.data.msg}</pre>`,\n type: 'error',\n duration: 2000,\n dangerouslyUseHTMLString: true,\n })\n }, 300)\n return Promise.reject(response.data)\n }\n },\n (error) => {\n const { config = {}, message } = error\n const { url } = config\n if (config.loading) {\n endLoading()\n }\n\n if (error && error.response) {\n const { status } = error.response\n switch (status) {\n case 400:\n error.message = error.response.data.message || error.response.data.msg\n break\n case 403:\n error.message = '拒绝访问(403)'\n break\n case 404:\n error.message = '请求出错(404)'\n break\n case 408:\n error.message = '请求超时(408)'\n break\n case 500:\n error.message = '服务器错误(500)'\n break\n case 501:\n error.message = '服务未实现(501)'\n break\n case 502:\n error.message = '网络错误(502)'\n break\n case 503:\n error.message = '服务不可用(503)'\n break\n case 504:\n error.message = '网络超时(504)'\n break\n case 505:\n error.message = 'HTTP版本不受支持(505)'\n break\n default:\n error.message = `连接出错(${error.response.status})!`\n }\n } else {\n // 请求超时状态\n if (error.message.includes('timeout')) {\n error.message = `请求${url ? url : ''}超时,请检查网络是否连接正常`\n } else {\n error.message = `请求${url ? url : ''}失败,请检查网络是否已连接`\n }\n }\n if (!axios.isCancel(error) || !config.noErrorMsg) {\n ElMessage.error({\n message: error.message,\n type: 'error',\n duration: 2000,\n dangerouslyUseHTMLString: true,\n })\n }\n\n return Promise.reject(error)\n },\n)\nconst fetch = instance.request\nexport { instance }\nexport default fetch\n","import type { Directive } from 'vue'\nimport request from '@el-plus/utils/request'\n\n// v-permisson:CGXQD:QXSP\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 = `${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 = request({\n url: '/api-u/api/saas/user/appButtonRoleList',\n loading: true,\n noErrorMsg: 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'\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 { 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 = item.confirmText || `确定要${item.name}吗?`\n await ElMessageBox.confirm(confirmText, 'Warning', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning',\n })\n }\n item.onClick()\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 }}\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}\nexport type FormProps = ExtractPropTypes<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 } from 'vue'\nimport type { FormItemProps } from '../form-item'\nimport type { FormItemRule } from 'element-plus'\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 scopedSlots = {\n default: () => {\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 ...renderProps,\n ...events,\n },\n renderScopedSlots,\n )\n : formData[prop as string]\n },\n label: () => {\n return (\n <el-tooltip\n placement=\"top\"\n effect=\"light\"\n content={label}\n disabled={!props.isShowLabel}\n >\n <span>\n {!props.hideRequiredAsterisk && required ? (\n <span style=\"color: var(--el-color-danger);\">*</span>\n ) : null}\n {props.isShowLabel ? <span>{label}</span> : ''}\n </span>\n </el-tooltip>\n )\n },\n }\n\n if (labelRender) {\n scopedSlots.label = () => labelRender({ label })\n }\n if (render) {\n scopedSlots.default = render\n }\n return {\n scopedSlots,\n }\n}\nexport const useFormItemRules = (props: FormItemProps) => {\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 || ''}不能为空`\n }\n })\n }\n return { rules: mergeRules }\n}\n","import { formItemProps as elFormItemProps } from 'element-plus'\nimport { visibleProps } 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<() => VNode>,\n labelRender: Function as PropType<\n ({ label }: { label: string | undefined }) => VNode\n >,\n props: Object,\n ...visibleProps,\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}\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 { 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, ...formItemProps } = props // eslint-disable-line\n return () => {\n return (\n <el-form-item\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 ? '收起' : '更多' }}\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 { useCollapse, useForm } from './hooks/use-form'\nimport FormItem from './form-item-vue'\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'\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 },\n thousand: {\n type: Boolean,\n default: true,\n },\n clearable: {\n ...elInputProps.clearable,\n default: true,\n },\n}\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// GlobalComponents是vue3自带,用于扩展接口,给用户自定义全局组件补充类型提示\ndeclare module 'vue' {\n export interface GlobalComponents {\n // 接口自动合并\n EpInput: typeof Input\n }\n}\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/utils/type'\nimport type {\n TableColumnCtx,\n PaginationProps,\n PaginationEmits,\n} from 'element-plus'\nimport type { ButtonProps } from '@el-plus/components/buttons'\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 props: Record<string, any> // eslint-disable-line @typescript-eslint/no-explicit-any\n filter: boolean // 是否显示筛选\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 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 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 linkProps: {\n type: Array as PropType<ButtonProps[]>,\n default: () => [],\n },\n}\n\nexport const tableProps = {\n ...inheritTableProps,\n ...expandTableProps,\n}\nexport type TableProps = ExtractPublicPropTypes<typeof tableProps>\nexport const expandTablePropsKeys = Object.keys(expandTableProps)\n\nexport const tableEmits = ElTable.emits\n\nexport type TableEmits = typeof tableEmits\nexport const tableEmitsKeys = tableEmits\n","import { ref } from 'vue'\nimport { type Ref } from 'vue'\nimport type { Api, ReqAfter, ReqBefore, Method } from '@el-plus/utils/type'\nimport type { Canceler } from 'axios'\n\nimport request from '@el-plus/utils/request'\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,\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 url: api,\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 request(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","import type { FormInstance, TableInstance, FormItemProp } from 'element-plus'\nimport { ref, computed, type Ref, reactive, useTemplateRef } 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 {\n prepareProps,\n prepareEvents,\n prepareClassNames,\n prepareStyles,\n} from '@el-plus/utils/props'\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 search: ISearch = (init = false, isPagination = false) => {\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 })\n } else if (props.data?.length) {\n customData.value = props.data\n }\n }\n }\n const { pagination, paginationProps } = usePagination(props, search)\n search(true)\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 }\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) => {\n const columnProps = (column: TableColumn) => {\n const attrs = {\n align: column.align || props.align,\n // ...prepareEvents<TableEmits>(emit, tableEmits),\n } as TableColumn\n // console.log(attrs)\n\n if (!column.renderHeader) {\n let required = column.required\n if (typeof column.required === 'function') {\n required = column.required()\n }\n if (required) {\n attrs['renderHeader'] = (data) => {\n const { column } = data\n return (\n <span>\n <span style=\"color:var(--el-color-danger)\"> * </span>\n {column.label}\n </span>\n )\n }\n }\n }\n if (column.headerRender) {\n attrs.renderHeader = column.headerRender\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 return {\n ...attrs,\n ...prepareProps(column),\n }\n }\n const columnList = computed(() => {\n return props.columns!.filter((column: TableColumn) => {\n if (props.linkProps!.length) {\n const linkColumn = props.linkProps!.find(\n (item) => item.prop === column.prop,\n )\n if (linkColumn) {\n column.type = 'EpButtons'\n column.className = 'table-column-link'\n column.props = {\n list: [linkColumn],\n type: 'text',\n ...column.props,\n }\n }\n }\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, item: TableColumn) => {\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 for (const key in item) {\n if (key.startsWith('on') && typeof item[key] === 'function') {\n const fn = item[key]\n item[key] = (...args: unknown[]) => fn(...args, scope)\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=\"showIndexCol\"\n type=\"index\"\n width=\"56\"\n :align\n label=\"序号\"\n fixed\n :index=\"indexFormatter\"\n />\n\n <el-table-column\n v-if=\"actionButtons.length\"\n label=\"操作\"\n :align\n fixed\n width=\"200\"\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\"\n :form-data=\"scope.row\"\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 </div>\n</template>\n<script setup lang=\"tsx\">\nimport { computed, useSlots, ref } 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 { useTable, useTableColumn, useTableFormItem } from './use-table'\nimport { linkProps } from 'element-plus'\n\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 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} = useTable(props)\nconst { columnProps, columnList } = useTableColumn(props, data)\nconst { formItemProps } = useTableFormItem(props)\n\ndefineExpose({\n elFormRef,\n elTableRef,\n validate,\n resetFields,\n clearValidate,\n search,\n})\n// const value = defineModel<TableProps['modelValue']>()\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// GlobalComponents是vue3自带,用于扩展接口,给用户自定义全局组件补充类型提示\ndeclare module 'vue' {\n export interface GlobalComponents {\n // 接口自动合并\n EpTable: typeof Table\n }\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'\nconsole.log(formProps.formItemList)\n\nexport const searchListPageProps = {\n ...apiProps,\n customColumnModule: Number, // 自定义列模块\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 actionButtons: {\n ...tableProps.actionButtons,\n },\n // 链接列\n linkProps: {\n ...tableProps.linkProps,\n },\n showSelectionCol: 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}\nexport type SearchListPageProps = ExtractPublicPropTypes<\n typeof searchListPageProps\n>\n","import { ref, onMounted, computed, useTemplateRef } from 'vue'\nimport type { SearchListPageProps } from './searchListPage'\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'\nexport const useSearchListPage = (props: SearchListPageProps) => {\n const { calcTableHeight, tableProps, tableRef } = useTable(props)\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 }\n}\nconst useTable = (props: SearchListPageProps) => {\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 actionButtons: props.actionButtons,\n linkProps: props.linkProps,\n api: props.api,\n reqData: props.formData,\n ...props.tableProps,\n }\n })\n const calcTableHeight = () => {\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).offsetHeight +\n 12\n }\n const frameDistance = 40\n tableHeight.value =\n window.innerHeight -\n topHeight -\n middleHeight -\n paginationHeight -\n frameDistance -\n props.offsetTop!\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 setTimeout(() => {\n calcTableHeight()\n }, 0) // 等展开后计算表格高度\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 defaultButtons: ButtonsProps['list'] = [\n {\n name: '新增',\n prop: 'add',\n show: () => {\n return !!props.add\n },\n onClick: () => {\n props.add?.()\n },\n },\n {\n name: '模版下载',\n prop: 'templateDownload',\n show: !!props.templateDownloadApi,\n },\n {\n name: '导入',\n prop: 'import',\n show: !!props.importApi,\n },\n {\n name: '导出',\n prop: 'export',\n show: !!props.exportApi,\n },\n ]\n props.leftButtons?.forEach((item) => {\n const defaultIndex = defaultButtons.findIndex(\n (item1) => item1.prop === item.prop,\n )\n if (defaultIndex !== -1) {\n defaultButtons[defaultIndex] = {\n ...defaultButtons[defaultIndex],\n ...item,\n }\n }\n })\n const list = defaultButtons.concat(props.leftButtons!)\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 () => {\n await validate()\n tableRef.value.search(true)\n }\n // 清空\n const reset = async () => {\n resetFields()\n search()\n }\n const searchButtons: ButtonsProps['list'] = [\n {\n name: '搜索',\n type: 'primary',\n onClick: search,\n },\n {\n name: '清空',\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\" />\n </div>\n</template>\n<script setup lang=\"ts\">\nimport EpForm from '@el-plus/components/form'\nimport EpTable from '@el-plus/components/table'\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 './searchListPage'\nimport { useSearchListPage } from './use-search-list-page'\nimport { computed } from 'vue'\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} = useSearchListPage(props)\n\ndefineExpose({\n search,\n reset,\n tableRef,\n formRef,\n})\n</script>\n","import SearchListPage from './src/searchListPage.vue'\nimport { withInstall } from '@el-plus/utils/with-install'\n\nexport const EpSearchListPage = withInstall(SearchListPage)\nexport default EpSearchListPage\nexport * from './src/searchListPage'\n\n// GlobalComponents是vue3自带,用于扩展接口,给用户自定义全局组件补充类型提示\ndeclare module 'vue' {\n export interface GlobalComponents {\n // 接口自动合并\n EpSearchListPage: typeof SearchListPage\n }\n}\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}\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 (!props.options) return []\n return props.options.filter((item: SelectOption) => {\n return value.indexOf(item[props.valueKey]) > -1\n })\n }\n if (!props.options) return {}\n return (\n props.options.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\ndeclare module 'vue' {\n export interface GlobalComponents {\n EpSelect: typeof Select\n }\n}\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/searchListPage'\nimport Select from '@el-plus/components/select'\nimport Table from '@el-plus/components/table'\n\nexport default [Buttons, Form, Input, SearchListPage, Select, Table] as Plugin[]\n","import type { App, Plugin } from 'vue'\nimport components from './components'\nimport { version } from './package.json'\nexport const install = (app: App, options?: Record<string, any>) => {\n components.forEach((c) => app.use(c))\n if (options) {\n }\n}\n\nconst plugin: Plugin & { version: string } = {\n install,\n version,\n}\nexport default plugin\nexport * from '@el-plus/components'\nexport * from '@el-plus/hooks'\nexport * from '@el-plus/directives'\n"],"names":["buttonsProps","elButtonProps","_bem","prefix","block","element","modifier","createBEM","name","state","createNameSpace","apiProps","visibleProps","prepareProps","props","excludeKeys","acc","key","prepareEvents","emit","eventKeys","eventName","word","args","prepareClassNames","useAttrs","prepareStyles","SCOPE","vRepeatClick","el","binding","delay","immediate","handler","isPending","timer","start","e","getEnv","mark","hostname","tag","getBaseUrl","env","isOpenApi","url","query","getCookie","reg","arr","instance","axios","reqNum","loading","startLoading","ElLoading","closeLoading","endLoading","config","token","cancelRequest","cancel","error","response","responseCode","hideToast","hideToastCode","ElMessage","message","status","fetch","vPermisson","arg","value","permission","checkPermission","roles","queryRoles","hasPermission","requestPromise","request","bem","Buttons","directives","vPermission","inheritAttrs","setup","list","buttonProps","customList","computed","filter","button","show","hide","clickFn","item","confirm","confirmText","ElMessageBox","confirmButtonText","cancelButtonText","type","onClick","_createVNode","_Fragment","map","permissionArr","split","_withDirectives","_resolveComponent","_mergeProps","b","prop","default","scopedSlots","_resolveDirective","withInstall","comp","app","EpButtons","expandFormProps","formProps","elFormProps","expandFormPropsKeys","formEmits","elFormEmits","formEmitsKeys","useCollapse","isShowFold","showFieldCount","filterFormItemList","open","ref","toggleStatus","isShowFoldBtn","index","useForm","elFormRef","useTemplateRef","useFormItemSlots","attrs","label","render","required","labelRender","tableProp","renderScopedSlots","renderProps","events","startsWith","formData","h","resolveComponent","modelValue","isShowLabel","hideRequiredAsterisk","_createTextVNode","useFormItemRules","rules","mergeRules","requiredDefault","push","Array","isArray","concat","Object","prototype","toString","call","forEach","r","expandFormItemProps","formItemProps","elFormItemProps","expandFormItemPropsKeys","EpFormItem","childProps","__props","__emit","customAttrs","_useModel","validate","resetFields","clearValidate","isShowFormItem","__expose","_createElementBlock","_normalizeClass","_unref","_normalizeStyle","_component_el_form","_renderSlot","_ctx","_component_el_row","_openBlock","_renderList","_createBlock","_component_el_col","col","labelWidth","_vShow","EpForm","Form","inputProps","elInputProps","inputEmits","elInputEmits","inputEmitsKeys","slots","useSlots","isBluring","isFocusing","val","toThousand","inputRef","watch","onMounted","_component_el_input","$event","_withCtx","scope","_normalizeProps","_guardReactiveProps","EpInput","Input","inheritTableProps","elTableProps","expandTableProps","tableProps","expandTablePropsKeys","tableEmits","ElTable","tableEmitsKeys","useRequest","api","method","reqData","reqParams","reqBefore","reqAfter","cancelToken","hooks","apiFn","data","params","res","useTable","elTableRef","customData","requestFn","success","rawData","showPagination","pagination","total","isFrontPage","length","fail","console","search","init","isPagination","pageNo","pageSize","paginationProps","usePagination","formatActionButtons","bind","pageSizes","reactive","defaultPaginationProps","onSizeChange","onCurrentChange","layout","useTableColumn","tableData","columnProps","column","align","renderHeader","headerRender","filters","Set","text","filterMethod","row","columnList","columns","linkProps","linkColumn","find","className","useTableFormItem","cellRequired","disabled","options","disabledOption","btnItem","fn","$index","keys","size","class","style","model","inline","_component_el_table","_createSlots","showSelectionCol","_component_el_table_column","width","selectable","fixed","showIndexCol","indexFormatter","actionButtons","_createElementVNode","_component_EpButtons","ref_for","_toDisplayString","$slots","_component_el_pagination","EpTable","Table","searchListPageProps","useSearchListPage","calcTableHeight","tableRef","formRef","searchButtons","reset","useButtons","instanceName","tableHeight","topHeight","middleHeight","paginationHeight","frameDistance","defaultButtons","defaultIndex","item1","rows","EpSearchListPage","SearchListPage","inheritSelectProps","elSelectProps","expandSelectProps","selectProps","expandSelectPropsKeys","selectEmits","elSelectEmits","selectEmitsKeys","useSelect","hasLoaded","customOptions","loadOptions","desc","getSelectItem","expandAttrs","visible","_component_el_select","_component_el_option","valueKey","formatLabel","labelKey","codeInLabel","EpSelect","Select","components","install","c","plugin","version"],"mappings":"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"}
|