guava-ui 0.2.7 → 0.2.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"guava-ui.es.js","sources":["../packages/bridge/index.ts","../packages/GvBacktop/src/GvBacktop.vue","../packages/GvBacktop/index.ts","../packages/GvBadge/src/GvBadge.vue","../packages/GvBadge/index.ts","../packages/utils/index.ts","../packages/GvIcon/src/GvIcon.vue","../packages/GvIcon/index.ts","../packages/utils/gv.tree.ts","../packages/GvBreadCrumb/src/helper.ts","../packages/GvBreadCrumb/src/GvBreadCrumb.vue","../packages/GvBreadCrumb/index.ts","../packages/GvPopconfirm/src/GvPopconfirm.vue","../packages/GvPopconfirm/index.ts","../packages/hooks/web/useStorage.ts","../packages/utils/gv.notify.ts","../packages/GvButton/src/GvButton.vue","../packages/GvButton/index.ts","../packages/GvCard/src/GvCard.vue","../packages/GvCard/index.ts","../packages/GvCascader/src/GvCascader.vue","../packages/GvCascader/index.ts","../packages/GvCheckbox/src/GvCheckbox.vue","../packages/GvCheckbox/index.ts","../packages/GvCheckboxButton/src/GvCheckboxButton.vue","../packages/GvCheckboxButton/index.ts","../packages/GvCheckboxGroup/src/GvCheckboxGroup.vue","../packages/GvCheckboxGroup/index.ts","../packages/GvCol/src/GvCol.vue","../packages/GvCol/index.ts","../packages/GvDatePicker/src/datetime.ts","../packages/GvDatePicker/src/shortcuts.ts","../packages/GvDatePicker/src/GvDatePicker.vue","../packages/GvDatePicker/index.ts","../packages/GvDialog/src/drag.ts","../packages/GvDialog/src/GvDialog.vue","../packages/GvDialog/index.ts","../packages/GvDivider/src/GvDivider.vue","../packages/GvDivider/index.ts","../packages/GvDrawer/src/GvDrawer.vue","../packages/GvDrawer/index.ts","../packages/utils/gv.propTypes.ts","../packages/hooks/web/usePinyin.ts","../packages/GvExpandMenu/src/GvMenuList.vue","../packages/GvExpandMenu/src/GvExpandMenu.vue","../packages/GvExpandMenu/index.ts","../packages/GvInput/src/GvInput.vue","../packages/GvInput/index.ts","../packages/GvInputNumber/src/GvInputNumber.vue","../packages/GvInputNumber/index.ts","../packages/GvSelect/src/GvSelect.vue","../packages/GvSelect/index.ts","../packages/GvSwitch/src/GvSwitch.vue","../packages/GvSwitch/index.ts","../packages/GvTimePicker/src/GvTimePicker.vue","../packages/GvTimePicker/index.ts","../packages/utils/gv.infomsg.ts","../packages/utils/gv.validate.ts","../packages/GvForm/src/GvForm.vue","../packages/GvForm/index.ts","../packages/GvHamburger/src/GvHamburger.vue","../packages/GvHamburger/index.ts","../packages/GvLangSelect/src/GvLangSelect.vue","../packages/GvLangSelect/index.ts","../packages/GvPopover/src/GvPopover.vue","../packages/GvPopover/index.ts","../packages/GvRadio/src/GvRadio.vue","../packages/GvRadio/index.ts","../packages/GvRadioButton/src/GvRadioButton.vue","../packages/GvRadioButton/index.ts","../packages/GvRadioGroup/src/GvRadioGroup.vue","../packages/GvRadioGroup/index.ts","../packages/GvRow/src/GvRow.vue","../packages/GvRow/index.ts","../packages/GvScreenFull/src/GvScreenFull.vue","../packages/GvScreenFull/index.ts","../packages/GvSearchBar/src/GvSearchBar.vue","../packages/GvSearchBar/index.ts","../packages/GvSidebar/src/helper.ts","../packages/GvSidebar/src/components/useRenderMenuTitle.tsx","../packages/GvSidebar/src/components/useRenderMenuItem.tsx","../packages/GvSidebar/src/GvSidebar.vue","../packages/GvSidebar/index.ts","../src/assets/imgs/logo.png","../packages/GvSidebarLogo/src/GvSidebarLogo.vue","../packages/GvSidebarLogo/index.ts","../packages/GvTableBar/src/GvTableBar.vue","../packages/GvTag/src/GvTag.vue","../packages/utils/gv.table.ts","../packages/utils/gv.crud.ts","../packages/GvTable/src/GvTable.vue","../packages/GvTable/index.ts","../packages/GvTabPane/src/GvTabPane.vue","../packages/GvTabPane/index.ts","../packages/GvTabs/src/GvTabs.vue","../packages/GvTabs/index.ts","../packages/GvTag/index.ts","../packages/GvTagsView/src/GvTagsView.vue","../packages/GvTagsView/index.ts","../packages/GvTheme/src/GvTheme.vue","../packages/GvTheme/index.ts","../packages/GvTree/src/GvTree.vue","../packages/GvTree/index.ts","../packages/utils/gv.secret.ts","../packages/index.ts"],"sourcesContent":["// bridge/index.ts\nimport type { Router } from 'vue-router';\nimport type { Pinia } from 'pinia';\nimport type { Composer } from 'vue-i18n';\n\ninterface GlobalBridgeContext {\n router?: Router;\n i18n?: Composer;\n store?: Pinia;\n}\nconst globalBridgeKey = '__LIB_BRIDGE_CONTEXT__';\nconst getBridge = (): GlobalBridgeContext => {\n const g = globalThis as any;\n if (!g[globalBridgeKey]) g[globalBridgeKey] = {};\n\n return g[globalBridgeKey];\n};\nconst context: GlobalBridgeContext = {};\n\n// export function setBridgeContext(options: GlobalBridgeContext) {\n// if (options.router) context.router = options.router;\n// if (options.i18n) context.i18n = options.i18n;\n// if (options.pinia) context.pinia = options.pinia;\n// }\nexport const setBridgeContext = (ctx: GlobalBridgeContext) => {\n // console.log('setBridgeContext', ctx);\n Object.assign(getBridge(), ctx);\n};\n\nexport function useBridgeRouter(): Router {\n const router = getBridge().router;\n if (!router) throw new Error('[Bridge] router not set');\n return router;\n}\n// export function useBridgeRouter(): Router {\n// if (!context.router) throw new Error('[Bridge] Router is not injected');\n// return context.router;\n// }\n\nexport function useBridgeI18n(): Composer {\n const i18n = getBridge().i18n;\n if (!i18n) throw new Error('[Bridge] I18n is not injected');\n return i18n;\n}\n\n// export function useBridgeI18n(): Composer {\n// if (!context.i18n) throw new Error('[Bridge] I18n is not injected');\n// return context.i18n;\n// }\n\nexport function useBridgePinia(): Pinia {\n if (!context.store) throw new Error('[Bridge] Pinia is not injected');\n return context.store;\n}\n","<!--\n * @title: backtop\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:24:46\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-05-22 09:26:44\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { ElBacktop } from 'element-plus';\n import { useStyle } from '@/hook/web/useStyle';\n\n // --- define name and inheritAttrs ---\n defineOptions({\n name: 'GvBacktop', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n\n const { getPrefixCls, variables } = useStyle();\n\n const prefixCls = getPrefixCls('backtop');\n</script>\n\n<template>\n <ElBacktop\n :class=\"prefixCls\"\n :target=\"`.${variables.namespace}-layout-content-scrollbar .${variables.elNamespace}-scrollbar__wrap`\" />\n</template>\n","import type { App } from 'vue';\nimport GvBacktop from './src/GvBacktop.vue';\n// Define the install method on the GvButton component\nconst GvBacktopPlugin = {\n install(app: App): void {\n app.component(GvBacktop.name ?? 'GvBacktop', GvBacktop);\n },\n};\nexport default GvBacktopPlugin;\n\nexport { GvBacktop };\n","<!--\n * @title: badge component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 10:37:36\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:14:46\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElBadge } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n import type { TBadgeType } from './types/index';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('badge');\n\n export default defineComponent({\n name: 'GvBadge',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [Number, String] as PropType<number | string>,\n default: '',\n },\n max: {\n type: Number,\n default: 10,\n },\n isDot: {\n type: Boolean,\n default: false,\n },\n hidden: {\n type: Boolean,\n default: false,\n },\n showZero: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String,\n default: '',\n },\n type: {\n type: String as PropType<TBadgeType>,\n default: 'warning',\n },\n },\n\n setup(props, { slots }) {\n // @render\n return () => (\n <ElBadge\n value={props.value}\n max={props.max}\n type={props.type}\n hidden={props.hidden}\n isDot={props.isDot}\n showZero={props.showZero}\n color={props.color}\n class={prefixCls}>\n {slots.default?.()}\n </ElBadge>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-badge';\n .#{$prefixCls} {\n margin-top: 5px;\n margin-right: 25px;\n\n :deep(.el-badge__content) {\n height: 20px;\n line-height: 18px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvBadge from './src/GvBadge.vue';\n\nconst GvBadgePlugin = {\n install(app: App): void {\n app.component(GvBadge.name ?? 'GvBadge', GvBadge);\n },\n};\nexport default GvBadgePlugin;\n\nexport { GvBadge };\n","/*\n * @title: common utility func\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-02-27 13:25:29\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 13:16:25\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n// ------ is utils ------\nconst toString = Object.prototype.toString;\nexport const is = (val: unknown, type: string) => toString.call(val) === `[object ${type}]`;\n\nexport const isExternal = (path: string): boolean => /^(https?:|mailto:|tel:)/.test(path);\nexport const isString = (val: unknown): val is string => is(val, 'String');\nexport const isArray = (val: any): val is any[] => val && Array.isArray(val);\nexport const isError = (e: unknown): e is Error => typeof e === 'object' && e !== null && 'message' in e;\nexport const isObject = (val: any): val is Record<any, any> => val !== null && is(val, 'Object');\nexport const isDate = (val: unknown): val is Date => is(val, 'Date');\nexport const isNumber = (val: unknown): val is number => is(val, 'Number');\nexport const isBoolean = (val: unknown): val is boolean => is(val, 'Boolean');\nexport const isFunction = (val: unknown): val is (...args: any[]) => any => typeof val === 'function';\nexport const isElement = (val: unknown): val is Element => isObject(val) && !!val.tagName;\nexport const isMap = (val: unknown): val is Map<any, any> => is(val, 'Map');\nexport const isImgPath = (path: string): boolean => /(https?:\\/\\/|data:image\\/).*?\\.(png|jpg|jpeg|gif|svg|webp|ico)/gi.test(path);\nexport const isDark = (): boolean => window.matchMedia('(prefers-color-scheme: dark)').matches;\nexport const isNull = (val: unknown): val is null => val === null;\n\nexport const isEmpty = <T = unknown>(val: T): val is T => {\n if (isNull(val)) return true;\n if (val === undefined) return true;\n if (val === 'null') return true;\n if (isArray(val) || isString(val)) return val.length === 0;\n if (val instanceof Map || val instanceof Set) return val.size === 0;\n if (isObject(val)) return Object.keys(val).length === 0;\n return false;\n};\n\n/**\n * @todo: deep equal (plain object / array / date), functions compare by reference\n */\nexport const isEqual = (a: unknown, b: unknown): boolean => {\n if (Object.is(a, b)) return true;\n if (a === null || b === null || a === undefined || b === undefined) return false;\n if (typeof a !== typeof b) return false;\n if (isFunction(a) || isFunction(b)) return a === b;\n if (isDate(a) && isDate(b)) return a.getTime() === b.getTime();\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (!isEqual(a[i], b[i])) return false;\n\n return true;\n }\n if (isObject(a) && isObject(b)) {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (!isEqual(a[key], b[key])) return false;\n }\n return true;\n }\n return false;\n};\n\nexport const isUrl = (path: string): boolean => {\n try {\n new URL(path);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * @todo: set html lang attr\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-03-24 10:37:13\n * @param {LocaleType} locale\n */\nexport const setHtmlAttrByLang = (locale: LocaleType): void => {\n document.querySelector('html')?.setAttribute('lang', locale);\n};\n\n/**\n * @todo: sleep async function\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 12:01:37\n * @param {*} timeLen\n */\nexport const sleep = async (timeLen: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, timeLen));\n/**\n * @todo: underline to camel case\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 15:21:09\n * @param {*} name\n */\nexport const toHump = (name: string): string => {\n if (!name) return '';\n // eslint-disable-next-line no-useless-escape\n return name.replace(/\\_(\\w)/g, function (all, letter) {\n return letter.toUpperCase();\n });\n};\n\n/**\n * @todo: camel case to underline\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 15:21:50\n * @param {*} name\n */\nexport const toLine = (name: string): string => name.replace(/([A-Z])/g, '_$1').toLowerCase();\n\n/**\n * 设置css style\n * @param prop\n * @param val\n * @param dom\n */\nexport const setDomCssProp = (prop: string, val: any, dom = document.documentElement): void => {\n dom.style.setProperty(prop, val);\n};\n\n/**\n * get css style\n * @param prop\n * @param dom\n * @returns\n */\nexport const getDomCssProp = (prop: string, dom = document.documentElement): string => getComputedStyle(dom).getPropertyValue(prop);\n\n/**\n * join icon class\n * @param icon\n * @returns\n */\nexport const joinIcon = function (icon) {\n let joinIcons = '';\n if (icon)\n if (icon.includes('el-icon')) joinIcons = icon;\n else if (icon.includes('gv-icon')) joinIcons = `iconfont ${icon}`;\n return joinIcons;\n};\n\n/**\n * Check if an element has a class\n * @param {HTMLElement} ele\n * @param {string} cls\n * @returns {boolean}\n */\nexport const hasClass = (ele: HTMLElement, cls: string): boolean => !!ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'));\n\n/**\n * Add class to element\n * @param {HTMLElement} ele\n * @param {string} cls\n */\nexport const addClass = (ele: HTMLElement, cls: string) => {\n if (!hasClass(ele, cls)) ele.className += ' ' + cls;\n};\n\n/**\n * Remove class from element\n * @param {HTMLElement} ele s s\n * @param {string} cls\n */\nexport const removeClass = (ele: HTMLElement, cls: string): void => {\n if (hasClass(ele, cls)) {\n const reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\n ele.className = ele.className.replace(reg, ' ');\n }\n};\n\n/**\n * @todo: html tag has scrollbar\n * @param {*} tag\n */\nexport const hasScrollbar = (tag: any) => tag.scrollHeight > (tag.innerHeight || tag.clientHeight);\n\n/**\n * date format settings\n */\nexport const dateFormatConfig = {\n date: {\n placeholder: '选择日期', // yyyy-mm-dd\n valueFormat: 'yyyy-MM-dd',\n dateFormat: 'yyyy-MM-dd',\n },\n exactdate: {\n placeholder: '选择日期', // yyyy-mm-dd\n valueFormat: 'yyyy-MM-dd HH:mm:ss',\n dateFormat: 'yyyy-MM-dd',\n },\n datetime: {\n placeholder: '选择时间', // yyyy-mm-dd hh:mm\n valueFormat: 'yyyy-MM-dd HH:mm',\n dateFormat: 'yyyy-MM-dd HH:mm',\n },\n week: {\n placeholder: '选择周',\n dateFormat: 'yyyy 第 WW 周',\n },\n month: {\n placeholder: '选择月份', // yyyy-mm\n valueFormat: 'yyyy-MM',\n dateFormat: 'yyyy-MM',\n },\n year: {\n placeholder: '选择年份', // yyyy\n valueFormat: 'yyyy',\n dateFormat: 'yyyy',\n },\n};\n\n/**\n * @todo: 防抖函数(一段时间内只响应最后一次操作,如:input框连续输入)\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:58:21\n * @param {*} func\n * @param {*} wait\n * @param {*} immediate\n */\nexport const debounce = (func: Fn, wait = 100, immediate = false) => {\n let timeout: ReturnType<typeof setTimeout> | null;\n let arg: any[];\n let context: any;\n let timestamp: number;\n let result: ReturnType<Fn>;\n const later = function () {\n // 据上一次触发时间间隔\n const last = +new Date() - timestamp;\n // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait\n if (last < wait && last > 0) timeout = setTimeout(later, wait - last);\n else {\n timeout = null;\n // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用\n if (!immediate) {\n result = func.apply(context, arg);\n if (!timeout) context = arg = null as any;\n }\n }\n };\n return function (this: any, ...args) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n context = this;\n // fixme: 解决防抖函数无法传参的问题 2022-04-19\n arg = args;\n timestamp = +new Date();\n const callNow = immediate && !timeout;\n // 如果延时不存在,重新设定延时\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, arg);\n context = arg = null as any;\n }\n\n return result;\n };\n};\n\n/**\n * @todo: get vnode text\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 13:49:54\n * @param {VNode} vnode\n */\nexport const getVNodeText = (vnode: any): string => {\n if (!vnode) return '';\n // 1. 字符串\n if (typeof vnode === 'string') return vnode;\n // 2. 数字\n if (typeof vnode === 'number') return String(vnode);\n // 3. children 为字符串\n if (typeof vnode.children === 'string') return vnode.children.trim();\n // 4. children 为数组\n if (Array.isArray(vnode.children)) return vnode.children.map((item) => getVNodeText(item)).join('');\n // 5. slots(ElButton / 组件)\n if (vnode.children && typeof vnode.children === 'object') {\n const slots = vnode.children as Record<string, any>;\n // default slot\n if (typeof slots.default === 'function') {\n const slotNodes = slots.default();\n return slotNodes.map((item: any) => getVNodeText(item)).join('');\n }\n }\n\n return '';\n};\n\n/**\n * @todo: get vnode name\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 17:24:24\n * @param {any} vnode\n */\nexport const getVNodeName = (vnode: any): string => {\n if (!vnode) return '';\n return typeof vnode.type === 'object' && vnode.type !== null && 'name' in vnode.type ? vnode.type.name : '';\n};\n\n/**\n * @todo: 去除金额格式化方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-24 14:14:55\n * @param {*} val\n */\nexport const removeAmountFormat = (val: string): string => {\n if (val) return val.replace(/,/g, '');\n else return '0.00';\n};\n\n// when val is 0.00, change it as 0 format\nfunction zeroFormat(val: string): string {\n if (val === '0.00') return '0';\n else return val;\n}\n\nfunction numberFormat(pattern, val) {\n const oldVal = val;\n if (val < 0) val = -val;\n const _nfPattern = '[0#]+[,]?[0#]*(\\\\.[0#]+)?';\n if (!pattern || !new RegExp(_nfPattern, 'g').test(pattern)) return '0.00';\n\n if (!isNumber((val + '').replace('.', ''))) return '0.00';\n\n const strAry = pattern.match(new RegExp(_nfPattern, 'g'));\n const p1 = strAry[0].indexOf('.');\n if (p1 > 0) {\n const len = strAry[0].length - p1 - 1;\n val = Math.round(val * Math.pow(10, len)) / Math.pow(10, len);\n } else val = Math.round(val);\n\n val = val + '';\n const p2 = val.indexOf('.');\n let ret = '';\n if (p1 > 0) {\n for (let i = p1 + 1; i < strAry[0].length; i++) {\n const ch = p2 > 0 && p2 + i - p1 < val.length ? val.charAt(p2 + i - p1) : '';\n if (strAry[0].charAt(i) === '0') ret = ret + (ch === '' ? '0' : ch);\n else ret = ret + (ch === '' ? '' : ch);\n }\n ret = ret === '' ? '' : '.' + ret;\n }\n const p3 = strAry[0].indexOf(',');\n if (p3 > 0) {\n const len = p1 > 0 ? p1 - p3 - 1 : strAry[0].length - p3 - 1;\n const len2 = p2 > 0 ? p2 - 1 : val.length - 1;\n for (let i = len2; i >= 0; i--) ret = ((len2 - i + 1) % len === 0 ? ',' : '') + val.charAt(i) + ret;\n\n ret = ret.charAt(0) === ',' ? ret.substring(1, ret.length) : ret;\n } else ret = val.substring(0, p2 > 0 ? p2 : val.length) + ret;\n\n if (oldVal < 0) ret = '-' + ret;\n\n return pattern.replace(strAry[0], ret);\n}\n\n/**\n * @todo: 千位符转换\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-24 09:22:56\n * @param {*} val\n * @param {*} decimal 小数位数\n */\nexport const amountFormat = (val: string | number, decimal = 2): string => {\n let v = val + '';\n if (v === null || v === 'null' || v === '0' || v === undefined || v === 'undefined') return '0.00';\n if (v.indexOf(',') > 0) v = removeAmountFormat(v);\n let pattern = '#,###.';\n let decimalPattern = '00';\n if (decimal) decimalPattern = decimalPattern.padStart(decimal, '0');\n pattern = pattern + decimalPattern;\n return zeroFormat(numberFormat(pattern, v));\n};\n\n/**\n * @todo: set quick keys\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:38:53\n * @param {*} ev\n */\nexport const setQuickKeys = (ev) => {\n if (ev && ev.key)\n if (ev.key.toLowerCase() === 'q' && ev.ctrlKey === true) {\n // 绑定ctr + q\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .ht-container .ht-search__bar>.ht-button.search') as HTMLElement;\n if (btnHtml && btnHtml.style.display !== 'none') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .ht-container .ht-edit__bar .ht-button.search') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === 'r' && ev.ctrlKey === true) {\n // 绑定crt + r\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .ht-container .ht-form .ht-search__bar>.ht-button.reset') as HTMLElement;\n if (btnHtml && btnHtml.style.display !== 'none') if (btnHtml.getAttribute('refform')) btnHtml.click();\n } else if (ev.key.toLowerCase() === 'e' && ev.ctrlKey === true) {\n // 绑定crt + e\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .ht-container .ht-form .ht-search__bar>.ht-button.shrink') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .ht-container .ht-form .ht-search__bar>.ht-button.expand') as HTMLElement;\n if (btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === 's' && ev.ctrlKey === true) {\n // 绑定crt + s\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .ht-container .ht-drawer__popup .ht-drawer .ht-drawer__footer>.ht-drawer__footer--inner .ht-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .ht-container .ht-edit__bar .ht-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === 'n' && ev.ctrlKey === true) {\n // 绑定crt + n\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .ht-container .ht-table__container .ht-table__bar .ht-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .ht-container .ht-edit__bar .ht-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === '=' && ev.ctrlKey === true) {\n // 绑定crt + '='\n ev.preventDefault();\n ev.stopPropagation();\n const inputHtml = document.body.querySelector('.main-container .ht-container .ht-table__container .ht-table__search .ht-table__search-input > .el-input__inner') as HTMLElement;\n if (inputHtml) inputHtml.focus();\n } else if (ev.key === 'Escape') {\n // 绑定esc关闭弹窗\n ev.preventDefault();\n ev.stopPropagation();\n const messageConfirmHtml = document.documentElement.querySelector('body>.el-message-box__wrapper') as HTMLElement;\n if (messageConfirmHtml && messageConfirmHtml.style.display !== 'none') {\n const bodyButtonHtml = messageConfirmHtml.querySelector('.el-message-box .el-message-box__btns button') as HTMLElement;\n bodyButtonHtml.click();\n } else {\n const bodyDialogHtml = document.documentElement.querySelector('body>.ht-dialog') as HTMLElement;\n if (bodyDialogHtml && bodyDialogHtml.style.display !== 'none') {\n const bodyButtonHtml = bodyDialogHtml.querySelector('.el-dialog__header button') as HTMLElement;\n bodyButtonHtml.click();\n } else {\n const dialogArr = document.body.querySelectorAll('.main-container .ht-container .ht-dialog__popup .ht-dialog') as NodeListOf<HTMLElement>;\n if (dialogArr)\n for (let i = 0; i < dialogArr.length; i++)\n if (dialogArr[i].style.display !== 'none') {\n const buttonHtml = dialogArr[i].querySelector('.el-dialog__header button') as HTMLElement;\n if (buttonHtml && buttonHtml.style.display !== 'none') {\n buttonHtml.click();\n return;\n }\n }\n\n const buttonDHtml = document.body.querySelector('.main-container .ht-container .ht-drawer__popup .ht-drawer .el-drawer__header button') as HTMLElement;\n if (buttonDHtml && buttonDHtml.style.display !== 'none') buttonDHtml.click();\n }\n }\n }\n};\n\nexport const pathResolve = (parentPath: string, path: string) => {\n if (isUrl(path)) return path;\n const childPath = path.startsWith('/') || !path ? path : `/${path}`;\n return `${parentPath}${childPath}`.replace(/\\/\\//g, '/').trim();\n};\n","<!--\n * @title: svg icon component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-01 17:02:13\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 10:50:13\n * @version: 1.0.8\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { isExternal } from '@@/utils';\n import * as Icons from '@element-plus/icons-vue';\n import { ElIcon } from 'element-plus';\n import { computed, useAttrs, type DefineComponent } from 'vue';\n const { variables } = useStyle();\n const preNameSpace = variables.namespace;\n const attrs = useAttrs();\n // --- define name and inheritAttrs ---\n defineOptions({\n name: 'GvIcon', // 定义组件名称\n inheritAttrs: false, // 默认继承属性\n });\n // --- transfer props and define default values ---\n const props = withDefaults(\n defineProps<{\n iconType?: string;\n iconName: string;\n className?: string;\n icon?: DefineComponent; // element-plus icon component\n size?: string; // 图标的font-size,单位是px\n }>(),\n {\n iconType: '', // svg | iconfont | el\n className: '',\n },\n );\n // @computed\n const isLocal = computed(() => isExternal(props.iconName));\n const iconType = computed(() => {\n if (props.iconType === 'svg') return 'svg';\n else if (props.iconType === 'iconfont') return 'iconfont';\n else if (props.iconType === 'el') return 'el';\n else if (props.iconType === '')\n if (props.iconName.startsWith('el-icon')) return 'el';\n else if (props.iconName.startsWith('gv-')) return 'iconfont';\n else return 'svg';\n else return 'svg';\n });\n const iconName = computed(() => {\n if (iconType.value === 'svg') return `#${preNameSpace}-icon-${props.iconName}`;\n else if (iconType.value === 'iconfont') return 'iconfont ' + props.iconName;\n else if (iconType.value === 'el') return props.iconName;\n else return `#${props.iconName}`;\n });\n\n // @method\n const svgClass = computed(() => {\n if (iconType.value === 'svg') return props.className ? 'svg-icon ' + props.className : 'svg-icon';\n else return props.className;\n });\n const styleExternalIcon = computed(() => ({\n mask: `url(${props.iconName}) no-repeat 50% 50%`,\n '-webkit-mask': `url(${props.iconName}) no-repeat 50% 50%`,\n }));\n\n /**\n * @todo: get element-plus icon component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:18:16\n * @param {*} computed\n */\n const iconComponent = computed(() => {\n // console.log(iconType.value);\n // console.log(props.iconName);\n if (iconType.value !== 'el') return null;\n const name = props.iconName;\n let compName = '';\n if (name.startsWith('el-icon')) {\n compName = name.replace('el-icon-', '');\n compName = compName.charAt(0).toUpperCase() + compName.slice(1);\n } else compName = name.charAt(0).toUpperCase() + name.slice(1);\n\n return Icons[compName as keyof typeof Icons];\n });\n</script>\n<template>\n <div\n v-if=\"isLocal\"\n :style=\"styleExternalIcon\"\n class=\"svg-external-icon svg-icon\"\n v-bind=\"attrs\"></div>\n <svg\n v-else-if=\"iconType === 'svg'\"\n :class=\"svgClass\"\n aria-hidden=\"true\"\n v-bind=\"attrs\">\n <use :href=\"iconName\" />\n </svg>\n <i\n v-else-if=\"iconType === 'iconfont'\"\n :class=\"[iconName, svgClass]\"\n v-bind=\"attrs\">\n </i>\n <ElIcon\n v-else-if=\"iconComponent\"\n :class=\"svgClass\">\n <component :is=\"iconComponent\" />\n </ElIcon>\n <svg\n v-else\n :class=\"svgClass\"\n :style=\"{ 'font-size': size + 'px' }\"\n aria-hidden=\"true\"\n v-bind=\"attrs\">\n <use :xlink:href=\"iconName\" />\n </svg>\n</template>\n\n<style lang=\"scss\" scoped>\n .svg-icon {\n width: 1em;\n height: 1em;\n overflow: hidden;\n vertical-align: -0.15em;\n fill: currentcolor;\n }\n\n .svg-external-icon {\n display: inline-block;\n background-color: currentcolor;\n mask-size: cover !important;\n }\n</style>\n","import type { App } from 'vue';\nimport GvIcon from './src/GvIcon.vue';\nconst GvIconPlugin = {\n install(app: App): void {\n app.component(GvIcon.name ?? 'GvIcon', GvIcon);\n },\n};\nexport default GvIconPlugin;\n\nexport { GvIcon };\n","interface TreeHelperConfig {\n id: string;\n children: string;\n pid: string;\n}\nconst DEFAULT_CONFIG: TreeHelperConfig = {\n id: 'id',\n children: 'children',\n pid: 'pid',\n};\nconst getConfig = (config: Partial<TreeHelperConfig>) => Object.assign({}, DEFAULT_CONFIG, config);\n// tree from list\nexport const listToTree = <T = any>(list: any[], config: Partial<TreeHelperConfig> = {}): T[] => {\n const conf = getConfig(config) as TreeHelperConfig;\n const nodeMap = new Map();\n const result: T[] = [];\n const { id, children, pid } = conf;\n\n for (const node of list) {\n node[children] = node[children] || [];\n nodeMap.set(node[id], node);\n }\n for (const node of list) {\n const parent = nodeMap.get(node[pid]);\n (parent ? parent.children : result).push(node);\n }\n return result;\n};\n\nexport const treeToList = <T = any>(tree: any, config: Partial<TreeHelperConfig> = {}): T => {\n config = getConfig(config);\n const { children } = config;\n const result: any = [...tree];\n for (let i = 0; i < result.length; i++) {\n if (!result[i][children!]) continue;\n result.splice(i + 1, 0, ...result[i][children!]);\n }\n return result;\n};\n\nexport const findNode = <T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T | null => {\n config = getConfig(config);\n const { children } = config;\n const list = [...tree];\n for (const node of list) {\n if (func(node)) return node;\n node[children!] && list.push(...node[children!]);\n }\n return null;\n};\n\nexport const findNodeAll = <T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T[] => {\n config = getConfig(config);\n const { children } = config;\n const list = [...tree];\n const result: T[] = [];\n for (const node of list) {\n func(node) && result.push(node);\n node[children!] && list.push(...node[children!]);\n }\n return result;\n};\n\nexport const findPath = <T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T | T[] | null => {\n config = getConfig(config);\n const path: T[] = [];\n const list = [...tree];\n const visitedSet = new Set();\n const { children } = config;\n while (list.length) {\n const node = list[0];\n if (visitedSet.has(node)) {\n path.pop();\n list.shift();\n } else {\n visitedSet.add(node);\n node[children!] && list.unshift(...node[children!]);\n path.push(node);\n if (func(node)) return path;\n }\n }\n return null;\n};\n\nexport const findPathAll = (tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}) => {\n config = getConfig(config);\n const path: any[] = [];\n const list = [...tree];\n const result: any[] = [];\n const visitedSet = new Set();\n const { children } = config;\n while (list.length) {\n const node = list[0];\n if (visitedSet.has(node)) {\n path.pop();\n list.shift();\n } else {\n visitedSet.add(node);\n node[children!] && list.unshift(...node[children!]);\n path.push(node);\n func(node) && result.push([...path]);\n }\n }\n return result;\n};\n\nexport const filter = <T = any>(tree: T[], func: (n: T) => boolean, config: Partial<TreeHelperConfig> = {}): T[] => {\n config = getConfig(config);\n const children = config.children as string;\n function listFilter(list: T[]) {\n return list\n .map((node: any) => ({ ...node }))\n .filter((node) => {\n node[children] = node[children] && listFilter(node[children]);\n return func(node) || (node[children] && node[children].length);\n });\n }\n return listFilter(tree);\n};\n\nexport const forEach = <T = any>(tree: T[], func: (n: T) => any, config: Partial<TreeHelperConfig> = {}): void => {\n config = getConfig(config);\n const list: any[] = [...tree];\n const { children } = config;\n for (let i = 0; i < list.length; i++) {\n // func 返回true就终止遍历,避免大量节点场景下无意义循环,引起浏览器卡顿\n if (func(list[i])) return;\n\n children && list[i][children] && list.splice(i + 1, 0, ...list[i][children]);\n }\n};\n/**\n * @description: Extract tree specified structure\n */\nexport const treeMapEach = (data: any, { children = 'children', conversion }: { children?: string; conversion: Fn }) => {\n const haveChildren = Array.isArray(data[children]) && data[children].length > 0;\n const conversionData = conversion(data) || {};\n if (haveChildren)\n return {\n ...conversionData,\n [children]: data[children].map((i: number) =>\n treeMapEach(i, {\n children,\n conversion,\n }),\n ),\n };\n else\n return {\n ...conversionData,\n };\n};\n/**\n * @description: Extract tree specified structure\n */\nexport const treeMap = <T = any>(treeData: T[], opt: { children?: string; conversion: Fn }): T[] => treeData.map((item) => treeMapEach(item, opt));\n\n/**\n * 递归遍历树结构\n * @param treeDatas 树\n * @param callBack 回调\n * @param parentNode 父节点\n */\nexport const eachTree = (treeDatas: any[], callBack: Fn, parentNode = {}) => {\n treeDatas.forEach((element) => {\n const newNode = callBack(element, parentNode) || element;\n if (element.children) eachTree(element.children, callBack, newNode);\n });\n};\n","/*\n * @title: breadcrumb helper func\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-07-15 12:55:48\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-01-30 12:12:40\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { pathResolve } from '../../utils/index';\n\nexport const filterBreadcrumb = (routes: AppRouteRecordRaw[], parentPath = ''): AppRouteRecordRaw[] => {\n const res: AppRouteRecordRaw[] = [];\n\n for (const route of routes) {\n const meta = route?.meta;\n if (route.name !== 'Root' && meta?.hidden && !meta.canTo) continue;\n\n const data: AppRouteRecordRaw = !meta?.alwaysShow && route.children?.length === 1 ? { ...route.children[0], path: pathResolve(route.path, route.children[0].path) } : { ...route };\n\n data.path = pathResolve(parentPath, data.path);\n\n if (data.children) data.children = filterBreadcrumb(data.children, data.path);\n\n if (data) res.push(data);\n }\n return res;\n};\n","<!--\n * @title: breadcrumb \n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:13:03\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-06 14:28:48\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { usePermsStore } from '@/store/modules/perms';\n import { useBridgeI18n } from '@@/bridge';\n import { ElBreadcrumb, ElBreadcrumbItem } from 'element-plus';\n import { computed, defineComponent, ref, TransitionGroup, unref, watch } from 'vue';\n import { useRouter } from 'vue-router';\n import { GvIcon } from '../../GvIcon';\n import { filter, treeToList } from '../../utils/gv.tree';\n import { filterBreadcrumb } from './helper';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('breadcrumb');\n\n export default defineComponent({\n name: 'GvBreadCrumb',\n setup() {\n const appStore = useAppStore();\n const permStore = usePermsStore();\n // if you want to use the icon in breadcrumb, you can set it in appStore\n const showBreadcrumbIcon = computed(() => appStore.getShowBreadcrumbIcon);\n const { currentRoute } = useRouter();\n\n const { t } = useBridgeI18n();\n\n const levelList = ref<AppRouteRecordRaw[]>([]);\n const menuRouters = computed(() => {\n const routers = permStore.getRouters;\n return filterBreadcrumb(routers);\n });\n\n const getBreadcrumb = () => {\n const currentPath = currentRoute.value.matched.slice(-1)[0].path;\n levelList.value = filter<AppRouteRecordRaw>(unref(menuRouters), (node: AppRouteRecordRaw) => node.path === currentPath);\n };\n\n const renderBreadcrumb = () => {\n const breadcrumbList = treeToList<AppRouteRecordRaw[]>(unref(levelList));\n return breadcrumbList.map((v) => {\n const disabled = !v.redirect || v.redirect === 'noredirect';\n const meta = v.meta;\n return (\n <ElBreadcrumbItem\n to={{ path: disabled ? '' : v.path }}\n key={v.name}>\n {meta?.icon && showBreadcrumbIcon.value ? (\n <>\n <GvIcon\n iconType=\"iconfont\"\n iconName={meta.icon}\n className=\"text-[13px]\"></GvIcon>{' '}\n {t(v?.meta?.title || '')}\n </>\n ) : (\n t(v?.meta?.title || '')\n )}\n </ElBreadcrumbItem>\n );\n });\n };\n // @watch\n watch(\n () => currentRoute.value.path,\n (path) => {\n if (path.startsWith('/redirect/')) return;\n\n getBreadcrumb();\n },\n {\n immediate: true,\n },\n );\n // @created\n\n // @render\n return () => (\n <ElBreadcrumb\n separator=\"/\"\n class={`${prefixCls} flex items-center h-full ml-[10px]`}>\n <TransitionGroup\n appear\n enter-active-class=\"animate__animated animate__fadeInRight\">\n {renderBreadcrumb()}\n </TransitionGroup>\n </ElBreadcrumb>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-breadcrumb';\n .#{$prefixCls} {\n user-select: none;\n :deep(.el-breadcrumb__item) {\n display: flex;\n .el-breadcrumb__inner {\n display: flex;\n align-items: center;\n color: #afb3b9;\n cursor: text;\n //color: var(--top-header-text-color);\n //&:hover {\n // color: var(--el-color-primary);\n //}\n &.is-link {\n font-weight: 500;\n }\n }\n .iconfont {\n font-size: $textSizeSecondary;\n }\n }\n :deep(.el-breadcrumb__item):last-child {\n .el-breadcrumb__inner:hover {\n color: #afb3b9;\n cursor: text;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvBreadCrumb from './src/GvBreadCrumb.vue';\nconst GvBreadCrumbPlugin = {\n install(app: App): void {\n app.component(GvBreadCrumb.name ?? 'GvBreadCrumb', GvBreadCrumb);\n },\n};\nexport default GvBreadCrumbPlugin;\n\nexport { GvBreadCrumb };\n","<!--\n * @title: popconfirm component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 16:43:20\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-22 16:32:45\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElPopconfirm } from 'element-plus';\n import { defineComponent, getCurrentInstance } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('popconfirm');\n\n export default defineComponent({\n name: 'GvPopconfirm',\n props: {\n title: {\n type: String,\n default: '',\n },\n },\n\n emits: ['confirm'],\n\n setup(props, { emit, slots }) {\n const instance = getCurrentInstance();\n\n const handleConfirm = (event: MouseEvent) => {\n emit('confirm', event, instance);\n };\n\n return () => (\n <ElPopconfirm\n title={props.title}\n onConfirm={handleConfirm}\n class={prefixCls}>\n {{\n reference: () => slots.reference?.(),\n }}\n </ElPopconfirm>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-popconfirm';\n .#{$prefixCls} {\n display: inline-block;\n }\n</style>\n","import type { App } from 'vue';\nimport GvPopconfirm from './src/GvPopconfirm.vue';\n\nconst GvInputPlugin = {\n install(app: App): void {\n app.component(GvPopconfirm.name ?? 'GvPopconfirm', GvPopconfirm);\n },\n};\nexport default GvInputPlugin;\n\nexport { GvPopconfirm };\n","/*\n * @title: sessionStorage and localStorage hook\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-03-19 16:32:15\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-04-24 17:11:28\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\n// 获取传入的值的类型\nconst getValueType = (value: any): string => {\n const type = Object.prototype.toString.call(value);\n return type.slice(8, -1);\n};\n\nexport const useStorage = (type: 'sessionStorage' | 'localStorage' = 'sessionStorage'): IWebStorage => {\n const setStorage = (key: string, value: any): void => {\n const valueType = getValueType(value);\n window[type].setItem(key, JSON.stringify({ type: valueType, value }));\n };\n\n const getStorage = (key: string): any => {\n const value = window[type].getItem(key);\n if (value) {\n const { value: val } = JSON.parse(value);\n return val;\n } else return value;\n };\n\n const removeStorage = (key: string): void => {\n window[type].removeItem(key);\n };\n\n const clear = (excludes?: string[]): void => {\n // 获取排除项\n const keys = Object.keys(window[type]);\n const defaultExcludes = ['dynamicRouter', 'serverDynamicRouter'];\n const excludesArr = excludes ? [...excludes, ...defaultExcludes] : defaultExcludes;\n const excludesKeys = excludesArr ? keys.filter((key) => !excludesArr.includes(key)) : keys;\n // 排除项不清除\n excludesKeys.forEach((key) => {\n window[type].removeItem(key);\n });\n // window[type].clear()\n };\n\n return {\n setStorage,\n getStorage,\n removeStorage,\n clear,\n };\n};\n","/*\n * @title: message alert confirm\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 11:47:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-13 15:38:19\n * @version: 1.0.6\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { useStorage } from '@@/hooks/web/useStorage';\nimport { ElMessage, ElMessageBox, ElNotification } from 'element-plus';\n// import { useLocaleStoreWithOut } from '@/store/modules/locale';\nimport { isError, sleep } from './index';\n// const localeStore = useLocaleStoreInstance();\n// const { lang } = localeStore.getCurrentLocale;\n\nconst notificationTime = 5000;\nconst notificationTimeError = 6000;\nconst messageTime = 2000;\nconst messageTimeError = 5000;\ninterface ConfirmOptions {\n title?: string;\n message: string;\n confirmButtonText?: string;\n cancelButtonText?: string;\n type?: 'success' | 'warning' | 'info' | 'error';\n showCancelButton?: boolean;\n}\n/**\n * @todo: Notification - MessageBox\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 13:48:24\n * @param {unknown} msg\n * @param {MessageType} type\n * @param {string} title\n */\ntype MessageType = 'success' | 'info' | 'warning' | 'error';\n\nexport const alert = async (msg: unknown, type: MessageType = 'success') => {\n const alertObj = document.body.querySelector('body>.el-notification');\n if (alertObj) alertObj.remove();\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n let promptMsg = '提示信息';\n if (lang === 'en') promptMsg = 'Hint';\n const duration = type === 'error' ? notificationTimeError : notificationTime;\n let m = 'No message...';\n if (isError(msg)) m = msg.message || 'No message...';\n else if (typeof msg === 'string' || typeof msg === 'number' || typeof msg === 'boolean') m = String(msg);\n else if (typeof msg === 'object') m = JSON.stringify(msg);\n\n ElNotification({\n title: promptMsg,\n message: m,\n type,\n duration: duration,\n });\n await sleep(duration);\n};\n/**\n * @todo: confirm - MessageBox\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 12:03:27\n * @param {*} msg\n * @param {*} type\n */\nexport const confirm = async (msg: string, type: MessageType = 'warning') => {\n if (document.body.querySelector('body>.el-confirm')) return;\n // 返回 Promise 对象\n let msgs: string;\n const showCancelButton = true;\n msgs = '是否确定此操作?';\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n let hint = '提示信息';\n let ok = '确定';\n let cancel = '取消';\n if (msg) msgs = msg;\n else if (lang === 'en') {\n msgs = 'Are you sure you want to proceed?';\n hint = 'Hint';\n ok = 'Ok';\n cancel = 'Cancel';\n }\n\n return new Promise((resolve, reject) => {\n ElMessageBox.confirm(msgs, hint, {\n confirmButtonText: ok,\n cancelButtonText: cancel,\n type,\n showCancelButton,\n } as ConfirmOptions)\n .then(() => {\n resolve(true);\n })\n .catch(() => {\n reject(false);\n });\n });\n};\n\nexport const message = async (msg: unknown, type: MessageType = 'warning', tableedit: boolean = false) => {\n if (tableedit === false) {\n const messageObj = document.body.querySelector('body>.el-message');\n // if (messageObj) messageObj.style.display = 'none';\n if (messageObj) return;\n const notifyObj = document.body.querySelector('body>.el-notification');\n if (notifyObj) return;\n }\n let m = 'No message...';\n if (isError(msg)) m = msg.message || 'No message...';\n else if (typeof msg === 'string' || typeof msg === 'number' || typeof msg === 'boolean') m = String(msg);\n else if (typeof msg === 'object') m = JSON.stringify(msg);\n const duration = type === 'error' ? messageTimeError : messageTime;\n ElMessage({\n message: m,\n showClose: true,\n type,\n duration: duration,\n });\n await sleep(duration);\n};\n","<!--\n * @title: button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 16:43:34\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:20:22\n * @version: 1.1.0\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvIcon } from '@@/GvIcon';\n import { GvPopconfirm } from '@@/GvPopconfirm';\n import { getVNodeText } from '@@/utils';\n import { confirm } from '@@/utils/gv.notify';\n import { ElButton, useGlobalConfig, type ButtonType, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, ref, unref, watch, type Component, type PropType } from 'vue';\n import { useRoute } from 'vue-router';\n import type { BizType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('button');\n\n export default defineComponent({\n name: 'GvButton',\n props: {\n visible: {\n type: Boolean,\n default: true,\n },\n text: {\n type: String,\n default: '',\n },\n otext: {\n type: String,\n default: '',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n type: {\n type: String as PropType<ButtonType>,\n default: 'default',\n },\n link: {\n type: Boolean,\n default: false,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: [Boolean, String] as PropType<boolean | string>,\n default: false,\n },\n refForm: {\n type: String,\n required: false,\n default: undefined,\n },\n icon: {\n // type: [String, Object] as PropType<string | DefineComponent>,\n type: String,\n default: '',\n },\n nativeType: {\n type: String,\n default: 'button',\n },\n bizType: {\n type: String as PropType<BizType>,\n default: undefined,\n },\n args: {\n type: String,\n default: undefined,\n },\n confirm: {\n type: [Boolean, String],\n default: false,\n },\n perms: {\n type: String,\n default: undefined,\n },\n cb: {\n type: Function as PropType<(args?: any) => void>,\n default: () => {},\n },\n },\n\n // @emits\n emits: ['click', 'confirm'],\n\n setup(props, { emit, slots }) {\n // @data\n // const attrs = useAttrs();\n const { t } = useBridgeI18n();\n const route = useRoute();\n const appStore = useAppStore();\n const instance = getCurrentInstance();\n const globalSize = useGlobalConfig('size');\n const buttonSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const buttonConfirm = computed(() => appStore.buttonConfirm);\n const loadings = ref(props.loading);\n const locked = ref(false);\n const isShow = ref(props.visible);\n const isIf = ref(true);\n\n // @computed\n const getSlots = computed(() => {\n if (props.text && props.otext) return props.text;\n else return slots.default?.();\n });\n\n // @watch\n watch(\n () => props.loading,\n (v) => (loadings.value = v),\n );\n watch(\n () => props.visible,\n (v) => (isShow.value = v),\n );\n\n // @method\n\n const setIconStyle = () => {\n if (!props.icon) return '';\n if (props.icon.startsWith('el-icon'))\n return (\n <GvIcon\n iconType=\"el\"\n iconName={props.icon.replace('el-icon-', '')}\n />\n );\n else if (props.icon.startsWith('iconfont') || props.icon.startsWith('gv-icon'))\n return (\n <GvIcon\n iconType=\"iconfont\"\n iconName={props.icon.replace('iconfont', '')}\n />\n );\n else return <GvIcon iconName={props.icon} />;\n // 父组件如果传递了图标组件,就使用图标组件,如果传递了ep图标名称,就使用ep图标名称\n // if (typeof props.icon === 'string')\n // return (\n // <GvIcon\n // iconName={props.icon}\n // className={props.icon}\n // />\n // );\n // else {\n // const Icons = props.icon;\n // return <Icons />;\n // }\n };\n\n const checkPerms = () => {\n if (route) {\n const meta = route.meta;\n if (meta) {\n const pm = meta.pm || '';\n if (pm) {\n let filter: string = props.text || '';\n if (props.otext) filter = props.otext;\n if (filter === '') {\n const slot = slots.default?.();\n if (slot && slot[0]) filter = getVNodeText(slot[0]) || '';\n }\n if (filter) {\n const pmArr = pm.split(',');\n const perms = pmArr.filter((x) => x.indexOf(filter) !== -1);\n if (perms.length > 0) {\n const p = perms[0];\n const arr = p.split('|');\n if (arr[0] !== ' ' && arr[1] && arr[1] === 'f') {\n isShow.value = false;\n isIf.value = false;\n }\n }\n }\n }\n }\n }\n };\n\n const handleClick = async (e: MouseEvent, type?: string) => {\n // 判断是否是reset\n if (props.bizType === 'reset') {\n let parent: any = instance?.parent; // form\n while (parent && parent.type?.name !== 'ElForm') parent = parent.parent;\n await parent.exposed.resetFields?.();\n\n while (parent && parent.type?.name !== 'GvForm') parent = parent.parent;\n const rootForm = parent;\n // console.log(rootForm);\n const originFormList = rootForm?.exposed.originFormList.value;\n const formList = rootForm?.props.formList;\n // console.log(parent.props.model.value);\n if (originFormList && Array.isArray(originFormList))\n originFormList.forEach((x: any, index: number) => {\n if (x.type === 'dic') formList[index]['filtercode'] = x.filtercode; // 重置字典的filtercode\n formList[index]['value'] = x.value;\n formList[index]['showLabel'] = x.showLabel;\n formList[index]['hidden'] = x.hidden;\n formList[index]['disabled'] = x.disabled;\n // 重置日期\n if (x.dateType === 'daterange2' || x.dateType === 'datetimerange2') {\n parent.props.model.value[x.field + '-start'] = undefined;\n parent.props.model.value[x.field + '-end'] = undefined;\n parent.props.model.value[x.field] = undefined;\n }\n });\n // 重置按钮自定义回调\n props.cb?.(props.args);\n\n const rootEl = parent?.vnode.el as HTMLElement;\n // 重置日期\n const dateRangeSingles = rootEl?.querySelectorAll('.gv-daterange__single') as NodeListOf<HTMLElement>;\n if (dateRangeSingles)\n for (let i = 0; i < dateRangeSingles.length; i++) {\n const startInput = dateRangeSingles[i].querySelector('.gv-datepicker-range-start .el-input__inner') as HTMLInputElement | null;\n if (startInput) startInput.value = '';\n const endInput = dateRangeSingles[i].querySelector('.gv-datepicker-range-end .el-input__inner') as HTMLInputElement | null;\n if (endInput) endInput.value = '';\n }\n // update: 重置后执行查询方法 2022-04-17\n loadings.value = true;\n await parent?.vnode.el?.querySelector('.gv-search-bar .el-button--primary')?.click();\n loadings.value = false;\n return;\n } else if (props.bizType === 'import' || props.bizType === 'export') {\n emit('click', e, props.args);\n return;\n } else {\n loadings.value = true;\n if (type === 'confirm')\n if (buttonConfirm.value === false)\n try {\n await confirm(t('common.confirmMsg')).then(async () => {\n if (!locked.value) {\n locked.value = true;\n emit('click', e, props.args);\n locked.value = false;\n }\n });\n } catch {\n // ignore user cancel\n }\n else {\n if (!locked.value) {\n locked.value = true;\n emit('click', e, props.args);\n locked.value = false;\n }\n }\n else emit('click', e, props.args);\n // ===== loading关闭 =====\n loadings.value = false;\n }\n };\n\n // @created\n\n // @mounted\n // onMounted(() => {\n // checkPerms();\n // });\n\n // @render\n /** ===== render 渲染 ===== */\n return () => {\n // validate btn perms\n checkPerms();\n\n const classz = props.bizType ? `${prefixCls} ${props.bizType}` : `${prefixCls}`;\n if (isIf.value) {\n let renderBtn: Component;\n if (props.confirm === 'true' || props.confirm === true)\n if (buttonConfirm.value === false)\n renderBtn = (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n onClick={(e: MouseEvent) => handleClick(e, 'confirm')}\n class={classz}>\n {getSlots.value}\n </ElButton>\n );\n else\n renderBtn = (\n <GvPopconfirm\n title={t('common.confirmMsg')}\n onConfirm={(e: MouseEvent) => handleClick(e, 'confirm')}>\n {{\n reference: () => (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n class={classz}>\n {getSlots.value}\n </ElButton>\n ),\n }}\n </GvPopconfirm>\n );\n else\n renderBtn = (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n onClick={(e: MouseEvent) => handleClick(e)}\n class={classz}>\n {getSlots.value}\n </ElButton>\n );\n return renderBtn;\n } else return null;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-button';\n .#{$prefixCls} {\n :deep(i + span) {\n margin-left: 5px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvButton from './src/GvButton.vue';\n\nconst GvButtonPlugin = {\n install(app: App): void {\n app.component(GvButton.name ?? 'GvButton', GvButton);\n },\n};\nexport default GvButtonPlugin;\n\nexport { GvButton };\n","<!--\n * @title: card component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 09:39:53\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:18:37\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCard } from 'element-plus';\n import { defineComponent } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('card');\n\n export default defineComponent({\n name: 'GvCard',\n props: {},\n setup(_props, { slots }) {\n // @method\n /**\n *@todo: 设置header标题\n *@author: bugcao\n *@date: 2026-05-09 09:31:12\n *@version: v0.0.1\n */\n const getCardHeader = () => {\n if (slots.header?.()) return <div class=\"clearfix\">{slots.header?.()}</div>;\n else return null;\n };\n\n // @render\n return () => (\n <ElCard class={prefixCls}>\n {{\n header: () => getCardHeader(),\n default: () => slots.default?.(),\n }}\n </ElCard>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-card';\n .#{$prefixCls} {\n .clearfix::before,\n .clearfix::after {\n display: table;\n content: '';\n }\n .clearfix::after {\n clear: both;\n }\n :deep(.el-card__body) {\n padding: 10px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCard from './src/GvCard.vue';\n\nconst GvCardPlugin = {\n install(app: App): void {\n app.component(GvCard.name ?? 'GvCard', GvCard);\n },\n};\nexport default GvCardPlugin;\n\nexport { GvCard };\n","<!--\n * @title: cascader component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:32:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 14:20:07\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { ElCascader, useGlobalConfig, type CascaderOption, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('cascader');\n\n export default defineComponent({\n name: 'GvCascader',\n props: {\n vref: {\n type: String,\n required: false,\n default: '',\n },\n name: {\n type: String,\n required: false,\n default: undefined,\n },\n value: {\n type: Array,\n required: false,\n default: () => [],\n },\n options: {\n type: Array as PropType<CascaderOption[]>,\n required: false,\n default: () => [],\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n placeholder: {\n type: String,\n required: false,\n default: 'All', // 请选择\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n clearable: {\n type: Boolean,\n required: false,\n default: true,\n },\n showAllLevels: {\n type: Boolean,\n required: false,\n default: true,\n },\n separator: {\n type: String,\n required: false,\n default: ' / ',\n },\n trigger: {\n type: String,\n required: false,\n default: 'hover',\n },\n filterable: {\n type: Boolean,\n required: false,\n default: true,\n },\n multiple: {\n type: Boolean,\n required: false,\n default: false,\n },\n lazy: {\n type: Boolean,\n required: false,\n default: false,\n },\n lazyLoad: {\n type: Function as PropType<(node: any, resolve: (data: any[]) => void, reject: () => void) => void>,\n required: false,\n default: () => {},\n },\n },\n // @emit\n emits: ['input', 'blur', 'focus', 'keydown', 'change'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const sOps = props.options;\n const inputValue = ref(props.value);\n const globalSize = useGlobalConfig('size');\n\n // @computed\n const cascaderSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceHolder = computed(() => (props.placeholder ? props.placeholder : t('common.pleaseInput')));\n const getDisabled = computed(() => props.disabled);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n\n // 回调参数:(value: string | number)\n // const handleInput = (val) => {\n // emit('input', val);\n // };\n const handleChange = (val) => {\n emit('change', val);\n };\n const handleBlur = (event) => {\n emit('blur', event);\n };\n /**\n * @todo: 搜索\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-10-07 15:48:09\n * @param {*} node\n * @param {*} query\n */\n const handleFilterMethod = (node, query) => {\n // console.log(node);\n const path = node.path;\n const labels = node.pathLabels;\n const data = node.data;\n if (query) {\n if (path.join(',').indexOf(query) >= 0) return true;\n if (labels.join(',').indexOf(query) >= 0) return true;\n if (data.spell)\n if (data.spell.indexOf(query) >= 0) return true;\n else {\n const pathNodes = node.pathNodes;\n return pathNodes.some((x) => {\n if (x.data.spell && x.data.spell.indexOf(query) >= 0) return true;\n });\n }\n }\n };\n\n // @render\n return (\n <ElCascader\n ref={props.vref || 'gv-cascader'}\n {...(props.name ? { name: props.name } : {})}\n class={prefixCls}\n v-model={inputValue.value}\n style={{ display: props.value ? '' : 'none' }}\n size={cascaderSize.value}\n placeholder={sPlaceHolder.value}\n options={sOps}\n disabled={getDisabled.value}\n show-all-levels={props.showAllLevels}\n clearable={props.clearable}\n separator={props.separator}\n filterable={props.filterable}\n filter-method={handleFilterMethod}\n debounce={400}\n onBlur={handleBlur}\n onChange={handleChange}\n collapse-tags\n props={{\n expandTrigger: props.trigger as 'click' | 'hover',\n lazy: props.lazy,\n lazyLoad: props.lazyLoad,\n multiple: props.multiple,\n }}></ElCascader>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-cascader';\n .#{$prefixCls} {\n width: 100%;\n\n :deep(.el-input) {\n &.is-focus {\n .el-input__inner {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-input__inner {\n height: 30px !important;\n line-height: 30px;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCascader from './src/GvCascader.vue';\nconst GvCascaderPlugin = {\n install(app: App): void {\n app.component(GvCascader.name ?? 'GvCascader', GvCascader);\n },\n};\nexport default GvCascaderPlugin;\n\nexport { GvCascader };\n","<!--\n * @title: checkbox component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 15:50:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:11:03\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckbox, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TCheckboxValueType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox');\n\n export default defineComponent({\n name: 'GvCheckbox',\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [Boolean, String, Number] as PropType<TCheckboxValueType>,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n indeterminate: {\n type: Boolean,\n default: false,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TCheckboxValueType>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n const checkboxValue = ref(props.value);\n const checkboxSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @method\n /** 更新值 */\n const handleUpdate = (val: TCheckboxValueType) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n /** change事件 */\n const handleChange = (val: TCheckboxValueType) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElCheckbox\n class={prefixCls}\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n label={props.label}\n indeterminate={props.indeterminate}\n disabled={props.disabled}\n border={props.border}\n size={checkboxSize.value}\n style={{ display: props.visible ? '' : 'none' }}\n onChange={handleChange}>\n {slots.default?.()}\n </ElCheckbox>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox';\n .#{$prefixCls} {\n padding: 5px 0 5px 15px;\n font-size: $appTextSize;\n\n :deep(.el-checkbox__input) {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-focus {\n .el-checkbox__inner {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked {\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n\n &:hover {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n\n :deep(.el-checkbox__input.is-checked + .el-checkbox__label) {\n color: var(--primaryColor, $primaryColor);\n }\n\n :deep(.el-checkbox__label) {\n font-size: $appTextSize;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckbox from './src/GvCheckbox.vue';\n\nconst GvCheckboxPlugin = {\n install(app: App): void {\n app.component(GvCheckbox.name ?? 'GvCheckbox', GvCheckbox);\n },\n};\nexport default GvCheckboxPlugin;\n\nexport { GvCheckbox };\n","<!--\n * @title: checkbox button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 16:41:13\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:22:44\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckboxButton, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TCheckboxButtonValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox-button');\n\n export default defineComponent({\n name: 'GvCheckboxButton',\n inheritAttrs: false,\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TCheckboxButtonValue>,\n default: undefined,\n },\n name: {\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n indeterminate: {\n type: Boolean,\n required: false,\n default: false,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TCheckboxButtonValue>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n required: false,\n default: false,\n },\n size: {\n type: String as PropType<'large' | 'default' | 'small'>,\n default: 'default',\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n /** 内部值 */\n const checkboxValue = ref(props.value);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @computed\n /** checkbox尺寸 */\n const checkboxButtonSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @method\n /** 更新v-model */\n const handleUpdate = (val: TCheckboxButtonValue) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n\n // @render\n return () => (\n <ElCheckboxButton\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n value={props.value}\n label={props.label}\n indeterminate={props.indeterminate}\n disabled={props.disabled}\n size={checkboxButtonSize.value}\n class={prefixCls}\n border={props.border}\n style={{ display: props.visible ? '' : 'none' }}>\n {slots.default?.()}\n </ElCheckboxButton>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox-button';\n .#{$prefixCls} {\n padding: 5px 0 5px 15px;\n font-size: $appTextSize;\n\n :deep(.el-checkbox-button__inner) {\n font-size: $appTextSize;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckboxButton from './src/GvCheckboxButton.vue';\n\nconst GvCheckboxButtonPlugin = {\n install(app: App): void {\n app.component(GvCheckboxButton.name ?? 'GvCheckboxButton', GvCheckboxButton);\n },\n};\nexport default GvCheckboxButtonPlugin;\n\nexport { GvCheckboxButton };\n","<!--\n * @title: checkbox group component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 16:08:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:26:16\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckboxGroup, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TCheckboxGroupType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox-group');\n\n export default defineComponent({\n name: 'GvCheckboxGroup',\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: Array as PropType<TCheckboxGroupType>,\n required: false,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<'large' | 'default' | 'small'>,\n default: 'default',\n },\n min: {\n type: Number,\n default: undefined,\n },\n max: {\n type: Number,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n\n const checkboxValue = ref(props.value);\n\n // @computed\n const checkboxGroupSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @method\n /** 更新 v-model */\n const handleUpdate = (val: TCheckboxGroupType) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n /** change事件 */\n const handleChange = (val: TCheckboxGroupType) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElCheckboxGroup\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n size={checkboxGroupSize.value}\n aria-label={props.label}\n min={props.min}\n max={props.max}\n disabled={props.disabled}\n class={prefixCls}\n onChange={handleChange}>\n {slots.default?.()}\n </ElCheckboxGroup>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox-group';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckboxGroup from './src/GvCheckboxGroup.vue';\n\nconst GvCheckboxGroupPlugin = {\n install(app: App): void {\n app.component(GvCheckboxGroup.name ?? 'GvCheckboxGroup', GvCheckboxGroup);\n },\n};\nexport default GvCheckboxGroupPlugin;\n\nexport { GvCheckboxGroup };\n","<!--\n * @title: col component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 10:00:33\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:24:29\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCol } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('col');\n\n export default defineComponent({\n name: 'GvCol',\n props: {\n span: {\n type: Number,\n default: 24,\n },\n offset: {\n type: Number,\n default: 0,\n },\n xs: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n sm: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n md: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n lg: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n xl: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n tag: {\n type: String,\n default: 'div',\n },\n visible: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @render\n return () => (\n <ElCol\n ref=\"gv-col\"\n style={{ display: props.visible ? '' : 'none' }}\n xs={props.xs}\n sm={props.sm}\n md={props.md}\n lg={props.lg}\n xl={props.xl}\n span={props.span}\n offset={props.offset}\n tag={props.tag}\n class={prefixCls}>\n {slots.default?.()}\n </ElCol>\n );\n },\n });\n</script>\n","import type { App } from 'vue';\nimport GvCol from './src/GvCol.vue';\n\nconst GvColPlugin = {\n install(app: App): void {\n app.component(GvCol.name ?? 'GvCol', GvCol);\n },\n};\nexport default GvColPlugin;\n\nexport { GvCol };\n","/*\n * 日期工具函数(Vue3 + TS 重构版)\n */\n\nexport type LocaleType = 'zh' | 'en' | 'english';\n\nconst localLabels = {\n monthes: {\n english: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n en: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n zh: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n },\n weekdays: {\n english: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n en: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n zh: ['日', '一', '二', '三', '四', '五', '六'],\n },\n meridians: {\n english: ['a.m.', 'p.m.'],\n en: ['AM', 'PM'],\n zh: ['上午', '下午'],\n },\n dayagos: {\n english: ['Today', 'Yesterday', 'Tomorrow', ' days ago', ' days late'],\n en: ['Today', 'Yesterday', 'Tomorrow', ' days ago', ' days late'],\n zh: ['今天', '昨天', '明天', '天前', '天后'],\n },\n};\n\nexport const toMidnight = (date: Date): Date => {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n return d;\n};\n\nexport const daysAgo = (date: Date, days = 0, midnight = false): Date => {\n const result = new Date(date.getTime() - days * 8.64e7);\n return midnight ? toMidnight(result) : result;\n};\n\nexport const monthBegin = (date: Date, offset = 0): Date => {\n const days = date.getDate() - 1 - offset;\n return daysAgo(date, days, true);\n};\n\nexport const quarterBegin = (date: Date): Date => {\n const month = date.getMonth() - (date.getMonth() % 3);\n return toMidnight(new Date(date.getFullYear(), month, 1));\n};\n\nexport const yearBegin = (date: Date): Date => toMidnight(new Date(date.getFullYear(), 0, 1));\n\nconst padZero = (value: string | number, len = 2): string => String(value).padStart(len, '0');\n\nexport const strftime = (date: Date, format?: string, local: LocaleType = 'zh'): string => {\n if (!format) {\n const str = new Date(date.getTime() + 2.88e7).toISOString();\n return str.substring(0, 16).replace('T', ' ');\n }\n\n const locale = local.startsWith('zh') ? 'zh' : 'en';\n\n format = format.replace('%F', '%Y-%m-%d');\n format = format.replace(/%D|%x/g, '%m/%d/%y');\n format = format.replace(/%T|%X/g, '%H:%M:%S');\n format = format.replace('%R', '%H:%M');\n\n return format.replace(/%[A-Za-z%]/g, (f) => {\n let ans: string | number = f;\n\n switch (f) {\n case '%%':\n ans = '%';\n break;\n\n case '%Y':\n ans = date.getFullYear();\n break;\n\n case '%y':\n ans = date.getFullYear() % 100;\n break;\n\n case '%m':\n ans = date.getMonth() + 1;\n break;\n\n case '%d':\n ans = date.getDate();\n break;\n\n case '%H':\n ans = date.getHours();\n break;\n\n case '%M':\n ans = date.getMinutes();\n break;\n\n case '%S':\n ans = date.getSeconds();\n break;\n\n case '%b':\n case '%B': {\n const key = f === '%B' && locale === 'en' ? 'english' : locale;\n ans = localLabels.monthes[key][date.getMonth()];\n break;\n }\n\n case '%a':\n case '%A': {\n const key = f === '%A' && locale === 'en' ? 'english' : locale;\n ans = localLabels.weekdays[key][date.getDay()];\n break;\n }\n\n default:\n break;\n }\n\n if (['%y', '%m', '%d', '%H', '%M', '%S'].includes(f)) return padZero(ans);\n\n return String(ans);\n });\n};\n\nexport const humanize = (date: Date, local: LocaleType = 'zh'): string => {\n const locale = local.startsWith('zh') ? 'zh' : 'en';\n\n const result = strftime(date, '', locale);\n\n const today = toMidnight(new Date()).getTime();\n const current = toMidnight(date).getTime();\n\n const days = (today - current) / 8.64e7;\n\n if (days <= -10 || days >= 10) return result;\n\n const labels = localLabels.dayagos[locale];\n\n let lbl = '';\n\n if (days === 0) lbl = labels[0];\n else if (days === 1) lbl = labels[1];\n else if (days === -1) lbl = labels[2];\n else if (days >= 2) lbl = `${days}${labels[3]}`;\n else lbl = `${Math.abs(days)}${labels[4]}`;\n\n return lbl + result.substring(10, 16);\n};\n","/*\n * @title: date shortcuts\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 09:14:04\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-14 09:26:20\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { daysAgo, monthBegin, quarterBegin, yearBegin } from './datetime';\n\nexport interface ShortcutItem {\n text: string;\n value: Date | [Date, Date] | (() => Date | [Date, Date]);\n}\n\nconst now = () => new Date();\n\n/** 单日期快捷选择 */\nexport const dateShortcuts: ShortcutItem[] = [\n {\n text: '今天',\n value: () => now(),\n },\n {\n text: '昨天',\n value: () => daysAgo(now(), 1),\n },\n {\n text: '最近一周',\n value: () => daysAgo(now(), 7),\n },\n {\n text: '最近30天',\n value: () => daysAgo(now(), 30),\n },\n {\n text: '本月开始',\n value: () => monthBegin(now()),\n },\n {\n text: '本季开始',\n value: () => quarterBegin(now()),\n },\n];\n\n/** 英文单日期快捷选择 */\nexport const dateShortcutsEn: ShortcutItem[] = [\n {\n text: 'Today',\n value: () => now(),\n },\n {\n text: 'Yesterday',\n value: () => daysAgo(now(), 1),\n },\n {\n text: 'Last week',\n value: () => daysAgo(now(), 7),\n },\n {\n text: 'Last 30 days',\n value: () => daysAgo(now(), 30),\n },\n {\n text: 'Month start',\n value: () => monthBegin(now()),\n },\n {\n text: 'Season Start',\n value: () => quarterBegin(now()),\n },\n];\n\n/** 日期时间快捷选择 */\nexport const dateTimeShortcuts = dateShortcuts.slice(0, 3);\n\nexport const dateTimeShortcutsEn = dateShortcutsEn.slice(0, 3);\n\n/** 日期范围快捷选择 */\nexport const dateRangeShortcuts: ShortcutItem[] = [\n {\n text: '最近一周',\n value: () => {\n const start = new Date(daysAgo(now(), 7).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '最近30天',\n value: () => {\n const start = new Date(daysAgo(now(), 30).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '本月至今',\n value: () => {\n const start = new Date(monthBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '本季至今',\n value: () => {\n const start = new Date(quarterBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '今年至今',\n value: () => [yearBegin(now()), now()],\n },\n {\n text: '最近六个月',\n value: () => {\n const end = now();\n const start = new Date();\n\n start.setMonth(start.getMonth() - 6);\n\n return [start, end];\n },\n },\n];\n\n/** 英文日期范围快捷选择 */\nexport const dateRangeShortcutsEn: ShortcutItem[] = [\n {\n text: 'Last week',\n value: () => {\n const start = new Date(daysAgo(now(), 7).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Last 30 days',\n value: () => {\n const start = new Date(daysAgo(now(), 30).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Month date',\n value: () => {\n const start = new Date(monthBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Season date',\n value: () => {\n const start = new Date(quarterBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Year date',\n value: () => [yearBegin(now()), now()],\n },\n {\n text: 'Last 6 mon',\n value: () => {\n const end = now();\n const start = new Date();\n\n start.setMonth(start.getMonth() - 6);\n\n return [start, end];\n },\n },\n];\n\n/** 日历快捷选择 */\nexport const calendarShortcuts = [...dateShortcuts];\n","<!--\n * @title: date picker\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:51:21\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:26:43\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElDatePicker, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type DefineComponent, type PropType } from 'vue';\n import { useI18n } from 'vue-i18n';\n import { dateRangeShortcuts, dateRangeShortcutsEn, dateShortcuts, dateShortcutsEn, dateTimeShortcuts, dateTimeShortcutsEn } from './shortcuts';\n import type { TDatePickerEmits, TDatePickerSize, TDatePickerType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('datepicker');\n\n export default defineComponent({\n name: 'GvDatePicker',\n props: {\n vref: {\n type: String,\n default: '',\n },\n modelValue: {\n type: [Date, String, Array] as PropType<TDatePickerType>,\n default: undefined,\n },\n type: {\n type: String,\n default: 'date',\n },\n format: {\n type: String,\n default: 'YYYY-MM-DD',\n },\n valueFormat: {\n type: String,\n default: 'YYYY-MM-DD',\n },\n defaultTime: {\n type: Array as PropType<Date[]>,\n default: undefined,\n },\n size: {\n type: String as PropType<TDatePickerSize>,\n default: 'small',\n },\n rangeSeparator: {\n type: String,\n default: undefined,\n },\n startPlaceholder: {\n type: String,\n default: undefined,\n },\n endPlaceholder: {\n type: String,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n disabledDateFunc: {\n type: Array as PropType<string[]>,\n default: () => [],\n },\n disabledDate: {\n type: Function as PropType<(date: Date) => boolean>,\n default: undefined,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n unlink: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: ['update:modelValue', 'change', 'blur', 'focus', 'pick'],\n\n setup(props, { emit }) {\n // @data\n const { locale, t } = useI18n();\n const globalSize = useGlobalConfig('size');\n const inputValue = ref(props.modelValue);\n const datepickerSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sType = computed(() => {\n if (props.type === 'date') return 'date';\n if (props.type === 'datetime') return 'datetime';\n if (props.type === 'daterange2') return 'date';\n if (props.type === 'datetimerange2') return 'datetime';\n if (props.type === 'daterange' || props.type === 'datetimerange') return 'daterange';\n return 'date';\n });\n const DatePicker = ElDatePicker as typeof ElDatePicker & DefineComponent<TDatePickerEmits>;\n\n // @watch\n watch(\n () => props.modelValue,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n /**\n *@todo: 快捷时间选择器 - 左侧栏\n *@author: bugcao\n *@date: 2026-05-07 14:04:54\n *@version: v1.0.1\n */\n const shortcuts = computed(() => {\n const isEn = locale.value === 'en';\n if (props.type === 'date') return isEn ? dateShortcutsEn : dateShortcuts;\n if (props.type === 'datetime') return isEn ? dateTimeShortcutsEn : dateTimeShortcuts;\n if (props.type === 'daterange' || props.type === 'datetimerange') return isEn ? dateRangeShortcutsEn : dateRangeShortcuts;\n return [];\n });\n /**\n *@todo: 禁用日期函数,原属性picker-options.disabled-date\n *@author: bugcao\n *@date: 2026-05-07 14:05:08\n *@version: v1.0.1\n */\n const mergedDisabledDate = computed(() => {\n if (props.disabledDate) return props.disabledDate;\n if (props.disabledDateFunc.includes('beforeToday')) return (date: Date) => date.getTime() < Date.now() - 86400000;\n if (props.disabledDateFunc.includes('afterToday')) return (date: Date) => date.getTime() > Date.now();\n return undefined;\n });\n const handleUpdate = (value: TDatePickerType) => {\n emit('update:modelValue', value);\n };\n const handleChange = (value: TDatePickerType) => {\n emit('change', value);\n };\n const handleBlur = (e: FocusEvent) => {\n emit('blur', e);\n };\n const handleFocus = (e: FocusEvent) => {\n emit('focus', e);\n };\n const handleCalendarChange = (value: any) => {\n emit('pick', value);\n };\n\n // @render\n return () => (\n <DatePicker\n ref={props.vref || 'gv-datepicker'}\n modelValue={inputValue.value}\n onUpdate:modelValue={handleUpdate}\n type={sType.value}\n range-separator={props.rangeSeparator || t('common.until')}\n placeholder={props.placeholder || t('common.selectDate')}\n start-placeholder={props.startPlaceholder || t('common.startDate')}\n end-placeholder={props.endPlaceholder || t('common.endDate')}\n default-time={props.defaultTime}\n shortcuts={shortcuts.value}\n disabled-date={mergedDisabledDate.value}\n format={props.format}\n value-format={props.valueFormat}\n clearable={props.clearable}\n disabled={props.disabled}\n editable={props.editable}\n unlink-panels={props.unlink}\n class={prefixCls}\n size={datepickerSize.value}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onCalendarChange={handleCalendarChange}\n />\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-datepicker';\n .#{$prefixCls} {\n width: 100% !important;\n vertical-align: middle;\n :deep(.el-input.is-disabled) {\n .el-input__inner {\n color: $textColor;\n }\n }\n &.el-range-editor.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n :deep(.el-input__inner) {\n height: 30px;\n line-height: 30px;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-range__close-icon {\n width: 20px;\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-date-editor--daterange {\n :deep(.el-range-separator) {\n padding-right: 2px;\n padding-left: 0;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDatePicker from './src/GvDatePicker.vue';\n\nconst GvDatePickerPlugin = {\n install(app: App): void {\n app.component(GvDatePicker.name ?? 'GvDatePicker', GvDatePicker);\n },\n};\nexport default GvDatePickerPlugin;\n\nexport { GvDatePicker };\n","/*\n * @title: dialog drag\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 10:50:25\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 10:52:45\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport type { Directive } from 'vue';\n\n/** 使用 WeakSet 跟踪已绑定拖拽事件的 header 元素,避免内存泄漏 */\nconst boundElements = new WeakSet<HTMLElement>();\n\n/**\n * 初始化拖拽功能\n */\nconst initDrag = (el: HTMLElement, collapseMenu: boolean = false) => {\n /** Vue3 dialog - 支持 appendToBody 的情况 */\n let dragDom = el.querySelector('.el-dialog') as HTMLElement;\n if (!dragDom) dragDom = document.querySelector('.el-dialog') as HTMLElement;\n\n if (!dragDom) {\n console.warn('gv-drag-dialog: 未找到 dialog 元素');\n return false;\n }\n\n /** Vue3 dialog header - 支持自定义 header 和默认 header */\n let dialogHeaderEl: HTMLElement | null = null;\n dialogHeaderEl = dragDom.querySelector('.el-dialog__header') as HTMLElement;\n if (!dialogHeaderEl) dialogHeaderEl = dragDom.querySelector('.gv-dialog__title') as HTMLElement;\n\n if (!dialogHeaderEl) {\n console.warn('gv-drag-dialog: 未找到 dialog header 元素');\n return false;\n }\n\n /** 避免重复绑定 */\n if (boundElements.has(dialogHeaderEl)) return true;\n boundElements.add(dialogHeaderEl);\n\n /** 鼠标移动样式 */\n dialogHeaderEl.style.cursor = 'move';\n /** 初始化顶部 */\n dragDom.style.top = '0px';\n /** 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null) */\n const getStyle = (function () {\n if ((window.document as any).currentStyle) return (dom: HTMLElement, attr: string) => (dom as any).currentStyle[attr];\n else return (dom: HTMLElement, attr: string) => getComputedStyle(dom, null)[attr as any];\n })();\n\n dialogHeaderEl.onmousedown = (e: MouseEvent) => {\n /** 鼠标按下,计算当前元素距离可视区的距离 */\n const disX = e.clientX - dialogHeaderEl!.offsetLeft;\n const disY = e.clientY - dialogHeaderEl!.offsetTop;\n\n const dragDomWidth = dragDom.offsetWidth;\n const dragDomHeight = dragDom.offsetHeight;\n\n const screenWidth = document.body.clientWidth;\n const screenHeight = document.body.clientHeight;\n\n /** 左侧边界 */\n const minDragDomLeft = dragDom.offsetLeft;\n /** 右侧边界 */\n const menuWidth = collapseMenu ? 54 : 200;\n const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth - menuWidth;\n\n /** 上边界 */\n const minDragDomTop = dragDom.offsetTop;\n /** 下边界 */\n // 45: toolbar height;34: tags view height\n const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomHeight - 45 - 34;\n\n /** 获取到的值带px 正则匹配替换 */\n let styL: string | number = getStyle(dragDom, 'left');\n let styT: string | number = getStyle(dragDom, 'top');\n\n /** 百分比转像素 */\n if (typeof styL === 'string' && styL.includes('%')) {\n styL = document.body.clientWidth * (+styL.replace(/%/g, '') / 100);\n styT = document.body.clientHeight * (+String(styT).replace(/%/g, '') / 100);\n } else {\n styL = +String(styL).replace(/\\px/g, '');\n styT = +String(styT).replace(/\\px/g, '');\n }\n\n /** 鼠标移动 */\n const onMouseMove = (ev: MouseEvent) => {\n /** 通过事件委托,计算移动的距离 */\n let left = ev.clientX - disX;\n let top = ev.clientY - disY;\n\n /** 边界处理 */\n if (-left > minDragDomLeft) left = -minDragDomLeft;\n else if (left > maxDragDomLeft) left = maxDragDomLeft;\n\n if (-top > minDragDomTop) top = -minDragDomTop;\n else if (top > maxDragDomTop) top = maxDragDomTop;\n\n /** 移动当前元素 */\n dragDom.style.left = `${left + Number(styL)}px`;\n dragDom.style.top = `${top + Number(styT)}px`;\n };\n\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n };\n\n return true;\n};\n\nconst dragDialog: Directive = {\n /**\n * @title 挂载时调用\n * @param el 指令绑定的元素\n * @param binding 指令绑定的参数\n * @description Vue3 中需要使用 nextTick 等待 DOM 渲染完成,并通过 querySelector 查找 ElDialog 内部元素\n */\n // mounted(el: HTMLElement, binding: DirectiveBinding, vnode: VNode) {\n // // 使用 setTimeout 确保 ElDialog 已经渲染完成\n // setTimeout(() => {\n // // 尝试初始化,如果 dialog 还没打开,会在 opened 事件中再次尝试\n // initDrag(el);\n // }, 200);\n // },\n};\nexport default dragDialog;\nexport { initDrag };\n","<!--\n * @title: dialog component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-09 09:57:32\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 14:28:40\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText, sleep } from '@@/utils';\n import { ElDialog } from 'element-plus';\n import { defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, ref, watch, type VNode } from 'vue';\n import { initDrag } from './drag';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('dialog');\n\n export default defineComponent({\n name: 'GvDialog',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: false,\n },\n title: {\n type: String,\n required: false,\n default: '标题',\n },\n hasFooter: {\n type: Boolean,\n required: false,\n default: true,\n },\n width: {\n type: String,\n required: false,\n default: '75%',\n },\n height: {\n type: String,\n required: false,\n default: undefined,\n },\n nest: {\n type: Boolean,\n required: false,\n default: false,\n },\n appendToBody: {\n type: Boolean,\n required: false,\n default: false,\n },\n fullscreen: {\n type: Boolean,\n required: false,\n default: false,\n },\n maxHeight: {\n type: String,\n required: false,\n default: undefined,\n },\n closeOnClickModal: {\n type: Boolean,\n required: false,\n default: false,\n },\n closeOnPressEscape: {\n type: Boolean,\n required: false,\n default: true,\n },\n dialogClass: {\n type: String,\n required: false,\n default: undefined,\n },\n },\n emits: ['open', 'opened', 'close', 'closed', 'cancel', 'update:visible'],\n\n setup(props, { slots, emit }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n const buttonQuick = appStore.buttonQuick;\n const collapseMenus = appStore.collapseMenus;\n const instance = getCurrentInstance();\n\n let myDialogClass = props.dialogClass || prefixCls;\n let dialogVisible = props.visible;\n const maskVisible = ref(false);\n const vref = 'gv-dialog';\n const dialogMaxHeight = ref(props.height);\n let sAppendToBody = props.appendToBody;\n const modalAppendToBody = ref(false);\n let sNest = props.nest;\n let modalMask = props.nest;\n\n // @watch\n watch(\n () => props.visible,\n (newValue) => {\n // fixme: watch中跟踪visible,解决如将ht-dialog在一个vue组件中,如不设置,则第二次无法显示\n dialogVisible = newValue;\n if (dialogVisible)\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n },\n );\n\n // @method\n const handleVisible = () => {\n dialogVisible = true;\n };\n const handleOpen = () => {\n emit('open');\n };\n const handleOpened = () => {\n emit('opened');\n nextTick(() => {\n initDrag(instance?.vnode?.el as HTMLElement, collapseMenus);\n });\n };\n const handleClose = () => {\n dialogVisible = false;\n maskVisible.value = false;\n // 延迟异步触发\n // sleep(500).then(() => {\n // this.$emit('update:visible', false);\n // });\n emit('close');\n };\n const handleClosed = () => {\n emit('update:visible', false);\n };\n\n const handleCancel = (event) => {\n dialogVisible = false;\n maskVisible.value = false;\n emit('cancel', event);\n };\n /**\n * @todo: render footer button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 11:19:11\n */\n const renderFooterBtn = () => {\n const footer = slots.footer?.();\n footer?.forEach((x) => {\n const tag = typeof x.type === 'object' && x.type !== null ? (x.type as any).name || '' : '';\n const text = getVNodeText(x.children?.[0]) || '';\n // add: 增加text属性,判断权限使用 2023-04-18\n if (!x.props) x.props = {};\n const propsData = x.props;\n propsData.text = text;\n if (tag)\n if (text.indexOf(t('dialogBar.save')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick) if (text === t('dialogBar.save')) propsData.text = t('dialogBar.save2');\n propsData.otext = t('dialogBar.save');\n } else if (text.indexOf(t('dialogBar.add')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick)\n if (text === t('dialogBar.add')) {\n propsData.text = t('dialogBar.add2');\n propsData.otext = t('dialogBar.add');\n }\n } else if (text.indexOf(t('dialogBar.confirm')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.confirm')) {\n propsData.text = t('dialogBar.confirm2');\n propsData.otext = t('dialogBar.confirm');\n }\n } else if (text.indexOf(t('dialogBar.affirm')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.affirm')) {\n propsData.text = t('dialogBar.affirm2');\n propsData.otext = t('dialogBar.affirm');\n }\n } else if (text.indexOf(t('dialogBar.approve')) !== -1) {\n propsData.bizType = 'approve';\n propsData.icon = 'gv-icon-shenpi1';\n } else if (text.indexOf(t('dialogBar.download')) !== -1) {\n // if (text === t('dialogBar.download')) x.children[0].text = t('dialogBar.download2');\n propsData.bizType = 'download';\n propsData.icon = 'gv-icon-xiazai';\n } else if (text.indexOf(t('dialogBar.delete')) !== -1) {\n propsData.bizType = 'delete';\n propsData.icon = 'el-icon-delete';\n } else if (text.indexOf(t('dialogBar.reject')) !== -1) {\n propsData.bizType = 'reject';\n propsData.icon = 'gv-icon-bohui2';\n } else if (text.indexOf(t('dialogBar.export')) !== -1) {\n propsData.bizType = 'export';\n propsData.icon = 'gv-icon-daochu1';\n } else if (text.indexOf(t('dialogBar.generate')) !== -1) {\n propsData.bizType = 'generate';\n propsData.icon = 'gv-icon-zujian';\n } else if (text.indexOf(t('dialogBar.trace')) !== -1) {\n propsData.bizType = 'trace';\n propsData.icon = 'gv-icon-jiankongguanli';\n } else if (text.indexOf(t('dialogBar.receive')) !== -1) {\n propsData.bizType = 'receive';\n propsData.icon = 'gv-icon-piliangbianji1';\n } else if (text.indexOf(t('dialogBar.transfer')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-tiaobo';\n } else if (text.indexOf(t('dialogBar.circleCheck')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-huanjiance';\n } else if (text.indexOf(t('dialogBar.completed')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-xuanze';\n } else if (text.indexOf(t('dialogBar.finished')) !== -1 || text.indexOf(t('dialogBar.beCompleted')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-wangongqueren';\n } else if (text.indexOf(t('dialogBar.submit')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-tijiao';\n if (buttonQuick)\n if (text === t('dialogBar.submit')) {\n propsData.text = t('dialogBar.submit2');\n propsData.otext = t('dialogBar.submit');\n }\n }\n });\n return footer;\n };\n\n /**\n * @todo: footer render\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 10:34:41\n */\n const getFooter = () => {\n if (props.hasFooter)\n if (slots.footer?.())\n return (\n <div>\n {renderFooterBtn()}\n <GvButton\n onClick={handleCancel}\n icon=\"iconfont gv-icon-fanhui2\">\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n // <el-button type='primary' onClick={this.handleConfirm}>确 定(S)</el-button>\n else\n return (\n <div>\n <GvButton\n onClick={handleCancel}\n icon=\"iconfont gv-icon-fanhui2\">\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n };\n\n /**\n * @todo: mask\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 10:38:59\n */\n const setMask = () => {\n let mask: VNode | null = null;\n if (maskVisible.value)\n mask = (\n <div\n class=\"v-modal gv-dialog-modal z-[9]\"\n tabindex=\"0\"></div>\n );\n return mask;\n };\n\n const getMaxHeight = () => {\n if (!props.height) dialogMaxHeight.value = document.documentElement.clientHeight - 230 + 'px';\n else if (props.height.indexOf('%') === -1) dialogMaxHeight.value = parseFloat(props.height) - 180 + 'px';\n else dialogMaxHeight.value = props.height; // 百分比方式\n };\n\n // @created\n // fixme: 解决嵌套弹窗问题 2022-08-08\n const pEl = instance?.parent?.parent?.vnode.el;\n if (pEl)\n try {\n const p = pEl.closest('.gv-drawer,.gv-dialog');\n if (p) sNest = true;\n } catch {\n // error\n }\n if (sNest) {\n myDialogClass = props.dialogClass ? 'gv-dialog is-nested ' + props.dialogClass : 'gv-dialog is-nested';\n sAppendToBody = true;\n modalAppendToBody.value = true;\n modalMask = true;\n } else modalMask = false;\n\n onBeforeUnmount(() => {\n window.removeEventListener('resize', getMaxHeight);\n });\n\n // mounted\n onMounted(() => {\n // fixme: v-show属性使用单独的变量,在挂载时再显示,如在data中直接定义为true,会造成抖动 2022-04-11\n if (dialogVisible) maskVisible.value = true;\n\n nextTick(() => {\n window.addEventListener('resize', getMaxHeight);\n // 计算高度\n getMaxHeight();\n });\n });\n\n // @render\n return () => (\n <div class=\"gv-dialog__popup\">\n <ElDialog\n ref={vref}\n // route={this.route}\n modelValue={dialogVisible}\n onUpdate:modelValue={handleVisible}\n appendToBody={sAppendToBody}\n modal-append-to-body={modalAppendToBody.value}\n close-on-click-modal={props.closeOnClickModal}\n close-on-press-escape={props.closeOnPressEscape}\n showClose={true}\n destroy-on-close={true}\n fullscreen={props.fullscreen}\n modal={modalMask}\n // before-close={this.handleBeforeClose}\n onClose={handleClose}\n onClosed={handleClosed}\n onOpen={handleOpen}\n onOpened={handleOpened}\n class={myDialogClass}\n width={props.width}\n style={{ height: `${props.height}` }}>\n {{\n header: () => (\n <div class=\"gv-dialog__title\">\n <span>\n <GvIcon\n iconType=\"iconfont\"\n iconName=\"gv-icon-chuangkou01\"\n />\n {props.title}\n </span>\n </div>\n ),\n default: () => (\n <div\n class=\"gv-dialog__body__inner\"\n style={{ maxHeight: `${dialogMaxHeight.value} !important` }}>\n {slots.default?.()}\n </div>\n ),\n footer: () => <div class=\"dialog-footer\">{getFooter()}</div>,\n }}\n </ElDialog>\n {setMask()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-dialog__popup {\n :deep(.el-modal-dialog) {\n position: absolute !important;\n &.is-nested {\n top: 100px;\n left: 14%;\n }\n .el-overlay-dialog {\n position: absolute !important;\n overflow: hidden;\n .el-dialog {\n max-height: 93.5% !important;\n margin-top: 25px !important;\n padding: 0px;\n\n .el-dialog__header {\n box-sizing: border-box;\n height: 30px;\n padding: 0 15px;\n line-height: 30px;\n background-color: #e1e5ec !important;\n border-bottom: 1px solid $borderColor;\n\n .gv-dialog__title {\n font-size: $appTextSize;\n line-height: inherit;\n\n & i {\n padding-right: 10px;\n font-size: $textSize;\n font-weight: bolder;\n }\n }\n\n .el-dialog__headerbtn {\n width: 16px;\n height: 25px;\n top: 2px;\n right: 12px;\n font-size: 20px;\n font-weight: bolder;\n line-height: normal;\n\n &:hover .el-dialog__close {\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-dialog__close {\n font-size: 16px;\n font-weight: bolder;\n }\n }\n }\n\n .el-dialog__body {\n padding: 5px 5px 5px 15px;\n overflow: hidden;\n\n .gv-dialog__body__inner {\n padding-right: 15px;\n overflow: hidden auto;\n }\n\n .fullscreen-btn {\n position: absolute;\n top: 16px;\n right: 42px;\n padding: 5px;\n line-height: 1;\n cursor: pointer;\n\n &:hover {\n color: $primaryColor;\n }\n }\n\n .container {\n padding: 0 15px;\n }\n }\n\n .el-dialog__footer {\n .gv-popconfirm {\n padding: 1px 0 1px 8px;\n }\n\n .el-button i + span {\n margin-left: 5px;\n }\n\n padding: 5px 15px;\n border-top: 1px solid $borderColor;\n }\n }\n }\n }\n }\n\n .gv-tabs {\n .gv-dialog {\n top: -10px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDialog from './src/GvDialog.vue';\nconst GvDialogPlugin = {\n install(app: App): void {\n app.component(GvDialog.name ?? 'GvDialog', GvDialog);\n },\n};\nexport default GvDialogPlugin;\n\nexport { GvDialog };\n","<!--\n * @title: divider component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 17:24:57\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 10:33:43\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElDivider } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n import type { DividerDirection } from './types';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('divider');\n\n export default defineComponent({\n name: 'GvDivider',\n emits: ['setDividerShow'],\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n label: {\n type: String,\n required: true,\n default: '栏目',\n },\n position: {\n type: String,\n required: false,\n default: 'left',\n },\n direction: {\n type: String as PropType<DividerDirection>,\n required: false,\n default: 'horizontal',\n },\n target: {\n type: String,\n required: false,\n default: undefined,\n },\n },\n\n setup(props, { emit }) {\n /**\n * @todo: click divider — toggle form visibility via parent isShow\n */\n const clickDivider = (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n emit('setDividerShow', !props.visible);\n };\n\n return () => (\n <div\n class={prefixCls}\n onClick={(event) => clickDivider(event)}>\n <ElDivider\n content-position={props.position}\n direction={props.direction}>\n <span class=\"title\">{props.label}</span>\n </ElDivider>\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-divider';\n .#{$prefixCls} {\n width: 100%;\n height: 20px;\n margin-top: 5px;\n overflow: hidden;\n user-select: none;\n\n // 禁止选中文本\n &:hover {\n cursor: pointer;\n }\n :deep(.el-divider--horizontal) {\n margin: 8px 0;\n .el-divider__text {\n padding: 0 $modulePadding;\n &.is-left {\n left: -$moduleMargin;\n }\n .title {\n display: inline-block;\n height: 20px;\n font-size: $textSizeSecondary;\n font-weight: $fontWeight;\n line-height: 20px;\n color: $textColor;\n\n &::before {\n display: inline-block;\n width: 5px;\n height: 100%;\n margin-right: 8px;\n vertical-align: middle;\n content: '';\n background-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDivider from './src/GvDivider.vue';\nconst GvDividerPlugin = {\n install(app: App): void {\n app.component(GvDivider.name ?? 'GvDivider', GvDivider);\n },\n};\nexport default GvDividerPlugin;\n\nexport { GvDivider };\n","<!--\n * @title: drawer component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-09 09:58:21\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 14:20:15\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText, sleep } from '@@/utils';\n import { ElDrawer } from 'element-plus';\n import { defineComponent, nextTick, onMounted, ref, watch, type PropType, type VNode } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('drawer');\n\n export default defineComponent({\n name: 'GvDrawer',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: false,\n },\n title: {\n type: String,\n required: false,\n default: '标题',\n },\n direction: {\n type: String as PropType<'rtl' | 'ltr' | 'ttb' | 'btt'>,\n required: false,\n default: 'rtl',\n },\n size: {\n type: [String, Number],\n required: false,\n default: '95%', // 95%\n },\n paddingHeight: {\n type: [Number],\n required: false,\n default: 100, // 100\n },\n },\n emits: ['cancel', 'update:visible'],\n\n setup(props, { slots, emit }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n\n let drawerVisible = props.visible;\n const maskVisible = ref(false);\n const vref = 'gv-drawer';\n const drawerMaxHeight = ref(0);\n const show = ref(false);\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const sPaddingHeight = appStore.drawerPaddingHeight ? appStore.drawerPaddingHeight : props.paddingHeight;\n\n // @watch\n watch(\n () => props.visible,\n (newVal) => {\n // fixme: watch中跟踪visible,解决如将ht-drawer在一个vue组件中,如不设置,则第二次无法显示\n drawerVisible = newVal;\n if (drawerVisible)\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n },\n );\n\n // @method\n\n const handleOpen = () => {\n // this.maskVisible = true;\n // this.$emit('opened');\n };\n\n const handleClosed = () => {\n emit('update:visible', false);\n };\n\n const handleCancel = (event: Event) => {\n drawerVisible = false;\n maskVisible.value = false;\n emit('cancel', event);\n };\n\n const handleVisible = () => {\n drawerVisible = true;\n };\n\n const handleClose = () => {\n drawerVisible = false;\n maskVisible.value = false;\n // 延迟异步触发\n // sleep(500).then(() => {\n // this.$emit('update:visible', false);\n // });\n // this.$emit('close', event);\n };\n\n /**\n * @todo: set footer button shortcut\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 15:25:50\n */\n const renderFooterBtn = () => {\n const footer = slots.footer?.();\n footer?.forEach((x) => {\n const tag = typeof x.type === 'object' && x.type !== null ? (x.type as any).name || '' : '';\n const text = getVNodeText(x) || '';\n if (!x.props) x.props = {};\n const propsData = x.props;\n propsData.text = text;\n if (tag)\n if (text.indexOf(t('dialogBar.save')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick)\n if (text === t('dialogBar.save')) {\n propsData.text = t('dialogBar.save2');\n propsData.otext = t('dialogBar.save');\n }\n } else if (text.indexOf(t('dialogBar.confirm')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.confirm')) {\n propsData['otext'] = t('dialogBar.confirm');\n propsData.text = t('dialogBar.confirm2');\n }\n } else if (text.indexOf(t('dialogBar.affirm')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.affirm')) {\n propsData.text = t('dialogBar.affirm2');\n propsData.otext = t('dialogBar.confirm');\n }\n } else if (text.indexOf(t('dialogBar.approve')) !== -1) {\n propsData.bizType = 'approve';\n if (buttonIcon) propsData.icon = 'gv-icon-shenpi1';\n } else if (text.indexOf(t('dialogBar.reject')) !== -1) {\n propsData.bizType = 'reject';\n if (buttonIcon) propsData.icon = 'gv-icon-bohui2';\n } else if (text.indexOf(t('dialogBar.pay')) !== -1) {\n propsData.bizType = 'pay';\n if (buttonIcon) propsData.icon = 'gv-icon-yingshoukuan';\n } else if (text.indexOf(t('dialogBar.receive')) !== -1) {\n propsData.bizType = 'receive';\n if (buttonIcon) propsData.icon = 'gv-icon-piliangbianji1';\n } else if (text.indexOf(t('dialogBar.export')) !== -1) {\n propsData.bizType = 'export';\n if (buttonIcon) propsData.icon = 'gv-icon-daochu1';\n } else if (text.indexOf(t('dialogBar.generate')) !== -1) {\n propsData.bizType = 'generate';\n if (buttonIcon) propsData.icon = 'gv-icon-zujian';\n } else if (text.indexOf(t('dialogBar.trace')) !== -1) {\n propsData.bizType = 'trace';\n if (buttonIcon) propsData.icon = 'gv-icon-jiankongguanli';\n } else if (text.indexOf(t('dialogBar.publish')) !== -1) {\n propsData.bizType = 'publish';\n if (buttonIcon) propsData.icon = 'gv-icon-fabu';\n } else if (text.indexOf(t('dialogBar.transfer')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-tiaobo';\n } else if (text.indexOf(t('dialogBar.download')) !== -1) {\n propsData.bizType = 'download';\n // if (text === t('dialogBar.download')) children[0].text = '下 载';\n if (buttonIcon) propsData.icon = 'gv-icon-xiazai';\n } else if (text.indexOf(t('dialogBar.delete')) !== -1 || text.indexOf(t('dialogBar.obsolete')) !== -1) {\n propsData.bizType = 'delete';\n if (buttonIcon) propsData.icon = 'el-icon-delete';\n if (buttonQuick) {\n if (text === t('dialogBar.obsolete')) {\n propsData.text = t('dialogBar.obsolete2');\n propsData.otext = t('dialogBar.obsolete');\n }\n if (text === t('dialogBar.delete')) {\n propsData.text = t('dialogBar.delete2');\n propsData.otext = t('dialogBar.delete');\n }\n }\n } else if (text.indexOf(t('dialogBar.submit')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-tijiao';\n if (buttonQuick)\n if (text === t('dialogBar.submit')) {\n propsData.text = t('dialogBar.submit2');\n propsData.otext = t('dialogBar.submit');\n }\n propsData['otext'] = t('dialogBar.submit');\n } else if (text.indexOf(t('dialogBar.circleCheck')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-huanjiance';\n } else if (text.indexOf(t('dialogBar.completed')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-xuanze';\n } else if (text.indexOf(t('dialogBar.settlement')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-eduguanli';\n } else if (text.indexOf(t('dialogBar.finished')) !== -1 || text.indexOf(t('dialogBar.beCompleted')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-wangongqueren';\n }\n });\n\n return footer;\n };\n\n /**\n * @todo: get footer button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 15:38:54\n */\n const getFooter = () => {\n let returnIcon: string | undefined = 'iconfont gv-icon-fanhui2';\n if (!buttonIcon) returnIcon = undefined;\n if (slots.footer?.())\n return (\n <div class=\"gv-drawer__footer__inner\">\n {renderFooterBtn()}\n <GvButton\n onClick={handleCancel}\n icon={returnIcon}>\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n // <el-button type='primary' onClick={this.handleConfirm}>确 定(S)</el-button>\n else\n return (\n <div class=\"gv-drawer__footer__inner\">\n <GvButton\n onClick={handleCancel}\n icon={returnIcon}>\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n };\n const getMaxHeight = () => {\n drawerMaxHeight.value = document.documentElement.clientHeight - 215;\n };\n\n const setMask = () => {\n let mask: VNode | null = null;\n if (maskVisible.value)\n mask = (\n <div\n tabindex=\"0\"\n class=\"v-modal gv-dialog-drawer z-[9]\"></div>\n );\n return mask;\n };\n // @created\n\n // @mounted\n onMounted(() => {\n // 实现esc按键绑定\n // this.bindListerOnEsc();\n // fixme: v-show属性使用单独的变量,在挂载时再显示,如在data中直接定义为true,会造成抖动 2022-04-11\n if (drawerVisible) {\n show.value = true;\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n }\n getMaxHeight();\n nextTick(() => {});\n });\n // @render\n return () => (\n <div class=\"gv-drawer__popup\">\n <ElDrawer\n class={prefixCls}\n ref={vref}\n modelValue={drawerVisible}\n onUpdate:modelValue={handleVisible}\n direction={props.direction}\n appendToBody={false}\n modal-append-to-body={false}\n close-on-press-escape={true}\n showClose={true}\n close-on-click-modal={false}\n modal={false}\n onClose={handleClose}\n onClosed={handleClosed}\n onOpen={handleOpen}\n size={props.size}\n style={{ height: `calc(100vh - ${sPaddingHeight}px)` }}>\n {{\n header: () => (\n <div class=\"gv-drawer__title\">\n <span>\n <GvIcon\n style={{ display: buttonIcon ? '' : 'none' }}\n iconType=\"iconfont\"\n iconName=\"gv-icon-chuangkou01\"></GvIcon>\n {props.title}\n </span>\n </div>\n ),\n default: () => (\n <div>\n <div\n class=\"gv-drawer__body__inner\"\n style={{ maxHeight: `${drawerMaxHeight.value}px !important` }}>\n {slots.default?.()}\n </div>\n </div>\n ),\n footer: () => <div class=\"gv-drawer__footer\">{getFooter()}</div>,\n }}\n </ElDrawer>\n {setMask()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-drawer__popup {\n :deep(.el-modal-drawer) {\n position: absolute !important;\n top: 1px !important;\n height: calc(100vh - 100px) !important;\n .el-drawer {\n // width: 95% !important;\n height: 98% !important;\n margin-top: 1px !important;\n\n .el-drawer__header {\n box-sizing: border-box;\n height: 30px;\n padding: 0 15px;\n margin-bottom: 1px;\n line-height: 30px;\n background-color: #e1e5ec !important;\n border-bottom: 1px solid $borderColor;\n\n .gv-drawer__title {\n font-size: $appTextSize;\n line-height: inherit;\n\n & i {\n padding-right: 10px;\n font-size: $textSize;\n font-weight: bolder;\n }\n }\n\n .el-drawer__close-btn {\n top: 10px;\n right: 12px;\n line-height: normal;\n\n i {\n font-size: 16px;\n font-weight: bolder;\n }\n\n &:hover i {\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-drawer__close {\n font-weight: bolder;\n }\n }\n }\n\n .el-drawer__body {\n padding: 5px 15px;\n overflow: hidden;\n\n .gv-drawer__body__inner {\n overflow: hidden auto;\n }\n\n .fullscreen-btn {\n position: absolute;\n top: 16px;\n right: 42px;\n padding: 5px;\n line-height: 1;\n cursor: pointer;\n\n &:hover {\n color: $primaryColor;\n }\n }\n\n .container {\n padding: 0 15px;\n }\n }\n\n .gv-drawer__footer {\n .gv-drawer__footer__inner {\n float: right;\n padding: 5px;\n\n .el-button i + span {\n margin-left: 5px;\n }\n }\n\n .gv-popconfirm {\n padding: 1px 0 1px 8px;\n }\n\n .el-button--default {\n margin-left: 8px;\n }\n\n width: 100%;\n border-top: 1px solid $borderColor;\n }\n }\n }\n }\n .gv-tabs {\n .gv-drawer {\n top: 10px;\n height: 93% !important;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDrawer from './src/GvDrawer.vue';\nconst GvDrawerPlugin = {\n install(app: App): void {\n app.component(GvDrawer.name ?? 'GvDrawer', GvDrawer);\n },\n};\nexport default GvDrawerPlugin;\n\nexport { GvDrawer };\n","import { type VueTypeValidableDef, type VueTypesInterface, createTypes, toValidableType } from 'vue-types';\nimport type { CSSProperties } from 'vue';\n\ntype PropTypes = VueTypesInterface & {\n readonly style: VueTypeValidableDef<CSSProperties>;\n};\nconst newPropTypes = createTypes({\n func: undefined,\n bool: undefined,\n string: undefined,\n number: undefined,\n object: undefined,\n integer: undefined,\n}) as PropTypes;\n\nclass propTypes extends newPropTypes {\n static get style(): VueTypeValidableDef<CSSProperties> {\n return toValidableType('style', {\n type: [String, Object],\n });\n }\n}\n\nexport { propTypes };\n","/*\n * @title: pinyin-pro 汉字转拼音组件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-10-10 11:21:59\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-10-10 11:22:02\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { pinyin } from 'pinyin-pro';\n/**\n * usePinyin 组合式函数\n * 提供常见的中文转拼音功能\n */\nexport function usePinyin() {\n /**\n * 中文转拼音(默认无音调、空格分隔)\n * @param text 中文字符串\n * @param withTone 是否带音调(默认 false)\n */\n const toPinyin = (text: string, withTone = false): string => {\n if (!text) return '';\n return pinyin(text, {\n toneType: withTone ? 'symbol' : 'none',\n type: 'string',\n multiple: false,\n });\n };\n\n /**\n * 获取拼音首字母\n * @param text 中文字符串\n */\n const getFirstLetter = (text: string): string => {\n if (!text) return '';\n return pinyin(text, {\n pattern: 'first',\n toneType: 'none',\n type: 'string',\n }).replace(/\\s+/g, '');\n };\n\n /**\n * 获取拼音数组(按字分隔)\n * @param text 中文字符串\n */\n const getPinyinArray = (text: string): string[] => {\n if (!text) return [];\n return pinyin(text, {\n toneType: 'none',\n type: 'array',\n });\n };\n\n return {\n toPinyin,\n getFirstLetter,\n getPinyinArray,\n };\n}\n","<!--\n * @title: expand menu list\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-04 12:37:50\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-04-27 10:24:25\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { usePermsStore } from '@/store/modules/perms';\n import { usePinyin } from '@@/hooks/web/usePinyin';\n import { isExternal, pathResolve, sleep } from '@@/utils';\n import { Search, Star, StarFilled } from '@element-plus/icons-vue';\n import { ElAutocomplete, ElIcon, ElTabPane, ElTabs } from 'element-plus';\n import { computed, onMounted, ref } from 'vue';\n import { useI18n } from 'vue-i18n';\n import type { RouteType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('expand-menu-list');\n\n defineOptions({\n name: 'GvMenuList', // 定义组件名称\n });\n const { t } = useI18n();\n const permStore = usePermsStore();\n const pinYin = usePinyin();\n const routes = computed(() => permStore.getServerRouters);\n\n const emit = defineEmits(['close']);\n\n const menuList = ref<RouteType[]>();\n const menuPath = ref('');\n\n const fMenusList = ref<AppRouteRecordRaw[]>([]);\n\n // ------ watch hook------\n // watchEffect();\n // // [routes, menusList],\n // // [\n // // (n, o) => {\n // // this.menusList = this.generateRoutes(this.routes.value);\n // // },\n // // (list) => {\n // // // 转换拼音\n // // if (this.supportPinyinSearch) this.addPinyinField(list);\n // // },\n // // ],\n\n // ------ methods hook ------\n /**\n * @todo: generate routes\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-15 10:46:56\n * @param {*} sidebarRoutes\n * @param {*} basePath\n * @param {*} prefixTitle\n * @param {*} prefixCode\n */\n\n const generateRouter = (serverRoutes: AppRouteRecordRaw[], basePath = '/', prefixTitle: string[] = [], prefixCode: string[] = []): RouteType[] => {\n let res: RouteType[] = [];\n for (const router of serverRoutes) {\n if (router.redirect === '/404') continue;\n if (router.meta?.hidden) continue;\n const data: RouteType = {\n path: pathResolve(basePath, router.path),\n title: [...(prefixTitle as string[])],\n pinyinTitle: pinYin.getFirstLetter([...(prefixTitle as string[])].join('')),\n code: [...prefixCode],\n };\n if (router.meta && router.meta.title) {\n const i18ntitle = router.meta.title;\n const code = router.meta.code || '';\n data.title = [...data.title, i18ntitle];\n data.pinyinTitle = pinYin.getFirstLetter(data.title.join(''));\n data.code = [...data.code, String(code)];\n if (router.redirect !== 'noredirect') res.push(data);\n else if (basePath === '/') fMenusList.value.push(router);\n }\n if (router.children) {\n const tempRoutes = generateRouter(router.children, data.path, data.title);\n if (tempRoutes.length >= 1) res = [...res, ...tempRoutes];\n }\n }\n return res;\n };\n\n const handleCloseDrawer = () => {\n emit('close');\n };\n\n /**\n * @todo: click menu item handle\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-03-09 10:56:00\n * @param {*} item\n */\n const handleSelect = (item: RouteType) => {\n // push({ path: item.path });\n // handleCloseDrawer();\n sleep(200).then(() => {\n menuPath.value = '';\n });\n };\n\n const handleSearch = (query: string, cb: any) => {\n let res: RouteType[] = [];\n if (query !== '')\n if (Array.isArray(menuList.value))\n res = menuList.value.filter((item) => {\n if (item.title.join('').indexOf(query) !== -1) return item;\n else if (item.pinyinTitle.indexOf(query.toLowerCase()) !== -1) return item;\n else if (item.path.indexOf(query) !== -1) return item;\n });\n else res = menuList.value ?? [];\n else res = menuList.value ?? [];\n cb(res);\n };\n\n /**\n * @todo: star click handle\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-10-11 10:20:33\n * @param {*} star\n * @param {*} path\n * @param {*} title\n * @param {*} menuItem\n */\n const starClickHandle = (star, path, title, menuItem) => {};\n\n // ------ mounted hook ------\n onMounted(() => {\n menuList.value = generateRouter(routes.value);\n // console.log('routes', permStore.getServerRouters);\n // console.log('menuList', menuList.value);\n });\n</script>\n<template>\n <div :class=\"prefixCls\">\n <!-- search -->\n <div class=\"search\">\n <div class=\"top\">\n <ElAutocomplete\n v-model=\"menuPath\"\n value-key=\"path\"\n :fetch-suggestions=\"handleSearch\"\n :placeholder=\"t('sideBar.menuSearch')\"\n @select=\"handleSelect\">\n <template #prefix>\n <ElIcon>\n <Search />\n </ElIcon>\n </template>\n <template v-slot=\"{ item }\">\n <span class=\"name\">{{ item.title.join(' > ') }}</span>\n </template>\n </ElAutocomplete>\n </div>\n </div>\n <!-- main -->\n <div class=\"main\">\n <ElTabs tab-position=\"right\">\n <ElTabPane\n v-for=\"item in fMenusList\"\n :key=\"item.name\"\n :label=\"item.meta?.title\"\n lazy>\n <div class=\"column-wrap\">\n <div\n v-for=\"sub in item.children\"\n :key=\"sub.name\"\n class=\"box\">\n <template v-if=\"!sub.children || sub.children.length === 0\">\n <ul class=\"leaf\">\n <li>\n <ElIcon @click.stop=\"starClickHandle(sub.meta?.star, sub.path, sub.meta?.title, sub)\">\n <component :is=\"sub.meta?.star ? StarFilled : Star\" />\n </ElIcon>\n <router-link\n v-if=\"!isExternal(sub.path)\"\n :to=\"`${item.path}/${sub.path}`\"\n @click=\"handleCloseDrawer\">\n {{ sub.meta?.title }}\n </router-link>\n <a\n v-else\n :href=\"sub.path\"\n target=\"_blank\"\n rel=\"noopener\">\n {{ sub.meta?.title }}</a\n >\n </li>\n </ul>\n </template>\n <template v-else>\n <h4>{{ sub.meta?.title }}</h4>\n <ul>\n <li\n v-for=\"x in sub.children\"\n :key=\"x.name\">\n <ElIcon @click.stop=\"starClickHandle(x.meta?.star, x.name, x.meta?.title, x)\">\n <component :is=\"x.meta?.star ? StarFilled : Star\" />\n </ElIcon>\n <router-link\n v-if=\"!isExternal(sub.path)\"\n :to=\"`${item.path}/${sub.path}/${x.path}`\"\n @click=\"handleCloseDrawer\">\n {{ x.meta?.title }}\n </router-link>\n <a\n v-else\n :href=\"sub.path\"\n target=\"_blank\"\n rel=\"noopener\">\n {{ x.meta?.title }}</a\n >\n </li>\n </ul>\n </template>\n </div>\n </div>\n </ElTabPane>\n </ElTabs>\n </div>\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-expand-menu-list';\n .#{$prefixCls} {\n position: absolute;\n width: 650px;\n height: 100%;\n left: 0px;\n background: #272b2c;\n &::after {\n top: 0;\n right: 0;\n width: 150px;\n height: 100%;\n content: '';\n background: #272b2c;\n }\n :deep(.search) {\n height: 100px;\n width: 500px;\n background: #313538;\n .top {\n padding: 30px 0 0 100px;\n i {\n color: var(--left-menu-text-color);\n }\n .el-autocomplete {\n width: 300px;\n border-bottom: 1px solid #626466;\n border-radius: 0;\n .el-input {\n .el-input__wrapper {\n background: var(--left-menu-expand-bg-color);\n box-shadow: none;\n padding-left: 30px;\n .el-input__inner {\n font-size: $appTextSize;\n color: #fff;\n border: none;\n line-height: 40px;\n height: 40px;\n }\n }\n }\n }\n }\n }\n :deep(.main) {\n position: relative;\n height: calc(100% - 100px);\n .el-tabs {\n height: 100%;\n overflow-y: auto;\n &::-webkit-scrollbar {\n display: none;\n }\n .el-tabs__header {\n position: absolute;\n top: 0;\n right: 0;\n .el-tabs__nav-wrap {\n padding: 0;\n .el-tabs__nav-scroll {\n overflow-y: auto;\n .el-tabs__nav {\n padding-bottom: $modulePadding;\n }\n }\n .el-tabs__item {\n height: 30px;\n padding: 0 0 0 15px;\n font-size: $textSize;\n line-height: 30px;\n color: $menuText;\n &.is-active {\n font-weight: 500;\n color: #fff;\n }\n }\n &.is-right {\n width: 151px;\n }\n &::after {\n display: none;\n }\n }\n }\n .el-tabs__content {\n background: #313538;\n margin-right: 150px;\n .el-tab-pane {\n padding-right: 20px;\n }\n .column-wrap {\n column-count: 2;\n column-gap: 0;\n .box {\n padding-bottom: 10px;\n padding-left: 30px;\n -webkit-column-break-inside: avoid;\n page-break-inside: avoid;\n break-inside: avoid;\n h4 {\n margin-bottom: 12px;\n height: 32px;\n font-size: $textSize;\n font-weight: 500;\n line-height: 32px;\n color: $menuText;\n border-bottom: 1px solid #626466;\n }\n ul {\n padding-left: 0;\n margin-top: 8px;\n list-style: none;\n &.leaf {\n margin-top: 18px;\n }\n li {\n line-height: 26px;\n i {\n font-size: 14px;\n cursor: pointer;\n top: 2px;\n }\n .el-icon {\n color: $menuText;\n }\n a {\n padding-left: 3px;\n font-size: $textSize;\n color: $menuText;\n transition: all 0.3s ease;\n &:hover {\n color: var(--menuActiveText, $menuActiveText);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n</style>\n","<!--\n * @title: Expand Menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-02 09:39:04\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-03-22 09:59:51\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { propTypes } from '@@/utils/gv.propTypes';\n import { ElDrawer } from 'element-plus';\n import { computed, ref } from 'vue';\n\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import GvMenuList from './GvMenuList.vue';\n\n defineOptions({\n name: 'GvExpandMenu', // 定义组件名称\n });\n\n const props = defineProps({\n collapse: propTypes.bool.def(true),\n });\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('expand-menu');\n\n const { t } = useBridgeI18n();\n\n // console.log('t', t('sideBar.menuNav'));\n const visible = ref(false);\n const sideWidth = computed(() => (props.collapse ? '54px' : '200px'));\n const expandHandle = () => {\n visible.value = !visible.value;\n };\n</script>\n<template>\n <div :class=\"prefixCls\">\n <div\n class=\"expand-menu-title\"\n :class=\"{ selected: visible ? true : false }\"\n @click.stop=\"expandHandle\">\n <i :class=\"['iconfont', 'gv-icon-wangzhandaohang']\"></i>\n <span\n v-if=\"!collapse\"\n class=\"text\"\n >{{ t('sideBar.menuNav') }}</span\n >\n </div>\n <ElDrawer\n v-model=\"visible\"\n :style=\"{ left: sideWidth, paddingLeft: sideWidth }\"\n class=\"sidebar-expand-drawer\"\n :with-header=\"false\"\n :append-to-body=\"true\"\n direction=\"ltr\"\n resizable\n :modal-class=\"!collapse ? 'sidebar-expand-menu-collapse' : 'sidebar-expand-menu-unCollapse'\"\n size=\"650\">\n <GvMenuList @close=\"visible = false\" />\n </ElDrawer>\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-expand-menu';\n .#{$prefixCls} {\n height: 40px;\n background-color: $menuBg;\n\n .expand-menu-title {\n width: 100%;\n padding-left: 14px;\n line-height: 48px;\n color: $menuText;\n cursor: pointer;\n\n &.selected,\n &:hover {\n color: var(--left-menu-text-active-color);\n background-color: $menuHover;\n }\n\n i {\n width: 24px;\n font-size: 20px;\n font-weight: 500;\n color: var(--left-menu-text-color);\n text-align: center;\n vertical-align: middle;\n }\n\n .text {\n display: inline-block;\n line-height: 48px;\n margin-left: 10px;\n font-size: $textSize;\n color: var(--left-menu-text-color);\n vertical-align: middle;\n &:hover {\n color: var(--left-menu-text-active-color);\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvExpandMenu from './src/GvExpandMenu.vue';\nconst GvExpandMenuPlugin = {\n install(app: App): void {\n app.component(GvExpandMenu.name ?? 'GvExpandMenu', GvExpandMenu);\n },\n};\nexport default GvExpandMenuPlugin;\n\nexport { GvExpandMenu };\n","<!--\n * @title: input component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-29 09:22:45\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 08:39:36\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { GvIcon } from '@@/GvIcon';\n import { ElInput, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { BizType, InputType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('input');\n\n export default defineComponent({\n name: 'GvInput',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n value: {\n type: [String, Number, undefined] as PropType<string | number | undefined>,\n default: '',\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n prefixIcon: {\n type: String,\n default: '',\n },\n suffixIcon: {\n type: String,\n default: '',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n maxlength: {\n type: Number,\n default: 30,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n type: {\n type: String as PropType<InputType>,\n default: 'text',\n },\n rows: {\n type: Number,\n default: 2,\n },\n autosize: {\n type: [Boolean, Object] as PropType<boolean | Record<string, any>>,\n default: false,\n },\n bizType: {\n type: String as PropType<BizType>,\n default: 'tableedit',\n },\n },\n\n emits: ['update:modelValue', 'input', 'blur', 'focus', 'clear', 'keydown'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n const inputValue = ref(props.value);\n\n const showWordLimit = ref(false);\n\n // @computed\n const inputSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceholder = computed(() => props.placeholder || t('common.pleaseInput'));\n\n // @watch\n watch(\n () => props.value,\n (newValue) => {\n inputValue.value = newValue;\n },\n );\n\n // @methods\n\n const renderPrefixIcon = (): JSX.Element | null => {\n if (!props.prefixIcon) return null;\n return <GvIcon iconName={props.prefixIcon} />;\n };\n\n const renderSuffixIcon = (): JSX.Element | null => {\n if (!props.suffixIcon) return null;\n return <GvIcon iconName={props.suffixIcon} />;\n };\n\n const getDisabled = computed(() => {\n if (typeof props.disabled === 'boolean') return props.disabled;\n if (typeof props.disabled === 'string') return props.disabled !== '';\n return false;\n });\n\n const handleInput = (val: string | number) => {\n inputValue.value = val;\n emit('update:modelValue', val);\n emit('input', val);\n };\n\n const handleBlur = (event: FocusEvent) => {\n showWordLimit.value = false;\n if (props.bizType === 'tableedit') emit('blur', event, inputValue.value, props.columnProp);\n else emit('blur', event, inputValue.value, props.vref);\n };\n\n const handleFocus = (event: FocusEvent) => {\n (event.target as HTMLInputElement).select();\n if (props.bizType === 'tableedit') emit('focus', event, inputValue.value, props.columnProp);\n else emit('focus', event, inputValue.value, props.vref);\n };\n\n const handleClear = (event: any) => {\n emit('clear', event);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n showWordLimit.value = true;\n emit('keydown', event);\n };\n\n // @render\n return () => {\n if (!props.visible) return null;\n return (\n <ElInput\n ref={props.vref}\n name={props.name}\n type={props.type}\n modelValue={inputValue.value}\n modelModifiers={{ number: true }}\n readonly={props.readonly}\n rows={props.rows}\n autosize={props.autosize}\n size={inputSize.value}\n showWordLimit={showWordLimit.value}\n maxlength={props.maxlength}\n placeholder={sPlaceholder.value}\n disabled={getDisabled.value}\n clearable={props.clearable}\n onInput={handleInput}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onClear={handleClear}\n onKeydown={handleKeyDown}\n class={prefixCls}\n style={{ display: props.visible ? '' : 'none' }}>\n {{\n prefix: () => renderPrefixIcon(),\n suffix: () => renderSuffixIcon(),\n }}\n </ElInput>\n );\n };\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-input';\n .#{$prefixCls} {\n display: flex;\n margin: 0;\n align-items: center;\n\n &.is-disabled {\n :deep(.el-input__inner) {\n color: $textColor;\n }\n }\n\n :deep(.el-input__inner) {\n &:focus {\n // border-color: var(--primaryColorHover, $primaryColorHover);\n }\n height: 30px;\n // padding-left: 10px;\n line-height: 30px;\n font-size: $textSizeSecondary;\n }\n\n &.el-input--small {\n :deep(.el-input__inner) {\n height: 26px;\n line-height: 26px;\n }\n }\n\n :deep(.el-input__suffix .el-input__suffix-inner) {\n .el-input__count {\n font-size: 10px;\n padding-left: 5px;\n .el-input__count-inner {\n padding: 0;\n }\n }\n .el-input__icon {\n padding: 0;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvInput from './src/GvInput.vue';\n\nconst GvInputPlugin = {\n install(app: App): void {\n app.component(GvInput.name ?? 'GvInput', GvInput);\n },\n};\nexport default GvInputPlugin;\n\nexport { GvInput };\n","<!--\n * @title: input number component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:32:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 11:02:44\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useI18n } from '@/hook/web/useI18n';\n import { useStyle } from '@/hook/web/useStyle';\n import { ElInputNumber, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('input-number');\n\n export default defineComponent({\n name: 'GvInputNumber',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n value: {\n type: Number,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n min: {\n type: Number,\n default: undefined,\n },\n max: {\n type: Number,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: undefined,\n },\n step: {\n type: Number,\n default: 1,\n },\n stepStrictly: {\n type: Boolean,\n default: false,\n },\n precision: {\n type: Number,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n bizType: {\n type: String,\n default: undefined,\n },\n position: {\n type: String,\n default: undefined,\n },\n },\n // @emit\n emits: ['update:modelValue', 'input', 'blur', 'focus', 'keydown', 'change'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useI18n();\n const inputValue = ref(props.value);\n const globalSize = useGlobalConfig('size');\n // @computed\n const inputSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceHolder = computed(() => (props.placeholder ? props.placeholder : t('common.pleaseInput')));\n const getDisabled = computed(() => props.disabled);\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n const handleInput = (val) => {\n emit('update:modelValue', val, props.vref);\n emit('input', val, props.vref);\n };\n const handleBlur = ($event: FocusEvent) => {\n if (props.bizType === 'tableedit') emit('blur', $event, inputValue.value, props.columnProp);\n else emit('blur', $event, inputValue.value, props.vref);\n };\n\n const handleFocus = ($event: FocusEvent) => {\n if ($event.target) ($event.target as HTMLInputElement).select();\n\n if (props.bizType === 'tableedit') emit('focus', $event, inputValue.value, props.columnProp);\n else emit('focus', $event, inputValue.value, props.vref);\n };\n // const handleKeyDown = ($event: KeyboardEvent) => {\n // emit('keydown', $event);\n // };\n const handleChange = (currentValue: number, oldValue: number) => {\n emit('change', currentValue, oldValue);\n };\n\n // @render\n // 注意方法的传参必须使用箭头函数方式,避免每次 render 的时候都会自动执行一次方法\n return (\n // nativeOnkeydown={(e) => this.inputKeydown(e)}\n <ElInputNumber\n class={prefixCls}\n ref={props.vref || 'gv-input-number'}\n name={props.name}\n v-model={inputValue.value}\n style={{ display: props.visible ? '' : 'none' }}\n size={inputSize.value}\n placeholder={sPlaceHolder.value}\n disabled={getDisabled.value}\n controls-position={props.position}\n step={props.step}\n step-strictly={props.stepStrictly}\n precision={props.precision}\n min={props.min}\n max={props.max}\n // onKeydown={handleKeyDown}\n onInput={handleInput}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onChange={handleChange}\n // { ...this.$attrs }\n // { ...this.$listeners }\n ></ElInputNumber>\n );\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-input-number';\n .#{$prefixCls} {\n :deep(.el-input__inner) {\n height: 30px;\n line-height: 30px;\n\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n :deep(.el-input-number__decrease),\n :deep(.el-input-number__increase) {\n height: 28px;\n line-height: 28px;\n }\n\n :deep(.el-input-number__decrease),\n :deep(.el-input-number__increase) {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.el-input-number__increase):hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled),\n :deep(.el-input-number__decrease):hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n &.is-controls-right {\n // line-height: 34px; // 需要定义line-height,否则高度串行\n :deep(.el-input-number__decrease) {\n bottom: 1px;\n\n &:hover {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n :deep(.el-input-number__increase) {\n &:hover {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n\n top: 1px;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvInputNumber from './src/GvInputNumber.vue';\nconst GvInputNumberPlugin = {\n install(app: App): void {\n app.component(GvInputNumber.name ?? 'GvInputNumber', GvInputNumber);\n },\n};\nexport default GvInputNumberPlugin;\n\nexport { GvInputNumber };\n","<!--\n * @title: select component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-29 09:36:14\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 08:58:59\n * @version: 1.0.6\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useNotify } from '@/hook/web/useNotify';\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { ElOption, ElSelect, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import { useI18n } from 'vue-i18n';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('select');\n export default defineComponent({\n name: 'GvSelect',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n value: {\n type: [String, Array, Object] as PropType<string | unknown[] | Record<string, unknown>>,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n showLabel: {\n type: [String, Array],\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined, // 请选择\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n filterable: {\n type: Boolean,\n default: true,\n },\n dicType: {\n type: String,\n required: true,\n },\n filtercode: {\n // 过滤字典码\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n dicRemote: {\n type: Function,\n default: () => {},\n },\n cb: {\n type: Function,\n default: () => {},\n },\n clear: {\n type: Function,\n default: () => {},\n },\n isreload: {\n type: Boolean,\n default: true,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n bizType: {\n type: String,\n default: undefined,\n },\n editRow: {\n type: Object,\n default: () => {},\n },\n collapseTags: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n },\n // define emit\n emits: ['update:modelValue', 'focus', 'clear', 'change'],\n setup(props, { emit }) {\n const userStore = useUserStore();\n const appStore = useAppStore();\n const { alert } = useNotify();\n const { t, locale } = useI18n();\n\n // @data\n const lang = locale.value;\n let dicIcon = 'iconfont gv-icon-shujuzidian3';\n const remote = ref(false);\n const loading = ref(false);\n const loadingText = ref('loading...');\n const sPlaceholder = props.placeholder ? props.placeholder : t('common.all');\n const inputValue = ref(props.value);\n const inputShowLabel = ref(props.showLabel);\n const inputFilterable = ref(props.filterable);\n // let inputFilterable = props.filterable,\n const selectValue = ref(props.value);\n const options = ref<DicItem[]>([]);\n const originOptions = ref<DicItem[]>([]);\n const className = ref(`${prefixCls}`);\n const globalSize = useGlobalConfig('size');\n\n // 表选字典 t# 需在 setup 阶段识别,不能等 mounted\n const dicSrc = props.dicType?.toLowerCase() ?? '';\n if (dicSrc.startsWith('e#')) dicIcon = 'iconfont gv-icon-meiju';\n else if (dicSrc.startsWith('t#')) {\n dicIcon = 'iconfont gv-icon-24gl-table';\n remote.value = true;\n className.value = 'gv-select__table';\n }\n if (props.bizType === 'tableedit') className.value += ' tableedit';\n\n const valueCache = new Map<string, { value: string; label: string; row?: Record<string, unknown> }>();\n\n // @computed\n const selectSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @method\n\n const isEmptyLabel = (label: unknown) => label == null || label === '';\n\n const getDictItemLabel = (item: DicItem): string => {\n switch (locale.value) {\n case 'en':\n return item.e ?? item.t ?? '';\n case 'l1':\n return item.l1 ?? item.t ?? '';\n case 'l2':\n return item.l2 ?? item.t ?? '';\n default:\n return item.t ?? '';\n }\n };\n\n const formatOptionLabel = (label: string) => {\n if (!label) return '';\n return remote.value && label.includes('[') ? label.split('[')[0] : label;\n };\n\n const findLabelInOptions = (code: string, opts: DicItem[]) => {\n const item = opts.find((x) => String(x.c) === String(code));\n if (!item) return '';\n return formatOptionLabel(getDictItemLabel(item));\n };\n\n const getOptionValue = (code: string, label: string, row?: Record<string, unknown>) => {\n const key = String(code);\n const text = String(label || key);\n const cached = valueCache.get(key);\n if (cached && cached.label === text) {\n if (row) cached.row = row;\n return cached;\n }\n const obj = row ? { value: key, label: text, row } : { value: key, label: text };\n valueCache.set(key, obj);\n return obj;\n };\n\n const getSelectCode = (v: unknown) => {\n if (v == null || v === '') return '';\n if (typeof v === 'object' && !Array.isArray(v)) return String((v as Record<string, unknown>).value ?? (v as Record<string, unknown>).c ?? '');\n return String(v);\n };\n\n const getSelectLabel = (v: unknown) => {\n if (v == null || v === '') return '';\n if (typeof v === 'object' && !Array.isArray(v)) {\n const o = v as Record<string, unknown>;\n return String(o.label ?? o.v ?? o.value ?? o.c ?? '');\n }\n return String(v);\n };\n\n /**\n * @todo: 远程搜索、聚焦、清空后保留当前选中项\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-04 10:52:44\n * @param {*} _opts\n */\n const mergeOptionsWithSelected = (_opts: DicItem[]) => {\n let merged = _opts ?? [];\n const append = (code: string, label: string) => {\n if (!code || merged.some((x) => x.c + '' === code)) return;\n merged = [{ c: code, t: label || code, s: '' } as DicItem, ...merged];\n };\n const sv = selectValue.value;\n if (Array.isArray(sv)) sv.forEach((item) => append(getSelectCode(item), getSelectLabel(item) || getSelectCode(item)));\n else if (sv) append(getSelectCode(sv), getSelectLabel(sv) || getSelectCode(sv));\n return merged;\n };\n\n const pushDefaultOption = (op: DicItem) => {\n options.value.push(op);\n if (remote.value) originOptions.value.push({ ...op });\n };\n\n /**\n * @todo: load dict list\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:31:44\n */\n const getSelectOptions = async () => {\n if (!props.dicType) return null;\n else {\n let ret: DicItem[] = [];\n const src = props.dicType.toLowerCase();\n if (src.startsWith('e#')) {\n // const pinyin = await require('js-pinyin');\n // 生成枚举类型字典\n const arr = src.split('#')[1].split(':');\n arr.forEach((x) => {\n const xx: DicItem = {\n c: '',\n t: '',\n s: '',\n };\n const arr2 = x.split('=');\n xx['c'] = arr2[0];\n xx['t'] = arr2[1];\n xx['s'] = '';\n ret.push(xx);\n });\n return ret;\n } else {\n const dictCache = userStore.dictCache?.[src];\n if (props.filtercode === undefined && dictCache) ret = dictCache;\n else if (props.dicType === 'xzqh') {\n // 生成字典列表\n const dict = appStore.getDictDivision;\n if (dict) {\n if (props.filtercode === undefined) {\n const cache = {};\n cache['key'] = 'xzqh';\n cache['dict'] = dict;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n }\n ret = dict;\n }\n } else {\n const dict = appStore.getDict[src];\n\n if (dict) {\n // fixme: 解决字典缓存不能缓存多个问题 2022-04-13\n if (props.filtercode === undefined) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dict;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n }\n\n ret = dict;\n }\n }\n\n // 设置是否可搜索\n // this.setFilterable(ret);\n // 增加字典码过滤\n let opts = ret;\n if (props.filtercode) {\n const reg = new RegExp(props.filtercode, 'i');\n opts = ret.filter((x) => reg.test(x.c));\n }\n return opts;\n }\n }\n };\n /**\n * @todo: 设置字典项目超过5个可搜索-- 弃用\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-10 09:42:19\n * @param {*} dict\n */\n // setFilterable(dict) {\n // if (dict && dict.length > 5)\n // inputFilterable.value = true;\n // },\n // 回调参数:(value: string | number)\n // 字典自定义过滤方法\n const filterMethod = (value) => {\n if (value)\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts.filter((item) => {\n // console.log(item);\n if (\n item.c.indexOf(value) !== -1 || // value检索\n item.t?.indexOf(value) !== -1 || // label检索\n item.s.indexOf(value.toLowerCase()) !== -1 // 简拼检索\n )\n return true;\n });\n });\n else\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts;\n });\n };\n /**\n * @todo: handle clear event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:53:27\n */\n const handleClear = () => {\n if (remote.value === false)\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts;\n });\n else options.value = mergeOptionsWithSelected(originOptions.value);\n\n props.clear(selectValue.value, props.vref, props.dicType);\n emit('clear');\n };\n /**\n * @todo: remote dict search method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:20:03\n * @param {*} query\n */\n const initialRemoteLoaded = ref(false);\n let pendingRemoteQuery: string | null = null;\n let pendingRemotePromise: Promise<void> | null = null;\n let remoteRequestSeq = 0;\n\n const filterOriginOptions = (query: string) =>\n originOptions.value.filter((x) => {\n if (x.t) {\n const f = x.t.split(']');\n if (f[0].indexOf(query) !== -1) return true;\n }\n if (x.c && x.c.indexOf(query) !== -1) return true;\n return false;\n });\n\n const remoteDictSearch = async (query = ''): Promise<void> => {\n if (pendingRemotePromise && pendingRemoteQuery === query) return pendingRemotePromise;\n\n const requestSeq = ++remoteRequestSeq;\n pendingRemoteQuery = query;\n\n pendingRemotePromise = (async () => {\n loading.value = true;\n try {\n const sDicType = props.dicType.substring(2);\n const { datas } = await props.dicRemote(sDicType, query, props.editRow);\n if (requestSeq !== remoteRequestSeq) return;\n\n const ops: DicItem[] = [];\n try {\n JSON.parse(datas).forEach((x: any) => {\n ops.push({ c: x.c, t: x.t, s: '' } as DicItem);\n });\n } catch (e) {\n console.log(e);\n }\n\n options.value = mergeOptionsWithSelected(ops);\n originOptions.value = [...options.value];\n initialRemoteLoaded.value = true;\n } finally {\n if (requestSeq === remoteRequestSeq) {\n loading.value = false;\n loadingText.value = options.value.length === 0 ? t('common.noData') : t('common.loading');\n }\n if (pendingRemoteQuery === query) {\n pendingRemoteQuery = null;\n pendingRemotePromise = null;\n }\n }\n })();\n\n return pendingRemotePromise;\n };\n /**\n * @todo: table dict remote load method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:11:51\n */\n const remoteMethod = async (query = ''): Promise<void> => {\n const q = String(query ?? '');\n\n if (q && originOptions.value.length > 0 && props.isreload === false) {\n const filtered = filterOriginOptions(q);\n if (filtered.length > 0) {\n options.value = mergeOptionsWithSelected(filtered);\n loading.value = false;\n return;\n }\n }\n\n const needFetch = q !== '' || props.isreload || !initialRemoteLoaded.value || originOptions.value.length === 0;\n if (!needFetch) {\n options.value = mergeOptionsWithSelected(originOptions.value);\n loading.value = false;\n return;\n }\n\n await remoteDictSearch(q);\n };\n\n const ensureDefaultOption = (code: string, text: string) => {\n if (!code) return;\n const existed = options.value.find((x) => String(x.c) === String(code));\n if (existed) {\n if (text && existed.t !== text) existed.t = text;\n return;\n }\n pushDefaultOption({ c: code, t: text || code, s: '' } as DicItem);\n };\n\n const resolveDisplayLabel = async (code: string, hint?: string): Promise<string> => {\n if (hint && hint !== code) return hint;\n\n const localOpts = (await getSelectOptions()) ?? [];\n let label = findLabelInOptions(code, localOpts);\n if (label) return label;\n\n label = findLabelInOptions(code, options.value);\n if (label) return label;\n\n if (remote.value && code) {\n await remoteDictSearch(code);\n label = findLabelInOptions(code, options.value);\n if (label) return label;\n await remoteDictSearch('');\n label = findLabelInOptions(code, options.value);\n }\n\n return label || code;\n };\n\n const applySelectValue = async (raw: unknown) => {\n inputValue.value = raw as typeof inputValue.value;\n if (raw == null || raw === '') {\n selectValue.value = raw as typeof selectValue.value;\n return;\n }\n\n if (Array.isArray(raw)) {\n const resolved: ReturnType<typeof getOptionValue>[] = [];\n for (let index = 0; index < raw.length; index++) {\n const item = raw[index];\n if (item === '') continue;\n const code = getSelectCode(item);\n let hint = getSelectLabel(item);\n if (isEmptyLabel(hint) || hint === code) {\n const showLbl = Array.isArray(props.showLabel) ? props.showLabel[index] : undefined;\n if (showLbl && showLbl !== code) hint = String(showLbl);\n }\n const text = await resolveDisplayLabel(code, isEmptyLabel(hint) || hint === code ? undefined : hint);\n const row = typeof item === 'object' && item !== null ? ((item as Record<string, unknown>).row as Record<string, unknown>) : undefined;\n resolved.push(getOptionValue(code, text, row));\n ensureDefaultOption(code, text);\n }\n selectValue.value = resolved;\n return;\n }\n\n const code = getSelectCode(raw);\n let hint = '';\n if (typeof raw === 'object' && raw !== null) {\n const o = raw as Record<string, unknown>;\n hint = String(o.label ?? o.v ?? '');\n } else if (typeof props.showLabel === 'string') hint = props.showLabel;\n const text = await resolveDisplayLabel(code, isEmptyLabel(hint) || hint === code ? undefined : hint);\n const row = typeof raw === 'object' && raw !== null ? ((raw as Record<string, unknown>).row as Record<string, unknown>) : undefined;\n selectValue.value = getOptionValue(code, text, row);\n ensureDefaultOption(code, text);\n };\n\n watch(\n () => props.value,\n (newValue) => {\n void applySelectValue(newValue);\n },\n { deep: true },\n );\n\n watch(\n () => props.showLabel,\n (newVal) => {\n inputShowLabel.value = newVal;\n if (inputValue.value) void applySelectValue(props.value ?? inputValue.value);\n },\n );\n\n /**\n * @todo: handle focus event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:53:35\n * @param {*} event\n */\n const handleFocus = (event: FocusEvent) => {\n if (remote.value === false)\n getSelectOptions().then((_opts: DicItem[]) => {\n if (remote.value === false)\n if (_opts === undefined || _opts === null || _opts.length === 0) {\n alert('The dict value does not exist', 'warning');\n return false;\n }\n options.value = _opts;\n });\n emit('focus', event);\n };\n\n /**\n * @todo: handle visible change event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:25:38\n * @param {*} val\n */\n const handleVisibleChange = () => {\n // console.log(val);\n };\n\n const handleBlur = () => {\n // // add: 解决无法重新加载问题 2022-04-10\n // if (this.remote === false)\n // this.getSelectOptions().then((_opts) => {\n // this.options = _opts;\n // });\n // else\n // this.options = this.originOptions;\n };\n\n /**\n * @todo: render select option\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:37:58\n * @param {*} x\n */\n const renderSelectOption = (x: DicItem) => {\n let t = x.t;\n switch (lang) {\n case 'zh-CN':\n t = x.t;\n break;\n case 'en':\n t = x.e;\n break;\n case 'l1':\n t = x.l1;\n break;\n case 'l2':\n t = x.l2;\n break;\n default:\n t = x.t;\n break;\n }\n if (!t) t = x.t;\n return (\n <ElOption\n key={x.c + ''}\n label={t}\n value={getOptionValue(x.c + '', t ?? '')}>\n <span class=\"gv-select__option--label\">{t}</span>\n <span class=\"gv-select__option--value\">{x.c}</span>\n </ElOption>\n );\n };\n\n /**\n * @todo: render table option\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:44:34\n * @param {*} x\n */\n const renderTableOption = (x: DicItem) => {\n const t = x.t;\n let val = t;\n const columnTexts: string[] = [];\n const row: Record<string, string> = {};\n let multiColumn = false;\n if (t) {\n if (t.indexOf('[') !== -1) {\n // 多列显示\n multiColumn = true;\n const v1 = t.split('[');\n val = v1[0];\n let mm = v1[1];\n mm = mm.split(']')[0];\n const m2 = mm.split(',');\n for (let i = 0; i < m2.length; i++) {\n const m3 = m2[i];\n const m4 = m3.split(':');\n row[m4[0]] = m4[1];\n columnTexts.push(m4[1] === 'null' ? ' -- ' : m4[1]);\n }\n }\n if (t.indexOf('{') !== -1) {\n // 隐藏列\n const vv1 = t.split('{');\n if (multiColumn === false) val = vv1[0];\n let mmm = vv1[1];\n mmm = mmm.split('}')[0];\n const mm2 = mmm.split(',');\n for (let i = 0; i < mm2.length; i++) {\n const mm3 = mm2[i];\n const mm4 = mm3.split(':');\n row[mm4[0]] = mm4[1];\n }\n }\n }\n let key = x.c + '';\n if (props.multiple === true) key = x.val === undefined ? x.c + '' : String(x.val);\n return (\n <ElOption\n key={key}\n label={val}\n value={getOptionValue(x.c + '', val ?? '', row)}>\n <span class=\"gv-select__option--label\">{val}</span>\n <span class=\"gv-select__option--value\">{x.c}</span>\n {columnTexts.map((text, index) => (\n <span\n key={index}\n class=\"gv-select__option--column\">\n {text}\n </span>\n ))}\n </ElOption>\n );\n };\n\n /**\n * @todo: selected call back\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:27:07\n * @param {*} val\n */\n const handleChange = async (val: any) => {\n if (val == null || val === '' || (Array.isArray(val) && val.length === 0)) return;\n let labels: string = '';\n const labelArr: string[] = [];\n if (props.multiple === true)\n options.value.forEach((x) => {\n if (Array.isArray(val) && val.some((ele) => ele === x.c)) labelArr.push(x.t ?? '');\n });\n else if (typeof val === 'object') labels = val.label ?? '';\n else {\n const opArr = options.value.filter((x) => {\n const v = val + '';\n return x.c + '' === v;\n });\n labels = opArr[0]?.t ?? '';\n if (labels) labels = labels.split('[')[0];\n }\n if (props.bizType === 'tableedit')\n if (props.multiple === true) {\n emit('change', val, labelArr, props.columnProp);\n await props.cb(val, props.columnProp, props.dicType, labelArr, props.editRow);\n } else {\n emit('change', val, labels, props.columnProp);\n await props.cb(val, props.columnProp, props.dicType, labels, props.editRow);\n }\n else if (props.multiple === true) {\n emit('change', val, labelArr);\n await props.cb(val, props.vref, props.dicType);\n } else {\n emit('change', val, labels);\n await props.cb(val, props.vref, props.dicType);\n }\n };\n /**\n * @todo: handle update modelValue\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 11:29:17\n * @param {*} value\n */\n const handleUpdate = (value: any): void => {\n inputValue.value = value;\n selectValue.value = value;\n emit('update:modelValue', value);\n };\n\n if (props.dicType === undefined || props.dicType === null) alert(`[ ${props.label} ] - The dicType needs to be set`, 'warning');\n\n void applySelectValue(props.value);\n\n // @render\n return () => {\n const render =\n remote.value === false ? (\n <ElSelect\n ref=\"gv-select\"\n name={props.name}\n modelValue={selectValue.value}\n valueKey=\"value\"\n onUpdate:modelValue={handleUpdate}\n style={{ display: props.visible ? '' : 'none' }}\n placeholder={sPlaceholder}\n disabled={props.disabled}\n clearable={props.clearable}\n size={selectSize.value}\n multiple={props.multiple}\n filterable={inputFilterable.value}\n filter-method={filterMethod}\n default-first-option={true}\n collapseTags={props.collapseTags}\n onClear={handleClear}\n onFocus={handleFocus}\n onVisible-change={handleVisibleChange}\n onChange={handleChange}\n class={className.value}>\n {{\n prefix: () => <i class={dicIcon}></i>,\n default: () => options.value.map((x) => renderSelectOption(x)),\n }}\n </ElSelect>\n ) : (\n <ElSelect\n ref=\"gv-select\"\n name={props.name}\n modelValue={selectValue.value}\n valueKey=\"value\"\n onUpdate:modelValue={handleUpdate}\n style={{ display: props.visible ? '' : 'none' }}\n placeholder={sPlaceholder}\n disabled={props.disabled}\n clearable={props.clearable}\n size={selectSize.value}\n multiple={props.multiple}\n default-first-option={true}\n filterable={inputFilterable.value}\n remote={true}\n remote-method={remoteMethod}\n debounce={300}\n loading={loading.value}\n loading-text={loadingText.value}\n collapseTags={props.collapseTags}\n onClear={handleClear}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n class={className.value}>\n {{\n prefix: () => <i class={dicIcon}></i>,\n default: () => options.value.map((x) => renderTableOption(x)),\n }}\n </ElSelect>\n );\n return render;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-select';\n .#{$prefixCls} {\n vertical-align: middle; // fixme: 注意必须有这个参数,否则作为一行最后的列会导致串行\n :deep(.el-select__wrapper) {\n &.is-focus {\n .el-input__inner {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n .el-select__prefix {\n left: 5px !important;\n width: 15px !important;\n\n .iconfont {\n font-size: $appTextSize;\n }\n }\n\n .el-select__placeholder {\n font-size: $appTextSize;\n }\n }\n\n &.tableedit {\n :deep(.el-select__wrapper) {\n .el-select__input {\n padding-right: 5px !important;\n font-size: $appTextSize;\n }\n\n .el-select__suffix {\n width: 0;\n }\n }\n }\n }\n\n .#{$gvNamespace}-select__table {\n vertical-align: middle; // fixme: 注意必须有这个参数,否则作为一行最后的列会导致串行\n :deep(.el-select__wrapper) {\n .el-select__prefix {\n left: 5px !important;\n width: 15px !important;\n\n .iconfont {\n font-size: $appTextSize;\n }\n }\n .el-select__selection {\n font-size: $appTextSize;\n }\n\n &.is-focus .el-select__input {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n &.tableedit {\n :deep(.el-select__wrapper) {\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSelect from './src/GvSelect.vue';\n// Define the install method on the GvButton component\nconst GvSelectPlugin = {\n install(app: App): void {\n app.component(GvSelect.name ?? 'GvSelect', GvSelect);\n },\n};\nexport default GvSelectPlugin;\n\nexport { GvSelect };\n","<!--\n * @title: switch component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 13:26:26\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 09:55:07\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElSwitch } from 'element-plus';\n import { defineComponent, ref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('switch');\n export default defineComponent({\n name: 'GvSwitch',\n props: {\n value: {\n type: [Boolean, Number, String] as PropType<boolean | number | string>,\n required: false,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n columnKey: {\n type: String,\n required: false,\n default: undefined,\n },\n target: {\n type: [Number, String] as PropType<number | string>,\n require: false,\n default: '100201',\n },\n },\n\n // emit\n emits: ['change'],\n setup(props, { emit }) {\n // @data\n const val = ref(props.value);\n const switchType = ref(true);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n val.value = newVal;\n switchType.value = val.value === props.target;\n },\n );\n watch(\n () => switchType.value,\n (newVal) => {\n val.value === newVal;\n },\n );\n\n // @methods\n const handleChange = (newStatus) => {\n emit('change', newStatus, val.value);\n };\n\n // @created\n switchType.value = val.value === props.target;\n\n // @render\n return () => (\n <ElSwitch\n ref=\"gv-switch\"\n v-model={switchType.value}\n key={props.columnKey}\n disabled={props.disabled}\n // active-color='#13ce66'\n // inactive-color='#ff4949'\n onChange={handleChange}\n class={prefixCls}\n />\n );\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-switch';\n .#{$prefixCls} {\n &.is-checked {\n :deep(.el-switch__core) {\n background-color: #13ce66;\n border-color: #13ce66;\n }\n }\n\n :deep(.el-switch__core) {\n background-color: #b3aaaa;\n border-color: #b3aaaa;\n //background-color:#ff4949;\n //border-color:#ff4949;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSwitch from './src/GvSwitch.vue';\n// Define the install method on the GvButton component\nconst GvSwitchPlugin = {\n install(app: App): void {\n app.component(GvSwitch.name ?? 'GvSwitch', GvSwitch);\n },\n};\nexport default GvSwitchPlugin;\n\nexport { GvSwitch };\n","<!--\n * @title: time picker\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 09:18:28\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 14:21:34\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { ElTimePicker, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { DefineComponent, PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TTimePickerEmits, TTimePickerSize, TTimePickerType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('timepicker');\n const TimePicker = ElTimePicker as typeof ElTimePicker & DefineComponent<TTimePickerEmits>;\n\n export default defineComponent({\n name: 'GvTimePicker',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [Date, Array, String] as PropType<TTimePickerType>,\n default: undefined,\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<TTimePickerSize>,\n default: 'small',\n },\n isRange: {\n type: Boolean,\n default: false,\n },\n disabledHours: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n disabledMinutes: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n disabledSeconds: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n rangeSeparator: {\n type: String,\n default: '-',\n },\n format: {\n type: String,\n default: 'HH:mm',\n },\n valueFormat: {\n type: String,\n default: 'HH:mm',\n },\n placeholder: {\n type: String,\n default: '00:00',\n },\n startPlaceholder: {\n type: String,\n default: '',\n },\n endPlaceholder: {\n type: String,\n default: '',\n },\n editable: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n },\n\n emits: ['update:modelValue', 'change', 'blur', 'focus'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n const inputValue = ref<TTimePickerType>(props.modelValue);\n const timepickerSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.modelValue,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n /**\n *@todo: 更新v-model值\n *@author: bugcao\n *@date: 2026-05-07 15:45:52\n *@version: v0.0.1\n */\n const handleUpdate = (value: TTimePickerType) => {\n inputValue.value = value;\n emit('update:modelValue', value);\n };\n /**\n *@todo: 合并禁用小时\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledHours = () => props.disabledHours;\n /**\n *@todo: 合并禁用分钟\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledMinutes = () => props.disabledMinutes;\n /**\n *@todo: 合并禁用秒\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledSeconds = () => props.disabledSeconds;\n /**\n *@todo: 更新change事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:09\n *@version: v0.0.1\n */\n const handleChange = (value: TTimePickerType) => {\n emit('change', value);\n };\n /**\n *@todo: 更新blur事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:12\n *@version: v0.0.1\n */\n const handleBlur = (e: FocusEvent) => {\n emit('blur', e);\n };\n /**\n *@todo: 更新focus事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:12\n *@version: v0.0.1\n */\n const handleFocus = (e: FocusEvent) => {\n emit('focus', e);\n };\n\n // @render\n return () => (\n <TimePicker\n ref={props.vref || 'gv-timepicker'}\n modelValue={inputValue.value}\n onUpdate:modelValue={handleUpdate}\n name={props.name}\n readonly={props.readonly}\n disabled={props.disabled}\n editable={props.editable}\n clearable={props.clearable}\n is-range={props.isRange}\n range-separator={props.rangeSeparator}\n size={timepickerSize.value}\n placeholder={props.placeholder || t('common.selectTime')}\n start-placeholder={props.startPlaceholder || t('common.startTime')}\n end-placeholder={props.endPlaceholder || t('common.endTime')}\n format={props.format}\n value-format={props.valueFormat}\n class={prefixCls}\n disabled-hours={mergedDisabledHours}\n disabled-minutes={mergedDisabledMinutes}\n disabled-seconds={mergedDisabledSeconds}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n />\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-timepicker';\n .#{$prefixCls} {\n width: 100%;\n vertical-align: middle;\n :deep(.el-icon-time) {\n margin-left: 1px;\n }\n &.el-range-editor.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n :deep(.el-input__wrapper) {\n &:is(.is-focus) {\n box-shadow: 0 0 0 1px var(--primaryColorHover, $primaryColorHover) inset;\n }\n }\n :deep(.el-input__inner) {\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n :deep(.el-range__close-icon) {\n width: 20px;\n }\n :deep(.el-range-separator) {\n padding-right: 2px;\n padding-left: 0;\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTimePicker from './src/GvTimePicker.vue';\n\nconst GvTimePickerPlugin = {\n install(app: App): void {\n app.component(GvTimePicker.name ?? 'GvTimePicker', GvTimePicker);\n },\n};\nexport default GvTimePickerPlugin;\n\nexport { GvTimePicker };\n","/*\n * @title: info message component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:10:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:01:59\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nconst infoMsg = {\n carNo: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '车牌号格式错误';\n else info = 'car number format error.';\n return info;\n },\n double: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入浮点数.';\n else info = 'please enter Double.';\n return info;\n },\n decimal: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '小数点位数不能超过: ' + len + ' 位';\n else info = 'Number of decimal places can not be more than:' + len + '.';\n return info;\n },\n idCard: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '身份证格式不正确';\n else info = 'id card format is not correct.';\n return info;\n },\n maxLen: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能超过 ' + Math.floor(len / 2) + '个汉字或 ' + len + ' 个字符';\n else info = 'Can not exceed ' + len + ' character.';\n return info;\n },\n money: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '非0开头的数字 小数最多两位.';\n else info = \"Only input Numbers, 0 can't start, the decimal two at the most.\";\n return info;\n },\n moneyMax: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '整数位最多只能是: ' + len + ' 位';\n else info = 'integer digits can only be at most: ' + len;\n return info;\n },\n letter: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入字母以外的字符';\n else info = \"Can't input letters outside of the characters.\";\n return info;\n },\n number: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '只能输入正整数.';\n else info = 'Only enter a positive integer.';\n return info;\n },\n number0: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '只能输入不能以0开头的正整数.';\n else info = 'Only enter a non-zero positive integer, and cannot begin with zero.';\n return info;\n },\n //Add TypeScript type annotations for lang parameter\n numberLetter: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入数字、字母以外的字符.';\n else info = 'Can not input Numbers, letters characters.';\n return info;\n },\n //Add TypeScript type annotations for lang parameter\n name: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入数字、字母、-、_和中文以外的字符.';\n else info = 'Can not enter Numbers, letters, -, _ and Chinese characters.';\n return info;\n },\n phone: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '电话号码格式不正确.';\n else info = 'Phone format is not correct.';\n return info;\n },\n email: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '邮件格式不正确.';\n else info = 'E-mail format is not correct.';\n return info;\n },\n telephone: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的固话(格式:区号+号码,如010-1234567)';\n else info = 'Telephone format is not correct.';\n return info;\n },\n ip: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的IP地址';\n else info = 'IpAddress format is not correct.';\n return info;\n },\n url: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的url地址';\n else info = 'Url format is not correct.';\n return info;\n },\n phoneTel: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的电话号码或者固话号码';\n else info = 'phone & tel format is not correct.';\n return info;\n },\n vin: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入后8位或17位(字母大写)';\n else info = 'must be 8 or 17 letters and Numbers.';\n return info;\n },\n};\nexport default infoMsg;\n","/*\n * @title: validate rules component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:09:03\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 20:32:12\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\n/** ------------------- 验证规则 ------------------------\n * isAny: 默认规则,无校验\n * isAdmin: 验证是否是admin用户\n * isUrl: 验证url格式\n * isLowercase: 验证是否都是小写\n * isUppercase: 验证是否都是大写\n * isLetter: 验证是否都是字母( 不包括标点符号)\n * isEmail: 验证是否是email\n * isPhone: 验证电话号码\n * isIp: 验证是否是ip地址\n * isPhoneTel: 验证是否是手机号或者固定电话号\n * isTelephone: 验证是否是固定电话\n * isIdcard: 验证身份证号\n * isMoney:验证金额格式\n * isBigMoney: 验证金额格式(千位符格式)\n * isNumber: 验证是否是整数数字\n * isNumberLetter: 验证是否是数字和字母\n * isDouble: 验证浮点数格式\n * isName: 验证是否是名称格式\n * isVin: 验证vin码格式\n * isCarno: 验证车牌号(含新能源)\n ----------------------------------------------------\n*/\n\nimport infoMsg from './gv.infomsg';\n\n/**\n * @todo: 计算输入字符串的长度,汉字记为2 英文字母记为1\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 14:56:22\n * @param {*} val 对于多选字典,val是数组类型的字典码\n */\nconst calLength = function (val) {\n if (val === null || val.length === 0) return 0;\n let i, sum;\n sum = 0;\n // fixme: val有可能是数组,需要转化为字符串 2022-04-10\n let v = val;\n if (Array.isArray(val)) v = val.join(',');\n for (i = 0; i < v.length; i++)\n if (v.charCodeAt(i) >= 32 && v.charCodeAt(i) <= 126) sum = sum + 1;\n else sum = sum + 2;\n return sum;\n};\n\nconst vcity = {\n 11: '北京',\n 12: '天津',\n 13: '河北',\n 14: '山西',\n 15: '内蒙古',\n 21: '辽宁',\n 22: '吉林',\n 23: '黑龙江',\n 31: '上海',\n 32: '江苏',\n 33: '浙江',\n 34: '安徽',\n 35: '福建',\n 36: '江西',\n 37: '山东',\n 41: '河南',\n 42: '湖北',\n 43: '湖南',\n 44: '广东',\n 45: '广西',\n 46: '海南',\n 50: '重庆',\n 51: '四川',\n 52: '贵州',\n 53: '云南',\n 54: '西藏',\n 61: '陕西',\n 62: '甘肃',\n 63: '青海',\n 64: '宁夏',\n 65: '新疆',\n 71: '台湾',\n 81: '香港',\n 82: '澳门',\n 91: '国外',\n};\n// 校验浮点数位数\nconst checkDecimal = function (val, decimalLen) {\n let v = val + '';\n if (v && v.indexOf('.') > 0) {\n v = v.substr(v.indexOf('.') + 1, v.length);\n if (v.length <= decimalLen) return true;\n else return false;\n } else return true;\n};\n// 取身份证前两位,校验省份\nconst checkProvince = function (card) {\n const province = card.substr(0, 2);\n if (vcity[province] === undefined) return false;\n\n return true;\n};\n\n// 校验日期\nconst verifyBirthday = function (year: number, month: number, day: number, birthday: Date) {\n const now = new Date();\n const now_year = now.getFullYear();\n // 年月日是否合理\n if (birthday.getFullYear() === +year && birthday.getMonth() + 1 === +month && birthday.getDate() === +day) {\n // 判断年份的范围(3岁到100岁之间)\n const time = now_year - Number(year);\n if (time >= 3 && time <= 100) return true;\n return false;\n }\n return false;\n};\n\n// 检查生日是否正确\nconst checkBirthday = function (card) {\n const len = card.length;\n // 身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字\n if (len === 15) {\n const re_fifteen = /^(\\d{6})(\\d{2})(\\d{2})(\\d{2})(\\d{3})$/;\n const arr_data = card.match(re_fifteen);\n const year = arr_data[2];\n const month = arr_data[3];\n const day = arr_data[4];\n const birthday = new Date('19' + year + '/' + month + '/' + day);\n return verifyBirthday(Number('19' + year), month, day, birthday);\n }\n // 身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X\n if (len === 18) {\n const re_eighteen = /^(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9]|X)$/;\n const arr_data = card.match(re_eighteen);\n const year = arr_data[2];\n const month = arr_data[3];\n const day = arr_data[4];\n const birthday = new Date(year + '/' + month + '/' + day);\n return verifyBirthday(year, month, day, birthday);\n }\n return false;\n};\n// 15位转18位身份证号\nconst changeFivteenToEighteen = function (card) {\n if (card.length === 15) {\n const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n let cardTemp = 0;\n let i;\n card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);\n for (i = 0; i < 17; i++) cardTemp += card.substr(i, 1) * arrInt[i];\n\n card += arrCh[cardTemp % 11];\n return card;\n }\n return card;\n};\n\n// 校验位的检测\nconst checkParity = function (card) {\n // 15位转18位\n card = changeFivteenToEighteen(card);\n const len = card.length;\n if (len === 18) {\n const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n let cardTemp = 0;\n let valnum = '';\n for (let i = 0; i < 17; i++) cardTemp += card.substr(i, 1) * arrInt[i];\n\n valnum = arrCh[cardTemp % 11];\n if (valnum === card.substr(17, 1)) return true;\n\n return false;\n }\n return false;\n};\n\nconst htValidate = {\n isLength: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language, max = 30 } = rule;\n const len = calLength(value);\n if (len > max) callback(new Error(infoMsg.maxLen(language, max)));\n else callback();\n }\n },\n isDouble: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const reg = /^(-)?\\d+(\\.\\d+)?$/;\n const { language, decimal = 2 } = rule;\n if (!reg.test(value)) callback(new Error(infoMsg.double(language)));\n else if (checkDecimal(value, decimal)) callback();\n else callback(new Error(infoMsg.decimal(language, decimal)));\n }\n },\n isIdcard: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // 校验长度\n const reg = /(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/;\n if (!reg.test(value)) callback(new Error(infoMsg.idCard(language)));\n else if (checkProvince(value) === false)\n // 检查省份\n callback(new Error(infoMsg.idCard(language)));\n else if (checkBirthday(value) === false)\n // 校验生日\n callback(new Error(infoMsg.idCard(language)));\n else if (checkParity(value) === false)\n // 检验位的检测\n callback(new Error(infoMsg.idCard(language)));\n else callback();\n }\n },\n\n isCarno: (rule, value, callback) => {\n const { language } = rule;\n if (value === '' || value === undefined || value == null) return callback();\n else if (value.length === 7) {\n const pattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;\n if (!pattern.test(value)) callback(new Error(infoMsg.carNo(language)));\n else return callback();\n } else {\n const pattern2 = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DABCEFGHJK][A-HJ-NP-Z0-9][0-9]{4}$))/;\n if (!pattern2.test(value)) callback(new Error(infoMsg.carNo(language)));\n else return callback();\n }\n },\n\n isMoney: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return callback();\n else {\n const { language, max } = rule;\n // eslint-disable-next-line no-useless-escape\n const pattern = /^[\\-\\+]?(([1-9]\\d*)|0)(\\.\\d{1,2})?$/;\n const val = value + '';\n // var rv = val.replace(/[,]/g, '');\n if (!pattern.exec(val)) callback(new Error(infoMsg.money(language)));\n else if (val.indexOf('.') > 0)\n if (val.split('.')[0].length > max - 3)\n // 校验整数位格式只能是maxLength -3\n callback(new Error(infoMsg.moneyMax(language, max - 3)));\n else return callback();\n else if (value.length > max - 3) callback(new Error(infoMsg.moneyMax(language, max - 3)));\n else return callback();\n }\n },\n\n isBigMoney: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // eslint-disable-next-line no-useless-escape\n const reg = /^[\\-\\+]?([0-9]\\d*|0|[1-9]\\d{0,2}(,\\d{3})*)(\\.\\d+)?$/;\n if (!reg.test(value)) callback(new Error(infoMsg.money(language)));\n else callback();\n }\n },\n\n isLetter: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^[A-Za-z]+$/;\n if (!reg.test(value)) callback(new Error(infoMsg.letter(language)));\n else callback();\n }\n },\n\n isNumber: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^\\+?[0-9][0-9]*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.number(language)));\n else callback();\n }\n },\n\n isNumber0: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^\\+?[1-9][0-9]*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.number0(language)));\n else callback();\n }\n },\n\n isNumberLetter: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^([a-z]|[A-Z]|[ ]|[(]|[)]|[-]|[_]|[*]|[.]|[,]|[,]|[0-9]){0,200}$/;\n if (!reg.test(value)) callback(new Error(infoMsg.numberLetter(language)));\n else callback();\n }\n },\n\n isName: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^[a-zA-Z0-9-_. \\u4E00-\\u9FA5]{0,60}$/;\n if (!reg.test(value)) callback(new Error(infoMsg.name(language)));\n else callback();\n }\n },\n\n isPhone: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const reg = /^1([38][0-9]|4[014-9]|[59][0-35-9]|6[2567]|7[0-8])\\d{8}$/;\n if (!reg.test(value)) {\n const { language = 'zh-CN' } = rule;\n callback(new Error(infoMsg.phone(language)));\n } else callback();\n }\n },\n\n isEmail: (rule, value, callback) => {\n // eslint-disable-next-line no-useless-escape\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // eslint-disable-next-line no-useless-escape\n const reg = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n if (!reg.test(value)) callback(new Error(infoMsg.email(language)));\n else callback();\n }\n },\n\n isTelephone: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /0\\d{2}-\\d{7,8}/;\n if (!reg.test(value)) callback(new Error(infoMsg.telephone(language)));\n else callback();\n }\n },\n\n isPhoneTel: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^((0\\d{2,3}-\\d{7,8})|(1([38][0-9]|4[014-9]|[59][0-35-9]|6[2567]|7[0-8])\\d{8}))$/;\n if (!reg.test(value)) callback(new Error(infoMsg.phoneTel(language)));\n else callback();\n }\n },\n\n isIp: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/;\n if (!reg.test(value)) callback(new Error(infoMsg.ip(language)));\n else callback();\n }\n },\n\n isUrl: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg =\n /^(https?|ftp):\\/\\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.?(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\\/($|[a-zA-Z0-9.,?'\\\\+&%$#=~_-]+))*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.url(language)));\n else callback();\n }\n },\n\n isVin: (rule, value, callback) => {\n const { language } = rule;\n const reg = /^[A-Z0-9]+$/;\n if (value === '' || value === undefined || value == null) callback();\n else if (value.length !== 8 && value.length !== 17) callback(new Error(infoMsg.vin(language)));\n else if (!reg.test(value)) callback(new Error(infoMsg.vin(language)));\n else callback();\n },\n};\n\nexport default htValidate;\n","<!--\n * @title: form component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:01:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 09:26:28\n * @version: 1.1.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { useBridgeI18n } from '@@/bridge';\n import { GvCascader } from '@@/GvCascader';\n import { GvDatePicker } from '@@/GvDatePicker';\n import { GvDivider } from '@@/GvDivider';\n import { GvInput } from '@@/GvInput';\n import { GvInputNumber } from '@@/GvInputNumber';\n import { GvSelect } from '@@/GvSelect';\n import { GvSwitch } from '@@/GvSwitch';\n import { GvTimePicker } from '@@/GvTimePicker';\n import { addClass, dateFormatConfig, hasScrollbar, removeClass, sleep, toHump } from '@@/utils';\n import gvValidate from '@@/utils/gv.validate';\n import { ElCol, ElForm, ElFormItem, ElRadio, ElRadioButton, ElRadioGroup, ElRow, ElTooltip, useGlobalConfig, type ComponentSize, type FormInstance, type FormItemRule } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, nextTick, onMounted, provide, ref, Transition, unref, watch, type PropType, type VNode } from 'vue';\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('form');\n\n export default defineComponent({\n name: 'GvForm',\n props: {\n refForm: {\n type: String,\n required: true,\n },\n divider: {\n type: String,\n required: false,\n default: undefined,\n },\n isDivider: {\n type: Boolean,\n required: false,\n default: true,\n },\n formList: {\n type: Array as PropType<FormItem[]>,\n required: true,\n default: () => [],\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: undefined,\n },\n labelWidth: {\n type: [Number, String] as PropType<number | string>,\n default: 100,\n },\n formStyle: {\n // 响应式布局 使用该参数定义width\n type: [Object],\n required: false,\n default: () => {},\n },\n scroller: {\n // 是否带有滚动条\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots, expose }) {\n const searchFieldsCollapsed = ref(true); // 查询 form 默认折叠超出行数字段\n // @provide\n provide('refForm', props.refForm);\n provide('formList', props.formList);\n provide('searchFieldsCollapsed', searchFieldsCollapsed);\n\n // @data\n const appStore = useAppStore();\n const userStore = useUserStore();\n const { t } = useBridgeI18n();\n\n const originFormList = ref([]);\n const instance = getCurrentInstance ? getCurrentInstance() : ({ parent: null } as any);\n\n const formRefs = ref<Record<string, FormInstance | null>>({}); // 表单实例引用,默认空对象\n const formElRef = ref<FormInstance | null>(null); // ElForm 元素引用\n\n const setFormRef = (el: FormInstance | null) => {\n formElRef.value = el;\n if (el && props.refForm) formRefs.value[props.refForm] = el;\n };\n const globalSize = useGlobalConfig('size');\n const rootNodeStyle = ref({}); // form组件根节点div样式\n const isShow = ref(true); // form表单show状态,默认显示\n const rules = ref({}); // 表单校验规则,默认空对象\n const isEditContainer = ref(false); // 是否是editContainer标签内,默认false\n const sMaxHeight = ref(0); // 表单最大高度,默认0\n const isScrollbar = ref(false); // 是否dialog中有滚动条\n const isAnchor = ref(false); // 是否锚点中列表\n const model = ref({}); // 表单数据,默认空对象\n const isDialog = ref(false); // 是否是dialog中form表单,默认false\n const colSpanNums = ref(0); // 根据form宽度或屏幕宽度计算显示列数,默认0\n const formType = ref('s'); // form类型:查询form:s、表单form:e\n const styles = ref({}); // form表单style样式,默认空对象\n\n // @computed\n const formSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const labelPosition = computed(() => appStore.labelPosition); // 表单label位置\n const searchDivider = computed(() => appStore.searchDivider); // search divider show,default: true\n const dict = computed<DicItems>(() => appStore.getDict); // 字典数据\n const dictCache = computed(() => userStore.dictCache); // 字典缓存\n\n // @exposed\n expose({\n originFormList,\n setFormRef,\n });\n // method\n const getLanguage = (lang: string, x: any) => {\n let v = '';\n switch (lang) {\n case 'zh-CN':\n v = x.t;\n break;\n case 'en':\n v = x.e;\n break;\n case 'l1':\n v = x.l1;\n break;\n case 'l2':\n v = x.l2;\n break;\n default:\n v = x.t;\n break;\n }\n if (!v) v = x.t;\n return v;\n };\n /**\n * @todo: set divider show status\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 18:12:34\n * @param {*} show\n */\n const setDividerShow = (show: boolean) => {\n isShow.value = show;\n };\n\n const getEditBar = computed(() => {\n if (slots.editbar?.())\n return (\n <ElRow\n ref-form={props.refForm}\n class=\"gv-form-editbar\">\n {slots.editbar?.()}\n </ElRow>\n );\n else return null;\n });\n\n const getDivider = computed(() => {\n let dividerRender: VNode | null = null;\n if (searchDivider.value !== false) {\n let dividerTitle: string;\n if (props.divider) dividerTitle = props.divider;\n else dividerTitle = t('common.dividerTitle');\n if (props.isDivider)\n dividerRender = (\n <GvDivider\n label={dividerTitle}\n target={props.refForm}\n visible={isShow.value}\n onSetDividerShow={setDividerShow}\n />\n );\n }\n\n return dividerRender;\n });\n\n /**\n * @todo: get dic item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 18:13:06\n * @param {*} src\n */\n const getDictItems = (src: string): DicItem[] => {\n let ret = [] as DicItem[];\n const dictCacheTmp: DicItem[] | undefined = dictCache.value?.[src];\n if (dictCacheTmp) ret = dictCacheTmp;\n else {\n // 生成字典列表\n const dictTmp: DicItem[] | undefined = dict.value[src];\n if (dictTmp) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dictTmp;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n\n ret = dictTmp;\n }\n }\n return ret;\n };\n /**\n * @todo: generate form item rules\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 20:31:59\n * @param {*} _item\n */\n const getItemRules = (_item: FormItem): FormItemRule[] => {\n const rules: FormItemRule[] = [];\n const format: FormItemFormat | undefined = _item.format;\n // 富文本不校验\n if (_item.type === 'richtext') return rules;\n if (!format) return rules;\n // ========== 必填校验 ==========\n const requiredFlag = Number(format[0]);\n if (requiredFlag === 1 && !_item.hidden)\n rules.push({\n required: true,\n message: `${t('common.pleaseInput')} ${_item.label ?? ''}`,\n trigger: 'blur',\n });\n // ========== 自定义校验 ==========\n let validateKey = 'isAny';\n if (format[1]) validateKey = toHump(String(format[1]));\n const maxLen = Number(format[2] ?? 30);\n const decimal = format.length >= 4 ? Number(format[3] ?? 0) : 0;\n const validator = gvValidate[validateKey as keyof typeof gvValidate];\n if (validator && validateKey !== 'isAny')\n rules.push({\n validator: validator,\n trigger: ['change', 'blur'],\n // Element Plus 透传参数(自定义字段)\n language: userStore.language,\n max: maxLen,\n decimal,\n } as FormItemRule);\n // ========== 长度校验 ==========\n const excluded = ['isDate', 'isDateTime', 'isTime', 'isDic'];\n if (format[2] && !excluded.includes(validateKey))\n rules.push({\n language: userStore.language,\n max: maxLen,\n validator: gvValidate['isLength'],\n trigger: ['change', 'blur'],\n } as FormItemRule);\n return rules;\n };\n const handleRadioInput = (event: any, field: string, val, formVal, disabled) => {\n if (disabled) return;\n if (val === formVal) {\n event.preventDefault();\n model.value[field] = '';\n }\n };\n const handleDateRange2Focus = (vm: any) => {\n sleep(100).then(() => {\n addClass(vm.$el.closest('.gv-daterange__single'), 'is-active');\n });\n };\n const handleDateRange2Blur = (vm: any) => {\n removeClass(vm.$el.closest('.gv-daterange__single'), 'is-active');\n };\n\n /**\n * @todo: 日期范围选择,单独选择开始日期、结束日期选择回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 19:49:03\n * @param {*} type\n * @param {*} val\n * @param {*} field\n */\n const handleDateRange2Change = (type: string, val: string | Date, field: string): void => {\n // 校验开始日期和结束日期大小\n if (type === 's')\n if (val && model.value[field + '-end']) {\n const endTime = new Date(model.value[field + '-end'] as string).getTime();\n const startTime = new Date(val).getTime();\n if (startTime >= endTime) {\n model.value[field + '-end'] = '';\n model.value[1] = 'null';\n }\n }\n\n if (type === 'e')\n if (val && model.value[field + '-start']) {\n const startTime = new Date(model.value[field + '-start'] as string).getTime();\n const endTime = new Date(val).getTime();\n if (startTime >= endTime) {\n model.value[field + '-start'] = '';\n // console.log(this.model);\n model.value[1] = 'null';\n }\n }\n\n if (!field) return;\n const datePicker = model.value[field];\n let dateArr = new Array(2);\n if (Array.isArray(datePicker)) {\n if (type === 's') datePicker[0] = val;\n else datePicker[1] = val;\n if (!datePicker[0]) datePicker[0] = 'null';\n if (!datePicker[1]) datePicker[1] = 'null';\n model.value[field] = datePicker.join(',');\n } else {\n if (datePicker && typeof datePicker === 'string') dateArr = datePicker.split(',');\n dateArr[0] = model.value[field + '-start'];\n dateArr[1] = model.value[field + '-end'];\n if (!dateArr[0]) dateArr[0] = 'null';\n if (!dateArr[1]) dateArr[1] = 'null';\n model.value[field] = dateArr.join(',');\n }\n };\n /**\n * @todo: switch框字典change回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-12-21 16:47:22\n * @param {*} val\n * @param {*} field\n * @param {*} dicType\n * @param {*} cb\n */\n const handleSwitchDictChange = async (val, field, dicType, cb) => {\n switch (dicType) {\n case 'yxzt':\n if (val === true) model.value[field] = '100201';\n else model.value[field] = '100202';\n break;\n case 'sf':\n if (val === true) model.value[field] = '100101';\n else model.value[field] = '100102';\n break;\n }\n if (cb)\n try {\n await cb(val, field, dicType);\n } catch (error) {\n console.log(error);\n }\n };\n /**\n * @todo: radio框字典change回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-22 15:50:15\n * @param {*} val\n * @param {*} field\n * @param {*} dicType\n * @param {*} cb\n */\n const handleRadioDictChange = async (val, field, dicType: string | undefined, cb: Fn | undefined) => {\n if (cb)\n try {\n await cb(val, field, dicType);\n } catch (error) {\n console.log(error);\n }\n };\n /**\n * @todo: 查询 form 列默认折叠 class(渲染时绑定,避免重渲染丢失)\n */\n const getSearchColClass = (index: number) => {\n if (formType.value !== 's' || !searchFieldsCollapsed.value) return undefined;\n const slot = slots.default?.()?.[0];\n const slotProps = slot?.props as Recordable | undefined;\n if (slotProps?.expand === false) return undefined;\n const showDefaultRow = appStore.searchFormRows === 1 ? 4 : 8;\n if (index >= showDefaultRow - 1) return 'gv-form-col--hidden';\n return undefined;\n };\n\n /**\n * @todo: render form item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 17:54:23\n * @param {*} _item\n * @param {*} _index\n */\n const renderFormItem = (_item: FormItem, _index: number): VNode => {\n const {\n type = 'text',\n label,\n field,\n hidden = false,\n disabled,\n format = [],\n placeholder,\n readonly = false,\n dateType = 'date',\n dicType,\n filtercode,\n colspan = 1,\n disabledDateFunc,\n disabledDate,\n editable = true,\n multiple = false,\n showLabel,\n size = formSize.value,\n visible = true,\n // offset,\n createRow = false, // 是否创建新row,\n dicRemote,\n cb, // 回调方法\n clear, // 清空回调\n rows, // textarea\n autosize, // textarea\n min, // input-number\n max, // input-number\n step, // input-number\n precision, // input-number\n blur = () => {},\n suffixIcon, // 后缀icon\n prefixIcon, // 前缀icon\n focus = () => {},\n change = () => {},\n defaultTime, // 时间的默认能够选择的时间\n isreload = true, // 表选字典是否重新加载\n options = [],\n lazy = false, // cascader是否懒加载\n lazyLoad = () => {}, // cascader懒加载方法\n render, // 自定义form样式\n } = _item;\n let renders;\n const isHidden = hidden === true;\n const maxLen = format[2] || 30;\n let cType = type;\n // const dateFormatConfig = dateFormatConfig;\n const validateRule = toHump(String(format[1] || ''));\n let sDateType = dateType;\n let isRange = false;\n let dateFormat = dateFormatConfig.date.valueFormat; // 日期显示格式\n let valueFormat = dateFormatConfig.date.valueFormat; // 日期绑定值格式\n if (sDateType !== 'daterange' && sDateType !== 'datetimerange' && sDateType !== 'daterange2' && sDateType !== 'datetimerange2') {\n if (validateRule === 'isDate') cType = 'date';\n if (validateRule === 'isDateTime') {\n cType = 'datetime';\n sDateType = 'datetime';\n }\n if (validateRule === 'isTime') cType = 'time';\n }\n\n if (sDateType === 'timerange') isRange = true;\n\n let ph = placeholder;\n let startPh = t('common.startDate');\n let endPh = t('common.endDate');\n // todo: 响应式布局计算\n // const cols = { span: colspan, offset: (_index) * 6 };\n let cols = colspan > 4 ? 4 : colspan; // fixme: 最大值不能超过4 2022-04-07\n if (sDateType === 'datetimerange' || sDateType === 'datetimerange2') cols = 2;\n // update: 对于多选字典,默认占用列数为2列 2023-02-18\n if (multiple === true && colspan === undefined) cols = 2;\n let rangeSeparator;\n if (sDateType === 'timerange' || sDateType === 'daterange2' || sDateType === 'datetimerange2') rangeSeparator = t('common.until');\n const colSpanXs = 24;\n let colSpanSm = 12;\n let colSpanMd = 8;\n\n let colSpanLg = 6;\n if (isDialog.value === true) colSpanLg = 8;\n let colSpanXl = 4;\n if (isDialog.value === true) colSpanXl = 6;\n if (colSpanNums.value !== 0) {\n if (colSpanNums.value === 12) cols = colspan > 2 ? 2 : colspan;\n if (colSpanNums.value === 8) cols = colspan > 3 ? 3 : colspan;\n if (colSpanNums.value === 6 || colSpanNums.value === 4) cols = colspan > 4 ? 4 : colspan;\n colSpanSm = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanMd = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanLg = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanXl = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n } else {\n colSpanSm = cols * colSpanSm > 24 ? 24 : cols * colSpanSm;\n colSpanMd = cols * colSpanMd > 24 ? 24 : cols * colSpanMd;\n colSpanLg = cols * colSpanLg > 24 ? 24 : cols * colSpanLg;\n colSpanXl = cols * colSpanXl > 24 ? 24 : cols * colSpanXl;\n }\n let decimal = 2;\n let v = '';\n if (!ph)\n switch (validateRule) {\n case 'isMoney':\n ph = '0.00';\n break;\n case 'isBigMoney':\n ph = '0,000.00';\n break;\n case 'isEmail':\n ph = 'xx@xx.com';\n break;\n case 'isDouble':\n if (format.length >= 4) decimal = format[3] || 2;\n while (decimal > 0) {\n v = '0' + v;\n decimal--;\n }\n ph = '00.' + v;\n break;\n case 'isDate':\n if (sDateType === 'week') {\n ph = t('common.selectWeek'); // dateFormatConfig.week.placeholder;\n dateFormat = dateFormatConfig.week.dateFormat;\n } else if (sDateType === 'month' || sDateType === 'monthrange') {\n ph = t('common.selectMonth'); // dateFormatConfig.month.placeholder;\n startPh = ph;\n endPh = ph;\n dateFormat = dateFormatConfig.month.dateFormat;\n valueFormat = dateFormatConfig.month.valueFormat;\n } else if (sDateType === 'year') {\n ph = t('common.selectYear'); // dateFormatConfig.year.placeholder\n dateFormat = dateFormatConfig.year.dateFormat;\n valueFormat = dateFormatConfig.year.valueFormat;\n } else if (sDateType === 'daterange' || sDateType === 'daterange2') ph = t('common.selectDate');\n break;\n case 'isDateTime':\n if (sDateType === 'datetimerange' || sDateType === 'datetimerange2') {\n startPh = t('common.startTime');\n endPh = t('common.endTime');\n }\n ph = t('common.selectTime'); // dateFormatConfig.datetime.placeholder;\n dateFormat = dateFormatConfig.datetime.dateFormat;\n valueFormat = dateFormatConfig.datetime.valueFormat;\n break;\n }\n let editables = editable;\n // 如果是带有禁用日期的,不可编辑,防止输入不一致问题\n if (disabledDateFunc || disabledDate) editables = false;\n let ops;\n let isTableDic = false;\n if (type === 'dic')\n if (dicType) {\n ops = getDictItems(dicType);\n if (dicType.indexOf('t#') >= 0) isTableDic = true;\n }\n\n // 设置label是否显示\n let sLabel = label;\n if (formType.value === 's') {\n sLabel = appStore.searchFormLabel === true ? label : undefined;\n if (appStore.searchFormLabel !== true) ph = label;\n }\n\n const switchDefaultVal = ref('');\n const searchColClass = getSearchColClass(_index);\n switch (cType) {\n case 'blank':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n prop={field}\n key={field}>\n <div class=\"el-input__inner gv-form__item__inner-blank\">&nbsp;</div>\n </ElFormItem>\n </ElCol>\n );\n break;\n case 'divider':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={24}\n sm={24}\n md={24}\n lg={24}\n xl={24}>\n <GvDivider label={sLabel} />\n </ElCol>\n );\n break;\n case 'render':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n {render?.(model.value[field], field)}\n </ElFormItem>\n </ElCol>\n );\n break;\n case 'text':\n renders = visible ? (\n // span={this.colSpan} {span:16,offset:4}\n // xs={24} sm={12} md={8} lg={6} xl={4}\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInput\n type=\"text\"\n vref={field}\n name={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n maxlength={maxLen}\n size={size as ComponentSize}\n placeholder={ph}\n visible={visible}\n readonly={readonly}\n onBlur={blur}\n onFocus={focus}\n suffixIcon={suffixIcon}\n prefixIcon={prefixIcon}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'textarea':\n renders = visible ? (\n // span={this.colSpan} {span:16,offset:4}\n // xs={24} sm={12} md={8} lg={6} xl={4}\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInput\n vref={field}\n name={field}\n type=\"textarea\"\n v-model={model.value[field]}\n value={model.value[field]}\n size={size as ComponentSize}\n disabled={disabled}\n maxlength={maxLen}\n placeholder={ph}\n visible={visible}\n readonly={readonly}\n rows={rows}\n autosize={autosize}\n onBlur={blur}\n onFocus={focus}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'time':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvTimePicker\n v-model={model.value[field]}\n vref={field}\n name={field}\n disabled={disabled}\n editable={editables}\n placeholder={ph}\n isRange={isRange}\n rangeSeparator={rangeSeparator}\n // format={dateFormat}\n // value-format={valueFormat}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'date':\n case 'datetime':\n if (sDateType !== 'daterange2' && sDateType !== 'datetimerange2')\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <GvDatePicker\n v-model={model.value[field]}\n modelValue={model.value[field]}\n vref={field}\n data-name={field}\n data-align={'right'}\n type={sDateType}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={disabledDate}\n editable={editables}\n placeholder={ph}\n default-time={defaultTime}\n startPlaceholder={startPh}\n endPlaceholder={endPh}\n data-visible={visible}\n onChange={change}\n />\n </ElFormItem>\n </ElCol>\n ) : null;\n else\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <div\n class=\"gv-daterange__single\"\n style=\"width: 100%;\"\n onFocus={() => void 0}>\n <GvDatePicker\n v-model={model.value[field + '-start']}\n modelValue={model.value[field + '-start']}\n vref={field + '-start'}\n data-name={field + '-start'}\n data-align={'right'}\n type={sDateType === 'daterange2' ? 'date' : 'datetime'}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={disabledDate}\n editable={editables}\n placeholder={startPh}\n default-time={defaultTime}\n data-visible={visible}\n style={{ width: '96% !important' }}\n class=\"gv-datepicker-range-start\"\n onChange={(val) => handleDateRange2Change('s', val, field)}\n onFocus={(vm) => handleDateRange2Focus(vm)}\n onBlur={(vm) => handleDateRange2Blur(vm)}\n />\n <span class=\"gv-daterange__single-separator\">{rangeSeparator}</span>\n <GvDatePicker\n v-model={model.value[field + '-end']}\n modelValue={model.value[field + '-end'] as string}\n vref={field + '-end'}\n data-name={field + '-end'}\n data-align={'right'}\n type={sDateType === 'daterange2' ? 'date' : 'datetime'}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={(date) => {\n if (sDateType === 'daterange2') return date.getTime() <= new Date(model.value[field + '-start']).getTime() - 8.64e7;\n else return date.getTime() <= new Date(model.value[field + '-start']).getTime() - 8.64e7;\n }}\n editable={editables}\n placeholder={endPh}\n default-time={defaultTime}\n data-visible={visible}\n class=\"gv-datepicker-range-end\"\n onChange={(val) => handleDateRange2Change('e', val, field)}\n onFocus={(vm) => handleDateRange2Focus(vm)}\n onBlur={(vm) => handleDateRange2Blur(vm)}\n />\n </div>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'dic':\n switch (dicType) {\n case 'yxzt':\n if (typeof model.value[field] === 'object') switchDefaultVal.value = model.value[field].value ? model.value[field].value : '100201';\n else switchDefaultVal.value = model.value[field] ? model.value[field] : '100201';\n break;\n case 'sf':\n if (typeof model.value[field] === 'object') switchDefaultVal.value = model.value[field].value ? model.value[field].value : '100101';\n else switchDefaultVal.value = model.value[field] ? model.value[field] : '100101';\n break;\n }\n if (isTableDic === false && multiple === false && formType.value === 'e' && ops && ops.length === 2 && (dicType === 'sf' || dicType === 'yxzt'))\n // 当是编辑form并且字典内容只有2个以内时\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <GvSwitch\n value={switchDefaultVal.value}\n columnKey={field}\n disabled={disabled}\n target={dicType === 'yxzt' ? '100201' : '100101'}\n onChange={(val) => handleSwitchDictChange(val, field, dicType, cb)}></GvSwitch>\n </ElFormItem>\n </ElCol>\n ) : null;\n else if (isTableDic === false && multiple === false && formType.value === 'e' && ops && ops.length === 2) {\n const radioValue = ref(model.value[field].value ? model.value[field].value : model.value[field]);\n // 当是编辑form并且字典内容只有2个以内时\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElRadioGroup\n v-model={radioValue.value}\n onChange={(val) => handleRadioDictChange(val, field, dicType, cb)}>\n {ops.map((x) =>\n format[0] === 0 ? (\n <ElRadio\n value={x.c}\n disabled={disabled}\n onChange={(event) => handleRadioInput(event, field, x.c, model.value[field], disabled)}>\n {getLanguage(userStore.language, x)}\n </ElRadio>\n ) : (\n <ElRadioButton\n value={x.c}\n disabled={disabled}>\n {getLanguage(userStore.language, x)}\n </ElRadioButton>\n ),\n )}\n </ElRadioGroup>\n </ElFormItem>\n </ElCol>\n ) : null;\n } else {\n // form dic\n let v: string | undefined;\n const vv = model.value[field];\n if (typeof vv === 'object')\n if (Array.isArray(vv))\n vv.forEach((x, index) => {\n if (x)\n if (v)\n if (x.label) v += ',' + x.label;\n else v += ',' + (showLabel?.[index] ? showLabel[index] : x);\n else if (x.label) v = x.label;\n else v = showLabel?.[index] ?? x;\n });\n else {\n if (vv) v = vv.label;\n }\n else v = vv;\n let toolText = v; // 提示的文本\n if (showLabel) toolText = showLabel as string;\n\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!v}\n content={toolText ? toolText + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvSelect\n v-model={model.value[field]}\n value={model.value[field]}\n label={label}\n showLabel={showLabel}\n vref={field}\n multiple={multiple}\n dicType={dicType ?? ''}\n size={size as ComponentSize}\n disabled={disabled}\n placeholder={ph}\n filtercode={filtercode}\n visible={visible}\n dicRemote={typeof dicRemote === 'function' ? dicRemote : undefined}\n cb={cb}\n clear={clear}\n isreload={isreload}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n }\n\n break;\n case 'number':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInputNumber\n vref={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n placeholder={ph}\n visible={visible}\n size={size as ComponentSize}\n min={min}\n max={max}\n step={step}\n precision={precision}\n onBlur={blur}\n onFocus={focus}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'layer':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvCascader\n vref={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n placeholder={ph}\n size={size as ComponentSize}\n lazy={lazy}\n multiple={multiple}\n lazyLoad={lazyLoad}\n visible={visible}\n options={options}\n onBlur={blur}\n onChange={change}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n default:\n break;\n }\n if (createRow === true) return <el-row>{renders}</el-row>;\n else return renders;\n };\n\n const getItems = computed(() => {\n const res: VNode[] = [];\n props.formList.forEach((item: FormItem, index: number) => {\n res.push(renderFormItem(item, index));\n });\n return res;\n });\n\n // todo: 计算最大高度 需要增加弹出框判断逻辑,\n const getMaxHeight = (sRootEl: HTMLElement | undefined) => {\n if (isEditContainer.value) sMaxHeight.value = 0;\n else if (props.scroller === false) sMaxHeight.value = 0;\n else if (!isScrollbar.value)\n if (!isAnchor.value) {\n if (sRootEl && typeof sRootEl.closest === 'function') {\n const tabPane = sRootEl?.closest('.el-tabs') as HTMLElement | undefined;\n if (tabPane) {\n const offsetTop = tabPane.classList.contains('el-tabs--left') ? 235 : 295;\n sMaxHeight.value = document.documentElement.clientHeight - (sRootEl?.offsetTop || 0) - (tabPane?.offsetTop || 0) - offsetTop;\n } else {\n const dialog = sRootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = sRootEl?.closest('.gv-drawer');\n if (!drawer) sMaxHeight.value = document.documentElement.clientHeight - sRootEl.offsetTop - 75;\n // console.log(this.sMaxHeight);\n } else sMaxHeight.value = document.documentElement.clientHeight - sRootEl.offsetTop - 265;\n }\n }\n } else sMaxHeight.value = 0;\n else sMaxHeight.value = 0;\n };\n\n const clearFormValidate = () => {\n formRefs.value[props.refForm]?.clearValidate();\n };\n\n /**\n * @todo: 设置form表单样式\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-07 19:35:14\n */\n const setFormStyle = () => {\n let formStyle1;\n // console.log(props.formStyle);\n if (props.formStyle) {\n formStyle1 = props.formStyle;\n let width = formStyle1.width || 0;\n let height = formStyle1.height || 0;\n // fixme: 判断width是否是百分比\n // if (width.lastIndexOf('%') !== -1)\n // throw new Error('HtForm - [form-style] : 不支持width定义百分比');\n // if (height.lastIndexOf('%') !== -1)\n // throw new Error('HtForm - [form-style] : 不支持height定义百分比');\n // width = Math.round(this.getParentWidth * (parseInt(width) / 100) * 100) / 100;\n\n if (width.lastIndexOf('%') === -1) {\n // width固定值\n width = parseInt(width);\n if (width !== 0) {\n if (width < 762)\n // xs\n colSpanNums.value = 24;\n else if (width < 992)\n // sm\n colSpanNums.value = 12;\n else if (width < 1200)\n // md\n colSpanNums.value = 8;\n else if (width < 1920)\n // lg\n colSpanNums.value = 6;\n else colSpanNums.value = 4;\n\n rootNodeStyle.value['width'] = width + 'px';\n }\n if (height !== '100%' && height !== 0) {\n height = parseInt(height);\n rootNodeStyle.value['height'] = height + 'px';\n }\n } else rootNodeStyle.value['width'] = width;\n } else {\n const rootEl = instance?.vnode?.el as HTMLElement;\n const clientWidth = rootEl?.clientWidth;\n // console.log(clientWidth);\n if (clientWidth !== 0) {\n if (clientWidth < 762)\n // xs\n colSpanNums.value = 24;\n else if (clientWidth < 992)\n // sm\n colSpanNums.value = 12;\n else if (clientWidth < 1200)\n // md\n colSpanNums.value = 8;\n else if (clientWidth < 1920)\n // lg\n colSpanNums.value = 6;\n else colSpanNums.value = 4;\n\n rootNodeStyle.value['width'] = clientWidth + 'px';\n }\n }\n styles.value = formStyle1;\n };\n\n /**\n * @todo: form init\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 07:47:06\n * @param {*} type\n */\n const init = async (type: string) => {\n // alert(type);\n const formModel = {};\n const formRule = {};\n props.formList.forEach((item: FormItem) => {\n let v;\n if (type === 'create') v = item.value;\n else v = model.value[item.field] === undefined ? item.value : model.value[item.field];\n formModel[item.field] = v;\n if (item.dateType === 'daterange2' || item.dateType === 'datetimerange2')\n if (Array.isArray(v)) {\n formModel[item.field + '-start'] = v[0] === 'null' ? undefined : v[0];\n formModel[item.field + '-end'] = v[1] === 'null' ? undefined : v[1];\n } else {\n formModel[item.field + '-start'] = '';\n formModel[item.field + '-end'] = '';\n }\n\n formRule[item.field] = getItemRules(item);\n // 设置 value属性为响应式数据\n item.value = v;\n });\n // 设置form model\n model.value = formModel;\n if (type === 'create') rules.value = formRule;\n else if (type === 'watch') rules.value = formRule;\n\n await nextTick();\n setFormStyle();\n // console.log(formRefs.value);\n clearFormValidate();\n };\n\n const difference = (newVal, oldVal) => {\n let diff = false;\n for (const key in newVal) {\n const fieldObj = newVal[key];\n const oldObj = oldVal[key];\n if (fieldObj === undefined) continue;\n else if (!oldObj) {\n diff = true;\n break;\n } else {\n const fieldObjKeys = Object.keys(fieldObj);\n for (const key2 in fieldObjKeys)\n if (\n fieldObjKeys[key2] === 'label' ||\n fieldObjKeys[key2] === 'hidden' ||\n fieldObjKeys[key2] === 'disabled' ||\n fieldObjKeys[key2] === 'format' ||\n fieldObjKeys[key2] === 'readonly' ||\n fieldObjKeys[key2] === 'filtercode' ||\n fieldObjKeys[key2] === 'multiple' ||\n fieldObjKeys[key2] === 'showLabel' ||\n fieldObjKeys[key2] === 'visible'\n )\n if (fieldObjKeys[key2] === 'format') {\n if (fieldObj[fieldObjKeys[key2]][0] !== oldObj[fieldObjKeys[key2]][0]) {\n diff = true;\n break;\n }\n if (fieldObj[fieldObjKeys[key2]][1] !== oldObj[fieldObjKeys[key2]][1]) {\n diff = true;\n break;\n }\n if (fieldObj[fieldObjKeys[key2]][2] !== oldObj[fieldObjKeys[key2]][2]) {\n diff = true;\n break;\n }\n // //if (!_.isEqual(fieldObj[fieldObjKeys[key2]], oldObj[fieldObjKeys[key2]])) {\n // diff = true;\n // break;\n // }\n } else if (fieldObj[fieldObjKeys[key2]] !== oldObj[fieldObjKeys[key2]]) {\n // console.log(key2);\n // console.log(fieldObj[fieldObjKeys[key2]]);\n // console.log(oldObj[fieldObjKeys[key2]]);\n diff = true;\n break;\n }\n }\n\n // if (!_.isEqual(newVal[key], oldVal[key]))\n }\n // console.log(diff);\n return diff;\n };\n\n // watch\n watch(\n () => props.formList,\n (nextProps, prevProps) => {\n // formList\n if (Array.isArray(nextProps) && Array.isArray(prevProps) && nextProps.length !== prevProps.length) init('watch');\n else if (difference(nextProps, originFormList.value)) init('watch');\n },\n {\n deep: true,\n },\n );\n watch(\n () => sMaxHeight.value,\n (newVal) => {\n // sMaxHeight\n if (isScrollbar.value === false)\n if (isAnchor.value === false) sMaxHeight.value = newVal;\n else sMaxHeight.value = 0;\n else sMaxHeight.value = 0;\n },\n );\n\n // @created hook\n // console.log(slots.default);\n const firstSlot = slots.default?.()?.[0];\n if (typeof firstSlot?.type === 'object' && 'name' in firstSlot.type && firstSlot?.type?.name === 'GvSearchBar') {\n formType.value = 's';\n const slotProps = firstSlot.props as Recordable | undefined;\n if (slotProps?.expand === false) searchFieldsCollapsed.value = false;\n } else formType.value = 'e';\n // 解析formList\n originFormList.value = JSON.parse(JSON.stringify(props.formList));\n init('create');\n // 判断是否是dialog弹出框中的form\n const parentNode = instance?.parent;\n // console.log(parentNode.$?.type?.name);\n if (parentNode && parentNode.type?.name === 'ElDialog') isDialog.value = true;\n else isDialog.value = false;\n\n // @mounted hook\n onMounted(() => {\n nextTick(() => {\n // get root element\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n\n // 确保 rootEl 是 HTMLElement 并且有 closest 方法\n if (rootEl && typeof rootEl.closest === 'function') {\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n const dialogBody = rootEl.closest('.gv-drawer__body__inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n else {\n const dialogBody2 = rootEl.closest('.gv-dialog__body__inner');\n if (dialogBody2) isScrollbar.value = hasScrollbar(dialogBody2);\n }\n if (rootEl.closest('.gv-edit__container')) isEditContainer.value = true;\n\n // 计算maxheight;\n getMaxHeight(rootEl);\n\n window.addEventListener('resize', () => getMaxHeight(rootEl));\n }\n });\n });\n\n // @render\n return () => (\n <div\n class={prefixCls}\n style={{ ...rootNodeStyle }}>\n {getEditBar.value}\n {getDivider.value}\n <Transition name=\"el-zoom-in-top\">\n <div\n v-show={isShow.value}\n key=\"gv-form-body\"\n class={`${prefixCls}-collapse__inner`}>\n <ElForm\n ref={setFormRef}\n model={model.value}\n size={formSize.value}\n inline={false}\n label-position={labelPosition.value}\n label-width={`${props.labelWidth}px`}\n rules={rules.value}\n style={{\n ...styles.value,\n width: '100%',\n maxHeight: sMaxHeight.value === 0 ? undefined : sMaxHeight.value + 'px',\n }}>\n <ElRow\n ref-form={props.refForm}\n style={{ display: 'flex', flexWrap: 'wrap' }}>\n {getItems.value}\n {slots.default?.() && <div style={{ flex: 1, minWidth: 1 }}>{slots.default?.()}</div>}\n </ElRow>\n </ElForm>\n </div>\n </Transition>\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-form';\n .#{$prefixCls} {\n width: 100%;\n\n .#{$prefixCls}-form-editbar {\n // editbar bottom\n // border-bottom:1px solid #d9d9d9;\n // editbar top\n // border-top:1px solid #d9d9d9;\n // border-top: 1.5px solid var(--primaryColorHover, $primaryColorHover);\n padding: 0 0 2px;\n margin-top: -3px;\n }\n\n .#{$prefixCls}-collapse-wrap {\n overflow: hidden;\n }\n\n .#{$prefixCls}-collapse__inner {\n transform-origin: center top;\n }\n\n .el-form {\n overflow: hidden auto;\n }\n\n .el-col {\n min-height: 32px;\n margin-bottom: 12px;\n\n &[type='FIXED'] {\n height: 32px !important;\n }\n\n :deep(.el-form-item) {\n margin-bottom: 0;\n\n .el-form-item__label {\n height: 30px; // 32px\n padding-right: $modulePadding;\n font-size: $textSizeSecondary;\n font-weight: $fontWeight;\n line-height: 30px; // 32px\n\n .label-wrap {\n display: inline-block;\n max-width: calc(100% - 10px);\n\n .el-input__inner {\n padding: 0 8px;\n border-color: $borderColor;\n\n & + span.el-input__suffix {\n right: 0;\n }\n }\n }\n }\n\n .el-form-item__content {\n line-height: 29px;\n height: 29px;\n .el-radio-group {\n .el-radio-button--small .el-radio-button__inner {\n padding: 7px;\n }\n\n .el-radio__label {\n font-size: $appTextSize;\n }\n }\n\n .el-range-editor {\n width: 100%;\n }\n\n .el-input__prefix {\n left: 2px;\n }\n\n .#{$prefixCls}__item__inner-blank {\n width: 100%;\n height: 20px;\n line-height: 5px;\n border: 0;\n }\n\n // 日期范围选择\n .el-range-editor.el-input__inner {\n padding: 3px 5px;\n }\n\n // 日期范围选择\n .el-range__close-icon {\n width: 20px;\n }\n\n .gv-daterange__single {\n display: inline-flex !important;\n height: 32px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n\n &:focus,\n &.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n .el-input__prefix {\n left: 2px;\n }\n\n .el-input__suffix {\n right: 2px;\n }\n\n .el-input__inner {\n padding-right: 2px;\n padding-left: 25px;\n border: 0;\n }\n\n .gv-daterange__single-separator {\n height: 32px;\n font-size: $appTextSize;\n line-height: 32px;\n }\n }\n\n .el-form-item__error {\n margin-top: 2px;\n transform: scale(0.9);\n transform-origin: 0 50%;\n }\n }\n\n .el-select {\n width: 100%;\n\n .el-select__tags {\n height: 24px;\n overflow-y: auto;\n\n .el-select__input {\n height: inherit;\n padding-left: 15px;\n }\n }\n }\n\n .el-autocomplete {\n width: 100%;\n }\n\n .el-textarea {\n display: block;\n\n .el-textarea__inner {\n padding: 0 10px;\n\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n overflow-y: auto;\n font-family: inherit;\n }\n\n .el-input__count {\n right: 6px;\n line-height: 1;\n }\n }\n\n .el-input-number {\n width: 100%;\n\n .el-input__inner {\n text-align: left !important;\n }\n\n .el-input-number__increase:hover ~ .el-input .el-input__inner:not(.is-disabled),\n .el-input-number__decrease:hover ~ .el-input .el-input__inner:not(.is-disabled) {\n border-color: $borderColor;\n }\n }\n\n .desc-icon {\n padding: 6px;\n font-size: 18px;\n vertical-align: middle;\n }\n\n .desc-text {\n font-size: $textSizeSecondary;\n }\n\n &.is-required .el-form-item__label {\n // color: #f5222d;\n color: #606266;\n }\n }\n }\n .el-form--label-top {\n .el-form-item {\n .el-select,\n .el-input,\n .el-radio-group {\n width: 90% !important;\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvForm from './src/GvForm.vue';\nconst GvFormPlugin = {\n install(app: App): void {\n app.component(GvForm.name ?? 'GvForm', GvForm);\n },\n};\nexport default GvFormPlugin;\n\nexport { GvForm };\n","<!--\n * @title: collapsed sidebar component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-03 13:48:02\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 11:18:57\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { Expand, Fold } from '@element-plus/icons-vue';\n import { ElIcon } from 'element-plus';\n import { computed, onMounted, unref } from 'vue';\n import { propTypes } from '../../utils/gv.propTypes';\n\n defineOptions({\n name: 'GvHamburger', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('hamburger');\n\n const appStore = useAppStore();\n const collapse = computed(() => appStore.getCollapseMenus);\n\n // set quick keys\n\n // @method\n // load dict\n const loadDict = async () => {\n try {\n await appStore.loadAllDict();\n } catch {\n // empty\n }\n };\n // load division\n const loadDictDivision = async () => {\n try {\n await appStore.loadDictDivision();\n } catch {\n // empty\n }\n };\n\n const toggleCollapse = () => {\n const collapsed = unref(collapse);\n appStore.setCollapseMenus(!collapsed);\n };\n\n // @created\n // @mounted\n onMounted(async () => {\n // reload dict if needed\n const currentDict = appStore.dict;\n const currentReloadDict = appStore.isLoadDict;\n if (!currentDict || Object.keys(currentDict).length === 0) await loadDict();\n else if (+currentReloadDict === 1) await loadDict();\n const currentDictDivision = appStore.dictDivision;\n if (currentDictDivision && currentDictDivision.length === 0) await loadDictDivision();\n });\n</script>\n<template>\n <div\n :class=\"prefixCls\"\n @click=\"toggleCollapse\">\n <div class=\"trigger\">\n <ElIcon\n :size=\"20\"\n :class=\"`${prefixCls}__icon`\">\n <Expand\n v-if=\"!collapse\"\n :class=\"`${prefixCls}__icon`\"\n :style=\"{ color: color }\" />\n <Fold\n v-else\n :class=\"`${prefixCls}__icon`\"\n :style=\"{ color: color }\" />\n </ElIcon>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-hamburger';\n .#{$prefixCls} {\n position: relative;\n z-index: 3;\n line-height: $navHeadHeight;\n background-color: #fff;\n &:hover {\n background-color: rgb(0 0 0 / 3%);\n }\n .trigger {\n display: inline-block;\n line-height: 1px;\n cursor: pointer;\n transition: color 0.3s ease;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvHamburger from './src/GvHamburger.vue';\nconst GvHamburgerPlugin = {\n install(app: App): void {\n app.component(GvHamburger.name ?? 'GvHamburger', GvHamburger);\n },\n};\nexport default GvHamburgerPlugin;\n\nexport { GvHamburger };\n","<!--\n * @title: locale lang dropdown\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-03-25 11:43:51\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:09:46\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useLocale } from '@/hook/web/useLocale';\n import { useStyle } from '@/hook/web/useStyle';\n import { useLocaleStore } from '@/store/modules/locale';\n import { useUserStore } from '@/store/modules/user';\n import { computed, unref } from 'vue';\n import { useRouter } from 'vue-router';\n import { propTypes } from '../../utils/gv.propTypes';\n\n import { ElDropdown, ElDropdownItem, ElDropdownMenu } from 'element-plus';\n\n defineOptions({\n name: 'GvLangSelect', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n defineProps({\n className: propTypes.string.def(''),\n });\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('lang-select');\n\n const userStore = useUserStore();\n const localeStore = useLocaleStore();\n const langMap = computed(() => localeStore.getLocaleMap);\n const currentLang = computed(() => localeStore.getCurrentLocale);\n\n const router = useRouter();\n\n const handleSetLang = async (lang): Promise<void> => {\n if (lang === unref(currentLang).lang) return;\n\n const { switchLocale } = useLocale();\n userStore.setLanguage(lang);\n await switchLocale(lang);\n\n router.go(0);\n };\n</script>\n\n<template>\n <ElDropdown\n :class=\"prefixCls\"\n trigger=\"click\"\n class=\"international\"\n @command=\"handleSetLang\">\n <div>\n <GvIcon\n :class-name=\"`international-icon ${className}`\"\n icon-name=\"language\" />\n </div>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem\n v-for=\"item in langMap\"\n :key=\"item.lang\"\n :command=\"item.lang\">\n {{ item.name }}\n </ElDropdownItem>\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n</template>\n","import type { App } from 'vue';\nimport GvLangSelect from './src/GvLangSelect.vue';\nconst GvLangSelectPlugin = {\n install(app: App): void {\n app.component(GvLangSelect.name ?? 'GvLangSelect', GvLangSelect);\n },\n};\nexport default GvLangSelectPlugin;\n\nexport { GvLangSelect };\n","<!--\n * @title: popover component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 14:04:51\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:33:39\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { GvIcon } from '@@/GvIcon';\n import { ElPopover } from 'element-plus';\n import { computed, defineComponent, ref, watch, type PropType } from 'vue';\n import type { TPopoverPlacement, TPopoverTrigger } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('popover');\n\n export default defineComponent({\n name: 'GvPopover',\n props: {\n vref: {\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: false,\n },\n title: {\n type: String,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n placement: {\n type: String as PropType<TPopoverPlacement>,\n default: 'bottom-start',\n },\n trigger: {\n type: String as PropType<TPopoverTrigger>,\n default: 'click',\n },\n tablePopover: {\n type: Boolean,\n default: false,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n columnType: {\n type: String,\n default: undefined,\n },\n },\n\n emits: ['update:visible', 'show', 'hide'],\n\n setup(props, { emit, slots }) {\n // @data\n const isShow = ref<boolean>(props.visible);\n\n // @watch\n watch(\n () => props.visible,\n (val) => {\n isShow.value = val;\n },\n );\n\n // @computed\n const popClass = computed(() => (props.tablePopover ? `${prefixCls} table-popover` : prefixCls));\n\n // @methods\n\n const handleUpdateVisible = (val: boolean) => {\n isShow.value = val;\n emit('update:visible', val);\n };\n\n const handleShow = () => {\n emit('show', props.columnProp);\n };\n\n const handleHide = () => {\n emit('hide', props.columnProp);\n };\n\n const handlePopoverWrapper = (e: MouseEvent) => {\n e.stopPropagation();\n // 关闭其他 popover\n // if (this.tablePopover === true)\n // this.$refs.array.forEach(element => {\n\n // });\n\n // this.$emit('click', e, this.columnProp);\n };\n\n const getReferenceSlot = () => (\n <span class=\"gv-popover-reference\">\n {props.label || props.title}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"\n />\n </span>\n );\n\n // @render\n return () => (\n <div\n class={prefixCls}\n onClick={handlePopoverWrapper}>\n <ElPopover\n ref={props.vref || 'gv-popover'}\n visible={isShow.value}\n onUpdate:visible={handleUpdateVisible}\n title={props.title}\n placement={props.placement}\n trigger={props.trigger}\n showArrow={true}\n popperClass={`gv-popover ${popClass.value}`}\n transition=\"el-zoom-in-top\"\n onAfter-enter={handleShow}\n onAfter-leave={handleHide}\n // append-to-body={false}\n // popper-options={{ // fixme: 增加该配置会导致各种问题,兼容性不行\n // boundariesElement: 'body',\n // // gpuAcceleration: true,\n // // positionFixed: true,\n // removeOnDestroy: true\n // }}\n >\n {{\n default: () => slots.default?.(),\n reference: () => getReferenceSlot(),\n }}\n </ElPopover>\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-popover';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvPopover from './src/GvPopover.vue';\n\nconst GvPopoverPlugin = {\n install(app: App): void {\n app.component(GvPopover.name ?? 'GvPopover', GvPopover);\n },\n};\nexport default GvPopoverPlugin;\n\nexport { GvPopover };\n","<!--\n * @title: radio component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 11:52:20\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:34:53\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadio, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TRadioValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio');\n\n export default defineComponent({\n name: 'GvRadio',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TRadioValue>,\n default: undefined,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TRadioValue>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const radioValue = ref(props.value);\n const radioSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n const handleUpdate = (val: TRadioValue) => {\n radioValue.value = val;\n emit('update:modelValue', val);\n };\n\n const handleChange = (val: TRadioValue) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElRadio\n modelValue={radioValue.value}\n onUpdate:modelValue={handleUpdate}\n name={props.name}\n value={props.value ?? props.label}\n disabled={props.disabled}\n border={props.border}\n onChange={handleChange}\n size={radioSize.value}\n class={prefixCls}>\n {slots.default?.()}\n </ElRadio>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio';\n .#{$prefixCls} {\n padding: 5px 0;\n margin-right: 15px;\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadio from './src/GvRadio.vue';\n\nconst GvRadioPlugin = {\n install(app: App): void {\n app.component(GvRadio.name ?? 'GvRadio', GvRadio);\n },\n};\nexport default GvRadioPlugin;\n\nexport { GvRadio };\n","<!--\n * @title: radio button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:18:46\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:35:23\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadioButton } from 'element-plus';\n import { defineComponent, ref, watch } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio-button');\n\n export default defineComponent({\n name: 'GvRadioButton',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean],\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['update:modelValue', 'change'],\n setup(props, { slots }) {\n // @data\n const radioValue = ref(props.value);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n // const handleUpdate = (val) => {\n // radioValue.value = val;\n // emit('update:modelValue', val);\n // };\n\n // @render\n return () => (\n <ElRadioButton\n value={props.value ?? props.label}\n modelValue={radioValue.value}\n name={props.name}\n disabled={props.disabled}\n class={prefixCls}>\n {slots.default?.()}\n </ElRadioButton>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio-button';\n .#{$prefixCls} {\n padding: 5px 0;\n margin-right: 15px;\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadioButton from './src/GvRadioButton.vue';\n\nconst GvRadioButtonPlugin = {\n install(app: App): void {\n app.component(GvRadioButton.name ?? 'GvRadioGroup', GvRadioButton);\n },\n};\nexport default GvRadioButtonPlugin;\n\nexport { GvRadioButton };\n","<!--\n * @title: radio group component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:10:40\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 09:03:41\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadioGroup, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TRadioGroupValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio-group');\n\n export default defineComponent({\n name: 'GvRadioGroup',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TRadioGroupValue>,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n },\n\n // @emits\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const radioValue = ref<TRadioGroupValue | undefined>(props.value ?? undefined);\n const radioGroupSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n const handleUpdate = (val: TRadioGroupValue) => {\n radioValue.value = val;\n emit('update:modelValue', val);\n };\n\n const handleChange = (val: TRadioGroupValue) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElRadioGroup\n class={prefixCls}\n aria-label={props.label}\n modelValue={radioValue.value}\n onUpdate:modelValue={handleUpdate}\n size={radioGroupSize.value}\n onChange={handleChange}>\n {slots.default?.()}\n </ElRadioGroup>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio-group';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadioGroup from './src/GvRadioGroup.vue';\n\nconst GvRadioGroupPlugin = {\n install(app: App): void {\n app.component(GvRadioGroup.name ?? 'GvRadioGroup', GvRadioGroup);\n },\n};\nexport default GvRadioGroupPlugin;\n\nexport { GvRadioGroup };\n","<!--\n * @title: row component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 09:49:52\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:36:24\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRow } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('row');\n\n export default defineComponent({\n name: 'GvRow',\n props: {\n gutter: {\n type: Number,\n default: 0,\n },\n tag: {\n type: String as PropType<string>,\n default: 'div',\n },\n },\n setup(props, { slots }) {\n return () => (\n <ElRow\n class={prefixCls}\n gutter={props.gutter}\n tag={props.tag}>\n {slots.default?.()}\n </ElRow>\n );\n },\n });\n</script>\n","import type { App } from 'vue';\nimport GvRow from './src/GvRow.vue';\n\nconst GvRowPlugin = {\n install(app: App): void {\n app.component(GvRow.name ?? 'GvRow', GvRow);\n },\n};\nexport default GvRowPlugin;\n\nexport { GvRow };\n","<!--\n * @title: screenfull\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:15:43\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-11-17 10:55:25\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { useFullscreen } from '@vueuse/core';\n import { propTypes } from '../../utils/gv.propTypes';\n import { useStyle } from '@/hook/web/useStyle';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('screenfull');\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const { toggle, isFullscreen } = useFullscreen();\n\n const toggleFullscreen = () => {\n toggle();\n };\n</script>\n\n<template>\n <div\n :class=\"prefixCls\"\n @click=\"toggleFullscreen\">\n <GvIcon :icon-name=\"isFullscreen ? 'exit-fullscreen' : 'fullscreen'\" />\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-screenfull';\n .#{$prefixCls} {\n display: inline-block;\n line-height: var(--right-item-line-height);\n height: var(--right-item-height);\n vertical-align: 10px;\n cursor: pointer;\n fill: #5a5e66;\n }\n</style>\n","import type { App } from 'vue';\nimport GvScreenFull from './src/GvScreenFull.vue';\n// Define the install method on the GvButton component\nconst GvScreenFullPlugin = {\n install(app: App): void {\n app.component(GvScreenFull.name ?? 'GvScreenFull', GvScreenFull);\n },\n};\nexport default GvScreenFullPlugin;\n\nexport { GvScreenFull };\n","<!--\n * @title: search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:02:29\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:14:30\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText } from '@@/utils';\n import { computed, defineComponent, getCurrentInstance, inject, nextTick, onMounted, ref } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('search-bar');\n export default defineComponent({\n name: 'GvSearchBar',\n props: {\n expand: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n\n const visible = ref(props.expand);\n const searchFieldsCollapsed = inject<{ value: boolean }>('searchFieldsCollapsed', ref(true));\n // const formList = inject('formList') as Recordable[];\n const refForm = inject('refForm') as string;\n const instance = getCurrentInstance(); // get current vnode\n let formNode: any = instance;\n while (formNode && formNode.type?.name !== 'ElForm') formNode = formNode?.parent;\n\n const fieldList = ref<any[]>([]);\n const searchFormRows = appStore.searchFormRows;\n const showDefaultRow = searchFormRows === 1 ? 4 : 8;\n // @mounted\n onMounted(() => {\n nextTick(() => {\n // console.log(formNode.exposed.fields);\n fieldList.value = formNode.exposed.fields;\n });\n });\n // const gvSearchExpand = ref(null);\n // const gvSearchShrink = ref(null);\n\n // @methods\n /**\n * @todo: expand search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:45:03\n */\n const expandFields = () => {\n searchFieldsCollapsed.value = false;\n visible.value = false;\n };\n /**\n * @todo: shrink search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:48:18\n */\n const shrinkFields = () => {\n searchFieldsCollapsed.value = true;\n visible.value = true;\n };\n /**\n * @todo: create search button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:17:17\n */\n const createSearchBar = computed(() => {\n if (!fieldList.value?.length) return null;\n const searchBar: any[] = [];\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const defaultSlot = slots.default?.();\n if (defaultSlot) {\n defaultSlot.forEach((vnode) => {\n const propsData = vnode.props;\n const type = vnode.type;\n if (typeof type === 'object' && 'name' in type && type.name === 'GvButton') {\n let text = getVNodeText(vnode);\n let searchBtnFlag = false;\n\n if (text === t('searchBar.search')) {\n if (buttonQuick) text = t('searchBar.search2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.search');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.seek')) {\n if (buttonQuick) text = t('searchBar.seek2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.seek');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.query')) {\n if (buttonQuick) text = t('searchBar.query2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.query');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.reset')) {\n if (buttonQuick) text = t('searchBar.reset2');\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.reset');\n if (buttonIcon) propsData.icon = 'el-icon-refreshLeft';\n propsData.bizType = 'reset';\n }\n }\n\n if (searchBtnFlag && propsData && propsData.type === undefined) propsData.type = 'primary';\n\n if (propsData) propsData.refForm = refForm;\n }\n searchBar.push(vnode);\n });\n\n // if (this.expand) {\n // add: 判断是否需要增加展开按钮 2022-04-22\n const fieldList2 = fieldList.value.filter((x) => {\n if (x.$el.hidden !== true) return true;\n });\n\n if (fieldList2.length > showDefaultRow) {\n let expandText = `${t('searchBar.expand')}`;\n if (buttonQuick) expandText = `${t('searchBar.expand')}(E)`;\n let shrinkText = `${t('searchBar.shrink')}`;\n if (buttonQuick) shrinkText = `${t('searchBar.shrink')}(E)`;\n const expand = (\n <GvButton\n link={true}\n bizType=\"expand\"\n visible={visible.value}\n onClick={expandFields}>\n {expandText} &nbsp;\n <GvIcon\n iconType=\"el\"\n iconName=\"arrowDown\"\n />\n </GvButton>\n );\n searchBar.push(expand);\n const shrink = (\n <GvButton\n link={true}\n bizType=\"shrink\"\n visible={!visible.value}\n onClick={shrinkFields}>\n {shrinkText} &nbsp;\n <GvIcon\n iconType=\"el\"\n iconName=\"arrowUp\"\n />\n </GvButton>\n );\n searchBar.push(shrink);\n }\n // }\n }\n return searchBar;\n });\n // @created\n\n // @render\n return () => <div class={prefixCls}>{createSearchBar.value}</div>;\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-search-bar';\n .#{$prefixCls} {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n padding-top: 0px;\n margin: 0 1px 6px 0;\n }\n</style>\n","import type { App } from 'vue';\nimport GvSearchBar from './src/GvSearchBar.vue';\n// Define the install method on the GvButton component\nconst GvSearchBarPlugin = {\n install(app: App): void {\n app.component(GvSearchBar.name ?? 'GvSearchBar', GvSearchBar);\n },\n};\nexport default GvSearchBarPlugin;\n\nexport { GvSearchBar };\n","import { ref, unref } from 'vue';\nimport { findPath } from '../../utils/gv.tree';\n\ntype OnlyOneChildType = AppRouteRecordRaw & { noShowingChildren?: boolean };\n\ninterface HasOneShowingChild {\n oneShowingChild?: boolean;\n onlyOneChild?: OnlyOneChildType;\n}\n\nexport const getAllParentPath = <T = Recordable>(treeData: T[], path: string) => {\n const menuList = findPath(treeData, (n) => n.path === path) as AppRouteRecordRaw[];\n return (menuList || []).map((item) => item.path);\n};\n\nexport const hasOneShowingChild = (parent: AppRouteRecordRaw, children: AppRouteRecordRaw[] = []): HasOneShowingChild => {\n const onlyOneChild = ref<OnlyOneChildType>();\n\n const showingChildren = children.filter((v) => {\n const meta = v.meta ?? {};\n if (meta.hidden) return false;\n else {\n // Temp set(will be used if only has one showing child)\n onlyOneChild.value = v;\n return true;\n }\n });\n\n // When there is only one child router, the child router is displayed by default\n if (showingChildren.length === 1)\n return {\n oneShowingChild: true,\n onlyOneChild: unref(onlyOneChild),\n };\n\n // Show parent if there are no child router to display\n if (!showingChildren.length) {\n onlyOneChild.value = { ...parent, path: '', noShowingChildren: true };\n return {\n oneShowingChild: true,\n onlyOneChild: unref(onlyOneChild),\n };\n }\n\n return {\n oneShowingChild: false,\n onlyOneChild: unref(onlyOneChild),\n };\n};\n","import { useI18n } from '@/hook/web/useI18n';\nimport type { RouteMeta } from 'vue-router';\nimport { GvIcon } from '../../../GvIcon';\nexport const useRenderMenuTitle = () => {\n const renderMenuTitle = (meta: RouteMeta) => {\n const { t } = useI18n();\n if (!meta) {\n return <span class=\"v-menu__title overflow-hidden overflow-ellipsis whitespace-nowrap\">No Title</span>;\n }\n const { title = 'Please set title', icon } = meta;\n\n return icon ? (\n <>\n <GvIcon\n iconName={meta.icon || ''}\n className=\"sub-el-icon\"></GvIcon>\n <span class=\"v-menu__title overflow-hidden overflow-ellipsis whitespace-nowrap\">{t(title as string)}</span>\n </>\n ) : (\n <span class=\"v-menu__title overflow-hidden overflow-ellipsis whitespace-nowrap\">{t(title as string)}</span>\n );\n };\n\n return {\n renderMenuTitle,\n };\n};\n","/*\n * @title: render menu item - useRenderMenuItem\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-07-15 15:07:28\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 14:34:07\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { useStyle } from '@/hook/web/useStyle';\nimport { isUrl, pathResolve } from '@@/utils';\nimport { ElMenuItem, ElSubMenu } from 'element-plus';\nimport { unref } from 'vue';\nimport { hasOneShowingChild } from '../helper';\nimport { useRenderMenuTitle } from './useRenderMenuTitle';\nconst { getPrefixCls } = useStyle();\nconst prefixCls = getPrefixCls('submenu');\n\nconst { renderMenuTitle } = useRenderMenuTitle();\n\nexport const useRenderMenuItem = (menuMode) =>\n // allRouters: AppRouteRecordRaw[] = [],\n {\n const renderMenuItem = (routers: AppRouteRecordRaw[], parentPath = '/') => {\n if (!routers || !routers.length) return null;\n return routers\n .filter((v) => !v.meta?.hidden)\n .map((v) => {\n const meta = v.meta ?? {};\n const { oneShowingChild, onlyOneChild } = hasOneShowingChild(v, v.children);\n const fullPath = isUrl(v.path) ? String(v.path) : pathResolve(parentPath, v.path); // getAllParentPath<AppRouteRecordRaw>(allRouters, v.path).join('/')\n if (oneShowingChild && (!onlyOneChild?.children || onlyOneChild?.noShowingChildren) && !meta?.alwaysShow) {\n return (\n <ElMenuItem index={onlyOneChild ? pathResolve(fullPath, onlyOneChild.path) : fullPath}>\n {{\n default: () => renderMenuTitle(onlyOneChild ? (onlyOneChild.meta ?? meta) : meta),\n }}\n </ElMenuItem>\n );\n } else {\n return (\n <ElSubMenu\n index={fullPath}\n teleported\n class=\"nest-menu\"\n popperClass={unref(menuMode) === 'vertical' ? `${prefixCls}-popper--vertical` : ''}>\n {{\n title: () => renderMenuTitle(meta),\n default: () => renderMenuItem(v.children!, fullPath),\n }}\n </ElSubMenu>\n );\n }\n });\n };\n return {\n renderMenuItem,\n };\n };\n","<!--\n * @title: left menus\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-30 16:12:28\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 15:14:41\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useAppStore } from '@/store/modules/app';\n import { usePermsStore } from '@/store/modules/perms';\n import { ElMenu, ElScrollbar } from 'element-plus';\n import { computed, defineComponent, unref, type PropType } from 'vue';\n import { useRenderMenuItem } from './components/useRenderMenuItem';\n\n import { useStyle } from '@/hook/web/useStyle';\n import { useRouter } from 'vue-router';\n import { isUrl } from '../../utils';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('sidebar');\n\n export default defineComponent({\n name: 'GvSidebar',\n props: {\n menuSelect: {\n type: Function as PropType<(index: string) => void>,\n default: undefined,\n },\n },\n setup(props) {\n const appStore = useAppStore();\n const layout = computed(() => appStore.getLayout);\n const { push, currentRoute } = useRouter();\n const permStore = usePermsStore();\n const menuMode = computed((): 'vertical' | 'horizontal' => {\n const vertical: LayoutType[] = ['default', 'topLeft', 'cutMenu'];\n\n if (vertical.includes(unref(layout))) return 'vertical';\n else return 'horizontal';\n });\n\n const routers = computed(() => (unref(layout) === 'cutMenu' ? permStore.getRouters : permStore.getRouters));\n\n // console.log(routers.value);\n\n const collapse = computed(() => appStore.getCollapseMenus);\n\n const leftMenuUniqueOpened = computed(() => appStore.getLeftMenuUniqueOpened);\n\n const activeMenu = computed(() => {\n const { meta, path } = unref(currentRoute);\n // if set path, the sidebar will highlight the path you set\n if (meta.activeMenu) return meta.activeMenu as string;\n\n return path;\n });\n\n const menuSelect = (index: string) => {\n props.menuSelect?.(index);\n\n // 自定义事件\n if (isUrl(index)) {\n window.open(index);\n return;\n }\n push(index);\n };\n\n const renderMenu = () => (\n <ElMenu\n defaultActive={unref(activeMenu)}\n mode={unref(menuMode)}\n collapse={unref(layout) === 'top' || unref(layout) === 'cutMenu' ? false : unref(collapse)}\n uniqueOpened={unref(layout) === 'top' ? false : unref(leftMenuUniqueOpened)}\n backgroundColor=\"var(--left-menu-bg-color)\"\n textColor=\"var(--left-menu-text-color)\"\n activeTextColor=\"var(--left-menu-text-active-color)\"\n popperClass={unref(menuMode) === 'vertical' ? `${prefixCls}-popper--vertical` : `${prefixCls}-popper--horizontal`}\n onSelect={menuSelect}>\n {{\n default: () => {\n const { renderMenuItem } = useRenderMenuItem(menuMode);\n // console.log('renderMenu', routers.value);\n return renderMenuItem(unref(routers));\n },\n }}\n </ElMenu>\n );\n const renderMenuWrap = () => {\n if (unref(layout) === 'top') return renderMenu();\n else return <ElScrollbar>{renderMenu()}</ElScrollbar>;\n };\n return () => (\n <div\n id=\"gv-sidebar\"\n class={[\n `${prefixCls} ${prefixCls}__${unref(menuMode)}`,\n 'h-[100%] overflow-hidden flex-col bg-[var(--left-menu-bg-color)]',\n {\n 'w-[var(--left-menu-min-width)]': unref(collapse) && unref(layout) !== 'cutMenu',\n 'w-[var(--left-menu-max-width)]': !unref(collapse) && unref(layout) !== 'cutMenu',\n },\n ]}>\n {renderMenuWrap()}\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-sidebar';\n\n .#{$prefixCls} {\n position: relative;\n transition: width var(--transition-time-02);\n\n :deep(.#{$elNamespace}-menu) {\n width: 100% !important;\n border-right: none;\n --el-menu-bg-color: var(--left-menu-bg-color);\n --el-menu-text-color: var(--left-menu-text-color);\n --el-menu-hover-text-color: var(--left-menu-text-active-color);\n --el-menu-active-color: var(--left-menu-text-active-color);\n --el-menu-hover-bg-color: var(--left-menu-hover-bg-color);\n\n // 设置选中时子标题的颜色\n .is-active {\n & > .#{$elNamespace}-sub-menu__title {\n color: var(--left-menu-text-active-color) !important;\n }\n }\n\n // 设置子菜单悬停的高亮和背景色\n .#{$elNamespace}-sub-menu__title,\n .#{$elNamespace}-menu-item {\n &:hover {\n color: var(--left-menu-text-active-color) !important;\n background-color: var(--left-menu-bg-color) !important;\n }\n }\n\n // 设置选中时的高亮背景和高亮颜色\n .#{$elNamespace}-menu-item.is-active {\n color: var(--left-menu-text-active-color) !important;\n background-color: var(--left-menu-bg-active-color) !important;\n\n &:hover {\n background-color: var(--left-menu-bg-active-color) !important;\n }\n }\n\n .#{$elNamespace}-menu-item.is-active {\n position: relative;\n }\n\n // 设置子菜单的背景颜色\n .#{$elNamespace}-menu {\n .#{$elNamespace}-sub-menu__title {\n background-color: var(--left-menu-bg-color) !important;\n }\n .#{$elNamespace}-menu-item:not(.is-active) {\n background-color: var(--left-menu-item-bg-light-color) !important;\n }\n }\n }\n\n // 折叠时的最小宽度\n :deep(.#{$elNamespace}-menu--collapse) {\n width: var(--left-menu-min-width);\n\n & > .is-active,\n & > .is-active > .#{$elNamespace}-sub-menu__title {\n position: relative;\n background-color: var(--left-menu-collapse-bg-active-color) !important;\n }\n }\n\n // 折叠动画的时候,就需要把文字给隐藏掉\n :deep(.horizontal-collapse-transition) {\n .#{$prefixCls}__title {\n display: none;\n }\n }\n\n // 水平菜单\n &__horizontal {\n height: calc(var(--top-tool-height)) !important;\n\n :deep(.#{$elNamespace}-menu--horizontal) {\n height: calc(var(--top-tool-height));\n border-bottom: none;\n // 重新设置底部高亮颜色\n & > .#{$elNamespace}-sub-menu.is-active {\n .#{$elNamespace}-sub-menu__title {\n border-bottom-color: var(--el-color-primary) !important;\n }\n }\n\n .#{$elNamespace}-menu-item.is-active {\n position: relative;\n\n &::after {\n display: none !important;\n }\n }\n\n .#{$prefixCls}__title {\n /* stylelint-disable-next-line */\n max-height: calc(var(--top-tool-height) - 2px) !important;\n /* stylelint-disable-next-line */\n line-height: calc(var(--top-tool-height) - 2px);\n }\n }\n }\n }\n</style>\n\n<style lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-sidebar-popper';\n\n .#{$prefixCls}--vertical,\n .#{$prefixCls}--horizontal {\n // 设置选中时子标题的颜色\n .is-active {\n & > .el-sub-menu__title {\n color: var(--left-menu-text-active-color) !important;\n }\n }\n\n // 设置子菜单悬停的高亮和背景色\n .el-sub-menu__title,\n .el-menu-item {\n &:hover {\n color: var(--left-menu-text-active-color) !important;\n background-color: #545658 !important;\n }\n }\n\n // 设置选中时的高亮背景\n .el-menu-item.is-active {\n position: relative;\n background-color: var(--left-menu-bg-active-color) !important;\n\n &:hover {\n background-color: var(--left-menu-bg-active-color) !important;\n }\n }\n }\n\n $submenu-prefix-cls: '#{$gvNamespace}-submenu-popper';\n\n // 设置子菜单溢出时滚动样式\n .#{$submenu-prefix-cls}--vertical {\n max-height: 100%;\n overflow-y: auto;\n\n &::-webkit-scrollbar {\n width: 6px;\n background-color: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgb(144 147 153 / 30%);\n border-radius: 4px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSidebar from './src/GvSidebar.vue';\n// Define the install method on the GvButton component\nconst GvSidebarPlugin = {\n install(app: App): void {\n app.component(GvSidebar.name ?? 'GvSidebar', GvSidebar);\n },\n};\nexport default GvSidebarPlugin;\n\nexport { GvSidebar };\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFYAAABaCAYAAAAilKGMAAAACXBIWXMAAAZ2AAAGdgEpJm+AAAAKDGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYTZhNjM5NjhhLCAyMDI0LzAzLzA2LTExOjUyOjA1ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmQxNjAxODBkLTVlZmUtZjc0MS1iY2RhLTdjMDBjNTc4ZTVkMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDE1ZDUxNC05YzkxLTQwNTYtYTgzNS05YjZlYmRlOTQ5ZmEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0iRTU1OUFCRUUwQ0NBMTg5NjNBREJDRTREOTQ1Q0M5MDkiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB0aWZmOkltYWdlV2lkdGg9IjYzNiIgdGlmZjpJbWFnZUxlbmd0aD0iNjYwIiB0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb249IjIiIHRpZmY6U2FtcGxlc1BlclBpeGVsPSIzIiB0aWZmOlhSZXNvbHV0aW9uPSIxNDQvMSIgdGlmZjpZUmVzb2x1dGlvbj0iMTQ0LzEiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6RXhpZlZlcnNpb249IjAyMzEiIGV4aWY6Q29sb3JTcGFjZT0iNjU1MzUiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSI2MzYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSI2NjAiIHhtcDpDcmVhdGVEYXRlPSIyMDI0LTExLTI5VDEyOjQ4OjMzKzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyNC0xMS0yOVQxMjo1MToyNCswODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyNC0xMS0yOVQxMjo1MToyNCswODowMCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmZiNWYzMGIyLWJmODgtNDQ3My1iMDk0LWIzMGUzYjkyMzczZiIgc3RFdnQ6d2hlbj0iMjAyNC0xMS0yOVQxMjo0OToxNyswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI1LjExIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gaW1hZ2UvanBlZyB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImRlcml2ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImNvbnZlcnRlZCBmcm9tIGltYWdlL2pwZWcgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MDg4Y2NiMi05NDFlLTQ1YmItOGZhZi02YjA5Mjc0M2Q0MDciIHN0RXZ0OndoZW49IjIwMjQtMTEtMjlUMTI6NDk6MTcrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNS4xMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NWQxNWQ1MTQtOWM5MS00MDU2LWE4MzUtOWI2ZWJkZTk0OWZhIiBzdEV2dDp3aGVuPSIyMDI0LTExLTI5VDEyOjUxOjI0KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjUuMTEgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmZiNWYzMGIyLWJmODgtNDQ3My1iMDk0LWIzMGUzYjkyMzczZiIgc3RSZWY6ZG9jdW1lbnRJRD0iRTU1OUFCRUUwQ0NBMTg5NjNBREJDRTREOTQ1Q0M5MDkiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0iRTU1OUFCRUUwQ0NBMTg5NjNBREJDRTREOTQ1Q0M5MDkiLz4gPHRpZmY6Qml0c1BlclNhbXBsZT4gPHJkZjpTZXE+IDxyZGY6bGk+ODwvcmRmOmxpPiA8cmRmOmxpPjg8L3JkZjpsaT4gPHJkZjpsaT44PC9yZGY6bGk+IDwvcmRmOlNlcT4gPC90aWZmOkJpdHNQZXJTYW1wbGU+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+WfjB/QAAOnxJREFUeJztvXe4XFd19//Z+9Tp5famq2rJVnE3trGxMcY0h2KMDSb04NBCDIQQQgukvKTwQAKEEkIS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\"","<!--\n * @title: sidebar logo\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-15 14:11:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 11:46:47\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { computed, onMounted, ref, unref, watch } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('logo');\n\n const appStore = useAppStore();\n\n const show = ref(true);\n const title = computed(() => appStore.getTitle);\n const layout = computed(() => appStore.getLayout);\n const collapseMenus = computed(() => appStore.getCollapseMenus);\n\n watch(\n () => collapseMenus.value,\n (collapse: boolean) => {\n if (unref(layout) === 'topLeft' || unref(layout) === 'cutMenu') {\n show.value = true;\n return;\n }\n show.value = !collapse;\n },\n );\n\n watch(\n () => layout.value,\n (layout) => {\n if (layout === 'top' || layout === 'cutMenu') show.value = true;\n else if (unref(collapseMenus)) show.value = false;\n else show.value = true;\n },\n );\n\n onMounted(() => {\n if (unref(collapseMenus)) show.value = false;\n });\n</script>\n\n<template>\n <div>\n <router-link\n :class=\"[prefixCls, layout !== 'default' ? `${prefixCls}__Top` : '', 'flex !h-[var(--logo-height)] items-center cursor-pointer pl-[8px] relative decoration-none overflow-hidden']\"\n to=\"/\">\n <img\n src=\"@/assets/imgs/logo.png\"\n class=\"w-[calc(var(--logo-height)-10px)] h-[calc(var(--logo-height)-10px)]\" />\n <div\n v-if=\"show\"\n :class=\"[\n 'block whitespace-nowrap ml-[45px] mr-[0px] mt-[-25px] mb-[0px] text-[16px] font-bold',\n {\n 'text-[var(--logo-title-text-color)]': layout === 'default',\n 'text-[var(--top-header-text-color)]': layout === 'topLeft' || layout === 'top' || layout === 'cutMenu',\n },\n ]\">\n {{ title }}\n </div>\n </router-link>\n </div>\n</template>\n<style lang=\"scss\" scoped></style>\n","import type { App } from 'vue';\nimport GvSidebarLogo from './src/GvSidebarLogo.vue';\n// Define the install method on the GvButton component\nconst GvSidebarLogoPlugin = {\n install(app: App): void {\n app.component(GvSidebarLogo.name ?? 'GvSidebarLogo', GvSidebarLogo);\n },\n};\nexport default GvSidebarLogoPlugin;\n\nexport { GvSidebarLogo };\n","<!--\n * @title: table bar component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:46:02\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 14:20:53\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { getVNodeName, getVNodeText } from '@@/utils';\n import { defineComponent, getCurrentInstance, type VNode } from 'vue';\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('table-bar');\n export default defineComponent({\n name: 'GvTableBar',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @data\n const appStore = useAppStore();\n const instance = getCurrentInstance();\n const { t } = useBridgeI18n();\n // @watch\n\n // @methods\n const createTableBar = () => {\n const tableBar: VNode[] = [];\n const defaultSlots = slots.default?.();\n if (defaultSlots) {\n const parentNode = instance?.parent;\n const refForm = parentNode?.attrs['ref-form'];\n\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const childrenNodes = (defaultSlots[0].children as VNode[]) || [];\n childrenNodes.forEach((vnode: VNode) => {\n const propsData = vnode.props || {};\n if (getVNodeName(vnode) === 'GvButton') {\n const text = getVNodeText(vnode);\n if (text.indexOf(t('tableBar.save')) !== -1 || text.indexOf(t('tableBar.add')) !== -1 || text.indexOf(t('tableBar.append')) !== -1 || text.indexOf(t('tableBar.create')) !== -1) {\n if (text === t('tableBar.add') && buttonQuick) {\n propsData.text = t('tableBar.add2');\n propsData.otext = text;\n } else propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-add';\n propsData.bizType = 'save';\n } else if (propsData.bizType === 'export') {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-daochu1';\n propsData.text = text;\n } else if (text.indexOf(t('tableBar.refresh')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-shuaxin';\n propsData.bizType = 'refresh';\n propsData.text = t('tableBar.refresh');\n } else if (text.indexOf(t('tableBar.templateDownload')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-xiazaidaorumoban1x';\n propsData.bizType = 'downloadTemplate';\n } else if (text.indexOf(t('tableBar.dispatch')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-winfo-icon-zhipai';\n propsData.bizType = 'dispatch';\n propsData.text = text;\n } else if (text.indexOf(t('tableBar.assign')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zhipai';\n propsData.bizType = 'dispatch';\n propsData.text = text;\n } else if (text.indexOf(t('tableBar.calculate')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jisuan';\n propsData.text = text;\n propsData.bizType = 'calculate';\n } else if (text.indexOf(t('tableBar.trace')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiankongguanli';\n propsData.text = text;\n propsData.bizType = 'trace';\n } else if (text.indexOf(t('tableBar.receive')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-piliangbianji1';\n propsData.text = text;\n propsData.bizType = 'receive';\n } else if (propsData.bizType === 'import') {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-daoru2';\n propsData.text = text;\n propsData.bizType = 'import';\n } else if (text.indexOf(t('tableBar.generate')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zujian';\n propsData.text = text;\n propsData.bizType = 'generate';\n } else if (text.indexOf(t('tableBar.pay')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-yingshoukuan';\n propsData.text = text;\n propsData.bizType = 'pay';\n } else if (text.indexOf(t('tableBar.check')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-xuanze';\n propsData.text = text;\n propsData.bizType = 'check';\n } else if (text.indexOf(t('tableBar.reject')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-bohui';\n propsData.text = text;\n propsData.bizType = 'reject';\n } else if (text.indexOf(t('tableBar.approve')) !== -1 || text.indexOf(t('tableBar.audit')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-shenpi2';\n propsData.text = text;\n propsData.bizType = 'approve';\n } else if (text.indexOf(t('tableBar.logging')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-rizhi1';\n propsData.bizType = 'logging';\n } else if (text.indexOf(t('tableBar.select')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-chaxun';\n propsData.bizType = 'search';\n }\n // else if (text.indexOf('派') !== -1) {\n // // propsData.text = text;\n // propsData.icon = 'el-icon-finished';\n // propsData.bizType = 'confirm';\n // }\n else if (text.indexOf(t('tableBar.detail')) !== -1 || text.indexOf(t('table.list')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-mingxi';\n propsData.bizType = 'detail';\n } else if (text.indexOf(t('tableBar.withdraw')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-fanhui5';\n propsData.bizType = 'withdraw';\n } else if (text.indexOf(t('tableBar.submit')) !== -1 || text.indexOf('提报') !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-tijiao';\n propsData.bizType = 'submit';\n } else if (text.indexOf(t('tableBar.delete')) !== -1 || text.indexOf(t('tableBar.cancel')) !== -1 || text.indexOf(t('tableBar.cancel1')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-delete';\n propsData.bizType = 'delete';\n } else if (text.indexOf(t('tableBar.change')) !== -1 || text.indexOf(t('tableBar.update')) !== -1 || text.indexOf(t('tableBar.modify')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-edit-outline';\n propsData.bizType = 'update';\n } else if (text.indexOf(t('tableBar.sync')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-tongbu1';\n propsData.bizType = 'update';\n } else if (text.indexOf(t('tableBar.untop')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-quxiaozhiding1';\n propsData.bizType = 'top';\n } else if (text.indexOf(t('tableBar.top')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zhiding1';\n propsData.bizType = 'top';\n } else if (text.indexOf(t('tableBar.deserum')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-quxiaozhiding';\n propsData.bizType = 'top';\n } else if (text.indexOf(t('tableBar.unitPrice')) !== -1) {\n if (buttonIcon)\n // propsData.text = text;\n propsData.icon = 'iconfont gv-icon-jiangjinguize';\n else if (text.indexOf(t('tableBar.essence')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zhiding';\n propsData.bizType = 'top';\n propsData.text = text;\n }\n } else if (text.indexOf(t('tableBar.relieve')) !== -1 || text.indexOf(t('tableBar.unbind')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiekou1';\n propsData.bizType = 'unbind';\n } else if (text.indexOf(t('tableBar.bind')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiekoushuoming';\n propsData.bizType = 'bind';\n } else if (text.indexOf(t('tableBar.confirm')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-tianshenpi';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.notify')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-huodong';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.payment')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiage';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.transfer')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-fanhui5';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.putaway')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-top';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.soldOut')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-bottom';\n propsData.bizType = 'confirm';\n }\n propsData.refForm = refForm;\n } else if (getVNodeName(vnode) === 'ElDropdown') {\n const firstChild = vnode?.children?.[0];\n const text = getVNodeText(firstChild);\n propsData.text = text;\n propsData.icon = firstChild?.props.icon || '';\n }\n tableBar.push(vnode);\n });\n }\n return tableBar || [];\n };\n // console.log(tableBar);\n\n // @mounted\n\n // @render\n return () => (props.visible ? <div class={prefixCls}>{createTableBar()}</div> : null);\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-table-bar';\n .#{$prefixCls} {\n display: inline-block;\n height: 30px;\n padding-top: 3px;\n\n .el-dropdown {\n float: left;\n\n i {\n padding-right: 3px;\n color: var(--tableBarColor, $tableBarColor);\n\n & + span {\n margin-left: 3px;\n }\n }\n }\n\n :deep(.el-button) {\n float: left;\n height: 25px;\n padding: 2px 8px;\n margin-bottom: 2px;\n margin-left: 2px;\n color: var(--tableBarColor, $tableBarColor);\n text-align: left;\n background: #fff !important;\n border: 0;\n\n i {\n padding-right: 3px;\n color: var(--tableBarColor, $tableBarColor);\n\n & + span {\n margin-left: 3px;\n }\n }\n\n &:hover {\n background-color: rgb(0 82 156 / 5%) !important;\n }\n }\n\n .el-button.is-disabled {\n color: $textColor;\n\n :deep(i) {\n color: $textColor;\n }\n }\n }\n</style>\n","<!--\n * @title: tag component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 14:43:04\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:37:24\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElTag, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, unref, type PropType } from 'vue';\n import type { TTagEffect, TTagType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tag');\n\n export default defineComponent({\n name: 'GvTag',\n props: {\n type: {\n type: String as PropType<TTagType>,\n default: 'primary',\n },\n closable: {\n type: Boolean,\n default: false,\n },\n effect: {\n type: String as PropType<TTagEffect>,\n default: 'light',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n round: {\n type: Boolean,\n default: false,\n },\n },\n\n // @emits\n emits: ['click', 'close'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const tagSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @methods\n\n const handleClick = (event: MouseEvent) => {\n emit('click', event);\n };\n\n const handleClose = (event: Event) => {\n emit('close', event);\n };\n\n // @render\n return () => (\n <ElTag\n type={props.type}\n size={tagSize.value}\n round={props.round}\n closable={props.closable}\n effect={props.effect}\n class={prefixCls}\n onClick={handleClick}\n onClose={handleClose}>\n {slots.default?.()}\n </ElTag>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tag';\n .#{$prefixCls} {\n }\n</style>\n","/*\n * @title: table utils\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-09 17:50:09\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 08:47:14\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\nimport type { FilterCondition, PageInfo } from '@@/GvTable/src/types';\nimport type { TableInstance } from 'element-plus';\nimport type { VNode } from 'vue';\nimport { message } from './gv.notify';\nimport { isEmpty, toHump, toLine } from './index';\n/**\n * @todo: page info condition\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 09:09:54\n * @param {PageInfo} pi\n */\nexport const appendPageInfo = (pi?: PageInfo): PageInfo => {\n const pageInfo: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n const currentpagenum = pi && pi['currentpagenum'] ? pi['currentpagenum'] : 1;\n const recordsperpage = pi && pi['recordsperpage'] ? pi['recordsperpage'] : 10;\n const countrows = pi && pi['countrows'] ? pi['countrows'] : 0;\n const totalpage = pi && pi['totalpage'] ? pi['totalpage'] : 0;\n pageInfo['currentpagenum'] = currentpagenum;\n pageInfo['recordsperpage'] = recordsperpage;\n pageInfo['countrows'] = countrows;\n pageInfo['totalpage'] = totalpage;\n return pageInfo;\n};\n\n/**\n * @todo: common query combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:08:33\n * @param {VNode} tabNode\n * @param {Recordable} filter\n */\nexport const combined = function (tabNode: VNode, filter: Recordable<any>): Recordable<FilterCondition | PageInfo> {\n const filterConditions: Recordable<FilterCondition | PageInfo> = {};\n if (!isEmpty(filter))\n Object.keys(filter).forEach((x: string) => {\n let val: string = '';\n let co = 'null';\n if (!isEmpty(filter[x])) {\n let sOp = '=';\n if (typeof filter[x] === 'object')\n if (Array.isArray(filter[x] as any[])) {\n // fixme: 增加多选字典 2022-08-01\n let coo = '';\n let labels = '';\n (filter[x] as any[]).forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else {\n const v = filter[x] as Recordable<any>;\n co = v.value;\n val = v.label;\n }\n val = val + '';\n if (val.indexOf(',') > 0) val = val.replace(/,/g, ',');\n\n if (val.indexOf(',') > 0) if (sOp !== 'in' && sOp !== 'not in') sOp = 'in';\n const ds = toLine(x);\n const condition: FilterCondition = {\n id: '',\n ds: '',\n va: '',\n co: '',\n op: 'like',\n ac: 'null',\n ki: 'text',\n };\n let type = 'text';\n if (type !== 'dic' && (x.indexOf('id') >= 0 || x.indexOf('Id') >= 0)) type = 'number';\n\n condition['id'] = x;\n condition['ds'] = ds;\n condition['va'] = val.trim();\n condition['co'] = co;\n condition['op'] = sOp || 'like';\n condition['ac'] = 'null';\n condition['ki'] = type;\n filterConditions[x] = condition;\n }\n });\n // 拼接 pageinfo条件\n if (tabNode) {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n pi['recordsperpage'] = tabNode.props?.['pageSize'] ?? 10;\n filterConditions['pageinfo'] = appendPageInfo(pi);\n }\n return filterConditions;\n};\n\n/**\n * @todo: form search combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:31:41\n * @param {FormItem} formList\n * @param {Recordable} filter\n * @param {VNode} tabNode\n */\nexport const searchCombined = (formList: FormItem[], filter: Recordable<any>, tabNode: TableInstance): Recordable<FilterCondition | PageInfo> => {\n const filterConditions: Recordable<FilterCondition | PageInfo> = {};\n // console.log(formList);\n for (const item of formList) {\n const type = item.type;\n if (type !== 'blank') {\n const condition: FilterCondition = {\n id: '',\n ds: '',\n va: '',\n co: '',\n op: 'like',\n ac: 'null',\n ki: 'text',\n };\n const { action, field, op = 'like', upper = false, showLabel, dateType } = item;\n if (action === 'ignore') continue;\n let val = filter[field];\n let co = 'null';\n if (isEmpty(val)) continue;\n // 对于日期范围选择\n if (Array.isArray(val)) if (isEmpty(val[0])) continue;\n // if (type !== 'dic' && (field.indexOf('id') >= 0 || field.indexOf('Id') >= 0))\n // type = 'number';\n // console.log(val);\n let sOp = op;\n if (type === 'dic') {\n if (Array.isArray(val)) {\n // fixme: 增加多选字典 2022-08-01\n let coo = '';\n let labels = '';\n (val as any[]).forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else if (showLabel) {\n // 单选字典\n co = val + '';\n val = showLabel;\n } else {\n const v = val as Recordable<any>;\n co = v.value;\n val = v.label;\n }\n\n sOp = '=';\n } else if (type === 'date' || type === 'datetime' || type === 'time') {\n if (op === 'like') sOp = '=';\n if (dateType === 'daterange' || dateType === 'datetimerange' || dateType === 'timerange' || dateType === 'monthrange') val = (val as any[]).join(',');\n } else if (type === 'number') sOp = '=';\n\n let sType = type;\n if (dateType === 'monthrange') sType = 'month';\n\n val = val + '';\n if (!action && val.indexOf(',') > 0) val = val.replace(/,/g, ',');\n\n if (val.indexOf(',') > 0) if (sOp !== 'in' && sOp !== 'not in') sOp = 'in';\n\n sOp = sOp.replace(/</gi, '&lt;');\n sOp = sOp.replace(/>/gi, '&gt;');\n let ds = toLine(field);\n // 多表关联判断是否带表别名 2022-06-23\n if (ds.indexOf('@') > 0) ds = ds.replace('@', '.');\n\n if (upper === true) {\n if (co && co !== 'null') co = co.toUpperCase();\n val = val.toUpperCase();\n // 将ds转为upper函数\n ds = 'upper(' + ds + ')';\n }\n\n condition['id'] = field;\n condition['ds'] = ds;\n condition['va'] = val.trim();\n condition['co'] = co;\n condition['op'] = sOp || 'like';\n condition['ac'] = action || 'null';\n condition['ki'] = sType || 'text';\n filterConditions[field] = condition;\n }\n }\n // 拼接 pageinfo条件\n if (tabNode) {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n pi['recordsperpage'] = (tabNode.$.props?.['pageSize'] as number) ?? 10;\n filterConditions['pageinfo'] = appendPageInfo(pi);\n }\n return filterConditions;\n};\n\n/**\n * @todo: save combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:43:03\n * @param {FormItem} formList\n * @param {Recordable} filter\n */\nexport const saveCombined = (formList: FormItem[], filter: Recordable<any>): Recordable<any> => {\n const filterConditions = {};\n\n try {\n for (const item of formList) {\n const type = item.type;\n if (type !== 'blank') {\n const { action, field, showLabel } = item;\n if (action === 'ignore') continue;\n let val = filter[field];\n let co = 'null';\n if (val === undefined || val === null) continue;\n if (type === 'dic')\n if (showLabel)\n if (Array.isArray(val)) {\n // 多选字典\n let coo = '';\n const labels = '';\n val.forEach((x) => {\n let v: string;\n if (typeof x === 'object') v = x.value;\n else v = x + '';\n if (coo) coo += ',' + v;\n else coo = v;\n });\n co = coo;\n val = labels;\n } else if (typeof val === 'object') {\n co = val.value;\n val = val.label;\n } else {\n co = val + '';\n val = showLabel;\n }\n else if (Array.isArray(val)) {\n // 多选字典\n let coo = '';\n let labels = '';\n val.forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else if (typeof val === 'object') {\n co = val.value;\n val = val.label;\n } else\n // if (typeof val !== 'object' && item.dicType.indexOf('t#') >= 0) {\n // Notify.message('[' + field + ']: 字典值设置不正确', 'error');\n // throw new Error('[' + field + ']: 字典值设置不正确');\n // }\n co = val;\n else {\n val = val + ''; // fixme: 对于id等数字,转换为字符类型,防止indexOf出错\n co = val + '';\n }\n if (co === null || co === undefined) {\n message('[' + field + ']: dict value is null', 'error');\n throw new Error('[' + field + ']: dict value is null');\n }\n if (!action && co.indexOf(',') > 0) co = co.replace(/,/g, ',');\n const ds = toHump(field);\n\n filterConditions[ds] = co;\n }\n }\n } catch (error) {\n console.log(error);\n throw new Error('combined data error:' + error);\n }\n return filterConditions;\n};\n","/*\n * @title: crud methods utils\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-25 15:07:35\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 09:36:49\n * @version: 1.0.6\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\nimport type { PageInfo } from '@@/GvTable/src/types/index';\nimport { useStorage } from '@@/hooks/web/useStorage';\nimport type { FormInstance, TableInstance } from 'element-plus';\nimport type { ComponentInternalInstance, VNode } from 'vue';\nimport { message } from './gv.notify';\nimport { appendPageInfo, combined, saveCombined, searchCombined } from './gv.table';\nimport { getVNodeName, isEmpty } from './index';\n/**\n * @todo: common fetch data\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:55:17\n * @param {function} fetch\n * @param {any} data\n */\nconst fetchData = async (fetch: AsyncFn, data: any): Promise<any> => {\n let result = {};\n await fetch(data).then((res) => {\n result = res.datas;\n });\n\n return result;\n};\n\n/**\n * @todo: common submit fetch data\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:39:01\n */\nconst submit = async (fetch: AsyncFn, data: any, hasMsg = true, msg?: string): Promise<any> => {\n let result = {};\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '操作成功';\n else msgs = 'Operate successfully';\n }\n await fetch(data).then((res) => {\n result = res.datas;\n if (hasMsg) message(msgs, 'success');\n });\n\n return result;\n};\n/**\n * @todo: common fetch table data(with pagination)\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:40:36\n */\nconst fetchTable = async (tabNode: any, fetch: AsyncFn, data: any) => {\n let result = {};\n const condition = combined(tabNode, data);\n if (tabNode) {\n tabNode.filterConditions = condition;\n tabNode.fetch = fetch;\n }\n if (tabNode) tabNode.startLoading();\n await fetch(condition)\n .then((res) => {\n result = res.datas;\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n if (tabNode) tabNode.stopLoading();\n return result;\n};\n\n/**\n * @todo: validate form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:42:22\n */\nconst checkForms = async (fmNodes: FormInstance[]) => {\n if (fmNodes === undefined || fmNodes === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = true;\n for (const fmNode of fmNodes) {\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n await fmNode2.component.exposed\n .validate()\n .then(() => {\n // todo\n })\n .catch(() => {\n // throw new Error(e);\n result = false;\n Promise.reject('The form failed validation');\n });\n }\n }\n\n return result;\n};\n\n/**\n * @todo: save form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:45:03\n */\nconst save = async (fmNode: FormInstance, fetch: AsyncFn, check = true, msg?: string) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = {};\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '保存成功';\n else msgs = 'Save OK.';\n }\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n if (check === false) {\n // 有数据的输入框拼接条件\n const props = fmNode2.props;\n const filter = props.model;\n // console.log(filter);\n // console.log(fmNode2);\n // console.log(formList);\n let conditions = {};\n try {\n conditions = saveCombined(formList, filter);\n await fetch(conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n } catch {\n message('form save failed', 'error');\n // console.log(error);\n return null;\n }\n } else\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 有数据的输入框拼接条件\n const props = fmNode2.props;\n const filter = props.model;\n // console.log(filter);\n // console.log(fmNode2);\n // console.log(formList);\n let conditions = {};\n try {\n conditions = saveCombined(formList, filter);\n await fetch(conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n } catch {\n message('form save failed', 'error');\n return;\n }\n })\n .catch(() => {\n // throw new Error(e);\n Promise.reject('The form failed validation');\n result = {};\n });\n }\n\n return result;\n};\n\n/**\n * @todo: update form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:49:05\n */\nconst update = async (fmNode: FormInstance, id: number, fetch: Async2Fn, check = true, msg?: string) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n if (isEmpty(id)) {\n message('pk is null', 'error');\n return false;\n }\n let result = {};\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '保存成功';\n else msgs = 'Save Ok.';\n }\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n if (check === false) {\n // 有数据的输入框拼接条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(fmNode2);\n const conditions = saveCombined(formList, filter);\n // console.log(conditions);\n\n await fetch(id, conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n } else\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 有数据的输入框拼接条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(fmNode2);\n const conditions = saveCombined(formList, filter);\n // console.log(conditions);\n await fetch(id, conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n })\n .catch(() => {\n result = {};\n });\n }\n\n return result;\n};\n\n/**\n * @todo: search for list with form and table\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:11:42\n */\nconst search = async (fmNode: FormInstance, tabNode: TableInstance, fetch: AsyncFn) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n if (tabNode === undefined || tabNode === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = {};\n const fmInnerNode = fmNode.$;\n const tabInnerNode = tabNode.$;\n const exposed = tabInnerNode.exposed as any;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n // 解析检索条件\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 拼接查询条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(formList);\n const filterConditions = searchCombined(formList, filter, tabNode);\n // console.log(filterConditions);\n // update: 保存查询条件、方法至table对象,为分页组件使用 2022-04-18\n\n exposed.filterConditions = filterConditions;\n exposed.fetch = fetch;\n exposed.startLoading();\n\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n // fixme: 清空列表search框内容 2022-04-21\n const tabChildList = (tabNode as any).subTree?.children || [];\n const searchInputNode = tabChildList.filter((x: VNode) => {\n if (getVNodeName(x) === 'gv-input') return true;\n });\n if (searchInputNode[0]) searchInputNode[0].inputValue = '';\n // fixme: 清空列表表头筛选框 2022-12-14\n const tableEl = tabNode.$el as HTMLElement;\n const tableHeader = tableEl.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const tableFixedHeader = tableEl.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n const columns = tableHeader?.querySelectorAll('.el-table__cell');\n const len = columns?.length || 0;\n for (let i = 0; i < len; i++) {\n const h = columns?.[i]?.querySelector('.render__header');\n if (h) if (h.children[0]) h.children[0].classList.remove('is-selected');\n }\n if (tableFixedHeader) {\n const columnsFixed = tableFixedHeader.querySelectorAll('.el-table__cell');\n const lenFixed = columnsFixed.length;\n for (let i = 0; i < lenFixed; i++) {\n const h = columnsFixed[i].querySelector('.render__header');\n if (h) if (h.children[0]) h.children[0].classList.remove('is-selected');\n }\n }\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n exposed.stopLoading();\n })\n .catch(() => {\n exposed.stopLoading();\n });\n }\n\n return result;\n};\n\n/**\n * @todo: search for list without form but with table\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:22:00\n * @param {*} tabNode\n * @param {*} fetch\n * @param {*} data\n */\nconst searchNoFm = async (tabNode: any, fetch: AsyncFn, data: any) => {\n if (tabNode === undefined || tabNode === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = {};\n const condition = combined(tabNode, data);\n // console.log(JSON.stringify(filterConditions));\n // update: 保存查询条件、方法至table对象,为分页组件使用 2022-04-18\n\n tabNode.filterConditions = condition;\n tabNode.fetch = fetch;\n tabNode.startLoading();\n await fetch(condition)\n .then((res) => {\n result = res.datas;\n // fixme: 清空列表search框内容 2022-04-21\n const tabChildList = (tabNode as any).subTree?.children || [];\n const searchInputNode = tabChildList.filter((x) => {\n if (x?.type?.name === 'gv-input') return true;\n });\n if (searchInputNode[0]) searchInputNode[0].inputValue = '';\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n tabNode.stopLoading();\n return result;\n};\n\n/**\n * @todo: jump to new page search\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:23:46\n * @param {*} tabNode\n * @param {*} filterConditions\n * @param {*} fetch\n * @param {*} pageInfo\n */\nconst toNewPageSearch = async (tabNode: ComponentInternalInstance | null, filterConditions: Recordable<any>, fetch: AsyncFn, pageInfo: PageInfo) => {\n if (filterConditions === undefined || filterConditions === null) {\n console.log('分页查询失败: 过滤条件为空', 'error');\n return false;\n }\n if (fetch === undefined || fetch === null) {\n message('Paging query failed: Request method is empty', 'error');\n return false;\n }\n let result: Recordable<any> = [];\n tabNode?.exposed?.startLoading();\n const sfc = filterConditions || {};\n if (sfc['pageinfo'] === undefined) sfc['pageinfo'] = appendPageInfo() as PageInfo;\n // 更新pageinfo\n sfc['pageinfo'].currentpagenum = pageInfo.currentpagenum;\n sfc['pageinfo'].recordsperpage = pageInfo.recordsperpage;\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n })\n .catch((error) => {\n console.log(error);\n });\n tabNode?.exposed?.stopLoading();\n return result;\n};\n\n/**\n * @todo: 转换单个结果集对象\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-27 10:11:53\n * @param {*} result\n */\nconst trans = (result) => result;\n\n/**\n * @todo: table insert row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:27:57\n * @param {*} searchData\n * @param {*} result\n */\nconst insertResult = (searchData: any, result: any) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n if (result === null || result === undefined)\n // Notify.message('结果对象为空', 'error');\n return false;\n\n if (Array.isArray(result)) searchData.records.splice(0, 0, ...result);\n else\n // if (searchData.records === undefined)\n // result['rownums'] = 0;\n // else\n // if (!searchData.records[0])\n // result['rownums'] = 0;\n // else\n // result['rownums'] = (searchData.records[0].rownums - 1);\n searchData.records.splice(0, 0, trans(result));\n\n return true;\n};\n\n/**\n * @todo: table update row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:28:33\n * @param {*} searchData\n * @param {*} result\n * @param {*} rownums\n */\nconst updateResult = (searchData: any, result: any, rownums: number) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n if (result === null || result === undefined)\n // Notify.message('结果对象为空', 'error');\n return false;\n if (Array.isArray(result)) searchData.records.splice(0, 0, ...result);\n else {\n const currentRowArr = searchData.records.filter((x: any) => {\n if (x.rownums === rownums) return true;\n });\n const currentRow = currentRowArr[0];\n Object.keys(result).forEach((x) => {\n if (x !== 'rownums') currentRow[x] = result[x];\n });\n }\n\n return true;\n};\n\n/**\n * @todo: table remove row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:29:10\n * @param {*} searchData\n * @param {*} index\n */\nconst removeResult = (searchData: any, index: number) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n searchData.records.splice(index, 1);\n // 设置总条数 - 1\n if (searchData.total) searchData.total = searchData.total - 1;\n return true;\n};\n\n/**\n * @todo: 从后端字典对象 { c, v, e, l1, l2 } 取当前语言展示文本\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-03 18:21:13\n * @param {Recordable} dictObj\n * @param {string} lang\n */\nconst getDictDisplayLabel = (dictObj: Recordable<any>, lang?: string | null): string => {\n if (!dictObj || typeof dictObj !== 'object') return '';\n const locale = lang || 'zh-CN';\n switch (locale) {\n case 'en':\n return dictObj.e ?? dictObj.e ?? dictObj.v ?? '';\n case 'l1':\n return dictObj.l1 ?? dictObj.l1 ?? dictObj.v ?? '';\n case 'l2':\n return dictObj.l2 ?? dictObj.l2 ?? dictObj.v ?? '';\n case 'zh-CN':\n default:\n return dictObj.v ?? dictObj.c ?? '';\n }\n};\n\n/**\n * @todo: table set form value\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:30:16\n * @param {*} formList\n * @param {*} rowData\n */\nconst setEditValue = (formList: FormItem[], rowData: Recordable<any>) => {\n console.log(rowData);\n if (formList === null || formList === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (rowData === null || rowData === undefined) {\n message('Set data is null', 'error');\n return false;\n }\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang') || 'zh-CN';\n if (Object.keys(rowData).length !== 0)\n formList.forEach((x) => {\n const fieldValue = rowData[x.field];\n if (fieldValue !== undefined)\n if (x.type !== 'blank' && x.keep !== true)\n // const dicType = x.dicType;\n switch (x.type) {\n case 'text':\n case 'textarea':\n case 'number':\n if (fieldValue !== null && typeof fieldValue === 'object') x.value = fieldValue.c;\n else x.value = fieldValue;\n break;\n case 'date':\n if (x.dateType === 'daterange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'datetime':\n if (x.dateType === 'datetimerange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'time':\n if (x.dateType === 'timerange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'layer':\n if (Array.isArray(fieldValue)) x.value = fieldValue;\n else if (fieldValue) {\n const arr = fieldValue.split(',');\n // const arr = [1, '2', 'a'];\n const arr2 = arr.map((x) => {\n if (!isNaN(parseInt(x))) return x * 1;\n else return x;\n });\n x.value = arr2;\n // console.log(x.value);\n } else x.value = [];\n\n break;\n case 'dic':\n // console.log(rowData[x.field]);\n // if (dicType && dicType.indexOf('t#') !== -1)\n // x.value = rowData[x.field];\n // else {\n // fixme: 增加枚举字典类型赋值 2022-11-07\n if (x.dicType && x.dicType.indexOf('e#') >= 0) {\n if (typeof x.value !== 'object') {\n const enums = x.dicType.split('#');\n const items = enums[1].split(':');\n\n for (let i = 0; i < items.length; i++) {\n const itemChild = items[i].split('=');\n if (itemChild[0] === fieldValue + '') {\n x.value = fieldValue;\n x.showLabel = itemChild[1];\n break;\n }\n }\n }\n } else if (x.multiple)\n if (fieldValue !== null) {\n // 多选字典\n if (typeof fieldValue === 'object') {\n const dictObj = fieldValue;\n const c = dictObj.c;\n const v = getDictDisplayLabel(dictObj, lang);\n\n if (c) {\n const codes = c.split(',');\n const labels = v ? v.split(',') : [];\n x.value = codes.map((code: string, i: number) => ({\n value: code,\n label: labels[i] ?? code,\n }));\n x.showLabel = labels;\n } else {\n x.value = [];\n x.showLabel = [];\n }\n } else if (typeof fieldValue === 'string') {\n const c = fieldValue;\n if (c) {\n const op = [];\n c.split(',').forEach((x) => {\n const o: Recordable<any> = {};\n o.value = x;\n (op as Recordable<any>[]).push(o);\n });\n x.value = op;\n } else x.value = [];\n }\n } else x.value = fieldValue;\n else if (fieldValue !== null && typeof fieldValue === 'object') {\n const dictObj = fieldValue;\n const code = String(dictObj.c ?? '');\n const label = getDictDisplayLabel(dictObj, lang);\n x.value = { value: code, label };\n x.showLabel = label;\n } else x.value = fieldValue;\n\n break;\n default:\n x.value = fieldValue;\n break;\n }\n });\n // formList = newList;\n};\n\n/**\n * @todo: reset form edit\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:36:39\n * @param {FormItem[]} formList\n */\nconst resetEditValue = (formList: FormItem[]) => {\n if (formList === null || formList === undefined) {\n message('form object is null', 'error');\n return false;\n }\n formList.forEach((x) => {\n if (x.type !== 'blank' && x.keep !== true)\n switch (x.type) {\n case 'text':\n case 'textarea':\n case 'number':\n x.value = '';\n break;\n case 'date':\n x.value = '';\n break;\n case 'dic':\n x.value = '';\n x.showLabel = '';\n break;\n }\n });\n};\n\nconst crud = {\n fetchData,\n submit,\n fetchTable,\n save,\n update,\n search,\n searchNoFm,\n toNewPageSearch,\n insertResult,\n updateResult,\n removeResult,\n setEditValue,\n resetEditValue,\n checkForms,\n};\n\nexport { crud };\n","<!--\n * @title: table component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:32:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 21:55:57\n * @version: 1.0.9\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStorage } from '@/hook/web/useStorage';\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvDatePicker } from '@@/GvDatePicker';\n import { GvIcon } from '@@/GvIcon';\n import { GvInput } from '@@/GvInput';\n import { GvPopconfirm } from '@@/GvPopconfirm';\n import type { TPopoverPlacement } from '@@/GvPopover/src/types';\n import { GvTableBar } from '@@/GvTableBar';\n import GvTag from '@@/GvTag/src/GvTag.vue';\n import { debounce, hasClass, hasScrollbar, isEqual, toLine } from '@@/utils';\n import { crud } from '@@/utils/gv.crud';\n import { message } from '@@/utils/gv.notify';\n import { Operation, Refresh } from '@element-plus/icons-vue';\n import { ElButton, ElButtonGroup, ElCheckbox, ElDivider, ElPagination, ElPopover, ElRadio, ElRadioGroup, ElTable, ElTableColumn, ElTooltip, ElTree, type TableInstance } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, nextTick, onMounted, ref, watch, type PropType, type VNode } from 'vue';\n import type { FilterCondition, PageInfo } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('table');\n /** 表头筛选 Popover:覆盖 EP 默认 150px,按内容自适应宽度 */\n const tableHeadFilterPopoverPopperStyle = {\n width: 'max-content',\n minWidth: '180px',\n maxWidth: 'min(420px, 90vw)',\n };\n export default defineComponent({\n name: 'GvTable',\n props: {\n refTable: {\n type: String,\n required: false,\n default: undefined,\n },\n tableHead: {\n type: Array as PropType<TableHeadItem[]>,\n required: true,\n default: () => [],\n },\n tableData: {\n type: Object as PropType<Recordable<any>>,\n required: false,\n default: () => {},\n },\n height: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n maxHeight: {\n type: [Number, String, undefined] as PropType<number | string | undefined>,\n required: false,\n default: undefined,\n },\n maxWidth: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n pageSize: {\n type: Number,\n required: false,\n default: 10,\n },\n rowClassName: {\n type: Function,\n required: false,\n default: () => {},\n },\n rowStyle: {\n type: Function,\n required: false,\n default: () => {},\n },\n spanMethod: {\n type: Function,\n required: false,\n default: () => {},\n },\n cellStyle: {\n type: Function,\n required: false,\n default: () => {},\n },\n // tableImport: {\n // type: Boolean,\n // required: false,\n // default: false\n // },\n // tableExport: {\n // type: Boolean,\n // required: false,\n // default: false\n // },\n tableType: {\n type: String,\n required: false,\n default: undefined,\n },\n tableSort: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n tableKit: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n tableBar: {\n type: Boolean,\n required: false,\n default: true,\n },\n border: {\n type: Boolean,\n required: false,\n default: true,\n },\n tableFetch: {\n type: Function,\n required: false,\n default: () => {},\n },\n multi: {\n // 是否多选\n type: Boolean,\n required: false,\n default: false,\n },\n layout: {\n type: String,\n required: false,\n default: 'total, sizes, prev, pager, next, jumper',\n },\n isShowPage: {\n type: Boolean,\n required: false,\n default: true,\n },\n total: {\n type: Boolean,\n required: false,\n default: false,\n },\n tableInit: {\n type: Boolean,\n required: false,\n default: false,\n },\n beforeImport: {\n type: Function,\n required: false,\n default: undefined,\n },\n tableFilter: {\n type: Object,\n required: false,\n default: undefined,\n },\n tableCb: {\n type: Function,\n required: false,\n default: undefined,\n },\n expandRowKeys: {\n type: Array,\n required: false,\n default: undefined,\n },\n limitHeight: {\n type: Boolean,\n required: false,\n default: true,\n },\n tableAction: {\n type: String,\n required: false,\n default: 'left',\n },\n tableActionIcon: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n // emit\n setup(props, { slots, expose }) {\n // @data\n const appStore = useAppStore();\n const userStore = useUserStore();\n const { getStorage } = useStorage('localStorage');\n const instance = getCurrentInstance();\n let lang = 'zh-CN';\n const sTableAction = appStore.tableAction || props.tableAction;\n const sTableActionIcon = appStore.tableActionIcon;\n const sTableConfirm = appStore.buttonConfirm;\n const detailPlacement: TPopoverPlacement = sTableAction === 'left' ? 'right-start' : 'left-start';\n let sTableType = props.tableType;\n let originTableHead: TableHeadItem[] = props.tableHead;\n let tableHeads: TableHeadItem[] = [];\n const vref = 'gv-table-' + props.refTable;\n const { t } = useBridgeI18n();\n\n const sHeight = props.height;\n const sMaxHeight = ref(props.maxHeight);\n const sMaxWidth = ref(props.maxWidth || '100%');\n const loading = ref(false);\n let isEditTable = false; // 是否是编辑列表\n const pageInfo = ref<PageInfo>({\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n });\n const filterConditions: FilterCondition[] = [];\n const sTableFetch = props.tableFetch;\n let sPageSize = props.pageSize;\n const sDataLoaded = false; // 列表内容是否加载完成\n const resultData = ref(props.tableData);\n const recordsList = ref(props.tableData?.records || []);\n const pageSizes = [10, 20, 50, 100, 200, 500];\n let filterHeads: string[] = []; // 表头Q过滤列缓存\n const popoverVisible = ref({}); // popover筛选使用\n const popoverSearchList = ref({}); // popover筛选使用\n const exportBtnDisabled = ref(true); // 导出按钮disabled\n const exportBtnLoading = ref(false); // 导出按钮loading\n const importBtnLoading = ref(false); // 导入按钮loading\n const tableSortMode = ref(1); // 列表默认排序方式\n const exportDialogShow = ref(false); // 导出列弹出框\n const importDialogShow = ref(false); // 导入弹出框\n const sTableBar = ref(props.tableBar); // 是否显示tablebar\n const gTableBar = appStore.tableBar;\n const tableSearchShow = ref(false); // 是否带有table search框\n const sTableSort = ref(props.tableSort); // 是否显示排序模式框\n const sTableKit = ref(props.tableKit); // 是否显示工具按钮\n const showPopoverDetail = null;\n const pageLayout = ref(props.layout);\n let actionWidth: number = 0; // 操作列宽度\n let transHash: Recordable<string> | null = null; // 列表列缓存\n const headColumn = ref<VNode[]>([]); // 列表列\n const headColumnInit = ref<VNode[]>([]);\n const renderMap = {}; // render是否加载过\n const columnSums: string[] = []; // 合计列\n const columnSumsDecimal: number[] = []; // 合计列位数\n const isIndeterminate = ref([]); // 表头筛选全选\n const scrollLeft = 0; // 列表横向滚动条\n let isAnchor = false; // 是否锚点中列表\n let isScrollbar = false; // 是否dialog中有滚动条\n let isEditContainer = false; // 是否是editContainer标签内\n const columnTreeList = ref([]); // 列表显示、排序数组\n const columnCheckedKeys = ref<string[]>([]); // 列表显示、排序选中数组\n const storageKey = props.refTable + '-' + userStore.loginAccount; // localStorage存储列表字段key\n let lsTableHeads = '';\n let debounceSearch;\n const tableRefs = ref<Record<string, TableInstance | null>>({}); // 表单实例引用,默认空对象\n const tableRef = ref<TableInstance | null>(null); // ElForm 元素引用\n\n // @computed\n /**\n * @todo: pageinfo\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 11:15:00\n */\n const getPageInfo = computed((): PageInfo => {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n if (resultData.value && resultData.value.records !== undefined) {\n pi['currentpagenum'] = resultData.value.current;\n pi['totalpage'] = resultData.value.pages;\n // if (this.sPageSize)\n // pi['size'] = this.sPageSize;\n // else\n pi['recordsperpage'] = resultData.value.size;\n pi['countrows'] = resultData.value.total;\n }\n return pi;\n });\n\n // @method\n\n const setTableRef = (el: TableInstance | null) => {\n tableRef.value = el;\n if (el && props.refTable) tableRefs.value[vref] = el;\n };\n\n const difference = (newVal, oldVal) => {\n let diff = false;\n for (const key in newVal)\n if (!isEqual(newVal[key], oldVal[key])) {\n diff = true;\n break;\n }\n\n return diff;\n };\n\n /**\n * @todo: close all filter popover\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 13:17:27\n * @param {*} property\n */\n const closeAllPopover = (property?: string) => {\n const next = { ...popoverVisible.value };\n Object.keys(next).forEach((key) => {\n if (key !== property) next[key] = false;\n });\n popoverVisible.value = next;\n };\n\n const ensurePopoverKey = (propKey: string) => {\n if (popoverVisible.value[propKey] === undefined) popoverVisible.value = { ...popoverVisible.value, [propKey]: false };\n };\n\n const handlePopoverWrapper = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n /** 阻止表头/表格事件冒泡,避免点击筛选面板内输入框时关闭 Popover */\n const wrapPopoverFilterBody = (body: VNode) => (\n <div\n class=\"table-popover__content\"\n onMousedown={(e: MouseEvent) => e.stopPropagation()}\n onClick={(e: MouseEvent) => e.stopPropagation()}>\n {body}\n </div>\n );\n const getScrollLeft = () => {\n closeAllPopover();\n };\n\n const startLoading = () => {\n loading.value = true;\n };\n const stopLoading = () => {\n loading.value = false;\n };\n\n /**\n * @todo: calculate max height\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 16:16:19\n * @param {*} rootEl\n */\n const getMaxHeight = (rootEl: HTMLElement | undefined) => {\n if (props.limitHeight)\n if (!isEditContainer)\n if (!isScrollbar)\n if (!isAnchor) {\n if (props.tableType !== 'detail')\n if (props.tableType === 'import') sMaxHeight.value = undefined;\n else if (props.maxHeight)\n // if (this.sTableType === 'expand')\n // this.sMaxHeight = undefined;\n // else\n sMaxHeight.value = props.maxHeight;\n else {\n // tab table\n // const tabPane = this.$el.closest('.el-tabs');\n const tabPane = rootEl?.closest('.el-tab-pane');\n // alert(tabPane.clientHeight);\n if (tabPane) {\n // const offsetTop = tabPane.classList.contains('el-tabs--left') ? 235 : 295;\n if (props.isShowPage) sMaxHeight.value = tabPane.clientHeight - 135;\n else sMaxHeight.value = tabPane.clientHeight - 85;\n // sMaxHeight = document.documentElement.clientHeight - tabPane.offsetTop - offsetTop;\n const dialog = rootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = rootEl?.closest('.gv-drawer');\n if (drawer)\n // sMaxHeight = sMaxHeight + 30;\n sMaxHeight.value = undefined;\n } else sMaxHeight.value = undefined; // sMaxHeight = sMaxHeight + 30;\n } else {\n // common table\n const dialog = rootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = rootEl?.closest('.gv-drawer');\n // console.log(document.documentElement.clientHeight);\n // console.log(rootEl?.offsetTop);\n if (!drawer) sMaxHeight.value = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 150;\n // console.log(sMaxHeight);\n } // dialog\n else sMaxHeight.value = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 265;\n }\n }\n } else sMaxHeight.value = undefined;\n else sMaxHeight.value = undefined;\n if (sMaxHeight.value && Number(sMaxHeight.value) < 150) sMaxHeight.value = undefined;\n };\n\n /**\n * @todo: trans records\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 11:33:48\n * @param {*} loadAction\n */\n const transRecords = (loadAction?: string) => {\n if (recordsList.value && recordsList.value.length > 0 && recordsList.value[0]['transHash']) {\n transHash = recordsList.value[0]['transHash'];\n recordsList.value.splice(0, 1);\n }\n // add: 增加查询回调方法 2022-11-23\n if (loadAction !== 'create' && props.tableCb) props.tableCb(recordsList.value, resultData.value);\n };\n\n /**\n * @todo: handle import btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 09:43:56\n */\n const handleImport = () => {\n if (props.beforeImport)\n if (props.beforeImport(props.refTable, tableHeads, props.tableData)) {\n importDialogShow.value = true;\n // 设置loading\n importBtnLoading.value = true;\n } else importDialogShow.value = false;\n else {\n importDialogShow.value = true;\n // 设置loading\n importBtnLoading.value = true;\n }\n };\n\n const handleExport = () => {\n exportDialogShow.value = true;\n // 设置loading\n exportBtnLoading.value = true;\n };\n\n /**\n * @todo: import btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 09:41:45\n */\n const getImportBtn = computed(() => {\n if (slots.import?.()) {\n let buttonName = t('tableBar.import');\n if (slots.import?.()[0].props?.['import-name']) buttonName = slots.import?.()[0].props?.['import-name'];\n const ref = 'gv-import-' + props.refTable;\n return (\n <GvButton\n bizType=\"import\"\n ref={ref}\n onClick={handleImport}\n loading={importBtnLoading.value}>\n {buttonName}\n </GvButton>\n );\n } else return null;\n });\n\n /**\n * @todo: get export btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 16:22:42\n * @param {*} computed\n */\n const getExportBtn = computed(() => {\n if (slots.export?.()) {\n let buttonName = t('common.export');\n if (slots.export?.()[0].props?.['export-name']) buttonName = slots.export?.()[0].props?.['export-name'];\n const ref = 'gv-export-' + props.refTable;\n return (\n <GvButton\n bizType=\"export\"\n ref={ref}\n onClick={handleExport}\n loading={exportBtnLoading.value}\n disabled={exportBtnDisabled.value}>\n {buttonName}\n </GvButton>\n );\n } else return null;\n });\n\n /**\n * @todo: change page size\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-22 17:24:46\n */\n const runPageSearch = async () => {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fetchFn: Fn = instance?.exposed?.fetch || props.tableFetch;\n if (!fetchFn) {\n message(t('table.execSearchWarn'));\n return;\n }\n const result = await crud.toNewPageSearch(instance, fC, fetchFn, pageInfo.value);\n if (result) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n };\n\n const handleSizeChange = async (val: number) => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n getMaxHeight(rootEl);\n pageInfo.value.recordsperpage = val;\n pageInfo.value.currentpagenum = 1;\n sPageSize = val;\n await runPageSearch();\n };\n\n const handleCurrentChange = async (val: number) => {\n pageInfo.value.currentpagenum = val;\n await runPageSearch();\n };\n\n /**\n * @todo: 查询输入框输入响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-19 15:18:03\n * @param {*} val\n */\n const handleTableSearchInput = (val) => {\n debounceSearch(val);\n };\n\n /**\n * @todo: search table input event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-26 22:06:01\n * @param {*} val\n */\n const handleTableSearch = async (val: string) => {\n const fh = {};\n let strFh = '';\n filterHeads.forEach((x: string) => {\n // fixme: 转换@为. 2022-07-20\n let y = x;\n if (y.indexOf('@') > 0) y = y.replace('@', '.');\n if (strFh === '') strFh = toLine(y);\n else strFh += ',' + toLine(y);\n });\n const v = val + '';\n fh['fields'] = strFh;\n fh['val'] = v.trim();\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n fC['searchfilter'] = fh;\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n if (!fetch) {\n message(t('table.execSearchWarn'));\n return;\n }\n\n // 拼接 过滤条件\n pageInfo.value.currentpagenum = 1;\n const result = await crud.toNewPageSearch(instance, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n };\n /**\n * @todo: 列表search框\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-30 17:24:09\n */\n const getTableSearch = () =>\n tableSearchShow.value === true ? (\n <div class=\"gv-table__search\">\n <label>\n <GvInput\n placeholder={`${t('table.tableSearch')}(+)..`}\n prefixIcon=\"gv-icon-sousuo\"\n size=\"small\"\n class=\"gv-table__search-input\"\n onInput={handleTableSearchInput}></GvInput>\n </label>\n </div>\n ) : null;\n\n const handlePopoverShow = () => {\n nextTick(() => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n if (rootEl) {\n const popOvers = document.querySelectorAll('body>.table-popover');\n const tableBodyWidth = rootEl.querySelector('.el-table__body-wrapper >.el-table__body').style.width;\n const clientWidth = document.body.clientWidth - 200 - 20;\n for (let i = 0; i < popOvers.length; i++)\n if (popOvers[i].style.display !== 'none')\n if (parseInt(rootEl.querySelector('.el-table__body-wrapper').scrollLeft))\n popOvers[i].style.left = parseInt(tableBodyWidth) - clientWidth + parseInt(popOvers[i].style.left) - parseInt(rootEl.querySelector('.el-table__body-wrapper').scrollLeft) + 'px';\n else popOvers[i].style.left = parseInt(popOvers[i].style.left) - parseInt(rootEl.querySelector('.el-table__body-wrapper').scrollLeft) + 'px';\n }\n });\n };\n const handlePopoverHide = () => {\n // this.popoverVisible[prop] = false;\n };\n\n /**\n * @todo: 列选中状态切换\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:44:01\n * @param {*} columns\n * @param {*} checkedKeys\n */\n const createChangedColumns = (columns, checkedKeys) =>\n columns.map((column) => {\n const target = { ...column };\n if (target.type !== 'action' && target.type !== 'expand') target.hasHidden = !checkedKeys.includes(target.prop);\n return target;\n });\n\n /**\n * @todo: 列顺序和选中方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:43:09\n * @param {*} data\n * @param {*} checked\n * @param {*} childChecked\n */\n const handleColumnCheckChange = (data, checked, childChecked) => {\n const checkedKeys = this.$refs['gv-table-column-tree'].$children[0].getCheckedKeys();\n const hColumns = createChangedColumns(tableHeads, checkedKeys);\n // console.log(hColumns);\n headColumn.value = getTableColumn('recreate', hColumns);\n // 存储到 localStorage\n setStoreLocal(checkedKeys, checked, data);\n };\n\n /**\n * @todo: table refresh btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:45:55\n */\n const handleTableRefresh = async () => {\n // 判断search框中是否有值\n const el = instance?.vnode?.el as HTMLElement | undefined;\n if (el) {\n const inputSearch = el.querySelector('.gv-table__search-input .el-input__inner');\n if (inputSearch && inputSearch.value !== undefined && inputSearch.value !== null && inputSearch.value !== '') {\n inputSearch.value = '';\n handleTableSearch('');\n } else {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n // 拼接 过滤条件\n pageInfo.value.currentpagenum = 1;\n const result = await crud.toNewPageSearch(instance, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n }\n }\n };\n\n /**\n * @todo: tablebar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 11:21:41\n */\n const getTableBar = () => {\n const btns: any[] = [];\n const defaultSlots = slots.default?.();\n if (defaultSlots && defaultSlots.length > 0)\n defaultSlots.forEach((x: VNode) => {\n // add table btn bar\n if (typeof x.type === 'object' && x.type !== null && 'name' in x.type && x.type.name === 'GvButton') btns.push(x);\n });\n // export btn\n const exportSlots = slots.export?.();\n if (exportSlots && exportSlots.length > 0)\n exportSlots.forEach(() => {\n btns.push(getExportBtn.value);\n });\n\n // import btn\n const importSlots = slots.import?.();\n if (importSlots && importSlots.length > 0)\n importSlots.forEach(() => {\n btns.push(getImportBtn.value);\n });\n\n // console.log(btns);\n return btns;\n };\n\n /**\n * @todo: get kit bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:41:30\n */\n const getKitBar = () => {\n let isVisible = true;\n if (sTableKit.value !== undefined) isVisible = sTableKit.value;\n if (props.tableType === 'import' || props.tableType === 'detail' || props.tableType === 'expand' || props.tableType === 'export') isVisible = false;\n // 行编辑去掉隐藏列功能\n if (isEditTable === true) isVisible = false;\n return isVisible === true ? (\n <div class=\"gv-table__kitbar\">\n <ElButtonGroup>\n <ElButton\n style=\"width: 37px\"\n size=\"small\"\n icon={Refresh}\n onClick={handleTableRefresh}\n />\n <ElPopover\n placement=\"bottom-end\"\n width=\"150\"\n trigger=\"click\">\n {{\n reference: () => (\n <ElButton\n size=\"small\"\n style={{ width: '37px' }}\n icon={Operation}\n />\n ),\n default: () => (\n <ElTree\n ref=\"gv-table-column-tree\"\n node-key=\"columnProp\"\n tree-data={columnTreeList}\n check-on-click-node={true}\n default-checked-keys={columnCheckedKeys.value}\n show-checkbox\n draggable\n on-check-change={handleColumnCheckChange}\n style={{ maxHeight: '450px', overflow: 'hidden auto' }}\n class=\"gv-table-column-tree\"\n />\n ),\n }}\n </ElPopover>\n </ElButtonGroup>\n </div>\n ) : null;\n };\n\n /**\n * @todo: sort mode\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 11:17:36\n */\n const getSortModel = () => {\n let isVisible = true;\n if (sTableSort.value !== undefined) isVisible = sTableSort.value;\n else isVisible = props.tableType !== 'import';\n return isVisible === true ? (\n <div\n class=\"gv-table__sortmode\"\n style={{ marginRight: `${tableSearchShow.value === true ? '10px' : '0'}` }}>\n <i class=\"iconfont gv-icon-paixu2\" />\n <ElRadioGroup\n modelValue={tableSortMode.value}\n onUpdate:modelValue={(val: number) => {\n tableSortMode.value = val;\n }}\n ref=\"gv-table-sortmode\">\n <ElRadio value={1}>{t('common.currentPage')}</ElRadio>\n <ElRadio\n value={2}\n disabled={pageInfo.value?.totalpage === 1}>\n {t('common.all')}\n </ElRadio>\n </ElRadioGroup>\n </div>\n ) : null;\n };\n\n /**\n * @todo: column filter handler\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:27:41\n * @param {*} e\n * @param {*} propField\n * @param {*} type\n */\n const columnFilterHandler = async (e: MouseEvent, propField: string, type: string) => {\n const popoverHtml = e.target.closest('.table-popover');\n const inputHtml = popoverHtml.querySelector('.gv-input .el-input__inner');\n const checkList = popoverHtml.querySelectorAll('.el-checkbox');\n const dateHtmlArr = popoverHtml.querySelectorAll('.gv-datepicker .el-range-input');\n let filterValue = '';\n switch (type) {\n case 'text':\n case 'number':\n filterValue = inputHtml.value;\n if (filterValue.length === 0)\n // Notify.alert('请输入筛选内容', 'warning');\n return;\n\n break;\n case 'date':\n filterValue = dateHtmlArr[0].value + '|' + dateHtmlArr[1].value;\n break;\n case 'dic':\n if (checkList !== null)\n for (const check of checkList)\n if (hasClass(check, 'is-checked'))\n if (check.innerText !== t('common.checkAll'))\n filterValue = filterValue !== '' ? filterValue + '|' + check.querySelector('.el-checkbox__original').value : check.querySelector('.el-checkbox__original').value;\n\n break;\n }\n if (filterValue.length === 0 || filterValue === '|') {\n message(t('table.columnFilterWarn'));\n return;\n }\n\n if (type === 'date') {\n const pattern = /\\d{4}-\\d{2}-\\d{2}\\\\|\\d{4}-\\d{2}-\\d{2}/;\n if (!pattern.test(filterValue)) {\n message(t('table.columnFilterDateWarn'));\n return;\n }\n }\n\n if (propField !== null) {\n const fh = {};\n fh[toLine(propField.replace('@', '.')) + '|' + type] = filterValue;\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n fC.value['headfilter'] = Object.assign(fC.value['headfilter'] || {}, fh);\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n // 隐藏popover\n popoverVisible.value[propField] = false;\n document.body.click();\n // 拼接 过滤条件\n const result = await crud.toNewPageSearch(this, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n // 标识筛选列\n const tableHeader = this.$el.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const columns = tableHeader.querySelectorAll('.el-table__cell');\n const len = columns.length;\n for (let i = 0; i < len; i++) {\n const h = columns[i].querySelector('.render__header');\n if (h && h.children[0] && h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.add('is-selected');\n }\n // 标识筛选列(带fix)\n const tableFixHeader = this.$el.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n if (tableFixHeader !== null) {\n const fixColumns = tableFixHeader.querySelectorAll('.el-table__cell');\n if (fixColumns !== null) {\n const fixLen = fixColumns.length;\n for (let i = 0; i < fixLen; i++) {\n const h = fixColumns[i].querySelector('.render__header');\n if (h && h.children[0] && h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.add('is-selected');\n }\n }\n }\n }\n };\n /**\n * @todo: 列表头筛选重置\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-20 10:05:08\n * @param {*} e\n */\n const columnFilterHandlerReset = async (e: MouseEvent, propField: string, type: stringType) => {\n const popoverHtml = e.target.closest('.table-popover');\n const inputHtml = popoverHtml.querySelector('.gv-input .el-input__inner');\n const checkList = popoverHtml.querySelectorAll('.el-checkbox');\n const dateHtmlArr = popoverHtml.querySelectorAll('.gv-datepicker .el-range-input');\n switch (type) {\n case 'text':\n case 'number':\n inputHtml.value = '';\n break;\n case 'date':\n dateHtmlArr[0].value = '';\n dateHtmlArr[1].value = '';\n break;\n case 'dic':\n if (checkList !== null)\n for (const check of checkList)\n if (hasClass(check, 'is-checked')) {\n // check.classList.remove('is-checked');\n check.querySelector('.el-checkbox__original').checked = false;\n check.querySelector('.el-checkbox__input').classList.remove('is-checked');\n }\n\n break;\n }\n\n if (propField !== null) {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fh = fC.value['headfilter'];\n if (fh !== undefined && fh != null) delete fh[toLine(propField.replace('@', '.')) + '|' + type];\n\n fC.value['headfilter'] = Object.assign(fC.value['headfilter'] || {}, fh);\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n\n // 隐藏popover\n popoverVisible.value[propField] = false;\n document.body.click();\n\n if (type !== 'date') {\n const primaryBtn = popoverHtml.querySelector('.el-button--primary');\n primaryBtn.setAttribute('disabled', 'disabled');\n primaryBtn.classList.add('is-disabled');\n }\n\n // 拼接 过滤条件\n const result = await crud.toNewPageSearch(this, fC, fetch, pageInfo.value);\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n // 标识筛选列\n const tableHeader = this.$el.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const columns = tableHeader.querySelectorAll('.el-table__cell');\n const len = columns.length;\n for (let i = 0; i < len; i++) {\n const h = columns[i].querySelector('.render__header');\n if (h) if (h.children[0]) if (h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.remove('is-selected');\n }\n const tableFixedHeader = this.$el.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n // fixed: 解决列表没有锁定列时报错问题 2023-10-07\n if (tableFixedHeader) {\n const columnsFixed = tableFixedHeader.querySelectorAll('.el-table__cell');\n const lenFixed = columnsFixed.length;\n for (let i = 0; i < lenFixed; i++) {\n const h = columnsFixed[i].querySelector('.render__header');\n if (h) if (h.children[0]) if (h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.remove('is-selected');\n }\n }\n }\n };\n\n /**\n * @todo: set column width by column name\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:12:01\n * @param {*} label\n * @param {*} query\n * @param {*} edit\n */\n const getColWidth = (label: string, query: boolean, edit: boolean) => {\n if (!label) return;\n let label2 = label;\n if (lang === 'en') label2 = label.toLowerCase();\n let sWidth = 0;\n if (label2.indexOf(t('table.date')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.month2')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.month')) !== -1) sWidth = 90;\n else if (label2.indexOf(t('table.time')) !== -1) sWidth = 130;\n else if (label2.indexOf(t('table.deliveryTime')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.name')) !== -1) sWidth = 120;\n else if (label2.indexOf(t('table.userAccount')) !== -1) sWidth = 120;\n else if (label === t('table.customerName')) sWidth = 115;\n else if (label2.indexOf(t('table.approve')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.audit')) !== -1) sWidth = 110;\n else if (label === t('table.operator')) sWidth = 110;\n else if (label2.indexOf(t('table.staff')) !== -1) sWidth = 100;\n else if (label.indexOf(t('table.whether')) !== -1) sWidth = 110;\n else if (label === t('table.enableStatus')) sWidth = 110;\n else if (label === t('table.orderStatus')) sWidth = 110;\n else if (label2 === t('table.status')) sWidth = 90;\n else if (label2.indexOf(t('table.status')) !== -1) sWidth = 90;\n else if (label === t('table.vin')) sWidth = 185;\n else if (label === t('table.carNo')) sWidth = 105;\n else if (label2.indexOf(t('table.phone')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.tel')) !== -1) sWidth = 110;\n else if (label === t('table.sex')) sWidth = 90;\n else if (label2.indexOf(t('table.type')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.amount')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.money')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.balance')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.unitPrice')) !== -1) sWidth = 95;\n else if (label2.indexOf(t('table.times')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.number')) !== -1) sWidth = 140;\n else if (label2.indexOf(t('table.code')) !== -1) sWidth = 135;\n else if (label2.indexOf(t('table.odd')) !== -1) sWidth = 230;\n else if (label2.indexOf(t('table.unit')) !== -1) sWidth = 110;\n else if (label2.indexOf('省') !== -1) sWidth = 90;\n else if (label2.indexOf('市') !== -1) sWidth = 100;\n else if (label2.indexOf('区') !== -1) sWidth = 120;\n else if (label2.indexOf(t('table.color')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.storageAge')) !== -1) sWidth = 105;\n else if (label2.indexOf(t('table.chassis')) !== -1) sWidth = 105;\n else if (label2.indexOf('排放标准') !== -1) sWidth = 115;\n else if (label2 === t('table.brand')) sWidth = 105;\n else if (label === t('table.series')) sWidth = 105;\n else if (label === t('table.strain')) sWidth = 105;\n else if (label === '运输方式') sWidth = 100;\n else if (label2.indexOf(t('table.rate')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.level')) !== -1) sWidth = edit === true ? 140 : 115;\n // fixme: 增加表头query宽度判断 2022-04-30\n if (query === true && sWidth > 0) sWidth += 15;\n\n // fixme: 增加表头edit宽度判断 2022-06-11\n if (edit === true && sWidth > 0) sWidth += 20;\n return sWidth;\n };\n\n /**\n * @todo: table cell formatter\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:19:28\n * @param {*} row\n * @param {*} column\n * @param {*} cellValue\n * @param {*} index\n */\n const columnFormatter = (row, column, cellValue, index: number) => {\n // console.log(column);\n // console.log(cellValue);\n if (cellValue != null && cellValue.v !== undefined) return cellValue.v;\n else return cellValue === undefined ? '' : cellValue;\n };\n\n /**\n * @todo: table header search input change method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-22 09:55:46\n * @param {string} val\n */\n const handleColumnFilter = (val: string) => {\n const popoverHtmlList = Array.from(document.body.querySelectorAll<HTMLElement>('body>.table-popover'));\n let popoverHtml: HTMLElement | undefined;\n for (const pop of popoverHtmlList)\n if (pop.style.display !== 'none') {\n popoverHtml = pop;\n break;\n }\n if (!popoverHtml) return;\n const primaryBtn = popoverHtml.querySelector<HTMLElement>('.el-button--primary');\n if (!primaryBtn) return;\n if (val !== undefined && val !== null && val !== '') {\n primaryBtn.removeAttribute('disabled');\n primaryBtn.classList.remove('is-disabled');\n } else {\n primaryBtn.setAttribute('disabled', 'disabled');\n primaryBtn.classList.add('is-disabled');\n }\n };\n /**\n * @todo: set header filter\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:23:58\n * @param {string} type\n * @param {string} label\n * @param {string} prop\n * @param {string} dicType\n * @param {string} filtercode\n */\n const renderHeadFilter = (type: string, label: string, prop: string, dicType: string | undefined, filtercode: string) => {\n let render: VNode | null = null;\n let fc = filtercode !== undefined ? filtercode : '';\n switch (type) {\n case 'text':\n case 'number':\n render = (\n <div>\n <GvInput\n placeholder={`${t('table.search')} - ${label}`}\n size=\"small\"\n onInput={handleColumnFilter}\n vref={prop}></GvInput>\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size=\"small\"\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size=\"small\"\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n break;\n case 'date':\n render = (\n <div>\n <GvDatePicker\n placeholder={`${t('table.search')} - ${label}`}\n size=\"small\"\n type=\"daterange\"\n format={dicType}\n value-format={dicType}\n // onChange={handleColumnFilter}\n vref={prop}\n />\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size=\"small\"\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size=\"small\"\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n break;\n case 'dic':\n if (dicType) {\n let ret = [];\n const src = dicType.toLowerCase();\n let dictCache;\n if (this.$store && this.$store.getters) dictCache = this.$store.getters.dictCache[src];\n if (dicType !== 'xzqh' && dictCache) ret = dictCache;\n // 生成字典列表\n else if (dicType === 'xzqh') {\n if (label.indexOf('省') >= 0) fc = '0000$';\n // else if (label.indexOf('市') >= 0)\n // fc = '^[1-9][1-9][0-9][1-9]00$';\n // else if (label.indexOf('区') >= 0)\n // fc = '^[1-9][1-9][0-9][1-9][0-9][1-9]$';\n\n let dict;\n if (this.$store && this.$store.getters) dict = this.$store.getters.dictDivision;\n if (dict) {\n const cache = {};\n cache['key'] = 'xzqh';\n cache['dict'] = dict;\n this.$store.dispatch('user/addDictCache', cache);\n ret = dict;\n }\n } else {\n let dict;\n if (this.$store && this.$store.getters) dict = this.$store.getters.dict[src];\n if (dict) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dict;\n this.$store.dispatch('user/addDictCache', cache);\n ret = dict;\n }\n }\n // 设置过滤\n let ret2 = ret;\n if (fc) {\n const reg = new RegExp(fc, 'i');\n ret2 = ret.filter((x) => reg.test(x.c));\n }\n // ret.map((x) => {\n // checkList.push(x.c);\n // });\n // console.log(checkList);\n // 最大显示100个\n if (ret2 && ret2.length !== undefined && ret2.length > 0) {\n ret2.splice(50);\n render = (\n <div>\n <div>\n <ElCheckbox\n checked={false}\n key=\"checkAll\"\n label={t('common.checkAll')}\n style={{ display: 'block' }}\n indeterminate={isIndeterminate[prop]}\n onChange={handleDictCheckAll}\n class=\"gv-checkbox\">\n {t('common.checkAll')}\n </ElCheckbox>\n <ElDivider style=\"margin: 5px 0px\" />\n {ret2.map((x) => (\n <ElCheckbox\n checked={false}\n key={x.c}\n label={x.c}\n style={{ display: 'block' }}\n onChange={handleDictCheck}\n class=\"gv-checkbox\">\n {lang === 'zh-CN' ? x.t : x.e}\n </ElCheckbox>\n ))}\n </div>\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size=\"small\"\n disabled=\"true\"\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size=\"small\"\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n } else render = null;\n } else render = null;\n\n break;\n }\n return render ? wrapPopoverFilterBody(render) : null;\n };\n\n /**\n * @todo: open popover\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:22:13\n * @param {*} type\n * @param {*} label\n * @param {*} prop\n * @param {*} dicType\n * @param {*} filtercode\n * @param {*} event\n */\n /** 点击表头筛选箭头:仅关闭其它列 Popover,开关由 ElPopover trigger=click + v-model 处理 */\n const handlePopoverSlotClick = (event: MouseEvent, prop: string) => {\n event?.stopPropagation();\n closeAllPopover(prop);\n };\n\n /**\n * @todo: render column item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 14:37:55\n */\n const renderColumnItem = (item: TableHeadItem, index: number, loadAction: string | undefined, tableFixed: string | undefined) => {\n const {\n prop,\n label,\n fixed,\n width,\n minWidth = 135,\n align = 'left',\n formatter,\n type = 'text',\n dicType,\n query = false,\n render,\n edit = false,\n format,\n cellBlur,\n cellEnter,\n cellChange,\n hidden = false,\n hasHidden = false,\n filtercode,\n showLabel,\n dicRemote,\n isreload = true,\n cb,\n multiple = false,\n dateType = 'date',\n selectable,\n min,\n max,\n collapseTags = false, // 多选字典tag是否折叠\n showLabelProp, // 表选showLabel列\n columnFilter = true, // 表头是否带筛选\n multiLabel = '', // 多级表头\n heads, // 多级表头\n focus,\n } = item;\n let reserveSelection = false;\n if (selectable) reserveSelection = true;\n let sHidden = false;\n if (hidden === true) sHidden = true;\n if (hasHidden === true) sHidden = true;\n if (sHidden === true) return null;\n\n let sLabel = label;\n let sProp = prop;\n if (prop && prop.indexOf('@') > 0) sProp = prop.split('@')[1];\n const key = loadAction === 'create' ? Math.random() : sProp;\n\n let placement: TPopoverPlacement = 'bottom-start';\n if (index >= tableHeads.length - 2) placement = 'bottom-end';\n let sFixed = sTableType === 'expand' ? undefined : fixed;\n if (tableFixed === 'n') sFixed = undefined;\n if (sTableAction === 'right') sFixed = undefined;\n // console.log(sFixed);\n if (sFixed) sLabel = sLabel + '';\n if (query === true) {\n sLabel = sLabel + '(Q)';\n filterHeads.push(prop);\n tableSearchShow.value = true;\n }\n ensurePopoverKey(prop);\n const sortable = sTableType === 'expand' ? false : 'custom';\n\n let sWidth;\n if (width !== 'auto')\n if (width) sWidth = width;\n else sWidth = getColWidth(label, query, edit);\n if (isEditTable === false && edit === true) isEditTable = true;\n\n // 多级表头\n if (multiLabel && multiLabel !== '') {\n if (heads && Array.isArray(heads)) {\n const multiLabels: VNode[] = [];\n heads.forEach((x) => {\n const hType = x.type || 'text';\n let hSLabel = x.label;\n let hSProp = x.prop;\n if (x.prop && x.prop.indexOf('@') > 0) hSProp = x.prop.split('@')[1];\n const hKey = loadAction === 'create' ? Math.random() : hSProp;\n\n let hSFixed = sTableType === 'expand' ? undefined : x.fixed;\n if (tableFixed === 'n') hSFixed = undefined;\n // console.log(sFixed);\n if (hSFixed) hSLabel = hSLabel + '';\n if (x.query === true) {\n hSLabel = hSLabel + '(Q)';\n filterHeads.push(x.prop);\n tableSearchShow.value = true;\n }\n let hReserveSelection = false;\n if (x.selectable) hReserveSelection = true;\n // 初始化 列的筛选popover都是隐藏的\n ensurePopoverKey(x.prop);\n const hSortable = sTableType === 'expand' ? false : 'custom';\n\n let hSWidth;\n if (x.width !== 'auto')\n if (x.width) hSWidth = x.width;\n else hSWidth = getColWidth(x.label, x.query, x.edit);\n multiLabels.push(\n <ElTableColumn\n fixed={hSFixed}\n prop={hSProp}\n label={hSLabel}\n width={hSWidth}\n align={x.align}\n column-key={hSProp}\n key={hKey}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={hSortable}\n selectable={x.selectable}\n reserveSelection={hReserveSelection}\n header-align={x.align || 'left'}\n style={{ display: sHidden ? 'none' : '' }}\n sort-orders={['ascending', 'descending']}>\n {{\n header: () => (\n <div\n onClick={(e) => handlePopoverWrapper(e)}\n class=\"render__header\">\n <ElPopover\n visible={popoverVisible.value[x.prop]}\n onUpdate:visible={(val: boolean) => {\n popoverVisible.value = { ...popoverVisible.value, [x.prop]: val };\n }}\n trigger=\"click\"\n width=\"auto\"\n popperStyle={tableHeadFilterPopoverPopperStyle}\n showArrow={true}\n placement={placement}\n popperClass={`gv-popover table-popover table-popover-${props.refTable}`}\n onAfter-enter={handlePopoverShow}\n onAfter-leave={handlePopoverHide}>\n {{\n default: () => renderHeadFilter(hType, x.label, x.prop, x.dicType, x.filtercode),\n reference: () => (\n <div\n class=\"gv-table-header-filter\"\n onClick={(e) => handlePopoverSlotClick(e, x.prop)}>\n {hSLabel}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"></GvIcon>\n </div>\n ),\n }}\n </ElPopover>\n </div>\n ),\n }}\n </ElTableColumn>,\n );\n });\n return <ElTableColumn label={multiLabel + ''}>{multiLabels}</ElTableColumn>;\n }\n } else if (typeof render === 'function') {\n // 自定义字段 render\n let className = 'gv-cell__render';\n if (edit === true) className += ' gv-cell__isedit';\n return (\n <ElTableColumn\n // fixed = {fixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={key}\n column-key={sProp}\n show-overflow-tooltip={false}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}\n class-name={className}>\n {{\n default: (scope) => {\n const render1 = render(scope, sProp);\n return render1;\n },\n header: () => <div class=\"render__header\">{label}</div>,\n }}\n </ElTableColumn>\n );\n } else if (edit === true)\n return (\n <ElTableColumn\n style={{ display: sHidden ? 'none' : '' }}\n fixed={sFixed}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={key}\n column-key={sProp}\n show-overflow-tooltip={false}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n // filters={this.columnFilters}\n // filter-method={this.filterHandler}\n // filter-placement='bottom-start'\n class-name=\"gv-cell__isedit\">\n {{\n default: (scope) => {\n // if (this.renderMap[`${scope.$index}-${sProp}`] === undefined) {\n const render1 = renderRowEdit(\n scope,\n label,\n sProp,\n prop,\n type,\n dicType,\n format,\n cellBlur,\n cellEnter,\n filtercode,\n showLabel,\n dicRemote,\n isreload,\n cb,\n multiple,\n dateType,\n render,\n cellChange,\n min,\n max,\n collapseTags,\n showLabelProp,\n focus,\n );\n return render1;\n },\n header: () => <div class=\"render__header\">{label}</div>,\n }}\n </ElTableColumn>\n );\n else if (type === 'tag')\n // 设置tag\n return (\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={sProp}\n column-key={sProp}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}\n class-name=\"gv-cell__render\">\n {{\n default: (scope) =>\n scope.row[sProp] !== null && typeof scope.row[sProp] === 'object' ? (\n scope.row[sProp].v ? (\n <GvTag>{scope.row[sProp].v}</GvTag>\n ) : null\n ) : scope.row[sProp] ? (\n <GvTag>{scope.row[sProp]}</GvTag>\n ) : null,\n header: () => <div class=\"render__header\">{sLabel}</div>,\n }}\n </ElTableColumn>\n );\n else if (\n dicType !== 'company' &&\n dicType !== 'dept' &&\n dicType !== 'user' &&\n label.indexOf('市') === -1 &&\n label.indexOf('区县') === -1 &&\n label.indexOf('区/县') === -1 &&\n props.tableType !== 'list' &&\n props.tableType !== 'detail' &&\n props.tableType !== 'expand' &&\n props.tableType !== 'import'\n )\n if (columnFilter !== true)\n return (\n // add: af-table-column插件,计算列宽对于表头带有排序、(Q)等情况自适应列款不准确\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n column-key={sProp}\n key={key}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n selectable={selectable}\n reserveSelection={reserveSelection}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n >\n {{\n header: () => <div class=\"render__header\">{sLabel}</div>,\n }}\n </ElTableColumn>\n );\n else\n return (\n // add: af-table-column插件,计算列宽对于表头带有排序、(Q)等情况自适应列款不准确\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n column-key={sProp}\n key={key}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n selectable={selectable}\n reserveSelection={reserveSelection}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n >\n {{\n header: () => (\n <div\n onClick={(e) => handlePopoverWrapper(e)}\n class=\"render__header\">\n <ElPopover\n visible={popoverVisible.value[prop]}\n onUpdate:visible={(val: boolean) => {\n popoverVisible.value = { ...popoverVisible.value, [prop]: val };\n }}\n trigger=\"click\"\n width=\"auto\"\n popperStyle={tableHeadFilterPopoverPopperStyle}\n showArrow={true}\n placement={placement}\n popperClass={`gv-popover table-popover table-popover-${props.refTable}`}\n onAfter-enter={handlePopoverShow}\n onAfter-leave={handlePopoverHide}>\n {{\n default: () => renderHeadFilter(type, label, prop, dicType, filtercode),\n reference: () => (\n <div\n class=\"gv-table-header-filter\"\n onClick={(e) => handlePopoverSlotClick(e, prop)}>\n {sLabel}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"></GvIcon>\n </div>\n ),\n }}\n </ElPopover>\n </div>\n ),\n }}\n </ElTableColumn>\n );\n else\n return (\n <ElTableColumn\n fixed={sFixed}\n prop={sProp}\n style={{ display: sHidden ? 'none' : '' }}\n label={sLabel}\n width={sWidth}\n align={align}\n key={sProp}\n selectable={selectable}\n reserveSelection={reserveSelection}\n column-key={sProp}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}>\n {{\n header: () => <div class=\"render__header\">{props.tableType === 'list' ? sLabel : label}</div>,\n }}\n </ElTableColumn>\n );\n };\n\n /**\n * @todo: action column\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 14:08:55\n */\n const renderAction = (scope, content: string[], action: any[], render: Fn | undefined, confirmArr: boolean[], iconArr: string[]) => {\n let sContent = content;\n if (render) sContent = render(scope, content);\n return (\n <div class=\"flex\">\n {sContent.map((item: string, index: number) => {\n let x = item;\n let xx = 't';\n let disabled = false;\n if (item.indexOf('|') > 0) {\n const arr = item.split('|');\n x = arr[0];\n if (arr[1] === 'd') {\n xx = 't';\n disabled = true;\n // xx = arr[1];\n }\n }\n // console.log(item);\n let confirms = false;\n if (confirmArr) confirms = confirmArr[index];\n let detail = false;\n let icon = '';\n\n let actionType = '';\n if (x.indexOf(t('table.edit')) !== -1 || x.indexOf(t('table.modify')) !== -1 || x.indexOf(t('table.update')) !== -1) icon = 'el-icon-edit';\n else if (x.indexOf(t('table.delete')) !== -1 || x.indexOf(t('table.cancel')) !== -1) {\n icon = 'el-icon-delete';\n confirms = true;\n } else if (x.indexOf(t('table.add')) !== -1) icon = 'gv-icon-add';\n else if (x.indexOf(t('table.scheduling')) !== -1 || x.indexOf(t('table.production')) !== -1) icon = 'gv-icon-task';\n else if (x.indexOf(t('table.append')) !== -1) {\n actionType = '1';\n icon = 'gv-icon-baocun2';\n } else if (x.indexOf(t('table.disabled')) !== -1) {\n icon = 'gv-icon-tingyong';\n confirms = true;\n } else if (x.indexOf(t('table.cancel1')) !== -1) {\n icon = 'gv-icon-tingyong';\n confirms = true;\n } else if (x.indexOf(t('table.close')) !== -1) {\n icon = 'el-icon-circle-close';\n confirms = true;\n } else if (x.indexOf(t('table.detail')) !== -1) {\n icon = 'gv-icon-mingxi';\n detail = true;\n } else if (x.indexOf(t('table.logging')) !== -1) {\n icon = 'gv-icon-daiban';\n detail = true;\n } else if (x.indexOf(t('table.info')) !== -1 || x.indexOf(t('table.infos')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.view')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.message')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.price')) !== -1) icon = 'gv-icon-jiage1';\n else if (x.indexOf(t('table.money')) !== -1) icon = 'gv-icon-jiage1';\n else if (x.indexOf(t('table.dispatch')) !== -1) icon = 'gv-icon-winfo-icon-zhipai';\n else if (x.indexOf(t('table.adjust')) !== -1) icon = 'gv-icon-wujiliandongdizhi';\n else if (x.indexOf(t('table.leaveFactory')) !== -1 || x.indexOf(t('table.delivery')) !== -1) icon = 'gv-icon-paichesonghuodan';\n else if (x.indexOf(t('table.quit')) !== -1 || x.indexOf(t('table.transfer')) !== -1) icon = 'gv-icon-zhipai';\n else if (x.indexOf(t('table.submit')) !== -1 || x.indexOf(t('table.report')) !== -1) icon = 'gv-icon-tijiao';\n else if (x.indexOf(t('table.download')) !== -1) icon = 'gv-icon-xiazai';\n else if (x.indexOf(t('table.upload')) !== -1) icon = 'gv-icon-fujian';\n else if (x.indexOf(t('table.notify')) !== -1) icon = 'gv-icon-huodong';\n else if (x.indexOf(t('table.send')) !== -1) icon = 'gv-icon-xiazaidaorumoban1x';\n else if (x.indexOf(t('table.freeze')) !== -1) icon = 'gv-icon-dongjie';\n else if (x.indexOf(t('table.apply')) !== -1) icon = 'gv-icon-biaoshilei_yuanchengshengji';\n else if (x.indexOf(t('table.unfreeze')) !== -1) icon = 'gv-icon-jiedong';\n else if (x.indexOf(t('table.qrcode')) !== -1) icon = 'gv-icon-erweima';\n else if (x.indexOf(t('table.build')) !== -1) icon = 'gv-icon-rocket';\n else if (x.indexOf(t('table.confirm')) !== -1) icon = 'gv-icon-tianshenpi';\n else if (x.indexOf(t('table.proxyPay')) !== -1) icon = 'gv-icon-bengchefenleijiageguanli';\n else if (x.indexOf(t('table.open')) !== -1) icon = 'gv-icon-addNode';\n else if (x.indexOf(t('table.audit')) !== -1) icon = 'gv-icon-shenpi2';\n else if (x.indexOf(t('table.top')) !== -1) icon = 'gv-icon-zhidingxian';\n else if (x.indexOf(t('table.publish')) !== -1) icon = 'gv-icon-fabu';\n else if (x.indexOf(t('table.withdraw')) !== -1) icon = 'gv-icon-fanhui5';\n else if (x.indexOf(t('table.cost')) !== -1) icon = 'gv-icon-yingshou';\n else if (x.indexOf(t('table.approve')) !== -1) icon = 'gv-icon-shenpi2';\n else if (x.indexOf(t('table.reject')) !== -1) icon = 'gv-icon-shenqingbohui';\n else if (x.indexOf(t('table.exec')) !== -1) icon = 'gv-icon-kaishi_yunhang';\n else if (x.indexOf(t('table.recover')) !== -1) icon = 'gv-icon-huifu1';\n else if (x.indexOf(t('table.dispose')) !== -1) icon = 'gv-icon-task';\n else if (x.indexOf(t('table.ok')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.select')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.lock')) !== -1) icon = 'el-icon-lock';\n else if (x.indexOf(t('table.unLock')) !== -1) icon = 'el-icon-unlock';\n else if (x.indexOf(t('table.enable')) !== -1) icon = 'gv-icon-yunhang';\n else if (x.indexOf(t('table.transmit')) !== -1) icon = 'gv-icon-xiada';\n else if (x.indexOf(t('table.putaway')) !== -1) icon = 'el-icon-top';\n else if (x.indexOf(t('table.soldOut')) !== -1) icon = 'el-icon-bottom';\n else if (x.indexOf(t('table.transferPeople')) !== -1) icon = 'gv-icon-zhuanpai1';\n else if (x.indexOf(t('table.copy')) !== -1) icon = 'el-icon-copy-document';\n else if (x.indexOf(t('table.followUp')) !== -1) icon = 'gv-icon-mingdangenjin';\n else if (x.indexOf(t('table.circleCheck')) !== -1) icon = 'gv-icon-huanjiance';\n else if (x.indexOf(t('table.completed')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.finished')) !== -1) icon = 'gv-icon-wangongguanli';\n else if (x.indexOf(t('table.beCompleted')) !== -1) icon = 'gv-icon-wangongqueren';\n else if (x.indexOf(t('table.openCard')) !== -1) icon = 'gv-icon-daka-copy';\n else if (x.indexOf(t('table.closeCard')) !== -1) icon = 'gv-icon-guanqia';\n else if (x.indexOf(t('table.clockIn')) !== -1) icon = 'gv-icon-qiandao';\n else if (x.indexOf(t('table.preview')) !== -1) icon = 'el-icon-view';\n else if (x.indexOf(t('table.replace')) !== -1) icon = 'gv-icon-tihuantupian';\n else if (x.indexOf(t('table.settlement')) !== -1) icon = 'gv-icon-eduguanli';\n else if (x.indexOf(t('table.inWarehouse')) !== -1) icon = 'gv-icon-caituiruku';\n else if (x.indexOf(t('table.save')) !== -1) {\n icon = 'gv-icon-baocun1';\n actionType = '1';\n } else icon = 'el-icon-document-copy';\n\n // added by andy.ten@tom.com 2024-08-14 增加自定义按钮icon\n if (iconArr && Array.isArray(iconArr) && iconArr.length > index && iconArr[index]) icon = iconArr[index];\n if (sTableActionIcon === false) icon = '';\n if (confirms === true)\n if (sTableConfirm === false)\n return icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n text={x}\n size=\"small\"\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n confirm('是否?').then(\n () => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }}></GvButton>\n </span>\n </div>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n text={x}\n size=\"small\"\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n confirm(`${t('table.isConfirm')} ${x} ${t('table.action')} ?`).then(\n () => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }}>\n {x}\n </GvButton>\n </span>\n </div>\n </ElTooltip>\n );\n else\n return (\n <GvPopconfirm\n title={`${t('table.isConfirm')} ${x} ${t('table.action')} ?`}\n onConfirm={() => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n }}>\n {{\n reference: () => (\n <div class=\"gv-table-action-trigger\">\n {icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size=\"small\"\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}></GvButton>\n </span>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size=\"small\"\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}>\n {x}\n </GvButton>\n </span>\n </ElTooltip>\n )}\n </div>\n ),\n }}\n </GvPopconfirm>\n );\n else if (detail === true)\n return (\n <ElPopover\n title={x}\n placement={detailPlacement}\n trigger=\"click\"\n showArrow={true}\n onAfter-enter={() => handleDetailPopoverShow(action, index, scope.row, scope.$index)}\n popperClass=\"gv-popconfirm\">\n {{\n reference: () => (\n <div class=\"gv-table-action-trigger\">\n {icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size=\"small\"\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}></GvButton>\n </span>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size=\"small\"\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}>\n {x}\n </GvButton>\n </span>\n </ElTooltip>\n )}\n </div>\n ),\n default: () => showPopoverDetail,\n }}\n </ElPopover>\n );\n else\n // action btn\n return icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n visible={xx === 't'}\n disabled={disabled}\n text={x}\n size=\"small\"\n onClick={() => {\n // event.preventDefault();\n // event.stopPropagation();\n if (actionType === '1') {\n if (checkEditRow(scope.$index))\n try {\n startLoading();\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n } else\n try {\n startLoading();\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n }}\n icon={icon}></GvButton>\n </span>\n </div>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n visible={xx === 't'}\n disabled={disabled}\n text={x}\n size=\"small\"\n type=\"text\"\n onClick={() => {\n // event.preventDefault();\n // event.stopPropagation();\n startLoading();\n if (actionType === '1') {\n if (checkEditRow(scope.$index))\n try {\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n } else\n try {\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n }}>\n {x}\n </GvButton>\n </span>\n </div>\n </ElTooltip>\n );\n })}\n </div>\n );\n };\n\n /**\n * @todo: get table header columns\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 12:03:16\n * @param {*} loadAction\n * @param {*} tableColumns\n */\n const getTableColumn = (loadAction?: string, tableColumns?: TableHeadItem[]) => {\n const res: VNode[] = [];\n tableHeads = loadAction === 'recreate' ? tableColumns! : props.tableHead;\n // 从localStorage中获取已保存的列表显示信息\n if (loadAction === 'create') {\n lsTableHeads = getStorage(storageKey);\n if (lsTableHeads) {\n const thd: TableHeadItem[] = [];\n const lsTableHeadsArr = lsTableHeads.split(',');\n let startIndex = 0;\n if (tableHeads[0].type === 'expand') {\n thd[0] = { ...tableHeads[0] } as TableHeadItem;\n startIndex = 0;\n if (tableHeads[1].type === 'action') thd[1] = { ...tableHeads[1] } as TableHeadItem;\n startIndex = 1;\n } else if (tableHeads[0].type === 'action') {\n startIndex = 0;\n thd[0] = { ...tableHeads[0] } as TableHeadItem;\n }\n\n lsTableHeadsArr.forEach((x: string, index: number) => {\n const xx = x.split('|');\n const ff = tableHeads.filter((f) => f.prop === xx[0]);\n if (ff.length > 0) {\n if (ff[0].hidden !== true) {\n ff[0].hasHidden = xx[1] === 't';\n const treeNode = {\n columnProp: ff[0].prop,\n label: ff[0].label,\n };\n if (loadAction === 'create') {\n (columnTreeList.value as any[]).push(treeNode);\n if (ff[0].hasHidden !== true && xx[1] !== 't') columnCheckedKeys.value.push(ff[0].prop);\n }\n }\n thd[index + startIndex] = { ...ff[0] };\n }\n });\n tableHeads = thd;\n }\n }\n\n // 第一列为序号列\n // let fixed = this.tableType !== 'detail';\n let fixed: string | undefined = sTableAction;\n if (tableHeads[0].type === 'expand') {\n fixed = undefined as unknown as string;\n sTableType = 'expand';\n }\n\n if (sTableType === 'expand') fixed = undefined as unknown as string;\n // 如果是edit多选列表,则去掉列锁定\n let tableFixed = 'y';\n if (tableHeads.some((x) => x.multiple === true)) {\n tableFixed = 'n';\n fixed = undefined;\n }\n\n if (props.multi === true) {\n fixed = undefined;\n tableFixed = 'n';\n }\n\n // 添加展开列\n if (tableHeads[0].type === 'expand')\n res.push(\n <ElTableColumn\n type=\"expand\"\n key=\"expand\"\n column-key=\"expand\"\n prop=\"expand\"\n width=\"42\"\n fixed={fixed}>\n {{ default: (scope: any) => tableHeads[0].render?.(scope) }}\n </ElTableColumn>,\n );\n let rownumWidth = '55';\n if (pageInfo.value?.currentpagenum)\n if (pageInfo.value.currentpagenum * pageInfo.value.totalpage > 10000) rownumWidth = '65';\n else if (pageInfo.value.currentpagenum * pageInfo.value.totalpage > 1000) rownumWidth = '57';\n\n if (fixed === 'left')\n res.push(\n <ElTableColumn\n fixed={fixed}\n // prop='rownums'\n key=\"rownums\"\n column-key=\"rownums\"\n label={t('table.rownums')}\n width={rownumWidth}\n min-width={rownumWidth}>\n {{\n default: (scope) => {\n // console.log(this.pageInfo.current);\n // console.log((this.pageInfo.current === -1 ? 0 : this.pageInfo.current - 1) * (this.pageInfo.size === -1 ? 0 : this.pageInfo.size));\n if (pageInfo.value?.currentpagenum) return (pageInfo.value.currentpagenum === -1 ? 0 : pageInfo.value.currentpagenum - 1) * pageInfo.value.totalpage + scope.$index + 1;\n else return scope.$index + 1;\n },\n }}\n </ElTableColumn>,\n );\n else\n res.push(\n <ElTableColumn\n // prop='rownums'\n key=\"rownums\"\n column-key=\"rownums\"\n label={t('table.rownums')}\n width={rownumWidth}\n min-width={rownumWidth}>\n {{\n default: (scope) => {\n if (pageInfo.value?.currentpagenum) return (pageInfo.value.currentpagenum === -1 ? 0 : pageInfo.value.currentpagenum - 1) * pageInfo.value.totalpage + scope.$index + 1;\n else return scope.$index + 1;\n },\n }}\n </ElTableColumn>,\n );\n // add: 第二列判断是否是多选框 2022-06-11\n if (props.multi === true)\n if (fixed === 'left')\n res.push(\n <ElTableColumn\n fixed=\"left\"\n prop=\"multi\"\n key=\"multi\"\n type=\"selection\"\n width=\"35\"></ElTableColumn>,\n );\n else\n res.push(\n <ElTableColumn\n prop=\"multi\"\n key=\"multi\"\n type=\"selection\"\n width=\"35\"></ElTableColumn>,\n );\n\n const actionHead = tableHeads.filter((x) => x.type === 'action');\n if (sTableAction === 'left')\n if (actionHead.length > 0) {\n const content = actionHead[0].content || [];\n const action = actionHead[0].action || [];\n const render = actionHead[0].render;\n const confirmArr = actionHead[0].confirm || [];\n const icon = actionHead[0].icon || [];\n if (actionHead[0].width) actionWidth = +actionHead[0].width;\n else if (sTableActionIcon === true)\n if (content.length === 1)\n // update: 对于只有一个按钮的操作列,设置固定宽度 2022-07-13\n actionWidth = 52;\n else actionWidth = content.length === 2 ? content.length * 44 : content.length * 42;\n else if (content.length === 1) actionWidth = content.join('').length * 30;\n else if (lang === 'zh_CN') actionWidth = content.join('').length * 25;\n else actionWidth = content.join('').length * 13;\n\n const actionColumn = (\n <ElTableColumn\n label={t('table.action')}\n key=\"caozuo\"\n column-key=\"caozuo\"\n prop=\"caozuo\"\n fixed={fixed}\n width={actionWidth}>\n {{ default: (scope: any) => renderAction(scope, content, action, render, confirmArr, icon) }}\n </ElTableColumn>\n );\n res.push(actionColumn);\n }\n\n filterHeads = [];\n tableHeads.forEach((item: TableHeadItem, index: number) => {\n if (item.type !== 'expand' && item.type !== 'action') {\n const columnVNode = renderColumnItem(item, index, loadAction, tableFixed);\n if (columnVNode) res.push(columnVNode);\n if (!lsTableHeads && loadAction === 'create')\n if (item.hidden !== true) {\n const treeNode = {\n columnProp: item.prop,\n label: item.label,\n };\n (columnTreeList.value as any[]).push(treeNode);\n columnCheckedKeys.value.push(item.prop);\n }\n }\n\n // this.$set(this.tableHead, index, item);\n // if (loadAction === 'create')\n // this.$set(this.resultData, index, item);\n });\n if (sTableAction === 'right')\n if (actionHead.length > 0) {\n const content = actionHead[0].content || [];\n const action = actionHead[0].action || [];\n const render = actionHead[0].render;\n const confirmArr = actionHead[0].confirm || [];\n const icon = actionHead[0].icon || [];\n if (actionHead[0].width) actionWidth = +actionHead[0].width;\n else if (sTableActionIcon === true)\n if (content.length === 1)\n // update: 对于只有一个按钮的操作列,设置固定宽度 2022-07-13\n actionWidth = 52;\n else actionWidth = content.length === 2 ? content.length * 44 : content.length * 42;\n else if (content.length === 1)\n if (lang === 'zh_CN') actionWidth = content.join('').length * 30;\n else actionWidth = content.join('').length * 18;\n else if (lang === 'zh_CN') actionWidth = content.join('').length * 25;\n else actionWidth = content.join('').length * 13;\n\n const actionColumn = (\n <ElTableColumn\n label={t('table.action')}\n key=\"caozuo\"\n column-key=\"caozuo\"\n prop=\"caozuo\"\n fixed={fixed}\n width={actionWidth}>\n {{ default: (scope: any) => renderAction(scope, content, action, render, confirmArr, icon) }}\n </ElTableColumn>\n );\n res.push(actionColumn);\n }\n\n // this.setDataLoaded(false);\n return res;\n };\n\n /**\n * @todo: table sort\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 17:45:10\n */\n const sortMethod = async ({ column, prop, order }: { column: Recordable<any>; prop: string | null; order: 'ascending' | 'descending' | null }) => {\n const fieldName = prop || column?.property;\n const sortingType = order ?? column?.order ?? null;\n if (tableSortMode.value === 1) {\n // 本页排序\n let sumData = {}; // 放置总计一行数据\n recordsList.value.forEach((item) => {\n if (item.name === t('common.total')) sumData = item;\n });\n if (sortingType === null)\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a['rownums'];\n let row2 = b['rownums'];\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row1 - row2;\n else return row1.toString().localeCompare(row2.toString());\n });\n else if (sortingType === 'ascending' || sortingType === null) {\n // 正序\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a[fieldName] || '';\n let row2 = b[fieldName] || '';\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row1 - row2;\n else return row1.toString().localeCompare(row2.toString());\n });\n // 删除table中的总计\n recordsList.value.forEach((item, index) => {\n if (item.name === t('common.total')) recordsList.value.splice(index, 1);\n return item;\n });\n if (Object.keys(sumData).length > 0) recordsList.value.push(sumData);\n } else if (sortingType === 'descending') {\n // 倒序\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a[fieldName] || '';\n let row2 = b[fieldName] || '';\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row2 - row1;\n else return row2.toString().localeCompare(row1.toString());\n });\n recordsList.value.map((item, index) => {\n if (item.name === t('common.aggregate')) recordsList.value.splice(index, 1);\n return item;\n });\n if (Object.keys(sumData).length > 0) recordsList.value.push(sumData);\n }\n } else {\n // 后端排序\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fetchFn = (instance?.exposed?.fetch as Fn) || props.tableFetch;\n if (!fetchFn) {\n message(t('table.execSearchWarn'));\n return;\n }\n const oi: Recordable<string> = {};\n\n oi['orderfilter'] = fieldName;\n oi['ordertype'] = sortingType === 'ascending' ? 'asc' : 'desc';\n fC['orderinfo'] = oi;\n const result = await crud.toNewPageSearch(instance, fC, fetchFn, pageInfo.value);\n if (result) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n }\n\n // 隐藏popover\n popoverVisible.value[fieldName] = false;\n document.body.click();\n };\n\n /**\n * @todo: 合并表格行或合并列方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-16 14:27:07\n */\n // const handleSpanMethod = (columnObj) => {\n // props.spanMethod(columnObj);\n // };\n\n // const getSummaries = (param) => {\n // const { columns, data } = param;\n // const sums = [];\n // columns.forEach((column, index) => {\n // if (column.columnKey === 'rownums') {\n // sums[index] = t('common.total');\n // return;\n // }\n // if (column.property === 'multi' || column.columnKey === 'caozuo' || column.columnKey === 'expand') return;\n // const keyIndex = columnSums.indexOf(column.property);\n // if (keyIndex !== -1) {\n // const values = data.map((item) => Number(item[column.property]));\n // if (!values.every((value) => isNaN(value))) {\n // sums[index] = values.reduce((prev, curr) => {\n // const value = Number(curr);\n // if (!isNaN(value)) return prev + curr;\n // else return prev;\n // }, 0);\n // const decimal = columnSumsDecimal[keyIndex];\n // sums[index] = amountFormat(sums[index], decimal);\n // sums[index] += '';\n // } else sums[index] = '';\n // } else return;\n // });\n // return sums;\n // };\n\n /**\n * @todo: 拖动表头改变列宽度响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2024-01-07 10:16:42\n * @param {*} newWidth\n * @param {*} oldWidth\n * @param {*} column\n * @param {*} event\n */\n // const headerDragend = (newWidth, oldWidth, column, event) => {\n // // fixed: 解决fix table 表头列宽度改变时fix列高度不正确问题 2024-01-07\n // nextTick(() => {\n // // fixCellH.style.height = cellH.offsetHeight;\n // this.$refs[this.vref].doLayout();\n // const fixCellH = this.$refs[this.vref].$el.querySelector('.el-table__fixed-header-wrapper>.el-table__header .el-table__cell');\n // const cellH = this.$refs[this.vref].$el.querySelector('.el-table__header-wrapper>.el-table__header .el-table__cell');\n // // console.log(cellH.offsetHeight);\n // fixCellH.style.height = cellH.offsetHeight + 'px';\n // // console.log(fixCellH.style.height);\n // });\n // });\n\n // @watch\n watch(\n () => props.tableHead,\n (newVal, prevVal) => {\n if (newVal.length !== prevVal.length) headColumn.value = getTableColumn();\n else {\n const res = difference(newVal, originTableHead);\n if (res === true) headColumn.value = getTableColumn();\n }\n },\n );\n watch(\n () => sMaxHeight.value,\n () => {\n if (props.tableType !== 'import')\n if (isScrollbar === false)\n if (isAnchor === false) {\n if (sHeight) sMaxHeight.value = sHeight;\n } else sMaxHeight.value = undefined;\n else sMaxHeight.value = undefined;\n },\n );\n watch(\n () => props.tableData,\n (newValue) => {\n resultData.value = newValue;\n },\n );\n\n watch(\n () => resultData.value,\n (newValue) => {\n if (newValue) {\n recordsList.value = newValue.records || newValue;\n // fixme: 解决无法获取结果集时报错问题 2022-06-05\n if (recordsList.value === undefined || recordsList.value.length === undefined) recordsList.value = [];\n if (recordsList.value.length > 0 && recordsList.value[0]['transHash']) {\n transHash = recordsList.value[0]['transHash'];\n recordsList.value.splice(0, 1);\n if (headColumn.value.length === 0) {\n tableHeads.forEach((x: TableHeadItem) => {\n let sProp = x.prop;\n if (sProp && sProp.indexOf('@') > 0) sProp = sProp.split('@')[1];\n if (props.total)\n if (x.sum === true) {\n columnSums.push(sProp);\n columnSumsDecimal.push(x.decimal ? x.decimal : 2);\n x.align = 'right';\n }\n\n const trans: string | undefined = transHash?.[sProp];\n if (trans) {\n const typeArr = trans.split('|');\n switch (typeArr[0]) {\n case 'company':\n x.dicType = 'company';\n break;\n case 'dept':\n x.dicType = 'dept';\n break;\n case 'user':\n x.dicType = 'user';\n break;\n case 'dic':\n x.type = 'dic';\n x.dicType = typeArr[1];\n break;\n case 'division':\n x.type = 'dic';\n x.dicType = 'xzqh';\n break;\n case 'date':\n x.type = 'date';\n x.dateType = typeArr[1];\n break;\n }\n }\n });\n headColumn.value = getTableColumn();\n }\n } else headColumn.value = getTableColumn();\n pageInfo.value = getPageInfo.value;\n // 设置排序方式\n if (pageInfo.value.totalpage > 1) tableSortMode.value = 2;\n else tableSortMode.value = 1;\n // 设置导出按钮状态\n if (recordsList.value && recordsList.value.length > 0) exportBtnDisabled.value = false;\n else exportBtnDisabled.value = true;\n\n // 加载状态\n // this.sDataLoaded = true;\n }\n nextTick(() => {\n // 重新计算\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n getMaxHeight(rootEl);\n\n // add: 增加查询回调方法 2022-11-23\n if (props.tableCb) props.tableCb(recordsList.value, resultData.value);\n tableRef.value?.doLayout();\n });\n },\n );\n\n // @exposed\n expose({\n setTableRef,\n fetch,\n startLoading,\n stopLoading,\n filterConditions,\n });\n\n // @created\n // get localStorage table column\n const loginLang = userStore.language;\n if (loginLang === 'en') lang = 'en';\n originTableHead = JSON.parse(JSON.stringify(props.tableHead));\n // fixme: 初始化时根据结果集赋值pagesize 解决后端设置pageSize后前端无法加载问题 2022-04-30\n // if (this.tableInit === true)\n if (Object.keys(props.tableData).length === 0) headColumnInit.value = getTableColumn('create');\n if (props.tableType === 'expand') {\n sTableSort.value = false;\n sTableBar.value = false;\n } else if (props.tableType === 'detail') headColumnInit.value = getTableColumn();\n if (props.tableData && props.tableData.size) {\n sPageSize = props.tableData.size;\n // 设置排序方式\n if (props.tableData.pages > 1) tableSortMode.value = 2;\n else tableSortMode.value = 1;\n }\n\n // 设置列表按钮以及右上角按钮的全局隐藏或显示\n if (gTableBar === false) {\n sTableSort.value = false;\n sTableKit.value = false;\n sTableBar.value = true;\n }\n\n // set pageSizes\n if (pageSizes.includes(sPageSize) === false) {\n pageSizes.splice(0, 0, sPageSize);\n pageSizes.sort(function (m, n) {\n if (m < n) return -1;\n else if (m > n) return 1;\n else return 0;\n });\n }\n\n if (props.tableType === 'detail') {\n // this.sMaxHeight = '200px';\n pageLayout.value = 'total, prev, pager, next';\n // 设置detail宽度\n sMaxWidth.value = '850px';\n } else if (props.tableType === 'expand') if (!sMaxWidth.value) sMaxWidth.value = '85%';\n // this.pageLayout = 'total, prev, pager, next';\n\n transRecords('create');\n\n // @mounted\n onMounted(() => {\n debounceSearch = debounce(handleTableSearch, 500);\n nextTick(() => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n window.addEventListener('click', () => {\n closeAllPopover();\n });\n window.addEventListener('resize', () => getMaxHeight(rootEl));\n if (rootEl) {\n const tableBodyWrapper = rootEl.querySelector('.el-table__body-wrapper');\n if (tableBodyWrapper) tableBodyWrapper.addEventListener('scroll', getScrollLeft, false);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor = true;\n const dialogBody = rootEl.closest('.gv-drawer__body--inner');\n if (dialogBody) isScrollbar = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-edit__container')) isEditContainer = true;\n }\n });\n });\n\n // @render\n return () => {\n pageInfo.value = getPageInfo.value;\n return props.visible ? (\n <div\n class={props.tableType === 'expand' ? 'gv-table__container gv-table__container-expand' : 'gv-table__container'}\n style={{ width: '100%', minWidth: '0px', maxWidth: sMaxWidth.value }}>\n <GvTableBar visible={sTableBar.value}>{getTableBar()}</GvTableBar>\n {getKitBar()}\n {getTableSearch()}\n {getSortModel()}\n <div\n class=\"gv-table__loading-wrap\"\n v-loading={loading.value}\n element-loading-text=\"Loading...\">\n <ElTable\n ref={vref}\n // element-loading-spinner='iconfont gv-icon-loading'\n data={recordsList.value}\n border={props.tableType === 'detail' ? false : props.border}\n highlight-current-row={true}\n table-layout=\"fixed\"\n style=\"width: 100%\"\n height={sHeight}\n max-height={sMaxHeight.value}\n stripe={true}\n row-key={(row: any) => row.rownums}\n expand-row-keys={props.expandRowKeys}\n row-style={props.rowStyle}\n cell-style={props.cellStyle}\n header-cell-class-name=\"headerStyleEvent\"\n //span-method={handleSpanMethod}\n show-summary={props.total}\n // summary-method={getSummaries}\n // toggleRowSelection\n // on-row-class-name={props.rowClassName} // 设置行class的回调方法\n onSort-change={sortMethod}\n // on-row-dblclick={props.handleRowDblClick} // 设置行双击事件方法\n // on-row-click={props.handleRowClick} // 设置行单击事件方法\n // on-selection-change={handleSelectionChange} // 设置多选行事件\n // on-expand-change={handleExpandChange} // 行展开异步加载方法\n // on-header-dragend={headerDragend} // 列拖宽度方法\n class={props.tableType === 'detail' ? 'gv-table-noborder' : props.border === true ? `${prefixCls}` : 'gv-table-noborder'}>\n {props.tableData && Object.keys(props.tableData).length > 0 ? headColumn.value : headColumnInit.value}\n </ElTable>\n </div>\n <ElPagination\n style={{ display: props.isShowPage ? '' : 'none' }}\n pageSizes={pageSizes}\n pageSize={pageInfo.value.recordsperpage}\n layout={pageLayout.value}\n total={pageInfo.value.countrows}\n currentPage={pageInfo.value.currentpagenum}\n hideOnSinglePage={true}\n onUpdate:page-size={handleSizeChange}\n onUpdate:current-page={handleCurrentChange}\n class=\"gv-pagination\"></ElPagination>\n </div>\n ) : null;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-table__container {\n width: 100%;\n height: calc(100% - 10em);\n margin-top: -2px;\n\n .gv-table__loading-wrap {\n position: relative;\n width: 100%;\n }\n .gv-table__sortmode {\n float: right;\n\n & i {\n padding-right: 15px;\n font-size: 14px;\n }\n\n :deep(.el-radio) {\n margin-right: 12px;\n\n .el-radio__input {\n &.is-checked {\n .el-radio__inner {\n background: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n\n .el-radio__label {\n font-size: $tableThFontSize;\n }\n\n .el-radio__input.is-checked + .el-radio__label {\n color: var(--primaryColor, $primaryColor);\n }\n }\n }\n\n .gv-table__kitbar {\n position: relative;\n float: right;\n width: 74px;\n height: 28px;\n margin: 1px 0 0 8px;\n line-height: 28px;\n\n .el-button-group {\n height: 26px;\n line-height: 26px;\n\n .el-button {\n padding: 6px 8px 5px;\n }\n }\n }\n\n .gv-table__search {\n position: relative;\n float: right;\n width: 160px;\n margin-top: 2px;\n\n :deep(.gv-table__search-input) {\n // top: -30px;\n float: right;\n width: 150px;\n\n .el-input__inner {\n font-size: 12px;\n padding-left: 1px !important;\n }\n }\n }\n\n .gv-table {\n border-top: 1px solid $tableBorderColor;\n border-bottom: 0;\n border-left: 1px solid $tableBorderColor;\n\n :deep(.ascending .sort-caret.ascending) {\n border-bottom-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.descending .sort-caret.descending) {\n border-top-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.el-table__header-wrapper) {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n font-size: $tableThFontSize;\n font-weight: $tableThFontWeight;\n line-height: 34px;\n background-color: $tableThBgColor;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 1px solid $tableBorderColor;\n\n .cell {\n padding-right: 3px;\n color: $textColor;\n font-weight: 500 !important;\n .render__header {\n font-weight: 500 !important;\n }\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .is-selected {\n .gv-table-header-filter {\n color: $primaryColor;\n }\n }\n\n .render__header {\n display: inline-flex;\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n :deep(.el-table__body-wrapper) {\n .el-table__body {\n .el-table__row.expanded {\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n\n .el-table__expanded-cell {\n padding: 4px 2px 10px 89px;\n }\n\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 0;\n\n // border-bottom:1px solid $tableBorderColor;\n\n .cell {\n // box-sizing: border-box;\n // display: inline-block;\n width: auto;\n height: 28px;\n overflow: hidden;\n font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n\n .gv-tag {\n box-sizing: border-box;\n display: inline-block;\n height: 22px;\n padding: 0 5px;\n font-size: $appTextSize;\n line-height: 22px;\n color: #409eff;\n white-space: nowrap;\n background-color: #ecf5ff;\n border: 1px solid #d9ecff;\n border-radius: 4px;\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: auto;\n padding: 0 5px;\n\n .gv-input {\n height: 25px;\n line-height: 25px;\n\n .el-input__inner {\n height: 25px;\n padding-left: 5px;\n line-height: 25px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-input-number {\n width: 120px;\n height: 25px;\n line-height: 25px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 25px;\n padding-left: 5px;\n line-height: 25px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n height: 25px;\n font-size: $textSizeSecondary;\n line-height: 25px;\n\n .el-input__inner {\n height: 25px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 25px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n width: 100%;\n\n .el-input {\n // line-height: 28px;\n // height: 25px;\n\n // height: 28px;\n font-size: $textSizeSecondary;\n\n // line-height: 25px;\n\n .el-input__inner {\n // height:26px !important;\n padding-right: 25px;\n padding-left: 25px;\n\n // line-height:26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n\n .el-select__tags {\n .el-tag {\n height: 22px;\n margin: 1px 0 1px 6px;\n }\n }\n }\n\n .gv-select__table {\n width: 100%;\n vertical-align: inherit !important;\n .el-input {\n // height: 25px;\n font-size: $textSizeSecondary;\n\n // line-height: 25px;\n\n .el-input__inner {\n // height:26px;\n padding-right: 25px;\n padding-left: 25px;\n\n // line-height:26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n // &.current-row{\n // td.el-table__cell{\n // background-color: var(--defaultHover,$defaultHover);\n // }\n // }\n\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n }\n }\n\n :deep(.el-table__footer-wrapper) {\n .el-table__footer {\n .el-table__cell {\n padding: 2px 0;\n font-size: $tableThFontSize;\n }\n }\n }\n\n :deep(.el-table__fixed),\n :deep(.el-table__fixed-right) {\n height: 100% !important;\n .el-table__fixed-header-wrapper {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n font-size: $tableThFontSize;\n font-weight: $tableThFontWeight !important;\n line-height: 34px;\n background-color: $tableThBgColor;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 1px solid $tableBorderColor;\n\n .cell {\n height: 28px;\n font-weight: 500 !important;\n // display: inline-block; // flex\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .is-selected {\n .gv-table-header-filter {\n color: $primaryColor;\n }\n }\n\n .render__header {\n display: inline-block; // flex\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n\n .el-checkbox {\n .el-checkbox__input {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked,\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__fixed-body-wrapper {\n .el-table__body {\n .el-table__row.expanded {\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n\n .el-table__expanded-cell {\n padding: 2px;\n }\n\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n // box-sizing: border-box;\n padding: 2px 0;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 0;\n\n .cell {\n // display: inline-block; // flex\n width: auto;\n height: 28px;\n overflow: hidden;\n font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n // padding-left: 3px;\n .el-button {\n // margin-left: 5px;\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .gv-tag {\n box-sizing: border-box;\n\n // display: inline-block;\n height: 24px;\n padding: 0 5px;\n font-size: 13px;\n line-height: 24px;\n color: #409eff;\n white-space: nowrap;\n background-color: #ecf5ff;\n border: 1px solid #d9ecff;\n border-radius: 4px;\n }\n\n .el-checkbox {\n .el-checkbox__input {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked,\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n // border-bottom: 1px solid $tableBorderColor;\n }\n }\n }\n }\n\n .el-table__fixed-footer-wrapper {\n .el-table__footer {\n .el-table__cell {\n padding: 2px 0;\n font-size: $tableThFontSize;\n }\n }\n }\n }\n }\n\n .gv-table-noborder {\n :deep(.el-table__header-wrapper) {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n font-size: $tableThFontSize;\n font-weight: $tableThFontWeight;\n line-height: 34px;\n\n .cell {\n height: 28px;\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n font-weight: 500 !important;\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .render__header {\n display: inline-flex;\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n :deep(.el-table__body-wrapper) {\n .el-table__body {\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n\n // border-bottom:1px solid $tableBorderColor;\n\n .cell {\n // box-sizing: border-box;\n // display: inline-block;\n width: auto;\n height: 28px;\n overflow: hidden;\n font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .ht-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .ht-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: 28px;\n padding: 0 5px;\n line-height: 28px;\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n }\n\n .gv-input-number {\n width: 120px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n .el-input {\n font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n\n .gv-select__table {\n vertical-align: inherit !important;\n .el-input {\n font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n }\n }\n }\n }\n\n :deep(.el-table__fixed),\n :deep(.el-table__fixed-right) {\n .el-table__fixed-header-wrapper {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n font-size: $tableThFontSize;\n font-weight: $tableThFontWeight !important;\n line-height: 34px;\n\n .cell {\n display: inline-block; // flex\n height: 28px;\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n font-weight: 500 !important;\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .render__header {\n display: inline-block; // flex\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n .el-table__fixed-body-wrapper {\n .el-table__body {\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n // box-sizing: border-box;\n padding: 2px 0;\n\n .cell {\n display: inline-block; // flex\n width: auto;\n height: 28px;\n overflow: hidden;\n font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: 28px;\n padding: 0 5px;\n line-height: 28px;\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n }\n\n .gv-input-number {\n width: 120px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n .el-input {\n font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n\n .gv-select__table {\n vertical-align: inherit !important;\n .el-input {\n font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n\n .cell {\n display: inline-block; // flex\n }\n }\n }\n }\n }\n }\n }\n\n // pageinfo\n :deep(.el-pagination) {\n float: right;\n\n .el-input__inner {\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover) !important;\n }\n\n &:hover {\n border-color: var(--primaryColorHover, $primaryColorHover) !important;\n }\n }\n\n .el-pagination__total {\n left: 15px;\n font-size: $appTextSize !important;\n // position: absolute;\n margin-right: 20px;\n font-weight: 500;\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-pagination__sizes {\n // position: absolute;\n left: 65px;\n margin: 0px 10px 0 0;\n width: 100px;\n line-height: 28px;\n .el-select {\n width: 100px;\n line-height: 28px;\n .el-select__wrapper {\n font-size: $appTextSize;\n min-height: 28px;\n }\n .el-input {\n width: 90px;\n\n .el-input__inner {\n height: 25px;\n line-height: 25px;\n }\n }\n }\n }\n\n .btn-prev,\n .btn-next {\n min-width: 25px;\n padding: 0;\n }\n\n .el-pager {\n li.active,\n li:hover {\n color: var(--primaryColor, $primaryColor);\n }\n .is-active number {\n font-size: $appTextSize;\n }\n .number {\n min-width: 30px;\n font-size: $appTextSize;\n font-weight: $fontWeight;\n }\n }\n\n .el-pagination__jump {\n .el-pagination__goto {\n font-size: $appTextSize;\n }\n .el-pagination__classifier {\n font-size: $appTextSize;\n }\n .el-pagination__editor {\n font-size: $appTextSize;\n width: 45px;\n\n .el-input__inner {\n height: 24px;\n line-height: 24px;\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTable from './src/GvTable.vue';\n\nconst GvTablePlugin = {\n install(app: App): void {\n app.component(GvTable.name ?? 'GvTable', GvTable);\n },\n};\nexport default GvTablePlugin;\n\nexport { GvTable };\n","<!--\n * @title: tab pane component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:19:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 10:24:57\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { hasScrollbar } from '@@/utils';\n import { defineComponent, getCurrentInstance, nextTick, onMounted, ref } from 'vue';\n\n // const { getPrefixCls } = useStyle();\n // const prefixCls = getPrefixCls('tab-pane');\n export default defineComponent({\n name: 'GvTabPane',\n props: {\n name: {\n type: String,\n required: false,\n default: undefined,\n },\n label: {\n type: String,\n required: false,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n maxHeight: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n autoHeight: {\n type: Boolean,\n required: false,\n default: false,\n },\n },\n\n // emit\n emits: ['tab-click'],\n setup(props, { emit, slots }) {\n // @data\n const sMaxHeight = props.maxHeight;\n const isAnchor = ref(false);\n const isScrollbar = ref(false);\n const isEditContainer = ref(false);\n const instance = getCurrentInstance();\n\n // @watch\n // @methods\n\n // @mounted\n onMounted(() => {\n nextTick(() => {\n const rootEl = instance?.proxy?.$el;\n const dialogBody = rootEl.closest('<div className=\"gv\"></div>-drawer__body--inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl.closest('.gv-edit__container')) isAnchor.value = true;\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl.closest('.gv-edit__container')) isEditContainer.value = true;\n if (props.autoHeight === false)\n if (isEditContainer.value === false)\n if (isScrollbar.value === false)\n if (isAnchor.value === false)\n if (!sMaxHeight) {\n const tabPane = rootEl;\n const offsetTop = tabPane.classList.contains('el-tabs--left') ? 95 : 165;\n const maxHeight = document.documentElement.clientHeight - rootEl.offsetTop - offsetTop;\n rootEl.style.maxHeight = maxHeight + 'px';\n }\n });\n });\n // @render\n return () => (\n <div\n data-name={props.name}\n data-label={props.label}\n data-disabled={props.disabled}\n style={{ overflow: 'hidden auto', maxHeight: `${props.maxHeight}` }}>\n {slots.default?.()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tab-pane';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvTabPane from './src/GvTabPane.vue';\n\nconst GvTabsPlugin = {\n install(app: App): void {\n app.component(GvTabPane.name ?? 'GvTabPane', GvTabPane);\n },\n};\nexport default GvTabsPlugin;\n\nexport { GvTabPane };\n","<!--\n * @title: tabs component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 09:50:50\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-18 14:26:43\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { hasScrollbar } from '@@/utils';\n import { ElTabPane, ElTabs } from 'element-plus';\n import { defineComponent, getCurrentInstance, nextTick, onMounted, ref, watch, type PropType, type VNode } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tabs');\n export default defineComponent({\n name: 'GvTabs',\n props: {\n tabPosition: {\n type: String,\n default: 'left',\n },\n value: {\n type: [Number, String] as PropType<number | string>,\n default: undefined,\n },\n type: {\n type: String as PropType<'card' | 'border-card'>,\n default: undefined, // card|border-card\n },\n closable: {\n type: Boolean,\n default: false,\n },\n tabMaxHeight: {\n type: [Number, String],\n default: undefined,\n },\n },\n\n // emit\n emits: ['tab-click'],\n setup(props, { emit, slots }) {\n // @data\n const inputValue = ref(props.value);\n const tabHeight = ref('auto');\n const isAnchor = ref(false);\n const isScrollbar = ref(false);\n const panes = ref([]);\n const isEditContainer = ref(false);\n const instance = getCurrentInstance();\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @methods\n /**\n * @todo: 点击tab页响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-09 09:16:37\n * @param {*} tabVm 被选中tab页实例\n */\n const handleTabClick = (tabVm) => {\n const props = tabVm.props;\n const parent = tabVm.parent;\n const tabName = props.name;\n if (tabName) parent.props.value = tabName;\n emit('tab-click', tabVm);\n };\n\n /**\n * @todo: created tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:05:03\n */\n const calcPaneInstances = () => {\n if (panes.value.length === 0)\n if (slots.default?.())\n slots.default?.().forEach((vnode) => {\n if (vnode && typeof vnode.type === 'object' && 'name' in vnode.type && vnode.type.name === 'GvTabPane') {\n const tabPane = {};\n const props = vnode.props;\n tabPane['label'] = props?.label;\n tabPane['name'] = props?.name;\n tabPane['autoHeight'] = isEditContainer.value;\n let visible = true;\n if (props?.visible === false) visible = false;\n tabPane['visible'] = visible;\n (panes.value as any[]).push(tabPane);\n }\n });\n return panes.value || [];\n };\n /**\n * @todo: 创建tabpanel\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-03 16:30:54\n */\n const createTabPane = () =>\n calcPaneInstances().map((vnode: VNode, index) => {\n const props = vnode.props;\n // console.log(vnode.name);\n return props?.visible ? (\n <ElTabPane\n // v-show={vnode.visible}\n ref=\"tabPane\"\n name={props?.name}\n label={props?.label}\n style={{ height: `${tabHeight.value} !important` }}>\n {slots.default?.()[index]}\n </ElTabPane>\n ) : null;\n });\n\n // @mounted\n onMounted(() => {\n nextTick(() => {\n const rootEl = instance?.proxy?.$el as HTMLElement | undefined;\n const dialogBody = rootEl?.closest('.gv-drawer__body--inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n else {\n const dialogContainer = rootEl?.closest('.gv-container');\n if (dialogContainer) isScrollbar.value = hasScrollbar(dialogContainer);\n }\n if (rootEl?.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl?.closest('.gv-edit__container')) isEditContainer.value = true;\n if (!isEditContainer.value)\n if (isScrollbar.value === false)\n if (isAnchor.value === false) {\n // 设置tab页高度\n const drawer = rootEl?.closest('.gv-drawer');\n if (drawer) tabHeight.value = 'auto';\n // const tp = this.tabPosition === 'left' ? 170 : 230;\n // this.tabHeight = document.documentElement.clientHeight - this.$el.offsetTop - tp + 'px';\n else {\n const dialog = rootEl?.closest('.gv-dialog');\n if (dialog) tabHeight.value = 'auto';\n // const tp = this.tabPosition === 'left' ? 170 : 230;\n // this.tabHeight = document.documentElement.clientHeight - this.$el.offsetTop - tp + 'px';\n else {\n const h = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 55;\n if (h < 384) tabHeight.value = '384px';\n else tabHeight.value = h + 'px';\n }\n }\n }\n });\n });\n // @render\n return () => (\n <ElTabs\n ref=\"gv-tabs\"\n v-model={inputValue.value}\n tab-position={props.tabPosition}\n type={props.type}\n closable={props.closable}\n on-tab-click={handleTabClick}\n class={prefixCls}>\n {createTabPane()}\n </ElTabs>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tabs';\n .#{$prefixCls} {\n :deep(.el-tabs__header) {\n &.is-top {\n margin: 0 0 6px;\n }\n\n .el-tabs__nav {\n .el-tabs__active-bar {\n background-color: var(--primaryColor, $primaryColor);\n }\n\n .el-tabs__item {\n font-size: $appTextSize;\n\n &:hover {\n color: var(--primaryColor, $primaryColor);\n }\n\n &.is-active {\n color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTabs from './src/GvTabs.vue';\n\nconst GvTabsPlugin = {\n install(app: App): void {\n app.component(GvTabs.name ?? 'GvTabs', GvTabs);\n },\n};\nexport default GvTabsPlugin;\n\nexport { GvTabs };\n","import type { App } from 'vue';\nimport GvTag from './src/GvTag.vue';\n\nconst GvTagPlugin = {\n install(app: App): void {\n app.component(GvTag.name ?? 'GvTag', GvTag);\n },\n};\nexport default GvTagPlugin;\n\nexport { GvTag };\n","<!--\n * @title: navigation tags view\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-20 10:57:41\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 14:21:05\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { usePermsStore } from '@/store/modules/perms';\n import { useTagsViewStore } from '@/store/modules/tagsView';\n import { useBridgeI18n } from '@@/bridge';\n import { joinIcon, pathResolve } from '@@/utils';\n import { useEventListener } from '@vueuse/core';\n import { ElTabPane, ElTabs } from 'element-plus';\n import { cloneDeep } from 'lodash-es';\n import { computed, defineComponent, nextTick, onMounted, reactive, ref, unref, watch } from 'vue';\n import { useRouter, type RouteLocationNormalizedLoaded } from 'vue-router';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tags-view');\n export default defineComponent({\n name: 'GvTagsView',\n setup() {\n const visible = ref(false);\n const position = reactive({ x: 0, y: 0 });\n const currentKey = ref('');\n\n const { currentRoute, push, replace } = useRouter();\n const activeKey = ref<string>(unref(currentRoute).path || '/dashboard');\n const { t } = useBridgeI18n();\n const tagsViewStore = useTagsViewStore();\n const permsStore = usePermsStore();\n\n const visitedViews = computed(() => tagsViewStore.visitedViews);\n const mainAppRoutes = computed(() => permsStore.mainAppRoutes);\n\n const isRedirect = (path: string) => path.startsWith('/redirect');\n const isActive = (route) => route.path === unref(currentRoute).path;\n const isAffix = (tag) => tag.meta && tag.meta.affix;\n\n /**\n * @todo: filter affix nav menus\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 11:39:08\n * @param {*} mainAppRoutes\n * @param {*} basePath\n */\n const filterAffixNavMenus = (navMenus, basePath = '/'): RouteLocationNormalizedLoaded[] => {\n const affixTags: RouteLocationNormalizedLoaded[] = [];\n // console.log('navMenus:', navMenus.value);\n navMenus.value.forEach((route) => {\n if (route.meta && route.meta.affix === true) {\n const tagPath = pathResolve(basePath, route.path);\n affixTags.push({\n fullPath: tagPath,\n path: tagPath,\n name: route.name,\n meta: route.meta,\n matched: [],\n params: {},\n query: {},\n hash: '',\n redirectedFrom: undefined,\n });\n }\n });\n return affixTags;\n };\n /**\n * @todo: add affix tags\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 11:45:26\n */\n const addAffixTags = () => {\n const affixTags = filterAffixNavMenus(mainAppRoutes);\n\n for (const tagView of affixTags) if (tagView.name) tagsViewStore.addVisitedView(tagView);\n };\n /**\n * @todo: create tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:36:56\n */\n const createTabPanel = () =>\n visitedViews.value.map((v) => {\n const icons = joinIcon(v.meta?.picon);\n const closable = visitedViews.value.length > 1;\n const title = t(v.meta?.title ?? 'no-name');\n return (\n <ElTabPane\n key={String(v.path)}\n name={String(v.path)}\n label={title}\n closable={closable}>\n {{\n label: () => (\n <span class=\"tab-label\">\n {icons && <i class={icons}></i>}\n {title}\n </span>\n ),\n }}\n </ElTabPane>\n );\n });\n\n /**\n * @todo: show right context menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 17:22:53\n * @param {*} key\n */\n const showContextMenu = (key: string) => {\n currentKey.value = key;\n visible.value = true;\n };\n /**\n * @todo: close right context menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:31:06\n */\n const closeContextMenu = () => {\n visible.value = false;\n };\n /**\n * @todo: jump to link route\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-21 11:25:08\n * @param {*} routePath\n */\n const toLink = (routePath: string) => {\n const targetView = visitedViews.value.find((v) => v.path === routePath);\n activeKey.value = routePath || '/dashboard';\n\n if (targetView)\n // 使用完整的 route 对象跳转,保留 query 参数\n push({\n path: targetView.path,\n query: targetView.query || {},\n });\n else push({ path: routePath, query: {} });\n };\n /**\n * @todo: jump to last tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:31:01\n * @param {*} visitedView\n * @param {*} currentView\n */\n const toLastView = (visitedView: RouteLocationNormalizedLoaded[], currentView: RouteLocationNormalizedLoaded) => {\n const latestView = visitedView.slice(-1)[0];\n if (visitedView) {\n activeKey.value = latestView.path;\n push(latestView.path);\n } else if (currentView.name === 'Dashboard') replace({ path: '/redirect' + currentView.path });\n else push('/');\n };\n /**\n * @todo: add menu tab\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-21 10:27:35\n */\n const addNavMenu = () => {\n const name = currentRoute.value.name;\n if (name) tagsViewStore.addTagView(currentRoute.value);\n };\n\n const moveToCurrentTag = (view: RouteLocationNormalizedLoaded) => {\n // toLink(view.path);\n };\n\n /**\n * @todo: click tab event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 12:08:48\n * @param {*} tab\n */\n const clickTab = (tab) => {\n toLink(tab.props.name);\n };\n /**\n * @todo: close current tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:56:44\n * @param {*} targetKey\n */\n const closeCurrentTag = async (targetKey) => {\n const view = visitedViews.value.filter((view) => view.path === targetKey);\n if (isAffix(view[0])) return;\n\n await tagsViewStore.delTagView({ view: view[0] });\n\n // 清除缓存的search条件\n // currentRoute.value.meta.search = {};\n // 判断是否是当前标签页关闭\n if (isActive(view[0])) toLastView(visitedViews.value, view[0]);\n };\n /**\n * @todo: refresh selected tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:40:45\n */\n const refreshSelectedTag = async () => {\n tagsViewStore.delCachedView(unref(currentRoute));\n const { path, query } = unref(currentRoute);\n await nextTick();\n replace({\n path: '/redirect' + path,\n query: query,\n });\n };\n const findCurTagIndex = () => visitedViews.value.findIndex((x) => x.path === currentKey.value);\n /**\n * @todo: close right/left tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:42:33\n * @param {*} direction\n */\n const closeTagsOrientation = (direction) => {\n const index = findCurTagIndex();\n if (index === -1) return;\n let isClosed = false;\n const vV = cloneDeep(visitedViews.value);\n vV.map(({ path }, i) => {\n if (direction === 'right' && i > index) {\n if (path === unref(activeKey)) isClosed = true;\n closeCurrentTag(path);\n } else if (direction === 'left' && i < index) {\n if (path === unref(activeKey)) isClosed = true;\n closeCurrentTag(path);\n }\n });\n // 跳转至当前页\n if (isClosed) toLink(unref(currentKey));\n };\n /**\n * @todo: close other tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 11:04:12\n */\n const closeOthersTags = () => {\n const index = findCurTagIndex();\n if (index === -1) return;\n push(currentKey.value);\n\n tagsViewStore.delOthersViews(currentRoute.value).then(() => {\n moveToCurrentTag(unref(currentRoute));\n });\n };\n\n watch(\n () => [currentRoute.value.path, currentRoute.value.name],\n ([path, name], [, oldName]) => {\n // if /redirect\n if (isRedirect(path as string)) return;\n // 当前选中tab页\n activeKey.value = (path as string) || '/dashboard';\n // del notify msg\n if (oldName !== name) {\n const alertObj = document.body.querySelector('body>.el-notification');\n if (alertObj) alertObj.remove();\n }\n addNavMenu();\n // moveToCurrentTag(currentRoute.value);\n },\n );\n\n /**\n * @todo: bind right click event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 15:28:28\n */\n const tagsViewEl = ref<HTMLElement | null>(null);\n useEventListener(tagsViewEl, 'contextmenu', (ev: MouseEvent) => {\n ev.preventDefault();\n\n let targetNode: HTMLElement | null = null;\n const el = ev.target as HTMLElement;\n\n if (el.tagName === 'SPAN') targetNode = el.parentElement;\n else targetNode = el;\n\n const classNames = targetNode ? [...targetNode.classList] : [];\n if (classNames.includes('el-tabs__item')) {\n const path = targetNode?.getAttribute('aria-controls')?.replace(/^pane-/, '') || '';\n if (path !== unref(currentRoute).path) toLink(path);\n\n position.x = ev.clientX || ev.pageX;\n position.y = ev.clientY || ev.pageY;\n\n showContextMenu(path);\n }\n });\n /**\n * @todo: close context menu on window click\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:39:46\n */\n useEventListener(window, 'click', () => {\n closeContextMenu();\n });\n\n // mounted hooks\n onMounted(() => {\n addAffixTags();\n addNavMenu();\n });\n return () => (\n <div\n ref={tagsViewEl}\n class={[prefixCls, 'flex w-full relative bg-[#fff] dark:bg-[var(--el-bg-color)']}>\n <ElTabs\n class=\"multi-tab\"\n type=\"card\"\n modelValue={activeKey.value}\n onUpdate:modelValue={(v: string) => (activeKey.value = v)}\n onTabClick={clickTab}\n onTabRemove={closeCurrentTag}>\n {createTabPanel()}\n </ElTabs>\n {visible.value && (\n <ul\n class=\"tagsView-contextmenu\"\n style={{ left: `${position.x + 10}px`, top: `${position.y - 10}px` }}>\n <li onClick={refreshSelectedTag}>{t('tagsView.refresh')}</li>\n {currentKey.value !== '/dashboard' && visitedViews.value.length === 2 && <li onClick={() => closeCurrentTag(currentKey.value)}>{t('tagsView.close')}</li>}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 1 && findCurTagIndex() < visitedViews.value.length - 1 && (\n <li onClick={() => closeTagsOrientation('right')}>{t('tagsView.closeRight')}</li>\n )}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 2 && findCurTagIndex() > 1 && <li onClick={() => closeTagsOrientation('left')}>{t('tagsView.closeLeft')}</li>}\n {currentKey.value === '/dashboard' && visitedViews.value.length > 1 && <li onClick={closeOthersTags}>{t('tagsView.closeOthers')}</li>}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 2 && <li onClick={closeOthersTags}>{t('tagsView.closeOthers')}</li>}\n </ul>\n )}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tags-view';\n\n .#{$prefixCls} {\n user-select: none; // 禁止选中文本\n\n .multi-tab {\n width: 100%;\n position: relative;\n :deep(.el-tabs__header) {\n margin: 0;\n border-bottom-color: $borderColor;\n height: 34px;\n line-height: 34px;\n .el-tabs__nav {\n border-color: $borderColor;\n .el-tabs__item {\n height: 34px; // 38px\n line-height: 34px; // 38px\n padding: 2px 10px 0 10px; // 0 10px\n font-size: $textSize;\n border-left-color: $borderColor;\n\n &.is-active {\n & > span {\n font-weight: $fontWeight2;\n }\n color: var(--primaryColor, $primaryColor);\n }\n &:focus.is-focus:not(:active) {\n box-shadow: 0 0 1px 1px inset;\n }\n > span {\n font-weight: 500;\n > i {\n padding-right: 5px;\n font-size: $textSize;\n }\n }\n }\n }\n .is-scrollable {\n .el-tabs__nav-next,\n .el-tabs__nav-prev {\n line-height: 42px;\n }\n\n i {\n font-size: 18px;\n color: rgba(0, 0, 0, 0.95);\n }\n }\n }\n .el-tabs__content {\n display: none !important;\n }\n }\n :deep(.tagsView-contextmenu) {\n position: fixed;\n top: $navHeadHeight;\n left: 300px;\n z-index: 9999;\n min-width: 90px;\n padding: 6px 0;\n list-style: none;\n background-color: #fff;\n border: 1px solid $borderColorSecondary;\n border-radius: $borderRadius;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n li {\n line-height: 27px;\n padding: 0 15px;\n font-size: 13px;\n &:hover,\n &:focus {\n background-color: $backgroundColor;\n color: var(--primaryColorHover, $primaryColorHover);\n cursor: pointer;\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTagsView from './src/GvTagsView.vue';\n// Define the install method on the GvExpandMenu component\nconst GvTagsViewPlugin = {\n install(app: App): void {\n app.component(GvTagsView.name ?? 'GvTagsView', GvTagsView);\n },\n};\nexport default GvTagsViewPlugin;\n\nexport { GvTagsView };\n","<!--\n * @title: theme switcher\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-08-14 10:17:38\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-18 15:04:37\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { ElDropdown, ElDropdownItem, ElDropdownMenu } from 'element-plus';\n import { computed } from 'vue';\n import { propTypes } from '../../utils/gv.propTypes';\n\n defineOptions({\n name: 'GvTheme',\n inheritAttrs: true,\n });\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('theme');\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const appStore = useAppStore();\n const themeOptions = computed(() => appStore.getSwitchTheme);\n const currentTheme = computed(() => appStore.getCurrentTheme);\n\n const handleSetTheme = () => {\n //appStore.setTheme(theme);\n };\n</script>\n<template>\n <ElDropdown\n trigger=\"click\"\n :class=\"prefixCls\"\n @command=\"handleSetTheme\">\n <div>\n <GvIcon\n class=\"international-icon\"\n iconName=\"theme\" />\n </div>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem\n v-for=\"item of themeOptions\"\n :key=\"item.value\"\n :disabled=\"currentTheme === item.value\"\n :command=\"item.value\">\n {{ item.label }}\n </ElDropdownItem>\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-theme';\n .#{$prefixCls} {\n display: inline-block;\n line-height: var(--right-item-line-height);\n height: var(--right-item-height);\n vertical-align: 10px;\n cursor: pointer;\n fill: #5a5e66;\n }\n</style>\n","import type { App } from 'vue';\nimport GvTheme from './src/GvTheme.vue';\nconst GvThemePlugin = {\n install(app: App): void {\n app.component(GvTheme.name ?? 'GvTheme', GvTheme);\n },\n};\nexport default GvThemePlugin;\n\nexport { GvTheme };\n","<!--\n * @title: tree component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 16:57:41\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:38:07\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElTree } from 'element-plus';\n import type { Node } from 'element-plus/es/components/tree/src/model/node';\n import type { FilterNodeMethodFunction, LoadFunction, RenderContentFunction, TreeComponentProps, TreeNodeData } from 'element-plus/es/components/tree/src/tree.type';\n import { defineComponent, type ComponentInternalInstance, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tree');\n\n type TreeData = Record<string, unknown>;\n\n export default defineComponent({\n name: 'GvTree',\n props: {\n treeData: {\n type: Array as PropType<TreeData[]>,\n default: () => [],\n },\n treeProps: {\n type: Object as PropType<TreeComponentProps['props']>,\n default: () => ({}),\n },\n nodeKey: {\n type: String,\n default: undefined,\n },\n lazy: {\n type: Boolean,\n default: false,\n },\n load: {\n type: Function as PropType<LoadFunction>,\n default: undefined,\n },\n showCheckbox: {\n type: Boolean,\n default: false,\n },\n draggable: {\n type: Boolean,\n default: false,\n },\n defaultExpandedKeys: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n },\n defaultCheckedKeys: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n },\n iconClass: {\n type: String,\n default: undefined,\n },\n defaultExpandAll: {\n type: Boolean,\n default: false,\n },\n expandOnClickNode: {\n type: Boolean,\n default: true,\n },\n checkOnClickNode: {\n type: Boolean,\n default: false,\n },\n filterNodeMethod: {\n type: Function as PropType<FilterNodeMethodFunction>,\n default: undefined,\n },\n renderContent: {\n type: Function as PropType<RenderContentFunction>,\n default: undefined,\n },\n },\n\n // @emits\n emits: ['node-click', 'node-expand', 'node-collapse', 'check', 'check-change', 'node-drop'],\n\n setup(props, { emit }) {\n // @methods\n\n const handleNodeClick = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null, event: MouseEvent) => {\n emit('node-click', data, node, treeNode, event);\n };\n\n const handleNodeExpand = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null) => {\n emit('node-expand', data, node, treeNode);\n };\n\n const handleNodeCollapse = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null) => {\n emit('node-collapse', data, node, treeNode);\n };\n\n const handleCheck = (\n data: TreeData,\n checkedInfo: {\n checkedNodes: TreeNodeData[];\n checkedKeys: (string | number)[];\n halfCheckedNodes: TreeNodeData[];\n halfCheckedKeys: (string | number)[];\n },\n ) => {\n emit('check', data, checkedInfo);\n };\n\n const handleCheckChange = (data: TreeData, checked: boolean, childChecked: boolean) => {\n emit('check-change', data, checked, childChecked);\n };\n\n const handleLazyLoad: LoadFunction = (...args) => {\n props.load?.(...args);\n };\n\n const handleNodeDrop = (draggingNode: Node, dropNode: Node, dropType: 'before' | 'after' | 'inner', event: DragEvent) => {\n emit('node-drop', draggingNode, dropNode, dropType, event);\n };\n\n // @render\n return () => (\n <ElTree\n ref=\"gv-tree\"\n data={props.treeData}\n props={props.treeProps}\n nodeKey={props.nodeKey}\n lazy={props.lazy}\n load={handleLazyLoad}\n draggable={props.draggable}\n showCheckbox={props.showCheckbox}\n defaultExpandedKeys={props.defaultExpandedKeys}\n defaultCheckedKeys={props.defaultCheckedKeys}\n icon={props.iconClass}\n highlightCurrent\n defaultExpandAll={props.defaultExpandAll}\n expandOnClickNode={props.expandOnClickNode}\n checkOnClickNode={props.checkOnClickNode}\n filterNodeMethod={props.filterNodeMethod}\n renderContent={props.renderContent}\n class={prefixCls}\n onNode-click={handleNodeClick}\n onNode-expand={handleNodeExpand}\n onNode-collapse={handleNodeCollapse}\n onNode-drop={handleNodeDrop}\n onCheck={handleCheck}\n onCheck-change={handleCheckChange}\n />\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tree';\n .#{$prefixCls} {\n :deep(.el-tree-node) {\n .el-tree-node__content {\n .el-tree-node__label {\n font-size: $appTextSize;\n }\n .el-checkbox__input {\n &.is-checked {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTree from './src/GvTree.vue';\n\nconst GvTreePlugin = {\n install(app: App): void {\n app.component(GvTree.name ?? 'GvTree', GvTree);\n },\n};\nexport default GvTreePlugin;\n\nexport { GvTree };\n","/*\r\n * @title: encrypt\r\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\r\n * @Date: 2023-12-16 08:07:24\r\n * @LastEditors: andy.ten@tom.com\r\n * @LastEditTime: 2025-04-07 13:54:00\r\n * @version: 1.0.1\r\n * @copyright: copyright (c) 2025 Andy Xu\r\n * node: you can not copy and/or use and/or modify this program free,\r\n * please reserve the segment above.Please mail me if you have any question.\r\n */\r\n\r\nimport CryptoJS from 'crypto-js';\r\nexport const key = 'abcdefgabcdefg12';\r\nexport const encrypt = (word: any): string => {\r\n const keyStr = CryptoJS.enc.Utf8.parse(key);\r\n let ww;\r\n if (typeof word === 'object') ww = JSON.stringify(word);\r\n else ww = word;\r\n const srcs = CryptoJS.enc.Utf8.parse(ww);\r\n const encrypted = CryptoJS.AES.encrypt(srcs, keyStr, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });\r\n return encrypted.toString();\r\n};\r\nexport const decrypt = (word: string): any => {\r\n const keyStr = CryptoJS.enc.Utf8.parse(key);\r\n const decrypt = CryptoJS.AES.decrypt(word, keyStr, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });\r\n return CryptoJS.enc.Utf8.stringify(decrypt).toString();\r\n};\r\n// Randomly generate a specified number of hexadecimal keys\r\nexport const generateKey = (num: number): string => {\r\n const library = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n let key = '';\r\n for (let i = 0; i < num; i++) {\r\n const randomPoz = Math.floor(Math.random() * library.length);\r\n key += library.substring(randomPoz, randomPoz + 1);\r\n }\r\n return key;\r\n};\r\n","/*\n * @title: package lib entry\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2024-11-28 18:18:44\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 09:22:01\n * @version: 1.1.2\n * @copyright: copyright (c) 2024 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport type { Pinia } from 'pinia';\nimport { setActivePinia } from 'pinia';\nimport 'uno.css'; // 引入 UnoCSS 样式\nimport type { App } from 'vue';\nimport type { Composer } from 'vue-i18n';\n\nimport { setBridgeContext } from './bridge';\nimport GvBacktopPlugin, { GvBacktop } from './GvBacktop';\nimport GvBadgePlugin, { GvBadge } from './GvBadge';\nimport GvBreadCrumbPlugin, { GvBreadCrumb } from './GvBreadCrumb';\nimport GvButtonPlugin, { GvButton } from './GvButton';\nimport GvCardPlugin, { GvCard } from './GvCard';\nimport GvCascaderPlugin, { GvCascader } from './GvCascader';\nimport GvCheckboxPlugin, { GvCheckbox } from './GvCheckbox';\nimport GvCheckboxButtonPlugin, { GvCheckboxButton } from './GvCheckboxButton';\nimport GvCheckboxGroupPlugin, { GvCheckboxGroup } from './GvCheckboxGroup';\nimport GvColPlugin, { GvCol } from './GvCol';\nimport GvDatePickerPlugin, { GvDatePicker } from './GvDatePicker';\nimport GvDialogPlugin, { GvDialog } from './GvDialog';\nimport GvDividerPlugin, { GvDivider } from './GvDivider';\nimport GvDrawerPlugin, { GvDrawer } from './GvDrawer';\nimport GvExpandMenuPlugin, { GvExpandMenu } from './GvExpandMenu';\nimport GvFormPlugin, { GvForm } from './GvForm';\nimport GvHamburgerPlugin, { GvHamburger } from './GvHamburger';\nimport GvIconPlugin, { GvIcon } from './GvIcon';\nimport GvInputPlugin, { GvInput } from './GvInput';\nimport GvInputNumberPlugin, { GvInputNumber } from './GvInputNumber';\nimport GvLangSelectPlugin, { GvLangSelect } from './GvLangSelect';\nimport GvPopconfirmPlugin, { GvPopconfirm } from './GvPopconfirm';\nimport GvPopoverPlugin, { GvPopover } from './GvPopover';\nimport GvRadioPlugin, { GvRadio } from './GvRadio';\nimport GvRadioButtonPlugin, { GvRadioButton } from './GvRadioButton';\nimport GvRadioGroupPlugin, { GvRadioGroup } from './GvRadioGroup';\nimport GvRowPlugin, { GvRow } from './GvRow';\nimport GvScreenFullPlugin, { GvScreenFull } from './GvScreenFull';\nimport GvSearchBarPlugin, { GvSearchBar } from './GvSearchBar';\nimport GvSelectPlugin, { GvSelect } from './GvSelect';\nimport GvSidebarPlugin, { GvSidebar } from './GvSidebar';\nimport GvSidebarLogoPlugin, { GvSidebarLogo } from './GvSidebarLogo';\nimport GvSwitchPlugin, { GvSwitch } from './GvSwitch';\nimport GvTablePlugin, { GvTable } from './GvTable';\nimport GvTabPanePlugin, { GvTabPane } from './GvTabPane';\nimport GvTabsPlugin, { GvTabs } from './GvTabs';\nimport GvTagPlugin, { GvTag } from './GvTag';\nimport GvTagsViewPlugin, { GvTagsView } from './GvTagsView';\nimport GvThemePlugin, { GvTheme } from './GvTheme';\nimport GvTimePickerPlugin, { GvTimePicker } from './GvTimePicker';\nimport GvTreePlugin, { GvTree } from './GvTree';\nconst components = [\n GvRowPlugin,\n GvColPlugin,\n GvInputPlugin,\n GvButtonPlugin,\n GvPopconfirmPlugin,\n GvIconPlugin,\n GvInputNumberPlugin,\n GvCascaderPlugin,\n GvSwitchPlugin,\n GvRadioButtonPlugin,\n GvCheckboxButtonPlugin,\n GvRadioGroupPlugin,\n GvBadgePlugin,\n GvTabPanePlugin,\n GvTabsPlugin,\n GvDrawerPlugin,\n GvCardPlugin,\n GvTablePlugin,\n GvPopoverPlugin,\n GvRadioPlugin,\n GvSelectPlugin,\n GvTimePickerPlugin,\n GvCheckboxGroupPlugin,\n GvCheckboxPlugin,\n GvTagPlugin,\n GvTreePlugin,\n GvFormPlugin,\n GvLangSelectPlugin,\n GvBacktopPlugin,\n GvBreadCrumbPlugin,\n GvHamburgerPlugin,\n GvScreenFullPlugin,\n GvSearchBarPlugin,\n GvSidebarPlugin,\n GvSidebarLogoPlugin,\n GvThemePlugin,\n GvDialogPlugin,\n GvExpandMenuPlugin,\n GvTagsViewPlugin,\n GvDividerPlugin,\n GvDatePickerPlugin,\n];\n\nexport type GuavaUIOptions = {\n store: Pinia;\n i18n: Composer;\n};\n\nexport const install = (app: App, options: GuavaUIOptions) => {\n if ((install as any).INSTALLED) return;\n (install as any).INSTALLED = true;\n\n setActivePinia(options.store);\n setBridgeContext(options);\n\n components.forEach((c) => c.install(app));\n};\n\nconst GuavaUI = { install };\n\n// 🔹 按需导出组件\nexport {\n GvBacktop,\n GvBadge,\n GvBreadCrumb,\n GvButton,\n GvCard,\n GvCascader,\n GvCheckbox,\n GvCheckboxButton,\n GvCheckboxGroup,\n GvCol,\n GvDatePicker,\n GvDialog,\n GvDivider,\n GvDrawer,\n GvExpandMenu,\n GvForm,\n GvHamburger,\n GvIcon,\n GvInput,\n GvInputNumber,\n GvLangSelect,\n GvPopconfirm,\n GvPopover,\n GvRadio,\n GvRadioButton,\n GvRadioGroup,\n GvRow,\n GvScreenFull,\n GvSearchBar,\n GvSelect,\n GvSidebar,\n GvSidebarLogo,\n GvSwitch,\n GvTable,\n GvTabPane,\n GvTabs,\n GvTag,\n GvTagsView,\n GvTheme,\n GvTimePicker,\n GvTree,\n};\n\n// 🔹 hooks / utils\nexport { crud } from '@@/utils/gv.crud';\n// export * from './hooks/web/useNotify';\nexport * from './hooks/web/usePinyin';\nexport * from './hooks/web/useStorage';\nexport * from './utils/gv.notify';\nexport * from './utils/gv.propTypes';\nexport * from './utils/gv.secret';\nexport * from './utils/gv.tree';\nexport * from './utils/index';\n\n// 🔹 默认导出统一安装对象\nexport { GuavaUI };\n"],"names":["globalBridgeKey","getBridge","g","setBridgeContext","ctx","useBridgeI18n","i18n","getPrefixCls","variables","useStyle","prefixCls","_createBlock","_unref","ElBacktop","GvBacktopPlugin","app","GvBacktop","_sfc_main$F","name","props","vref","type","String","default","value","Number","max","isDot","Boolean","hidden","showZero","color","setup","slots","_createVNode","ElBadge","_export_sfc","sfc","GvBadgePlugin","_a","GvBadge","toString","is","val","isExternal","path","isString","isArray","isError","isObject","isDate","isNumber","isBoolean","isFunction","isElement","isMap","isImgPath","isDark","isNull","isEmpty","isEqual","a","b","i","keysA","keysB","key","isUrl","e","setHtmlAttrByLang","locale","sleep","timeLen","__async","resolve","toHump","all","letter","toLine","setDomCssProp","prop","dom","getDomCssProp","joinIcon","icon","joinIcons","hasClass","ele","cls","addClass","removeClass","reg","hasScrollbar","tag","dateFormatConfig","debounce","func","wait","immediate","timeout","arg","context","timestamp","result","later","last","args","callNow","getVNodeText","vnode","item","getVNodeName","removeAmountFormat","zeroFormat","numberFormat","pattern","oldVal","_nfPattern","strAry","p1","len","p2","ret","ch","p3","len2","amountFormat","decimal","v","decimalPattern","setQuickKeys","ev","btnHtml","inputHtml","messageConfirmHtml","bodyDialogHtml","dialogArr","buttonHtml","buttonDHtml","pathResolve","parentPath","childPath","preNameSpace","attrs","useAttrs","__props","isLocal","computed","iconType","iconName","svgClass","styleExternalIcon","iconComponent","compName","Icons","_openBlock","_createElementBlock","_mergeProps","_createElementVNode","_hoisted_1","ElIcon","_resolveDynamicComponent","_hoisted_2","GvIconPlugin","GvIcon","DEFAULT_CONFIG","getConfig","config","listToTree","list","conf","nodeMap","id","children","pid","node","parent","treeToList","tree","findNode","findNodeAll","findPath","visitedSet","findPathAll","filter","listFilter","__spreadValues","forEach","treeMapEach","data","conversion","haveChildren","conversionData","__spreadProps","treeMap","treeData","opt","eachTree","treeDatas","callBack","parentNode","element","newNode","filterBreadcrumb","routes","res","route","meta","_isSlot","s","Object","prototype","call","_isVNode","_sfc_main$D","appStore","useAppStore","permStore","usePermsStore","showBreadcrumbIcon","getShowBreadcrumbIcon","currentRoute","useRouter","t","levelList","ref","menuRouters","routers","getRouters","getBreadcrumb","currentPath","matched","slice","unref","renderBreadcrumb","map","disabled","redirect","ElBreadcrumbItem","title","watch","startsWith","_slot","ElBreadcrumb","TransitionGroup","GvBreadCrumbPlugin","GvBreadCrumb","_sfc_main$C","emits","emit","instance","getCurrentInstance","handleConfirm","event","ElPopconfirm","reference","GvInputPlugin","GvPopconfirm","getValueType","useStorage","valueType","excludes","keys","defaultExcludes","excludesArr","notificationTime","notificationTimeError","messageTime","messageTimeError","alert","msg","alertObj","getStorage","lang","promptMsg","duration","m","ElNotification","confirm","msgs","showCancelButton","hint","ok","cancel","reject","ElMessageBox","message","tableedit","ElMessage","_sfc_main$B","visible","text","otext","size","undefined","link","loading","refForm","required","nativeType","bizType","perms","cb","Function","useRoute","globalSize","useGlobalConfig","buttonSize","buttonConfirm","loadings","locked","isShow","isIf","getSlots","setIconStyle","replace","checkPerms","pm","slot","split","x","indexOf","length","arr","handleClick","exposed","resetFields","rootForm","originFormList","formList","Array","index","filtercode","showLabel","dateType","model","field","rootEl","el","dateRangeSingles","querySelectorAll","startInput","querySelector","endInput","click","then","classz","renderBtn","display","ElButton","GvButtonPlugin","GvButton","_sfc_main$A","_props","getCardHeader","header","ElCard","GvCardPlugin","GvCard","_sfc_main$z","options","placeholder","clearable","showAllLevels","separator","trigger","filterable","multiple","lazy","lazyLoad","sOps","inputValue","cascaderSize","sPlaceHolder","getDisabled","newVal","handleChange","handleBlur","handleFilterMethod","query","labels","pathLabels","join","spell","pathNodes","some","ElCascader","$event","expandTrigger","GvCascaderPlugin","GvCascader","_sfc_main$y","indeterminate","label","border","checkboxValue","checkboxSize","handleUpdate","ElCheckbox","GvCheckboxPlugin","GvCheckbox","_sfc_main$x","inheritAttrs","checkboxButtonSize","ElCheckboxButton","GvCheckboxButtonPlugin","GvCheckboxButton","_sfc_main$w","min","checkboxGroupSize","ElCheckboxGroup","GvCheckboxGroupPlugin","GvCheckboxGroup","_sfc_main$v","span","offset","xs","sm","md","lg","xl","ElCol","GvColPlugin","GvCol","toMidnight","date","d","daysAgo","days","midnight","monthBegin","quarterBegin","month","yearBegin","now","dateShortcuts","dateShortcutsEn","dateTimeShortcuts","dateTimeShortcutsEn","dateRangeShortcuts","start","end","dateRangeShortcutsEn","_sfc_main$u","modelValue","Date","format","valueFormat","defaultTime","rangeSeparator","startPlaceholder","endPlaceholder","disabledDateFunc","disabledDate","editable","unlink","useI18n","datepickerSize","sType","DatePicker","ElDatePicker","shortcuts","isEn","mergedDisabledDate","includes","getTime","handleFocus","handleCalendarChange","GvDatePickerPlugin","GvDatePicker","boundElements","initDrag","collapseMenu","dragDom","dialogHeaderEl","getStyle","attr","disX","disY","dragDomWidth","dragDomHeight","screenWidth","screenHeight","minDragDomLeft","menuWidth","maxDragDomLeft","minDragDomTop","maxDragDomTop","styL","styT","onMouseMove","left","top","onMouseUp","_sfc_main$t","hasFooter","width","height","nest","appendToBody","fullscreen","maxHeight","closeOnClickModal","closeOnPressEscape","dialogClass","buttonQuick","collapseMenus","myDialogClass","dialogVisible","maskVisible","dialogMaxHeight","sAppendToBody","modalAppendToBody","sNest","modalMask","newValue","handleVisible","handleOpen","handleOpened","nextTick","handleClose","handleClosed","handleCancel","renderFooterBtn","footer","propsData","getFooter","setMask","mask","getMaxHeight","parseFloat","document","documentElement","clientHeight","pEl","closest","onBeforeUnmount","window","removeEventListener","onMounted","addEventListener","ElDialog","GvDialogPlugin","GvDialog","_sfc_main$s","position","direction","target","clickDivider","preventDefault","stopPropagation","ElDivider","GvDividerPlugin","GvDivider","_sfc_main$r","paddingHeight","drawerVisible","drawerMaxHeight","show","buttonIcon","sPaddingHeight","drawerPaddingHeight","returnIcon","ElDrawer","GvDrawerPlugin","GvDrawer","newPropTypes","createTypes","propTypes","toValidableType","usePinyin","withTone","pinyin","pinYin","__emit","menuList","menuPath","fMenusList","generateRouter","serverRoutes","basePath","prefixTitle","prefixCode","router","i18ntitle","code","tempRoutes","handleCloseDrawer","handleSelect","handleSearch","_b","starClickHandle","star","menuItem","ElAutocomplete","Search","_withCtx","_hoisted_3","_toDisplayString","_hoisted_4","ElTabs","_Fragment","_renderList","ElTabPane","_hoisted_5","sub","_hoisted_6","StarFilled","Star","_hoisted_7","_component_router_link","_hoisted_8","sideWidth","expandHandle","_normalizeClass","_normalizeStyle","GvMenuList","GvExpandMenuPlugin","GvExpandMenu","_sfc_main$o","prefixIcon","suffixIcon","maxlength","readonly","columnProp","rows","autosize","showWordLimit","inputSize","sPlaceholder","renderPrefixIcon","renderSuffixIcon","handleInput","select","handleClear","handleKeyDown","ElInput","number","prefix","suffix","GvInput","_sfc_main$n","step","stepStrictly","precision","currentValue","oldValue","ElInputNumber","GvInputNumberPlugin","GvInputNumber","_sfc_main$m","dicType","dicRemote","clear","isreload","editRow","collapseTags","userStore","useUserStore","useNotify","dicIcon","remote","loadingText","inputShowLabel","inputFilterable","selectValue","originOptions","className","dicSrc","toLowerCase","valueCache","Map","selectSize","isEmptyLabel","getDictItemLabel","l1","l2","formatOptionLabel","findLabelInOptions","opts","find","c","getOptionValue","row","cached","get","obj","set","getSelectCode","getSelectLabel","o","mergeOptionsWithSelected","_opts","merged","append","sv","pushDefaultOption","op","push","getSelectOptions","src","xx","arr2","dictCache","dict","getDictDivision","cache","addDictCache","getDict","RegExp","test","filterMethod","initialRemoteLoaded","pendingRemoteQuery","pendingRemotePromise","remoteRequestSeq","filterOriginOptions","remoteDictSearch","requestSeq","sDicType","substring","datas","ops","JSON","parse","console","log","remoteMethod","q","filtered","ensureDefaultOption","existed","resolveDisplayLabel","localOpts","applySelectValue","raw","resolved","showLbl","deep","handleVisibleChange","renderSelectOption","ElOption","renderTableOption","columnTexts","multiColumn","v1","mm","m2","m4","vv1","mmm","mm2","mm4","labelArr","opArr","ElSelect","GvSelectPlugin","GvSelect","_sfc_main$l","columnKey","require","switchType","newStatus","ElSwitch","GvSwitchPlugin","GvSwitch","TimePicker","ElTimePicker","_sfc_main$k","isRange","disabledHours","disabledMinutes","disabledSeconds","timepickerSize","mergedDisabledHours","mergedDisabledMinutes","mergedDisabledSeconds","GvTimePickerPlugin","GvTimePicker","infoMsg","info","calLength","sum","vcity","checkDecimal","decimalLen","checkProvince","card","province","verifyBirthday","year","day","birthday","now_year","time","checkBirthday","re_fifteen","arr_data","re_eighteen","changeFivteenToEighteen","arrInt","arrCh","cardTemp","checkParity","valnum","htValidate","rule","callback","language","_sfc_main$j","divider","isDivider","labelWidth","formStyle","scroller","expose","searchFieldsCollapsed","provide","formRefs","formElRef","setFormRef","rootNodeStyle","rules","isEditContainer","sMaxHeight","isScrollbar","isAnchor","isDialog","colSpanNums","formType","styles","formSize","labelPosition","searchDivider","getLanguage","setDividerShow","getEditBar","editbar","ElRow","getDivider","dividerRender","dividerTitle","getDictItems","dictCacheTmp","dictTmp","getItemRules","_item","validateKey","maxLen","validator","gvValidate","excluded","handleRadioInput","formVal","handleDateRange2Focus","vm","$el","handleDateRange2Blur","handleDateRange2Change","endTime","startTime","datePicker","dateArr","handleSwitchDictChange","error","handleRadioDictChange","getSearchColClass","slotProps","expand","showDefaultRow","searchFormRows","renderFormItem","_index","colspan","createRow","blur","focus","change","render","renders","isHidden","cType","validateRule","sDateType","dateFormat","ph","startPh","endPh","cols","colSpanXs","colSpanSm","colSpanMd","colSpanLg","colSpanXl","week","datetime","editables","isTableDic","sLabel","searchFormLabel","switchDefaultVal","searchColClass","ElFormItem","_createTextVNode","ElTooltip","onFocus","_slot3","radioValue","ElRadioGroup","_slot2","ElRadio","ElRadioButton","vv","toolText","_resolveComponent","getItems","sRootEl","tabPane","offsetTop","classList","contains","clearFormValidate","clearValidate","setFormStyle","formStyle1","lastIndexOf","parseInt","clientWidth","init","formModel","formRule","difference","diff","fieldObj","oldObj","fieldObjKeys","key2","nextProps","prevProps","firstSlot","stringify","dialogBody","dialogBody2","Transition","_withDirectives","ElForm","flexWrap","flex","minWidth","_vShow","GvFormPlugin","GvForm","collapse","loadDict","loadDictDivision","toggleCollapse","collapsed","currentDict","currentReloadDict","currentDictDivision","Fold","Expand","GvHamburgerPlugin","GvHamburger","localeStore","useLocaleStore","langMap","currentLang","handleSetLang","switchLocale","useLocale","ElDropdown","ElDropdownMenu","ElDropdownItem","_component_GvIcon","GvLangSelectPlugin","GvLangSelect","_sfc_main$g","placement","tablePopover","columnType","popClass","handleUpdateVisible","handleShow","handleHide","handlePopoverWrapper","getReferenceSlot","ElPopover","GvPopoverPlugin","GvPopover","_sfc_main$f","radioSize","GvRadioPlugin","GvRadio","_sfc_main$e","GvRadioButtonPlugin","GvRadioButton","_sfc_main$d","radioGroupSize","GvRadioGroupPlugin","GvRadioGroup","_sfc_main$c","gutter","GvRowPlugin","GvRow","toggle","isFullscreen","useFullscreen","toggleFullscreen","GvScreenFullPlugin","GvScreenFull","_sfc_main$a","inject","formNode","fieldList","fields","expandFields","shrinkFields","createSearchBar","searchBar","defaultSlot","searchBtnFlag","expandText","shrinkText","shrink","GvSearchBarPlugin","GvSearchBar","hasOneShowingChild","onlyOneChild","showingChildren","useRenderMenuTitle","renderMenuTitle","useRenderMenuItem","menuMode","renderMenuItem","oneShowingChild","fullPath","noShowingChildren","alwaysShow","ElMenuItem","ElSubMenu","_sfc_main$9","menuSelect","layout","getLayout","getCollapseMenus","leftMenuUniqueOpened","getLeftMenuUniqueOpened","activeMenu","open","renderMenu","ElMenu","renderMenuWrap","ElScrollbar","GvSidebarPlugin","GvSidebar","_imports_0","GvSidebarLogoPlugin","GvSidebarLogo","_sfc_main$7","createTableBar","tableBar","defaultSlots","childrenNodes","firstChild","_sfc_main$6","closable","effect","round","tagSize","ElTag","appendPageInfo","pi","pageInfo","currentpagenum","recordsperpage","countrows","totalpage","combined","tabNode","filterConditions","co","sOp","coo","ds","condition","searchCombined","action","upper","saveCombined","fetchData","fetch","submit","hasMsg","fetchTable","checkForms","fmNodes","fmNode","rawFmChildren","fmChildList","fmNode2","_c","save","check","fmInnerNode","conditions","update","search","searchInputNode","tableEl","tableHeader","tableFixedHeader","columns","h","columnsFixed","lenFixed","searchNoFm","toNewPageSearch","trans","insertResult","searchData","updateResult","rownums","currentRow","removeResult","getDictDisplayLabel","dictObj","_f","_e","_d","_i","_h","_g","_k","_j","setEditValue","rowData","fieldValue","items","itemChild","codes","resetEditValue","crud","tableHeadFilterPopoverPopperStyle","maxWidth","_sfc_main$5","refTable","tableHead","tableData","pageSize","rowClassName","rowStyle","spanMethod","cellStyle","tableType","tableSort","tableKit","tableFetch","multi","isShowPage","total","tableInit","beforeImport","tableFilter","tableCb","expandRowKeys","limitHeight","tableAction","tableActionIcon","sTableAction","sTableActionIcon","sTableConfirm","detailPlacement","sTableType","originTableHead","tableHeads","sHeight","sMaxWidth","isEditTable","sPageSize","resultData","recordsList","records","pageSizes","filterHeads","popoverVisible","exportBtnDisabled","exportBtnLoading","importBtnLoading","tableSortMode","exportDialogShow","importDialogShow","sTableBar","gTableBar","tableSearchShow","sTableSort","sTableKit","showPopoverDetail","pageLayout","actionWidth","transHash","headColumn","headColumnInit","columnSumsDecimal","isIndeterminate","columnTreeList","columnCheckedKeys","storageKey","loginAccount","lsTableHeads","debounceSearch","tableRefs","tableRef","getPageInfo","current","pages","setTableRef","closeAllPopover","property","next","ensurePopoverKey","propKey","wrapPopoverFilterBody","body","getScrollLeft","startLoading","stopLoading","transRecords","loadAction","splice","handleImport","handleExport","getImportBtn","import","buttonName","getExportBtn","export","runPageSearch","fC","fetchFn","handleSizeChange","handleCurrentChange","handleTableSearchInput","handleTableSearch","fh","strFh","y","trim","getTableSearch","handlePopoverShow","popOvers","tableBodyWidth","style","scrollLeft","handlePopoverHide","createChangedColumns","checkedKeys","column","hasHidden","handleColumnCheckChange","checked","childChecked","$refs","$children","getCheckedKeys","hColumns","getTableColumn","setStoreLocal","handleTableRefresh","inputSearch","getTableBar","btns","exportSlots","importSlots","getKitBar","isVisible","ElButtonGroup","Refresh","Operation","ElTree","overflow","getSortModel","marginRight","columnFilterHandler","propField","popoverHtml","checkList","dateHtmlArr","filterValue","innerText","assign","getAttribute","add","tableFixHeader","fixColumns","fixLen","columnFilterHandlerReset","remove","primaryBtn","setAttribute","getColWidth","edit","label2","sWidth","columnFormatter","cellValue","handleColumnFilter","popoverHtmlList","from","pop","removeAttribute","renderHeadFilter","_slot4","_slot5","_slot6","fc","$store","getters","dictDivision","dispatch","ret2","_slot7","_slot8","_slot9","handleDictCheckAll","handleDictCheck","handlePopoverSlotClick","renderColumnItem","tableFixed","fixed","align","formatter","cellBlur","cellEnter","cellChange","selectable","showLabelProp","columnFilter","multiLabel","heads","reserveSelection","sHidden","sProp","Math","random","sFixed","sortable","multiLabels","hType","hSLabel","hSProp","hKey","hSFixed","hReserveSelection","hSortable","hSWidth","ElTableColumn","scope","renderRowEdit","renderAction","content","confirmArr","iconArr","sContent","confirms","detail","actionType","onClick","lock","$index","onConfirm","onAfter-enter","handleDetailPopoverShow","checkEditRow","tableColumns","thd","lsTableHeadsArr","startIndex","ff","f","treeNode","rownumWidth","actionHead","actionColumn","columnVNode","sortMethod","_0","order","fieldName","sortingType","sumData","sort","row1","row2","isNaN","localeCompare","oi","prevVal","typeArr","doLayout","n","tableBodyWrapper","_slot0","GvTableBar","ElTable","_resolveDirective","ElPagination","GvTablePlugin","GvTable","_sfc_main$4","autoHeight","proxy","GvTabsPlugin","GvTabPane","_sfc_main$3","tabPosition","tabMaxHeight","tabHeight","panes","handleTabClick","tabVm","tabName","calcPaneInstances","createTabPane","dialogContainer","GvTabs","GvTagPlugin","GvTag","_sfc_main$2","reactive","currentKey","activeKey","tagsViewStore","useTagsViewStore","permsStore","visitedViews","mainAppRoutes","isRedirect","isActive","isAffix","affix","filterAffixNavMenus","navMenus","affixTags","tagPath","params","hash","redirectedFrom","addAffixTags","tagView","addVisitedView","createTabPanel","icons","picon","showContextMenu","closeContextMenu","toLink","routePath","targetView","toLastView","visitedView","currentView","latestView","addNavMenu","addTagView","moveToCurrentTag","view","clickTab","tab","closeCurrentTag","targetKey","delTagView","refreshSelectedTag","delCachedView","findCurTagIndex","findIndex","closeTagsOrientation","isClosed","vV","cloneDeep","closeOthersTags","delOthersViews","oldName","tagsViewEl","useEventListener","targetNode","tagName","parentElement","clientX","pageX","clientY","pageY","GvTagsViewPlugin","GvTagsView","themeOptions","currentTheme","handleSetTheme","GvThemePlugin","GvTheme","_sfc_main","treeProps","nodeKey","load","showCheckbox","draggable","defaultExpandedKeys","defaultCheckedKeys","iconClass","defaultExpandAll","expandOnClickNode","checkOnClickNode","filterNodeMethod","renderContent","handleNodeClick","handleNodeExpand","handleNodeCollapse","handleCheck","checkedInfo","handleCheckChange","handleLazyLoad","handleNodeDrop","draggingNode","dropNode","dropType","GvTreePlugin","GvTree","encrypt","word","keyStr","CryptoJS","ww","srcs","decrypt","generateKey","num","library","randomPoz","components","GvPopconfirmPlugin","GvTabPanePlugin","install","setActivePinia","GuavaUI"],"mappings":"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"}
1
+ {"version":3,"file":"guava-ui.es.js","sources":["../packages/bridge/index.ts","../packages/GvBacktop/src/GvBacktop.vue","../packages/GvBacktop/index.ts","../packages/GvBadge/src/GvBadge.vue","../packages/GvBadge/index.ts","../packages/utils/index.ts","../packages/GvIcon/src/GvIcon.vue","../packages/GvIcon/index.ts","../packages/utils/gv.tree.ts","../packages/GvBreadCrumb/src/helper.ts","../packages/GvBreadCrumb/src/GvBreadCrumb.vue","../packages/GvBreadCrumb/index.ts","../packages/GvPopconfirm/src/GvPopconfirm.vue","../packages/GvPopconfirm/index.ts","../packages/hooks/web/useStorage.ts","../packages/utils/gv.notify.ts","../packages/GvButton/src/GvButton.vue","../packages/GvButton/index.ts","../packages/GvCard/src/GvCard.vue","../packages/GvCard/index.ts","../packages/GvCascader/src/GvCascader.vue","../packages/GvCascader/index.ts","../packages/GvCheckbox/src/GvCheckbox.vue","../packages/GvCheckbox/index.ts","../packages/GvCheckboxButton/src/GvCheckboxButton.vue","../packages/GvCheckboxButton/index.ts","../packages/GvCheckboxGroup/src/GvCheckboxGroup.vue","../packages/GvCheckboxGroup/index.ts","../packages/GvCol/src/GvCol.vue","../packages/GvCol/index.ts","../packages/GvDatePicker/src/datetime.ts","../packages/GvDatePicker/src/shortcuts.ts","../packages/GvDatePicker/src/GvDatePicker.vue","../packages/GvDatePicker/index.ts","../packages/GvDialog/src/drag.ts","../packages/GvDialog/src/GvDialog.vue","../packages/GvDialog/index.ts","../packages/GvDivider/src/GvDivider.vue","../packages/GvDivider/index.ts","../packages/GvDrawer/src/GvDrawer.vue","../packages/GvDrawer/index.ts","../packages/utils/gv.propTypes.ts","../packages/hooks/web/usePinyin.ts","../packages/GvExpandMenu/src/GvMenuList.vue","../packages/GvExpandMenu/src/GvExpandMenu.vue","../packages/GvExpandMenu/index.ts","../packages/GvInput/src/GvInput.vue","../packages/GvInput/index.ts","../packages/GvInputNumber/src/GvInputNumber.vue","../packages/GvInputNumber/index.ts","../packages/GvSelect/src/GvSelect.vue","../packages/GvSelect/index.ts","../packages/GvSwitch/src/GvSwitch.vue","../packages/GvSwitch/index.ts","../packages/GvTimePicker/src/GvTimePicker.vue","../packages/GvTimePicker/index.ts","../packages/utils/gv.infomsg.ts","../packages/utils/gv.validate.ts","../packages/GvForm/src/GvForm.vue","../packages/GvForm/index.ts","../packages/GvHamburger/src/GvHamburger.vue","../packages/GvHamburger/index.ts","../packages/GvLangSelect/src/GvLangSelect.vue","../packages/GvLangSelect/index.ts","../packages/GvPopover/src/GvPopover.vue","../packages/GvPopover/index.ts","../packages/GvRadio/src/GvRadio.vue","../packages/GvRadio/index.ts","../packages/GvRadioButton/src/GvRadioButton.vue","../packages/GvRadioButton/index.ts","../packages/GvRadioGroup/src/GvRadioGroup.vue","../packages/GvRadioGroup/index.ts","../packages/GvRow/src/GvRow.vue","../packages/GvRow/index.ts","../packages/GvScreenFull/src/GvScreenFull.vue","../packages/GvScreenFull/index.ts","../packages/GvSearchBar/src/GvSearchBar.vue","../packages/GvSearchBar/index.ts","../packages/GvSidebar/src/helper.ts","../packages/GvSidebar/src/components/useRenderMenuTitle.tsx","../packages/GvSidebar/src/components/useRenderMenuItem.tsx","../packages/GvSidebar/src/GvSidebar.vue","../packages/GvSidebar/index.ts","../src/assets/imgs/logo.png","../packages/GvSidebarLogo/src/GvSidebarLogo.vue","../packages/GvSidebarLogo/index.ts","../packages/GvTableBar/src/GvTableBar.vue","../packages/GvTag/src/GvTag.vue","../packages/utils/gv.table.ts","../packages/utils/gv.crud.ts","../packages/GvTable/src/GvTable.vue","../packages/GvTable/index.ts","../packages/GvTabPane/src/GvTabPane.vue","../packages/GvTabPane/index.ts","../packages/GvTabs/src/GvTabs.vue","../packages/GvTabs/index.ts","../packages/GvTag/index.ts","../packages/GvTagsView/src/GvTagsView.vue","../packages/GvTagsView/index.ts","../packages/GvTheme/src/GvTheme.vue","../packages/GvTheme/index.ts","../packages/GvTree/src/GvTree.vue","../packages/GvTree/index.ts","../packages/utils/gv.secret.ts","../packages/index.ts"],"sourcesContent":["// bridge/index.ts\nimport type { Router } from 'vue-router';\nimport type { Pinia } from 'pinia';\nimport type { Composer } from 'vue-i18n';\n\ninterface GlobalBridgeContext {\n router?: Router;\n i18n?: Composer;\n store?: Pinia;\n}\nconst globalBridgeKey = '__LIB_BRIDGE_CONTEXT__';\nconst getBridge = (): GlobalBridgeContext => {\n const g = globalThis as any;\n if (!g[globalBridgeKey]) g[globalBridgeKey] = {};\n\n return g[globalBridgeKey];\n};\nconst context: GlobalBridgeContext = {};\n\n// export function setBridgeContext(options: GlobalBridgeContext) {\n// if (options.router) context.router = options.router;\n// if (options.i18n) context.i18n = options.i18n;\n// if (options.pinia) context.pinia = options.pinia;\n// }\nexport const setBridgeContext = (ctx: GlobalBridgeContext) => {\n // console.log('setBridgeContext', ctx);\n Object.assign(getBridge(), ctx);\n};\n\nexport function useBridgeRouter(): Router {\n const router = getBridge().router;\n if (!router) throw new Error('[Bridge] router not set');\n return router;\n}\n// export function useBridgeRouter(): Router {\n// if (!context.router) throw new Error('[Bridge] Router is not injected');\n// return context.router;\n// }\n\nexport function useBridgeI18n(): Composer {\n const i18n = getBridge().i18n;\n if (!i18n) throw new Error('[Bridge] I18n is not injected');\n return i18n;\n}\n\n// export function useBridgeI18n(): Composer {\n// if (!context.i18n) throw new Error('[Bridge] I18n is not injected');\n// return context.i18n;\n// }\n\nexport function useBridgePinia(): Pinia {\n if (!context.store) throw new Error('[Bridge] Pinia is not injected');\n return context.store;\n}\n","<!--\n * @title: backtop\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:24:46\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-05-22 09:26:44\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { ElBacktop } from 'element-plus';\n import { useStyle } from '@/hook/web/useStyle';\n\n // --- define name and inheritAttrs ---\n defineOptions({\n name: 'GvBacktop', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n\n const { getPrefixCls, variables } = useStyle();\n\n const prefixCls = getPrefixCls('backtop');\n</script>\n\n<template>\n <ElBacktop\n :class=\"prefixCls\"\n :target=\"`.${variables.namespace}-layout-content-scrollbar .${variables.elNamespace}-scrollbar__wrap`\" />\n</template>\n","import type { App } from 'vue';\nimport GvBacktop from './src/GvBacktop.vue';\n// Define the install method on the GvButton component\nconst GvBacktopPlugin = {\n install(app: App): void {\n app.component(GvBacktop.name ?? 'GvBacktop', GvBacktop);\n },\n};\nexport default GvBacktopPlugin;\n\nexport { GvBacktop };\n","<!--\n * @title: badge component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 10:37:36\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:14:46\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElBadge } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n import type { TBadgeType } from './types/index';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('badge');\n\n export default defineComponent({\n name: 'GvBadge',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [Number, String] as PropType<number | string>,\n default: '',\n },\n max: {\n type: Number,\n default: 10,\n },\n isDot: {\n type: Boolean,\n default: false,\n },\n hidden: {\n type: Boolean,\n default: false,\n },\n showZero: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String,\n default: '',\n },\n type: {\n type: String as PropType<TBadgeType>,\n default: 'warning',\n },\n },\n\n setup(props, { slots }) {\n // @render\n return () => (\n <ElBadge\n value={props.value}\n max={props.max}\n type={props.type}\n hidden={props.hidden}\n isDot={props.isDot}\n showZero={props.showZero}\n color={props.color}\n class={prefixCls}>\n {slots.default?.()}\n </ElBadge>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-badge';\n .#{$prefixCls} {\n margin-top: 5px;\n margin-right: 25px;\n\n :deep(.el-badge__content) {\n height: 20px;\n line-height: 18px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvBadge from './src/GvBadge.vue';\n\nconst GvBadgePlugin = {\n install(app: App): void {\n app.component(GvBadge.name ?? 'GvBadge', GvBadge);\n },\n};\nexport default GvBadgePlugin;\n\nexport { GvBadge };\n","/*\n * @title: common utility func\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-02-27 13:25:29\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 15:00:33\n * @version: 1.0.6\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n// ------ is utils ------\nconst toString = Object.prototype.toString;\nexport const is = (val: unknown, type: string) => toString.call(val) === `[object ${type}]`;\n\nexport const isExternal = (path: string): boolean => /^(https?:|mailto:|tel:)/.test(path);\nexport const isString = (val: unknown): val is string => is(val, 'String');\nexport const isArray = (val: any): val is any[] => val && Array.isArray(val);\nexport const isError = (e: unknown): e is Error => typeof e === 'object' && e !== null && 'message' in e;\nexport const isObject = (val: any): val is Record<any, any> => val !== null && is(val, 'Object');\nexport const isDate = (val: unknown): val is Date => is(val, 'Date');\nexport const isNumber = (val: unknown): val is number => is(val, 'Number');\nexport const isBoolean = (val: unknown): val is boolean => is(val, 'Boolean');\nexport const isFunction = (val: unknown): val is (...args: any[]) => any => typeof val === 'function';\nexport const isElement = (val: unknown): val is Element => isObject(val) && !!val.tagName;\nexport const isMap = (val: unknown): val is Map<any, any> => is(val, 'Map');\nexport const isImgPath = (path: string): boolean => /(https?:\\/\\/|data:image\\/).*?\\.(png|jpg|jpeg|gif|svg|webp|ico)/gi.test(path);\nexport const isDark = (): boolean => window.matchMedia('(prefers-color-scheme: dark)').matches;\nexport const isNull = (val: unknown): val is null => val === null;\n\nexport const isEmpty = <T = unknown>(val: T): val is T => {\n if (isNull(val)) return true;\n if (val === undefined) return true;\n if (val === 'null') return true;\n if (isArray(val) || isString(val)) return val.length === 0;\n if (val instanceof Map || val instanceof Set) return val.size === 0;\n if (isObject(val)) return Object.keys(val).length === 0;\n return false;\n};\n\n/**\n * @todo: deep equal (plain object / array / date), functions compare by reference\n */\nexport const isEqual = (a: unknown, b: unknown): boolean => {\n if (Object.is(a, b)) return true;\n if (a === null || b === null || a === undefined || b === undefined) return false;\n if (typeof a !== typeof b) return false;\n if (isFunction(a) || isFunction(b)) return a === b;\n if (isDate(a) && isDate(b)) return a.getTime() === b.getTime();\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (!isEqual(a[i], b[i])) return false;\n\n return true;\n }\n if (isObject(a) && isObject(b)) {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (!isEqual(a[key], b[key])) return false;\n }\n return true;\n }\n return false;\n};\n\nexport const isUrl = (path: string): boolean => {\n try {\n new URL(path);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * @todo: set html lang attr\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-03-24 10:37:13\n * @param {LocaleType} locale\n */\nexport const setHtmlAttrByLang = (locale: LocaleType): void => {\n document.querySelector('html')?.setAttribute('lang', locale);\n};\n\n/**\n * @todo: sleep async function\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 12:01:37\n * @param {*} timeLen\n */\nexport const sleep = async (timeLen: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, timeLen));\n/**\n * @todo: underline to camel case\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 15:21:09\n * @param {*} name\n */\nexport const toHump = (name: string): string => {\n if (!name) return '';\n // eslint-disable-next-line no-useless-escape\n return name.replace(/\\_(\\w)/g, function (all, letter) {\n return letter.toUpperCase();\n });\n};\n\n/**\n * @todo: camel case to underline\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 15:21:50\n * @param {*} name\n */\nexport const toLine = (name: string): string => name.replace(/([A-Z])/g, '_$1').toLowerCase();\n\n/**\n * 设置css style\n * @param prop\n * @param val\n * @param dom\n */\nexport const setDomCssProp = (prop: string, val: any, dom = document.documentElement): void => {\n dom.style.setProperty(prop, val);\n};\n\n/**\n * get css style\n * @param prop\n * @param dom\n * @returns\n */\nexport const getDomCssProp = (prop: string, dom = document.documentElement): string => getComputedStyle(dom).getPropertyValue(prop);\n\n/**\n * join icon class\n * @param icon\n * @returns\n */\nexport const joinIcon = function (icon) {\n let joinIcons = '';\n if (icon)\n if (icon.includes('el-icon')) joinIcons = icon;\n else if (icon.includes('gv-icon')) joinIcons = `iconfont ${icon}`;\n return joinIcons;\n};\n\n/**\n * Check if an element has a class\n * @param {HTMLElement} ele\n * @param {string} cls\n * @returns {boolean}\n */\nexport const hasClass = (ele: HTMLElement, cls: string): boolean => !!ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'));\n\n/**\n * Add class to element\n * @param {HTMLElement} ele\n * @param {string} cls\n */\nexport const addClass = (ele: HTMLElement, cls: string) => {\n if (!hasClass(ele, cls)) ele.className += ' ' + cls;\n};\n\n/**\n * Remove class from element\n * @param {HTMLElement} ele s s\n * @param {string} cls\n */\nexport const removeClass = (ele: HTMLElement, cls: string): void => {\n if (hasClass(ele, cls)) {\n const reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\n ele.className = ele.className.replace(reg, ' ');\n }\n};\n\n/**\n * @todo: html tag has scrollbar\n * @param {*} tag\n */\nexport const hasScrollbar = (tag: any) => tag.scrollHeight > (tag.innerHeight || tag.clientHeight);\n\n/**\n * date format settings\n */\nexport const dateFormatConfig = {\n date: {\n placeholder: '选择日期', // yyyy-mm-dd\n valueFormat: 'YYYY-MM-DD',\n dateFormat: 'YYYY-MM-DD',\n },\n exactdate: {\n placeholder: '选择日期', // yyyy-mm-dd\n valueFormat: 'YYYY-MM-dd HH:mm:ss',\n dateFormat: 'YYYY-MM-DD',\n },\n datetime: {\n placeholder: '选择时间', // yyyy-mm-dd hh:mm\n valueFormat: 'YYYY-MM-DD HH:mm',\n dateFormat: 'YYYY-MM-DD HH:mm',\n },\n week: {\n placeholder: '选择周',\n dateFormat: 'YYYY 第 WW 周',\n },\n month: {\n placeholder: '选择月份', // yyyy-mm\n valueFormat: 'YYYY-MM',\n dateFormat: 'YYYY-MM',\n },\n year: {\n placeholder: '选择年份', // yyyy\n valueFormat: 'YYYY',\n dateFormat: 'YYYY',\n },\n};\n\n/**\n * @todo: 防抖函数(一段时间内只响应最后一次操作,如:input框连续输入)\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:58:21\n * @param {*} func\n * @param {*} wait\n * @param {*} immediate\n */\nexport const debounce = (func: Fn, wait = 100, immediate = false) => {\n let timeout: ReturnType<typeof setTimeout> | null;\n let arg: any[];\n let context: any;\n let timestamp: number;\n let result: ReturnType<Fn>;\n const later = function () {\n // 据上一次触发时间间隔\n const last = +new Date() - timestamp;\n // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait\n if (last < wait && last > 0) timeout = setTimeout(later, wait - last);\n else {\n timeout = null;\n // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用\n if (!immediate) {\n result = func.apply(context, arg);\n if (!timeout) context = arg = null as any;\n }\n }\n };\n return function (this: any, ...args) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n context = this;\n // fixme: 解决防抖函数无法传参的问题 2022-04-19\n arg = args;\n timestamp = +new Date();\n const callNow = immediate && !timeout;\n // 如果延时不存在,重新设定延时\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, arg);\n context = arg = null as any;\n }\n\n return result;\n };\n};\n\n/**\n * @todo: get vnode text\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 13:49:54\n * @param {VNode} vnode\n */\nexport const getVNodeText = (vnode: any): string => {\n if (!vnode) return '';\n // 1. 字符串\n if (typeof vnode === 'string') return vnode;\n // 2. 数字\n if (typeof vnode === 'number') return String(vnode);\n // 3. children 为字符串\n if (typeof vnode.children === 'string') return vnode.children.trim();\n // 4. children 为数组\n if (Array.isArray(vnode.children)) return vnode.children.map((item) => getVNodeText(item)).join('');\n // 5. slots(ElButton / 组件)\n if (vnode.children && typeof vnode.children === 'object') {\n const slots = vnode.children as Record<string, any>;\n // default slot\n if (typeof slots.default === 'function') {\n const slotNodes = slots.default();\n return slotNodes.map((item: any) => getVNodeText(item)).join('');\n }\n }\n\n return '';\n};\n\n/**\n * @todo: get vnode name\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 17:24:24\n * @param {any} vnode\n */\nexport const getVNodeName = (vnode: any): string => {\n if (!vnode) return '';\n return typeof vnode.type === 'object' && vnode.type !== null && 'name' in vnode.type ? vnode.type.name : '';\n};\n\n/**\n * @todo: 去除金额格式化方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-24 14:14:55\n * @param {*} val\n */\nexport const removeAmountFormat = (val: string): string => {\n if (val) return val.replace(/,/g, '');\n else return '0.00';\n};\n\n// when val is 0.00, change it as 0 format\nfunction zeroFormat(val: string): string {\n if (val === '0.00') return '0';\n else return val;\n}\n\nfunction numberFormat(pattern, val) {\n const oldVal = val;\n if (val < 0) val = -val;\n const _nfPattern = '[0#]+[,]?[0#]*(\\\\.[0#]+)?';\n if (!pattern || !new RegExp(_nfPattern, 'g').test(pattern)) return '0.00';\n\n if (!isNumber((val + '').replace('.', ''))) return '0.00';\n\n const strAry = pattern.match(new RegExp(_nfPattern, 'g'));\n const p1 = strAry[0].indexOf('.');\n if (p1 > 0) {\n const len = strAry[0].length - p1 - 1;\n val = Math.round(val * Math.pow(10, len)) / Math.pow(10, len);\n } else val = Math.round(val);\n\n val = val + '';\n const p2 = val.indexOf('.');\n let ret = '';\n if (p1 > 0) {\n for (let i = p1 + 1; i < strAry[0].length; i++) {\n const ch = p2 > 0 && p2 + i - p1 < val.length ? val.charAt(p2 + i - p1) : '';\n if (strAry[0].charAt(i) === '0') ret = ret + (ch === '' ? '0' : ch);\n else ret = ret + (ch === '' ? '' : ch);\n }\n ret = ret === '' ? '' : '.' + ret;\n }\n const p3 = strAry[0].indexOf(',');\n if (p3 > 0) {\n const len = p1 > 0 ? p1 - p3 - 1 : strAry[0].length - p3 - 1;\n const len2 = p2 > 0 ? p2 - 1 : val.length - 1;\n for (let i = len2; i >= 0; i--) ret = ((len2 - i + 1) % len === 0 ? ',' : '') + val.charAt(i) + ret;\n\n ret = ret.charAt(0) === ',' ? ret.substring(1, ret.length) : ret;\n } else ret = val.substring(0, p2 > 0 ? p2 : val.length) + ret;\n\n if (oldVal < 0) ret = '-' + ret;\n\n return pattern.replace(strAry[0], ret);\n}\n\n/**\n * @todo: 千位符转换\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-24 09:22:56\n * @param {*} val\n * @param {*} decimal 小数位数\n */\nexport const amountFormat = (val: string | number, decimal = 2): string => {\n let v = val + '';\n if (v === null || v === 'null' || v === '0' || v === undefined || v === 'undefined') return '0.00';\n if (v.indexOf(',') > 0) v = removeAmountFormat(v);\n let pattern = '#,###.';\n let decimalPattern = '00';\n if (decimal) decimalPattern = decimalPattern.padStart(decimal, '0');\n pattern = pattern + decimalPattern;\n return zeroFormat(numberFormat(pattern, v));\n};\n\n/**\n * @todo: set quick keys\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:38:53\n * @param {*} ev\n */\nexport const setQuickKeys = (ev) => {\n if (ev && ev.key)\n if (ev.key.toLowerCase() === 'q' && ev.ctrlKey === true) {\n // 绑定ctr + q\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-search__bar>.gv-button.search') as HTMLElement;\n if (btnHtml && btnHtml.style.display !== 'none') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-edit__bar .gv-button.search') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === 'r' && ev.ctrlKey === true) {\n // 绑定crt + r\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-form .gv-search__bar>.gv-button.reset') as HTMLElement;\n if (btnHtml && btnHtml.style.display !== 'none') if (btnHtml.getAttribute('refform')) btnHtml.click();\n } else if (ev.key.toLowerCase() === 'e' && ev.ctrlKey === true) {\n // 绑定crt + e\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-form .gv-search__bar>.gv-button.shrink') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-form .gv-search__bar>.gv-button.expand') as HTMLElement;\n if (btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === 's' && ev.ctrlKey === true) {\n // 绑定crt + s\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-drawer__popup .gv-drawer .gv-drawer__footer>.gv-drawer__footer--inner .gv-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-edit__bar .gv-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === 'n' && ev.ctrlKey === true) {\n // 绑定crt + n\n ev.preventDefault();\n ev.stopPropagation();\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-table__container .gv-table__bar .gv-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n else {\n const btnHtml = document.body.querySelector('.main-container .gv-container .gv-edit__bar .gv-button.save') as HTMLElement;\n if (btnHtml && btnHtml.style.display === '') btnHtml.click();\n }\n } else if (ev.key.toLowerCase() === '=' && ev.ctrlKey === true) {\n // 绑定crt + '='\n ev.preventDefault();\n ev.stopPropagation();\n const inputHtml = document.body.querySelector('.main-container .gv-container .gv-table__container .gv-table__search .gv-table__search-input > .el-input__inner') as HTMLElement;\n if (inputHtml) inputHtml.focus();\n } else if (ev.key === 'Escape') {\n // 绑定esc关闭弹窗\n ev.preventDefault();\n ev.stopPropagation();\n const messageConfirmHtml = document.documentElement.querySelector('body>.el-message-box__wrapper') as HTMLElement;\n if (messageConfirmHtml && messageConfirmHtml.style.display !== 'none') {\n const bodyButtonHtml = messageConfirmHtml.querySelector('.el-message-box .el-message-box__btns button') as HTMLElement;\n bodyButtonHtml.click();\n } else {\n const bodyDialogHtml = document.documentElement.querySelector('body>.gv-dialog') as HTMLElement;\n if (bodyDialogHtml && bodyDialogHtml.style.display !== 'none') {\n const bodyButtonHtml = bodyDialogHtml.querySelector('.el-dialog__header button') as HTMLElement;\n bodyButtonHtml.click();\n } else {\n const dialogArr = document.body.querySelectorAll('.main-container .gv-container .gv-dialog__popup .gv-dialog') as NodeListOf<HTMLElement>;\n if (dialogArr)\n for (let i = 0; i < dialogArr.length; i++)\n if (dialogArr[i].style.display !== 'none') {\n const buttonHtml = dialogArr[i].querySelector('.el-dialog__header button') as HTMLElement;\n if (buttonHtml && buttonHtml.style.display !== 'none') {\n buttonHtml.click();\n return;\n }\n }\n\n const buttonDHtml = document.body.querySelector('.main-container .gv-container .gv-drawer__popup .gv-drawer .el-drawer__header button') as HTMLElement;\n if (buttonDHtml && buttonDHtml.style.display !== 'none') buttonDHtml.click();\n }\n }\n }\n};\n\nexport const pathResolve = (parentPath: string, path: string) => {\n if (isUrl(path)) return path;\n const childPath = path.startsWith('/') || !path ? path : `/${path}`;\n return `${parentPath}${childPath}`.replace(/\\/\\//g, '/').trim();\n};\n","<!--\n * @title: svg icon component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-01 17:02:13\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 10:50:13\n * @version: 1.0.8\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { isExternal } from '@@/utils';\n import * as Icons from '@element-plus/icons-vue';\n import { ElIcon } from 'element-plus';\n import { computed, useAttrs, type DefineComponent } from 'vue';\n const { variables } = useStyle();\n const preNameSpace = variables.namespace;\n const attrs = useAttrs();\n // --- define name and inheritAttrs ---\n defineOptions({\n name: 'GvIcon', // 定义组件名称\n inheritAttrs: false, // 默认继承属性\n });\n // --- transfer props and define default values ---\n const props = withDefaults(\n defineProps<{\n iconType?: string;\n iconName: string;\n className?: string;\n icon?: DefineComponent; // element-plus icon component\n size?: string; // 图标的font-size,单位是px\n }>(),\n {\n iconType: '', // svg | iconfont | el\n className: '',\n },\n );\n // @computed\n const isLocal = computed(() => isExternal(props.iconName));\n const iconType = computed(() => {\n if (props.iconType === 'svg') return 'svg';\n else if (props.iconType === 'iconfont') return 'iconfont';\n else if (props.iconType === 'el') return 'el';\n else if (props.iconType === '')\n if (props.iconName.startsWith('el-icon')) return 'el';\n else if (props.iconName.startsWith('gv-')) return 'iconfont';\n else return 'svg';\n else return 'svg';\n });\n const iconName = computed(() => {\n if (iconType.value === 'svg') return `#${preNameSpace}-icon-${props.iconName}`;\n else if (iconType.value === 'iconfont') return 'iconfont ' + props.iconName;\n else if (iconType.value === 'el') return props.iconName;\n else return `#${props.iconName}`;\n });\n\n // @method\n const svgClass = computed(() => {\n if (iconType.value === 'svg') return props.className ? 'svg-icon ' + props.className : 'svg-icon';\n else return props.className;\n });\n const styleExternalIcon = computed(() => ({\n mask: `url(${props.iconName}) no-repeat 50% 50%`,\n '-webkit-mask': `url(${props.iconName}) no-repeat 50% 50%`,\n }));\n\n /**\n * @todo: get element-plus icon component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:18:16\n * @param {*} computed\n */\n const iconComponent = computed(() => {\n // console.log(iconType.value);\n // console.log(props.iconName);\n if (iconType.value !== 'el') return null;\n const name = props.iconName;\n let compName = '';\n if (name.startsWith('el-icon')) {\n compName = name.replace('el-icon-', '');\n compName = compName.charAt(0).toUpperCase() + compName.slice(1);\n } else compName = name.charAt(0).toUpperCase() + name.slice(1);\n\n return Icons[compName as keyof typeof Icons];\n });\n</script>\n<template>\n <div\n v-if=\"isLocal\"\n :style=\"styleExternalIcon\"\n class=\"svg-external-icon svg-icon\"\n v-bind=\"attrs\"></div>\n <svg\n v-else-if=\"iconType === 'svg'\"\n :class=\"svgClass\"\n aria-hidden=\"true\"\n v-bind=\"attrs\">\n <use :href=\"iconName\" />\n </svg>\n <i\n v-else-if=\"iconType === 'iconfont'\"\n :class=\"[iconName, svgClass]\"\n v-bind=\"attrs\">\n </i>\n <ElIcon\n v-else-if=\"iconComponent\"\n :class=\"svgClass\">\n <component :is=\"iconComponent\" />\n </ElIcon>\n <svg\n v-else\n :class=\"svgClass\"\n :style=\"{ 'font-size': size + 'px' }\"\n aria-hidden=\"true\"\n v-bind=\"attrs\">\n <use :xlink:href=\"iconName\" />\n </svg>\n</template>\n\n<style lang=\"scss\" scoped>\n .svg-icon {\n width: 1em;\n height: 1em;\n overflow: hidden;\n vertical-align: -0.15em;\n fill: currentcolor;\n }\n\n .svg-external-icon {\n display: inline-block;\n background-color: currentcolor;\n mask-size: cover !important;\n }\n</style>\n","import type { App } from 'vue';\nimport GvIcon from './src/GvIcon.vue';\nconst GvIconPlugin = {\n install(app: App): void {\n app.component(GvIcon.name ?? 'GvIcon', GvIcon);\n },\n};\nexport default GvIconPlugin;\n\nexport { GvIcon };\n","interface TreeHelperConfig {\n id: string;\n children: string;\n pid: string;\n}\nconst DEFAULT_CONFIG: TreeHelperConfig = {\n id: 'id',\n children: 'children',\n pid: 'pid',\n};\nconst getConfig = (config: Partial<TreeHelperConfig>) => Object.assign({}, DEFAULT_CONFIG, config);\n// tree from list\nexport const listToTree = <T = any>(list: any[], config: Partial<TreeHelperConfig> = {}): T[] => {\n const conf = getConfig(config) as TreeHelperConfig;\n const nodeMap = new Map();\n const result: T[] = [];\n const { id, children, pid } = conf;\n\n for (const node of list) {\n node[children] = node[children] || [];\n nodeMap.set(node[id], node);\n }\n for (const node of list) {\n const parent = nodeMap.get(node[pid]);\n (parent ? parent.children : result).push(node);\n }\n return result;\n};\n\nexport const treeToList = <T = any>(tree: any, config: Partial<TreeHelperConfig> = {}): T => {\n config = getConfig(config);\n const { children } = config;\n const result: any = [...tree];\n for (let i = 0; i < result.length; i++) {\n if (!result[i][children!]) continue;\n result.splice(i + 1, 0, ...result[i][children!]);\n }\n return result;\n};\n\nexport const findNode = <T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T | null => {\n config = getConfig(config);\n const { children } = config;\n const list = [...tree];\n for (const node of list) {\n if (func(node)) return node;\n node[children!] && list.push(...node[children!]);\n }\n return null;\n};\n\nexport const findNodeAll = <T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T[] => {\n config = getConfig(config);\n const { children } = config;\n const list = [...tree];\n const result: T[] = [];\n for (const node of list) {\n func(node) && result.push(node);\n node[children!] && list.push(...node[children!]);\n }\n return result;\n};\n\nexport const findPath = <T = any>(tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}): T | T[] | null => {\n config = getConfig(config);\n const path: T[] = [];\n const list = [...tree];\n const visitedSet = new Set();\n const { children } = config;\n while (list.length) {\n const node = list[0];\n if (visitedSet.has(node)) {\n path.pop();\n list.shift();\n } else {\n visitedSet.add(node);\n node[children!] && list.unshift(...node[children!]);\n path.push(node);\n if (func(node)) return path;\n }\n }\n return null;\n};\n\nexport const findPathAll = (tree: any, func: Fn, config: Partial<TreeHelperConfig> = {}) => {\n config = getConfig(config);\n const path: any[] = [];\n const list = [...tree];\n const result: any[] = [];\n const visitedSet = new Set();\n const { children } = config;\n while (list.length) {\n const node = list[0];\n if (visitedSet.has(node)) {\n path.pop();\n list.shift();\n } else {\n visitedSet.add(node);\n node[children!] && list.unshift(...node[children!]);\n path.push(node);\n func(node) && result.push([...path]);\n }\n }\n return result;\n};\n\nexport const filter = <T = any>(tree: T[], func: (n: T) => boolean, config: Partial<TreeHelperConfig> = {}): T[] => {\n config = getConfig(config);\n const children = config.children as string;\n function listFilter(list: T[]) {\n return list\n .map((node: any) => ({ ...node }))\n .filter((node) => {\n node[children] = node[children] && listFilter(node[children]);\n return func(node) || (node[children] && node[children].length);\n });\n }\n return listFilter(tree);\n};\n\nexport const forEach = <T = any>(tree: T[], func: (n: T) => any, config: Partial<TreeHelperConfig> = {}): void => {\n config = getConfig(config);\n const list: any[] = [...tree];\n const { children } = config;\n for (let i = 0; i < list.length; i++) {\n // func 返回true就终止遍历,避免大量节点场景下无意义循环,引起浏览器卡顿\n if (func(list[i])) return;\n\n children && list[i][children] && list.splice(i + 1, 0, ...list[i][children]);\n }\n};\n/**\n * @description: Extract tree specified structure\n */\nexport const treeMapEach = (data: any, { children = 'children', conversion }: { children?: string; conversion: Fn }) => {\n const haveChildren = Array.isArray(data[children]) && data[children].length > 0;\n const conversionData = conversion(data) || {};\n if (haveChildren)\n return {\n ...conversionData,\n [children]: data[children].map((i: number) =>\n treeMapEach(i, {\n children,\n conversion,\n }),\n ),\n };\n else\n return {\n ...conversionData,\n };\n};\n/**\n * @description: Extract tree specified structure\n */\nexport const treeMap = <T = any>(treeData: T[], opt: { children?: string; conversion: Fn }): T[] => treeData.map((item) => treeMapEach(item, opt));\n\n/**\n * 递归遍历树结构\n * @param treeDatas 树\n * @param callBack 回调\n * @param parentNode 父节点\n */\nexport const eachTree = (treeDatas: any[], callBack: Fn, parentNode = {}) => {\n treeDatas.forEach((element) => {\n const newNode = callBack(element, parentNode) || element;\n if (element.children) eachTree(element.children, callBack, newNode);\n });\n};\n","/*\n * @title: breadcrumb helper func\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-07-15 12:55:48\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-01-30 12:12:40\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { pathResolve } from '../../utils/index';\n\nexport const filterBreadcrumb = (routes: AppRouteRecordRaw[], parentPath = ''): AppRouteRecordRaw[] => {\n const res: AppRouteRecordRaw[] = [];\n\n for (const route of routes) {\n const meta = route?.meta;\n if (route.name !== 'Root' && meta?.hidden && !meta.canTo) continue;\n\n const data: AppRouteRecordRaw = !meta?.alwaysShow && route.children?.length === 1 ? { ...route.children[0], path: pathResolve(route.path, route.children[0].path) } : { ...route };\n\n data.path = pathResolve(parentPath, data.path);\n\n if (data.children) data.children = filterBreadcrumb(data.children, data.path);\n\n if (data) res.push(data);\n }\n return res;\n};\n","<!--\n * @title: breadcrumb \n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:13:03\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-06 14:28:48\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { usePermsStore } from '@/store/modules/perms';\n import { useBridgeI18n } from '@@/bridge';\n import { ElBreadcrumb, ElBreadcrumbItem } from 'element-plus';\n import { computed, defineComponent, ref, TransitionGroup, unref, watch } from 'vue';\n import { useRouter } from 'vue-router';\n import { GvIcon } from '../../GvIcon';\n import { filter, treeToList } from '../../utils/gv.tree';\n import { filterBreadcrumb } from './helper';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('breadcrumb');\n\n export default defineComponent({\n name: 'GvBreadCrumb',\n setup() {\n const appStore = useAppStore();\n const permStore = usePermsStore();\n // if you want to use the icon in breadcrumb, you can set it in appStore\n const showBreadcrumbIcon = computed(() => appStore.getShowBreadcrumbIcon);\n const { currentRoute } = useRouter();\n\n const { t } = useBridgeI18n();\n\n const levelList = ref<AppRouteRecordRaw[]>([]);\n const menuRouters = computed(() => {\n const routers = permStore.getRouters;\n return filterBreadcrumb(routers);\n });\n\n const getBreadcrumb = () => {\n const currentPath = currentRoute.value.matched.slice(-1)[0].path;\n levelList.value = filter<AppRouteRecordRaw>(unref(menuRouters), (node: AppRouteRecordRaw) => node.path === currentPath);\n };\n\n const renderBreadcrumb = () => {\n const breadcrumbList = treeToList<AppRouteRecordRaw[]>(unref(levelList));\n return breadcrumbList.map((v) => {\n const disabled = !v.redirect || v.redirect === 'noredirect';\n const meta = v.meta;\n return (\n <ElBreadcrumbItem\n to={{ path: disabled ? '' : v.path }}\n key={v.name}>\n {meta?.icon && showBreadcrumbIcon.value ? (\n <>\n <GvIcon\n iconType=\"iconfont\"\n iconName={meta.icon}\n className=\"text-[13px]\"></GvIcon>{' '}\n {t(v?.meta?.title || '')}\n </>\n ) : (\n t(v?.meta?.title || '')\n )}\n </ElBreadcrumbItem>\n );\n });\n };\n // @watch\n watch(\n () => currentRoute.value.path,\n (path) => {\n if (path.startsWith('/redirect/')) return;\n\n getBreadcrumb();\n },\n {\n immediate: true,\n },\n );\n // @created\n\n // @render\n return () => (\n <ElBreadcrumb\n separator=\"/\"\n class={`${prefixCls} flex items-center h-full ml-[10px]`}>\n <TransitionGroup\n appear\n enter-active-class=\"animate__animated animate__fadeInRight\">\n {renderBreadcrumb()}\n </TransitionGroup>\n </ElBreadcrumb>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-breadcrumb';\n .#{$prefixCls} {\n user-select: none;\n :deep(.el-breadcrumb__item) {\n display: flex;\n .el-breadcrumb__inner {\n display: flex;\n align-items: center;\n color: #afb3b9;\n cursor: text;\n //color: var(--top-header-text-color);\n //&:hover {\n // color: var(--el-color-primary);\n //}\n &.is-link {\n font-weight: 500;\n }\n }\n .iconfont {\n //font-size: $textSizeSecondary;\n }\n }\n :deep(.el-breadcrumb__item):last-child {\n .el-breadcrumb__inner:hover {\n color: #afb3b9;\n cursor: text;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvBreadCrumb from './src/GvBreadCrumb.vue';\nconst GvBreadCrumbPlugin = {\n install(app: App): void {\n app.component(GvBreadCrumb.name ?? 'GvBreadCrumb', GvBreadCrumb);\n },\n};\nexport default GvBreadCrumbPlugin;\n\nexport { GvBreadCrumb };\n","<!--\n * @title: popconfirm component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 16:43:20\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-22 16:32:45\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElPopconfirm } from 'element-plus';\n import { defineComponent, getCurrentInstance } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('popconfirm');\n\n export default defineComponent({\n name: 'GvPopconfirm',\n props: {\n title: {\n type: String,\n default: '',\n },\n },\n\n emits: ['confirm'],\n\n setup(props, { emit, slots }) {\n const instance = getCurrentInstance();\n\n const handleConfirm = (event: MouseEvent) => {\n emit('confirm', event, instance);\n };\n\n return () => (\n <ElPopconfirm\n title={props.title}\n onConfirm={handleConfirm}\n class={prefixCls}>\n {{\n reference: () => slots.reference?.(),\n }}\n </ElPopconfirm>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-popconfirm';\n .#{$prefixCls} {\n display: inline-block;\n }\n</style>\n","import type { App } from 'vue';\nimport GvPopconfirm from './src/GvPopconfirm.vue';\n\nconst GvInputPlugin = {\n install(app: App): void {\n app.component(GvPopconfirm.name ?? 'GvPopconfirm', GvPopconfirm);\n },\n};\nexport default GvInputPlugin;\n\nexport { GvPopconfirm };\n","/*\n * @title: sessionStorage and localStorage hook\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-03-19 16:32:15\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-04-24 17:11:28\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\n// 获取传入的值的类型\nconst getValueType = (value: any): string => {\n const type = Object.prototype.toString.call(value);\n return type.slice(8, -1);\n};\n\nexport const useStorage = (type: 'sessionStorage' | 'localStorage' = 'sessionStorage'): IWebStorage => {\n const setStorage = (key: string, value: any): void => {\n const valueType = getValueType(value);\n window[type].setItem(key, JSON.stringify({ type: valueType, value }));\n };\n\n const getStorage = (key: string): any => {\n const value = window[type].getItem(key);\n if (value) {\n const { value: val } = JSON.parse(value);\n return val;\n } else return value;\n };\n\n const removeStorage = (key: string): void => {\n window[type].removeItem(key);\n };\n\n const clear = (excludes?: string[]): void => {\n // 获取排除项\n const keys = Object.keys(window[type]);\n const defaultExcludes = ['dynamicRouter', 'serverDynamicRouter'];\n const excludesArr = excludes ? [...excludes, ...defaultExcludes] : defaultExcludes;\n const excludesKeys = excludesArr ? keys.filter((key) => !excludesArr.includes(key)) : keys;\n // 排除项不清除\n excludesKeys.forEach((key) => {\n window[type].removeItem(key);\n });\n // window[type].clear()\n };\n\n return {\n setStorage,\n getStorage,\n removeStorage,\n clear,\n };\n};\n","/*\n * @title: message alert confirm\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 11:47:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:50:11\n * @version: 1.0.6\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { useStorage } from '@@/hooks/web/useStorage';\nimport { ElMessage, ElMessageBox, ElNotification } from 'element-plus';\n// import { useLocaleStoreWithOut } from '@/store/modules/locale';\nimport { isError, sleep } from './index';\n// const localeStore = useLocaleStoreInstance();\n// const { lang } = localeStore.getCurrentLocale;\n\nconst notificationTime = 5000;\nconst notificationTimeError = 6000;\nconst messageTime = 2000;\nconst messageTimeError = 5000;\ninterface ConfirmOptions {\n title?: string;\n message: string;\n confirmButtonText?: string;\n cancelButtonText?: string;\n type?: 'success' | 'warning' | 'info' | 'error';\n showCancelButton?: boolean;\n}\n/**\n * @todo: Notification - MessageBox\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 13:48:24\n * @param {unknown} msg\n * @param {MessageType} type\n * @param {string} title\n */\ntype MessageType = 'success' | 'info' | 'warning' | 'error';\n\nexport const alert = async (msg: unknown, type: MessageType = 'success') => {\n const alertObj = document.body.querySelector('body>.el-notification');\n if (alertObj) alertObj.remove();\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n let promptMsg = '提示信息';\n if (lang === 'en') promptMsg = 'Hint';\n const duration = type === 'error' ? notificationTimeError : notificationTime;\n let m = 'No message...';\n if (isError(msg)) m = msg.message || 'No message...';\n else if (typeof msg === 'string' || typeof msg === 'number' || typeof msg === 'boolean') m = String(msg);\n else if (typeof msg === 'object') m = JSON.stringify(msg);\n\n ElNotification({\n title: promptMsg,\n message: m,\n type,\n duration: duration,\n });\n await sleep(duration);\n};\n/**\n * @todo: confirm - MessageBox\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-08 12:03:27\n * @param {*} msg\n * @param {*} type\n */\nexport const confirm = async (msg: string, type: MessageType = 'warning') => {\n if (document.body.querySelector('body>.el-confirm')) return;\n // 返回 Promise 对象\n let msgs: string;\n const showCancelButton = true;\n msgs = '是否确定此操作?';\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n let hint = '提示信息';\n let ok = '确定';\n let cancel = '取消';\n if (msg) msgs = msg;\n else if (lang === 'en') {\n msgs = 'Are you sure you want to proceed?';\n hint = 'Hint';\n ok = 'Ok';\n cancel = 'Cancel';\n }\n\n return new Promise((resolve, reject) => {\n ElMessageBox.confirm(msgs, hint, {\n confirmButtonText: ok,\n cancelButtonText: cancel,\n type,\n showCancelButton,\n } as ConfirmOptions)\n .then(() => {\n resolve(true);\n })\n .catch(() => {\n reject(false);\n });\n });\n};\n\nexport const message = async (msg: unknown, type: MessageType = 'warning', tableedit: boolean = false) => {\n if (tableedit === false) {\n const messageObj = document.body.querySelector('body>.el-message');\n // if (messageObj) messageObj.style.display = 'none';\n if (messageObj) return;\n const notifyObj = document.body.querySelector('body>.el-notification');\n if (notifyObj) return;\n }\n let m = 'No message...';\n if (isError(msg)) m = msg.message || 'No message...';\n else if (typeof msg === 'string' || typeof msg === 'number' || typeof msg === 'boolean') m = String(msg);\n else if (typeof msg === 'object') m = JSON.stringify(msg);\n const duration = type === 'error' ? messageTimeError : messageTime;\n ElMessage({\n message: m,\n showClose: true,\n type,\n duration: duration,\n });\n await sleep(duration);\n};\n","<!--\n * @title: button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 16:43:34\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:20:22\n * @version: 1.1.0\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvIcon } from '@@/GvIcon';\n import { GvPopconfirm } from '@@/GvPopconfirm';\n import { getVNodeText } from '@@/utils';\n import { confirm } from '@@/utils/gv.notify';\n import { ElButton, useGlobalConfig, type ButtonType, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, ref, unref, watch, type Component, type PropType } from 'vue';\n import { useRoute } from 'vue-router';\n import type { BizType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('button');\n\n export default defineComponent({\n name: 'GvButton',\n props: {\n visible: {\n type: Boolean,\n default: true,\n },\n text: {\n type: String,\n default: '',\n },\n otext: {\n type: String,\n default: '',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n type: {\n type: String as PropType<ButtonType>,\n default: 'default',\n },\n link: {\n type: Boolean,\n default: false,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: [Boolean, String] as PropType<boolean | string>,\n default: false,\n },\n refForm: {\n type: String,\n required: false,\n default: undefined,\n },\n icon: {\n // type: [String, Object] as PropType<string | DefineComponent>,\n type: String,\n default: '',\n },\n nativeType: {\n type: String,\n default: 'button',\n },\n bizType: {\n type: String as PropType<BizType>,\n default: undefined,\n },\n args: {\n type: String,\n default: undefined,\n },\n confirm: {\n type: [Boolean, String],\n default: false,\n },\n perms: {\n type: String,\n default: undefined,\n },\n cb: {\n type: Function as PropType<(args?: any) => void>,\n default: () => {},\n },\n },\n\n // @emits\n emits: ['click', 'confirm'],\n\n setup(props, { emit, slots }) {\n // @data\n // const attrs = useAttrs();\n const { t } = useBridgeI18n();\n const route = useRoute();\n const appStore = useAppStore();\n const instance = getCurrentInstance();\n const globalSize = useGlobalConfig('size');\n const buttonSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const buttonConfirm = computed(() => appStore.buttonConfirm);\n const loadings = ref(props.loading);\n const locked = ref(false);\n const isShow = ref(props.visible);\n const isIf = ref(true);\n\n // @computed\n const getSlots = computed(() => {\n if (props.text && props.otext) return props.text;\n else return slots.default?.();\n });\n\n // @watch\n watch(\n () => props.loading,\n (v) => (loadings.value = v),\n );\n watch(\n () => props.visible,\n (v) => (isShow.value = v),\n );\n\n // @method\n\n const setIconStyle = () => {\n if (!props.icon) return '';\n if (props.icon.startsWith('el-icon'))\n return (\n <GvIcon\n iconType=\"el\"\n iconName={props.icon.replace('el-icon-', '')}\n />\n );\n else if (props.icon.startsWith('iconfont') || props.icon.startsWith('gv-icon'))\n return (\n <GvIcon\n iconType=\"iconfont\"\n iconName={props.icon.replace('iconfont', '')}\n />\n );\n else return <GvIcon iconName={props.icon} />;\n // 父组件如果传递了图标组件,就使用图标组件,如果传递了ep图标名称,就使用ep图标名称\n // if (typeof props.icon === 'string')\n // return (\n // <GvIcon\n // iconName={props.icon}\n // className={props.icon}\n // />\n // );\n // else {\n // const Icons = props.icon;\n // return <Icons />;\n // }\n };\n\n const checkPerms = () => {\n if (route) {\n const meta = route.meta;\n if (meta) {\n const pm = meta.pm || '';\n if (pm) {\n let filter: string = props.text || '';\n if (props.otext) filter = props.otext;\n if (filter === '') {\n const slot = slots.default?.();\n if (slot && slot[0]) filter = getVNodeText(slot[0]) || '';\n }\n if (filter) {\n const pmArr = pm.split(',');\n const perms = pmArr.filter((x) => x.indexOf(filter) !== -1);\n if (perms.length > 0) {\n const p = perms[0];\n const arr = p.split('|');\n if (arr[0] !== ' ' && arr[1] && arr[1] === 'f') {\n isShow.value = false;\n isIf.value = false;\n }\n }\n }\n }\n }\n }\n };\n\n const handleClick = async (e: MouseEvent, type?: string) => {\n // 判断是否是reset\n if (props.bizType === 'reset') {\n let parent: any = instance?.parent; // form\n while (parent && parent.type?.name !== 'ElForm') parent = parent.parent;\n await parent.exposed.resetFields?.();\n\n while (parent && parent.type?.name !== 'GvForm') parent = parent.parent;\n const rootForm = parent;\n // console.log(rootForm);\n const originFormList = rootForm?.exposed.originFormList.value;\n const formList = rootForm?.props.formList;\n // console.log(parent.props.model.value);\n if (originFormList && Array.isArray(originFormList))\n originFormList.forEach((x: any, index: number) => {\n if (x.type === 'dic') formList[index]['filtercode'] = x.filtercode; // 重置字典的filtercode\n formList[index]['value'] = x.value;\n formList[index]['showLabel'] = x.showLabel;\n formList[index]['hidden'] = x.hidden;\n formList[index]['disabled'] = x.disabled;\n // 重置日期\n if (x.dateType === 'daterange2' || x.dateType === 'datetimerange2') {\n parent.props.model.value[x.field + '-start'] = undefined;\n parent.props.model.value[x.field + '-end'] = undefined;\n parent.props.model.value[x.field] = undefined;\n }\n });\n // 重置按钮自定义回调\n props.cb?.(props.args);\n\n const rootEl = parent?.vnode.el as HTMLElement;\n // 重置日期\n const dateRangeSingles = rootEl?.querySelectorAll('.gv-daterange__single') as NodeListOf<HTMLElement>;\n if (dateRangeSingles)\n for (let i = 0; i < dateRangeSingles.length; i++) {\n const startInput = dateRangeSingles[i].querySelector('.gv-datepicker-range-start .el-input__inner') as HTMLInputElement | null;\n if (startInput) startInput.value = '';\n const endInput = dateRangeSingles[i].querySelector('.gv-datepicker-range-end .el-input__inner') as HTMLInputElement | null;\n if (endInput) endInput.value = '';\n }\n // update: 重置后执行查询方法 2022-04-17\n loadings.value = true;\n await parent?.vnode.el?.querySelector('.gv-search-bar .el-button--primary')?.click();\n loadings.value = false;\n return;\n } else if (props.bizType === 'import' || props.bizType === 'export') {\n emit('click', e, props.args);\n return;\n } else {\n loadings.value = true;\n if (type === 'confirm')\n if (buttonConfirm.value === false)\n try {\n await confirm(t('common.confirmMsg')).then(async () => {\n if (!locked.value) {\n locked.value = true;\n emit('click', e, props.args);\n locked.value = false;\n }\n });\n } catch {\n // ignore user cancel\n }\n else {\n if (!locked.value) {\n locked.value = true;\n emit('click', e, props.args);\n locked.value = false;\n }\n }\n else emit('click', e, props.args);\n // ===== loading关闭 =====\n loadings.value = false;\n }\n };\n\n // @created\n\n // @mounted\n // onMounted(() => {\n // checkPerms();\n // });\n\n // @render\n /** ===== render 渲染 ===== */\n return () => {\n // validate btn perms\n checkPerms();\n\n const classz = props.bizType ? `${prefixCls} ${props.bizType}` : `${prefixCls}`;\n if (isIf.value) {\n let renderBtn: Component;\n if (props.confirm === 'true' || props.confirm === true)\n if (buttonConfirm.value === false)\n renderBtn = (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n onClick={(e: MouseEvent) => handleClick(e, 'confirm')}\n class={classz}>\n {getSlots.value}\n </ElButton>\n );\n else\n renderBtn = (\n <GvPopconfirm\n title={t('common.confirmMsg')}\n onConfirm={(e: MouseEvent) => handleClick(e, 'confirm')}>\n {{\n reference: () => (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n class={classz}>\n {getSlots.value}\n </ElButton>\n ),\n }}\n </GvPopconfirm>\n );\n else\n renderBtn = (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n onClick={(e: MouseEvent) => handleClick(e)}\n class={classz}>\n {getSlots.value}\n </ElButton>\n );\n return renderBtn;\n } else return null;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-button';\n .#{$prefixCls} {\n :deep(i + span) {\n margin-left: 5px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvButton from './src/GvButton.vue';\n\nconst GvButtonPlugin = {\n install(app: App): void {\n app.component(GvButton.name ?? 'GvButton', GvButton);\n },\n};\nexport default GvButtonPlugin;\n\nexport { GvButton };\n","<!--\n * @title: card component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 09:39:53\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:18:37\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCard } from 'element-plus';\n import { defineComponent } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('card');\n\n export default defineComponent({\n name: 'GvCard',\n props: {},\n setup(_props, { slots }) {\n // @method\n /**\n *@todo: 设置header标题\n *@author: bugcao\n *@date: 2026-05-09 09:31:12\n *@version: v0.0.1\n */\n const getCardHeader = () => {\n if (slots.header?.()) return <div class=\"clearfix\">{slots.header?.()}</div>;\n else return null;\n };\n\n // @render\n return () => (\n <ElCard class={prefixCls}>\n {{\n header: () => getCardHeader(),\n default: () => slots.default?.(),\n }}\n </ElCard>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-card';\n .#{$prefixCls} {\n .clearfix::before,\n .clearfix::after {\n display: table;\n content: '';\n }\n .clearfix::after {\n clear: both;\n }\n :deep(.el-card__body) {\n padding: 10px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCard from './src/GvCard.vue';\n\nconst GvCardPlugin = {\n install(app: App): void {\n app.component(GvCard.name ?? 'GvCard', GvCard);\n },\n};\nexport default GvCardPlugin;\n\nexport { GvCard };\n","<!--\n * @title: cascader component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:32:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 14:20:07\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { ElCascader, useGlobalConfig, type CascaderOption, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('cascader');\n\n export default defineComponent({\n name: 'GvCascader',\n props: {\n vref: {\n type: String,\n required: false,\n default: '',\n },\n name: {\n type: String,\n required: false,\n default: undefined,\n },\n id: {\n type: String,\n required: false,\n default: undefined,\n },\n value: {\n type: Array,\n required: false,\n default: () => [],\n },\n options: {\n type: Array as PropType<CascaderOption[]>,\n required: false,\n default: () => [],\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n placeholder: {\n type: String,\n required: false,\n default: 'All', // 请选择\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n clearable: {\n type: Boolean,\n required: false,\n default: true,\n },\n showAllLevels: {\n type: Boolean,\n required: false,\n default: true,\n },\n separator: {\n type: String,\n required: false,\n default: ' / ',\n },\n trigger: {\n type: String,\n required: false,\n default: 'hover',\n },\n filterable: {\n type: Boolean,\n required: false,\n default: true,\n },\n multiple: {\n type: Boolean,\n required: false,\n default: false,\n },\n lazy: {\n type: Boolean,\n required: false,\n default: false,\n },\n lazyLoad: {\n type: Function as PropType<(node: any, resolve: (data: any[]) => void, reject: () => void) => void>,\n required: false,\n default: () => {},\n },\n },\n // @emit\n emits: ['input', 'blur', 'focus', 'keydown', 'change'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const sOps = props.options;\n const inputValue = ref(props.value);\n const globalSize = useGlobalConfig('size');\n\n // @computed\n const cascaderSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceHolder = computed(() => (props.placeholder ? props.placeholder : t('common.pleaseInput')));\n const getDisabled = computed(() => props.disabled);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n\n // 回调参数:(value: string | number)\n // const handleInput = (val) => {\n // emit('input', val);\n // };\n const handleChange = (val) => {\n emit('change', val);\n };\n const handleBlur = (event) => {\n emit('blur', event);\n };\n /**\n * @todo: 搜索\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-10-07 15:48:09\n * @param {*} node\n * @param {*} query\n */\n const handleFilterMethod = (node, query) => {\n // console.log(node);\n const path = node.path;\n const labels = node.pathLabels;\n const data = node.data;\n if (query) {\n if (path.join(',').indexOf(query) >= 0) return true;\n if (labels.join(',').indexOf(query) >= 0) return true;\n if (data.spell)\n if (data.spell.indexOf(query) >= 0) return true;\n else {\n const pathNodes = node.pathNodes;\n return pathNodes.some((x) => {\n if (x.data.spell && x.data.spell.indexOf(query) >= 0) return true;\n });\n }\n }\n };\n\n // @render\n return (\n <ElCascader\n ref={props.vref || 'gv-cascader'}\n id={resolvedInputId.value}\n {...(props.name ? { name: props.name } : {})}\n class={prefixCls}\n v-model={inputValue.value}\n style={{ display: props.value ? '' : 'none' }}\n size={cascaderSize.value}\n placeholder={sPlaceHolder.value}\n options={sOps}\n disabled={getDisabled.value}\n show-all-levels={props.showAllLevels}\n clearable={props.clearable}\n separator={props.separator}\n filterable={props.filterable}\n filter-method={handleFilterMethod}\n debounce={400}\n onBlur={handleBlur}\n onChange={handleChange}\n collapse-tags\n props={{\n expandTrigger: props.trigger as 'click' | 'hover',\n lazy: props.lazy,\n lazyLoad: props.lazyLoad,\n multiple: props.multiple,\n }}></ElCascader>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-cascader';\n .#{$prefixCls} {\n width: 100%;\n\n :deep(.el-input) {\n &.is-focus {\n .el-input__inner {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-input__inner {\n height: 30px !important;\n line-height: 30px;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCascader from './src/GvCascader.vue';\nconst GvCascaderPlugin = {\n install(app: App): void {\n app.component(GvCascader.name ?? 'GvCascader', GvCascader);\n },\n};\nexport default GvCascaderPlugin;\n\nexport { GvCascader };\n","<!--\n * @title: checkbox component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 15:50:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:51:56\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckbox, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TCheckboxValueType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox');\n\n export default defineComponent({\n name: 'GvCheckbox',\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [Boolean, String, Number] as PropType<TCheckboxValueType>,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n indeterminate: {\n type: Boolean,\n default: false,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TCheckboxValueType>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n const checkboxValue = ref(props.value);\n const checkboxSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @method\n /** 更新值 */\n const handleUpdate = (val: TCheckboxValueType) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n /** change事件 */\n const handleChange = (val: TCheckboxValueType) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElCheckbox\n class={prefixCls}\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n label={props.label}\n indeterminate={props.indeterminate}\n disabled={props.disabled}\n border={props.border}\n size={checkboxSize.value}\n style={{ display: props.visible ? '' : 'none' }}\n onChange={handleChange}>\n {slots.default?.()}\n </ElCheckbox>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox';\n .#{$prefixCls} {\n padding: 5px 0 5px 15px;\n //font-size: $appTextSize;\n\n :deep(.el-checkbox__input) {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-focus {\n .el-checkbox__inner {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked {\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n\n &:hover {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n\n :deep(.el-checkbox__input.is-checked + .el-checkbox__label) {\n color: var(--primaryColor, $primaryColor);\n }\n\n :deep(.el-checkbox__label) {\n //font-size: $appTextSize;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckbox from './src/GvCheckbox.vue';\n\nconst GvCheckboxPlugin = {\n install(app: App): void {\n app.component(GvCheckbox.name ?? 'GvCheckbox', GvCheckbox);\n },\n};\nexport default GvCheckboxPlugin;\n\nexport { GvCheckbox };\n","<!--\n * @title: checkbox button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 16:41:13\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:52:18\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckboxButton, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TCheckboxButtonValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox-button');\n\n export default defineComponent({\n name: 'GvCheckboxButton',\n inheritAttrs: false,\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TCheckboxButtonValue>,\n default: undefined,\n },\n name: {\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n indeterminate: {\n type: Boolean,\n required: false,\n default: false,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TCheckboxButtonValue>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n required: false,\n default: false,\n },\n size: {\n type: String as PropType<'large' | 'default' | 'small'>,\n default: 'default',\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n /** 内部值 */\n const checkboxValue = ref(props.value);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @computed\n /** checkbox尺寸 */\n const checkboxButtonSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @method\n /** 更新v-model */\n const handleUpdate = (val: TCheckboxButtonValue) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n\n // @render\n return () => (\n <ElCheckboxButton\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n value={props.value}\n label={props.label}\n indeterminate={props.indeterminate}\n disabled={props.disabled}\n size={checkboxButtonSize.value}\n class={prefixCls}\n border={props.border}\n style={{ display: props.visible ? '' : 'none' }}>\n {slots.default?.()}\n </ElCheckboxButton>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox-button';\n .#{$prefixCls} {\n padding: 5px 0 5px 15px;\n //font-size: $appTextSize;\n\n :deep(.el-checkbox-button__inner) {\n //font-size: $appTextSize;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckboxButton from './src/GvCheckboxButton.vue';\n\nconst GvCheckboxButtonPlugin = {\n install(app: App): void {\n app.component(GvCheckboxButton.name ?? 'GvCheckboxButton', GvCheckboxButton);\n },\n};\nexport default GvCheckboxButtonPlugin;\n\nexport { GvCheckboxButton };\n","<!--\n * @title: checkbox group component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 16:08:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:26:16\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckboxGroup, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TCheckboxGroupType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox-group');\n\n export default defineComponent({\n name: 'GvCheckboxGroup',\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: Array as PropType<TCheckboxGroupType>,\n required: false,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<'large' | 'default' | 'small'>,\n default: 'default',\n },\n min: {\n type: Number,\n default: undefined,\n },\n max: {\n type: Number,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n\n const checkboxValue = ref(props.value);\n\n // @computed\n const checkboxGroupSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @method\n /** 更新 v-model */\n const handleUpdate = (val: TCheckboxGroupType) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n /** change事件 */\n const handleChange = (val: TCheckboxGroupType) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElCheckboxGroup\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n size={checkboxGroupSize.value}\n aria-label={props.label}\n min={props.min}\n max={props.max}\n disabled={props.disabled}\n class={prefixCls}\n onChange={handleChange}>\n {slots.default?.()}\n </ElCheckboxGroup>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox-group';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckboxGroup from './src/GvCheckboxGroup.vue';\n\nconst GvCheckboxGroupPlugin = {\n install(app: App): void {\n app.component(GvCheckboxGroup.name ?? 'GvCheckboxGroup', GvCheckboxGroup);\n },\n};\nexport default GvCheckboxGroupPlugin;\n\nexport { GvCheckboxGroup };\n","<!--\n * @title: col component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 10:00:33\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:24:29\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCol } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('col');\n\n export default defineComponent({\n name: 'GvCol',\n props: {\n span: {\n type: Number,\n default: 24,\n },\n offset: {\n type: Number,\n default: 0,\n },\n xs: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n sm: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n md: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n lg: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n xl: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n tag: {\n type: String,\n default: 'div',\n },\n visible: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @render\n return () => (\n <ElCol\n ref=\"gv-col\"\n style={{ display: props.visible ? '' : 'none' }}\n xs={props.xs}\n sm={props.sm}\n md={props.md}\n lg={props.lg}\n xl={props.xl}\n span={props.span}\n offset={props.offset}\n tag={props.tag}\n class={prefixCls}>\n {slots.default?.()}\n </ElCol>\n );\n },\n });\n</script>\n","import type { App } from 'vue';\nimport GvCol from './src/GvCol.vue';\n\nconst GvColPlugin = {\n install(app: App): void {\n app.component(GvCol.name ?? 'GvCol', GvCol);\n },\n};\nexport default GvColPlugin;\n\nexport { GvCol };\n","/*\n * 日期工具函数(Vue3 + TS 重构版)\n */\n\nexport type LocaleType = 'zh' | 'en' | 'english';\n\nconst localLabels = {\n monthes: {\n english: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n en: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n zh: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n },\n weekdays: {\n english: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n en: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n zh: ['日', '一', '二', '三', '四', '五', '六'],\n },\n meridians: {\n english: ['a.m.', 'p.m.'],\n en: ['AM', 'PM'],\n zh: ['上午', '下午'],\n },\n dayagos: {\n english: ['Today', 'Yesterday', 'Tomorrow', ' days ago', ' days late'],\n en: ['Today', 'Yesterday', 'Tomorrow', ' days ago', ' days late'],\n zh: ['今天', '昨天', '明天', '天前', '天后'],\n },\n};\n\nexport const toMidnight = (date: Date): Date => {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n return d;\n};\n\nexport const daysAgo = (date: Date, days = 0, midnight = false): Date => {\n const result = new Date(date.getTime() - days * 8.64e7);\n return midnight ? toMidnight(result) : result;\n};\n\nexport const monthBegin = (date: Date, offset = 0): Date => {\n const days = date.getDate() - 1 - offset;\n return daysAgo(date, days, true);\n};\n\nexport const quarterBegin = (date: Date): Date => {\n const month = date.getMonth() - (date.getMonth() % 3);\n return toMidnight(new Date(date.getFullYear(), month, 1));\n};\n\nexport const yearBegin = (date: Date): Date => toMidnight(new Date(date.getFullYear(), 0, 1));\n\nconst padZero = (value: string | number, len = 2): string => String(value).padStart(len, '0');\n\nexport const strftime = (date: Date, format?: string, local: LocaleType = 'zh'): string => {\n if (!format) {\n const str = new Date(date.getTime() + 2.88e7).toISOString();\n return str.substring(0, 16).replace('T', ' ');\n }\n\n const locale = local.startsWith('zh') ? 'zh' : 'en';\n\n format = format.replace('%F', '%Y-%m-%d');\n format = format.replace(/%D|%x/g, '%m/%d/%y');\n format = format.replace(/%T|%X/g, '%H:%M:%S');\n format = format.replace('%R', '%H:%M');\n\n return format.replace(/%[A-Za-z%]/g, (f) => {\n let ans: string | number = f;\n\n switch (f) {\n case '%%':\n ans = '%';\n break;\n\n case '%Y':\n ans = date.getFullYear();\n break;\n\n case '%y':\n ans = date.getFullYear() % 100;\n break;\n\n case '%m':\n ans = date.getMonth() + 1;\n break;\n\n case '%d':\n ans = date.getDate();\n break;\n\n case '%H':\n ans = date.getHours();\n break;\n\n case '%M':\n ans = date.getMinutes();\n break;\n\n case '%S':\n ans = date.getSeconds();\n break;\n\n case '%b':\n case '%B': {\n const key = f === '%B' && locale === 'en' ? 'english' : locale;\n ans = localLabels.monthes[key][date.getMonth()];\n break;\n }\n\n case '%a':\n case '%A': {\n const key = f === '%A' && locale === 'en' ? 'english' : locale;\n ans = localLabels.weekdays[key][date.getDay()];\n break;\n }\n\n default:\n break;\n }\n\n if (['%y', '%m', '%d', '%H', '%M', '%S'].includes(f)) return padZero(ans);\n\n return String(ans);\n });\n};\n\nexport const humanize = (date: Date, local: LocaleType = 'zh'): string => {\n const locale = local.startsWith('zh') ? 'zh' : 'en';\n\n const result = strftime(date, '', locale);\n\n const today = toMidnight(new Date()).getTime();\n const current = toMidnight(date).getTime();\n\n const days = (today - current) / 8.64e7;\n\n if (days <= -10 || days >= 10) return result;\n\n const labels = localLabels.dayagos[locale];\n\n let lbl = '';\n\n if (days === 0) lbl = labels[0];\n else if (days === 1) lbl = labels[1];\n else if (days === -1) lbl = labels[2];\n else if (days >= 2) lbl = `${days}${labels[3]}`;\n else lbl = `${Math.abs(days)}${labels[4]}`;\n\n return lbl + result.substring(10, 16);\n};\n","/*\n * @title: 日期组件左侧选择日期快捷键(非区间模式)\n * @author: bugcao@163.com\n * @Date: 2022-05-14 08:33:20\n * @LastEditors: bugcao@163.com\n * @LastEditTime: 2022-05-14 08:33:20\n * @version: 0.0.1\n * @copyright: copyright (c) 2022 bugcao\n */\nimport { daysAgo, monthBegin, quarterBegin, yearBegin } from './datetime';\n\nexport interface ShortcutItem {\n text: string;\n value: Date | [Date, Date] | (() => Date | [Date, Date]);\n}\n\nconst now = () => new Date();\n\n/** 单日期快捷选择 */\nexport const dateShortcuts: ShortcutItem[] = [\n {\n text: '今天',\n value: () => now(),\n },\n {\n text: '昨天',\n value: () => daysAgo(now(), 1),\n },\n {\n text: '最近一周',\n value: () => daysAgo(now(), 7),\n },\n {\n text: '最近30天',\n value: () => daysAgo(now(), 30),\n },\n {\n text: '本月开始',\n value: () => monthBegin(now()),\n },\n {\n text: '本季开始',\n value: () => quarterBegin(now()),\n },\n];\n\n/** 英文单日期快捷选择 */\nexport const dateShortcutsEn: ShortcutItem[] = [\n {\n text: 'Today',\n value: () => now(),\n },\n {\n text: 'Yesterday',\n value: () => daysAgo(now(), 1),\n },\n {\n text: 'Last week',\n value: () => daysAgo(now(), 7),\n },\n {\n text: 'Last 30 days',\n value: () => daysAgo(now(), 30),\n },\n {\n text: 'Month start',\n value: () => monthBegin(now()),\n },\n {\n text: 'Season Start',\n value: () => quarterBegin(now()),\n },\n];\n\n/** 日期时间快捷选择 */\nexport const dateTimeShortcuts = dateShortcuts.slice(0, 3);\n\nexport const dateTimeShortcutsEn = dateShortcutsEn.slice(0, 3);\n\n/** 日期范围快捷选择 */\nexport const dateRangeShortcuts: ShortcutItem[] = [\n {\n text: '最近一周',\n value: () => {\n const start = new Date(daysAgo(now(), 7).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '最近30天',\n value: () => {\n const start = new Date(daysAgo(now(), 30).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '本月至今',\n value: () => {\n const start = new Date(monthBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '本季至今',\n value: () => {\n const start = new Date(quarterBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '今年至今',\n value: () => [yearBegin(now()), now()],\n },\n {\n text: '最近六个月',\n value: () => {\n const end = now();\n const start = new Date();\n\n start.setMonth(start.getMonth() - 6);\n\n return [start, end];\n },\n },\n];\n\n/** 英文日期范围快捷选择 */\nexport const dateRangeShortcutsEn: ShortcutItem[] = [\n {\n text: 'Last week',\n value: () => {\n const start = new Date(daysAgo(now(), 7).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Last 30 days',\n value: () => {\n const start = new Date(daysAgo(now(), 30).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Month date',\n value: () => {\n const start = new Date(monthBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Season date',\n value: () => {\n const start = new Date(quarterBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Year date',\n value: () => [yearBegin(now()), now()],\n },\n {\n text: 'Last 6 mon',\n value: () => {\n const end = now();\n const start = new Date();\n\n start.setMonth(start.getMonth() - 6);\n\n return [start, end];\n },\n },\n];\n\n/** 日历快捷选择 */\nexport const calendarShortcuts = [...dateShortcuts];\n","<!--\n * @title: 自定义日期选择组件\n * @author: bugcao@163.com\n * @date: 2026-06-08 14:52:11\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:52:01\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Bugcao\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElDatePicker, useGlobalConfig, type ComponentSize, type DatePickerType } from 'element-plus';\n import { computed, defineComponent, ref, unref, useAttrs, watch, type PropType } from 'vue';\n import { useI18n } from 'vue-i18n';\n import { dateRangeShortcuts, dateRangeShortcutsEn, dateShortcuts, dateShortcutsEn, dateTimeShortcuts, dateTimeShortcutsEn } from './shortcuts';\n import type { TDatePickerSize, TDatePickerType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('datepicker');\n\n export default defineComponent({\n // @define name\n name: 'GvDatePicker',\n\n // @props\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [Date, String, Array] as PropType<TDatePickerType>,\n default: undefined,\n },\n type: {\n type: String as PropType<DatePickerType>,\n default: 'date',\n },\n format: {\n type: String,\n default: 'YYYY-MM-DD',\n },\n valueFormat: {\n type: String,\n default: 'YYYY-MM-DD',\n },\n defaultTime: {\n type: Array,\n default: undefined,\n },\n size: {\n type: String as PropType<TDatePickerSize>,\n default: 'default',\n },\n rangeSeparator: {\n type: String,\n default: undefined,\n },\n startPlaceholder: {\n type: String,\n default: undefined,\n },\n endPlaceholder: {\n type: String,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n disabledDateFunc: {\n type: Array,\n default: () => [],\n },\n disabledDate: {\n type: Function,\n default: () => {},\n },\n editable: {\n type: Boolean,\n default: true,\n },\n unlink: {\n type: Boolean,\n default: false,\n },\n },\n\n // @emits\n emits: ['update:modelValue', 'change', 'blur', 'focus', 'pick', 'input'],\n\n setup(props, { emit }) {\n // @hooks\n const { locale, t } = useI18n();\n const attrs = useAttrs();\n const globalSize = useGlobalConfig('size');\n\n // @data\n const inputValue = ref(props.modelValue);\n\n // @watch\n watch(\n () => props.modelValue,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @computed\n const datePickerSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n const getShortcuts = computed(() => {\n if (locale.value === 'en')\n if (props.type === 'date') return dateShortcutsEn;\n else if (props.type === 'datetime') return dateTimeShortcutsEn;\n else if (props.type === 'daterange' || props.type === 'datetimerange') return dateRangeShortcutsEn;\n else return '';\n // fixme: 查看源码是'',如果是[],则依旧会出现左边栏\n else if (props.type === 'date') return dateShortcuts;\n else if (props.type === 'datetime') return dateTimeShortcuts;\n else if (props.type === 'daterange' || props.type === 'datetimerange') return dateRangeShortcuts;\n else return ''; // fixme: 查看源码是'',如果是[],则依旧会出现左边栏\n });\n /**\n * @todo: 设置pickerOptions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-08 17:03:41\n */\n const getPickerOptions = computed(() => {\n const pickerOptions: any = {\n shortcuts: getShortcuts.value,\n };\n if (props.disabledDateFunc.includes('beforeToday'))\n // 禁止选择今天之前日期(可以选择今天)\n pickerOptions['disabledDate'] = (date: Date) => date.getTime() < Date.now() - 8.64e7;\n if (props.disabledDateFunc.includes('afterToday'))\n // 禁止选择今天之后的日期(可以选择今天)\n pickerOptions['disabledDate'] = (date: Date) => date.getTime() > Date.now();\n if (props.disabledDate) {\n const db = { disabledDate: props.disabledDate };\n return { ...pickerOptions, ...db };\n } else return { ...pickerOptions };\n });\n\n // @methods\n /**\n * @todo: 回调参数:(value: string | number)\n * @author: bugcao@163.com\n * @Date: 2026-06-08 16:03:12\n * @param {*} value\n */\n const handleInput = (value: TDatePickerType) => {\n emit('update:modelValue', value);\n emit('input', value);\n };\n /**\n * @todo: 变化时触发\n * @author: bugcao@163.com\n * @Date: 2026-06-08 15:05:50\n * @param {*} value\n */\n const handleChange = (value: string) => {\n emit('change', value);\n };\n /**\n * @todo: 失去焦点方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-08 18:39:51\n * @param {*} vm 当前vue组件对象\n */\n const handleBlur = (vm: FocusEvent) => {\n // console.log(vm);\n // const val = vm.$el.querySelector('input').value;\n // if (val) {\n // const format = vm.format;\n // if (!this.userInput)\n // this.userInput = moment(val, format.toUpperCase()).format(format.toUpperCase());\n // if (this.userInput !== 'Invalid date')\n // vm.userInput = this.userInput;\n // // picker.vue中触发value的方法\n // // vm.handleChange();\n emit('blur', vm);\n // this.userInput = '';\n // }\n };\n /**\n * @todo: 获得焦点方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-08 18:39:51\n * @param {*} vm 当前vue组件对象\n */\n const handleFocus = (vm: FocusEvent) => {\n emit('focus', vm);\n };\n /**\n * @todo: 选中日期回调:只有在range模式下有效\n * @author: bugcao@163.com\n * @Date: 2026-06-08 16:16:51\n * @param {*} maxDate\n * @param {*} minDate\n */\n const handlePick = (val: [Date, null | Date]) => {\n emit('pick', { maxDate: val[0], minDate: val[1] });\n };\n\n // @render\n return () => (\n <div class={prefixCls}>\n <ElDatePicker\n ref={props.vref || 'gv-datepicker'}\n id={resolvedInputId.value}\n name={props.name}\n modelValue={inputValue.value}\n onUpdate:modelValue={handleInput}\n type={props.type}\n range-separator={props.rangeSeparator || t('common.until')}\n placeholder={props.placeholder || t('common.selectDate')}\n startPlaceholder={props.startPlaceholder || t('common.startDate')}\n endPlaceholder={props.endPlaceholder || t('common.endDate')}\n default-time={props.defaultTime}\n disabled-date={getPickerOptions.value?.disabledDate}\n shortcuts={getPickerOptions.value.shortcuts}\n format={props.format}\n clearable={props.clearable}\n valueFormat={props.valueFormat}\n {...({\n onCalendarChange: handlePick,\n } as any)}\n size={datePickerSize.value}\n disabled={props.disabled}\n editable={props.editable}\n onBlur={handleBlur}\n onFocus={handleFocus}\n prefix-icon=\"\"\n onChange={handleChange}\n unlink-panels={props.unlink}\n {...attrs}\n // { ...this.$listeners }\n ></ElDatePicker>\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-datepicker';\n .#{$prefixCls} {\n width: 100% !important;\n vertical-align: middle;\n :deep(.el-date-editor) {\n width: 100%;\n }\n :deep(.el-input.is-disabled) {\n .el-input__inner {\n color: $textColor;\n }\n }\n &.el-range-editor.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n :deep(.el-input__inner) {\n height: 30px;\n line-height: 30px;\n //font-size: $appTextSize;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-range__close-icon {\n width: 20px;\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-date-editor--daterange {\n :deep(.el-range-separator) {\n padding-right: 2px;\n padding-left: 0;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDatePicker from './src/GvDatePicker.vue';\n\nconst GvDatePickerPlugin = {\n install(app: App): void {\n app.component(GvDatePicker.name ?? 'GvDatePicker', GvDatePicker);\n },\n};\nexport default GvDatePickerPlugin;\n\nexport { GvDatePicker };\n","/*\n * @title: dialog drag\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 10:50:25\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 10:52:45\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport type { Directive } from 'vue';\n\n/** 使用 WeakSet 跟踪已绑定拖拽事件的 header 元素,避免内存泄漏 */\nconst boundElements = new WeakSet<HTMLElement>();\n\n/**\n * 初始化拖拽功能\n */\nconst initDrag = (el: HTMLElement, collapseMenu: boolean = false) => {\n /** Vue3 dialog - 支持 appendToBody 的情况 */\n let dragDom = el.querySelector('.el-dialog') as HTMLElement;\n if (!dragDom) dragDom = document.querySelector('.el-dialog') as HTMLElement;\n\n if (!dragDom) {\n console.warn('gv-drag-dialog: 未找到 dialog 元素');\n return false;\n }\n\n /** Vue3 dialog header - 支持自定义 header 和默认 header */\n let dialogHeaderEl: HTMLElement | null = null;\n dialogHeaderEl = dragDom.querySelector('.el-dialog__header') as HTMLElement;\n if (!dialogHeaderEl) dialogHeaderEl = dragDom.querySelector('.gv-dialog__title') as HTMLElement;\n\n if (!dialogHeaderEl) {\n console.warn('gv-drag-dialog: 未找到 dialog header 元素');\n return false;\n }\n\n /** 避免重复绑定 */\n if (boundElements.has(dialogHeaderEl)) return true;\n boundElements.add(dialogHeaderEl);\n\n /** 鼠标移动样式 */\n dialogHeaderEl.style.cursor = 'move';\n /** 初始化顶部 */\n dragDom.style.top = '0px';\n /** 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null) */\n const getStyle = (function () {\n if ((window.document as any).currentStyle) return (dom: HTMLElement, attr: string) => (dom as any).currentStyle[attr];\n else return (dom: HTMLElement, attr: string) => getComputedStyle(dom, null)[attr as any];\n })();\n\n dialogHeaderEl.onmousedown = (e: MouseEvent) => {\n /** 鼠标按下,计算当前元素距离可视区的距离 */\n const disX = e.clientX - dialogHeaderEl!.offsetLeft;\n const disY = e.clientY - dialogHeaderEl!.offsetTop;\n\n const dragDomWidth = dragDom.offsetWidth;\n const dragDomHeight = dragDom.offsetHeight;\n\n const screenWidth = document.body.clientWidth;\n const screenHeight = document.body.clientHeight;\n\n /** 左侧边界 */\n const minDragDomLeft = dragDom.offsetLeft;\n /** 右侧边界 */\n const menuWidth = collapseMenu ? 54 : 200;\n const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth - menuWidth;\n\n /** 上边界 */\n const minDragDomTop = dragDom.offsetTop;\n /** 下边界 */\n // 45: toolbar height;34: tags view height\n const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomHeight - 45 - 34;\n\n /** 获取到的值带px 正则匹配替换 */\n let styL: string | number = getStyle(dragDom, 'left');\n let styT: string | number = getStyle(dragDom, 'top');\n\n /** 百分比转像素 */\n if (typeof styL === 'string' && styL.includes('%')) {\n styL = document.body.clientWidth * (+styL.replace(/%/g, '') / 100);\n styT = document.body.clientHeight * (+String(styT).replace(/%/g, '') / 100);\n } else {\n styL = +String(styL).replace(/\\px/g, '');\n styT = +String(styT).replace(/\\px/g, '');\n }\n\n /** 鼠标移动 */\n const onMouseMove = (ev: MouseEvent) => {\n /** 通过事件委托,计算移动的距离 */\n let left = ev.clientX - disX;\n let top = ev.clientY - disY;\n\n /** 边界处理 */\n if (-left > minDragDomLeft) left = -minDragDomLeft;\n else if (left > maxDragDomLeft) left = maxDragDomLeft;\n\n if (-top > minDragDomTop) top = -minDragDomTop;\n else if (top > maxDragDomTop) top = maxDragDomTop;\n\n /** 移动当前元素 */\n dragDom.style.left = `${left + Number(styL)}px`;\n dragDom.style.top = `${top + Number(styT)}px`;\n };\n\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n };\n\n return true;\n};\n\nconst dragDialog: Directive = {\n /**\n * @title 挂载时调用\n * @param el 指令绑定的元素\n * @param binding 指令绑定的参数\n * @description Vue3 中需要使用 nextTick 等待 DOM 渲染完成,并通过 querySelector 查找 ElDialog 内部元素\n */\n // mounted(el: HTMLElement, binding: DirectiveBinding, vnode: VNode) {\n // // 使用 setTimeout 确保 ElDialog 已经渲染完成\n // setTimeout(() => {\n // // 尝试初始化,如果 dialog 还没打开,会在 opened 事件中再次尝试\n // initDrag(el);\n // }, 200);\n // },\n};\nexport default dragDialog;\nexport { initDrag };\n","<!--\n * @title: dialog component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-09 09:57:32\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:57:53\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText, sleep } from '@@/utils';\n import { ElDialog } from 'element-plus';\n import { defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, ref, watch, type VNode } from 'vue';\n import { initDrag } from './drag';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('dialog');\n\n export default defineComponent({\n name: 'GvDialog',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: false,\n },\n title: {\n type: String,\n required: false,\n default: '标题',\n },\n hasFooter: {\n type: Boolean,\n required: false,\n default: true,\n },\n width: {\n type: String,\n required: false,\n default: '75%',\n },\n height: {\n type: String,\n required: false,\n default: undefined,\n },\n nest: {\n type: Boolean,\n required: false,\n default: false,\n },\n appendToBody: {\n type: Boolean,\n required: false,\n default: false,\n },\n fullscreen: {\n type: Boolean,\n required: false,\n default: false,\n },\n maxHeight: {\n type: String,\n required: false,\n default: undefined,\n },\n closeOnClickModal: {\n type: Boolean,\n required: false,\n default: false,\n },\n closeOnPressEscape: {\n type: Boolean,\n required: false,\n default: true,\n },\n dialogClass: {\n type: String,\n required: false,\n default: undefined,\n },\n },\n emits: ['open', 'opened', 'close', 'closed', 'cancel', 'update:visible'],\n\n setup(props, { slots, emit }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n const buttonQuick = appStore.buttonQuick;\n const collapseMenus = appStore.collapseMenus;\n const instance = getCurrentInstance();\n\n let myDialogClass = props.dialogClass || prefixCls;\n let dialogVisible = props.visible;\n const maskVisible = ref(false);\n const vref = 'gv-dialog';\n const dialogMaxHeight = ref(props.height);\n let sAppendToBody = props.appendToBody;\n const modalAppendToBody = ref(false);\n let sNest = props.nest;\n let modalMask = props.nest;\n\n // @watch\n watch(\n () => props.visible,\n (newValue) => {\n // fixme: watch中跟踪visible,解决如将ht-dialog在一个vue组件中,如不设置,则第二次无法显示\n dialogVisible = newValue;\n if (dialogVisible)\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n },\n );\n\n // @method\n const handleVisible = () => {\n dialogVisible = true;\n };\n const handleOpen = () => {\n emit('open');\n };\n const handleOpened = () => {\n emit('opened');\n nextTick(() => {\n initDrag(instance?.vnode?.el as HTMLElement, collapseMenus);\n });\n };\n const handleClose = () => {\n dialogVisible = false;\n maskVisible.value = false;\n // 延迟异步触发\n // sleep(500).then(() => {\n // this.$emit('update:visible', false);\n // });\n emit('close');\n };\n const handleClosed = () => {\n emit('update:visible', false);\n };\n\n const handleCancel = (event) => {\n dialogVisible = false;\n maskVisible.value = false;\n emit('cancel', event);\n };\n /**\n * @todo: render footer button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 11:19:11\n */\n const renderFooterBtn = () => {\n const footer = slots.footer?.();\n footer?.forEach((x) => {\n const tag = typeof x.type === 'object' && x.type !== null ? (x.type as any).name || '' : '';\n const text = getVNodeText(x.children?.[0]) || '';\n // add: 增加text属性,判断权限使用 2023-04-18\n if (!x.props) x.props = {};\n const propsData = x.props;\n propsData.text = text;\n if (tag)\n if (text.indexOf(t('dialogBar.save')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick) if (text === t('dialogBar.save')) propsData.text = t('dialogBar.save2');\n propsData.otext = t('dialogBar.save');\n } else if (text.indexOf(t('dialogBar.add')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick)\n if (text === t('dialogBar.add')) {\n propsData.text = t('dialogBar.add2');\n propsData.otext = t('dialogBar.add');\n }\n } else if (text.indexOf(t('dialogBar.confirm')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.confirm')) {\n propsData.text = t('dialogBar.confirm2');\n propsData.otext = t('dialogBar.confirm');\n }\n } else if (text.indexOf(t('dialogBar.affirm')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.affirm')) {\n propsData.text = t('dialogBar.affirm2');\n propsData.otext = t('dialogBar.affirm');\n }\n } else if (text.indexOf(t('dialogBar.approve')) !== -1) {\n propsData.bizType = 'approve';\n propsData.icon = 'gv-icon-shenpi1';\n } else if (text.indexOf(t('dialogBar.download')) !== -1) {\n // if (text === t('dialogBar.download')) x.children[0].text = t('dialogBar.download2');\n propsData.bizType = 'download';\n propsData.icon = 'gv-icon-xiazai';\n } else if (text.indexOf(t('dialogBar.delete')) !== -1) {\n propsData.bizType = 'delete';\n propsData.icon = 'el-icon-delete';\n } else if (text.indexOf(t('dialogBar.reject')) !== -1) {\n propsData.bizType = 'reject';\n propsData.icon = 'gv-icon-bohui2';\n } else if (text.indexOf(t('dialogBar.export')) !== -1) {\n propsData.bizType = 'export';\n propsData.icon = 'gv-icon-daochu1';\n } else if (text.indexOf(t('dialogBar.generate')) !== -1) {\n propsData.bizType = 'generate';\n propsData.icon = 'gv-icon-zujian';\n } else if (text.indexOf(t('dialogBar.trace')) !== -1) {\n propsData.bizType = 'trace';\n propsData.icon = 'gv-icon-jiankongguanli';\n } else if (text.indexOf(t('dialogBar.receive')) !== -1) {\n propsData.bizType = 'receive';\n propsData.icon = 'gv-icon-piliangbianji1';\n } else if (text.indexOf(t('dialogBar.transfer')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-tiaobo';\n } else if (text.indexOf(t('dialogBar.circleCheck')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-huanjiance';\n } else if (text.indexOf(t('dialogBar.completed')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-xuanze';\n } else if (text.indexOf(t('dialogBar.finished')) !== -1 || text.indexOf(t('dialogBar.beCompleted')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-wangongqueren';\n } else if (text.indexOf(t('dialogBar.submit')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-tijiao';\n if (buttonQuick)\n if (text === t('dialogBar.submit')) {\n propsData.text = t('dialogBar.submit2');\n propsData.otext = t('dialogBar.submit');\n }\n }\n });\n return footer;\n };\n\n /**\n * @todo: footer render\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 10:34:41\n */\n const getFooter = () => {\n if (props.hasFooter)\n if (slots.footer?.())\n return (\n <div>\n {renderFooterBtn()}\n <GvButton\n onClick={handleCancel}\n icon=\"iconfont gv-icon-fanhui2\">\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n // <el-button type='primary' onClick={this.handleConfirm}>确 定(S)</el-button>\n else\n return (\n <div>\n <GvButton\n onClick={handleCancel}\n icon=\"iconfont gv-icon-fanhui2\">\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n };\n\n /**\n * @todo: mask\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 10:38:59\n */\n const setMask = () => {\n let mask: VNode | null = null;\n if (maskVisible.value)\n mask = (\n <div\n class=\"v-modal gv-dialog-modal z-[9]\"\n tabindex=\"0\"></div>\n );\n return mask;\n };\n\n const getMaxHeight = () => {\n if (!props.height) dialogMaxHeight.value = document.documentElement.clientHeight - 230 + 'px';\n else if (props.height.indexOf('%') === -1) dialogMaxHeight.value = parseFloat(props.height) - 180 + 'px';\n else dialogMaxHeight.value = props.height; // 百分比方式\n };\n\n // @created\n // fixme: 解决嵌套弹窗问题 2022-08-08\n const pEl = instance?.parent?.parent?.vnode.el;\n if (pEl)\n try {\n const p = pEl.closest('.gv-drawer,.gv-dialog');\n if (p) sNest = true;\n } catch {\n // error\n }\n if (sNest) {\n myDialogClass = props.dialogClass ? 'gv-dialog is-nested ' + props.dialogClass : 'gv-dialog is-nested';\n sAppendToBody = true;\n modalAppendToBody.value = true;\n modalMask = true;\n } else modalMask = false;\n\n onBeforeUnmount(() => {\n window.removeEventListener('resize', getMaxHeight);\n });\n\n // mounted\n onMounted(() => {\n // fixme: v-show属性使用单独的变量,在挂载时再显示,如在data中直接定义为true,会造成抖动 2022-04-11\n if (dialogVisible) maskVisible.value = true;\n\n nextTick(() => {\n window.addEventListener('resize', getMaxHeight);\n // 计算高度\n getMaxHeight();\n });\n });\n\n // @render\n return () => (\n <div class=\"gv-dialog__popup\">\n <ElDialog\n ref={vref}\n // route={this.route}\n modelValue={dialogVisible}\n onUpdate:modelValue={handleVisible}\n appendToBody={sAppendToBody}\n modal-append-to-body={modalAppendToBody.value}\n close-on-click-modal={props.closeOnClickModal}\n close-on-press-escape={props.closeOnPressEscape}\n showClose={true}\n destroy-on-close={true}\n fullscreen={props.fullscreen}\n modal={modalMask}\n // before-close={this.handleBeforeClose}\n onClose={handleClose}\n onClosed={handleClosed}\n onOpen={handleOpen}\n onOpened={handleOpened}\n class={myDialogClass}\n width={props.width}\n style={{ height: `${props.height}` }}>\n {{\n header: () => (\n <div class=\"gv-dialog__title\">\n <span>\n <GvIcon\n iconType=\"iconfont\"\n iconName=\"gv-icon-chuangkou01\"\n />\n {props.title}\n </span>\n </div>\n ),\n default: () => (\n <div\n class=\"gv-dialog__body__inner\"\n style={{ maxHeight: `${dialogMaxHeight.value} !important` }}>\n {slots.default?.()}\n </div>\n ),\n footer: () => <div class=\"dialog-footer\">{getFooter()}</div>,\n }}\n </ElDialog>\n {setMask()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-dialog__popup {\n :deep(.el-modal-dialog) {\n position: absolute !important;\n &.is-nested {\n top: 100px;\n left: 14%;\n }\n .el-overlay-dialog {\n position: absolute !important;\n overflow: hidden;\n .el-dialog {\n max-height: 93.5% !important;\n margin-top: 25px !important;\n padding: 0px;\n\n .el-dialog__header {\n box-sizing: border-box;\n height: 30px;\n padding: 0 15px;\n line-height: 30px;\n background-color: #e1e5ec !important;\n border-bottom: 1px solid $borderColor;\n\n .gv-dialog__title {\n //font-size: $appTextSize;\n line-height: inherit;\n\n & i {\n padding-right: 10px;\n //font-size: $textSize;\n font-weight: bolder;\n }\n }\n\n .el-dialog__headerbtn {\n width: 16px;\n height: 25px;\n top: 2px;\n right: 12px;\n font-size: 20px;\n font-weight: bolder;\n line-height: normal;\n\n &:hover .el-dialog__close {\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-dialog__close {\n font-size: 16px;\n font-weight: bolder;\n }\n }\n }\n\n .el-dialog__body {\n padding: 5px 5px 5px 15px;\n overflow: hidden;\n\n .gv-dialog__body__inner {\n padding-right: 15px;\n overflow: hidden auto;\n }\n\n .fullscreen-btn {\n position: absolute;\n top: 16px;\n right: 42px;\n padding: 5px;\n line-height: 1;\n cursor: pointer;\n\n &:hover {\n color: $primaryColor;\n }\n }\n\n .container {\n padding: 0 15px;\n }\n }\n\n .el-dialog__footer {\n .gv-popconfirm {\n padding: 1px 0 1px 8px;\n }\n\n .el-button i + span {\n margin-left: 5px;\n }\n\n padding: 5px 15px;\n border-top: 1px solid $borderColor;\n }\n }\n }\n }\n }\n\n .gv-tabs {\n .gv-dialog {\n top: -10px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDialog from './src/GvDialog.vue';\nconst GvDialogPlugin = {\n install(app: App): void {\n app.component(GvDialog.name ?? 'GvDialog', GvDialog);\n },\n};\nexport default GvDialogPlugin;\n\nexport { GvDialog };\n","<!--\n * @title: divider component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 17:24:57\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 18:03:45\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElDivider } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n import type { DividerDirection } from './types';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('divider');\n\n export default defineComponent({\n name: 'GvDivider',\n emits: ['setDividerShow'],\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n label: {\n type: String,\n required: true,\n default: '栏目',\n },\n position: {\n type: String,\n required: false,\n default: 'left',\n },\n direction: {\n type: String as PropType<DividerDirection>,\n required: false,\n default: 'horizontal',\n },\n target: {\n type: String,\n required: false,\n default: undefined,\n },\n },\n\n setup(props, { emit }) {\n /**\n * @todo: click divider — toggle form visibility via parent isShow\n */\n const clickDivider = (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n emit('setDividerShow', !props.visible);\n };\n\n return () => (\n <div\n class={prefixCls}\n onClick={(event) => clickDivider(event)}>\n <ElDivider\n content-position={props.position}\n direction={props.direction}>\n <span class=\"title\">{props.label}</span>\n </ElDivider>\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-divider';\n .#{$prefixCls} {\n width: 100%;\n height: 20px;\n margin: 5px 0 8px 0;\n overflow: hidden;\n user-select: none;\n\n // 禁止选中文本\n &:hover {\n cursor: pointer;\n }\n :deep(.el-divider--horizontal) {\n margin: 8px 0;\n .el-divider__text {\n padding: 0 $modulePadding;\n &.is-left {\n left: -$moduleMargin;\n }\n .title {\n display: inline-block;\n height: 20px;\n //font-size: $textSizeSecondary;\n font-weight: $fontWeight;\n line-height: 20px;\n color: $textColor;\n\n &::before {\n display: inline-block;\n width: 5px;\n height: 100%;\n margin-right: 8px;\n vertical-align: middle;\n content: '';\n background-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDivider from './src/GvDivider.vue';\nconst GvDividerPlugin = {\n install(app: App): void {\n app.component(GvDivider.name ?? 'GvDivider', GvDivider);\n },\n};\nexport default GvDividerPlugin;\n\nexport { GvDivider };\n","<!--\n * @title: drawer component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-09 09:58:21\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:04\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText, sleep } from '@@/utils';\n import { ElDrawer } from 'element-plus';\n import { defineComponent, nextTick, onMounted, ref, watch, type PropType, type VNode } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('drawer');\n\n export default defineComponent({\n name: 'GvDrawer',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: false,\n },\n title: {\n type: String,\n required: false,\n default: '标题',\n },\n direction: {\n type: String as PropType<'rtl' | 'ltr' | 'ttb' | 'btt'>,\n required: false,\n default: 'rtl',\n },\n size: {\n type: [String, Number],\n required: false,\n default: '95%', // 95%\n },\n paddingHeight: {\n type: [Number],\n required: false,\n default: 100, // 100\n },\n },\n emits: ['cancel', 'update:visible'],\n\n setup(props, { slots, emit }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n\n let drawerVisible = props.visible;\n const maskVisible = ref(false);\n const vref = 'gv-drawer';\n const drawerMaxHeight = ref(0);\n const show = ref(false);\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const sPaddingHeight = appStore.drawerPaddingHeight ? appStore.drawerPaddingHeight : props.paddingHeight;\n\n // @watch\n watch(\n () => props.visible,\n (newVal) => {\n // fixme: watch中跟踪visible,解决如将ht-drawer在一个vue组件中,如不设置,则第二次无法显示\n drawerVisible = newVal;\n if (drawerVisible)\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n },\n );\n\n // @method\n\n const handleOpen = () => {\n // this.maskVisible = true;\n // this.$emit('opened');\n };\n\n const handleClosed = () => {\n emit('update:visible', false);\n };\n\n const handleCancel = (event: Event) => {\n drawerVisible = false;\n maskVisible.value = false;\n emit('cancel', event);\n };\n\n const handleVisible = () => {\n drawerVisible = true;\n };\n\n const handleClose = () => {\n drawerVisible = false;\n maskVisible.value = false;\n // 延迟异步触发\n // sleep(500).then(() => {\n // this.$emit('update:visible', false);\n // });\n // this.$emit('close', event);\n };\n\n /**\n * @todo: set footer button shortcut\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 15:25:50\n */\n const renderFooterBtn = () => {\n const footer = slots.footer?.();\n footer?.forEach((x) => {\n const tag = typeof x.type === 'object' && x.type !== null ? (x.type as any).name || '' : '';\n const text = getVNodeText(x) || '';\n if (!x.props) x.props = {};\n const propsData = x.props;\n propsData.text = text;\n if (tag)\n if (text.indexOf(t('dialogBar.save')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick)\n if (text === t('dialogBar.save')) {\n propsData.text = t('dialogBar.save2');\n propsData.otext = t('dialogBar.save');\n }\n } else if (text.indexOf(t('dialogBar.confirm')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.confirm')) {\n propsData['otext'] = t('dialogBar.confirm');\n propsData.text = t('dialogBar.confirm2');\n }\n } else if (text.indexOf(t('dialogBar.affirm')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.affirm')) {\n propsData.text = t('dialogBar.affirm2');\n propsData.otext = t('dialogBar.confirm');\n }\n } else if (text.indexOf(t('dialogBar.approve')) !== -1) {\n propsData.bizType = 'approve';\n if (buttonIcon) propsData.icon = 'gv-icon-shenpi1';\n } else if (text.indexOf(t('dialogBar.reject')) !== -1) {\n propsData.bizType = 'reject';\n if (buttonIcon) propsData.icon = 'gv-icon-bohui2';\n } else if (text.indexOf(t('dialogBar.pay')) !== -1) {\n propsData.bizType = 'pay';\n if (buttonIcon) propsData.icon = 'gv-icon-yingshoukuan';\n } else if (text.indexOf(t('dialogBar.receive')) !== -1) {\n propsData.bizType = 'receive';\n if (buttonIcon) propsData.icon = 'gv-icon-piliangbianji1';\n } else if (text.indexOf(t('dialogBar.export')) !== -1) {\n propsData.bizType = 'export';\n if (buttonIcon) propsData.icon = 'gv-icon-daochu1';\n } else if (text.indexOf(t('dialogBar.generate')) !== -1) {\n propsData.bizType = 'generate';\n if (buttonIcon) propsData.icon = 'gv-icon-zujian';\n } else if (text.indexOf(t('dialogBar.trace')) !== -1) {\n propsData.bizType = 'trace';\n if (buttonIcon) propsData.icon = 'gv-icon-jiankongguanli';\n } else if (text.indexOf(t('dialogBar.publish')) !== -1) {\n propsData.bizType = 'publish';\n if (buttonIcon) propsData.icon = 'gv-icon-fabu';\n } else if (text.indexOf(t('dialogBar.transfer')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-tiaobo';\n } else if (text.indexOf(t('dialogBar.download')) !== -1) {\n propsData.bizType = 'download';\n // if (text === t('dialogBar.download')) children[0].text = '下 载';\n if (buttonIcon) propsData.icon = 'gv-icon-xiazai';\n } else if (text.indexOf(t('dialogBar.delete')) !== -1 || text.indexOf(t('dialogBar.obsolete')) !== -1) {\n propsData.bizType = 'delete';\n if (buttonIcon) propsData.icon = 'el-icon-delete';\n if (buttonQuick) {\n if (text === t('dialogBar.obsolete')) {\n propsData.text = t('dialogBar.obsolete2');\n propsData.otext = t('dialogBar.obsolete');\n }\n if (text === t('dialogBar.delete')) {\n propsData.text = t('dialogBar.delete2');\n propsData.otext = t('dialogBar.delete');\n }\n }\n } else if (text.indexOf(t('dialogBar.submit')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-tijiao';\n if (buttonQuick)\n if (text === t('dialogBar.submit')) {\n propsData.text = t('dialogBar.submit2');\n propsData.otext = t('dialogBar.submit');\n }\n propsData['otext'] = t('dialogBar.submit');\n } else if (text.indexOf(t('dialogBar.circleCheck')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-huanjiance';\n } else if (text.indexOf(t('dialogBar.completed')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-xuanze';\n } else if (text.indexOf(t('dialogBar.settlement')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-eduguanli';\n } else if (text.indexOf(t('dialogBar.finished')) !== -1 || text.indexOf(t('dialogBar.beCompleted')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-wangongqueren';\n }\n });\n\n return footer;\n };\n\n /**\n * @todo: get footer button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 15:38:54\n */\n const getFooter = () => {\n let returnIcon: string | undefined = 'iconfont gv-icon-fanhui2';\n if (!buttonIcon) returnIcon = undefined;\n if (slots.footer?.())\n return (\n <div class=\"gv-drawer__footer__inner\">\n {renderFooterBtn()}\n <GvButton\n onClick={handleCancel}\n icon={returnIcon}>\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n // <el-button type='primary' onClick={this.handleConfirm}>确 定(S)</el-button>\n else\n return (\n <div class=\"gv-drawer__footer__inner\">\n <GvButton\n onClick={handleCancel}\n icon={returnIcon}>\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n };\n const getMaxHeight = () => {\n drawerMaxHeight.value = document.documentElement.clientHeight - 215;\n };\n\n const setMask = () => {\n let mask: VNode | null = null;\n if (maskVisible.value)\n mask = (\n <div\n tabindex=\"0\"\n class=\"v-modal gv-dialog-drawer z-[9]\"></div>\n );\n return mask;\n };\n // @created\n\n // @mounted\n onMounted(() => {\n // 实现esc按键绑定\n // this.bindListerOnEsc();\n // fixme: v-show属性使用单独的变量,在挂载时再显示,如在data中直接定义为true,会造成抖动 2022-04-11\n if (drawerVisible) {\n show.value = true;\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n }\n getMaxHeight();\n nextTick(() => {});\n });\n // @render\n return () => (\n <div class=\"gv-drawer__popup\">\n <ElDrawer\n class={prefixCls}\n ref={vref}\n modelValue={drawerVisible}\n onUpdate:modelValue={handleVisible}\n direction={props.direction}\n appendToBody={false}\n modal-append-to-body={false}\n close-on-press-escape={true}\n showClose={true}\n close-on-click-modal={false}\n modal={false}\n onClose={handleClose}\n onClosed={handleClosed}\n onOpen={handleOpen}\n size={props.size}\n style={{ height: `calc(100vh - ${sPaddingHeight}px)` }}>\n {{\n header: () => (\n <div class=\"gv-drawer__title\">\n <span>\n <GvIcon\n style={{ display: buttonIcon ? '' : 'none' }}\n iconType=\"iconfont\"\n iconName=\"gv-icon-chuangkou01\"></GvIcon>\n {props.title}\n </span>\n </div>\n ),\n default: () => (\n <div>\n <div\n class=\"gv-drawer__body__inner\"\n style={{ maxHeight: `${drawerMaxHeight.value}px !important` }}>\n {slots.default?.()}\n </div>\n </div>\n ),\n footer: () => <div class=\"gv-drawer__footer\">{getFooter()}</div>,\n }}\n </ElDrawer>\n {setMask()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-drawer__popup {\n :deep(.el-modal-drawer) {\n position: absolute !important;\n top: 1px !important;\n height: calc(100vh - 100px) !important;\n .el-drawer {\n // width: 95% !important;\n height: 98% !important;\n margin-top: 1px !important;\n\n .el-drawer__header {\n box-sizing: border-box;\n height: 30px;\n padding: 0 15px;\n margin-bottom: 1px;\n line-height: 30px;\n background-color: #e1e5ec !important;\n border-bottom: 1px solid $borderColor;\n\n .gv-drawer__title {\n //font-size: $appTextSize;\n line-height: inherit;\n\n & i {\n padding-right: 10px;\n //font-size: $textSize;\n font-weight: bolder;\n }\n }\n\n .el-drawer__close-btn {\n top: 10px;\n right: 12px;\n line-height: normal;\n\n i {\n font-size: 16px;\n font-weight: bolder;\n }\n\n &:hover i {\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-drawer__close {\n font-weight: bolder;\n }\n }\n }\n\n .el-drawer__body {\n padding: 5px 15px;\n overflow: hidden;\n\n .gv-drawer__body__inner {\n overflow: hidden auto;\n }\n\n .fullscreen-btn {\n position: absolute;\n top: 16px;\n right: 42px;\n padding: 5px;\n line-height: 1;\n cursor: pointer;\n\n &:hover {\n color: $primaryColor;\n }\n }\n\n .container {\n padding: 0 15px;\n }\n }\n\n .gv-drawer__footer {\n .gv-drawer__footer__inner {\n float: right;\n padding: 5px;\n\n .el-button i + span {\n margin-left: 5px;\n }\n }\n\n .gv-popconfirm {\n padding: 1px 0 1px 8px;\n }\n\n .el-button--default {\n margin-left: 8px;\n }\n\n width: 100%;\n border-top: 1px solid $borderColor;\n }\n }\n }\n }\n .gv-tabs {\n .gv-drawer {\n top: 10px;\n height: 93% !important;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDrawer from './src/GvDrawer.vue';\nconst GvDrawerPlugin = {\n install(app: App): void {\n app.component(GvDrawer.name ?? 'GvDrawer', GvDrawer);\n },\n};\nexport default GvDrawerPlugin;\n\nexport { GvDrawer };\n","import { type VueTypeValidableDef, type VueTypesInterface, createTypes, toValidableType } from 'vue-types';\nimport type { CSSProperties } from 'vue';\n\ntype PropTypes = VueTypesInterface & {\n readonly style: VueTypeValidableDef<CSSProperties>;\n};\nconst newPropTypes = createTypes({\n func: undefined,\n bool: undefined,\n string: undefined,\n number: undefined,\n object: undefined,\n integer: undefined,\n}) as PropTypes;\n\nclass propTypes extends newPropTypes {\n static get style(): VueTypeValidableDef<CSSProperties> {\n return toValidableType('style', {\n type: [String, Object],\n });\n }\n}\n\nexport { propTypes };\n","/*\n * @title: pinyin-pro 汉字转拼音组件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-10-10 11:21:59\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-10-10 11:22:02\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { pinyin } from 'pinyin-pro';\n/**\n * usePinyin 组合式函数\n * 提供常见的中文转拼音功能\n */\nexport function usePinyin() {\n /**\n * 中文转拼音(默认无音调、空格分隔)\n * @param text 中文字符串\n * @param withTone 是否带音调(默认 false)\n */\n const toPinyin = (text: string, withTone = false): string => {\n if (!text) return '';\n return pinyin(text, {\n toneType: withTone ? 'symbol' : 'none',\n type: 'string',\n multiple: false,\n });\n };\n\n /**\n * 获取拼音首字母\n * @param text 中文字符串\n */\n const getFirstLetter = (text: string): string => {\n if (!text) return '';\n return pinyin(text, {\n pattern: 'first',\n toneType: 'none',\n type: 'string',\n }).replace(/\\s+/g, '');\n };\n\n /**\n * 获取拼音数组(按字分隔)\n * @param text 中文字符串\n */\n const getPinyinArray = (text: string): string[] => {\n if (!text) return [];\n return pinyin(text, {\n toneType: 'none',\n type: 'array',\n });\n };\n\n return {\n toPinyin,\n getFirstLetter,\n getPinyinArray,\n };\n}\n","<!--\n * @title: expand menu list\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-04 12:37:50\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:26\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { usePermsStore } from '@/store/modules/perms';\n import { usePinyin } from '@@/hooks/web/usePinyin';\n import { isExternal, pathResolve, sleep } from '@@/utils';\n import { Search, Star, StarFilled } from '@element-plus/icons-vue';\n import { ElAutocomplete, ElIcon, ElTabPane, ElTabs } from 'element-plus';\n import { computed, onMounted, ref } from 'vue';\n import { useI18n } from 'vue-i18n';\n import type { RouteType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('expand-menu-list');\n\n defineOptions({\n name: 'GvMenuList', // 定义组件名称\n });\n const { t } = useI18n();\n const permStore = usePermsStore();\n const pinYin = usePinyin();\n const routes = computed(() => permStore.getServerRouters);\n\n const emit = defineEmits(['close']);\n\n const menuList = ref<RouteType[]>();\n const menuPath = ref('');\n\n const fMenusList = ref<AppRouteRecordRaw[]>([]);\n\n // ------ watch hook------\n // watchEffect();\n // // [routes, menusList],\n // // [\n // // (n, o) => {\n // // this.menusList = this.generateRoutes(this.routes.value);\n // // },\n // // (list) => {\n // // // 转换拼音\n // // if (this.supportPinyinSearch) this.addPinyinField(list);\n // // },\n // // ],\n\n // ------ methods hook ------\n /**\n * @todo: generate routes\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-15 10:46:56\n * @param {*} sidebarRoutes\n * @param {*} basePath\n * @param {*} prefixTitle\n * @param {*} prefixCode\n */\n\n const generateRouter = (serverRoutes: AppRouteRecordRaw[], basePath = '/', prefixTitle: string[] = [], prefixCode: string[] = []): RouteType[] => {\n let res: RouteType[] = [];\n for (const router of serverRoutes) {\n if (router.redirect === '/404') continue;\n if (router.meta?.hidden) continue;\n const data: RouteType = {\n path: pathResolve(basePath, router.path),\n title: [...(prefixTitle as string[])],\n pinyinTitle: pinYin.getFirstLetter([...(prefixTitle as string[])].join('')),\n code: [...prefixCode],\n };\n if (router.meta && router.meta.title) {\n const i18ntitle = router.meta.title;\n const code = router.meta.code || '';\n data.title = [...data.title, i18ntitle];\n data.pinyinTitle = pinYin.getFirstLetter(data.title.join(''));\n data.code = [...data.code, String(code)];\n if (router.redirect !== 'noredirect') res.push(data);\n else if (basePath === '/') fMenusList.value.push(router);\n }\n if (router.children) {\n const tempRoutes = generateRouter(router.children, data.path, data.title);\n if (tempRoutes.length >= 1) res = [...res, ...tempRoutes];\n }\n }\n return res;\n };\n\n const handleCloseDrawer = () => {\n emit('close');\n };\n\n /**\n * @todo: click menu item handle\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-03-09 10:56:00\n * @param {*} item\n */\n const handleSelect = (item: RouteType) => {\n // push({ path: item.path });\n // handleCloseDrawer();\n sleep(200).then(() => {\n menuPath.value = '';\n });\n };\n\n const handleSearch = (query: string, cb: any) => {\n let res: RouteType[] = [];\n if (query !== '')\n if (Array.isArray(menuList.value))\n res = menuList.value.filter((item) => {\n if (item.title.join('').indexOf(query) !== -1) return item;\n else if (item.pinyinTitle.indexOf(query.toLowerCase()) !== -1) return item;\n else if (item.path.indexOf(query) !== -1) return item;\n });\n else res = menuList.value ?? [];\n else res = menuList.value ?? [];\n cb(res);\n };\n\n /**\n * @todo: star click handle\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-10-11 10:20:33\n * @param {*} star\n * @param {*} path\n * @param {*} title\n * @param {*} menuItem\n */\n const starClickHandle = (star, path, title, menuItem) => {};\n\n // ------ mounted hook ------\n onMounted(() => {\n menuList.value = generateRouter(routes.value);\n // console.log('routes', permStore.getServerRouters);\n // console.log('menuList', menuList.value);\n });\n</script>\n<template>\n <div :class=\"prefixCls\">\n <!-- search -->\n <div class=\"search\">\n <div class=\"top\">\n <ElAutocomplete\n v-model=\"menuPath\"\n value-key=\"path\"\n :fetch-suggestions=\"handleSearch\"\n :placeholder=\"t('sideBar.menuSearch')\"\n @select=\"handleSelect\">\n <template #prefix>\n <ElIcon>\n <Search />\n </ElIcon>\n </template>\n <template v-slot=\"{ item }\">\n <span class=\"name\">{{ item.title.join(' > ') }}</span>\n </template>\n </ElAutocomplete>\n </div>\n </div>\n <!-- main -->\n <div class=\"main\">\n <ElTabs tab-position=\"right\">\n <ElTabPane\n v-for=\"item in fMenusList\"\n :key=\"item.name\"\n :label=\"item.meta?.title\"\n lazy>\n <div class=\"column-wrap\">\n <div\n v-for=\"sub in item.children\"\n :key=\"sub.name\"\n class=\"box\">\n <template v-if=\"!sub.children || sub.children.length === 0\">\n <ul class=\"leaf\">\n <li>\n <ElIcon @click.stop=\"starClickHandle(sub.meta?.star, sub.path, sub.meta?.title, sub)\">\n <component :is=\"sub.meta?.star ? StarFilled : Star\" />\n </ElIcon>\n <router-link\n v-if=\"!isExternal(sub.path)\"\n :to=\"`${item.path}/${sub.path}`\"\n @click=\"handleCloseDrawer\">\n {{ sub.meta?.title }}\n </router-link>\n <a\n v-else\n :href=\"sub.path\"\n target=\"_blank\"\n rel=\"noopener\">\n {{ sub.meta?.title }}</a\n >\n </li>\n </ul>\n </template>\n <template v-else>\n <h4>{{ sub.meta?.title }}</h4>\n <ul>\n <li\n v-for=\"x in sub.children\"\n :key=\"x.name\">\n <ElIcon @click.stop=\"starClickHandle(x.meta?.star, x.name, x.meta?.title, x)\">\n <component :is=\"x.meta?.star ? StarFilled : Star\" />\n </ElIcon>\n <router-link\n v-if=\"!isExternal(sub.path)\"\n :to=\"`${item.path}/${sub.path}/${x.path}`\"\n @click=\"handleCloseDrawer\">\n {{ x.meta?.title }}\n </router-link>\n <a\n v-else\n :href=\"sub.path\"\n target=\"_blank\"\n rel=\"noopener\">\n {{ x.meta?.title }}</a\n >\n </li>\n </ul>\n </template>\n </div>\n </div>\n </ElTabPane>\n </ElTabs>\n </div>\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-expand-menu-list';\n .#{$prefixCls} {\n position: absolute;\n width: 650px;\n height: 100%;\n left: 0px;\n background: #272b2c;\n &::after {\n top: 0;\n right: 0;\n width: 150px;\n height: 100%;\n content: '';\n background: #272b2c;\n }\n :deep(.search) {\n height: 100px;\n width: 500px;\n background: #313538;\n .top {\n padding: 30px 0 0 100px;\n i {\n color: var(--left-menu-text-color);\n }\n .el-autocomplete {\n width: 300px;\n border-bottom: 1px solid #626466;\n border-radius: 0;\n .el-input {\n .el-input__wrapper {\n background: var(--left-menu-expand-bg-color);\n box-shadow: none;\n padding-left: 30px;\n .el-input__inner {\n //font-size: $appTextSize;\n color: #fff;\n border: none;\n line-height: 40px;\n height: 40px;\n }\n }\n }\n }\n }\n }\n :deep(.main) {\n position: relative;\n height: calc(100% - 100px);\n .el-tabs {\n height: 100%;\n overflow-y: auto;\n &::-webkit-scrollbar {\n display: none;\n }\n .el-tabs__header {\n position: absolute;\n top: 0;\n right: 0;\n .el-tabs__nav-wrap {\n padding: 0;\n .el-tabs__nav-scroll {\n overflow-y: auto;\n .el-tabs__nav {\n padding-bottom: $modulePadding;\n }\n }\n .el-tabs__item {\n height: 30px;\n padding: 0 0 0 15px;\n //font-size: $textSize;\n line-height: 30px;\n color: $menuText;\n &.is-active {\n font-weight: 500;\n color: #fff;\n }\n }\n &.is-right {\n width: 151px;\n }\n &::after {\n display: none;\n }\n }\n }\n .el-tabs__content {\n background: #313538;\n margin-right: 150px;\n .el-tab-pane {\n padding-right: 20px;\n }\n .column-wrap {\n column-count: 2;\n column-gap: 0;\n .box {\n padding-bottom: 10px;\n padding-left: 30px;\n -webkit-column-break-inside: avoid;\n page-break-inside: avoid;\n break-inside: avoid;\n h4 {\n margin-bottom: 12px;\n height: 32px;\n //font-size: $textSize;\n font-weight: 500;\n line-height: 32px;\n color: $menuText;\n border-bottom: 1px solid #626466;\n }\n ul {\n padding-left: 0;\n margin-top: 8px;\n list-style: none;\n &.leaf {\n margin-top: 18px;\n }\n li {\n line-height: 26px;\n i {\n //font-size: 14px;\n cursor: pointer;\n top: 2px;\n }\n .el-icon {\n color: $menuText;\n }\n a {\n padding-left: 3px;\n //font-size: $textSize;\n color: $menuText;\n transition: all 0.3s ease;\n &:hover {\n color: var(--menuActiveText, $menuActiveText);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n</style>\n","<!--\n * @title: Expand Menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-02 09:39:04\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:12\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { propTypes } from '@@/utils/gv.propTypes';\n import { ElDrawer } from 'element-plus';\n import { computed, ref } from 'vue';\n\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import GvMenuList from './GvMenuList.vue';\n\n defineOptions({\n name: 'GvExpandMenu', // 定义组件名称\n });\n\n const props = defineProps({\n collapse: propTypes.bool.def(true),\n });\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('expand-menu');\n\n const { t } = useBridgeI18n();\n\n // console.log('t', t('sideBar.menuNav'));\n const visible = ref(false);\n const sideWidth = computed(() => (props.collapse ? '54px' : '200px'));\n const expandHandle = () => {\n visible.value = !visible.value;\n };\n</script>\n<template>\n <div :class=\"prefixCls\">\n <div\n class=\"expand-menu-title\"\n :class=\"{ selected: visible ? true : false }\"\n @click.stop=\"expandHandle\">\n <i :class=\"['iconfont', 'gv-icon-wangzhandaohang']\"></i>\n <span\n v-if=\"!collapse\"\n class=\"text\"\n >{{ t('sideBar.menuNav') }}</span\n >\n </div>\n <ElDrawer\n v-model=\"visible\"\n :style=\"{ left: sideWidth, paddingLeft: sideWidth }\"\n class=\"sidebar-expand-drawer\"\n :with-header=\"false\"\n :append-to-body=\"true\"\n direction=\"ltr\"\n resizable\n :modal-class=\"!collapse ? 'sidebar-expand-menu-collapse' : 'sidebar-expand-menu-unCollapse'\"\n size=\"650\">\n <GvMenuList @close=\"visible = false\" />\n </ElDrawer>\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-expand-menu';\n .#{$prefixCls} {\n height: 40px;\n background-color: $menuBg;\n\n .expand-menu-title {\n width: 100%;\n padding-left: 14px;\n line-height: 48px;\n color: $menuText;\n cursor: pointer;\n\n &.selected,\n &:hover {\n color: var(--left-menu-text-active-color);\n background-color: $menuHover;\n }\n\n i {\n width: 24px;\n font-size: 20px;\n font-weight: 500;\n color: var(--left-menu-text-color);\n text-align: center;\n vertical-align: middle;\n }\n\n .text {\n display: inline-block;\n line-height: 48px;\n margin-left: 10px;\n //font-size: $textSize;\n color: var(--left-menu-text-color);\n vertical-align: middle;\n &:hover {\n color: var(--left-menu-text-active-color);\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvExpandMenu from './src/GvExpandMenu.vue';\nconst GvExpandMenuPlugin = {\n install(app: App): void {\n app.component(GvExpandMenu.name ?? 'GvExpandMenu', GvExpandMenu);\n },\n};\nexport default GvExpandMenuPlugin;\n\nexport { GvExpandMenu };\n","<!--\n * @title: input component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-29 09:22:45\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:39\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { GvIcon } from '@@/GvIcon';\n import { ElInput, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { BizType, InputType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('input');\n\n export default defineComponent({\n name: 'GvInput',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n value: {\n type: [String, Number, undefined] as PropType<string | number | undefined>,\n default: '',\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n prefixIcon: {\n type: String,\n default: '',\n },\n suffixIcon: {\n type: String,\n default: '',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n maxlength: {\n type: Number,\n default: 30,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n type: {\n type: String as PropType<InputType>,\n default: 'text',\n },\n rows: {\n type: Number,\n default: 2,\n },\n autosize: {\n type: [Boolean, Object] as PropType<boolean | Record<string, any>>,\n default: false,\n },\n bizType: {\n type: String as PropType<BizType>,\n default: 'tableedit',\n },\n },\n\n emits: ['update:modelValue', 'input', 'blur', 'focus', 'clear', 'keydown'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n const inputValue = ref(props.value);\n\n const showWordLimit = ref(false);\n\n // @computed\n const inputSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceholder = computed(() => props.placeholder || t('common.pleaseInput'));\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @watch\n watch(\n () => props.value,\n (newValue) => {\n inputValue.value = newValue;\n },\n );\n\n // @methods\n\n const renderPrefixIcon = (): JSX.Element | null => {\n if (!props.prefixIcon) return null;\n return <GvIcon iconName={props.prefixIcon} />;\n };\n\n const renderSuffixIcon = (): JSX.Element | null => {\n if (!props.suffixIcon) return null;\n return <GvIcon iconName={props.suffixIcon} />;\n };\n\n const getDisabled = computed(() => {\n if (typeof props.disabled === 'boolean') return props.disabled;\n if (typeof props.disabled === 'string') return props.disabled !== '';\n return false;\n });\n\n const handleInput = (val: string | number) => {\n inputValue.value = val;\n emit('update:modelValue', val);\n emit('input', val);\n };\n\n const handleBlur = (event: FocusEvent) => {\n showWordLimit.value = false;\n if (props.bizType === 'tableedit') emit('blur', event, inputValue.value, props.columnProp);\n else emit('blur', event, inputValue.value, props.vref);\n };\n\n const handleFocus = (event: FocusEvent) => {\n (event.target as HTMLInputElement).select();\n if (props.bizType === 'tableedit') emit('focus', event, inputValue.value, props.columnProp);\n else emit('focus', event, inputValue.value, props.vref);\n };\n\n const handleClear = (event: any) => {\n emit('clear', event);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n showWordLimit.value = true;\n emit('keydown', event);\n };\n\n // @render\n return () => {\n if (!props.visible) return null;\n return (\n <ElInput\n ref={props.vref}\n id={resolvedInputId.value}\n name={props.name}\n type={props.type}\n modelValue={inputValue.value}\n modelModifiers={{ number: true }}\n readonly={props.readonly}\n rows={props.rows}\n autosize={props.autosize}\n size={inputSize.value}\n showWordLimit={showWordLimit.value}\n maxlength={props.maxlength}\n placeholder={sPlaceholder.value}\n disabled={getDisabled.value}\n clearable={props.clearable}\n onInput={handleInput}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onClear={handleClear}\n onKeydown={handleKeyDown}\n class={prefixCls}\n style={{ display: props.visible ? '' : 'none' }}>\n {{\n prefix: () => renderPrefixIcon(),\n suffix: () => renderSuffixIcon(),\n }}\n </ElInput>\n );\n };\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-input';\n .#{$prefixCls} {\n display: flex;\n margin: 0;\n align-items: center;\n\n &.is-disabled {\n :deep(.el-input__inner) {\n color: $textColor;\n }\n }\n\n :deep(.el-input__inner) {\n &:focus {\n // border-color: var(--primaryColorHover, $primaryColorHover);\n }\n height: 30px;\n // padding-left: 10px;\n line-height: 30px;\n //font-size: $textSizeSecondary;\n }\n\n &.el-input--small {\n :deep(.el-input__inner) {\n height: 26px;\n line-height: 26px;\n }\n }\n\n :deep(.el-input__suffix .el-input__suffix-inner) {\n .el-input__count {\n font-size: 10px;\n padding-left: 5px;\n .el-input__count-inner {\n padding: 0;\n }\n }\n .el-input__icon {\n padding: 0;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvInput from './src/GvInput.vue';\n\nconst GvInputPlugin = {\n install(app: App): void {\n app.component(GvInput.name ?? 'GvInput', GvInput);\n },\n};\nexport default GvInputPlugin;\n\nexport { GvInput };\n","<!--\n * @title: input number component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:32:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 11:02:44\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useI18n } from '@/hook/web/useI18n';\n import { useStyle } from '@/hook/web/useStyle';\n import { ElInputNumber, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('input-number');\n\n export default defineComponent({\n name: 'GvInputNumber',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n value: {\n type: Number,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n min: {\n type: Number,\n default: undefined,\n },\n max: {\n type: Number,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: undefined,\n },\n step: {\n type: Number,\n default: 1,\n },\n stepStrictly: {\n type: Boolean,\n default: false,\n },\n precision: {\n type: Number,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n bizType: {\n type: String,\n default: undefined,\n },\n position: {\n type: String,\n default: undefined,\n },\n },\n // @emit\n emits: ['update:modelValue', 'input', 'blur', 'focus', 'keydown', 'change'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useI18n();\n const inputValue = ref(props.value);\n const globalSize = useGlobalConfig('size');\n // @computed\n const inputSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceHolder = computed(() => (props.placeholder ? props.placeholder : t('common.pleaseInput')));\n const getDisabled = computed(() => props.disabled);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n const handleInput = (val) => {\n emit('update:modelValue', val, props.vref);\n emit('input', val, props.vref);\n };\n const handleBlur = ($event: FocusEvent) => {\n if (props.bizType === 'tableedit') emit('blur', $event, inputValue.value, props.columnProp);\n else emit('blur', $event, inputValue.value, props.vref);\n };\n\n const handleFocus = ($event: FocusEvent) => {\n if ($event.target) ($event.target as HTMLInputElement).select();\n\n if (props.bizType === 'tableedit') emit('focus', $event, inputValue.value, props.columnProp);\n else emit('focus', $event, inputValue.value, props.vref);\n };\n // const handleKeyDown = ($event: KeyboardEvent) => {\n // emit('keydown', $event);\n // };\n const handleChange = (currentValue: number, oldValue: number) => {\n emit('change', currentValue, oldValue);\n };\n\n // @render\n // 注意方法的传参必须使用箭头函数方式,避免每次 render 的时候都会自动执行一次方法\n return (\n // nativeOnkeydown={(e) => this.inputKeydown(e)}\n <ElInputNumber\n class={prefixCls}\n ref={props.vref || 'gv-input-number'}\n id={resolvedInputId.value}\n name={props.name}\n v-model={inputValue.value}\n style={{ display: props.visible ? '' : 'none' }}\n size={inputSize.value}\n placeholder={sPlaceHolder.value}\n disabled={getDisabled.value}\n controls-position={props.position}\n step={props.step}\n step-strictly={props.stepStrictly}\n precision={props.precision}\n min={props.min}\n max={props.max}\n // onKeydown={handleKeyDown}\n onInput={handleInput}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onChange={handleChange}\n // { ...this.$attrs }\n // { ...this.$listeners }\n ></ElInputNumber>\n );\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-input-number';\n .#{$prefixCls} {\n :deep(.el-input__inner) {\n height: 30px;\n line-height: 30px;\n\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n :deep(.el-input-number__decrease),\n :deep(.el-input-number__increase) {\n height: 28px;\n line-height: 28px;\n }\n\n :deep(.el-input-number__decrease),\n :deep(.el-input-number__increase) {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.el-input-number__increase):hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled),\n :deep(.el-input-number__decrease):hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n &.is-controls-right {\n // line-height: 34px; // 需要定义line-height,否则高度串行\n :deep(.el-input-number__decrease) {\n bottom: 1px;\n\n &:hover {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n :deep(.el-input-number__increase) {\n &:hover {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n\n top: 1px;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvInputNumber from './src/GvInputNumber.vue';\nconst GvInputNumberPlugin = {\n install(app: App): void {\n app.component(GvInputNumber.name ?? 'GvInputNumber', GvInputNumber);\n },\n};\nexport default GvInputNumberPlugin;\n\nexport { GvInputNumber };\n","<!--\n * @title: select component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-29 09:36:14\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:53:12\n * @version: 1.0.7\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useNotify } from '@/hook/web/useNotify';\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { ElOption, ElSelect, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import { useI18n } from 'vue-i18n';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('select');\n export default defineComponent({\n name: 'GvSelect',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [String, Array, Object] as PropType<string | unknown[] | Record<string, unknown>>,\n default: undefined,\n },\n value: {\n type: [String, Array, Object] as PropType<string | unknown[] | Record<string, unknown>>,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n showLabel: {\n type: [String, Array],\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined, // 请选择\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n filterable: {\n type: Boolean,\n default: true,\n },\n dicType: {\n type: String,\n required: true,\n },\n filtercode: {\n // 过滤字典码\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n dicRemote: {\n type: Function,\n default: () => {},\n },\n cb: {\n type: Function,\n default: () => {},\n },\n clear: {\n type: Function,\n default: () => {},\n },\n isreload: {\n type: Boolean,\n default: true,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n bizType: {\n type: String,\n default: undefined,\n },\n editRow: {\n type: Object,\n default: () => {},\n },\n collapseTags: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n },\n // define emit\n emits: ['update:modelValue', 'focus', 'clear', 'change'],\n setup(props, { emit }) {\n const userStore = useUserStore();\n const appStore = useAppStore();\n const { alert } = useNotify();\n const { t, locale } = useI18n();\n\n // @data\n const lang = locale.value;\n let dicIcon = 'iconfont gv-icon-shujuzidian3';\n const remote = ref(false);\n const loading = ref(false);\n const loadingText = ref('loading...');\n const sPlaceholder = computed(() => props.placeholder || t('common.all'));\n const externalValue = computed(() => (props.modelValue !== undefined ? props.modelValue : props.value));\n const inputValue = ref(externalValue.value);\n const inputShowLabel = ref(props.showLabel);\n const inputFilterable = ref(props.filterable);\n // let inputFilterable = props.filterable,\n type SelectModel = string | unknown[] | Record<string, unknown> | undefined;\n const selectValue = ref<SelectModel>(undefined);\n const options = ref<DicItem[]>([]);\n const originOptions = ref<DicItem[]>([]);\n const className = ref(`${prefixCls}`);\n const globalSize = useGlobalConfig('size');\n\n // 表选字典 t# 需在 setup 阶段识别,不能等 mounted\n const dicSrc = props.dicType?.toLowerCase() ?? '';\n if (dicSrc.startsWith('e#')) dicIcon = 'iconfont gv-icon-meiju';\n else if (dicSrc.startsWith('t#')) {\n dicIcon = 'iconfont gv-icon-24gl-table';\n remote.value = true;\n className.value = 'gv-select__table';\n }\n if (props.bizType === 'tableedit') className.value += ' tableedit';\n\n const valueCache = new Map<string, { value: string; label: string; row?: Record<string, unknown> }>();\n\n // @computed\n const selectSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @method\n\n const isEmptyLabel = (label: unknown) => label == null || label === '';\n\n const getDictItemLabel = (item: DicItem): string => {\n switch (locale.value) {\n case 'en':\n return item.e ?? item.t ?? '';\n case 'l1':\n return item.l1 ?? item.t ?? '';\n case 'l2':\n return item.l2 ?? item.t ?? '';\n default:\n return item.t ?? '';\n }\n };\n\n const formatOptionLabel = (label: string) => {\n if (!label) return '';\n return remote.value && label.includes('[') ? label.split('[')[0] : label;\n };\n\n const findLabelInOptions = (code: string, opts: DicItem[]) => {\n const item = opts.find((x) => String(x.c) === String(code));\n if (!item) return '';\n return formatOptionLabel(getDictItemLabel(item));\n };\n\n const getOptionValue = (code: string, label: string, row?: Record<string, unknown>) => {\n const key = String(code);\n const text = String(label || key);\n const cached = valueCache.get(key);\n if (cached && cached.label === text) {\n if (row) cached.row = row;\n return cached;\n }\n const obj = row ? { value: key, label: text, row } : { value: key, label: text };\n valueCache.set(key, obj);\n return obj;\n };\n\n const getSelectCode = (v: unknown) => {\n if (v == null || v === '') return '';\n if (typeof v === 'object' && !Array.isArray(v)) {\n const o = v as Record<string, unknown>;\n const code = o.value ?? o.c ?? o.code;\n return code == null || code === '' ? '' : String(code).trim();\n }\n return String(v).trim();\n };\n\n const getSelectLabel = (v: unknown) => {\n if (v == null || v === '') return '';\n if (typeof v === 'object' && !Array.isArray(v)) {\n const o = v as Record<string, unknown>;\n const label = o.label ?? o.v;\n return label == null || label === '' ? '' : String(label).trim();\n }\n return String(v).trim();\n };\n\n const isEmptySelectValue = (raw: unknown) => {\n if (raw == null || raw === '') return true;\n if (Array.isArray(raw)) {\n if (raw.length === 0) return true;\n return raw.every((item) => {\n if (item == null || item === '') return true;\n return !getSelectCode(item) && isEmptyLabel(getSelectLabel(item));\n });\n }\n if (typeof raw === 'object') return !getSelectCode(raw) && isEmptyLabel(getSelectLabel(raw));\n return false;\n };\n\n const syncEmptyToParent = () => {\n if (externalValue.value === '') return;\n emit('update:modelValue', '');\n };\n\n const elSelectModel = computed<SelectModel>(() => (isEmptySelectValue(selectValue.value) ? undefined : selectValue.value));\n\n /**\n * @todo: 远程搜索、聚焦、清空后保留当前选中项\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-04 10:52:44\n * @param {*} _opts\n */\n const mergeOptionsWithSelected = (_opts: DicItem[]) => {\n let merged = _opts ?? [];\n const append = (code: string, label: string) => {\n if (!code || merged.some((x) => x.c + '' === code)) return;\n merged = [{ c: code, t: label || code, s: '' } as DicItem, ...merged];\n };\n const sv = selectValue.value;\n if (Array.isArray(sv)) sv.forEach((item) => append(getSelectCode(item), getSelectLabel(item) || getSelectCode(item)));\n else if (sv && !isEmptySelectValue(sv)) append(getSelectCode(sv), getSelectLabel(sv) || getSelectCode(sv));\n return merged;\n };\n\n const pushDefaultOption = (op: DicItem) => {\n options.value.push(op);\n if (remote.value) originOptions.value.push({ ...op });\n };\n\n /**\n * @todo: load dict list\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:31:44\n */\n const getSelectOptions = async () => {\n if (!props.dicType) return null;\n else {\n let ret: DicItem[] = [];\n const src = props.dicType.toLowerCase();\n if (src.startsWith('e#')) {\n // const pinyin = await require('js-pinyin');\n // 生成枚举类型字典\n const arr = src.split('#')[1].split(':');\n arr.forEach((x) => {\n const xx: DicItem = {\n c: '',\n t: '',\n s: '',\n };\n const arr2 = x.split('=');\n xx['c'] = arr2[0];\n xx['t'] = arr2[1];\n xx['s'] = '';\n ret.push(xx);\n });\n return ret;\n } else {\n const dictCache = userStore.dictCache?.[src];\n if (props.filtercode === undefined && dictCache) ret = dictCache;\n else if (props.dicType === 'xzqh') {\n // 生成字典列表\n const dict = appStore.getDictDivision;\n if (dict) {\n if (props.filtercode === undefined) {\n const cache = {};\n cache['key'] = 'xzqh';\n cache['dict'] = dict;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n }\n ret = dict;\n }\n } else {\n const dict = appStore.getDict[src];\n\n if (dict) {\n // fixme: 解决字典缓存不能缓存多个问题 2022-04-13\n if (props.filtercode === undefined) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dict;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n }\n\n ret = dict;\n }\n }\n\n // 设置是否可搜索\n // this.setFilterable(ret);\n // 增加字典码过滤\n let opts = ret;\n if (props.filtercode) {\n const reg = new RegExp(props.filtercode, 'i');\n opts = ret.filter((x) => reg.test(x.c));\n }\n return opts;\n }\n }\n };\n /**\n * @todo: 设置字典项目超过5个可搜索-- 弃用\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-10 09:42:19\n * @param {*} dict\n */\n // setFilterable(dict) {\n // if (dict && dict.length > 5)\n // inputFilterable.value = true;\n // },\n // 回调参数:(value: string | number)\n // 字典自定义过滤方法\n const filterMethod = (value) => {\n if (value)\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts.filter((item) => {\n // console.log(item);\n if (\n item.c.indexOf(value) !== -1 || // value检索\n item.t?.indexOf(value) !== -1 || // label检索\n item.s.indexOf(value.toLowerCase()) !== -1 // 简拼检索\n )\n return true;\n });\n });\n else\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts;\n });\n };\n /**\n * @todo: handle clear event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:53:27\n */\n const handleClear = () => {\n if (remote.value === false)\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts;\n });\n else options.value = mergeOptionsWithSelected(originOptions.value);\n\n props.clear(selectValue.value, props.vref, props.dicType);\n emit('clear');\n };\n /**\n * @todo: remote dict search method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:20:03\n * @param {*} query\n */\n const initialRemoteLoaded = ref(false);\n let pendingRemoteQuery: string | null = null;\n let pendingRemotePromise: Promise<void> | null = null;\n let remoteRequestSeq = 0;\n\n const filterOriginOptions = (query: string) =>\n originOptions.value.filter((x) => {\n if (x.t) {\n const f = x.t.split(']');\n if (f[0].indexOf(query) !== -1) return true;\n }\n if (x.c && x.c.indexOf(query) !== -1) return true;\n return false;\n });\n\n const remoteDictSearch = async (query = ''): Promise<void> => {\n if (pendingRemotePromise && pendingRemoteQuery === query) return pendingRemotePromise;\n\n const requestSeq = ++remoteRequestSeq;\n pendingRemoteQuery = query;\n\n pendingRemotePromise = (async () => {\n loading.value = true;\n try {\n const sDicType = props.dicType.substring(2);\n const { datas } = await props.dicRemote(sDicType, query, props.editRow);\n if (requestSeq !== remoteRequestSeq) return;\n\n const ops: DicItem[] = [];\n try {\n JSON.parse(datas).forEach((x: any) => {\n ops.push({ c: x.c, t: x.t, s: '' } as DicItem);\n });\n } catch (e) {\n console.log(e);\n }\n\n options.value = mergeOptionsWithSelected(ops);\n originOptions.value = [...options.value];\n initialRemoteLoaded.value = true;\n } finally {\n if (requestSeq === remoteRequestSeq) {\n loading.value = false;\n loadingText.value = options.value.length === 0 ? t('common.noData') : t('common.loading');\n }\n if (pendingRemoteQuery === query) {\n pendingRemoteQuery = null;\n pendingRemotePromise = null;\n }\n }\n })();\n\n return pendingRemotePromise;\n };\n /**\n * @todo: table dict remote load method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:11:51\n */\n const remoteMethod = async (query = ''): Promise<void> => {\n const q = String(query ?? '');\n\n if (q && originOptions.value.length > 0 && props.isreload === false) {\n const filtered = filterOriginOptions(q);\n if (filtered.length > 0) {\n options.value = mergeOptionsWithSelected(filtered);\n loading.value = false;\n return;\n }\n }\n\n const needFetch = q !== '' || props.isreload || !initialRemoteLoaded.value || originOptions.value.length === 0;\n if (!needFetch) {\n options.value = mergeOptionsWithSelected(originOptions.value);\n loading.value = false;\n return;\n }\n\n await remoteDictSearch(q);\n };\n\n const ensureDefaultOption = (code: string, text: string) => {\n if (!code) return;\n const existed = options.value.find((x) => String(x.c) === String(code));\n if (existed) {\n if (text && existed.t !== text) existed.t = text;\n return;\n }\n pushDefaultOption({ c: code, t: text || code, s: '' } as DicItem);\n };\n\n const resolveDisplayLabel = async (code: string, hint?: string): Promise<string> => {\n if (hint && hint !== code) return hint;\n const localOpts = (await getSelectOptions()) ?? [];\n let label = findLabelInOptions(code, localOpts);\n if (label) return label;\n\n label = findLabelInOptions(code, options.value);\n if (label) return label;\n\n if (remote.value && code) {\n // await remoteDictSearch(code);\n // label = findLabelInOptions(code, options.value);\n // if (label) return label;\n // await remoteDictSearch('');\n // label = findLabelInOptions(code, options.value);\n }\n\n return label || code;\n };\n\n const applySelectValue = async (raw: unknown) => {\n if (isEmptySelectValue(raw)) {\n inputValue.value = undefined as typeof inputValue.value;\n selectValue.value = undefined;\n syncEmptyToParent();\n return;\n }\n inputValue.value = raw as typeof inputValue.value;\n\n if (Array.isArray(raw)) {\n const resolved: ReturnType<typeof getOptionValue>[] = [];\n for (let index = 0; index < raw.length; index++) {\n const item = raw[index];\n if (item === '') continue;\n const code = getSelectCode(item);\n let hint = getSelectLabel(item);\n if (isEmptyLabel(hint) || hint === code) {\n const showLbl = Array.isArray(props.showLabel) ? props.showLabel[index] : undefined;\n if (showLbl && showLbl !== code) hint = String(showLbl);\n }\n const text = await resolveDisplayLabel(code, isEmptyLabel(hint) || hint === code ? undefined : hint);\n const row = typeof item === 'object' && item !== null ? ((item as Record<string, unknown>).row as Record<string, unknown>) : undefined;\n resolved.push(getOptionValue(code, text, row));\n ensureDefaultOption(code, text);\n }\n selectValue.value = resolved;\n return;\n }\n\n const code = getSelectCode(raw);\n let hint = '';\n if (typeof raw === 'object' && raw !== null) {\n const o = raw as Record<string, unknown>;\n hint = String(o.label ?? o.v ?? '');\n } else if (typeof props.showLabel === 'string') hint = props.showLabel;\n const text = await resolveDisplayLabel(code, isEmptyLabel(hint) || hint === code ? undefined : hint);\n const row = typeof raw === 'object' && raw !== null ? ((raw as Record<string, unknown>).row as Record<string, unknown>) : undefined;\n selectValue.value = getOptionValue(code, text, row);\n ensureDefaultOption(code, text);\n };\n\n watch(\n externalValue,\n (newValue) => {\n void applySelectValue(newValue);\n },\n { deep: true, immediate: true },\n );\n\n watch(\n () => props.showLabel,\n (newVal) => {\n inputShowLabel.value = newVal;\n if (!isEmptySelectValue(inputValue.value)) void applySelectValue(externalValue.value ?? inputValue.value);\n },\n );\n\n /**\n * @todo: handle focus event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:53:35\n * @param {*} event\n */\n const handleFocus = (event: FocusEvent) => {\n if (remote.value === false)\n getSelectOptions().then((_opts: DicItem[]) => {\n if (remote.value === false)\n if (_opts === undefined || _opts === null || _opts.length === 0) {\n alert('The dict value does not exist', 'warning');\n return false;\n }\n options.value = _opts;\n });\n emit('focus', event);\n };\n\n /**\n * @todo: handle visible change event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:25:38\n * @param {*} val\n */\n const handleVisibleChange = () => {\n // console.log(val);\n };\n\n const handleBlur = () => {\n // // add: 解决无法重新加载问题 2022-04-10\n // if (this.remote === false)\n // this.getSelectOptions().then((_opts) => {\n // this.options = _opts;\n // });\n // else\n // this.options = this.originOptions;\n };\n\n /**\n * @todo: render select option\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:37:58\n * @param {*} x\n */\n const renderSelectOption = (x: DicItem) => {\n let t = x.t;\n switch (lang) {\n case 'zh-CN':\n t = x.t;\n break;\n case 'en':\n t = x.e;\n break;\n case 'l1':\n t = x.l1;\n break;\n case 'l2':\n t = x.l2;\n break;\n default:\n t = x.t;\n break;\n }\n if (!t) t = x.t;\n return (\n <ElOption\n key={x.c + ''}\n label={t}\n value={getOptionValue(x.c + '', t ?? '')}>\n <span class=\"gv-select__option--label\">{t}</span>\n <span class=\"gv-select__option--value\">{x.c}</span>\n </ElOption>\n );\n };\n\n /**\n * @todo: render table option\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:44:34\n * @param {*} x\n */\n const renderTableOption = (x: DicItem) => {\n const t = x.t;\n let val = t;\n const columnTexts: string[] = [];\n const row: Record<string, string> = {};\n let multiColumn = false;\n if (t) {\n if (t.indexOf('[') !== -1) {\n // 多列显示\n multiColumn = true;\n const v1 = t.split('[');\n val = v1[0];\n let mm = v1[1];\n mm = mm.split(']')[0];\n const m2 = mm.split(',');\n for (let i = 0; i < m2.length; i++) {\n const m3 = m2[i];\n const m4 = m3.split(':');\n row[m4[0]] = m4[1];\n columnTexts.push(m4[1] === 'null' ? ' -- ' : m4[1]);\n }\n }\n if (t.indexOf('{') !== -1) {\n // 隐藏列\n const vv1 = t.split('{');\n if (multiColumn === false) val = vv1[0];\n let mmm = vv1[1];\n mmm = mmm.split('}')[0];\n const mm2 = mmm.split(',');\n for (let i = 0; i < mm2.length; i++) {\n const mm3 = mm2[i];\n const mm4 = mm3.split(':');\n row[mm4[0]] = mm4[1];\n }\n }\n }\n let key = x.c + '';\n if (props.multiple === true) key = x.val === undefined ? x.c + '' : String(x.val);\n return (\n <ElOption\n key={key}\n label={val}\n value={getOptionValue(x.c + '', val ?? '', row)}>\n <span class=\"gv-select__option--label\">{val}</span>\n <span class=\"gv-select__option--value\">{x.c}</span>\n {columnTexts.map((text, index) => (\n <span\n key={index}\n class=\"gv-select__option--column\">\n {text}\n </span>\n ))}\n </ElOption>\n );\n };\n\n /**\n * @todo: selected call back\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:27:07\n * @param {*} val\n */\n const handleChange = async (val: any) => {\n if (isEmptySelectValue(val)) return;\n let labels: string = '';\n const labelArr: string[] = [];\n if (props.multiple === true)\n options.value.forEach((x) => {\n if (Array.isArray(val) && val.some((ele) => ele === x.c)) labelArr.push(x.t ?? '');\n });\n else if (typeof val === 'object') labels = val.label ?? '';\n else {\n const opArr = options.value.filter((x) => {\n const v = val + '';\n return x.c + '' === v;\n });\n labels = opArr[0]?.t ?? '';\n if (labels) labels = labels.split('[')[0];\n }\n if (props.bizType === 'tableedit')\n if (props.multiple === true) {\n emit('change', val, labelArr, props.columnProp);\n await props.cb(val, props.columnProp, props.dicType, labelArr, props.editRow);\n } else {\n emit('change', val, labels, props.columnProp);\n await props.cb(val, props.columnProp, props.dicType, labels, props.editRow);\n }\n else if (props.multiple === true) {\n emit('change', val, labelArr);\n await props.cb(val, props.vref, props.dicType);\n } else {\n emit('change', val, labels);\n await props.cb(val, props.vref, props.dicType);\n }\n };\n /**\n * @todo: handle update modelValue\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 11:29:17\n * @param {*} value\n */\n const handleUpdate = (value: any): void => {\n if (isEmptySelectValue(value)) {\n inputValue.value = undefined as typeof inputValue.value;\n selectValue.value = undefined;\n emit('update:modelValue', '');\n return;\n }\n inputValue.value = value;\n selectValue.value = value;\n emit('update:modelValue', value);\n };\n\n if (props.dicType === undefined || props.dicType === null) alert(`[ ${props.label} ] - The dicType needs to be set`, 'warning');\n\n // @render\n return () => {\n const render =\n remote.value === false ? (\n <ElSelect\n ref=\"gv-select\"\n id={resolvedInputId.value}\n name={props.name}\n modelValue={elSelectModel.value}\n valueKey=\"value\"\n onUpdate:modelValue={handleUpdate}\n style={{ display: props.visible ? '' : 'none' }}\n placeholder={sPlaceholder.value}\n disabled={props.disabled}\n clearable={props.clearable}\n size={selectSize.value}\n multiple={props.multiple}\n filterable={inputFilterable.value}\n filter-method={filterMethod}\n default-first-option={true}\n collapseTags={props.collapseTags}\n onClear={handleClear}\n onFocus={handleFocus}\n onVisible-change={handleVisibleChange}\n onChange={handleChange}\n class={className.value}>\n {{\n prefix: () => <i class={dicIcon}></i>,\n default: () => options.value.map((x) => renderSelectOption(x)),\n }}\n </ElSelect>\n ) : (\n <ElSelect\n ref=\"gv-select\"\n id={resolvedInputId.value}\n name={props.name}\n modelValue={elSelectModel.value}\n valueKey=\"value\"\n onUpdate:modelValue={handleUpdate}\n style={{ display: props.visible ? '' : 'none' }}\n placeholder={sPlaceholder.value}\n disabled={props.disabled}\n clearable={props.clearable}\n size={selectSize.value}\n multiple={props.multiple}\n default-first-option={true}\n filterable={inputFilterable.value}\n remote={true}\n remote-method={remoteMethod}\n debounce={300}\n loading={loading.value}\n loading-text={loadingText.value}\n collapseTags={props.collapseTags}\n onClear={handleClear}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n class={className.value}>\n {{\n prefix: () => <i class={dicIcon}></i>,\n default: () => options.value.map((x) => renderTableOption(x)),\n }}\n </ElSelect>\n );\n return render;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-select';\n .#{$prefixCls} {\n vertical-align: middle; // fixme: 注意必须有这个参数,否则作为一行最后的列会导致串行\n :deep(.el-select__wrapper) {\n &.is-focus {\n .el-input__inner {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n .el-select__prefix {\n left: 5px !important;\n width: 15px !important;\n\n .iconfont {\n //font-size: $appTextSize;\n }\n }\n\n .el-select__placeholder {\n //font-size: $appTextSize;\n }\n }\n\n &.tableedit {\n :deep(.el-select__wrapper) {\n .el-select__input {\n padding-right: 5px !important;\n //font-size: $appTextSize;\n }\n\n .el-select__suffix {\n width: 0;\n }\n }\n }\n }\n\n .#{$gvNamespace}-select__table {\n vertical-align: middle; // fixme: 注意必须有这个参数,否则作为一行最后的列会导致串行\n :deep(.el-select__wrapper) {\n .el-select__prefix {\n left: 5px !important;\n width: 15px !important;\n\n .iconfont {\n //font-size: $appTextSize;\n }\n }\n .el-select__selection {\n //font-size: $appTextSize;\n }\n\n &.is-focus .el-select__input {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n &.tableedit {\n :deep(.el-select__wrapper) {\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSelect from './src/GvSelect.vue';\n// Define the install method on the GvButton component\nconst GvSelectPlugin = {\n install(app: App): void {\n app.component(GvSelect.name ?? 'GvSelect', GvSelect);\n },\n};\nexport default GvSelectPlugin;\n\nexport { GvSelect };\n","<!--\n * @title: switch component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 13:26:26\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 09:55:07\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElSwitch } from 'element-plus';\n import { defineComponent, ref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('switch');\n export default defineComponent({\n name: 'GvSwitch',\n props: {\n value: {\n type: [Boolean, Number, String] as PropType<boolean | number | string>,\n required: false,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n columnKey: {\n type: String,\n required: false,\n default: undefined,\n },\n target: {\n type: [Number, String] as PropType<number | string>,\n require: false,\n default: '100201',\n },\n },\n\n // emit\n emits: ['change'],\n setup(props, { emit }) {\n // @data\n const val = ref(props.value);\n const switchType = ref(true);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n val.value = newVal;\n switchType.value = val.value === props.target;\n },\n );\n watch(\n () => switchType.value,\n (newVal) => {\n val.value === newVal;\n },\n );\n\n // @methods\n const handleChange = (newStatus) => {\n emit('change', newStatus, val.value);\n };\n\n // @created\n switchType.value = val.value === props.target;\n\n // @render\n return () => (\n <ElSwitch\n ref=\"gv-switch\"\n v-model={switchType.value}\n key={props.columnKey}\n disabled={props.disabled}\n // active-color='#13ce66'\n // inactive-color='#ff4949'\n onChange={handleChange}\n class={prefixCls}\n />\n );\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-switch';\n .#{$prefixCls} {\n &.is-checked {\n :deep(.el-switch__core) {\n background-color: #13ce66;\n border-color: #13ce66;\n }\n }\n\n :deep(.el-switch__core) {\n background-color: #b3aaaa;\n border-color: #b3aaaa;\n //background-color:#ff4949;\n //border-color:#ff4949;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSwitch from './src/GvSwitch.vue';\n// Define the install method on the GvButton component\nconst GvSwitchPlugin = {\n install(app: App): void {\n app.component(GvSwitch.name ?? 'GvSwitch', GvSwitch);\n },\n};\nexport default GvSwitchPlugin;\n\nexport { GvSwitch };\n","<!--\n * @title: time picker\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 09:18:28\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 14:19:59\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { ElTimePicker, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { DefineComponent, PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TTimePickerEmits, TTimePickerSize, TTimePickerType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('timepicker');\n const TimePicker = ElTimePicker as typeof ElTimePicker & DefineComponent<TTimePickerEmits>;\n\n export default defineComponent({\n name: 'GvTimePicker',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [Date, Array, String] as PropType<TTimePickerType>,\n default: undefined,\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<TTimePickerSize>,\n default: 'default',\n },\n isRange: {\n type: Boolean,\n default: false,\n },\n disabledHours: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n disabledMinutes: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n disabledSeconds: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n rangeSeparator: {\n type: String,\n default: '-',\n },\n format: {\n type: String,\n default: 'HH:mm',\n },\n valueFormat: {\n type: String,\n default: 'HH:mm',\n },\n placeholder: {\n type: String,\n default: '00:00',\n },\n startPlaceholder: {\n type: String,\n default: '',\n },\n endPlaceholder: {\n type: String,\n default: '',\n },\n editable: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n },\n\n emits: ['update:modelValue', 'change', 'blur', 'focus'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n const inputValue = ref<TTimePickerType>(props.modelValue);\n const timepickerSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.modelValue,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n /**\n *@todo: 更新v-model值\n *@author: bugcao\n *@date: 2026-05-07 15:45:52\n *@version: v0.0.1\n */\n const handleUpdate = (value: TTimePickerType) => {\n inputValue.value = value;\n emit('update:modelValue', value);\n };\n /**\n *@todo: 合并禁用小时\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledHours = () => props.disabledHours;\n /**\n *@todo: 合并禁用分钟\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledMinutes = () => props.disabledMinutes;\n /**\n *@todo: 合并禁用秒\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledSeconds = () => props.disabledSeconds;\n /**\n *@todo: 更新change事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:09\n *@version: v0.0.1\n */\n const handleChange = (value: TTimePickerType) => {\n emit('change', value);\n };\n /**\n *@todo: 更新blur事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:12\n *@version: v0.0.1\n */\n const handleBlur = (e: FocusEvent) => {\n emit('blur', e);\n };\n /**\n *@todo: 更新focus事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:12\n *@version: v0.0.1\n */\n const handleFocus = (e: FocusEvent) => {\n emit('focus', e);\n };\n\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @render\n return () => (\n <TimePicker\n ref={props.vref || 'gv-timepicker'}\n id={resolvedInputId.value}\n modelValue={inputValue.value}\n onUpdate:modelValue={handleUpdate}\n name={props.name}\n readonly={props.readonly}\n disabled={props.disabled}\n editable={props.editable}\n clearable={props.clearable}\n is-range={props.isRange}\n range-separator={props.rangeSeparator}\n size={timepickerSize.value}\n placeholder={props.placeholder || t('common.selectTime')}\n start-placeholder={props.startPlaceholder || t('common.startTime')}\n end-placeholder={props.endPlaceholder || t('common.endTime')}\n format={props.format}\n value-format={props.valueFormat}\n class={prefixCls}\n disabled-hours={mergedDisabledHours}\n disabled-minutes={mergedDisabledMinutes}\n disabled-seconds={mergedDisabledSeconds}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n />\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-timepicker';\n .#{$prefixCls} {\n width: 100%;\n vertical-align: middle;\n :deep(.el-icon-time) {\n margin-left: 1px;\n }\n &.el-range-editor.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n :deep(.el-input__wrapper) {\n &:is(.is-focus) {\n box-shadow: 0 0 0 1px var(--primaryColorHover, $primaryColorHover) inset;\n }\n }\n :deep(.el-input__inner) {\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n :deep(.el-range__close-icon) {\n width: 20px;\n }\n :deep(.el-range-separator) {\n padding-right: 2px;\n padding-left: 0;\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTimePicker from './src/GvTimePicker.vue';\n\nconst GvTimePickerPlugin = {\n install(app: App): void {\n app.component(GvTimePicker.name ?? 'GvTimePicker', GvTimePicker);\n },\n};\nexport default GvTimePickerPlugin;\n\nexport { GvTimePicker };\n","/*\n * @title: info message component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:10:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:01:59\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nconst infoMsg = {\n carNo: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '车牌号格式错误';\n else info = 'car number format error.';\n return info;\n },\n double: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入浮点数.';\n else info = 'please enter Double.';\n return info;\n },\n decimal: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '小数点位数不能超过: ' + len + ' 位';\n else info = 'Number of decimal places can not be more than:' + len + '.';\n return info;\n },\n idCard: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '身份证格式不正确';\n else info = 'id card format is not correct.';\n return info;\n },\n maxLen: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能超过 ' + Math.floor(len / 2) + '个汉字或 ' + len + ' 个字符';\n else info = 'Can not exceed ' + len + ' character.';\n return info;\n },\n money: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '非0开头的数字 小数最多两位.';\n else info = \"Only input Numbers, 0 can't start, the decimal two at the most.\";\n return info;\n },\n moneyMax: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '整数位最多只能是: ' + len + ' 位';\n else info = 'integer digits can only be at most: ' + len;\n return info;\n },\n letter: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入字母以外的字符';\n else info = \"Can't input letters outside of the characters.\";\n return info;\n },\n number: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '只能输入正整数.';\n else info = 'Only enter a positive integer.';\n return info;\n },\n number0: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '只能输入不能以0开头的正整数.';\n else info = 'Only enter a non-zero positive integer, and cannot begin with zero.';\n return info;\n },\n //Add TypeScript type annotations for lang parameter\n numberLetter: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入数字、字母以外的字符.';\n else info = 'Can not input Numbers, letters characters.';\n return info;\n },\n //Add TypeScript type annotations for lang parameter\n name: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入数字、字母、-、_和中文以外的字符.';\n else info = 'Can not enter Numbers, letters, -, _ and Chinese characters.';\n return info;\n },\n phone: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '电话号码格式不正确.';\n else info = 'Phone format is not correct.';\n return info;\n },\n email: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '邮件格式不正确.';\n else info = 'E-mail format is not correct.';\n return info;\n },\n telephone: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的固话(格式:区号+号码,如010-1234567)';\n else info = 'Telephone format is not correct.';\n return info;\n },\n ip: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的IP地址';\n else info = 'IpAddress format is not correct.';\n return info;\n },\n url: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的url地址';\n else info = 'Url format is not correct.';\n return info;\n },\n phoneTel: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的电话号码或者固话号码';\n else info = 'phone & tel format is not correct.';\n return info;\n },\n vin: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入后8位或17位(字母大写)';\n else info = 'must be 8 or 17 letters and Numbers.';\n return info;\n },\n};\nexport default infoMsg;\n","/*\n * @title: validate rules component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:09:03\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 20:32:12\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\n/** ------------------- 验证规则 ------------------------\n * isAny: 默认规则,无校验\n * isAdmin: 验证是否是admin用户\n * isUrl: 验证url格式\n * isLowercase: 验证是否都是小写\n * isUppercase: 验证是否都是大写\n * isLetter: 验证是否都是字母( 不包括标点符号)\n * isEmail: 验证是否是email\n * isPhone: 验证电话号码\n * isIp: 验证是否是ip地址\n * isPhoneTel: 验证是否是手机号或者固定电话号\n * isTelephone: 验证是否是固定电话\n * isIdcard: 验证身份证号\n * isMoney:验证金额格式\n * isBigMoney: 验证金额格式(千位符格式)\n * isNumber: 验证是否是整数数字\n * isNumberLetter: 验证是否是数字和字母\n * isDouble: 验证浮点数格式\n * isName: 验证是否是名称格式\n * isVin: 验证vin码格式\n * isCarno: 验证车牌号(含新能源)\n ----------------------------------------------------\n*/\n\nimport infoMsg from './gv.infomsg';\n\n/**\n * @todo: 计算输入字符串的长度,汉字记为2 英文字母记为1\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 14:56:22\n * @param {*} val 对于多选字典,val是数组类型的字典码\n */\nconst calLength = function (val) {\n if (val === null || val.length === 0) return 0;\n let i, sum;\n sum = 0;\n // fixme: val有可能是数组,需要转化为字符串 2022-04-10\n let v = val;\n if (Array.isArray(val)) v = val.join(',');\n for (i = 0; i < v.length; i++)\n if (v.charCodeAt(i) >= 32 && v.charCodeAt(i) <= 126) sum = sum + 1;\n else sum = sum + 2;\n return sum;\n};\n\nconst vcity = {\n 11: '北京',\n 12: '天津',\n 13: '河北',\n 14: '山西',\n 15: '内蒙古',\n 21: '辽宁',\n 22: '吉林',\n 23: '黑龙江',\n 31: '上海',\n 32: '江苏',\n 33: '浙江',\n 34: '安徽',\n 35: '福建',\n 36: '江西',\n 37: '山东',\n 41: '河南',\n 42: '湖北',\n 43: '湖南',\n 44: '广东',\n 45: '广西',\n 46: '海南',\n 50: '重庆',\n 51: '四川',\n 52: '贵州',\n 53: '云南',\n 54: '西藏',\n 61: '陕西',\n 62: '甘肃',\n 63: '青海',\n 64: '宁夏',\n 65: '新疆',\n 71: '台湾',\n 81: '香港',\n 82: '澳门',\n 91: '国外',\n};\n// 校验浮点数位数\nconst checkDecimal = function (val, decimalLen) {\n let v = val + '';\n if (v && v.indexOf('.') > 0) {\n v = v.substr(v.indexOf('.') + 1, v.length);\n if (v.length <= decimalLen) return true;\n else return false;\n } else return true;\n};\n// 取身份证前两位,校验省份\nconst checkProvince = function (card) {\n const province = card.substr(0, 2);\n if (vcity[province] === undefined) return false;\n\n return true;\n};\n\n// 校验日期\nconst verifyBirthday = function (year: number, month: number, day: number, birthday: Date) {\n const now = new Date();\n const now_year = now.getFullYear();\n // 年月日是否合理\n if (birthday.getFullYear() === +year && birthday.getMonth() + 1 === +month && birthday.getDate() === +day) {\n // 判断年份的范围(3岁到100岁之间)\n const time = now_year - Number(year);\n if (time >= 3 && time <= 100) return true;\n return false;\n }\n return false;\n};\n\n// 检查生日是否正确\nconst checkBirthday = function (card) {\n const len = card.length;\n // 身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字\n if (len === 15) {\n const re_fifteen = /^(\\d{6})(\\d{2})(\\d{2})(\\d{2})(\\d{3})$/;\n const arr_data = card.match(re_fifteen);\n const year = arr_data[2];\n const month = arr_data[3];\n const day = arr_data[4];\n const birthday = new Date('19' + year + '/' + month + '/' + day);\n return verifyBirthday(Number('19' + year), month, day, birthday);\n }\n // 身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X\n if (len === 18) {\n const re_eighteen = /^(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9]|X)$/;\n const arr_data = card.match(re_eighteen);\n const year = arr_data[2];\n const month = arr_data[3];\n const day = arr_data[4];\n const birthday = new Date(year + '/' + month + '/' + day);\n return verifyBirthday(year, month, day, birthday);\n }\n return false;\n};\n// 15位转18位身份证号\nconst changeFivteenToEighteen = function (card) {\n if (card.length === 15) {\n const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n let cardTemp = 0;\n let i;\n card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);\n for (i = 0; i < 17; i++) cardTemp += card.substr(i, 1) * arrInt[i];\n\n card += arrCh[cardTemp % 11];\n return card;\n }\n return card;\n};\n\n// 校验位的检测\nconst checkParity = function (card) {\n // 15位转18位\n card = changeFivteenToEighteen(card);\n const len = card.length;\n if (len === 18) {\n const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n let cardTemp = 0;\n let valnum = '';\n for (let i = 0; i < 17; i++) cardTemp += card.substr(i, 1) * arrInt[i];\n\n valnum = arrCh[cardTemp % 11];\n if (valnum === card.substr(17, 1)) return true;\n\n return false;\n }\n return false;\n};\n\nconst htValidate = {\n isLength: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language, max = 30 } = rule;\n const len = calLength(value);\n if (len > max) callback(new Error(infoMsg.maxLen(language, max)));\n else callback();\n }\n },\n isDouble: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const reg = /^(-)?\\d+(\\.\\d+)?$/;\n const { language, decimal = 2 } = rule;\n if (!reg.test(value)) callback(new Error(infoMsg.double(language)));\n else if (checkDecimal(value, decimal)) callback();\n else callback(new Error(infoMsg.decimal(language, decimal)));\n }\n },\n isIdcard: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // 校验长度\n const reg = /(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/;\n if (!reg.test(value)) callback(new Error(infoMsg.idCard(language)));\n else if (checkProvince(value) === false)\n // 检查省份\n callback(new Error(infoMsg.idCard(language)));\n else if (checkBirthday(value) === false)\n // 校验生日\n callback(new Error(infoMsg.idCard(language)));\n else if (checkParity(value) === false)\n // 检验位的检测\n callback(new Error(infoMsg.idCard(language)));\n else callback();\n }\n },\n\n isCarno: (rule, value, callback) => {\n const { language } = rule;\n if (value === '' || value === undefined || value == null) return callback();\n else if (value.length === 7) {\n const pattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;\n if (!pattern.test(value)) callback(new Error(infoMsg.carNo(language)));\n else return callback();\n } else {\n const pattern2 = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DABCEFGHJK][A-HJ-NP-Z0-9][0-9]{4}$))/;\n if (!pattern2.test(value)) callback(new Error(infoMsg.carNo(language)));\n else return callback();\n }\n },\n\n isMoney: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return callback();\n else {\n const { language, max } = rule;\n // eslint-disable-next-line no-useless-escape\n const pattern = /^[\\-\\+]?(([1-9]\\d*)|0)(\\.\\d{1,2})?$/;\n const val = value + '';\n // var rv = val.replace(/[,]/g, '');\n if (!pattern.exec(val)) callback(new Error(infoMsg.money(language)));\n else if (val.indexOf('.') > 0)\n if (val.split('.')[0].length > max - 3)\n // 校验整数位格式只能是maxLength -3\n callback(new Error(infoMsg.moneyMax(language, max - 3)));\n else return callback();\n else if (value.length > max - 3) callback(new Error(infoMsg.moneyMax(language, max - 3)));\n else return callback();\n }\n },\n\n isBigMoney: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // eslint-disable-next-line no-useless-escape\n const reg = /^[\\-\\+]?([0-9]\\d*|0|[1-9]\\d{0,2}(,\\d{3})*)(\\.\\d+)?$/;\n if (!reg.test(value)) callback(new Error(infoMsg.money(language)));\n else callback();\n }\n },\n\n isLetter: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^[A-Za-z]+$/;\n if (!reg.test(value)) callback(new Error(infoMsg.letter(language)));\n else callback();\n }\n },\n\n isNumber: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^\\+?[0-9][0-9]*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.number(language)));\n else callback();\n }\n },\n\n isNumber0: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^\\+?[1-9][0-9]*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.number0(language)));\n else callback();\n }\n },\n\n isNumberLetter: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^([a-z]|[A-Z]|[ ]|[(]|[)]|[-]|[_]|[*]|[.]|[,]|[,]|[0-9]){0,200}$/;\n if (!reg.test(value)) callback(new Error(infoMsg.numberLetter(language)));\n else callback();\n }\n },\n\n isName: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^[a-zA-Z0-9-_. \\u4E00-\\u9FA5]{0,60}$/;\n if (!reg.test(value)) callback(new Error(infoMsg.name(language)));\n else callback();\n }\n },\n\n isPhone: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const reg = /^1([38][0-9]|4[014-9]|[59][0-35-9]|6[2567]|7[0-8])\\d{8}$/;\n if (!reg.test(value)) {\n const { language = 'zh-CN' } = rule;\n callback(new Error(infoMsg.phone(language)));\n } else callback();\n }\n },\n\n isEmail: (rule, value, callback) => {\n // eslint-disable-next-line no-useless-escape\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // eslint-disable-next-line no-useless-escape\n const reg = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n if (!reg.test(value)) callback(new Error(infoMsg.email(language)));\n else callback();\n }\n },\n\n isTelephone: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /0\\d{2}-\\d{7,8}/;\n if (!reg.test(value)) callback(new Error(infoMsg.telephone(language)));\n else callback();\n }\n },\n\n isPhoneTel: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^((0\\d{2,3}-\\d{7,8})|(1([38][0-9]|4[014-9]|[59][0-35-9]|6[2567]|7[0-8])\\d{8}))$/;\n if (!reg.test(value)) callback(new Error(infoMsg.phoneTel(language)));\n else callback();\n }\n },\n\n isIp: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/;\n if (!reg.test(value)) callback(new Error(infoMsg.ip(language)));\n else callback();\n }\n },\n\n isUrl: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg =\n /^(https?|ftp):\\/\\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.?(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\\/($|[a-zA-Z0-9.,?'\\\\+&%$#=~_-]+))*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.url(language)));\n else callback();\n }\n },\n\n isVin: (rule, value, callback) => {\n const { language } = rule;\n const reg = /^[A-Z0-9]+$/;\n if (value === '' || value === undefined || value == null) callback();\n else if (value.length !== 8 && value.length !== 17) callback(new Error(infoMsg.vin(language)));\n else if (!reg.test(value)) callback(new Error(infoMsg.vin(language)));\n else callback();\n },\n};\n\nexport default htValidate;\n","<!--\n * @title: form component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:01:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:32\n * @version: 1.1.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { useBridgeI18n } from '@@/bridge';\n import { GvCascader } from '@@/GvCascader';\n import { GvDatePicker } from '@@/GvDatePicker';\n import { GvDivider } from '@@/GvDivider';\n import { GvInput } from '@@/GvInput';\n import { GvInputNumber } from '@@/GvInputNumber';\n import { GvSelect } from '@@/GvSelect';\n import { GvSwitch } from '@@/GvSwitch';\n import { GvTimePicker } from '@@/GvTimePicker';\n import { addClass, dateFormatConfig, hasScrollbar, removeClass, sleep, toHump } from '@@/utils';\n import gvValidate from '@@/utils/gv.validate';\n import { ElCol, ElForm, ElFormItem, ElInput, ElRadio, ElRadioButton, ElRadioGroup, ElRow, ElTooltip, useGlobalConfig, type ComponentSize, type FormInstance, type FormItemRule } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, nextTick, onMounted, provide, ref, Transition, unref, watch, type PropType, type VNode } from 'vue';\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('form');\n\n export default defineComponent({\n name: 'GvForm',\n props: {\n refForm: {\n type: String,\n required: true,\n },\n divider: {\n type: String,\n required: false,\n default: undefined,\n },\n isDivider: {\n type: Boolean,\n required: false,\n default: true,\n },\n formList: {\n type: Array as PropType<FormItem[]>,\n required: true,\n default: () => [],\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: undefined,\n },\n labelWidth: {\n type: [Number, String] as PropType<number | string>,\n default: 100,\n },\n formStyle: {\n // 响应式布局 使用该参数定义width\n type: [Object],\n required: false,\n default: () => {},\n },\n scroller: {\n // 是否带有滚动条\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots, expose }) {\n const searchFieldsCollapsed = ref(true); // 查询 form 默认折叠超出行数字段\n // @provide\n provide('refForm', props.refForm);\n provide('formList', props.formList);\n provide('searchFieldsCollapsed', searchFieldsCollapsed);\n\n // @data\n const appStore = useAppStore();\n const userStore = useUserStore();\n const { t } = useBridgeI18n();\n\n const originFormList = ref([]);\n const instance = getCurrentInstance ? getCurrentInstance() : ({ parent: null } as any);\n\n const formRefs = ref<Record<string, FormInstance | null>>({}); // 表单实例引用,默认空对象\n const formElRef = ref<FormInstance | null>(null); // ElForm 元素引用\n\n const setFormRef = (el: FormInstance | null) => {\n formElRef.value = el;\n if (el && props.refForm) formRefs.value[props.refForm] = el;\n };\n const globalSize = useGlobalConfig('size');\n const rootNodeStyle = ref({}); // form组件根节点div样式\n const isShow = ref(true); // form表单show状态,默认显示\n const rules = ref({}); // 表单校验规则,默认空对象\n const isEditContainer = ref(false); // 是否是editContainer标签内,默认false\n const sMaxHeight = ref(0); // 表单最大高度,默认0\n const isScrollbar = ref(false); // 是否dialog中有滚动条\n const isAnchor = ref(false); // 是否锚点中列表\n const model = ref({}); // 表单数据,默认空对象\n const isDialog = ref(false); // 是否是dialog中form表单,默认false\n const colSpanNums = ref(0); // 根据form宽度或屏幕宽度计算显示列数,默认0\n const formType = ref('s'); // form类型:查询form:s、表单form:e\n const styles = ref({}); // form表单style样式,默认空对象\n\n // @computed\n const formSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const labelPosition = computed(() => appStore.labelPosition); // 表单label位置\n const searchDivider = computed(() => appStore.searchDivider); // search divider show,default: true\n const dict = computed<DicItems>(() => appStore.getDict); // 字典数据\n const dictCache = computed(() => userStore.dictCache); // 字典缓存\n\n // @exposed\n expose({\n originFormList,\n setFormRef,\n });\n // method\n const getLanguage = (lang: string, x: any) => {\n let v = '';\n switch (lang) {\n case 'zh-CN':\n v = x.t;\n break;\n case 'en':\n v = x.e;\n break;\n case 'l1':\n v = x.l1;\n break;\n case 'l2':\n v = x.l2;\n break;\n default:\n v = x.t;\n break;\n }\n if (!v) v = x.t;\n return v;\n };\n /**\n * @todo: set divider show status\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 18:12:34\n * @param {*} show\n */\n const setDividerShow = (show: boolean) => {\n isShow.value = show;\n };\n\n const getEditBar = computed(() => {\n if (slots.editbar?.())\n return (\n <ElRow\n ref-form={props.refForm}\n class=\"gv-form-editbar\">\n {slots.editbar?.()}\n </ElRow>\n );\n else return null;\n });\n\n const getDivider = computed(() => {\n let dividerRender: VNode | null = null;\n if (searchDivider.value !== false) {\n let dividerTitle: string;\n if (props.divider) dividerTitle = props.divider;\n else dividerTitle = t('common.dividerTitle');\n if (props.isDivider)\n dividerRender = (\n <GvDivider\n label={dividerTitle}\n target={props.refForm}\n visible={isShow.value}\n onSetDividerShow={setDividerShow}\n />\n );\n }\n\n return dividerRender;\n });\n\n /**\n * @todo: get dic item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 18:13:06\n * @param {*} src\n */\n const getDictItems = (src: string): DicItem[] => {\n let ret = [] as DicItem[];\n const dictCacheTmp: DicItem[] | undefined = dictCache.value?.[src];\n if (dictCacheTmp) ret = dictCacheTmp;\n else {\n // 生成字典列表\n const dictTmp: DicItem[] | undefined = dict.value[src];\n if (dictTmp) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dictTmp;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n\n ret = dictTmp;\n }\n }\n return ret;\n };\n /**\n * @todo: generate form item rules\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 20:31:59\n * @param {*} _item\n */\n const getItemRules = (_item: FormItem): FormItemRule[] => {\n const rules: FormItemRule[] = [];\n const format: FormItemFormat | undefined = _item.format;\n // 富文本不校验\n if (_item.type === 'richtext') return rules;\n if (!format) return rules;\n // ========== 必填校验 ==========\n const requiredFlag = Number(format[0]);\n if (requiredFlag === 1 && !_item.hidden)\n rules.push({\n required: true,\n message: `${t('common.pleaseInput')} ${_item.label ?? ''}`,\n trigger: 'blur',\n });\n // ========== 自定义校验 ==========\n let validateKey = 'isAny';\n if (format[1]) validateKey = toHump(String(format[1]));\n const maxLen = Number(format[2] ?? 30);\n const decimal = format.length >= 4 ? Number(format[3] ?? 0) : 0;\n const validator = gvValidate[validateKey as keyof typeof gvValidate];\n if (validator && validateKey !== 'isAny')\n rules.push({\n validator: validator,\n trigger: ['change', 'blur'],\n // Element Plus 透传参数(自定义字段)\n language: userStore.language,\n max: maxLen,\n decimal,\n } as FormItemRule);\n // ========== 长度校验 ==========\n const excluded = ['isDate', 'isDateTime', 'isTime', 'isDic'];\n if (format[2] && !excluded.includes(validateKey))\n rules.push({\n language: userStore.language,\n max: maxLen,\n validator: gvValidate['isLength'],\n trigger: ['change', 'blur'],\n } as FormItemRule);\n return rules;\n };\n const handleRadioInput = (event: any, field: string, val, formVal, disabled) => {\n if (disabled) return;\n if (val === formVal) {\n event.preventDefault();\n model.value[field] = '';\n }\n };\n const handleDateRange2Focus = (vm: any) => {\n sleep(100).then(() => {\n addClass(vm.$el.closest('.gv-daterange__single'), 'is-active');\n });\n };\n const handleDateRange2Blur = (vm: any) => {\n removeClass(vm.$el.closest('.gv-daterange__single'), 'is-active');\n };\n\n /**\n * @todo: 日期范围选择,单独选择开始日期、结束日期选择回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 19:49:03\n * @param {*} type\n * @param {*} val\n * @param {*} field\n */\n const handleDateRange2Change = (type: string, val: string | Date, field: string): void => {\n // 校验开始日期和结束日期大小\n if (type === 's')\n if (val && model.value[field + '-end']) {\n const endTime = new Date(model.value[field + '-end'] as string).getTime();\n const startTime = new Date(val).getTime();\n if (startTime >= endTime) {\n model.value[field + '-end'] = '';\n model.value[1] = 'null';\n }\n }\n\n if (type === 'e')\n if (val && model.value[field + '-start']) {\n const startTime = new Date(model.value[field + '-start'] as string).getTime();\n const endTime = new Date(val).getTime();\n if (startTime >= endTime) {\n model.value[field + '-start'] = '';\n // console.log(this.model);\n model.value[1] = 'null';\n }\n }\n\n if (!field) return;\n const datePicker = model.value[field];\n let dateArr = new Array(2);\n if (Array.isArray(datePicker)) {\n if (type === 's') datePicker[0] = val;\n else datePicker[1] = val;\n if (!datePicker[0]) datePicker[0] = 'null';\n if (!datePicker[1]) datePicker[1] = 'null';\n model.value[field] = datePicker.join(',');\n } else {\n if (datePicker && typeof datePicker === 'string') dateArr = datePicker.split(',');\n dateArr[0] = model.value[field + '-start'];\n dateArr[1] = model.value[field + '-end'];\n if (!dateArr[0]) dateArr[0] = 'null';\n if (!dateArr[1]) dateArr[1] = 'null';\n model.value[field] = dateArr.join(',');\n }\n };\n /**\n * @todo: switch框字典change回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-12-21 16:47:22\n * @param {*} val\n * @param {*} field\n * @param {*} dicType\n * @param {*} cb\n */\n const handleSwitchDictChange = async (val, field, dicType, cb) => {\n switch (dicType) {\n case 'yxzt':\n if (val === true) model.value[field] = '100201';\n else model.value[field] = '100202';\n break;\n case 'sf':\n if (val === true) model.value[field] = '100101';\n else model.value[field] = '100102';\n break;\n }\n if (cb)\n try {\n await cb(val, field, dicType);\n } catch (error) {\n console.log(error);\n }\n };\n /**\n * @todo: radio框字典change回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-22 15:50:15\n * @param {*} val\n * @param {*} field\n * @param {*} dicType\n * @param {*} cb\n */\n const handleRadioDictChange = async (val, field, dicType: string | undefined, cb: Fn | undefined) => {\n if (cb)\n try {\n await cb(val, field, dicType);\n } catch (error) {\n console.log(error);\n }\n };\n /**\n * @todo: 查询 form 列默认折叠 class(渲染时绑定,避免重渲染丢失)\n */\n const getSearchColClass = (index: number) => {\n if (formType.value !== 's' || !searchFieldsCollapsed.value) return undefined;\n const slot = slots.default?.()?.[0];\n const slotProps = slot?.props as Recordable | undefined;\n if (slotProps?.expand === false) return undefined;\n const showDefaultRow = appStore.searchFormRows === 1 ? 4 : 8;\n if (index >= showDefaultRow - 1) return 'gv-form-col--hidden';\n return undefined;\n };\n\n /**\n * @todo: render form item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 17:54:23\n * @param {*} _item\n * @param {*} _index\n */\n const renderFormItem = (_item: FormItem, _index: number): VNode => {\n const {\n type = 'text',\n label,\n field,\n hidden = false,\n disabled,\n format = [],\n placeholder,\n readonly = false,\n dateType = 'date',\n dicType,\n filtercode,\n colspan = 1,\n disabledDateFunc,\n disabledDate,\n editable = true,\n multiple = false,\n showLabel,\n size = formSize.value,\n visible = true,\n // offset,\n createRow = false, // 是否创建新row,\n dicRemote,\n cb, // 回调方法\n clear, // 清空回调\n rows, // textarea\n autosize, // textarea\n min, // input-number\n max, // input-number\n step, // input-number\n precision, // input-number\n blur = () => {},\n suffixIcon, // 后缀icon\n prefixIcon, // 前缀icon\n focus = () => {},\n change = () => {},\n defaultTime, // 时间的默认能够选择的时间\n isreload = true, // 表选字典是否重新加载\n options = [],\n lazy = false, // cascader是否懒加载\n lazyLoad = () => {}, // cascader懒加载方法\n render, // 自定义form样式\n } = _item;\n let renders;\n const isHidden = hidden === true;\n const maxLen = format[2] || 30;\n let cType = type;\n // const dateFormatConfig = dateFormatConfig;\n const validateRule = toHump(String(format[1] || ''));\n let sDateType = dateType;\n let isRange = false;\n let dateFormat = dateFormatConfig.date.valueFormat; // 日期显示格式\n let valueFormat = dateFormatConfig.date.valueFormat; // 日期绑定值格式\n if (sDateType !== 'daterange' && sDateType !== 'datetimerange' && sDateType !== 'daterange2' && sDateType !== 'datetimerange2') {\n if (validateRule === 'isDate') cType = 'date';\n if (validateRule === 'isDateTime') {\n cType = 'datetime';\n sDateType = 'datetime';\n }\n if (validateRule === 'isTime') cType = 'time';\n }\n\n if (sDateType === 'timerange') isRange = true;\n\n let ph = placeholder;\n let startPh = t('common.startDate');\n let endPh = t('common.endDate');\n // todo: 响应式布局计算\n // const cols = { span: colspan, offset: (_index) * 6 };\n let cols = colspan > 4 ? 4 : colspan; // fixme: 最大值不能超过4 2022-04-07\n if (sDateType === 'datetimerange' || sDateType === 'datetimerange2') cols = 2;\n // update: 对于多选字典,默认占用列数为2列 2023-02-18\n if (multiple === true && colspan === undefined) cols = 2;\n let rangeSeparator;\n if (sDateType === 'timerange' || sDateType === 'daterange2' || sDateType === 'datetimerange2') rangeSeparator = t('common.until');\n const colSpanXs = 24;\n let colSpanSm = 12;\n let colSpanMd = 8;\n\n let colSpanLg = 6;\n if (isDialog.value === true) colSpanLg = 8;\n let colSpanXl = 4;\n if (isDialog.value === true) colSpanXl = 6;\n if (colSpanNums.value !== 0) {\n if (colSpanNums.value === 12) cols = colspan > 2 ? 2 : colspan;\n if (colSpanNums.value === 8) cols = colspan > 3 ? 3 : colspan;\n if (colSpanNums.value === 6 || colSpanNums.value === 4) cols = colspan > 4 ? 4 : colspan;\n colSpanSm = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanMd = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanLg = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanXl = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n } else {\n colSpanSm = cols * colSpanSm > 24 ? 24 : cols * colSpanSm;\n colSpanMd = cols * colSpanMd > 24 ? 24 : cols * colSpanMd;\n colSpanLg = cols * colSpanLg > 24 ? 24 : cols * colSpanLg;\n colSpanXl = cols * colSpanXl > 24 ? 24 : cols * colSpanXl;\n }\n let decimal = 2;\n let v = '';\n if (!ph)\n switch (validateRule) {\n case 'isMoney':\n ph = '0.00';\n break;\n case 'isBigMoney':\n ph = '0,000.00';\n break;\n case 'isEmail':\n ph = 'xx@xx.com';\n break;\n case 'isDouble':\n if (format.length >= 4) decimal = format[3] || 2;\n while (decimal > 0) {\n v = '0' + v;\n decimal--;\n }\n ph = '00.' + v;\n break;\n case 'isDate':\n if (sDateType === 'week') {\n ph = t('common.selectWeek'); // dateFormatConfig.week.placeholder;\n dateFormat = dateFormatConfig.week.dateFormat;\n } else if (sDateType === 'month' || sDateType === 'monthrange') {\n ph = t('common.selectMonth'); // dateFormatConfig.month.placeholder;\n startPh = ph;\n endPh = ph;\n dateFormat = dateFormatConfig.month.dateFormat;\n valueFormat = dateFormatConfig.month.valueFormat;\n } else if (sDateType === 'year') {\n ph = t('common.selectYear'); // dateFormatConfig.year.placeholder\n dateFormat = dateFormatConfig.year.dateFormat;\n valueFormat = dateFormatConfig.year.valueFormat;\n } else if (sDateType === 'daterange' || sDateType === 'daterange2') ph = t('common.selectDate');\n break;\n case 'isDateTime':\n if (sDateType === 'datetimerange' || sDateType === 'datetimerange2') {\n startPh = t('common.startTime');\n endPh = t('common.endTime');\n }\n ph = t('common.selectTime'); // dateFormatConfig.datetime.placeholder;\n dateFormat = dateFormatConfig.datetime.dateFormat;\n valueFormat = dateFormatConfig.datetime.valueFormat;\n break;\n }\n let editables = editable;\n // 如果是带有禁用日期的,不可编辑,防止输入不一致问题\n if (disabledDateFunc || disabledDate) editables = false;\n let ops;\n let isTableDic = false;\n if (type === 'dic')\n if (dicType) {\n ops = getDictItems(dicType);\n if (dicType.indexOf('t#') >= 0) isTableDic = true;\n }\n\n // 设置label是否显示\n let sLabel = label;\n if (formType.value === 's') {\n sLabel = appStore.searchFormLabel === true ? label : undefined;\n if (appStore.searchFormLabel !== true) ph = label;\n }\n\n const switchDefaultVal = ref('');\n const searchColClass = getSearchColClass(_index);\n switch (cType) {\n case 'blank':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n prop={field}\n key={field}>\n <div class=\"el-input__inner gv-form__item__inner-blank\">&nbsp;</div>\n </ElFormItem>\n </ElCol>\n );\n break;\n case 'divider':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={24}\n sm={24}\n md={24}\n lg={24}\n xl={24}>\n <GvDivider label={sLabel} />\n </ElCol>\n );\n break;\n case 'render':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n {render?.(model.value[field], field)}\n </ElFormItem>\n </ElCol>\n );\n break;\n case 'text':\n renders = visible ? (\n // span={this.colSpan} {span:16,offset:4}\n // xs={24} sm={12} md={8} lg={6} xl={4}\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInput\n type=\"text\"\n vref={field}\n name={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n maxlength={maxLen}\n size={size as ComponentSize}\n placeholder={ph}\n visible={visible}\n readonly={readonly}\n onBlur={blur}\n onFocus={focus}\n suffixIcon={suffixIcon}\n prefixIcon={prefixIcon}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'textarea':\n renders = visible ? (\n // span={this.colSpan} {span:16,offset:4}\n // xs={24} sm={12} md={8} lg={6} xl={4}\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInput\n vref={field}\n name={field}\n type=\"textarea\"\n v-model={model.value[field]}\n value={model.value[field]}\n size={size as ComponentSize}\n disabled={disabled}\n maxlength={maxLen}\n placeholder={ph}\n visible={visible}\n readonly={readonly}\n rows={rows}\n autosize={autosize}\n onBlur={blur}\n onFocus={focus}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'time':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvTimePicker\n v-model={model.value[field]}\n vref={field}\n name={field}\n disabled={disabled}\n editable={editables}\n placeholder={ph}\n isRange={isRange}\n rangeSeparator={rangeSeparator}\n // format={dateFormat}\n // value-format={valueFormat}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'date':\n case 'datetime':\n if (sDateType !== 'daterange2' && sDateType !== 'datetimerange2')\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <GvDatePicker\n v-model={model.value[field]}\n modelValue={model.value[field]}\n vref={field}\n data-name={field}\n data-align={'right'}\n type={sDateType}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={disabledDate}\n editable={editables}\n placeholder={ph}\n default-time={defaultTime}\n startPlaceholder={startPh}\n endPlaceholder={endPh}\n data-visible={visible}\n onChange={change}\n />\n </ElFormItem>\n </ElCol>\n ) : null;\n else\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <div\n class=\"gv-daterange__single\"\n style=\"width: 100%;\"\n onFocus={() => void 0}>\n <GvDatePicker\n v-model={model.value[field + '-start']}\n modelValue={model.value[field + '-start']}\n vref={field + '-start'}\n data-name={field + '-start'}\n data-align={'right'}\n type={sDateType === 'daterange2' ? 'date' : 'datetime'}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={disabledDate}\n editable={editables}\n placeholder={startPh}\n default-time={defaultTime}\n data-visible={visible}\n style={{ width: '96% !important' }}\n class=\"gv-datepicker-range-start\"\n onChange={(val) => handleDateRange2Change('s', val, field)}\n onFocus={(vm) => handleDateRange2Focus(vm)}\n onBlur={(vm) => handleDateRange2Blur(vm)}\n />\n <span class=\"gv-daterange__single-separator\">{rangeSeparator}</span>\n <GvDatePicker\n v-model={model.value[field + '-end']}\n modelValue={model.value[field + '-end'] as string}\n vref={field + '-end'}\n data-name={field + '-end'}\n data-align={'right'}\n type={sDateType === 'daterange2' ? 'date' : 'datetime'}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={(date) => {\n if (sDateType === 'daterange2') return date.getTime() <= new Date(model.value[field + '-start']).getTime() - 8.64e7;\n else return date.getTime() <= new Date(model.value[field + '-start']).getTime() - 8.64e7;\n }}\n editable={editables}\n placeholder={endPh}\n default-time={defaultTime}\n data-visible={visible}\n class=\"gv-datepicker-range-end\"\n onChange={(val) => handleDateRange2Change('e', val, field)}\n onFocus={(vm) => handleDateRange2Focus(vm)}\n onBlur={(vm) => handleDateRange2Blur(vm)}\n />\n </div>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'dic':\n switch (dicType) {\n case 'yxzt':\n if (typeof model.value[field] === 'object') switchDefaultVal.value = model.value[field].value ? model.value[field].value : '100201';\n else switchDefaultVal.value = model.value[field] ? model.value[field] : '100201';\n break;\n case 'sf':\n if (typeof model.value[field] === 'object') switchDefaultVal.value = model.value[field].value ? model.value[field].value : '100101';\n else switchDefaultVal.value = model.value[field] ? model.value[field] : '100101';\n break;\n }\n if (isTableDic === false && multiple === false && formType.value === 'e' && ops && ops.length === 2 && (dicType === 'sf' || dicType === 'yxzt'))\n // 当是编辑form并且字典内容只有2个以内时\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <GvSwitch\n value={switchDefaultVal.value}\n columnKey={field}\n disabled={disabled}\n target={dicType === 'yxzt' ? '100201' : '100101'}\n onChange={(val) => handleSwitchDictChange(val, field, dicType, cb)}></GvSwitch>\n </ElFormItem>\n </ElCol>\n ) : null;\n else if (isTableDic === false && multiple === false && formType.value === 'e' && ops && ops.length === 2)\n // 当是编辑form并且字典内容只有2个以内时\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElInput\n id={`${field}__a11y-anchor`}\n modelValue=\"\"\n readonly\n validateEvent={false}\n tabindex={-1}\n aria-hidden={true}\n style={{\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: 0,\n border: 0,\n clip: 'rect(0, 0, 0, 0)',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n }}\n />\n <ElRadioGroup\n aria-label={sLabel}\n name={field}\n v-model={model.value[field].value}\n onChange={(val) => handleRadioDictChange(val, field, dicType, cb)}>\n {ops.map((x) =>\n format[0] === 0 ? (\n <ElRadio\n value={x.c}\n disabled={disabled}\n onChange={(event) => handleRadioInput(event, field, x.c, model.value[field], disabled)}>\n {getLanguage(userStore.language, x)}\n </ElRadio>\n ) : (\n <ElRadioButton\n value={x.c}\n disabled={disabled}>\n {getLanguage(userStore.language, x)}\n </ElRadioButton>\n ),\n )}\n </ElRadioGroup>\n </ElFormItem>\n </ElCol>\n ) : null;\n else {\n // form dic\n let v: string | undefined;\n const vv = model.value[field];\n if (typeof vv === 'object')\n if (Array.isArray(vv))\n vv.forEach((x, index) => {\n if (x)\n if (v)\n if (x.label) v += ',' + x.label;\n else v += ',' + (showLabel?.[index] ? showLabel[index] : x);\n else if (x.label) v = x.label;\n else v = showLabel?.[index] ?? x;\n });\n else {\n if (vv) v = vv.label;\n }\n else v = vv;\n let toolText = v; // 提示的文本\n if (showLabel) toolText = showLabel as string;\n\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!v}\n content={toolText ? toolText + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvSelect\n v-model={model.value[field]}\n value={model.value[field]}\n label={label}\n showLabel={showLabel}\n vref={field}\n multiple={multiple}\n dicType={dicType ?? ''}\n size={size as ComponentSize}\n disabled={disabled}\n placeholder={ph}\n filtercode={filtercode}\n visible={visible}\n dicRemote={typeof dicRemote === 'function' ? dicRemote : undefined}\n cb={cb}\n clear={clear}\n isreload={isreload}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n }\n\n break;\n case 'number':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInputNumber\n vref={field}\n name={field}\n id={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n placeholder={ph}\n visible={visible}\n size={size as ComponentSize}\n min={min}\n max={max}\n step={step}\n precision={precision}\n onBlur={blur}\n onFocus={focus}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'layer':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvCascader\n vref={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n placeholder={ph}\n size={size as ComponentSize}\n lazy={lazy}\n multiple={multiple}\n lazyLoad={lazyLoad}\n visible={visible}\n options={options}\n onBlur={blur}\n onChange={change}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n default:\n break;\n }\n if (createRow === true) return <el-row>{renders}</el-row>;\n else return renders;\n };\n\n const getItems = computed(() => {\n const res: VNode[] = [];\n props.formList.forEach((item: FormItem, index: number) => {\n res.push(renderFormItem(item, index));\n });\n return res;\n });\n\n // todo: 计算最大高度 需要增加弹出框判断逻辑,\n const getMaxHeight = (sRootEl: HTMLElement | undefined) => {\n if (isEditContainer.value) sMaxHeight.value = 0;\n else if (props.scroller === false) sMaxHeight.value = 0;\n else if (!isScrollbar.value)\n if (!isAnchor.value) {\n if (sRootEl && typeof sRootEl.closest === 'function') {\n const tabPane = sRootEl?.closest('.el-tabs') as HTMLElement | undefined;\n if (tabPane) {\n const offsetTop = tabPane.classList.contains('el-tabs--left') ? 215 : 275;\n sMaxHeight.value = document.documentElement.clientHeight - (sRootEl?.offsetTop || 0) - (tabPane?.offsetTop || 0) - offsetTop;\n } else {\n const dialog = sRootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = sRootEl?.closest('.gv-drawer');\n if (!drawer) sMaxHeight.value = document.documentElement.clientHeight - sRootEl.offsetTop - 75;\n // console.log(this.sMaxHeight);\n } else sMaxHeight.value = document.documentElement.clientHeight - sRootEl.offsetTop - 265;\n }\n }\n } else sMaxHeight.value = 0;\n else sMaxHeight.value = 0;\n };\n\n const clearFormValidate = () => {\n formRefs.value[props.refForm]?.clearValidate();\n };\n\n /**\n * @todo: 设置form表单样式\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-07 19:35:14\n */\n const setFormStyle = () => {\n let formStyle1;\n // console.log(props.formStyle);\n if (props.formStyle) {\n formStyle1 = props.formStyle;\n let width = formStyle1.width || 0;\n let height = formStyle1.height || 0;\n // fixme: 判断width是否是百分比\n // if (width.lastIndexOf('%') !== -1)\n // throw new Error('HtForm - [form-style] : 不支持width定义百分比');\n // if (height.lastIndexOf('%') !== -1)\n // throw new Error('HtForm - [form-style] : 不支持height定义百分比');\n // width = Math.round(this.getParentWidth * (parseInt(width) / 100) * 100) / 100;\n\n if (width.lastIndexOf('%') === -1) {\n // width固定值\n width = parseInt(width);\n if (width !== 0) {\n if (width < 762)\n // xs\n colSpanNums.value = 24;\n else if (width < 992)\n // sm\n colSpanNums.value = 12;\n else if (width < 1200)\n // md\n colSpanNums.value = 8;\n else if (width < 1920)\n // lg\n colSpanNums.value = 6;\n else colSpanNums.value = 4;\n\n rootNodeStyle.value['width'] = width + 'px';\n }\n if (height !== '100%' && height !== 0) {\n height = parseInt(height);\n rootNodeStyle.value['height'] = height + 'px';\n }\n } else rootNodeStyle.value['width'] = width;\n } else {\n const rootEl = instance?.vnode?.el as HTMLElement;\n const clientWidth = rootEl?.clientWidth;\n // console.log(clientWidth);\n if (clientWidth !== 0) {\n if (clientWidth < 762)\n // xs\n colSpanNums.value = 24;\n else if (clientWidth < 992)\n // sm\n colSpanNums.value = 12;\n else if (clientWidth < 1200)\n // md\n colSpanNums.value = 8;\n else if (clientWidth < 1920)\n // lg\n colSpanNums.value = 6;\n else colSpanNums.value = 4;\n\n rootNodeStyle.value['width'] = clientWidth + 'px';\n }\n }\n styles.value = formStyle1;\n };\n\n /**\n * @todo: form init\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 07:47:06\n * @param {*} type\n */\n const init = async (type: string) => {\n // alert(type);\n const formModel = {};\n const formRule = {};\n props.formList.forEach((item: FormItem) => {\n let v;\n if (type === 'create') v = item.value;\n else v = model.value[item.field] === undefined ? item.value : model.value[item.field];\n formModel[item.field] = v;\n if (item.dateType === 'daterange2' || item.dateType === 'datetimerange2')\n if (Array.isArray(v)) {\n formModel[item.field + '-start'] = v[0] === 'null' ? undefined : v[0];\n formModel[item.field + '-end'] = v[1] === 'null' ? undefined : v[1];\n } else {\n formModel[item.field + '-start'] = '';\n formModel[item.field + '-end'] = '';\n }\n\n formRule[item.field] = getItemRules(item);\n // 设置 value属性为响应式数据\n item.value = v;\n });\n // 设置form model\n model.value = formModel;\n if (type === 'create') rules.value = formRule;\n else if (type === 'watch') rules.value = formRule;\n\n await nextTick();\n setFormStyle();\n // console.log(formRefs.value);\n clearFormValidate();\n };\n\n const difference = (newVal, oldVal) => {\n let diff = false;\n for (const key in newVal) {\n const fieldObj = newVal[key];\n const oldObj = oldVal[key];\n if (fieldObj === undefined) continue;\n else if (!oldObj) {\n diff = true;\n break;\n } else {\n const fieldObjKeys = Object.keys(fieldObj);\n for (const key2 in fieldObjKeys)\n if (\n fieldObjKeys[key2] === 'label' ||\n fieldObjKeys[key2] === 'hidden' ||\n fieldObjKeys[key2] === 'disabled' ||\n fieldObjKeys[key2] === 'format' ||\n fieldObjKeys[key2] === 'readonly' ||\n fieldObjKeys[key2] === 'filtercode' ||\n fieldObjKeys[key2] === 'multiple' ||\n fieldObjKeys[key2] === 'showLabel' ||\n fieldObjKeys[key2] === 'visible'\n )\n if (fieldObjKeys[key2] === 'format') {\n if (fieldObj[fieldObjKeys[key2]][0] !== oldObj[fieldObjKeys[key2]][0]) {\n diff = true;\n break;\n }\n if (fieldObj[fieldObjKeys[key2]][1] !== oldObj[fieldObjKeys[key2]][1]) {\n diff = true;\n break;\n }\n if (fieldObj[fieldObjKeys[key2]][2] !== oldObj[fieldObjKeys[key2]][2]) {\n diff = true;\n break;\n }\n // //if (!_.isEqual(fieldObj[fieldObjKeys[key2]], oldObj[fieldObjKeys[key2]])) {\n // diff = true;\n // break;\n // }\n } else if (fieldObj[fieldObjKeys[key2]] !== oldObj[fieldObjKeys[key2]]) {\n // console.log(key2);\n // console.log(fieldObj[fieldObjKeys[key2]]);\n // console.log(oldObj[fieldObjKeys[key2]]);\n diff = true;\n break;\n }\n }\n\n // if (!_.isEqual(newVal[key], oldVal[key]))\n }\n // console.log(diff);\n return diff;\n };\n\n // watch\n watch(\n () => props.formList,\n (nextProps, prevProps) => {\n // formList\n if (Array.isArray(nextProps) && Array.isArray(prevProps) && nextProps.length !== prevProps.length) init('watch');\n else if (difference(nextProps, originFormList.value)) init('watch');\n },\n {\n deep: true,\n },\n );\n watch(\n () => sMaxHeight.value,\n (newVal) => {\n // sMaxHeight\n if (isScrollbar.value === false)\n if (isAnchor.value === false) sMaxHeight.value = newVal;\n else sMaxHeight.value = 0;\n else sMaxHeight.value = 0;\n },\n );\n\n // @created hook\n // console.log(slots.default);\n const firstSlot = slots.default?.()?.[0];\n if (typeof firstSlot?.type === 'object' && 'name' in firstSlot.type && firstSlot?.type?.name === 'GvSearchBar') {\n formType.value = 's';\n const slotProps = firstSlot.props as Recordable | undefined;\n if (slotProps?.expand === false) searchFieldsCollapsed.value = false;\n } else formType.value = 'e';\n // 解析formList\n originFormList.value = JSON.parse(JSON.stringify(props.formList));\n init('create');\n // 判断是否是dialog弹出框中的form\n const parentNode = instance?.parent;\n // console.log(parentNode.$?.type?.name);\n if (parentNode && parentNode.type?.name === 'ElDialog') isDialog.value = true;\n else isDialog.value = false;\n\n // @mounted hook\n onMounted(() => {\n nextTick(() => {\n // get root element\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n\n // 确保 rootEl 是 HTMLElement 并且有 closest 方法\n if (rootEl && typeof rootEl.closest === 'function') {\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n const dialogBody = rootEl.closest('.gv-drawer__body__inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n else {\n const dialogBody2 = rootEl.closest('.gv-dialog__body__inner');\n if (dialogBody2) isScrollbar.value = hasScrollbar(dialogBody2);\n }\n if (rootEl.closest('.gv-edit__container')) isEditContainer.value = true;\n\n // 计算maxheight;\n getMaxHeight(rootEl);\n\n window.addEventListener('resize', () => getMaxHeight(rootEl));\n }\n });\n });\n\n // @render\n return () => (\n <div\n class={prefixCls}\n style={{ ...rootNodeStyle }}>\n {getEditBar.value}\n {getDivider.value}\n <Transition name=\"el-zoom-in-top\">\n <div\n v-show={isShow.value}\n key=\"gv-form-body\"\n class={`${prefixCls}-collapse__inner`}>\n <ElForm\n ref={setFormRef}\n model={model.value}\n size={formSize.value}\n inline={false}\n label-position={labelPosition.value}\n label-width={`${props.labelWidth}px`}\n rules={rules.value}\n style={{\n ...styles.value,\n width: '100%',\n maxHeight: sMaxHeight.value === 0 ? undefined : sMaxHeight.value + 'px',\n }}>\n <ElRow\n ref-form={props.refForm}\n style={{ display: 'flex', flexWrap: 'wrap' }}>\n {getItems.value}\n {slots.default?.() && <div style={{ flex: 1, minWidth: 1 }}>{slots.default?.()}</div>}\n </ElRow>\n </ElForm>\n </div>\n </Transition>\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-form';\n .#{$prefixCls} {\n width: 100%;\n\n .#{$prefixCls}-form-editbar {\n // editbar bottom\n // border-bottom:1px solid #d9d9d9;\n // editbar top\n // border-top:1px solid #d9d9d9;\n // border-top: 1.5px solid var(--primaryColorHover, $primaryColorHover);\n padding: 0 0 2px;\n margin-top: -3px;\n }\n\n .#{$prefixCls}-collapse-wrap {\n overflow: hidden;\n }\n\n .#{$prefixCls}-collapse__inner {\n transform-origin: center top;\n }\n\n .el-form {\n overflow: hidden auto;\n }\n\n .el-col {\n min-height: 32px;\n margin-bottom: 12px;\n\n &[type='FIXED'] {\n height: 32px !important;\n }\n\n :deep(.el-form-item) {\n margin-bottom: 0;\n\n .el-form-item__label {\n height: 30px; // 32px\n padding-right: $modulePadding;\n //font-size: $textSizeSecondary;\n font-weight: $fontWeight;\n line-height: 30px; // 32px\n\n .label-wrap {\n display: inline-block;\n max-width: calc(100% - 10px);\n\n .el-input__inner {\n padding: 0 8px;\n border-color: $borderColor;\n\n & + span.el-input__suffix {\n right: 0;\n }\n }\n }\n }\n\n .el-form-item__content {\n line-height: 29px;\n height: 29px;\n .el-radio-group {\n .el-radio-button--small .el-radio-button__inner {\n padding: 7px;\n }\n\n .el-radio__label {\n //font-size: $appTextSize;\n }\n }\n\n .el-range-editor {\n width: 100%;\n }\n\n .el-input__prefix {\n left: 2px;\n }\n\n .#{$prefixCls}__item__inner-blank {\n width: 100%;\n height: 20px;\n line-height: 5px;\n border: 0;\n }\n\n // 日期范围选择\n .el-range-editor.el-input__inner {\n padding: 3px 5px;\n }\n\n // 日期范围选择\n .el-range__close-icon {\n width: 20px;\n }\n\n .gv-daterange__single {\n display: inline-flex !important;\n height: 32px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n\n &:focus,\n &.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n .el-input__prefix {\n left: 2px;\n }\n\n .el-input__suffix {\n right: 2px;\n }\n\n .el-input__inner {\n padding-right: 2px;\n padding-left: 25px;\n border: 0;\n }\n\n .gv-daterange__single-separator {\n height: 32px;\n //font-size: $appTextSize;\n line-height: 32px;\n }\n }\n\n .el-form-item__error {\n margin-top: 2px;\n transform: scale(0.9);\n transform-origin: 0 50%;\n }\n }\n\n .el-select {\n width: 100%;\n\n .el-select__tags {\n height: 24px;\n overflow-y: auto;\n\n .el-select__input {\n height: inherit;\n padding-left: 15px;\n }\n }\n }\n\n .el-autocomplete {\n width: 100%;\n }\n\n .el-textarea {\n display: block;\n\n .el-textarea__inner {\n padding: 0 10px;\n\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n overflow-y: auto;\n font-family: inherit;\n }\n\n .el-input__count {\n right: 6px;\n line-height: 1;\n }\n }\n\n .el-input-number {\n width: 100%;\n\n .el-input__inner {\n text-align: left !important;\n }\n\n .el-input-number__increase:hover ~ .el-input .el-input__inner:not(.is-disabled),\n .el-input-number__decrease:hover ~ .el-input .el-input__inner:not(.is-disabled) {\n border-color: $borderColor;\n }\n }\n\n .desc-icon {\n padding: 6px;\n font-size: 18px;\n vertical-align: middle;\n }\n\n .desc-text {\n //font-size: $textSizeSecondary;\n }\n\n &.is-required .el-form-item__label {\n // color: #f5222d;\n color: #606266;\n }\n }\n }\n .el-form--label-top {\n .el-form-item {\n .el-select,\n .el-input,\n .el-radio-group {\n width: 90% !important;\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvForm from './src/GvForm.vue';\nconst GvFormPlugin = {\n install(app: App): void {\n app.component(GvForm.name ?? 'GvForm', GvForm);\n },\n};\nexport default GvFormPlugin;\n\nexport { GvForm };\n","<!--\n * @title: collapsed sidebar component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-03 13:48:02\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 11:18:57\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { Expand, Fold } from '@element-plus/icons-vue';\n import { ElIcon } from 'element-plus';\n import { computed, onMounted, unref } from 'vue';\n import { propTypes } from '../../utils/gv.propTypes';\n\n defineOptions({\n name: 'GvHamburger', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('hamburger');\n\n const appStore = useAppStore();\n const collapse = computed(() => appStore.getCollapseMenus);\n\n // set quick keys\n\n // @method\n // load dict\n const loadDict = async () => {\n try {\n await appStore.loadAllDict();\n } catch {\n // empty\n }\n };\n // load division\n const loadDictDivision = async () => {\n try {\n await appStore.loadDictDivision();\n } catch {\n // empty\n }\n };\n\n const toggleCollapse = () => {\n const collapsed = unref(collapse);\n appStore.setCollapseMenus(!collapsed);\n };\n\n // @created\n // @mounted\n onMounted(async () => {\n // reload dict if needed\n const currentDict = appStore.dict;\n const currentReloadDict = appStore.isLoadDict;\n if (!currentDict || Object.keys(currentDict).length === 0) await loadDict();\n else if (+currentReloadDict === 1) await loadDict();\n const currentDictDivision = appStore.dictDivision;\n if (currentDictDivision && currentDictDivision.length === 0) await loadDictDivision();\n });\n</script>\n<template>\n <div\n :class=\"prefixCls\"\n @click=\"toggleCollapse\">\n <div class=\"trigger\">\n <ElIcon\n :size=\"20\"\n :class=\"`${prefixCls}__icon`\">\n <Expand\n v-if=\"!collapse\"\n :class=\"`${prefixCls}__icon`\"\n :style=\"{ color: color }\" />\n <Fold\n v-else\n :class=\"`${prefixCls}__icon`\"\n :style=\"{ color: color }\" />\n </ElIcon>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-hamburger';\n .#{$prefixCls} {\n position: relative;\n z-index: 3;\n line-height: $navHeadHeight;\n background-color: #fff;\n &:hover {\n background-color: rgb(0 0 0 / 3%);\n }\n .trigger {\n display: inline-block;\n line-height: 1px;\n cursor: pointer;\n transition: color 0.3s ease;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvHamburger from './src/GvHamburger.vue';\nconst GvHamburgerPlugin = {\n install(app: App): void {\n app.component(GvHamburger.name ?? 'GvHamburger', GvHamburger);\n },\n};\nexport default GvHamburgerPlugin;\n\nexport { GvHamburger };\n","<!--\n * @title: locale lang dropdown\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-03-25 11:43:51\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:09:46\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useLocale } from '@/hook/web/useLocale';\n import { useStyle } from '@/hook/web/useStyle';\n import { useLocaleStore } from '@/store/modules/locale';\n import { useUserStore } from '@/store/modules/user';\n import { computed, unref } from 'vue';\n import { useRouter } from 'vue-router';\n import { propTypes } from '../../utils/gv.propTypes';\n\n import { ElDropdown, ElDropdownItem, ElDropdownMenu } from 'element-plus';\n\n defineOptions({\n name: 'GvLangSelect', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n defineProps({\n className: propTypes.string.def(''),\n });\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('lang-select');\n\n const userStore = useUserStore();\n const localeStore = useLocaleStore();\n const langMap = computed(() => localeStore.getLocaleMap);\n const currentLang = computed(() => localeStore.getCurrentLocale);\n\n const router = useRouter();\n\n const handleSetLang = async (lang): Promise<void> => {\n if (lang === unref(currentLang).lang) return;\n\n const { switchLocale } = useLocale();\n userStore.setLanguage(lang);\n await switchLocale(lang);\n\n router.go(0);\n };\n</script>\n\n<template>\n <ElDropdown\n :class=\"prefixCls\"\n trigger=\"click\"\n class=\"international\"\n @command=\"handleSetLang\">\n <div>\n <GvIcon\n :class-name=\"`international-icon ${className}`\"\n icon-name=\"language\" />\n </div>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem\n v-for=\"item in langMap\"\n :key=\"item.lang\"\n :command=\"item.lang\">\n {{ item.name }}\n </ElDropdownItem>\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n</template>\n","import type { App } from 'vue';\nimport GvLangSelect from './src/GvLangSelect.vue';\nconst GvLangSelectPlugin = {\n install(app: App): void {\n app.component(GvLangSelect.name ?? 'GvLangSelect', GvLangSelect);\n },\n};\nexport default GvLangSelectPlugin;\n\nexport { GvLangSelect };\n","<!--\n * @title: popover component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 14:04:51\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:33:39\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { GvIcon } from '@@/GvIcon';\n import { ElPopover } from 'element-plus';\n import { computed, defineComponent, ref, watch, type PropType } from 'vue';\n import type { TPopoverPlacement, TPopoverTrigger } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('popover');\n\n export default defineComponent({\n name: 'GvPopover',\n props: {\n vref: {\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: false,\n },\n title: {\n type: String,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n placement: {\n type: String as PropType<TPopoverPlacement>,\n default: 'bottom-start',\n },\n trigger: {\n type: String as PropType<TPopoverTrigger>,\n default: 'click',\n },\n tablePopover: {\n type: Boolean,\n default: false,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n columnType: {\n type: String,\n default: undefined,\n },\n },\n\n emits: ['update:visible', 'show', 'hide'],\n\n setup(props, { emit, slots }) {\n // @data\n const isShow = ref<boolean>(props.visible);\n\n // @watch\n watch(\n () => props.visible,\n (val) => {\n isShow.value = val;\n },\n );\n\n // @computed\n const popClass = computed(() => (props.tablePopover ? `${prefixCls} table-popover` : prefixCls));\n\n // @methods\n\n const handleUpdateVisible = (val: boolean) => {\n isShow.value = val;\n emit('update:visible', val);\n };\n\n const handleShow = () => {\n emit('show', props.columnProp);\n };\n\n const handleHide = () => {\n emit('hide', props.columnProp);\n };\n\n const handlePopoverWrapper = (e: MouseEvent) => {\n e.stopPropagation();\n // 关闭其他 popover\n // if (this.tablePopover === true)\n // this.$refs.array.forEach(element => {\n\n // });\n\n // this.$emit('click', e, this.columnProp);\n };\n\n const getReferenceSlot = () => (\n <span class=\"gv-popover-reference\">\n {props.label || props.title}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"\n />\n </span>\n );\n\n // @render\n return () => (\n <div\n class={prefixCls}\n onClick={handlePopoverWrapper}>\n <ElPopover\n ref={props.vref || 'gv-popover'}\n visible={isShow.value}\n onUpdate:visible={handleUpdateVisible}\n title={props.title}\n placement={props.placement}\n trigger={props.trigger}\n showArrow={true}\n popperClass={`gv-popover ${popClass.value}`}\n transition=\"el-zoom-in-top\"\n onAfter-enter={handleShow}\n onAfter-leave={handleHide}\n // append-to-body={false}\n // popper-options={{ // fixme: 增加该配置会导致各种问题,兼容性不行\n // boundariesElement: 'body',\n // // gpuAcceleration: true,\n // // positionFixed: true,\n // removeOnDestroy: true\n // }}\n >\n {{\n default: () => slots.default?.(),\n reference: () => getReferenceSlot(),\n }}\n </ElPopover>\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-popover';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvPopover from './src/GvPopover.vue';\n\nconst GvPopoverPlugin = {\n install(app: App): void {\n app.component(GvPopover.name ?? 'GvPopover', GvPopover);\n },\n};\nexport default GvPopoverPlugin;\n\nexport { GvPopover };\n","<!--\n * @title: radio component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 11:52:20\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:34:53\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadio, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TRadioValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio');\n\n export default defineComponent({\n name: 'GvRadio',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TRadioValue>,\n default: undefined,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TRadioValue>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const radioValue = ref(props.value);\n const radioSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n const handleUpdate = (val: TRadioValue) => {\n radioValue.value = val;\n emit('update:modelValue', val);\n };\n\n const handleChange = (val: TRadioValue) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElRadio\n modelValue={radioValue.value}\n onUpdate:modelValue={handleUpdate}\n name={props.name}\n value={props.value ?? props.label}\n disabled={props.disabled}\n border={props.border}\n onChange={handleChange}\n size={radioSize.value}\n class={prefixCls}>\n {slots.default?.()}\n </ElRadio>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio';\n .#{$prefixCls} {\n padding: 5px 0;\n margin-right: 15px;\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadio from './src/GvRadio.vue';\n\nconst GvRadioPlugin = {\n install(app: App): void {\n app.component(GvRadio.name ?? 'GvRadio', GvRadio);\n },\n};\nexport default GvRadioPlugin;\n\nexport { GvRadio };\n","<!--\n * @title: radio button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:18:46\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:35:23\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadioButton } from 'element-plus';\n import { defineComponent, ref, watch } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio-button');\n\n export default defineComponent({\n name: 'GvRadioButton',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean],\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['update:modelValue', 'change'],\n setup(props, { slots }) {\n // @data\n const radioValue = ref(props.value);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n // const handleUpdate = (val) => {\n // radioValue.value = val;\n // emit('update:modelValue', val);\n // };\n\n // @render\n return () => (\n <ElRadioButton\n value={props.value ?? props.label}\n modelValue={radioValue.value}\n name={props.name}\n disabled={props.disabled}\n class={prefixCls}>\n {slots.default?.()}\n </ElRadioButton>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio-button';\n .#{$prefixCls} {\n padding: 5px 0;\n margin-right: 15px;\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadioButton from './src/GvRadioButton.vue';\n\nconst GvRadioButtonPlugin = {\n install(app: App): void {\n app.component(GvRadioButton.name ?? 'GvRadioGroup', GvRadioButton);\n },\n};\nexport default GvRadioButtonPlugin;\n\nexport { GvRadioButton };\n","<!--\n * @title: radio group component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:10:40\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 09:03:41\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadioGroup, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TRadioGroupValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio-group');\n\n export default defineComponent({\n name: 'GvRadioGroup',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TRadioGroupValue>,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n },\n\n // @emits\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const radioValue = ref<TRadioGroupValue | undefined>(props.value ?? undefined);\n const radioGroupSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n const handleUpdate = (val: TRadioGroupValue) => {\n radioValue.value = val;\n emit('update:modelValue', val);\n };\n\n const handleChange = (val: TRadioGroupValue) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElRadioGroup\n class={prefixCls}\n aria-label={props.label}\n modelValue={radioValue.value}\n onUpdate:modelValue={handleUpdate}\n size={radioGroupSize.value}\n onChange={handleChange}>\n {slots.default?.()}\n </ElRadioGroup>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio-group';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadioGroup from './src/GvRadioGroup.vue';\n\nconst GvRadioGroupPlugin = {\n install(app: App): void {\n app.component(GvRadioGroup.name ?? 'GvRadioGroup', GvRadioGroup);\n },\n};\nexport default GvRadioGroupPlugin;\n\nexport { GvRadioGroup };\n","<!--\n * @title: row component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 09:49:52\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:36:24\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRow } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('row');\n\n export default defineComponent({\n name: 'GvRow',\n props: {\n gutter: {\n type: Number,\n default: 0,\n },\n tag: {\n type: String as PropType<string>,\n default: 'div',\n },\n },\n setup(props, { slots }) {\n return () => (\n <ElRow\n class={prefixCls}\n gutter={props.gutter}\n tag={props.tag}>\n {slots.default?.()}\n </ElRow>\n );\n },\n });\n</script>\n","import type { App } from 'vue';\nimport GvRow from './src/GvRow.vue';\n\nconst GvRowPlugin = {\n install(app: App): void {\n app.component(GvRow.name ?? 'GvRow', GvRow);\n },\n};\nexport default GvRowPlugin;\n\nexport { GvRow };\n","<!--\n * @title: screenfull\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:15:43\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-11-17 10:55:25\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { useFullscreen } from '@vueuse/core';\n import { propTypes } from '../../utils/gv.propTypes';\n import { useStyle } from '@/hook/web/useStyle';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('screenfull');\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const { toggle, isFullscreen } = useFullscreen();\n\n const toggleFullscreen = () => {\n toggle();\n };\n</script>\n\n<template>\n <div\n :class=\"prefixCls\"\n @click=\"toggleFullscreen\">\n <GvIcon :icon-name=\"isFullscreen ? 'exit-fullscreen' : 'fullscreen'\" />\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-screenfull';\n .#{$prefixCls} {\n display: inline-block;\n line-height: var(--right-item-line-height);\n height: var(--right-item-height);\n vertical-align: 10px;\n cursor: pointer;\n fill: #5a5e66;\n }\n</style>\n","import type { App } from 'vue';\nimport GvScreenFull from './src/GvScreenFull.vue';\n// Define the install method on the GvButton component\nconst GvScreenFullPlugin = {\n install(app: App): void {\n app.component(GvScreenFull.name ?? 'GvScreenFull', GvScreenFull);\n },\n};\nexport default GvScreenFullPlugin;\n\nexport { GvScreenFull };\n","<!--\n * @title: search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:02:29\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:14:30\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText } from '@@/utils';\n import { computed, defineComponent, getCurrentInstance, inject, nextTick, onMounted, ref } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('search-bar');\n export default defineComponent({\n name: 'GvSearchBar',\n props: {\n expand: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n\n const visible = ref(props.expand);\n const searchFieldsCollapsed = inject<{ value: boolean }>('searchFieldsCollapsed', ref(true));\n // const formList = inject('formList') as Recordable[];\n const refForm = inject('refForm') as string;\n const instance = getCurrentInstance(); // get current vnode\n let formNode: any = instance;\n while (formNode && formNode.type?.name !== 'ElForm') formNode = formNode?.parent;\n\n const fieldList = ref<any[]>([]);\n const searchFormRows = appStore.searchFormRows;\n const showDefaultRow = searchFormRows === 1 ? 4 : 8;\n // @mounted\n onMounted(() => {\n nextTick(() => {\n // console.log(formNode.exposed.fields);\n fieldList.value = formNode.exposed.fields;\n });\n });\n // const gvSearchExpand = ref(null);\n // const gvSearchShrink = ref(null);\n\n // @methods\n /**\n * @todo: expand search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:45:03\n */\n const expandFields = () => {\n searchFieldsCollapsed.value = false;\n visible.value = false;\n };\n /**\n * @todo: shrink search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:48:18\n */\n const shrinkFields = () => {\n searchFieldsCollapsed.value = true;\n visible.value = true;\n };\n /**\n * @todo: create search button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:17:17\n */\n const createSearchBar = computed(() => {\n if (!fieldList.value?.length) return null;\n const searchBar: any[] = [];\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const defaultSlot = slots.default?.();\n if (defaultSlot) {\n defaultSlot.forEach((vnode) => {\n const propsData = vnode.props;\n const type = vnode.type;\n if (typeof type === 'object' && 'name' in type && type.name === 'GvButton') {\n let text = getVNodeText(vnode);\n let searchBtnFlag = false;\n\n if (text === t('searchBar.search')) {\n if (buttonQuick) text = t('searchBar.search2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.search');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.seek')) {\n if (buttonQuick) text = t('searchBar.seek2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.seek');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.query')) {\n if (buttonQuick) text = t('searchBar.query2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.query');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.reset')) {\n if (buttonQuick) text = t('searchBar.reset2');\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.reset');\n if (buttonIcon) propsData.icon = 'el-icon-refreshLeft';\n propsData.bizType = 'reset';\n }\n }\n\n if (searchBtnFlag && propsData && propsData.type === undefined) propsData.type = 'primary';\n\n if (propsData) propsData.refForm = refForm;\n }\n searchBar.push(vnode);\n });\n\n // if (this.expand) {\n // add: 判断是否需要增加展开按钮 2022-04-22\n const fieldList2 = fieldList.value.filter((x) => {\n if (x.$el.hidden !== true) return true;\n });\n\n if (fieldList2.length > showDefaultRow) {\n let expandText = `${t('searchBar.expand')}`;\n if (buttonQuick) expandText = `${t('searchBar.expand')}(E)`;\n let shrinkText = `${t('searchBar.shrink')}`;\n if (buttonQuick) shrinkText = `${t('searchBar.shrink')}(E)`;\n const expand = (\n <GvButton\n link={true}\n bizType=\"expand\"\n visible={visible.value}\n onClick={expandFields}>\n {expandText} &nbsp;\n <GvIcon\n iconType=\"el\"\n iconName=\"arrowDown\"\n />\n </GvButton>\n );\n searchBar.push(expand);\n const shrink = (\n <GvButton\n link={true}\n bizType=\"shrink\"\n visible={!visible.value}\n onClick={shrinkFields}>\n {shrinkText} &nbsp;\n <GvIcon\n iconType=\"el\"\n iconName=\"arrowUp\"\n />\n </GvButton>\n );\n searchBar.push(shrink);\n }\n // }\n }\n return searchBar;\n });\n // @created\n\n // @render\n return () => <div class={prefixCls}>{createSearchBar.value}</div>;\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-search-bar';\n .#{$prefixCls} {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n padding-top: 0px;\n margin: 0 1px 6px 0;\n }\n</style>\n","import type { App } from 'vue';\nimport GvSearchBar from './src/GvSearchBar.vue';\n// Define the install method on the GvButton component\nconst GvSearchBarPlugin = {\n install(app: App): void {\n app.component(GvSearchBar.name ?? 'GvSearchBar', GvSearchBar);\n },\n};\nexport default GvSearchBarPlugin;\n\nexport { GvSearchBar };\n","import { ref, unref } from 'vue';\nimport { findPath } from '../../utils/gv.tree';\n\ntype OnlyOneChildType = AppRouteRecordRaw & { noShowingChildren?: boolean };\n\ninterface HasOneShowingChild {\n oneShowingChild?: boolean;\n onlyOneChild?: OnlyOneChildType;\n}\n\nexport const getAllParentPath = <T = Recordable>(treeData: T[], path: string) => {\n const menuList = findPath(treeData, (n) => n.path === path) as AppRouteRecordRaw[];\n return (menuList || []).map((item) => item.path);\n};\n\nexport const hasOneShowingChild = (parent: AppRouteRecordRaw, children: AppRouteRecordRaw[] = []): HasOneShowingChild => {\n const onlyOneChild = ref<OnlyOneChildType>();\n\n const showingChildren = children.filter((v) => {\n const meta = v.meta ?? {};\n if (meta.hidden) return false;\n else {\n // Temp set(will be used if only has one showing child)\n onlyOneChild.value = v;\n return true;\n }\n });\n\n // When there is only one child router, the child router is displayed by default\n if (showingChildren.length === 1)\n return {\n oneShowingChild: true,\n onlyOneChild: unref(onlyOneChild),\n };\n\n // Show parent if there are no child router to display\n if (!showingChildren.length) {\n onlyOneChild.value = { ...parent, path: '', noShowingChildren: true };\n return {\n oneShowingChild: true,\n onlyOneChild: unref(onlyOneChild),\n };\n }\n\n return {\n oneShowingChild: false,\n onlyOneChild: unref(onlyOneChild),\n };\n};\n","import { useI18n } from '@/hook/web/useI18n';\nimport type { RouteMeta } from 'vue-router';\nimport { GvIcon } from '../../../GvIcon';\nexport const useRenderMenuTitle = () => {\n const renderMenuTitle = (meta: RouteMeta) => {\n const { t } = useI18n();\n if (!meta) {\n return <span class=\"v-menu__title overflow-hidden overflow-ellipsis whitespace-nowrap\">No Title</span>;\n }\n const { title = 'Please set title', icon } = meta;\n\n return icon ? (\n <>\n <GvIcon\n iconName={meta.icon || ''}\n className=\"sub-el-icon\"></GvIcon>\n <span class=\"v-menu__title overflow-hidden overflow-ellipsis whitespace-nowrap\">{t(title as string)}</span>\n </>\n ) : (\n <span class=\"v-menu__title overflow-hidden overflow-ellipsis whitespace-nowrap\">{t(title as string)}</span>\n );\n };\n\n return {\n renderMenuTitle,\n };\n};\n","/*\n * @title: render menu item - useRenderMenuItem\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-07-15 15:07:28\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 14:34:07\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { useStyle } from '@/hook/web/useStyle';\nimport { isUrl, pathResolve } from '@@/utils';\nimport { ElMenuItem, ElSubMenu } from 'element-plus';\nimport { unref } from 'vue';\nimport { hasOneShowingChild } from '../helper';\nimport { useRenderMenuTitle } from './useRenderMenuTitle';\nconst { getPrefixCls } = useStyle();\nconst prefixCls = getPrefixCls('submenu');\n\nconst { renderMenuTitle } = useRenderMenuTitle();\n\nexport const useRenderMenuItem = (menuMode) =>\n // allRouters: AppRouteRecordRaw[] = [],\n {\n const renderMenuItem = (routers: AppRouteRecordRaw[], parentPath = '/') => {\n if (!routers || !routers.length) return null;\n return routers\n .filter((v) => !v.meta?.hidden)\n .map((v) => {\n const meta = v.meta ?? {};\n const { oneShowingChild, onlyOneChild } = hasOneShowingChild(v, v.children);\n const fullPath = isUrl(v.path) ? String(v.path) : pathResolve(parentPath, v.path); // getAllParentPath<AppRouteRecordRaw>(allRouters, v.path).join('/')\n if (oneShowingChild && (!onlyOneChild?.children || onlyOneChild?.noShowingChildren) && !meta?.alwaysShow) {\n return (\n <ElMenuItem index={onlyOneChild ? pathResolve(fullPath, onlyOneChild.path) : fullPath}>\n {{\n default: () => renderMenuTitle(onlyOneChild ? (onlyOneChild.meta ?? meta) : meta),\n }}\n </ElMenuItem>\n );\n } else {\n return (\n <ElSubMenu\n index={fullPath}\n teleported\n class=\"nest-menu\"\n popperClass={unref(menuMode) === 'vertical' ? `${prefixCls}-popper--vertical` : ''}>\n {{\n title: () => renderMenuTitle(meta),\n default: () => renderMenuItem(v.children!, fullPath),\n }}\n </ElSubMenu>\n );\n }\n });\n };\n return {\n renderMenuItem,\n };\n };\n","<!--\n * @title: left menus\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-30 16:12:28\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 15:14:41\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useAppStore } from '@/store/modules/app';\n import { usePermsStore } from '@/store/modules/perms';\n import { ElMenu, ElScrollbar } from 'element-plus';\n import { computed, defineComponent, unref, type PropType } from 'vue';\n import { useRenderMenuItem } from './components/useRenderMenuItem';\n\n import { useStyle } from '@/hook/web/useStyle';\n import { useRouter } from 'vue-router';\n import { isUrl } from '../../utils';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('sidebar');\n\n export default defineComponent({\n name: 'GvSidebar',\n props: {\n menuSelect: {\n type: Function as PropType<(index: string) => void>,\n default: undefined,\n },\n },\n setup(props) {\n const appStore = useAppStore();\n const layout = computed(() => appStore.getLayout);\n const { push, currentRoute } = useRouter();\n const permStore = usePermsStore();\n const menuMode = computed((): 'vertical' | 'horizontal' => {\n const vertical: LayoutType[] = ['default', 'topLeft', 'cutMenu'];\n\n if (vertical.includes(unref(layout))) return 'vertical';\n else return 'horizontal';\n });\n\n const routers = computed(() => (unref(layout) === 'cutMenu' ? permStore.getRouters : permStore.getRouters));\n\n // console.log(routers.value);\n\n const collapse = computed(() => appStore.getCollapseMenus);\n\n const leftMenuUniqueOpened = computed(() => appStore.getLeftMenuUniqueOpened);\n\n const activeMenu = computed(() => {\n const { meta, path } = unref(currentRoute);\n // if set path, the sidebar will highlight the path you set\n if (meta.activeMenu) return meta.activeMenu as string;\n\n return path;\n });\n\n const menuSelect = (index: string) => {\n props.menuSelect?.(index);\n\n // 自定义事件\n if (isUrl(index)) {\n window.open(index);\n return;\n }\n push(index);\n };\n\n const renderMenu = () => (\n <ElMenu\n defaultActive={unref(activeMenu)}\n mode={unref(menuMode)}\n collapse={unref(layout) === 'top' || unref(layout) === 'cutMenu' ? false : unref(collapse)}\n uniqueOpened={unref(layout) === 'top' ? false : unref(leftMenuUniqueOpened)}\n backgroundColor=\"var(--left-menu-bg-color)\"\n textColor=\"var(--left-menu-text-color)\"\n activeTextColor=\"var(--left-menu-text-active-color)\"\n popperClass={unref(menuMode) === 'vertical' ? `${prefixCls}-popper--vertical` : `${prefixCls}-popper--horizontal`}\n onSelect={menuSelect}>\n {{\n default: () => {\n const { renderMenuItem } = useRenderMenuItem(menuMode);\n // console.log('renderMenu', routers.value);\n return renderMenuItem(unref(routers));\n },\n }}\n </ElMenu>\n );\n const renderMenuWrap = () => {\n if (unref(layout) === 'top') return renderMenu();\n else return <ElScrollbar>{renderMenu()}</ElScrollbar>;\n };\n return () => (\n <div\n id=\"gv-sidebar\"\n class={[\n `${prefixCls} ${prefixCls}__${unref(menuMode)}`,\n 'h-[100%] overflow-hidden flex-col bg-[var(--left-menu-bg-color)]',\n {\n 'w-[var(--left-menu-min-width)]': unref(collapse) && unref(layout) !== 'cutMenu',\n 'w-[var(--left-menu-max-width)]': !unref(collapse) && unref(layout) !== 'cutMenu',\n },\n ]}>\n {renderMenuWrap()}\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-sidebar';\n\n .#{$prefixCls} {\n position: relative;\n transition: width var(--transition-time-02);\n\n :deep(.#{$elNamespace}-menu) {\n width: 100% !important;\n border-right: none;\n --el-menu-bg-color: var(--left-menu-bg-color);\n --el-menu-text-color: var(--left-menu-text-color);\n --el-menu-hover-text-color: var(--left-menu-text-active-color);\n --el-menu-active-color: var(--left-menu-text-active-color);\n --el-menu-hover-bg-color: var(--left-menu-hover-bg-color);\n\n // 设置选中时子标题的颜色\n .is-active {\n & > .#{$elNamespace}-sub-menu__title {\n color: var(--left-menu-text-active-color) !important;\n }\n }\n\n // 设置子菜单悬停的高亮和背景色\n .#{$elNamespace}-sub-menu__title,\n .#{$elNamespace}-menu-item {\n &:hover {\n color: var(--left-menu-text-active-color) !important;\n background-color: var(--left-menu-bg-color) !important;\n }\n }\n\n // 设置选中时的高亮背景和高亮颜色\n .#{$elNamespace}-menu-item.is-active {\n color: var(--left-menu-text-active-color) !important;\n background-color: var(--left-menu-bg-active-color) !important;\n\n &:hover {\n background-color: var(--left-menu-bg-active-color) !important;\n }\n }\n\n .#{$elNamespace}-menu-item.is-active {\n position: relative;\n }\n\n // 设置子菜单的背景颜色\n .#{$elNamespace}-menu {\n .#{$elNamespace}-sub-menu__title {\n background-color: var(--left-menu-bg-color) !important;\n }\n .#{$elNamespace}-menu-item:not(.is-active) {\n background-color: var(--left-menu-item-bg-light-color) !important;\n }\n }\n }\n\n // 折叠时的最小宽度\n :deep(.#{$elNamespace}-menu--collapse) {\n width: var(--left-menu-min-width);\n\n & > .is-active,\n & > .is-active > .#{$elNamespace}-sub-menu__title {\n position: relative;\n background-color: var(--left-menu-collapse-bg-active-color) !important;\n }\n }\n\n // 折叠动画的时候,就需要把文字给隐藏掉\n :deep(.horizontal-collapse-transition) {\n .#{$prefixCls}__title {\n display: none;\n }\n }\n\n // 水平菜单\n &__horizontal {\n height: calc(var(--top-tool-height)) !important;\n\n :deep(.#{$elNamespace}-menu--horizontal) {\n height: calc(var(--top-tool-height));\n border-bottom: none;\n // 重新设置底部高亮颜色\n & > .#{$elNamespace}-sub-menu.is-active {\n .#{$elNamespace}-sub-menu__title {\n border-bottom-color: var(--el-color-primary) !important;\n }\n }\n\n .#{$elNamespace}-menu-item.is-active {\n position: relative;\n\n &::after {\n display: none !important;\n }\n }\n\n .#{$prefixCls}__title {\n /* stylelint-disable-next-line */\n max-height: calc(var(--top-tool-height) - 2px) !important;\n /* stylelint-disable-next-line */\n line-height: calc(var(--top-tool-height) - 2px);\n }\n }\n }\n }\n</style>\n\n<style lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-sidebar-popper';\n\n .#{$prefixCls}--vertical,\n .#{$prefixCls}--horizontal {\n // 设置选中时子标题的颜色\n .is-active {\n & > .el-sub-menu__title {\n color: var(--left-menu-text-active-color) !important;\n }\n }\n\n // 设置子菜单悬停的高亮和背景色\n .el-sub-menu__title,\n .el-menu-item {\n &:hover {\n color: var(--left-menu-text-active-color) !important;\n background-color: #545658 !important;\n }\n }\n\n // 设置选中时的高亮背景\n .el-menu-item.is-active {\n position: relative;\n background-color: var(--left-menu-bg-active-color) !important;\n\n &:hover {\n background-color: var(--left-menu-bg-active-color) !important;\n }\n }\n }\n\n $submenu-prefix-cls: '#{$gvNamespace}-submenu-popper';\n\n // 设置子菜单溢出时滚动样式\n .#{$submenu-prefix-cls}--vertical {\n max-height: 100%;\n overflow-y: auto;\n\n &::-webkit-scrollbar {\n width: 6px;\n background-color: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgb(144 147 153 / 30%);\n border-radius: 4px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSidebar from './src/GvSidebar.vue';\n// Define the install method on the GvButton component\nconst GvSidebarPlugin = {\n install(app: App): void {\n app.component(GvSidebar.name ?? 'GvSidebar', GvSidebar);\n },\n};\nexport default GvSidebarPlugin;\n\nexport { GvSidebar };\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFYAAABaCAYAAAAilKGMAAAACXBIWXMAAAZ2AAAGdgEpJm+AAAAKDGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYTZhNjM5NjhhLCAyMDI0LzAzLzA2LTExOjUyOjA1ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmQxNjAxODBkLTVlZmUtZjc0MS1iY2RhLTdjMDBjNTc4ZTVkMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDE1ZDUxNC05YzkxLTQwNTYtYTgzNS05YjZlYmRlOTQ5ZmEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0iRTU1OUFCRUUwQ0NBMTg5NjNBREJDRTREOTQ1Q0M5MDkiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB0aWZmOkltYWdlV2lkdGg9IjYzNiIgdGlmZjpJbWFnZUxlbmd0aD0iNjYwIiB0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb249IjIiIHRpZmY6U2FtcGxlc1BlclBpeGVsPSIzIiB0aWZmOlhSZXNvbHV0aW9uPSIxNDQvMSIgdGlmZjpZUmVzb2x1dGlvbj0iMTQ0LzEiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6RXhpZlZlcnNpb249IjAyMzEiIGV4aWY6Q29sb3JTcGFjZT0iNjU1MzUiIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSI2MzYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSI2NjAiIHhtcDpDcmVhdGVEYXRlPSIyMDI0LTExLTI5VDEyOjQ4OjMzKzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyNC0xMS0yOVQxMjo1MToyNCswODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyNC0xMS0yOVQxMjo1MToyNCswODowMCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmZiNWYzMGIyLWJmODgtNDQ3My1iMDk0LWIzMGUzYjkyMzczZiIgc3RFdnQ6d2hlbj0iMjAyNC0xMS0yOVQxMjo0OToxNyswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI1LjExIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gaW1hZ2UvanBlZyB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImRlcml2ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImNvbnZlcnRlZCBmcm9tIGltYWdlL2pwZWcgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MDg4Y2NiMi05NDFlLTQ1YmItOGZhZi02YjA5Mjc0M2Q0MDciIHN0RXZ0OndoZW49IjIwMjQtMTEtMjlUMTI6NDk6MTcrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNS4xMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NWQxNWQ1MTQtOWM5MS00MDU2LWE4MzUtOWI2ZWJkZTk0OWZhIiBzdEV2dDp3aGVuPSIyMDI0LTExLTI5VDEyOjUxOjI0KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjUuMTEgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmZiNWYzMGIyLWJmODgtNDQ3My1iMDk0LWIzMGUzYjkyMzczZiIgc3RSZWY6ZG9jdW1lbnRJRD0iRTU1OUFCRUUwQ0NBMTg5NjNBREJDRTREOTQ1Q0M5MDkiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0iRTU1OUFCRUUwQ0NBMTg5NjNBREJDRTREOTQ1Q0M5MDkiLz4gPHRpZmY6Qml0c1BlclNhbXBsZT4gPHJkZjpTZXE+IDxyZGY6bGk+ODwvcmRmOmxpPiA8cmRmOmxpPjg8L3JkZjpsaT4gPHJkZjpsaT44PC9yZGY6bGk+IDwvcmRmOlNlcT4gPC90aWZmOkJpdHNQZXJTYW1wbGU+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+WfjB/QAAOnxJREFUeJztvXe4XFd19//Z+9Tp5famq2rJVnE3trGxMcY0h2KMDSb04NBCDIQQQgukvKTwQAKEEkIS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\"","<!--\n * @title: sidebar logo\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-15 14:11:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 11:46:47\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { computed, onMounted, ref, unref, watch } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('logo');\n\n const appStore = useAppStore();\n\n const show = ref(true);\n const title = computed(() => appStore.getTitle);\n const layout = computed(() => appStore.getLayout);\n const collapseMenus = computed(() => appStore.getCollapseMenus);\n\n watch(\n () => collapseMenus.value,\n (collapse: boolean) => {\n if (unref(layout) === 'topLeft' || unref(layout) === 'cutMenu') {\n show.value = true;\n return;\n }\n show.value = !collapse;\n },\n );\n\n watch(\n () => layout.value,\n (layout) => {\n if (layout === 'top' || layout === 'cutMenu') show.value = true;\n else if (unref(collapseMenus)) show.value = false;\n else show.value = true;\n },\n );\n\n onMounted(() => {\n if (unref(collapseMenus)) show.value = false;\n });\n</script>\n\n<template>\n <div>\n <router-link\n :class=\"[prefixCls, layout !== 'default' ? `${prefixCls}__Top` : '', 'flex !h-[var(--logo-height)] items-center cursor-pointer pl-[8px] relative decoration-none overflow-hidden']\"\n to=\"/\">\n <img\n src=\"@/assets/imgs/logo.png\"\n class=\"w-[calc(var(--logo-height)-10px)] h-[calc(var(--logo-height)-10px)]\" />\n <div\n v-if=\"show\"\n :class=\"[\n 'block whitespace-nowrap ml-[45px] mr-[0px] mt-[-25px] mb-[0px] text-[16px] font-bold',\n {\n 'text-[var(--logo-title-text-color)]': layout === 'default',\n 'text-[var(--top-header-text-color)]': layout === 'topLeft' || layout === 'top' || layout === 'cutMenu',\n },\n ]\">\n {{ title }}\n </div>\n </router-link>\n </div>\n</template>\n<style lang=\"scss\" scoped></style>\n","import type { App } from 'vue';\nimport GvSidebarLogo from './src/GvSidebarLogo.vue';\n// Define the install method on the GvButton component\nconst GvSidebarLogoPlugin = {\n install(app: App): void {\n app.component(GvSidebarLogo.name ?? 'GvSidebarLogo', GvSidebarLogo);\n },\n};\nexport default GvSidebarLogoPlugin;\n\nexport { GvSidebarLogo };\n","<!--\n * @title: table bar component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:46:02\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 14:20:53\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { getVNodeName, getVNodeText } from '@@/utils';\n import { defineComponent, getCurrentInstance, type VNode } from 'vue';\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('table-bar');\n export default defineComponent({\n name: 'GvTableBar',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @data\n const appStore = useAppStore();\n const instance = getCurrentInstance();\n const { t } = useBridgeI18n();\n // @watch\n\n // @methods\n const createTableBar = () => {\n const tableBar: VNode[] = [];\n const defaultSlots = slots.default?.();\n if (defaultSlots) {\n const parentNode = instance?.parent;\n const refForm = parentNode?.attrs['ref-form'];\n\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const childrenNodes = (defaultSlots[0].children as VNode[]) || [];\n childrenNodes.forEach((vnode: VNode) => {\n const propsData = vnode.props || {};\n if (getVNodeName(vnode) === 'GvButton') {\n const text = getVNodeText(vnode);\n if (text.indexOf(t('tableBar.save')) !== -1 || text.indexOf(t('tableBar.add')) !== -1 || text.indexOf(t('tableBar.append')) !== -1 || text.indexOf(t('tableBar.create')) !== -1) {\n if (text === t('tableBar.add') && buttonQuick) {\n propsData.text = t('tableBar.add2');\n propsData.otext = text;\n } else propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-add';\n propsData.bizType = 'save';\n } else if (propsData.bizType === 'export') {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-daochu1';\n propsData.text = text;\n } else if (text.indexOf(t('tableBar.refresh')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-shuaxin';\n propsData.bizType = 'refresh';\n propsData.text = t('tableBar.refresh');\n } else if (text.indexOf(t('tableBar.templateDownload')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-xiazaidaorumoban1x';\n propsData.bizType = 'downloadTemplate';\n } else if (text.indexOf(t('tableBar.dispatch')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-winfo-icon-zhipai';\n propsData.bizType = 'dispatch';\n propsData.text = text;\n } else if (text.indexOf(t('tableBar.assign')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zhipai';\n propsData.bizType = 'dispatch';\n propsData.text = text;\n } else if (text.indexOf(t('tableBar.calculate')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jisuan';\n propsData.text = text;\n propsData.bizType = 'calculate';\n } else if (text.indexOf(t('tableBar.trace')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiankongguanli';\n propsData.text = text;\n propsData.bizType = 'trace';\n } else if (text.indexOf(t('tableBar.receive')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-piliangbianji1';\n propsData.text = text;\n propsData.bizType = 'receive';\n } else if (propsData.bizType === 'import') {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-daoru2';\n propsData.text = text;\n propsData.bizType = 'import';\n } else if (text.indexOf(t('tableBar.generate')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zujian';\n propsData.text = text;\n propsData.bizType = 'generate';\n } else if (text.indexOf(t('tableBar.pay')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-yingshoukuan';\n propsData.text = text;\n propsData.bizType = 'pay';\n } else if (text.indexOf(t('tableBar.check')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-xuanze';\n propsData.text = text;\n propsData.bizType = 'check';\n } else if (text.indexOf(t('tableBar.reject')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-bohui';\n propsData.text = text;\n propsData.bizType = 'reject';\n } else if (text.indexOf(t('tableBar.approve')) !== -1 || text.indexOf(t('tableBar.audit')) !== -1) {\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-shenpi2';\n propsData.text = text;\n propsData.bizType = 'approve';\n } else if (text.indexOf(t('tableBar.logging')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-rizhi1';\n propsData.bizType = 'logging';\n } else if (text.indexOf(t('tableBar.select')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-chaxun';\n propsData.bizType = 'search';\n }\n // else if (text.indexOf('派') !== -1) {\n // // propsData.text = text;\n // propsData.icon = 'el-icon-finished';\n // propsData.bizType = 'confirm';\n // }\n else if (text.indexOf(t('tableBar.detail')) !== -1 || text.indexOf(t('table.list')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-mingxi';\n propsData.bizType = 'detail';\n } else if (text.indexOf(t('tableBar.withdraw')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-fanhui5';\n propsData.bizType = 'withdraw';\n } else if (text.indexOf(t('tableBar.submit')) !== -1 || text.indexOf('提报') !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-tijiao';\n propsData.bizType = 'submit';\n } else if (text.indexOf(t('tableBar.delete')) !== -1 || text.indexOf(t('tableBar.cancel')) !== -1 || text.indexOf(t('tableBar.cancel1')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-delete';\n propsData.bizType = 'delete';\n } else if (text.indexOf(t('tableBar.change')) !== -1 || text.indexOf(t('tableBar.update')) !== -1 || text.indexOf(t('tableBar.modify')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-edit-outline';\n propsData.bizType = 'update';\n } else if (text.indexOf(t('tableBar.sync')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-tongbu1';\n propsData.bizType = 'update';\n } else if (text.indexOf(t('tableBar.untop')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-quxiaozhiding1';\n propsData.bizType = 'top';\n } else if (text.indexOf(t('tableBar.top')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zhiding1';\n propsData.bizType = 'top';\n } else if (text.indexOf(t('tableBar.deserum')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-quxiaozhiding';\n propsData.bizType = 'top';\n } else if (text.indexOf(t('tableBar.unitPrice')) !== -1) {\n if (buttonIcon)\n // propsData.text = text;\n propsData.icon = 'iconfont gv-icon-jiangjinguize';\n else if (text.indexOf(t('tableBar.essence')) !== -1) {\n // propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-zhiding';\n propsData.bizType = 'top';\n propsData.text = text;\n }\n } else if (text.indexOf(t('tableBar.relieve')) !== -1 || text.indexOf(t('tableBar.unbind')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiekou1';\n propsData.bizType = 'unbind';\n } else if (text.indexOf(t('tableBar.bind')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiekoushuoming';\n propsData.bizType = 'bind';\n } else if (text.indexOf(t('tableBar.confirm')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-tianshenpi';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.notify')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-huodong';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.payment')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-jiage';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.transfer')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'iconfont gv-icon-fanhui5';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.putaway')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-top';\n propsData.bizType = 'confirm';\n } else if (text.indexOf(t('tableBar.soldOut')) !== -1) {\n propsData.text = text;\n if (buttonIcon) propsData.icon = 'el-icon-bottom';\n propsData.bizType = 'confirm';\n }\n propsData.refForm = refForm;\n } else if (getVNodeName(vnode) === 'ElDropdown') {\n const firstChild = vnode?.children?.[0];\n const text = getVNodeText(firstChild);\n propsData.text = text;\n propsData.icon = firstChild?.props.icon || '';\n }\n tableBar.push(vnode);\n });\n }\n return tableBar || [];\n };\n // console.log(tableBar);\n\n // @mounted\n\n // @render\n return () => (props.visible ? <div class={prefixCls}>{createTableBar()}</div> : null);\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-table-bar';\n .#{$prefixCls} {\n display: inline-block;\n height: 30px;\n padding-top: 3px;\n\n .el-dropdown {\n float: left;\n\n i {\n padding-right: 3px;\n color: var(--tableBarColor, $tableBarColor);\n\n & + span {\n margin-left: 3px;\n }\n }\n }\n\n :deep(.el-button) {\n float: left;\n height: 25px;\n padding: 2px 8px;\n margin-bottom: 2px;\n margin-left: 2px;\n color: var(--tableBarColor, $tableBarColor);\n text-align: left;\n background: #fff !important;\n border: 0;\n\n i {\n padding-right: 3px;\n color: var(--tableBarColor, $tableBarColor);\n\n & + span {\n margin-left: 3px;\n }\n }\n\n &:hover {\n background-color: rgb(0 82 156 / 5%) !important;\n }\n }\n\n .el-button.is-disabled {\n color: $textColor;\n\n :deep(i) {\n color: $textColor;\n }\n }\n }\n</style>\n","<!--\n * @title: tag component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 14:43:04\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:37:24\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElTag, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, unref, type PropType } from 'vue';\n import type { TTagEffect, TTagType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tag');\n\n export default defineComponent({\n name: 'GvTag',\n props: {\n type: {\n type: String as PropType<TTagType>,\n default: 'primary',\n },\n closable: {\n type: Boolean,\n default: false,\n },\n effect: {\n type: String as PropType<TTagEffect>,\n default: 'light',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n round: {\n type: Boolean,\n default: false,\n },\n },\n\n // @emits\n emits: ['click', 'close'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const tagSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @methods\n\n const handleClick = (event: MouseEvent) => {\n emit('click', event);\n };\n\n const handleClose = (event: Event) => {\n emit('close', event);\n };\n\n // @render\n return () => (\n <ElTag\n type={props.type}\n size={tagSize.value}\n round={props.round}\n closable={props.closable}\n effect={props.effect}\n class={prefixCls}\n onClick={handleClick}\n onClose={handleClose}>\n {slots.default?.()}\n </ElTag>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tag';\n .#{$prefixCls} {\n }\n</style>\n","/*\n * @title: table utils\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-09 17:50:09\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 08:47:14\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\nimport type { FilterCondition, PageInfo } from '@@/GvTable/src/types';\nimport type { TableInstance } from 'element-plus';\nimport type { VNode } from 'vue';\nimport { message } from './gv.notify';\nimport { isEmpty, toHump, toLine } from './index';\n/**\n * @todo: page info condition\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 09:09:54\n * @param {PageInfo} pi\n */\nexport const appendPageInfo = (pi?: PageInfo): PageInfo => {\n const pageInfo: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n const currentpagenum = pi && pi['currentpagenum'] ? pi['currentpagenum'] : 1;\n const recordsperpage = pi && pi['recordsperpage'] ? pi['recordsperpage'] : 10;\n const countrows = pi && pi['countrows'] ? pi['countrows'] : 0;\n const totalpage = pi && pi['totalpage'] ? pi['totalpage'] : 0;\n pageInfo['currentpagenum'] = currentpagenum;\n pageInfo['recordsperpage'] = recordsperpage;\n pageInfo['countrows'] = countrows;\n pageInfo['totalpage'] = totalpage;\n return pageInfo;\n};\n\n/**\n * @todo: common query combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:08:33\n * @param {VNode} tabNode\n * @param {Recordable} filter\n */\nexport const combined = function (tabNode: VNode, filter: Recordable<any>): Recordable<FilterCondition | PageInfo> {\n const filterConditions: Recordable<FilterCondition | PageInfo> = {};\n if (!isEmpty(filter))\n Object.keys(filter).forEach((x: string) => {\n let val: string = '';\n let co = 'null';\n if (!isEmpty(filter[x])) {\n let sOp = '=';\n if (typeof filter[x] === 'object')\n if (Array.isArray(filter[x] as any[])) {\n // fixme: 增加多选字典 2022-08-01\n let coo = '';\n let labels = '';\n (filter[x] as any[]).forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else {\n const v = filter[x] as Recordable<any>;\n co = v.value;\n val = v.label;\n }\n val = val + '';\n if (val.indexOf(',') > 0) val = val.replace(/,/g, ',');\n\n if (val.indexOf(',') > 0) if (sOp !== 'in' && sOp !== 'not in') sOp = 'in';\n const ds = toLine(x);\n const condition: FilterCondition = {\n id: '',\n ds: '',\n va: '',\n co: '',\n op: 'like',\n ac: 'null',\n ki: 'text',\n };\n let type = 'text';\n if (type !== 'dic' && (x.indexOf('id') >= 0 || x.indexOf('Id') >= 0)) type = 'number';\n\n condition['id'] = x;\n condition['ds'] = ds;\n condition['va'] = val.trim();\n condition['co'] = co;\n condition['op'] = sOp || 'like';\n condition['ac'] = 'null';\n condition['ki'] = type;\n filterConditions[x] = condition;\n }\n });\n // 拼接 pageinfo条件\n if (tabNode) {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n pi['recordsperpage'] = tabNode.props?.['pageSize'] ?? 10;\n filterConditions['pageinfo'] = appendPageInfo(pi);\n }\n return filterConditions;\n};\n\n/**\n * @todo: form search combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:31:41\n * @param {FormItem} formList\n * @param {Recordable} filter\n * @param {VNode} tabNode\n */\nexport const searchCombined = (formList: FormItem[], filter: Recordable<any>, tabNode: TableInstance): Recordable<FilterCondition | PageInfo> => {\n const filterConditions: Recordable<FilterCondition | PageInfo> = {};\n // console.log(formList);\n for (const item of formList) {\n const type = item.type;\n if (type !== 'blank') {\n const condition: FilterCondition = {\n id: '',\n ds: '',\n va: '',\n co: '',\n op: 'like',\n ac: 'null',\n ki: 'text',\n };\n const { action, field, op = 'like', upper = false, showLabel, dateType } = item;\n if (action === 'ignore') continue;\n let val = filter[field];\n let co = 'null';\n if (isEmpty(val)) continue;\n // 对于日期范围选择\n if (Array.isArray(val)) if (isEmpty(val[0])) continue;\n // if (type !== 'dic' && (field.indexOf('id') >= 0 || field.indexOf('Id') >= 0))\n // type = 'number';\n // console.log(val);\n let sOp = op;\n if (type === 'dic') {\n if (Array.isArray(val)) {\n // fixme: 增加多选字典 2022-08-01\n let coo = '';\n let labels = '';\n (val as any[]).forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else if (showLabel) {\n // 单选字典\n co = val + '';\n val = showLabel;\n } else {\n const v = val as Recordable<any>;\n co = v.value;\n val = v.label;\n }\n\n sOp = '=';\n } else if (type === 'date' || type === 'datetime' || type === 'time') {\n if (op === 'like') sOp = '=';\n if (dateType === 'daterange' || dateType === 'datetimerange' || dateType === 'timerange' || dateType === 'monthrange') val = (val as any[]).join(',');\n } else if (type === 'number') sOp = '=';\n\n let sType = type;\n if (dateType === 'monthrange') sType = 'month';\n\n val = val + '';\n if (!action && val.indexOf(',') > 0) val = val.replace(/,/g, ',');\n\n if (val.indexOf(',') > 0) if (sOp !== 'in' && sOp !== 'not in') sOp = 'in';\n\n sOp = sOp.replace(/</gi, '&lt;');\n sOp = sOp.replace(/>/gi, '&gt;');\n let ds = toLine(field);\n // 多表关联判断是否带表别名 2022-06-23\n if (ds.indexOf('@') > 0) ds = ds.replace('@', '.');\n\n if (upper === true) {\n if (co && co !== 'null') co = co.toUpperCase();\n val = val.toUpperCase();\n // 将ds转为upper函数\n ds = 'upper(' + ds + ')';\n }\n\n condition['id'] = field;\n condition['ds'] = ds;\n condition['va'] = val.trim();\n condition['co'] = co;\n condition['op'] = sOp || 'like';\n condition['ac'] = action || 'null';\n condition['ki'] = sType || 'text';\n filterConditions[field] = condition;\n }\n }\n // 拼接 pageinfo条件\n if (tabNode) {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n pi['recordsperpage'] = (tabNode.$.props?.['pageSize'] as number) ?? 10;\n filterConditions['pageinfo'] = appendPageInfo(pi);\n }\n return filterConditions;\n};\n\n/**\n * @todo: save combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:43:03\n * @param {FormItem} formList\n * @param {Recordable} filter\n */\nexport const saveCombined = (formList: FormItem[], filter: Recordable<any>): Recordable<any> => {\n const filterConditions = {};\n\n try {\n for (const item of formList) {\n const type = item.type;\n if (type !== 'blank') {\n const { action, field, showLabel } = item;\n if (action === 'ignore') continue;\n let val = filter[field];\n let co = 'null';\n if (val === undefined || val === null) continue;\n if (type === 'dic')\n if (showLabel)\n if (Array.isArray(val)) {\n // 多选字典\n let coo = '';\n const labels = '';\n val.forEach((x) => {\n let v: string;\n if (typeof x === 'object') v = x.value;\n else v = x + '';\n if (coo) coo += ',' + v;\n else coo = v;\n });\n co = coo;\n val = labels;\n } else if (typeof val === 'object') {\n co = val.value;\n val = val.label;\n } else {\n co = val + '';\n val = showLabel;\n }\n else if (Array.isArray(val)) {\n // 多选字典\n let coo = '';\n let labels = '';\n val.forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else if (typeof val === 'object') {\n co = val.value;\n val = val.label;\n } else\n // if (typeof val !== 'object' && item.dicType.indexOf('t#') >= 0) {\n // Notify.message('[' + field + ']: 字典值设置不正确', 'error');\n // throw new Error('[' + field + ']: 字典值设置不正确');\n // }\n co = val;\n else {\n val = val + ''; // fixme: 对于id等数字,转换为字符类型,防止indexOf出错\n co = val + '';\n }\n if (co === null || co === undefined) {\n message('[' + field + ']: dict value is null', 'error');\n throw new Error('[' + field + ']: dict value is null');\n }\n if (!action && co.indexOf(',') > 0) co = co.replace(/,/g, ',');\n const ds = toHump(field);\n\n filterConditions[ds] = co;\n }\n }\n } catch (error) {\n console.log(error);\n throw new Error('combined data error:' + error);\n }\n return filterConditions;\n};\n","/*\n * @title: crud methods utils\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-04-25 15:07:35\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 13:38:52\n * @version: 1.0.7\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\nimport type { PageInfo } from '@@/GvTable/src/types/index';\nimport { useStorage } from '@@/hooks/web/useStorage';\nimport type { FormInstance, TableInstance } from 'element-plus';\nimport type { ComponentInternalInstance, VNode } from 'vue';\nimport { message } from './gv.notify';\nimport { appendPageInfo, combined, saveCombined, searchCombined } from './gv.table';\nimport { getVNodeName, isEmpty } from './index';\n/**\n * @todo: common fetch data\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:55:17\n * @param {function} fetch\n * @param {any} data\n */\nconst fetchData = async (fetch: AsyncFn, data: any): Promise<any> => {\n let result = {};\n await fetch(data).then((res) => {\n result = res.datas;\n });\n\n return result;\n};\n\n/**\n * @todo: common submit fetch data\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:39:01\n */\nconst submit = async (fetch: AsyncFn, data: any, hasMsg = true, msg?: string): Promise<any> => {\n let result = {};\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '操作成功';\n else msgs = 'Operate successfully';\n }\n await fetch(data).then((res) => {\n result = res.datas;\n if (hasMsg) message(msgs, 'success');\n });\n\n return result;\n};\n/**\n * @todo: common fetch table data(with pagination)\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:40:36\n */\nconst fetchTable = async (tabNode: any, fetch: AsyncFn, data: any) => {\n let result = {};\n const condition = combined(tabNode, data);\n if (tabNode) {\n tabNode.filterConditions = condition;\n tabNode.fetch = fetch;\n }\n if (tabNode) tabNode.startLoading();\n await fetch(condition)\n .then((res) => {\n result = res.datas;\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n if (tabNode) tabNode.stopLoading();\n return result;\n};\n\n/**\n * @todo: validate form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:42:22\n */\nconst checkForms = async (fmNodes: FormInstance[]) => {\n if (fmNodes === undefined || fmNodes === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = true;\n for (const fmNode of fmNodes) {\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n await fmNode2.component.exposed\n .validate()\n .then(() => {\n // todo\n })\n .catch(() => {\n // throw new Error(e);\n result = false;\n Promise.reject('The form failed validation');\n });\n }\n }\n\n return result;\n};\n\n/**\n * @todo: save form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:45:03\n */\nconst save = async (fmNode: FormInstance, fetch: AsyncFn, check = true, msg?: string) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = {};\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '保存成功';\n else msgs = 'Save OK.';\n }\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n if (check === false) {\n // 有数据的输入框拼接条件\n const props = fmNode2.props;\n const filter = props.model;\n // console.log(filter);\n // console.log(fmNode2);\n // console.log(formList);\n let conditions = {};\n try {\n conditions = saveCombined(formList, filter);\n await fetch(conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n } catch {\n message('form save failed', 'error');\n // console.log(error);\n return null;\n }\n } else\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 有数据的输入框拼接条件\n const props = fmNode2.props;\n const filter = props.model;\n // console.log(filter);\n // console.log(fmNode2);\n // console.log(formList);\n let conditions = {};\n try {\n conditions = saveCombined(formList, filter);\n await fetch(conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n } catch {\n message('form save failed', 'error');\n return;\n }\n })\n .catch(() => {\n // throw new Error(e);\n Promise.reject('The form failed validation');\n result = {};\n });\n }\n\n return result;\n};\n\n/**\n * @todo: update form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:49:05\n */\nconst update = async (fmNode: FormInstance, id: number, fetch: Async2Fn, check = true, msg?: string) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n if (isEmpty(id)) {\n message('pk is null', 'error');\n return false;\n }\n let result = {};\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '保存成功';\n else msgs = 'Save Ok.';\n }\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n if (check === false) {\n // 有数据的输入框拼接条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(fmNode2);\n const conditions = saveCombined(formList, filter);\n // console.log(conditions);\n\n await fetch(id, conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n } else\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 有数据的输入框拼接条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(fmNode2);\n const conditions = saveCombined(formList, filter);\n // console.log(conditions);\n await fetch(id, conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n })\n .catch(() => {\n result = {};\n });\n }\n\n return result;\n};\n\n/**\n * @todo: search for list with form and table\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:11:42\n */\nconst search = async (fmNode: FormInstance, tabNode: TableInstance, fetch: AsyncFn) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n if (tabNode === undefined || tabNode === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = {};\n const fmInnerNode = fmNode.$;\n const tabInnerNode = tabNode.$;\n const exposed = tabInnerNode.exposed as any;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n // 解析检索条件\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 拼接查询条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(formList);\n const filterConditions = searchCombined(formList, filter, tabNode);\n // console.log(filterConditions);\n // update: 保存查询条件、方法至table对象,为分页组件使用 2022-04-18\n\n exposed.filterConditions = filterConditions;\n exposed.fetch = fetch;\n exposed.startLoading();\n\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n // fixme: 清空列表search框内容 2022-04-21\n const tabChildList = (tabNode as any).subTree?.children || [];\n const searchInputNode = tabChildList.filter((x: VNode) => {\n if (getVNodeName(x) === 'gv-input') return true;\n });\n if (searchInputNode[0]) searchInputNode[0].inputValue = '';\n // fixme: 清空列表表头筛选框 2022-12-14\n const tableEl = tabNode.$el as HTMLElement;\n const tableHeader = tableEl.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const tableFixedHeader = tableEl.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n const columns = tableHeader?.querySelectorAll('.el-table__cell');\n const len = columns?.length || 0;\n for (let i = 0; i < len; i++) {\n const h = columns?.[i]?.querySelector('.render__header');\n if (h) if (h.children[0]) h.children[0].classList.remove('is-selected');\n }\n if (tableFixedHeader) {\n const columnsFixed = tableFixedHeader.querySelectorAll('.el-table__cell');\n const lenFixed = columnsFixed.length;\n for (let i = 0; i < lenFixed; i++) {\n const h = columnsFixed[i].querySelector('.render__header');\n if (h) if (h.children[0]) h.children[0].classList.remove('is-selected');\n }\n }\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n exposed.stopLoading();\n })\n .catch(() => {\n exposed.stopLoading();\n });\n }\n\n return result;\n};\n\n/**\n * @todo: search for list without form but with table\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:22:00\n * @param {*} tabNode\n * @param {*} fetch\n * @param {*} data\n */\nconst searchNoFm = async (tabNode: any, fetch: AsyncFn, data: any) => {\n if (tabNode === undefined || tabNode === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = {};\n const condition = combined(tabNode, data);\n // console.log(JSON.stringify(filterConditions));\n // update: 保存查询条件、方法至table对象,为分页组件使用 2022-04-18\n\n tabNode.filterConditions = condition;\n tabNode.fetch = fetch;\n tabNode.startLoading();\n await fetch(condition)\n .then((res) => {\n result = res.datas;\n // fixme: 清空列表search框内容 2022-04-21\n const tabChildList = (tabNode as any).subTree?.children || [];\n const searchInputNode = tabChildList.filter((x) => {\n if (x?.type?.name === 'gv-input') return true;\n });\n if (searchInputNode[0]) searchInputNode[0].inputValue = '';\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n tabNode.stopLoading();\n return result;\n};\n\n/**\n * @todo: jump to new page search\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:23:46\n * @param {*} tabNode\n * @param {*} filterConditions\n * @param {*} fetch\n * @param {*} pageInfo\n */\nconst toNewPageSearch = async (tabNode: ComponentInternalInstance | null, filterConditions: Recordable<any>, fetch: AsyncFn, pageInfo: PageInfo) => {\n if (filterConditions === undefined || filterConditions === null) {\n console.log('分页查询失败: 过滤条件为空', 'error');\n return false;\n }\n if (fetch === undefined || fetch === null) {\n message('Paging query failed: Request method is empty', 'error');\n return false;\n }\n let result: Recordable<any> = [];\n tabNode?.exposed?.startLoading();\n const sfc = filterConditions || {};\n if (sfc['pageinfo'] === undefined) sfc['pageinfo'] = appendPageInfo() as PageInfo;\n // 更新pageinfo\n sfc['pageinfo'].currentpagenum = pageInfo.currentpagenum;\n sfc['pageinfo'].recordsperpage = pageInfo.recordsperpage;\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n })\n .catch((error) => {\n console.log(error);\n });\n tabNode?.exposed?.stopLoading();\n return result;\n};\n\n/**\n * @todo: 转换单个结果集对象\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-27 10:11:53\n * @param {*} result\n */\nconst trans = (result) => result;\n\n/**\n * @todo: table insert row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:27:57\n * @param {*} searchData\n * @param {*} result\n */\nconst insertResult = (searchData: any, result: any) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n if (result === null || result === undefined)\n // Notify.message('结果对象为空', 'error');\n return false;\n\n if (Array.isArray(result)) searchData.records.splice(0, 0, ...result);\n else\n // if (searchData.records === undefined)\n // result['rownums'] = 0;\n // else\n // if (!searchData.records[0])\n // result['rownums'] = 0;\n // else\n // result['rownums'] = (searchData.records[0].rownums - 1);\n searchData.records.splice(0, 0, trans(result));\n\n return true;\n};\n\n/**\n * @todo: table update row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:28:33\n * @param {*} searchData\n * @param {*} result\n * @param {*} rownums\n */\nconst updateResult = (searchData: any, result: any, rownums: number) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n if (result === null || result === undefined)\n // Notify.message('结果对象为空', 'error');\n return false;\n if (Array.isArray(result)) searchData.records.splice(0, 0, ...result);\n else {\n const currentRowArr = searchData.records.filter((x: any) => {\n if (x.rownums === rownums) return true;\n });\n const currentRow = currentRowArr[0];\n Object.keys(result).forEach((x) => {\n if (x !== 'rownums') currentRow[x] = result[x];\n });\n }\n\n return true;\n};\n\n/**\n * @todo: table remove row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:29:10\n * @param {*} searchData\n * @param {*} index\n */\nconst removeResult = (searchData: any, index: number) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n searchData.records.splice(index, 1);\n // 设置总条数 - 1\n if (searchData.total) searchData.total = searchData.total - 1;\n return true;\n};\n\n/**\n * @todo: 从后端字典对象 { c, v, e, l1, l2 } 取当前语言展示文本\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-03 18:21:13\n * @param {Recordable} dictObj\n * @param {string} lang\n */\nconst getDictDisplayLabel = (dictObj: Recordable<any>, lang?: string | null): string => {\n if (!dictObj || typeof dictObj !== 'object') return '';\n const locale = lang || 'zh-CN';\n switch (locale) {\n case 'en':\n return dictObj.e ?? dictObj.e ?? dictObj.v ?? '';\n case 'l1':\n return dictObj.l1 ?? dictObj.l1 ?? dictObj.v ?? '';\n case 'l2':\n return dictObj.l2 ?? dictObj.l2 ?? dictObj.v ?? '';\n case 'zh-CN':\n default:\n return dictObj.v ?? dictObj.c ?? '';\n }\n};\n\n/**\n * @todo: table set form value\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:30:16\n * @param {*} formList\n * @param {*} rowData\n */\nconst setEditValue = (formList: FormItem[], rowData: Recordable<any>) => {\n // console.log(rowData);\n if (formList === null || formList === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (rowData === null || rowData === undefined) {\n message('Set data is null', 'error');\n return false;\n }\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang') || 'zh-CN';\n if (Object.keys(rowData).length !== 0)\n formList.forEach((x) => {\n const fieldValue = rowData[x.field];\n if (fieldValue !== undefined)\n if (x.type !== 'blank' && x.keep !== true)\n // const dicType = x.dicType;\n switch (x.type) {\n case 'text':\n case 'textarea':\n case 'number':\n if (fieldValue !== null && typeof fieldValue === 'object') x.value = fieldValue.c;\n else x.value = fieldValue;\n break;\n case 'date':\n if (x.dateType === 'daterange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'datetime':\n if (x.dateType === 'datetimerange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'time':\n if (x.dateType === 'timerange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'layer':\n if (Array.isArray(fieldValue)) x.value = fieldValue;\n else if (fieldValue) {\n const arr = fieldValue.split(',');\n // const arr = [1, '2', 'a'];\n const arr2 = arr.map((x) => {\n if (!isNaN(parseInt(x))) return x * 1;\n else return x;\n });\n x.value = arr2;\n // console.log(x.value);\n } else x.value = [];\n\n break;\n case 'dic':\n // console.log(rowData[x.field]);\n // if (dicType && dicType.indexOf('t#') !== -1)\n // x.value = rowData[x.field];\n // else {\n // fixme: 增加枚举字典类型赋值 2022-11-07\n if (x.dicType && x.dicType.indexOf('e#') >= 0) {\n if (typeof x.value !== 'object') {\n const enums = x.dicType.split('#');\n const items = enums[1].split(':');\n\n for (let i = 0; i < items.length; i++) {\n const itemChild = items[i].split('=');\n if (itemChild[0] === fieldValue + '') {\n x.value = fieldValue;\n x.showLabel = itemChild[1];\n break;\n }\n }\n }\n } else if (x.multiple)\n if (fieldValue !== null) {\n // 多选字典\n if (typeof fieldValue === 'object') {\n const dictObj = fieldValue;\n const c = dictObj.c;\n const v = getDictDisplayLabel(dictObj, lang);\n\n if (c) {\n const codes = c.split(',');\n const labels = v ? v.split(',') : [];\n x.value = codes.map((code: string, i: number) => ({\n value: code,\n label: labels[i] ?? code,\n }));\n x.showLabel = labels;\n } else {\n x.value = [];\n x.showLabel = [];\n }\n } else if (typeof fieldValue === 'string') {\n const c = fieldValue;\n if (c) {\n const op = [];\n c.split(',').forEach((x) => {\n const o: Recordable<any> = {};\n o.value = x;\n (op as Recordable<any>[]).push(o);\n });\n x.value = op;\n } else x.value = [];\n }\n } else x.value = fieldValue;\n else if (fieldValue !== null && typeof fieldValue === 'object') {\n const dictObj = fieldValue;\n const code = String(dictObj.c ?? '').trim();\n const label = getDictDisplayLabel(dictObj, lang).trim();\n if (!code && !label) {\n x.value = '';\n x.showLabel = '';\n } else {\n x.value = { value: code, label: label || code };\n x.showLabel = label || code;\n }\n } else x.value = fieldValue;\n\n break;\n default:\n x.value = fieldValue;\n break;\n }\n });\n // formList = newList;\n};\n\n/**\n * @todo: reset form edit\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:36:39\n * @param {FormItem[]} formList\n */\nconst resetEditValue = (formList: FormItem[]) => {\n if (formList === null || formList === undefined) {\n message('form object is null', 'error');\n return false;\n }\n formList.forEach((x) => {\n if (x.type !== 'blank' && x.keep !== true)\n switch (x.type) {\n case 'text':\n case 'textarea':\n case 'number':\n x.value = '';\n break;\n case 'date':\n x.value = '';\n break;\n case 'dic':\n x.value = '';\n x.showLabel = '';\n break;\n }\n });\n};\n\nconst crud = {\n fetchData,\n submit,\n fetchTable,\n save,\n update,\n search,\n searchNoFm,\n toNewPageSearch,\n insertResult,\n updateResult,\n removeResult,\n setEditValue,\n resetEditValue,\n checkForms,\n};\n\nexport { crud };\n","<!--\n * @title: table component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:32:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 18:08:00\n * @version: 1.0.9\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStorage } from '@/hook/web/useStorage';\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvDatePicker } from '@@/GvDatePicker';\n import { GvIcon } from '@@/GvIcon';\n import { GvInput } from '@@/GvInput';\n import { GvPopconfirm } from '@@/GvPopconfirm';\n import type { TPopoverPlacement } from '@@/GvPopover/src/types';\n import { GvTableBar } from '@@/GvTableBar';\n import GvTag from '@@/GvTag/src/GvTag.vue';\n import { debounce, hasClass, hasScrollbar, isEqual, toLine } from '@@/utils';\n import { crud } from '@@/utils/gv.crud';\n import { message } from '@@/utils/gv.notify';\n import { Operation, Refresh } from '@element-plus/icons-vue';\n import {\n ElButton,\n ElButtonGroup,\n ElCheckbox,\n ElDivider,\n ElPagination,\n ElPopover,\n ElRadio,\n ElRadioGroup,\n ElTable,\n ElTableColumn,\n ElTooltip,\n ElTree,\n useGlobalConfig,\n type ComponentSize,\n type TableColumnCtx,\n type TableInstance,\n } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, nextTick, onMounted, ref, unref, watch, type PropType, type VNode } from 'vue';\n import type { FilterCondition, PageInfo } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('table');\n /** 表头筛选 Popover:覆盖 EP 默认 150px,按内容自适应宽度 */\n const tableHeadFilterPopoverPopperStyle = {\n width: 'max-content',\n minWidth: '180px',\n maxWidth: 'min(420px, 90vw)',\n };\n export default defineComponent({\n name: 'GvTable',\n props: {\n refTable: {\n type: String,\n required: false,\n default: undefined,\n },\n tableHead: {\n type: Array as PropType<TableHeadItem[]>,\n required: true,\n default: () => [],\n },\n tableData: {\n type: Object as PropType<Recordable<any>>,\n required: false,\n default: () => {},\n },\n height: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n maxHeight: {\n type: [Number, String, undefined] as PropType<number | string | undefined>,\n required: false,\n default: undefined,\n },\n maxWidth: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n pageSize: {\n type: Number,\n required: false,\n default: 10,\n },\n rowClassName: {\n type: Function,\n required: false,\n default: () => {},\n },\n rowStyle: {\n type: Function,\n required: false,\n default: () => {},\n },\n spanMethod: {\n type: Function,\n required: false,\n default: () => {},\n },\n cellStyle: {\n type: Function,\n required: false,\n default: () => {},\n },\n // tableImport: {\n // type: Boolean,\n // required: false,\n // default: false\n // },\n // tableExport: {\n // type: Boolean,\n // required: false,\n // default: false\n // },\n tableType: {\n type: String,\n required: false,\n default: undefined,\n },\n tableSort: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n tableKit: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n tableBar: {\n type: Boolean,\n required: false,\n default: true,\n },\n border: {\n type: Boolean,\n required: false,\n default: true,\n },\n tableFetch: {\n type: Function,\n required: false,\n default: () => {},\n },\n multi: {\n // 是否多选\n type: Boolean,\n required: false,\n default: false,\n },\n layout: {\n type: String,\n required: false,\n default: 'total, sizes, prev, pager, next, jumper',\n },\n isShowPage: {\n type: Boolean,\n required: false,\n default: true,\n },\n total: {\n type: Boolean,\n required: false,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: 'default',\n },\n tableInit: {\n type: Boolean,\n required: false,\n default: false,\n },\n beforeImport: {\n type: Function,\n required: false,\n default: undefined,\n },\n tableFilter: {\n type: Object,\n required: false,\n default: undefined,\n },\n tableCb: {\n type: Function,\n required: false,\n default: undefined,\n },\n expandRowKeys: {\n type: Array,\n required: false,\n default: undefined,\n },\n limitHeight: {\n type: Boolean,\n required: false,\n default: true,\n },\n tableAction: {\n type: String,\n required: false,\n default: 'left',\n },\n tableActionIcon: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n emits: ['row-dblclick'],\n // emit\n setup(props, { slots, expose, emit, attrs }) {\n // @data\n const appStore = useAppStore();\n const userStore = useUserStore();\n const { getStorage } = useStorage('localStorage');\n const instance = getCurrentInstance();\n let lang = 'zh-CN';\n const sTableAction = appStore.tableAction || props.tableAction;\n const sTableActionIcon = appStore.tableActionIcon;\n const sTableConfirm = appStore.buttonConfirm;\n const detailPlacement: TPopoverPlacement = sTableAction === 'left' ? 'right-start' : 'left-start';\n let sTableType = props.tableType;\n let originTableHead: TableHeadItem[] = props.tableHead;\n let tableHeads: TableHeadItem[] = [];\n const vref = 'gv-table-' + props.refTable;\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n\n const sHeight = props.height;\n const sMaxHeight = ref(props.maxHeight);\n const sMaxWidth = ref(props.maxWidth || '100%');\n const loading = ref(false);\n let isEditTable = false; // 是否是编辑列表\n const pageInfo = ref<PageInfo>({\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n });\n const filterConditions: FilterCondition[] = [];\n let sPageSize = props.pageSize;\n\n const resultData = ref(props.tableData);\n const recordsList = ref(props.tableData?.records || []);\n const pageSizes = [10, 20, 50, 100, 200, 500];\n let filterHeads: string[] = []; // 表头Q过滤列缓存\n const popoverVisible = ref({}); // popover筛选使用\n const exportBtnDisabled = ref(true); // 导出按钮disabled\n const exportBtnLoading = ref(false); // 导出按钮loading\n const importBtnLoading = ref(false); // 导入按钮loading\n const tableSortMode = ref(1); // 列表默认排序方式\n const exportDialogShow = ref(false); // 导出列弹出框\n const importDialogShow = ref(false); // 导入弹出框\n const sTableBar = ref(props.tableBar); // 是否显示tablebar\n const gTableBar = appStore.tableBar;\n const tableSearchShow = ref(false); // 是否带有table search框\n const sTableSort = ref(props.tableSort); // 是否显示排序模式框\n const sTableKit = ref(props.tableKit); // 是否显示工具按钮\n const showPopoverDetail = null;\n const pageLayout = ref(props.layout);\n let actionWidth: number = 0; // 操作列宽度\n let transHash: Recordable<string> | null = null; // 列表列缓存\n const headColumn = ref<VNode[]>([]); // 列表列\n const headColumnInit = ref<VNode[]>([]);\n\n const columnSums: string[] = []; // 合计列\n const columnSumsDecimal: number[] = []; // 合计列位数\n const isIndeterminate = ref([]); // 表头筛选全选\n\n let isAnchor = false; // 是否锚点中列表\n let isScrollbar = false; // 是否dialog中有滚动条\n let isEditContainer = false; // 是否是editContainer标签内\n const columnTreeList = ref([]); // 列表显示、排序数组\n const columnCheckedKeys = ref<string[]>([]); // 列表显示、排序选中数组\n const storageKey = props.refTable + '-' + userStore.loginAccount; // localStorage存储列表字段key\n let lsTableHeads = '';\n let debounceSearch;\n const tableRefs = ref<Record<string, TableInstance | null>>({}); // 表单实例引用,默认空对象\n const tableRef = ref<TableInstance | null>(null); // ElForm 元素引用\n\n // @computed\n const tableSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n /**\n * @todo: pageinfo\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 11:15:00\n */\n const getPageInfo = computed((): PageInfo => {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n if (resultData.value && resultData.value.records !== undefined) {\n pi['currentpagenum'] = resultData.value.current;\n pi['totalpage'] = resultData.value.pages;\n // if (this.sPageSize)\n // pi['size'] = this.sPageSize;\n // else\n pi['recordsperpage'] = resultData.value.size;\n pi['countrows'] = resultData.value.total;\n }\n return pi;\n });\n\n // @method\n\n const setTableRef = (el: TableInstance | null) => {\n tableRef.value = el;\n if (el && props.refTable) tableRefs.value[vref] = el;\n };\n\n const difference = (newVal, oldVal) => {\n let diff = false;\n for (const key in newVal)\n if (!isEqual(newVal[key], oldVal[key])) {\n diff = true;\n break;\n }\n\n return diff;\n };\n\n /**\n * @todo: close all filter popover\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 13:17:27\n * @param {*} property\n */\n const closeAllPopover = (property?: string) => {\n const next = { ...popoverVisible.value };\n Object.keys(next).forEach((key) => {\n if (key !== property) next[key] = false;\n });\n popoverVisible.value = next;\n };\n\n const ensurePopoverKey = (propKey: string) => {\n if (popoverVisible.value[propKey] === undefined) popoverVisible.value = { ...popoverVisible.value, [propKey]: false };\n };\n\n const handlePopoverWrapper = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n /** 阻止表头/表格事件冒泡,避免点击筛选面板内输入框时关闭 Popover */\n const wrapPopoverFilterBody = (body: VNode) => (\n <div\n class=\"table-popover__content\"\n onMousedown={(e: MouseEvent) => e.stopPropagation()}\n onClick={(e: MouseEvent) => e.stopPropagation()}>\n {body}\n </div>\n );\n const getScrollLeft = () => {\n closeAllPopover();\n };\n\n const startLoading = () => {\n loading.value = true;\n };\n const stopLoading = () => {\n loading.value = false;\n };\n\n /**\n * @todo: calculate max height\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 16:16:19\n * @param {*} rootEl\n */\n const getMaxHeight = (rootEl: HTMLElement | undefined) => {\n if (props.limitHeight)\n if (!isEditContainer)\n if (!isScrollbar)\n if (!isAnchor) {\n if (props.tableType !== 'detail')\n if (props.tableType === 'import') sMaxHeight.value = undefined;\n else if (props.maxHeight)\n // if (this.sTableType === 'expand')\n // this.sMaxHeight = undefined;\n // else\n sMaxHeight.value = props.maxHeight;\n else {\n // tab table\n // const tabPane = this.$el.closest('.el-tabs');\n const tabPane = rootEl?.closest('.el-tab-pane');\n // alert(tabPane.clientHeight);\n if (tabPane) {\n // const offsetTop = tabPane.classList.contains('el-tabs--left') ? 235 : 295;\n if (props.isShowPage) sMaxHeight.value = tabPane.clientHeight - 135;\n else sMaxHeight.value = tabPane.clientHeight - 85;\n // sMaxHeight = document.documentElement.clientHeight - tabPane.offsetTop - offsetTop;\n const dialog = rootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = rootEl?.closest('.gv-drawer');\n if (drawer)\n // sMaxHeight = sMaxHeight + 30;\n sMaxHeight.value = undefined;\n } else sMaxHeight.value = undefined; // sMaxHeight = sMaxHeight + 30;\n } else {\n // common table\n const dialog = rootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = rootEl?.closest('.gv-drawer');\n // console.log(document.documentElement.clientHeight);\n // console.log(rootEl?.offsetTop);\n if (!drawer) sMaxHeight.value = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 150;\n // console.log(sMaxHeight);\n } // dialog\n else sMaxHeight.value = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 265;\n }\n }\n } else sMaxHeight.value = undefined;\n else sMaxHeight.value = undefined;\n if (sMaxHeight.value && Number(sMaxHeight.value) < 150) sMaxHeight.value = undefined;\n };\n\n /**\n * @todo: trans records\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 11:33:48\n * @param {*} loadAction\n */\n const transRecords = (loadAction?: string) => {\n if (recordsList.value && recordsList.value.length > 0 && recordsList.value[0]['transHash']) {\n transHash = recordsList.value[0]['transHash'];\n recordsList.value.splice(0, 1);\n }\n // add: 增加查询回调方法 2022-11-23\n if (loadAction !== 'create' && props.tableCb) props.tableCb(recordsList.value, resultData.value);\n };\n\n /**\n * @todo: handle import btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 09:43:56\n */\n const handleImport = () => {\n if (props.beforeImport)\n if (props.beforeImport(props.refTable, tableHeads, props.tableData)) {\n importDialogShow.value = true;\n // 设置loading\n importBtnLoading.value = true;\n } else importDialogShow.value = false;\n else {\n importDialogShow.value = true;\n // 设置loading\n importBtnLoading.value = true;\n }\n };\n\n const handleExport = () => {\n exportDialogShow.value = true;\n // 设置loading\n exportBtnLoading.value = true;\n };\n\n /**\n * @todo: import btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 09:41:45\n */\n const getImportBtn = computed(() => {\n if (slots.import?.()) {\n let buttonName = t('tableBar.import');\n if (slots.import?.()[0].props?.['import-name']) buttonName = slots.import?.()[0].props?.['import-name'];\n const ref = 'gv-import-' + props.refTable;\n return (\n <GvButton\n bizType=\"import\"\n ref={ref}\n onClick={handleImport}\n loading={importBtnLoading.value}>\n {buttonName}\n </GvButton>\n );\n } else return null;\n });\n\n /**\n * @todo: get export btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 16:22:42\n * @param {*} computed\n */\n const getExportBtn = computed(() => {\n if (slots.export?.()) {\n let buttonName = t('common.export');\n if (slots.export?.()[0].props?.['export-name']) buttonName = slots.export?.()[0].props?.['export-name'];\n const ref = 'gv-export-' + props.refTable;\n return (\n <GvButton\n bizType=\"export\"\n ref={ref}\n onClick={handleExport}\n loading={exportBtnLoading.value}\n disabled={exportBtnDisabled.value}>\n {buttonName}\n </GvButton>\n );\n } else return null;\n });\n\n /**\n * @todo: change page size\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-22 17:24:46\n */\n const runPageSearch = async () => {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fetchFn: Fn = instance?.exposed?.fetch || props.tableFetch;\n if (!fetchFn) {\n message(t('table.execSearchWarn'));\n return;\n }\n const result = await crud.toNewPageSearch(instance, fC, fetchFn, pageInfo.value);\n if (result) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n };\n\n const handleSizeChange = async (val: number) => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n getMaxHeight(rootEl);\n pageInfo.value.recordsperpage = val;\n pageInfo.value.currentpagenum = 1;\n sPageSize = val;\n await runPageSearch();\n };\n\n const handleCurrentChange = async (val: number) => {\n pageInfo.value.currentpagenum = val;\n await runPageSearch();\n };\n\n /**\n * @todo: 查询输入框输入响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-19 15:18:03\n * @param {*} val\n */\n const handleTableSearchInput = (val) => {\n debounceSearch(val);\n };\n\n /**\n * @todo: search table input event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-26 22:06:01\n * @param {*} val\n */\n const handleTableSearch = async (val: string) => {\n const fh = {};\n let strFh = '';\n filterHeads.forEach((x: string) => {\n // fixme: 转换@为. 2022-07-20\n let y = x;\n if (y.indexOf('@') > 0) y = y.replace('@', '.');\n if (strFh === '') strFh = toLine(y);\n else strFh += ',' + toLine(y);\n });\n const v = val + '';\n fh['fields'] = strFh;\n fh['val'] = v.trim();\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n fC['searchfilter'] = fh;\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n if (!fetch) {\n message(t('table.execSearchWarn'));\n return;\n }\n\n // 拼接 过滤条件\n pageInfo.value.currentpagenum = 1;\n const result = await crud.toNewPageSearch(instance, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n };\n /**\n * @todo: 列表search框\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-30 17:24:09\n */\n const getTableSearch = () =>\n tableSearchShow.value === true ? (\n <div class=\"gv-table__search\">\n <GvInput\n id=\"gv-table-search\"\n placeholder={`${t('table.tableSearch')}(+)..`}\n prefixIcon=\"gv-icon-sousuo\"\n size=\"default\"\n class=\"gv-table__search-input\"\n onInput={handleTableSearchInput}></GvInput>\n </div>\n ) : null;\n\n /**\n * @todo: table head popover show\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-08 10:43:51\n */\n const handlePopoverShow = () => {\n nextTick(() => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n if (rootEl) {\n const popOvers = document.querySelectorAll('body>.table-popover');\n const tableBodyWidth = (rootEl.querySelector('.el-table__body-wrapper >.el-table__body') as HTMLElement)?.style.width;\n const clientWidth = document.body.clientWidth - 200 - 20;\n for (let i = 0; i < popOvers.length; i++)\n if ((popOvers[i] as HTMLElement).style.display !== 'none') {\n const bodyWrapper = rootEl.querySelector('.el-table__body-wrapper') as HTMLElement;\n if (bodyWrapper?.scrollLeft ?? 0)\n (popOvers[i] as HTMLElement).style.left = parseInt(tableBodyWidth) - clientWidth + parseInt((popOvers[i] as HTMLElement).style.left) - (bodyWrapper?.scrollLeft ?? 0) + 'px';\n else (popOvers[i] as HTMLElement).style.left = parseInt((popOvers[i] as HTMLElement).style.left) - (bodyWrapper?.scrollLeft ?? 0) + 'px';\n }\n }\n });\n };\n const handlePopoverHide = () => {\n // this.popoverVisible[prop] = false;\n };\n\n /**\n * @todo: 列选中状态切换\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:44:01\n * @param {*} columns\n * @param {*} checkedKeys\n */\n const createChangedColumns = (columns, checkedKeys) =>\n columns.map((column) => {\n const target = { ...column };\n if (target.type !== 'action' && target.type !== 'expand') target.hasHidden = !checkedKeys.includes(target.prop);\n return target;\n });\n\n /**\n * @todo: 列顺序和选中方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:43:09\n * @param {*} data\n * @param {*} checked\n * @param {*} childChecked\n */\n const handleColumnCheckChange = (data, checked, childChecked) => {\n const checkedKeys = this.$refs['gv-table-column-tree'].$children[0].getCheckedKeys();\n const hColumns = createChangedColumns(tableHeads, checkedKeys);\n // console.log(hColumns);\n headColumn.value = getTableColumn('recreate', hColumns);\n // 存储到 localStorage\n setStoreLocal(checkedKeys, checked, data);\n };\n\n /**\n * @todo: table refresh btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:45:55\n */\n const handleTableRefresh = async () => {\n // 判断search框中是否有值\n const el = instance?.vnode?.el as HTMLElement | undefined;\n if (el) {\n const inputSearch = el.querySelector('.gv-table__search-input .el-input__inner');\n if (inputSearch && inputSearch.value !== undefined && inputSearch.value !== null && inputSearch.value !== '') {\n inputSearch.value = '';\n handleTableSearch('');\n } else {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n // 拼接 过滤条件\n pageInfo.value.currentpagenum = 1;\n const result = await crud.toNewPageSearch(instance, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n }\n }\n };\n\n /**\n * @todo: tablebar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 11:21:41\n */\n const getTableBar = () => {\n const btns: any[] = [];\n const defaultSlots = slots.default?.();\n if (defaultSlots && defaultSlots.length > 0)\n defaultSlots.forEach((x: VNode) => {\n // add table btn bar\n if (typeof x.type === 'object' && x.type !== null && 'name' in x.type && x.type.name === 'GvButton') btns.push(x);\n });\n // export btn\n const exportSlots = slots.export?.();\n if (exportSlots && exportSlots.length > 0)\n exportSlots.forEach(() => {\n btns.push(getExportBtn.value);\n });\n\n // import btn\n const importSlots = slots.import?.();\n if (importSlots && importSlots.length > 0)\n importSlots.forEach(() => {\n btns.push(getImportBtn.value);\n });\n\n // console.log(btns);\n return btns;\n };\n\n /**\n * @todo: get kit bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:41:30\n */\n const getKitBar = () => {\n let isVisible = true;\n if (sTableKit.value !== undefined) isVisible = sTableKit.value;\n if (props.tableType === 'import' || props.tableType === 'detail' || props.tableType === 'expand' || props.tableType === 'export') isVisible = false;\n // 行编辑去掉隐藏列功能\n if (isEditTable === true) isVisible = false;\n return isVisible === true ? (\n <div class=\"gv-table__kitbar\">\n <ElButtonGroup>\n <ElButton\n style=\"width: 37px\"\n size={tableSize.value}\n icon={Refresh}\n onClick={handleTableRefresh}\n />\n <ElPopover\n placement=\"bottom-end\"\n width=\"150\"\n trigger=\"click\">\n {{\n reference: () => (\n <ElButton\n size={tableSize.value}\n style={{ width: '37px' }}\n icon={Operation}\n />\n ),\n default: () => (\n <ElTree\n ref=\"gv-table-column-tree\"\n node-key=\"columnProp\"\n tree-data={columnTreeList}\n check-on-click-node={true}\n default-checked-keys={columnCheckedKeys.value}\n show-checkbox\n draggable\n on-check-change={handleColumnCheckChange}\n style={{ maxHeight: '450px', overflow: 'hidden auto' }}\n class=\"gv-table-column-tree\"\n />\n ),\n }}\n </ElPopover>\n </ElButtonGroup>\n </div>\n ) : null;\n };\n\n /**\n * @todo: sort mode\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 11:17:36\n */\n const getSortModel = () => {\n let isVisible = true;\n if (sTableSort.value !== undefined) isVisible = sTableSort.value;\n else isVisible = props.tableType !== 'import';\n return isVisible === true ? (\n <div\n class=\"gv-table__sortmode\"\n style={{ marginRight: `${tableSearchShow.value === true ? '10px' : '0'}` }}>\n <i class=\"iconfont gv-icon-paixu2\" />\n <ElRadioGroup\n modelValue={tableSortMode.value}\n onUpdate:modelValue={(val: number) => {\n tableSortMode.value = val;\n }}\n ref=\"gv-table-sortmode\">\n <ElRadio value={1}>{t('common.currentPage')}</ElRadio>\n <ElRadio\n value={2}\n disabled={pageInfo.value?.totalpage === 1}>\n {t('common.all')}\n </ElRadio>\n </ElRadioGroup>\n </div>\n ) : null;\n };\n\n /**\n * @todo: column filter handler\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:27:41\n * @param {*} e\n * @param {*} propField\n * @param {*} type\n */\n const columnFilterHandler = async (e: MouseEvent, propField: string, type: string) => {\n const popoverHtml = e.target.closest('.table-popover');\n const inputHtml = popoverHtml.querySelector('.gv-input .el-input__inner');\n const checkList = popoverHtml.querySelectorAll('.el-checkbox');\n const dateHtmlArr = popoverHtml.querySelectorAll('.gv-datepicker .el-range-input');\n let filterValue = '';\n switch (type) {\n case 'text':\n case 'number':\n filterValue = inputHtml.value;\n if (filterValue.length === 0)\n // Notify.alert('请输入筛选内容', 'warning');\n return;\n\n break;\n case 'date':\n filterValue = dateHtmlArr[0].value + '|' + dateHtmlArr[1].value;\n break;\n case 'dic':\n if (checkList !== null)\n for (const check of checkList)\n if (hasClass(check, 'is-checked'))\n if (check.innerText !== t('common.checkAll'))\n filterValue = filterValue !== '' ? filterValue + '|' + check.querySelector('.el-checkbox__original').value : check.querySelector('.el-checkbox__original').value;\n\n break;\n }\n if (filterValue.length === 0 || filterValue === '|') {\n message(t('table.columnFilterWarn'));\n return;\n }\n\n if (type === 'date') {\n const pattern = /\\d{4}-\\d{2}-\\d{2}\\\\|\\d{4}-\\d{2}-\\d{2}/;\n if (!pattern.test(filterValue)) {\n message(t('table.columnFilterDateWarn'));\n return;\n }\n }\n\n if (propField !== null) {\n const fh = {};\n fh[toLine(propField.replace('@', '.')) + '|' + type] = filterValue;\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n fC.value['headfilter'] = Object.assign(fC.value['headfilter'] || {}, fh);\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n // 隐藏popover\n popoverVisible.value[propField] = false;\n document.body.click();\n // 拼接 过滤条件\n const result = await crud.toNewPageSearch(this, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n // 标识筛选列\n const tableHeader = this.$el.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const columns = tableHeader.querySelectorAll('.el-table__cell');\n const len = columns.length;\n for (let i = 0; i < len; i++) {\n const h = columns[i].querySelector('.render__header');\n if (h && h.children[0] && h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.add('is-selected');\n }\n // 标识筛选列(带fix)\n const tableFixHeader = this.$el.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n if (tableFixHeader !== null) {\n const fixColumns = tableFixHeader.querySelectorAll('.el-table__cell');\n if (fixColumns !== null) {\n const fixLen = fixColumns.length;\n for (let i = 0; i < fixLen; i++) {\n const h = fixColumns[i].querySelector('.render__header');\n if (h && h.children[0] && h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.add('is-selected');\n }\n }\n }\n }\n };\n /**\n * @todo: 列表头筛选重置\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-20 10:05:08\n * @param {*} e\n */\n const columnFilterHandlerReset = async (e: MouseEvent, propField: string, type: stringType) => {\n const popoverHtml = e.target.closest('.table-popover');\n const inputHtml = popoverHtml.querySelector('.gv-input .el-input__inner');\n const checkList = popoverHtml.querySelectorAll('.el-checkbox');\n const dateHtmlArr = popoverHtml.querySelectorAll('.gv-datepicker .el-range-input');\n switch (type) {\n case 'text':\n case 'number':\n inputHtml.value = '';\n break;\n case 'date':\n dateHtmlArr[0].value = '';\n dateHtmlArr[1].value = '';\n break;\n case 'dic':\n if (checkList !== null)\n for (const check of checkList)\n if (hasClass(check, 'is-checked')) {\n // check.classList.remove('is-checked');\n check.querySelector('.el-checkbox__original').checked = false;\n check.querySelector('.el-checkbox__input').classList.remove('is-checked');\n }\n\n break;\n }\n\n if (propField !== null) {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fh = fC.value['headfilter'];\n if (fh !== undefined && fh != null) delete fh[toLine(propField.replace('@', '.')) + '|' + type];\n\n fC.value['headfilter'] = Object.assign(fC.value['headfilter'] || {}, fh);\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n\n // 隐藏popover\n popoverVisible.value[propField] = false;\n document.body.click();\n\n if (type !== 'date') {\n const primaryBtn = popoverHtml.querySelector('.el-button--primary');\n primaryBtn.setAttribute('disabled', 'disabled');\n primaryBtn.classList.add('is-disabled');\n }\n\n // 拼接 过滤条件\n const result = await crud.toNewPageSearch(this, fC, fetch, pageInfo.value);\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n // 标识筛选列\n const tableHeader = this.$el.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const columns = tableHeader.querySelectorAll('.el-table__cell');\n const len = columns.length;\n for (let i = 0; i < len; i++) {\n const h = columns[i].querySelector('.render__header');\n if (h) if (h.children[0]) if (h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.remove('is-selected');\n }\n const tableFixedHeader = this.$el.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n // fixed: 解决列表没有锁定列时报错问题 2023-10-07\n if (tableFixedHeader) {\n const columnsFixed = tableFixedHeader.querySelectorAll('.el-table__cell');\n const lenFixed = columnsFixed.length;\n for (let i = 0; i < lenFixed; i++) {\n const h = columnsFixed[i].querySelector('.render__header');\n if (h) if (h.children[0]) if (h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.remove('is-selected');\n }\n }\n }\n };\n\n /**\n * @todo: set column width by column name\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:12:01\n * @param {*} label\n * @param {*} query\n * @param {*} edit\n */\n const getColWidth = (label: string, query: boolean, edit: boolean) => {\n if (!label) return;\n let label2 = label;\n if (lang === 'en') label2 = label.toLowerCase();\n let sWidth = 0;\n if (label2.indexOf(t('table.date')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.month2')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.month')) !== -1) sWidth = 90;\n else if (label2.indexOf(t('table.time')) !== -1) sWidth = 130;\n else if (label2.indexOf(t('table.deliveryTime')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.name')) !== -1) sWidth = 120;\n else if (label2.indexOf(t('table.userAccount')) !== -1) sWidth = 120;\n else if (label === t('table.customerName')) sWidth = 115;\n else if (label2.indexOf(t('table.approve')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.audit')) !== -1) sWidth = 110;\n else if (label === t('table.operator')) sWidth = 110;\n else if (label2.indexOf(t('table.staff')) !== -1) sWidth = 100;\n else if (label.indexOf(t('table.whether')) !== -1) sWidth = 110;\n else if (label === t('table.enableStatus')) sWidth = 110;\n else if (label === t('table.orderStatus')) sWidth = 110;\n else if (label2 === t('table.status')) sWidth = 90;\n else if (label2.indexOf(t('table.status')) !== -1) sWidth = 90;\n else if (label === t('table.vin')) sWidth = 185;\n else if (label === t('table.carNo')) sWidth = 105;\n else if (label2.indexOf(t('table.phone')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.tel')) !== -1) sWidth = 110;\n else if (label === t('table.sex')) sWidth = 90;\n else if (label2.indexOf(t('table.type')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.amount')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.money')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.balance')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.unitPrice')) !== -1) sWidth = 95;\n else if (label2.indexOf(t('table.times')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.number')) !== -1) sWidth = 140;\n else if (label2.indexOf(t('table.code')) !== -1) sWidth = 135;\n else if (label2.indexOf(t('table.odd')) !== -1) sWidth = 230;\n else if (label2.indexOf(t('table.unit')) !== -1) sWidth = 110;\n else if (label2.indexOf('省') !== -1) sWidth = 90;\n else if (label2.indexOf('市') !== -1) sWidth = 100;\n else if (label2.indexOf('区') !== -1) sWidth = 120;\n else if (label2.indexOf(t('table.color')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.storageAge')) !== -1) sWidth = 105;\n else if (label2.indexOf(t('table.chassis')) !== -1) sWidth = 105;\n else if (label2.indexOf('排放标准') !== -1) sWidth = 115;\n else if (label2 === t('table.brand')) sWidth = 105;\n else if (label === t('table.series')) sWidth = 105;\n else if (label === t('table.strain')) sWidth = 105;\n else if (label === '运输方式') sWidth = 100;\n else if (label2.indexOf(t('table.rate')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.level')) !== -1) sWidth = edit === true ? 140 : 115;\n // fixme: 增加表头query宽度判断 2022-04-30\n if (query === true && sWidth > 0) sWidth += 15;\n\n // fixme: 增加表头edit宽度判断 2022-06-11\n if (edit === true && sWidth > 0) sWidth += 20;\n return sWidth;\n };\n\n /**\n * @todo: table cell formatter\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:19:28\n * @param {*} row\n * @param {*} column\n * @param {*} cellValue\n * @param {*} index\n */\n const columnFormatter = (row, column, cellValue, index: number) => {\n // console.log(column);\n // console.log(cellValue);\n if (cellValue != null && cellValue.v !== undefined) return cellValue.v;\n else return cellValue === undefined ? '' : cellValue;\n };\n\n /**\n * @todo: table header search input change method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-22 09:55:46\n * @param {string} val\n */\n const handleColumnFilter = (val: string) => {\n const popoverHtmlList = Array.from(document.body.querySelectorAll<HTMLElement>('body>.table-popover'));\n let popoverHtml: HTMLElement | undefined;\n for (const pop of popoverHtmlList)\n if (pop.style.display !== 'none') {\n popoverHtml = pop;\n break;\n }\n if (!popoverHtml) return;\n const primaryBtn = popoverHtml.querySelector<HTMLElement>('.el-button--primary');\n if (!primaryBtn) return;\n if (val !== undefined && val !== null && val !== '') {\n primaryBtn.removeAttribute('disabled');\n primaryBtn.classList.remove('is-disabled');\n } else {\n primaryBtn.setAttribute('disabled', 'disabled');\n primaryBtn.classList.add('is-disabled');\n }\n };\n /**\n * @todo: set header filter\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:23:58\n * @param {string} type\n * @param {string} label\n * @param {string} prop\n * @param {string} dicType\n * @param {string} filtercode\n */\n const renderHeadFilter = (type: string, label: string, prop: string, dicType: string | undefined, filtercode: string | undefined) => {\n let render: VNode | null = null;\n let fc = filtercode !== undefined ? filtercode : '';\n switch (type) {\n case 'text':\n case 'number':\n render = (\n <div>\n <GvInput\n placeholder={`${t('table.search')} - ${label}`}\n size={tableSize.value}\n onInput={handleColumnFilter}\n vref={prop}></GvInput>\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size={tableSize.value}\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size={tableSize.value}\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n break;\n case 'date':\n render = (\n <div>\n <GvDatePicker\n placeholder={`${t('table.search')} - ${label}`}\n size={tableSize.value}\n type=\"daterange\"\n format={dicType}\n value-format={dicType}\n // onChange={handleColumnFilter}\n vref={prop}\n />\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size={tableSize.value}\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size={tableSize.value}\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n break;\n case 'dic':\n if (dicType) {\n let ret = [];\n const src = dicType.toLowerCase();\n let dictCache;\n if (this.$store && this.$store.getters) dictCache = this.$store.getters.dictCache[src];\n if (dicType !== 'xzqh' && dictCache) ret = dictCache;\n // 生成字典列表\n else if (dicType === 'xzqh') {\n if (label.indexOf('省') >= 0) fc = '0000$';\n // else if (label.indexOf('市') >= 0)\n // fc = '^[1-9][1-9][0-9][1-9]00$';\n // else if (label.indexOf('区') >= 0)\n // fc = '^[1-9][1-9][0-9][1-9][0-9][1-9]$';\n\n let dict;\n if (this.$store && this.$store.getters) dict = this.$store.getters.dictDivision;\n if (dict) {\n const cache = {};\n cache['key'] = 'xzqh';\n cache['dict'] = dict;\n this.$store.dispatch('user/addDictCache', cache);\n ret = dict;\n }\n } else {\n let dict;\n if (this.$store && this.$store.getters) dict = this.$store.getters.dict[src];\n if (dict) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dict;\n this.$store.dispatch('user/addDictCache', cache);\n ret = dict;\n }\n }\n // 设置过滤\n let ret2 = ret;\n if (fc) {\n const reg = new RegExp(fc, 'i');\n ret2 = ret.filter((x) => reg.test(x.c));\n }\n // ret.map((x) => {\n // checkList.push(x.c);\n // });\n // console.log(checkList);\n // 最大显示100个\n if (ret2 && ret2.length !== undefined && ret2.length > 0) {\n ret2.splice(50);\n render = (\n <div>\n <div>\n <ElCheckbox\n checked={false}\n key=\"checkAll\"\n label={t('common.checkAll')}\n style={{ display: 'block' }}\n indeterminate={isIndeterminate[prop]}\n onChange={handleDictCheckAll}\n class=\"gv-checkbox\">\n {t('common.checkAll')}\n </ElCheckbox>\n <ElDivider style=\"margin: 5px 0px\" />\n {ret2.map((x) => (\n <ElCheckbox\n checked={false}\n key={x.c}\n label={x.c}\n style={{ display: 'block' }}\n onChange={handleDictCheck}\n class=\"gv-checkbox\">\n {lang === 'zh-CN' ? x.t : x.e}\n </ElCheckbox>\n ))}\n </div>\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size={tableSize.value}\n disabled=\"true\"\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size={tableSize.value}\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n } else render = null;\n } else render = null;\n\n break;\n }\n return render ? wrapPopoverFilterBody(render) : null;\n };\n\n /**\n * @todo: open popover\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:22:13\n * @param {*} type\n * @param {*} label\n * @param {*} prop\n * @param {*} dicType\n * @param {*} filtercode\n * @param {*} event\n */\n /** 点击表头筛选箭头:仅关闭其它列 Popover,开关由 ElPopover trigger=click + v-model 处理 */\n const handlePopoverSlotClick = (event: MouseEvent, prop: string) => {\n event?.stopPropagation();\n closeAllPopover(prop);\n };\n\n /**\n * @todo: render column item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 14:37:55\n */\n const renderColumnItem = (item: TableHeadItem, index: number, loadAction: string | undefined, tableFixed: string | undefined) => {\n const {\n prop,\n label,\n fixed,\n width,\n minWidth = 135,\n align = 'left',\n formatter,\n type = 'text',\n dicType,\n query = false,\n render,\n edit = false,\n format,\n cellBlur,\n cellEnter,\n cellChange,\n hidden = false,\n hasHidden = false,\n filtercode,\n showLabel,\n dicRemote,\n isreload = true,\n cb,\n multiple = false,\n dateType = 'date',\n selectable,\n min,\n max,\n collapseTags = false, // 多选字典tag是否折叠\n showLabelProp, // 表选showLabel列\n columnFilter = true, // 表头是否带筛选\n multiLabel = '', // 多级表头\n heads, // 多级表头\n focus,\n } = item;\n let reserveSelection = false;\n if (selectable) reserveSelection = true;\n let sHidden = false;\n if (hidden === true) sHidden = true;\n if (hasHidden === true) sHidden = true;\n if (sHidden === true) return null;\n\n let sLabel = label;\n let sProp = prop;\n if (prop && prop.indexOf('@') > 0) sProp = prop.split('@')[1];\n const key = loadAction === 'create' ? Math.random() : sProp;\n\n let placement: TPopoverPlacement = 'bottom-start';\n if (index >= tableHeads.length - 2) placement = 'bottom-end';\n let sFixed = sTableType === 'expand' ? undefined : fixed;\n if (tableFixed === 'n') sFixed = undefined;\n if (sTableAction === 'right') sFixed = undefined;\n // console.log(sFixed);\n if (sFixed) sLabel = sLabel + '';\n if (query === true) {\n sLabel = sLabel + '(Q)';\n filterHeads.push(prop);\n tableSearchShow.value = true;\n }\n ensurePopoverKey(prop);\n const sortable = sTableType === 'expand' ? false : 'custom';\n\n let sWidth;\n if (width !== 'auto')\n if (width) sWidth = width;\n else sWidth = getColWidth(label, query, edit);\n if (isEditTable === false && edit === true) isEditTable = true;\n\n // 多级表头\n if (multiLabel && multiLabel !== '') {\n if (heads && Array.isArray(heads)) {\n const multiLabels: VNode[] = [];\n heads.forEach((x) => {\n const hType = x.type || 'text';\n let hSLabel = x.label;\n let hSProp = x.prop;\n if (x.prop && x.prop.indexOf('@') > 0) hSProp = x.prop.split('@')[1];\n const hKey = loadAction === 'create' ? Math.random() : hSProp;\n\n let hSFixed = sTableType === 'expand' ? undefined : x.fixed;\n if (tableFixed === 'n') hSFixed = undefined;\n // console.log(sFixed);\n if (hSFixed) hSLabel = hSLabel + '';\n if (x.query === true) {\n hSLabel = hSLabel + '(Q)';\n filterHeads.push(x.prop);\n tableSearchShow.value = true;\n }\n let hReserveSelection = false;\n if (x.selectable) hReserveSelection = true;\n // 初始化 列的筛选popover都是隐藏的\n ensurePopoverKey(x.prop);\n const hSortable = sTableType === 'expand' ? false : 'custom';\n\n let hSWidth;\n if (x.width !== 'auto')\n if (x.width) hSWidth = x.width;\n else hSWidth = getColWidth(x.label, x.query, x.edit);\n multiLabels.push(\n <ElTableColumn\n fixed={hSFixed}\n prop={hSProp}\n label={hSLabel}\n width={hSWidth}\n align={x.align}\n column-key={hSProp}\n key={hKey}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={hSortable}\n selectable={x.selectable}\n reserveSelection={hReserveSelection}\n header-align={x.align || 'left'}\n style={{ display: sHidden ? 'none' : '' }}\n sort-orders={['ascending', 'descending']}>\n {{\n header: () => (\n <div\n onClick={(e) => handlePopoverWrapper(e)}\n class=\"render__header\">\n <ElPopover\n visible={popoverVisible.value[x.prop]}\n onUpdate:visible={(val: boolean) => {\n popoverVisible.value = { ...popoverVisible.value, [x.prop]: val };\n }}\n trigger=\"click\"\n width=\"auto\"\n popperStyle={tableHeadFilterPopoverPopperStyle}\n showArrow={true}\n placement={placement}\n popperClass={`gv-popover table-popover table-popover-${props.refTable}`}\n onAfter-enter={handlePopoverShow}\n onAfter-leave={handlePopoverHide}>\n {{\n default: () => renderHeadFilter(hType, x.label, x.prop, x.dicType, x.filtercode),\n reference: () => (\n <div\n class=\"gv-table-header-filter\"\n onClick={(e) => handlePopoverSlotClick(e, x.prop)}>\n {hSLabel}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"></GvIcon>\n </div>\n ),\n }}\n </ElPopover>\n </div>\n ),\n }}\n </ElTableColumn>,\n );\n });\n return <ElTableColumn label={multiLabel + ''}>{multiLabels}</ElTableColumn>;\n }\n } else if (typeof render === 'function') {\n // 自定义字段 render\n let className = 'gv-cell__render';\n if (edit === true) className += ' gv-cell__isedit';\n return (\n <ElTableColumn\n // fixed = {fixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={key}\n column-key={sProp}\n show-overflow-tooltip={false}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}\n class-name={className}>\n {{\n default: (scope) => {\n const render1 = render(scope, sProp);\n return render1;\n },\n header: () => <div class=\"render__header\">{label}</div>,\n }}\n </ElTableColumn>\n );\n } else if (edit === true)\n return (\n <ElTableColumn\n style={{ display: sHidden ? 'none' : '' }}\n fixed={sFixed}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={key}\n column-key={sProp}\n show-overflow-tooltip={false}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n // filters={this.columnFilters}\n // filter-method={this.filterHandler}\n // filter-placement='bottom-start'\n class-name=\"gv-cell__isedit\">\n {{\n default: (scope) => {\n // if (this.renderMap[`${scope.$index}-${sProp}`] === undefined) {\n const render1 = renderRowEdit(\n scope,\n label,\n sProp,\n prop,\n type,\n dicType,\n format,\n cellBlur,\n cellEnter,\n filtercode,\n showLabel,\n dicRemote,\n isreload,\n cb,\n multiple,\n dateType,\n render,\n cellChange,\n min,\n max,\n collapseTags,\n showLabelProp,\n focus,\n );\n return render1;\n },\n header: () => <div class=\"render__header\">{label}</div>,\n }}\n </ElTableColumn>\n );\n else if (type === 'tag')\n // 设置tag\n return (\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={sProp}\n column-key={sProp}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}\n class-name=\"gv-cell__render\">\n {{\n default: (scope) =>\n scope.row[sProp] !== null && typeof scope.row[sProp] === 'object' ? (\n scope.row[sProp].v ? (\n <GvTag>{scope.row[sProp].v}</GvTag>\n ) : null\n ) : scope.row[sProp] ? (\n <GvTag>{scope.row[sProp]}</GvTag>\n ) : null,\n header: () => <div class=\"render__header\">{sLabel}</div>,\n }}\n </ElTableColumn>\n );\n else if (\n dicType !== 'company' &&\n dicType !== 'dept' &&\n dicType !== 'user' &&\n label.indexOf('市') === -1 &&\n label.indexOf('区县') === -1 &&\n label.indexOf('区/县') === -1 &&\n props.tableType !== 'list' &&\n props.tableType !== 'detail' &&\n props.tableType !== 'expand' &&\n props.tableType !== 'import'\n )\n if (columnFilter !== true)\n return (\n // add: af-table-column插件,计算列宽对于表头带有排序、(Q)等情况自适应列款不准确\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n column-key={sProp}\n key={key}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n selectable={selectable}\n reserveSelection={reserveSelection}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n >\n {{\n header: () => <div class=\"render__header\">{sLabel}</div>,\n }}\n </ElTableColumn>\n );\n else\n return (\n // add: af-table-column插件,计算列宽对于表头带有排序、(Q)等情况自适应列款不准确\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n column-key={sProp}\n key={key}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n selectable={selectable}\n reserveSelection={reserveSelection}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n >\n {{\n header: () => (\n <div\n onClick={(e) => handlePopoverWrapper(e)}\n class=\"render__header\">\n <ElPopover\n visible={popoverVisible.value[prop]}\n onUpdate:visible={(val: boolean) => {\n popoverVisible.value = { ...popoverVisible.value, [prop]: val };\n }}\n trigger=\"click\"\n width=\"auto\"\n popperStyle={tableHeadFilterPopoverPopperStyle}\n showArrow={true}\n placement={placement}\n popperClass={`gv-popover table-popover table-popover-${props.refTable}`}\n onAfter-enter={handlePopoverShow}\n onAfter-leave={handlePopoverHide}>\n {{\n default: () => renderHeadFilter(type, label, prop, dicType, filtercode),\n reference: () => (\n <div\n class=\"gv-table-header-filter\"\n onClick={(e) => handlePopoverSlotClick(e, prop)}>\n {sLabel}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"></GvIcon>\n </div>\n ),\n }}\n </ElPopover>\n </div>\n ),\n }}\n </ElTableColumn>\n );\n else\n return (\n <ElTableColumn\n fixed={sFixed}\n prop={sProp}\n style={{ display: sHidden ? 'none' : '' }}\n label={sLabel}\n width={sWidth}\n align={align}\n key={sProp}\n selectable={selectable}\n reserveSelection={reserveSelection}\n column-key={sProp}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}>\n {{\n header: () => <div class=\"render__header\">{props.tableType === 'list' ? sLabel : label}</div>,\n }}\n </ElTableColumn>\n );\n };\n\n /**\n * @todo: action column\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 14:08:55\n */\n const renderAction = (scope, content: string[], action: any[], render: Fn | undefined, confirmArr: boolean[], iconArr: string[]) => {\n let sContent = content;\n if (render) sContent = render(scope, content);\n return (\n <div class=\"flex\">\n {sContent.map((item: string, index: number) => {\n let x = item;\n let xx = 't';\n let disabled = false;\n if (item.indexOf('|') > 0) {\n const arr = item.split('|');\n x = arr[0];\n if (arr[1] === 'd') {\n xx = 't';\n disabled = true;\n // xx = arr[1];\n }\n }\n // console.log(item);\n let confirms = false;\n if (confirmArr) confirms = confirmArr[index];\n let detail = false;\n let icon = '';\n\n let actionType = '';\n if (x.indexOf(t('table.edit')) !== -1 || x.indexOf(t('table.modify')) !== -1 || x.indexOf(t('table.update')) !== -1) icon = 'el-icon-edit';\n else if (x.indexOf(t('table.delete')) !== -1 || x.indexOf(t('table.cancel')) !== -1) {\n icon = 'el-icon-delete';\n confirms = true;\n } else if (x.indexOf(t('table.add')) !== -1) icon = 'gv-icon-add';\n else if (x.indexOf(t('table.scheduling')) !== -1 || x.indexOf(t('table.production')) !== -1) icon = 'gv-icon-task';\n else if (x.indexOf(t('table.append')) !== -1) {\n actionType = '1';\n icon = 'gv-icon-baocun2';\n } else if (x.indexOf(t('table.disabled')) !== -1) {\n icon = 'gv-icon-tingyong';\n confirms = true;\n } else if (x.indexOf(t('table.cancel1')) !== -1) {\n icon = 'gv-icon-tingyong';\n confirms = true;\n } else if (x.indexOf(t('table.close')) !== -1) {\n icon = 'el-icon-circle-close';\n confirms = true;\n } else if (x.indexOf(t('table.detail')) !== -1) {\n icon = 'gv-icon-mingxi';\n detail = true;\n } else if (x.indexOf(t('table.logging')) !== -1) {\n icon = 'gv-icon-daiban';\n detail = true;\n } else if (x.indexOf(t('table.info')) !== -1 || x.indexOf(t('table.infos')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.view')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.message')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.price')) !== -1) icon = 'gv-icon-jiage1';\n else if (x.indexOf(t('table.money')) !== -1) icon = 'gv-icon-jiage1';\n else if (x.indexOf(t('table.dispatch')) !== -1) icon = 'gv-icon-winfo-icon-zhipai';\n else if (x.indexOf(t('table.adjust')) !== -1) icon = 'gv-icon-wujiliandongdizhi';\n else if (x.indexOf(t('table.leaveFactory')) !== -1 || x.indexOf(t('table.delivery')) !== -1) icon = 'gv-icon-paichesonghuodan';\n else if (x.indexOf(t('table.quit')) !== -1 || x.indexOf(t('table.transfer')) !== -1) icon = 'gv-icon-zhipai';\n else if (x.indexOf(t('table.submit')) !== -1 || x.indexOf(t('table.report')) !== -1) icon = 'gv-icon-tijiao';\n else if (x.indexOf(t('table.download')) !== -1) icon = 'gv-icon-xiazai';\n else if (x.indexOf(t('table.upload')) !== -1) icon = 'gv-icon-fujian';\n else if (x.indexOf(t('table.notify')) !== -1) icon = 'gv-icon-huodong';\n else if (x.indexOf(t('table.send')) !== -1) icon = 'gv-icon-xiazaidaorumoban1x';\n else if (x.indexOf(t('table.freeze')) !== -1) icon = 'gv-icon-dongjie';\n else if (x.indexOf(t('table.apply')) !== -1) icon = 'gv-icon-biaoshilei_yuanchengshengji';\n else if (x.indexOf(t('table.unfreeze')) !== -1) icon = 'gv-icon-jiedong';\n else if (x.indexOf(t('table.qrcode')) !== -1) icon = 'gv-icon-erweima';\n else if (x.indexOf(t('table.build')) !== -1) icon = 'gv-icon-rocket';\n else if (x.indexOf(t('table.confirm')) !== -1) icon = 'gv-icon-tianshenpi';\n else if (x.indexOf(t('table.proxyPay')) !== -1) icon = 'gv-icon-bengchefenleijiageguanli';\n else if (x.indexOf(t('table.open')) !== -1) icon = 'gv-icon-addNode';\n else if (x.indexOf(t('table.audit')) !== -1) icon = 'gv-icon-shenpi2';\n else if (x.indexOf(t('table.top')) !== -1) icon = 'gv-icon-zhidingxian';\n else if (x.indexOf(t('table.publish')) !== -1) icon = 'gv-icon-fabu';\n else if (x.indexOf(t('table.withdraw')) !== -1) icon = 'gv-icon-fanhui5';\n else if (x.indexOf(t('table.cost')) !== -1) icon = 'gv-icon-yingshou';\n else if (x.indexOf(t('table.approve')) !== -1) icon = 'gv-icon-shenpi2';\n else if (x.indexOf(t('table.reject')) !== -1) icon = 'gv-icon-shenqingbohui';\n else if (x.indexOf(t('table.exec')) !== -1) icon = 'gv-icon-kaishi_yunhang';\n else if (x.indexOf(t('table.recover')) !== -1) icon = 'gv-icon-huifu1';\n else if (x.indexOf(t('table.dispose')) !== -1) icon = 'gv-icon-task';\n else if (x.indexOf(t('table.ok')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.select')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.lock')) !== -1) icon = 'el-icon-lock';\n else if (x.indexOf(t('table.unLock')) !== -1) icon = 'el-icon-unlock';\n else if (x.indexOf(t('table.enable')) !== -1) icon = 'gv-icon-yunhang';\n else if (x.indexOf(t('table.transmit')) !== -1) icon = 'gv-icon-xiada';\n else if (x.indexOf(t('table.putaway')) !== -1) icon = 'el-icon-top';\n else if (x.indexOf(t('table.soldOut')) !== -1) icon = 'el-icon-bottom';\n else if (x.indexOf(t('table.transferPeople')) !== -1) icon = 'gv-icon-zhuanpai1';\n else if (x.indexOf(t('table.copy')) !== -1) icon = 'el-icon-copy-document';\n else if (x.indexOf(t('table.followUp')) !== -1) icon = 'gv-icon-mingdangenjin';\n else if (x.indexOf(t('table.circleCheck')) !== -1) icon = 'gv-icon-huanjiance';\n else if (x.indexOf(t('table.completed')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.finished')) !== -1) icon = 'gv-icon-wangongguanli';\n else if (x.indexOf(t('table.beCompleted')) !== -1) icon = 'gv-icon-wangongqueren';\n else if (x.indexOf(t('table.openCard')) !== -1) icon = 'gv-icon-daka-copy';\n else if (x.indexOf(t('table.closeCard')) !== -1) icon = 'gv-icon-guanqia';\n else if (x.indexOf(t('table.clockIn')) !== -1) icon = 'gv-icon-qiandao';\n else if (x.indexOf(t('table.preview')) !== -1) icon = 'el-icon-view';\n else if (x.indexOf(t('table.replace')) !== -1) icon = 'gv-icon-tihuantupian';\n else if (x.indexOf(t('table.settlement')) !== -1) icon = 'gv-icon-eduguanli';\n else if (x.indexOf(t('table.inWarehouse')) !== -1) icon = 'gv-icon-caituiruku';\n else if (x.indexOf(t('table.save')) !== -1) {\n icon = 'gv-icon-baocun1';\n actionType = '1';\n } else icon = 'el-icon-document-copy';\n\n // added by andy.ten@tom.com 2024-08-14 增加自定义按钮icon\n if (iconArr && Array.isArray(iconArr) && iconArr.length > index && iconArr[index]) icon = iconArr[index];\n if (sTableActionIcon === false) icon = '';\n if (confirms === true)\n if (sTableConfirm === false)\n return icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n confirm('是否?').then(\n () => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }}></GvButton>\n </span>\n </div>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n confirm(`${t('table.isConfirm')} ${x} ${t('table.action')} ?`).then(\n () => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }}>\n {x}\n </GvButton>\n </span>\n </div>\n </ElTooltip>\n );\n else\n return (\n <GvPopconfirm\n title={`${t('table.isConfirm')} ${x} ${t('table.action')} ?`}\n onConfirm={() => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n }}>\n {{\n reference: () => (\n <div class=\"gv-table-action-trigger\">\n {icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}></GvButton>\n </span>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}>\n {x}\n </GvButton>\n </span>\n </ElTooltip>\n )}\n </div>\n ),\n }}\n </GvPopconfirm>\n );\n else if (detail === true)\n return (\n <ElPopover\n title={x}\n placement={detailPlacement}\n trigger=\"click\"\n showArrow={true}\n onAfter-enter={() => handleDetailPopoverShow(action, index, scope.row, scope.$index)}\n popperClass=\"gv-popconfirm\">\n {{\n reference: () => (\n <div class=\"gv-table-action-trigger\">\n {icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}></GvButton>\n </span>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}>\n {x}\n </GvButton>\n </span>\n </ElTooltip>\n )}\n </div>\n ),\n default: () => showPopoverDetail,\n }}\n </ElPopover>\n );\n else\n // action btn\n return icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n visible={xx === 't'}\n disabled={disabled}\n text={x}\n size={tableSize.value}\n onClick={() => {\n // event.preventDefault();\n // event.stopPropagation();\n if (actionType === '1') {\n if (checkEditRow(scope.$index))\n try {\n startLoading();\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n } else\n try {\n startLoading();\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n }}\n icon={icon}></GvButton>\n </span>\n </div>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n visible={xx === 't'}\n disabled={disabled}\n text={x}\n size={tableSize.value}\n type=\"text\"\n onClick={() => {\n // event.preventDefault();\n // event.stopPropagation();\n startLoading();\n if (actionType === '1') {\n if (checkEditRow(scope.$index))\n try {\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n } else\n try {\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n }}>\n {x}\n </GvButton>\n </span>\n </div>\n </ElTooltip>\n );\n })}\n </div>\n );\n };\n\n /**\n * @todo: get table header columns\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 12:03:16\n * @param {*} loadAction\n * @param {*} tableColumns\n */\n const getTableColumn = (loadAction?: string, tableColumns?: TableHeadItem[]) => {\n const res: VNode[] = [];\n tableHeads = loadAction === 'recreate' ? tableColumns! : props.tableHead;\n // 从localStorage中获取已保存的列表显示信息\n if (loadAction === 'create') {\n lsTableHeads = getStorage(storageKey);\n if (lsTableHeads) {\n const thd: TableHeadItem[] = [];\n const lsTableHeadsArr = lsTableHeads.split(',');\n let startIndex = 0;\n if (tableHeads[0].type === 'expand') {\n thd[0] = { ...tableHeads[0] } as TableHeadItem;\n startIndex = 0;\n if (tableHeads[1].type === 'action') thd[1] = { ...tableHeads[1] } as TableHeadItem;\n startIndex = 1;\n } else if (tableHeads[0].type === 'action') {\n startIndex = 0;\n thd[0] = { ...tableHeads[0] } as TableHeadItem;\n }\n\n lsTableHeadsArr.forEach((x: string, index: number) => {\n const xx = x.split('|');\n const ff = tableHeads.filter((f) => f.prop === xx[0]);\n if (ff.length > 0) {\n if (ff[0].hidden !== true) {\n ff[0].hasHidden = xx[1] === 't';\n const treeNode = {\n columnProp: ff[0].prop,\n label: ff[0].label,\n };\n if (loadAction === 'create') {\n (columnTreeList.value as any[]).push(treeNode);\n if (ff[0].hasHidden !== true && xx[1] !== 't') columnCheckedKeys.value.push(ff[0].prop);\n }\n }\n thd[index + startIndex] = { ...ff[0] };\n }\n });\n tableHeads = thd;\n }\n }\n\n // 第一列为序号列\n // let fixed = this.tableType !== 'detail';\n let fixed: string | undefined = sTableAction;\n if (tableHeads[0].type === 'expand') {\n fixed = undefined as unknown as string;\n sTableType = 'expand';\n }\n\n if (sTableType === 'expand') fixed = undefined as unknown as string;\n // 如果是edit多选列表,则去掉列锁定\n let tableFixed = 'y';\n if (tableHeads.some((x) => x.multiple === true)) {\n tableFixed = 'n';\n fixed = undefined;\n }\n\n if (props.multi === true) {\n fixed = undefined;\n tableFixed = 'n';\n }\n\n // 添加展开列\n if (tableHeads[0].type === 'expand')\n res.push(\n <ElTableColumn\n type=\"expand\"\n key=\"expand\"\n column-key=\"expand\"\n prop=\"expand\"\n width=\"42\"\n fixed={fixed}>\n {{ default: (scope: any) => tableHeads[0].render?.(scope) }}\n </ElTableColumn>,\n );\n let rownumWidth = '55';\n if (pageInfo.value?.currentpagenum)\n if (pageInfo.value.currentpagenum * pageInfo.value.totalpage > 10000) rownumWidth = '65';\n else if (pageInfo.value.currentpagenum * pageInfo.value.totalpage > 1000) rownumWidth = '57';\n\n if (fixed === 'left')\n res.push(\n <ElTableColumn\n fixed={fixed}\n // prop='rownums'\n key=\"rownums\"\n column-key=\"rownums\"\n label={t('table.rownums')}\n width={rownumWidth}\n min-width={rownumWidth}>\n {{\n default: (scope) => {\n // console.log(this.pageInfo.current);\n // console.log((this.pageInfo.current === -1 ? 0 : this.pageInfo.current - 1) * (this.pageInfo.size === -1 ? 0 : this.pageInfo.size));\n if (pageInfo.value?.currentpagenum) return (pageInfo.value.currentpagenum === -1 ? 0 : pageInfo.value.currentpagenum - 1) * pageInfo.value.totalpage + scope.$index + 1;\n else return scope.$index + 1;\n },\n }}\n </ElTableColumn>,\n );\n else\n res.push(\n <ElTableColumn\n // prop='rownums'\n key=\"rownums\"\n column-key=\"rownums\"\n label={t('table.rownums')}\n width={rownumWidth}\n min-width={rownumWidth}>\n {{\n default: (scope) => {\n if (pageInfo.value?.currentpagenum) return (pageInfo.value.currentpagenum === -1 ? 0 : pageInfo.value.currentpagenum - 1) * pageInfo.value.totalpage + scope.$index + 1;\n else return scope.$index + 1;\n },\n }}\n </ElTableColumn>,\n );\n // add: 第二列判断是否是多选框 2022-06-11\n if (props.multi === true)\n if (fixed === 'left')\n res.push(\n <ElTableColumn\n fixed=\"left\"\n prop=\"multi\"\n key=\"multi\"\n type=\"selection\"\n width=\"35\"></ElTableColumn>,\n );\n else\n res.push(\n <ElTableColumn\n prop=\"multi\"\n key=\"multi\"\n type=\"selection\"\n width=\"35\"></ElTableColumn>,\n );\n\n const actionHead = tableHeads.filter((x) => x.type === 'action');\n if (sTableAction === 'left')\n if (actionHead.length > 0) {\n const content = actionHead[0].content || [];\n const action = actionHead[0].action || [];\n const render = actionHead[0].render;\n const confirmArr = actionHead[0].confirm || [];\n const icon = actionHead[0].icon || [];\n if (actionHead[0].width) actionWidth = +actionHead[0].width;\n else if (sTableActionIcon === true)\n if (content.length === 1)\n // update: 对于只有一个按钮的操作列,设置固定宽度 2022-07-13\n actionWidth = 52;\n else actionWidth = content.length === 2 ? content.length * 44 : content.length * 42;\n else if (content.length === 1) actionWidth = content.join('').length * 30;\n else if (lang === 'zh_CN') actionWidth = content.join('').length * 25;\n else actionWidth = content.join('').length * 13;\n\n const actionColumn = (\n <ElTableColumn\n label={t('table.action')}\n key=\"caozuo\"\n column-key=\"caozuo\"\n prop=\"caozuo\"\n fixed={fixed}\n width={actionWidth}>\n {{ default: (scope: any) => renderAction(scope, content, action, render, confirmArr, icon) }}\n </ElTableColumn>\n );\n res.push(actionColumn);\n }\n\n filterHeads = [];\n tableHeads.forEach((item: TableHeadItem, index: number) => {\n if (item.type !== 'expand' && item.type !== 'action') {\n const columnVNode = renderColumnItem(item, index, loadAction, tableFixed);\n if (columnVNode) res.push(columnVNode);\n if (!lsTableHeads && loadAction === 'create')\n if (item.hidden !== true) {\n const treeNode = {\n columnProp: item.prop,\n label: item.label,\n };\n (columnTreeList.value as any[]).push(treeNode);\n columnCheckedKeys.value.push(item.prop);\n }\n }\n\n // this.$set(this.tableHead, index, item);\n // if (loadAction === 'create')\n // this.$set(this.resultData, index, item);\n });\n if (sTableAction === 'right')\n if (actionHead.length > 0) {\n const content = actionHead[0].content || [];\n const action = actionHead[0].action || [];\n const render = actionHead[0].render;\n const confirmArr = actionHead[0].confirm || [];\n const icon = actionHead[0].icon || [];\n if (actionHead[0].width) actionWidth = +actionHead[0].width;\n else if (sTableActionIcon === true)\n if (content.length === 1)\n // update: 对于只有一个按钮的操作列,设置固定宽度 2022-07-13\n actionWidth = 52;\n else actionWidth = content.length === 2 ? content.length * 44 : content.length * 42;\n else if (content.length === 1)\n if (lang === 'zh_CN') actionWidth = content.join('').length * 30;\n else actionWidth = content.join('').length * 18;\n else if (lang === 'zh_CN') actionWidth = content.join('').length * 25;\n else actionWidth = content.join('').length * 13;\n\n const actionColumn = (\n <ElTableColumn\n label={t('table.action')}\n key=\"caozuo\"\n column-key=\"caozuo\"\n prop=\"caozuo\"\n fixed={fixed}\n width={actionWidth}>\n {{ default: (scope: any) => renderAction(scope, content, action, render, confirmArr, icon) }}\n </ElTableColumn>\n );\n res.push(actionColumn);\n }\n\n // this.setDataLoaded(false);\n return res;\n };\n\n /**\n * @todo: table sort\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 17:45:10\n */\n const sortMethod = async ({ column, prop, order }: { column: Recordable<any>; prop: string | null; order: 'ascending' | 'descending' | null }) => {\n const fieldName = prop || column?.property;\n const sortingType = order ?? column?.order ?? null;\n if (tableSortMode.value === 1) {\n // 本页排序\n let sumData = {}; // 放置总计一行数据\n recordsList.value.forEach((item) => {\n if (item.name === t('common.total')) sumData = item;\n });\n if (sortingType === null)\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a['rownums'];\n let row2 = b['rownums'];\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row1 - row2;\n else return row1.toString().localeCompare(row2.toString());\n });\n else if (sortingType === 'ascending' || sortingType === null) {\n // 正序\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a[fieldName] || '';\n let row2 = b[fieldName] || '';\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row1 - row2;\n else return row1.toString().localeCompare(row2.toString());\n });\n // 删除table中的总计\n recordsList.value.forEach((item, index) => {\n if (item.name === t('common.total')) recordsList.value.splice(index, 1);\n return item;\n });\n if (Object.keys(sumData).length > 0) recordsList.value.push(sumData);\n } else if (sortingType === 'descending') {\n // 倒序\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a[fieldName] || '';\n let row2 = b[fieldName] || '';\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row2 - row1;\n else return row2.toString().localeCompare(row1.toString());\n });\n recordsList.value.map((item, index) => {\n if (item.name === t('common.aggregate')) recordsList.value.splice(index, 1);\n return item;\n });\n if (Object.keys(sumData).length > 0) recordsList.value.push(sumData);\n }\n } else {\n // 后端排序\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fetchFn = (instance?.exposed?.fetch as Fn) || props.tableFetch;\n if (!fetchFn) {\n message(t('table.execSearchWarn'));\n return;\n }\n const oi: Recordable<string> = {};\n\n oi['orderfilter'] = fieldName;\n oi['ordertype'] = sortingType === 'ascending' ? 'asc' : 'desc';\n fC['orderinfo'] = oi;\n const result = await crud.toNewPageSearch(instance, fC, fetchFn, pageInfo.value);\n if (result) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n }\n\n // 隐藏popover\n popoverVisible.value[fieldName] = false;\n document.body.click();\n };\n\n /**\n * @todo: row dblclick event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-08 11:15:41\n * @param {*} row\n * @param {*} column\n * @param {*} event\n */\n const rowDblClick = (row: Recordable<any>, column: TableColumnCtx<Recordable<any>> | null, event: MouseEvent) => {\n const target = event.target as HTMLElement | null;\n if (!target) return;\n // fixme: 屏蔽行中带有icon图标双击事件 2022-12-12\n if (target.tagName === 'I') return;\n else {\n const cell = target.closest('.el-table__cell');\n if (cell && hasClass(cell as HTMLElement, 'el-table__expand-column')) return;\n }\n if (isEditTable === false)\n if (typeof attrs.onRowDblclick === 'function') emit('row-dblclick', row, column, event);\n else {\n const tr = target.closest('.el-table__row');\n if (!tr) return;\n const tds = tr.children;\n let firstBtn: HTMLElement | null = null;\n for (let i = 0; i < tds.length; i++) {\n const btnArr = tds[i].querySelectorAll<HTMLElement>('.cell button.gv-button');\n for (let j = 0; j < btnArr.length; j++) {\n const btn = btnArr[j];\n // fixme: 解决隐藏按钮后双击仍然调用问题 2022-10-09\n if (btn && btn.style.display !== 'none') {\n firstBtn = btn;\n break;\n }\n }\n if (firstBtn) break;\n }\n firstBtn?.click();\n }\n };\n\n /**\n * @todo: 合并表格行或合并列方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-16 14:27:07\n */\n // const handleSpanMethod = (columnObj) => {\n // props.spanMethod(columnObj);\n // };\n\n // const getSummaries = (param) => {\n // const { columns, data } = param;\n // const sums = [];\n // columns.forEach((column, index) => {\n // if (column.columnKey === 'rownums') {\n // sums[index] = t('common.total');\n // return;\n // }\n // if (column.property === 'multi' || column.columnKey === 'caozuo' || column.columnKey === 'expand') return;\n // const keyIndex = columnSums.indexOf(column.property);\n // if (keyIndex !== -1) {\n // const values = data.map((item) => Number(item[column.property]));\n // if (!values.every((value) => isNaN(value))) {\n // sums[index] = values.reduce((prev, curr) => {\n // const value = Number(curr);\n // if (!isNaN(value)) return prev + curr;\n // else return prev;\n // }, 0);\n // const decimal = columnSumsDecimal[keyIndex];\n // sums[index] = amountFormat(sums[index], decimal);\n // sums[index] += '';\n // } else sums[index] = '';\n // } else return;\n // });\n // return sums;\n // };\n\n /**\n * @todo: 拖动表头改变列宽度响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2024-01-07 10:16:42\n * @param {*} newWidth\n * @param {*} oldWidth\n * @param {*} column\n * @param {*} event\n */\n // const headerDragend = (newWidth, oldWidth, column, event) => {\n // // fixed: 解决fix table 表头列宽度改变时fix列高度不正确问题 2024-01-07\n // nextTick(() => {\n // // fixCellH.style.height = cellH.offsetHeight;\n // this.$refs[this.vref].doLayout();\n // const fixCellH = this.$refs[this.vref].$el.querySelector('.el-table__fixed-header-wrapper>.el-table__header .el-table__cell');\n // const cellH = this.$refs[this.vref].$el.querySelector('.el-table__header-wrapper>.el-table__header .el-table__cell');\n // // console.log(cellH.offsetHeight);\n // fixCellH.style.height = cellH.offsetHeight + 'px';\n // // console.log(fixCellH.style.height);\n // });\n // });\n\n // @watch\n watch(\n () => props.tableHead,\n (newVal, prevVal) => {\n if (newVal.length !== prevVal.length) headColumn.value = getTableColumn();\n else {\n const res = difference(newVal, originTableHead);\n if (res === true) headColumn.value = getTableColumn();\n }\n },\n );\n watch(\n () => sMaxHeight.value,\n () => {\n if (props.tableType !== 'import')\n if (isScrollbar === false)\n if (isAnchor === false) {\n if (sHeight) sMaxHeight.value = sHeight;\n } else sMaxHeight.value = undefined;\n else sMaxHeight.value = undefined;\n },\n );\n watch(\n () => props.tableData,\n (newValue) => {\n resultData.value = newValue;\n },\n );\n\n watch(\n () => resultData.value,\n (newValue) => {\n if (newValue) {\n recordsList.value = newValue.records || newValue;\n // fixme: 解决无法获取结果集时报错问题 2022-06-05\n if (recordsList.value === undefined || recordsList.value.length === undefined) recordsList.value = [];\n if (recordsList.value.length > 0 && recordsList.value[0]['transHash']) {\n transHash = recordsList.value[0]['transHash'];\n recordsList.value.splice(0, 1);\n if (headColumn.value.length === 0) {\n tableHeads.forEach((x: TableHeadItem) => {\n let sProp = x.prop;\n if (sProp && sProp.indexOf('@') > 0) sProp = sProp.split('@')[1];\n if (props.total)\n if (x.sum === true) {\n columnSums.push(sProp);\n columnSumsDecimal.push(x.decimal ? x.decimal : 2);\n x.align = 'right';\n }\n\n const trans: string | undefined = transHash?.[sProp];\n if (trans) {\n const typeArr = trans.split('|');\n switch (typeArr[0]) {\n case 'company':\n x.dicType = 'company';\n break;\n case 'dept':\n x.dicType = 'dept';\n break;\n case 'user':\n x.dicType = 'user';\n break;\n case 'dic':\n x.type = 'dic';\n x.dicType = typeArr[1];\n break;\n case 'division':\n x.type = 'dic';\n x.dicType = 'xzqh';\n break;\n case 'date':\n x.type = 'date';\n x.dateType = typeArr[1];\n break;\n }\n }\n });\n headColumn.value = getTableColumn();\n }\n } else headColumn.value = getTableColumn();\n pageInfo.value = getPageInfo.value;\n // 设置排序方式\n if (pageInfo.value.totalpage > 1) tableSortMode.value = 2;\n else tableSortMode.value = 1;\n // 设置导出按钮状态\n if (recordsList.value && recordsList.value.length > 0) exportBtnDisabled.value = false;\n else exportBtnDisabled.value = true;\n\n // 加载状态\n // this.sDataLoaded = true;\n }\n nextTick(() => {\n // 重新计算\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n getMaxHeight(rootEl);\n\n // add: 增加查询回调方法 2022-11-23\n if (props.tableCb) props.tableCb(recordsList.value, resultData.value);\n tableRef.value?.doLayout();\n });\n },\n );\n\n // @exposed\n expose({\n setTableRef,\n fetch,\n startLoading,\n stopLoading,\n filterConditions,\n });\n\n // @created\n // get localStorage table column\n const loginLang = userStore.language;\n if (loginLang === 'en') lang = 'en';\n originTableHead = JSON.parse(JSON.stringify(props.tableHead));\n // fixme: 初始化时根据结果集赋值pagesize 解决后端设置pageSize后前端无法加载问题 2022-04-30\n // if (this.tableInit === true)\n if (Object.keys(props.tableData).length === 0) headColumnInit.value = getTableColumn('create');\n if (props.tableType === 'expand') {\n sTableSort.value = false;\n sTableBar.value = false;\n } else if (props.tableType === 'detail') headColumnInit.value = getTableColumn();\n if (props.tableData && props.tableData.size) {\n sPageSize = props.tableData.size;\n // 设置排序方式\n if (props.tableData.pages > 1) tableSortMode.value = 2;\n else tableSortMode.value = 1;\n }\n\n // 设置列表按钮以及右上角按钮的全局隐藏或显示\n if (gTableBar === false) {\n sTableSort.value = false;\n sTableKit.value = false;\n sTableBar.value = true;\n }\n\n // set pageSizes\n if (pageSizes.includes(sPageSize) === false) {\n pageSizes.splice(0, 0, sPageSize);\n pageSizes.sort(function (m, n) {\n if (m < n) return -1;\n else if (m > n) return 1;\n else return 0;\n });\n }\n\n if (props.tableType === 'detail') {\n // this.sMaxHeight = '200px';\n pageLayout.value = 'total, prev, pager, next';\n // 设置detail宽度\n sMaxWidth.value = '850px';\n } else if (props.tableType === 'expand') if (!sMaxWidth.value) sMaxWidth.value = '85%';\n // this.pageLayout = 'total, prev, pager, next';\n\n transRecords('create');\n\n // @mounted\n onMounted(() => {\n debounceSearch = debounce(handleTableSearch, 500);\n nextTick(() => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n window.addEventListener('click', () => {\n closeAllPopover();\n });\n window.addEventListener('resize', () => getMaxHeight(rootEl));\n if (rootEl) {\n const tableBodyWrapper = rootEl.querySelector('.el-table__body-wrapper');\n if (tableBodyWrapper) tableBodyWrapper.addEventListener('scroll', getScrollLeft, false);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor = true;\n const dialogBody = rootEl.closest('.gv-drawer__body--inner');\n if (dialogBody) isScrollbar = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-edit__container')) isEditContainer = true;\n }\n });\n });\n\n // @render\n return () => {\n pageInfo.value = getPageInfo.value;\n return props.visible ? (\n <div\n class={props.tableType === 'expand' ? 'gv-table__container gv-table__container-expand' : 'gv-table__container'}\n style={{ width: '100%', minWidth: '0px', maxWidth: sMaxWidth.value }}>\n <GvTableBar visible={sTableBar.value}>{getTableBar()}</GvTableBar>\n {getKitBar()}\n {getTableSearch()}\n {getSortModel()}\n <div\n class=\"gv-table__loading-wrap\"\n v-loading={loading.value}\n element-loading-text=\"Loading...\">\n <ElTable\n ref={vref}\n // element-loading-spinner='iconfont gv-icon-loading'\n data={recordsList.value}\n border={props.tableType === 'detail' ? false : props.border}\n highlight-current-row={true}\n table-layout=\"fixed\"\n style=\"width: 100%\"\n height={sHeight}\n max-height={sMaxHeight.value}\n stripe={true}\n row-key={(row: any) => row.rownums}\n expand-row-keys={props.expandRowKeys}\n row-style={props.rowStyle}\n cell-style={props.cellStyle}\n header-cell-class-name=\"headerStyleEvent\"\n //span-method={handleSpanMethod}\n show-summary={props.total}\n // summary-method={getSummaries}\n // toggleRowSelection\n // on-row-class-name={props.rowClassName} // 设置行class的回调方法\n onSort-change={sortMethod}\n onRow-dblclick={rowDblClick} // 设置行双击事件方法\n // on-row-click={props.handleRowClick} // 设置行单击事件方法\n // on-selection-change={handleSelectionChange} // 设置多选行事件\n // on-expand-change={handleExpandChange} // 行展开异步加载方法\n // on-header-dragend={headerDragend} // 列拖宽度方法\n class={props.tableType === 'detail' ? 'gv-table-noborder' : props.border === true ? `${prefixCls}` : 'gv-table-noborder'}>\n {props.tableData && Object.keys(props.tableData).length > 0 ? headColumn.value : headColumnInit.value}\n </ElTable>\n </div>\n <ElPagination\n style={{ display: props.isShowPage ? '' : 'none' }}\n pageSizes={pageSizes}\n pageSize={pageInfo.value.recordsperpage}\n layout={pageLayout.value}\n total={pageInfo.value.countrows}\n currentPage={pageInfo.value.currentpagenum}\n hideOnSinglePage={true}\n onUpdate:page-size={handleSizeChange}\n onUpdate:current-page={handleCurrentChange}\n class=\"gv-pagination\"></ElPagination>\n </div>\n ) : null;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-table__container {\n width: 100%;\n height: calc(100% - 10em);\n margin-top: -2px;\n\n .gv-table__loading-wrap {\n position: relative;\n width: 100%;\n }\n .gv-table__sortmode {\n float: right;\n\n & i {\n padding-right: 15px;\n //font-size: 14px;\n }\n\n :deep(.el-radio) {\n margin-right: 12px;\n\n .el-radio__input {\n &.is-checked {\n .el-radio__inner {\n background: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n\n .el-radio__label {\n //font-size: $tableThFontSize;\n }\n\n .el-radio__input.is-checked + .el-radio__label {\n color: var(--primaryColor, $primaryColor);\n }\n }\n }\n\n .gv-table__kitbar {\n position: relative;\n float: right;\n width: 74px;\n height: 28px;\n margin: 1px 0 0 8px;\n line-height: 28px;\n\n .el-button-group {\n height: 26px;\n line-height: 26px;\n\n .el-button {\n padding: 6px 8px 5px;\n }\n }\n }\n\n .gv-table__search {\n position: relative;\n float: right;\n width: 160px;\n margin-top: 3px;\n\n :deep(.gv-table__search-input) {\n // top: -30px;\n float: right;\n width: 150px;\n .el-input__wrapper {\n height: 28px;\n line-height: 28px;\n }\n .el-input__inner {\n font-size: 12px;\n padding-left: 1px !important;\n }\n }\n }\n\n .gv-table {\n border-top: 1px solid $tableBorderColor;\n border-bottom: 0;\n border-left: 1px solid $tableBorderColor;\n\n :deep(.ascending .sort-caret.ascending) {\n border-bottom-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.descending .sort-caret.descending) {\n border-top-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.el-table__header-wrapper) {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight;\n line-height: 34px;\n background-color: $tableThBgColor;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 1px solid $tableBorderColor;\n\n .cell {\n padding-right: 3px;\n color: $textColor;\n font-weight: 500 !important;\n .render__header {\n font-weight: 500 !important;\n }\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .is-selected {\n .gv-table-header-filter {\n color: $primaryColor;\n }\n }\n\n .render__header {\n display: inline-flex;\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n :deep(.el-table__body-wrapper) {\n .el-table__body {\n .el-table__row.expanded {\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n\n .el-table__expanded-cell {\n padding: 4px 2px 10px 89px;\n }\n\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 0;\n\n // border-bottom:1px solid $tableBorderColor;\n\n .cell {\n // box-sizing: border-box;\n // display: inline-block;\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n\n .gv-tag {\n box-sizing: border-box;\n display: inline-block;\n height: 22px;\n padding: 0 5px;\n //font-size: $appTextSize;\n line-height: 22px;\n color: #409eff;\n white-space: nowrap;\n background-color: #ecf5ff;\n border: 1px solid #d9ecff;\n border-radius: 4px;\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: auto;\n padding: 0 5px;\n\n .gv-input {\n height: 25px;\n line-height: 25px;\n\n .el-input__inner {\n height: 25px;\n padding-left: 5px;\n line-height: 25px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-input-number {\n width: 120px;\n height: 25px;\n line-height: 25px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 25px;\n padding-left: 5px;\n line-height: 25px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n height: 25px;\n //font-size: $textSizeSecondary;\n line-height: 25px;\n\n .el-input__inner {\n height: 25px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 25px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n width: 100%;\n\n .el-input {\n // line-height: 28px;\n // height: 25px;\n\n // height: 28px;\n //font-size: $textSizeSecondary;\n\n // line-height: 25px;\n\n .el-input__inner {\n // height:26px !important;\n padding-right: 25px;\n padding-left: 25px;\n\n // line-height:26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n\n .el-select__tags {\n .el-tag {\n height: 22px;\n margin: 1px 0 1px 6px;\n }\n }\n }\n\n .gv-select__table {\n width: 100%;\n vertical-align: inherit !important;\n .el-input {\n // height: 25px;\n //font-size: $textSizeSecondary;\n\n // line-height: 25px;\n\n .el-input__inner {\n // height:26px;\n padding-right: 25px;\n padding-left: 25px;\n\n // line-height:26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n // &.current-row{\n // td.el-table__cell{\n // background-color: var(--defaultHover,$defaultHover);\n // }\n // }\n\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n }\n }\n\n :deep(.el-table__footer-wrapper) {\n .el-table__footer {\n .el-table__cell {\n padding: 2px 0;\n //font-size: $tableThFontSize;\n }\n }\n }\n\n :deep(.el-table__fixed),\n :deep(.el-table__fixed-right) {\n height: 100% !important;\n .el-table__fixed-header-wrapper {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight !important;\n line-height: 34px;\n background-color: $tableThBgColor;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 1px solid $tableBorderColor;\n\n .cell {\n height: 28px;\n font-weight: 500 !important;\n // display: inline-block; // flex\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .is-selected {\n .gv-table-header-filter {\n color: $primaryColor;\n }\n }\n\n .render__header {\n display: inline-block; // flex\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n\n .el-checkbox {\n .el-checkbox__input {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked,\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__fixed-body-wrapper {\n .el-table__body {\n .el-table__row.expanded {\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n\n .el-table__expanded-cell {\n padding: 2px;\n }\n\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n // box-sizing: border-box;\n padding: 2px 0;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 0;\n\n .cell {\n // display: inline-block; // flex\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n // padding-left: 3px;\n .el-button {\n // margin-left: 5px;\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .gv-tag {\n box-sizing: border-box;\n\n // display: inline-block;\n height: 24px;\n padding: 0 5px;\n //font-size: $appTextSize;\n line-height: 24px;\n color: #409eff;\n white-space: nowrap;\n background-color: #ecf5ff;\n border: 1px solid #d9ecff;\n border-radius: 4px;\n }\n\n .el-checkbox {\n .el-checkbox__input {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked,\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n // border-bottom: 1px solid $tableBorderColor;\n }\n }\n }\n }\n\n .el-table__fixed-footer-wrapper {\n .el-table__footer {\n .el-table__cell {\n padding: 2px 0;\n //font-size: $tableThFontSize;\n }\n }\n }\n }\n }\n\n .gv-table-noborder {\n :deep(.el-table__header-wrapper) {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight;\n line-height: 34px;\n\n .cell {\n height: 28px;\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n font-weight: 500 !important;\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .render__header {\n display: inline-flex;\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n :deep(.el-table__body-wrapper) {\n .el-table__body {\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n\n // border-bottom:1px solid $tableBorderColor;\n\n .cell {\n // box-sizing: border-box;\n // display: inline-block;\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: 28px;\n padding: 0 5px;\n line-height: 28px;\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n }\n\n .gv-input-number {\n width: 120px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n\n .gv-select__table {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n }\n }\n }\n }\n\n :deep(.el-table__fixed),\n :deep(.el-table__fixed-right) {\n .el-table__fixed-header-wrapper {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight !important;\n line-height: 34px;\n\n .cell {\n display: inline-block; // flex\n height: 28px;\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n font-weight: 500 !important;\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .render__header {\n display: inline-block; // flex\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n .el-table__fixed-body-wrapper {\n .el-table__body {\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n // box-sizing: border-box;\n padding: 2px 0;\n\n .cell {\n display: inline-block; // flex\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: 28px;\n padding: 0 5px;\n line-height: 28px;\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n }\n\n .gv-input-number {\n width: 120px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n\n .gv-select__table {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n\n .cell {\n display: inline-block; // flex\n }\n }\n }\n }\n }\n }\n }\n\n // pageinfo\n :deep(.el-pagination) {\n float: right;\n\n .el-input__inner {\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover) !important;\n }\n\n &:hover {\n border-color: var(--primaryColorHover, $primaryColorHover) !important;\n }\n }\n\n .el-pagination__total {\n left: 15px;\n //font-size: $appTextSize !important;\n // position: absolute;\n margin-right: 20px;\n font-weight: 500;\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-pagination__sizes {\n // position: absolute;\n left: 65px;\n margin: 0px 10px 0 0;\n width: 100px;\n line-height: 28px;\n .el-select {\n width: 100px;\n line-height: 28px;\n .el-select__wrapper {\n //font-size: $appTextSize;\n min-height: 28px;\n }\n .el-input {\n width: 90px;\n\n .el-input__inner {\n height: 25px;\n line-height: 25px;\n }\n }\n }\n }\n\n .btn-prev,\n .btn-next {\n min-width: 25px;\n padding: 0;\n }\n\n .el-pager {\n li.active,\n li:hover {\n color: var(--primaryColor, $primaryColor);\n }\n .is-active number {\n //font-size: $appTextSize;\n }\n .number {\n min-width: 30px;\n //font-size: $appTextSize;\n font-weight: $fontWeight;\n }\n }\n\n .el-pagination__jump {\n .el-pagination__goto {\n //font-size: $appTextSize;\n }\n .el-pagination__classifier {\n //font-size: $appTextSize;\n }\n .el-pagination__editor {\n //font-size: $appTextSize;\n width: 45px;\n\n .el-input__inner {\n height: 24px;\n line-height: 24px;\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTable from './src/GvTable.vue';\n\nconst GvTablePlugin = {\n install(app: App): void {\n app.component(GvTable.name ?? 'GvTable', GvTable);\n },\n};\nexport default GvTablePlugin;\n\nexport { GvTable };\n","<!--\n * @title: tab pane component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:19:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 10:24:57\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { hasScrollbar } from '@@/utils';\n import { defineComponent, getCurrentInstance, nextTick, onMounted, ref } from 'vue';\n\n // const { getPrefixCls } = useStyle();\n // const prefixCls = getPrefixCls('tab-pane');\n export default defineComponent({\n name: 'GvTabPane',\n props: {\n name: {\n type: String,\n required: false,\n default: undefined,\n },\n label: {\n type: String,\n required: false,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n maxHeight: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n autoHeight: {\n type: Boolean,\n required: false,\n default: false,\n },\n },\n\n // emit\n emits: ['tab-click'],\n setup(props, { emit, slots }) {\n // @data\n const sMaxHeight = props.maxHeight;\n const isAnchor = ref(false);\n const isScrollbar = ref(false);\n const isEditContainer = ref(false);\n const instance = getCurrentInstance();\n\n // @watch\n // @methods\n\n // @mounted\n onMounted(() => {\n nextTick(() => {\n const rootEl = instance?.proxy?.$el;\n const dialogBody = rootEl.closest('<div className=\"gv\"></div>-drawer__body--inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl.closest('.gv-edit__container')) isAnchor.value = true;\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl.closest('.gv-edit__container')) isEditContainer.value = true;\n if (props.autoHeight === false)\n if (isEditContainer.value === false)\n if (isScrollbar.value === false)\n if (isAnchor.value === false)\n if (!sMaxHeight) {\n const tabPane = rootEl;\n const offsetTop = tabPane.classList.contains('el-tabs--left') ? 95 : 165;\n const maxHeight = document.documentElement.clientHeight - rootEl.offsetTop - offsetTop;\n rootEl.style.maxHeight = maxHeight + 'px';\n }\n });\n });\n // @render\n return () => (\n <div\n data-name={props.name}\n data-label={props.label}\n data-disabled={props.disabled}\n style={{ overflow: 'hidden auto', maxHeight: `${props.maxHeight}` }}>\n {slots.default?.()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tab-pane';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvTabPane from './src/GvTabPane.vue';\n\nconst GvTabsPlugin = {\n install(app: App): void {\n app.component(GvTabPane.name ?? 'GvTabPane', GvTabPane);\n },\n};\nexport default GvTabsPlugin;\n\nexport { GvTabPane };\n","<!--\n * @title: tabs component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 09:50:50\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:54:16\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { hasScrollbar } from '@@/utils';\n import { ElTabPane, ElTabs } from 'element-plus';\n import { defineComponent, getCurrentInstance, nextTick, onMounted, ref, watch, type PropType, type VNode } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tabs');\n export default defineComponent({\n name: 'GvTabs',\n props: {\n tabPosition: {\n type: String,\n default: 'left',\n },\n value: {\n type: [Number, String] as PropType<number | string>,\n default: undefined,\n },\n type: {\n type: String as PropType<'card' | 'border-card'>,\n default: undefined, // card|border-card\n },\n closable: {\n type: Boolean,\n default: false,\n },\n tabMaxHeight: {\n type: [Number, String],\n default: undefined,\n },\n },\n\n // emit\n emits: ['tab-click'],\n setup(props, { emit, slots }) {\n // @data\n const inputValue = ref(props.value);\n const tabHeight = ref('auto');\n const isAnchor = ref(false);\n const isScrollbar = ref(false);\n const panes = ref([]);\n const isEditContainer = ref(false);\n const instance = getCurrentInstance();\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @methods\n /**\n * @todo: 点击tab页响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-09 09:16:37\n * @param {*} tabVm 被选中tab页实例\n */\n const handleTabClick = (tabVm) => {\n const props = tabVm.props;\n const parent = tabVm.parent;\n const tabName = props.name;\n if (tabName) parent.props.value = tabName;\n emit('tab-click', tabVm);\n };\n\n /**\n * @todo: created tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:05:03\n */\n const calcPaneInstances = () => {\n if (panes.value.length === 0)\n if (slots.default?.())\n slots.default?.().forEach((vnode) => {\n if (vnode && typeof vnode.type === 'object' && 'name' in vnode.type && vnode.type.name === 'GvTabPane') {\n const tabPane = {};\n const props = vnode.props;\n tabPane['label'] = props?.label;\n tabPane['name'] = props?.name;\n tabPane['autoHeight'] = isEditContainer.value;\n let visible = true;\n if (props?.visible === false) visible = false;\n tabPane['visible'] = visible;\n (panes.value as any[]).push(tabPane);\n }\n });\n return panes.value || [];\n };\n /**\n * @todo: 创建tabpanel\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-03 16:30:54\n */\n const createTabPane = () =>\n calcPaneInstances().map((vnode: VNode, index) => {\n const props = vnode.props;\n // console.log(vnode.name);\n return props?.visible ? (\n <ElTabPane\n // v-show={vnode.visible}\n ref=\"tabPane\"\n name={props?.name}\n label={props?.label}\n style={{ height: `${tabHeight.value} !important` }}>\n {slots.default?.()[index]}\n </ElTabPane>\n ) : null;\n });\n\n // @mounted\n onMounted(() => {\n nextTick(() => {\n const rootEl = instance?.proxy?.$el as HTMLElement | undefined;\n const dialogBody = rootEl?.closest('.gv-drawer__body--inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n else {\n const dialogContainer = rootEl?.closest('.gv-container');\n if (dialogContainer) isScrollbar.value = hasScrollbar(dialogContainer);\n }\n if (rootEl?.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl?.closest('.gv-edit__container')) isEditContainer.value = true;\n if (!isEditContainer.value)\n if (isScrollbar.value === false)\n if (isAnchor.value === false) {\n // 设置tab页高度\n const drawer = rootEl?.closest('.gv-drawer');\n if (drawer) tabHeight.value = 'auto';\n // const tp = this.tabPosition === 'left' ? 170 : 230;\n // this.tabHeight = document.documentElement.clientHeight - this.$el.offsetTop - tp + 'px';\n else {\n const dialog = rootEl?.closest('.gv-dialog');\n if (dialog) tabHeight.value = 'auto';\n // const tp = this.tabPosition === 'left' ? 170 : 230;\n // this.tabHeight = document.documentElement.clientHeight - this.$el.offsetTop - tp + 'px';\n else {\n const h = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 55;\n if (h < 384) tabHeight.value = '384px';\n else tabHeight.value = h + 'px';\n }\n }\n }\n });\n });\n // @render\n return () => (\n <ElTabs\n ref=\"gv-tabs\"\n v-model={inputValue.value}\n tab-position={props.tabPosition}\n type={props.type}\n closable={props.closable}\n on-tab-click={handleTabClick}\n class={prefixCls}>\n {createTabPane()}\n </ElTabs>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tabs';\n .#{$prefixCls} {\n :deep(.el-tabs__header) {\n &.is-top {\n margin: 0 0 6px;\n }\n\n .el-tabs__nav {\n .el-tabs__active-bar {\n background-color: var(--primaryColor, $primaryColor);\n }\n\n .el-tabs__item {\n //font-size: $appTextSize;\n\n &:hover {\n color: var(--primaryColor, $primaryColor);\n }\n\n &.is-active {\n color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTabs from './src/GvTabs.vue';\n\nconst GvTabsPlugin = {\n install(app: App): void {\n app.component(GvTabs.name ?? 'GvTabs', GvTabs);\n },\n};\nexport default GvTabsPlugin;\n\nexport { GvTabs };\n","import type { App } from 'vue';\nimport GvTag from './src/GvTag.vue';\n\nconst GvTagPlugin = {\n install(app: App): void {\n app.component(GvTag.name ?? 'GvTag', GvTag);\n },\n};\nexport default GvTagPlugin;\n\nexport { GvTag };\n","<!--\n * @title: navigation tags view\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-20 10:57:41\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 18:00:46\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { usePermsStore } from '@/store/modules/perms';\n import { useTagsViewStore } from '@/store/modules/tagsView';\n import { useBridgeI18n } from '@@/bridge';\n import { joinIcon, pathResolve } from '@@/utils';\n import { useEventListener } from '@vueuse/core';\n import { ElTabPane, ElTabs } from 'element-plus';\n import { cloneDeep } from 'lodash-es';\n import { computed, defineComponent, nextTick, onMounted, reactive, ref, unref, watch } from 'vue';\n import { useRouter, type RouteLocationNormalizedLoaded } from 'vue-router';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tags-view');\n export default defineComponent({\n name: 'GvTagsView',\n setup() {\n const visible = ref(false);\n const position = reactive({ x: 0, y: 0 });\n const currentKey = ref('');\n\n const { currentRoute, push, replace } = useRouter();\n const activeKey = ref<string>(unref(currentRoute).path || '/dashboard');\n const { t } = useBridgeI18n();\n const tagsViewStore = useTagsViewStore();\n const permsStore = usePermsStore();\n\n const visitedViews = computed(() => tagsViewStore.visitedViews);\n const mainAppRoutes = computed(() => permsStore.mainAppRoutes);\n\n const isRedirect = (path: string) => path.startsWith('/redirect');\n const isActive = (route) => route.path === unref(currentRoute).path;\n const isAffix = (tag) => tag.meta && tag.meta.affix;\n\n /**\n * @todo: filter affix nav menus\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 11:39:08\n * @param {*} mainAppRoutes\n * @param {*} basePath\n */\n const filterAffixNavMenus = (navMenus, basePath = '/'): RouteLocationNormalizedLoaded[] => {\n const affixTags: RouteLocationNormalizedLoaded[] = [];\n // console.log('navMenus:', navMenus.value);\n navMenus.value.forEach((route) => {\n if (route.meta && route.meta.affix === true) {\n const tagPath = pathResolve(basePath, route.path);\n affixTags.push({\n fullPath: tagPath,\n path: tagPath,\n name: route.name,\n meta: route.meta,\n matched: [],\n params: {},\n query: {},\n hash: '',\n redirectedFrom: undefined,\n });\n }\n });\n return affixTags;\n };\n /**\n * @todo: add affix tags\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 11:45:26\n */\n const addAffixTags = () => {\n const affixTags = filterAffixNavMenus(mainAppRoutes);\n\n for (const tagView of affixTags) if (tagView.name) tagsViewStore.addVisitedView(tagView);\n };\n /**\n * @todo: create tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:36:56\n */\n const createTabPanel = () =>\n visitedViews.value.map((v) => {\n const icons = joinIcon(v.meta?.picon);\n const closable = visitedViews.value.length > 1;\n const title = t(v.meta?.title ?? 'no-name');\n return (\n <ElTabPane\n key={String(v.path)}\n name={String(v.path)}\n label={title}\n closable={closable}>\n {{\n label: () => (\n <span class=\"tab-label\">\n {icons && <i class={icons}></i>}\n {title}\n </span>\n ),\n }}\n </ElTabPane>\n );\n });\n\n /**\n * @todo: show right context menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 17:22:53\n * @param {*} key\n */\n const showContextMenu = (key: string) => {\n currentKey.value = key;\n visible.value = true;\n };\n /**\n * @todo: close right context menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:31:06\n */\n const closeContextMenu = () => {\n visible.value = false;\n };\n /**\n * @todo: jump to link route\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-21 11:25:08\n * @param {*} routePath\n */\n const toLink = (routePath: string) => {\n const targetView = visitedViews.value.find((v) => v.path === routePath);\n activeKey.value = routePath || '/dashboard';\n\n if (targetView)\n // 使用完整的 route 对象跳转,保留 query 参数\n push({\n path: targetView.path,\n query: targetView.query || {},\n });\n else push({ path: routePath, query: {} });\n };\n /**\n * @todo: jump to last tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:31:01\n * @param {*} visitedView\n * @param {*} currentView\n */\n const toLastView = (visitedView: RouteLocationNormalizedLoaded[], currentView: RouteLocationNormalizedLoaded) => {\n const latestView = visitedView.slice(-1)[0];\n if (visitedView) {\n activeKey.value = latestView.path;\n push(latestView.path);\n } else if (currentView.name === 'Dashboard') replace({ path: '/redirect' + currentView.path });\n else push('/');\n };\n /**\n * @todo: add menu tab\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-21 10:27:35\n */\n const addNavMenu = () => {\n const name = currentRoute.value.name;\n if (name) tagsViewStore.addTagView(currentRoute.value);\n };\n\n const moveToCurrentTag = (view: RouteLocationNormalizedLoaded) => {\n // toLink(view.path);\n };\n\n /**\n * @todo: click tab event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 12:08:48\n * @param {*} tab\n */\n const clickTab = (tab) => {\n toLink(tab.props.name);\n };\n /**\n * @todo: close current tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:56:44\n * @param {*} targetKey\n */\n const closeCurrentTag = async (targetKey) => {\n const view = visitedViews.value.filter((view) => view.path === targetKey);\n if (isAffix(view[0])) return;\n\n await tagsViewStore.delTagView({ view: view[0] });\n\n // 清除缓存的search条件\n // currentRoute.value.meta.search = {};\n // 判断是否是当前标签页关闭\n if (isActive(view[0])) toLastView(visitedViews.value, view[0]);\n };\n /**\n * @todo: refresh selected tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:40:45\n */\n const refreshSelectedTag = async () => {\n tagsViewStore.delCachedView(unref(currentRoute));\n const { path, query } = unref(currentRoute);\n await nextTick();\n replace({\n path: '/redirect' + path,\n query: query,\n });\n };\n const findCurTagIndex = () => visitedViews.value.findIndex((x) => x.path === currentKey.value);\n /**\n * @todo: close right/left tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:42:33\n * @param {*} direction\n */\n const closeTagsOrientation = (direction) => {\n const index = findCurTagIndex();\n if (index === -1) return;\n let isClosed = false;\n const vV = cloneDeep(visitedViews.value);\n vV.map(({ path }, i) => {\n if (direction === 'right' && i > index) {\n if (path === unref(activeKey)) isClosed = true;\n closeCurrentTag(path);\n } else if (direction === 'left' && i < index) {\n if (path === unref(activeKey)) isClosed = true;\n closeCurrentTag(path);\n }\n });\n // 跳转至当前页\n if (isClosed) toLink(unref(currentKey));\n };\n /**\n * @todo: close other tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 11:04:12\n */\n const closeOthersTags = () => {\n const index = findCurTagIndex();\n if (index === -1) return;\n push(currentKey.value);\n\n tagsViewStore.delOthersViews(currentRoute.value).then(() => {\n moveToCurrentTag(unref(currentRoute));\n });\n };\n\n watch(\n () => [currentRoute.value.path, currentRoute.value.name],\n ([path, name], [, oldName]) => {\n // if /redirect\n if (isRedirect(path as string)) return;\n // 当前选中tab页\n activeKey.value = (path as string) || '/dashboard';\n // del notify msg\n if (oldName !== name) {\n const alertObj = document.body.querySelector('body>.el-notification');\n if (alertObj) alertObj.remove();\n }\n addNavMenu();\n // moveToCurrentTag(currentRoute.value);\n },\n );\n\n /**\n * @todo: bind right click event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 15:28:28\n */\n const tagsViewEl = ref<HTMLElement | null>(null);\n useEventListener(tagsViewEl, 'contextmenu', (ev: MouseEvent) => {\n ev.preventDefault();\n\n let targetNode: HTMLElement | null = null;\n const el = ev.target as HTMLElement;\n\n if (el.tagName === 'SPAN') targetNode = el.parentElement;\n else targetNode = el;\n\n if (targetNode?.classList.contains('el-tabs__item')) {\n const path = targetNode?.getAttribute('aria-controls')?.replace(/^pane-/, '') || '';\n if (path !== unref(currentRoute).path) toLink(path);\n\n position.x = ev.clientX || ev.pageX;\n position.y = ev.clientY || ev.pageY;\n\n showContextMenu(path);\n }\n });\n /**\n * @todo: close context menu on window click\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:39:46\n */\n useEventListener(window, 'click', () => {\n closeContextMenu();\n });\n\n // mounted hooks\n onMounted(() => {\n addAffixTags();\n addNavMenu();\n });\n return () => (\n <div\n ref={tagsViewEl}\n class={[prefixCls, 'flex w-full relative bg-[#fff] dark:bg-[var(--el-bg-color)']}>\n <ElTabs\n class=\"multi-tab\"\n type=\"card\"\n modelValue={activeKey.value}\n onUpdate:modelValue={(v: string) => (activeKey.value = v)}\n onTabClick={clickTab}\n onTabRemove={closeCurrentTag}>\n {createTabPanel()}\n </ElTabs>\n {visible.value && (\n <ul\n class=\"tagsView-contextmenu\"\n style={{ left: `${position.x + 10}px`, top: `${position.y - 10}px` }}>\n <li onClick={refreshSelectedTag}>{t('tagsView.refresh')}</li>\n {currentKey.value !== '/dashboard' && visitedViews.value.length === 2 && <li onClick={() => closeCurrentTag(currentKey.value)}>{t('tagsView.close')}</li>}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 1 && findCurTagIndex() < visitedViews.value.length - 1 && (\n <li onClick={() => closeTagsOrientation('right')}>{t('tagsView.closeRight')}</li>\n )}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 2 && findCurTagIndex() > 1 && <li onClick={() => closeTagsOrientation('left')}>{t('tagsView.closeLeft')}</li>}\n {currentKey.value === '/dashboard' && visitedViews.value.length > 1 && <li onClick={closeOthersTags}>{t('tagsView.closeOthers')}</li>}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 2 && <li onClick={closeOthersTags}>{t('tagsView.closeOthers')}</li>}\n </ul>\n )}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tags-view';\n\n .#{$prefixCls} {\n user-select: none; // 禁止选中文本\n\n .multi-tab {\n width: 100%;\n position: relative;\n :deep(.el-tabs__header) {\n margin: 0;\n border-bottom-color: $borderColor;\n height: 34px;\n line-height: 34px;\n .el-tabs__nav {\n border-color: $borderColor;\n .el-tabs__item {\n height: 34px; // 38px\n line-height: 34px; // 38px\n padding: 2px 10px 0 10px; // 0 10px\n //font-size: $textSize;\n border-left-color: $borderColor;\n\n &.is-active {\n & > span {\n font-weight: $fontWeight2;\n }\n color: var(--primaryColor, $primaryColor);\n }\n &:focus.is-focus:not(:active) {\n box-shadow: 0 0 1px 1px inset;\n }\n > span {\n font-weight: 500;\n > i {\n padding-right: 5px;\n //font-size: $textSize;\n }\n }\n }\n }\n .is-scrollable {\n .el-tabs__nav-next,\n .el-tabs__nav-prev {\n line-height: 42px;\n }\n\n i {\n font-size: 18px;\n color: rgba(0, 0, 0, 0.95);\n }\n }\n }\n .el-tabs__content {\n display: none !important;\n }\n }\n :deep(.tagsView-contextmenu) {\n position: fixed;\n top: $navHeadHeight;\n left: 300px;\n z-index: 9999;\n min-width: 90px;\n padding: 6px 0;\n list-style: none;\n background-color: #fff;\n border: 1px solid $borderColorSecondary;\n border-radius: $borderRadius;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n li {\n line-height: 27px;\n padding: 0 15px;\n //font-size: $appTextSize;\n &:hover,\n &:focus {\n background-color: $backgroundColor;\n color: var(--primaryColorHover, $primaryColorHover);\n cursor: pointer;\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTagsView from './src/GvTagsView.vue';\n// Define the install method on the GvExpandMenu component\nconst GvTagsViewPlugin = {\n install(app: App): void {\n app.component(GvTagsView.name ?? 'GvTagsView', GvTagsView);\n },\n};\nexport default GvTagsViewPlugin;\n\nexport { GvTagsView };\n","<!--\n * @title: theme switcher\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-08-14 10:17:38\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-18 15:04:37\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { ElDropdown, ElDropdownItem, ElDropdownMenu } from 'element-plus';\n import { computed } from 'vue';\n import { propTypes } from '../../utils/gv.propTypes';\n\n defineOptions({\n name: 'GvTheme',\n inheritAttrs: true,\n });\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('theme');\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const appStore = useAppStore();\n const themeOptions = computed(() => appStore.getSwitchTheme);\n const currentTheme = computed(() => appStore.getCurrentTheme);\n\n const handleSetTheme = () => {\n //appStore.setTheme(theme);\n };\n</script>\n<template>\n <ElDropdown\n trigger=\"click\"\n :class=\"prefixCls\"\n @command=\"handleSetTheme\">\n <div>\n <GvIcon\n class=\"international-icon\"\n iconName=\"theme\" />\n </div>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem\n v-for=\"item of themeOptions\"\n :key=\"item.value\"\n :disabled=\"currentTheme === item.value\"\n :command=\"item.value\">\n {{ item.label }}\n </ElDropdownItem>\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-theme';\n .#{$prefixCls} {\n display: inline-block;\n line-height: var(--right-item-line-height);\n height: var(--right-item-height);\n vertical-align: 10px;\n cursor: pointer;\n fill: #5a5e66;\n }\n</style>\n","import type { App } from 'vue';\nimport GvTheme from './src/GvTheme.vue';\nconst GvThemePlugin = {\n install(app: App): void {\n app.component(GvTheme.name ?? 'GvTheme', GvTheme);\n },\n};\nexport default GvThemePlugin;\n\nexport { GvTheme };\n","<!--\n * @title: tree component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 16:57:41\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:54:23\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElTree } from 'element-plus';\n import type { Node } from 'element-plus/es/components/tree/src/model/node';\n import type { FilterNodeMethodFunction, LoadFunction, RenderContentFunction, TreeComponentProps, TreeNodeData } from 'element-plus/es/components/tree/src/tree.type';\n import { defineComponent, type ComponentInternalInstance, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tree');\n\n type TreeData = Record<string, unknown>;\n\n export default defineComponent({\n name: 'GvTree',\n props: {\n treeData: {\n type: Array as PropType<TreeData[]>,\n default: () => [],\n },\n treeProps: {\n type: Object as PropType<TreeComponentProps['props']>,\n default: () => ({}),\n },\n nodeKey: {\n type: String,\n default: undefined,\n },\n lazy: {\n type: Boolean,\n default: false,\n },\n load: {\n type: Function as PropType<LoadFunction>,\n default: undefined,\n },\n showCheckbox: {\n type: Boolean,\n default: false,\n },\n draggable: {\n type: Boolean,\n default: false,\n },\n defaultExpandedKeys: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n },\n defaultCheckedKeys: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n },\n iconClass: {\n type: String,\n default: undefined,\n },\n defaultExpandAll: {\n type: Boolean,\n default: false,\n },\n expandOnClickNode: {\n type: Boolean,\n default: true,\n },\n checkOnClickNode: {\n type: Boolean,\n default: false,\n },\n filterNodeMethod: {\n type: Function as PropType<FilterNodeMethodFunction>,\n default: undefined,\n },\n renderContent: {\n type: Function as PropType<RenderContentFunction>,\n default: undefined,\n },\n },\n\n // @emits\n emits: ['node-click', 'node-expand', 'node-collapse', 'check', 'check-change', 'node-drop'],\n\n setup(props, { emit }) {\n // @methods\n\n const handleNodeClick = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null, event: MouseEvent) => {\n emit('node-click', data, node, treeNode, event);\n };\n\n const handleNodeExpand = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null) => {\n emit('node-expand', data, node, treeNode);\n };\n\n const handleNodeCollapse = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null) => {\n emit('node-collapse', data, node, treeNode);\n };\n\n const handleCheck = (\n data: TreeData,\n checkedInfo: {\n checkedNodes: TreeNodeData[];\n checkedKeys: (string | number)[];\n halfCheckedNodes: TreeNodeData[];\n halfCheckedKeys: (string | number)[];\n },\n ) => {\n emit('check', data, checkedInfo);\n };\n\n const handleCheckChange = (data: TreeData, checked: boolean, childChecked: boolean) => {\n emit('check-change', data, checked, childChecked);\n };\n\n const handleLazyLoad: LoadFunction = (...args) => {\n props.load?.(...args);\n };\n\n const handleNodeDrop = (draggingNode: Node, dropNode: Node, dropType: 'before' | 'after' | 'inner', event: DragEvent) => {\n emit('node-drop', draggingNode, dropNode, dropType, event);\n };\n\n // @render\n return () => (\n <ElTree\n ref=\"gv-tree\"\n data={props.treeData}\n props={props.treeProps}\n nodeKey={props.nodeKey}\n lazy={props.lazy}\n load={handleLazyLoad}\n draggable={props.draggable}\n showCheckbox={props.showCheckbox}\n defaultExpandedKeys={props.defaultExpandedKeys}\n defaultCheckedKeys={props.defaultCheckedKeys}\n icon={props.iconClass}\n highlightCurrent\n defaultExpandAll={props.defaultExpandAll}\n expandOnClickNode={props.expandOnClickNode}\n checkOnClickNode={props.checkOnClickNode}\n filterNodeMethod={props.filterNodeMethod}\n renderContent={props.renderContent}\n class={prefixCls}\n onNode-click={handleNodeClick}\n onNode-expand={handleNodeExpand}\n onNode-collapse={handleNodeCollapse}\n onNode-drop={handleNodeDrop}\n onCheck={handleCheck}\n onCheck-change={handleCheckChange}\n />\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tree';\n .#{$prefixCls} {\n :deep(.el-tree-node) {\n .el-tree-node__content {\n .el-tree-node__label {\n //font-size: $appTextSize;\n }\n .el-checkbox__input {\n &.is-checked {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTree from './src/GvTree.vue';\n\nconst GvTreePlugin = {\n install(app: App): void {\n app.component(GvTree.name ?? 'GvTree', GvTree);\n },\n};\nexport default GvTreePlugin;\n\nexport { GvTree };\n","/*\r\n * @title: encrypt\r\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\r\n * @Date: 2023-12-16 08:07:24\r\n * @LastEditors: andy.ten@tom.com\r\n * @LastEditTime: 2025-04-07 13:54:00\r\n * @version: 1.0.1\r\n * @copyright: copyright (c) 2025 Andy Xu\r\n * node: you can not copy and/or use and/or modify this program free,\r\n * please reserve the segment above.Please mail me if you have any question.\r\n */\r\n\r\nimport CryptoJS from 'crypto-js';\r\nexport const key = 'abcdefgabcdefg12';\r\nexport const encrypt = (word: any): string => {\r\n const keyStr = CryptoJS.enc.Utf8.parse(key);\r\n let ww;\r\n if (typeof word === 'object') ww = JSON.stringify(word);\r\n else ww = word;\r\n const srcs = CryptoJS.enc.Utf8.parse(ww);\r\n const encrypted = CryptoJS.AES.encrypt(srcs, keyStr, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });\r\n return encrypted.toString();\r\n};\r\nexport const decrypt = (word: string): any => {\r\n const keyStr = CryptoJS.enc.Utf8.parse(key);\r\n const decrypt = CryptoJS.AES.decrypt(word, keyStr, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });\r\n return CryptoJS.enc.Utf8.stringify(decrypt).toString();\r\n};\r\n// Randomly generate a specified number of hexadecimal keys\r\nexport const generateKey = (num: number): string => {\r\n const library = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n let key = '';\r\n for (let i = 0; i < num; i++) {\r\n const randomPoz = Math.floor(Math.random() * library.length);\r\n key += library.substring(randomPoz, randomPoz + 1);\r\n }\r\n return key;\r\n};\r\n","/*\n * @title: package lib entry\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2024-11-28 18:18:44\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 09:22:01\n * @version: 1.1.2\n * @copyright: copyright (c) 2024 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport type { Pinia } from 'pinia';\nimport { setActivePinia } from 'pinia';\nimport 'uno.css'; // 引入 UnoCSS 样式\nimport type { App } from 'vue';\nimport type { Composer } from 'vue-i18n';\n\nimport { setBridgeContext } from './bridge';\nimport GvBacktopPlugin, { GvBacktop } from './GvBacktop';\nimport GvBadgePlugin, { GvBadge } from './GvBadge';\nimport GvBreadCrumbPlugin, { GvBreadCrumb } from './GvBreadCrumb';\nimport GvButtonPlugin, { GvButton } from './GvButton';\nimport GvCardPlugin, { GvCard } from './GvCard';\nimport GvCascaderPlugin, { GvCascader } from './GvCascader';\nimport GvCheckboxPlugin, { GvCheckbox } from './GvCheckbox';\nimport GvCheckboxButtonPlugin, { GvCheckboxButton } from './GvCheckboxButton';\nimport GvCheckboxGroupPlugin, { GvCheckboxGroup } from './GvCheckboxGroup';\nimport GvColPlugin, { GvCol } from './GvCol';\nimport GvDatePickerPlugin, { GvDatePicker } from './GvDatePicker';\nimport GvDialogPlugin, { GvDialog } from './GvDialog';\nimport GvDividerPlugin, { GvDivider } from './GvDivider';\nimport GvDrawerPlugin, { GvDrawer } from './GvDrawer';\nimport GvExpandMenuPlugin, { GvExpandMenu } from './GvExpandMenu';\nimport GvFormPlugin, { GvForm } from './GvForm';\nimport GvHamburgerPlugin, { GvHamburger } from './GvHamburger';\nimport GvIconPlugin, { GvIcon } from './GvIcon';\nimport GvInputPlugin, { GvInput } from './GvInput';\nimport GvInputNumberPlugin, { GvInputNumber } from './GvInputNumber';\nimport GvLangSelectPlugin, { GvLangSelect } from './GvLangSelect';\nimport GvPopconfirmPlugin, { GvPopconfirm } from './GvPopconfirm';\nimport GvPopoverPlugin, { GvPopover } from './GvPopover';\nimport GvRadioPlugin, { GvRadio } from './GvRadio';\nimport GvRadioButtonPlugin, { GvRadioButton } from './GvRadioButton';\nimport GvRadioGroupPlugin, { GvRadioGroup } from './GvRadioGroup';\nimport GvRowPlugin, { GvRow } from './GvRow';\nimport GvScreenFullPlugin, { GvScreenFull } from './GvScreenFull';\nimport GvSearchBarPlugin, { GvSearchBar } from './GvSearchBar';\nimport GvSelectPlugin, { GvSelect } from './GvSelect';\nimport GvSidebarPlugin, { GvSidebar } from './GvSidebar';\nimport GvSidebarLogoPlugin, { GvSidebarLogo } from './GvSidebarLogo';\nimport GvSwitchPlugin, { GvSwitch } from './GvSwitch';\nimport GvTablePlugin, { GvTable } from './GvTable';\nimport GvTabPanePlugin, { GvTabPane } from './GvTabPane';\nimport GvTabsPlugin, { GvTabs } from './GvTabs';\nimport GvTagPlugin, { GvTag } from './GvTag';\nimport GvTagsViewPlugin, { GvTagsView } from './GvTagsView';\nimport GvThemePlugin, { GvTheme } from './GvTheme';\nimport GvTimePickerPlugin, { GvTimePicker } from './GvTimePicker';\nimport GvTreePlugin, { GvTree } from './GvTree';\nconst components = [\n GvRowPlugin,\n GvColPlugin,\n GvInputPlugin,\n GvButtonPlugin,\n GvPopconfirmPlugin,\n GvIconPlugin,\n GvInputNumberPlugin,\n GvCascaderPlugin,\n GvSwitchPlugin,\n GvRadioButtonPlugin,\n GvCheckboxButtonPlugin,\n GvRadioGroupPlugin,\n GvBadgePlugin,\n GvTabPanePlugin,\n GvTabsPlugin,\n GvDrawerPlugin,\n GvCardPlugin,\n GvTablePlugin,\n GvPopoverPlugin,\n GvRadioPlugin,\n GvSelectPlugin,\n GvTimePickerPlugin,\n GvCheckboxGroupPlugin,\n GvCheckboxPlugin,\n GvTagPlugin,\n GvTreePlugin,\n GvFormPlugin,\n GvLangSelectPlugin,\n GvBacktopPlugin,\n GvBreadCrumbPlugin,\n GvHamburgerPlugin,\n GvScreenFullPlugin,\n GvSearchBarPlugin,\n GvSidebarPlugin,\n GvSidebarLogoPlugin,\n GvThemePlugin,\n GvDialogPlugin,\n GvExpandMenuPlugin,\n GvTagsViewPlugin,\n GvDividerPlugin,\n GvDatePickerPlugin,\n];\n\nexport type GuavaUIOptions = {\n store: Pinia;\n i18n: Composer;\n};\n\nexport const install = (app: App, options: GuavaUIOptions) => {\n if ((install as any).INSTALLED) return;\n (install as any).INSTALLED = true;\n\n setActivePinia(options.store);\n setBridgeContext(options);\n\n components.forEach((c) => c.install(app));\n};\n\nconst GuavaUI = { install };\n\n// 🔹 按需导出组件\nexport {\n GvBacktop,\n GvBadge,\n GvBreadCrumb,\n GvButton,\n GvCard,\n GvCascader,\n GvCheckbox,\n GvCheckboxButton,\n GvCheckboxGroup,\n GvCol,\n GvDatePicker,\n GvDialog,\n GvDivider,\n GvDrawer,\n GvExpandMenu,\n GvForm,\n GvHamburger,\n GvIcon,\n GvInput,\n GvInputNumber,\n GvLangSelect,\n GvPopconfirm,\n GvPopover,\n GvRadio,\n GvRadioButton,\n GvRadioGroup,\n GvRow,\n GvScreenFull,\n GvSearchBar,\n GvSelect,\n GvSidebar,\n GvSidebarLogo,\n GvSwitch,\n GvTable,\n GvTabPane,\n GvTabs,\n GvTag,\n GvTagsView,\n GvTheme,\n GvTimePicker,\n GvTree,\n};\n\n// 🔹 hooks / utils\nexport { crud } from '@@/utils/gv.crud';\n// export * from './hooks/web/useNotify';\nexport * from './hooks/web/usePinyin';\nexport * from './hooks/web/useStorage';\nexport * from './utils/gv.notify';\nexport * from './utils/gv.propTypes';\nexport * from './utils/gv.secret';\nexport * from './utils/gv.tree';\nexport * from './utils/index';\n\n// 🔹 默认导出统一安装对象\nexport { GuavaUI };\n"],"names":["globalBridgeKey","getBridge","g","setBridgeContext","ctx","useBridgeI18n","i18n","getPrefixCls","variables","useStyle","prefixCls","_createBlock","_unref","ElBacktop","GvBacktopPlugin","app","GvBacktop","_sfc_main$F","name","props","vref","type","String","default","value","Number","max","isDot","Boolean","hidden","showZero","color","setup","slots","_createVNode","ElBadge","_export_sfc","sfc","GvBadgePlugin","_a","GvBadge","toString","is","val","isExternal","path","isString","isArray","isError","isObject","isDate","isNumber","isBoolean","isFunction","isElement","isMap","isImgPath","isDark","isNull","isEmpty","isEqual","a","b","i","keysA","keysB","key","isUrl","e","setHtmlAttrByLang","locale","sleep","timeLen","__async","resolve","toHump","all","letter","toLine","setDomCssProp","prop","dom","getDomCssProp","joinIcon","icon","joinIcons","hasClass","ele","cls","addClass","removeClass","reg","hasScrollbar","tag","dateFormatConfig","debounce","func","wait","immediate","timeout","arg","context","timestamp","result","later","last","args","callNow","getVNodeText","vnode","item","getVNodeName","removeAmountFormat","zeroFormat","numberFormat","pattern","oldVal","_nfPattern","strAry","p1","len","p2","ret","ch","p3","len2","amountFormat","decimal","v","decimalPattern","setQuickKeys","ev","btnHtml","inputHtml","messageConfirmHtml","bodyDialogHtml","dialogArr","buttonHtml","buttonDHtml","pathResolve","parentPath","childPath","preNameSpace","attrs","useAttrs","__props","isLocal","computed","iconType","iconName","svgClass","styleExternalIcon","iconComponent","compName","Icons","_openBlock","_createElementBlock","_mergeProps","_createElementVNode","_hoisted_1","ElIcon","_resolveDynamicComponent","_hoisted_2","GvIconPlugin","GvIcon","DEFAULT_CONFIG","getConfig","config","listToTree","list","conf","nodeMap","id","children","pid","node","parent","treeToList","tree","findNode","findNodeAll","findPath","visitedSet","findPathAll","filter","listFilter","__spreadValues","forEach","treeMapEach","data","conversion","haveChildren","conversionData","__spreadProps","treeMap","treeData","opt","eachTree","treeDatas","callBack","parentNode","element","newNode","filterBreadcrumb","routes","res","route","meta","_isSlot","s","Object","prototype","call","_isVNode","_sfc_main$D","appStore","useAppStore","permStore","usePermsStore","showBreadcrumbIcon","getShowBreadcrumbIcon","currentRoute","useRouter","t","levelList","ref","menuRouters","routers","getRouters","getBreadcrumb","currentPath","matched","slice","unref","renderBreadcrumb","map","disabled","redirect","ElBreadcrumbItem","title","watch","startsWith","_slot","ElBreadcrumb","TransitionGroup","GvBreadCrumbPlugin","GvBreadCrumb","_sfc_main$C","emits","emit","instance","getCurrentInstance","handleConfirm","event","ElPopconfirm","reference","GvInputPlugin","GvPopconfirm","getValueType","useStorage","valueType","excludes","keys","defaultExcludes","excludesArr","notificationTime","notificationTimeError","messageTime","messageTimeError","alert","msg","alertObj","getStorage","lang","promptMsg","duration","m","ElNotification","confirm","msgs","showCancelButton","hint","ok","cancel","reject","ElMessageBox","message","tableedit","ElMessage","_sfc_main$B","visible","text","otext","size","undefined","link","loading","refForm","required","nativeType","bizType","perms","cb","Function","useRoute","globalSize","useGlobalConfig","buttonSize","buttonConfirm","loadings","locked","isShow","isIf","getSlots","setIconStyle","replace","checkPerms","pm","slot","split","x","indexOf","length","arr","handleClick","exposed","resetFields","rootForm","originFormList","formList","Array","index","filtercode","showLabel","dateType","model","field","rootEl","el","dateRangeSingles","querySelectorAll","startInput","querySelector","endInput","click","then","classz","renderBtn","display","ElButton","GvButtonPlugin","GvButton","_sfc_main$A","_props","getCardHeader","header","ElCard","GvCardPlugin","GvCard","_sfc_main$z","options","placeholder","clearable","showAllLevels","separator","trigger","filterable","multiple","lazy","lazyLoad","sOps","inputValue","cascaderSize","sPlaceHolder","getDisabled","resolvedInputId","newVal","handleChange","handleBlur","handleFilterMethod","query","labels","pathLabels","join","spell","pathNodes","some","ElCascader","$event","expandTrigger","GvCascaderPlugin","GvCascader","_sfc_main$y","indeterminate","label","border","checkboxValue","checkboxSize","handleUpdate","ElCheckbox","GvCheckboxPlugin","GvCheckbox","_sfc_main$x","inheritAttrs","checkboxButtonSize","ElCheckboxButton","GvCheckboxButtonPlugin","GvCheckboxButton","_sfc_main$w","min","checkboxGroupSize","ElCheckboxGroup","GvCheckboxGroupPlugin","GvCheckboxGroup","_sfc_main$v","span","offset","xs","sm","md","lg","xl","ElCol","GvColPlugin","GvCol","toMidnight","date","d","daysAgo","days","midnight","monthBegin","quarterBegin","month","yearBegin","now","dateShortcuts","dateShortcutsEn","dateTimeShortcuts","dateTimeShortcutsEn","dateRangeShortcuts","start","end","dateRangeShortcutsEn","_sfc_main$u","modelValue","Date","format","valueFormat","defaultTime","rangeSeparator","startPlaceholder","endPlaceholder","disabledDateFunc","disabledDate","editable","unlink","useI18n","datePickerSize","getShortcuts","getPickerOptions","pickerOptions","shortcuts","includes","getTime","db","handleInput","vm","handleFocus","handlePick","maxDate","minDate","ElDatePicker","onCalendarChange","GvDatePickerPlugin","GvDatePicker","boundElements","initDrag","collapseMenu","dragDom","dialogHeaderEl","getStyle","attr","disX","disY","dragDomWidth","dragDomHeight","screenWidth","screenHeight","minDragDomLeft","menuWidth","maxDragDomLeft","minDragDomTop","maxDragDomTop","styL","styT","onMouseMove","left","top","onMouseUp","_sfc_main$t","hasFooter","width","height","nest","appendToBody","fullscreen","maxHeight","closeOnClickModal","closeOnPressEscape","dialogClass","buttonQuick","collapseMenus","myDialogClass","dialogVisible","maskVisible","dialogMaxHeight","sAppendToBody","modalAppendToBody","sNest","modalMask","newValue","handleVisible","handleOpen","handleOpened","nextTick","handleClose","handleClosed","handleCancel","renderFooterBtn","footer","propsData","getFooter","setMask","mask","getMaxHeight","parseFloat","document","documentElement","clientHeight","pEl","closest","onBeforeUnmount","window","removeEventListener","onMounted","addEventListener","ElDialog","GvDialogPlugin","GvDialog","_sfc_main$s","position","direction","target","clickDivider","preventDefault","stopPropagation","ElDivider","GvDividerPlugin","GvDivider","_sfc_main$r","paddingHeight","drawerVisible","drawerMaxHeight","show","buttonIcon","sPaddingHeight","drawerPaddingHeight","returnIcon","ElDrawer","GvDrawerPlugin","GvDrawer","newPropTypes","createTypes","propTypes","toValidableType","usePinyin","withTone","pinyin","pinYin","__emit","menuList","menuPath","fMenusList","generateRouter","serverRoutes","basePath","prefixTitle","prefixCode","router","i18ntitle","code","tempRoutes","handleCloseDrawer","handleSelect","handleSearch","_b","starClickHandle","star","menuItem","ElAutocomplete","Search","_withCtx","_hoisted_3","_toDisplayString","_hoisted_4","ElTabs","_Fragment","_renderList","ElTabPane","_hoisted_5","sub","_hoisted_6","StarFilled","Star","_hoisted_7","_component_router_link","_hoisted_8","sideWidth","expandHandle","_normalizeClass","_normalizeStyle","GvMenuList","GvExpandMenuPlugin","GvExpandMenu","_sfc_main$o","prefixIcon","suffixIcon","maxlength","readonly","columnProp","rows","autosize","showWordLimit","inputSize","sPlaceholder","renderPrefixIcon","renderSuffixIcon","select","handleClear","handleKeyDown","ElInput","number","prefix","suffix","GvInput","_sfc_main$n","step","stepStrictly","precision","currentValue","oldValue","ElInputNumber","GvInputNumberPlugin","GvInputNumber","_sfc_main$m","dicType","dicRemote","clear","isreload","editRow","collapseTags","userStore","useUserStore","useNotify","dicIcon","remote","loadingText","externalValue","inputShowLabel","inputFilterable","selectValue","originOptions","className","dicSrc","toLowerCase","valueCache","Map","selectSize","isEmptyLabel","getDictItemLabel","l1","l2","formatOptionLabel","findLabelInOptions","opts","find","c","getOptionValue","row","cached","get","obj","set","getSelectCode","o","trim","getSelectLabel","isEmptySelectValue","raw","every","syncEmptyToParent","elSelectModel","mergeOptionsWithSelected","_opts","merged","append","sv","pushDefaultOption","op","push","getSelectOptions","src","xx","arr2","dictCache","dict","getDictDivision","cache","addDictCache","getDict","RegExp","test","filterMethod","initialRemoteLoaded","pendingRemoteQuery","pendingRemotePromise","remoteRequestSeq","filterOriginOptions","remoteDictSearch","requestSeq","sDicType","substring","datas","ops","JSON","parse","console","log","remoteMethod","q","filtered","ensureDefaultOption","existed","resolveDisplayLabel","localOpts","applySelectValue","resolved","showLbl","deep","handleVisibleChange","renderSelectOption","ElOption","renderTableOption","columnTexts","multiColumn","v1","mm","m2","m4","vv1","mmm","mm2","mm4","labelArr","opArr","ElSelect","GvSelectPlugin","GvSelect","_sfc_main$l","columnKey","require","switchType","newStatus","ElSwitch","GvSwitchPlugin","GvSwitch","TimePicker","ElTimePicker","_sfc_main$k","isRange","disabledHours","disabledMinutes","disabledSeconds","timepickerSize","mergedDisabledHours","mergedDisabledMinutes","mergedDisabledSeconds","GvTimePickerPlugin","GvTimePicker","infoMsg","info","calLength","sum","vcity","checkDecimal","decimalLen","checkProvince","card","province","verifyBirthday","year","day","birthday","now_year","time","checkBirthday","re_fifteen","arr_data","re_eighteen","changeFivteenToEighteen","arrInt","arrCh","cardTemp","checkParity","valnum","htValidate","rule","callback","language","_sfc_main$j","divider","isDivider","labelWidth","formStyle","scroller","expose","searchFieldsCollapsed","provide","formRefs","formElRef","setFormRef","rootNodeStyle","rules","isEditContainer","sMaxHeight","isScrollbar","isAnchor","isDialog","colSpanNums","formType","styles","formSize","labelPosition","searchDivider","getLanguage","setDividerShow","getEditBar","editbar","ElRow","getDivider","dividerRender","dividerTitle","getDictItems","dictCacheTmp","dictTmp","getItemRules","_item","validateKey","maxLen","validator","gvValidate","excluded","handleRadioInput","formVal","handleDateRange2Focus","$el","handleDateRange2Blur","handleDateRange2Change","endTime","startTime","datePicker","dateArr","handleSwitchDictChange","error","handleRadioDictChange","getSearchColClass","slotProps","expand","showDefaultRow","searchFormRows","renderFormItem","_index","_slot3","colspan","createRow","blur","focus","change","render","renders","isHidden","cType","validateRule","sDateType","dateFormat","ph","startPh","endPh","cols","colSpanXs","colSpanSm","colSpanMd","colSpanLg","colSpanXl","week","datetime","editables","isTableDic","sLabel","searchFormLabel","switchDefaultVal","searchColClass","ElFormItem","_createTextVNode","ElTooltip","onFocus","padding","margin","clip","overflow","whiteSpace","ElRadioGroup","_slot2","ElRadio","ElRadioButton","vv","toolText","_resolveComponent","getItems","sRootEl","tabPane","offsetTop","classList","contains","clearFormValidate","clearValidate","setFormStyle","formStyle1","lastIndexOf","parseInt","clientWidth","init","formModel","formRule","difference","diff","fieldObj","oldObj","fieldObjKeys","key2","nextProps","prevProps","firstSlot","stringify","dialogBody","dialogBody2","Transition","_withDirectives","ElForm","flexWrap","flex","minWidth","_vShow","GvFormPlugin","GvForm","collapse","loadDict","loadDictDivision","toggleCollapse","collapsed","currentDict","currentReloadDict","currentDictDivision","Fold","Expand","GvHamburgerPlugin","GvHamburger","localeStore","useLocaleStore","langMap","currentLang","handleSetLang","switchLocale","useLocale","ElDropdown","ElDropdownMenu","ElDropdownItem","_component_GvIcon","GvLangSelectPlugin","GvLangSelect","_sfc_main$g","placement","tablePopover","columnType","popClass","handleUpdateVisible","handleShow","handleHide","handlePopoverWrapper","getReferenceSlot","ElPopover","GvPopoverPlugin","GvPopover","_sfc_main$f","radioValue","radioSize","GvRadioPlugin","GvRadio","_sfc_main$e","GvRadioButtonPlugin","GvRadioButton","_sfc_main$d","radioGroupSize","GvRadioGroupPlugin","GvRadioGroup","_sfc_main$c","gutter","GvRowPlugin","GvRow","toggle","isFullscreen","useFullscreen","toggleFullscreen","GvScreenFullPlugin","GvScreenFull","_sfc_main$a","inject","formNode","fieldList","fields","expandFields","shrinkFields","createSearchBar","searchBar","defaultSlot","searchBtnFlag","expandText","shrinkText","shrink","GvSearchBarPlugin","GvSearchBar","hasOneShowingChild","onlyOneChild","showingChildren","useRenderMenuTitle","renderMenuTitle","useRenderMenuItem","menuMode","renderMenuItem","oneShowingChild","fullPath","noShowingChildren","alwaysShow","ElMenuItem","ElSubMenu","_sfc_main$9","menuSelect","layout","getLayout","getCollapseMenus","leftMenuUniqueOpened","getLeftMenuUniqueOpened","activeMenu","open","renderMenu","ElMenu","renderMenuWrap","ElScrollbar","GvSidebarPlugin","GvSidebar","_imports_0","GvSidebarLogoPlugin","GvSidebarLogo","_sfc_main$7","createTableBar","tableBar","defaultSlots","childrenNodes","firstChild","_sfc_main$6","closable","effect","round","tagSize","ElTag","appendPageInfo","pi","pageInfo","currentpagenum","recordsperpage","countrows","totalpage","combined","tabNode","filterConditions","co","sOp","coo","ds","condition","searchCombined","action","upper","sType","saveCombined","fetchData","fetch","submit","hasMsg","fetchTable","checkForms","fmNodes","fmNode","rawFmChildren","fmChildList","fmNode2","_c","save","check","fmInnerNode","conditions","update","search","searchInputNode","tableEl","tableHeader","tableFixedHeader","columns","h","columnsFixed","lenFixed","searchNoFm","toNewPageSearch","trans","insertResult","searchData","updateResult","rownums","currentRow","removeResult","getDictDisplayLabel","dictObj","_f","_e","_d","_i","_h","_g","_k","_j","setEditValue","rowData","fieldValue","items","itemChild","codes","resetEditValue","crud","tableHeadFilterPopoverPopperStyle","maxWidth","_sfc_main$5","refTable","tableHead","tableData","pageSize","rowClassName","rowStyle","spanMethod","cellStyle","tableType","tableSort","tableKit","tableFetch","multi","isShowPage","total","tableInit","beforeImport","tableFilter","tableCb","expandRowKeys","limitHeight","tableAction","tableActionIcon","sTableAction","sTableActionIcon","sTableConfirm","detailPlacement","sTableType","originTableHead","tableHeads","sHeight","sMaxWidth","isEditTable","sPageSize","resultData","recordsList","records","pageSizes","filterHeads","popoverVisible","exportBtnDisabled","exportBtnLoading","importBtnLoading","tableSortMode","exportDialogShow","importDialogShow","sTableBar","gTableBar","tableSearchShow","sTableSort","sTableKit","showPopoverDetail","pageLayout","actionWidth","transHash","headColumn","headColumnInit","columnSumsDecimal","isIndeterminate","columnTreeList","columnCheckedKeys","storageKey","loginAccount","lsTableHeads","debounceSearch","tableRefs","tableRef","tableSize","getPageInfo","current","pages","setTableRef","closeAllPopover","property","next","ensurePopoverKey","propKey","wrapPopoverFilterBody","body","getScrollLeft","startLoading","stopLoading","transRecords","loadAction","splice","handleImport","handleExport","getImportBtn","import","buttonName","getExportBtn","export","runPageSearch","fC","fetchFn","handleSizeChange","handleCurrentChange","handleTableSearchInput","handleTableSearch","fh","strFh","y","getTableSearch","handlePopoverShow","popOvers","tableBodyWidth","style","bodyWrapper","scrollLeft","handlePopoverHide","createChangedColumns","checkedKeys","column","hasHidden","handleColumnCheckChange","checked","childChecked","$refs","$children","getCheckedKeys","hColumns","getTableColumn","setStoreLocal","handleTableRefresh","inputSearch","getTableBar","btns","exportSlots","importSlots","getKitBar","isVisible","ElButtonGroup","Refresh","Operation","ElTree","getSortModel","marginRight","columnFilterHandler","propField","popoverHtml","checkList","dateHtmlArr","filterValue","innerText","assign","getAttribute","add","tableFixHeader","fixColumns","fixLen","columnFilterHandlerReset","remove","primaryBtn","setAttribute","getColWidth","edit","label2","sWidth","columnFormatter","cellValue","handleColumnFilter","popoverHtmlList","from","pop","removeAttribute","renderHeadFilter","_slot4","_slot5","_slot6","fc","$store","getters","dictDivision","dispatch","ret2","_slot7","_slot8","_slot9","handleDictCheckAll","handleDictCheck","handlePopoverSlotClick","renderColumnItem","tableFixed","fixed","align","formatter","cellBlur","cellEnter","cellChange","selectable","showLabelProp","columnFilter","multiLabel","heads","reserveSelection","sHidden","sProp","Math","random","sFixed","sortable","multiLabels","hType","hSLabel","hSProp","hKey","hSFixed","hReserveSelection","hSortable","hSWidth","ElTableColumn","scope","renderRowEdit","renderAction","content","confirmArr","iconArr","sContent","confirms","detail","actionType","onClick","lock","$index","onConfirm","onAfter-enter","handleDetailPopoverShow","checkEditRow","tableColumns","thd","lsTableHeadsArr","startIndex","ff","f","treeNode","rownumWidth","actionHead","actionColumn","columnVNode","sortMethod","_0","order","fieldName","sortingType","sumData","sort","row1","row2","isNaN","localeCompare","oi","rowDblClick","tagName","cell","onRowDblclick","tr","tds","firstBtn","btnArr","j","btn","prevVal","typeArr","doLayout","n","tableBodyWrapper","_slot0","GvTableBar","ElTable","_resolveDirective","ElPagination","GvTablePlugin","GvTable","_sfc_main$4","autoHeight","proxy","GvTabsPlugin","GvTabPane","_sfc_main$3","tabPosition","tabMaxHeight","tabHeight","panes","handleTabClick","tabVm","tabName","calcPaneInstances","createTabPane","dialogContainer","GvTabs","GvTagPlugin","GvTag","_sfc_main$2","reactive","currentKey","activeKey","tagsViewStore","useTagsViewStore","permsStore","visitedViews","mainAppRoutes","isRedirect","isActive","isAffix","affix","filterAffixNavMenus","navMenus","affixTags","tagPath","params","hash","redirectedFrom","addAffixTags","tagView","addVisitedView","createTabPanel","icons","picon","showContextMenu","closeContextMenu","toLink","routePath","targetView","toLastView","visitedView","currentView","latestView","addNavMenu","addTagView","moveToCurrentTag","view","clickTab","tab","closeCurrentTag","targetKey","delTagView","refreshSelectedTag","delCachedView","findCurTagIndex","findIndex","closeTagsOrientation","isClosed","vV","cloneDeep","closeOthersTags","delOthersViews","oldName","tagsViewEl","useEventListener","targetNode","parentElement","clientX","pageX","clientY","pageY","GvTagsViewPlugin","GvTagsView","themeOptions","currentTheme","handleSetTheme","GvThemePlugin","GvTheme","_sfc_main","treeProps","nodeKey","load","showCheckbox","draggable","defaultExpandedKeys","defaultCheckedKeys","iconClass","defaultExpandAll","expandOnClickNode","checkOnClickNode","filterNodeMethod","renderContent","handleNodeClick","handleNodeExpand","handleNodeCollapse","handleCheck","checkedInfo","handleCheckChange","handleLazyLoad","handleNodeDrop","draggingNode","dropNode","dropType","GvTreePlugin","GvTree","encrypt","word","keyStr","CryptoJS","ww","srcs","decrypt","generateKey","num","library","randomPoz","components","GvPopconfirmPlugin","GvTabPanePlugin","install","setActivePinia","GuavaUI"],"mappings":"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"}