guava-ui 0.2.8 → 0.2.9
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 +6 -0
- package/lib/guava-ui.es.js +2458 -2405
- 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 +33 -28
- 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-04 22:20:22\n * @version: 1.1.0\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvIcon } from '@@/GvIcon';\n import { GvPopconfirm } from '@@/GvPopconfirm';\n import { getVNodeText } from '@@/utils';\n import { confirm } from '@@/utils/gv.notify';\n import { ElButton, useGlobalConfig, type ButtonType, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, ref, unref, watch, type Component, type PropType } from 'vue';\n import { useRoute } from 'vue-router';\n import type { BizType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('button');\n\n export default defineComponent({\n name: 'GvButton',\n props: {\n visible: {\n type: Boolean,\n default: true,\n },\n text: {\n type: String,\n default: '',\n },\n otext: {\n type: String,\n default: '',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n type: {\n type: String as PropType<ButtonType>,\n default: 'default',\n },\n link: {\n type: Boolean,\n default: false,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: [Boolean, String] as PropType<boolean | string>,\n default: false,\n },\n refForm: {\n type: String,\n required: false,\n default: undefined,\n },\n icon: {\n // type: [String, Object] as PropType<string | DefineComponent>,\n type: String,\n default: '',\n },\n nativeType: {\n type: String,\n default: 'button',\n },\n bizType: {\n type: String as PropType<BizType>,\n default: undefined,\n },\n args: {\n type: String,\n default: undefined,\n },\n confirm: {\n type: [Boolean, String],\n default: false,\n },\n perms: {\n type: String,\n default: undefined,\n },\n cb: {\n type: Function as PropType<(args?: any) => void>,\n default: () => {},\n },\n },\n\n // @emits\n emits: ['click', 'confirm'],\n\n setup(props, { emit, slots }) {\n // @data\n // const attrs = useAttrs();\n const { t } = useBridgeI18n();\n const route = useRoute();\n const appStore = useAppStore();\n const instance = getCurrentInstance();\n const globalSize = useGlobalConfig('size');\n const buttonSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const buttonConfirm = computed(() => appStore.buttonConfirm);\n const loadings = ref(props.loading);\n const locked = ref(false);\n const isShow = ref(props.visible);\n const isIf = ref(true);\n\n // @computed\n const getSlots = computed(() => {\n if (props.text && props.otext) return props.text;\n else return slots.default?.();\n });\n\n // @watch\n watch(\n () => props.loading,\n (v) => (loadings.value = v),\n );\n watch(\n () => props.visible,\n (v) => (isShow.value = v),\n );\n\n // @method\n\n const setIconStyle = () => {\n if (!props.icon) return '';\n if (props.icon.startsWith('el-icon'))\n return (\n <GvIcon\n iconType=\"el\"\n iconName={props.icon.replace('el-icon-', '')}\n />\n );\n else if (props.icon.startsWith('iconfont') || props.icon.startsWith('gv-icon'))\n return (\n <GvIcon\n iconType=\"iconfont\"\n iconName={props.icon.replace('iconfont', '')}\n />\n );\n else return <GvIcon iconName={props.icon} />;\n // 父组件如果传递了图标组件,就使用图标组件,如果传递了ep图标名称,就使用ep图标名称\n // if (typeof props.icon === 'string')\n // return (\n // <GvIcon\n // iconName={props.icon}\n // className={props.icon}\n // />\n // );\n // else {\n // const Icons = props.icon;\n // return <Icons />;\n // }\n };\n\n const checkPerms = () => {\n if (route) {\n const meta = route.meta;\n if (meta) {\n const pm = meta.pm || '';\n if (pm) {\n let filter: string = props.text || '';\n if (props.otext) filter = props.otext;\n if (filter === '') {\n const slot = slots.default?.();\n if (slot && slot[0]) filter = getVNodeText(slot[0]) || '';\n }\n if (filter) {\n const pmArr = pm.split(',');\n const perms = pmArr.filter((x) => x.indexOf(filter) !== -1);\n if (perms.length > 0) {\n const p = perms[0];\n const arr = p.split('|');\n if (arr[0] !== ' ' && arr[1] && arr[1] === 'f') {\n isShow.value = false;\n isIf.value = false;\n }\n }\n }\n }\n }\n }\n };\n\n const handleClick = async (e: MouseEvent, type?: string) => {\n // 判断是否是reset\n if (props.bizType === 'reset') {\n let parent: any = instance?.parent; // form\n while (parent && parent.type?.name !== 'ElForm') parent = parent.parent;\n await parent.exposed.resetFields?.();\n\n while (parent && parent.type?.name !== 'GvForm') parent = parent.parent;\n const rootForm = parent;\n // console.log(rootForm);\n const originFormList = rootForm?.exposed.originFormList.value;\n const formList = rootForm?.props.formList;\n // console.log(parent.props.model.value);\n if (originFormList && Array.isArray(originFormList))\n originFormList.forEach((x: any, index: number) => {\n if (x.type === 'dic') formList[index]['filtercode'] = x.filtercode; // 重置字典的filtercode\n formList[index]['value'] = x.value;\n formList[index]['showLabel'] = x.showLabel;\n formList[index]['hidden'] = x.hidden;\n formList[index]['disabled'] = x.disabled;\n // 重置日期\n if (x.dateType === 'daterange2' || x.dateType === 'datetimerange2') {\n parent.props.model.value[x.field + '-start'] = undefined;\n parent.props.model.value[x.field + '-end'] = undefined;\n parent.props.model.value[x.field] = undefined;\n }\n });\n // 重置按钮自定义回调\n props.cb?.(props.args);\n\n const rootEl = parent?.vnode.el as HTMLElement;\n // 重置日期\n const dateRangeSingles = rootEl?.querySelectorAll('.gv-daterange__single') as NodeListOf<HTMLElement>;\n if (dateRangeSingles)\n for (let i = 0; i < dateRangeSingles.length; i++) {\n const startInput = dateRangeSingles[i].querySelector('.gv-datepicker-range-start .el-input__inner') as HTMLInputElement | null;\n if (startInput) startInput.value = '';\n const endInput = dateRangeSingles[i].querySelector('.gv-datepicker-range-end .el-input__inner') as HTMLInputElement | null;\n if (endInput) endInput.value = '';\n }\n // update: 重置后执行查询方法 2022-04-17\n loadings.value = true;\n await parent?.vnode.el?.querySelector('.gv-search-bar .el-button--primary')?.click();\n loadings.value = false;\n return;\n } else if (props.bizType === 'import' || props.bizType === 'export') {\n emit('click', e, props.args);\n return;\n } else {\n loadings.value = true;\n if (type === 'confirm')\n if (buttonConfirm.value === false)\n try {\n await confirm(t('common.confirmMsg')).then(async () => {\n if (!locked.value) {\n locked.value = true;\n emit('click', e, props.args);\n locked.value = false;\n }\n });\n } catch {\n // ignore user cancel\n }\n else {\n if (!locked.value) {\n locked.value = true;\n emit('click', e, props.args);\n locked.value = false;\n }\n }\n else emit('click', e, props.args);\n // ===== loading关闭 =====\n loadings.value = false;\n }\n };\n\n // @created\n\n // @mounted\n // onMounted(() => {\n // checkPerms();\n // });\n\n // @render\n /** ===== render 渲染 ===== */\n return () => {\n // validate btn perms\n checkPerms();\n\n const classz = props.bizType ? `${prefixCls} ${props.bizType}` : `${prefixCls}`;\n if (isIf.value) {\n let renderBtn: Component;\n if (props.confirm === 'true' || props.confirm === true)\n if (buttonConfirm.value === false)\n renderBtn = (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n onClick={(e: MouseEvent) => handleClick(e, 'confirm')}\n class={classz}>\n {getSlots.value}\n </ElButton>\n );\n else\n renderBtn = (\n <GvPopconfirm\n title={t('common.confirmMsg')}\n onConfirm={(e: MouseEvent) => handleClick(e, 'confirm')}>\n {{\n reference: () => (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n class={classz}>\n {getSlots.value}\n </ElButton>\n ),\n }}\n </GvPopconfirm>\n );\n else\n renderBtn = (\n <ElButton\n ref=\"gv-button\"\n style={{ display: isShow.value ? '' : 'none' }}\n data-ref-form={props.refForm}\n size={buttonSize.value}\n type={props.type !== 'text' ? props.type : undefined}\n link={props.link}\n loading={loadings.value}\n disabled={!!props.disabled}\n icon={setIconStyle()}\n native-type={props.nativeType}\n onClick={(e: MouseEvent) => handleClick(e)}\n class={classz}>\n {getSlots.value}\n </ElButton>\n );\n return renderBtn;\n } else return null;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-button';\n .#{$prefixCls} {\n :deep(i + span) {\n margin-left: 5px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvButton from './src/GvButton.vue';\n\nconst GvButtonPlugin = {\n install(app: App): void {\n app.component(GvButton.name ?? 'GvButton', GvButton);\n },\n};\nexport default GvButtonPlugin;\n\nexport { GvButton };\n","<!--\n * @title: card component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 09:39:53\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:18:37\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCard } from 'element-plus';\n import { defineComponent } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('card');\n\n export default defineComponent({\n name: 'GvCard',\n props: {},\n setup(_props, { slots }) {\n // @method\n /**\n *@todo: 设置header标题\n *@author: bugcao\n *@date: 2026-05-09 09:31:12\n *@version: v0.0.1\n */\n const getCardHeader = () => {\n if (slots.header?.()) return <div class=\"clearfix\">{slots.header?.()}</div>;\n else return null;\n };\n\n // @render\n return () => (\n <ElCard class={prefixCls}>\n {{\n header: () => getCardHeader(),\n default: () => slots.default?.(),\n }}\n </ElCard>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-card';\n .#{$prefixCls} {\n .clearfix::before,\n .clearfix::after {\n display: table;\n content: '';\n }\n .clearfix::after {\n clear: both;\n }\n :deep(.el-card__body) {\n padding: 10px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCard from './src/GvCard.vue';\n\nconst GvCardPlugin = {\n install(app: App): void {\n app.component(GvCard.name ?? 'GvCard', GvCard);\n },\n};\nexport default GvCardPlugin;\n\nexport { GvCard };\n","<!--\n * @title: cascader component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:32:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 14:20:07\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { ElCascader, useGlobalConfig, type CascaderOption, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('cascader');\n\n export default defineComponent({\n name: 'GvCascader',\n props: {\n vref: {\n type: String,\n required: false,\n default: '',\n },\n name: {\n type: String,\n required: false,\n default: undefined,\n },\n id: {\n type: String,\n required: false,\n default: undefined,\n },\n value: {\n type: Array,\n required: false,\n default: () => [],\n },\n options: {\n type: Array as PropType<CascaderOption[]>,\n required: false,\n default: () => [],\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n placeholder: {\n type: String,\n required: false,\n default: 'All', // 请选择\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n clearable: {\n type: Boolean,\n required: false,\n default: true,\n },\n showAllLevels: {\n type: Boolean,\n required: false,\n default: true,\n },\n separator: {\n type: String,\n required: false,\n default: ' / ',\n },\n trigger: {\n type: String,\n required: false,\n default: 'hover',\n },\n filterable: {\n type: Boolean,\n required: false,\n default: true,\n },\n multiple: {\n type: Boolean,\n required: false,\n default: false,\n },\n lazy: {\n type: Boolean,\n required: false,\n default: false,\n },\n lazyLoad: {\n type: Function as PropType<(node: any, resolve: (data: any[]) => void, reject: () => void) => void>,\n required: false,\n default: () => {},\n },\n },\n // @emit\n emits: ['input', 'blur', 'focus', 'keydown', 'change'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const sOps = props.options;\n const inputValue = ref(props.value);\n const globalSize = useGlobalConfig('size');\n\n // @computed\n const cascaderSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceHolder = computed(() => (props.placeholder ? props.placeholder : t('common.pleaseInput')));\n const getDisabled = computed(() => props.disabled);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n\n // 回调参数:(value: string | number)\n // const handleInput = (val) => {\n // emit('input', val);\n // };\n const handleChange = (val) => {\n emit('change', val);\n };\n const handleBlur = (event) => {\n emit('blur', event);\n };\n /**\n * @todo: 搜索\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-10-07 15:48:09\n * @param {*} node\n * @param {*} query\n */\n const handleFilterMethod = (node, query) => {\n // console.log(node);\n const path = node.path;\n const labels = node.pathLabels;\n const data = node.data;\n if (query) {\n if (path.join(',').indexOf(query) >= 0) return true;\n if (labels.join(',').indexOf(query) >= 0) return true;\n if (data.spell)\n if (data.spell.indexOf(query) >= 0) return true;\n else {\n const pathNodes = node.pathNodes;\n return pathNodes.some((x) => {\n if (x.data.spell && x.data.spell.indexOf(query) >= 0) return true;\n });\n }\n }\n };\n\n // @render\n return (\n <ElCascader\n ref={props.vref || 'gv-cascader'}\n id={resolvedInputId.value}\n {...(props.name ? { name: props.name } : {})}\n class={prefixCls}\n v-model={inputValue.value}\n style={{ display: props.value ? '' : 'none' }}\n size={cascaderSize.value}\n placeholder={sPlaceHolder.value}\n options={sOps}\n disabled={getDisabled.value}\n show-all-levels={props.showAllLevels}\n clearable={props.clearable}\n separator={props.separator}\n filterable={props.filterable}\n filter-method={handleFilterMethod}\n debounce={400}\n onBlur={handleBlur}\n onChange={handleChange}\n collapse-tags\n props={{\n expandTrigger: props.trigger as 'click' | 'hover',\n lazy: props.lazy,\n lazyLoad: props.lazyLoad,\n multiple: props.multiple,\n }}></ElCascader>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-cascader';\n .#{$prefixCls} {\n width: 100%;\n\n :deep(.el-input) {\n &.is-focus {\n .el-input__inner {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-input__inner {\n height: 30px !important;\n line-height: 30px;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCascader from './src/GvCascader.vue';\nconst GvCascaderPlugin = {\n install(app: App): void {\n app.component(GvCascader.name ?? 'GvCascader', GvCascader);\n },\n};\nexport default GvCascaderPlugin;\n\nexport { GvCascader };\n","<!--\n * @title: checkbox component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 15:50:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:51:56\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckbox, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TCheckboxValueType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox');\n\n export default defineComponent({\n name: 'GvCheckbox',\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [Boolean, String, Number] as PropType<TCheckboxValueType>,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n indeterminate: {\n type: Boolean,\n default: false,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TCheckboxValueType>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n const checkboxValue = ref(props.value);\n const checkboxSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @method\n /** 更新值 */\n const handleUpdate = (val: TCheckboxValueType) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n /** change事件 */\n const handleChange = (val: TCheckboxValueType) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElCheckbox\n class={prefixCls}\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n label={props.label}\n indeterminate={props.indeterminate}\n disabled={props.disabled}\n border={props.border}\n size={checkboxSize.value}\n style={{ display: props.visible ? '' : 'none' }}\n onChange={handleChange}>\n {slots.default?.()}\n </ElCheckbox>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox';\n .#{$prefixCls} {\n padding: 5px 0 5px 15px;\n //font-size: $appTextSize;\n\n :deep(.el-checkbox__input) {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-focus {\n .el-checkbox__inner {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked {\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n\n &:hover {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n\n :deep(.el-checkbox__input.is-checked + .el-checkbox__label) {\n color: var(--primaryColor, $primaryColor);\n }\n\n :deep(.el-checkbox__label) {\n //font-size: $appTextSize;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckbox from './src/GvCheckbox.vue';\n\nconst GvCheckboxPlugin = {\n install(app: App): void {\n app.component(GvCheckbox.name ?? 'GvCheckbox', GvCheckbox);\n },\n};\nexport default GvCheckboxPlugin;\n\nexport { GvCheckbox };\n","<!--\n * @title: checkbox button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 16:41:13\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:52:18\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckboxButton, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TCheckboxButtonValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox-button');\n\n export default defineComponent({\n name: 'GvCheckboxButton',\n inheritAttrs: false,\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TCheckboxButtonValue>,\n default: undefined,\n },\n name: {\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n indeterminate: {\n type: Boolean,\n required: false,\n default: false,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TCheckboxButtonValue>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n required: false,\n default: false,\n },\n size: {\n type: String as PropType<'large' | 'default' | 'small'>,\n default: 'default',\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n /** 内部值 */\n const checkboxValue = ref(props.value);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @computed\n /** checkbox尺寸 */\n const checkboxButtonSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @method\n /** 更新v-model */\n const handleUpdate = (val: TCheckboxButtonValue) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n\n // @render\n return () => (\n <ElCheckboxButton\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n value={props.value}\n label={props.label}\n indeterminate={props.indeterminate}\n disabled={props.disabled}\n size={checkboxButtonSize.value}\n class={prefixCls}\n border={props.border}\n style={{ display: props.visible ? '' : 'none' }}>\n {slots.default?.()}\n </ElCheckboxButton>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox-button';\n .#{$prefixCls} {\n padding: 5px 0 5px 15px;\n //font-size: $appTextSize;\n\n :deep(.el-checkbox-button__inner) {\n //font-size: $appTextSize;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckboxButton from './src/GvCheckboxButton.vue';\n\nconst GvCheckboxButtonPlugin = {\n install(app: App): void {\n app.component(GvCheckboxButton.name ?? 'GvCheckboxButton', GvCheckboxButton);\n },\n};\nexport default GvCheckboxButtonPlugin;\n\nexport { GvCheckboxButton };\n","<!--\n * @title: checkbox group component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 16:08:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 15:26:16\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCheckboxGroup, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TCheckboxGroupType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('checkbox-group');\n\n export default defineComponent({\n name: 'GvCheckboxGroup',\n\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: Array as PropType<TCheckboxGroupType>,\n required: false,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<'large' | 'default' | 'small'>,\n default: 'default',\n },\n min: {\n type: Number,\n default: undefined,\n },\n max: {\n type: Number,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n\n // @emit\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n const globalSize = useGlobalConfig('size');\n\n const checkboxValue = ref(props.value);\n\n // @computed\n const checkboxGroupSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n /** 同步外部值 */\n watch(\n () => props.value,\n (val) => {\n checkboxValue.value = val;\n },\n );\n\n // @method\n /** 更新 v-model */\n const handleUpdate = (val: TCheckboxGroupType) => {\n checkboxValue.value = val;\n emit('update:modelValue', val);\n };\n /** change事件 */\n const handleChange = (val: TCheckboxGroupType) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElCheckboxGroup\n modelValue={checkboxValue.value}\n onUpdate:modelValue={handleUpdate}\n size={checkboxGroupSize.value}\n aria-label={props.label}\n min={props.min}\n max={props.max}\n disabled={props.disabled}\n class={prefixCls}\n onChange={handleChange}>\n {slots.default?.()}\n </ElCheckboxGroup>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-checkbox-group';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvCheckboxGroup from './src/GvCheckboxGroup.vue';\n\nconst GvCheckboxGroupPlugin = {\n install(app: App): void {\n app.component(GvCheckboxGroup.name ?? 'GvCheckboxGroup', GvCheckboxGroup);\n },\n};\nexport default GvCheckboxGroupPlugin;\n\nexport { GvCheckboxGroup };\n","<!--\n * @title: col component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 10:00:33\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:24:29\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElCol } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('col');\n\n export default defineComponent({\n name: 'GvCol',\n props: {\n span: {\n type: Number,\n default: 24,\n },\n offset: {\n type: Number,\n default: 0,\n },\n xs: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n sm: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n md: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n lg: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n xl: {\n type: Number as PropType<number | undefined>,\n default: undefined,\n },\n tag: {\n type: String,\n default: 'div',\n },\n visible: {\n type: Boolean,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @render\n return () => (\n <ElCol\n ref=\"gv-col\"\n style={{ display: props.visible ? '' : 'none' }}\n xs={props.xs}\n sm={props.sm}\n md={props.md}\n lg={props.lg}\n xl={props.xl}\n span={props.span}\n offset={props.offset}\n tag={props.tag}\n class={prefixCls}>\n {slots.default?.()}\n </ElCol>\n );\n },\n });\n</script>\n","import type { App } from 'vue';\nimport GvCol from './src/GvCol.vue';\n\nconst GvColPlugin = {\n install(app: App): void {\n app.component(GvCol.name ?? 'GvCol', GvCol);\n },\n};\nexport default GvColPlugin;\n\nexport { GvCol };\n","/*\n * 日期工具函数(Vue3 + TS 重构版)\n */\n\nexport type LocaleType = 'zh' | 'en' | 'english';\n\nconst localLabels = {\n monthes: {\n english: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n en: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n zh: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n },\n weekdays: {\n english: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n en: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n zh: ['日', '一', '二', '三', '四', '五', '六'],\n },\n meridians: {\n english: ['a.m.', 'p.m.'],\n en: ['AM', 'PM'],\n zh: ['上午', '下午'],\n },\n dayagos: {\n english: ['Today', 'Yesterday', 'Tomorrow', ' days ago', ' days late'],\n en: ['Today', 'Yesterday', 'Tomorrow', ' days ago', ' days late'],\n zh: ['今天', '昨天', '明天', '天前', '天后'],\n },\n};\n\nexport const toMidnight = (date: Date): Date => {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n return d;\n};\n\nexport const daysAgo = (date: Date, days = 0, midnight = false): Date => {\n const result = new Date(date.getTime() - days * 8.64e7);\n return midnight ? toMidnight(result) : result;\n};\n\nexport const monthBegin = (date: Date, offset = 0): Date => {\n const days = date.getDate() - 1 - offset;\n return daysAgo(date, days, true);\n};\n\nexport const quarterBegin = (date: Date): Date => {\n const month = date.getMonth() - (date.getMonth() % 3);\n return toMidnight(new Date(date.getFullYear(), month, 1));\n};\n\nexport const yearBegin = (date: Date): Date => toMidnight(new Date(date.getFullYear(), 0, 1));\n\nconst padZero = (value: string | number, len = 2): string => String(value).padStart(len, '0');\n\nexport const strftime = (date: Date, format?: string, local: LocaleType = 'zh'): string => {\n if (!format) {\n const str = new Date(date.getTime() + 2.88e7).toISOString();\n return str.substring(0, 16).replace('T', ' ');\n }\n\n const locale = local.startsWith('zh') ? 'zh' : 'en';\n\n format = format.replace('%F', '%Y-%m-%d');\n format = format.replace(/%D|%x/g, '%m/%d/%y');\n format = format.replace(/%T|%X/g, '%H:%M:%S');\n format = format.replace('%R', '%H:%M');\n\n return format.replace(/%[A-Za-z%]/g, (f) => {\n let ans: string | number = f;\n\n switch (f) {\n case '%%':\n ans = '%';\n break;\n\n case '%Y':\n ans = date.getFullYear();\n break;\n\n case '%y':\n ans = date.getFullYear() % 100;\n break;\n\n case '%m':\n ans = date.getMonth() + 1;\n break;\n\n case '%d':\n ans = date.getDate();\n break;\n\n case '%H':\n ans = date.getHours();\n break;\n\n case '%M':\n ans = date.getMinutes();\n break;\n\n case '%S':\n ans = date.getSeconds();\n break;\n\n case '%b':\n case '%B': {\n const key = f === '%B' && locale === 'en' ? 'english' : locale;\n ans = localLabels.monthes[key][date.getMonth()];\n break;\n }\n\n case '%a':\n case '%A': {\n const key = f === '%A' && locale === 'en' ? 'english' : locale;\n ans = localLabels.weekdays[key][date.getDay()];\n break;\n }\n\n default:\n break;\n }\n\n if (['%y', '%m', '%d', '%H', '%M', '%S'].includes(f)) return padZero(ans);\n\n return String(ans);\n });\n};\n\nexport const humanize = (date: Date, local: LocaleType = 'zh'): string => {\n const locale = local.startsWith('zh') ? 'zh' : 'en';\n\n const result = strftime(date, '', locale);\n\n const today = toMidnight(new Date()).getTime();\n const current = toMidnight(date).getTime();\n\n const days = (today - current) / 8.64e7;\n\n if (days <= -10 || days >= 10) return result;\n\n const labels = localLabels.dayagos[locale];\n\n let lbl = '';\n\n if (days === 0) lbl = labels[0];\n else if (days === 1) lbl = labels[1];\n else if (days === -1) lbl = labels[2];\n else if (days >= 2) lbl = `${days}${labels[3]}`;\n else lbl = `${Math.abs(days)}${labels[4]}`;\n\n return lbl + result.substring(10, 16);\n};\n","/*\n * @title: 日期组件左侧选择日期快捷键(非区间模式)\n * @author: bugcao@163.com\n * @Date: 2022-05-14 08:33:20\n * @LastEditors: bugcao@163.com\n * @LastEditTime: 2022-05-14 08:33:20\n * @version: 0.0.1\n * @copyright: copyright (c) 2022 bugcao\n */\nimport { daysAgo, monthBegin, quarterBegin, yearBegin } from './datetime';\n\nexport interface ShortcutItem {\n text: string;\n value: Date | [Date, Date] | (() => Date | [Date, Date]);\n}\n\nconst now = () => new Date();\n\n/** 单日期快捷选择 */\nexport const dateShortcuts: ShortcutItem[] = [\n {\n text: '今天',\n value: () => now(),\n },\n {\n text: '昨天',\n value: () => daysAgo(now(), 1),\n },\n {\n text: '最近一周',\n value: () => daysAgo(now(), 7),\n },\n {\n text: '最近30天',\n value: () => daysAgo(now(), 30),\n },\n {\n text: '本月开始',\n value: () => monthBegin(now()),\n },\n {\n text: '本季开始',\n value: () => quarterBegin(now()),\n },\n];\n\n/** 英文单日期快捷选择 */\nexport const dateShortcutsEn: ShortcutItem[] = [\n {\n text: 'Today',\n value: () => now(),\n },\n {\n text: 'Yesterday',\n value: () => daysAgo(now(), 1),\n },\n {\n text: 'Last week',\n value: () => daysAgo(now(), 7),\n },\n {\n text: 'Last 30 days',\n value: () => daysAgo(now(), 30),\n },\n {\n text: 'Month start',\n value: () => monthBegin(now()),\n },\n {\n text: 'Season Start',\n value: () => quarterBegin(now()),\n },\n];\n\n/** 日期时间快捷选择 */\nexport const dateTimeShortcuts = dateShortcuts.slice(0, 3);\n\nexport const dateTimeShortcutsEn = dateShortcutsEn.slice(0, 3);\n\n/** 日期范围快捷选择 */\nexport const dateRangeShortcuts: ShortcutItem[] = [\n {\n text: '最近一周',\n value: () => {\n const start = new Date(daysAgo(now(), 7).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '最近30天',\n value: () => {\n const start = new Date(daysAgo(now(), 30).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '本月至今',\n value: () => {\n const start = new Date(monthBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '本季至今',\n value: () => {\n const start = new Date(quarterBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: '今年至今',\n value: () => [yearBegin(now()), now()],\n },\n {\n text: '最近六个月',\n value: () => {\n const end = now();\n const start = new Date();\n\n start.setMonth(start.getMonth() - 6);\n\n return [start, end];\n },\n },\n];\n\n/** 英文日期范围快捷选择 */\nexport const dateRangeShortcutsEn: ShortcutItem[] = [\n {\n text: 'Last week',\n value: () => {\n const start = new Date(daysAgo(now(), 7).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Last 30 days',\n value: () => {\n const start = new Date(daysAgo(now(), 30).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Month date',\n value: () => {\n const start = new Date(monthBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Season date',\n value: () => {\n const start = new Date(quarterBegin(now()).setHours(0, 0, 0, 0));\n const end = new Date(now().setHours(23, 59, 59, 999));\n\n return [start, end];\n },\n },\n {\n text: 'Year date',\n value: () => [yearBegin(now()), now()],\n },\n {\n text: 'Last 6 mon',\n value: () => {\n const end = now();\n const start = new Date();\n\n start.setMonth(start.getMonth() - 6);\n\n return [start, end];\n },\n },\n];\n\n/** 日历快捷选择 */\nexport const calendarShortcuts = [...dateShortcuts];\n","<!--\n * @title: 自定义日期选择组件\n * @author: bugcao@163.com\n * @date: 2026-06-08 14:52:11\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:52:01\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Bugcao\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElDatePicker, useGlobalConfig, type ComponentSize, type DatePickerType } from 'element-plus';\n import { computed, defineComponent, ref, unref, useAttrs, watch, type PropType } from 'vue';\n import { useI18n } from 'vue-i18n';\n import { dateRangeShortcuts, dateRangeShortcutsEn, dateShortcuts, dateShortcutsEn, dateTimeShortcuts, dateTimeShortcutsEn } from './shortcuts';\n import type { TDatePickerSize, TDatePickerType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('datepicker');\n\n export default defineComponent({\n // @define name\n name: 'GvDatePicker',\n\n // @props\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [Date, String, Array] as PropType<TDatePickerType>,\n default: undefined,\n },\n type: {\n type: String as PropType<DatePickerType>,\n default: 'date',\n },\n format: {\n type: String,\n default: 'YYYY-MM-DD',\n },\n valueFormat: {\n type: String,\n default: 'YYYY-MM-DD',\n },\n defaultTime: {\n type: Array,\n default: undefined,\n },\n size: {\n type: String as PropType<TDatePickerSize>,\n default: 'default',\n },\n rangeSeparator: {\n type: String,\n default: undefined,\n },\n startPlaceholder: {\n type: String,\n default: undefined,\n },\n endPlaceholder: {\n type: String,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n disabledDateFunc: {\n type: Array,\n default: () => [],\n },\n disabledDate: {\n type: Function,\n default: () => {},\n },\n editable: {\n type: Boolean,\n default: true,\n },\n unlink: {\n type: Boolean,\n default: false,\n },\n },\n\n // @emits\n emits: ['update:modelValue', 'change', 'blur', 'focus', 'pick', 'input'],\n\n setup(props, { emit }) {\n // @hooks\n const { locale, t } = useI18n();\n const attrs = useAttrs();\n const globalSize = useGlobalConfig('size');\n\n // @data\n const inputValue = ref(props.modelValue);\n\n // @watch\n watch(\n () => props.modelValue,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @computed\n const datePickerSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n const getShortcuts = computed(() => {\n if (locale.value === 'en')\n if (props.type === 'date') return dateShortcutsEn;\n else if (props.type === 'datetime') return dateTimeShortcutsEn;\n else if (props.type === 'daterange' || props.type === 'datetimerange') return dateRangeShortcutsEn;\n else return '';\n // fixme: 查看源码是'',如果是[],则依旧会出现左边栏\n else if (props.type === 'date') return dateShortcuts;\n else if (props.type === 'datetime') return dateTimeShortcuts;\n else if (props.type === 'daterange' || props.type === 'datetimerange') return dateRangeShortcuts;\n else return ''; // fixme: 查看源码是'',如果是[],则依旧会出现左边栏\n });\n /**\n * @todo: 设置pickerOptions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-08 17:03:41\n */\n const getPickerOptions = computed(() => {\n const pickerOptions: any = {\n shortcuts: getShortcuts.value,\n };\n if (props.disabledDateFunc.includes('beforeToday'))\n // 禁止选择今天之前日期(可以选择今天)\n pickerOptions['disabledDate'] = (date: Date) => date.getTime() < Date.now() - 8.64e7;\n if (props.disabledDateFunc.includes('afterToday'))\n // 禁止选择今天之后的日期(可以选择今天)\n pickerOptions['disabledDate'] = (date: Date) => date.getTime() > Date.now();\n if (props.disabledDate) {\n const db = { disabledDate: props.disabledDate };\n return { ...pickerOptions, ...db };\n } else return { ...pickerOptions };\n });\n\n // @methods\n /**\n * @todo: 回调参数:(value: string | number)\n * @author: bugcao@163.com\n * @Date: 2026-06-08 16:03:12\n * @param {*} value\n */\n const handleInput = (value: TDatePickerType) => {\n emit('update:modelValue', value);\n emit('input', value);\n };\n /**\n * @todo: 变化时触发\n * @author: bugcao@163.com\n * @Date: 2026-06-08 15:05:50\n * @param {*} value\n */\n const handleChange = (value: string) => {\n emit('change', value);\n };\n /**\n * @todo: 失去焦点方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-08 18:39:51\n * @param {*} vm 当前vue组件对象\n */\n const handleBlur = (vm: FocusEvent) => {\n // console.log(vm);\n // const val = vm.$el.querySelector('input').value;\n // if (val) {\n // const format = vm.format;\n // if (!this.userInput)\n // this.userInput = moment(val, format.toUpperCase()).format(format.toUpperCase());\n // if (this.userInput !== 'Invalid date')\n // vm.userInput = this.userInput;\n // // picker.vue中触发value的方法\n // // vm.handleChange();\n emit('blur', vm);\n // this.userInput = '';\n // }\n };\n /**\n * @todo: 获得焦点方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-08 18:39:51\n * @param {*} vm 当前vue组件对象\n */\n const handleFocus = (vm: FocusEvent) => {\n emit('focus', vm);\n };\n /**\n * @todo: 选中日期回调:只有在range模式下有效\n * @author: bugcao@163.com\n * @Date: 2026-06-08 16:16:51\n * @param {*} maxDate\n * @param {*} minDate\n */\n const handlePick = (val: [Date, null | Date]) => {\n emit('pick', { maxDate: val[0], minDate: val[1] });\n };\n\n // @render\n return () => (\n <div class={prefixCls}>\n <ElDatePicker\n ref={props.vref || 'gv-datepicker'}\n id={resolvedInputId.value}\n name={props.name}\n modelValue={inputValue.value}\n onUpdate:modelValue={handleInput}\n type={props.type}\n range-separator={props.rangeSeparator || t('common.until')}\n placeholder={props.placeholder || t('common.selectDate')}\n startPlaceholder={props.startPlaceholder || t('common.startDate')}\n endPlaceholder={props.endPlaceholder || t('common.endDate')}\n default-time={props.defaultTime}\n disabled-date={getPickerOptions.value?.disabledDate}\n shortcuts={getPickerOptions.value.shortcuts}\n format={props.format}\n clearable={props.clearable}\n valueFormat={props.valueFormat}\n {...({\n onCalendarChange: handlePick,\n } as any)}\n size={datePickerSize.value}\n disabled={props.disabled}\n editable={props.editable}\n onBlur={handleBlur}\n onFocus={handleFocus}\n prefix-icon=\"\"\n onChange={handleChange}\n unlink-panels={props.unlink}\n {...attrs}\n // { ...this.$listeners }\n ></ElDatePicker>\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-datepicker';\n .#{$prefixCls} {\n width: 100% !important;\n vertical-align: middle;\n :deep(.el-date-editor) {\n width: 100%;\n }\n :deep(.el-input.is-disabled) {\n .el-input__inner {\n color: $textColor;\n }\n }\n &.el-range-editor.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n :deep(.el-input__inner) {\n height: 30px;\n line-height: 30px;\n //font-size: $appTextSize;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-range__close-icon {\n width: 20px;\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n .el-date-editor--daterange {\n :deep(.el-range-separator) {\n padding-right: 2px;\n padding-left: 0;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDatePicker from './src/GvDatePicker.vue';\n\nconst GvDatePickerPlugin = {\n install(app: App): void {\n app.component(GvDatePicker.name ?? 'GvDatePicker', GvDatePicker);\n },\n};\nexport default GvDatePickerPlugin;\n\nexport { GvDatePicker };\n","/*\n * @title: dialog drag\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 10:50:25\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-15 10:52:45\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport type { Directive } from 'vue';\n\n/** 使用 WeakSet 跟踪已绑定拖拽事件的 header 元素,避免内存泄漏 */\nconst boundElements = new WeakSet<HTMLElement>();\n\n/**\n * 初始化拖拽功能\n */\nconst initDrag = (el: HTMLElement, collapseMenu: boolean = false) => {\n /** Vue3 dialog - 支持 appendToBody 的情况 */\n let dragDom = el.querySelector('.el-dialog') as HTMLElement;\n if (!dragDom) dragDom = document.querySelector('.el-dialog') as HTMLElement;\n\n if (!dragDom) {\n console.warn('gv-drag-dialog: 未找到 dialog 元素');\n return false;\n }\n\n /** Vue3 dialog header - 支持自定义 header 和默认 header */\n let dialogHeaderEl: HTMLElement | null = null;\n dialogHeaderEl = dragDom.querySelector('.el-dialog__header') as HTMLElement;\n if (!dialogHeaderEl) dialogHeaderEl = dragDom.querySelector('.gv-dialog__title') as HTMLElement;\n\n if (!dialogHeaderEl) {\n console.warn('gv-drag-dialog: 未找到 dialog header 元素');\n return false;\n }\n\n /** 避免重复绑定 */\n if (boundElements.has(dialogHeaderEl)) return true;\n boundElements.add(dialogHeaderEl);\n\n /** 鼠标移动样式 */\n dialogHeaderEl.style.cursor = 'move';\n /** 初始化顶部 */\n dragDom.style.top = '0px';\n /** 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null) */\n const getStyle = (function () {\n if ((window.document as any).currentStyle) return (dom: HTMLElement, attr: string) => (dom as any).currentStyle[attr];\n else return (dom: HTMLElement, attr: string) => getComputedStyle(dom, null)[attr as any];\n })();\n\n dialogHeaderEl.onmousedown = (e: MouseEvent) => {\n /** 鼠标按下,计算当前元素距离可视区的距离 */\n const disX = e.clientX - dialogHeaderEl!.offsetLeft;\n const disY = e.clientY - dialogHeaderEl!.offsetTop;\n\n const dragDomWidth = dragDom.offsetWidth;\n const dragDomHeight = dragDom.offsetHeight;\n\n const screenWidth = document.body.clientWidth;\n const screenHeight = document.body.clientHeight;\n\n /** 左侧边界 */\n const minDragDomLeft = dragDom.offsetLeft;\n /** 右侧边界 */\n const menuWidth = collapseMenu ? 54 : 200;\n const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth - menuWidth;\n\n /** 上边界 */\n const minDragDomTop = dragDom.offsetTop;\n /** 下边界 */\n // 45: toolbar height;34: tags view height\n const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomHeight - 45 - 34;\n\n /** 获取到的值带px 正则匹配替换 */\n let styL: string | number = getStyle(dragDom, 'left');\n let styT: string | number = getStyle(dragDom, 'top');\n\n /** 百分比转像素 */\n if (typeof styL === 'string' && styL.includes('%')) {\n styL = document.body.clientWidth * (+styL.replace(/%/g, '') / 100);\n styT = document.body.clientHeight * (+String(styT).replace(/%/g, '') / 100);\n } else {\n styL = +String(styL).replace(/\\px/g, '');\n styT = +String(styT).replace(/\\px/g, '');\n }\n\n /** 鼠标移动 */\n const onMouseMove = (ev: MouseEvent) => {\n /** 通过事件委托,计算移动的距离 */\n let left = ev.clientX - disX;\n let top = ev.clientY - disY;\n\n /** 边界处理 */\n if (-left > minDragDomLeft) left = -minDragDomLeft;\n else if (left > maxDragDomLeft) left = maxDragDomLeft;\n\n if (-top > minDragDomTop) top = -minDragDomTop;\n else if (top > maxDragDomTop) top = maxDragDomTop;\n\n /** 移动当前元素 */\n dragDom.style.left = `${left + Number(styL)}px`;\n dragDom.style.top = `${top + Number(styT)}px`;\n };\n\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n };\n\n return true;\n};\n\nconst dragDialog: Directive = {\n /**\n * @title 挂载时调用\n * @param el 指令绑定的元素\n * @param binding 指令绑定的参数\n * @description Vue3 中需要使用 nextTick 等待 DOM 渲染完成,并通过 querySelector 查找 ElDialog 内部元素\n */\n // mounted(el: HTMLElement, binding: DirectiveBinding, vnode: VNode) {\n // // 使用 setTimeout 确保 ElDialog 已经渲染完成\n // setTimeout(() => {\n // // 尝试初始化,如果 dialog 还没打开,会在 opened 事件中再次尝试\n // initDrag(el);\n // }, 200);\n // },\n};\nexport default dragDialog;\nexport { initDrag };\n","<!--\n * @title: dialog component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-09 09:57:32\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:57:53\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText, sleep } from '@@/utils';\n import { ElDialog } from 'element-plus';\n import { defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, ref, watch, type VNode } from 'vue';\n import { initDrag } from './drag';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('dialog');\n\n export default defineComponent({\n name: 'GvDialog',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: false,\n },\n title: {\n type: String,\n required: false,\n default: '标题',\n },\n hasFooter: {\n type: Boolean,\n required: false,\n default: true,\n },\n width: {\n type: String,\n required: false,\n default: '75%',\n },\n height: {\n type: String,\n required: false,\n default: undefined,\n },\n nest: {\n type: Boolean,\n required: false,\n default: false,\n },\n appendToBody: {\n type: Boolean,\n required: false,\n default: false,\n },\n fullscreen: {\n type: Boolean,\n required: false,\n default: false,\n },\n maxHeight: {\n type: String,\n required: false,\n default: undefined,\n },\n closeOnClickModal: {\n type: Boolean,\n required: false,\n default: false,\n },\n closeOnPressEscape: {\n type: Boolean,\n required: false,\n default: true,\n },\n dialogClass: {\n type: String,\n required: false,\n default: undefined,\n },\n },\n emits: ['open', 'opened', 'close', 'closed', 'cancel', 'update:visible'],\n\n setup(props, { slots, emit }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n const buttonQuick = appStore.buttonQuick;\n const collapseMenus = appStore.collapseMenus;\n const instance = getCurrentInstance();\n\n let myDialogClass = props.dialogClass || prefixCls;\n let dialogVisible = props.visible;\n const maskVisible = ref(false);\n const vref = 'gv-dialog';\n const dialogMaxHeight = ref(props.height);\n let sAppendToBody = props.appendToBody;\n const modalAppendToBody = ref(false);\n let sNest = props.nest;\n let modalMask = props.nest;\n\n // @watch\n watch(\n () => props.visible,\n (newValue) => {\n // fixme: watch中跟踪visible,解决如将ht-dialog在一个vue组件中,如不设置,则第二次无法显示\n dialogVisible = newValue;\n if (dialogVisible)\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n },\n );\n\n // @method\n const handleVisible = () => {\n dialogVisible = true;\n };\n const handleOpen = () => {\n emit('open');\n };\n const handleOpened = () => {\n emit('opened');\n nextTick(() => {\n initDrag(instance?.vnode?.el as HTMLElement, collapseMenus);\n });\n };\n const handleClose = () => {\n dialogVisible = false;\n maskVisible.value = false;\n // 延迟异步触发\n // sleep(500).then(() => {\n // this.$emit('update:visible', false);\n // });\n emit('close');\n };\n const handleClosed = () => {\n emit('update:visible', false);\n };\n\n const handleCancel = (event) => {\n dialogVisible = false;\n maskVisible.value = false;\n emit('cancel', event);\n };\n /**\n * @todo: render footer button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 11:19:11\n */\n const renderFooterBtn = () => {\n const footer = slots.footer?.();\n footer?.forEach((x) => {\n const tag = typeof x.type === 'object' && x.type !== null ? (x.type as any).name || '' : '';\n const text = getVNodeText(x.children?.[0]) || '';\n // add: 增加text属性,判断权限使用 2023-04-18\n if (!x.props) x.props = {};\n const propsData = x.props;\n propsData.text = text;\n if (tag)\n if (text.indexOf(t('dialogBar.save')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick) if (text === t('dialogBar.save')) propsData.text = t('dialogBar.save2');\n propsData.otext = t('dialogBar.save');\n } else if (text.indexOf(t('dialogBar.add')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick)\n if (text === t('dialogBar.add')) {\n propsData.text = t('dialogBar.add2');\n propsData.otext = t('dialogBar.add');\n }\n } else if (text.indexOf(t('dialogBar.confirm')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.confirm')) {\n propsData.text = t('dialogBar.confirm2');\n propsData.otext = t('dialogBar.confirm');\n }\n } else if (text.indexOf(t('dialogBar.affirm')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.affirm')) {\n propsData.text = t('dialogBar.affirm2');\n propsData.otext = t('dialogBar.affirm');\n }\n } else if (text.indexOf(t('dialogBar.approve')) !== -1) {\n propsData.bizType = 'approve';\n propsData.icon = 'gv-icon-shenpi1';\n } else if (text.indexOf(t('dialogBar.download')) !== -1) {\n // if (text === t('dialogBar.download')) x.children[0].text = t('dialogBar.download2');\n propsData.bizType = 'download';\n propsData.icon = 'gv-icon-xiazai';\n } else if (text.indexOf(t('dialogBar.delete')) !== -1) {\n propsData.bizType = 'delete';\n propsData.icon = 'el-icon-delete';\n } else if (text.indexOf(t('dialogBar.reject')) !== -1) {\n propsData.bizType = 'reject';\n propsData.icon = 'gv-icon-bohui2';\n } else if (text.indexOf(t('dialogBar.export')) !== -1) {\n propsData.bizType = 'export';\n propsData.icon = 'gv-icon-daochu1';\n } else if (text.indexOf(t('dialogBar.generate')) !== -1) {\n propsData.bizType = 'generate';\n propsData.icon = 'gv-icon-zujian';\n } else if (text.indexOf(t('dialogBar.trace')) !== -1) {\n propsData.bizType = 'trace';\n propsData.icon = 'gv-icon-jiankongguanli';\n } else if (text.indexOf(t('dialogBar.receive')) !== -1) {\n propsData.bizType = 'receive';\n propsData.icon = 'gv-icon-piliangbianji1';\n } else if (text.indexOf(t('dialogBar.transfer')) !== -1) {\n propsData.bizType = 'save';\n propsData.icon = 'gv-icon-tiaobo';\n } else if (text.indexOf(t('dialogBar.circleCheck')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-huanjiance';\n } else if (text.indexOf(t('dialogBar.completed')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-xuanze';\n } else if (text.indexOf(t('dialogBar.finished')) !== -1 || text.indexOf(t('dialogBar.beCompleted')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-wangongqueren';\n } else if (text.indexOf(t('dialogBar.submit')) !== -1) {\n propsData.bizType = 'submit';\n propsData.icon = 'gv-icon-tijiao';\n if (buttonQuick)\n if (text === t('dialogBar.submit')) {\n propsData.text = t('dialogBar.submit2');\n propsData.otext = t('dialogBar.submit');\n }\n }\n });\n return footer;\n };\n\n /**\n * @todo: footer render\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 10:34:41\n */\n const getFooter = () => {\n if (props.hasFooter)\n if (slots.footer?.())\n return (\n <div>\n {renderFooterBtn()}\n <GvButton\n onClick={handleCancel}\n icon=\"iconfont gv-icon-fanhui2\">\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n // <el-button type='primary' onClick={this.handleConfirm}>确 定(S)</el-button>\n else\n return (\n <div>\n <GvButton\n onClick={handleCancel}\n icon=\"iconfont gv-icon-fanhui2\">\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n };\n\n /**\n * @todo: mask\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 10:38:59\n */\n const setMask = () => {\n let mask: VNode | null = null;\n if (maskVisible.value)\n mask = (\n <div\n class=\"v-modal gv-dialog-modal z-[9]\"\n tabindex=\"0\"></div>\n );\n return mask;\n };\n\n const getMaxHeight = () => {\n if (!props.height) dialogMaxHeight.value = document.documentElement.clientHeight - 230 + 'px';\n else if (props.height.indexOf('%') === -1) dialogMaxHeight.value = parseFloat(props.height) - 180 + 'px';\n else dialogMaxHeight.value = props.height; // 百分比方式\n };\n\n // @created\n // fixme: 解决嵌套弹窗问题 2022-08-08\n const pEl = instance?.parent?.parent?.vnode.el;\n if (pEl)\n try {\n const p = pEl.closest('.gv-drawer,.gv-dialog');\n if (p) sNest = true;\n } catch {\n // error\n }\n if (sNest) {\n myDialogClass = props.dialogClass ? 'gv-dialog is-nested ' + props.dialogClass : 'gv-dialog is-nested';\n sAppendToBody = true;\n modalAppendToBody.value = true;\n modalMask = true;\n } else modalMask = false;\n\n onBeforeUnmount(() => {\n window.removeEventListener('resize', getMaxHeight);\n });\n\n // mounted\n onMounted(() => {\n // fixme: v-show属性使用单独的变量,在挂载时再显示,如在data中直接定义为true,会造成抖动 2022-04-11\n if (dialogVisible) maskVisible.value = true;\n\n nextTick(() => {\n window.addEventListener('resize', getMaxHeight);\n // 计算高度\n getMaxHeight();\n });\n });\n\n // @render\n return () => (\n <div class=\"gv-dialog__popup\">\n <ElDialog\n ref={vref}\n // route={this.route}\n modelValue={dialogVisible}\n onUpdate:modelValue={handleVisible}\n appendToBody={sAppendToBody}\n modal-append-to-body={modalAppendToBody.value}\n close-on-click-modal={props.closeOnClickModal}\n close-on-press-escape={props.closeOnPressEscape}\n showClose={true}\n destroy-on-close={true}\n fullscreen={props.fullscreen}\n modal={modalMask}\n // before-close={this.handleBeforeClose}\n onClose={handleClose}\n onClosed={handleClosed}\n onOpen={handleOpen}\n onOpened={handleOpened}\n class={myDialogClass}\n width={props.width}\n style={{ height: `${props.height}` }}>\n {{\n header: () => (\n <div class=\"gv-dialog__title\">\n <span>\n <GvIcon\n iconType=\"iconfont\"\n iconName=\"gv-icon-chuangkou01\"\n />\n {props.title}\n </span>\n </div>\n ),\n default: () => (\n <div\n class=\"gv-dialog__body__inner\"\n style={{ maxHeight: `${dialogMaxHeight.value} !important` }}>\n {slots.default?.()}\n </div>\n ),\n footer: () => <div class=\"dialog-footer\">{getFooter()}</div>,\n }}\n </ElDialog>\n {setMask()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-dialog__popup {\n :deep(.el-modal-dialog) {\n position: absolute !important;\n &.is-nested {\n top: 100px;\n left: 14%;\n }\n .el-overlay-dialog {\n position: absolute !important;\n overflow: hidden;\n .el-dialog {\n max-height: 93.5% !important;\n margin-top: 25px !important;\n padding: 0px;\n\n .el-dialog__header {\n box-sizing: border-box;\n height: 30px;\n padding: 0 15px;\n line-height: 30px;\n background-color: #e1e5ec !important;\n border-bottom: 1px solid $borderColor;\n\n .gv-dialog__title {\n //font-size: $appTextSize;\n line-height: inherit;\n\n & i {\n padding-right: 10px;\n //font-size: $textSize;\n font-weight: bolder;\n }\n }\n\n .el-dialog__headerbtn {\n width: 16px;\n height: 25px;\n top: 2px;\n right: 12px;\n font-size: 20px;\n font-weight: bolder;\n line-height: normal;\n\n &:hover .el-dialog__close {\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-dialog__close {\n font-size: 16px;\n font-weight: bolder;\n }\n }\n }\n\n .el-dialog__body {\n padding: 5px 5px 5px 15px;\n overflow: hidden;\n\n .gv-dialog__body__inner {\n padding-right: 15px;\n overflow: hidden auto;\n }\n\n .fullscreen-btn {\n position: absolute;\n top: 16px;\n right: 42px;\n padding: 5px;\n line-height: 1;\n cursor: pointer;\n\n &:hover {\n color: $primaryColor;\n }\n }\n\n .container {\n padding: 0 15px;\n }\n }\n\n .el-dialog__footer {\n .gv-popconfirm {\n padding: 1px 0 1px 8px;\n }\n\n .el-button i + span {\n margin-left: 5px;\n }\n\n padding: 5px 15px;\n border-top: 1px solid $borderColor;\n }\n }\n }\n }\n }\n\n .gv-tabs {\n .gv-dialog {\n top: -10px;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDialog from './src/GvDialog.vue';\nconst GvDialogPlugin = {\n install(app: App): void {\n app.component(GvDialog.name ?? 'GvDialog', GvDialog);\n },\n};\nexport default GvDialogPlugin;\n\nexport { GvDialog };\n","<!--\n * @title: divider component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 17:24:57\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 18:03:45\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElDivider } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n import type { DividerDirection } from './types';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('divider');\n\n export default defineComponent({\n name: 'GvDivider',\n emits: ['setDividerShow'],\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n label: {\n type: String,\n required: true,\n default: '栏目',\n },\n position: {\n type: String,\n required: false,\n default: 'left',\n },\n direction: {\n type: String as PropType<DividerDirection>,\n required: false,\n default: 'horizontal',\n },\n target: {\n type: String,\n required: false,\n default: undefined,\n },\n },\n\n setup(props, { emit }) {\n /**\n * @todo: click divider — toggle form visibility via parent isShow\n */\n const clickDivider = (event: MouseEvent | TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n emit('setDividerShow', !props.visible);\n };\n\n return () => (\n <div\n class={prefixCls}\n onClick={(event) => clickDivider(event)}>\n <ElDivider\n content-position={props.position}\n direction={props.direction}>\n <span class=\"title\">{props.label}</span>\n </ElDivider>\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-divider';\n .#{$prefixCls} {\n width: 100%;\n height: 20px;\n margin: 5px 0 8px 0;\n overflow: hidden;\n user-select: none;\n\n // 禁止选中文本\n &:hover {\n cursor: pointer;\n }\n :deep(.el-divider--horizontal) {\n margin: 8px 0;\n .el-divider__text {\n padding: 0 $modulePadding;\n &.is-left {\n left: -$moduleMargin;\n }\n .title {\n display: inline-block;\n height: 20px;\n //font-size: $textSizeSecondary;\n font-weight: $fontWeight;\n line-height: 20px;\n color: $textColor;\n\n &::before {\n display: inline-block;\n width: 5px;\n height: 100%;\n margin-right: 8px;\n vertical-align: middle;\n content: '';\n background-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDivider from './src/GvDivider.vue';\nconst GvDividerPlugin = {\n install(app: App): void {\n app.component(GvDivider.name ?? 'GvDivider', GvDivider);\n },\n};\nexport default GvDividerPlugin;\n\nexport { GvDivider };\n","<!--\n * @title: drawer component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-09 09:58:21\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:04\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText, sleep } from '@@/utils';\n import { ElDrawer } from 'element-plus';\n import { defineComponent, nextTick, onMounted, ref, watch, type PropType, type VNode } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('drawer');\n\n export default defineComponent({\n name: 'GvDrawer',\n props: {\n visible: {\n type: Boolean,\n required: false,\n default: false,\n },\n title: {\n type: String,\n required: false,\n default: '标题',\n },\n direction: {\n type: String as PropType<'rtl' | 'ltr' | 'ttb' | 'btt'>,\n required: false,\n default: 'rtl',\n },\n size: {\n type: [String, Number],\n required: false,\n default: '95%', // 95%\n },\n paddingHeight: {\n type: [Number],\n required: false,\n default: 100, // 100\n },\n },\n emits: ['cancel', 'update:visible'],\n\n setup(props, { slots, emit }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n\n let drawerVisible = props.visible;\n const maskVisible = ref(false);\n const vref = 'gv-drawer';\n const drawerMaxHeight = ref(0);\n const show = ref(false);\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const sPaddingHeight = appStore.drawerPaddingHeight ? appStore.drawerPaddingHeight : props.paddingHeight;\n\n // @watch\n watch(\n () => props.visible,\n (newVal) => {\n // fixme: watch中跟踪visible,解决如将ht-drawer在一个vue组件中,如不设置,则第二次无法显示\n drawerVisible = newVal;\n if (drawerVisible)\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n },\n );\n\n // @method\n\n const handleOpen = () => {\n // this.maskVisible = true;\n // this.$emit('opened');\n };\n\n const handleClosed = () => {\n emit('update:visible', false);\n };\n\n const handleCancel = (event: Event) => {\n drawerVisible = false;\n maskVisible.value = false;\n emit('cancel', event);\n };\n\n const handleVisible = () => {\n drawerVisible = true;\n };\n\n const handleClose = () => {\n drawerVisible = false;\n maskVisible.value = false;\n // 延迟异步触发\n // sleep(500).then(() => {\n // this.$emit('update:visible', false);\n // });\n // this.$emit('close', event);\n };\n\n /**\n * @todo: set footer button shortcut\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 15:25:50\n */\n const renderFooterBtn = () => {\n const footer = slots.footer?.();\n footer?.forEach((x) => {\n const tag = typeof x.type === 'object' && x.type !== null ? (x.type as any).name || '' : '';\n const text = getVNodeText(x) || '';\n if (!x.props) x.props = {};\n const propsData = x.props;\n propsData.text = text;\n if (tag)\n if (text.indexOf(t('dialogBar.save')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-baocun2';\n if (buttonQuick)\n if (text === t('dialogBar.save')) {\n propsData.text = t('dialogBar.save2');\n propsData.otext = t('dialogBar.save');\n }\n } else if (text.indexOf(t('dialogBar.confirm')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.confirm')) {\n propsData['otext'] = t('dialogBar.confirm');\n propsData.text = t('dialogBar.confirm2');\n }\n } else if (text.indexOf(t('dialogBar.affirm')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-queding';\n if (buttonQuick)\n if (text === t('dialogBar.affirm')) {\n propsData.text = t('dialogBar.affirm2');\n propsData.otext = t('dialogBar.confirm');\n }\n } else if (text.indexOf(t('dialogBar.approve')) !== -1) {\n propsData.bizType = 'approve';\n if (buttonIcon) propsData.icon = 'gv-icon-shenpi1';\n } else if (text.indexOf(t('dialogBar.reject')) !== -1) {\n propsData.bizType = 'reject';\n if (buttonIcon) propsData.icon = 'gv-icon-bohui2';\n } else if (text.indexOf(t('dialogBar.pay')) !== -1) {\n propsData.bizType = 'pay';\n if (buttonIcon) propsData.icon = 'gv-icon-yingshoukuan';\n } else if (text.indexOf(t('dialogBar.receive')) !== -1) {\n propsData.bizType = 'receive';\n if (buttonIcon) propsData.icon = 'gv-icon-piliangbianji1';\n } else if (text.indexOf(t('dialogBar.export')) !== -1) {\n propsData.bizType = 'export';\n if (buttonIcon) propsData.icon = 'gv-icon-daochu1';\n } else if (text.indexOf(t('dialogBar.generate')) !== -1) {\n propsData.bizType = 'generate';\n if (buttonIcon) propsData.icon = 'gv-icon-zujian';\n } else if (text.indexOf(t('dialogBar.trace')) !== -1) {\n propsData.bizType = 'trace';\n if (buttonIcon) propsData.icon = 'gv-icon-jiankongguanli';\n } else if (text.indexOf(t('dialogBar.publish')) !== -1) {\n propsData.bizType = 'publish';\n if (buttonIcon) propsData.icon = 'gv-icon-fabu';\n } else if (text.indexOf(t('dialogBar.transfer')) !== -1) {\n propsData.bizType = 'save';\n if (buttonIcon) propsData.icon = 'gv-icon-tiaobo';\n } else if (text.indexOf(t('dialogBar.download')) !== -1) {\n propsData.bizType = 'download';\n // if (text === t('dialogBar.download')) children[0].text = '下 载';\n if (buttonIcon) propsData.icon = 'gv-icon-xiazai';\n } else if (text.indexOf(t('dialogBar.delete')) !== -1 || text.indexOf(t('dialogBar.obsolete')) !== -1) {\n propsData.bizType = 'delete';\n if (buttonIcon) propsData.icon = 'el-icon-delete';\n if (buttonQuick) {\n if (text === t('dialogBar.obsolete')) {\n propsData.text = t('dialogBar.obsolete2');\n propsData.otext = t('dialogBar.obsolete');\n }\n if (text === t('dialogBar.delete')) {\n propsData.text = t('dialogBar.delete2');\n propsData.otext = t('dialogBar.delete');\n }\n }\n } else if (text.indexOf(t('dialogBar.submit')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-tijiao';\n if (buttonQuick)\n if (text === t('dialogBar.submit')) {\n propsData.text = t('dialogBar.submit2');\n propsData.otext = t('dialogBar.submit');\n }\n propsData['otext'] = t('dialogBar.submit');\n } else if (text.indexOf(t('dialogBar.circleCheck')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-huanjiance';\n } else if (text.indexOf(t('dialogBar.completed')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-xuanze';\n } else if (text.indexOf(t('dialogBar.settlement')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-eduguanli';\n } else if (text.indexOf(t('dialogBar.finished')) !== -1 || text.indexOf(t('dialogBar.beCompleted')) !== -1) {\n propsData.bizType = 'submit';\n if (buttonIcon) propsData.icon = 'gv-icon-wangongqueren';\n }\n });\n\n return footer;\n };\n\n /**\n * @todo: get footer button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 15:38:54\n */\n const getFooter = () => {\n let returnIcon: string | undefined = 'iconfont gv-icon-fanhui2';\n if (!buttonIcon) returnIcon = undefined;\n if (slots.footer?.())\n return (\n <div class=\"gv-drawer__footer__inner\">\n {renderFooterBtn()}\n <GvButton\n onClick={handleCancel}\n icon={returnIcon}>\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n // <el-button type='primary' onClick={this.handleConfirm}>确 定(S)</el-button>\n else\n return (\n <div class=\"gv-drawer__footer__inner\">\n <GvButton\n onClick={handleCancel}\n icon={returnIcon}>\n {t('common.goback')}\n {buttonQuick ? '(E.)' : ''}\n </GvButton>\n </div>\n );\n };\n const getMaxHeight = () => {\n drawerMaxHeight.value = document.documentElement.clientHeight - 215;\n };\n\n const setMask = () => {\n let mask: VNode | null = null;\n if (maskVisible.value)\n mask = (\n <div\n tabindex=\"0\"\n class=\"v-modal gv-dialog-drawer z-[9]\"></div>\n );\n return mask;\n };\n // @created\n\n // @mounted\n onMounted(() => {\n // 实现esc按键绑定\n // this.bindListerOnEsc();\n // fixme: v-show属性使用单独的变量,在挂载时再显示,如在data中直接定义为true,会造成抖动 2022-04-11\n if (drawerVisible) {\n show.value = true;\n sleep(200).then(() => {\n maskVisible.value = true;\n });\n }\n getMaxHeight();\n nextTick(() => {});\n });\n // @render\n return () => (\n <div class=\"gv-drawer__popup\">\n <ElDrawer\n class={prefixCls}\n ref={vref}\n modelValue={drawerVisible}\n onUpdate:modelValue={handleVisible}\n direction={props.direction}\n appendToBody={false}\n modal-append-to-body={false}\n close-on-press-escape={true}\n showClose={true}\n close-on-click-modal={false}\n modal={false}\n onClose={handleClose}\n onClosed={handleClosed}\n onOpen={handleOpen}\n size={props.size}\n style={{ height: `calc(100vh - ${sPaddingHeight}px)` }}>\n {{\n header: () => (\n <div class=\"gv-drawer__title\">\n <span>\n <GvIcon\n style={{ display: buttonIcon ? '' : 'none' }}\n iconType=\"iconfont\"\n iconName=\"gv-icon-chuangkou01\"></GvIcon>\n {props.title}\n </span>\n </div>\n ),\n default: () => (\n <div>\n <div\n class=\"gv-drawer__body__inner\"\n style={{ maxHeight: `${drawerMaxHeight.value}px !important` }}>\n {slots.default?.()}\n </div>\n </div>\n ),\n footer: () => <div class=\"gv-drawer__footer\">{getFooter()}</div>,\n }}\n </ElDrawer>\n {setMask()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-drawer__popup {\n :deep(.el-modal-drawer) {\n position: absolute !important;\n top: 1px !important;\n height: calc(100vh - 100px) !important;\n .el-drawer {\n // width: 95% !important;\n height: 98% !important;\n margin-top: 1px !important;\n\n .el-drawer__header {\n box-sizing: border-box;\n height: 30px;\n padding: 0 15px;\n margin-bottom: 1px;\n line-height: 30px;\n background-color: #e1e5ec !important;\n border-bottom: 1px solid $borderColor;\n\n .gv-drawer__title {\n //font-size: $appTextSize;\n line-height: inherit;\n\n & i {\n padding-right: 10px;\n //font-size: $textSize;\n font-weight: bolder;\n }\n }\n\n .el-drawer__close-btn {\n top: 10px;\n right: 12px;\n line-height: normal;\n\n i {\n font-size: 16px;\n font-weight: bolder;\n }\n\n &:hover i {\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-drawer__close {\n font-weight: bolder;\n }\n }\n }\n\n .el-drawer__body {\n padding: 5px 15px;\n overflow: hidden;\n\n .gv-drawer__body__inner {\n overflow: hidden auto;\n }\n\n .fullscreen-btn {\n position: absolute;\n top: 16px;\n right: 42px;\n padding: 5px;\n line-height: 1;\n cursor: pointer;\n\n &:hover {\n color: $primaryColor;\n }\n }\n\n .container {\n padding: 0 15px;\n }\n }\n\n .gv-drawer__footer {\n .gv-drawer__footer__inner {\n float: right;\n padding: 5px;\n\n .el-button i + span {\n margin-left: 5px;\n }\n }\n\n .gv-popconfirm {\n padding: 1px 0 1px 8px;\n }\n\n .el-button--default {\n margin-left: 8px;\n }\n\n width: 100%;\n border-top: 1px solid $borderColor;\n }\n }\n }\n }\n .gv-tabs {\n .gv-drawer {\n top: 10px;\n height: 93% !important;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvDrawer from './src/GvDrawer.vue';\nconst GvDrawerPlugin = {\n install(app: App): void {\n app.component(GvDrawer.name ?? 'GvDrawer', GvDrawer);\n },\n};\nexport default GvDrawerPlugin;\n\nexport { GvDrawer };\n","import { type VueTypeValidableDef, type VueTypesInterface, createTypes, toValidableType } from 'vue-types';\nimport type { CSSProperties } from 'vue';\n\ntype PropTypes = VueTypesInterface & {\n readonly style: VueTypeValidableDef<CSSProperties>;\n};\nconst newPropTypes = createTypes({\n func: undefined,\n bool: undefined,\n string: undefined,\n number: undefined,\n object: undefined,\n integer: undefined,\n}) as PropTypes;\n\nclass propTypes extends newPropTypes {\n static get style(): VueTypeValidableDef<CSSProperties> {\n return toValidableType('style', {\n type: [String, Object],\n });\n }\n}\n\nexport { propTypes };\n","/*\n * @title: pinyin-pro 汉字转拼音组件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-10-10 11:21:59\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-10-10 11:22:02\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport { pinyin } from 'pinyin-pro';\n/**\n * usePinyin 组合式函数\n * 提供常见的中文转拼音功能\n */\nexport function usePinyin() {\n /**\n * 中文转拼音(默认无音调、空格分隔)\n * @param text 中文字符串\n * @param withTone 是否带音调(默认 false)\n */\n const toPinyin = (text: string, withTone = false): string => {\n if (!text) return '';\n return pinyin(text, {\n toneType: withTone ? 'symbol' : 'none',\n type: 'string',\n multiple: false,\n });\n };\n\n /**\n * 获取拼音首字母\n * @param text 中文字符串\n */\n const getFirstLetter = (text: string): string => {\n if (!text) return '';\n return pinyin(text, {\n pattern: 'first',\n toneType: 'none',\n type: 'string',\n }).replace(/\\s+/g, '');\n };\n\n /**\n * 获取拼音数组(按字分隔)\n * @param text 中文字符串\n */\n const getPinyinArray = (text: string): string[] => {\n if (!text) return [];\n return pinyin(text, {\n toneType: 'none',\n type: 'array',\n });\n };\n\n return {\n toPinyin,\n getFirstLetter,\n getPinyinArray,\n };\n}\n","<!--\n * @title: expand menu list\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-04 12:37:50\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:26\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { usePermsStore } from '@/store/modules/perms';\n import { usePinyin } from '@@/hooks/web/usePinyin';\n import { isExternal, pathResolve, sleep } from '@@/utils';\n import { Search, Star, StarFilled } from '@element-plus/icons-vue';\n import { ElAutocomplete, ElIcon, ElTabPane, ElTabs } from 'element-plus';\n import { computed, onMounted, ref } from 'vue';\n import { useI18n } from 'vue-i18n';\n import type { RouteType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('expand-menu-list');\n\n defineOptions({\n name: 'GvMenuList', // 定义组件名称\n });\n const { t } = useI18n();\n const permStore = usePermsStore();\n const pinYin = usePinyin();\n const routes = computed(() => permStore.getServerRouters);\n\n const emit = defineEmits(['close']);\n\n const menuList = ref<RouteType[]>();\n const menuPath = ref('');\n\n const fMenusList = ref<AppRouteRecordRaw[]>([]);\n\n // ------ watch hook------\n // watchEffect();\n // // [routes, menusList],\n // // [\n // // (n, o) => {\n // // this.menusList = this.generateRoutes(this.routes.value);\n // // },\n // // (list) => {\n // // // 转换拼音\n // // if (this.supportPinyinSearch) this.addPinyinField(list);\n // // },\n // // ],\n\n // ------ methods hook ------\n /**\n * @todo: generate routes\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-15 10:46:56\n * @param {*} sidebarRoutes\n * @param {*} basePath\n * @param {*} prefixTitle\n * @param {*} prefixCode\n */\n\n const generateRouter = (serverRoutes: AppRouteRecordRaw[], basePath = '/', prefixTitle: string[] = [], prefixCode: string[] = []): RouteType[] => {\n let res: RouteType[] = [];\n for (const router of serverRoutes) {\n if (router.redirect === '/404') continue;\n if (router.meta?.hidden) continue;\n const data: RouteType = {\n path: pathResolve(basePath, router.path),\n title: [...(prefixTitle as string[])],\n pinyinTitle: pinYin.getFirstLetter([...(prefixTitle as string[])].join('')),\n code: [...prefixCode],\n };\n if (router.meta && router.meta.title) {\n const i18ntitle = router.meta.title;\n const code = router.meta.code || '';\n data.title = [...data.title, i18ntitle];\n data.pinyinTitle = pinYin.getFirstLetter(data.title.join(''));\n data.code = [...data.code, String(code)];\n if (router.redirect !== 'noredirect') res.push(data);\n else if (basePath === '/') fMenusList.value.push(router);\n }\n if (router.children) {\n const tempRoutes = generateRouter(router.children, data.path, data.title);\n if (tempRoutes.length >= 1) res = [...res, ...tempRoutes];\n }\n }\n return res;\n };\n\n const handleCloseDrawer = () => {\n emit('close');\n };\n\n /**\n * @todo: click menu item handle\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-03-09 10:56:00\n * @param {*} item\n */\n const handleSelect = (item: RouteType) => {\n // push({ path: item.path });\n // handleCloseDrawer();\n sleep(200).then(() => {\n menuPath.value = '';\n });\n };\n\n const handleSearch = (query: string, cb: any) => {\n let res: RouteType[] = [];\n if (query !== '')\n if (Array.isArray(menuList.value))\n res = menuList.value.filter((item) => {\n if (item.title.join('').indexOf(query) !== -1) return item;\n else if (item.pinyinTitle.indexOf(query.toLowerCase()) !== -1) return item;\n else if (item.path.indexOf(query) !== -1) return item;\n });\n else res = menuList.value ?? [];\n else res = menuList.value ?? [];\n cb(res);\n };\n\n /**\n * @todo: star click handle\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-10-11 10:20:33\n * @param {*} star\n * @param {*} path\n * @param {*} title\n * @param {*} menuItem\n */\n const starClickHandle = (star, path, title, menuItem) => {};\n\n // ------ mounted hook ------\n onMounted(() => {\n menuList.value = generateRouter(routes.value);\n // console.log('routes', permStore.getServerRouters);\n // console.log('menuList', menuList.value);\n });\n</script>\n<template>\n <div :class=\"prefixCls\">\n <!-- search -->\n <div class=\"search\">\n <div class=\"top\">\n <ElAutocomplete\n v-model=\"menuPath\"\n value-key=\"path\"\n :fetch-suggestions=\"handleSearch\"\n :placeholder=\"t('sideBar.menuSearch')\"\n @select=\"handleSelect\">\n <template #prefix>\n <ElIcon>\n <Search />\n </ElIcon>\n </template>\n <template v-slot=\"{ item }\">\n <span class=\"name\">{{ item.title.join(' > ') }}</span>\n </template>\n </ElAutocomplete>\n </div>\n </div>\n <!-- main -->\n <div class=\"main\">\n <ElTabs tab-position=\"right\">\n <ElTabPane\n v-for=\"item in fMenusList\"\n :key=\"item.name\"\n :label=\"item.meta?.title\"\n lazy>\n <div class=\"column-wrap\">\n <div\n v-for=\"sub in item.children\"\n :key=\"sub.name\"\n class=\"box\">\n <template v-if=\"!sub.children || sub.children.length === 0\">\n <ul class=\"leaf\">\n <li>\n <ElIcon @click.stop=\"starClickHandle(sub.meta?.star, sub.path, sub.meta?.title, sub)\">\n <component :is=\"sub.meta?.star ? StarFilled : Star\" />\n </ElIcon>\n <router-link\n v-if=\"!isExternal(sub.path)\"\n :to=\"`${item.path}/${sub.path}`\"\n @click=\"handleCloseDrawer\">\n {{ sub.meta?.title }}\n </router-link>\n <a\n v-else\n :href=\"sub.path\"\n target=\"_blank\"\n rel=\"noopener\">\n {{ sub.meta?.title }}</a\n >\n </li>\n </ul>\n </template>\n <template v-else>\n <h4>{{ sub.meta?.title }}</h4>\n <ul>\n <li\n v-for=\"x in sub.children\"\n :key=\"x.name\">\n <ElIcon @click.stop=\"starClickHandle(x.meta?.star, x.name, x.meta?.title, x)\">\n <component :is=\"x.meta?.star ? StarFilled : Star\" />\n </ElIcon>\n <router-link\n v-if=\"!isExternal(sub.path)\"\n :to=\"`${item.path}/${sub.path}/${x.path}`\"\n @click=\"handleCloseDrawer\">\n {{ x.meta?.title }}\n </router-link>\n <a\n v-else\n :href=\"sub.path\"\n target=\"_blank\"\n rel=\"noopener\">\n {{ x.meta?.title }}</a\n >\n </li>\n </ul>\n </template>\n </div>\n </div>\n </ElTabPane>\n </ElTabs>\n </div>\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-expand-menu-list';\n .#{$prefixCls} {\n position: absolute;\n width: 650px;\n height: 100%;\n left: 0px;\n background: #272b2c;\n &::after {\n top: 0;\n right: 0;\n width: 150px;\n height: 100%;\n content: '';\n background: #272b2c;\n }\n :deep(.search) {\n height: 100px;\n width: 500px;\n background: #313538;\n .top {\n padding: 30px 0 0 100px;\n i {\n color: var(--left-menu-text-color);\n }\n .el-autocomplete {\n width: 300px;\n border-bottom: 1px solid #626466;\n border-radius: 0;\n .el-input {\n .el-input__wrapper {\n background: var(--left-menu-expand-bg-color);\n box-shadow: none;\n padding-left: 30px;\n .el-input__inner {\n //font-size: $appTextSize;\n color: #fff;\n border: none;\n line-height: 40px;\n height: 40px;\n }\n }\n }\n }\n }\n }\n :deep(.main) {\n position: relative;\n height: calc(100% - 100px);\n .el-tabs {\n height: 100%;\n overflow-y: auto;\n &::-webkit-scrollbar {\n display: none;\n }\n .el-tabs__header {\n position: absolute;\n top: 0;\n right: 0;\n .el-tabs__nav-wrap {\n padding: 0;\n .el-tabs__nav-scroll {\n overflow-y: auto;\n .el-tabs__nav {\n padding-bottom: $modulePadding;\n }\n }\n .el-tabs__item {\n height: 30px;\n padding: 0 0 0 15px;\n //font-size: $textSize;\n line-height: 30px;\n color: $menuText;\n &.is-active {\n font-weight: 500;\n color: #fff;\n }\n }\n &.is-right {\n width: 151px;\n }\n &::after {\n display: none;\n }\n }\n }\n .el-tabs__content {\n background: #313538;\n margin-right: 150px;\n .el-tab-pane {\n padding-right: 20px;\n }\n .column-wrap {\n column-count: 2;\n column-gap: 0;\n .box {\n padding-bottom: 10px;\n padding-left: 30px;\n -webkit-column-break-inside: avoid;\n page-break-inside: avoid;\n break-inside: avoid;\n h4 {\n margin-bottom: 12px;\n height: 32px;\n //font-size: $textSize;\n font-weight: 500;\n line-height: 32px;\n color: $menuText;\n border-bottom: 1px solid #626466;\n }\n ul {\n padding-left: 0;\n margin-top: 8px;\n list-style: none;\n &.leaf {\n margin-top: 18px;\n }\n li {\n line-height: 26px;\n i {\n //font-size: 14px;\n cursor: pointer;\n top: 2px;\n }\n .el-icon {\n color: $menuText;\n }\n a {\n padding-left: 3px;\n //font-size: $textSize;\n color: $menuText;\n transition: all 0.3s ease;\n &:hover {\n color: var(--menuActiveText, $menuActiveText);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n</style>\n","<!--\n * @title: Expand Menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-09-02 09:39:04\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:12\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { propTypes } from '@@/utils/gv.propTypes';\n import { ElDrawer } from 'element-plus';\n import { computed, ref } from 'vue';\n\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import GvMenuList from './GvMenuList.vue';\n\n defineOptions({\n name: 'GvExpandMenu', // 定义组件名称\n });\n\n const props = defineProps({\n collapse: propTypes.bool.def(true),\n });\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('expand-menu');\n\n const { t } = useBridgeI18n();\n\n // console.log('t', t('sideBar.menuNav'));\n const visible = ref(false);\n const sideWidth = computed(() => (props.collapse ? '54px' : '200px'));\n const expandHandle = () => {\n visible.value = !visible.value;\n };\n</script>\n<template>\n <div :class=\"prefixCls\">\n <div\n class=\"expand-menu-title\"\n :class=\"{ selected: visible ? true : false }\"\n @click.stop=\"expandHandle\">\n <i :class=\"['iconfont', 'gv-icon-wangzhandaohang']\"></i>\n <span\n v-if=\"!collapse\"\n class=\"text\"\n >{{ t('sideBar.menuNav') }}</span\n >\n </div>\n <ElDrawer\n v-model=\"visible\"\n :style=\"{ left: sideWidth, paddingLeft: sideWidth }\"\n class=\"sidebar-expand-drawer\"\n :with-header=\"false\"\n :append-to-body=\"true\"\n direction=\"ltr\"\n resizable\n :modal-class=\"!collapse ? 'sidebar-expand-menu-collapse' : 'sidebar-expand-menu-unCollapse'\"\n size=\"650\">\n <GvMenuList @close=\"visible = false\" />\n </ElDrawer>\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-expand-menu';\n .#{$prefixCls} {\n height: 40px;\n background-color: $menuBg;\n\n .expand-menu-title {\n width: 100%;\n padding-left: 14px;\n line-height: 48px;\n color: $menuText;\n cursor: pointer;\n\n &.selected,\n &:hover {\n color: var(--left-menu-text-active-color);\n background-color: $menuHover;\n }\n\n i {\n width: 24px;\n font-size: 20px;\n font-weight: 500;\n color: var(--left-menu-text-color);\n text-align: center;\n vertical-align: middle;\n }\n\n .text {\n display: inline-block;\n line-height: 48px;\n margin-left: 10px;\n //font-size: $textSize;\n color: var(--left-menu-text-color);\n vertical-align: middle;\n &:hover {\n color: var(--left-menu-text-active-color);\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvExpandMenu from './src/GvExpandMenu.vue';\nconst GvExpandMenuPlugin = {\n install(app: App): void {\n app.component(GvExpandMenu.name ?? 'GvExpandMenu', GvExpandMenu);\n },\n};\nexport default GvExpandMenuPlugin;\n\nexport { GvExpandMenu };\n","<!--\n * @title: input component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-29 09:22:45\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:39\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { GvIcon } from '@@/GvIcon';\n import { ElInput, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { BizType, InputType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('input');\n\n export default defineComponent({\n name: 'GvInput',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n value: {\n type: [String, Number, undefined] as PropType<string | number | undefined>,\n default: '',\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n prefixIcon: {\n type: String,\n default: '',\n },\n suffixIcon: {\n type: String,\n default: '',\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n maxlength: {\n type: Number,\n default: 30,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n type: {\n type: String as PropType<InputType>,\n default: 'text',\n },\n rows: {\n type: Number,\n default: 2,\n },\n autosize: {\n type: [Boolean, Object] as PropType<boolean | Record<string, any>>,\n default: false,\n },\n bizType: {\n type: String as PropType<BizType>,\n default: 'tableedit',\n },\n },\n\n emits: ['update:modelValue', 'input', 'blur', 'focus', 'clear', 'keydown'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n const inputValue = ref(props.value);\n\n const showWordLimit = ref(false);\n\n // @computed\n const inputSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceholder = computed(() => props.placeholder || t('common.pleaseInput'));\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @watch\n watch(\n () => props.value,\n (newValue) => {\n inputValue.value = newValue;\n },\n );\n\n // @methods\n\n const renderPrefixIcon = (): JSX.Element | null => {\n if (!props.prefixIcon) return null;\n return <GvIcon iconName={props.prefixIcon} />;\n };\n\n const renderSuffixIcon = (): JSX.Element | null => {\n if (!props.suffixIcon) return null;\n return <GvIcon iconName={props.suffixIcon} />;\n };\n\n const getDisabled = computed(() => {\n if (typeof props.disabled === 'boolean') return props.disabled;\n if (typeof props.disabled === 'string') return props.disabled !== '';\n return false;\n });\n\n const handleInput = (val: string | number) => {\n inputValue.value = val;\n emit('update:modelValue', val);\n emit('input', val);\n };\n\n const handleBlur = (event: FocusEvent) => {\n showWordLimit.value = false;\n if (props.bizType === 'tableedit') emit('blur', event, inputValue.value, props.columnProp);\n else emit('blur', event, inputValue.value, props.vref);\n };\n\n const handleFocus = (event: FocusEvent) => {\n (event.target as HTMLInputElement).select();\n if (props.bizType === 'tableedit') emit('focus', event, inputValue.value, props.columnProp);\n else emit('focus', event, inputValue.value, props.vref);\n };\n\n const handleClear = (event: any) => {\n emit('clear', event);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n showWordLimit.value = true;\n emit('keydown', event);\n };\n\n // @render\n return () => {\n if (!props.visible) return null;\n return (\n <ElInput\n ref={props.vref}\n id={resolvedInputId.value}\n name={props.name}\n type={props.type}\n modelValue={inputValue.value}\n modelModifiers={{ number: true }}\n readonly={props.readonly}\n rows={props.rows}\n autosize={props.autosize}\n size={inputSize.value}\n showWordLimit={showWordLimit.value}\n maxlength={props.maxlength}\n placeholder={sPlaceholder.value}\n disabled={getDisabled.value}\n clearable={props.clearable}\n onInput={handleInput}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onClear={handleClear}\n onKeydown={handleKeyDown}\n class={prefixCls}\n style={{ display: props.visible ? '' : 'none' }}>\n {{\n prefix: () => renderPrefixIcon(),\n suffix: () => renderSuffixIcon(),\n }}\n </ElInput>\n );\n };\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-input';\n .#{$prefixCls} {\n display: flex;\n margin: 0;\n align-items: center;\n\n &.is-disabled {\n :deep(.el-input__inner) {\n color: $textColor;\n }\n }\n\n :deep(.el-input__inner) {\n &:focus {\n // border-color: var(--primaryColorHover, $primaryColorHover);\n }\n height: 30px;\n // padding-left: 10px;\n line-height: 30px;\n //font-size: $textSizeSecondary;\n }\n\n &.el-input--small {\n :deep(.el-input__inner) {\n height: 26px;\n line-height: 26px;\n }\n }\n\n :deep(.el-input__suffix .el-input__suffix-inner) {\n .el-input__count {\n font-size: 10px;\n padding-left: 5px;\n .el-input__count-inner {\n padding: 0;\n }\n }\n .el-input__icon {\n padding: 0;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvInput from './src/GvInput.vue';\n\nconst GvInputPlugin = {\n install(app: App): void {\n app.component(GvInput.name ?? 'GvInput', GvInput);\n },\n};\nexport default GvInputPlugin;\n\nexport { GvInput };\n","<!--\n * @title: input number component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 09:32:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 11:02:44\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useI18n } from '@/hook/web/useI18n';\n import { useStyle } from '@/hook/web/useStyle';\n import { ElInputNumber, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('input-number');\n\n export default defineComponent({\n name: 'GvInputNumber',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n value: {\n type: Number,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n min: {\n type: Number,\n default: undefined,\n },\n max: {\n type: Number,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: undefined,\n },\n step: {\n type: Number,\n default: 1,\n },\n stepStrictly: {\n type: Boolean,\n default: false,\n },\n precision: {\n type: Number,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n bizType: {\n type: String,\n default: undefined,\n },\n position: {\n type: String,\n default: undefined,\n },\n },\n // @emit\n emits: ['update:modelValue', 'input', 'blur', 'focus', 'keydown', 'change'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useI18n();\n const inputValue = ref(props.value);\n const globalSize = useGlobalConfig('size');\n // @computed\n const inputSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const sPlaceHolder = computed(() => (props.placeholder ? props.placeholder : t('common.pleaseInput')));\n const getDisabled = computed(() => props.disabled);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n const handleInput = (val) => {\n emit('update:modelValue', val, props.vref);\n emit('input', val, props.vref);\n };\n const handleBlur = ($event: FocusEvent) => {\n if (props.bizType === 'tableedit') emit('blur', $event, inputValue.value, props.columnProp);\n else emit('blur', $event, inputValue.value, props.vref);\n };\n\n const handleFocus = ($event: FocusEvent) => {\n if ($event.target) ($event.target as HTMLInputElement).select();\n\n if (props.bizType === 'tableedit') emit('focus', $event, inputValue.value, props.columnProp);\n else emit('focus', $event, inputValue.value, props.vref);\n };\n // const handleKeyDown = ($event: KeyboardEvent) => {\n // emit('keydown', $event);\n // };\n const handleChange = (currentValue: number, oldValue: number) => {\n emit('change', currentValue, oldValue);\n };\n\n // @render\n // 注意方法的传参必须使用箭头函数方式,避免每次 render 的时候都会自动执行一次方法\n return (\n // nativeOnkeydown={(e) => this.inputKeydown(e)}\n <ElInputNumber\n class={prefixCls}\n ref={props.vref || 'gv-input-number'}\n id={resolvedInputId.value}\n name={props.name}\n v-model={inputValue.value}\n style={{ display: props.visible ? '' : 'none' }}\n size={inputSize.value}\n placeholder={sPlaceHolder.value}\n disabled={getDisabled.value}\n controls-position={props.position}\n step={props.step}\n step-strictly={props.stepStrictly}\n precision={props.precision}\n min={props.min}\n max={props.max}\n // onKeydown={handleKeyDown}\n onInput={handleInput}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onChange={handleChange}\n // { ...this.$attrs }\n // { ...this.$listeners }\n ></ElInputNumber>\n );\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-input-number';\n .#{$prefixCls} {\n :deep(.el-input__inner) {\n height: 30px;\n line-height: 30px;\n\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n :deep(.el-input-number__decrease),\n :deep(.el-input-number__increase) {\n height: 28px;\n line-height: 28px;\n }\n\n :deep(.el-input-number__decrease),\n :deep(.el-input-number__increase) {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.el-input-number__increase):hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled),\n :deep(.el-input-number__decrease):hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled) {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n &.is-controls-right {\n // line-height: 34px; // 需要定义line-height,否则高度串行\n :deep(.el-input-number__decrease) {\n bottom: 1px;\n\n &:hover {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n :deep(.el-input-number__increase) {\n &:hover {\n color: var(--primaryColorHover, $primaryColorHover);\n }\n\n top: 1px;\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvInputNumber from './src/GvInputNumber.vue';\nconst GvInputNumberPlugin = {\n install(app: App): void {\n app.component(GvInputNumber.name ?? 'GvInputNumber', GvInputNumber);\n },\n};\nexport default GvInputNumberPlugin;\n\nexport { GvInputNumber };\n","<!--\n * @title: select component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-29 09:36:14\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:53:12\n * @version: 1.0.7\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useNotify } from '@/hook/web/useNotify';\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { ElOption, ElSelect, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import { useI18n } from 'vue-i18n';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('select');\n export default defineComponent({\n name: 'GvSelect',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [String, Array, Object] as PropType<string | unknown[] | Record<string, unknown>>,\n default: undefined,\n },\n value: {\n type: [String, Array, Object] as PropType<string | unknown[] | Record<string, unknown>>,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n showLabel: {\n type: [String, Array],\n default: undefined,\n },\n placeholder: {\n type: String,\n default: undefined, // 请选择\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n filterable: {\n type: Boolean,\n default: true,\n },\n dicType: {\n type: String,\n required: true,\n },\n filtercode: {\n // 过滤字典码\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: true,\n },\n dicRemote: {\n type: Function,\n default: () => {},\n },\n cb: {\n type: Function,\n default: () => {},\n },\n clear: {\n type: Function,\n default: () => {},\n },\n isreload: {\n type: Boolean,\n default: true,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n bizType: {\n type: String,\n default: undefined,\n },\n editRow: {\n type: Object,\n default: () => {},\n },\n collapseTags: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n },\n // define emit\n emits: ['update:modelValue', 'focus', 'clear', 'change'],\n setup(props, { emit }) {\n const userStore = useUserStore();\n const appStore = useAppStore();\n const { alert } = useNotify();\n const { t, locale } = useI18n();\n\n // @data\n const lang = locale.value;\n let dicIcon = 'iconfont gv-icon-shujuzidian3';\n const remote = ref(false);\n const loading = ref(false);\n const loadingText = ref('loading...');\n const sPlaceholder = computed(() => props.placeholder || t('common.all'));\n const externalValue = computed(() => (props.modelValue !== undefined ? props.modelValue : props.value));\n const inputValue = ref(externalValue.value);\n const inputShowLabel = ref(props.showLabel);\n const inputFilterable = ref(props.filterable);\n // let inputFilterable = props.filterable,\n type SelectModel = string | unknown[] | Record<string, unknown> | undefined;\n const selectValue = ref<SelectModel>(undefined);\n const options = ref<DicItem[]>([]);\n const originOptions = ref<DicItem[]>([]);\n const className = ref(`${prefixCls}`);\n const globalSize = useGlobalConfig('size');\n\n // 表选字典 t# 需在 setup 阶段识别,不能等 mounted\n const dicSrc = props.dicType?.toLowerCase() ?? '';\n if (dicSrc.startsWith('e#')) dicIcon = 'iconfont gv-icon-meiju';\n else if (dicSrc.startsWith('t#')) {\n dicIcon = 'iconfont gv-icon-24gl-table';\n remote.value = true;\n className.value = 'gv-select__table';\n }\n if (props.bizType === 'tableedit') className.value += ' tableedit';\n\n const valueCache = new Map<string, { value: string; label: string; row?: Record<string, unknown> }>();\n\n // @computed\n const selectSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @method\n\n const isEmptyLabel = (label: unknown) => label == null || label === '';\n\n const getDictItemLabel = (item: DicItem): string => {\n switch (locale.value) {\n case 'en':\n return item.e ?? item.t ?? '';\n case 'l1':\n return item.l1 ?? item.t ?? '';\n case 'l2':\n return item.l2 ?? item.t ?? '';\n default:\n return item.t ?? '';\n }\n };\n\n const formatOptionLabel = (label: string) => {\n if (!label) return '';\n return remote.value && label.includes('[') ? label.split('[')[0] : label;\n };\n\n const findLabelInOptions = (code: string, opts: DicItem[]) => {\n const item = opts.find((x) => String(x.c) === String(code));\n if (!item) return '';\n return formatOptionLabel(getDictItemLabel(item));\n };\n\n const getOptionValue = (code: string, label: string, row?: Record<string, unknown>) => {\n const key = String(code);\n const text = String(label || key);\n const cached = valueCache.get(key);\n if (cached && cached.label === text) {\n if (row) cached.row = row;\n return cached;\n }\n const obj = row ? { value: key, label: text, row } : { value: key, label: text };\n valueCache.set(key, obj);\n return obj;\n };\n\n const getSelectCode = (v: unknown) => {\n if (v == null || v === '') return '';\n if (typeof v === 'object' && !Array.isArray(v)) {\n const o = v as Record<string, unknown>;\n const code = o.value ?? o.c ?? o.code;\n return code == null || code === '' ? '' : String(code).trim();\n }\n return String(v).trim();\n };\n\n const getSelectLabel = (v: unknown) => {\n if (v == null || v === '') return '';\n if (typeof v === 'object' && !Array.isArray(v)) {\n const o = v as Record<string, unknown>;\n const label = o.label ?? o.v;\n return label == null || label === '' ? '' : String(label).trim();\n }\n return String(v).trim();\n };\n\n const isEmptySelectValue = (raw: unknown) => {\n if (raw == null || raw === '') return true;\n if (Array.isArray(raw)) {\n if (raw.length === 0) return true;\n return raw.every((item) => {\n if (item == null || item === '') return true;\n return !getSelectCode(item) && isEmptyLabel(getSelectLabel(item));\n });\n }\n if (typeof raw === 'object') return !getSelectCode(raw) && isEmptyLabel(getSelectLabel(raw));\n return false;\n };\n\n const syncEmptyToParent = () => {\n if (externalValue.value === '') return;\n emit('update:modelValue', '');\n };\n\n const elSelectModel = computed<SelectModel>(() => (isEmptySelectValue(selectValue.value) ? undefined : selectValue.value));\n\n /**\n * @todo: 远程搜索、聚焦、清空后保留当前选中项\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-04 10:52:44\n * @param {*} _opts\n */\n const mergeOptionsWithSelected = (_opts: DicItem[]) => {\n let merged = _opts ?? [];\n const append = (code: string, label: string) => {\n if (!code || merged.some((x) => x.c + '' === code)) return;\n merged = [{ c: code, t: label || code, s: '' } as DicItem, ...merged];\n };\n const sv = selectValue.value;\n if (Array.isArray(sv)) sv.forEach((item) => append(getSelectCode(item), getSelectLabel(item) || getSelectCode(item)));\n else if (sv && !isEmptySelectValue(sv)) append(getSelectCode(sv), getSelectLabel(sv) || getSelectCode(sv));\n return merged;\n };\n\n const pushDefaultOption = (op: DicItem) => {\n options.value.push(op);\n if (remote.value) originOptions.value.push({ ...op });\n };\n\n /**\n * @todo: load dict list\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:31:44\n */\n const getSelectOptions = async () => {\n if (!props.dicType) return null;\n else {\n let ret: DicItem[] = [];\n const src = props.dicType.toLowerCase();\n if (src.startsWith('e#')) {\n // const pinyin = await require('js-pinyin');\n // 生成枚举类型字典\n const arr = src.split('#')[1].split(':');\n arr.forEach((x) => {\n const xx: DicItem = {\n c: '',\n t: '',\n s: '',\n };\n const arr2 = x.split('=');\n xx['c'] = arr2[0];\n xx['t'] = arr2[1];\n xx['s'] = '';\n ret.push(xx);\n });\n return ret;\n } else {\n const dictCache = userStore.dictCache?.[src];\n if (props.filtercode === undefined && dictCache) ret = dictCache;\n else if (props.dicType === 'xzqh') {\n // 生成字典列表\n const dict = appStore.getDictDivision;\n if (dict) {\n if (props.filtercode === undefined) {\n const cache = {};\n cache['key'] = 'xzqh';\n cache['dict'] = dict;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n }\n ret = dict;\n }\n } else {\n const dict = appStore.getDict[src];\n\n if (dict) {\n // fixme: 解决字典缓存不能缓存多个问题 2022-04-13\n if (props.filtercode === undefined) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dict;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n }\n\n ret = dict;\n }\n }\n\n // 设置是否可搜索\n // this.setFilterable(ret);\n // 增加字典码过滤\n let opts = ret;\n if (props.filtercode) {\n const reg = new RegExp(props.filtercode, 'i');\n opts = ret.filter((x) => reg.test(x.c));\n }\n return opts;\n }\n }\n };\n /**\n * @todo: 设置字典项目超过5个可搜索-- 弃用\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-10 09:42:19\n * @param {*} dict\n */\n // setFilterable(dict) {\n // if (dict && dict.length > 5)\n // inputFilterable.value = true;\n // },\n // 回调参数:(value: string | number)\n // 字典自定义过滤方法\n const filterMethod = (value) => {\n if (value)\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts.filter((item) => {\n // console.log(item);\n if (\n item.c.indexOf(value) !== -1 || // value检索\n item.t?.indexOf(value) !== -1 || // label检索\n item.s.indexOf(value.toLowerCase()) !== -1 // 简拼检索\n )\n return true;\n });\n });\n else\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts;\n });\n };\n /**\n * @todo: handle clear event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:53:27\n */\n const handleClear = () => {\n if (remote.value === false)\n getSelectOptions().then((_opts: DicItem[]) => {\n options.value = _opts;\n });\n else options.value = mergeOptionsWithSelected(originOptions.value);\n\n props.clear(selectValue.value, props.vref, props.dicType);\n emit('clear');\n };\n /**\n * @todo: remote dict search method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:20:03\n * @param {*} query\n */\n const initialRemoteLoaded = ref(false);\n let pendingRemoteQuery: string | null = null;\n let pendingRemotePromise: Promise<void> | null = null;\n let remoteRequestSeq = 0;\n\n const filterOriginOptions = (query: string) =>\n originOptions.value.filter((x) => {\n if (x.t) {\n const f = x.t.split(']');\n if (f[0].indexOf(query) !== -1) return true;\n }\n if (x.c && x.c.indexOf(query) !== -1) return true;\n return false;\n });\n\n const remoteDictSearch = async (query = ''): Promise<void> => {\n if (pendingRemotePromise && pendingRemoteQuery === query) return pendingRemotePromise;\n\n const requestSeq = ++remoteRequestSeq;\n pendingRemoteQuery = query;\n\n pendingRemotePromise = (async () => {\n loading.value = true;\n try {\n const sDicType = props.dicType.substring(2);\n const { datas } = await props.dicRemote(sDicType, query, props.editRow);\n if (requestSeq !== remoteRequestSeq) return;\n\n const ops: DicItem[] = [];\n try {\n JSON.parse(datas).forEach((x: any) => {\n ops.push({ c: x.c, t: x.t, s: '' } as DicItem);\n });\n } catch (e) {\n console.log(e);\n }\n\n options.value = mergeOptionsWithSelected(ops);\n originOptions.value = [...options.value];\n initialRemoteLoaded.value = true;\n } finally {\n if (requestSeq === remoteRequestSeq) {\n loading.value = false;\n loadingText.value = options.value.length === 0 ? t('common.noData') : t('common.loading');\n }\n if (pendingRemoteQuery === query) {\n pendingRemoteQuery = null;\n pendingRemotePromise = null;\n }\n }\n })();\n\n return pendingRemotePromise;\n };\n /**\n * @todo: table dict remote load method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:11:51\n */\n const remoteMethod = async (query = ''): Promise<void> => {\n const q = String(query ?? '');\n\n if (q && originOptions.value.length > 0 && props.isreload === false) {\n const filtered = filterOriginOptions(q);\n if (filtered.length > 0) {\n options.value = mergeOptionsWithSelected(filtered);\n loading.value = false;\n return;\n }\n }\n\n const needFetch = q !== '' || props.isreload || !initialRemoteLoaded.value || originOptions.value.length === 0;\n if (!needFetch) {\n options.value = mergeOptionsWithSelected(originOptions.value);\n loading.value = false;\n return;\n }\n\n await remoteDictSearch(q);\n };\n\n const ensureDefaultOption = (code: string, text: string) => {\n if (!code) return;\n const existed = options.value.find((x) => String(x.c) === String(code));\n if (existed) {\n if (text && existed.t !== text) existed.t = text;\n return;\n }\n pushDefaultOption({ c: code, t: text || code, s: '' } as DicItem);\n };\n\n const resolveDisplayLabel = async (code: string, hint?: string): Promise<string> => {\n if (hint && hint !== code) return hint;\n const localOpts = (await getSelectOptions()) ?? [];\n let label = findLabelInOptions(code, localOpts);\n if (label) return label;\n\n label = findLabelInOptions(code, options.value);\n if (label) return label;\n\n if (remote.value && code) {\n // await remoteDictSearch(code);\n // label = findLabelInOptions(code, options.value);\n // if (label) return label;\n // await remoteDictSearch('');\n // label = findLabelInOptions(code, options.value);\n }\n\n return label || code;\n };\n\n const applySelectValue = async (raw: unknown) => {\n if (isEmptySelectValue(raw)) {\n inputValue.value = undefined as typeof inputValue.value;\n selectValue.value = undefined;\n syncEmptyToParent();\n return;\n }\n inputValue.value = raw as typeof inputValue.value;\n\n if (Array.isArray(raw)) {\n const resolved: ReturnType<typeof getOptionValue>[] = [];\n for (let index = 0; index < raw.length; index++) {\n const item = raw[index];\n if (item === '') continue;\n const code = getSelectCode(item);\n let hint = getSelectLabel(item);\n if (isEmptyLabel(hint) || hint === code) {\n const showLbl = Array.isArray(props.showLabel) ? props.showLabel[index] : undefined;\n if (showLbl && showLbl !== code) hint = String(showLbl);\n }\n const text = await resolveDisplayLabel(code, isEmptyLabel(hint) || hint === code ? undefined : hint);\n const row = typeof item === 'object' && item !== null ? ((item as Record<string, unknown>).row as Record<string, unknown>) : undefined;\n resolved.push(getOptionValue(code, text, row));\n ensureDefaultOption(code, text);\n }\n selectValue.value = resolved;\n return;\n }\n\n const code = getSelectCode(raw);\n let hint = '';\n if (typeof raw === 'object' && raw !== null) {\n const o = raw as Record<string, unknown>;\n hint = String(o.label ?? o.v ?? '');\n } else if (typeof props.showLabel === 'string') hint = props.showLabel;\n const text = await resolveDisplayLabel(code, isEmptyLabel(hint) || hint === code ? undefined : hint);\n const row = typeof raw === 'object' && raw !== null ? ((raw as Record<string, unknown>).row as Record<string, unknown>) : undefined;\n selectValue.value = getOptionValue(code, text, row);\n ensureDefaultOption(code, text);\n };\n\n watch(\n externalValue,\n (newValue) => {\n void applySelectValue(newValue);\n },\n { deep: true, immediate: true },\n );\n\n watch(\n () => props.showLabel,\n (newVal) => {\n inputShowLabel.value = newVal;\n if (!isEmptySelectValue(inputValue.value)) void applySelectValue(externalValue.value ?? inputValue.value);\n },\n );\n\n /**\n * @todo: handle focus event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 10:53:35\n * @param {*} event\n */\n const handleFocus = (event: FocusEvent) => {\n if (remote.value === false)\n getSelectOptions().then((_opts: DicItem[]) => {\n if (remote.value === false)\n if (_opts === undefined || _opts === null || _opts.length === 0) {\n alert('The dict value does not exist', 'warning');\n return false;\n }\n options.value = _opts;\n });\n emit('focus', event);\n };\n\n /**\n * @todo: handle visible change event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:25:38\n * @param {*} val\n */\n const handleVisibleChange = () => {\n // console.log(val);\n };\n\n const handleBlur = () => {\n // // add: 解决无法重新加载问题 2022-04-10\n // if (this.remote === false)\n // this.getSelectOptions().then((_opts) => {\n // this.options = _opts;\n // });\n // else\n // this.options = this.originOptions;\n };\n\n /**\n * @todo: render select option\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:37:58\n * @param {*} x\n */\n const renderSelectOption = (x: DicItem) => {\n let t = x.t;\n switch (lang) {\n case 'zh-CN':\n t = x.t;\n break;\n case 'en':\n t = x.e;\n break;\n case 'l1':\n t = x.l1;\n break;\n case 'l2':\n t = x.l2;\n break;\n default:\n t = x.t;\n break;\n }\n if (!t) t = x.t;\n return (\n <ElOption\n key={x.c + ''}\n label={t}\n value={getOptionValue(x.c + '', t ?? '')}>\n <span class=\"gv-select__option--label\">{t}</span>\n <span class=\"gv-select__option--value\">{x.c}</span>\n </ElOption>\n );\n };\n\n /**\n * @todo: render table option\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:44:34\n * @param {*} x\n */\n const renderTableOption = (x: DicItem) => {\n const t = x.t;\n let val = t;\n const columnTexts: string[] = [];\n const row: Record<string, string> = {};\n let multiColumn = false;\n if (t) {\n if (t.indexOf('[') !== -1) {\n // 多列显示\n multiColumn = true;\n const v1 = t.split('[');\n val = v1[0];\n let mm = v1[1];\n mm = mm.split(']')[0];\n const m2 = mm.split(',');\n for (let i = 0; i < m2.length; i++) {\n const m3 = m2[i];\n const m4 = m3.split(':');\n row[m4[0]] = m4[1];\n columnTexts.push(m4[1] === 'null' ? ' -- ' : m4[1]);\n }\n }\n if (t.indexOf('{') !== -1) {\n // 隐藏列\n const vv1 = t.split('{');\n if (multiColumn === false) val = vv1[0];\n let mmm = vv1[1];\n mmm = mmm.split('}')[0];\n const mm2 = mmm.split(',');\n for (let i = 0; i < mm2.length; i++) {\n const mm3 = mm2[i];\n const mm4 = mm3.split(':');\n row[mm4[0]] = mm4[1];\n }\n }\n }\n let key = x.c + '';\n if (props.multiple === true) key = x.val === undefined ? x.c + '' : String(x.val);\n return (\n <ElOption\n key={key}\n label={val}\n value={getOptionValue(x.c + '', val ?? '', row)}>\n <span class=\"gv-select__option--label\">{val}</span>\n <span class=\"gv-select__option--value\">{x.c}</span>\n {columnTexts.map((text, index) => (\n <span\n key={index}\n class=\"gv-select__option--column\">\n {text}\n </span>\n ))}\n </ElOption>\n );\n };\n\n /**\n * @todo: selected call back\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-06 11:27:07\n * @param {*} val\n */\n const handleChange = async (val: any) => {\n if (isEmptySelectValue(val)) return;\n let labels: string = '';\n const labelArr: string[] = [];\n if (props.multiple === true)\n options.value.forEach((x) => {\n if (Array.isArray(val) && val.some((ele) => ele === x.c)) labelArr.push(x.t ?? '');\n });\n else if (typeof val === 'object') labels = val.label ?? '';\n else {\n const opArr = options.value.filter((x) => {\n const v = val + '';\n return x.c + '' === v;\n });\n labels = opArr[0]?.t ?? '';\n if (labels) labels = labels.split('[')[0];\n }\n if (props.bizType === 'tableedit')\n if (props.multiple === true) {\n emit('change', val, labelArr, props.columnProp);\n await props.cb(val, props.columnProp, props.dicType, labelArr, props.editRow);\n } else {\n emit('change', val, labels, props.columnProp);\n await props.cb(val, props.columnProp, props.dicType, labels, props.editRow);\n }\n else if (props.multiple === true) {\n emit('change', val, labelArr);\n await props.cb(val, props.vref, props.dicType);\n } else {\n emit('change', val, labels);\n await props.cb(val, props.vref, props.dicType);\n }\n };\n /**\n * @todo: handle update modelValue\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 11:29:17\n * @param {*} value\n */\n const handleUpdate = (value: any): void => {\n if (isEmptySelectValue(value)) {\n inputValue.value = undefined as typeof inputValue.value;\n selectValue.value = undefined;\n emit('update:modelValue', '');\n return;\n }\n inputValue.value = value;\n selectValue.value = value;\n emit('update:modelValue', value);\n };\n\n if (props.dicType === undefined || props.dicType === null) alert(`[ ${props.label} ] - The dicType needs to be set`, 'warning');\n\n // @render\n return () => {\n const render =\n remote.value === false ? (\n <ElSelect\n ref=\"gv-select\"\n id={resolvedInputId.value}\n name={props.name}\n modelValue={elSelectModel.value}\n valueKey=\"value\"\n onUpdate:modelValue={handleUpdate}\n style={{ display: props.visible ? '' : 'none' }}\n placeholder={sPlaceholder.value}\n disabled={props.disabled}\n clearable={props.clearable}\n size={selectSize.value}\n multiple={props.multiple}\n filterable={inputFilterable.value}\n filter-method={filterMethod}\n default-first-option={true}\n collapseTags={props.collapseTags}\n onClear={handleClear}\n onFocus={handleFocus}\n onVisible-change={handleVisibleChange}\n onChange={handleChange}\n class={className.value}>\n {{\n prefix: () => <i class={dicIcon}></i>,\n default: () => options.value.map((x) => renderSelectOption(x)),\n }}\n </ElSelect>\n ) : (\n <ElSelect\n ref=\"gv-select\"\n id={resolvedInputId.value}\n name={props.name}\n modelValue={elSelectModel.value}\n valueKey=\"value\"\n onUpdate:modelValue={handleUpdate}\n style={{ display: props.visible ? '' : 'none' }}\n placeholder={sPlaceholder.value}\n disabled={props.disabled}\n clearable={props.clearable}\n size={selectSize.value}\n multiple={props.multiple}\n default-first-option={true}\n filterable={inputFilterable.value}\n remote={true}\n remote-method={remoteMethod}\n debounce={300}\n loading={loading.value}\n loading-text={loadingText.value}\n collapseTags={props.collapseTags}\n onClear={handleClear}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n class={className.value}>\n {{\n prefix: () => <i class={dicIcon}></i>,\n default: () => options.value.map((x) => renderTableOption(x)),\n }}\n </ElSelect>\n );\n return render;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-select';\n .#{$prefixCls} {\n vertical-align: middle; // fixme: 注意必须有这个参数,否则作为一行最后的列会导致串行\n :deep(.el-select__wrapper) {\n &.is-focus {\n .el-input__inner {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n .el-select__prefix {\n left: 5px !important;\n width: 15px !important;\n\n .iconfont {\n //font-size: $appTextSize;\n }\n }\n\n .el-select__placeholder {\n //font-size: $appTextSize;\n }\n }\n\n &.tableedit {\n :deep(.el-select__wrapper) {\n .el-select__input {\n padding-right: 5px !important;\n //font-size: $appTextSize;\n }\n\n .el-select__suffix {\n width: 0;\n }\n }\n }\n }\n\n .#{$gvNamespace}-select__table {\n vertical-align: middle; // fixme: 注意必须有这个参数,否则作为一行最后的列会导致串行\n :deep(.el-select__wrapper) {\n .el-select__prefix {\n left: 5px !important;\n width: 15px !important;\n\n .iconfont {\n //font-size: $appTextSize;\n }\n }\n .el-select__selection {\n //font-size: $appTextSize;\n }\n\n &.is-focus .el-select__input {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n\n &.tableedit {\n :deep(.el-select__wrapper) {\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSelect from './src/GvSelect.vue';\n// Define the install method on the GvButton component\nconst GvSelectPlugin = {\n install(app: App): void {\n app.component(GvSelect.name ?? 'GvSelect', GvSelect);\n },\n};\nexport default GvSelectPlugin;\n\nexport { GvSelect };\n","<!--\n * @title: switch component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 13:26:26\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 09:55:07\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElSwitch } from 'element-plus';\n import { defineComponent, ref, watch, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('switch');\n export default defineComponent({\n name: 'GvSwitch',\n props: {\n value: {\n type: [Boolean, Number, String] as PropType<boolean | number | string>,\n required: false,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n columnKey: {\n type: String,\n required: false,\n default: undefined,\n },\n target: {\n type: [Number, String] as PropType<number | string>,\n require: false,\n default: '100201',\n },\n },\n\n // emit\n emits: ['change'],\n setup(props, { emit }) {\n // @data\n const val = ref(props.value);\n const switchType = ref(true);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n val.value = newVal;\n switchType.value = val.value === props.target;\n },\n );\n watch(\n () => switchType.value,\n (newVal) => {\n val.value === newVal;\n },\n );\n\n // @methods\n const handleChange = (newStatus) => {\n emit('change', newStatus, val.value);\n };\n\n // @created\n switchType.value = val.value === props.target;\n\n // @render\n return () => (\n <ElSwitch\n ref=\"gv-switch\"\n v-model={switchType.value}\n key={props.columnKey}\n disabled={props.disabled}\n // active-color='#13ce66'\n // inactive-color='#ff4949'\n onChange={handleChange}\n class={prefixCls}\n />\n );\n },\n });\n</script>\n<style scoped lang=\"scss\">\n $prefixCls: '#{$gvNamespace}-switch';\n .#{$prefixCls} {\n &.is-checked {\n :deep(.el-switch__core) {\n background-color: #13ce66;\n border-color: #13ce66;\n }\n }\n\n :deep(.el-switch__core) {\n background-color: #b3aaaa;\n border-color: #b3aaaa;\n //background-color:#ff4949;\n //border-color:#ff4949;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvSwitch from './src/GvSwitch.vue';\n// Define the install method on the GvButton component\nconst GvSwitchPlugin = {\n install(app: App): void {\n app.component(GvSwitch.name ?? 'GvSwitch', GvSwitch);\n },\n};\nexport default GvSwitchPlugin;\n\nexport { GvSwitch };\n","<!--\n * @title: time picker\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 09:18:28\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 14:19:59\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useBridgeI18n } from '@@/bridge';\n import { ElTimePicker, useGlobalConfig, type ComponentSize } from 'element-plus';\n import type { DefineComponent, PropType } from 'vue';\n import { computed, defineComponent, ref, unref, watch } from 'vue';\n import type { TTimePickerEmits, TTimePickerSize, TTimePickerType } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('timepicker');\n const TimePicker = ElTimePicker as typeof ElTimePicker & DefineComponent<TTimePickerEmits>;\n\n export default defineComponent({\n name: 'GvTimePicker',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n id: {\n type: String,\n default: undefined,\n },\n modelValue: {\n type: [Date, Array, String] as PropType<TTimePickerType>,\n default: undefined,\n },\n readonly: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String as PropType<TTimePickerSize>,\n default: 'default',\n },\n isRange: {\n type: Boolean,\n default: false,\n },\n disabledHours: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n disabledMinutes: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n disabledSeconds: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n rangeSeparator: {\n type: String,\n default: '-',\n },\n format: {\n type: String,\n default: 'HH:mm',\n },\n valueFormat: {\n type: String,\n default: 'HH:mm',\n },\n placeholder: {\n type: String,\n default: '00:00',\n },\n startPlaceholder: {\n type: String,\n default: '',\n },\n endPlaceholder: {\n type: String,\n default: '',\n },\n editable: {\n type: Boolean,\n default: true,\n },\n clearable: {\n type: Boolean,\n default: true,\n },\n },\n\n emits: ['update:modelValue', 'change', 'blur', 'focus'],\n\n setup(props, { emit }) {\n // @data\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n const inputValue = ref<TTimePickerType>(props.modelValue);\n const timepickerSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.modelValue,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @method\n /**\n *@todo: 更新v-model值\n *@author: bugcao\n *@date: 2026-05-07 15:45:52\n *@version: v0.0.1\n */\n const handleUpdate = (value: TTimePickerType) => {\n inputValue.value = value;\n emit('update:modelValue', value);\n };\n /**\n *@todo: 合并禁用小时\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledHours = () => props.disabledHours;\n /**\n *@todo: 合并禁用分钟\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledMinutes = () => props.disabledMinutes;\n /**\n *@todo: 合并禁用秒\n *@author: bugcao\n *@date: 2026-05-08 09:02:30\n *@version: v0.0.1\n */\n const mergedDisabledSeconds = () => props.disabledSeconds;\n /**\n *@todo: 更新change事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:09\n *@version: v0.0.1\n */\n const handleChange = (value: TTimePickerType) => {\n emit('change', value);\n };\n /**\n *@todo: 更新blur事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:12\n *@version: v0.0.1\n */\n const handleBlur = (e: FocusEvent) => {\n emit('blur', e);\n };\n /**\n *@todo: 更新focus事件\n *@author: bugcao\n *@date: 2026-05-07 15:46:12\n *@version: v0.0.1\n */\n const handleFocus = (e: FocusEvent) => {\n emit('focus', e);\n };\n\n const resolvedInputId = computed(() => (props.id ?? props.name ?? props.vref) || undefined);\n\n // @render\n return () => (\n <TimePicker\n ref={props.vref || 'gv-timepicker'}\n id={resolvedInputId.value}\n modelValue={inputValue.value}\n onUpdate:modelValue={handleUpdate}\n name={props.name}\n readonly={props.readonly}\n disabled={props.disabled}\n editable={props.editable}\n clearable={props.clearable}\n is-range={props.isRange}\n range-separator={props.rangeSeparator}\n size={timepickerSize.value}\n placeholder={props.placeholder || t('common.selectTime')}\n start-placeholder={props.startPlaceholder || t('common.startTime')}\n end-placeholder={props.endPlaceholder || t('common.endTime')}\n format={props.format}\n value-format={props.valueFormat}\n class={prefixCls}\n disabled-hours={mergedDisabledHours}\n disabled-minutes={mergedDisabledMinutes}\n disabled-seconds={mergedDisabledSeconds}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n />\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-timepicker';\n .#{$prefixCls} {\n width: 100%;\n vertical-align: middle;\n :deep(.el-icon-time) {\n margin-left: 1px;\n }\n &.el-range-editor.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n :deep(.el-input__wrapper) {\n &:is(.is-focus) {\n box-shadow: 0 0 0 1px var(--primaryColorHover, $primaryColorHover) inset;\n }\n }\n :deep(.el-input__inner) {\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n :deep(.el-range__close-icon) {\n width: 20px;\n }\n :deep(.el-range-separator) {\n padding-right: 2px;\n padding-left: 0;\n }\n :deep(.el-range-input) {\n padding-left: 5px;\n text-align: left;\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTimePicker from './src/GvTimePicker.vue';\n\nconst GvTimePickerPlugin = {\n install(app: App): void {\n app.component(GvTimePicker.name ?? 'GvTimePicker', GvTimePicker);\n },\n};\nexport default GvTimePickerPlugin;\n\nexport { GvTimePicker };\n","/*\n * @title: info message component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:10:05\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:01:59\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nconst infoMsg = {\n carNo: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '车牌号格式错误';\n else info = 'car number format error.';\n return info;\n },\n double: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入浮点数.';\n else info = 'please enter Double.';\n return info;\n },\n decimal: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '小数点位数不能超过: ' + len + ' 位';\n else info = 'Number of decimal places can not be more than:' + len + '.';\n return info;\n },\n idCard: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '身份证格式不正确';\n else info = 'id card format is not correct.';\n return info;\n },\n maxLen: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能超过 ' + Math.floor(len / 2) + '个汉字或 ' + len + ' 个字符';\n else info = 'Can not exceed ' + len + ' character.';\n return info;\n },\n money: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '非0开头的数字 小数最多两位.';\n else info = \"Only input Numbers, 0 can't start, the decimal two at the most.\";\n return info;\n },\n moneyMax: (lang: string, len: number) => {\n let info = '';\n if (lang === 'zh-CN') info = '整数位最多只能是: ' + len + ' 位';\n else info = 'integer digits can only be at most: ' + len;\n return info;\n },\n letter: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入字母以外的字符';\n else info = \"Can't input letters outside of the characters.\";\n return info;\n },\n number: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '只能输入正整数.';\n else info = 'Only enter a positive integer.';\n return info;\n },\n number0: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '只能输入不能以0开头的正整数.';\n else info = 'Only enter a non-zero positive integer, and cannot begin with zero.';\n return info;\n },\n //Add TypeScript type annotations for lang parameter\n numberLetter: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入数字、字母以外的字符.';\n else info = 'Can not input Numbers, letters characters.';\n return info;\n },\n //Add TypeScript type annotations for lang parameter\n name: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '不能输入数字、字母、-、_和中文以外的字符.';\n else info = 'Can not enter Numbers, letters, -, _ and Chinese characters.';\n return info;\n },\n phone: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '电话号码格式不正确.';\n else info = 'Phone format is not correct.';\n return info;\n },\n email: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '邮件格式不正确.';\n else info = 'E-mail format is not correct.';\n return info;\n },\n telephone: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的固话(格式:区号+号码,如010-1234567)';\n else info = 'Telephone format is not correct.';\n return info;\n },\n ip: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的IP地址';\n else info = 'IpAddress format is not correct.';\n return info;\n },\n url: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的url地址';\n else info = 'Url format is not correct.';\n return info;\n },\n phoneTel: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入正确的电话号码或者固话号码';\n else info = 'phone & tel format is not correct.';\n return info;\n },\n vin: (lang: string) => {\n let info = '';\n if (lang === 'zh-CN') info = '请输入后8位或17位(字母大写)';\n else info = 'must be 8 or 17 letters and Numbers.';\n return info;\n },\n};\nexport default infoMsg;\n","/*\n * @title: validate rules component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:09:03\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 20:32:12\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\n/** ------------------- 验证规则 ------------------------\n * isAny: 默认规则,无校验\n * isAdmin: 验证是否是admin用户\n * isUrl: 验证url格式\n * isLowercase: 验证是否都是小写\n * isUppercase: 验证是否都是大写\n * isLetter: 验证是否都是字母( 不包括标点符号)\n * isEmail: 验证是否是email\n * isPhone: 验证电话号码\n * isIp: 验证是否是ip地址\n * isPhoneTel: 验证是否是手机号或者固定电话号\n * isTelephone: 验证是否是固定电话\n * isIdcard: 验证身份证号\n * isMoney:验证金额格式\n * isBigMoney: 验证金额格式(千位符格式)\n * isNumber: 验证是否是整数数字\n * isNumberLetter: 验证是否是数字和字母\n * isDouble: 验证浮点数格式\n * isName: 验证是否是名称格式\n * isVin: 验证vin码格式\n * isCarno: 验证车牌号(含新能源)\n ----------------------------------------------------\n*/\n\nimport infoMsg from './gv.infomsg';\n\n/**\n * @todo: 计算输入字符串的长度,汉字记为2 英文字母记为1\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-06 14:56:22\n * @param {*} val 对于多选字典,val是数组类型的字典码\n */\nconst calLength = function (val) {\n if (val === null || val.length === 0) return 0;\n let i, sum;\n sum = 0;\n // fixme: val有可能是数组,需要转化为字符串 2022-04-10\n let v = val;\n if (Array.isArray(val)) v = val.join(',');\n for (i = 0; i < v.length; i++)\n if (v.charCodeAt(i) >= 32 && v.charCodeAt(i) <= 126) sum = sum + 1;\n else sum = sum + 2;\n return sum;\n};\n\nconst vcity = {\n 11: '北京',\n 12: '天津',\n 13: '河北',\n 14: '山西',\n 15: '内蒙古',\n 21: '辽宁',\n 22: '吉林',\n 23: '黑龙江',\n 31: '上海',\n 32: '江苏',\n 33: '浙江',\n 34: '安徽',\n 35: '福建',\n 36: '江西',\n 37: '山东',\n 41: '河南',\n 42: '湖北',\n 43: '湖南',\n 44: '广东',\n 45: '广西',\n 46: '海南',\n 50: '重庆',\n 51: '四川',\n 52: '贵州',\n 53: '云南',\n 54: '西藏',\n 61: '陕西',\n 62: '甘肃',\n 63: '青海',\n 64: '宁夏',\n 65: '新疆',\n 71: '台湾',\n 81: '香港',\n 82: '澳门',\n 91: '国外',\n};\n// 校验浮点数位数\nconst checkDecimal = function (val, decimalLen) {\n let v = val + '';\n if (v && v.indexOf('.') > 0) {\n v = v.substr(v.indexOf('.') + 1, v.length);\n if (v.length <= decimalLen) return true;\n else return false;\n } else return true;\n};\n// 取身份证前两位,校验省份\nconst checkProvince = function (card) {\n const province = card.substr(0, 2);\n if (vcity[province] === undefined) return false;\n\n return true;\n};\n\n// 校验日期\nconst verifyBirthday = function (year: number, month: number, day: number, birthday: Date) {\n const now = new Date();\n const now_year = now.getFullYear();\n // 年月日是否合理\n if (birthday.getFullYear() === +year && birthday.getMonth() + 1 === +month && birthday.getDate() === +day) {\n // 判断年份的范围(3岁到100岁之间)\n const time = now_year - Number(year);\n if (time >= 3 && time <= 100) return true;\n return false;\n }\n return false;\n};\n\n// 检查生日是否正确\nconst checkBirthday = function (card) {\n const len = card.length;\n // 身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字\n if (len === 15) {\n const re_fifteen = /^(\\d{6})(\\d{2})(\\d{2})(\\d{2})(\\d{3})$/;\n const arr_data = card.match(re_fifteen);\n const year = arr_data[2];\n const month = arr_data[3];\n const day = arr_data[4];\n const birthday = new Date('19' + year + '/' + month + '/' + day);\n return verifyBirthday(Number('19' + year), month, day, birthday);\n }\n // 身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X\n if (len === 18) {\n const re_eighteen = /^(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9]|X)$/;\n const arr_data = card.match(re_eighteen);\n const year = arr_data[2];\n const month = arr_data[3];\n const day = arr_data[4];\n const birthday = new Date(year + '/' + month + '/' + day);\n return verifyBirthday(year, month, day, birthday);\n }\n return false;\n};\n// 15位转18位身份证号\nconst changeFivteenToEighteen = function (card) {\n if (card.length === 15) {\n const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n let cardTemp = 0;\n let i;\n card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);\n for (i = 0; i < 17; i++) cardTemp += card.substr(i, 1) * arrInt[i];\n\n card += arrCh[cardTemp % 11];\n return card;\n }\n return card;\n};\n\n// 校验位的检测\nconst checkParity = function (card) {\n // 15位转18位\n card = changeFivteenToEighteen(card);\n const len = card.length;\n if (len === 18) {\n const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];\n let cardTemp = 0;\n let valnum = '';\n for (let i = 0; i < 17; i++) cardTemp += card.substr(i, 1) * arrInt[i];\n\n valnum = arrCh[cardTemp % 11];\n if (valnum === card.substr(17, 1)) return true;\n\n return false;\n }\n return false;\n};\n\nconst htValidate = {\n isLength: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language, max = 30 } = rule;\n const len = calLength(value);\n if (len > max) callback(new Error(infoMsg.maxLen(language, max)));\n else callback();\n }\n },\n isDouble: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const reg = /^(-)?\\d+(\\.\\d+)?$/;\n const { language, decimal = 2 } = rule;\n if (!reg.test(value)) callback(new Error(infoMsg.double(language)));\n else if (checkDecimal(value, decimal)) callback();\n else callback(new Error(infoMsg.decimal(language, decimal)));\n }\n },\n isIdcard: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // 校验长度\n const reg = /(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/;\n if (!reg.test(value)) callback(new Error(infoMsg.idCard(language)));\n else if (checkProvince(value) === false)\n // 检查省份\n callback(new Error(infoMsg.idCard(language)));\n else if (checkBirthday(value) === false)\n // 校验生日\n callback(new Error(infoMsg.idCard(language)));\n else if (checkParity(value) === false)\n // 检验位的检测\n callback(new Error(infoMsg.idCard(language)));\n else callback();\n }\n },\n\n isCarno: (rule, value, callback) => {\n const { language } = rule;\n if (value === '' || value === undefined || value == null) return callback();\n else if (value.length === 7) {\n const pattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;\n if (!pattern.test(value)) callback(new Error(infoMsg.carNo(language)));\n else return callback();\n } else {\n const pattern2 = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DABCEFGHJK][A-HJ-NP-Z0-9][0-9]{4}$))/;\n if (!pattern2.test(value)) callback(new Error(infoMsg.carNo(language)));\n else return callback();\n }\n },\n\n isMoney: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) return callback();\n else {\n const { language, max } = rule;\n // eslint-disable-next-line no-useless-escape\n const pattern = /^[\\-\\+]?(([1-9]\\d*)|0)(\\.\\d{1,2})?$/;\n const val = value + '';\n // var rv = val.replace(/[,]/g, '');\n if (!pattern.exec(val)) callback(new Error(infoMsg.money(language)));\n else if (val.indexOf('.') > 0)\n if (val.split('.')[0].length > max - 3)\n // 校验整数位格式只能是maxLength -3\n callback(new Error(infoMsg.moneyMax(language, max - 3)));\n else return callback();\n else if (value.length > max - 3) callback(new Error(infoMsg.moneyMax(language, max - 3)));\n else return callback();\n }\n },\n\n isBigMoney: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // eslint-disable-next-line no-useless-escape\n const reg = /^[\\-\\+]?([0-9]\\d*|0|[1-9]\\d{0,2}(,\\d{3})*)(\\.\\d+)?$/;\n if (!reg.test(value)) callback(new Error(infoMsg.money(language)));\n else callback();\n }\n },\n\n isLetter: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^[A-Za-z]+$/;\n if (!reg.test(value)) callback(new Error(infoMsg.letter(language)));\n else callback();\n }\n },\n\n isNumber: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^\\+?[0-9][0-9]*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.number(language)));\n else callback();\n }\n },\n\n isNumber0: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^\\+?[1-9][0-9]*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.number0(language)));\n else callback();\n }\n },\n\n isNumberLetter: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^([a-z]|[A-Z]|[ ]|[(]|[)]|[-]|[_]|[*]|[.]|[,]|[,]|[0-9]){0,200}$/;\n if (!reg.test(value)) callback(new Error(infoMsg.numberLetter(language)));\n else callback();\n }\n },\n\n isName: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^[a-zA-Z0-9-_. \\u4E00-\\u9FA5]{0,60}$/;\n if (!reg.test(value)) callback(new Error(infoMsg.name(language)));\n else callback();\n }\n },\n\n isPhone: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const reg = /^1([38][0-9]|4[014-9]|[59][0-35-9]|6[2567]|7[0-8])\\d{8}$/;\n if (!reg.test(value)) {\n const { language = 'zh-CN' } = rule;\n callback(new Error(infoMsg.phone(language)));\n } else callback();\n }\n },\n\n isEmail: (rule, value, callback) => {\n // eslint-disable-next-line no-useless-escape\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n // eslint-disable-next-line no-useless-escape\n const reg = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n if (!reg.test(value)) callback(new Error(infoMsg.email(language)));\n else callback();\n }\n },\n\n isTelephone: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /0\\d{2}-\\d{7,8}/;\n if (!reg.test(value)) callback(new Error(infoMsg.telephone(language)));\n else callback();\n }\n },\n\n isPhoneTel: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^((0\\d{2,3}-\\d{7,8})|(1([38][0-9]|4[014-9]|[59][0-35-9]|6[2567]|7[0-8])\\d{8}))$/;\n if (!reg.test(value)) callback(new Error(infoMsg.phoneTel(language)));\n else callback();\n }\n },\n\n isIp: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg = /^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/;\n if (!reg.test(value)) callback(new Error(infoMsg.ip(language)));\n else callback();\n }\n },\n\n isUrl: (rule, value, callback) => {\n if (value === '' || value === undefined || value == null) callback();\n else {\n const { language } = rule;\n const reg =\n /^(https?|ftp):\\/\\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+\\.?(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\\/($|[a-zA-Z0-9.,?'\\\\+&%$#=~_-]+))*$/;\n if (!reg.test(value)) callback(new Error(infoMsg.url(language)));\n else callback();\n }\n },\n\n isVin: (rule, value, callback) => {\n const { language } = rule;\n const reg = /^[A-Z0-9]+$/;\n if (value === '' || value === undefined || value == null) callback();\n else if (value.length !== 8 && value.length !== 17) callback(new Error(infoMsg.vin(language)));\n else if (!reg.test(value)) callback(new Error(infoMsg.vin(language)));\n else callback();\n },\n};\n\nexport default htValidate;\n","<!--\n * @title: form component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 16:01:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:58:32\n * @version: 1.1.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { useBridgeI18n } from '@@/bridge';\n import { GvCascader } from '@@/GvCascader';\n import { GvDatePicker } from '@@/GvDatePicker';\n import { GvDivider } from '@@/GvDivider';\n import { GvInput } from '@@/GvInput';\n import { GvInputNumber } from '@@/GvInputNumber';\n import { GvSelect } from '@@/GvSelect';\n import { GvSwitch } from '@@/GvSwitch';\n import { GvTimePicker } from '@@/GvTimePicker';\n import { addClass, dateFormatConfig, hasScrollbar, removeClass, sleep, toHump } from '@@/utils';\n import gvValidate from '@@/utils/gv.validate';\n import { ElCol, ElForm, ElFormItem, ElInput, ElRadio, ElRadioButton, ElRadioGroup, ElRow, ElTooltip, useGlobalConfig, type ComponentSize, type FormInstance, type FormItemRule } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, nextTick, onMounted, provide, ref, Transition, unref, watch, type PropType, type VNode } from 'vue';\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('form');\n\n export default defineComponent({\n name: 'GvForm',\n props: {\n refForm: {\n type: String,\n required: true,\n },\n divider: {\n type: String,\n required: false,\n default: undefined,\n },\n isDivider: {\n type: Boolean,\n required: false,\n default: true,\n },\n formList: {\n type: Array as PropType<FormItem[]>,\n required: true,\n default: () => [],\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: undefined,\n },\n labelWidth: {\n type: [Number, String] as PropType<number | string>,\n default: 100,\n },\n formStyle: {\n // 响应式布局 使用该参数定义width\n type: [Object],\n required: false,\n default: () => {},\n },\n scroller: {\n // 是否带有滚动条\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots, expose }) {\n const searchFieldsCollapsed = ref(true); // 查询 form 默认折叠超出行数字段\n // @provide\n provide('refForm', props.refForm);\n provide('formList', props.formList);\n provide('searchFieldsCollapsed', searchFieldsCollapsed);\n\n // @data\n const appStore = useAppStore();\n const userStore = useUserStore();\n const { t } = useBridgeI18n();\n\n const originFormList = ref([]);\n const instance = getCurrentInstance ? getCurrentInstance() : ({ parent: null } as any);\n\n const formRefs = ref<Record<string, FormInstance | null>>({}); // 表单实例引用,默认空对象\n const formElRef = ref<FormInstance | null>(null); // ElForm 元素引用\n\n const setFormRef = (el: FormInstance | null) => {\n formElRef.value = el;\n if (el && props.refForm) formRefs.value[props.refForm] = el;\n };\n const globalSize = useGlobalConfig('size');\n const rootNodeStyle = ref({}); // form组件根节点div样式\n const isShow = ref(true); // form表单show状态,默认显示\n const rules = ref({}); // 表单校验规则,默认空对象\n const isEditContainer = ref(false); // 是否是editContainer标签内,默认false\n const sMaxHeight = ref(0); // 表单最大高度,默认0\n const isScrollbar = ref(false); // 是否dialog中有滚动条\n const isAnchor = ref(false); // 是否锚点中列表\n const model = ref({}); // 表单数据,默认空对象\n const isDialog = ref(false); // 是否是dialog中form表单,默认false\n const colSpanNums = ref(0); // 根据form宽度或屏幕宽度计算显示列数,默认0\n const formType = ref('s'); // form类型:查询form:s、表单form:e\n const styles = ref({}); // form表单style样式,默认空对象\n\n // @computed\n const formSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n const labelPosition = computed(() => appStore.labelPosition); // 表单label位置\n const searchDivider = computed(() => appStore.searchDivider); // search divider show,default: true\n const dict = computed<DicItems>(() => appStore.getDict); // 字典数据\n const dictCache = computed(() => userStore.dictCache); // 字典缓存\n\n // @exposed\n expose({\n originFormList,\n setFormRef,\n });\n // method\n const getLanguage = (lang: string, x: any) => {\n let v = '';\n switch (lang) {\n case 'zh-CN':\n v = x.t;\n break;\n case 'en':\n v = x.e;\n break;\n case 'l1':\n v = x.l1;\n break;\n case 'l2':\n v = x.l2;\n break;\n default:\n v = x.t;\n break;\n }\n if (!v) v = x.t;\n return v;\n };\n /**\n * @todo: set divider show status\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 18:12:34\n * @param {*} show\n */\n const setDividerShow = (show: boolean) => {\n isShow.value = show;\n };\n\n const getEditBar = computed(() => {\n if (slots.editbar?.())\n return (\n <ElRow\n ref-form={props.refForm}\n class=\"gv-form-editbar\">\n {slots.editbar?.()}\n </ElRow>\n );\n else return null;\n });\n\n const getDivider = computed(() => {\n let dividerRender: VNode | null = null;\n if (searchDivider.value !== false) {\n let dividerTitle: string;\n if (props.divider) dividerTitle = props.divider;\n else dividerTitle = t('common.dividerTitle');\n if (props.isDivider)\n dividerRender = (\n <GvDivider\n label={dividerTitle}\n target={props.refForm}\n visible={isShow.value}\n onSetDividerShow={setDividerShow}\n />\n );\n }\n\n return dividerRender;\n });\n\n /**\n * @todo: get dic item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 18:13:06\n * @param {*} src\n */\n const getDictItems = (src: string): DicItem[] => {\n let ret = [] as DicItem[];\n const dictCacheTmp: DicItem[] | undefined = dictCache.value?.[src];\n if (dictCacheTmp) ret = dictCacheTmp;\n else {\n // 生成字典列表\n const dictTmp: DicItem[] | undefined = dict.value[src];\n if (dictTmp) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dictTmp;\n userStore.addDictCache(cache as { key: string; dict: DicItem[] });\n\n ret = dictTmp;\n }\n }\n return ret;\n };\n /**\n * @todo: generate form item rules\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 20:31:59\n * @param {*} _item\n */\n const getItemRules = (_item: FormItem): FormItemRule[] => {\n const rules: FormItemRule[] = [];\n const format: FormItemFormat | undefined = _item.format;\n // 富文本不校验\n if (_item.type === 'richtext') return rules;\n if (!format) return rules;\n // ========== 必填校验 ==========\n const requiredFlag = Number(format[0]);\n if (requiredFlag === 1 && !_item.hidden)\n rules.push({\n required: true,\n message: `${t('common.pleaseInput')} ${_item.label ?? ''}`,\n trigger: 'blur',\n });\n // ========== 自定义校验 ==========\n let validateKey = 'isAny';\n if (format[1]) validateKey = toHump(String(format[1]));\n const maxLen = Number(format[2] ?? 30);\n const decimal = format.length >= 4 ? Number(format[3] ?? 0) : 0;\n const validator = gvValidate[validateKey as keyof typeof gvValidate];\n if (validator && validateKey !== 'isAny')\n rules.push({\n validator: validator,\n trigger: ['change', 'blur'],\n // Element Plus 透传参数(自定义字段)\n language: userStore.language,\n max: maxLen,\n decimal,\n } as FormItemRule);\n // ========== 长度校验 ==========\n const excluded = ['isDate', 'isDateTime', 'isTime', 'isDic'];\n if (format[2] && !excluded.includes(validateKey))\n rules.push({\n language: userStore.language,\n max: maxLen,\n validator: gvValidate['isLength'],\n trigger: ['change', 'blur'],\n } as FormItemRule);\n return rules;\n };\n const handleRadioInput = (event: any, field: string, val, formVal, disabled) => {\n if (disabled) return;\n if (val === formVal) {\n event.preventDefault();\n model.value[field] = '';\n }\n };\n const handleDateRange2Focus = (vm: any) => {\n sleep(100).then(() => {\n addClass(vm.$el.closest('.gv-daterange__single'), 'is-active');\n });\n };\n const handleDateRange2Blur = (vm: any) => {\n removeClass(vm.$el.closest('.gv-daterange__single'), 'is-active');\n };\n\n /**\n * @todo: 日期范围选择,单独选择开始日期、结束日期选择回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 19:49:03\n * @param {*} type\n * @param {*} val\n * @param {*} field\n */\n const handleDateRange2Change = (type: string, val: string | Date, field: string): void => {\n // 校验开始日期和结束日期大小\n if (type === 's')\n if (val && model.value[field + '-end']) {\n const endTime = new Date(model.value[field + '-end'] as string).getTime();\n const startTime = new Date(val).getTime();\n if (startTime >= endTime) {\n model.value[field + '-end'] = '';\n model.value[1] = 'null';\n }\n }\n\n if (type === 'e')\n if (val && model.value[field + '-start']) {\n const startTime = new Date(model.value[field + '-start'] as string).getTime();\n const endTime = new Date(val).getTime();\n if (startTime >= endTime) {\n model.value[field + '-start'] = '';\n // console.log(this.model);\n model.value[1] = 'null';\n }\n }\n\n if (!field) return;\n const datePicker = model.value[field];\n let dateArr = new Array(2);\n if (Array.isArray(datePicker)) {\n if (type === 's') datePicker[0] = val;\n else datePicker[1] = val;\n if (!datePicker[0]) datePicker[0] = 'null';\n if (!datePicker[1]) datePicker[1] = 'null';\n model.value[field] = datePicker.join(',');\n } else {\n if (datePicker && typeof datePicker === 'string') dateArr = datePicker.split(',');\n dateArr[0] = model.value[field + '-start'];\n dateArr[1] = model.value[field + '-end'];\n if (!dateArr[0]) dateArr[0] = 'null';\n if (!dateArr[1]) dateArr[1] = 'null';\n model.value[field] = dateArr.join(',');\n }\n };\n /**\n * @todo: switch框字典change回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-12-21 16:47:22\n * @param {*} val\n * @param {*} field\n * @param {*} dicType\n * @param {*} cb\n */\n const handleSwitchDictChange = async (val, field, dicType, cb) => {\n switch (dicType) {\n case 'yxzt':\n if (val === true) model.value[field] = '100201';\n else model.value[field] = '100202';\n break;\n case 'sf':\n if (val === true) model.value[field] = '100101';\n else model.value[field] = '100102';\n break;\n }\n if (cb)\n try {\n await cb(val, field, dicType);\n } catch (error) {\n console.log(error);\n }\n };\n /**\n * @todo: radio框字典change回调方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-22 15:50:15\n * @param {*} val\n * @param {*} field\n * @param {*} dicType\n * @param {*} cb\n */\n const handleRadioDictChange = async (val, field, dicType: string | undefined, cb: Fn | undefined) => {\n if (cb)\n try {\n await cb(val, field, dicType);\n } catch (error) {\n console.log(error);\n }\n };\n /**\n * @todo: 查询 form 列默认折叠 class(渲染时绑定,避免重渲染丢失)\n */\n const getSearchColClass = (index: number) => {\n if (formType.value !== 's' || !searchFieldsCollapsed.value) return undefined;\n const slot = slots.default?.()?.[0];\n const slotProps = slot?.props as Recordable | undefined;\n if (slotProps?.expand === false) return undefined;\n const showDefaultRow = appStore.searchFormRows === 1 ? 4 : 8;\n if (index >= showDefaultRow - 1) return 'gv-form-col--hidden';\n return undefined;\n };\n\n /**\n * @todo: render form item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-04-28 17:54:23\n * @param {*} _item\n * @param {*} _index\n */\n const renderFormItem = (_item: FormItem, _index: number): VNode => {\n const {\n type = 'text',\n label,\n field,\n hidden = false,\n disabled,\n format = [],\n placeholder,\n readonly = false,\n dateType = 'date',\n dicType,\n filtercode,\n colspan = 1,\n disabledDateFunc,\n disabledDate,\n editable = true,\n multiple = false,\n showLabel,\n size = formSize.value,\n visible = true,\n // offset,\n createRow = false, // 是否创建新row,\n dicRemote,\n cb, // 回调方法\n clear, // 清空回调\n rows, // textarea\n autosize, // textarea\n min, // input-number\n max, // input-number\n step, // input-number\n precision, // input-number\n blur = () => {},\n suffixIcon, // 后缀icon\n prefixIcon, // 前缀icon\n focus = () => {},\n change = () => {},\n defaultTime, // 时间的默认能够选择的时间\n isreload = true, // 表选字典是否重新加载\n options = [],\n lazy = false, // cascader是否懒加载\n lazyLoad = () => {}, // cascader懒加载方法\n render, // 自定义form样式\n } = _item;\n let renders;\n const isHidden = hidden === true;\n const maxLen = format[2] || 30;\n let cType = type;\n // const dateFormatConfig = dateFormatConfig;\n const validateRule = toHump(String(format[1] || ''));\n let sDateType = dateType;\n let isRange = false;\n let dateFormat = dateFormatConfig.date.valueFormat; // 日期显示格式\n let valueFormat = dateFormatConfig.date.valueFormat; // 日期绑定值格式\n if (sDateType !== 'daterange' && sDateType !== 'datetimerange' && sDateType !== 'daterange2' && sDateType !== 'datetimerange2') {\n if (validateRule === 'isDate') cType = 'date';\n if (validateRule === 'isDateTime') {\n cType = 'datetime';\n sDateType = 'datetime';\n }\n if (validateRule === 'isTime') cType = 'time';\n }\n\n if (sDateType === 'timerange') isRange = true;\n\n let ph = placeholder;\n let startPh = t('common.startDate');\n let endPh = t('common.endDate');\n // todo: 响应式布局计算\n // const cols = { span: colspan, offset: (_index) * 6 };\n let cols = colspan > 4 ? 4 : colspan; // fixme: 最大值不能超过4 2022-04-07\n if (sDateType === 'datetimerange' || sDateType === 'datetimerange2') cols = 2;\n // update: 对于多选字典,默认占用列数为2列 2023-02-18\n if (multiple === true && colspan === undefined) cols = 2;\n let rangeSeparator;\n if (sDateType === 'timerange' || sDateType === 'daterange2' || sDateType === 'datetimerange2') rangeSeparator = t('common.until');\n const colSpanXs = 24;\n let colSpanSm = 12;\n let colSpanMd = 8;\n\n let colSpanLg = 6;\n if (isDialog.value === true) colSpanLg = 8;\n let colSpanXl = 4;\n if (isDialog.value === true) colSpanXl = 6;\n if (colSpanNums.value !== 0) {\n if (colSpanNums.value === 12) cols = colspan > 2 ? 2 : colspan;\n if (colSpanNums.value === 8) cols = colspan > 3 ? 3 : colspan;\n if (colSpanNums.value === 6 || colSpanNums.value === 4) cols = colspan > 4 ? 4 : colspan;\n colSpanSm = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanMd = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanLg = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n colSpanXl = cols * colSpanNums.value > 24 ? 24 : cols * colSpanNums.value;\n } else {\n colSpanSm = cols * colSpanSm > 24 ? 24 : cols * colSpanSm;\n colSpanMd = cols * colSpanMd > 24 ? 24 : cols * colSpanMd;\n colSpanLg = cols * colSpanLg > 24 ? 24 : cols * colSpanLg;\n colSpanXl = cols * colSpanXl > 24 ? 24 : cols * colSpanXl;\n }\n let decimal = 2;\n let v = '';\n if (!ph)\n switch (validateRule) {\n case 'isMoney':\n ph = '0.00';\n break;\n case 'isBigMoney':\n ph = '0,000.00';\n break;\n case 'isEmail':\n ph = 'xx@xx.com';\n break;\n case 'isDouble':\n if (format.length >= 4) decimal = format[3] || 2;\n while (decimal > 0) {\n v = '0' + v;\n decimal--;\n }\n ph = '00.' + v;\n break;\n case 'isDate':\n if (sDateType === 'week') {\n ph = t('common.selectWeek'); // dateFormatConfig.week.placeholder;\n dateFormat = dateFormatConfig.week.dateFormat;\n } else if (sDateType === 'month' || sDateType === 'monthrange') {\n ph = t('common.selectMonth'); // dateFormatConfig.month.placeholder;\n startPh = ph;\n endPh = ph;\n dateFormat = dateFormatConfig.month.dateFormat;\n valueFormat = dateFormatConfig.month.valueFormat;\n } else if (sDateType === 'year') {\n ph = t('common.selectYear'); // dateFormatConfig.year.placeholder\n dateFormat = dateFormatConfig.year.dateFormat;\n valueFormat = dateFormatConfig.year.valueFormat;\n } else if (sDateType === 'daterange' || sDateType === 'daterange2') ph = t('common.selectDate');\n break;\n case 'isDateTime':\n if (sDateType === 'datetimerange' || sDateType === 'datetimerange2') {\n startPh = t('common.startTime');\n endPh = t('common.endTime');\n }\n ph = t('common.selectTime'); // dateFormatConfig.datetime.placeholder;\n dateFormat = dateFormatConfig.datetime.dateFormat;\n valueFormat = dateFormatConfig.datetime.valueFormat;\n break;\n }\n let editables = editable;\n // 如果是带有禁用日期的,不可编辑,防止输入不一致问题\n if (disabledDateFunc || disabledDate) editables = false;\n let ops;\n let isTableDic = false;\n if (type === 'dic')\n if (dicType) {\n ops = getDictItems(dicType);\n if (dicType.indexOf('t#') >= 0) isTableDic = true;\n }\n\n // 设置label是否显示\n let sLabel = label;\n if (formType.value === 's') {\n sLabel = appStore.searchFormLabel === true ? label : undefined;\n if (appStore.searchFormLabel !== true) ph = label;\n }\n\n const switchDefaultVal = ref('');\n const searchColClass = getSearchColClass(_index);\n switch (cType) {\n case 'blank':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n prop={field}\n key={field}>\n <div class=\"el-input__inner gv-form__item__inner-blank\"> </div>\n </ElFormItem>\n </ElCol>\n );\n break;\n case 'divider':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={24}\n sm={24}\n md={24}\n lg={24}\n xl={24}>\n <GvDivider label={sLabel} />\n </ElCol>\n );\n break;\n case 'render':\n renders = (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n {render?.(model.value[field], field)}\n </ElFormItem>\n </ElCol>\n );\n break;\n case 'text':\n renders = visible ? (\n // span={this.colSpan} {span:16,offset:4}\n // xs={24} sm={12} md={8} lg={6} xl={4}\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInput\n type=\"text\"\n vref={field}\n name={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n maxlength={maxLen}\n size={size as ComponentSize}\n placeholder={ph}\n visible={visible}\n readonly={readonly}\n onBlur={blur}\n onFocus={focus}\n suffixIcon={suffixIcon}\n prefixIcon={prefixIcon}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'textarea':\n renders = visible ? (\n // span={this.colSpan} {span:16,offset:4}\n // xs={24} sm={12} md={8} lg={6} xl={4}\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInput\n vref={field}\n name={field}\n type=\"textarea\"\n v-model={model.value[field]}\n value={model.value[field]}\n size={size as ComponentSize}\n disabled={disabled}\n maxlength={maxLen}\n placeholder={ph}\n visible={visible}\n readonly={readonly}\n rows={rows}\n autosize={autosize}\n onBlur={blur}\n onFocus={focus}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'time':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvTimePicker\n v-model={model.value[field]}\n vref={field}\n name={field}\n disabled={disabled}\n editable={editables}\n placeholder={ph}\n isRange={isRange}\n rangeSeparator={rangeSeparator}\n // format={dateFormat}\n // value-format={valueFormat}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'date':\n case 'datetime':\n if (sDateType !== 'daterange2' && sDateType !== 'datetimerange2')\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <GvDatePicker\n v-model={model.value[field]}\n modelValue={model.value[field]}\n vref={field}\n data-name={field}\n data-align={'right'}\n type={sDateType}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={disabledDate}\n editable={editables}\n placeholder={ph}\n default-time={defaultTime}\n startPlaceholder={startPh}\n endPlaceholder={endPh}\n data-visible={visible}\n onChange={change}\n />\n </ElFormItem>\n </ElCol>\n ) : null;\n else\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <div\n class=\"gv-daterange__single\"\n style=\"width: 100%;\"\n onFocus={() => void 0}>\n <GvDatePicker\n v-model={model.value[field + '-start']}\n modelValue={model.value[field + '-start']}\n vref={field + '-start'}\n data-name={field + '-start'}\n data-align={'right'}\n type={sDateType === 'daterange2' ? 'date' : 'datetime'}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={disabledDate}\n editable={editables}\n placeholder={startPh}\n default-time={defaultTime}\n data-visible={visible}\n style={{ width: '96% !important' }}\n class=\"gv-datepicker-range-start\"\n onChange={(val) => handleDateRange2Change('s', val, field)}\n onFocus={(vm) => handleDateRange2Focus(vm)}\n onBlur={(vm) => handleDateRange2Blur(vm)}\n />\n <span class=\"gv-daterange__single-separator\">{rangeSeparator}</span>\n <GvDatePicker\n v-model={model.value[field + '-end']}\n modelValue={model.value[field + '-end'] as string}\n vref={field + '-end'}\n data-name={field + '-end'}\n data-align={'right'}\n type={sDateType === 'daterange2' ? 'date' : 'datetime'}\n format={dateFormat}\n value-format={valueFormat}\n disabled={disabled}\n disabledDateFunc={disabledDateFunc}\n disabledDate={(date) => {\n if (sDateType === 'daterange2') return date.getTime() <= new Date(model.value[field + '-start']).getTime() - 8.64e7;\n else return date.getTime() <= new Date(model.value[field + '-start']).getTime() - 8.64e7;\n }}\n editable={editables}\n placeholder={endPh}\n default-time={defaultTime}\n data-visible={visible}\n class=\"gv-datepicker-range-end\"\n onChange={(val) => handleDateRange2Change('e', val, field)}\n onFocus={(vm) => handleDateRange2Focus(vm)}\n onBlur={(vm) => handleDateRange2Blur(vm)}\n />\n </div>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'dic':\n switch (dicType) {\n case 'yxzt':\n if (typeof model.value[field] === 'object') switchDefaultVal.value = model.value[field].value ? model.value[field].value : '100201';\n else switchDefaultVal.value = model.value[field] ? model.value[field] : '100201';\n break;\n case 'sf':\n if (typeof model.value[field] === 'object') switchDefaultVal.value = model.value[field].value ? model.value[field].value : '100101';\n else switchDefaultVal.value = model.value[field] ? model.value[field] : '100101';\n break;\n }\n if (isTableDic === false && multiple === false && formType.value === 'e' && ops && ops.length === 2 && (dicType === 'sf' || dicType === 'yxzt'))\n // 当是编辑form并且字典内容只有2个以内时\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <GvSwitch\n value={switchDefaultVal.value}\n columnKey={field}\n disabled={disabled}\n target={dicType === 'yxzt' ? '100201' : '100101'}\n onChange={(val) => handleSwitchDictChange(val, field, dicType, cb)}></GvSwitch>\n </ElFormItem>\n </ElCol>\n ) : null;\n else if (isTableDic === false && multiple === false && formType.value === 'e' && ops && ops.length === 2)\n // 当是编辑form并且字典内容只有2个以内时\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElInput\n id={`${field}__a11y-anchor`}\n modelValue=\"\"\n readonly\n validateEvent={false}\n tabindex={-1}\n aria-hidden={true}\n style={{\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: 0,\n border: 0,\n clip: 'rect(0, 0, 0, 0)',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n }}\n />\n <ElRadioGroup\n aria-label={sLabel}\n name={field}\n v-model={model.value[field].value}\n onChange={(val) => handleRadioDictChange(val, field, dicType, cb)}>\n {ops.map((x) =>\n format[0] === 0 ? (\n <ElRadio\n value={x.c}\n disabled={disabled}\n onChange={(event) => handleRadioInput(event, field, x.c, model.value[field], disabled)}>\n {getLanguage(userStore.language, x)}\n </ElRadio>\n ) : (\n <ElRadioButton\n value={x.c}\n disabled={disabled}>\n {getLanguage(userStore.language, x)}\n </ElRadioButton>\n ),\n )}\n </ElRadioGroup>\n </ElFormItem>\n </ElCol>\n ) : null;\n else {\n // form dic\n let v: string | undefined;\n const vv = model.value[field];\n if (typeof vv === 'object')\n if (Array.isArray(vv))\n vv.forEach((x, index) => {\n if (x)\n if (v)\n if (x.label) v += ',' + x.label;\n else v += ',' + (showLabel?.[index] ? showLabel[index] : x);\n else if (x.label) v = x.label;\n else v = showLabel?.[index] ?? x;\n });\n else {\n if (vv) v = vv.label;\n }\n else v = vv;\n let toolText = v; // 提示的文本\n if (showLabel) toolText = showLabel as string;\n\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!v}\n content={toolText ? toolText + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvSelect\n v-model={model.value[field]}\n value={model.value[field]}\n label={label}\n showLabel={showLabel}\n vref={field}\n multiple={multiple}\n dicType={dicType ?? ''}\n size={size as ComponentSize}\n disabled={disabled}\n placeholder={ph}\n filtercode={filtercode}\n visible={visible}\n dicRemote={typeof dicRemote === 'function' ? dicRemote : undefined}\n cb={cb}\n clear={clear}\n isreload={isreload}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n }\n\n break;\n case 'number':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvInputNumber\n vref={field}\n name={field}\n id={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n placeholder={ph}\n visible={visible}\n size={size as ComponentSize}\n min={min}\n max={max}\n step={step}\n precision={precision}\n onBlur={blur}\n onFocus={focus}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n case 'layer':\n renders = visible ? (\n <ElCol\n key={_index}\n class={searchColClass}\n style={{ display: isHidden ? 'none' : '' }}\n xs={colSpanXs}\n sm={colSpanSm}\n md={colSpanMd}\n lg={colSpanLg}\n xl={colSpanXl}>\n <ElFormItem\n label={sLabel}\n prop={field}\n key={field}>\n <ElTooltip\n disabled={!model.value[field]}\n content={model.value[field] ? model.value[field] + '' : '--'}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <GvCascader\n vref={field}\n v-model={model.value[field]}\n value={model.value[field]}\n disabled={disabled}\n placeholder={ph}\n size={size as ComponentSize}\n lazy={lazy}\n multiple={multiple}\n lazyLoad={lazyLoad}\n visible={visible}\n options={options}\n onBlur={blur}\n onChange={change}\n />\n </ElTooltip>\n </ElFormItem>\n </ElCol>\n ) : null;\n break;\n default:\n break;\n }\n if (createRow === true) return <el-row>{renders}</el-row>;\n else return renders;\n };\n\n const getItems = computed(() => {\n const res: VNode[] = [];\n props.formList.forEach((item: FormItem, index: number) => {\n res.push(renderFormItem(item, index));\n });\n return res;\n });\n\n // todo: 计算最大高度 需要增加弹出框判断逻辑,\n const getMaxHeight = (sRootEl: HTMLElement | undefined) => {\n if (isEditContainer.value) sMaxHeight.value = 0;\n else if (props.scroller === false) sMaxHeight.value = 0;\n else if (!isScrollbar.value)\n if (!isAnchor.value) {\n if (sRootEl && typeof sRootEl.closest === 'function') {\n const tabPane = sRootEl?.closest('.el-tabs') as HTMLElement | undefined;\n if (tabPane) {\n const offsetTop = tabPane.classList.contains('el-tabs--left') ? 215 : 275;\n sMaxHeight.value = document.documentElement.clientHeight - (sRootEl?.offsetTop || 0) - (tabPane?.offsetTop || 0) - offsetTop;\n } else {\n const dialog = sRootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = sRootEl?.closest('.gv-drawer');\n if (!drawer) sMaxHeight.value = document.documentElement.clientHeight - sRootEl.offsetTop - 75;\n // console.log(this.sMaxHeight);\n } else sMaxHeight.value = document.documentElement.clientHeight - sRootEl.offsetTop - 265;\n }\n }\n } else sMaxHeight.value = 0;\n else sMaxHeight.value = 0;\n };\n\n const clearFormValidate = () => {\n formRefs.value[props.refForm]?.clearValidate();\n };\n\n /**\n * @todo: 设置form表单样式\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-07 19:35:14\n */\n const setFormStyle = () => {\n let formStyle1;\n // console.log(props.formStyle);\n if (props.formStyle) {\n formStyle1 = props.formStyle;\n let width = formStyle1.width || 0;\n let height = formStyle1.height || 0;\n // fixme: 判断width是否是百分比\n // if (width.lastIndexOf('%') !== -1)\n // throw new Error('HtForm - [form-style] : 不支持width定义百分比');\n // if (height.lastIndexOf('%') !== -1)\n // throw new Error('HtForm - [form-style] : 不支持height定义百分比');\n // width = Math.round(this.getParentWidth * (parseInt(width) / 100) * 100) / 100;\n\n if (width.lastIndexOf('%') === -1) {\n // width固定值\n width = parseInt(width);\n if (width !== 0) {\n if (width < 762)\n // xs\n colSpanNums.value = 24;\n else if (width < 992)\n // sm\n colSpanNums.value = 12;\n else if (width < 1200)\n // md\n colSpanNums.value = 8;\n else if (width < 1920)\n // lg\n colSpanNums.value = 6;\n else colSpanNums.value = 4;\n\n rootNodeStyle.value['width'] = width + 'px';\n }\n if (height !== '100%' && height !== 0) {\n height = parseInt(height);\n rootNodeStyle.value['height'] = height + 'px';\n }\n } else rootNodeStyle.value['width'] = width;\n } else {\n const rootEl = instance?.vnode?.el as HTMLElement;\n const clientWidth = rootEl?.clientWidth;\n // console.log(clientWidth);\n if (clientWidth !== 0) {\n if (clientWidth < 762)\n // xs\n colSpanNums.value = 24;\n else if (clientWidth < 992)\n // sm\n colSpanNums.value = 12;\n else if (clientWidth < 1200)\n // md\n colSpanNums.value = 8;\n else if (clientWidth < 1920)\n // lg\n colSpanNums.value = 6;\n else colSpanNums.value = 4;\n\n rootNodeStyle.value['width'] = clientWidth + 'px';\n }\n }\n styles.value = formStyle1;\n };\n\n /**\n * @todo: form init\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 07:47:06\n * @param {*} type\n */\n const init = async (type: string) => {\n // alert(type);\n const formModel = {};\n const formRule = {};\n props.formList.forEach((item: FormItem) => {\n let v;\n if (type === 'create') v = item.value;\n else v = model.value[item.field] === undefined ? item.value : model.value[item.field];\n formModel[item.field] = v;\n if (item.dateType === 'daterange2' || item.dateType === 'datetimerange2')\n if (Array.isArray(v)) {\n formModel[item.field + '-start'] = v[0] === 'null' ? undefined : v[0];\n formModel[item.field + '-end'] = v[1] === 'null' ? undefined : v[1];\n } else {\n formModel[item.field + '-start'] = '';\n formModel[item.field + '-end'] = '';\n }\n\n formRule[item.field] = getItemRules(item);\n // 设置 value属性为响应式数据\n item.value = v;\n });\n // 设置form model\n model.value = formModel;\n if (type === 'create') rules.value = formRule;\n else if (type === 'watch') rules.value = formRule;\n\n await nextTick();\n setFormStyle();\n // console.log(formRefs.value);\n clearFormValidate();\n };\n\n const difference = (newVal, oldVal) => {\n let diff = false;\n for (const key in newVal) {\n const fieldObj = newVal[key];\n const oldObj = oldVal[key];\n if (fieldObj === undefined) continue;\n else if (!oldObj) {\n diff = true;\n break;\n } else {\n const fieldObjKeys = Object.keys(fieldObj);\n for (const key2 in fieldObjKeys)\n if (\n fieldObjKeys[key2] === 'label' ||\n fieldObjKeys[key2] === 'hidden' ||\n fieldObjKeys[key2] === 'disabled' ||\n fieldObjKeys[key2] === 'format' ||\n fieldObjKeys[key2] === 'readonly' ||\n fieldObjKeys[key2] === 'filtercode' ||\n fieldObjKeys[key2] === 'multiple' ||\n fieldObjKeys[key2] === 'showLabel' ||\n fieldObjKeys[key2] === 'visible'\n )\n if (fieldObjKeys[key2] === 'format') {\n if (fieldObj[fieldObjKeys[key2]][0] !== oldObj[fieldObjKeys[key2]][0]) {\n diff = true;\n break;\n }\n if (fieldObj[fieldObjKeys[key2]][1] !== oldObj[fieldObjKeys[key2]][1]) {\n diff = true;\n break;\n }\n if (fieldObj[fieldObjKeys[key2]][2] !== oldObj[fieldObjKeys[key2]][2]) {\n diff = true;\n break;\n }\n // //if (!_.isEqual(fieldObj[fieldObjKeys[key2]], oldObj[fieldObjKeys[key2]])) {\n // diff = true;\n // break;\n // }\n } else if (fieldObj[fieldObjKeys[key2]] !== oldObj[fieldObjKeys[key2]]) {\n // console.log(key2);\n // console.log(fieldObj[fieldObjKeys[key2]]);\n // console.log(oldObj[fieldObjKeys[key2]]);\n diff = true;\n break;\n }\n }\n\n // if (!_.isEqual(newVal[key], oldVal[key]))\n }\n // console.log(diff);\n return diff;\n };\n\n // watch\n watch(\n () => props.formList,\n (nextProps, prevProps) => {\n // formList\n if (Array.isArray(nextProps) && Array.isArray(prevProps) && nextProps.length !== prevProps.length) init('watch');\n else if (difference(nextProps, originFormList.value)) init('watch');\n },\n {\n deep: true,\n },\n );\n watch(\n () => sMaxHeight.value,\n (newVal) => {\n // sMaxHeight\n if (isScrollbar.value === false)\n if (isAnchor.value === false) sMaxHeight.value = newVal;\n else sMaxHeight.value = 0;\n else sMaxHeight.value = 0;\n },\n );\n\n // @created hook\n // console.log(slots.default);\n const firstSlot = slots.default?.()?.[0];\n if (typeof firstSlot?.type === 'object' && 'name' in firstSlot.type && firstSlot?.type?.name === 'GvSearchBar') {\n formType.value = 's';\n const slotProps = firstSlot.props as Recordable | undefined;\n if (slotProps?.expand === false) searchFieldsCollapsed.value = false;\n } else formType.value = 'e';\n // 解析formList\n originFormList.value = JSON.parse(JSON.stringify(props.formList));\n init('create');\n // 判断是否是dialog弹出框中的form\n const parentNode = instance?.parent;\n // console.log(parentNode.$?.type?.name);\n if (parentNode && parentNode.type?.name === 'ElDialog') isDialog.value = true;\n else isDialog.value = false;\n\n // @mounted hook\n onMounted(() => {\n nextTick(() => {\n // get root element\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n\n // 确保 rootEl 是 HTMLElement 并且有 closest 方法\n if (rootEl && typeof rootEl.closest === 'function') {\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n const dialogBody = rootEl.closest('.gv-drawer__body__inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n else {\n const dialogBody2 = rootEl.closest('.gv-dialog__body__inner');\n if (dialogBody2) isScrollbar.value = hasScrollbar(dialogBody2);\n }\n if (rootEl.closest('.gv-edit__container')) isEditContainer.value = true;\n\n // 计算maxheight;\n getMaxHeight(rootEl);\n\n window.addEventListener('resize', () => getMaxHeight(rootEl));\n }\n });\n });\n\n // @render\n return () => (\n <div\n class={prefixCls}\n style={{ ...rootNodeStyle }}>\n {getEditBar.value}\n {getDivider.value}\n <Transition name=\"el-zoom-in-top\">\n <div\n v-show={isShow.value}\n key=\"gv-form-body\"\n class={`${prefixCls}-collapse__inner`}>\n <ElForm\n ref={setFormRef}\n model={model.value}\n size={formSize.value}\n inline={false}\n label-position={labelPosition.value}\n label-width={`${props.labelWidth}px`}\n rules={rules.value}\n style={{\n ...styles.value,\n width: '100%',\n maxHeight: sMaxHeight.value === 0 ? undefined : sMaxHeight.value + 'px',\n }}>\n <ElRow\n ref-form={props.refForm}\n style={{ display: 'flex', flexWrap: 'wrap' }}>\n {getItems.value}\n {slots.default?.() && <div style={{ flex: 1, minWidth: 1 }}>{slots.default?.()}</div>}\n </ElRow>\n </ElForm>\n </div>\n </Transition>\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-form';\n .#{$prefixCls} {\n width: 100%;\n\n .#{$prefixCls}-form-editbar {\n // editbar bottom\n // border-bottom:1px solid #d9d9d9;\n // editbar top\n // border-top:1px solid #d9d9d9;\n // border-top: 1.5px solid var(--primaryColorHover, $primaryColorHover);\n padding: 0 0 2px;\n margin-top: -3px;\n }\n\n .#{$prefixCls}-collapse-wrap {\n overflow: hidden;\n }\n\n .#{$prefixCls}-collapse__inner {\n transform-origin: center top;\n }\n\n .el-form {\n overflow: hidden auto;\n }\n\n .el-col {\n min-height: 32px;\n margin-bottom: 12px;\n\n &[type='FIXED'] {\n height: 32px !important;\n }\n\n :deep(.el-form-item) {\n margin-bottom: 0;\n\n .el-form-item__label {\n height: 30px; // 32px\n padding-right: $modulePadding;\n //font-size: $textSizeSecondary;\n font-weight: $fontWeight;\n line-height: 30px; // 32px\n\n .label-wrap {\n display: inline-block;\n max-width: calc(100% - 10px);\n\n .el-input__inner {\n padding: 0 8px;\n border-color: $borderColor;\n\n & + span.el-input__suffix {\n right: 0;\n }\n }\n }\n }\n\n .el-form-item__content {\n line-height: 29px;\n height: 29px;\n .el-radio-group {\n .el-radio-button--small .el-radio-button__inner {\n padding: 7px;\n }\n\n .el-radio__label {\n //font-size: $appTextSize;\n }\n }\n\n .el-range-editor {\n width: 100%;\n }\n\n .el-input__prefix {\n left: 2px;\n }\n\n .#{$prefixCls}__item__inner-blank {\n width: 100%;\n height: 20px;\n line-height: 5px;\n border: 0;\n }\n\n // 日期范围选择\n .el-range-editor.el-input__inner {\n padding: 3px 5px;\n }\n\n // 日期范围选择\n .el-range__close-icon {\n width: 20px;\n }\n\n .gv-daterange__single {\n display: inline-flex !important;\n height: 32px;\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n\n &:focus,\n &.is-active {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n .el-input__prefix {\n left: 2px;\n }\n\n .el-input__suffix {\n right: 2px;\n }\n\n .el-input__inner {\n padding-right: 2px;\n padding-left: 25px;\n border: 0;\n }\n\n .gv-daterange__single-separator {\n height: 32px;\n //font-size: $appTextSize;\n line-height: 32px;\n }\n }\n\n .el-form-item__error {\n margin-top: 2px;\n transform: scale(0.9);\n transform-origin: 0 50%;\n }\n }\n\n .el-select {\n width: 100%;\n\n .el-select__tags {\n height: 24px;\n overflow-y: auto;\n\n .el-select__input {\n height: inherit;\n padding-left: 15px;\n }\n }\n }\n\n .el-autocomplete {\n width: 100%;\n }\n\n .el-textarea {\n display: block;\n\n .el-textarea__inner {\n padding: 0 10px;\n\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n overflow-y: auto;\n font-family: inherit;\n }\n\n .el-input__count {\n right: 6px;\n line-height: 1;\n }\n }\n\n .el-input-number {\n width: 100%;\n\n .el-input__inner {\n text-align: left !important;\n }\n\n .el-input-number__increase:hover ~ .el-input .el-input__inner:not(.is-disabled),\n .el-input-number__decrease:hover ~ .el-input .el-input__inner:not(.is-disabled) {\n border-color: $borderColor;\n }\n }\n\n .desc-icon {\n padding: 6px;\n font-size: 18px;\n vertical-align: middle;\n }\n\n .desc-text {\n //font-size: $textSizeSecondary;\n }\n\n &.is-required .el-form-item__label {\n // color: #f5222d;\n color: #606266;\n }\n }\n }\n .el-form--label-top {\n .el-form-item {\n .el-select,\n .el-input,\n .el-radio-group {\n width: 90% !important;\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvForm from './src/GvForm.vue';\nconst GvFormPlugin = {\n install(app: App): void {\n app.component(GvForm.name ?? 'GvForm', GvForm);\n },\n};\nexport default GvFormPlugin;\n\nexport { GvForm };\n","<!--\n * @title: collapsed sidebar component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-06-03 13:48:02\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-03 11:18:57\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { Expand, Fold } from '@element-plus/icons-vue';\n import { ElIcon } from 'element-plus';\n import { computed, onMounted, unref } from 'vue';\n import { propTypes } from '../../utils/gv.propTypes';\n\n defineOptions({\n name: 'GvHamburger', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('hamburger');\n\n const appStore = useAppStore();\n const collapse = computed(() => appStore.getCollapseMenus);\n\n // set quick keys\n\n // @method\n // load dict\n const loadDict = async () => {\n try {\n await appStore.loadAllDict();\n } catch {\n // empty\n }\n };\n // load division\n const loadDictDivision = async () => {\n try {\n await appStore.loadDictDivision();\n } catch {\n // empty\n }\n };\n\n const toggleCollapse = () => {\n const collapsed = unref(collapse);\n appStore.setCollapseMenus(!collapsed);\n };\n\n // @created\n // @mounted\n onMounted(async () => {\n // reload dict if needed\n const currentDict = appStore.dict;\n const currentReloadDict = appStore.isLoadDict;\n if (!currentDict || Object.keys(currentDict).length === 0) await loadDict();\n else if (+currentReloadDict === 1) await loadDict();\n const currentDictDivision = appStore.dictDivision;\n if (currentDictDivision && currentDictDivision.length === 0) await loadDictDivision();\n });\n</script>\n<template>\n <div\n :class=\"prefixCls\"\n @click=\"toggleCollapse\">\n <div class=\"trigger\">\n <ElIcon\n :size=\"20\"\n :class=\"`${prefixCls}__icon`\">\n <Expand\n v-if=\"!collapse\"\n :class=\"`${prefixCls}__icon`\"\n :style=\"{ color: color }\" />\n <Fold\n v-else\n :class=\"`${prefixCls}__icon`\"\n :style=\"{ color: color }\" />\n </ElIcon>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-hamburger';\n .#{$prefixCls} {\n position: relative;\n z-index: 3;\n line-height: $navHeadHeight;\n background-color: #fff;\n &:hover {\n background-color: rgb(0 0 0 / 3%);\n }\n .trigger {\n display: inline-block;\n line-height: 1px;\n cursor: pointer;\n transition: color 0.3s ease;\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvHamburger from './src/GvHamburger.vue';\nconst GvHamburgerPlugin = {\n install(app: App): void {\n app.component(GvHamburger.name ?? 'GvHamburger', GvHamburger);\n },\n};\nexport default GvHamburgerPlugin;\n\nexport { GvHamburger };\n","<!--\n * @title: locale lang dropdown\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-03-25 11:43:51\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:09:46\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useLocale } from '@/hook/web/useLocale';\n import { useStyle } from '@/hook/web/useStyle';\n import { useLocaleStore } from '@/store/modules/locale';\n import { useUserStore } from '@/store/modules/user';\n import { computed, unref } from 'vue';\n import { useRouter } from 'vue-router';\n import { propTypes } from '../../utils/gv.propTypes';\n\n import { ElDropdown, ElDropdownItem, ElDropdownMenu } from 'element-plus';\n\n defineOptions({\n name: 'GvLangSelect', // 定义组件名称\n inheritAttrs: true, // 默认继承属性\n });\n defineProps({\n className: propTypes.string.def(''),\n });\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('lang-select');\n\n const userStore = useUserStore();\n const localeStore = useLocaleStore();\n const langMap = computed(() => localeStore.getLocaleMap);\n const currentLang = computed(() => localeStore.getCurrentLocale);\n\n const router = useRouter();\n\n const handleSetLang = async (lang): Promise<void> => {\n if (lang === unref(currentLang).lang) return;\n\n const { switchLocale } = useLocale();\n userStore.setLanguage(lang);\n await switchLocale(lang);\n\n router.go(0);\n };\n</script>\n\n<template>\n <ElDropdown\n :class=\"prefixCls\"\n trigger=\"click\"\n class=\"international\"\n @command=\"handleSetLang\">\n <div>\n <GvIcon\n :class-name=\"`international-icon ${className}`\"\n icon-name=\"language\" />\n </div>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem\n v-for=\"item in langMap\"\n :key=\"item.lang\"\n :command=\"item.lang\">\n {{ item.name }}\n </ElDropdownItem>\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n</template>\n","import type { App } from 'vue';\nimport GvLangSelect from './src/GvLangSelect.vue';\nconst GvLangSelectPlugin = {\n install(app: App): void {\n app.component(GvLangSelect.name ?? 'GvLangSelect', GvLangSelect);\n },\n};\nexport default GvLangSelectPlugin;\n\nexport { GvLangSelect };\n","<!--\n * @title: popover component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 14:04:51\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:33:39\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { GvIcon } from '@@/GvIcon';\n import { ElPopover } from 'element-plus';\n import { computed, defineComponent, ref, watch, type PropType } from 'vue';\n import type { TPopoverPlacement, TPopoverTrigger } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('popover');\n\n export default defineComponent({\n name: 'GvPopover',\n props: {\n vref: {\n type: String,\n default: undefined,\n },\n visible: {\n type: Boolean,\n default: false,\n },\n title: {\n type: String,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n placement: {\n type: String as PropType<TPopoverPlacement>,\n default: 'bottom-start',\n },\n trigger: {\n type: String as PropType<TPopoverTrigger>,\n default: 'click',\n },\n tablePopover: {\n type: Boolean,\n default: false,\n },\n columnProp: {\n type: String,\n default: undefined,\n },\n columnType: {\n type: String,\n default: undefined,\n },\n },\n\n emits: ['update:visible', 'show', 'hide'],\n\n setup(props, { emit, slots }) {\n // @data\n const isShow = ref<boolean>(props.visible);\n\n // @watch\n watch(\n () => props.visible,\n (val) => {\n isShow.value = val;\n },\n );\n\n // @computed\n const popClass = computed(() => (props.tablePopover ? `${prefixCls} table-popover` : prefixCls));\n\n // @methods\n\n const handleUpdateVisible = (val: boolean) => {\n isShow.value = val;\n emit('update:visible', val);\n };\n\n const handleShow = () => {\n emit('show', props.columnProp);\n };\n\n const handleHide = () => {\n emit('hide', props.columnProp);\n };\n\n const handlePopoverWrapper = (e: MouseEvent) => {\n e.stopPropagation();\n // 关闭其他 popover\n // if (this.tablePopover === true)\n // this.$refs.array.forEach(element => {\n\n // });\n\n // this.$emit('click', e, this.columnProp);\n };\n\n const getReferenceSlot = () => (\n <span class=\"gv-popover-reference\">\n {props.label || props.title}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"\n />\n </span>\n );\n\n // @render\n return () => (\n <div\n class={prefixCls}\n onClick={handlePopoverWrapper}>\n <ElPopover\n ref={props.vref || 'gv-popover'}\n visible={isShow.value}\n onUpdate:visible={handleUpdateVisible}\n title={props.title}\n placement={props.placement}\n trigger={props.trigger}\n showArrow={true}\n popperClass={`gv-popover ${popClass.value}`}\n transition=\"el-zoom-in-top\"\n onAfter-enter={handleShow}\n onAfter-leave={handleHide}\n // append-to-body={false}\n // popper-options={{ // fixme: 增加该配置会导致各种问题,兼容性不行\n // boundariesElement: 'body',\n // // gpuAcceleration: true,\n // // positionFixed: true,\n // removeOnDestroy: true\n // }}\n >\n {{\n default: () => slots.default?.(),\n reference: () => getReferenceSlot(),\n }}\n </ElPopover>\n </div>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-popover';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvPopover from './src/GvPopover.vue';\n\nconst GvPopoverPlugin = {\n install(app: App): void {\n app.component(GvPopover.name ?? 'GvPopover', GvPopover);\n },\n};\nexport default GvPopoverPlugin;\n\nexport { GvPopover };\n","<!--\n * @title: radio component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 11:52:20\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:34:53\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadio, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TRadioValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio');\n\n export default defineComponent({\n name: 'GvRadio',\n props: {\n vref: {\n type: String,\n default: '',\n },\n name: {\n type: String,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: 'default',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TRadioValue>,\n default: undefined,\n },\n label: {\n type: [String, Number, Boolean] as PropType<TRadioValue>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n border: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const radioValue = ref(props.value);\n const radioSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n const handleUpdate = (val: TRadioValue) => {\n radioValue.value = val;\n emit('update:modelValue', val);\n };\n\n const handleChange = (val: TRadioValue) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElRadio\n modelValue={radioValue.value}\n onUpdate:modelValue={handleUpdate}\n name={props.name}\n value={props.value ?? props.label}\n disabled={props.disabled}\n border={props.border}\n onChange={handleChange}\n size={radioSize.value}\n class={prefixCls}>\n {slots.default?.()}\n </ElRadio>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio';\n .#{$prefixCls} {\n padding: 5px 0;\n margin-right: 15px;\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadio from './src/GvRadio.vue';\n\nconst GvRadioPlugin = {\n install(app: App): void {\n app.component(GvRadio.name ?? 'GvRadio', GvRadio);\n },\n};\nexport default GvRadioPlugin;\n\nexport { GvRadio };\n","<!--\n * @title: radio button component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:18:46\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:35:23\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadioButton } from 'element-plus';\n import { defineComponent, ref, watch } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio-button');\n\n export default defineComponent({\n name: 'GvRadioButton',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean],\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n name: {\n type: String,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['update:modelValue', 'change'],\n setup(props, { slots }) {\n // @data\n const radioValue = ref(props.value);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n // const handleUpdate = (val) => {\n // radioValue.value = val;\n // emit('update:modelValue', val);\n // };\n\n // @render\n return () => (\n <ElRadioButton\n value={props.value ?? props.label}\n modelValue={radioValue.value}\n name={props.name}\n disabled={props.disabled}\n class={prefixCls}>\n {slots.default?.()}\n </ElRadioButton>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio-button';\n .#{$prefixCls} {\n padding: 5px 0;\n margin-right: 15px;\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadioButton from './src/GvRadioButton.vue';\n\nconst GvRadioButtonPlugin = {\n install(app: App): void {\n app.component(GvRadioButton.name ?? 'GvRadioGroup', GvRadioButton);\n },\n};\nexport default GvRadioButtonPlugin;\n\nexport { GvRadioButton };\n","<!--\n * @title: radio group component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:10:40\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 09:03:41\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRadioGroup, useGlobalConfig, type ComponentSize } from 'element-plus';\n import { computed, defineComponent, ref, unref, watch, type PropType } from 'vue';\n import type { TRadioGroupValue } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('radio-group');\n\n export default defineComponent({\n name: 'GvRadioGroup',\n props: {\n vref: {\n type: String,\n default: '',\n },\n value: {\n type: [String, Number, Boolean] as PropType<TRadioGroupValue>,\n default: undefined,\n },\n size: {\n type: String as PropType<ComponentSize>,\n default: undefined,\n },\n label: {\n type: String,\n default: undefined,\n },\n },\n\n // @emits\n emits: ['update:modelValue', 'change'],\n\n setup(props, { emit, slots }) {\n // @data\n const globalSize = useGlobalConfig('size');\n const radioValue = ref<TRadioGroupValue | undefined>(props.value ?? undefined);\n const radioGroupSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n radioValue.value = newVal;\n },\n );\n\n // @method\n const handleUpdate = (val: TRadioGroupValue) => {\n radioValue.value = val;\n emit('update:modelValue', val);\n };\n\n const handleChange = (val: TRadioGroupValue) => {\n emit('change', val);\n };\n\n // @render\n return () => (\n <ElRadioGroup\n class={prefixCls}\n aria-label={props.label}\n modelValue={radioValue.value}\n onUpdate:modelValue={handleUpdate}\n size={radioGroupSize.value}\n onChange={handleChange}>\n {slots.default?.()}\n </ElRadioGroup>\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-radio-group';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvRadioGroup from './src/GvRadioGroup.vue';\n\nconst GvRadioGroupPlugin = {\n install(app: App): void {\n app.component(GvRadioGroup.name ?? 'GvRadioGroup', GvRadioGroup);\n },\n};\nexport default GvRadioGroupPlugin;\n\nexport { GvRadioGroup };\n","<!--\n * @title: row component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 09:49:52\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-29 09:36:24\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElRow } from 'element-plus';\n import { defineComponent, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('row');\n\n export default defineComponent({\n name: 'GvRow',\n props: {\n gutter: {\n type: Number,\n default: 0,\n },\n tag: {\n type: String as PropType<string>,\n default: 'div',\n },\n },\n setup(props, { slots }) {\n return () => (\n <ElRow\n class={prefixCls}\n gutter={props.gutter}\n tag={props.tag}>\n {slots.default?.()}\n </ElRow>\n );\n },\n });\n</script>\n","import type { App } from 'vue';\nimport GvRow from './src/GvRow.vue';\n\nconst GvRowPlugin = {\n install(app: App): void {\n app.component(GvRow.name ?? 'GvRow', GvRow);\n },\n};\nexport default GvRowPlugin;\n\nexport { GvRow };\n","<!--\n * @title: screenfull\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-05-22 09:15:43\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2025-11-17 10:55:25\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script setup lang=\"ts\">\n import { useFullscreen } from '@vueuse/core';\n import { propTypes } from '../../utils/gv.propTypes';\n import { useStyle } from '@/hook/web/useStyle';\n\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('screenfull');\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const { toggle, isFullscreen } = useFullscreen();\n\n const toggleFullscreen = () => {\n toggle();\n };\n</script>\n\n<template>\n <div\n :class=\"prefixCls\"\n @click=\"toggleFullscreen\">\n <GvIcon :icon-name=\"isFullscreen ? 'exit-fullscreen' : 'fullscreen'\" />\n </div>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-screenfull';\n .#{$prefixCls} {\n display: inline-block;\n line-height: var(--right-item-line-height);\n height: var(--right-item-height);\n vertical-align: 10px;\n cursor: pointer;\n fill: #5a5e66;\n }\n</style>\n","import type { App } from 'vue';\nimport GvScreenFull from './src/GvScreenFull.vue';\n// Define the install method on the GvButton component\nconst GvScreenFullPlugin = {\n install(app: App): void {\n app.component(GvScreenFull.name ?? 'GvScreenFull', GvScreenFull);\n },\n};\nexport default GvScreenFullPlugin;\n\nexport { GvScreenFull };\n","<!--\n * @title: search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:02:29\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-04 22:14:30\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvIcon } from '@@/GvIcon';\n import { getVNodeText } from '@@/utils';\n import { computed, defineComponent, getCurrentInstance, inject, nextTick, onMounted, ref } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('search-bar');\n export default defineComponent({\n name: 'GvSearchBar',\n props: {\n expand: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n setup(props, { slots }) {\n // @data\n const appStore = useAppStore();\n const { t } = useBridgeI18n();\n\n const visible = ref(props.expand);\n const searchFieldsCollapsed = inject<{ value: boolean }>('searchFieldsCollapsed', ref(true));\n // const formList = inject('formList') as Recordable[];\n const refForm = inject('refForm') as string;\n const instance = getCurrentInstance(); // get current vnode\n let formNode: any = instance;\n while (formNode && formNode.type?.name !== 'ElForm') formNode = formNode?.parent;\n\n const fieldList = ref<any[]>([]);\n const searchFormRows = appStore.searchFormRows;\n const showDefaultRow = searchFormRows === 1 ? 4 : 8;\n // @mounted\n onMounted(() => {\n nextTick(() => {\n // console.log(formNode.exposed.fields);\n fieldList.value = formNode.exposed.fields;\n });\n });\n // const gvSearchExpand = ref(null);\n // const gvSearchShrink = ref(null);\n\n // @methods\n /**\n * @todo: expand search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:45:03\n */\n const expandFields = () => {\n searchFieldsCollapsed.value = false;\n visible.value = false;\n };\n /**\n * @todo: shrink search bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-07 14:48:18\n */\n const shrinkFields = () => {\n searchFieldsCollapsed.value = true;\n visible.value = true;\n };\n /**\n * @todo: create search button\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-08 14:17:17\n */\n const createSearchBar = computed(() => {\n if (!fieldList.value?.length) return null;\n const searchBar: any[] = [];\n const buttonQuick = appStore.buttonQuick;\n const buttonIcon = appStore.buttonIcon;\n const defaultSlot = slots.default?.();\n if (defaultSlot) {\n defaultSlot.forEach((vnode) => {\n const propsData = vnode.props;\n const type = vnode.type;\n if (typeof type === 'object' && 'name' in type && type.name === 'GvButton') {\n let text = getVNodeText(vnode);\n let searchBtnFlag = false;\n\n if (text === t('searchBar.search')) {\n if (buttonQuick) text = t('searchBar.search2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.search');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.seek')) {\n if (buttonQuick) text = t('searchBar.seek2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.seek');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.query')) {\n if (buttonQuick) text = t('searchBar.query2');\n searchBtnFlag = true;\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.query');\n if (buttonIcon) propsData.icon = 'el-icon-search';\n propsData.bizType = 'search';\n }\n } else if (text === t('searchBar.reset')) {\n if (buttonQuick) text = t('searchBar.reset2');\n if (propsData) {\n propsData.text = text;\n propsData.otext = t('searchBar.reset');\n if (buttonIcon) propsData.icon = 'el-icon-refreshLeft';\n propsData.bizType = 'reset';\n }\n }\n\n if (searchBtnFlag && propsData && propsData.type === undefined) propsData.type = 'primary';\n\n if (propsData) propsData.refForm = refForm;\n }\n searchBar.push(vnode);\n });\n\n // if (this.expand) {\n // add: 判断是否需要增加展开按钮 2022-04-22\n const fieldList2 = fieldList.value.filter((x) => {\n if (x.$el.hidden !== true) return true;\n });\n\n if (fieldList2.length > showDefaultRow) {\n let expandText = `${t('searchBar.expand')}`;\n if (buttonQuick) expandText = `${t('searchBar.expand')}(E)`;\n let shrinkText = `${t('searchBar.shrink')}`;\n if (buttonQuick) shrinkText = `${t('searchBar.shrink')}(E)`;\n const expand = (\n <GvButton\n link={true}\n bizType=\"expand\"\n visible={visible.value}\n onClick={expandFields}>\n {expandText} \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-08 08:47:14\n * @version: 1.0.3\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\nimport type { FilterCondition, PageInfo } from '@@/GvTable/src/types';\nimport type { TableInstance } from 'element-plus';\nimport type { VNode } from 'vue';\nimport { message } from './gv.notify';\nimport { isEmpty, toHump, toLine } from './index';\n/**\n * @todo: page info condition\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 09:09:54\n * @param {PageInfo} pi\n */\nexport const appendPageInfo = (pi?: PageInfo): PageInfo => {\n const pageInfo: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n const currentpagenum = pi && pi['currentpagenum'] ? pi['currentpagenum'] : 1;\n const recordsperpage = pi && pi['recordsperpage'] ? pi['recordsperpage'] : 10;\n const countrows = pi && pi['countrows'] ? pi['countrows'] : 0;\n const totalpage = pi && pi['totalpage'] ? pi['totalpage'] : 0;\n pageInfo['currentpagenum'] = currentpagenum;\n pageInfo['recordsperpage'] = recordsperpage;\n pageInfo['countrows'] = countrows;\n pageInfo['totalpage'] = totalpage;\n return pageInfo;\n};\n\n/**\n * @todo: common query combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:08:33\n * @param {VNode} tabNode\n * @param {Recordable} filter\n */\nexport const combined = function (tabNode: VNode, filter: Recordable<any>): Recordable<FilterCondition | PageInfo> {\n const filterConditions: Recordable<FilterCondition | PageInfo> = {};\n if (!isEmpty(filter))\n Object.keys(filter).forEach((x: string) => {\n let val: string = '';\n let co = 'null';\n if (!isEmpty(filter[x])) {\n let sOp = '=';\n if (typeof filter[x] === 'object')\n if (Array.isArray(filter[x] as any[])) {\n // fixme: 增加多选字典 2022-08-01\n let coo = '';\n let labels = '';\n (filter[x] as any[]).forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else {\n const v = filter[x] as Recordable<any>;\n co = v.value;\n val = v.label;\n }\n val = val + '';\n if (val.indexOf(',') > 0) val = val.replace(/,/g, ',');\n\n if (val.indexOf(',') > 0) if (sOp !== 'in' && sOp !== 'not in') sOp = 'in';\n const ds = toLine(x);\n const condition: FilterCondition = {\n id: '',\n ds: '',\n va: '',\n co: '',\n op: 'like',\n ac: 'null',\n ki: 'text',\n };\n let type = 'text';\n if (type !== 'dic' && (x.indexOf('id') >= 0 || x.indexOf('Id') >= 0)) type = 'number';\n\n condition['id'] = x;\n condition['ds'] = ds;\n condition['va'] = val.trim();\n condition['co'] = co;\n condition['op'] = sOp || 'like';\n condition['ac'] = 'null';\n condition['ki'] = type;\n filterConditions[x] = condition;\n }\n });\n // 拼接 pageinfo条件\n if (tabNode) {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n pi['recordsperpage'] = tabNode.props?.['pageSize'] ?? 10;\n filterConditions['pageinfo'] = appendPageInfo(pi);\n }\n return filterConditions;\n};\n\n/**\n * @todo: form search combined filter conditions\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:31:41\n * @param {FormItem} formList\n * @param {Recordable} filter\n * @param {VNode} tabNode\n */\nexport const searchCombined = (formList: FormItem[], filter: Recordable<any>, tabNode: TableInstance): Recordable<FilterCondition | PageInfo> => {\n const filterConditions: Recordable<FilterCondition | PageInfo> = {};\n // console.log(formList);\n for (const item of formList) {\n const type = item.type;\n if (type !== 'blank') {\n const condition: FilterCondition = {\n id: '',\n ds: '',\n va: '',\n co: '',\n op: 'like',\n ac: 'null',\n ki: 'text',\n };\n const { action, field, op = 'like', upper = false, showLabel, dateType } = item;\n if (action === 'ignore') continue;\n let val = filter[field];\n let co = 'null';\n if (isEmpty(val)) continue;\n // 对于日期范围选择\n if (Array.isArray(val)) if (isEmpty(val[0])) continue;\n // if (type !== 'dic' && (field.indexOf('id') >= 0 || field.indexOf('Id') >= 0))\n // type = 'number';\n // console.log(val);\n let sOp = op;\n if (type === 'dic') {\n if (Array.isArray(val)) {\n // fixme: 增加多选字典 2022-08-01\n let coo = '';\n let labels = '';\n (val as any[]).forEach((x) => {\n if (coo) {\n coo += ',' + x.value;\n labels += ',' + x.label;\n } else {\n coo = x.value;\n labels = x.label;\n }\n });\n co = coo;\n val = labels;\n } else if (showLabel) {\n // 单选字典\n co = val + '';\n val = showLabel;\n } else {\n const v = val as Recordable<any>;\n co = v.value;\n val = v.label;\n }\n\n sOp = '=';\n } else if (type === 'date' || type === 'datetime' || type === 'time') {\n if (op === 'like') sOp = '=';\n if (dateType === 'daterange' || dateType === 'datetimerange' || dateType === 'timerange' || dateType === 'monthrange') val = (val as any[]).join(',');\n } else if (type === 'number') sOp = '=';\n\n let sType = type;\n if (dateType === 'monthrange') sType = 'month';\n\n val = val + '';\n if (!action && val.indexOf(',') > 0) val = val.replace(/,/g, ',');\n\n if (val.indexOf(',') > 0) if (sOp !== 'in' && sOp !== 'not in') sOp = 'in';\n\n sOp = sOp.replace(/</gi, '<');\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-08 13:38:52\n * @version: 1.0.7\n * @copyright: copyright (c) 2025 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\nimport type { PageInfo } from '@@/GvTable/src/types/index';\nimport { useStorage } from '@@/hooks/web/useStorage';\nimport type { FormInstance, TableInstance } from 'element-plus';\nimport type { ComponentInternalInstance, VNode } from 'vue';\nimport { message } from './gv.notify';\nimport { appendPageInfo, combined, saveCombined, searchCombined } from './gv.table';\nimport { getVNodeName, isEmpty } from './index';\n/**\n * @todo: common fetch data\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 10:55:17\n * @param {function} fetch\n * @param {any} data\n */\nconst fetchData = async (fetch: AsyncFn, data: any): Promise<any> => {\n let result = {};\n await fetch(data).then((res) => {\n result = res.datas;\n });\n\n return result;\n};\n\n/**\n * @todo: common submit fetch data\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:39:01\n */\nconst submit = async (fetch: AsyncFn, data: any, hasMsg = true, msg?: string): Promise<any> => {\n let result = {};\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '操作成功';\n else msgs = 'Operate successfully';\n }\n await fetch(data).then((res) => {\n result = res.datas;\n if (hasMsg) message(msgs, 'success');\n });\n\n return result;\n};\n/**\n * @todo: common fetch table data(with pagination)\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:40:36\n */\nconst fetchTable = async (tabNode: any, fetch: AsyncFn, data: any) => {\n let result = {};\n const condition = combined(tabNode, data);\n if (tabNode) {\n tabNode.filterConditions = condition;\n tabNode.fetch = fetch;\n }\n if (tabNode) tabNode.startLoading();\n await fetch(condition)\n .then((res) => {\n result = res.datas;\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n if (tabNode) tabNode.stopLoading();\n return result;\n};\n\n/**\n * @todo: validate form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:42:22\n */\nconst checkForms = async (fmNodes: FormInstance[]) => {\n if (fmNodes === undefined || fmNodes === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = true;\n for (const fmNode of fmNodes) {\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n await fmNode2.component.exposed\n .validate()\n .then(() => {\n // todo\n })\n .catch(() => {\n // throw new Error(e);\n result = false;\n Promise.reject('The form failed validation');\n });\n }\n }\n\n return result;\n};\n\n/**\n * @todo: save form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:45:03\n */\nconst save = async (fmNode: FormInstance, fetch: AsyncFn, check = true, msg?: string) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = {};\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '保存成功';\n else msgs = 'Save OK.';\n }\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n if (check === false) {\n // 有数据的输入框拼接条件\n const props = fmNode2.props;\n const filter = props.model;\n // console.log(filter);\n // console.log(fmNode2);\n // console.log(formList);\n let conditions = {};\n try {\n conditions = saveCombined(formList, filter);\n await fetch(conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n } catch {\n message('form save failed', 'error');\n // console.log(error);\n return null;\n }\n } else\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 有数据的输入框拼接条件\n const props = fmNode2.props;\n const filter = props.model;\n // console.log(filter);\n // console.log(fmNode2);\n // console.log(formList);\n let conditions = {};\n try {\n conditions = saveCombined(formList, filter);\n await fetch(conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n } catch {\n message('form save failed', 'error');\n return;\n }\n })\n .catch(() => {\n // throw new Error(e);\n Promise.reject('The form failed validation');\n result = {};\n });\n }\n\n return result;\n};\n\n/**\n * @todo: update form\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 15:49:05\n */\nconst update = async (fmNode: FormInstance, id: number, fetch: Async2Fn, check = true, msg?: string) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n if (isEmpty(id)) {\n message('pk is null', 'error');\n return false;\n }\n let result = {};\n const fmInnerNode = fmNode.$;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n let msgs: string;\n if (msg) msgs = msg;\n else {\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang');\n if (lang === 'zh-CN') msgs = '保存成功';\n else msgs = 'Save Ok.';\n }\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n if (fmNode2?.type?.name === 'ElForm')\n if (check === false) {\n // 有数据的输入框拼接条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(fmNode2);\n const conditions = saveCombined(formList, filter);\n // console.log(conditions);\n\n await fetch(id, conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n } else\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 有数据的输入框拼接条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(fmNode2);\n const conditions = saveCombined(formList, filter);\n // console.log(conditions);\n await fetch(id, conditions)\n .then((res) => {\n result = res.datas;\n message(msgs, 'success');\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n })\n .catch(() => {\n result = {};\n });\n }\n\n return result;\n};\n\n/**\n * @todo: search for list with form and table\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:11:42\n */\nconst search = async (fmNode: FormInstance, tabNode: TableInstance, fetch: AsyncFn) => {\n if (fmNode === undefined || fmNode === null) {\n message('form object is null', 'error');\n return false;\n }\n if (tabNode === undefined || tabNode === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = {};\n const fmInnerNode = fmNode.$;\n const tabInnerNode = tabNode.$;\n const exposed = tabInnerNode.exposed as any;\n const rawFmChildren = fmInnerNode.subTree?.children;\n const fmChildList: any[] = Array.isArray(rawFmChildren) ? rawFmChildren : [];\n const formList = fmInnerNode.props.formList as FormItem[];\n for (const element of fmChildList)\n if (element?.type?.displayName === 'Transition') {\n const fmNode2 = element.component.subTree.component.subTree.children[0];\n // 解析检索条件\n await fmNode2.component.exposed\n .validate()\n .then(async () => {\n // 拼接查询条件\n const filter = fmNode2.props.model;\n // console.log(filter);\n // console.log(formList);\n const filterConditions = searchCombined(formList, filter, tabNode);\n // console.log(filterConditions);\n // update: 保存查询条件、方法至table对象,为分页组件使用 2022-04-18\n\n exposed.filterConditions = filterConditions;\n exposed.fetch = fetch;\n exposed.startLoading();\n\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n // fixme: 清空列表search框内容 2022-04-21\n const tabChildList = (tabNode as any).subTree?.children || [];\n const searchInputNode = tabChildList.filter((x: VNode) => {\n if (getVNodeName(x) === 'gv-input') return true;\n });\n if (searchInputNode[0]) searchInputNode[0].inputValue = '';\n // fixme: 清空列表表头筛选框 2022-12-14\n const tableEl = tabNode.$el as HTMLElement;\n const tableHeader = tableEl.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const tableFixedHeader = tableEl.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n const columns = tableHeader?.querySelectorAll('.el-table__cell');\n const len = columns?.length || 0;\n for (let i = 0; i < len; i++) {\n const h = columns?.[i]?.querySelector('.render__header');\n if (h) if (h.children[0]) h.children[0].classList.remove('is-selected');\n }\n if (tableFixedHeader) {\n const columnsFixed = tableFixedHeader.querySelectorAll('.el-table__cell');\n const lenFixed = columnsFixed.length;\n for (let i = 0; i < lenFixed; i++) {\n const h = columnsFixed[i].querySelector('.render__header');\n if (h) if (h.children[0]) h.children[0].classList.remove('is-selected');\n }\n }\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n exposed.stopLoading();\n })\n .catch(() => {\n exposed.stopLoading();\n });\n }\n\n return result;\n};\n\n/**\n * @todo: search for list without form but with table\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:22:00\n * @param {*} tabNode\n * @param {*} fetch\n * @param {*} data\n */\nconst searchNoFm = async (tabNode: any, fetch: AsyncFn, data: any) => {\n if (tabNode === undefined || tabNode === null) {\n message('form object is null', 'error');\n return false;\n }\n let result = {};\n const condition = combined(tabNode, data);\n // console.log(JSON.stringify(filterConditions));\n // update: 保存查询条件、方法至table对象,为分页组件使用 2022-04-18\n\n tabNode.filterConditions = condition;\n tabNode.fetch = fetch;\n tabNode.startLoading();\n await fetch(condition)\n .then((res) => {\n result = res.datas;\n // fixme: 清空列表search框内容 2022-04-21\n const tabChildList = (tabNode as any).subTree?.children || [];\n const searchInputNode = tabChildList.filter((x) => {\n if (x?.type?.name === 'gv-input') return true;\n });\n if (searchInputNode[0]) searchInputNode[0].inputValue = '';\n })\n .catch((error) => {\n message(error, 'error');\n console.log(error);\n });\n tabNode.stopLoading();\n return result;\n};\n\n/**\n * @todo: jump to new page search\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:23:46\n * @param {*} tabNode\n * @param {*} filterConditions\n * @param {*} fetch\n * @param {*} pageInfo\n */\nconst toNewPageSearch = async (tabNode: ComponentInternalInstance | null, filterConditions: Recordable<any>, fetch: AsyncFn, pageInfo: PageInfo) => {\n if (filterConditions === undefined || filterConditions === null) {\n console.log('分页查询失败: 过滤条件为空', 'error');\n return false;\n }\n if (fetch === undefined || fetch === null) {\n message('Paging query failed: Request method is empty', 'error');\n return false;\n }\n let result: Recordable<any> = [];\n tabNode?.exposed?.startLoading();\n const sfc = filterConditions || {};\n if (sfc['pageinfo'] === undefined) sfc['pageinfo'] = appendPageInfo() as PageInfo;\n // 更新pageinfo\n sfc['pageinfo'].currentpagenum = pageInfo.currentpagenum;\n sfc['pageinfo'].recordsperpage = pageInfo.recordsperpage;\n await fetch(filterConditions)\n .then((res) => {\n result = res.datas;\n })\n .catch((error) => {\n console.log(error);\n });\n tabNode?.exposed?.stopLoading();\n return result;\n};\n\n/**\n * @todo: 转换单个结果集对象\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-27 10:11:53\n * @param {*} result\n */\nconst trans = (result) => result;\n\n/**\n * @todo: table insert row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:27:57\n * @param {*} searchData\n * @param {*} result\n */\nconst insertResult = (searchData: any, result: any) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n if (result === null || result === undefined)\n // Notify.message('结果对象为空', 'error');\n return false;\n\n if (Array.isArray(result)) searchData.records.splice(0, 0, ...result);\n else\n // if (searchData.records === undefined)\n // result['rownums'] = 0;\n // else\n // if (!searchData.records[0])\n // result['rownums'] = 0;\n // else\n // result['rownums'] = (searchData.records[0].rownums - 1);\n searchData.records.splice(0, 0, trans(result));\n\n return true;\n};\n\n/**\n * @todo: table update row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:28:33\n * @param {*} searchData\n * @param {*} result\n * @param {*} rownums\n */\nconst updateResult = (searchData: any, result: any, rownums: number) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n if (result === null || result === undefined)\n // Notify.message('结果对象为空', 'error');\n return false;\n if (Array.isArray(result)) searchData.records.splice(0, 0, ...result);\n else {\n const currentRowArr = searchData.records.filter((x: any) => {\n if (x.rownums === rownums) return true;\n });\n const currentRow = currentRowArr[0];\n Object.keys(result).forEach((x) => {\n if (x !== 'rownums') currentRow[x] = result[x];\n });\n }\n\n return true;\n};\n\n/**\n * @todo: table remove row\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:29:10\n * @param {*} searchData\n * @param {*} index\n */\nconst removeResult = (searchData: any, index: number) => {\n if (searchData === null || searchData === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (!Array.isArray(searchData.records)) {\n message('form object is null', 'error');\n return false;\n }\n searchData.records.splice(index, 1);\n // 设置总条数 - 1\n if (searchData.total) searchData.total = searchData.total - 1;\n return true;\n};\n\n/**\n * @todo: 从后端字典对象 { c, v, e, l1, l2 } 取当前语言展示文本\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-03 18:21:13\n * @param {Recordable} dictObj\n * @param {string} lang\n */\nconst getDictDisplayLabel = (dictObj: Recordable<any>, lang?: string | null): string => {\n if (!dictObj || typeof dictObj !== 'object') return '';\n const locale = lang || 'zh-CN';\n switch (locale) {\n case 'en':\n return dictObj.e ?? dictObj.e ?? dictObj.v ?? '';\n case 'l1':\n return dictObj.l1 ?? dictObj.l1 ?? dictObj.v ?? '';\n case 'l2':\n return dictObj.l2 ?? dictObj.l2 ?? dictObj.v ?? '';\n case 'zh-CN':\n default:\n return dictObj.v ?? dictObj.c ?? '';\n }\n};\n\n/**\n * @todo: table set form value\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:30:16\n * @param {*} formList\n * @param {*} rowData\n */\nconst setEditValue = (formList: FormItem[], rowData: Recordable<any>) => {\n // console.log(rowData);\n if (formList === null || formList === undefined) {\n message('form object is null', 'error');\n return false;\n }\n if (rowData === null || rowData === undefined) {\n message('Set data is null', 'error');\n return false;\n }\n const { getStorage } = useStorage('localStorage');\n const lang = getStorage('lang') || 'zh-CN';\n if (Object.keys(rowData).length !== 0)\n formList.forEach((x) => {\n const fieldValue = rowData[x.field];\n if (fieldValue !== undefined)\n if (x.type !== 'blank' && x.keep !== true)\n // const dicType = x.dicType;\n switch (x.type) {\n case 'text':\n case 'textarea':\n case 'number':\n if (fieldValue !== null && typeof fieldValue === 'object') x.value = fieldValue.c;\n else x.value = fieldValue;\n break;\n case 'date':\n if (x.dateType === 'daterange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'datetime':\n if (x.dateType === 'datetimerange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'time':\n if (x.dateType === 'timerange') x.value = fieldValue ? fieldValue.split(',') : null;\n else x.value = fieldValue;\n break;\n case 'layer':\n if (Array.isArray(fieldValue)) x.value = fieldValue;\n else if (fieldValue) {\n const arr = fieldValue.split(',');\n // const arr = [1, '2', 'a'];\n const arr2 = arr.map((x) => {\n if (!isNaN(parseInt(x))) return x * 1;\n else return x;\n });\n x.value = arr2;\n // console.log(x.value);\n } else x.value = [];\n\n break;\n case 'dic':\n // console.log(rowData[x.field]);\n // if (dicType && dicType.indexOf('t#') !== -1)\n // x.value = rowData[x.field];\n // else {\n // fixme: 增加枚举字典类型赋值 2022-11-07\n if (x.dicType && x.dicType.indexOf('e#') >= 0) {\n if (typeof x.value !== 'object') {\n const enums = x.dicType.split('#');\n const items = enums[1].split(':');\n\n for (let i = 0; i < items.length; i++) {\n const itemChild = items[i].split('=');\n if (itemChild[0] === fieldValue + '') {\n x.value = fieldValue;\n x.showLabel = itemChild[1];\n break;\n }\n }\n }\n } else if (x.multiple)\n if (fieldValue !== null) {\n // 多选字典\n if (typeof fieldValue === 'object') {\n const dictObj = fieldValue;\n const c = dictObj.c;\n const v = getDictDisplayLabel(dictObj, lang);\n\n if (c) {\n const codes = c.split(',');\n const labels = v ? v.split(',') : [];\n x.value = codes.map((code: string, i: number) => ({\n value: code,\n label: labels[i] ?? code,\n }));\n x.showLabel = labels;\n } else {\n x.value = [];\n x.showLabel = [];\n }\n } else if (typeof fieldValue === 'string') {\n const c = fieldValue;\n if (c) {\n const op = [];\n c.split(',').forEach((x) => {\n const o: Recordable<any> = {};\n o.value = x;\n (op as Recordable<any>[]).push(o);\n });\n x.value = op;\n } else x.value = [];\n }\n } else x.value = fieldValue;\n else if (fieldValue !== null && typeof fieldValue === 'object') {\n const dictObj = fieldValue;\n const code = String(dictObj.c ?? '').trim();\n const label = getDictDisplayLabel(dictObj, lang).trim();\n if (!code && !label) {\n x.value = '';\n x.showLabel = '';\n } else {\n x.value = { value: code, label: label || code };\n x.showLabel = label || code;\n }\n } else x.value = fieldValue;\n\n break;\n default:\n x.value = fieldValue;\n break;\n }\n });\n // formList = newList;\n};\n\n/**\n * @todo: reset form edit\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-13 18:36:39\n * @param {FormItem[]} formList\n */\nconst resetEditValue = (formList: FormItem[]) => {\n if (formList === null || formList === undefined) {\n message('form object is null', 'error');\n return false;\n }\n formList.forEach((x) => {\n if (x.type !== 'blank' && x.keep !== true)\n switch (x.type) {\n case 'text':\n case 'textarea':\n case 'number':\n x.value = '';\n break;\n case 'date':\n x.value = '';\n break;\n case 'dic':\n x.value = '';\n x.showLabel = '';\n break;\n }\n });\n};\n\nconst crud = {\n fetchData,\n submit,\n fetchTable,\n save,\n update,\n search,\n searchNoFm,\n toNewPageSearch,\n insertResult,\n updateResult,\n removeResult,\n setEditValue,\n resetEditValue,\n checkForms,\n};\n\nexport { crud };\n","<!--\n * @title: table component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:32:30\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 18:08:00\n * @version: 1.0.9\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStorage } from '@/hook/web/useStorage';\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { useUserStore } from '@/store/modules/user';\n import { useBridgeI18n } from '@@/bridge';\n import { GvButton } from '@@/GvButton';\n import { GvDatePicker } from '@@/GvDatePicker';\n import { GvIcon } from '@@/GvIcon';\n import { GvInput } from '@@/GvInput';\n import { GvPopconfirm } from '@@/GvPopconfirm';\n import type { TPopoverPlacement } from '@@/GvPopover/src/types';\n import { GvTableBar } from '@@/GvTableBar';\n import GvTag from '@@/GvTag/src/GvTag.vue';\n import { debounce, hasClass, hasScrollbar, isEqual, toLine } from '@@/utils';\n import { crud } from '@@/utils/gv.crud';\n import { message } from '@@/utils/gv.notify';\n import { Operation, Refresh } from '@element-plus/icons-vue';\n import {\n ElButton,\n ElButtonGroup,\n ElCheckbox,\n ElDivider,\n ElPagination,\n ElPopover,\n ElRadio,\n ElRadioGroup,\n ElTable,\n ElTableColumn,\n ElTooltip,\n ElTree,\n useGlobalConfig,\n type ComponentSize,\n type TableColumnCtx,\n type TableInstance,\n } from 'element-plus';\n import { computed, defineComponent, getCurrentInstance, nextTick, onMounted, ref, unref, watch, type PropType, type VNode } from 'vue';\n import type { FilterCondition, PageInfo } from './types';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('table');\n /** 表头筛选 Popover:覆盖 EP 默认 150px,按内容自适应宽度 */\n const tableHeadFilterPopoverPopperStyle = {\n width: 'max-content',\n minWidth: '180px',\n maxWidth: 'min(420px, 90vw)',\n };\n export default defineComponent({\n name: 'GvTable',\n props: {\n refTable: {\n type: String,\n required: false,\n default: undefined,\n },\n tableHead: {\n type: Array as PropType<TableHeadItem[]>,\n required: true,\n default: () => [],\n },\n tableData: {\n type: Object as PropType<Recordable<any>>,\n required: false,\n default: () => {},\n },\n height: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n maxHeight: {\n type: [Number, String, undefined] as PropType<number | string | undefined>,\n required: false,\n default: undefined,\n },\n maxWidth: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n pageSize: {\n type: Number,\n required: false,\n default: 10,\n },\n rowClassName: {\n type: Function,\n required: false,\n default: () => {},\n },\n rowStyle: {\n type: Function,\n required: false,\n default: () => {},\n },\n spanMethod: {\n type: Function,\n required: false,\n default: () => {},\n },\n cellStyle: {\n type: Function,\n required: false,\n default: () => {},\n },\n // tableImport: {\n // type: Boolean,\n // required: false,\n // default: false\n // },\n // tableExport: {\n // type: Boolean,\n // required: false,\n // default: false\n // },\n tableType: {\n type: String,\n required: false,\n default: undefined,\n },\n tableSort: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n tableKit: {\n type: Boolean,\n required: false,\n default: undefined,\n },\n tableBar: {\n type: Boolean,\n required: false,\n default: true,\n },\n border: {\n type: Boolean,\n required: false,\n default: true,\n },\n tableFetch: {\n type: Function,\n required: false,\n default: () => {},\n },\n multi: {\n // 是否多选\n type: Boolean,\n required: false,\n default: false,\n },\n layout: {\n type: String,\n required: false,\n default: 'total, sizes, prev, pager, next, jumper',\n },\n isShowPage: {\n type: Boolean,\n required: false,\n default: true,\n },\n total: {\n type: Boolean,\n required: false,\n default: false,\n },\n size: {\n type: String as PropType<ComponentSize>,\n required: false,\n default: 'default',\n },\n tableInit: {\n type: Boolean,\n required: false,\n default: false,\n },\n beforeImport: {\n type: Function,\n required: false,\n default: undefined,\n },\n tableFilter: {\n type: Object,\n required: false,\n default: undefined,\n },\n tableCb: {\n type: Function,\n required: false,\n default: undefined,\n },\n expandRowKeys: {\n type: Array,\n required: false,\n default: undefined,\n },\n limitHeight: {\n type: Boolean,\n required: false,\n default: true,\n },\n tableAction: {\n type: String,\n required: false,\n default: 'left',\n },\n tableActionIcon: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n emits: ['row-dblclick'],\n // emit\n setup(props, { slots, expose, emit, attrs }) {\n // @data\n const appStore = useAppStore();\n const userStore = useUserStore();\n const { getStorage } = useStorage('localStorage');\n const instance = getCurrentInstance();\n let lang = 'zh-CN';\n const sTableAction = appStore.tableAction || props.tableAction;\n const sTableActionIcon = appStore.tableActionIcon;\n const sTableConfirm = appStore.buttonConfirm;\n const detailPlacement: TPopoverPlacement = sTableAction === 'left' ? 'right-start' : 'left-start';\n let sTableType = props.tableType;\n let originTableHead: TableHeadItem[] = props.tableHead;\n let tableHeads: TableHeadItem[] = [];\n const vref = 'gv-table-' + props.refTable;\n const { t } = useBridgeI18n();\n const globalSize = useGlobalConfig('size');\n\n const sHeight = props.height;\n const sMaxHeight = ref(props.maxHeight);\n const sMaxWidth = ref(props.maxWidth || '100%');\n const loading = ref(false);\n let isEditTable = false; // 是否是编辑列表\n const pageInfo = ref<PageInfo>({\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n });\n const filterConditions: FilterCondition[] = [];\n let sPageSize = props.pageSize;\n\n const resultData = ref(props.tableData);\n const recordsList = ref(props.tableData?.records || []);\n const pageSizes = [10, 20, 50, 100, 200, 500];\n let filterHeads: string[] = []; // 表头Q过滤列缓存\n const popoverVisible = ref({}); // popover筛选使用\n const exportBtnDisabled = ref(true); // 导出按钮disabled\n const exportBtnLoading = ref(false); // 导出按钮loading\n const importBtnLoading = ref(false); // 导入按钮loading\n const tableSortMode = ref(1); // 列表默认排序方式\n const exportDialogShow = ref(false); // 导出列弹出框\n const importDialogShow = ref(false); // 导入弹出框\n const sTableBar = ref(props.tableBar); // 是否显示tablebar\n const gTableBar = appStore.tableBar;\n const tableSearchShow = ref(false); // 是否带有table search框\n const sTableSort = ref(props.tableSort); // 是否显示排序模式框\n const sTableKit = ref(props.tableKit); // 是否显示工具按钮\n const showPopoverDetail = null;\n const pageLayout = ref(props.layout);\n let actionWidth: number = 0; // 操作列宽度\n let transHash: Recordable<string> | null = null; // 列表列缓存\n const headColumn = ref<VNode[]>([]); // 列表列\n const headColumnInit = ref<VNode[]>([]);\n\n const columnSums: string[] = []; // 合计列\n const columnSumsDecimal: number[] = []; // 合计列位数\n const isIndeterminate = ref([]); // 表头筛选全选\n\n let isAnchor = false; // 是否锚点中列表\n let isScrollbar = false; // 是否dialog中有滚动条\n let isEditContainer = false; // 是否是editContainer标签内\n const columnTreeList = ref([]); // 列表显示、排序数组\n const columnCheckedKeys = ref<string[]>([]); // 列表显示、排序选中数组\n const storageKey = props.refTable + '-' + userStore.loginAccount; // localStorage存储列表字段key\n let lsTableHeads = '';\n let debounceSearch;\n const tableRefs = ref<Record<string, TableInstance | null>>({}); // 表单实例引用,默认空对象\n const tableRef = ref<TableInstance | null>(null); // ElForm 元素引用\n\n // @computed\n const tableSize = computed<ComponentSize | undefined>(() => (props.size ?? unref(globalSize)) as ComponentSize);\n /**\n * @todo: pageinfo\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 11:15:00\n */\n const getPageInfo = computed((): PageInfo => {\n const pi: PageInfo = {\n currentpagenum: 1,\n recordsperpage: 10,\n countrows: 0,\n totalpage: 0,\n };\n if (resultData.value && resultData.value.records !== undefined) {\n pi['currentpagenum'] = resultData.value.current;\n pi['totalpage'] = resultData.value.pages;\n // if (this.sPageSize)\n // pi['size'] = this.sPageSize;\n // else\n pi['recordsperpage'] = resultData.value.size;\n pi['countrows'] = resultData.value.total;\n }\n return pi;\n });\n\n // @method\n\n const setTableRef = (el: TableInstance | null) => {\n tableRef.value = el;\n if (el && props.refTable) tableRefs.value[vref] = el;\n };\n\n const difference = (newVal, oldVal) => {\n let diff = false;\n for (const key in newVal)\n if (!isEqual(newVal[key], oldVal[key])) {\n diff = true;\n break;\n }\n\n return diff;\n };\n\n /**\n * @todo: close all filter popover\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 13:17:27\n * @param {*} property\n */\n const closeAllPopover = (property?: string) => {\n const next = { ...popoverVisible.value };\n Object.keys(next).forEach((key) => {\n if (key !== property) next[key] = false;\n });\n popoverVisible.value = next;\n };\n\n const ensurePopoverKey = (propKey: string) => {\n if (popoverVisible.value[propKey] === undefined) popoverVisible.value = { ...popoverVisible.value, [propKey]: false };\n };\n\n const handlePopoverWrapper = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n /** 阻止表头/表格事件冒泡,避免点击筛选面板内输入框时关闭 Popover */\n const wrapPopoverFilterBody = (body: VNode) => (\n <div\n class=\"table-popover__content\"\n onMousedown={(e: MouseEvent) => e.stopPropagation()}\n onClick={(e: MouseEvent) => e.stopPropagation()}>\n {body}\n </div>\n );\n const getScrollLeft = () => {\n closeAllPopover();\n };\n\n const startLoading = () => {\n loading.value = true;\n };\n const stopLoading = () => {\n loading.value = false;\n };\n\n /**\n * @todo: calculate max height\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 16:16:19\n * @param {*} rootEl\n */\n const getMaxHeight = (rootEl: HTMLElement | undefined) => {\n if (props.limitHeight)\n if (!isEditContainer)\n if (!isScrollbar)\n if (!isAnchor) {\n if (props.tableType !== 'detail')\n if (props.tableType === 'import') sMaxHeight.value = undefined;\n else if (props.maxHeight)\n // if (this.sTableType === 'expand')\n // this.sMaxHeight = undefined;\n // else\n sMaxHeight.value = props.maxHeight;\n else {\n // tab table\n // const tabPane = this.$el.closest('.el-tabs');\n const tabPane = rootEl?.closest('.el-tab-pane');\n // alert(tabPane.clientHeight);\n if (tabPane) {\n // const offsetTop = tabPane.classList.contains('el-tabs--left') ? 235 : 295;\n if (props.isShowPage) sMaxHeight.value = tabPane.clientHeight - 135;\n else sMaxHeight.value = tabPane.clientHeight - 85;\n // sMaxHeight = document.documentElement.clientHeight - tabPane.offsetTop - offsetTop;\n const dialog = rootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = rootEl?.closest('.gv-drawer');\n if (drawer)\n // sMaxHeight = sMaxHeight + 30;\n sMaxHeight.value = undefined;\n } else sMaxHeight.value = undefined; // sMaxHeight = sMaxHeight + 30;\n } else {\n // common table\n const dialog = rootEl?.closest('.gv-dialog');\n if (!dialog) {\n const drawer = rootEl?.closest('.gv-drawer');\n // console.log(document.documentElement.clientHeight);\n // console.log(rootEl?.offsetTop);\n if (!drawer) sMaxHeight.value = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 150;\n // console.log(sMaxHeight);\n } // dialog\n else sMaxHeight.value = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 265;\n }\n }\n } else sMaxHeight.value = undefined;\n else sMaxHeight.value = undefined;\n if (sMaxHeight.value && Number(sMaxHeight.value) < 150) sMaxHeight.value = undefined;\n };\n\n /**\n * @todo: trans records\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 11:33:48\n * @param {*} loadAction\n */\n const transRecords = (loadAction?: string) => {\n if (recordsList.value && recordsList.value.length > 0 && recordsList.value[0]['transHash']) {\n transHash = recordsList.value[0]['transHash'];\n recordsList.value.splice(0, 1);\n }\n // add: 增加查询回调方法 2022-11-23\n if (loadAction !== 'create' && props.tableCb) props.tableCb(recordsList.value, resultData.value);\n };\n\n /**\n * @todo: handle import btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 09:43:56\n */\n const handleImport = () => {\n if (props.beforeImport)\n if (props.beforeImport(props.refTable, tableHeads, props.tableData)) {\n importDialogShow.value = true;\n // 设置loading\n importBtnLoading.value = true;\n } else importDialogShow.value = false;\n else {\n importDialogShow.value = true;\n // 设置loading\n importBtnLoading.value = true;\n }\n };\n\n const handleExport = () => {\n exportDialogShow.value = true;\n // 设置loading\n exportBtnLoading.value = true;\n };\n\n /**\n * @todo: import btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-14 09:41:45\n */\n const getImportBtn = computed(() => {\n if (slots.import?.()) {\n let buttonName = t('tableBar.import');\n if (slots.import?.()[0].props?.['import-name']) buttonName = slots.import?.()[0].props?.['import-name'];\n const ref = 'gv-import-' + props.refTable;\n return (\n <GvButton\n bizType=\"import\"\n ref={ref}\n onClick={handleImport}\n loading={importBtnLoading.value}>\n {buttonName}\n </GvButton>\n );\n } else return null;\n });\n\n /**\n * @todo: get export btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 16:22:42\n * @param {*} computed\n */\n const getExportBtn = computed(() => {\n if (slots.export?.()) {\n let buttonName = t('common.export');\n if (slots.export?.()[0].props?.['export-name']) buttonName = slots.export?.()[0].props?.['export-name'];\n const ref = 'gv-export-' + props.refTable;\n return (\n <GvButton\n bizType=\"export\"\n ref={ref}\n onClick={handleExport}\n loading={exportBtnLoading.value}\n disabled={exportBtnDisabled.value}>\n {buttonName}\n </GvButton>\n );\n } else return null;\n });\n\n /**\n * @todo: change page size\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-22 17:24:46\n */\n const runPageSearch = async () => {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fetchFn: Fn = instance?.exposed?.fetch || props.tableFetch;\n if (!fetchFn) {\n message(t('table.execSearchWarn'));\n return;\n }\n const result = await crud.toNewPageSearch(instance, fC, fetchFn, pageInfo.value);\n if (result) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n };\n\n const handleSizeChange = async (val: number) => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n getMaxHeight(rootEl);\n pageInfo.value.recordsperpage = val;\n pageInfo.value.currentpagenum = 1;\n sPageSize = val;\n await runPageSearch();\n };\n\n const handleCurrentChange = async (val: number) => {\n pageInfo.value.currentpagenum = val;\n await runPageSearch();\n };\n\n /**\n * @todo: 查询输入框输入响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-19 15:18:03\n * @param {*} val\n */\n const handleTableSearchInput = (val) => {\n debounceSearch(val);\n };\n\n /**\n * @todo: search table input event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-26 22:06:01\n * @param {*} val\n */\n const handleTableSearch = async (val: string) => {\n const fh = {};\n let strFh = '';\n filterHeads.forEach((x: string) => {\n // fixme: 转换@为. 2022-07-20\n let y = x;\n if (y.indexOf('@') > 0) y = y.replace('@', '.');\n if (strFh === '') strFh = toLine(y);\n else strFh += ',' + toLine(y);\n });\n const v = val + '';\n fh['fields'] = strFh;\n fh['val'] = v.trim();\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n fC['searchfilter'] = fh;\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n if (!fetch) {\n message(t('table.execSearchWarn'));\n return;\n }\n\n // 拼接 过滤条件\n pageInfo.value.currentpagenum = 1;\n const result = await crud.toNewPageSearch(instance, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n };\n /**\n * @todo: 列表search框\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-30 17:24:09\n */\n const getTableSearch = () =>\n tableSearchShow.value === true ? (\n <div class=\"gv-table__search\">\n <GvInput\n id=\"gv-table-search\"\n placeholder={`${t('table.tableSearch')}(+)..`}\n prefixIcon=\"gv-icon-sousuo\"\n size=\"default\"\n class=\"gv-table__search-input\"\n onInput={handleTableSearchInput}></GvInput>\n </div>\n ) : null;\n\n /**\n * @todo: table head popover show\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-08 10:43:51\n */\n const handlePopoverShow = () => {\n nextTick(() => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n if (rootEl) {\n const popOvers = document.querySelectorAll('body>.table-popover');\n const tableBodyWidth = (rootEl.querySelector('.el-table__body-wrapper >.el-table__body') as HTMLElement)?.style.width;\n const clientWidth = document.body.clientWidth - 200 - 20;\n for (let i = 0; i < popOvers.length; i++)\n if ((popOvers[i] as HTMLElement).style.display !== 'none') {\n const bodyWrapper = rootEl.querySelector('.el-table__body-wrapper') as HTMLElement;\n if (bodyWrapper?.scrollLeft ?? 0)\n (popOvers[i] as HTMLElement).style.left = parseInt(tableBodyWidth) - clientWidth + parseInt((popOvers[i] as HTMLElement).style.left) - (bodyWrapper?.scrollLeft ?? 0) + 'px';\n else (popOvers[i] as HTMLElement).style.left = parseInt((popOvers[i] as HTMLElement).style.left) - (bodyWrapper?.scrollLeft ?? 0) + 'px';\n }\n }\n });\n };\n const handlePopoverHide = () => {\n // this.popoverVisible[prop] = false;\n };\n\n /**\n * @todo: 列选中状态切换\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:44:01\n * @param {*} columns\n * @param {*} checkedKeys\n */\n const createChangedColumns = (columns, checkedKeys) =>\n columns.map((column) => {\n const target = { ...column };\n if (target.type !== 'action' && target.type !== 'expand') target.hasHidden = !checkedKeys.includes(target.prop);\n return target;\n });\n\n /**\n * @todo: 列顺序和选中方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:43:09\n * @param {*} data\n * @param {*} checked\n * @param {*} childChecked\n */\n const handleColumnCheckChange = (data, checked, childChecked) => {\n const checkedKeys = this.$refs['gv-table-column-tree'].$children[0].getCheckedKeys();\n const hColumns = createChangedColumns(tableHeads, checkedKeys);\n // console.log(hColumns);\n headColumn.value = getTableColumn('recreate', hColumns);\n // 存储到 localStorage\n setStoreLocal(checkedKeys, checked, data);\n };\n\n /**\n * @todo: table refresh btn\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:45:55\n */\n const handleTableRefresh = async () => {\n // 判断search框中是否有值\n const el = instance?.vnode?.el as HTMLElement | undefined;\n if (el) {\n const inputSearch = el.querySelector('.gv-table__search-input .el-input__inner');\n if (inputSearch && inputSearch.value !== undefined && inputSearch.value !== null && inputSearch.value !== '') {\n inputSearch.value = '';\n handleTableSearch('');\n } else {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n // 拼接 过滤条件\n pageInfo.value.currentpagenum = 1;\n const result = await crud.toNewPageSearch(instance, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n }\n }\n };\n\n /**\n * @todo: tablebar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 11:21:41\n */\n const getTableBar = () => {\n const btns: any[] = [];\n const defaultSlots = slots.default?.();\n if (defaultSlots && defaultSlots.length > 0)\n defaultSlots.forEach((x: VNode) => {\n // add table btn bar\n if (typeof x.type === 'object' && x.type !== null && 'name' in x.type && x.type.name === 'GvButton') btns.push(x);\n });\n // export btn\n const exportSlots = slots.export?.();\n if (exportSlots && exportSlots.length > 0)\n exportSlots.forEach(() => {\n btns.push(getExportBtn.value);\n });\n\n // import btn\n const importSlots = slots.import?.();\n if (importSlots && importSlots.length > 0)\n importSlots.forEach(() => {\n btns.push(getImportBtn.value);\n });\n\n // console.log(btns);\n return btns;\n };\n\n /**\n * @todo: get kit bar\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:41:30\n */\n const getKitBar = () => {\n let isVisible = true;\n if (sTableKit.value !== undefined) isVisible = sTableKit.value;\n if (props.tableType === 'import' || props.tableType === 'detail' || props.tableType === 'expand' || props.tableType === 'export') isVisible = false;\n // 行编辑去掉隐藏列功能\n if (isEditTable === true) isVisible = false;\n return isVisible === true ? (\n <div class=\"gv-table__kitbar\">\n <ElButtonGroup>\n <ElButton\n style=\"width: 37px\"\n size={tableSize.value}\n icon={Refresh}\n onClick={handleTableRefresh}\n />\n <ElPopover\n placement=\"bottom-end\"\n width=\"150\"\n trigger=\"click\">\n {{\n reference: () => (\n <ElButton\n size={tableSize.value}\n style={{ width: '37px' }}\n icon={Operation}\n />\n ),\n default: () => (\n <ElTree\n ref=\"gv-table-column-tree\"\n node-key=\"columnProp\"\n tree-data={columnTreeList}\n check-on-click-node={true}\n default-checked-keys={columnCheckedKeys.value}\n show-checkbox\n draggable\n on-check-change={handleColumnCheckChange}\n style={{ maxHeight: '450px', overflow: 'hidden auto' }}\n class=\"gv-table-column-tree\"\n />\n ),\n }}\n </ElPopover>\n </ElButtonGroup>\n </div>\n ) : null;\n };\n\n /**\n * @todo: sort mode\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 11:17:36\n */\n const getSortModel = () => {\n let isVisible = true;\n if (sTableSort.value !== undefined) isVisible = sTableSort.value;\n else isVisible = props.tableType !== 'import';\n return isVisible === true ? (\n <div\n class=\"gv-table__sortmode\"\n style={{ marginRight: `${tableSearchShow.value === true ? '10px' : '0'}` }}>\n <i class=\"iconfont gv-icon-paixu2\" />\n <ElRadioGroup\n modelValue={tableSortMode.value}\n onUpdate:modelValue={(val: number) => {\n tableSortMode.value = val;\n }}\n ref=\"gv-table-sortmode\">\n <ElRadio value={1}>{t('common.currentPage')}</ElRadio>\n <ElRadio\n value={2}\n disabled={pageInfo.value?.totalpage === 1}>\n {t('common.all')}\n </ElRadio>\n </ElRadioGroup>\n </div>\n ) : null;\n };\n\n /**\n * @todo: column filter handler\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:27:41\n * @param {*} e\n * @param {*} propField\n * @param {*} type\n */\n const columnFilterHandler = async (e: MouseEvent, propField: string, type: string) => {\n const popoverHtml = e.target.closest('.table-popover');\n const inputHtml = popoverHtml.querySelector('.gv-input .el-input__inner');\n const checkList = popoverHtml.querySelectorAll('.el-checkbox');\n const dateHtmlArr = popoverHtml.querySelectorAll('.gv-datepicker .el-range-input');\n let filterValue = '';\n switch (type) {\n case 'text':\n case 'number':\n filterValue = inputHtml.value;\n if (filterValue.length === 0)\n // Notify.alert('请输入筛选内容', 'warning');\n return;\n\n break;\n case 'date':\n filterValue = dateHtmlArr[0].value + '|' + dateHtmlArr[1].value;\n break;\n case 'dic':\n if (checkList !== null)\n for (const check of checkList)\n if (hasClass(check, 'is-checked'))\n if (check.innerText !== t('common.checkAll'))\n filterValue = filterValue !== '' ? filterValue + '|' + check.querySelector('.el-checkbox__original').value : check.querySelector('.el-checkbox__original').value;\n\n break;\n }\n if (filterValue.length === 0 || filterValue === '|') {\n message(t('table.columnFilterWarn'));\n return;\n }\n\n if (type === 'date') {\n const pattern = /\\d{4}-\\d{2}-\\d{2}\\\\|\\d{4}-\\d{2}-\\d{2}/;\n if (!pattern.test(filterValue)) {\n message(t('table.columnFilterDateWarn'));\n return;\n }\n }\n\n if (propField !== null) {\n const fh = {};\n fh[toLine(propField.replace('@', '.')) + '|' + type] = filterValue;\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n fC.value['headfilter'] = Object.assign(fC.value['headfilter'] || {}, fh);\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n // 隐藏popover\n popoverVisible.value[propField] = false;\n document.body.click();\n // 拼接 过滤条件\n const result = await crud.toNewPageSearch(this, fC, fetch, pageInfo.value);\n if (result && result.records) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n // 标识筛选列\n const tableHeader = this.$el.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const columns = tableHeader.querySelectorAll('.el-table__cell');\n const len = columns.length;\n for (let i = 0; i < len; i++) {\n const h = columns[i].querySelector('.render__header');\n if (h && h.children[0] && h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.add('is-selected');\n }\n // 标识筛选列(带fix)\n const tableFixHeader = this.$el.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n if (tableFixHeader !== null) {\n const fixColumns = tableFixHeader.querySelectorAll('.el-table__cell');\n if (fixColumns !== null) {\n const fixLen = fixColumns.length;\n for (let i = 0; i < fixLen; i++) {\n const h = fixColumns[i].querySelector('.render__header');\n if (h && h.children[0] && h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.add('is-selected');\n }\n }\n }\n }\n };\n /**\n * @todo: 列表头筛选重置\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-20 10:05:08\n * @param {*} e\n */\n const columnFilterHandlerReset = async (e: MouseEvent, propField: string, type: stringType) => {\n const popoverHtml = e.target.closest('.table-popover');\n const inputHtml = popoverHtml.querySelector('.gv-input .el-input__inner');\n const checkList = popoverHtml.querySelectorAll('.el-checkbox');\n const dateHtmlArr = popoverHtml.querySelectorAll('.gv-datepicker .el-range-input');\n switch (type) {\n case 'text':\n case 'number':\n inputHtml.value = '';\n break;\n case 'date':\n dateHtmlArr[0].value = '';\n dateHtmlArr[1].value = '';\n break;\n case 'dic':\n if (checkList !== null)\n for (const check of checkList)\n if (hasClass(check, 'is-checked')) {\n // check.classList.remove('is-checked');\n check.querySelector('.el-checkbox__original').checked = false;\n check.querySelector('.el-checkbox__input').classList.remove('is-checked');\n }\n\n break;\n }\n\n if (propField !== null) {\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fh = fC.value['headfilter'];\n if (fh !== undefined && fh != null) delete fh[toLine(propField.replace('@', '.')) + '|' + type];\n\n fC.value['headfilter'] = Object.assign(fC.value['headfilter'] || {}, fh);\n\n const fetch: Fn = instance?.exposed?.fetch || props.tableFetch;\n\n // 隐藏popover\n popoverVisible.value[propField] = false;\n document.body.click();\n\n if (type !== 'date') {\n const primaryBtn = popoverHtml.querySelector('.el-button--primary');\n primaryBtn.setAttribute('disabled', 'disabled');\n primaryBtn.classList.add('is-disabled');\n }\n\n // 拼接 过滤条件\n const result = await crud.toNewPageSearch(this, fC, fetch, pageInfo.value);\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n // 标识筛选列\n const tableHeader = this.$el.querySelector('.gv-table .el-table__header-wrapper .el-table__header');\n const columns = tableHeader.querySelectorAll('.el-table__cell');\n const len = columns.length;\n for (let i = 0; i < len; i++) {\n const h = columns[i].querySelector('.render__header');\n if (h) if (h.children[0]) if (h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.remove('is-selected');\n }\n const tableFixedHeader = this.$el.querySelector('.gv-table .el-table__fixed-header-wrapper .el-table__header');\n // fixed: 解决列表没有锁定列时报错问题 2023-10-07\n if (tableFixedHeader) {\n const columnsFixed = tableFixedHeader.querySelectorAll('.el-table__cell');\n const lenFixed = columnsFixed.length;\n for (let i = 0; i < lenFixed; i++) {\n const h = columnsFixed[i].querySelector('.render__header');\n if (h) if (h.children[0]) if (h.children[0].getAttribute('columnprop') === propField) h.children[0].classList.remove('is-selected');\n }\n }\n }\n };\n\n /**\n * @todo: set column width by column name\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:12:01\n * @param {*} label\n * @param {*} query\n * @param {*} edit\n */\n const getColWidth = (label: string, query: boolean, edit: boolean) => {\n if (!label) return;\n let label2 = label;\n if (lang === 'en') label2 = label.toLowerCase();\n let sWidth = 0;\n if (label2.indexOf(t('table.date')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.month2')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.month')) !== -1) sWidth = 90;\n else if (label2.indexOf(t('table.time')) !== -1) sWidth = 130;\n else if (label2.indexOf(t('table.deliveryTime')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.name')) !== -1) sWidth = 120;\n else if (label2.indexOf(t('table.userAccount')) !== -1) sWidth = 120;\n else if (label === t('table.customerName')) sWidth = 115;\n else if (label2.indexOf(t('table.approve')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.audit')) !== -1) sWidth = 110;\n else if (label === t('table.operator')) sWidth = 110;\n else if (label2.indexOf(t('table.staff')) !== -1) sWidth = 100;\n else if (label.indexOf(t('table.whether')) !== -1) sWidth = 110;\n else if (label === t('table.enableStatus')) sWidth = 110;\n else if (label === t('table.orderStatus')) sWidth = 110;\n else if (label2 === t('table.status')) sWidth = 90;\n else if (label2.indexOf(t('table.status')) !== -1) sWidth = 90;\n else if (label === t('table.vin')) sWidth = 185;\n else if (label === t('table.carNo')) sWidth = 105;\n else if (label2.indexOf(t('table.phone')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.tel')) !== -1) sWidth = 110;\n else if (label === t('table.sex')) sWidth = 90;\n else if (label2.indexOf(t('table.type')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.amount')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.money')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.balance')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.unitPrice')) !== -1) sWidth = 95;\n else if (label2.indexOf(t('table.times')) !== -1) sWidth = 100;\n else if (label2.indexOf(t('table.number')) !== -1) sWidth = 140;\n else if (label2.indexOf(t('table.code')) !== -1) sWidth = 135;\n else if (label2.indexOf(t('table.odd')) !== -1) sWidth = 230;\n else if (label2.indexOf(t('table.unit')) !== -1) sWidth = 110;\n else if (label2.indexOf('省') !== -1) sWidth = 90;\n else if (label2.indexOf('市') !== -1) sWidth = 100;\n else if (label2.indexOf('区') !== -1) sWidth = 120;\n else if (label2.indexOf(t('table.color')) !== -1) sWidth = 115;\n else if (label2.indexOf(t('table.storageAge')) !== -1) sWidth = 105;\n else if (label2.indexOf(t('table.chassis')) !== -1) sWidth = 105;\n else if (label2.indexOf('排放标准') !== -1) sWidth = 115;\n else if (label2 === t('table.brand')) sWidth = 105;\n else if (label === t('table.series')) sWidth = 105;\n else if (label === t('table.strain')) sWidth = 105;\n else if (label === '运输方式') sWidth = 100;\n else if (label2.indexOf(t('table.rate')) !== -1) sWidth = 110;\n else if (label2.indexOf(t('table.level')) !== -1) sWidth = edit === true ? 140 : 115;\n // fixme: 增加表头query宽度判断 2022-04-30\n if (query === true && sWidth > 0) sWidth += 15;\n\n // fixme: 增加表头edit宽度判断 2022-06-11\n if (edit === true && sWidth > 0) sWidth += 20;\n return sWidth;\n };\n\n /**\n * @todo: table cell formatter\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:19:28\n * @param {*} row\n * @param {*} column\n * @param {*} cellValue\n * @param {*} index\n */\n const columnFormatter = (row, column, cellValue, index: number) => {\n // console.log(column);\n // console.log(cellValue);\n if (cellValue != null && cellValue.v !== undefined) return cellValue.v;\n else return cellValue === undefined ? '' : cellValue;\n };\n\n /**\n * @todo: table header search input change method\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-22 09:55:46\n * @param {string} val\n */\n const handleColumnFilter = (val: string) => {\n const popoverHtmlList = Array.from(document.body.querySelectorAll<HTMLElement>('body>.table-popover'));\n let popoverHtml: HTMLElement | undefined;\n for (const pop of popoverHtmlList)\n if (pop.style.display !== 'none') {\n popoverHtml = pop;\n break;\n }\n if (!popoverHtml) return;\n const primaryBtn = popoverHtml.querySelector<HTMLElement>('.el-button--primary');\n if (!primaryBtn) return;\n if (val !== undefined && val !== null && val !== '') {\n primaryBtn.removeAttribute('disabled');\n primaryBtn.classList.remove('is-disabled');\n } else {\n primaryBtn.setAttribute('disabled', 'disabled');\n primaryBtn.classList.add('is-disabled');\n }\n };\n /**\n * @todo: set header filter\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:23:58\n * @param {string} type\n * @param {string} label\n * @param {string} prop\n * @param {string} dicType\n * @param {string} filtercode\n */\n const renderHeadFilter = (type: string, label: string, prop: string, dicType: string | undefined, filtercode: string | undefined) => {\n let render: VNode | null = null;\n let fc = filtercode !== undefined ? filtercode : '';\n switch (type) {\n case 'text':\n case 'number':\n render = (\n <div>\n <GvInput\n placeholder={`${t('table.search')} - ${label}`}\n size={tableSize.value}\n onInput={handleColumnFilter}\n vref={prop}></GvInput>\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size={tableSize.value}\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size={tableSize.value}\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n break;\n case 'date':\n render = (\n <div>\n <GvDatePicker\n placeholder={`${t('table.search')} - ${label}`}\n size={tableSize.value}\n type=\"daterange\"\n format={dicType}\n value-format={dicType}\n // onChange={handleColumnFilter}\n vref={prop}\n />\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size={tableSize.value}\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size={tableSize.value}\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n break;\n case 'dic':\n if (dicType) {\n let ret = [];\n const src = dicType.toLowerCase();\n let dictCache;\n if (this.$store && this.$store.getters) dictCache = this.$store.getters.dictCache[src];\n if (dicType !== 'xzqh' && dictCache) ret = dictCache;\n // 生成字典列表\n else if (dicType === 'xzqh') {\n if (label.indexOf('省') >= 0) fc = '0000$';\n // else if (label.indexOf('市') >= 0)\n // fc = '^[1-9][1-9][0-9][1-9]00$';\n // else if (label.indexOf('区') >= 0)\n // fc = '^[1-9][1-9][0-9][1-9][0-9][1-9]$';\n\n let dict;\n if (this.$store && this.$store.getters) dict = this.$store.getters.dictDivision;\n if (dict) {\n const cache = {};\n cache['key'] = 'xzqh';\n cache['dict'] = dict;\n this.$store.dispatch('user/addDictCache', cache);\n ret = dict;\n }\n } else {\n let dict;\n if (this.$store && this.$store.getters) dict = this.$store.getters.dict[src];\n if (dict) {\n const cache = {};\n cache['key'] = src;\n cache['dict'] = dict;\n this.$store.dispatch('user/addDictCache', cache);\n ret = dict;\n }\n }\n // 设置过滤\n let ret2 = ret;\n if (fc) {\n const reg = new RegExp(fc, 'i');\n ret2 = ret.filter((x) => reg.test(x.c));\n }\n // ret.map((x) => {\n // checkList.push(x.c);\n // });\n // console.log(checkList);\n // 最大显示100个\n if (ret2 && ret2.length !== undefined && ret2.length > 0) {\n ret2.splice(50);\n render = (\n <div>\n <div>\n <ElCheckbox\n checked={false}\n key=\"checkAll\"\n label={t('common.checkAll')}\n style={{ display: 'block' }}\n indeterminate={isIndeterminate[prop]}\n onChange={handleDictCheckAll}\n class=\"gv-checkbox\">\n {t('common.checkAll')}\n </ElCheckbox>\n <ElDivider style=\"margin: 5px 0px\" />\n {ret2.map((x) => (\n <ElCheckbox\n checked={false}\n key={x.c}\n label={x.c}\n style={{ display: 'block' }}\n onChange={handleDictCheck}\n class=\"gv-checkbox\">\n {lang === 'zh-CN' ? x.t : x.e}\n </ElCheckbox>\n ))}\n </div>\n <div class=\"popover-bottom\">\n <GvButton\n type=\"primary\"\n size={tableSize.value}\n disabled=\"true\"\n onClick={(e) => columnFilterHandler(e, prop, type)}>\n {t('table.search')}\n </GvButton>\n <GvButton\n size={tableSize.value}\n onClick={(e) => columnFilterHandlerReset(e, prop, type)}>\n {t('table.reset')}\n </GvButton>\n </div>\n </div>\n );\n } else render = null;\n } else render = null;\n\n break;\n }\n return render ? wrapPopoverFilterBody(render) : null;\n };\n\n /**\n * @todo: open popover\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-18 10:22:13\n * @param {*} type\n * @param {*} label\n * @param {*} prop\n * @param {*} dicType\n * @param {*} filtercode\n * @param {*} event\n */\n /** 点击表头筛选箭头:仅关闭其它列 Popover,开关由 ElPopover trigger=click + v-model 处理 */\n const handlePopoverSlotClick = (event: MouseEvent, prop: string) => {\n event?.stopPropagation();\n closeAllPopover(prop);\n };\n\n /**\n * @todo: render column item\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 14:37:55\n */\n const renderColumnItem = (item: TableHeadItem, index: number, loadAction: string | undefined, tableFixed: string | undefined) => {\n const {\n prop,\n label,\n fixed,\n width,\n minWidth = 135,\n align = 'left',\n formatter,\n type = 'text',\n dicType,\n query = false,\n render,\n edit = false,\n format,\n cellBlur,\n cellEnter,\n cellChange,\n hidden = false,\n hasHidden = false,\n filtercode,\n showLabel,\n dicRemote,\n isreload = true,\n cb,\n multiple = false,\n dateType = 'date',\n selectable,\n min,\n max,\n collapseTags = false, // 多选字典tag是否折叠\n showLabelProp, // 表选showLabel列\n columnFilter = true, // 表头是否带筛选\n multiLabel = '', // 多级表头\n heads, // 多级表头\n focus,\n } = item;\n let reserveSelection = false;\n if (selectable) reserveSelection = true;\n let sHidden = false;\n if (hidden === true) sHidden = true;\n if (hasHidden === true) sHidden = true;\n if (sHidden === true) return null;\n\n let sLabel = label;\n let sProp = prop;\n if (prop && prop.indexOf('@') > 0) sProp = prop.split('@')[1];\n const key = loadAction === 'create' ? Math.random() : sProp;\n\n let placement: TPopoverPlacement = 'bottom-start';\n if (index >= tableHeads.length - 2) placement = 'bottom-end';\n let sFixed = sTableType === 'expand' ? undefined : fixed;\n if (tableFixed === 'n') sFixed = undefined;\n if (sTableAction === 'right') sFixed = undefined;\n // console.log(sFixed);\n if (sFixed) sLabel = sLabel + '';\n if (query === true) {\n sLabel = sLabel + '(Q)';\n filterHeads.push(prop);\n tableSearchShow.value = true;\n }\n ensurePopoverKey(prop);\n const sortable = sTableType === 'expand' ? false : 'custom';\n\n let sWidth;\n if (width !== 'auto')\n if (width) sWidth = width;\n else sWidth = getColWidth(label, query, edit);\n if (isEditTable === false && edit === true) isEditTable = true;\n\n // 多级表头\n if (multiLabel && multiLabel !== '') {\n if (heads && Array.isArray(heads)) {\n const multiLabels: VNode[] = [];\n heads.forEach((x) => {\n const hType = x.type || 'text';\n let hSLabel = x.label;\n let hSProp = x.prop;\n if (x.prop && x.prop.indexOf('@') > 0) hSProp = x.prop.split('@')[1];\n const hKey = loadAction === 'create' ? Math.random() : hSProp;\n\n let hSFixed = sTableType === 'expand' ? undefined : x.fixed;\n if (tableFixed === 'n') hSFixed = undefined;\n // console.log(sFixed);\n if (hSFixed) hSLabel = hSLabel + '';\n if (x.query === true) {\n hSLabel = hSLabel + '(Q)';\n filterHeads.push(x.prop);\n tableSearchShow.value = true;\n }\n let hReserveSelection = false;\n if (x.selectable) hReserveSelection = true;\n // 初始化 列的筛选popover都是隐藏的\n ensurePopoverKey(x.prop);\n const hSortable = sTableType === 'expand' ? false : 'custom';\n\n let hSWidth;\n if (x.width !== 'auto')\n if (x.width) hSWidth = x.width;\n else hSWidth = getColWidth(x.label, x.query, x.edit);\n multiLabels.push(\n <ElTableColumn\n fixed={hSFixed}\n prop={hSProp}\n label={hSLabel}\n width={hSWidth}\n align={x.align}\n column-key={hSProp}\n key={hKey}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={hSortable}\n selectable={x.selectable}\n reserveSelection={hReserveSelection}\n header-align={x.align || 'left'}\n style={{ display: sHidden ? 'none' : '' }}\n sort-orders={['ascending', 'descending']}>\n {{\n header: () => (\n <div\n onClick={(e) => handlePopoverWrapper(e)}\n class=\"render__header\">\n <ElPopover\n visible={popoverVisible.value[x.prop]}\n onUpdate:visible={(val: boolean) => {\n popoverVisible.value = { ...popoverVisible.value, [x.prop]: val };\n }}\n trigger=\"click\"\n width=\"auto\"\n popperStyle={tableHeadFilterPopoverPopperStyle}\n showArrow={true}\n placement={placement}\n popperClass={`gv-popover table-popover table-popover-${props.refTable}`}\n onAfter-enter={handlePopoverShow}\n onAfter-leave={handlePopoverHide}>\n {{\n default: () => renderHeadFilter(hType, x.label, x.prop, x.dicType, x.filtercode),\n reference: () => (\n <div\n class=\"gv-table-header-filter\"\n onClick={(e) => handlePopoverSlotClick(e, x.prop)}>\n {hSLabel}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"></GvIcon>\n </div>\n ),\n }}\n </ElPopover>\n </div>\n ),\n }}\n </ElTableColumn>,\n );\n });\n return <ElTableColumn label={multiLabel + ''}>{multiLabels}</ElTableColumn>;\n }\n } else if (typeof render === 'function') {\n // 自定义字段 render\n let className = 'gv-cell__render';\n if (edit === true) className += ' gv-cell__isedit';\n return (\n <ElTableColumn\n // fixed = {fixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={key}\n column-key={sProp}\n show-overflow-tooltip={false}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}\n class-name={className}>\n {{\n default: (scope) => {\n const render1 = render(scope, sProp);\n return render1;\n },\n header: () => <div class=\"render__header\">{label}</div>,\n }}\n </ElTableColumn>\n );\n } else if (edit === true)\n return (\n <ElTableColumn\n style={{ display: sHidden ? 'none' : '' }}\n fixed={sFixed}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={key}\n column-key={sProp}\n show-overflow-tooltip={false}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n // filters={this.columnFilters}\n // filter-method={this.filterHandler}\n // filter-placement='bottom-start'\n class-name=\"gv-cell__isedit\">\n {{\n default: (scope) => {\n // if (this.renderMap[`${scope.$index}-${sProp}`] === undefined) {\n const render1 = renderRowEdit(\n scope,\n label,\n sProp,\n prop,\n type,\n dicType,\n format,\n cellBlur,\n cellEnter,\n filtercode,\n showLabel,\n dicRemote,\n isreload,\n cb,\n multiple,\n dateType,\n render,\n cellChange,\n min,\n max,\n collapseTags,\n showLabelProp,\n focus,\n );\n return render1;\n },\n header: () => <div class=\"render__header\">{label}</div>,\n }}\n </ElTableColumn>\n );\n else if (type === 'tag')\n // 设置tag\n return (\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n key={sProp}\n column-key={sProp}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}\n class-name=\"gv-cell__render\">\n {{\n default: (scope) =>\n scope.row[sProp] !== null && typeof scope.row[sProp] === 'object' ? (\n scope.row[sProp].v ? (\n <GvTag>{scope.row[sProp].v}</GvTag>\n ) : null\n ) : scope.row[sProp] ? (\n <GvTag>{scope.row[sProp]}</GvTag>\n ) : null,\n header: () => <div class=\"render__header\">{sLabel}</div>,\n }}\n </ElTableColumn>\n );\n else if (\n dicType !== 'company' &&\n dicType !== 'dept' &&\n dicType !== 'user' &&\n label.indexOf('市') === -1 &&\n label.indexOf('区县') === -1 &&\n label.indexOf('区/县') === -1 &&\n props.tableType !== 'list' &&\n props.tableType !== 'detail' &&\n props.tableType !== 'expand' &&\n props.tableType !== 'import'\n )\n if (columnFilter !== true)\n return (\n // add: af-table-column插件,计算列宽对于表头带有排序、(Q)等情况自适应列款不准确\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n column-key={sProp}\n key={key}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n selectable={selectable}\n reserveSelection={reserveSelection}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n >\n {{\n header: () => <div class=\"render__header\">{sLabel}</div>,\n }}\n </ElTableColumn>\n );\n else\n return (\n // add: af-table-column插件,计算列宽对于表头带有排序、(Q)等情况自适应列款不准确\n <ElTableColumn\n fixed={sFixed}\n style={{ display: sHidden ? 'none' : '' }}\n prop={sProp}\n label={sLabel}\n width={sWidth}\n align={align}\n column-key={sProp}\n key={key}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n selectable={selectable}\n reserveSelection={reserveSelection}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']} // null\n >\n {{\n header: () => (\n <div\n onClick={(e) => handlePopoverWrapper(e)}\n class=\"render__header\">\n <ElPopover\n visible={popoverVisible.value[prop]}\n onUpdate:visible={(val: boolean) => {\n popoverVisible.value = { ...popoverVisible.value, [prop]: val };\n }}\n trigger=\"click\"\n width=\"auto\"\n popperStyle={tableHeadFilterPopoverPopperStyle}\n showArrow={true}\n placement={placement}\n popperClass={`gv-popover table-popover table-popover-${props.refTable}`}\n onAfter-enter={handlePopoverShow}\n onAfter-leave={handlePopoverHide}>\n {{\n default: () => renderHeadFilter(type, label, prop, dicType, filtercode),\n reference: () => (\n <div\n class=\"gv-table-header-filter\"\n onClick={(e) => handlePopoverSlotClick(e, prop)}>\n {sLabel}\n <GvIcon\n iconType=\"el\"\n iconName=\"ArrowDown\"></GvIcon>\n </div>\n ),\n }}\n </ElPopover>\n </div>\n ),\n }}\n </ElTableColumn>\n );\n else\n return (\n <ElTableColumn\n fixed={sFixed}\n prop={sProp}\n style={{ display: sHidden ? 'none' : '' }}\n label={sLabel}\n width={sWidth}\n align={align}\n key={sProp}\n selectable={selectable}\n reserveSelection={reserveSelection}\n column-key={sProp}\n show-overflow-tooltip={true}\n formatter={formatter ? formatter(columnFormatter) : columnFormatter}\n min-width={minWidth}\n sortable={sortable}\n header-align={align || 'left'}\n sort-orders={['ascending', 'descending']}>\n {{\n header: () => <div class=\"render__header\">{props.tableType === 'list' ? sLabel : label}</div>,\n }}\n </ElTableColumn>\n );\n };\n\n /**\n * @todo: action column\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 14:08:55\n */\n const renderAction = (scope, content: string[], action: any[], render: Fn | undefined, confirmArr: boolean[], iconArr: string[]) => {\n let sContent = content;\n if (render) sContent = render(scope, content);\n return (\n <div class=\"flex\">\n {sContent.map((item: string, index: number) => {\n let x = item;\n let xx = 't';\n let disabled = false;\n if (item.indexOf('|') > 0) {\n const arr = item.split('|');\n x = arr[0];\n if (arr[1] === 'd') {\n xx = 't';\n disabled = true;\n // xx = arr[1];\n }\n }\n // console.log(item);\n let confirms = false;\n if (confirmArr) confirms = confirmArr[index];\n let detail = false;\n let icon = '';\n\n let actionType = '';\n if (x.indexOf(t('table.edit')) !== -1 || x.indexOf(t('table.modify')) !== -1 || x.indexOf(t('table.update')) !== -1) icon = 'el-icon-edit';\n else if (x.indexOf(t('table.delete')) !== -1 || x.indexOf(t('table.cancel')) !== -1) {\n icon = 'el-icon-delete';\n confirms = true;\n } else if (x.indexOf(t('table.add')) !== -1) icon = 'gv-icon-add';\n else if (x.indexOf(t('table.scheduling')) !== -1 || x.indexOf(t('table.production')) !== -1) icon = 'gv-icon-task';\n else if (x.indexOf(t('table.append')) !== -1) {\n actionType = '1';\n icon = 'gv-icon-baocun2';\n } else if (x.indexOf(t('table.disabled')) !== -1) {\n icon = 'gv-icon-tingyong';\n confirms = true;\n } else if (x.indexOf(t('table.cancel1')) !== -1) {\n icon = 'gv-icon-tingyong';\n confirms = true;\n } else if (x.indexOf(t('table.close')) !== -1) {\n icon = 'el-icon-circle-close';\n confirms = true;\n } else if (x.indexOf(t('table.detail')) !== -1) {\n icon = 'gv-icon-mingxi';\n detail = true;\n } else if (x.indexOf(t('table.logging')) !== -1) {\n icon = 'gv-icon-daiban';\n detail = true;\n } else if (x.indexOf(t('table.info')) !== -1 || x.indexOf(t('table.infos')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.view')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.message')) !== -1) icon = 'gv-icon-info';\n else if (x.indexOf(t('table.price')) !== -1) icon = 'gv-icon-jiage1';\n else if (x.indexOf(t('table.money')) !== -1) icon = 'gv-icon-jiage1';\n else if (x.indexOf(t('table.dispatch')) !== -1) icon = 'gv-icon-winfo-icon-zhipai';\n else if (x.indexOf(t('table.adjust')) !== -1) icon = 'gv-icon-wujiliandongdizhi';\n else if (x.indexOf(t('table.leaveFactory')) !== -1 || x.indexOf(t('table.delivery')) !== -1) icon = 'gv-icon-paichesonghuodan';\n else if (x.indexOf(t('table.quit')) !== -1 || x.indexOf(t('table.transfer')) !== -1) icon = 'gv-icon-zhipai';\n else if (x.indexOf(t('table.submit')) !== -1 || x.indexOf(t('table.report')) !== -1) icon = 'gv-icon-tijiao';\n else if (x.indexOf(t('table.download')) !== -1) icon = 'gv-icon-xiazai';\n else if (x.indexOf(t('table.upload')) !== -1) icon = 'gv-icon-fujian';\n else if (x.indexOf(t('table.notify')) !== -1) icon = 'gv-icon-huodong';\n else if (x.indexOf(t('table.send')) !== -1) icon = 'gv-icon-xiazaidaorumoban1x';\n else if (x.indexOf(t('table.freeze')) !== -1) icon = 'gv-icon-dongjie';\n else if (x.indexOf(t('table.apply')) !== -1) icon = 'gv-icon-biaoshilei_yuanchengshengji';\n else if (x.indexOf(t('table.unfreeze')) !== -1) icon = 'gv-icon-jiedong';\n else if (x.indexOf(t('table.qrcode')) !== -1) icon = 'gv-icon-erweima';\n else if (x.indexOf(t('table.build')) !== -1) icon = 'gv-icon-rocket';\n else if (x.indexOf(t('table.confirm')) !== -1) icon = 'gv-icon-tianshenpi';\n else if (x.indexOf(t('table.proxyPay')) !== -1) icon = 'gv-icon-bengchefenleijiageguanli';\n else if (x.indexOf(t('table.open')) !== -1) icon = 'gv-icon-addNode';\n else if (x.indexOf(t('table.audit')) !== -1) icon = 'gv-icon-shenpi2';\n else if (x.indexOf(t('table.top')) !== -1) icon = 'gv-icon-zhidingxian';\n else if (x.indexOf(t('table.publish')) !== -1) icon = 'gv-icon-fabu';\n else if (x.indexOf(t('table.withdraw')) !== -1) icon = 'gv-icon-fanhui5';\n else if (x.indexOf(t('table.cost')) !== -1) icon = 'gv-icon-yingshou';\n else if (x.indexOf(t('table.approve')) !== -1) icon = 'gv-icon-shenpi2';\n else if (x.indexOf(t('table.reject')) !== -1) icon = 'gv-icon-shenqingbohui';\n else if (x.indexOf(t('table.exec')) !== -1) icon = 'gv-icon-kaishi_yunhang';\n else if (x.indexOf(t('table.recover')) !== -1) icon = 'gv-icon-huifu1';\n else if (x.indexOf(t('table.dispose')) !== -1) icon = 'gv-icon-task';\n else if (x.indexOf(t('table.ok')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.select')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.lock')) !== -1) icon = 'el-icon-lock';\n else if (x.indexOf(t('table.unLock')) !== -1) icon = 'el-icon-unlock';\n else if (x.indexOf(t('table.enable')) !== -1) icon = 'gv-icon-yunhang';\n else if (x.indexOf(t('table.transmit')) !== -1) icon = 'gv-icon-xiada';\n else if (x.indexOf(t('table.putaway')) !== -1) icon = 'el-icon-top';\n else if (x.indexOf(t('table.soldOut')) !== -1) icon = 'el-icon-bottom';\n else if (x.indexOf(t('table.transferPeople')) !== -1) icon = 'gv-icon-zhuanpai1';\n else if (x.indexOf(t('table.copy')) !== -1) icon = 'el-icon-copy-document';\n else if (x.indexOf(t('table.followUp')) !== -1) icon = 'gv-icon-mingdangenjin';\n else if (x.indexOf(t('table.circleCheck')) !== -1) icon = 'gv-icon-huanjiance';\n else if (x.indexOf(t('table.completed')) !== -1) icon = 'gv-icon-xuanze';\n else if (x.indexOf(t('table.finished')) !== -1) icon = 'gv-icon-wangongguanli';\n else if (x.indexOf(t('table.beCompleted')) !== -1) icon = 'gv-icon-wangongqueren';\n else if (x.indexOf(t('table.openCard')) !== -1) icon = 'gv-icon-daka-copy';\n else if (x.indexOf(t('table.closeCard')) !== -1) icon = 'gv-icon-guanqia';\n else if (x.indexOf(t('table.clockIn')) !== -1) icon = 'gv-icon-qiandao';\n else if (x.indexOf(t('table.preview')) !== -1) icon = 'el-icon-view';\n else if (x.indexOf(t('table.replace')) !== -1) icon = 'gv-icon-tihuantupian';\n else if (x.indexOf(t('table.settlement')) !== -1) icon = 'gv-icon-eduguanli';\n else if (x.indexOf(t('table.inWarehouse')) !== -1) icon = 'gv-icon-caituiruku';\n else if (x.indexOf(t('table.save')) !== -1) {\n icon = 'gv-icon-baocun1';\n actionType = '1';\n } else icon = 'el-icon-document-copy';\n\n // added by andy.ten@tom.com 2024-08-14 增加自定义按钮icon\n if (iconArr && Array.isArray(iconArr) && iconArr.length > index && iconArr[index]) icon = iconArr[index];\n if (sTableActionIcon === false) icon = '';\n if (confirms === true)\n if (sTableConfirm === false)\n return icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n confirm('是否?').then(\n () => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }}></GvButton>\n </span>\n </div>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n confirm(`${t('table.isConfirm')} ${x} ${t('table.action')} ?`).then(\n () => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }}>\n {x}\n </GvButton>\n </span>\n </div>\n </ElTooltip>\n );\n else\n return (\n <GvPopconfirm\n title={`${t('table.isConfirm')} ${x} ${t('table.action')} ?`}\n onConfirm={() => {\n if (scope.lock === undefined || scope.lock === false) {\n if (loading.value === true) return;\n startLoading();\n scope.lock = true;\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n scope.lock = false;\n },\n () => {\n stopLoading();\n scope.lock = false;\n },\n );\n }\n }}>\n {{\n reference: () => (\n <div class=\"gv-table-action-trigger\">\n {icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}></GvButton>\n </span>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}>\n {x}\n </GvButton>\n </span>\n </ElTooltip>\n )}\n </div>\n ),\n }}\n </GvPopconfirm>\n );\n else if (detail === true)\n return (\n <ElPopover\n title={x}\n placement={detailPlacement}\n trigger=\"click\"\n showArrow={true}\n onAfter-enter={() => handleDetailPopoverShow(action, index, scope.row, scope.$index)}\n popperClass=\"gv-popconfirm\">\n {{\n reference: () => (\n <div class=\"gv-table-action-trigger\">\n {icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n icon={icon}\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}></GvButton>\n </span>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <span>\n <GvButton\n perms={item}\n text={x}\n size={tableSize.value}\n type=\"text\"\n disabled={disabled}\n onClick={() => {\n // event.stopPropagation();\n }}>\n {x}\n </GvButton>\n </span>\n </ElTooltip>\n )}\n </div>\n ),\n default: () => showPopoverDetail,\n }}\n </ElPopover>\n );\n else\n // action btn\n return icon ? (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n visible={xx === 't'}\n disabled={disabled}\n text={x}\n size={tableSize.value}\n onClick={() => {\n // event.preventDefault();\n // event.stopPropagation();\n if (actionType === '1') {\n if (checkEditRow(scope.$index))\n try {\n startLoading();\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n } else\n try {\n startLoading();\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n }}\n icon={icon}></GvButton>\n </span>\n </div>\n </ElTooltip>\n ) : (\n <ElTooltip\n content={x}\n effect=\"dark\"\n placement=\"top\"\n showAfter={1000}>\n <div class=\"gv-table-action-trigger\">\n <span>\n <GvButton\n perms={item}\n visible={xx === 't'}\n disabled={disabled}\n text={x}\n size={tableSize.value}\n type=\"text\"\n onClick={() => {\n // event.preventDefault();\n // event.stopPropagation();\n startLoading();\n if (actionType === '1') {\n if (checkEditRow(scope.$index))\n try {\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n } else\n try {\n action[index](scope.row, scope.$index).then(\n () => {\n stopLoading();\n },\n () => {\n stopLoading();\n },\n );\n } catch {\n stopLoading();\n }\n }}>\n {x}\n </GvButton>\n </span>\n </div>\n </ElTooltip>\n );\n })}\n </div>\n );\n };\n\n /**\n * @todo: get table header columns\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-15 12:03:16\n * @param {*} loadAction\n * @param {*} tableColumns\n */\n const getTableColumn = (loadAction?: string, tableColumns?: TableHeadItem[]) => {\n const res: VNode[] = [];\n tableHeads = loadAction === 'recreate' ? tableColumns! : props.tableHead;\n // 从localStorage中获取已保存的列表显示信息\n if (loadAction === 'create') {\n lsTableHeads = getStorage(storageKey);\n if (lsTableHeads) {\n const thd: TableHeadItem[] = [];\n const lsTableHeadsArr = lsTableHeads.split(',');\n let startIndex = 0;\n if (tableHeads[0].type === 'expand') {\n thd[0] = { ...tableHeads[0] } as TableHeadItem;\n startIndex = 0;\n if (tableHeads[1].type === 'action') thd[1] = { ...tableHeads[1] } as TableHeadItem;\n startIndex = 1;\n } else if (tableHeads[0].type === 'action') {\n startIndex = 0;\n thd[0] = { ...tableHeads[0] } as TableHeadItem;\n }\n\n lsTableHeadsArr.forEach((x: string, index: number) => {\n const xx = x.split('|');\n const ff = tableHeads.filter((f) => f.prop === xx[0]);\n if (ff.length > 0) {\n if (ff[0].hidden !== true) {\n ff[0].hasHidden = xx[1] === 't';\n const treeNode = {\n columnProp: ff[0].prop,\n label: ff[0].label,\n };\n if (loadAction === 'create') {\n (columnTreeList.value as any[]).push(treeNode);\n if (ff[0].hasHidden !== true && xx[1] !== 't') columnCheckedKeys.value.push(ff[0].prop);\n }\n }\n thd[index + startIndex] = { ...ff[0] };\n }\n });\n tableHeads = thd;\n }\n }\n\n // 第一列为序号列\n // let fixed = this.tableType !== 'detail';\n let fixed: string | undefined = sTableAction;\n if (tableHeads[0].type === 'expand') {\n fixed = undefined as unknown as string;\n sTableType = 'expand';\n }\n\n if (sTableType === 'expand') fixed = undefined as unknown as string;\n // 如果是edit多选列表,则去掉列锁定\n let tableFixed = 'y';\n if (tableHeads.some((x) => x.multiple === true)) {\n tableFixed = 'n';\n fixed = undefined;\n }\n\n if (props.multi === true) {\n fixed = undefined;\n tableFixed = 'n';\n }\n\n // 添加展开列\n if (tableHeads[0].type === 'expand')\n res.push(\n <ElTableColumn\n type=\"expand\"\n key=\"expand\"\n column-key=\"expand\"\n prop=\"expand\"\n width=\"42\"\n fixed={fixed}>\n {{ default: (scope: any) => tableHeads[0].render?.(scope) }}\n </ElTableColumn>,\n );\n let rownumWidth = '55';\n if (pageInfo.value?.currentpagenum)\n if (pageInfo.value.currentpagenum * pageInfo.value.totalpage > 10000) rownumWidth = '65';\n else if (pageInfo.value.currentpagenum * pageInfo.value.totalpage > 1000) rownumWidth = '57';\n\n if (fixed === 'left')\n res.push(\n <ElTableColumn\n fixed={fixed}\n // prop='rownums'\n key=\"rownums\"\n column-key=\"rownums\"\n label={t('table.rownums')}\n width={rownumWidth}\n min-width={rownumWidth}>\n {{\n default: (scope) => {\n // console.log(this.pageInfo.current);\n // console.log((this.pageInfo.current === -1 ? 0 : this.pageInfo.current - 1) * (this.pageInfo.size === -1 ? 0 : this.pageInfo.size));\n if (pageInfo.value?.currentpagenum) return (pageInfo.value.currentpagenum === -1 ? 0 : pageInfo.value.currentpagenum - 1) * pageInfo.value.totalpage + scope.$index + 1;\n else return scope.$index + 1;\n },\n }}\n </ElTableColumn>,\n );\n else\n res.push(\n <ElTableColumn\n // prop='rownums'\n key=\"rownums\"\n column-key=\"rownums\"\n label={t('table.rownums')}\n width={rownumWidth}\n min-width={rownumWidth}>\n {{\n default: (scope) => {\n if (pageInfo.value?.currentpagenum) return (pageInfo.value.currentpagenum === -1 ? 0 : pageInfo.value.currentpagenum - 1) * pageInfo.value.totalpage + scope.$index + 1;\n else return scope.$index + 1;\n },\n }}\n </ElTableColumn>,\n );\n // add: 第二列判断是否是多选框 2022-06-11\n if (props.multi === true)\n if (fixed === 'left')\n res.push(\n <ElTableColumn\n fixed=\"left\"\n prop=\"multi\"\n key=\"multi\"\n type=\"selection\"\n width=\"35\"></ElTableColumn>,\n );\n else\n res.push(\n <ElTableColumn\n prop=\"multi\"\n key=\"multi\"\n type=\"selection\"\n width=\"35\"></ElTableColumn>,\n );\n\n const actionHead = tableHeads.filter((x) => x.type === 'action');\n if (sTableAction === 'left')\n if (actionHead.length > 0) {\n const content = actionHead[0].content || [];\n const action = actionHead[0].action || [];\n const render = actionHead[0].render;\n const confirmArr = actionHead[0].confirm || [];\n const icon = actionHead[0].icon || [];\n if (actionHead[0].width) actionWidth = +actionHead[0].width;\n else if (sTableActionIcon === true)\n if (content.length === 1)\n // update: 对于只有一个按钮的操作列,设置固定宽度 2022-07-13\n actionWidth = 52;\n else actionWidth = content.length === 2 ? content.length * 44 : content.length * 42;\n else if (content.length === 1) actionWidth = content.join('').length * 30;\n else if (lang === 'zh_CN') actionWidth = content.join('').length * 25;\n else actionWidth = content.join('').length * 13;\n\n const actionColumn = (\n <ElTableColumn\n label={t('table.action')}\n key=\"caozuo\"\n column-key=\"caozuo\"\n prop=\"caozuo\"\n fixed={fixed}\n width={actionWidth}>\n {{ default: (scope: any) => renderAction(scope, content, action, render, confirmArr, icon) }}\n </ElTableColumn>\n );\n res.push(actionColumn);\n }\n\n filterHeads = [];\n tableHeads.forEach((item: TableHeadItem, index: number) => {\n if (item.type !== 'expand' && item.type !== 'action') {\n const columnVNode = renderColumnItem(item, index, loadAction, tableFixed);\n if (columnVNode) res.push(columnVNode);\n if (!lsTableHeads && loadAction === 'create')\n if (item.hidden !== true) {\n const treeNode = {\n columnProp: item.prop,\n label: item.label,\n };\n (columnTreeList.value as any[]).push(treeNode);\n columnCheckedKeys.value.push(item.prop);\n }\n }\n\n // this.$set(this.tableHead, index, item);\n // if (loadAction === 'create')\n // this.$set(this.resultData, index, item);\n });\n if (sTableAction === 'right')\n if (actionHead.length > 0) {\n const content = actionHead[0].content || [];\n const action = actionHead[0].action || [];\n const render = actionHead[0].render;\n const confirmArr = actionHead[0].confirm || [];\n const icon = actionHead[0].icon || [];\n if (actionHead[0].width) actionWidth = +actionHead[0].width;\n else if (sTableActionIcon === true)\n if (content.length === 1)\n // update: 对于只有一个按钮的操作列,设置固定宽度 2022-07-13\n actionWidth = 52;\n else actionWidth = content.length === 2 ? content.length * 44 : content.length * 42;\n else if (content.length === 1)\n if (lang === 'zh_CN') actionWidth = content.join('').length * 30;\n else actionWidth = content.join('').length * 18;\n else if (lang === 'zh_CN') actionWidth = content.join('').length * 25;\n else actionWidth = content.join('').length * 13;\n\n const actionColumn = (\n <ElTableColumn\n label={t('table.action')}\n key=\"caozuo\"\n column-key=\"caozuo\"\n prop=\"caozuo\"\n fixed={fixed}\n width={actionWidth}>\n {{ default: (scope: any) => renderAction(scope, content, action, render, confirmArr, icon) }}\n </ElTableColumn>\n );\n res.push(actionColumn);\n }\n\n // this.setDataLoaded(false);\n return res;\n };\n\n /**\n * @todo: table sort\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-25 17:45:10\n */\n const sortMethod = async ({ column, prop, order }: { column: Recordable<any>; prop: string | null; order: 'ascending' | 'descending' | null }) => {\n const fieldName = prop || column?.property;\n const sortingType = order ?? column?.order ?? null;\n if (tableSortMode.value === 1) {\n // 本页排序\n let sumData = {}; // 放置总计一行数据\n recordsList.value.forEach((item) => {\n if (item.name === t('common.total')) sumData = item;\n });\n if (sortingType === null)\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a['rownums'];\n let row2 = b['rownums'];\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row1 - row2;\n else return row1.toString().localeCompare(row2.toString());\n });\n else if (sortingType === 'ascending' || sortingType === null) {\n // 正序\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a[fieldName] || '';\n let row2 = b[fieldName] || '';\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row1 - row2;\n else return row1.toString().localeCompare(row2.toString());\n });\n // 删除table中的总计\n recordsList.value.forEach((item, index) => {\n if (item.name === t('common.total')) recordsList.value.splice(index, 1);\n return item;\n });\n if (Object.keys(sumData).length > 0) recordsList.value.push(sumData);\n } else if (sortingType === 'descending') {\n // 倒序\n recordsList.value = recordsList.value.sort((a, b) => {\n let row1 = a[fieldName] || '';\n let row2 = b[fieldName] || '';\n // fixme: 增加判断是否是字典项 2022-06-20\n if (row1.v) row1 = row1.v;\n\n if (row2.v) row2 = row2.v;\n if (!isNaN(Number(row1)) && !isNaN(Number(row2))) return row2 - row1;\n else return row2.toString().localeCompare(row1.toString());\n });\n recordsList.value.map((item, index) => {\n if (item.name === t('common.aggregate')) recordsList.value.splice(index, 1);\n return item;\n });\n if (Object.keys(sumData).length > 0) recordsList.value.push(sumData);\n }\n } else {\n // 后端排序\n const fC = (instance?.exposed?.filterConditions as Recordable<any>) || filterConditions || {};\n const fetchFn = (instance?.exposed?.fetch as Fn) || props.tableFetch;\n if (!fetchFn) {\n message(t('table.execSearchWarn'));\n return;\n }\n const oi: Recordable<string> = {};\n\n oi['orderfilter'] = fieldName;\n oi['ordertype'] = sortingType === 'ascending' ? 'asc' : 'desc';\n fC['orderinfo'] = oi;\n const result = await crud.toNewPageSearch(instance, fC, fetchFn, pageInfo.value);\n if (result) {\n resultData.value = result;\n recordsList.value = result.records;\n transRecords();\n }\n }\n\n // 隐藏popover\n popoverVisible.value[fieldName] = false;\n document.body.click();\n };\n\n /**\n * @todo: row dblclick event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-06-08 11:15:41\n * @param {*} row\n * @param {*} column\n * @param {*} event\n */\n const rowDblClick = (row: Recordable<any>, column: TableColumnCtx<Recordable<any>> | null, event: MouseEvent) => {\n const target = event.target as HTMLElement | null;\n if (!target) return;\n // fixme: 屏蔽行中带有icon图标双击事件 2022-12-12\n if (target.tagName === 'I') return;\n else {\n const cell = target.closest('.el-table__cell');\n if (cell && hasClass(cell as HTMLElement, 'el-table__expand-column')) return;\n }\n if (isEditTable === false)\n if (typeof attrs.onRowDblclick === 'function') emit('row-dblclick', row, column, event);\n else {\n const tr = target.closest('.el-table__row');\n if (!tr) return;\n const tds = tr.children;\n let firstBtn: HTMLElement | null = null;\n for (let i = 0; i < tds.length; i++) {\n const btnArr = tds[i].querySelectorAll<HTMLElement>('.cell button.gv-button');\n for (let j = 0; j < btnArr.length; j++) {\n const btn = btnArr[j];\n // fixme: 解决隐藏按钮后双击仍然调用问题 2022-10-09\n if (btn && btn.style.display !== 'none') {\n firstBtn = btn;\n break;\n }\n }\n if (firstBtn) break;\n }\n firstBtn?.click();\n }\n };\n\n /**\n * @todo: 合并表格行或合并列方法\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-08-16 14:27:07\n */\n // const handleSpanMethod = (columnObj) => {\n // props.spanMethod(columnObj);\n // };\n\n // const getSummaries = (param) => {\n // const { columns, data } = param;\n // const sums = [];\n // columns.forEach((column, index) => {\n // if (column.columnKey === 'rownums') {\n // sums[index] = t('common.total');\n // return;\n // }\n // if (column.property === 'multi' || column.columnKey === 'caozuo' || column.columnKey === 'expand') return;\n // const keyIndex = columnSums.indexOf(column.property);\n // if (keyIndex !== -1) {\n // const values = data.map((item) => Number(item[column.property]));\n // if (!values.every((value) => isNaN(value))) {\n // sums[index] = values.reduce((prev, curr) => {\n // const value = Number(curr);\n // if (!isNaN(value)) return prev + curr;\n // else return prev;\n // }, 0);\n // const decimal = columnSumsDecimal[keyIndex];\n // sums[index] = amountFormat(sums[index], decimal);\n // sums[index] += '';\n // } else sums[index] = '';\n // } else return;\n // });\n // return sums;\n // };\n\n /**\n * @todo: 拖动表头改变列宽度响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2024-01-07 10:16:42\n * @param {*} newWidth\n * @param {*} oldWidth\n * @param {*} column\n * @param {*} event\n */\n // const headerDragend = (newWidth, oldWidth, column, event) => {\n // // fixed: 解决fix table 表头列宽度改变时fix列高度不正确问题 2024-01-07\n // nextTick(() => {\n // // fixCellH.style.height = cellH.offsetHeight;\n // this.$refs[this.vref].doLayout();\n // const fixCellH = this.$refs[this.vref].$el.querySelector('.el-table__fixed-header-wrapper>.el-table__header .el-table__cell');\n // const cellH = this.$refs[this.vref].$el.querySelector('.el-table__header-wrapper>.el-table__header .el-table__cell');\n // // console.log(cellH.offsetHeight);\n // fixCellH.style.height = cellH.offsetHeight + 'px';\n // // console.log(fixCellH.style.height);\n // });\n // });\n\n // @watch\n watch(\n () => props.tableHead,\n (newVal, prevVal) => {\n if (newVal.length !== prevVal.length) headColumn.value = getTableColumn();\n else {\n const res = difference(newVal, originTableHead);\n if (res === true) headColumn.value = getTableColumn();\n }\n },\n );\n watch(\n () => sMaxHeight.value,\n () => {\n if (props.tableType !== 'import')\n if (isScrollbar === false)\n if (isAnchor === false) {\n if (sHeight) sMaxHeight.value = sHeight;\n } else sMaxHeight.value = undefined;\n else sMaxHeight.value = undefined;\n },\n );\n watch(\n () => props.tableData,\n (newValue) => {\n resultData.value = newValue;\n },\n );\n\n watch(\n () => resultData.value,\n (newValue) => {\n if (newValue) {\n recordsList.value = newValue.records || newValue;\n // fixme: 解决无法获取结果集时报错问题 2022-06-05\n if (recordsList.value === undefined || recordsList.value.length === undefined) recordsList.value = [];\n if (recordsList.value.length > 0 && recordsList.value[0]['transHash']) {\n transHash = recordsList.value[0]['transHash'];\n recordsList.value.splice(0, 1);\n if (headColumn.value.length === 0) {\n tableHeads.forEach((x: TableHeadItem) => {\n let sProp = x.prop;\n if (sProp && sProp.indexOf('@') > 0) sProp = sProp.split('@')[1];\n if (props.total)\n if (x.sum === true) {\n columnSums.push(sProp);\n columnSumsDecimal.push(x.decimal ? x.decimal : 2);\n x.align = 'right';\n }\n\n const trans: string | undefined = transHash?.[sProp];\n if (trans) {\n const typeArr = trans.split('|');\n switch (typeArr[0]) {\n case 'company':\n x.dicType = 'company';\n break;\n case 'dept':\n x.dicType = 'dept';\n break;\n case 'user':\n x.dicType = 'user';\n break;\n case 'dic':\n x.type = 'dic';\n x.dicType = typeArr[1];\n break;\n case 'division':\n x.type = 'dic';\n x.dicType = 'xzqh';\n break;\n case 'date':\n x.type = 'date';\n x.dateType = typeArr[1];\n break;\n }\n }\n });\n headColumn.value = getTableColumn();\n }\n } else headColumn.value = getTableColumn();\n pageInfo.value = getPageInfo.value;\n // 设置排序方式\n if (pageInfo.value.totalpage > 1) tableSortMode.value = 2;\n else tableSortMode.value = 1;\n // 设置导出按钮状态\n if (recordsList.value && recordsList.value.length > 0) exportBtnDisabled.value = false;\n else exportBtnDisabled.value = true;\n\n // 加载状态\n // this.sDataLoaded = true;\n }\n nextTick(() => {\n // 重新计算\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n getMaxHeight(rootEl);\n\n // add: 增加查询回调方法 2022-11-23\n if (props.tableCb) props.tableCb(recordsList.value, resultData.value);\n tableRef.value?.doLayout();\n });\n },\n );\n\n // @exposed\n expose({\n setTableRef,\n fetch,\n startLoading,\n stopLoading,\n filterConditions,\n });\n\n // @created\n // get localStorage table column\n const loginLang = userStore.language;\n if (loginLang === 'en') lang = 'en';\n originTableHead = JSON.parse(JSON.stringify(props.tableHead));\n // fixme: 初始化时根据结果集赋值pagesize 解决后端设置pageSize后前端无法加载问题 2022-04-30\n // if (this.tableInit === true)\n if (Object.keys(props.tableData).length === 0) headColumnInit.value = getTableColumn('create');\n if (props.tableType === 'expand') {\n sTableSort.value = false;\n sTableBar.value = false;\n } else if (props.tableType === 'detail') headColumnInit.value = getTableColumn();\n if (props.tableData && props.tableData.size) {\n sPageSize = props.tableData.size;\n // 设置排序方式\n if (props.tableData.pages > 1) tableSortMode.value = 2;\n else tableSortMode.value = 1;\n }\n\n // 设置列表按钮以及右上角按钮的全局隐藏或显示\n if (gTableBar === false) {\n sTableSort.value = false;\n sTableKit.value = false;\n sTableBar.value = true;\n }\n\n // set pageSizes\n if (pageSizes.includes(sPageSize) === false) {\n pageSizes.splice(0, 0, sPageSize);\n pageSizes.sort(function (m, n) {\n if (m < n) return -1;\n else if (m > n) return 1;\n else return 0;\n });\n }\n\n if (props.tableType === 'detail') {\n // this.sMaxHeight = '200px';\n pageLayout.value = 'total, prev, pager, next';\n // 设置detail宽度\n sMaxWidth.value = '850px';\n } else if (props.tableType === 'expand') if (!sMaxWidth.value) sMaxWidth.value = '85%';\n // this.pageLayout = 'total, prev, pager, next';\n\n transRecords('create');\n\n // @mounted\n onMounted(() => {\n debounceSearch = debounce(handleTableSearch, 500);\n nextTick(() => {\n const rootEl = instance?.vnode?.el as HTMLElement | undefined;\n window.addEventListener('click', () => {\n closeAllPopover();\n });\n window.addEventListener('resize', () => getMaxHeight(rootEl));\n if (rootEl) {\n const tableBodyWrapper = rootEl.querySelector('.el-table__body-wrapper');\n if (tableBodyWrapper) tableBodyWrapper.addEventListener('scroll', getScrollLeft, false);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor = true;\n const dialogBody = rootEl.closest('.gv-drawer__body--inner');\n if (dialogBody) isScrollbar = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-edit__container')) isEditContainer = true;\n }\n });\n });\n\n // @render\n return () => {\n pageInfo.value = getPageInfo.value;\n return props.visible ? (\n <div\n class={props.tableType === 'expand' ? 'gv-table__container gv-table__container-expand' : 'gv-table__container'}\n style={{ width: '100%', minWidth: '0px', maxWidth: sMaxWidth.value }}>\n <GvTableBar visible={sTableBar.value}>{getTableBar()}</GvTableBar>\n {getKitBar()}\n {getTableSearch()}\n {getSortModel()}\n <div\n class=\"gv-table__loading-wrap\"\n v-loading={loading.value}\n element-loading-text=\"Loading...\">\n <ElTable\n ref={vref}\n // element-loading-spinner='iconfont gv-icon-loading'\n data={recordsList.value}\n border={props.tableType === 'detail' ? false : props.border}\n highlight-current-row={true}\n table-layout=\"fixed\"\n style=\"width: 100%\"\n height={sHeight}\n max-height={sMaxHeight.value}\n stripe={true}\n row-key={(row: any) => row.rownums}\n expand-row-keys={props.expandRowKeys}\n row-style={props.rowStyle}\n cell-style={props.cellStyle}\n header-cell-class-name=\"headerStyleEvent\"\n //span-method={handleSpanMethod}\n show-summary={props.total}\n // summary-method={getSummaries}\n // toggleRowSelection\n // on-row-class-name={props.rowClassName} // 设置行class的回调方法\n onSort-change={sortMethod}\n onRow-dblclick={rowDblClick} // 设置行双击事件方法\n // on-row-click={props.handleRowClick} // 设置行单击事件方法\n // on-selection-change={handleSelectionChange} // 设置多选行事件\n // on-expand-change={handleExpandChange} // 行展开异步加载方法\n // on-header-dragend={headerDragend} // 列拖宽度方法\n class={props.tableType === 'detail' ? 'gv-table-noborder' : props.border === true ? `${prefixCls}` : 'gv-table-noborder'}>\n {props.tableData && Object.keys(props.tableData).length > 0 ? headColumn.value : headColumnInit.value}\n </ElTable>\n </div>\n <ElPagination\n style={{ display: props.isShowPage ? '' : 'none' }}\n pageSizes={pageSizes}\n pageSize={pageInfo.value.recordsperpage}\n layout={pageLayout.value}\n total={pageInfo.value.countrows}\n currentPage={pageInfo.value.currentpagenum}\n hideOnSinglePage={true}\n onUpdate:page-size={handleSizeChange}\n onUpdate:current-page={handleCurrentChange}\n class=\"gv-pagination\"></ElPagination>\n </div>\n ) : null;\n };\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n .gv-table__container {\n width: 100%;\n height: calc(100% - 10em);\n margin-top: -2px;\n\n .gv-table__loading-wrap {\n position: relative;\n width: 100%;\n }\n .gv-table__sortmode {\n float: right;\n\n & i {\n padding-right: 15px;\n //font-size: 14px;\n }\n\n :deep(.el-radio) {\n margin-right: 12px;\n\n .el-radio__input {\n &.is-checked {\n .el-radio__inner {\n background: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n\n .el-radio__label {\n //font-size: $tableThFontSize;\n }\n\n .el-radio__input.is-checked + .el-radio__label {\n color: var(--primaryColor, $primaryColor);\n }\n }\n }\n\n .gv-table__kitbar {\n position: relative;\n float: right;\n width: 74px;\n height: 28px;\n margin: 1px 0 0 8px;\n line-height: 28px;\n\n .el-button-group {\n height: 26px;\n line-height: 26px;\n\n .el-button {\n padding: 6px 8px 5px;\n }\n }\n }\n\n .gv-table__search {\n position: relative;\n float: right;\n width: 160px;\n margin-top: 3px;\n\n :deep(.gv-table__search-input) {\n // top: -30px;\n float: right;\n width: 150px;\n .el-input__wrapper {\n height: 28px;\n line-height: 28px;\n }\n .el-input__inner {\n font-size: 12px;\n padding-left: 1px !important;\n }\n }\n }\n\n .gv-table {\n border-top: 1px solid $tableBorderColor;\n border-bottom: 0;\n border-left: 1px solid $tableBorderColor;\n\n :deep(.ascending .sort-caret.ascending) {\n border-bottom-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.descending .sort-caret.descending) {\n border-top-color: var(--primaryColorHover, $primaryColorHover);\n }\n\n :deep(.el-table__header-wrapper) {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight;\n line-height: 34px;\n background-color: $tableThBgColor;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 1px solid $tableBorderColor;\n\n .cell {\n padding-right: 3px;\n color: $textColor;\n font-weight: 500 !important;\n .render__header {\n font-weight: 500 !important;\n }\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .is-selected {\n .gv-table-header-filter {\n color: $primaryColor;\n }\n }\n\n .render__header {\n display: inline-flex;\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n :deep(.el-table__body-wrapper) {\n .el-table__body {\n .el-table__row.expanded {\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n\n .el-table__expanded-cell {\n padding: 4px 2px 10px 89px;\n }\n\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 0;\n\n // border-bottom:1px solid $tableBorderColor;\n\n .cell {\n // box-sizing: border-box;\n // display: inline-block;\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n\n .gv-tag {\n box-sizing: border-box;\n display: inline-block;\n height: 22px;\n padding: 0 5px;\n //font-size: $appTextSize;\n line-height: 22px;\n color: #409eff;\n white-space: nowrap;\n background-color: #ecf5ff;\n border: 1px solid #d9ecff;\n border-radius: 4px;\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: auto;\n padding: 0 5px;\n\n .gv-input {\n height: 25px;\n line-height: 25px;\n\n .el-input__inner {\n height: 25px;\n padding-left: 5px;\n line-height: 25px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-input-number {\n width: 120px;\n height: 25px;\n line-height: 25px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 25px;\n padding-left: 5px;\n line-height: 25px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n height: 25px;\n //font-size: $textSizeSecondary;\n line-height: 25px;\n\n .el-input__inner {\n height: 25px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 25px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n width: 100%;\n\n .el-input {\n // line-height: 28px;\n // height: 25px;\n\n // height: 28px;\n //font-size: $textSizeSecondary;\n\n // line-height: 25px;\n\n .el-input__inner {\n // height:26px !important;\n padding-right: 25px;\n padding-left: 25px;\n\n // line-height:26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n\n .el-select__tags {\n .el-tag {\n height: 22px;\n margin: 1px 0 1px 6px;\n }\n }\n }\n\n .gv-select__table {\n width: 100%;\n vertical-align: inherit !important;\n .el-input {\n // height: 25px;\n //font-size: $textSizeSecondary;\n\n // line-height: 25px;\n\n .el-input__inner {\n // height:26px;\n padding-right: 25px;\n padding-left: 25px;\n\n // line-height:26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n // &.current-row{\n // td.el-table__cell{\n // background-color: var(--defaultHover,$defaultHover);\n // }\n // }\n\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n }\n }\n\n :deep(.el-table__footer-wrapper) {\n .el-table__footer {\n .el-table__cell {\n padding: 2px 0;\n //font-size: $tableThFontSize;\n }\n }\n }\n\n :deep(.el-table__fixed),\n :deep(.el-table__fixed-right) {\n height: 100% !important;\n .el-table__fixed-header-wrapper {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight !important;\n line-height: 34px;\n background-color: $tableThBgColor;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 1px solid $tableBorderColor;\n\n .cell {\n height: 28px;\n font-weight: 500 !important;\n // display: inline-block; // flex\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .is-selected {\n .gv-table-header-filter {\n color: $primaryColor;\n }\n }\n\n .render__header {\n display: inline-block; // flex\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n\n .el-checkbox {\n .el-checkbox__input {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked,\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__fixed-body-wrapper {\n .el-table__body {\n .el-table__row.expanded {\n .el-table__cell {\n padding: 2px 0;\n border-bottom: 1px solid $tableBorderColor;\n }\n }\n\n .el-table__expanded-cell {\n padding: 2px;\n }\n\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n // box-sizing: border-box;\n padding: 2px 0;\n border-right: 1px solid $tableBorderColor;\n border-bottom: 0;\n\n .cell {\n // display: inline-block; // flex\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n // padding-left: 3px;\n .el-button {\n // margin-left: 5px;\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .gv-tag {\n box-sizing: border-box;\n\n // display: inline-block;\n height: 24px;\n padding: 0 5px;\n //font-size: $appTextSize;\n line-height: 24px;\n color: #409eff;\n white-space: nowrap;\n background-color: #ecf5ff;\n border: 1px solid #d9ecff;\n border-radius: 4px;\n }\n\n .el-checkbox {\n .el-checkbox__input {\n .el-checkbox__inner {\n &:hover {\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n\n &.is-checked,\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n // border-bottom: 1px solid $tableBorderColor;\n }\n }\n }\n }\n\n .el-table__fixed-footer-wrapper {\n .el-table__footer {\n .el-table__cell {\n padding: 2px 0;\n //font-size: $tableThFontSize;\n }\n }\n }\n }\n }\n\n .gv-table-noborder {\n :deep(.el-table__header-wrapper) {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight;\n line-height: 34px;\n\n .cell {\n height: 28px;\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n font-weight: 500 !important;\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .render__header {\n display: inline-flex;\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n :deep(.el-table__body-wrapper) {\n .el-table__body {\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n\n // border-bottom:1px solid $tableBorderColor;\n\n .cell {\n // box-sizing: border-box;\n // display: inline-block;\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n }\n }\n\n .gv-cell__render {\n .cell {\n height: auto;\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: 28px;\n padding: 0 5px;\n line-height: 28px;\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n }\n\n .gv-input-number {\n width: 120px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n\n .gv-select__table {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n }\n }\n }\n }\n\n :deep(.el-table__fixed),\n :deep(.el-table__fixed-right) {\n .el-table__fixed-header-wrapper {\n .el-table__header {\n .el-table__cell {\n height: 34px;\n padding: 1px 0;\n //font-size: $tableThFontSize;\n font-weight: $tableThFontWeight !important;\n line-height: 34px;\n\n .cell {\n display: inline-block; // flex\n height: 28px;\n padding-right: 3px;\n line-height: 28px;\n color: $textColor;\n font-weight: 500 !important;\n .caret-wrapper {\n float: right;\n height: 28px;\n line-height: 28px;\n\n .sort-caret.ascending {\n top: 2px;\n }\n\n .sort-caret.descending {\n bottom: 2px;\n }\n }\n\n .render__header {\n display: inline-block; // flex\n height: 28px;\n line-height: 28px;\n\n &:hover {\n cursor: pointer;\n }\n .el-tooltip__trigger {\n font-weight: 500 !important;\n }\n }\n\n .gv-table-header-filter {\n i {\n margin-left: 4px;\n }\n }\n }\n }\n }\n }\n\n .el-table__fixed-body-wrapper {\n .el-table__body {\n .el-table__row {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n // box-sizing: border-box;\n padding: 2px 0;\n\n .cell {\n display: inline-block; // flex\n width: auto;\n height: 28px;\n overflow: hidden;\n //font-size: $tableTdFontSize;\n font-weight: $tableTdFontWeight;\n line-height: 28px;\n color: $tableTdColor;\n word-break: break-all;\n white-space: nowrap;\n\n .el-button {\n height: 26px !important;\n line-height: 26px !important;\n padding: 2px 4px 2px 8px !important;\n }\n\n .gv-table-action-trigger + .gv-table-action-trigger {\n margin-left: 5px;\n }\n\n .gv-table-action-trigger + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .gv-popconfirm {\n margin-left: 5px;\n }\n\n .gv-popconfirm + .el-button {\n margin-left: 5px;\n }\n }\n }\n\n .gv-cell__isedit {\n .cell {\n height: 28px;\n padding: 0 5px;\n line-height: 28px;\n\n .gv-input {\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n }\n\n .gv-input-number {\n width: 120px;\n\n .el-input-number__decrease,\n .el-input-number__increase {\n height: 23px;\n line-height: 23px;\n }\n\n .el-input__inner {\n height: 26px;\n padding-left: 5px;\n line-height: 26px;\n }\n\n .is-error {\n color: #f5222d;\n border-color: #f5222d;\n }\n }\n\n .gv-datepicker {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n padding-right: 25px;\n padding-left: 25px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n .el-icon-date {\n height: 26px;\n line-height: 26px;\n }\n\n .el-icon-time {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n\n .gv-select {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n\n .gv-select__table {\n vertical-align: inherit !important;\n .el-input {\n //font-size: $textSizeSecondary;\n\n .el-input__inner {\n height: 26px;\n line-height: 26px;\n }\n\n .el-input__prefix {\n left: 0 !important;\n\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n\n .el-input__suffix {\n .el-input__suffix-inner {\n i {\n height: 26px;\n line-height: 26px;\n }\n }\n }\n }\n }\n }\n }\n }\n\n .el-table__row:last-child {\n &.current-row {\n td.el-table__cell {\n background-color: var(--defaultHover, $defaultHover);\n }\n }\n\n .el-table__cell {\n padding: 2px 0;\n\n .cell {\n display: inline-block; // flex\n }\n }\n }\n }\n }\n }\n }\n\n // pageinfo\n :deep(.el-pagination) {\n float: right;\n\n .el-input__inner {\n &:focus {\n border-color: var(--primaryColorHover, $primaryColorHover) !important;\n }\n\n &:hover {\n border-color: var(--primaryColorHover, $primaryColorHover) !important;\n }\n }\n\n .el-pagination__total {\n left: 15px;\n //font-size: $appTextSize !important;\n // position: absolute;\n margin-right: 20px;\n font-weight: 500;\n color: var(--primaryColor, $primaryColor);\n }\n\n .el-pagination__sizes {\n // position: absolute;\n left: 65px;\n margin: 0px 10px 0 0;\n width: 100px;\n line-height: 28px;\n .el-select {\n width: 100px;\n line-height: 28px;\n .el-select__wrapper {\n //font-size: $appTextSize;\n min-height: 28px;\n }\n .el-input {\n width: 90px;\n\n .el-input__inner {\n height: 25px;\n line-height: 25px;\n }\n }\n }\n }\n\n .btn-prev,\n .btn-next {\n min-width: 25px;\n padding: 0;\n }\n\n .el-pager {\n li.active,\n li:hover {\n color: var(--primaryColor, $primaryColor);\n }\n .is-active number {\n //font-size: $appTextSize;\n }\n .number {\n min-width: 30px;\n //font-size: $appTextSize;\n font-weight: $fontWeight;\n }\n }\n\n .el-pagination__jump {\n .el-pagination__goto {\n //font-size: $appTextSize;\n }\n .el-pagination__classifier {\n //font-size: $appTextSize;\n }\n .el-pagination__editor {\n //font-size: $appTextSize;\n width: 45px;\n\n .el-input__inner {\n height: 24px;\n line-height: 24px;\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTable from './src/GvTable.vue';\n\nconst GvTablePlugin = {\n install(app: App): void {\n app.component(GvTable.name ?? 'GvTable', GvTable);\n },\n};\nexport default GvTablePlugin;\n\nexport { GvTable };\n","<!--\n * @title: tab pane component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:19:18\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-12 10:24:57\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { hasScrollbar } from '@@/utils';\n import { defineComponent, getCurrentInstance, nextTick, onMounted, ref } from 'vue';\n\n // const { getPrefixCls } = useStyle();\n // const prefixCls = getPrefixCls('tab-pane');\n export default defineComponent({\n name: 'GvTabPane',\n props: {\n name: {\n type: String,\n required: false,\n default: undefined,\n },\n label: {\n type: String,\n required: false,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n maxHeight: {\n type: [Number, String],\n required: false,\n default: undefined,\n },\n visible: {\n type: Boolean,\n required: false,\n default: true,\n },\n autoHeight: {\n type: Boolean,\n required: false,\n default: false,\n },\n },\n\n // emit\n emits: ['tab-click'],\n setup(props, { emit, slots }) {\n // @data\n const sMaxHeight = props.maxHeight;\n const isAnchor = ref(false);\n const isScrollbar = ref(false);\n const isEditContainer = ref(false);\n const instance = getCurrentInstance();\n\n // @watch\n // @methods\n\n // @mounted\n onMounted(() => {\n nextTick(() => {\n const rootEl = instance?.proxy?.$el;\n const dialogBody = rootEl.closest('<div className=\"gv\"></div>-drawer__body--inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl.closest('.gv-edit__container')) isAnchor.value = true;\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n if (rootEl.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl.closest('.gv-edit__container')) isEditContainer.value = true;\n if (props.autoHeight === false)\n if (isEditContainer.value === false)\n if (isScrollbar.value === false)\n if (isAnchor.value === false)\n if (!sMaxHeight) {\n const tabPane = rootEl;\n const offsetTop = tabPane.classList.contains('el-tabs--left') ? 95 : 165;\n const maxHeight = document.documentElement.clientHeight - rootEl.offsetTop - offsetTop;\n rootEl.style.maxHeight = maxHeight + 'px';\n }\n });\n });\n // @render\n return () => (\n <div\n data-name={props.name}\n data-label={props.label}\n data-disabled={props.disabled}\n style={{ overflow: 'hidden auto', maxHeight: `${props.maxHeight}` }}>\n {slots.default?.()}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tab-pane';\n .#{$prefixCls} {\n }\n</style>\n","import type { App } from 'vue';\nimport GvTabPane from './src/GvTabPane.vue';\n\nconst GvTabsPlugin = {\n install(app: App): void {\n app.component(GvTabPane.name ?? 'GvTabPane', GvTabPane);\n },\n};\nexport default GvTabsPlugin;\n\nexport { GvTabPane };\n","<!--\n * @title: tabs component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 09:50:50\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:54:16\n * @version: 1.0.2\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { hasScrollbar } from '@@/utils';\n import { ElTabPane, ElTabs } from 'element-plus';\n import { defineComponent, getCurrentInstance, nextTick, onMounted, ref, watch, type PropType, type VNode } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tabs');\n export default defineComponent({\n name: 'GvTabs',\n props: {\n tabPosition: {\n type: String,\n default: 'left',\n },\n value: {\n type: [Number, String] as PropType<number | string>,\n default: undefined,\n },\n type: {\n type: String as PropType<'card' | 'border-card'>,\n default: undefined, // card|border-card\n },\n closable: {\n type: Boolean,\n default: false,\n },\n tabMaxHeight: {\n type: [Number, String],\n default: undefined,\n },\n },\n\n // emit\n emits: ['tab-click'],\n setup(props, { emit, slots }) {\n // @data\n const inputValue = ref(props.value);\n const tabHeight = ref('auto');\n const isAnchor = ref(false);\n const isScrollbar = ref(false);\n const panes = ref([]);\n const isEditContainer = ref(false);\n const instance = getCurrentInstance();\n\n // @watch\n watch(\n () => props.value,\n (newVal) => {\n inputValue.value = newVal;\n },\n );\n\n // @methods\n /**\n * @todo: 点击tab页响应事件\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-09 09:16:37\n * @param {*} tabVm 被选中tab页实例\n */\n const handleTabClick = (tabVm) => {\n const props = tabVm.props;\n const parent = tabVm.parent;\n const tabName = props.name;\n if (tabName) parent.props.value = tabName;\n emit('tab-click', tabVm);\n };\n\n /**\n * @todo: created tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-12 10:05:03\n */\n const calcPaneInstances = () => {\n if (panes.value.length === 0)\n if (slots.default?.())\n slots.default?.().forEach((vnode) => {\n if (vnode && typeof vnode.type === 'object' && 'name' in vnode.type && vnode.type.name === 'GvTabPane') {\n const tabPane = {};\n const props = vnode.props;\n tabPane['label'] = props?.label;\n tabPane['name'] = props?.name;\n tabPane['autoHeight'] = isEditContainer.value;\n let visible = true;\n if (props?.visible === false) visible = false;\n tabPane['visible'] = visible;\n (panes.value as any[]).push(tabPane);\n }\n });\n return panes.value || [];\n };\n /**\n * @todo: 创建tabpanel\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2022-04-03 16:30:54\n */\n const createTabPane = () =>\n calcPaneInstances().map((vnode: VNode, index) => {\n const props = vnode.props;\n // console.log(vnode.name);\n return props?.visible ? (\n <ElTabPane\n // v-show={vnode.visible}\n ref=\"tabPane\"\n name={props?.name}\n label={props?.label}\n style={{ height: `${tabHeight.value} !important` }}>\n {slots.default?.()[index]}\n </ElTabPane>\n ) : null;\n });\n\n // @mounted\n onMounted(() => {\n nextTick(() => {\n const rootEl = instance?.proxy?.$el as HTMLElement | undefined;\n const dialogBody = rootEl?.closest('.gv-drawer__body--inner');\n if (dialogBody) isScrollbar.value = hasScrollbar(dialogBody);\n else {\n const dialogContainer = rootEl?.closest('.gv-container');\n if (dialogContainer) isScrollbar.value = hasScrollbar(dialogContainer);\n }\n if (rootEl?.closest('.gv-anchor-wrap')) isAnchor.value = true;\n if (rootEl?.closest('.gv-edit__container')) isEditContainer.value = true;\n if (!isEditContainer.value)\n if (isScrollbar.value === false)\n if (isAnchor.value === false) {\n // 设置tab页高度\n const drawer = rootEl?.closest('.gv-drawer');\n if (drawer) tabHeight.value = 'auto';\n // const tp = this.tabPosition === 'left' ? 170 : 230;\n // this.tabHeight = document.documentElement.clientHeight - this.$el.offsetTop - tp + 'px';\n else {\n const dialog = rootEl?.closest('.gv-dialog');\n if (dialog) tabHeight.value = 'auto';\n // const tp = this.tabPosition === 'left' ? 170 : 230;\n // this.tabHeight = document.documentElement.clientHeight - this.$el.offsetTop - tp + 'px';\n else {\n const h = document.documentElement.clientHeight - (rootEl?.offsetTop ?? 0) - 55;\n if (h < 384) tabHeight.value = '384px';\n else tabHeight.value = h + 'px';\n }\n }\n }\n });\n });\n // @render\n return () => (\n <ElTabs\n ref=\"gv-tabs\"\n v-model={inputValue.value}\n tab-position={props.tabPosition}\n type={props.type}\n closable={props.closable}\n on-tab-click={handleTabClick}\n class={prefixCls}>\n {createTabPane()}\n </ElTabs>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tabs';\n .#{$prefixCls} {\n :deep(.el-tabs__header) {\n &.is-top {\n margin: 0 0 6px;\n }\n\n .el-tabs__nav {\n .el-tabs__active-bar {\n background-color: var(--primaryColor, $primaryColor);\n }\n\n .el-tabs__item {\n //font-size: $appTextSize;\n\n &:hover {\n color: var(--primaryColor, $primaryColor);\n }\n\n &.is-active {\n color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTabs from './src/GvTabs.vue';\n\nconst GvTabsPlugin = {\n install(app: App): void {\n app.component(GvTabs.name ?? 'GvTabs', GvTabs);\n },\n};\nexport default GvTabsPlugin;\n\nexport { GvTabs };\n","import type { App } from 'vue';\nimport GvTag from './src/GvTag.vue';\n\nconst GvTagPlugin = {\n install(app: App): void {\n app.component(GvTag.name ?? 'GvTag', GvTag);\n },\n};\nexport default GvTagPlugin;\n\nexport { GvTag };\n","<!--\n * @title: navigation tags view\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-20 10:57:41\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 18:00:46\n * @version: 1.0.5\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { usePermsStore } from '@/store/modules/perms';\n import { useTagsViewStore } from '@/store/modules/tagsView';\n import { useBridgeI18n } from '@@/bridge';\n import { joinIcon, pathResolve } from '@@/utils';\n import { useEventListener } from '@vueuse/core';\n import { ElTabPane, ElTabs } from 'element-plus';\n import { cloneDeep } from 'lodash-es';\n import { computed, defineComponent, nextTick, onMounted, reactive, ref, unref, watch } from 'vue';\n import { useRouter, type RouteLocationNormalizedLoaded } from 'vue-router';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tags-view');\n export default defineComponent({\n name: 'GvTagsView',\n setup() {\n const visible = ref(false);\n const position = reactive({ x: 0, y: 0 });\n const currentKey = ref('');\n\n const { currentRoute, push, replace } = useRouter();\n const activeKey = ref<string>(unref(currentRoute).path || '/dashboard');\n const { t } = useBridgeI18n();\n const tagsViewStore = useTagsViewStore();\n const permsStore = usePermsStore();\n\n const visitedViews = computed(() => tagsViewStore.visitedViews);\n const mainAppRoutes = computed(() => permsStore.mainAppRoutes);\n\n const isRedirect = (path: string) => path.startsWith('/redirect');\n const isActive = (route) => route.path === unref(currentRoute).path;\n const isAffix = (tag) => tag.meta && tag.meta.affix;\n\n /**\n * @todo: filter affix nav menus\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 11:39:08\n * @param {*} mainAppRoutes\n * @param {*} basePath\n */\n const filterAffixNavMenus = (navMenus, basePath = '/'): RouteLocationNormalizedLoaded[] => {\n const affixTags: RouteLocationNormalizedLoaded[] = [];\n // console.log('navMenus:', navMenus.value);\n navMenus.value.forEach((route) => {\n if (route.meta && route.meta.affix === true) {\n const tagPath = pathResolve(basePath, route.path);\n affixTags.push({\n fullPath: tagPath,\n path: tagPath,\n name: route.name,\n meta: route.meta,\n matched: [],\n params: {},\n query: {},\n hash: '',\n redirectedFrom: undefined,\n });\n }\n });\n return affixTags;\n };\n /**\n * @todo: add affix tags\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 11:45:26\n */\n const addAffixTags = () => {\n const affixTags = filterAffixNavMenus(mainAppRoutes);\n\n for (const tagView of affixTags) if (tagView.name) tagsViewStore.addVisitedView(tagView);\n };\n /**\n * @todo: create tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:36:56\n */\n const createTabPanel = () =>\n visitedViews.value.map((v) => {\n const icons = joinIcon(v.meta?.picon);\n const closable = visitedViews.value.length > 1;\n const title = t(v.meta?.title ?? 'no-name');\n return (\n <ElTabPane\n key={String(v.path)}\n name={String(v.path)}\n label={title}\n closable={closable}>\n {{\n label: () => (\n <span class=\"tab-label\">\n {icons && <i class={icons}></i>}\n {title}\n </span>\n ),\n }}\n </ElTabPane>\n );\n });\n\n /**\n * @todo: show right context menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 17:22:53\n * @param {*} key\n */\n const showContextMenu = (key: string) => {\n currentKey.value = key;\n visible.value = true;\n };\n /**\n * @todo: close right context menu\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:31:06\n */\n const closeContextMenu = () => {\n visible.value = false;\n };\n /**\n * @todo: jump to link route\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-21 11:25:08\n * @param {*} routePath\n */\n const toLink = (routePath: string) => {\n const targetView = visitedViews.value.find((v) => v.path === routePath);\n activeKey.value = routePath || '/dashboard';\n\n if (targetView)\n // 使用完整的 route 对象跳转,保留 query 参数\n push({\n path: targetView.path,\n query: targetView.query || {},\n });\n else push({ path: routePath, query: {} });\n };\n /**\n * @todo: jump to last tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:31:01\n * @param {*} visitedView\n * @param {*} currentView\n */\n const toLastView = (visitedView: RouteLocationNormalizedLoaded[], currentView: RouteLocationNormalizedLoaded) => {\n const latestView = visitedView.slice(-1)[0];\n if (visitedView) {\n activeKey.value = latestView.path;\n push(latestView.path);\n } else if (currentView.name === 'Dashboard') replace({ path: '/redirect' + currentView.path });\n else push('/');\n };\n /**\n * @todo: add menu tab\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-11-21 10:27:35\n */\n const addNavMenu = () => {\n const name = currentRoute.value.name;\n if (name) tagsViewStore.addTagView(currentRoute.value);\n };\n\n const moveToCurrentTag = (view: RouteLocationNormalizedLoaded) => {\n // toLink(view.path);\n };\n\n /**\n * @todo: click tab event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 12:08:48\n * @param {*} tab\n */\n const clickTab = (tab) => {\n toLink(tab.props.name);\n };\n /**\n * @todo: close current tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:56:44\n * @param {*} targetKey\n */\n const closeCurrentTag = async (targetKey) => {\n const view = visitedViews.value.filter((view) => view.path === targetKey);\n if (isAffix(view[0])) return;\n\n await tagsViewStore.delTagView({ view: view[0] });\n\n // 清除缓存的search条件\n // currentRoute.value.meta.search = {};\n // 判断是否是当前标签页关闭\n if (isActive(view[0])) toLastView(visitedViews.value, view[0]);\n };\n /**\n * @todo: refresh selected tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:40:45\n */\n const refreshSelectedTag = async () => {\n tagsViewStore.delCachedView(unref(currentRoute));\n const { path, query } = unref(currentRoute);\n await nextTick();\n replace({\n path: '/redirect' + path,\n query: query,\n });\n };\n const findCurTagIndex = () => visitedViews.value.findIndex((x) => x.path === currentKey.value);\n /**\n * @todo: close right/left tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 10:42:33\n * @param {*} direction\n */\n const closeTagsOrientation = (direction) => {\n const index = findCurTagIndex();\n if (index === -1) return;\n let isClosed = false;\n const vV = cloneDeep(visitedViews.value);\n vV.map(({ path }, i) => {\n if (direction === 'right' && i > index) {\n if (path === unref(activeKey)) isClosed = true;\n closeCurrentTag(path);\n } else if (direction === 'left' && i < index) {\n if (path === unref(activeKey)) isClosed = true;\n closeCurrentTag(path);\n }\n });\n // 跳转至当前页\n if (isClosed) toLink(unref(currentKey));\n };\n /**\n * @todo: close other tabs\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 11:04:12\n */\n const closeOthersTags = () => {\n const index = findCurTagIndex();\n if (index === -1) return;\n push(currentKey.value);\n\n tagsViewStore.delOthersViews(currentRoute.value).then(() => {\n moveToCurrentTag(unref(currentRoute));\n });\n };\n\n watch(\n () => [currentRoute.value.path, currentRoute.value.name],\n ([path, name], [, oldName]) => {\n // if /redirect\n if (isRedirect(path as string)) return;\n // 当前选中tab页\n activeKey.value = (path as string) || '/dashboard';\n // del notify msg\n if (oldName !== name) {\n const alertObj = document.body.querySelector('body>.el-notification');\n if (alertObj) alertObj.remove();\n }\n addNavMenu();\n // moveToCurrentTag(currentRoute.value);\n },\n );\n\n /**\n * @todo: bind right click event\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-28 15:28:28\n */\n const tagsViewEl = ref<HTMLElement | null>(null);\n useEventListener(tagsViewEl, 'contextmenu', (ev: MouseEvent) => {\n ev.preventDefault();\n\n let targetNode: HTMLElement | null = null;\n const el = ev.target as HTMLElement;\n\n if (el.tagName === 'SPAN') targetNode = el.parentElement;\n else targetNode = el;\n\n if (targetNode?.classList.contains('el-tabs__item')) {\n const path = targetNode?.getAttribute('aria-controls')?.replace(/^pane-/, '') || '';\n if (path !== unref(currentRoute).path) toLink(path);\n\n position.x = ev.clientX || ev.pageX;\n position.y = ev.clientY || ev.pageY;\n\n showContextMenu(path);\n }\n });\n /**\n * @todo: close context menu on window click\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-01-29 09:39:46\n */\n useEventListener(window, 'click', () => {\n closeContextMenu();\n });\n\n // mounted hooks\n onMounted(() => {\n addAffixTags();\n addNavMenu();\n });\n return () => (\n <div\n ref={tagsViewEl}\n class={[prefixCls, 'flex w-full relative bg-[#fff] dark:bg-[var(--el-bg-color)']}>\n <ElTabs\n class=\"multi-tab\"\n type=\"card\"\n modelValue={activeKey.value}\n onUpdate:modelValue={(v: string) => (activeKey.value = v)}\n onTabClick={clickTab}\n onTabRemove={closeCurrentTag}>\n {createTabPanel()}\n </ElTabs>\n {visible.value && (\n <ul\n class=\"tagsView-contextmenu\"\n style={{ left: `${position.x + 10}px`, top: `${position.y - 10}px` }}>\n <li onClick={refreshSelectedTag}>{t('tagsView.refresh')}</li>\n {currentKey.value !== '/dashboard' && visitedViews.value.length === 2 && <li onClick={() => closeCurrentTag(currentKey.value)}>{t('tagsView.close')}</li>}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 1 && findCurTagIndex() < visitedViews.value.length - 1 && (\n <li onClick={() => closeTagsOrientation('right')}>{t('tagsView.closeRight')}</li>\n )}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 2 && findCurTagIndex() > 1 && <li onClick={() => closeTagsOrientation('left')}>{t('tagsView.closeLeft')}</li>}\n {currentKey.value === '/dashboard' && visitedViews.value.length > 1 && <li onClick={closeOthersTags}>{t('tagsView.closeOthers')}</li>}\n {currentKey.value !== '/dashboard' && visitedViews.value.length > 2 && <li onClick={closeOthersTags}>{t('tagsView.closeOthers')}</li>}\n </ul>\n )}\n </div>\n );\n },\n });\n</script>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tags-view';\n\n .#{$prefixCls} {\n user-select: none; // 禁止选中文本\n\n .multi-tab {\n width: 100%;\n position: relative;\n :deep(.el-tabs__header) {\n margin: 0;\n border-bottom-color: $borderColor;\n height: 34px;\n line-height: 34px;\n .el-tabs__nav {\n border-color: $borderColor;\n .el-tabs__item {\n height: 34px; // 38px\n line-height: 34px; // 38px\n padding: 2px 10px 0 10px; // 0 10px\n //font-size: $textSize;\n border-left-color: $borderColor;\n\n &.is-active {\n & > span {\n font-weight: $fontWeight2;\n }\n color: var(--primaryColor, $primaryColor);\n }\n &:focus.is-focus:not(:active) {\n box-shadow: 0 0 1px 1px inset;\n }\n > span {\n font-weight: 500;\n > i {\n padding-right: 5px;\n //font-size: $textSize;\n }\n }\n }\n }\n .is-scrollable {\n .el-tabs__nav-next,\n .el-tabs__nav-prev {\n line-height: 42px;\n }\n\n i {\n font-size: 18px;\n color: rgba(0, 0, 0, 0.95);\n }\n }\n }\n .el-tabs__content {\n display: none !important;\n }\n }\n :deep(.tagsView-contextmenu) {\n position: fixed;\n top: $navHeadHeight;\n left: 300px;\n z-index: 9999;\n min-width: 90px;\n padding: 6px 0;\n list-style: none;\n background-color: #fff;\n border: 1px solid $borderColorSecondary;\n border-radius: $borderRadius;\n box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);\n li {\n line-height: 27px;\n padding: 0 15px;\n //font-size: $appTextSize;\n &:hover,\n &:focus {\n background-color: $backgroundColor;\n color: var(--primaryColorHover, $primaryColorHover);\n cursor: pointer;\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTagsView from './src/GvTagsView.vue';\n// Define the install method on the GvExpandMenu component\nconst GvTagsViewPlugin = {\n install(app: App): void {\n app.component(GvTagsView.name ?? 'GvTagsView', GvTagsView);\n },\n};\nexport default GvTagsViewPlugin;\n\nexport { GvTagsView };\n","<!--\n * @title: theme switcher\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2025-08-14 10:17:38\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-18 15:04:37\n * @version: 1.0.1\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n<script setup lang=\"ts\">\n import { useStyle } from '@/hook/web/useStyle';\n import { useAppStore } from '@/store/modules/app';\n import { ElDropdown, ElDropdownItem, ElDropdownMenu } from 'element-plus';\n import { computed } from 'vue';\n import { propTypes } from '../../utils/gv.propTypes';\n\n defineOptions({\n name: 'GvTheme',\n inheritAttrs: true,\n });\n const { getPrefixCls } = useStyle();\n\n const prefixCls = getPrefixCls('theme');\n\n defineProps({\n color: propTypes.string.def(''),\n });\n\n const appStore = useAppStore();\n const themeOptions = computed(() => appStore.getSwitchTheme);\n const currentTheme = computed(() => appStore.getCurrentTheme);\n\n const handleSetTheme = () => {\n //appStore.setTheme(theme);\n };\n</script>\n<template>\n <ElDropdown\n trigger=\"click\"\n :class=\"prefixCls\"\n @command=\"handleSetTheme\">\n <div>\n <GvIcon\n class=\"international-icon\"\n iconName=\"theme\" />\n </div>\n <template #dropdown>\n <ElDropdownMenu>\n <ElDropdownItem\n v-for=\"item of themeOptions\"\n :key=\"item.value\"\n :disabled=\"currentTheme === item.value\"\n :command=\"item.value\">\n {{ item.label }}\n </ElDropdownItem>\n </ElDropdownMenu>\n </template>\n </ElDropdown>\n</template>\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-theme';\n .#{$prefixCls} {\n display: inline-block;\n line-height: var(--right-item-line-height);\n height: var(--right-item-height);\n vertical-align: 10px;\n cursor: pointer;\n fill: #5a5e66;\n }\n</style>\n","import type { App } from 'vue';\nimport GvTheme from './src/GvTheme.vue';\nconst GvThemePlugin = {\n install(app: App): void {\n app.component(GvTheme.name ?? 'GvTheme', GvTheme);\n },\n};\nexport default GvThemePlugin;\n\nexport { GvTheme };\n","<!--\n * @title: tree component\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2026-05-09 16:57:41\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-06-08 17:54:23\n * @version: 1.0.4\n * @copyright: copyright (c) 2025 Andy Xu \n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n-->\n\n<script lang=\"tsx\">\n import { useStyle } from '@/hook/web/useStyle';\n import { ElTree } from 'element-plus';\n import type { Node } from 'element-plus/es/components/tree/src/model/node';\n import type { FilterNodeMethodFunction, LoadFunction, RenderContentFunction, TreeComponentProps, TreeNodeData } from 'element-plus/es/components/tree/src/tree.type';\n import { defineComponent, type ComponentInternalInstance, type PropType } from 'vue';\n\n const { getPrefixCls } = useStyle();\n const prefixCls = getPrefixCls('tree');\n\n type TreeData = Record<string, unknown>;\n\n export default defineComponent({\n name: 'GvTree',\n props: {\n treeData: {\n type: Array as PropType<TreeData[]>,\n default: () => [],\n },\n treeProps: {\n type: Object as PropType<TreeComponentProps['props']>,\n default: () => ({}),\n },\n nodeKey: {\n type: String,\n default: undefined,\n },\n lazy: {\n type: Boolean,\n default: false,\n },\n load: {\n type: Function as PropType<LoadFunction>,\n default: undefined,\n },\n showCheckbox: {\n type: Boolean,\n default: false,\n },\n draggable: {\n type: Boolean,\n default: false,\n },\n defaultExpandedKeys: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n },\n defaultCheckedKeys: {\n type: Array as PropType<(string | number)[]>,\n default: () => [],\n },\n iconClass: {\n type: String,\n default: undefined,\n },\n defaultExpandAll: {\n type: Boolean,\n default: false,\n },\n expandOnClickNode: {\n type: Boolean,\n default: true,\n },\n checkOnClickNode: {\n type: Boolean,\n default: false,\n },\n filterNodeMethod: {\n type: Function as PropType<FilterNodeMethodFunction>,\n default: undefined,\n },\n renderContent: {\n type: Function as PropType<RenderContentFunction>,\n default: undefined,\n },\n },\n\n // @emits\n emits: ['node-click', 'node-expand', 'node-collapse', 'check', 'check-change', 'node-drop'],\n\n setup(props, { emit }) {\n // @methods\n\n const handleNodeClick = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null, event: MouseEvent) => {\n emit('node-click', data, node, treeNode, event);\n };\n\n const handleNodeExpand = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null) => {\n emit('node-expand', data, node, treeNode);\n };\n\n const handleNodeCollapse = (data: TreeData, node: Node, treeNode: ComponentInternalInstance | null) => {\n emit('node-collapse', data, node, treeNode);\n };\n\n const handleCheck = (\n data: TreeData,\n checkedInfo: {\n checkedNodes: TreeNodeData[];\n checkedKeys: (string | number)[];\n halfCheckedNodes: TreeNodeData[];\n halfCheckedKeys: (string | number)[];\n },\n ) => {\n emit('check', data, checkedInfo);\n };\n\n const handleCheckChange = (data: TreeData, checked: boolean, childChecked: boolean) => {\n emit('check-change', data, checked, childChecked);\n };\n\n const handleLazyLoad: LoadFunction = (...args) => {\n props.load?.(...args);\n };\n\n const handleNodeDrop = (draggingNode: Node, dropNode: Node, dropType: 'before' | 'after' | 'inner', event: DragEvent) => {\n emit('node-drop', draggingNode, dropNode, dropType, event);\n };\n\n // @render\n return () => (\n <ElTree\n ref=\"gv-tree\"\n data={props.treeData}\n props={props.treeProps}\n nodeKey={props.nodeKey}\n lazy={props.lazy}\n load={handleLazyLoad}\n draggable={props.draggable}\n showCheckbox={props.showCheckbox}\n defaultExpandedKeys={props.defaultExpandedKeys}\n defaultCheckedKeys={props.defaultCheckedKeys}\n icon={props.iconClass}\n highlightCurrent\n defaultExpandAll={props.defaultExpandAll}\n expandOnClickNode={props.expandOnClickNode}\n checkOnClickNode={props.checkOnClickNode}\n filterNodeMethod={props.filterNodeMethod}\n renderContent={props.renderContent}\n class={prefixCls}\n onNode-click={handleNodeClick}\n onNode-expand={handleNodeExpand}\n onNode-collapse={handleNodeCollapse}\n onNode-drop={handleNodeDrop}\n onCheck={handleCheck}\n onCheck-change={handleCheckChange}\n />\n );\n },\n });\n</script>\n\n<style lang=\"scss\" scoped>\n $prefixCls: '#{$gvNamespace}-tree';\n .#{$prefixCls} {\n :deep(.el-tree-node) {\n .el-tree-node__content {\n .el-tree-node__label {\n //font-size: $appTextSize;\n }\n .el-checkbox__input {\n &.is-checked {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n &.is-indeterminate {\n .el-checkbox__inner {\n background-color: var(--primaryColor, $primaryColor);\n border-color: var(--primaryColor, $primaryColor);\n }\n }\n }\n }\n }\n }\n</style>\n","import type { App } from 'vue';\nimport GvTree from './src/GvTree.vue';\n\nconst GvTreePlugin = {\n install(app: App): void {\n app.component(GvTree.name ?? 'GvTree', GvTree);\n },\n};\nexport default GvTreePlugin;\n\nexport { GvTree };\n","/*\r\n * @title: encrypt\r\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\r\n * @Date: 2023-12-16 08:07:24\r\n * @LastEditors: andy.ten@tom.com\r\n * @LastEditTime: 2025-04-07 13:54:00\r\n * @version: 1.0.1\r\n * @copyright: copyright (c) 2025 Andy Xu\r\n * node: you can not copy and/or use and/or modify this program free,\r\n * please reserve the segment above.Please mail me if you have any question.\r\n */\r\n\r\nimport CryptoJS from 'crypto-js';\r\nexport const key = 'abcdefgabcdefg12';\r\nexport const encrypt = (word: any): string => {\r\n const keyStr = CryptoJS.enc.Utf8.parse(key);\r\n let ww;\r\n if (typeof word === 'object') ww = JSON.stringify(word);\r\n else ww = word;\r\n const srcs = CryptoJS.enc.Utf8.parse(ww);\r\n const encrypted = CryptoJS.AES.encrypt(srcs, keyStr, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });\r\n return encrypted.toString();\r\n};\r\nexport const decrypt = (word: string): any => {\r\n const keyStr = CryptoJS.enc.Utf8.parse(key);\r\n const decrypt = CryptoJS.AES.decrypt(word, keyStr, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });\r\n return CryptoJS.enc.Utf8.stringify(decrypt).toString();\r\n};\r\n// Randomly generate a specified number of hexadecimal keys\r\nexport const generateKey = (num: number): string => {\r\n const library = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n let key = '';\r\n for (let i = 0; i < num; i++) {\r\n const randomPoz = Math.floor(Math.random() * library.length);\r\n key += library.substring(randomPoz, randomPoz + 1);\r\n }\r\n return key;\r\n};\r\n","/*\n * @title: package lib entry\n * @author: andy.ten@tom.com & xukaixing@hotmail.com\n * @Date: 2024-11-28 18:18:44\n * @LastEditors: andy.ten@tom.com\n * @LastEditTime: 2026-05-28 09:22:01\n * @version: 1.1.2\n * @copyright: copyright (c) 2024 Andy Xu\n * node: you can not copy and/or use and/or modify this program free,\n * please reserve the segment above.Please mail me if you have any question.\n */\n\nimport type { Pinia } from 'pinia';\nimport { setActivePinia } from 'pinia';\nimport 'uno.css'; // 引入 UnoCSS 样式\nimport type { App } from 'vue';\nimport type { Composer } from 'vue-i18n';\n\nimport { setBridgeContext } from './bridge';\nimport GvBacktopPlugin, { GvBacktop } from './GvBacktop';\nimport GvBadgePlugin, { GvBadge } from './GvBadge';\nimport GvBreadCrumbPlugin, { GvBreadCrumb } from './GvBreadCrumb';\nimport GvButtonPlugin, { GvButton } from './GvButton';\nimport GvCardPlugin, { GvCard } from './GvCard';\nimport GvCascaderPlugin, { GvCascader } from './GvCascader';\nimport GvCheckboxPlugin, { GvCheckbox } from './GvCheckbox';\nimport GvCheckboxButtonPlugin, { GvCheckboxButton } from './GvCheckboxButton';\nimport GvCheckboxGroupPlugin, { GvCheckboxGroup } from './GvCheckboxGroup';\nimport GvColPlugin, { GvCol } from './GvCol';\nimport GvDatePickerPlugin, { GvDatePicker } from './GvDatePicker';\nimport GvDialogPlugin, { GvDialog } from './GvDialog';\nimport GvDividerPlugin, { GvDivider } from './GvDivider';\nimport GvDrawerPlugin, { GvDrawer } from './GvDrawer';\nimport GvExpandMenuPlugin, { GvExpandMenu } from './GvExpandMenu';\nimport GvFormPlugin, { GvForm } from './GvForm';\nimport GvHamburgerPlugin, { GvHamburger } from './GvHamburger';\nimport GvIconPlugin, { GvIcon } from './GvIcon';\nimport GvInputPlugin, { GvInput } from './GvInput';\nimport GvInputNumberPlugin, { GvInputNumber } from './GvInputNumber';\nimport GvLangSelectPlugin, { GvLangSelect } from './GvLangSelect';\nimport GvPopconfirmPlugin, { GvPopconfirm } from './GvPopconfirm';\nimport GvPopoverPlugin, { GvPopover } from './GvPopover';\nimport GvRadioPlugin, { GvRadio } from './GvRadio';\nimport GvRadioButtonPlugin, { GvRadioButton } from './GvRadioButton';\nimport GvRadioGroupPlugin, { GvRadioGroup } from './GvRadioGroup';\nimport GvRowPlugin, { GvRow } from './GvRow';\nimport GvScreenFullPlugin, { GvScreenFull } from './GvScreenFull';\nimport GvSearchBarPlugin, { GvSearchBar } from './GvSearchBar';\nimport GvSelectPlugin, { GvSelect } from './GvSelect';\nimport GvSidebarPlugin, { GvSidebar } from './GvSidebar';\nimport GvSidebarLogoPlugin, { GvSidebarLogo } from './GvSidebarLogo';\nimport GvSwitchPlugin, { GvSwitch } from './GvSwitch';\nimport GvTablePlugin, { GvTable } from './GvTable';\nimport GvTabPanePlugin, { GvTabPane } from './GvTabPane';\nimport GvTabsPlugin, { GvTabs } from './GvTabs';\nimport GvTagPlugin, { GvTag } from './GvTag';\nimport GvTagsViewPlugin, { GvTagsView } from './GvTagsView';\nimport GvThemePlugin, { GvTheme } from './GvTheme';\nimport GvTimePickerPlugin, { GvTimePicker } from './GvTimePicker';\nimport GvTreePlugin, { GvTree } from './GvTree';\nconst components = [\n GvRowPlugin,\n GvColPlugin,\n GvInputPlugin,\n GvButtonPlugin,\n GvPopconfirmPlugin,\n GvIconPlugin,\n GvInputNumberPlugin,\n GvCascaderPlugin,\n GvSwitchPlugin,\n GvRadioButtonPlugin,\n GvCheckboxButtonPlugin,\n GvRadioGroupPlugin,\n GvBadgePlugin,\n GvTabPanePlugin,\n GvTabsPlugin,\n GvDrawerPlugin,\n GvCardPlugin,\n GvTablePlugin,\n GvPopoverPlugin,\n GvRadioPlugin,\n GvSelectPlugin,\n GvTimePickerPlugin,\n GvCheckboxGroupPlugin,\n GvCheckboxPlugin,\n GvTagPlugin,\n GvTreePlugin,\n GvFormPlugin,\n GvLangSelectPlugin,\n GvBacktopPlugin,\n GvBreadCrumbPlugin,\n GvHamburgerPlugin,\n GvScreenFullPlugin,\n GvSearchBarPlugin,\n GvSidebarPlugin,\n GvSidebarLogoPlugin,\n GvThemePlugin,\n GvDialogPlugin,\n GvExpandMenuPlugin,\n GvTagsViewPlugin,\n GvDividerPlugin,\n GvDatePickerPlugin,\n];\n\nexport type GuavaUIOptions = {\n store: Pinia;\n i18n: Composer;\n};\n\nexport const install = (app: App, options: GuavaUIOptions) => {\n if ((install as any).INSTALLED) return;\n (install as any).INSTALLED = true;\n\n setActivePinia(options.store);\n setBridgeContext(options);\n\n components.forEach((c) => c.install(app));\n};\n\nconst GuavaUI = { install };\n\n// 🔹 按需导出组件\nexport {\n GvBacktop,\n GvBadge,\n GvBreadCrumb,\n GvButton,\n GvCard,\n GvCascader,\n GvCheckbox,\n GvCheckboxButton,\n GvCheckboxGroup,\n GvCol,\n GvDatePicker,\n GvDialog,\n GvDivider,\n GvDrawer,\n GvExpandMenu,\n GvForm,\n GvHamburger,\n GvIcon,\n GvInput,\n GvInputNumber,\n GvLangSelect,\n GvPopconfirm,\n GvPopover,\n GvRadio,\n GvRadioButton,\n GvRadioGroup,\n GvRow,\n GvScreenFull,\n GvSearchBar,\n GvSelect,\n GvSidebar,\n GvSidebarLogo,\n GvSwitch,\n GvTable,\n GvTabPane,\n GvTabs,\n GvTag,\n GvTagsView,\n GvTheme,\n GvTimePicker,\n GvTree,\n};\n\n// 🔹 hooks / utils\nexport { crud } from '@@/utils/gv.crud';\n// export * from './hooks/web/useNotify';\nexport * from './hooks/web/usePinyin';\nexport * from './hooks/web/useStorage';\nexport * from './utils/gv.notify';\nexport * from './utils/gv.propTypes';\nexport * from './utils/gv.secret';\nexport * from './utils/gv.tree';\nexport * from './utils/index';\n\n// 🔹 默认导出统一安装对象\nexport { GuavaUI };\n"],"names":["globalBridgeKey","getBridge","g","setBridgeContext","ctx","useBridgeI18n","i18n","getPrefixCls","variables","useStyle","prefixCls","_createBlock","_unref","ElBacktop","GvBacktopPlugin","app","GvBacktop","_sfc_main$F","name","props","vref","type","String","default","value","Number","max","isDot","Boolean","hidden","showZero","color","setup","slots","_createVNode","ElBadge","_export_sfc","sfc","GvBadgePlugin","_a","GvBadge","toString","is","val","isExternal","path","isString","isArray","isError","isObject","isDate","isNumber","isBoolean","isFunction","isElement","isMap","isImgPath","isDark","isNull","isEmpty","isEqual","a","b","i","keysA","keysB","key","isUrl","e","setHtmlAttrByLang","locale","sleep","timeLen","__async","resolve","toHump","all","letter","toLine","setDomCssProp","prop","dom","getDomCssProp","joinIcon","icon","joinIcons","hasClass","ele","cls","addClass","removeClass","reg","hasScrollbar","tag","dateFormatConfig","debounce","func","wait","immediate","timeout","arg","context","timestamp","result","later","last","args","callNow","getVNodeText","vnode","item","getVNodeName","removeAmountFormat","zeroFormat","numberFormat","pattern","oldVal","_nfPattern","strAry","p1","len","p2","ret","ch","p3","len2","amountFormat","decimal","v","decimalPattern","setQuickKeys","ev","btnHtml","inputHtml","messageConfirmHtml","bodyDialogHtml","dialogArr","buttonHtml","buttonDHtml","pathResolve","parentPath","childPath","preNameSpace","attrs","useAttrs","__props","isLocal","computed","iconType","iconName","svgClass","styleExternalIcon","iconComponent","compName","Icons","_openBlock","_createElementBlock","_mergeProps","_createElementVNode","_hoisted_1","ElIcon","_resolveDynamicComponent","_hoisted_2","GvIconPlugin","GvIcon","DEFAULT_CONFIG","getConfig","config","listToTree","list","conf","nodeMap","id","children","pid","node","parent","treeToList","tree","findNode","findNodeAll","findPath","visitedSet","findPathAll","filter","listFilter","__spreadValues","forEach","treeMapEach","data","conversion","haveChildren","conversionData","__spreadProps","treeMap","treeData","opt","eachTree","treeDatas","callBack","parentNode","element","newNode","filterBreadcrumb","routes","res","route","meta","_isSlot","s","Object","prototype","call","_isVNode","_sfc_main$D","appStore","useAppStore","permStore","usePermsStore","showBreadcrumbIcon","getShowBreadcrumbIcon","currentRoute","useRouter","t","levelList","ref","menuRouters","routers","getRouters","getBreadcrumb","currentPath","matched","slice","unref","renderBreadcrumb","map","disabled","redirect","ElBreadcrumbItem","title","watch","startsWith","_slot","ElBreadcrumb","TransitionGroup","GvBreadCrumbPlugin","GvBreadCrumb","_sfc_main$C","emits","emit","instance","getCurrentInstance","handleConfirm","event","ElPopconfirm","reference","GvInputPlugin","GvPopconfirm","getValueType","useStorage","valueType","excludes","keys","defaultExcludes","excludesArr","notificationTime","notificationTimeError","messageTime","messageTimeError","alert","msg","alertObj","getStorage","lang","promptMsg","duration","m","ElNotification","confirm","msgs","showCancelButton","hint","ok","cancel","reject","ElMessageBox","message","tableedit","ElMessage","_sfc_main$B","visible","text","otext","size","undefined","link","loading","refForm","required","nativeType","bizType","perms","cb","Function","useRoute","globalSize","useGlobalConfig","buttonSize","buttonConfirm","loadings","locked","isShow","isIf","getSlots","setIconStyle","replace","checkPerms","pm","slot","split","x","indexOf","length","arr","handleClick","exposed","resetFields","rootForm","originFormList","formList","Array","index","filtercode","showLabel","dateType","model","field","rootEl","el","dateRangeSingles","querySelectorAll","startInput","querySelector","endInput","click","then","classz","renderBtn","display","ElButton","GvButtonPlugin","GvButton","_sfc_main$A","_props","getCardHeader","header","ElCard","GvCardPlugin","GvCard","_sfc_main$z","options","placeholder","clearable","showAllLevels","separator","trigger","filterable","multiple","lazy","lazyLoad","sOps","inputValue","cascaderSize","sPlaceHolder","getDisabled","resolvedInputId","newVal","handleChange","handleBlur","handleFilterMethod","query","labels","pathLabels","join","spell","pathNodes","some","ElCascader","$event","expandTrigger","GvCascaderPlugin","GvCascader","_sfc_main$y","indeterminate","label","border","checkboxValue","checkboxSize","handleUpdate","ElCheckbox","GvCheckboxPlugin","GvCheckbox","_sfc_main$x","inheritAttrs","checkboxButtonSize","ElCheckboxButton","GvCheckboxButtonPlugin","GvCheckboxButton","_sfc_main$w","min","checkboxGroupSize","ElCheckboxGroup","GvCheckboxGroupPlugin","GvCheckboxGroup","_sfc_main$v","span","offset","xs","sm","md","lg","xl","ElCol","GvColPlugin","GvCol","toMidnight","date","d","daysAgo","days","midnight","monthBegin","quarterBegin","month","yearBegin","now","dateShortcuts","dateShortcutsEn","dateTimeShortcuts","dateTimeShortcutsEn","dateRangeShortcuts","start","end","dateRangeShortcutsEn","_sfc_main$u","modelValue","Date","format","valueFormat","defaultTime","rangeSeparator","startPlaceholder","endPlaceholder","disabledDateFunc","disabledDate","editable","unlink","useI18n","datePickerSize","getShortcuts","getPickerOptions","pickerOptions","shortcuts","includes","getTime","db","handleInput","vm","handleFocus","handlePick","maxDate","minDate","ElDatePicker","onCalendarChange","GvDatePickerPlugin","GvDatePicker","boundElements","initDrag","collapseMenu","dragDom","dialogHeaderEl","getStyle","attr","disX","disY","dragDomWidth","dragDomHeight","screenWidth","screenHeight","minDragDomLeft","menuWidth","maxDragDomLeft","minDragDomTop","maxDragDomTop","styL","styT","onMouseMove","left","top","onMouseUp","_sfc_main$t","hasFooter","width","height","nest","appendToBody","fullscreen","maxHeight","closeOnClickModal","closeOnPressEscape","dialogClass","buttonQuick","collapseMenus","myDialogClass","dialogVisible","maskVisible","dialogMaxHeight","sAppendToBody","modalAppendToBody","sNest","modalMask","newValue","handleVisible","handleOpen","handleOpened","nextTick","handleClose","handleClosed","handleCancel","renderFooterBtn","footer","propsData","getFooter","setMask","mask","getMaxHeight","parseFloat","document","documentElement","clientHeight","pEl","closest","onBeforeUnmount","window","removeEventListener","onMounted","addEventListener","ElDialog","GvDialogPlugin","GvDialog","_sfc_main$s","position","direction","target","clickDivider","preventDefault","stopPropagation","ElDivider","GvDividerPlugin","GvDivider","_sfc_main$r","paddingHeight","drawerVisible","drawerMaxHeight","show","buttonIcon","sPaddingHeight","drawerPaddingHeight","returnIcon","ElDrawer","GvDrawerPlugin","GvDrawer","newPropTypes","createTypes","propTypes","toValidableType","usePinyin","withTone","pinyin","pinYin","__emit","menuList","menuPath","fMenusList","generateRouter","serverRoutes","basePath","prefixTitle","prefixCode","router","i18ntitle","code","tempRoutes","handleCloseDrawer","handleSelect","handleSearch","_b","starClickHandle","star","menuItem","ElAutocomplete","Search","_withCtx","_hoisted_3","_toDisplayString","_hoisted_4","ElTabs","_Fragment","_renderList","ElTabPane","_hoisted_5","sub","_hoisted_6","StarFilled","Star","_hoisted_7","_component_router_link","_hoisted_8","sideWidth","expandHandle","_normalizeClass","_normalizeStyle","GvMenuList","GvExpandMenuPlugin","GvExpandMenu","_sfc_main$o","prefixIcon","suffixIcon","maxlength","readonly","columnProp","rows","autosize","showWordLimit","inputSize","sPlaceholder","renderPrefixIcon","renderSuffixIcon","select","handleClear","handleKeyDown","ElInput","number","prefix","suffix","GvInput","_sfc_main$n","step","stepStrictly","precision","currentValue","oldValue","ElInputNumber","GvInputNumberPlugin","GvInputNumber","_sfc_main$m","dicType","dicRemote","clear","isreload","editRow","collapseTags","userStore","useUserStore","useNotify","dicIcon","remote","loadingText","externalValue","inputShowLabel","inputFilterable","selectValue","originOptions","className","dicSrc","toLowerCase","valueCache","Map","selectSize","isEmptyLabel","getDictItemLabel","l1","l2","formatOptionLabel","findLabelInOptions","opts","find","c","getOptionValue","row","cached","get","obj","set","getSelectCode","o","trim","getSelectLabel","isEmptySelectValue","raw","every","syncEmptyToParent","elSelectModel","mergeOptionsWithSelected","_opts","merged","append","sv","pushDefaultOption","op","push","getSelectOptions","src","xx","arr2","dictCache","dict","getDictDivision","cache","addDictCache","getDict","RegExp","test","filterMethod","initialRemoteLoaded","pendingRemoteQuery","pendingRemotePromise","remoteRequestSeq","filterOriginOptions","remoteDictSearch","requestSeq","sDicType","substring","datas","ops","JSON","parse","console","log","remoteMethod","q","filtered","ensureDefaultOption","existed","resolveDisplayLabel","localOpts","applySelectValue","resolved","showLbl","deep","handleVisibleChange","renderSelectOption","ElOption","renderTableOption","columnTexts","multiColumn","v1","mm","m2","m4","vv1","mmm","mm2","mm4","labelArr","opArr","ElSelect","GvSelectPlugin","GvSelect","_sfc_main$l","columnKey","require","switchType","newStatus","ElSwitch","GvSwitchPlugin","GvSwitch","TimePicker","ElTimePicker","_sfc_main$k","isRange","disabledHours","disabledMinutes","disabledSeconds","timepickerSize","mergedDisabledHours","mergedDisabledMinutes","mergedDisabledSeconds","GvTimePickerPlugin","GvTimePicker","infoMsg","info","calLength","sum","vcity","checkDecimal","decimalLen","checkProvince","card","province","verifyBirthday","year","day","birthday","now_year","time","checkBirthday","re_fifteen","arr_data","re_eighteen","changeFivteenToEighteen","arrInt","arrCh","cardTemp","checkParity","valnum","htValidate","rule","callback","language","_sfc_main$j","divider","isDivider","labelWidth","formStyle","scroller","expose","searchFieldsCollapsed","provide","formRefs","formElRef","setFormRef","rootNodeStyle","rules","isEditContainer","sMaxHeight","isScrollbar","isAnchor","isDialog","colSpanNums","formType","styles","formSize","labelPosition","searchDivider","getLanguage","setDividerShow","getEditBar","editbar","ElRow","getDivider","dividerRender","dividerTitle","getDictItems","dictCacheTmp","dictTmp","getItemRules","_item","validateKey","maxLen","validator","gvValidate","excluded","handleRadioInput","formVal","handleDateRange2Focus","$el","handleDateRange2Blur","handleDateRange2Change","endTime","startTime","datePicker","dateArr","handleSwitchDictChange","error","handleRadioDictChange","getSearchColClass","slotProps","expand","showDefaultRow","searchFormRows","renderFormItem","_index","_slot3","colspan","createRow","blur","focus","change","render","renders","isHidden","cType","validateRule","sDateType","dateFormat","ph","startPh","endPh","cols","colSpanXs","colSpanSm","colSpanMd","colSpanLg","colSpanXl","week","datetime","editables","isTableDic","sLabel","searchFormLabel","switchDefaultVal","searchColClass","ElFormItem","_createTextVNode","ElTooltip","onFocus","padding","margin","clip","overflow","whiteSpace","ElRadioGroup","_slot2","ElRadio","ElRadioButton","vv","toolText","_resolveComponent","getItems","sRootEl","tabPane","offsetTop","classList","contains","clearFormValidate","clearValidate","setFormStyle","formStyle1","lastIndexOf","parseInt","clientWidth","init","formModel","formRule","difference","diff","fieldObj","oldObj","fieldObjKeys","key2","nextProps","prevProps","firstSlot","stringify","dialogBody","dialogBody2","Transition","_withDirectives","ElForm","flexWrap","flex","minWidth","_vShow","GvFormPlugin","GvForm","collapse","loadDict","loadDictDivision","toggleCollapse","collapsed","currentDict","currentReloadDict","currentDictDivision","Fold","Expand","GvHamburgerPlugin","GvHamburger","localeStore","useLocaleStore","langMap","currentLang","handleSetLang","switchLocale","useLocale","ElDropdown","ElDropdownMenu","ElDropdownItem","_component_GvIcon","GvLangSelectPlugin","GvLangSelect","_sfc_main$g","placement","tablePopover","columnType","popClass","handleUpdateVisible","handleShow","handleHide","handlePopoverWrapper","getReferenceSlot","ElPopover","GvPopoverPlugin","GvPopover","_sfc_main$f","radioValue","radioSize","GvRadioPlugin","GvRadio","_sfc_main$e","GvRadioButtonPlugin","GvRadioButton","_sfc_main$d","radioGroupSize","GvRadioGroupPlugin","GvRadioGroup","_sfc_main$c","gutter","GvRowPlugin","GvRow","toggle","isFullscreen","useFullscreen","toggleFullscreen","GvScreenFullPlugin","GvScreenFull","_sfc_main$a","inject","formNode","fieldList","fields","expandFields","shrinkFields","createSearchBar","searchBar","defaultSlot","searchBtnFlag","expandText","shrinkText","shrink","GvSearchBarPlugin","GvSearchBar","hasOneShowingChild","onlyOneChild","showingChildren","useRenderMenuTitle","renderMenuTitle","useRenderMenuItem","menuMode","renderMenuItem","oneShowingChild","fullPath","noShowingChildren","alwaysShow","ElMenuItem","ElSubMenu","_sfc_main$9","menuSelect","layout","getLayout","getCollapseMenus","leftMenuUniqueOpened","getLeftMenuUniqueOpened","activeMenu","open","renderMenu","ElMenu","renderMenuWrap","ElScrollbar","GvSidebarPlugin","GvSidebar","_imports_0","GvSidebarLogoPlugin","GvSidebarLogo","_sfc_main$7","createTableBar","tableBar","defaultSlots","childrenNodes","firstChild","_sfc_main$6","closable","effect","round","tagSize","ElTag","appendPageInfo","pi","pageInfo","currentpagenum","recordsperpage","countrows","totalpage","combined","tabNode","filterConditions","co","sOp","coo","ds","condition","searchCombined","action","upper","sType","saveCombined","fetchData","fetch","submit","hasMsg","fetchTable","checkForms","fmNodes","fmNode","rawFmChildren","fmChildList","fmNode2","_c","save","check","fmInnerNode","conditions","update","search","searchInputNode","tableEl","tableHeader","tableFixedHeader","columns","h","columnsFixed","lenFixed","searchNoFm","toNewPageSearch","trans","insertResult","searchData","updateResult","rownums","currentRow","removeResult","getDictDisplayLabel","dictObj","_f","_e","_d","_i","_h","_g","_k","_j","setEditValue","rowData","fieldValue","items","itemChild","codes","resetEditValue","crud","tableHeadFilterPopoverPopperStyle","maxWidth","_sfc_main$5","refTable","tableHead","tableData","pageSize","rowClassName","rowStyle","spanMethod","cellStyle","tableType","tableSort","tableKit","tableFetch","multi","isShowPage","total","tableInit","beforeImport","tableFilter","tableCb","expandRowKeys","limitHeight","tableAction","tableActionIcon","sTableAction","sTableActionIcon","sTableConfirm","detailPlacement","sTableType","originTableHead","tableHeads","sHeight","sMaxWidth","isEditTable","sPageSize","resultData","recordsList","records","pageSizes","filterHeads","popoverVisible","exportBtnDisabled","exportBtnLoading","importBtnLoading","tableSortMode","exportDialogShow","importDialogShow","sTableBar","gTableBar","tableSearchShow","sTableSort","sTableKit","showPopoverDetail","pageLayout","actionWidth","transHash","headColumn","headColumnInit","columnSumsDecimal","isIndeterminate","columnTreeList","columnCheckedKeys","storageKey","loginAccount","lsTableHeads","debounceSearch","tableRefs","tableRef","tableSize","getPageInfo","current","pages","setTableRef","closeAllPopover","property","next","ensurePopoverKey","propKey","wrapPopoverFilterBody","body","getScrollLeft","startLoading","stopLoading","transRecords","loadAction","splice","handleImport","handleExport","getImportBtn","import","buttonName","getExportBtn","export","runPageSearch","fC","fetchFn","handleSizeChange","handleCurrentChange","handleTableSearchInput","handleTableSearch","fh","strFh","y","getTableSearch","handlePopoverShow","popOvers","tableBodyWidth","style","bodyWrapper","scrollLeft","handlePopoverHide","createChangedColumns","checkedKeys","column","hasHidden","handleColumnCheckChange","checked","childChecked","$refs","$children","getCheckedKeys","hColumns","getTableColumn","setStoreLocal","handleTableRefresh","inputSearch","getTableBar","btns","exportSlots","importSlots","getKitBar","isVisible","ElButtonGroup","Refresh","Operation","ElTree","getSortModel","marginRight","columnFilterHandler","propField","popoverHtml","checkList","dateHtmlArr","filterValue","innerText","assign","getAttribute","add","tableFixHeader","fixColumns","fixLen","columnFilterHandlerReset","remove","primaryBtn","setAttribute","getColWidth","edit","label2","sWidth","columnFormatter","cellValue","handleColumnFilter","popoverHtmlList","from","pop","removeAttribute","renderHeadFilter","_slot4","_slot5","_slot6","fc","$store","getters","dictDivision","dispatch","ret2","_slot7","_slot8","_slot9","handleDictCheckAll","handleDictCheck","handlePopoverSlotClick","renderColumnItem","tableFixed","fixed","align","formatter","cellBlur","cellEnter","cellChange","selectable","showLabelProp","columnFilter","multiLabel","heads","reserveSelection","sHidden","sProp","Math","random","sFixed","sortable","multiLabels","hType","hSLabel","hSProp","hKey","hSFixed","hReserveSelection","hSortable","hSWidth","ElTableColumn","scope","renderRowEdit","renderAction","content","confirmArr","iconArr","sContent","confirms","detail","actionType","onClick","lock","$index","onConfirm","onAfter-enter","handleDetailPopoverShow","checkEditRow","tableColumns","thd","lsTableHeadsArr","startIndex","ff","f","treeNode","rownumWidth","actionHead","actionColumn","columnVNode","sortMethod","_0","order","fieldName","sortingType","sumData","sort","row1","row2","isNaN","localeCompare","oi","rowDblClick","tagName","cell","onRowDblclick","tr","tds","firstBtn","btnArr","j","btn","prevVal","typeArr","doLayout","n","tableBodyWrapper","_slot0","GvTableBar","ElTable","_resolveDirective","ElPagination","GvTablePlugin","GvTable","_sfc_main$4","autoHeight","proxy","GvTabsPlugin","GvTabPane","_sfc_main$3","tabPosition","tabMaxHeight","tabHeight","panes","handleTabClick","tabVm","tabName","calcPaneInstances","createTabPane","dialogContainer","GvTabs","GvTagPlugin","GvTag","_sfc_main$2","reactive","currentKey","activeKey","tagsViewStore","useTagsViewStore","permsStore","visitedViews","mainAppRoutes","isRedirect","isActive","isAffix","affix","filterAffixNavMenus","navMenus","affixTags","tagPath","params","hash","redirectedFrom","addAffixTags","tagView","addVisitedView","createTabPanel","icons","picon","showContextMenu","closeContextMenu","toLink","routePath","targetView","toLastView","visitedView","currentView","latestView","addNavMenu","addTagView","moveToCurrentTag","view","clickTab","tab","closeCurrentTag","targetKey","delTagView","refreshSelectedTag","delCachedView","findCurTagIndex","findIndex","closeTagsOrientation","isClosed","vV","cloneDeep","closeOthersTags","delOthersViews","oldName","tagsViewEl","useEventListener","targetNode","parentElement","clientX","pageX","clientY","pageY","GvTagsViewPlugin","GvTagsView","themeOptions","currentTheme","handleSetTheme","GvThemePlugin","GvTheme","_sfc_main","treeProps","nodeKey","load","showCheckbox","draggable","defaultExpandedKeys","defaultCheckedKeys","iconClass","defaultExpandAll","expandOnClickNode","checkOnClickNode","filterNodeMethod","renderContent","handleNodeClick","handleNodeExpand","handleNodeCollapse","handleCheck","checkedInfo","handleCheckChange","handleLazyLoad","handleNodeDrop","draggingNode","dropNode","dropType","GvTreePlugin","GvTree","encrypt","word","keyStr","CryptoJS","ww","srcs","decrypt","generateKey","num","library","randomPoz","components","GvPopconfirmPlugin","GvTabPanePlugin","install","setActivePinia","GuavaUI"],"mappings":"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"}
|
|
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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"}
|