guava-ui 0.2.9 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/lib/guava-ui.es.js +5034 -4211
- package/lib/guava-ui.es.js.map +1 -1
- package/lib/guava-ui.umd.js +2 -2
- package/lib/guava-ui.umd.js.map +1 -1
- package/lib/index.css +1 -1
- package/lib/types/index.d.ts +270 -36
- package/package.json +1 -1
package/lib/guava-ui.es.js.map
CHANGED
|
@@ -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-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-09 16:16:19\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 invokeClick = async (e: MouseEvent) => {\n const raw = instance?.vnode?.props?.onClick as ((event: MouseEvent, args?: string) => unknown) | ((event: MouseEvent, args?: string) => unknown)[] | undefined;\n const handlers = raw ? (Array.isArray(raw) ? raw : [raw]) : [];\n if (handlers.length === 0) {\n emit('click', e, props.args);\n return;\n }\n for (const handler of handlers) await handler(e, props.args);\n };\n\n const withLoading = async (task: () => void | Promise<void>) => {\n if (props.loading) {\n await task();\n return;\n }\n loadings.value = true;\n try {\n await task();\n } finally {\n loadings.value = false;\n }\n };\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 await 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 await withLoading(async () => {\n const searchBtn = parent?.vnode.el?.querySelector('.gv-search-bar .el-button--primary') as HTMLElement | undefined;\n searchBtn?.click();\n });\n return;\n } else if (props.bizType === 'import' || props.bizType === 'export') {\n emit('click', e, props.args);\n return;\n }\n\n await withLoading(async () => {\n if (type === 'confirm' && buttonConfirm.value === false)\n try {\n await confirm(t('common.confirmMsg'));\n } catch {\n return;\n }\n\n if (!locked.value) {\n locked.value = true;\n try {\n await invokeClick(e);\n } finally {\n locked.value = false;\n }\n }\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-09 13:45:54\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 onBlur: handleBlur,\n onFocus: handleFocus,\n onChange: handleChange,\n } as any)}\n size={datePickerSize.value}\n disabled={props.disabled}\n editable={props.editable}\n prefix-icon=\"\"\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-09 18:04:43\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 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 else maskVisible.value = false;\n },\n );\n\n // @method\n const handleVisible = (visible: boolean) => {\n dialogVisible = visible;\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-10 09:01:23\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 { 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: ['close', 'closed', 'open', 'opened', 'cancel', 'resize', 'update:visible'],\n\n setup(props, { slots, emit }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n\n const drawerVisible = ref(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.value = newVal;\n if (drawerVisible.value)\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n else maskVisible.value = false;\n },\n );\n\n // @method\n\n const handleOpen = () => {\n // this.maskVisible = true;\n emit('open');\n };\n const handleOpened = () => {\n // this.maskVisible = true;\n emit('opened');\n };\n\n const handleClosed = () => {\n emit('update:visible', false);\n };\n\n const handleResize = (evt: MouseEvent, size: number) => {\n emit('resize', evt, size);\n };\n\n const handleCancel = (event: Event) => {\n drawerVisible.value = false;\n maskVisible.value = false;\n emit('cancel', event);\n };\n\n const handleVisible = (visible: boolean) => {\n drawerVisible.value = visible;\n };\n\n const handleClose = () => {\n drawerVisible.value = false;\n maskVisible.value = false;\n emit('update:visible', 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 - 225;\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.value) {\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.value}\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 onOpened={handleOpened}\n onResize={handleResize}\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 style={{ overflow: 'hidden auto', maxHeight: `${drawerMaxHeight.value}px !important` }}>\n <div class=\"gv-drawer__body__inner\">{slots.default?.()}</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-09 13:47: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 { useBridgeI18n } from '@@/bridge';\n import { ElTimePicker, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TTimePickerSize, TTimePickerType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('timepicker');\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 <div class={prefixCls}>\n <ElTimePicker\n ref={props.vref || 'gv-timepicker'}\n id={resolvedInputId.value}\n name={props.name}\n modelValue={inputValue.value}\n onUpdate:modelValue={handleUpdate}\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 disabled-hours={mergedDisabledHours}\n disabled-minutes={mergedDisabledMinutes}\n disabled-seconds={mergedDisabledSeconds}\n {...({\n onChange: handleChange,\n onBlur: handleBlur,\n onFocus: handleFocus,\n } as any)}\n />\n </div>\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-09 18:04:49\n * @version: 1.1.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 { 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\"> </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, index: number) => {\n let v;\n if (type === 'create') v = item.value;\n else if (type === 'watch') {\n const originItem = originFormList.value[index] as FormItem | undefined;\n if (originItem && (item.value !== originItem.value || item.showLabel !== originItem.showLabel)) v = item.value;\n else v = model.value[item.field] === undefined ? item.value : model.value[item.field];\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;\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-09 16:14:17\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 if (!vnode.props) vnode.props = {};\n const propsData = vnode.props;\n\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} \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} \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-09 11:28:48\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 { 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 {TableInstance} tabNode\n * @param {Recordable} filter\n */\nexport const combined = (tabNode: TableInstance, 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'] as number) ?? 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, '<');\n sOp = sOp.replace(/>/gi, '>');\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-09 17:43:39\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 */\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 Ok';\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: TableInstance, fetch: AsyncFn, data: any) => {\n if (tabNode === undefined || tabNode === null) {\n message('table object is null', 'error');\n return false;\n }\n let result = {};\n const tabInnerNode = tabNode.$;\n const exposed = tabInnerNode.exposed as any;\n\n const filterConditions = combined(tabNode, data);\n if (tabNode) {\n exposed.filterConditions = filterConditions;\n exposed.fetch = fetch;\n }\n exposed.startLoading();\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n exposed.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: Recordable<any> | null = {};\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 result = null;\n console.log(error);\n });\n } catch {\n message('form save failed', '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 result = null;\n console.log(error);\n });\n } catch {\n message('form save failed', 'error');\n result = null;\n return;\n }\n })\n .catch(() => {\n // throw new Error(e);\n Promise.reject('The form failed validation');\n result = null;\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: Recordable<any> | null = {};\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 result = null;\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 result = null;\n console.log(error);\n });\n })\n .catch(() => {\n result = null;\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('table 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('table object is null', 'error');\n return false;\n }\n const tabInnerNode = tabNode.$;\n const exposed = tabInnerNode.exposed as any;\n let result = {};\n const filterConditions = combined(tabNode, data);\n // console.log(JSON.stringify(filterConditions));\n // update: 保存查询条件、方法至table对象,为分页组件使用 2022-04-18\n\n exposed.filterConditions = filterConditions;\n exposed.fetch = fetch;\n exposed.startLoading();\n\n exposed.startLoading();\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 })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n exposed.stopLoading();\n\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 const exposed = tabNode?.exposed;\n exposed?.startLoading();\n\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\n exposed?.stopLoading();\n\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: Recordable<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;\n }\n if (result === null || result === undefined) return false;\n\n if (Array.isArray(result)) searchData.records.splice(0, 0, ...result);\n else 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) 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 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\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: 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\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 resetEditValue(formList);\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\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","invokeClick","raw","onClick","handlers","Array","length","handler","withLoading","task","setIconStyle","replace","checkPerms","pm","slot","split","x","indexOf","arr","handleClick","exposed","resetFields","rootForm","originFormList","formList","index","filtercode","showLabel","dateType","model","field","rootEl","el","dateRangeSingles","querySelectorAll","startInput","querySelector","endInput","searchBtn","click","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","onBlur","onFocus","onChange","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","then","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","handleResize","evt","returnIcon","ElDrawer","overflow","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","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","_sfc_main$k","isRange","disabledHours","disabledMinutes","disabledSeconds","timepickerSize","mergedDisabledHours","mergedDisabledMinutes","mergedDisabledSeconds","ElTimePicker","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","padding","margin","clip","whiteSpace","ElRadioGroup","_slot2","ElRadio","ElRadioButton","vv","toolText","_resolveComponent","getItems","sRootEl","tabPane","offsetTop","classList","contains","clearFormValidate","clearValidate","setFormStyle","formStyle1","lastIndexOf","parseInt","clientWidth","init","formModel","formRule","originItem","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","resetEditValue","setEditValue","rowData","fieldValue","items","itemChild","codes","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","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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"}
|
|
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/GvTree/src/GvTree.vue","../packages/GvTree/index.ts","../packages/utils/gv.table.ts","../packages/utils/gv.crud.ts","../packages/utils/gv.table.validate.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/utils/gv.secret.ts","../packages/index.ts"],"sourcesContent":["// bridge/index.ts\nimport type { Pinia } from 'pinia';\nimport type { Composer } from 'vue-i18n';\nimport type { Router } from 'vue-router';\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-12 23:30:13\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 { FormInstance } from 'element-plus';\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 valueFormat: 'YYYY[w]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 form model\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-12 18:29:17\n * @param {FormInstance} fmNode\n */\nexport const getFormModel = (fmNode: FormInstance | null | undefined): Recordable<any> => {\n if (fmNode == null) return {};\n // exposed model\n if (fmNode.model) return fmNode.model;\n // get model from children\n else {\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n let model: Recordable<any> = {};\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 const props = fmNode2.props;\n model = props.model;\n // console.log(model);\n }\n }\n return model;\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-06-15 16:23:18\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 iconName={meta.icon}></GvIcon> {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 .iconfont {\n padding-right: 5px;\n font-size: 14px;\n }\n .el-icon {\n padding-right: 5px;\n font-size: 20px;\n }\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-09 16:16:19\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 invokeClick = async (e: MouseEvent) => {\n const raw = instance?.vnode?.props?.onClick as ((event: MouseEvent, args?: string) => unknown) | ((event: MouseEvent, args?: string) => unknown)[] | undefined;\n const handlers = raw ? (Array.isArray(raw) ? raw : [raw]) : [];\n if (handlers.length === 0) {\n emit('click', e, props.args);\n return;\n }\n for (const handler of handlers) await handler(e, props.args);\n };\n\n const withLoading = async (task: () => void | Promise<void>) => {\n if (props.loading) {\n await task();\n return;\n }\n loadings.value = true;\n try {\n await task();\n } finally {\n loadings.value = false;\n }\n };\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 await 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 await withLoading(async () => {\n const searchBtn = parent?.vnode.el?.querySelector('.gv-search-bar .el-button--primary') as HTMLElement | undefined;\n searchBtn?.click();\n });\n return;\n } else if (props.bizType === 'import' || props.bizType === 'export') {\n emit('click', e, props.args);\n return;\n }\n\n await withLoading(async () => {\n if (type === 'confirm' && buttonConfirm.value === false)\n try {\n await confirm(t('common.confirmMsg'));\n } catch {\n return;\n }\n\n if (!locked.value) {\n locked.value = true;\n try {\n await invokeClick(e);\n } finally {\n locked.value = false;\n }\n }\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-10 09:56:48\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-12 13:21:04\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, watch, type PropType } from 'vue';\n import { useI18n } from 'vue-i18n';\n import { dateRangeShortcuts, dateRangeShortcutsEn, dateShortcuts, dateShortcutsEn, dateTimeShortcuts, dateTimeShortcutsEn, type ShortcutItem } 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: undefined,\n },\n editable: {\n type: Boolean,\n default: true,\n },\n unlink: {\n type: Boolean,\n default: false,\n },\n showWeekNumber: {\n type: Boolean,\n default: true,\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\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((): ShortcutItem[] | undefined => {\n if (locale.value === 'en') {\n if (props.type === 'date') return dateShortcutsEn;\n if (props.type === 'datetime') return dateTimeShortcutsEn;\n if (props.type === 'daterange' || props.type === 'datetimerange') return dateRangeShortcutsEn;\n return undefined;\n }\n if (props.type === 'date') return dateShortcuts;\n if (props.type === 'datetime') return dateTimeShortcuts;\n if (props.type === 'daterange' || props.type === 'datetimerange') return dateRangeShortcuts;\n return undefined;\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: Record<string, unknown> = {};\n if (props.disabledDateFunc.includes('beforeToday'))\n // 禁止选择今天之前日期(可以选择今天)\n pickerOptions['disabledDate'] = (date: Date) => date.getTime() < Date.now() - 8.64e7;\n if (props.disabledDateFunc.includes('afterToday')) pickerOptions['disabledDate'] = (date: Date) => date.getTime() > Date.now();\n if (typeof props.disabledDate === 'function') pickerOptions['disabledDate'] = props.disabledDate;\n return pickerOptions;\n });\n\n // @methods\n\n const handleInput = (value: TDatePickerType) => {\n emit('update:modelValue', value);\n emit('input', value);\n };\n\n const handleChange = (value: string) => {\n emit('change', value);\n };\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 const handleFocus = (vm: FocusEvent) => {\n emit('focus', vm);\n };\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 show-week-number={props.showWeekNumber}\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 {...(Array.isArray(props.defaultTime) ? { defaultTime: props.defaultTime } : {})}\n {...(typeof getPickerOptions.value.disabledDate === 'function' ? { disabledDate: getPickerOptions.value.disabledDate as (date: Date) => boolean } : {})}\n {...(getShortcuts.value ? { shortcuts: getShortcuts.value } : {})}\n format={props.format}\n clearable={props.clearable}\n valueFormat={props.valueFormat}\n {...({\n onCalendarChange: handlePick,\n onBlur: handleBlur,\n onFocus: handleFocus,\n onChange: handleChange,\n } as any)}\n size={datePickerSize.value}\n disabled={props.disabled}\n editable={props.editable}\n unlink-panels={props.unlink}></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-09 18:04:43\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 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 else maskVisible.value = false;\n },\n );\n\n // @method\n const handleVisible = (visible: boolean) => {\n dialogVisible = visible;\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-10 09:01:23\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 { 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: ['close', 'closed', 'open', 'opened', 'cancel', 'resize', 'update:visible'],\n\n setup(props, { slots, emit }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n\n const drawerVisible = ref(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.value = newVal;\n if (drawerVisible.value)\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n else maskVisible.value = false;\n },\n );\n\n // @method\n\n const handleOpen = () => {\n // this.maskVisible = true;\n emit('open');\n };\n const handleOpened = () => {\n // this.maskVisible = true;\n emit('opened');\n };\n\n const handleClosed = () => {\n emit('update:visible', false);\n };\n\n const handleResize = (evt: MouseEvent, size: number) => {\n emit('resize', evt, size);\n };\n\n const handleCancel = (event: Event) => {\n drawerVisible.value = false;\n maskVisible.value = false;\n emit('cancel', event);\n };\n\n const handleVisible = (visible: boolean) => {\n drawerVisible.value = visible;\n };\n\n const handleClose = () => {\n drawerVisible.value = false;\n maskVisible.value = false;\n emit('update:visible', 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 - 225;\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.value) {\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.value}\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 onOpened={handleOpened}\n onResize={handleResize}\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 style={{ overflow: 'hidden auto', maxHeight: `${drawerMaxHeight.value}px !important` }}>\n <div class=\"gv-drawer__body__inner\">{slots.default?.()}</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-13 08:30:50\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-13 08:30:44\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, watch } from 'vue';\n\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\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 isShow: propTypes.bool.def(false),\n });\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('expand-menu');\n\n const { t } = useBridgeI18n();\n const appStore = useAppStore();\n\n const drawerVisible = ref(appStore.getExpandMenuVisible || props.isShow);\n if (props.isShow) appStore.setExpandMenuVisible(true);\n watch(\n () => appStore.getExpandMenuVisible,\n (val) => {\n drawerVisible.value = val;\n },\n );\n watch(drawerVisible, (val) => {\n if (appStore.getExpandMenuVisible !== val) appStore.setExpandMenuVisible(val);\n });\n\n const sideWidth = computed(() => (props.collapse ? '54px' : '200px'));\n const expandHandle = () => {\n drawerVisible.value = !drawerVisible.value;\n };\n\n const cleanupDrawerOverlay = () => {\n document.body.classList.remove('el-popup-parent--hidden');\n document.body.style.removeProperty('overflow');\n document.body.style.removeProperty('padding-right');\n };\n</script>\n<template>\n <div :class=\"prefixCls\">\n <div\n class=\"expand-menu-title\"\n :class=\"{ selected: drawerVisible ? 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 ref=\"expandMenuRef\"\n v-model=\"drawerVisible\"\n :style=\"{ left: sideWidth, paddingLeft: sideWidth }\"\n class=\"sidebar-expand-drawer\"\n :with-header=\"false\"\n :append-to-body=\"true\"\n destroy-on-close\n direction=\"ltr\"\n resizable\n :modal-class=\"!collapse ? 'sidebar-expand-menu-collapse' : 'sidebar-expand-menu-unCollapse'\"\n size=\"650\"\n @closed=\"cleanupDrawerOverlay\">\n <GvMenuList @close=\"drawerVisible = 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-15 17:16:16\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\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: 'default',\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 if (event.target instanceof HTMLInputElement) {\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\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-06-12 12:07:39\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 { 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 modelValue={inputValue.value}\n onUpdate:modelValue={(v: number) => (inputValue.value = v)}\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 />\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-16 17:40:34\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-09 13:47: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 { useBridgeI18n } from '@@/bridge';\n import { ElTimePicker, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TTimePickerSize, TTimePickerType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('timepicker');\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 <div class={prefixCls}>\n <ElTimePicker\n ref={props.vref || 'gv-timepicker'}\n id={resolvedInputId.value}\n name={props.name}\n modelValue={inputValue.value}\n onUpdate:modelValue={handleUpdate}\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 disabled-hours={mergedDisabledHours}\n disabled-minutes={mergedDisabledMinutes}\n disabled-seconds={mergedDisabledSeconds}\n {...({\n onChange: handleChange,\n onBlur: handleBlur,\n onFocus: handleFocus,\n } as any)}\n />\n </div>\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-10 14:02:26\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 = (val: string[] | string) => {\n if (val === null || val.length === 0) return 0;\n let i, sum;\n sum = 0;\n // fixme: val有可能是数组,需要转化为字符串 2022-04-10\n const v = Array.isArray(val) ? val.join(',') : val;\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\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-16 17:50:57\n * @version: 1.1.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 { 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 {\n ElCol,\n ElForm,\n ElFormItem,\n ElInput,\n ElRadio,\n ElRadioButton,\n ElRadioGroup,\n ElRow,\n ElTooltip,\n useGlobalConfig,\n type ComponentSize,\n type DatePickerType,\n type FormInstance,\n type FormItemRule,\n } 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\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 * @todo: 查询 form 列默认折叠 class(单次遍历预计算,避免每项重复循环)\n */\n const searchColClassMap = computed(() => {\n if (formType.value !== 's' || !searchFieldsCollapsed.value) return {} as Record<number, string>;\n const slot = slots.default?.()?.[0];\n const slotProps = slot?.props as Recordable | undefined;\n if (slotProps?.expand === false) return {} as Record<number, string>;\n\n const showDefaultRow = appStore.searchFormRows === 1 ? 4 : 8;\n const classMap: Record<number, string> = {};\n let visibleIndex = 0;\n\n props.formList.forEach((item, index) => {\n if (item?.hidden === true) return;\n if (visibleIndex >= showDefaultRow - 1) classMap[index] = 'gv-form-col--hidden';\n visibleIndex++;\n });\n\n return classMap;\n });\n\n // @exposed\n expose({\n originFormList,\n model,\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 getDicRadioValue = (fieldVal: unknown): string | number | undefined => {\n if (fieldVal === null || fieldVal === undefined || fieldVal === '') return undefined;\n if (typeof fieldVal === 'object') {\n const obj = fieldVal as Record<string, unknown>;\n return (obj.value ?? obj.c) as string | number | undefined;\n }\n return fieldVal as string | number;\n };\n\n const setDicRadioValue = (field: string, val: string | number | boolean | undefined) => {\n model.value[field] = val === undefined || val === null ? '' : val;\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 const handleRadioToggle = (field: string, val: string | number, disabled: boolean, dicType: string | undefined, cb: Fn | undefined) => {\n if (disabled) return;\n if (String(val) !== String(getDicRadioValue(model.value[field]))) return;\n nextTick(() => {\n setDicRadioValue(field, '');\n handleRadioDictChange('', field, dicType, cb);\n });\n };\n\n /**\n * @todo: 字典表单项值是否为空\n */\n const isEmptyDicModelValue = (val: unknown): boolean => {\n if (val == null || val === '') return true;\n if (Array.isArray(val)) return val.length === 0;\n if (typeof val === 'object') {\n const o = val as Record<string, unknown>;\n const code = o.value ?? o.c;\n if (code != null && code !== '') return false;\n const label = o.label ?? o.v;\n return label == null || label === '';\n }\n return false;\n };\n\n /** init 内部同步 formList 时,避免 formList watch 重入触发 init */\n const isInternalFormSync = ref(false);\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 searchColClass = searchColClassMap.value[_index];\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 valueFormat = dateFormatConfig.week.valueFormat;\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 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 data-hidden={isHidden}>\n <ElFormItem\n prop={field}\n key={field}>\n <div class=\"el-input__inner gv-form__item__inner-blank\"> </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 data-hidden={isHidden}>\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 data-hidden={isHidden}>\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 data-hidden={isHidden}>\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 data-hidden={isHidden}>\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 data-hidden={isHidden}>\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 data-hidden={isHidden}>\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 as DatePickerType}\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 data-hidden={isHidden}>\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 data-hidden={isHidden}>\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 data-hidden={isHidden}>\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 modelValue={getDicRadioValue(model.value[field])}\n onUpdate:modelValue={(val) => {\n setDicRadioValue(field, val);\n handleRadioDictChange(val, field, dicType, cb);\n }}>\n {ops.map((x) =>\n format[0] === 0 ? (\n <ElRadio\n value={x.c}\n disabled={disabled}\n {...({\n onMousedown: () => handleRadioToggle(field, x.c, !!disabled, dicType, cb),\n } as Record<string, unknown>)}>\n {getLanguage(userStore.language, x)}\n </ElRadio>\n ) : (\n <ElRadioButton\n value={x.c}\n disabled={disabled}\n {...({\n onMousedown: () => handleRadioToggle(field, x.c, !!disabled, dicType, cb),\n } as Record<string, unknown>)}>\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 data-hidden={isHidden}>\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 modelValue={model.value[field]}\n onUpdate:modelValue={(val) => {\n model.value[field] = val;\n }}\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 data-hidden={isHidden}>\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 data-hidden={isHidden}>\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 if (isInternalFormSync.value) return;\n isInternalFormSync.value = true;\n try {\n // alert(type);\n const formModel = {};\n const formRule = {};\n props.formList.forEach((item: FormItem, index: number) => {\n let v;\n if (type === 'create') v = item.value;\n else if (type === 'watch') {\n const originItem = originFormList.value[index] as FormItem | undefined;\n const modelVal = model.value[item.field];\n if (modelVal !== undefined && modelVal !== item.value) v = modelVal;\n else if (originItem && (item.value !== originItem.value || item.showLabel !== originItem.showLabel)) v = item.value;\n else v = modelVal === undefined ? item.value : modelVal;\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 if (item.type === 'dic' && isEmptyDicModelValue(v) && item.showLabel) item.showLabel = item.multiple ? [] : '';\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 } finally {\n isInternalFormSync.value = false;\n }\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 if (isInternalFormSync.value) return;\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 // @mounted hook\n onMounted(() => {\n nextTick(() => {\n // get root element\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\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;\n }\n\n .el-col {\n min-height: 34px;\n margin-bottom: 14px;\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: 0px;\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-13 09:59:04\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-13 08:24:51\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 if (!vnode.props) vnode.props = {};\n const propsData = vnode.props;\n\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) => x.$el?.parentElement.style?.display !== 'none');\n // console.log(fieldList2);\n if (fieldList2.length > showDefaultRow - 1) {\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} \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} \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-06-13 08:30:48\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, nextTick, 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 const needCloseDrawer = appStore.getExpandMenuVisible;\n if (needCloseDrawer) appStore.setExpandMenuVisible(false);\n props.menuSelect?.(index);\n\n const navigate = () => {\n if (isUrl(index)) {\n window.open(index);\n return;\n }\n push(index);\n };\n\n if (needCloseDrawer) nextTick(navigate);\n else navigate();\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: 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-10 17:04:53\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 { ElTree } from 'element-plus';\n import type TreeNode from 'element-plus/es/components/tree/src/model/node';\n import type { AllowDropFunction, FilterNodeMethodFunction, LoadFunction, RenderContentFunction, TreeComponentProps, TreeNodeData } from 'element-plus/es/components/tree/src/tree.type';\n import { defineComponent, ref, 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 allowDrop: {\n type: Function as PropType<AllowDropFunction>,\n default: undefined,\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, expose }) {\n const treeRef = ref<InstanceType<typeof ElTree> | null>(null);\n\n expose({\n getCheckedKeys: (leafOnly?: boolean) => treeRef.value?.getCheckedKeys(leafOnly) ?? [],\n getTreeNodeData: () => {\n const store = (treeRef.value as { store?: { root?: { childNodes?: TreeNode[] } } } | null)?.store;\n const childNodes = store?.root?.childNodes;\n if (childNodes?.length) return childNodes.map((node) => node.data as TreeData);\n return props.treeData;\n },\n });\n\n // @methods\n\n const handleNodeClick = (data: TreeData, node: TreeNode, treeNode: ComponentInternalInstance | null, event: MouseEvent) => {\n emit('node-click', data, node, treeNode, event);\n };\n\n const handleNodeExpand = (data: TreeData, node: TreeNode, treeNode: ComponentInternalInstance | null) => {\n emit('node-expand', data, node, treeNode);\n };\n\n const handleNodeCollapse = (data: TreeData, node: TreeNode, 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: TreeNode, dropNode: TreeNode, dropType: 'before' | 'after' | 'inner', event: DragEvent) => {\n emit('node-drop', draggingNode, dropNode, dropType, event);\n };\n\n // @render\n return () => (\n <ElTree\n ref={treeRef}\n class={prefixCls}\n data={props.treeData}\n props={props.treeProps}\n nodeKey={props.nodeKey}\n lazy={props.lazy}\n load={handleLazyLoad}\n draggable={props.draggable}\n allowDrop={props.allowDrop}\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 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","/*\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-16 11:42:05\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 */\nimport type { FilterCondition, PageInfo } from '@@/GvTable/src/types';\nimport type { TableInstance } from 'element-plus';\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 {TableInstance} tabNode\n * @param {Recordable} filter\n */\nexport const combined = (filter: Recordable<any>, tabNode?: TableInstance | null): Recordable<FilterCondition | PageInfo> => {\n const filterConditions: Recordable<FilterCondition | PageInfo> = {};\n if (!isEmpty(filter))\n Object.keys(filter).forEach((x: string) => {\n let val: string = filter[x] ? filter[x] + '' : '';\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\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'] as number) ?? 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, '<');\n sOp = sOp.replace(/>/gi, '>');\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-16 15:37:17\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 */\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\nconst isRequestCanceled = (error: unknown): boolean => {\n if (!error || typeof error !== 'object') return false;\n const err = error as { code?: string; name?: string; message?: string };\n return err.code === 'ERR_CANCELED' || err.name === 'CanceledError' || err.message === 'canceled';\n};\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 Ok';\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 (fetch: AsyncFn, data: any, tabNode?: TableInstance | null) => {\n let result = {};\n\n // console.log(data);\n const filterConditions = combined(data, tabNode);\n // console.log(filterConditions);\n let exposed: any | null = null;\n if (tabNode) {\n const tabInnerNode = tabNode.$;\n exposed = tabInnerNode.exposed as any;\n exposed.filterConditions = filterConditions;\n exposed.fetch = fetch;\n }\n if (tabNode && exposed) exposed.startLoading();\n // console.log(filterConditions);\n // console.log(fetch);\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n })\n .catch((error) => {\n if (!isRequestCanceled(error)) {\n message(error, 'error');\n console.log(error);\n }\n });\n\n if (tabNode && exposed) exposed.stopLoading();\n\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: Recordable<any> | null = {};\n const fmInnerNode = fmNode.$;\n\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 result = null;\n console.log(error);\n });\n } catch {\n message('form save failed', '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 result = null;\n console.log(error);\n });\n } catch {\n message('form save failed', 'error');\n result = null;\n return;\n }\n })\n .catch(() => {\n // throw new Error(e);\n Promise.reject('The form failed validation');\n result = null;\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\n let result: Recordable<any> | null = {};\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 result = null;\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 result = null;\n console.log(error);\n });\n })\n .catch(() => {\n result = null;\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('table 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: TableInstance, fetch: AsyncFn, data: any) => {\n if (tabNode === undefined || tabNode === null) {\n message('table object is null', 'error');\n return false;\n }\n const tabInnerNode = tabNode.$;\n const exposed = tabInnerNode.exposed as any;\n let result = {};\n const filterConditions = combined(data, tabNode);\n // console.log(JSON.stringify(filterConditions));\n // update: 保存查询条件、方法至table对象,为分页组件使用 2022-04-18\n\n exposed.filterConditions = filterConditions;\n exposed.fetch = fetch;\n\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 })\n .catch((error) => {\n if (!isRequestCanceled(error)) {\n message(error, 'error');\n console.log(error);\n }\n });\n\n exposed.stopLoading();\n\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 const exposed = tabNode?.exposed;\n exposed?.startLoading();\n\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\n exposed?.stopLoading();\n\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: Recordable<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;\n }\n if (result === null || result === undefined) return false;\n\n if (Array.isArray(result)) searchData.records.splice(0, 0, ...result);\n else 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) 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 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\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: 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\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 resetEditValue(formList);\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\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 edit row 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-10 14:02: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\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 = (val: string[] | string) => {\n if (val === null || val.length === 0) return 0;\n let i, sum;\n sum = 0;\n // fixme: val有可能是数组,需要转化为字符串 2022-04-10\n const v = Array.isArray(val) ? val.join(',') : val;\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\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\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, month, day, birthday) {\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 - 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('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\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 htTableValidate = {\n /**\n * @todo: 校验长度是否符合\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 14:48:17\n */\n isLength: (language, value, max) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\n const len = calLength(value);\n if (len > max) return infoMsg.maxLen(language, max);\n else return true;\n }\n },\n /**\n * @todo: 验证浮点数格式\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 12:54:58\n * @param {*} rule\n * @param {*} value\n * @param {*} callback\n */\n isDouble: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\n const reg = /^\\d+(\\.\\d+)?$/;\n if (!reg.test(value)) return infoMsg.double(language);\n else return true;\n }\n },\n /**\n * @todo: 验证身份证号\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 12:54:58\n * @param {*} rule\n * @param {*} value\n * @param {*} callback\n */\n isIdcard: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\n // 校验长度\n const reg = /(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/;\n if (!reg.test(value)) return infoMsg.idCard(language);\n else if (checkProvince(value) === false)\n // 检查省份\n return infoMsg.idCard(language);\n else if (checkBirthday(value) === false)\n // 校验生日\n return infoMsg.idCard(language);\n else if (checkParity(value) === false)\n // 检验位的检测\n return infoMsg.idCard(language);\n else return true;\n }\n },\n\n /**\n * @todo: 验证车牌号(含新能源)\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 12:55:38\n * @param {*} handle\n */\n isCarno: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\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)) return infoMsg.carNo(language);\n else return true;\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 true;\n }\n },\n\n /**\n * @todo: 验证金额格式(不能以0开头,小数点只能是2位)\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 15:38:24\n */\n isMoney: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\n const { 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)) return infoMsg.money(language);\n else if (val.indexOf('.') > 0)\n if (val.split('.')[0].length > max - 3)\n // 校验整数位格式只能是maxLength -3\n return infoMsg.moneyMax(language, max - 3);\n else return true;\n else if (val.length > max - 3) callback(new Error(infoMsg.moneyMax(language, max - 3)));\n else return true;\n }\n },\n /**\n * @todo: 验证带千位符金额格式\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 12:48:15\n * @param {*} str\n */\n isBigMoney: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\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)) return infoMsg.money(language);\n else return true;\n }\n },\n /**\n * @todo: 验证是否都是字母( 不包括标点符号)\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 12:48:15\n * @param {*} str\n */\n isLetter: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\n const reg = /^[A-Za-z]+$/;\n if (!reg.test(value)) return infoMsg.letter(language);\n else return true;\n }\n },\n /**\n * @todo: 验证是否是整数数字\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-27 19:30:29\n */\n isNumber: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\n const reg = /^\\+?[0-9][0-9]*$/;\n if (!reg.test(value)) return infoMsg.number(language);\n else return true;\n }\n },\n /**\n * @todo: 验证是否是整数数字(不能以0开始)\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-27 19:30:29\n */\n isNumber0: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\n const reg = /^\\+?[1-9][0-9]*$/;\n if (!reg.test(value)) return infoMsg.number0(language);\n else return true;\n }\n },\n /**\n * @todo: 验证是否数字和字母\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-27 19:30:29\n */\n isNumberLetter: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\n const reg = /^([a-z]|[A-Z]|[ ]|[(]|[)]|[-]|[_]|[*]|[.]|[,]|[,]|[0-9]){0,200}$/;\n if (!reg.test(value)) return infoMsg.numberLetter(language);\n else return true;\n }\n },\n /**\n * @todo: 验证是否数字和字母\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-27 19:30:29\n */\n isName: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\n const reg = /^[a-zA-Z0-9-_. \\u4E00-\\u9FA5]{0,60}$/;\n if (!reg.test(value)) return infoMsg.name(language);\n else return true;\n }\n },\n\n /**\n * @todo: 验证电话号码\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 12:41:04\n * @param {*} phone\n */\n isPhone: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\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)) return infoMsg.phone(language);\n else return true;\n }\n },\n\n /**\n * @todo: 验证是否email\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 12:40:50\n * @param {*} email\n */\n isEmail: (language, rule, value, callback) => {\n // eslint-disable-next-line no-useless-escape\n if (value === '' || value === undefined || value == null) return true;\n else {\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)) return infoMsg.email(language);\n else return true;\n }\n },\n /**\n * @todo: 验证是否是固定电话\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-27 19:39:10\n */\n isTelephone: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\n const reg = /0\\d{2}-\\d{7,8}/;\n if (!reg.test(value)) return infoMsg.telephone(language);\n else return true;\n }\n },\n /**\n * @todo: 验证手机号码或者固话\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 12:51:38\n * @param {*} rule\n * @param {*} value\n * @param {*} callback\n */\n isPhoneTel: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\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)) return infoMsg.phoneTel(language);\n else return true;\n }\n },\n /**\n * @todo: 验证是否是ip地址\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 12:50:44\n * @param {*} rule\n * @param {*} value\n * @param {*} callback\n */\n isIp: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\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)) return infoMsg.ip(language);\n else return true;\n }\n },\n /**\n * @todo: 验证是否是url\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 12:42:31\n * @param {*} url\n */\n isUrl: (language, rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return true;\n else {\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)) return infoMsg.url(language);\n else return true;\n }\n },\n /**\n * @todo: 验证vin\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-05-01 19:31:14\n */\n isVin: (language, rule, value, callback) => {\n const reg = /^[A-Z0-9]+$/;\n // console.log(reg.test(value));\n if (value === '' || value === undefined || value == null) return true;\n else if (value.length !== 8 && value.length !== 17) return infoMsg.vin(language);\n else if (!reg.test(value)) return infoMsg.vin(language);\n else return true;\n },\n};\n\nexport default htTableValidate;\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-16 15:24:48\n * @version: 1.1.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 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 { GvInputNumber } from '@@/GvInputNumber';\n import { GvPopconfirm } from '@@/GvPopconfirm';\n import type { TPopoverPlacement } from '@@/GvPopover/src/types';\n import { GvSelect } from '@@/GvSelect';\n import { GvTableBar } from '@@/GvTableBar';\n import GvTag from '@@/GvTag/src/GvTag.vue';\n import { GvTree } from '@@/GvTree';\n import { dateFormatConfig, debounce, hasClass, hasScrollbar, isEqual, toLine } from '@@/utils';\n import { crud } from '@@/utils/gv.crud';\n import { confirm, message } from '@@/utils/gv.notify';\n import GvTableValidate from '@@/utils/gv.table.validate';\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 useGlobalConfig,\n type ComponentSize,\n type TableColumnCtx,\n type TableInstance,\n } from 'element-plus';\n import type { AllowDropFunction } from 'element-plus/es/components/tree/src/tree.type';\n import { computed, defineComponent, getCurrentInstance, nextTick, onMounted, ref, shallowRef, unref, watch, type PropType, type VNode } from 'vue';\n import type { FilterCondition, PageInfo } from './types';\n\n type ColumnTreeNode = { columnProp: string; label: string };\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('table');\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', 'row-click'],\n // emit\n setup(props, { slots, expose, emit, attrs }) {\n // @data\n const appStore = useAppStore();\n const userStore = useUserStore();\n const { getStorage, setStorage } = 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 let closeActiveDetailPopover: (() => void) | null = null;\n\n const syncDetailPopoverWidth = (popperEl?: HTMLElement | null) => {\n const poppers = popperEl ? [popperEl] : Array.from(document.querySelectorAll<HTMLElement>('.el-popover.gv-table-detail-popover'));\n poppers.forEach((el) => {\n const body = el.querySelector<HTMLElement>('.gv-table-detail-popover-body');\n if (body) el.style.width = `${Math.ceil(body.getBoundingClientRect().width)}px`;\n });\n };\n\n /** 操作列详情 Popover:随内部 detail 表格宽度自适应 */\n const getTableDetailPopoverPopperStyle = () => ({\n width: 'auto',\n minWidth: 'auto',\n maxWidth: 'min(90vw, ' + sMaxWidth.value + ')',\n });\n\n const DetailActionPopover = defineComponent({\n name: 'GvTableDetailActionPopover',\n props: {\n title: { type: String, required: true },\n actionFn: { type: Function, required: true },\n row: { type: Object, required: true },\n rowIndex: { type: Number, required: true },\n detailPlacement: { type: String, required: true },\n disabled: { type: Boolean, default: false },\n icon: { type: String, default: '' },\n text: { type: String, required: true },\n size: { type: String, default: undefined },\n perms: { type: String, default: '' },\n },\n setup(props) {\n const visible = ref(false);\n const rendered = shallowRef<VNode | null>(null);\n const loading = ref(false);\n\n const closePopover = () => {\n visible.value = false;\n };\n\n const handleOpen = async (event: Event) => {\n event.stopPropagation();\n if (loading.value || props.disabled) return;\n\n // 已打开时再次点击仅关闭,不重新查询\n if (visible.value) {\n visible.value = false;\n rendered.value = null;\n return;\n }\n\n closeActiveDetailPopover?.();\n loading.value = true;\n rendered.value = null;\n try {\n const render = await props.actionFn(props.row, props.rowIndex);\n if (!render) return;\n rendered.value = typeof render === 'function' ? render() : render;\n await nextTick();\n visible.value = true;\n closeActiveDetailPopover = closePopover;\n } catch {\n rendered.value = null;\n } finally {\n loading.value = false;\n }\n };\n\n watch(visible, (val) => {\n if (!val) {\n rendered.value = null;\n if (closeActiveDetailPopover === closePopover) closeActiveDetailPopover = null;\n }\n });\n\n const renderTrigger = () => (\n <div class=\"gv-table-action-trigger\">\n {props.icon ? (\n <ElTooltip\n content={props.text}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={props.perms}\n text={props.text}\n size={props.size}\n icon={props.icon}\n disabled={props.disabled}\n loading={loading.value}\n onClick={handleOpen}></GvButton>\n </span>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={props.text}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={props.perms}\n text={props.text}\n size={props.size}\n type=\"text\"\n disabled={props.disabled}\n loading={loading.value}\n onClick={handleOpen}>\n {props.text}\n </GvButton>\n </span>\n </ElTooltip>\n )}\n </div>\n );\n\n return () => (\n <ElPopover\n visible={visible.value}\n onUpdate:visible={(val: boolean) => {\n visible.value = val;\n }}\n title={props.title}\n placement={props.detailPlacement as TPopoverPlacement}\n trigger=\"manual\"\n showArrow={true}\n transition=\"el-zoom-in-top\"\n onAfter-enter={() => syncDetailPopoverWidth()}\n popperClass=\"gv-popconfirm gv-table-detail-popover\"\n popperStyle={getTableDetailPopoverPopperStyle()}>\n {{\n reference: renderTrigger,\n default: () => <div class=\"gv-table-detail-popover-body\">{rendered.value}</div>,\n }}\n </ElPopover>\n );\n },\n });\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<ColumnTreeNode[]>([]); // 列表显示、排序数组\n const columnCheckedKeys = ref<string[]>([]); // 列表显示、排序选中数组\n const columnTreeRef = ref<{ getCheckedKeys?: (leafOnly?: boolean) => (string | number)[]; getTreeNodeData?: () => ColumnTreeNode[] } | null>(null);\n const TABLE_FIELD_STORAGE_KEY = 'export-table-fields-' + userStore.loginAccount;\n\n const getTableFieldStore = (): Record<string, string> => {\n const store = getStorage(TABLE_FIELD_STORAGE_KEY);\n return store && typeof store === 'object' ? store : {};\n };\n\n const getTableFieldsFromStorage = (): string => {\n if (!props.refTable) return '';\n const value = getTableFieldStore()[props.refTable];\n return typeof value === 'string' ? value : '';\n };\n\n const setTableFieldsToStorage = (value: string) => {\n if (!props.refTable) return;\n const store = getTableFieldStore();\n store[props.refTable] = value;\n setStorage(TABLE_FIELD_STORAGE_KEY, store);\n };\n\n let lsTableHeads = '';\n let debounceSearch;\n const tableRefs = ref<Record<string, TableInstance | null>>({}); // 表单实例引用,默认空对象\n const tableRef = ref<TableInstance | null>(null); // ElForm 元素引用\n const loginLang = userStore.language;\n if (loginLang === 'en') lang = 'en';\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>div>.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: 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') as HTMLInputElement;\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: 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 target = e.target;\n if (!(target instanceof Element)) return;\n const popoverHtml = target.closest('.table-popover');\n // console.log(popoverHtml);\n if (!popoverHtml) return;\n const inputHtml = popoverHtml.querySelector<HTMLInputElement>('.gv-input .el-input__inner');\n const checkList = popoverHtml.querySelectorAll('.el-checkbox');\n const dateHtmlArr = popoverHtml.querySelectorAll<HTMLInputElement>('.gv-datepicker .el-range-input');\n let filterValue = '';\n switch (type) {\n case 'text':\n case 'number':\n if (!inputHtml) return;\n filterValue = inputHtml.value;\n if (filterValue.length === 0) {\n message(t('table.columnFilterWarn'));\n return;\n }\n break;\n case 'date':\n if (dateHtmlArr.length < 2) return;\n filterValue = dateHtmlArr[0].value + '|' + dateHtmlArr[1].value;\n break;\n case 'dic':\n for (const check of Array.from(checkList))\n if (check instanceof HTMLElement && hasClass(check, 'is-checked'))\n if (check.textContent !== t('common.checkAll')) {\n const original = check.querySelector<HTMLInputElement>('.el-checkbox__original');\n if (original) filterValue = filterValue !== '' ? `${filterValue}|${original.value}` : original.value;\n }\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['headfilter'] = Object.assign(fC['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(instance, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n // 标识筛选列\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n if (rootEl) {\n const tableHeader = rootEl.querySelector('.gv-table .el-table__header-wrapper .el-table__header') as HTMLElement | undefined;\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 // console.log(h);\n if (h && h.children[0] && h.children[0].getAttribute('data-columnprop') === propField) h.children[0].classList.add('is-selected');\n }\n const tableFixHeader = rootEl.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header') as HTMLElement | undefined;\n if (tableFixHeader !== null) {\n const fixColumns = tableFixHeader?.querySelectorAll('.el-table__cell');\n if (fixColumns !== null) {\n const fixLen = fixColumns?.length ?? 0;\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('data-columnprop') === propField) h.children[0].classList.add('is-selected');\n }\n }\n }\n }\n }\n };\n\n /**\n * @todo: column filter handler rest\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-10 13:11:59\n * @param {*} e\n * @param {*} propField\n * @param {*} type\n */\n const columnFilterHandlerReset = async (e: MouseEvent, propField: string, type: string) => {\n const target = e.target;\n if (!(target instanceof Element)) return;\n const popoverHtml = target.closest('.table-popover');\n if (!popoverHtml) return;\n const inputHtml = popoverHtml.querySelector<HTMLInputElement>('.gv-input .el-input__inner');\n const checkList = popoverHtml.querySelectorAll('.el-checkbox');\n const dateHtmlArr = popoverHtml.querySelectorAll<HTMLInputElement>('.gv-datepicker .el-range-input');\n switch (type) {\n case 'text':\n case 'number':\n if (inputHtml) 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 Array.from(checkList))\n if (check instanceof HTMLElement && hasClass(check, 'is-checked')) {\n // check.classList.remove('is-checked');\n (check.querySelector('.el-checkbox__original') as HTMLInputElement).checked = false;\n (check.querySelector('.el-checkbox__input') as HTMLInputElement).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 filterKey = toLine(propField.replace('@', '.')) + '|' + type;\n const prevHeadfilter = fC['headfilter'];\n if (prevHeadfilter != null) fC['headfilter'] = Object.fromEntries(Object.entries(prevHeadfilter).filter(([key]) => key !== filterKey));\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') as HTMLButtonElement;\n primaryBtn.setAttribute('disabled', 'disabled');\n primaryBtn.classList.add('is-disabled');\n }\n\n // 拼接 过滤条件\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 const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n if (rootEl) {\n const tableHeader = rootEl.querySelector('.gv-table .el-table__header-wrapper .el-table__header') as HTMLElement | undefined;\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]) if (h.children[0].getAttribute('data-columnprop') === propField) h.children[0].classList.remove('is-selected');\n }\n const tableFixedHeader = rootEl.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header') as HTMLElement | undefined;\n // fixed: 解决列表没有锁定列时报错问题 2023-10-07\n if (tableFixedHeader !== null) {\n const columnsFixed = tableFixedHeader?.querySelectorAll('.el-table__cell') || [];\n const lenFixed = columnsFixed.length || 0;\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('data-columnprop') === propField) h.children[0].classList.remove('is-selected');\n }\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 = 140;\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 */\n const columnFormatter = (_row: any, column: any, cellValue: any) => {\n if (cellValue === null || cellValue === undefined) return '';\n if (typeof cellValue === 'object') return cellValue.v ?? '';\n return 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>div>.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 // console.log(popoverHtml);\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 /**\n * @todo: head filter dict check all\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-10 13:24:06\n * @param {*} val\n */\n const handleDictCheckAll = (val: boolean) => {\n const popoverHtmlList = document.body.querySelectorAll('body>div>.table-popover');\n let popoverHtml;\n for (const pop of Array.from(popoverHtmlList))\n if ((pop as HTMLElement).style.display !== 'none') {\n popoverHtml = pop;\n break;\n }\n const primaryBtn = popoverHtml.querySelector('.el-button--primary');\n if (val === true) {\n primaryBtn.removeAttribute('disabled');\n primaryBtn.classList.remove('is-disabled');\n // 全部选中\n const checkList = popoverHtml.querySelectorAll('label.el-checkbox');\n checkList.forEach((x, index) => {\n if (index > 0) {\n x.classList.add('is-checked');\n x.querySelector('.el-checkbox__input').classList.add('is-checked');\n x.querySelector('.el-checkbox__original').checked = true;\n }\n });\n } else {\n // 全部取消选中\n const checkList = popoverHtml.querySelectorAll('label.el-checkbox');\n checkList.forEach((x, index) => {\n if (index > 0) {\n x.classList.remove('is-checked');\n x.querySelector('.el-checkbox__input').classList.remove('is-checked');\n x.querySelector('.el-checkbox__original').checked = false;\n }\n });\n primaryBtn.setAttribute('disabled', 'disabled');\n primaryBtn.classList.add('is-disabled');\n }\n };\n\n /**\n * @todo: 列筛选 点击字典列表节点方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-20 15:33:44\n * @param {*} checked\n */\n const handleDictCheck = (checked: boolean) => {\n const curCheck = window.event?.target as HTMLInputElement | undefined;\n const popoverHtmlList = document.body.querySelectorAll('body>div>.table-popover');\n let popoverHtml;\n for (const pop of Array.from(popoverHtmlList))\n if (pop.style.display !== 'none') {\n popoverHtml = pop;\n break;\n }\n const primaryBtn = popoverHtml.querySelector('.el-button--primary');\n if (checked === true) {\n primaryBtn.removeAttribute('disabled');\n primaryBtn.classList.remove('is-disabled');\n // 设置全选标识\n const checkList = popoverHtml.querySelectorAll('label.el-checkbox');\n let allCheck = true;\n checkList.forEach((x, index) => {\n if (index > 0)\n if (curCheck?.value !== (x.querySelector('.el-checkbox__original') as HTMLInputElement).value)\n if (!hasClass(x, 'is-checked')) {\n allCheck = false;\n return;\n }\n });\n if (!allCheck) checkList[0].querySelector('.el-checkbox__input').classList.add('is-indeterminate');\n else {\n checkList[0].querySelector('.el-checkbox__input').classList.remove('is-indeterminate');\n checkList[0].classList.add('is-checked');\n checkList[0].querySelector('.el-checkbox__input').classList.add('is-checked');\n checkList[0].querySelector('.el-checkbox__original').checked = true;\n }\n } else {\n const checkList = popoverHtml.querySelectorAll('.el-checkbox');\n let checkFlag = false;\n for (const check of checkList)\n if (curCheck?.value !== (check.querySelector('.el-checkbox__original') as HTMLInputElement).value && hasClass(check, 'is-checked')) {\n checkFlag = true;\n break;\n }\n if (checkFlag === true) {\n const primaryBtn = popoverHtml.querySelector('.el-button--primary');\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 let allCheck = true;\n checkList.forEach((x, index) => {\n if (index > 0)\n if (curCheck?.value !== (x.querySelector('.el-checkbox__original') as HTMLInputElement).value)\n if (hasClass(x, 'is-checked')) {\n allCheck = false;\n return;\n }\n });\n if (!allCheck) checkList[0].querySelector('.el-checkbox__input').classList.add('is-indeterminate');\n else {\n checkList[0].querySelector('.el-checkbox__input').classList.remove('is-indeterminate');\n checkList[0].classList.remove('is-checked');\n checkList[0].querySelector('.el-checkbox__input').classList.remove('is-checked');\n checkList[0].querySelector('.el-checkbox__original').checked = false;\n }\n }\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: DicItem[] = [];\n const src = dicType.toLowerCase();\n const dictCache = userStore.dictCache?.[src];\n\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 const dictXZQH = appStore.getDictDivision;\n\n if (dictXZQH) {\n const cache = {};\n cache['key'] = 'xzqh';\n cache['dict'] = dictXZQH;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n ret = dictXZQH;\n }\n } else {\n const dict = appStore.getDict[src];\n if (dict) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dict;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\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 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: cell check\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-10 13:29:28\n * @param {*} obj\n * @param {*} label\n * @param {*} format\n * @param {*} newVal\n * @param {*} rowIndex\n */\n const cellCheck = (obj: HTMLElement, label: string, format: FormItemFormat, newVal: any, rowIndex: number) => {\n if (!format) {\n message(`${label} ${t('table.editCheckFormat')}`);\n return false;\n }\n const isRequire = format[0];\n const rule = format[1];\n const maxLen = format[2];\n // console.log(label);\n // 校验是否必填\n if (isRequire === 1)\n if (newVal === null || newVal === undefined || newVal === '') {\n message(`${t('common.which')} ${rowIndex + 1} ${t('common.row')}: ${t('common.pleaseInput')} ${label}`);\n obj.classList.add('is-error');\n return false;\n } else if (Array.isArray(newVal) && newVal.length === 0) {\n message(`${t('common.which')} ${rowIndex + 1} ${t('common.row')}: ${t('common.pleaseInput')} ${label}`);\n obj.classList.add('is-error');\n return false;\n } else if (typeof newVal === 'object' && newVal.c === '') {\n message(`${t('common.which')} ${rowIndex + 1} ${t('common.row')}: ${t('common.pleaseInput')} ${label}`);\n obj.classList.add('is-error');\n return false;\n }\n\n // 校验最大长度\n const validateLen = GvTableValidate.isLength(lang, newVal, maxLen);\n if (validateLen !== true) {\n message(`${t('common.which')} ${rowIndex + 1} ${t('common.row')}: ${validateLen}`, 'warning', true);\n obj.classList.add('is-error');\n return false;\n }\n // 校验格式\n if (rule !== 'isAny')\n if (GvTableValidate[rule]) {\n const validate = GvTableValidate[rule](lang, rule, newVal);\n if (validate !== true) {\n message(`${t('common.which')} ${rowIndex + 1} ${t('common.row')}: ${validate}`, 'warning', true);\n obj.classList.add('is-error');\n return false;\n }\n }\n return true;\n };\n\n /**\n * @todo: row edit enter event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-10 14:50:06\n * @param {*} event\n * @param {*} cellEnter\n * @param {*} row\n * @param {*} value\n * @param {*} prop\n * @param {*} scope\n * @param {*} prop\n */\n const handleEnterKeyDown = (event: KeyboardEvent, cellEnter: (event: KeyboardEvent, row: any, value: string, prop: string) => void, scope: any, prop: string) => {\n // 回车事件\n if (event.key === 'Enter')\n if (cellEnter) {\n cellEnter(event, scope.row, event.srcElement.value, prop);\n recordsList.value[scope.$index] = scope.row;\n }\n };\n\n /**\n * @todo: 行编辑转换\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-06-17 10:59:29\n * @param {*} scope\n * @param {*} label\n * @param {*} prop\n * @param {*} type\n * @param {*} format\n * @param {*} dicType\n * @param {*} cellBlur 失去焦点回调方法\n * @param {*} filtercode 字典过滤代码\n */\n const 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 let renders: VNode | null = null;\n const val = scope.row[sProp];\n let sVal = val;\n let sShowLabel = showLabel;\n if (showLabelProp) sShowLabel = scope.row[showLabelProp];\n if (multiple === true) {\n if (sVal !== undefined && sVal !== null)\n if (typeof val === 'object')\n if (!Array.isArray(val))\n if (val.c !== '') {\n const cArr = val.c.split(',');\n const vArr = val.v.split(',');\n sVal = [];\n sShowLabel = [];\n for (let i = 0; i < cArr.length; i++) {\n sVal.push({\n value: cArr[i],\n label: vArr[i],\n });\n sShowLabel.push(vArr[i]);\n }\n } else {\n sVal = [];\n sShowLabel = [];\n }\n else {\n sShowLabel = [];\n val.forEach((x) => {\n sShowLabel.push(x.label);\n });\n }\n else if (val !== '') {\n const cArr = val.split(',');\n let vArr = [];\n if (sShowLabel) vArr = sShowLabel.split(',');\n sVal = [];\n sShowLabel = [];\n for (let i = 0; i < cArr.length; i++) {\n sVal.push({\n value: cArr[i],\n label: vArr.length > i ? vArr[i] : '',\n });\n sShowLabel.push(vArr[i]);\n }\n } else {\n sVal = [];\n sShowLabel = [];\n }\n\n scope.row[sProp] = sVal;\n } else if (val !== null && typeof val === 'object') {\n sVal = val.c + '';\n sShowLabel = val.v;\n }\n const columnVref = `${vref}-${sProp}`;\n if (!format) {\n message(`${t('common.edit')}${t('common.column')} [ ${sProp} ] ${t('table.editCheckFormat2')}`);\n return;\n }\n let sDateType = dateType;\n if (sDateType === 'yyyy-MM-dd') sDateType = 'date';\n if (sDateType === 'yyyy-MM-dd HH:mm') sDateType = 'datetime';\n let dateFormat = dateFormatConfig.date.valueFormat; // 日期显示格式\n let valueFormat = dateFormatConfig.date.valueFormat; // 日期绑定值格式\n if (sDateType === 'datetime') {\n dateFormat = dateFormatConfig.datetime.dateFormat;\n valueFormat = dateFormatConfig.datetime.valueFormat;\n }\n switch (type) {\n case 'text':\n renders = (\n <div>\n <GvInput\n value={sVal}\n vref={columnVref}\n clearable={false}\n size=\"small\"\n maxlength={format[2]}\n onInput={(newVal) => {\n scope.row[sProp] = newVal;\n }}\n onBlur={(event, newVal) => {\n if (cellCheck(event.srcElement, label, format, newVal, scope.$index)) {\n event.srcElement.classList.remove('is-error');\n // scope.row.edit = true;\n if (typeof cellBlur === 'function')\n // scope.row[prop] = newVal;\n cellBlur(event, scope.row, newVal, sProp);\n recordsList.value[scope.$index] = scope.row;\n }\n }}\n onKeydown={(event) => {\n handleEnterKeyDown(event, cellEnter, scope, sProp);\n }}\n columnProp={sProp}\n bizType=\"tableedit\"\n />\n </div>\n );\n break;\n case 'number':\n renders = (\n <div>\n <GvInputNumber\n value={val}\n vref={columnVref}\n size=\"small\"\n min={min}\n max={max}\n onChange={(currentVal, oldVal) => {\n if (typeof cellChange === 'function') cellChange(scope.row, currentVal, oldVal, sProp);\n recordsList.value[scope.$index] = scope.row;\n }}\n onInput={(newVal) => {\n scope.row[sProp] = newVal;\n }}\n onBlur={(event, newVal) => {\n if (cellCheck(event.srcElement, label, format, newVal, scope.$index)) {\n event.srcElement.classList.remove('is-error');\n // scope.row.edit = true;\n if (typeof cellBlur === 'function')\n // scope.row[prop] = newVal;\n cellBlur(event, scope.row, newVal, sProp);\n recordsList.value[scope.$index] = scope.row;\n }\n }}\n columnProp={sProp}\n bizType=\"tableedit\"\n />\n </div>\n );\n break;\n case 'date':\n case 'datetime':\n renders = (\n <div>\n <GvDatePicker\n v-model={sVal}\n modelValue={sVal}\n vref={columnVref}\n type={sDateType}\n clearable={false}\n format={dateFormat}\n value-format={valueFormat}\n // startPlaceholder={startPh}\n // endPlaceholder={endPh}\n onInput={(newVal) => {\n scope.row[sProp] = newVal;\n }}\n />\n </div>\n );\n break;\n case 'dic':\n if (dicType.indexOf('t#') >= 0) {\n const dtArr = tableHeads.filter((x) => x.prop === prop);\n const dt = scope.row['dt-' + sProp] || dtArr[0].dicType;\n let v;\n const vv = sShowLabel || sVal;\n if (typeof vv === 'object')\n if (Array.isArray(vv))\n vv.forEach((x) => {\n if (x)\n if (v) v += ',' + (x.label ? x.label : x);\n else v = x.label ? x.label : x;\n });\n else {\n if (vv) v = vv.label;\n }\n else v = vv;\n renders = (\n <div>\n <ElTooltip\n content={v ? v + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n open-delay={1000}>\n <GvSelect\n value={sVal}\n vref={columnVref}\n dicType={dt}\n clearable={false}\n showLabel={sShowLabel}\n filtercode={filtercode}\n dicRemote={dicRemote}\n isreload={isreload}\n multiple={multiple}\n collapseTags={collapseTags}\n editRow={scope.row}\n cb={cb}\n onFocus={async () => {\n scope.row['dt-' + sProp] = dt;\n if (focus) await focus(scope, dicType, sVal);\n }}\n onChange={(newVal, labels, _columnProp) => {\n if (multiple === true) scope.row[sProp] = newVal;\n else if (newVal !== null && typeof newVal === 'object')\n if (scope.row[sProp] === null) scope.row[sProp] = { c: newVal.value, v: labels };\n else scope.row[sProp] = { c: newVal.value, v: labels };\n // scope.row[sProp].c = newVal.value;\n // scope.row[sProp].v = labels;\n else scope.row[sProp] = { c: newVal.value, v: labels };\n scope.row['dt-' + sProp] = dt;\n }}\n columnProp={sProp}\n bizType=\"tableedit\"\n />\n </ElTooltip>\n </div>\n );\n } else {\n let v;\n const vv = sShowLabel || sVal;\n if (typeof vv === 'object')\n if (Array.isArray(vv))\n vv.forEach((x) => {\n if (x)\n if (v) v += ',' + (x.label ? x.label : x);\n else v = x.label ? x.label : x;\n });\n else {\n if (vv) v = vv.label;\n }\n else v = vv;\n renders = (\n <div>\n <ElTooltip\n content={v ? v + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n open-delay={1000}>\n <GvSelect\n value={sVal}\n vref={columnVref}\n dicType={dicType}\n clearable={false}\n showLabel={sShowLabel}\n filtercode={filtercode}\n multiple={multiple}\n cb={cb}\n collapseTags={collapseTags}\n editRow={scope.row}\n onChange={(newVal, labels, _columnProp) => {\n if (multiple === true)\n // const c = [];\n // if (newVal && Array.isArray(newVal))\n // newVal.forEach((x) => {\n // c.push({ 'c': x.c, 't': x.t });\n // });\n scope.row[sProp] = newVal;\n else if (newVal !== null && typeof newVal === 'object') {\n scope.row[sProp].c = newVal.value;\n scope.row[sProp].v = newVal.label;\n } else {\n scope.row[sProp].c = newVal;\n scope.row[sProp].v = labels;\n }\n }}\n columnProp={sProp}\n bizType=\"tableedit\"\n />\n </ElTooltip>\n </div>\n );\n }\n\n break;\n }\n\n return renders;\n };\n\n /** 表头筛选 Popover:覆盖 EP 默认 150px,按内容自适应宽度 */\n const tableHeadFilterPopoverPopperStyle = {\n width: 'max-content',\n minWidth: '180px',\n maxWidth: 'min(420px, 90vw)',\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) {\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 transition=\"el-zoom-in-top\"\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 data-label={label}\n data-columnProp={prop}\n data-columnType={hType}>\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 data-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 transition=\"el-zoom-in-top\"\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 data-label={label}\n data-columnProp={prop}\n data-columnType={type}>\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: edit row check\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-10 13:27:42\n * @param {*} index\n */\n const checkEditRow = (index: number) => {\n let checkFlag = true;\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n const tableH = rootEl?.querySelector('.el-table__body-wrapper .el-table__body') as HTMLElement | undefined;\n if (!tableH) return false;\n\n const rowsH = tableH.querySelectorAll('.el-table__row');\n for (let i = 0; i < rowsH.length; i++) {\n if (i !== index) continue;\n const rowH = rowsH[i];\n let offset = 1;\n const columnsH = rowH.querySelectorAll<HTMLElement>('.el-table__cell');\n for (let j = 0; j < columnsH.length; j++) {\n if (hasClass(columnsH[j], 'el-table__expand-column'))\n // offset++;\n continue;\n\n if (hasClass(columnsH[j], 'el-table-column--selection')) {\n offset++;\n continue;\n }\n if (hasClass(columnsH[j], 'ht-cell__isedit')) {\n const inputH = columnsH[j].querySelector<HTMLInputElement>('.el-input .el-input__inner,.el-input-number .el-input__inner');\n if (inputH) {\n const val = recordsList[i][tableHeads[j - offset].prop];\n checkFlag = cellCheck(inputH, tableHeads[j - offset].label, tableHeads[j - offset].format as FormItemFormat, val, i);\n if (!checkFlag) {\n inputH.focus();\n break;\n }\n }\n }\n }\n if (!checkFlag) break;\n }\n return checkFlag;\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 <DetailActionPopover\n title={x}\n actionFn={action[index]}\n row={scope.row}\n rowIndex={scope.$index}\n detailPlacement={detailPlacement}\n disabled={disabled}\n icon={icon}\n text={x}\n size={tableSize.value}\n perms={item}\n />\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 = getTableFieldsFromStorage();\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 // 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: 列选中状态切换\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: set store local\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-10 17:33:58\n * @param {*} checkedKeys\n * @param {*} data\n * @param {*} checked\n */\n const setStoreLocal = (checkedKeys: (string | number)[], data: { columnProp?: string }, checked: boolean) => {\n const c: string[] = [];\n const orderedProps = columnTreeList.value.map((node) => node.columnProp);\n const headMap = new Map(tableHeads.map((x) => [x.prop, x]));\n const orderedHeads = orderedProps.map((prop) => headMap.get(prop)).filter((x): x is TableHeadItem => !!x);\n const restHeads = tableHeads.filter((x) => !orderedProps.includes(x.prop));\n [...orderedHeads, ...restHeads].forEach((x) => {\n if (x.type !== 'action' && x.type !== 'expand') {\n if (checkedKeys.includes(x.prop))\n // 第一个|: 代表hasHidden 第二个|: 代表hidden\n c.push(x.prop + '|' + 'f' + '|' + (x.hidden === true ? 't' : 'f'));\n else c.push(x.prop + '|' + 't' + '|' + (x.hidden === true ? 't' : 'f'));\n if (data.columnProp === x.prop) x.hasHidden = !checked;\n }\n });\n setTableFieldsToStorage(c.join(','));\n };\n\n const reorderTableHeadsByTree = (treeList: ColumnTreeNode[]) => {\n const dataOrder = treeList.map((node) => tableHeads.find((x) => x.prop === node.columnProp)).filter((x): x is TableHeadItem => !!x && x.type !== 'expand' && x.type !== 'action');\n const result: TableHeadItem[] = [];\n let dataIdx = 0;\n tableHeads.forEach((col) => {\n if (col.type === 'expand' || col.type === 'action') result.push(col);\n else if (dataIdx < dataOrder.length) result.push(dataOrder[dataIdx++]);\n });\n return result;\n };\n\n const applyColumnTreeOrder = (treeList: ColumnTreeNode[]) => {\n const checkedKeys = columnTreeRef.value?.getCheckedKeys?.() ?? columnCheckedKeys.value;\n const reorderedHeads = reorderTableHeadsByTree(treeList);\n tableHeads = reorderedHeads;\n headColumn.value = getTableColumn('recreate', createChangedColumns(reorderedHeads, checkedKeys));\n setStoreLocal(checkedKeys, {}, false);\n };\n\n const allowColumnTreeDrop: AllowDropFunction = (_draggingNode, _dropNode, type) => type !== 'inner';\n\n const handleColumnNodeDrop = () => {\n nextTick(() => {\n const treeData = columnTreeRef.value?.getTreeNodeData?.() ?? columnTreeList.value;\n columnTreeList.value = [...treeData];\n applyColumnTreeOrder(columnTreeList.value);\n });\n };\n\n /**\n * @todo: tree column check change\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: any, checked: boolean, _childChecked: boolean) => {\n const checkedKeys = columnTreeRef.value?.getCheckedKeys?.() ?? [];\n const hColumns = createChangedColumns(tableHeads, checkedKeys);\n // console.log(hColumns);\n headColumn.value = getTableColumn('recreate', hColumns);\n // 存储到 localStorage\n setStoreLocal(checkedKeys, data, checked);\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 <GvTree\n ref={columnTreeRef}\n nodeKey=\"columnProp\"\n treeData={columnTreeList.value}\n checkOnClickNode={true}\n defaultCheckedKeys={columnCheckedKeys.value}\n showCheckbox\n draggable\n allowDrop={allowColumnTreeDrop}\n onCheck-change={handleColumnCheckChange}\n onNode-drop={handleColumnNodeDrop}\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: 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: row click event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-16 11:02:10\n * @param {*} row\n * @param {*} column\n * @param {*} event\n */\n const rowClick = (row: Recordable<any>, column: TableColumnCtx<Recordable<any>> | null, event: MouseEvent) => {\n if (typeof attrs.onRowClick === 'function') emit('row-click', row, column, event);\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 deep: true,\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 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') {\n headColumnInit.value = getTableColumn();\n if (props.tableData && Object.keys(props.tableData).length > 0) headColumn.value = getTableColumn();\n }\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 if (props.tableType === 'detail')\n nextTick(() => {\n const tableRef = instance?.refs?.[vref] as TableInstance | undefined;\n tableRef?.doLayout?.();\n });\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={props.tableType === 'detail' ? { width: 'max-content', minWidth: '0px', maxWidth: sMaxWidth.value } : { width: '100%', minWidth: '0px', maxWidth: sMaxWidth.value }}>\n <GvTableBar visible={sTableBar.value}>{getTableBar()}</GvTableBar>\n {getKitBar()}\n {getTableSearch()}\n {getSortModel()}\n <div\n class={props.tableType === 'detail' ? 'gv-table__loading-wrap gv-table__loading-wrap--detail' : '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={props.tableType === 'detail' ? 'auto' : 'fixed'}\n style={props.tableType === 'detail' ? 'width: max-content' : '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 onRow-click={rowClick} // 设置行单击事件方法\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 {headColumn.value.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 &--detail {\n width: max-content;\n max-width: 100%;\n }\n }\n .gv-table__sortmode {\n float: right;\n\n & i {\n padding-right: 15px;\n font-size: $tableThFontSize;\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: 36px;\n line-height: 36px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight;\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 color: #cf2931;\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: 36px;\n line-height: 36px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight !important;\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 color: #cf2931;\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__body-wrapper) {\n .el-table__body-header {\n .el-table__cell {\n height: 36px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight;\n line-height: 36px;\n\n .cell {\n height: 28px;\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n font-weight: 500 !important;\n white-space: nowrap;\n\n .render__header {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n height: 28px;\n line-height: 28px;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: $tableThFontWeight !important;\n &:hover {\n cursor: pointer;\n }\n\n .el-tooltip__trigger {\n font-weight: $tableThFontWeight !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n\n .caret-wrapper {\n flex-shrink: 0;\n float: none;\n height: 28px;\n line-height: 28px;\n margin-left: 4px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\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: 36px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight !important;\n line-height: 36px;\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-12 11:53:36\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 { hasScrollbar } from '@@/utils';\n import { ElTabPane, ElTabs } from 'element-plus';\n import { defineComponent, Fragment, 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 as PropType<'left' | 'right' | 'bottom' | 'top'>,\n default: 'left',\n },\n defaultValue: {\n type: [Number, String] as PropType<number | string>,\n default: 0,\n },\n modelValue: {\n type: [Number, String] as PropType<number | string>,\n default: 0,\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.modelValue);\n const tabHeight = ref('auto');\n const isAnchor = ref(false);\n const isScrollbar = ref(false);\n const isEditContainer = ref(false);\n const instance = getCurrentInstance();\n\n const isTabPaneVnode = (vnode: VNode) => {\n if (!vnode || typeof vnode.type !== 'object' || vnode.type === null) return false;\n const componentName = 'name' in vnode.type ? (vnode.type as { name?: string }).name : '';\n return componentName === 'GvTabPane' || componentName === 'ElTabPane';\n };\n\n const flattenVnodes = (vnodes: VNode[]): VNode[] => {\n const result: VNode[] = [];\n vnodes.forEach((vnode) => {\n if (vnode.type === Fragment) {\n const children = vnode.children as VNode[] | null;\n if (Array.isArray(children)) result.push(...flattenVnodes(children));\n } else result.push(vnode);\n });\n return result;\n };\n\n const getPaneContent = (vnode: VNode) => {\n const children = vnode.children as { default?: () => VNode[] } | null | undefined;\n if (children && typeof children === 'object' && !Array.isArray(children) && typeof children.default === 'function') return children.default();\n return null;\n };\n\n const getTabPanes = () => {\n const slotVnodes = slots.default?.() ?? [];\n const result: { label?: string; name?: string | number; visible: boolean; vnode: VNode }[] = [];\n flattenVnodes(slotVnodes).forEach((vnode) => {\n if (!isTabPaneVnode(vnode)) return;\n const paneProps = (vnode.props ?? {}) as Record<string, unknown>;\n result.push({\n label: paneProps.label as string | undefined,\n name: paneProps.name as string | number | undefined,\n visible: paneProps.visible !== false,\n vnode,\n });\n });\n return result;\n };\n\n // @watch\n watch(\n () => props.modelValue,\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 tabName = tabVm.props?.name;\n if (tabName !== undefined && tabName !== null) inputValue.value = tabName;\n emit('tab-click', tabVm);\n };\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 getTabPanes().map((pane, index) => {\n if (!pane.visible) return null;\n return (\n <ElTabPane\n key={pane.name ?? pane.label ?? index}\n name={pane.name}\n label={pane.label}\n style={{ height: tabHeight.value }}>\n {getPaneContent(pane.vnode)}\n </ElTabPane>\n );\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 modelValue={inputValue.value}\n onUpdate:modelValue={(v: string) => (inputValue.value = v)}\n default-value={props.defaultValue}\n tabPosition={props.tabPosition}\n type={props.type}\n closable={props.closable}\n onTabClick={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","/*\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-06-12 16:09:34\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","getFormModel","fmNode","rawFmChildren","fmChildList","model","element","_b","fmNode2","_c","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","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","_createTextVNode","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","invokeClick","raw","onClick","handlers","Array","length","handler","withLoading","task","setIconStyle","replace","checkPerms","pm","slot","split","x","indexOf","arr","handleClick","exposed","resetFields","rootForm","originFormList","formList","index","filtercode","showLabel","dateType","field","rootEl","el","dateRangeSingles","querySelectorAll","startInput","querySelector","endInput","searchBtn","click","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","showWeekNumber","useI18n","datePickerSize","resolvedInputId","getShortcuts","getPickerOptions","pickerOptions","includes","getTime","handleInput","vm","handleFocus","handlePick","maxDate","minDate","ElDatePicker","shortcuts","onCalendarChange","onBlur","onFocus","onChange","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","then","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","handleResize","evt","returnIcon","ElDrawer","overflow","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","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","cleanupDrawerOverlay","_normalizeClass","_normalizeStyle","GvMenuList","GvExpandMenuPlugin","GvExpandMenu","_sfc_main$o","prefixIcon","suffixIcon","maxlength","readonly","columnProp","rows","autosize","showWordLimit","inputSize","sPlaceholder","renderPrefixIcon","renderSuffixIcon","HTMLInputElement","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","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","_sfc_main$k","isRange","disabledHours","disabledMinutes","disabledSeconds","timepickerSize","mergedDisabledHours","mergedDisabledMinutes","mergedDisabledSeconds","ElTimePicker","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","searchColClassMap","slotProps","expand","showDefaultRow","searchFormRows","classMap","visibleIndex","getLanguage","setDividerShow","getEditBar","editbar","ElRow","getDivider","dividerRender","dividerTitle","getDictItems","dictCacheTmp","dictTmp","getItemRules","_item","validateKey","maxLen","validator","gvValidate","excluded","getDicRadioValue","fieldVal","setDicRadioValue","handleDateRange2Focus","$el","handleDateRange2Blur","handleDateRange2Change","endTime","startTime","datePicker","dateArr","handleSwitchDictChange","error","handleRadioDictChange","handleRadioToggle","isEmptyDicModelValue","isInternalFormSync","renderFormItem","_index","_slot3","colspan","createRow","blur","focus","change","render","renders","isHidden","searchColClass","cType","validateRule","sDateType","dateFormat","ph","startPh","endPh","cols","colSpanXs","colSpanSm","colSpanMd","colSpanLg","colSpanXl","week","datetime","editables","isTableDic","sLabel","searchFormLabel","switchDefaultVal","ElFormItem","ElTooltip","padding","margin","clip","whiteSpace","ElRadioGroup","_slot2","ElRadio","onMousedown","ElRadioButton","vv","toolText","_resolveComponent","getItems","sRootEl","tabPane","offsetTop","classList","contains","clearFormValidate","clearValidate","setFormStyle","formStyle1","lastIndexOf","parseInt","clientWidth","init","formModel","formRule","originItem","modelVal","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","parentElement","style","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","needCloseDrawer","getExpandMenuVisible","setExpandMenuVisible","navigate","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","_sfc_main$5","treeProps","nodeKey","load","showCheckbox","draggable","allowDrop","defaultExpandedKeys","defaultCheckedKeys","iconClass","defaultExpandAll","expandOnClickNode","checkOnClickNode","filterNodeMethod","renderContent","treeRef","getCheckedKeys","leafOnly","getTreeNodeData","store","childNodes","root","handleNodeClick","treeNode","handleNodeExpand","handleNodeCollapse","handleCheck","checkedInfo","handleCheckChange","checked","childChecked","handleLazyLoad","handleNodeDrop","draggingNode","dropNode","dropType","ElTree","GvTreePlugin","GvTree","appendPageInfo","pi","pageInfo","currentpagenum","recordsperpage","countrows","totalpage","combined","tabNode","filterConditions","co","sOp","coo","ds","condition","searchCombined","action","upper","sType","saveCombined","isRequestCanceled","err","fetchData","fetch","submit","hasMsg","fetchTable","checkForms","fmNodes","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","resetEditValue","setEditValue","rowData","fieldValue","items","itemChild","codes","crud","htTableValidate","_sfc_main$4","refTable","tableHead","tableData","maxWidth","pageSize","rowClassName","rowStyle","spanMethod","cellStyle","tableType","tableSort","tableKit","tableFetch","multi","isShowPage","total","tableInit","beforeImport","tableFilter","tableCb","expandRowKeys","limitHeight","tableAction","tableActionIcon","setStorage","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","closeActiveDetailPopover","syncDetailPopoverWidth","popperEl","poppers","from","body","Math","ceil","getBoundingClientRect","getTableDetailPopoverPopperStyle","DetailActionPopover","defineComponent","actionFn","rowIndex","rendered","shallowRef","closePopover","renderTrigger","onAfter-enter","pageLayout","actionWidth","transHash","headColumn","headColumnInit","columnSumsDecimal","isIndeterminate","columnTreeList","columnCheckedKeys","columnTreeRef","TABLE_FIELD_STORAGE_KEY","loginAccount","getTableFieldStore","getTableFieldsFromStorage","setTableFieldsToStorage","lsTableHeads","debounceSearch","tableRefs","tableRef","tableSize","getPageInfo","current","pages","setTableRef","closeAllPopover","property","next","ensurePopoverKey","propKey","wrapPopoverFilterBody","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","bodyWrapper","scrollLeft","handlePopoverHide","handleTableRefresh","inputSearch","getTableBar","btns","exportSlots","importSlots","getSortModel","isVisible","marginRight","columnFilterHandler","propField","Element","popoverHtml","checkList","dateHtmlArr","filterValue","HTMLElement","textContent","original","assign","getAttribute","add","tableFixHeader","fixColumns","fixLen","columnFilterHandlerReset","remove","filterKey","prevHeadfilter","fromEntries","entries","primaryBtn","setAttribute","getColWidth","edit","label2","sWidth","columnFormatter","_row","column","cellValue","handleColumnFilter","popoverHtmlList","pop","removeAttribute","handleDictCheckAll","handleDictCheck","curCheck","allCheck","checkFlag","renderHeadFilter","_slot4","_slot5","_slot6","fc","dictXZQH","ret2","_slot7","_slot8","_slot9","handlePopoverSlotClick","cellCheck","isRequire","validateLen","GvTableValidate","isLength","validate","handleEnterKeyDown","cellEnter","scope","srcElement","$index","renderRowEdit","sProp","cellBlur","cellChange","showLabelProp","sVal","sShowLabel","cArr","vArr","columnVref","currentVal","dtArr","dt","_columnProp","tableHeadFilterPopoverPopperStyle","renderColumnItem","tableFixed","fixed","align","formatter","hasHidden","selectable","columnFilter","multiLabel","heads","reserveSelection","sHidden","random","sFixed","sortable","multiLabels","hType","hSLabel","hSProp","hKey","hSFixed","hReserveSelection","hSortable","hSWidth","ElTableColumn","checkEditRow","tableH","rowsH","rowH","columnsH","j","inputH","renderAction","content","confirmArr","iconArr","sContent","confirms","detail","actionType","lock","onConfirm","getTableColumn","tableColumns","thd","lsTableHeadsArr","startIndex","ff","f","rownumWidth","actionHead","actionColumn","columnVNode","createChangedColumns","checkedKeys","setStoreLocal","orderedProps","headMap","orderedHeads","restHeads","reorderTableHeadsByTree","treeList","dataOrder","dataIdx","col","applyColumnTreeOrder","reorderedHeads","allowColumnTreeDrop","_draggingNode","_dropNode","handleColumnNodeDrop","handleColumnCheckChange","_childChecked","hColumns","getKitBar","ElButtonGroup","Refresh","Operation","sortMethod","_0","order","fieldName","sortingType","sumData","sort","row1","row2","isNaN","localeCompare","oi","rowDblClick","tagName","cell","onRowDblclick","tr","tds","firstBtn","btnArr","btn","rowClick","onRowClick","prevVal","typeArr","doLayout","n","tableBodyWrapper","refs","_slot0","GvTableBar","ElTable","_resolveDirective","ElPagination","GvTablePlugin","GvTable","_sfc_main$3","autoHeight","proxy","GvTabsPlugin","GvTabPane","_sfc_main$2","tabPosition","defaultValue","tabMaxHeight","tabHeight","isTabPaneVnode","componentName","flattenVnodes","vnodes","Fragment","getPaneContent","getTabPanes","slotVnodes","paneProps","handleTabClick","tabVm","tabName","createTabPane","pane","dialogContainer","GvTabs","GvTagPlugin","GvTag","_sfc_main$1","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","clientX","pageX","clientY","pageY","GvTagsViewPlugin","GvTagsView","themeOptions","currentTheme","handleSetTheme","GvThemePlugin","GvTheme","encrypt","word","keyStr","CryptoJS","ww","srcs","decrypt","generateKey","num","library","randomPoz","components","GvPopconfirmPlugin","GvTabPanePlugin","install","setActivePinia","GuavaUI"],"mappings":"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"}
|