@xiaohaih/json-form-vant 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +807 -0
- package/TODO.md +36 -0
- package/components/area/index.ts +6 -0
- package/components/area/index.vue +120 -0
- package/components/area/types.ts +84 -0
- package/components/cascader/index.ts +6 -0
- package/components/cascader/index.vue +146 -0
- package/components/cascader/types.ts +75 -0
- package/components/checkbox/index.ts +6 -0
- package/components/checkbox/index.vue +59 -0
- package/components/checkbox/types.ts +54 -0
- package/components/checkbox-group/index.ts +6 -0
- package/components/checkbox-group/index.vue +67 -0
- package/components/checkbox-group/types.ts +63 -0
- package/components/component-definition/components.ts +29 -0
- package/components/component-definition/definition.ts +25 -0
- package/components/component-definition/index.ts +4 -0
- package/components/custom-render/index.ts +6 -0
- package/components/custom-render/index.vue +66 -0
- package/components/custom-render/types.ts +43 -0
- package/components/date-picker/index.ts +6 -0
- package/components/date-picker/index.vue +130 -0
- package/components/date-picker/types.ts +91 -0
- package/components/date-time-picker-group/index.ts +6 -0
- package/components/date-time-picker-group/index.vue +158 -0
- package/components/date-time-picker-group/types.ts +115 -0
- package/components/datetime-picker/index.ts +6 -0
- package/components/datetime-picker/index.vue +128 -0
- package/components/datetime-picker/types.ts +78 -0
- package/components/dynamic-group/index.ts +10 -0
- package/components/dynamic-group/index.vue +140 -0
- package/components/dynamic-group/types.ts +68 -0
- package/components/group/assist.ts +99 -0
- package/components/group/index.ts +7 -0
- package/components/group/index.vue +117 -0
- package/components/group/types.ts +57 -0
- package/components/group/virtual-group.vue +38 -0
- package/components/index.ts +10 -0
- package/components/input/index.ts +6 -0
- package/components/input/index.vue +83 -0
- package/components/input/types.ts +43 -0
- package/components/input-slot/index.ts +6 -0
- package/components/input-slot/index.vue +148 -0
- package/components/input-slot/types.ts +34 -0
- package/components/number-keyboard/index.ts +6 -0
- package/components/number-keyboard/index.vue +81 -0
- package/components/number-keyboard/types.ts +57 -0
- package/components/password-input/index.ts +6 -0
- package/components/password-input/index.vue +103 -0
- package/components/password-input/types.ts +64 -0
- package/components/picker/index.ts +6 -0
- package/components/picker/index.vue +136 -0
- package/components/picker/types.ts +94 -0
- package/components/radio/index.ts +6 -0
- package/components/radio/index.vue +68 -0
- package/components/radio/types.ts +58 -0
- package/components/radio-group/index.ts +6 -0
- package/components/radio-group/index.vue +74 -0
- package/components/radio-group/types.ts +65 -0
- package/components/rate/index.ts +6 -0
- package/components/rate/index.vue +63 -0
- package/components/rate/types.ts +47 -0
- package/components/share.ts +78 -0
- package/components/signature/index.ts +6 -0
- package/components/signature/index.vue +65 -0
- package/components/signature/instance.vue +161 -0
- package/components/signature/types.ts +79 -0
- package/components/slider/index.ts +6 -0
- package/components/slider/index.vue +63 -0
- package/components/slider/types.ts +53 -0
- package/components/stepper/index.ts +6 -0
- package/components/stepper/index.vue +62 -0
- package/components/stepper/types.ts +47 -0
- package/components/switch/index.ts +6 -0
- package/components/switch/index.vue +61 -0
- package/components/switch/types.ts +51 -0
- package/components/time-picker/index.ts +6 -0
- package/components/time-picker/index.vue +130 -0
- package/components/time-picker/types.ts +91 -0
- package/components/tree-select/index.ts +6 -0
- package/components/tree-select/index.vue +160 -0
- package/components/tree-select/types.ts +77 -0
- package/components/upload/index.ts +6 -0
- package/components/upload/index.vue +109 -0
- package/components/upload/types.ts +85 -0
- package/components/use.ts +45 -0
- package/components/utils.ts +52 -0
- package/components/wrapper/index.ts +6 -0
- package/components/wrapper/index.vue +117 -0
- package/components/wrapper/types.ts +94 -0
- package/dist/components/area/index.d.ts +5 -0
- package/dist/components/area/index.vue.d.ts +1843 -0
- package/dist/components/area/types.d.ts +1434 -0
- package/dist/components/cascader/index.d.ts +5 -0
- package/dist/components/cascader/index.vue.d.ts +2467 -0
- package/dist/components/cascader/types.d.ts +1419 -0
- package/dist/components/checkbox/index.d.ts +5 -0
- package/dist/components/checkbox/index.vue.d.ts +1550 -0
- package/dist/components/checkbox/types.d.ts +1313 -0
- package/dist/components/checkbox-group/index.d.ts +5 -0
- package/dist/components/checkbox-group/index.vue.d.ts +1643 -0
- package/dist/components/checkbox-group/types.d.ts +1372 -0
- package/dist/components/component-definition/components.d.ts +30 -0
- package/dist/components/component-definition/index.d.ts +4 -0
- package/dist/components/custom-render/index.d.ts +5 -0
- package/dist/components/custom-render/index.vue.d.ts +1473 -0
- package/dist/components/custom-render/types.d.ts +1175 -0
- package/dist/components/date-picker/index.d.ts +5 -0
- package/dist/components/date-picker/index.vue.d.ts +1888 -0
- package/dist/components/date-picker/types.d.ts +1458 -0
- package/dist/components/date-time-picker-group/index.d.ts +5 -0
- package/dist/components/date-time-picker-group/index.vue.d.ts +2181 -0
- package/dist/components/date-time-picker-group/types.d.ts +1549 -0
- package/dist/components/dynamic-group/index.d.ts +5 -0
- package/dist/components/dynamic-group/index.vue.d.ts +457 -0
- package/dist/components/dynamic-group/types.d.ts +403 -0
- package/dist/components/group/assist.d.ts +58 -0
- package/dist/components/group/index.d.ts +6 -0
- package/dist/components/group/index.vue.d.ts +139 -0
- package/dist/components/group/types.d.ts +189 -0
- package/dist/components/group/virtual-group.vue.d.ts +42 -0
- package/dist/components/index.d.ts +3 -0
- package/dist/components/input/index.d.ts +5 -0
- package/dist/components/input/index.vue.d.ts +2229 -0
- package/dist/components/input/types.d.ts +1258 -0
- package/dist/components/input-slot/index.d.ts +5 -0
- package/dist/components/input-slot/index.vue.d.ts +626 -0
- package/dist/components/input-slot/types.d.ts +311 -0
- package/dist/components/number-keyboard/index.d.ts +5 -0
- package/dist/components/number-keyboard/index.vue.d.ts +1643 -0
- package/dist/components/number-keyboard/types.d.ts +1324 -0
- package/dist/components/password-input/index.d.ts +5 -0
- package/dist/components/password-input/index.vue.d.ts +1715 -0
- package/dist/components/password-input/types.d.ts +1357 -0
- package/dist/components/picker/index.d.ts +5 -0
- package/dist/components/picker/index.vue.d.ts +1868 -0
- package/dist/components/picker/types.d.ts +1466 -0
- package/dist/components/radio/index.d.ts +5 -0
- package/dist/components/radio/index.vue.d.ts +1563 -0
- package/dist/components/radio/types.d.ts +1327 -0
- package/dist/components/radio-group/index.d.ts +5 -0
- package/dist/components/radio-group/index.vue.d.ts +1617 -0
- package/dist/components/radio-group/types.d.ts +1383 -0
- package/dist/components/rate/index.d.ts +5 -0
- package/dist/components/rate/index.vue.d.ts +1557 -0
- package/dist/components/rate/types.d.ts +1281 -0
- package/dist/components/share.d.ts +679 -0
- package/dist/components/signature/index.d.ts +5 -0
- package/dist/components/signature/index.vue.d.ts +3017 -0
- package/dist/components/signature/instance.vue.d.ts +1614 -0
- package/dist/components/signature/types.d.ts +1369 -0
- package/dist/components/slider/index.d.ts +5 -0
- package/dist/components/slider/index.vue.d.ts +1563 -0
- package/dist/components/slider/types.d.ts +1302 -0
- package/dist/components/stepper/index.d.ts +5 -0
- package/dist/components/stepper/index.vue.d.ts +1620 -0
- package/dist/components/stepper/types.d.ts +1281 -0
- package/dist/components/switch/index.d.ts +5 -0
- package/dist/components/switch/index.vue.d.ts +1529 -0
- package/dist/components/switch/types.d.ts +1296 -0
- package/dist/components/time-picker/index.d.ts +5 -0
- package/dist/components/time-picker/index.vue.d.ts +1936 -0
- package/dist/components/time-picker/types.d.ts +1458 -0
- package/dist/components/tree-select/index.d.ts +5 -0
- package/dist/components/tree-select/index.vue.d.ts +1802 -0
- package/dist/components/tree-select/types.d.ts +1411 -0
- package/dist/components/upload/index.d.ts +5 -0
- package/dist/components/upload/index.vue.d.ts +1697 -0
- package/dist/components/upload/types.d.ts +1376 -0
- package/dist/components/use.d.ts +53 -0
- package/dist/components/utils.d.ts +15 -0
- package/dist/components/wrapper/index.d.ts +5 -0
- package/dist/components/wrapper/index.vue.d.ts +1085 -0
- package/dist/components/wrapper/types.d.ts +541 -0
- package/dist/docs/.vitepress/config.d.ts +3 -0
- package/dist/docs/.vitepress/theme/index.d.ts +2 -0
- package/dist/index.cjs.js +5459 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.cjs.min.js +3568 -0
- package/dist/index.cjs.min.js.map +1 -0
- package/dist/index.esm.js +5264 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.esm.min.js +3559 -0
- package/dist/index.esm.min.js.map +1 -0
- package/dist/index.umd.js +5465 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/index.umd.min.js +3573 -0
- package/dist/index.umd.min.js.map +1 -0
- package/dist/src/assist.d.ts +32 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/interface.d.ts +129 -0
- package/dist/src/utils.d.ts +9 -0
- package/dist/src/version.d.ts +2 -0
- package/docs/.vitepress/config.ts +99 -0
- package/docs/.vitepress/theme/index.ts +5 -0
- package/docs/README.md +20 -0
- package/docs/index.md +25 -0
- package/env.d.ts +8 -0
- package/package.json +71 -0
- package/scripts/generate-version.mjs +26 -0
- package/scripts/postinstall.cjs +13 -0
- package/scripts/utils.cjs +67 -0
- package/src/assist.ts +40 -0
- package/src/index.ts +5 -0
- package/src/interface.ts +293 -0
- package/src/utils.ts +22 -0
- package/src/version.ts +2 -0
- package/tsconfig.app.json +41 -0
- package/tsconfig.json +7 -0
- package/tsconfig.node.json +24 -0
- package/tsdown.config.ts +12 -0
- package/vite.config.ts +93 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","names":["set"],"sources":["../../../node_modules/.pnpm/vue-demi@0.14.10_@vue+compo_44ffc680e8a812ee240f01ee94c83c4e/node_modules/vue-demi/lib/index.mjs","../../core/utils/index.ts","../../core/use/assist.ts","../../core/use/constant.ts","../../core/use/plain/index.ts","../../core/use/plain/types.ts","../../core/use/wrapper/index.ts","../../core/use/wrapper/types.ts","../../core/utils/base.ts","../../core/version.ts","../components/use.ts","../components/share.ts","../components/area/types.ts","../components/area/index.vue","../components/area/index.vue","../components/input-slot/types.ts","../components/input-slot/index.vue","../components/input-slot/index.vue","../components/utils.ts","../components/cascader/types.ts","../components/cascader/index.vue","../components/cascader/index.vue","../components/checkbox-group/types.ts","../components/checkbox-group/index.vue","../components/checkbox-group/index.vue","../components/checkbox/types.ts","../components/checkbox/index.vue","../components/checkbox/index.vue","../components/custom-render/types.ts","../components/custom-render/index.vue","../components/custom-render/index.vue","../components/date-picker/types.ts","../components/date-picker/index.vue","../components/date-picker/index.vue","../components/date-time-picker-group/types.ts","../components/date-time-picker-group/index.vue","../components/date-time-picker-group/index.vue","../components/input/types.ts","../components/input/index.vue","../components/input/index.vue","../components/number-keyboard/types.ts","../components/number-keyboard/index.vue","../components/number-keyboard/index.vue","../components/password-input/types.ts","../components/password-input/index.vue","../components/password-input/index.vue","../components/picker/types.ts","../components/picker/index.vue","../components/picker/index.vue","../components/radio-group/types.ts","../components/radio-group/index.vue","../components/radio-group/index.vue","../components/radio/types.ts","../components/radio/index.vue","../components/radio/index.vue","../components/rate/types.ts","../components/rate/index.vue","../components/rate/index.vue","../components/signature/types.ts","../components/signature/instance.vue","../components/signature/instance.vue","../components/signature/index.vue","../components/signature/index.vue","../components/slider/types.ts","../components/slider/index.vue","../components/slider/index.vue","../components/stepper/types.ts","../components/stepper/index.vue","../components/stepper/index.vue","../components/switch/types.ts","../components/switch/index.vue","../components/switch/index.vue","../components/time-picker/types.ts","../components/time-picker/index.vue","../components/time-picker/index.vue","../components/tree-select/types.ts","../components/tree-select/index.vue","../components/tree-select/index.vue","../components/upload/types.ts","../components/upload/index.vue","../components/upload/index.vue","../components/component-definition/components.ts","../components/group/assist.ts","../components/group/types.ts","../components/group/virtual-group.vue","../components/group/virtual-group.vue","../components/group/index.vue","../components/group/index.vue","../components/dynamic-group/types.ts","../components/dynamic-group/index.vue","../components/dynamic-group/index.vue","../components/dynamic-group/index.ts","../components/wrapper/types.ts","../components/wrapper/index.vue","../components/wrapper/index.vue","../src/assist.ts","../src/interface.ts","../src/version.ts"],"sourcesContent":["import * as Vue from 'vue'\n\nvar isVue2 = false\nvar isVue3 = true\nvar Vue2 = undefined\n\nfunction install() {}\n\nexport function set(target, key, val) {\n if (Array.isArray(target)) {\n target.length = Math.max(target.length, key)\n target.splice(key, 1, val)\n return val\n }\n target[key] = val\n return val\n}\n\nexport function del(target, key) {\n if (Array.isArray(target)) {\n target.splice(key, 1)\n return\n }\n delete target[key]\n}\n\nexport * from 'vue'\nexport {\n Vue,\n Vue2,\n isVue2,\n isVue3,\n install,\n}\n","import type { VNode } from 'vue-demi';\nimport type { Hyphenate } from './base';\n\n/** 空函数 */\nexport function noop() {}\n\n/** 获取类型 */\nexport function getType(value: any): string {\n return Object.prototype.toString.call(value).slice(8, -1);\n}\n\n/** 是否是数组 */\nexport function isArray(value: any): value is any[] {\n return getType(value) === 'Array';\n}\n\n/** 是否是纯对象 */\nexport function isPlainObject(value: any): value is Record<string, any> {\n return getType(value) === 'Object';\n}\n\n/**\n * 空值转为提供的默认值\n * @param {*} val 值为空时转为默认值\n * @param {*} defaultVal\n */\nexport function emptyToValue<T>(val: any, defaultVal: T) {\n // 数组不应该置为空值, 影响到组件内部逻辑\n // if (Array.isArray(val)) return val.filter(Boolean).length ? val : defaultVal;\n return isEmptyValue(val) ? defaultVal : val;\n}\n\n// /** 判断两个值是否相等, 排除掉空值 */\n// export function isEqualExcludeEmptyValue(x: any, y: any) {\n// // 不做引用类型的比较, 防止引用地址不同 导致无法赋值\n// return (isEmptyValue(x) && isEmptyValue(y)); // || isEqual(x, y);\n// }\n\n/** 判断是否不是空值(null, undefined, '') */\nexport function isNotEmptyValue(val: any) {\n return !isEmptyValue(val);\n}\n\n/** 判断是否是空值(null, undefined, '') */\nexport function isEmptyValue(val: any) {\n return val === undefined || val === '' || val === null;\n}\n\n/** 判断两个值是否一致 */\nexport function isEqual(x: any, y: any): boolean {\n if (Object.is(x, y)) return true;\n if (x instanceof Date && y instanceof Date) {\n return x.getTime() === y.getTime();\n }\n if (x instanceof RegExp && y instanceof RegExp) {\n return x.toString() === y.toString();\n }\n if (typeof x !== 'object' || x === null || typeof y !== 'object' || y === null) {\n return false;\n }\n const keysX = Reflect.ownKeys(x as unknown as object) as (keyof typeof x)[];\n const keysY = Reflect.ownKeys(y as unknown as object);\n if (keysX.length !== keysY.length) return false;\n for (let i = 0; i < keysX.length; i++) {\n if (!Reflect.has(y as unknown as object, keysX[i]!)) return false;\n if (!isEqual(x[keysX[i]!], y[keysX[i]!])) return false;\n }\n return true;\n}\n\n/** 判断是否是原始类型(number , string , boolean , symbol, bigint, undefined, null) */\nexport function isPrimitive(value: any) {\n return value === undefined || value === null || (typeof value !== 'object' && typeof value !== 'function');\n}\n\n/** 拷贝 */\nexport function clone<T>(obj: T, deep?: boolean): T {\n if (isPrimitive(obj)) return obj;\n if (typeof obj === 'function') return obj.bind({});\n const newObj = new ((obj as object).constructor as { new (): T })();\n Object.getOwnPropertyNames(obj).forEach((prop) => {\n (newObj as any)[prop] = deep ? clone((obj as any)[prop]) : (obj as any)[prop];\n });\n return newObj;\n}\n\n/**\n * 获取指定层级的父级(包括自身)\n * @param {Record<string, any>[]} data 数据源\n * @param {(item) => boolean} cb 当前数据项是否匹配\n */\nexport function getChained<T extends Record<string, any>>(\n data: T[],\n cb: (item: T) => boolean,\n childrenKey = 'children',\n): T[] {\n for (const item of data) {\n if (cb(item)) {\n return [item];\n }\n else if (item[childrenKey]?.length) {\n const r = getChained(item[childrenKey], cb);\n if (r.length) {\n r.unshift(item);\n return r;\n }\n }\n }\n return [];\n}\n\n/**\n * 获取渲染节点\n * @param {string | number | object | Function} node 需渲染元素\n */\nexport function getNode(node: string | number | Record<string, any> | ((...args: any[]) => VNode) | undefined | null) {\n // 直接抛出 null, template 中会报错\n if (!node && node !== 0) return null as unknown as {};\n return typeof node === 'function' ? node : typeof node === 'object' ? node : () => node;\n}\n\n/**\n * 判断对象是否存在指定属性\n * @example hasOwn({}, 'a')\n */\nexport function hasOwn<T extends Record<string, any>, K extends keyof T = keyof T>(obj: T, key: K) {\n // eslint-disable-next-line ts/ban-ts-comment\n // @ts-ignore 忽视vue2版本报目标库错误\n // eslint-disable-next-line no-prototype-builtins\n return Object.hasOwn ? Object.hasOwn(obj, key) : obj.hasOwnProperty(key);\n}\n\n/** 缓存字符串 */\nfunction cacheStringFunction<T extends (key: string) => any>(fn: T): T {\n const cache: Record<string, any> = {};\n return ((str: string) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n }) as unknown as T;\n}\n\nconst hyphenateRE = /\\B([A-Z])/g;\n/** 将驼峰转为 - 连接 */\nexport const hyphenate = cacheStringFunction(\n <T extends string>(str: T) => str.replace(hyphenateRE, '-$1').toLowerCase() as Hyphenate<T>,\n);\n\n/**\n * 版本比较, 比较两个语义化版本号(支持预发布标签: alpha/beta/rc 等; 支持 `v` 前缀)\n * @param {string} version1 待比较版本1\n * @param {string} version2 待比较版本2\n * @returns {number} 比较结果: -1 表示 version1 < version2, 0 表示相等, 1 表示 version1 > version2\n * @example\n * ```ts\n * compareVersion('1.1.0-beta.16', '1.1.0') // -1\n * compareVersion('2.10.7', '2.9.9') // 1\n * compareVersion('v1.0.0', '1.0.0') // 0\n * ```\n */\nexport function compareVersion(version1: string, version2: string): number {\n // 移除前缀 'v' 如果存在\n const v1 = version1.charAt(0) === 'v' ? version1.slice(1) : version1;\n const v2 = version2.charAt(0) === 'v' ? version2.slice(1) : version2;\n\n // 分割版本号\n const parts1 = v1.split(/[.-]/);\n const parts2 = v2.split(/[.-]/);\n\n // 获取最大长度\n const maxLength = Math.max(parts1.length, parts2.length);\n\n for (let i = 0; i < maxLength; i++) {\n const part1 = parts1[i] || '0';\n const part2 = parts2[i] || '0';\n\n // 检查是否为预发布版本(如 beta, alpha, rc 等)\n const isPreRelease1 = /[a-z]/i.test(part1);\n const isPreRelease2 = /[a-z]/i.test(part2);\n\n // 如果一个是预发布版本, 另一个不是, 则非预发布版本更大\n if (isPreRelease1 && !isPreRelease2) {\n return -1;\n }\n if (!isPreRelease1 && isPreRelease2) {\n return 1;\n }\n\n // 如果都是预发布版本, 按字母顺序比较\n if (isPreRelease1 && isPreRelease2) {\n if (part1 < part2) return -1;\n if (part1 > part2) return 1;\n continue;\n }\n\n // 数字比较\n const num1 = Number.parseInt(part1, 10);\n const num2 = Number.parseInt(part2, 10);\n\n if (num1 < num2) return -1;\n if (num1 > num2) return 1;\n }\n\n return 0;\n}\n\n/**\n * 检查版本是否满足条件\n * @param {string} currentVersion 当前版本\n * @param {string} requiredVersion 要求的版本\n * @param {string} operator 比较操作符 ('>=', '>', '<=', '<', '=', '==')\n */\nexport function checkVersion(currentVersion: string, requiredVersion: string, operator: '>=' | '>' | '<=' | '<' | '=' | '=='): boolean {\n const comparison = compareVersion(currentVersion, requiredVersion);\n\n if (operator === '>=') return comparison >= 0;\n if (operator === '>') return comparison > 0;\n if (operator === '<=') return comparison <= 0;\n if (operator === '<') return comparison < 0;\n if (operator === '=' || operator === '==') return comparison === 0;\n return false;\n}\n\n/** 正则 - 路径切割 */\nconst fieldPathReg = /[.[\\]]/;\n/** 正则 - 匹配数字 */\nconst numReg = /^\\d+$/;\n/** 正则 - 匹配引号 */\nconst quotedReg = /['\"]/g;\n\n/**\n * 根据字符串路径获取值\n *\n * @example get(person, 'friends[0].name')\n */\nexport function get<TDefault = unknown>(value: any, path: string, defaultValue?: TDefault): TDefault {\n if (!value || !path) return defaultValue as TDefault;\n const segments = path.split(fieldPathReg);\n let current: any = value;\n for (const key of segments) {\n if (current === null) return defaultValue as TDefault;\n if (current === undefined) return defaultValue as TDefault;\n const dequoted = key.replace(quotedReg, '');\n if (dequoted.trim() === '') continue;\n current = current[dequoted];\n // current = current[key];\n }\n if (current === undefined) return defaultValue as TDefault;\n return current;\n}\n\n/**\n * 根据字符串路径设置值\n *\n * @example\n * set({}, 'name', 'ra') // => { name: 'ra' }\n * set({}, 'cards[0].value', 2) // => { cards: [{ value: 2 }] }\n */\nexport function set<T extends object, K>(initial: T, path: string, value: K, assign?: (obj: Record<string, any>, key: string, value: any) => void) {\n if (!initial || !path) return;\n const segments = path.split(fieldPathReg).filter((x) => !!x.trim());\n if (!segments.length) return;\n const _set = (node: any) => {\n if (segments.length > 1) {\n const key = segments.shift() as string;\n node[key] === undefined && (assign\n ? assign(node, key, (numReg.test(segments[0]!) ? [] : {}))\n : node[key] = (numReg.test(segments[0]!) ? [] : {}));\n _set(node[key]);\n }\n else {\n assign ? assign(node, segments[0]!, value) : node[segments[0]!] = value;\n }\n };\n _set(initial);\n}\n","import type { ExtractPropTypes, Ref } from 'vue-demi';\nimport { computed, getCurrentInstance, nextTick, onBeforeUnmount, ref, set as setAttr, unref, watch } from 'vue-demi';\nimport { noop, set } from '../utils/index';\nimport type { CommonMethod, EventsWithInstance } from './constant';\n\nexport type Tail<T extends any[]> = T extends [infer _, ...infer Rest] ? Rest : T;\n\n// /** 获取条件的初始值 */\n// export function useValue<T extends Record<'value' | 'query', any>>(getValue: () => T) {\n// const setValue = ref<T['value']>();\n// const a = computed({\n// set(value: any) {\n// setValue.value = value;\n// },\n// get() {\n// const { value, query } = getValue();\n// if (value === undefined && setValue.value === undefined) return undefined;\n// return setValue.value === undefined\n// ? typeof value === 'function' ? value({ query }) : value\n// : setValue.value;\n// },\n// });\n// return a;\n// }\n\n/**\n * 转换当前事件循环内更新标识\n * @param {boolean} initialValue 初始状态\n */\nexport function useFlag(initialValue = true) {\n /** 是否允许改变 */\n const flag = ref(initialValue);\n /** 禁止改变 */\n const updateFlag = () => {\n flag.value = !initialValue;\n nextTick(() => {\n flag.value = initialValue;\n });\n };\n return { flag, updateFlag };\n}\n\n/** 对赋值进行处理 - 防止 vue2 对新增属性不响应 */\nexport function vueSet<T extends object, K>(initial: T, path: string, value: K) {\n set(initial, path, value, setAttr);\n}\n\n/**\n * 事件包装器\n */\nexport function useCreateEmitter<Events extends Record<string, (...args: any[]) => any>>() {\n let events: {\n [K in keyof Events]?: [ReturnType<typeof getCurrentInstance>, ((...args: Parameters<Events[K]>) => ReturnType<Events[K]>)][]\n } = {};\n /**\n * 监听事件\n * @param {ReturnType<typeof getCurrentInstance>} instance vue 实例\n * @param {string} type 监听事件类型\n * @param {(...args: any[]) => any} fn 事件逻辑执行前触发, 可返回一个函数在逻辑执行后执行\n * @return {() => void} 移除监听的函数\n */\n function on<K extends keyof Events>(instance: ReturnType<typeof getCurrentInstance>, type: K, fn: Events[K]) {\n events[type] || (events[type] = []);\n events[type].push([instance, fn]);\n return () => off(instance, type, fn);\n }\n /**\n * 移除事件, 不传回调删除所有该类型的事件\n * @param {ReturnType<typeof getCurrentInstance>} instance vue 实例\n * @param {string} type 监听事件类型\n * @param {(...args: any[]) => any} [fn] 监听事件回调函数\n */\n function off<K extends keyof Events>(instance: ReturnType<typeof getCurrentInstance>, type: K, fn?: Events[K]) {\n if (!events[type]) return;\n if (fn) {\n events[type] = events[type].filter(([ins, cb]) => (ins !== instance && cb !== fn));\n }\n else {\n instance ? events[type] = events[type].filter(([ins]) => (ins !== instance)) : delete events[type];\n }\n }\n /** 触发事件并返回回调函数的返回值 */\n function emit<K extends keyof Events>(type: K, ...args: Parameters<Events[K]>) {\n return events[type]?.map(([ins, cb]) => cb(...args)) || [];\n }\n /** 清空所有事件 */\n function clear(instance?: ReturnType<typeof getCurrentInstance>) {\n instance ? Object.keys(events).forEach((type) => off(instance, type)) : events = {};\n }\n onBeforeUnmount(clear);\n\n return { on, off, emit, clear };\n}\n\n/**\n * 包装监听事件, 在 cb 执行时, 将 vue 实例作为首参传入\n * @param {Function} cb 监听的回调事件\n * @return {Function}\n */\nexport function useWithCurrentInstance<T extends (ins: ReturnType<typeof getCurrentInstance>, ...args: any[]) => any>(cb: T) {\n const currentInstance = getCurrentInstance();\n return function emitCurrentInstanceOn(...args: Tail<Parameters<T>>): ReturnType<T> {\n return cb(currentInstance, ...args);\n };\n}\n\n/**\n * 通用的事件处理方法\n * @param {object} wrapper 实例\n */\nexport function useEmitter<T extends { emitterWithInstance: EventsWithInstance }>(wrapper: T | undefined) {\n const emitter = {\n /** 监听事件 - 将事件绑定到当前组件的生命周期上 */\n on: useWithCurrentInstance(wrapper?.emitterWithInstance.on || eventNoop),\n /** 解除监听事件 - 将事件绑定到当前组件的生命周期上 */\n off: useWithCurrentInstance(wrapper?.emitterWithInstance.off || noop),\n /** 删除所有的监听事件 - 将事件绑定到当前组件的生命周期上 */\n clear: useWithCurrentInstance(wrapper?.emitterWithInstance.clear || noop),\n };\n onBeforeUnmount(emitter.clear);\n return emitter;\n}\n\nfunction eventNoop() {\n return noop;\n}\n","import type { getCurrentInstance, Ref } from 'vue-demi';\nimport { inject, version } from 'vue-demi';\n\n// eslint-disable-next-line ts/consistent-type-definitions\nexport type Events = {\n /**\n * 重置事件\n * @param {string} type 监听事件类型\n * @param {(...args: any[]) => (() => void | any)} callback 事件逻辑执行前触发, 可返回一个函数在逻辑执行后执行\n * @return {() => void} 返回一个移除监听的函数\n */\n reset: () => ((() => void) | void);\n};\n\n// eslint-disable-next-line ts/consistent-type-definitions\nexport type EventsWithInstance = {\n /**\n * 监听指定类型事件\n * @param {ReturnType<typeof getCurrentInstance>} instance vue 实例\n * @param {string} type 监听事件类型\n * @param {(...args: any[]) => (() => void | any)} fn 事件逻辑执行前触发, 可返回一个函数在逻辑执行后执行\n * @return {() => void} 返回一个移除监听的函数\n */\n on: <K extends keyof Events>(instance: ReturnType<typeof getCurrentInstance>, type: K, fn: Events[K]) => () => void;\n /**\n * 移除指定类型事件\n * @param {ReturnType<typeof getCurrentInstance>} instance vue 实例\n * @param {string} type 监听事件类型\n * @param {(...args: any[]) => any} [fn] 监听事件回调函数\n */\n off: <K extends keyof Events>(instance: ReturnType<typeof getCurrentInstance>, type: K, fn?: Events[K]) => void;\n /**\n * 移除所有事件\n * @param {ReturnType<typeof getCurrentInstance>} instance vue 实例\n */\n clear: (instance: ReturnType<typeof getCurrentInstance>) => void;\n}\n\nexport type EventsWithoutInstance<T extends EventsWithInstance = EventsWithInstance> = {\n [K in keyof T]: T[K] extends (_: any, ...args: infer P) => infer R ? (...args: P) => R : never;\n}\n\n/** 判断是否是 2.7.* 版本, 监听生命周期需对该版本做处理 */\nexport const IS_COMPOSITION_VERSION = version.slice(0, 3) === '2.7';\n\n/** 容器注入的 key */\nexport const provideKey = 'json-form-wrapper';\n\n/** 容器注入值的类型 */\nexport interface ProvideValue<Query extends Record<string, any> = Record<string, any>, Options extends Record<string, any> = Record<string, any>, FormInstance = any> {\n /** 表单是否只读 */\n readonly?: Ref<boolean | undefined>;\n /** 表单是否禁用 */\n disabled?: Ref<boolean | undefined>;\n /**\n * 是否实时触发\n */\n realtime: Ref<boolean | undefined>;\n /** 表单实例 */\n formRef: FormInstance;\n /**\n * 子组件需主动注册组件, 否则不会生效\n * @param {CommonMethod} config 提供父组件校验, 重置等方法\n *\n * @returns {() => void} 取消注册 - 默认会自动取消, 如果是异步任务内注册, 需自己手动取消\n */\n register: (config: CommonMethod) => () => void;\n /** 子组件更新 query 前调用函数(内部方法, 外部请勿调用, 随时可能会调整) */\n beforeUpdateQueryValue: () => void;\n /** 子组件更新 query 后调用函数(内部方法, 外部请勿调用, 随时可能会调整) */\n afterUpdateQueryValue: () => void;\n /**\n * 提供给组件内部的直接触发到外部的搜索事件\n */\n search: () => Promise<string | void> | string | void;\n /** 重置表单 */\n reset: (target?: Record<string, any>) => void;\n /** 所有条件的 options 数据 */\n options: Options;\n /** 事件监听 - 需传 vue 实例 */\n emitterWithInstance: EventsWithInstance;\n /** 事件监听, 组件卸载时自动移除相关事件 - 无需传 vue 实例 */\n emitter: EventsWithoutInstance;\n}\n/** 获取容器注入的值 */\nexport function getProvideValue<Query extends Record<string, any> = Record<string, any>, Options extends Record<string, any> = Record<string, any>, FormInstance = any>(): ProvideValue<Query, Options, FormInstance> | undefined {\n return inject(provideKey);\n}\nexport function defineProvideValue<T extends ProvideValue>(option: T) {\n return option;\n}\n\n/** 子组件需暴露出来的公共属性 */\nexport interface CommonMethod {\n /** 当前条件项的字段 */\n field?: string;\n /** 重置 */\n reset: (query?: Record<string, any>) => void;\n /** 校验方法 */\n validator?: (query: Record<string, any>) => Promise<any> | any;\n /** 在 watch 中 backfill 改变后, 需要执行回调 */\n onBackfillChange?: (backfill: Record<string, any>, oldBackfill: Record<string, any>, isChange: boolean) => void;\n /** model 引用发生变化后, 需要执行的回调 */\n onModelChange?: (model: Record<string, any>, oldModel: Record<string, any> | undefined) => void;\n /** 尝试设置默认值 */\n trySetDefaultValue: (query: Record<string, any>) => boolean;\n}\nexport function defineCommonMethod<T extends CommonMethod>(option: T): T {\n return option;\n}\n","import type { ExtractPropTypes, PropType, Ref } from 'vue-demi';\nimport {\n computed,\n inject,\n nextTick,\n onBeforeUnmount,\n onMounted,\n ref,\n set,\n toRaw,\n unref,\n watch,\n} from 'vue-demi';\nimport { get, isArray, isEmptyValue, isNotEmptyValue, noop } from '../../utils/index';\nimport { useEmitter, useFlag, vueSet } from '../assist';\nimport type { ProvideValue } from '../constant';\nimport { defineCommonMethod, getProvideValue } from '../constant';\nimport type { HookOption, plainProps, PlainProps } from './types';\n\n/** 外部需传递的 props */\ntype _PlainProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPropTypes<PlainProps<Query, OptionQuery>>;\n\ntype ValueType = string | number | boolean | null | undefined | Record<string, any> | any[];\n\ntype MaybeRef<T> = T | Ref<T>;\n\n/** 封装扁平组件必备的信息 */\nexport function usePlain<Query extends Record<string, any> = Record<string, any>, OptionQuery extends Record<string, any> = Record<string, any>>(props: MaybeRef<_PlainProps<Query, OptionQuery>>) {\n /** 初始 props */\n const initialProps = unref(props);\n /** 字段信息 */\n const fieldInfo = computed(() => {\n const { fields, field } = unref(props);\n const _field = (fields || field) as string | string[];\n const isFieldPath = ((fields && fields[0]) || field!).includes('.');\n const getValueFunc = isFieldPath ? get : (target: Record<string, any>, key: string) => target[key];\n const setValueFunc = isFieldPath ? vueSet : (target: Record<string, any>, key: string, value: any) => set(target, key, value);\n // const getValue = isFieldPath ? (target: Record<string, any>, path: string) => fields!.map((k) => getValueFunc(target, k as string)).filter(isNotEmptyValue) : getValueFunc;\n // const setValue = isFieldPath ? (target: Record<string, any>, key: string, value: any, emptyValue: any) => fields!.map((k, i) => setValueFunc(target, k as string, emptyToValue(value[i], emptyValue))) : setValueFunc;\n return {\n /** 最终的字段 */\n field: _field,\n /** 是否是路径集 */\n isFieldPath,\n // /** 获取 query 中该字段的值 */\n // getValue,\n // /** 设置 query 中该字段的值 */\n // setValue,\n /** 获取指定对象中指定字段的值 */\n getValueFunc,\n /** 设置指定对象中指定字段的值 */\n setValueFunc,\n };\n });\n function getValueInObject(query: Record<string, any>) {\n const { fields } = unref(props);\n const { field, getValueFunc } = fieldInfo.value;\n return fields ? fields.map((k) => getValueFunc(query, k)).filter(isNotEmptyValue) : getValueFunc(query, field as string);\n }\n function setValueInObject(value: any, query: Record<string, any>) {\n // 去除空值, 后续如要加上, 应加在 wrapper 上\n // 而不是 plain props 中\n const { fields } = unref(props);\n const { field, setValueFunc } = fieldInfo.value;\n fields ? fields.forEach((o, i) => setValueFunc(query, o, value?.[i])) : setValueFunc(query, field as string, value);\n // const { fields, emptyValue } = unref(props);\n // const { field, setValueFunc } = fieldInfo.value;\n // fields ? fields.forEach((o, i) => setValueFunc(query, o as string, emptyToValue(value?.[i], emptyValue))) : setValueFunc(query, field as string, emptyToValue(value, emptyValue));\n return true;\n }\n /** 获取 query 中该字段的值 */\n function getValueInQuery() {\n return getValueInObject(unref(props).query as Query);\n }\n /** 设置 query 中该字段的值 */\n function setValueInQuery(value: any) {\n const _value = checked.value;\n // 当结果为空值或者空数组时,\n // 且默认值不为空, 用默认值替代\n let defaultValue;\n // eslint-disable-next-line no-cond-assign\n const result = (isEmptyValue(value) || (isArray(value) && !value.length)) && !isEmptyValue(defaultValue = getAppointProp('defaultValue'))\n ? defaultValue\n : value;\n result === _value ? unref(props).defaultValueConflictCallback(result, checked) : setValueInObject(result, unref(props).query as Query);\n return true;\n }\n\n const unwatchs: (() => void)[] = [];\n /** 容器注入值 */\n const wrapper = getProvideValue();\n /** 覆盖 props 的值 */\n const coverProps = ref({ } as Record<'initialValue' | 'defaultValue', any>);\n watch(() => unref(props).initialValue, (val) => coverProps.value.initialValue = val, { immediate: true });\n watch(() => unref(props).defaultValue, (val) => coverProps.value.defaultValue = val, { immediate: true });\n /** 获取指定属性 */\n const getAppointProp = (value: keyof typeof coverProps['value']) => {\n const _value = coverProps.value[value];\n const { query } = unref(props);\n return typeof _value === 'function' ? _value({ query }) : _value;\n };\n /** 当前选中值 */\n const checked = computed({ get: getValueInQuery, set: setValueInQuery });\n /** 初始是否存在回填值 */\n const initialBackfillValue = initialProps.fields?.length\n // 防止回填值不存在时产生一个空数组(undefined[])\n ? emptyArr2Undef(getValueInObject(initialProps.query as Query)) as ValueType[]\n : getValueInObject(initialProps.query as Query) as ValueType;\n /** 不存在回填值且存在默认值或初始值时更新父级中的值 */\n // 此处只需要获取初始值, 如果初始值不符合要求, 自动会获取默认值\n (initialBackfillValue === undefined || initialBackfillValue === null) && (initialProps.defaultValue !== undefined || initialProps.initialValue !== undefined) && setValueInQuery(getAppointProp('initialValue'));\n\n /** 远程获取的数据源 */\n const remoteOption = ref<any[]>([]);\n const loading = ref(false);\n /** 渲染的数据源(远程数据源 > 本地数据源) */\n const finalOption = computed(() => (remoteOption.value.length ? remoteOption.value : unref(props).options));\n unwatchs.push(\n watch(finalOption, (value) => wrapper && (wrapper.options[unref(props).field!] = value), { immediate: true }),\n );\n\n const option = defineCommonMethod({\n get field() {\n return unref(props).field;\n },\n reset(this: void, query?: Record<string, any>) {\n const itValue = getAppointProp('initialValue');\n query\n ? setValueInObject(itValue === undefined ? getAppointProp('defaultValue') : itValue, query)\n : checked.value = itValue;\n updateAllowDependChangeValue();\n },\n get validator() {\n const _props = unref(props);\n return _props.validator as any;\n },\n onBackfillChange: (backfill, oldBackfill, isChange) => {\n isChange && unref(props).hooks?.backfillChange?.(backfill, oldBackfill, { plain: expose, props: unref(props) });\n },\n onModelChange: (model, oldModel) => {\n // unref(props).hooks?.modelChange?.(model, oldModel, { plain: expose, props: unref(props) });\n updateAllowDependChangeValue();\n },\n trySetDefaultValue(_query: Record<string, any>) {\n let defaultValue: any;\n const value = getValueInObject(_query);\n // eslint-disable-next-line no-cond-assign\n if ((isEmptyValue(value) || (isArray(value) && !value.length)) && !isEmptyValue(defaultValue = getAppointProp('defaultValue'))) {\n setValueInObject(defaultValue, _query);\n return true;\n }\n return false;\n },\n });\n\n wrapper?.register(option);\n onBeforeUnmount(() => {\n unwatchs.forEach((v) => v());\n const { field } = fieldInfo.value;\n const { query, parentQuery } = unref(props);\n typeof field === 'string' ? removeAttr(field, query as Query, parentQuery) : field.forEach((k) => removeAttr(k, query as Query, parentQuery));\n });\n /** 获取指定路径的父级对象, 方便删除属性 */\n function removeAttr(path: string, obj: Record<string, any>, obj2?: Record<string, any>) {\n if (!path.includes('.')) {\n delete obj[path];\n return;\n }\n if (!obj2) return;\n // 如果是动态数组, 整租都被删除时不做处理(通过 get 获取到的值肯定跟 obj2 不一致)\n const pathArr = path.split('.');\n const target = get(obj, pathArr.slice(0, -1).join('.'));\n if (target !== obj2) return;\n delete obj2[pathArr[pathArr.length - 1]!];\n }\n\n /** 是否允许依赖变动时, 重置值(外部通过 search, change 主动改变值时, 内部应取消重置) */\n const { flag: allowDependChangeValue, updateFlag: updateAllowDependChangeValue } = useFlag(true);\n // 初次渲染情况下, 如果 query 给了依赖字段值, 但没给被依赖字段赋值\n // 但被依赖字段却有默认值的情况下, 此时会重置 query 中依赖的字段\n // 此处禁用上述逻辑, 即被依赖字段应用默认值却不触发依赖事件\n // ```ts\n // query = { input: 'aaa' };\n // config = {\n // input: { depend: true, defaultValue: '666', dependFields: 'select' },\n // select: { defaultValue: '999' },\n // };\n // 执行 updateAllowDependChangeValue 前, 预期 query = { input: 'aaa', select: '999' }, 实际 query = { input: '666', select: '999' }\n // 执行 updateAllowDependChangeValue 后, 与预期一致\n // ```\n updateAllowDependChangeValue();\n // 这块逻辑的作用是防止在测试代码中初始渲染后立即调用 change 来改变值\n // 但由于执行了 updateAllowDependChangeValue 导致 change 不生效(实际场景中极少出现)\n // 但有个问题是如果前后两个配置项依赖中间的配置项, 会导致下方的逻辑有的生效, 有的不生效\n // 在没有好方法前先全部注释, 测试代码中在渲染完成后先 nextTick 再执行后续的逻辑(可以考虑在注册组件时, 记录已加载的字段\n // 但考虑实际应用中, 这种场景基本不会出现, 暂时先不做)\n // let initialDependFlag = allowDependChangeValue.value;\n // initialDependFlag && nextTick(() => initialDependFlag = true);\n // 存在依赖项\n unwatchs.push(\n watch(\n () => {\n const _props = unref(props);\n if (!_props.depend) return [false] as const;\n const dependFields = _props.dependFields;\n if (!dependFields?.length) return [false] as const;\n const query = _props.query;\n // 只依赖一个值时, 不返回数组, 避免引用不一致(做的优化)\n const field = typeof dependFields === 'string' ? dependFields : dependFields.length === 1 ? dependFields[0] : null;\n return [true, _props.uniqueValue, field ? get(query, field) : (dependFields as string[]).map((k) => get(query, k)), field || dependFields] as const;\n },\n ([_depend, _uniqueValue, _dependValues, _dependFields], oldVal) => {\n const [__depend, __uniqueValue, __dependValues] = oldVal || [];\n if (_uniqueValue !== __uniqueValue) return;\n if (!_depend) return;\n const _props = unref(props);\n // dependFields 由于是字符串, 可以做拼接\n // 但如果是遍历 dependFields 的会返回一个新数组\n // 导致引用发生变化, 所以需要做值比较\n // 判断新的 value 与旧 value 是否一致, 一致则不更新\n if (typeof _dependFields === 'string' ? _dependValues === __dependValues : (_dependValues as any[]).every((o, i) => o === (__dependValues as any[])[i])) return;\n if (allowDependChangeValue.value && (typeof _props.resetByDependValueChange === 'boolean' ? _props.resetByDependValueChange : _props.resetByDependValueChange(_props.query as Query))) {\n change(undefined);\n }\n\n // 异步触发回调, 某些场景得先清空值, 再清空数据源\n // 否则会导致数据源来回切换时, 其选中状态未被消除\n nextTick(getOption.bind(null, 'depend'));\n _props.hooks?.dependChange?.({ plain: expose, props: _props });\n // 如果初始不允许依赖发生改变, 却主动改变了值, 那此时依赖应该生效\n // 实际场景一般不会出现, 主要是应对测试代码\n // if (!initialDependFlag) {\n // allowDependChangeValue.value = initialDependFlag = true;\n // }\n },\n // 禁用 flush 之类新增的属性, 兼容低版本\n initialProps.dependWatchOption,\n ),\n );\n // 存在选项变动依赖项时\n unwatchs.push(\n watch(\n () => {\n const _props = unref(props);\n if (!(_props.optionsDepend && wrapper)) return [false, _props.uniqueValue] as const;\n let _dependFields = _props.optionsDependFields || _props.dependFields;\n typeof _dependFields === 'object' && _dependFields.length === 1 && (_dependFields = _dependFields[0]);\n if (!_dependFields?.length) return [false, _props.uniqueValue] as const;\n return [true, _props.uniqueValue, typeof _dependFields === 'string' ? wrapper.options[_dependFields] : _dependFields.map((k) => wrapper.options[k]), _dependFields] as const;\n },\n ([_depend, _uniqueValue, _val, _dependFields], [__depend, __uniqueValue, __val]) => {\n if (_uniqueValue !== __uniqueValue) return;\n if (!_depend) return;\n // 依赖为单个值时, 直接比较值是否一致\n if (typeof _dependFields === 'string' && _val === __val) return;\n // 依赖为多个值时, 遍历比较值是否一致\n else if (_val.length === __val?.length && (_val as any[]).every((o, i) => o === __val[i])) return;\n // 异步触发回调, 某些场景得先清空值, 再清空数据源\n // 否则会导致数据源来回切换时, 其选中状态未被消除\n nextTick(getOption.bind(null, 'depend'));\n initialProps.hooks?.optionsDependChange?.({ plain: expose, props: unref(props) });\n },\n // 不需要 immediate, 因为 getOption 初始会执行一次\n ),\n );\n\n // 监听 getOptions 选项\n unwatchs.push(watch(() => unref(props).getOptions, async () => getOption('initial')));\n // 由于存在默认值等属性, 所以需要异步触发\n nextTick(getOption.bind(null, 'initial'));\n\n /** 获取数据源发生变化事件 */\n async function getOption(trigger: 'initial' | 'depend' | 'other', option?: { filterValue?: string; callback?: (data: any[]) => void }) {\n const _props = unref(props);\n if (!_props.getOptions) return;\n loading.value = true;\n const maybePromise = _props.getOptions(\n (data) => {\n option?.callback?.(data);\n remoteOption.value = (data) || [];\n loading.value = false;\n },\n (_props.query as Query) || {},\n {\n trigger,\n ...option,\n options: (toRaw(wrapper?.options) as OptionQuery) || {},\n changeInitialValue(value) {\n coverProps.value.initialValue = value;\n return this;\n },\n changeDefaultValue(value) {\n coverProps.value.defaultValue = value;\n return this;\n },\n change(value, option) {\n option?.updateDefaultValue && (coverProps.value.defaultValue = value);\n option?.updateInitialValue && (coverProps.value.initialValue = value);\n updateAllowDependChangeValue();\n change(value);\n return this;\n },\n search(value, option) {\n option?.updateDefaultValue && (coverProps.value.defaultValue = value);\n option?.updateInitialValue && (coverProps.value.initialValue = value);\n updateAllowDependChangeValue();\n change(value);\n !wrapper?.realtime.value && wrapper?.search();\n return this;\n },\n },\n );\n if (maybePromise) {\n await maybePromise;\n loading.value = false;\n }\n }\n /**\n * 更新选中值并触发内部搜索事件\n * @param {*} value 待更改的值\n */\n function change(value: any) {\n checked.value = value;\n }\n\n const emitter = useEmitter(wrapper);\n const expose = {\n /** 覆盖 props 的最新的值(defaultValue, initialValue) */\n coverProps,\n /**\n * 内部表单实例, 包含了更新表单值, 触发搜索事件等方法\n */\n wrapper,\n /**\n * 表单项实例, 包含了重置, 更新表单值, 获取表单值等方法\n */\n option,\n /** 数据源获取状态 */\n loading,\n /** 主动更新数据源 */\n getOptions: getOption,\n /** 当前表单项的值 */\n checked,\n /** 远程获取的数据源 */\n remoteOption,\n /** 获取最终渲染的数据源 */\n finalOption,\n /** 更新值并触发搜索事件(为实时搜索时, 会触发搜索事件) */\n change,\n /** 搜索事件(直接触发搜索事件, 不受实时搜索影响) */\n search: wrapper?.search || noop,\n /** 重置表单字段 */\n reset: option.reset,\n /** 表单级别的只读 */\n globalReadonly: wrapper?.readonly || ref(false),\n /** 表单级别的禁用 */\n globalDisabled: wrapper?.disabled || ref(false),\n ...emitter,\n };\n\n initialProps.hooks?.created?.({ plain: expose, props: unref(props), wrapper, ...emitter });\n\n return expose;\n}\n\nfunction emptyArr2Undef<T>(arr: T[]): T[] | undefined {\n return arr.length ? arr : undefined;\n}\n\ntype Primitive = string | number | boolean | bigint | symbol | undefined | null;\n// eslint-disable-next-line ts/no-unsafe-function-type\ntype Builtin = Primitive | Function | Date | Error | RegExp;\ntype DeepReadonly<T> = T extends Builtin ? T : T extends Map<infer K, infer V> ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>> : T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>> : T extends WeakMap<infer K, infer V> ? WeakMap<DeepReadonly<K>, DeepReadonly<V>> : T extends Set<infer U> ? ReadonlySet<DeepReadonly<U>> : T extends ReadonlySet<infer U> ? ReadonlySet<DeepReadonly<U>> : T extends WeakSet<infer U> ? WeakSet<DeepReadonly<U>> : T extends Promise<infer U> ? Promise<DeepReadonly<U>> : T extends Ref<infer U> ? Readonly<Ref<DeepReadonly<U>>> : T extends {} ? {\n readonly [K in keyof T]: DeepReadonly<T[K]>;\n} : Readonly<T>;\n","import type { PropType, Ref, WatchOptions } from 'vue-demi';\nimport { nextTick } from 'vue-demi';\nimport { noop } from '../../utils/index';\nimport type { EventsWithoutInstance, ProvideValue } from '../constant';\nimport type { usePlain } from './index';\n\n/** 组件额外的钩子选项 */\nexport interface HookOption<Query extends Record<string, any>, OptionQuery extends Record<string, any>> {\n /** 组件创建前触发的钩子, 可在内部监听生命周期, 获取实例, 以及操作该组件内的各种属性 */\n created?: (option: { props: Record<string, any>; plain: ReturnType<typeof usePlain<Query, OptionQuery>>; wrapper: ProvideValue | undefined } & EventsWithoutInstance) => void;\n /** 依赖项发生变化时触发 - 语法糖钩子, 可通过 create 钩子监听指定数据源(watch(() => option.props.query[field], callback)) */\n dependChange?: (option: { props: Record<string, any>; plain: ReturnType<typeof usePlain<Query, OptionQuery>> }) => void;\n /** 依赖项数据源发生变动时触发 - 语法糖钩子, 可通过 create 钩子监听指定数据源(watch(() => option.plain.wrapper.options[field], callback)) */\n optionsDependChange?: (option: { props: Record<string, any>; plain: ReturnType<typeof usePlain<Query, OptionQuery>> }) => void;\n /** 回填对象发生改变时触发(由外部触发才会发生改变, 内部搜索然后默认同步时, 不触发该事件) */\n backfillChange?: (backfill: Record<string, any>, oldBackfill: Record<string, any>, option: { props: Record<string, any>; plain: ReturnType<typeof usePlain<Query, OptionQuery>> }) => void;\n}\n\n/** 扁平条件类 props - 泛型 */\nexport function plainPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any> = Record<string, any>>() {\n return {\n /** 提交的字段 */\n field: { type: String as PropType<string>, required: true },\n /** 字段集(多选时, 每个下标对应的字段可能不一样) */\n fields: { type: [Array] as PropType<string[]> },\n /** 当前条件对象 */\n query: { type: Object as PropType<Query>, required: true },\n /**\n * 该配置项根据 query[field] 的值动态生成时, 传递的属性((内部处理, 外部无需传递))\n * 应用场景, 比如表单通过 query[field].splice(0, 1) 删除时, 由于卸载会重置字段\n * 但是根据引用会找到 query[field][1] 的值, 导致操作错误的对象\n */\n parentQuery: { type: Object as PropType<Record<string, any>> },\n /** 是否依赖其它字段 */\n depend: { type: Boolean as PropType<boolean>, default: undefined },\n /** 依赖字段发生变化后是否重置值 */\n resetByDependValueChange: { type: [Boolean, Function] as PropType<boolean | ((query: Query) => boolean)>, default: true },\n /** 依赖字段 */\n dependFields: { type: [String, Array] as PropType<string | string[]> },\n /** 依赖字段监听选项 */\n dependWatchOption: { type: [Object] as PropType<WatchOptions> },\n /** 是否依赖其它字段的数据源 - 数据发生变动时触发 getOptions */\n optionsDepend: { type: Boolean as PropType<boolean> },\n /** 数据源依赖字段 - 不传取 dependFields */\n optionsDependFields: { type: [String, Array] as PropType<string | string[]> },\n /** 校验函数, 返回字符串不通过, 会触发提示 - 提交时触发 */\n validator: { type: [Function] as PropType<(query: Query) => any | Promise<any>> },\n /** 初始值 - 初始或重置时设置的值, 优先级高于 defaultValue(重置时取该字段, 依赖变化后的重置默认值), 可被清空 */\n initialValue: {\n type: [String, Number, Boolean, Function, Array, Object] as PropType<((option: { query: Query }) => any) | any>,\n default: undefined,\n },\n /** 默认值 - 初始或重置时设置的值, 当对应字段的值为空值时, 会用该值替换 */\n defaultValue: {\n type: [String, Number, Boolean, Function, Array, Object] as PropType<((option: { query: Query }) => any) | any>,\n default: undefined,\n },\n /** 重置时当前值与默认值/初始值相同时, 自定义赋值逻辑(默认不改变) */\n defaultValueConflictCallback: { type: Function as PropType<(value: any, checked: Ref<any>) => void>, default: noop },\n /** 数据源 */\n options: { type: Array as PropType<any>, default: () => [] },\n /** 动态获取数据源 */\n getOptions: { type: Function as PropType<GetOptions<Query, OptionQuery>> },\n /**\n * 如果是组件是存在于数组中的, 需要传递一个唯一值(内部处理, 外部无需传递)\n * 防止依赖本数组其它下标中的值时, 如果前一项被删除, 导致依赖误触发\n */\n uniqueValue: { type: [String, Number] as PropType<string | number> },\n /** 组件额外的钩子() */\n hooks: { type: [Object] as PropType<HookOption<Query, OptionQuery>>, default: undefined },\n } as const;\n}\n/** 扁平条件类 props */\nexport const plainProps = plainPropsGeneric();\n/** 扁平条件类 props */\nexport type PlainProps<Query extends Record<string, any>, OptionQuery extends Record<string, any> = Record<string, any>> = OmitFieldRequired<ReturnType<typeof plainPropsGeneric<Query, OptionQuery>>>;\n\n/** 取消 field 的必填声明(暴露给用户是可选的, 框架层才是必填的, 防止框架层改动过大, 故在此调整) */\nexport type OmitFieldRequired<T> = {\n [K in keyof T]: K extends 'field' ? Omit<T[K], 'required'> : T[K]\n};\n\n/** 当新的赋值与当前值相等时异步赋值 */\nexport function defaultValueConflictCallback(checked: Ref<any>, value: any) {\n // 可直接置空, 如果是数组, 两者值肯定不等\n // 如果是普通值, undefined 不会报错\n checked.value = undefined;\n nextTick(() => checked.value = value);\n}\n\n/** 获取远程数据源 */\nexport interface GetOptions<Query extends Record<string, any>, OptionQuery extends Record<string, any>> {\n (\n /** 数据执行后的回调 */\n cb: (data: any) => void,\n /** 当前 query 对象 */\n query: Query,\n /** 额外的配置项 */\n option: TriggerOption<Query, OptionQuery>,\n ): any;\n}\n\n/** 改变当前条件值触发方式 */\nexport interface TriggerOption<Query extends Record<string, any>, OptionQuery extends Record<string, any>> {\n /**\n * 触发来源\n * @enum {('initial'|'depend'|'other')} initial(初始化), depend(依赖项改变)\n */\n trigger: string;\n /** 用于下拉框等存在筛选值的组件 */\n filterValue?: string;\n /**\n * 所有条件的数据源\n * @enum {Record<string, Record<string, any>[]>}\n */\n options: OptionQuery;\n /** 仅更改默认值 */\n changeDefaultValue: (value: any) => this;\n /** 仅更改初始值 */\n changeInitialValue: (value: any) => this;\n /**\n * 仅改变内部的值, 不触发搜索事件\n * @param {*} value 需改变的值\n * @param {object} [option]\n * @param {boolean} [option.updateInitialValue] 是否将该值设为初始值\n * @param {boolean} [option.updateDefaultValue] 是否将该值设为默认值\n */\n change: (value: any, option?: Partial<Record<'updateInitialValue' | 'updateDefaultValue', boolean>>) => this;\n /**\n * 触发搜索事件\n * @param {*} value 需改变的值\n * @param {object} [option]\n * @param {boolean} [option.updateInitialValue] 是否将该值设为初始值\n * @param {boolean} [option.updateDefaultValue] 是否将该值设为默认值\n */\n search: (value: any, option?: Partial<Record<'updateInitialValue' | 'updateDefaultValue', boolean>>) => this;\n [index: string]: any;\n}\n","import type { ExtractPropTypes } from 'vue-demi';\nimport {\n computed,\n del,\n getCurrentInstance,\n nextTick,\n onBeforeUnmount,\n onMounted,\n provide,\n reactive,\n ref,\n set,\n toRef,\n watch,\n} from 'vue-demi';\nimport { hasOwn } from '../../utils/index';\nimport { useCreateEmitter, useEmitter, useWithCurrentInstance } from '../assist';\nimport type { CommonMethod, Events, ProvideValue } from '../constant';\nimport { defineProvideValue, IS_COMPOSITION_VERSION, provideKey } from '../constant';\nimport type { wrapperProps } from './types';\n\n/** 外部需传递的 props */\ntype WrapperProps = ExtractPropTypes<typeof wrapperProps>;\n\n/** 用来给 v2 版本做兼容 */\ninterface Config<T = any> {\n formRef?: T;\n /** model 的字段 */\n modelField?: string;\n /** backfill 发生变化后的回调 */\n onBackfillChange?: (backfill: Record<string, any>, oldBackfill: Record<string, any>, expose: ReturnType<typeof useWrapper>) => void;\n /** 搜索回调 */\n onSearch?: (query: Record<string, any>) => void;\n}\n\n/** 封装 wrapper 组件必备的信息(config 用来给 v2版本做兼容) */\nexport function useWrapper<T>(props: WrapperProps, config?: Config<T>) {\n /** 兼容 v2版本的 value */\n const MODEL_VALUE = (config?.modelField || 'model') as 'model';\n /** 创建的监听事件 */\n const emitterWithInstance = useCreateEmitter<Events>();\n /** 创建的监听事件 - 已绑定 wrapper 的 vue 实例 */\n const emitter = useEmitter({ emitterWithInstance });\n\n const child: CommonMethod[] = [];\n onBeforeUnmount(() => child.splice(0));\n\n /** 记录所有条件项的字段 */\n const allFields = new Set<string>();\n /** 记录所有条件的 options */\n const optionsObj = reactive<Record<string, any>>({});\n /** 提供给子条件组件的方法 */\n const wrapperInstance = defineProvideValue({\n readonly: toRef(props, 'readonly', false),\n disabled: toRef(props, 'disabled', false),\n realtime: toRef(props, 'realtime', false),\n formRef: config?.formRef,\n reset,\n register(compOption) {\n compOption.field && allFields.add(compOption.field);\n child.push(compOption);\n const unregister = () => {\n compOption.field && allFields.delete(compOption.field);\n const idx = child.indexOf(compOption);\n idx !== -1 && child.splice(idx, 1);\n };\n const childInstance = getCurrentInstance();\n // vue2.7 实例挂载在 proxy 上, 内部逻辑取的 proxy 上的值\n // 虽然 @vue/composition-api 实例挂载在 proxy 上\n // 但是内部逻辑取的是整个 getCurrentInstance\n // eslint-disable-next-line ts/ban-ts-comment\n // @ts-ignore vue2.7中取proxy属性\n childInstance && onBeforeUnmount(unregister, IS_COMPOSITION_VERSION ? childInstance.proxy : childInstance);\n return unregister;\n },\n beforeUpdateQueryValue() {\n queryWatchFlag = false;\n },\n afterUpdateQueryValue() {\n nextTick(() => {\n queryWatchFlag = true;\n });\n },\n search,\n options: optionsObj,\n emitterWithInstance,\n emitter,\n });\n provide<ProvideValue>(provideKey, wrapperInstance);\n\n /**\n * 内部条件的值\n * 传 backfill 时, 在没触发搜索按钮前, 不会同步到外部\n * 传 model 时, query 与 model 是一致的\n * backfill 或 model 必须要传一个\n */\n const query = ref<Record<string, string>>(props[MODEL_VALUE] || { ...props.backfill });\n let queryWatchFlag = true;\n // 在 mounted 内监听, 防止初始设置默认值时触发监听回调\n onMounted(() => {\n watch(\n () => props.realtime && !props[MODEL_VALUE] && ({ ...query.value }),\n (val) => {\n val && queryWatchFlag && wrapperInstance.search();\n },\n );\n });\n\n const getQuery = () => ({ ...(oldQuery = { ...query.value }) });\n /** 记录旧的 query */\n let oldQuery: Record<string, any> | null = null;\n /** 记录上一次的 backfill, 防止相同 */\n let oldBackfill: Record<string, any> = {};\n watch(\n // 扩大 backfill 的监听层级\n // 以便直属子属性发生变化时也可触发\n // 再深层的无需处理(存在引用关系)\n // 兼容低版本, 所以不用 deep: 1\n () => {\n const { backfill } = props;\n if (!backfill) return [oldBackfill = {} as Record<string, any>, false] as const;\n const backfillEntries = Object.entries(backfill);\n // 记录当前 backfill 与之前的 backfill 是否一致\n // 相同则不处理, 防止 backfill 与 query.value 同时更新(backfill 只改引用而不改值)\n // 如果值为空, 则跳过判断, 防止外部直接赋予空对象来重置时, 多次重置导致失败\n // 导致 query.value 的值被覆盖\n let backfillFlag = !!oldBackfill && Object.keys(oldBackfill).length === backfillEntries.length && !!backfillEntries.length;\n // 判断 backfill 与旧的 query 是否一致\n // 一致说明是重置或者空对象赋值, 内部赋了默认/初始值\n let oldQueryFlag = !!oldQuery && Object.keys(oldQuery).length === backfillEntries.length;\n return [oldBackfill = backfillEntries.reduce((p, [k, v]) => {\n p[k] = v;\n backfillFlag &&= (p[k] === oldBackfill[k]);\n oldQueryFlag &&= (p[k] === oldQuery![k]);\n return p;\n }, {} as Record<string, any>), backfillFlag || oldQueryFlag, oldQuery = null] as const;\n },\n ([val, flag], [oldVal]) => {\n if (flag) return;\n const backfillKeys = Object.keys(val);\n const queryKeys = Object.keys(query.value);\n let isExtractBackfill = queryKeys.length === backfillKeys.length;\n // 手动处理 query 的值与 backfill 保持一致\n // 防止 query.value 对象改变导致内部监听误触发\n queryKeys.forEach((k) => {\n isExtractBackfill &&= query.value[k] === val[k];\n hasOwn(val, k) || delete query.value[k];\n });\n // 如果是空对象, 理解为重置\n if (!backfillKeys.length) return reset();\n // query 与 backfill 重复时, 不触发变动\n // 不能在 watch 第一个参数中比较, 会导致 query 被收集到依赖中\n if (isExtractBackfill) return;\n // #fix 只合并有变化, 且与 query.value[field] 不同的字段, 防止子级 watch 监听时误触发\n // 如果与 query.value 相同, 说明是内部触发的事件\n const newQuery = {} as Record<string, any>;\n let isChanged = false;\n backfillKeys.forEach((k) => {\n if (val[k] !== query.value[k]) {\n newQuery[k] = val[k];\n isChanged = true;\n }\n });\n isChanged && Object.assign(query.value, newQuery);\n let isUpdatedDefaultValue = false;\n let tempFlag: boolean;\n child.forEach((o) => {\n o.onBackfillChange?.(val, oldVal, isChanged);\n tempFlag = o.trySetDefaultValue(query.value);\n isUpdatedDefaultValue ||= tempFlag;\n });\n if (isChanged) {\n (props.onBackfillChange || config?.onBackfillChange) && execOnCallback(props.onBackfillChange || config!.onBackfillChange, val, oldVal, expose);\n }\n if (!isUpdatedDefaultValue) {\n wrapperInstance.beforeUpdateQueryValue();\n wrapperInstance.afterUpdateQueryValue();\n }\n },\n // 取消深度监听, 只监听直属属性\n // 因为第二层的值是直接赋值的\n // { deep: true },\n );\n\n watch(\n () => props[MODEL_VALUE],\n (val, oldVal) => {\n // model 不允许重置为空, 为空说明外部的代码逻辑有问题\n if (!val) return;\n query.value = val;\n // model 为空或是空对象时, 重置整个表单(由于 query.value 异步更新的, 因此得传递新的 query)\n if (!Object.keys(val).length) return reset(query.value);\n child.forEach((o) => {\n o.onModelChange?.(val, oldVal);\n o.trySetDefaultValue(query.value);\n });\n },\n );\n // 此 watch 是兼容 Object.assign 赋值整个对象\n // 而非 query.value = { 字段1, 字段2 } 形式赋值\n watch(\n [\n () => props.shallowWatchModel && props[MODEL_VALUE] && ({ ...props[MODEL_VALUE] }),\n () => props.shallowWatchModel && props[MODEL_VALUE],\n ],\n ([val, mv], [oldVal, oldMv]) => {\n // 如果 val, oldVal 不全为对象, 忽略后续逻辑\n // 如果 model 引用发生变化(上一个 watch 中会处理), 忽略后续逻辑\n if (!(val && oldVal) || mv !== oldMv) return;\n // 统计哪些字段进行了更新, 更新数量超过 1 个, 说明是批量更新, 不触发 depend 相关的逻辑\n let count = 0;\n // 多字段的只算为一个字段\n // 假设两个条件项都是多字段的, 也只算一个字段, 衍生出一种极端情况下才产生的 bug\n // 整个表单只有两个条件项, 且均为多字段, 此时无法触发批量更新的逻辑, 此种情况需自行处理\n let flag = 0;\n Object.keys(val).forEach((k) => {\n val[k] !== oldVal[k] && (allFields.has(k) ? ++count : flag || (flag = ++count));\n });\n // 如果更新数量大于 1, 说明是 assign 赋值, 视同为批量赋值, 此时不应该重置值\n count > 1 && child.forEach((o) => o.onModelChange?.(val, oldVal));\n },\n );\n\n /**\n * 搜索计数(当验证结果出来前再次触发了搜索事件时, 前一次的事件不再处理)\n * 限制: 同一个事件循环内只会触发一次(依赖项发生改变时不再触发多次搜索)\n */\n let searchFlag = 0;\n /** 搜索事件 */\n async function search() {\n const _searchFlag = ++searchFlag;\n const msg = validateToast();\n // 转为异步处理, 确保一个事件循环内只触发一次搜索事件\n const _msg = await (typeof msg?.then === 'function' ? msg : Promise.resolve(msg));\n if (_searchFlag !== searchFlag) return;\n\n if (_msg) {\n props.toast?.(_msg);\n }\n else {\n (props.onSearch || config?.onSearch) && execOnCallback(props.onSearch || config!.onSearch, getQuery());\n }\n }\n /**\n * 重置所有条件\n * @param {object} [target] 重置后默认值(初始值)所挂载的对象 - 默认取 query\n */\n function reset(target?: Record<string, any>) {\n const callbacks = emitterWithInstance.emit('reset');\n // 逆序重置\n // 动态表单是父级先渲染, 子级后渲染, 如果正序重置会导致\n // 父级先重置返回新的数据, 旧的子级后重置时会污染新渲染的数据\n child.forEach((v, i, r) => r[r.length - 1 - i]!.reset(target));\n callbacks.forEach((cb) => typeof cb === 'function' && cb());\n }\n /** 自定义校验条件的值并弹出提示 */\n function validateToast(): Promise<any> | any {\n let isPromise = false;\n let temp: any;\n let r = child.map((v) => {\n temp = v.validator?.(query.value);\n isPromise || (isPromise = typeof temp?.then === 'function');\n return temp;\n });\n return isPromise ? Promise.all(r).then(validateByArr) : validateByArr(r);\n }\n /** 对校验结果进行处理, 单个检验项通过时, 执行表单级别的验证 */\n function validateByArr(result: any[]): Promise<any> | any {\n return result.find((v) => v && typeof v === 'string') || props.validator?.(query.value);\n }\n\n const expose = {\n child,\n wrapperInstance,\n query,\n getQuery,\n search,\n reset,\n validateToast,\n };\n return expose;\n}\n\n/**\n * 执行 on 相关的回调事件\n * @param {Function} events 待执行的回调\n * @param {any[]} args 传递的参数\n */\nexport function execOnCallback<T extends (...args: any[]) => any>(events: undefined | T | T[], ...args: Parameters<T>) {\n if (!events) return;\n return typeof events === 'function' ? events(...args) : events.forEach((cb) => cb(...args));\n}\n","import type { PropType } from 'vue-demi';\nimport type { useWrapper } from './index';\n\nexport interface onBackfillChange {\n (backfill: Record<string, any>, oldBackfill: Record<string, any>, expose: ReturnType<typeof useWrapper>): void;\n}\nexport type WrapperArrayable<T> = T | T[];\n\n/** 容器类 props - 泛型 */\nexport function wrapperPropsGeneric() {\n return {\n /** 是否在数据发生变动后实时触发搜索事件 - 仅针对 backfill, model 不生效 */\n realtime: { type: Boolean as PropType<boolean>, default: undefined },\n /** 回填信息 */\n backfill: { type: Object as PropType<Record<string, any>> },\n /** 回填信息发生变化时触发(由外部触发才会发生改变, 内部搜索然后默认同步时, 不触发该事件) - 仅针对 backfill, model 不生效 */\n onBackfillChange: { type: [Function, Array] as PropType<WrapperArrayable<onBackfillChange>> },\n /** 表单形式的没必要用 backfill, 直接用 model 同步即可 */\n model: { type: Object as PropType<Record<string, any>> },\n /**\n * 是否浅监听 model, 当外部会通过 Object.assign(query.value, { 字段1, 字段2 }) 这种批量赋值时\n * 可启用此属性来规避 depend 重置\n */\n shallowWatchModel: { type: Boolean as PropType<boolean>, default: undefined },\n /** 自定义校验函数(内部校验通过后会触发此函数) */\n validator: { type: Function as PropType<(query: Record<string, any>) => any | Promise<any>>, default: undefined },\n /** 校验失败时产生的提示 */\n toast: { type: Function as PropType<(msg: string) => void>, default: undefined },\n /** 表单是否只读(元素没有只读属性的直接禁用) */\n readonly: { type: Boolean as PropType<boolean>, default: undefined },\n /** 表单是否禁用 */\n disabled: { type: Boolean as PropType<boolean>, default: undefined },\n /** 搜索事件, 触发内部 query 对象更新 - 仅针对 backfill, model 不会触发 */\n onSearch: { type: [Function, Array] as PropType<WrapperArrayable<(query: Record<string, any>) => void>> },\n // /** 重置事件, 重置表单数据时触发 - 仅针对 backfill, model 不会触发 */\n // onReset: { type: [Function, Array] as PropType<WrapperArrayable<(query: Record<string, any>) => void>> },\n } as const;\n}\n/** 容器类 props */\nexport const wrapperProps = wrapperPropsGeneric();\nexport type WrapperProps = ReturnType<typeof wrapperPropsGeneric>;\n","import type { UnionToIntersection } from 'utility-types';\nimport type { PropType } from 'vue-demi';\n// import { camelize } from 'vue-demi';\n\nconst wordReg = /-\\w/g;\nfunction camelize(name: string) {\n return name.replace(wordReg, ($1) => $1.slice(1).toUpperCase());\n}\n/**\n * 将 emits 转为 props\n * @param {object | undefined | null} props 待合并的 props\n * @param {(string[] | object | null)[]} emits 待转换的 emits\n * @tip\n * props 尽量用 as const, 防止内部的 required 选项无法被识别\n * 当 emits 为数组时, 需要用 as const, 否则无法识别出事件名称\n * \n * @example\n * ```ts\n * const typeDef = { type: Function };\n * emits = { click: noop, dataChange: noop }; // return { onClick: typeDef, onDataChange: typeDef }\n * emits = ['click', 'data-change']; // return { onClick: typeDef, onDataChange: typeDef }\n * ```\n */\nexport function emits2props<T extends Record<string, any> | undefined | null, E extends (string[] | Record<string, any> | null | undefined)[]>(props: T, ...emits: E) {\n const _r = (props || {}) as (T extends undefined | null ? {} : T) & UnionToIntersection<Emits2Props<NonNullable<E[number]>>>;\n const typeFunction = { type: Function };\n // @ts-expect-error 事件补充为 props 属性\n emits.forEach((o) => o && (Array.isArray(o) ? o.forEach((k) => _r[camelize(`on-${k}`)] = typeFunction) : Object.keys(o).forEach((k) => _r[camelize(`on-${k}`)] = typeFunction)));\n\n return _r;\n}\nexport type Emits2Props<T> = UnionToIntersection<\n T extends string[]\n ? Record<CamelCase<`on-${T[number]}`>, PropType<(...args: any[]) => void>>\n : { [P in keyof T as CamelCase<`on-${string & P}`>]: T extends Partial<Record<string, (...args: any) => any>> ? { type: PropType<(...args: Parameters<NonNullable<T[P]>>) => void> } : never }\n>;\n\n/**\n * 将数组类型 emits 转为对象\n * @param {(string[] | object | null)[]} emits 待转换的 emits\n * @tip\n * 当 emits 为数组时, 需要用 as const, 否则无法识别出事件名称\n * \n * @example\n * ```ts\n * emits = { click: noop, dataChange: noop }; // return { click: noop, dataChange: noop }\n * emits = ['click', 'data-change']; // return { click: noop, dataChange: noop }\n * ```\n */\nexport function emits2obj<E extends (string[] | Record<string, any> | null | undefined), R = E extends string[] ? { [P in E[number] as CamelCase<string & P>]: () => true } : E extends null | undefined ? {} : E>(emits: E): ExtractEvents<R> {\n if (!Array.isArray(emits)) return (emits || {}) as ExtractEvents<R>;\n const r: Record<string, any> = {};\n const noop = () => true;\n emits.forEach((key) => r[camelize(key)] = noop);\n return r as ExtractEvents<R>;\n}\n\n/**\n * 由于高版本 vue 对类型进行了调整\n * 因此抽取一个变量来提取组件中暴露的事件\n * ```typescript\n * // 高版本类型定义\n * type emits = (E | EE[]) & ThisType<void>;\n * // 经过 emits2obj 函数处理但未经改方法调整提取出来的结果\n * type Result1 =\n * | {}\n * | ({\n * '事件1': (...args: any[]) => void;\n * '事件2': (...args: any[]) => void;\n * } & ThisType<...>)\n * | {\n * [x: string]: () => true\n * }\n * type Result2 = {} | Record<'事件1' | '事件2', () => true>;\n * type Result3 = {} | (Record<string, any> & ThisType<void>) | { [x: string]: () => true; }\n *\n * // 经过改方法调整提取出来的结果\n * type Result1 = Record<'事件1' | '事件2', (...args: any) => void> & ThisType<...>;\n * type Result2 = Record<'事件1' | '事件2', () => true>;\n * type Result3 = Partial<Record<string, any> & ThisType<void> & { [x: string]: () => true; }>;\n * ```\n */\nexport type ExtractEvents<U>\n// 由联合类型转为交叉类型\n= UnionToIntersection<\n // 如果类型不为 Result2 之类时, 进入判断, 否则直接返回\n FuncNoopType extends U\n // 如果匹配, 说明不是 Result1 类型, 进入判断\n ? Exclude<U, FuncNoopType> extends never\n ? U\n // 排除 Result1 中的 FuncNoopType\n : Exclude<U, FuncNoopType>\n : U\n>;\n\nexport type FuncNoopType = Record<string, () => true>;\n\n/** 转为小驼峰 */\nexport type CamelCase<T extends string> = T extends `${infer A}-${infer B}` ? CamelCase<`${A}${Capitalize<B>}`> : T;\n\n/** 转为 - 连接 */\nexport type Hyphenate<S extends string> = S extends `${infer First}${infer Rest}`\n ? `${Lowercase<First>}${\n Rest extends Uncapitalize<Rest>\n ? Hyphenate<Rest>\n : `-${Hyphenate<Uncapitalize<Rest>>}`\n }`\n : S;\n\n/** 将对象转为 vue props */\nexport type Obj2Props<T> = {\n [K in keyof T]-?: { type: PropType<NonNullable<T[K]>>; validator: undefined };\n};\n","/** 版本号 */\nexport const version = '0.2.8';\n","import type { usePlain } from '@xiaohaih/json-form-core';\nimport type { Ref } from 'vue';\nimport { computed, nextTick, ref, watch } from 'vue';\nimport { pick } from '../src/utils';\n\n/** 表单组件的常用属性 */\nexport function useCommonSetup<Props extends Record<string, any>, Context extends Record<string, any>>(props: Props, ctx: Context, plain: ReturnType<typeof usePlain>) {\n /** 插槽常用属性 */\n const slotProps = computed(() => ({ props, plain }));\n\n return { slotProps };\n}\n\n/**\n * 为选中值构建临时变量\n * 某些 UI 组件并不直接使用 modelValue, 而是内部维护一个变量\n * 当内部值发生变化, 而 modelValue 又立马重置为相同值时\n * 导致组件内部值无法同步 modelValue\n */\nexport function useTempChecked(checked: Ref<any>) {\n const tempChecked = ref(checked.value);\n // 监听外部值变化, 当第三方组件直接改变值时, 需要同步\n watch(checked, (val) => tempChecked.value = val);\n\n /**\n * 对 change 做特殊处理, 异步改变值\n * 防止存在默认值时, vant 组件清空值时\n * 内部马上重写会导致值更新了, ui 未更新\n */\n function change(value: any) {\n checked.value = tempChecked.value = value;\n tempChecked.value !== checked.value && nextTick(() => tempChecked.value = checked.value);\n }\n /**\n * 对 change 做特殊处理, 同步改变值\n * 临时变量直接等于值时, 无法得到 checked.value 最新的值\n * 因此等 checked.value 赋值后再等于其即可\n */\n function changeSync(value: any) {\n checked.value = value;\n tempChecked.value = checked.value;\n }\n\n return { tempChecked, change, changeSync };\n}\n","import type { Obj2Props, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField } from 'vant';\nimport type { AsyncComponentOptions, Component, ComponentOptions, ComponentPublicInstance, DefineComponent, ExtractPropTypes, PropType, Raw, VNode } from 'vue';\nimport type { ComponentProps } from 'vue-component-type-helpers';\n\nexport interface SlotQuery {\n /** 是否禁用 */\n disabled: boolean;\n /** 绑定的值 */\n modelValue: any;\n /** 内部设置的类名 */\n class: string;\n /** 组件内部信息 */\n extraOption: {\n /** 表单信息值 */\n query: Record<string, any>;\n /** 触发外部搜索事件 */\n search: () => void;\n /** 触发内部搜索事件 */\n insideSearch: () => void;\n };\n [index: string]: string | number | boolean | ((...args: any[]) => any) | Record<string, any> | any[];\n}\n\nconst vantFieldProps = VanField.props as unknown as Obj2Props<ComponentProps<typeof VanField>>;\n/** 公共属性 - 泛型 */\nexport function commonPropsGeneric<Query extends Record<string, any>, OptionQuery = Record<string, any>>() {\n return {\n /** field 组件属性 */\n ...{} as typeof vantFieldProps,\n /** 是否禁用 */\n disabled: { type: Boolean as PropType<boolean>, default: undefined },\n /** 是否只读 */\n readonly: { type: Boolean as PropType<boolean>, default: undefined },\n /** 是否隐藏表单项 */\n hide: { type: Boolean as PropType<boolean>, default: undefined },\n /** field 组件自身的插槽 */\n slots: { type: Object as PropType<CommonSlots> },\n } as const;\n}\n/** 公共属性 */\nexport const commonProps = commonPropsGeneric();\nexport type CommonProps<Query extends Record<string, any>, OptionQuery> = ReturnType<typeof commonPropsGeneric<Query, OptionQuery>>;\n\n/** 通用插槽 */\nexport interface CommonSlots<T = Record<string, any>> {\n /** 自定义输入框左侧文本 */\n label?: ComponentType<CommonSlotsProps<any, any> & T>;\n /** 自定义输入框,使用此插槽后,与输入框相关的属性和事件将失效 */\n input?: ComponentType<CommonSlotsProps<any, any> & T>;\n /** 自定义输入框头部图标 */\n leftIcon?: ComponentType<CommonSlotsProps<any, any> & T>;\n /** 自定义输入框尾部图标 */\n rightIcon?: ComponentType<CommonSlotsProps<any, any> & T>;\n /** 自定义输入框尾部按钮 */\n button?: ComponentType<CommonSlotsProps<any, any> & T>;\n /** 自定义底部错误提示文案 */\n errorMessage?: ComponentType<{ message: string } & CommonSlotsProps<any, any> & T>;\n /** 自定义输入框最右侧的额外内容 */\n extra?: ComponentType<CommonSlotsProps<any, any> & T>;\n}\n\n/** 插槽通用参数 */\nexport interface CommonSlotsProps<Query extends Record<string, any>, Options extends Record<string, any>> {\n props: Record<string, any>;\n plain: ReturnType<typeof usePlain<Query, Options>>;\n}\n\n/** 支持的组件格式 */\nexport type ComponentType<Props = Record<string, any>, Context = any>\n = | DefineComponent | Raw<DefineComponent>\n | ((props: Props, ctx?: Context) => any)\n | ComponentOptions\n | ComponentPublicInstance\n | (() => Promise<Component | { default: Component }>)\n | AsyncComponentOptions\n | string | number\n | { [key: string]: any };\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport type { Area as VanArea, Popup as VanPopup } from 'vant';\nimport { Field as VanField } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentEmit, ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { PickerOption } from '../picker/types';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function areaPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** 重写 option 属性, 增加支持的类型 */\n options: { type: [Object, Array] as PropType<any> },\n /** VanArea 组件的属性 */\n areaProps: { type: Object as PropType<Partial<ComponentProps<typeof VanArea>>> },\n /** VanArea 组件的事件 - 兼容 vue2 版本 */\n areaOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanArea.emits>>>>>, default: () => ({}) },\n /** VanArea 组件的插槽 */\n areaSlots: { type: Object as PropType<{\n /** 自定义整个顶部栏的内容 */\n toolbar?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义标题内容 */\n title?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义确认按钮内容 */\n confirm?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义取消按钮内容 */\n cancel?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义选项上方内容 */\n columnsTop?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义选项下方内容 */\n columnsBottom?: ComponentType<CommonSlotsProps<any, any>>;\n }> },\n /** 是否展示右侧箭头并开启点击反馈 - Field 字段, 调整默认值 */\n isLink: { type: Boolean, default: true },\n /** 点击事件, 当传递了此事件时, 会忽略内部打开弹窗操作 */\n onRowClick: { type: Function as PropType<(option: { open: () => void; close: () => void }, ev: MouseEvent) => void> },\n /** 显示文本的分隔符 @default / */\n separator: { type: String, default: '/' },\n /** 是否显示全路径 */\n showAllLevels: { type: Boolean, default: true },\n /** 对值进行格式化 - 显示在页面上的值 */\n format: { type: Function as PropType<(option: {\n source: Record<'province_list' | 'city_list' | 'county_list', Record<string, any>>;\n value: string | undefined;\n showAllLevels: boolean;\n separator: string;\n }) => any> },\n /** 值触发方式 @default confirm */\n valueTrigger: { type: String as PropType<'change' | 'confirm' | 'cancel'>, default: 'confirm' },\n /** 弹窗组件的属性 */\n popupProps: { type: Object as PropType<Partial<ComponentExposed<typeof VanPopup>>> },\n /** 弹窗组件的事件 - 兼容 vue2 版本 */\n popupOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanPopup.emits>>>>>, default: () => ({}) },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const areaPropsPrivate = areaPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const areaProps = {\n ...VanField.props as unknown as {},\n ...areaPropsPrivate,\n};\nexport type AreaProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof areaPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function areaEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const areaEmitsPrivate = areaEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const areaEmits = {\n ...VanField.emits,\n ...areaEmitsPrivate,\n};\n\nexport type AreaEmits<T> = ReturnType<typeof areaEmitsGeneric<T>>;\n\nexport interface AreaSlots extends CommonSlots<any> {\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :is-link=\"isLink\"\n :model-value=\"showText\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanArea\n :model-value=\"checked\"\n :area-list=\"finalOption\"\n v-bind=\"areaProps\" v-on=\"areaOn\"\n @change=\"changeHandle\" @confirm=\"confirmHandle\" @cancel=\"cancelHandle\"\n >\n <template v-for=\"(item, slotName) of areaSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanArea>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Area as VanArea, Field as VanField, Popup as VanPopup } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, ref } from 'vue';\nimport type { PickerOption } from '../picker/types';\nimport { useCommonSetup } from '../use';\nimport type { AreaSlots } from './types';\nimport { areaEmitsPrivate as emits, areaPropsPrivate as props } from './types';\n\n/**\n * @file 区域选择框\n */\nexport default defineComponent({\n name: 'HArea',\n components: { VanArea, VanField, VanPopup },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<AreaSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 展示在页面上的值 */\n const showText = computed(() => {\n const value = plain.checked.value as string;\n if (!value) return '';\n const { format, showAllLevels, separator } = props;\n const source = (props.areaProps?.areaList || plain.finalOption.value) as Record<string, any>;\n if (format) return format({ source, value, showAllLevels, separator });\n const result: string[] = [];\n source.province_list && result.push(source.province_list[`${value.slice(0, 2)}0000`]);\n value.length >= 4 && source.city_list && result.push(source.city_list[`${value.slice(0, 4)}00`]);\n value.length >= 6 && source.county_list && result.push(source.county_list[value]);\n return result.filter(Boolean).join(separator);\n });\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /**\n * 更改事件\n * @param {string} type 事件类型\n * @param {string} value 日期值\n */\n function dateEventHandle(type: string, value: PickerOption) {\n // @ts-expect-error 忽视 showToolbar 声明报错\n (props.valueTrigger === type || props.areaProps?.showToolbar === false) && plain.change(value.selectedValues.slice(-1)[0]);\n switch (type) {\n case 'confirm':\n case 'cancel':\n {\n popupInfo.value.close();\n break;\n }\n default: break;\n }\n }\n\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n showText,\n clickHandle,\n changeHandle: dateEventHandle.bind(null, 'change'),\n confirmHandle: dateEventHandle.bind(null, 'confirm'),\n cancelHandle: dateEventHandle.bind(null, 'cancel'),\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :is-link=\"isLink\"\n :model-value=\"showText\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanArea\n :model-value=\"checked\"\n :area-list=\"finalOption\"\n v-bind=\"areaProps\" v-on=\"areaOn\"\n @change=\"changeHandle\" @confirm=\"confirmHandle\" @cancel=\"cancelHandle\"\n >\n <template v-for=\"(item, slotName) of areaSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanArea>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Area as VanArea, Field as VanField, Popup as VanPopup } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, ref } from 'vue';\nimport type { PickerOption } from '../picker/types';\nimport { useCommonSetup } from '../use';\nimport type { AreaSlots } from './types';\nimport { areaEmitsPrivate as emits, areaPropsPrivate as props } from './types';\n\n/**\n * @file 区域选择框\n */\nexport default defineComponent({\n name: 'HArea',\n components: { VanArea, VanField, VanPopup },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<AreaSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 展示在页面上的值 */\n const showText = computed(() => {\n const value = plain.checked.value as string;\n if (!value) return '';\n const { format, showAllLevels, separator } = props;\n const source = (props.areaProps?.areaList || plain.finalOption.value) as Record<string, any>;\n if (format) return format({ source, value, showAllLevels, separator });\n const result: string[] = [];\n source.province_list && result.push(source.province_list[`${value.slice(0, 2)}0000`]);\n value.length >= 4 && source.city_list && result.push(source.city_list[`${value.slice(0, 4)}00`]);\n value.length >= 6 && source.county_list && result.push(source.county_list[value]);\n return result.filter(Boolean).join(separator);\n });\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /**\n * 更改事件\n * @param {string} type 事件类型\n * @param {string} value 日期值\n */\n function dateEventHandle(type: string, value: PickerOption) {\n // @ts-expect-error 忽视 showToolbar 声明报错\n (props.valueTrigger === type || props.areaProps?.showToolbar === false) && plain.change(value.selectedValues.slice(-1)[0]);\n switch (type) {\n case 'confirm':\n case 'cancel':\n {\n popupInfo.value.close();\n break;\n }\n default: break;\n }\n }\n\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n showText,\n clickHandle,\n changeHandle: dateEventHandle.bind(null, 'change'),\n confirmHandle: dateEventHandle.bind(null, 'confirm'),\n cancelHandle: dateEventHandle.bind(null, 'cancel'),\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { Obj2Props, usePlain } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport type { Field as VanField } from 'vant';\nimport type { ExtractPublicPropTypes, Prop, PropType } from 'vue';\nimport type { ComponentProps } from 'vue-component-type-helpers';\n\ntype VanFieldProps = Obj2Props<ComponentProps<typeof VanField>>;\n\n/** 组件传参 */\nexport const inputSlotProps = {\n ...{\n // 这些属性不需要传到组件上\n t: { type: String as PropType<string> },\n rules: { type: [Array, Object] as PropType<any> },\n name: { type: [String] as PropType<string> },\n } as unknown as typeof VanField.props as unknown as VanFieldProps,\n /** 输入框类型(input/textarea) */\n type: { type: String } as unknown as VanFieldProps['type'],\n /** 输入框行数 */\n rows: { type: [Number, String] as PropType<number | string> },\n /** 禁用 */\n disabled: { type: [Boolean] as PropType<boolean> },\n /** 只读 */\n readonly: { type: [Boolean] as PropType<boolean> },\n /** 文本信息 */\n label: { type: [String] as PropType<string> },\n};\nexport type InputSlotProps = ExtractPublicPropTypes<typeof inputSlotProps>;\n\n/** 组件事件 */\nexport const inputSlotEmits = {\n};\n\nexport type InputSlotEmits = typeof inputSlotEmits;\n","<template>\n <textarea v-if=\"type === 'textarea'\" ref=\"inputRef\" v-bind=\"inputAttrs\" @focus=\"focusHandle\" @blur=\"blurHandle\" @keypress=\"keypressHandle\" />\n <input v-else ref=\"inputRef\" v-bind=\"inputAttrs\" @focus=\"focusHandle\" @blur=\"blurHandle\" @keypress=\"keypressHandle\">\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, ref } from 'vue';\nimport type { ComponentExposed } from 'vue-component-type-helpers';\nimport { inputSlotEmits as emits, inputSlotProps as props } from './types';\n\n/**\n * @file 输入框 - 该组件提供 vant 输入框的样式, 便于覆盖 Field.input 插槽\n */\nexport default defineComponent({\n name: 'HInputSlot',\n components: { },\n inheritAttrs: false,\n props,\n emits,\n setup(props, ctx) {\n const id = '';\n const inputRef = ref<ComponentExposed<typeof HTMLInputElement | typeof HTMLTextAreaElement>>();\n const inputAttrs = computed(() => {\n const { rows, label, disabled, readonly } = props;\n return {\n ...ctx.attrs,\n 'rows': rows !== undefined ? +rows : undefined,\n 'aria-labelledby': label ? `${id}-label` : undefined,\n 'data-allow-mismatch': 'attribute',\n 'class': 'van-field__control',\n disabled,\n readonly,\n // onBlur,\n // onFocus,\n // onKeypress,\n };\n });\n\n function blur() {\n inputRef.value?.blur();\n }\n function focus() {\n inputRef.value?.focus();\n }\n function focusHandle(event: Event) {\n nextTick(adjustTextareaSize);\n // readonly not work in legacy mobile safari\n props.readonly && blur();\n };\n function blurHandle() {\n if (props.readonly) return;\n nextTick(adjustTextareaSize);\n resetScroll();\n }\n function keypressHandle(event: KeyboardEvent) {\n // const ENTER_CODE = 13;\n // if (event.keyCode === ENTER_CODE) {\n // // trigger blur after click keyboard search button\n // props.type === 'search' && blur();\n // }\n\n };\n\n const adjustTextareaSize = () => {\n const input = inputRef.value;\n if (props.type === 'textarea' && props.autosize && input) {\n resizeTextarea(input as HTMLInputElement, props.autosize);\n }\n };\n function resetScroll() {\n if (isIOS_) {\n setRootScrollTop(getRootScrollTop());\n }\n }\n\n const inBrowser = typeof window !== 'undefined';\n const isIOS = (): boolean =>\n inBrowser\n ? /ios|iphone|ipad|ipod/.test(navigator.userAgent.toLowerCase())\n : false;\n const isIOS_ = isIOS();\n const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\n\n function resizeTextarea(\n input: HTMLInputElement,\n autosize: true | {\n maxHeight?: number;\n minHeight?: number;\n },\n ) {\n const scrollTop = getRootScrollTop();\n input.style.height = 'auto';\n\n let height = input.scrollHeight;\n if (isObject(autosize)) {\n const { maxHeight, minHeight } = autosize;\n if (maxHeight !== undefined) {\n height = Math.min(height, maxHeight);\n }\n if (minHeight !== undefined) {\n height = Math.max(height, minHeight);\n }\n }\n\n if (height) {\n input.style.height = `${height}px`;\n // https://github.com/vant-ui/vant/issues/9178\n setRootScrollTop(scrollTop);\n }\n }\n\n type ScrollElement = Element | Window;\n function setScrollTop(el: ScrollElement, value: number) {\n if ('scrollTop' in el) {\n el.scrollTop = value;\n }\n else {\n el.scrollTo(el.scrollX, value);\n }\n }\n\n function getRootScrollTop(): number {\n return (\n window.pageYOffset\n || document.documentElement.scrollTop\n || document.body.scrollTop\n || 0\n );\n }\n function setRootScrollTop(value: number) {\n setScrollTop(window, value);\n setScrollTop(document.body, value);\n }\n\n return {\n inputRef,\n inputAttrs,\n focusHandle,\n blurHandle,\n keypressHandle,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <textarea v-if=\"type === 'textarea'\" ref=\"inputRef\" v-bind=\"inputAttrs\" @focus=\"focusHandle\" @blur=\"blurHandle\" @keypress=\"keypressHandle\" />\n <input v-else ref=\"inputRef\" v-bind=\"inputAttrs\" @focus=\"focusHandle\" @blur=\"blurHandle\" @keypress=\"keypressHandle\">\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, ref } from 'vue';\nimport type { ComponentExposed } from 'vue-component-type-helpers';\nimport { inputSlotEmits as emits, inputSlotProps as props } from './types';\n\n/**\n * @file 输入框 - 该组件提供 vant 输入框的样式, 便于覆盖 Field.input 插槽\n */\nexport default defineComponent({\n name: 'HInputSlot',\n components: { },\n inheritAttrs: false,\n props,\n emits,\n setup(props, ctx) {\n const id = '';\n const inputRef = ref<ComponentExposed<typeof HTMLInputElement | typeof HTMLTextAreaElement>>();\n const inputAttrs = computed(() => {\n const { rows, label, disabled, readonly } = props;\n return {\n ...ctx.attrs,\n 'rows': rows !== undefined ? +rows : undefined,\n 'aria-labelledby': label ? `${id}-label` : undefined,\n 'data-allow-mismatch': 'attribute',\n 'class': 'van-field__control',\n disabled,\n readonly,\n // onBlur,\n // onFocus,\n // onKeypress,\n };\n });\n\n function blur() {\n inputRef.value?.blur();\n }\n function focus() {\n inputRef.value?.focus();\n }\n function focusHandle(event: Event) {\n nextTick(adjustTextareaSize);\n // readonly not work in legacy mobile safari\n props.readonly && blur();\n };\n function blurHandle() {\n if (props.readonly) return;\n nextTick(adjustTextareaSize);\n resetScroll();\n }\n function keypressHandle(event: KeyboardEvent) {\n // const ENTER_CODE = 13;\n // if (event.keyCode === ENTER_CODE) {\n // // trigger blur after click keyboard search button\n // props.type === 'search' && blur();\n // }\n\n };\n\n const adjustTextareaSize = () => {\n const input = inputRef.value;\n if (props.type === 'textarea' && props.autosize && input) {\n resizeTextarea(input as HTMLInputElement, props.autosize);\n }\n };\n function resetScroll() {\n if (isIOS_) {\n setRootScrollTop(getRootScrollTop());\n }\n }\n\n const inBrowser = typeof window !== 'undefined';\n const isIOS = (): boolean =>\n inBrowser\n ? /ios|iphone|ipad|ipod/.test(navigator.userAgent.toLowerCase())\n : false;\n const isIOS_ = isIOS();\n const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\n\n function resizeTextarea(\n input: HTMLInputElement,\n autosize: true | {\n maxHeight?: number;\n minHeight?: number;\n },\n ) {\n const scrollTop = getRootScrollTop();\n input.style.height = 'auto';\n\n let height = input.scrollHeight;\n if (isObject(autosize)) {\n const { maxHeight, minHeight } = autosize;\n if (maxHeight !== undefined) {\n height = Math.min(height, maxHeight);\n }\n if (minHeight !== undefined) {\n height = Math.max(height, minHeight);\n }\n }\n\n if (height) {\n input.style.height = `${height}px`;\n // https://github.com/vant-ui/vant/issues/9178\n setRootScrollTop(scrollTop);\n }\n }\n\n type ScrollElement = Element | Window;\n function setScrollTop(el: ScrollElement, value: number) {\n if ('scrollTop' in el) {\n el.scrollTop = value;\n }\n else {\n el.scrollTo(el.scrollX, value);\n }\n }\n\n function getRootScrollTop(): number {\n return (\n window.pageYOffset\n || document.documentElement.scrollTop\n || document.body.scrollTop\n || 0\n );\n }\n function setRootScrollTop(value: number) {\n setScrollTop(window, value);\n setScrollTop(document.body, value);\n }\n\n return {\n inputRef,\n inputAttrs,\n focusHandle,\n blurHandle,\n keypressHandle,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","/**\n * 根据指定值获取树形链\n * @param {Array} sources 待查找的数据源\n * @param {object} value 匹配值\n * @param {string} childrenKey 子级的 key, 默认 children\n */\nexport function getChained<T extends Record<string, any>>(\n sources: T[],\n value: Partial<T>,\n childrenKey = 'children',\n): T[] {\n const result: T[] = [];\n carryChained(\n sources,\n value,\n (data) => {\n result.unshift(data);\n },\n childrenKey,\n );\n return result;\n}\n\n/**\n * 寻找匹配条件值并执行回调\n * @param {Array} sources 待查找的数据源\n * @param {object} value 匹配值\n * @param {Function} callback 执行的回调\n * @param {string} childrenKey 子级的 key, 默认 children\n */\nexport function carryChained<T extends Record<string, any>>(\n sources: T[],\n value: Partial<T>,\n callback: (data: T, isDeep?: boolean) => void,\n childrenKey = 'children',\n): boolean | undefined {\n const conditions = Object.entries(value);\n for (const v of sources) {\n const status = conditions.every(([k, val]) => val === v[k]);\n if (status) {\n callback(v, true);\n return true;\n }\n if (v[childrenKey] && v[childrenKey].length) {\n const result = carryChained(v[childrenKey], value, callback, childrenKey);\n if (result) {\n callback(v);\n return true;\n }\n }\n }\n}\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport type { CascaderOption, Cascader as VanCascader, Popup as VanPopup } from 'vant';\nimport { Field as VanField } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { camelize } from 'vue';\nimport type { ComponentEmit, ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function cascaderPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** 输入框左侧文本 */\n label: { type: String },\n /** 输入框的提示文字 */\n placeholder: { type: String },\n /** 是否展示右侧箭头并开启点击反馈 */\n isLink: { type: Boolean, default: true },\n /** 是否严格的遵守父子节点不互相关联(可选任意级) */\n checkStrictly: { type: Boolean, default: undefined },\n /** 是否显示全路径 */\n showAllLevels: { type: Boolean, default: undefined },\n /** 节点关联的情况下, 是否返回所有路径(即返回数组) */\n emitPath: { type: Boolean, default: undefined },\n /** 点击事件, 当传递了此事件时, 会忽略内部打开弹窗操作 */\n onRowClick: { type: Function as PropType<(option: { open: () => void; close: () => void }, ev: MouseEvent) => void> },\n /** VanCascader 组件的属性 */\n cascaderProps: { type: Object as PropType<Partial<ComponentProps<typeof VanCascader>>>, default: () => ({}) },\n /** VanCascader 组件的事件 - 兼容 vue2 版本 */\n cascaderOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanCascader.emits>>>>>, default: () => ({}) },\n /** VanCascader 组件的插槽 */\n cascaderSlots: { type: Object as PropType<{\n /** 自定义顶部标题 */\n title?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义选项文字 */\n option?: ComponentType<{ option: CascaderOption; selected: boolean } & CommonSlotsProps<any, any>>;\n /** 自定义选项上方的内容 */\n optionsTop?: ComponentType<{ tabIndex: number } & CommonSlotsProps<any, any>>;\n /** 自定义选项下方的内容 */\n optionsBottom?: ComponentType<{ tabIndex: number } & CommonSlotsProps<any, any>>;\n }> },\n /** 弹窗组件的属性 */\n popupProps: { type: Object as PropType<Partial<ComponentExposed<typeof VanPopup>>> },\n /** 弹窗组件的事件 - 兼容 vue2 版本 */\n popupOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanPopup.emits>>>>>, default: () => ({}) },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const cascaderPropsPrivate = cascaderPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const cascaderProps = {\n ...VanField.props as unknown as {},\n ...cascaderPropsPrivate,\n};\nexport type CascaderProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof cascaderPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function cascaderEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const cascaderEmitsPrivate = cascaderEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const cascaderEmits = {\n ...VanField.emits,\n ...cascaderEmitsPrivate,\n};\n\nexport type CascaderEmits<T> = ReturnType<typeof cascaderEmitsGeneric<T>>;\n\nexport interface CascaderSlots extends CommonSlots<any> {\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\" :label=\"label\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :placeholder=\"placeholder\"\n :model-value=\"lastCheckedValue\" :is-link=\"isLink\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #input>\n <HInputSlot\n :value=\"showText\" :placeholder=\"placeholder\"\n :disabled=\"globalDisabled || disabled\" :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n />\n </template>\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanCascader\n :title=\"cascaderProps.title || label\" :placeholder=\"cascaderProps.placeholder || placeholder\"\n :model-value=\"lastCheckedValue\" :options=\"finalOption\"\n v-bind=\"cascaderProps\" v-on=\"cascaderOn\"\n @change=\"change\" @finish=\"finish\" @close=\"popupInfo.close\"\n >\n <template v-for=\"(item, slotName) of cascaderSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanCascader>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport type { CascaderOption } from 'vant';\nimport { Cascader as VanCascader, Field as VanField, Popup as VanPopup } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, ref, watch } from 'vue';\nimport { pick } from '../../src/utils';\nimport { HInputSlot } from '../input-slot/index';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport { getChained } from '../utils';\nimport type { CascaderSlots } from './types';\nimport { cascaderEmitsPrivate as emits, cascaderPropsPrivate as props } from './types';\n\ninterface Datum {\n /** 当前选中项 */\n value: string | number;\n /** 选中项的所有值 */\n selectedOptions: CascaderOption[];\n /** 选中项下标 */\n tabIndex: number;\n}\n\n/**\n * @file 级联框\n */\nexport default defineComponent({\n name: 'HCascader',\n components: { VanCascader, VanField, VanPopup, HInputSlot },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<CascaderSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n /** 选中值的最后一位 */\n const lastCheckedValue = computed(() => {\n const val = plain.checked.value;\n return (Array.isArray(val) ? val[val.length - 1] : val) as string;\n });\n /** 展示的文字 */\n const showText = computed(() => {\n const val = lastCheckedValue.value;\n const options = plain.finalOption.value;\n if (!val || !options.length) return '';\n const { labelKey, valueKey, children } = fieldInfo.value;\n const result = getChained(options, { [valueKey]: val }, children);\n if (!result.length) return '';\n return props.showAllLevels ? result.map((v) => v[labelKey]).join('/') : result[result.length - 1]![labelKey];\n });\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 级联下拉框的字段信息 */\n const fieldInfo = computed(() => {\n const fieldNames = props.cascaderProps?.fieldNames || {};\n return {\n labelKey: fieldNames.text || 'text',\n valueKey: fieldNames.value || 'value',\n children: fieldNames.children || 'children',\n };\n });\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /** 级联选择值更改事件 */\n function change(option: Datum) {\n props.checkStrictly && setValue(option);\n }\n /** 级联选择完成事件 */\n function finish(option: Datum) {\n props.checkStrictly || setValue(option);\n }\n /** 设置文本框显示的值 */\n function setValue(option: Datum) {\n const { valueKey } = fieldInfo.value;\n props.emitPath ? plain.change(option.selectedOptions.map((v) => v[valueKey])) : plain.change(option.value);\n }\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n fieldInfo,\n lastCheckedValue,\n showText,\n clickHandle,\n change,\n finish,\n setValue,\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped></style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\" :label=\"label\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :placeholder=\"placeholder\"\n :model-value=\"lastCheckedValue\" :is-link=\"isLink\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #input>\n <HInputSlot\n :value=\"showText\" :placeholder=\"placeholder\"\n :disabled=\"globalDisabled || disabled\" :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n />\n </template>\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanCascader\n :title=\"cascaderProps.title || label\" :placeholder=\"cascaderProps.placeholder || placeholder\"\n :model-value=\"lastCheckedValue\" :options=\"finalOption\"\n v-bind=\"cascaderProps\" v-on=\"cascaderOn\"\n @change=\"change\" @finish=\"finish\" @close=\"popupInfo.close\"\n >\n <template v-for=\"(item, slotName) of cascaderSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanCascader>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport type { CascaderOption } from 'vant';\nimport { Cascader as VanCascader, Field as VanField, Popup as VanPopup } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, ref, watch } from 'vue';\nimport { pick } from '../../src/utils';\nimport { HInputSlot } from '../input-slot/index';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport { getChained } from '../utils';\nimport type { CascaderSlots } from './types';\nimport { cascaderEmitsPrivate as emits, cascaderPropsPrivate as props } from './types';\n\ninterface Datum {\n /** 当前选中项 */\n value: string | number;\n /** 选中项的所有值 */\n selectedOptions: CascaderOption[];\n /** 选中项下标 */\n tabIndex: number;\n}\n\n/**\n * @file 级联框\n */\nexport default defineComponent({\n name: 'HCascader',\n components: { VanCascader, VanField, VanPopup, HInputSlot },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<CascaderSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n /** 选中值的最后一位 */\n const lastCheckedValue = computed(() => {\n const val = plain.checked.value;\n return (Array.isArray(val) ? val[val.length - 1] : val) as string;\n });\n /** 展示的文字 */\n const showText = computed(() => {\n const val = lastCheckedValue.value;\n const options = plain.finalOption.value;\n if (!val || !options.length) return '';\n const { labelKey, valueKey, children } = fieldInfo.value;\n const result = getChained(options, { [valueKey]: val }, children);\n if (!result.length) return '';\n return props.showAllLevels ? result.map((v) => v[labelKey]).join('/') : result[result.length - 1]![labelKey];\n });\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 级联下拉框的字段信息 */\n const fieldInfo = computed(() => {\n const fieldNames = props.cascaderProps?.fieldNames || {};\n return {\n labelKey: fieldNames.text || 'text',\n valueKey: fieldNames.value || 'value',\n children: fieldNames.children || 'children',\n };\n });\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /** 级联选择值更改事件 */\n function change(option: Datum) {\n props.checkStrictly && setValue(option);\n }\n /** 级联选择完成事件 */\n function finish(option: Datum) {\n props.checkStrictly || setValue(option);\n }\n /** 设置文本框显示的值 */\n function setValue(option: Datum) {\n const { valueKey } = fieldInfo.value;\n props.emitPath ? plain.change(option.selectedOptions.map((v) => v[valueKey])) : plain.change(option.value);\n }\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n fieldInfo,\n lastCheckedValue,\n showText,\n clickHandle,\n change,\n finish,\n setValue,\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped></style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport type { Checkbox as VanCheckbox } from 'vant';\nimport { CheckboxGroup as VanCheckboxGroup, Field as VanField } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { camelize } from 'vue';\nimport type { ComponentEmit, ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function checkboxGroupPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** 输入框左侧文本 */\n label: { type: String },\n /** VanCheckboxGroup 组件的属性 */\n checkboxGroupProps: { type: Object as PropType<Partial<ComponentProps<typeof VanCheckboxGroup>>> },\n /** VanCheckboxGroup 组件的事件 - 兼容 vue2 版本 */\n checkboxGroupOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanCheckboxGroup.emits>>>>>, default: () => ({}) },\n /** 显示的标签 */\n labelKey: { type: String, default: 'label' },\n /** 提交的值 */\n valueKey: { type: String, default: 'value' },\n /** VanCheckbox 组件的属性 */\n checkboxProps: { type: Object as PropType<Partial<ComponentProps<typeof VanCheckbox>>> },\n /** VanCheckbox 组件的事件 - 兼容 vue2 版本 */\n checkboxOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanCheckbox.emits>>>>>, default: () => ({}) },\n /** VanCheckbox 组件的插槽 */\n checkboxSlots: { type: Object as PropType<{\n /** 自定义文本 */\n default?: ComponentType<{ checked: boolean; disabled: boolean; item: any } & CommonSlotsProps<any, any>>;\n /** 自定义图标 */\n icon?: ComponentType<{ checked: boolean; disabled: boolean; item: any } & CommonSlotsProps<any, any>>;\n }> },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const checkboxGroupPropsPrivate = checkboxGroupPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const checkboxGroupProps = {\n ...VanField.props as unknown as {},\n ...checkboxGroupPropsPrivate,\n};\nexport type CheckboxGroupProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof checkboxGroupPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function checkboxGroupEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const checkboxGroupEmitsPrivate = checkboxGroupEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const checkboxGroupEmits = {\n ...VanField.emits,\n ...checkboxGroupEmitsPrivate,\n};\n\nexport type CheckboxGroupEmits<T> = ReturnType<typeof checkboxGroupEmitsGeneric<T>>;\n\nexport interface CheckboxGroupSlots extends CommonSlots<any> {\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\" :label=\"label\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanCheckboxGroup\n :name=\"field\" :model-value=\"checked\"\n :disabled=\"globalDisabled || disabled || globalReadonly || readonly\"\n v-bind=\"checkboxGroupProps\" v-on=\"checkboxGroupOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"item of finalOption\" :key=\"item[valueKey]\">\n <VanCheckbox :name=\"item[valueKey]\" v-bind=\"checkboxProps\" v-on=\"checkboxOn\">\n {{ item[labelKey] }}\n <template v-for=\"(checkBoxItem, slotName) of checkboxSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(checkBoxItem)\" v-bind=\"slotProps\" :item=\"item\" v-bind.prop=\"row\" />\n </template>\n </VanCheckbox>\n </template>\n </VanCheckboxGroup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Checkbox as VanCheckbox, CheckboxGroup as VanCheckboxGroup, Field as VanField } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent } from 'vue';\nimport { pick } from '../../src/utils';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport type { CheckboxGroupSlots } from './types';\nimport { checkboxGroupEmitsPrivate as emits, checkboxGroupPropsPrivate as props } from './types';\n\n/**\n * @file 多选框组\n */\nexport default defineComponent({\n name: 'HCheckboxGroup',\n components: { VanCheckbox, VanCheckboxGroup, VanField },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<CheckboxGroupSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\" :label=\"label\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanCheckboxGroup\n :name=\"field\" :model-value=\"checked\"\n :disabled=\"globalDisabled || disabled || globalReadonly || readonly\"\n v-bind=\"checkboxGroupProps\" v-on=\"checkboxGroupOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"item of finalOption\" :key=\"item[valueKey]\">\n <VanCheckbox :name=\"item[valueKey]\" v-bind=\"checkboxProps\" v-on=\"checkboxOn\">\n {{ item[labelKey] }}\n <template v-for=\"(checkBoxItem, slotName) of checkboxSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(checkBoxItem)\" v-bind=\"slotProps\" :item=\"item\" v-bind.prop=\"row\" />\n </template>\n </VanCheckbox>\n </template>\n </VanCheckboxGroup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Checkbox as VanCheckbox, CheckboxGroup as VanCheckboxGroup, Field as VanField } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent } from 'vue';\nimport { pick } from '../../src/utils';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport type { CheckboxGroupSlots } from './types';\nimport { checkboxGroupEmitsPrivate as emits, checkboxGroupPropsPrivate as props } from './types';\n\n/**\n * @file 多选框组\n */\nexport default defineComponent({\n name: 'HCheckboxGroup',\n components: { VanCheckbox, VanCheckboxGroup, VanField },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<CheckboxGroupSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport { Checkbox as VanCheckbox, Field as VanField } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { camelize } from 'vue';\nimport type { ComponentEmit, ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function checkboxPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** 输入框左侧文本 */\n label: { type: String },\n /** VanCheckbox 组件的属性 */\n checkboxProps: { type: Object as PropType<Partial<ComponentProps<typeof VanCheckbox>>> },\n /** VanCheckbox 组件的事件 - 兼容 vue2 版本 */\n checkboxOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanCheckbox.emits>>>>>, default: () => ({}) },\n /** VanCheckbox 组件的插槽 */\n checkboxSlots: { type: Object as PropType<{\n /** 自定义文本 */\n default?: ComponentType<{ checked: boolean; disabled: boolean } & CommonSlotsProps<any, any>>;\n /** 自定义图标 */\n icon?: ComponentType<{ checked: boolean; disabled: boolean } & CommonSlotsProps<any, any>>;\n }> },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const checkboxPropsPrivate = checkboxPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const checkboxProps = {\n ...VanField.props as unknown as {},\n ...checkboxPropsPrivate,\n};\nexport type CheckboxProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof checkboxPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function checkboxEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const checkboxEmitsPrivate = checkboxEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const checkboxEmits = {\n ...VanField.emits,\n ...checkboxEmitsPrivate,\n};\n\nexport type CheckboxEmits<T> = ReturnType<typeof checkboxEmitsGeneric<T>>;\n\nexport interface CheckboxSlots extends CommonSlots<any> {\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\" :label=\"label\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanCheckbox\n :name=\"field\" :model-value=\"checked\"\n :disabled=\"globalDisabled || disabled || globalReadonly || readonly\"\n v-bind=\"checkboxProps\" v-on=\"checkboxOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of checkboxSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanCheckbox>\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Checkbox as VanCheckbox, Field as VanField } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent } from 'vue';\nimport { pick } from '../../src/utils';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport type { CheckboxSlots } from './types';\nimport { checkboxEmitsPrivate as emits, checkboxPropsPrivate as props } from './types';\n\n/**\n * @file 多选框\n */\nexport default defineComponent({\n name: 'HCheckbox',\n components: { VanCheckbox, VanField },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<CheckboxSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\" :label=\"label\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanCheckbox\n :name=\"field\" :model-value=\"checked\"\n :disabled=\"globalDisabled || disabled || globalReadonly || readonly\"\n v-bind=\"checkboxProps\" v-on=\"checkboxOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of checkboxSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanCheckbox>\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Checkbox as VanCheckbox, Field as VanField } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent } from 'vue';\nimport { pick } from '../../src/utils';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport type { CheckboxSlots } from './types';\nimport { checkboxEmitsPrivate as emits, checkboxPropsPrivate as props } from './types';\n\n/**\n * @file 多选框\n */\nexport default defineComponent({\n name: 'HCheckbox',\n components: { VanCheckbox, VanField },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<CheckboxSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { CamelCase, Obj2Props, PlainProps, usePlain } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport type { Component, ExtractPublicPropTypes, PropType, Ref } from 'vue';\nimport type { ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function customRenderPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** 是否渲染 form-item @default true */\n renderField: { type: Boolean as PropType<boolean>, default: true },\n /** 渲染节点 */\n render: {\n type: [Function, Object] as PropType<((option: CustomRenderSlotOption<Query, OptionQuery>) => () => any) | Record<string, any>>,\n required: true,\n },\n } as const;\n}\nexport interface CustomRenderSlotOption<Query extends Record<string, any>, OptionQuery extends Record<string, any>> extends CommonSlotsProps<Query, OptionQuery> {\n}\n/** 组件传参 - 私有 */\nexport const customRenderPropsPrivate = customRenderPropsGeneric();\n/** 组件传参 - 外部调用 */\n\nexport const customRenderProps = customRenderPropsPrivate;\nexport type CustomRenderProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof customRenderPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function customRenderEmitsGeneric<T>() {\n return {\n };\n}\n/** 组件事件 - 私有 */\nexport const customRenderEmitsPrivate = customRenderEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const customRenderEmits = customRenderEmitsPrivate;\nexport type CustomRenderEmits<T> = ReturnType<typeof customRenderEmitsGeneric<T>>;\n\nexport interface CustomRenderSlots extends CommonSlots<Record<string, any>> {\n}\n","<template>\n <template v-if=\"renderField\">\n <VanField v-if=\"!hide\" :model-value=\"fieldModelValue\" v-bind=\"$attrs\">\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n <template #input>\n <component :is=\"customRender\" v-bind=\"slotProps\" />\n </template>\n </VanField>\n </template>\n <template v-else>\n <component :is=\"customRender\" v-bind=\"slotProps\" />\n </template>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, noop, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, markRaw, ref, watch } from 'vue';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport type { CustomRenderSlots } from './types';\nimport { customRenderEmitsPrivate as emits, customRenderPropsPrivate as props } from './types';\n\n/**\n * @file 自定义渲染\n */\nexport default defineComponent({\n name: 'HCustomRender',\n components: { VanField },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<CustomRenderSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n const fieldModelValue = computed(() => typeof plain.checked.value === 'object' ? '' : plain.checked.value);\n const customRender = ref<any>();\n // 由计算属性改为 watch\n // 防止在 watch 中引用了响应式变量导致重渲染\n watch(() => props.render, (render) => {\n customRender.value = typeof render === 'function'\n ? getNode(render(slotProps.value))\n : render;\n }, { immediate: true });\n // const customRender = computed(() => {\n // return typeof props.render === 'function'\n // ? getNode(props.render(slotProps.value))\n // : props.render;\n // });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n fieldModelValue,\n customRender,\n };\n },\n});\n</script>\n\n<style lang=\"css\" scoped></style>\n","<template>\n <template v-if=\"renderField\">\n <VanField v-if=\"!hide\" :model-value=\"fieldModelValue\" v-bind=\"$attrs\">\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n <template #input>\n <component :is=\"customRender\" v-bind=\"slotProps\" />\n </template>\n </VanField>\n </template>\n <template v-else>\n <component :is=\"customRender\" v-bind=\"slotProps\" />\n </template>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, noop, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, markRaw, ref, watch } from 'vue';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport type { CustomRenderSlots } from './types';\nimport { customRenderEmitsPrivate as emits, customRenderPropsPrivate as props } from './types';\n\n/**\n * @file 自定义渲染\n */\nexport default defineComponent({\n name: 'HCustomRender',\n components: { VanField },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<CustomRenderSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n const fieldModelValue = computed(() => typeof plain.checked.value === 'object' ? '' : plain.checked.value);\n const customRender = ref<any>();\n // 由计算属性改为 watch\n // 防止在 watch 中引用了响应式变量导致重渲染\n watch(() => props.render, (render) => {\n customRender.value = typeof render === 'function'\n ? getNode(render(slotProps.value))\n : render;\n }, { immediate: true });\n // const customRender = computed(() => {\n // return typeof props.render === 'function'\n // ? getNode(props.render(slotProps.value))\n // : props.render;\n // });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n fieldModelValue,\n customRender,\n };\n },\n});\n</script>\n\n<style lang=\"css\" scoped></style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport type { Popup as VanPopup } from 'vant';\nimport { DatePicker as VanDatePicker, Field as VanField } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentEmit, ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { PickerOption } from '../picker/types';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function datePickerPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** VanDatePicker 组件的属性 */\n datePickerProps: { type: Object as PropType<Partial<ComponentProps<typeof VanDatePicker>>> },\n /** VanDatePicker 组件的事件 - 兼容 vue2 版本 */\n datePickerOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanDatePicker.emits>>>>>, default: () => ({}) },\n /** VanDatePicker 组件的插槽 */\n datePickerSlots: { type: Object as PropType<{\n /** 自定义整个顶部栏的内容 */\n toolbar?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义标题内容 */\n title?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义确认按钮内容 */\n confirm?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义取消按钮内容 */\n cancel?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义选项内容 */\n option?: ComponentType<{ option: PickerOption; index: number } & CommonSlotsProps<any, any>>;\n /** 自定义选项上方内容 */\n columnsTop?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义选项下方内容 */\n columnsBottom?: ComponentType<CommonSlotsProps<any, any>>;\n }> },\n /** 是否展示右侧箭头并开启点击反馈 - Field 字段, 调整默认值 */\n isLink: { type: Boolean, default: true },\n /** 点击事件, 当传递了此事件时, 会忽略内部打开弹窗操作 */\n onRowClick: { type: Function as PropType<(option: { open: () => void; close: () => void }, ev: MouseEvent) => void> },\n /** 日期分隔符 @default - */\n separator: { type: String, default: '-' },\n /** 对值进行格式化 - 显示在页面上的值 */\n format: { type: Function as PropType<(option: string[], separator: string) => any>, default: valueFormatDefault },\n /** 对值进行格式化 - 提交值 */\n valueFormat: { type: Function as PropType<(option: string[], separator: string) => any>, default: valueFormatDefault },\n /** 取消值的格式化 - 给 VanDatePicker 的值 */\n valueUnformat: { type: Function as PropType<(option: any, separator: string) => string[]>, default: valueUnformatDefault },\n /** 值触发方式 @default confirm */\n valueTrigger: { type: String as PropType<'change' | 'confirm' | 'cancel'>, default: 'confirm' },\n /** 弹窗组件的属性 */\n popupProps: { type: Object as PropType<Partial<ComponentExposed<typeof VanPopup>>> },\n /** 弹窗组件的事件 - 兼容 vue2 版本 */\n popupOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanPopup.emits>>>>>, default: () => ({}) },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const datePickerPropsPrivate = datePickerPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const datePickerProps = {\n ...VanField.props as unknown as {},\n ...datePickerPropsPrivate,\n};\nexport type DatePickerProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof datePickerPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function datePickerEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const datePickerEmitsPrivate = datePickerEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const datePickerEmits = {\n ...VanField.emits,\n ...datePickerEmitsPrivate,\n};\n\nexport type DatePickerEmits<T> = ReturnType<typeof datePickerEmitsGeneric<T>>;\n\nexport interface DatePickerSlots extends CommonSlots<any> {\n}\n\n/** 默认的合并函数 */\nfunction valueFormatDefault(option: string[], separator: string) {\n return option.join(separator);\n}\n/** 默认的取消格式化函数 */\nfunction valueUnformatDefault(val: string, separator: string) {\n if (!val) return [];\n return Array.isArray(val) ? val : val.split(separator);\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :is-link=\"isLink\"\n :model-value=\"showText\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanDatePicker\n :model-value=\"checkedArr\"\n v-bind=\"datePickerProps\" v-on=\"datePickerOn\"\n @change=\"changeHandle\" @confirm=\"confirmHandle\" @cancel=\"cancelHandle\"\n >\n <template v-for=\"(item, slotName) of datePickerSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanDatePicker>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { DatePicker as VanDatePicker, Field as VanField, Popup as VanPopup } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, nextTick, ref, watch } from 'vue';\nimport type { PickerOption } from '../picker/types';\nimport { useCommonSetup } from '../use';\nimport type { DatePickerSlots } from './types';\nimport { datePickerEmitsPrivate as emits, datePickerPropsPrivate as props } from './types';\n\n/**\n * @file 日期选择框\n */\nexport default defineComponent({\n name: 'HDatePicker',\n components: { VanDatePicker, VanField, VanPopup },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<DatePickerSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 展示在页面上的值 */\n const showText = ref('');\n /** 给日期组件的值 */\n const checkedArr = ref<string[]>([]);\n let tempValue: any;\n // 监听外部值的改变, 如果改变且与临时值不一致时\n // 则更新当前值, 并重置临时值\n watch(\n plain.checked,\n (val) => {\n if (val === tempValue) return tempValue = null;\n tempValue = null;\n checkedArr.value = val ? props.valueUnformat(val, props.separator) : [];\n showText.value = checkedArr.value.length ? props.format(checkedArr.value, props.separator) : '';\n },\n { immediate: true },\n );\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /**\n * 日期更改事件\n * @param {string} type 事件类型\n * @param {string} value 日期值\n */\n function dateEventHandle(type: string, value: PickerOption) {\n if (props.valueTrigger === type || props.datePickerProps?.showToolbar === false) {\n checkedArr.value = value.selectedValues;\n plain.change(props.valueFormat(value.selectedValues, props.separator));\n showText.value = props.format(value.selectedValues, props.separator);\n tempValue = plain.checked.value;\n nextTick(() => tempValue = null);\n }\n switch (type) {\n case 'confirm':\n case 'cancel':\n {\n popupInfo.value.close();\n break;\n }\n default: break;\n }\n }\n\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n showText,\n checkedArr,\n clickHandle,\n changeHandle: dateEventHandle.bind(null, 'change'),\n confirmHandle: dateEventHandle.bind(null, 'confirm'),\n cancelHandle: dateEventHandle.bind(null, 'cancel'),\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :is-link=\"isLink\"\n :model-value=\"showText\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanDatePicker\n :model-value=\"checkedArr\"\n v-bind=\"datePickerProps\" v-on=\"datePickerOn\"\n @change=\"changeHandle\" @confirm=\"confirmHandle\" @cancel=\"cancelHandle\"\n >\n <template v-for=\"(item, slotName) of datePickerSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanDatePicker>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { DatePicker as VanDatePicker, Field as VanField, Popup as VanPopup } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, nextTick, ref, watch } from 'vue';\nimport type { PickerOption } from '../picker/types';\nimport { useCommonSetup } from '../use';\nimport type { DatePickerSlots } from './types';\nimport { datePickerEmitsPrivate as emits, datePickerPropsPrivate as props } from './types';\n\n/**\n * @file 日期选择框\n */\nexport default defineComponent({\n name: 'HDatePicker',\n components: { VanDatePicker, VanField, VanPopup },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<DatePickerSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 展示在页面上的值 */\n const showText = ref('');\n /** 给日期组件的值 */\n const checkedArr = ref<string[]>([]);\n let tempValue: any;\n // 监听外部值的改变, 如果改变且与临时值不一致时\n // 则更新当前值, 并重置临时值\n watch(\n plain.checked,\n (val) => {\n if (val === tempValue) return tempValue = null;\n tempValue = null;\n checkedArr.value = val ? props.valueUnformat(val, props.separator) : [];\n showText.value = checkedArr.value.length ? props.format(checkedArr.value, props.separator) : '';\n },\n { immediate: true },\n );\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /**\n * 日期更改事件\n * @param {string} type 事件类型\n * @param {string} value 日期值\n */\n function dateEventHandle(type: string, value: PickerOption) {\n if (props.valueTrigger === type || props.datePickerProps?.showToolbar === false) {\n checkedArr.value = value.selectedValues;\n plain.change(props.valueFormat(value.selectedValues, props.separator));\n showText.value = props.format(value.selectedValues, props.separator);\n tempValue = plain.checked.value;\n nextTick(() => tempValue = null);\n }\n switch (type) {\n case 'confirm':\n case 'cancel':\n {\n popupInfo.value.close();\n break;\n }\n default: break;\n }\n }\n\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n showText,\n checkedArr,\n clickHandle,\n changeHandle: dateEventHandle.bind(null, 'change'),\n confirmHandle: dateEventHandle.bind(null, 'confirm'),\n cancelHandle: dateEventHandle.bind(null, 'cancel'),\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport type { DatePicker as VanDatePicker, Popup as VanPopup, TimePicker as VanTimePicker } from 'vant';\nimport { Field as VanField, PickerGroup as VanPickerGroup } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentEmit, ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { PickerOption } from '../picker/types';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function dateTimePickerGroupPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** VanPickerGroup 组件的属性 */\n pickerGroupProps: { type: Object as PropType<Partial<ComponentProps<typeof VanPickerGroup>>> },\n /** VanPickerGroup 组件的事件 - 兼容 vue2 版本 */\n pickerGroupOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanPickerGroup.emits>>>>>, default: () => ({}) },\n /** VanPickerGroup 组件的插槽 */\n pickerGroupSlots: { type: Object as PropType<{\n // /** 默认渲染的内容 */\n // default: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义整个顶部栏的内容 */\n toolbar?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义标题内容 */\n title?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义确认按钮内容 */\n confirm?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义取消按钮内容 */\n cancel?: ComponentType<CommonSlotsProps<any, any>>;\n }> },\n /** 是否展示右侧箭头并开启点击反馈 - Field 字段, 调整默认值 */\n isLink: { type: Boolean, default: true },\n /** 点击事件, 当传递了此事件时, 会忽略内部打开弹窗操作 */\n onRowClick: { type: Function as PropType<(option: { open: () => void; close: () => void }, ev: MouseEvent) => void> },\n /** 对值进行格式化 - 显示在页面上的值 */\n format: { type: Function as PropType<(option: any) => any>, default: valueFormatDefault },\n /** 对值进行格式化 - 提交值 */\n valueFormat: { type: Function as PropType<(option: PickerOption | any) => any>, default: valueFormatDefault },\n /** 取消值的格式化 - 给 VanPickerGroup 的值 */\n valueUnformat: { type: Function as PropType<(option: any) => string[]>, default: valueUnformatDefault },\n /** 值触发方式 @default confirm */\n valueTrigger: { type: String as PropType<'change' | 'confirm' | 'cancel'>, default: 'confirm' },\n /** VanDatePicker 组件的属性 */\n datePickerProps: { type: Object as PropType<Partial<ComponentProps<typeof VanDatePicker>>> },\n /** VanDatePicker 组件的事件 - 兼容 vue2 版本 */\n datePickerOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanDatePicker.emits>>>>>, default: () => ({}) },\n /** VanDatePicker 组件的插槽 */\n datePickerSlots: { type: Object as PropType<{\n /** 自定义选项内容 */\n option?: ComponentType<{ option: PickerOption; index: number } & CommonSlotsProps<any, any>>;\n /** 自定义选项上方内容 */\n columnsTop?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义选项下方内容 */\n columnsBottom?: ComponentType<CommonSlotsProps<any, any>>;\n }> },\n /** VanTimePicker 组件的属性 */\n timePickerProps: { type: Object as PropType<Partial<ComponentProps<typeof VanTimePicker>>> },\n /** VanTimePicker 组件的事件 - 兼容 vue2 版本 */\n timePickerOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanTimePicker.emits>>>>>, default: () => ({}) },\n /** VanTimePicker 组件的插槽 */\n timePickerSlots: { type: Object as PropType<{\n /** 自定义选项内容 */\n option?: ComponentType<{ option: PickerOption; index: number } & CommonSlotsProps<any, any>>;\n /** 自定义选项上方内容 */\n columnsTop?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义选项下方内容 */\n columnsBottom?: ComponentType<CommonSlotsProps<any, any>>;\n }> },\n /** 弹窗组件的属性 */\n popupProps: { type: Object as PropType<Partial<ComponentExposed<typeof VanPopup>>> },\n /** 弹窗组件的事件 - 兼容 vue2 版本 */\n popupOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanPopup.emits>>>>>, default: () => ({}) },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const dateTimePickerGroupPropsPrivate = dateTimePickerGroupPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const dateTimePickerGroupProps = {\n ...VanField.props as unknown as {},\n ...dateTimePickerGroupPropsPrivate,\n};\nexport type DateTimePickerGroupProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof dateTimePickerGroupPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function dateTimePickerGroupEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const dateTimePickerGroupEmitsPrivate = dateTimePickerGroupEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const dateTimePickerGroupEmits = {\n ...VanField.emits,\n ...dateTimePickerGroupEmitsPrivate,\n};\n\nexport type DateTimePickerGroupEmits<T> = ReturnType<typeof dateTimePickerGroupEmitsGeneric<T>>;\n\nexport interface DateTimePickerGroupSlots extends CommonSlots<any> {\n}\n\n/** 默认的合并函数 */\nfunction valueFormatDefault(option: any[]) {\n const result: string[] = [];\n option[0] && result.push(option[0].join('-'));\n option[1] && result.push(option[1].join(':'));\n return result.join(' ');\n}\n/** 默认的取消格式化函数 */\nfunction valueUnformatDefault(o: string) {\n if (!o) return [];\n const [date, time] = o.split(' ');\n return [date?.split('-'), time?.split(':')].filter(Boolean);\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :is-link=\"isLink\"\n :model-value=\"showText\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanPickerGroup\n v-bind=\"pickerGroupProps\" v-on=\"pickerGroupOn\"\n @confirm=\"pickerGroupHandle('confirm', $event)\" @cancel=\"pickerGroupHandle('cancel', $event)\"\n >\n <VanDatePicker\n ref=\"datePickerRef\"\n :model-value=\"checkedArr[0]\"\n v-bind=\"datePickerProps\" v-on=\"datePickerOn\"\n @change=\"changeHandle($event, 0)\"\n >\n <template v-for=\"(item, slotName) of datePickerSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanDatePicker>\n <VanTimePicker\n ref=\"timePickerRef\"\n :model-value=\"checkedArr[1]\"\n v-bind=\"timePickerProps\" v-on=\"timePickerOn\"\n @change=\"changeHandle($event, 1)\"\n >\n <template v-for=\"(item, slotName) of timePickerSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanTimePicker>\n <template v-for=\"(item, slotName) of pickerGroupSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanPickerGroup>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, isArray, usePlain } from '@xiaohaih/json-form-core';\nimport type { DatePickerInstance, TimePickerInstance } from 'vant';\nimport { DatePicker as VanDatePicker, Field as VanField, PickerGroup as VanPickerGroup, Popup as VanPopup, TimePicker as VanTimePicker } from 'vant';\nimport type { SlotsType, VNode } from 'vue';\nimport { computed, defineComponent, Fragment, markRaw, nextTick, ref, watch } from 'vue';\nimport type { PickerOption } from '../picker/types';\nimport { useCommonSetup } from '../use';\nimport type { DateTimePickerGroupSlots } from './types';\nimport { dateTimePickerGroupEmitsPrivate as emits, dateTimePickerGroupPropsPrivate as props } from './types';\n\n/**\n * @file 日期时间组件\n */\nexport default defineComponent({\n name: 'HDateTimePickerGroup',\n components: { VanPickerGroup, VanField, VanPopup, VanDatePicker, VanTimePicker },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<DateTimePickerGroupSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 展示在页面上的值 */\n const showText = ref('');\n /** 给日期组件的值 */\n const checkedArr = ref<any[]>([]);\n const datePickerRef = ref<DatePickerInstance>();\n const timePickerRef = ref<TimePickerInstance>();\n let tempValue: any;\n // 监听外部值的改变, 如果改变且与临时值不一致时\n // 则更新当前值, 并重置临时值\n watch(\n plain.checked,\n (val) => {\n if (val === tempValue) return tempValue = null;\n tempValue = null;\n checkedArr.value = val ? props.valueUnformat(val) : [];\n showText.value = checkedArr.value.length ? props.format(checkedArr.value) : '';\n },\n { immediate: true },\n );\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /** 值更改事件 */\n function changeHandle(value: PickerOption, idx: number) {\n checkedArr.value[idx] = value.selectedValues;\n pickerGroupHandle('change');\n }\n /**\n * 日期更改事件\n * @param {string} type 事件类型\n * @param {PickerOption[]} [options] 确认事件会传递该选项\n */\n function pickerGroupHandle(type: string, options?: PickerOption[]) {\n if (type !== 'change' && options) checkedArr.value = options.map((o) => o.selectedValues);\n if ((props.valueTrigger === type || props.pickerGroupProps?.showToolbar === false) && checkedArr.value.length >= 2) {\n plain.change(props.valueFormat(checkedArr.value));\n showText.value = props.format(checkedArr.value);\n tempValue = plain.checked.value;\n nextTick(() => tempValue = null);\n }\n switch (type) {\n case 'confirm':\n case 'cancel':\n {\n popupInfo.value.close();\n break;\n }\n default: break;\n }\n }\n\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n showText,\n checkedArr,\n datePickerRef,\n timePickerRef,\n clickHandle,\n changeHandle,\n pickerGroupHandle,\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :is-link=\"isLink\"\n :model-value=\"showText\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanPickerGroup\n v-bind=\"pickerGroupProps\" v-on=\"pickerGroupOn\"\n @confirm=\"pickerGroupHandle('confirm', $event)\" @cancel=\"pickerGroupHandle('cancel', $event)\"\n >\n <VanDatePicker\n ref=\"datePickerRef\"\n :model-value=\"checkedArr[0]\"\n v-bind=\"datePickerProps\" v-on=\"datePickerOn\"\n @change=\"changeHandle($event, 0)\"\n >\n <template v-for=\"(item, slotName) of datePickerSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanDatePicker>\n <VanTimePicker\n ref=\"timePickerRef\"\n :model-value=\"checkedArr[1]\"\n v-bind=\"timePickerProps\" v-on=\"timePickerOn\"\n @change=\"changeHandle($event, 1)\"\n >\n <template v-for=\"(item, slotName) of timePickerSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanTimePicker>\n <template v-for=\"(item, slotName) of pickerGroupSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanPickerGroup>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, isArray, usePlain } from '@xiaohaih/json-form-core';\nimport type { DatePickerInstance, TimePickerInstance } from 'vant';\nimport { DatePicker as VanDatePicker, Field as VanField, PickerGroup as VanPickerGroup, Popup as VanPopup, TimePicker as VanTimePicker } from 'vant';\nimport type { SlotsType, VNode } from 'vue';\nimport { computed, defineComponent, Fragment, markRaw, nextTick, ref, watch } from 'vue';\nimport type { PickerOption } from '../picker/types';\nimport { useCommonSetup } from '../use';\nimport type { DateTimePickerGroupSlots } from './types';\nimport { dateTimePickerGroupEmitsPrivate as emits, dateTimePickerGroupPropsPrivate as props } from './types';\n\n/**\n * @file 日期时间组件\n */\nexport default defineComponent({\n name: 'HDateTimePickerGroup',\n components: { VanPickerGroup, VanField, VanPopup, VanDatePicker, VanTimePicker },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<DateTimePickerGroupSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 展示在页面上的值 */\n const showText = ref('');\n /** 给日期组件的值 */\n const checkedArr = ref<any[]>([]);\n const datePickerRef = ref<DatePickerInstance>();\n const timePickerRef = ref<TimePickerInstance>();\n let tempValue: any;\n // 监听外部值的改变, 如果改变且与临时值不一致时\n // 则更新当前值, 并重置临时值\n watch(\n plain.checked,\n (val) => {\n if (val === tempValue) return tempValue = null;\n tempValue = null;\n checkedArr.value = val ? props.valueUnformat(val) : [];\n showText.value = checkedArr.value.length ? props.format(checkedArr.value) : '';\n },\n { immediate: true },\n );\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /** 值更改事件 */\n function changeHandle(value: PickerOption, idx: number) {\n checkedArr.value[idx] = value.selectedValues;\n pickerGroupHandle('change');\n }\n /**\n * 日期更改事件\n * @param {string} type 事件类型\n * @param {PickerOption[]} [options] 确认事件会传递该选项\n */\n function pickerGroupHandle(type: string, options?: PickerOption[]) {\n if (type !== 'change' && options) checkedArr.value = options.map((o) => o.selectedValues);\n if ((props.valueTrigger === type || props.pickerGroupProps?.showToolbar === false) && checkedArr.value.length >= 2) {\n plain.change(props.valueFormat(checkedArr.value));\n showText.value = props.format(checkedArr.value);\n tempValue = plain.checked.value;\n nextTick(() => tempValue = null);\n }\n switch (type) {\n case 'confirm':\n case 'cancel':\n {\n popupInfo.value.close();\n break;\n }\n default: break;\n }\n }\n\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n showText,\n checkedArr,\n datePickerRef,\n timePickerRef,\n clickHandle,\n changeHandle,\n pickerGroupHandle,\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport { Field as VanField } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { CommonProps, CommonSlots, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function inputPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** 是否显示清除按钮 @default true */\n clearable: { type: Boolean as PropType<boolean>, default: true },\n /** 实时触发时防抖动的时间 */\n debounceTime: { type: Number as PropType<number>, default: 300 },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const inputPropsPrivate = inputPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const inputProps = {\n ...VanField.props as unknown as {},\n ...inputPropsPrivate,\n};\nexport type InputProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof inputPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function inputEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const inputEmitsPrivate = inputEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const inputEmits = {\n ...VanField.emits,\n ...inputEmitsPrivate,\n};\n\nexport type InputEmits<T> = ReturnType<typeof inputEmitsGeneric<T>>;\n\nexport interface InputSlots extends CommonSlots<any> {\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n v-bind=\"$attrs\"\n ref=\"fieldRef\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalDisabled || readonly\"\n :clearable=\"clearable\"\n :model-value=\"(tempChecked as string)\"\n @update:model-value=\"change\"\n @keydown.enter=\"enterHandle\"\n >\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, ref } from 'vue';\nimport type { ComponentExposed } from 'vue-component-type-helpers';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport type { InputSlots } from './types';\nimport { inputEmitsPrivate as emits, inputPropsPrivate as props } from './types';\n\n/**\n * @file 输入框\n */\nexport default defineComponent({\n name: 'HInput',\n components: { VanField },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<InputSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n const { tempChecked, changeSync } = useTempChecked(plain.checked);\n const fieldRef = ref<ComponentExposed<typeof VanField>>();\n\n /**\n * 节流\n * @param {string} value: 输入值\n */\n let timer = 0;\n function change(value: string) {\n if (value === tempChecked.value) return;\n const { debounceTime } = props;\n timer && clearTimeout(timer);\n tempChecked.value = value;\n\n debounceTime\n ? timer = setTimeout(() => changeSync(tempChecked.value), debounceTime) as unknown as number\n : changeSync(value);\n }\n /** 回车事件 */\n function enterHandle(ev: Event | KeyboardEvent) {\n timer && clearTimeout(timer);\n plain.checked.value !== tempChecked.value && (plain.checked.value = tempChecked.value);\n plain.wrapper?.search();\n }\n\n return {\n hyphenate,\n getNode,\n fieldRef,\n ...plain,\n slotProps,\n tempChecked,\n change,\n enterHandle,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n v-bind=\"$attrs\"\n ref=\"fieldRef\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalDisabled || readonly\"\n :clearable=\"clearable\"\n :model-value=\"(tempChecked as string)\"\n @update:model-value=\"change\"\n @keydown.enter=\"enterHandle\"\n >\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, ref } from 'vue';\nimport type { ComponentExposed } from 'vue-component-type-helpers';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport type { InputSlots } from './types';\nimport { inputEmitsPrivate as emits, inputPropsPrivate as props } from './types';\n\n/**\n * @file 输入框\n */\nexport default defineComponent({\n name: 'HInput',\n components: { VanField },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<InputSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n const { tempChecked, changeSync } = useTempChecked(plain.checked);\n const fieldRef = ref<ComponentExposed<typeof VanField>>();\n\n /**\n * 节流\n * @param {string} value: 输入值\n */\n let timer = 0;\n function change(value: string) {\n if (value === tempChecked.value) return;\n const { debounceTime } = props;\n timer && clearTimeout(timer);\n tempChecked.value = value;\n\n debounceTime\n ? timer = setTimeout(() => changeSync(tempChecked.value), debounceTime) as unknown as number\n : changeSync(value);\n }\n /** 回车事件 */\n function enterHandle(ev: Event | KeyboardEvent) {\n timer && clearTimeout(timer);\n plain.checked.value !== tempChecked.value && (plain.checked.value = tempChecked.value);\n plain.wrapper?.search();\n }\n\n return {\n hyphenate,\n getNode,\n fieldRef,\n ...plain,\n slotProps,\n tempChecked,\n change,\n enterHandle,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport { Field as VanField, NumberKeyboard as VanNumberKeyboard } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function numberKeyboardPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** VanNumberKeyboard 组件的属性 */\n numberKeyboardProps: { type: Object as PropType<Partial<ComponentProps<typeof VanNumberKeyboard>>> },\n /** VanNumberKeyboard 组件的事件 - 兼容 vue2 版本 */\n numberKeyboardOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanNumberKeyboard.emits>>>>>, default: () => ({}) },\n /** VanNumberKeyboard 组件的插槽 */\n numberKeyboardSlots: { type: Object as PropType<{\n /** 自定义删除按键内容 */\n delete: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义左下角按键内容 */\n extraKey: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义标题栏左侧内容 */\n titleLeft: ComponentType<CommonSlotsProps<any, any>>;\n }> },\n /** 是否展示右侧箭头并开启点击反馈 - Field 字段, 调整默认值 */\n isLink: { type: Boolean, default: true },\n /** 点击事件, 当传递了此事件时, 会忽略内部打开弹窗操作 */\n onRowClick: { type: Function as PropType<(option: { open: () => void; close: () => void }, ev: MouseEvent) => void> },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const numberKeyboardPropsPrivate = numberKeyboardPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const numberKeyboardProps = {\n ...VanField.props as unknown as {},\n ...numberKeyboardPropsPrivate,\n};\nexport type NumberKeyboardProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof numberKeyboardPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function numberKeyboardEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const numberKeyboardEmitsPrivate = numberKeyboardEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const numberKeyboardEmits = {\n ...VanField.emits,\n ...numberKeyboardEmitsPrivate,\n};\n\nexport type NumberKeyboardEmits<T> = ReturnType<typeof numberKeyboardEmitsGeneric<T>>;\n\nexport interface NumberKeyboardSlots extends CommonSlots<any> {\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :model-value=\"(checked as string)\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\" :is-link=\"isLink\"\n v-bind=\"$attrs\"\n @click.stop=\"clickHandle\"\n >\n <template #extra>\n <VanNumberKeyboard\n :model-value=\"(checked as string)\"\n :show=\"popupInfo.visible\"\n v-bind=\"numberKeyboardProps\" v-on=\"numberKeyboardOn\"\n @update:model-value=\"change\" @blur=\"popupInfo.close\"\n >\n <template v-for=\"(item, slotName) of numberKeyboardSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanNumberKeyboard>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, NumberKeyboard as VanNumberKeyboard } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { defineComponent, ref } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { NumberKeyboardSlots } from './types';\nimport { numberKeyboardEmitsPrivate as emits, numberKeyboardPropsPrivate as props } from './types';\n\n/**\n * @file 数字键盘\n */\nexport default defineComponent({\n name: 'HNumberKeyboard',\n components: { VanField, VanNumberKeyboard },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<NumberKeyboardSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n clickHandle,\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :model-value=\"(checked as string)\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\" :is-link=\"isLink\"\n v-bind=\"$attrs\"\n @click.stop=\"clickHandle\"\n >\n <template #extra>\n <VanNumberKeyboard\n :model-value=\"(checked as string)\"\n :show=\"popupInfo.visible\"\n v-bind=\"numberKeyboardProps\" v-on=\"numberKeyboardOn\"\n @update:model-value=\"change\" @blur=\"popupInfo.close\"\n >\n <template v-for=\"(item, slotName) of numberKeyboardSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanNumberKeyboard>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, NumberKeyboard as VanNumberKeyboard } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { defineComponent, ref } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { NumberKeyboardSlots } from './types';\nimport { numberKeyboardEmitsPrivate as emits, numberKeyboardPropsPrivate as props } from './types';\n\n/**\n * @file 数字键盘\n */\nexport default defineComponent({\n name: 'HNumberKeyboard',\n components: { VanField, VanNumberKeyboard },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<NumberKeyboardSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n clickHandle,\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport { Field as VanField, NumberKeyboard as VanNumberKeyboard, PasswordInput as VanPasswordInput } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function passwordInputPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** 输入框左侧文本 */\n label: { type: String },\n /** VanPasswordInput 组件的属性 */\n passwordInputProps: { type: Object as PropType<Partial<ComponentProps<typeof VanPasswordInput>>> },\n /** VanPasswordInput 组件的事件 - 兼容 vue2 版本 */\n passwordInputOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanPasswordInput.emits>>>>>, default: () => ({}) },\n /** VanPasswordInput 组件的插槽 */\n passwordInputSlots: { type: Object as PropType<{\n }> },\n /** 点击事件, 当传递了此事件时, 会忽略内部打开弹窗操作 */\n onRowClick: { type: Function as PropType<(option: { open: () => void; close: () => void }, ev: MouseEvent) => void> },\n /** VanNumberKeyboard 组件的属性 */\n numberKeyboardProps: { type: Object as PropType<Partial<ComponentProps<typeof VanNumberKeyboard>>> },\n /** VanNumberKeyboard 组件的事件 - 兼容 vue2 版本 */\n numberKeyboardOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanNumberKeyboard.emits>>>>>, default: () => ({}) },\n /** VanNumberKeyboard 组件的插槽 */\n numberKeyboardSlots: { type: Object as PropType<{\n /** 自定义删除按键内容 */\n delete: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义左下角按键内容 */\n extraKey: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义标题栏左侧内容 */\n titleLeft: ComponentType<CommonSlotsProps<any, any>>;\n }> },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const passwordInputPropsPrivate = passwordInputPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const passwordInputProps = {\n ...VanField.props as unknown as {},\n ...passwordInputPropsPrivate,\n};\nexport type PasswordInputProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof passwordInputPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function passwordInputEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const passwordInputEmitsPrivate = passwordInputEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const passwordInputEmits = {\n ...VanField.emits,\n ...passwordInputEmitsPrivate,\n};\n\nexport type PasswordInputEmits<T> = ReturnType<typeof passwordInputEmitsGeneric<T>>;\n\nexport interface PasswordInputSlots extends CommonSlots<any> {\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\" :label=\"label\"\n :model-value=\"(checked as string)\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n @click.stop=\"clickHandle\"\n >\n <template #input>\n <VanPasswordInput\n style=\"width: 100%\"\n :value=\"(checked as string)\"\n :focused=\"popupInfo.visible\"\n v-bind=\"passwordInputProps\" v-on=\"passwordInputOn\"\n @focus=\"clickHandle\"\n >\n <template v-for=\"(item, slotName) of passwordInputSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanPasswordInput>\n </template>\n <template #extra>\n <VanNumberKeyboard\n :model-value=\"(checked as string)\"\n :show=\"popupInfo.visible\"\n v-bind=\"numberKeyboardProps\"\n v-on=\"numberKeyboardOn\"\n @update:model-value=\"customChange\"\n @blur=\"popupInfo.close\"\n >\n <template v-for=\"(item, slotName) of numberKeyboardSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanNumberKeyboard>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, NumberKeyboard as VanNumberKeyboard, PasswordInput as VanPasswordInput } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, ref } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { PasswordInputSlots } from './types';\nimport { passwordInputEmitsPrivate as emits, passwordInputPropsPrivate as props } from './types';\n\n/**\n * @file 密码输入框\n */\nexport default defineComponent({\n name: 'HPasswordInput',\n components: { VanField, VanNumberKeyboard, VanPasswordInput },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<PasswordInputSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /** 重写 change 事件 */\n function customChange(value: string) {\n const len = Number(props.passwordInputProps?.length) || 6;\n if (value.length === len) popupInfo.value.close();\n plain.change(value);\n }\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n clickHandle,\n customChange,\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\" :label=\"label\"\n :model-value=\"(checked as string)\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n @click.stop=\"clickHandle\"\n >\n <template #input>\n <VanPasswordInput\n style=\"width: 100%\"\n :value=\"(checked as string)\"\n :focused=\"popupInfo.visible\"\n v-bind=\"passwordInputProps\" v-on=\"passwordInputOn\"\n @focus=\"clickHandle\"\n >\n <template v-for=\"(item, slotName) of passwordInputSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanPasswordInput>\n </template>\n <template #extra>\n <VanNumberKeyboard\n :model-value=\"(checked as string)\"\n :show=\"popupInfo.visible\"\n v-bind=\"numberKeyboardProps\"\n v-on=\"numberKeyboardOn\"\n @update:model-value=\"customChange\"\n @blur=\"popupInfo.close\"\n >\n <template v-for=\"(item, slotName) of numberKeyboardSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanNumberKeyboard>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, NumberKeyboard as VanNumberKeyboard, PasswordInput as VanPasswordInput } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, ref } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { PasswordInputSlots } from './types';\nimport { passwordInputEmitsPrivate as emits, passwordInputPropsPrivate as props } from './types';\n\n/**\n * @file 密码输入框\n */\nexport default defineComponent({\n name: 'HPasswordInput',\n components: { VanField, VanNumberKeyboard, VanPasswordInput },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<PasswordInputSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /** 重写 change 事件 */\n function customChange(value: string) {\n const len = Number(props.passwordInputProps?.length) || 6;\n if (value.length === len) popupInfo.value.close();\n plain.change(value);\n }\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n clickHandle,\n customChange,\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport type { Picker as VanPicker, Popup as VanPopup } from 'vant';\nimport { Field as VanField } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentEmit, ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function pickerPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** VanPicker 组件的属性 */\n pickerProps: { type: Object as PropType<Partial<ComponentProps<typeof VanPicker>>> },\n /** VanPicker 组件的事件 - 兼容 vue2 版本 */\n pickerOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanPicker.emits>>>>>, default: () => ({}) },\n /** VanPicker 组件的插槽 */\n pickerSlots: { type: Object as PropType<{\n /** 自定义整个顶部栏的内容 */\n toolbar?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义标题内容 */\n title?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义确认按钮内容 */\n confirm?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义取消按钮内容 */\n cancel?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义选项内容 */\n option?: ComponentType<{ option: PickerOption; index: number } & CommonSlotsProps<any, any>>;\n /** 自定义选项上方内容 */\n columnsTop?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义选项下方内容 */\n columnsBottom?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义空状态内容 */\n empty?: ComponentType<CommonSlotsProps<any, any>>;\n }> },\n /** 是否展示右侧箭头并开启点击反馈 - Field 字段, 调整默认值 */\n isLink: { type: Boolean, default: true },\n /** 点击事件, 当传递了此事件时, 会忽略内部打开弹窗操作 */\n onRowClick: { type: Function as PropType<(option: { open: () => void; close: () => void }, ev: MouseEvent) => void> },\n /** 页面显示时多个值之间的分隔符 @default - */\n separator: { type: String, default: '/' },\n /** 是否显示全路径, 多列不生效 */\n showAllLevels: { type: Boolean, default: true },\n /** 对值进行格式化 - 显示在页面上的值 */\n format: { type: Function as PropType<(option: {\n source: any[];\n value: any[];\n columnsFieldNames: Record<'text' | 'value' | 'children', string>;\n showAllLevels: boolean;\n separator: string;\n }) => any> },\n /** 值触发方式 @default confirm */\n valueTrigger: { type: String as PropType<'change' | 'confirm' | 'cancel'>, default: 'confirm' },\n /** 弹窗组件的属性 */\n popupProps: { type: Object as PropType<Partial<ComponentExposed<typeof VanPopup>>> },\n /** 弹窗组件的事件 - 兼容 vue2 版本 */\n popupOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanPopup.emits>>>>>, default: () => ({}) },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const pickerPropsPrivate = pickerPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const pickerProps = {\n ...VanField.props as unknown as {},\n ...pickerPropsPrivate,\n};\nexport type PickerProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof pickerPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function pickerEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const pickerEmitsPrivate = pickerEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const pickerEmits = {\n ...VanField.emits,\n ...pickerEmitsPrivate,\n};\n\nexport type PickerEmits<T> = ReturnType<typeof pickerEmitsGeneric<T>>;\n\nexport interface PickerSlots extends CommonSlots<any> {\n}\n\n/** 选中时的参数 */\nexport interface PickerOption {\n columnIndex: number;\n selectedIndexes: number;\n selectedOptions: Record<'text' | 'value', string>;\n selectedValues: string[];\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :is-link=\"isLink\"\n :model-value=\"showText\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanPicker\n :model-value=\"checked\"\n :columns=\"finalOption\"\n v-bind=\"pickerProps\" v-on=\"pickerOn\"\n @change=\"pickerHandle('change', $event)\" @confirm=\"pickerHandle('confirm', $event)\" @cancel=\"pickerHandle('cancel', $event)\"\n >\n <template v-for=\"(item, slotName) of pickerSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanPicker>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Picker as VanPicker, Popup as VanPopup } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, ref, watch } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { PickerOption, PickerSlots } from './types';\nimport { pickerEmitsPrivate as emits, pickerPropsPrivate as props } from './types';\n\n/**\n * @file 选择框\n */\nexport default defineComponent({\n name: 'HPicker',\n components: { VanPicker, VanField, VanPopup },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<PickerSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 展示在页面上的值 */\n const showText = computed(() => {\n const value = plain.checked.value as string[];\n if (!value || !value.length) return '';\n const { format, showAllLevels, separator } = props;\n const source = (props.pickerProps?.columns || plain.finalOption.value) as Record<string, any>[];\n const _columnsFieldNames = (props.pickerProps || {}).columnsFieldNames || {};\n const columnsFieldNames = { text: _columnsFieldNames.text || 'text', value: _columnsFieldNames.value || 'value', children: _columnsFieldNames.children || 'children' };\n if (format) return format({ source, value, columnsFieldNames, showAllLevels, separator });\n\n // 判断是否为扁平多列结构(source 中的元素是数组)\n const isMultiColumnFlat = source.length > 0 && Array.isArray(source[0]);\n\n if (isMultiColumnFlat) {\n // 1. 扁平的多列:每列独立查找\n return value.map((val, i) => {\n const column = source[i] || [];\n const item = column.find((opt: Record<string, any>) => opt[columnsFieldNames.value] === val);\n return item ? item[columnsFieldNames.text] : '';\n }).filter(Boolean).join(separator);\n }\n // 2. 树形级联或单列:逐级查找\n const texts: string[] = [];\n let currentOptions = source;\n for (const val of value) {\n const item = currentOptions.find((opt: Record<string, any>) => opt[columnsFieldNames.value] === val);\n if (!item) break;\n texts.push(item[columnsFieldNames.text]);\n currentOptions = item[columnsFieldNames.children] || [];\n }\n return showAllLevels ? texts.join(separator) : texts[texts.length - 1];\n });\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /**\n * 日期更改事件\n * @param {string} type 事件类型\n * @param {string} value 日期值\n */\n function pickerHandle(type: string, value: PickerOption) {\n (props.valueTrigger === type || props.pickerProps?.showToolbar === false) && plain.change(value.selectedValues);\n switch (type) {\n case 'confirm':\n case 'cancel':\n {\n popupInfo.value.close();\n break;\n }\n default: break;\n }\n }\n\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n showText,\n clickHandle,\n pickerHandle,\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :is-link=\"isLink\"\n :model-value=\"showText\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanPicker\n :model-value=\"checked\"\n :columns=\"finalOption\"\n v-bind=\"pickerProps\" v-on=\"pickerOn\"\n @change=\"pickerHandle('change', $event)\" @confirm=\"pickerHandle('confirm', $event)\" @cancel=\"pickerHandle('cancel', $event)\"\n >\n <template v-for=\"(item, slotName) of pickerSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanPicker>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Picker as VanPicker, Popup as VanPopup } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, ref, watch } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { PickerOption, PickerSlots } from './types';\nimport { pickerEmitsPrivate as emits, pickerPropsPrivate as props } from './types';\n\n/**\n * @file 选择框\n */\nexport default defineComponent({\n name: 'HPicker',\n components: { VanPicker, VanField, VanPopup },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<PickerSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 展示在页面上的值 */\n const showText = computed(() => {\n const value = plain.checked.value as string[];\n if (!value || !value.length) return '';\n const { format, showAllLevels, separator } = props;\n const source = (props.pickerProps?.columns || plain.finalOption.value) as Record<string, any>[];\n const _columnsFieldNames = (props.pickerProps || {}).columnsFieldNames || {};\n const columnsFieldNames = { text: _columnsFieldNames.text || 'text', value: _columnsFieldNames.value || 'value', children: _columnsFieldNames.children || 'children' };\n if (format) return format({ source, value, columnsFieldNames, showAllLevels, separator });\n\n // 判断是否为扁平多列结构(source 中的元素是数组)\n const isMultiColumnFlat = source.length > 0 && Array.isArray(source[0]);\n\n if (isMultiColumnFlat) {\n // 1. 扁平的多列:每列独立查找\n return value.map((val, i) => {\n const column = source[i] || [];\n const item = column.find((opt: Record<string, any>) => opt[columnsFieldNames.value] === val);\n return item ? item[columnsFieldNames.text] : '';\n }).filter(Boolean).join(separator);\n }\n // 2. 树形级联或单列:逐级查找\n const texts: string[] = [];\n let currentOptions = source;\n for (const val of value) {\n const item = currentOptions.find((opt: Record<string, any>) => opt[columnsFieldNames.value] === val);\n if (!item) break;\n texts.push(item[columnsFieldNames.text]);\n currentOptions = item[columnsFieldNames.children] || [];\n }\n return showAllLevels ? texts.join(separator) : texts[texts.length - 1];\n });\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /**\n * 日期更改事件\n * @param {string} type 事件类型\n * @param {string} value 日期值\n */\n function pickerHandle(type: string, value: PickerOption) {\n (props.valueTrigger === type || props.pickerProps?.showToolbar === false) && plain.change(value.selectedValues);\n switch (type) {\n case 'confirm':\n case 'cancel':\n {\n popupInfo.value.close();\n break;\n }\n default: break;\n }\n }\n\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n showText,\n clickHandle,\n pickerHandle,\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport type { Radio as VanRadio } from 'vant';\nimport { Field as VanField, RadioGroup as VanRadioGroup } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { camelize } from 'vue';\nimport type { ComponentEmit, ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function radioGroupPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** 输入框左侧文本 */\n label: { type: String },\n /** VanRadioGroup 组件的属性 */\n radioGroupProps: { type: Object as PropType<Partial<ComponentProps<typeof VanRadioGroup>>> },\n /** VanRadioGroup 组件的事件 - 兼容 vue2 版本 */\n radioGroupOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanRadioGroup.emits>>>>>, default: () => ({}) },\n /** 显示的标签 */\n labelKey: { type: String, default: 'label' },\n /** 提交的值 */\n valueKey: { type: String, default: 'value' },\n /** 是否可取消选中 */\n cancelable: { type: Boolean },\n /** VanRadio 组件的属性 */\n radioProps: { type: Object as PropType<Partial<ComponentProps<typeof VanRadio>>> },\n /** VanRadio 组件的事件 - 兼容 vue2 版本 */\n radioOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanRadio.emits>>>>>, default: () => ({}) },\n /** VanRadio 组件的插槽 */\n radioSlots: { type: Object as PropType<{\n /** 自定义文本 */\n default?: ComponentType<{ checked: boolean; disabled: boolean; item: any } & CommonSlotsProps<any, any>>;\n /** 自定义图标 */\n icon?: ComponentType<{ checked: boolean; disabled: boolean; item: any } & CommonSlotsProps<any, any>>;\n }> },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const radioGroupPropsPrivate = radioGroupPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const radioGroupProps = {\n ...VanField.props as unknown as {},\n ...radioGroupPropsPrivate,\n};\nexport type RadioGroupProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof radioGroupPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function radioGroupEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const radioGroupEmitsPrivate = radioGroupEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const radioGroupEmits = {\n ...VanField.emits,\n ...radioGroupEmitsPrivate,\n};\n\nexport type RadioGroupEmits<T> = ReturnType<typeof radioGroupEmitsGeneric<T>>;\n\nexport interface RadioGroupSlots extends CommonSlots<any> {\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\" :label=\"label\"\n :model-value=\"(checked as string)\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanRadioGroup\n :name=\"field\" :model-value=\"checked\"\n :disabled=\"globalDisabled || disabled || globalReadonly || readonly\"\n v-bind=\"radioGroupProps\" v-on=\"radioGroupOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"item of finalOption\" :key=\"item[valueKey]\">\n <VanRadio :name=\"item[valueKey]\" v-bind=\"radioProps\" v-on=\"radioOn\">\n {{ item[labelKey] }}\n <template v-for=\"(radioItem, slotName) of radioSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(radioItem)\" v-bind=\"slotProps\" :item=\"item\" v-bind.prop=\"row\" />\n </template>\n </VanRadio>\n </template>\n </VanRadioGroup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Radio as VanRadio, RadioGroup as VanRadioGroup } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent } from 'vue';\nimport { pick } from '../../src/utils';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport type { RadioGroupSlots } from './types';\nimport { radioGroupEmitsPrivate as emits, radioGroupPropsPrivate as props } from './types';\n\n/**\n * @file 单选框组\n */\nexport default defineComponent({\n name: 'HRadioGroup',\n components: { VanField, VanRadio, VanRadioGroup },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<RadioGroupSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n /** 重写 change 事件 */\n function change(value: string) {\n props.cancelable ? plain.change(plain.checked.value === value ? undefined : value) : plain.change(value);\n }\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n change,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\" :label=\"label\"\n :model-value=\"(checked as string)\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanRadioGroup\n :name=\"field\" :model-value=\"checked\"\n :disabled=\"globalDisabled || disabled || globalReadonly || readonly\"\n v-bind=\"radioGroupProps\" v-on=\"radioGroupOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"item of finalOption\" :key=\"item[valueKey]\">\n <VanRadio :name=\"item[valueKey]\" v-bind=\"radioProps\" v-on=\"radioOn\">\n {{ item[labelKey] }}\n <template v-for=\"(radioItem, slotName) of radioSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(radioItem)\" v-bind=\"slotProps\" :item=\"item\" v-bind.prop=\"row\" />\n </template>\n </VanRadio>\n </template>\n </VanRadioGroup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Radio as VanRadio, RadioGroup as VanRadioGroup } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent } from 'vue';\nimport { pick } from '../../src/utils';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport type { RadioGroupSlots } from './types';\nimport { radioGroupEmitsPrivate as emits, radioGroupPropsPrivate as props } from './types';\n\n/**\n * @file 单选框组\n */\nexport default defineComponent({\n name: 'HRadioGroup',\n components: { VanField, VanRadio, VanRadioGroup },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<RadioGroupSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n /** 重写 change 事件 */\n function change(value: string) {\n props.cancelable ? plain.change(plain.checked.value === value ? undefined : value) : plain.change(value);\n }\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n change,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport type { Radio, RadioProps as VantRadioProps } from 'vant';\nimport { Field as VanField, Radio as VanRadio } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport { camelize } from 'vue';\nimport type { ComponentEmit, ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n\n/** 组件传参 - 私有 */\nexport function radioPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** 输入框左侧文本 */\n label: { type: String },\n /** VanRadio 组件的属性 */\n radioProps: { type: Object as PropType<Partial<ComponentProps<typeof VanRadio>>> },\n /** VanRadio 组件的事件 - 兼容 vue2 版本 */\n radioOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanRadio.emits>>>>>, default: () => ({}) },\n /** VanRadio 组件的插槽 */\n radioSlots: { type: Object as PropType<{\n /** 自定义文本 */\n default?: ComponentType<{ checked: boolean; disabled: boolean } & CommonSlotsProps<any, any>>;\n /** 自定义图标 */\n icon?: ComponentType<{ checked: boolean; disabled: boolean } & CommonSlotsProps<any, any>>;\n }> },\n /** 是否可取消选中 */\n cancelable: { type: Boolean, default: true },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const radioPropsPrivate = radioPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const radioProps = {\n ...VanField.props as unknown as {},\n ...radioPropsPrivate,\n};\nexport type RadioProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof radioPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function radioEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const radioEmitsPrivate = radioEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const radioEmits = {\n ...VanField.emits,\n ...radioEmitsPrivate,\n};\n\nexport type RadioEmits<T> = ReturnType<typeof radioEmitsGeneric<T>>;\n\nexport interface RadioSlots extends CommonSlots<any> {\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\" :label=\"label\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanRadio\n :name=\"field\" :model-value=\"checked\"\n :disabled=\"globalDisabled || disabled || globalReadonly || readonly\"\n v-bind=\"radioProps\" v-on=\"radioOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of radioSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanRadio>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Radio as VanRadio, RadioGroup as VanRadioGroup } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent } from 'vue';\nimport { pick } from '../../src/utils';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport type { RadioSlots } from './types';\nimport { radioEmitsPrivate as emits, radioPropsPrivate as props } from './types';\n\n/**\n * @file 单选框\n */\nexport default defineComponent({\n name: 'HRadio',\n components: { VanField, VanRadio, VanRadioGroup },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<RadioSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n /** 重写 change 事件 */\n function change(value: string) {\n props.cancelable ? plain.change(plain.checked.value === value ? undefined : value) : plain.change(value);\n }\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n change,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\" :label=\"label\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanRadio\n :name=\"field\" :model-value=\"checked\"\n :disabled=\"globalDisabled || disabled || globalReadonly || readonly\"\n v-bind=\"radioProps\" v-on=\"radioOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of radioSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanRadio>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Radio as VanRadio, RadioGroup as VanRadioGroup } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent } from 'vue';\nimport { pick } from '../../src/utils';\nimport { useCommonSetup, useTempChecked } from '../use';\nimport type { RadioSlots } from './types';\nimport { radioEmitsPrivate as emits, radioPropsPrivate as props } from './types';\n\n/**\n * @file 单选框\n */\nexport default defineComponent({\n name: 'HRadio',\n components: { VanField, VanRadio, VanRadioGroup },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<RadioSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n /** 重写 change 事件 */\n function change(value: string) {\n props.cancelable ? plain.change(plain.checked.value === value ? undefined : value) : plain.change(value);\n }\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n change,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Rate as VanRate } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function ratePropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** VanRate 组件的属性 */\n rateProps: { type: Object as PropType<Partial<ComponentProps<typeof VanRate>>> },\n /** VanRate 组件的事件 - 兼容 vue2 版本 */\n rateOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanRate.emits>>>>>, default: () => ({}) },\n /** VanRate 组件的插槽 */\n rateSlots: { type: Object as PropType<{\n }> },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const ratePropsPrivate = ratePropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const rateProps = {\n ...VanField.props as unknown as {},\n ...ratePropsPrivate,\n};\nexport type RateProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof ratePropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function rateEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const rateEmitsPrivate = rateEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const rateEmits = {\n ...VanField.emits,\n ...rateEmitsPrivate,\n};\n\nexport type RateEmits<T> = ReturnType<typeof rateEmitsGeneric<T>>;\n\nexport interface RateSlots extends CommonSlots<any> {\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :model-value=\"checked\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanRate\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n :model-value=\"(checked as number)\"\n v-bind=\"rateProps\" v-on=\"rateOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of rateSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanRate>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Rate as VanRate } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { RateSlots } from './types';\nimport { rateEmitsPrivate as emits, ratePropsPrivate as props } from './types';\n\n/**\n * @file 评分\n */\nexport default defineComponent({\n name: 'HRate',\n components: { VanField, VanRate },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<RateSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :model-value=\"checked\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanRate\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n :model-value=\"(checked as number)\"\n v-bind=\"rateProps\" v-on=\"rateOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of rateSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanRate>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Rate as VanRate } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { RateSlots } from './types';\nimport { rateEmitsPrivate as emits, ratePropsPrivate as props } from './types';\n\n/**\n * @file 评分\n */\nexport default defineComponent({\n name: 'HRate',\n components: { VanField, VanRate },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<RateSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Signature as VanSignature } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function signaturePropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** 是否渲染 VanField 组件 */\n renderField: { type: Boolean as PropType<boolean>, default: true },\n /** VanSignature 组件的属性 */\n signatureProps: { type: Object as PropType<Partial<ComponentProps<typeof VanSignature>>> },\n /** VanSignature 组件的事件 - 兼容 vue2 版本 */\n signatureOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanSignature.emits>>>>>, default: () => ({}) },\n /** VanSignature 组件的插槽 */\n signatureSlots: { type: Object as PropType<{\n /** 自定义提示文案 */\n tips?: ComponentType<CommonSlotsProps<any, any>>;\n }> },\n /**\n * 是否在结束签名时触发一次提交事件\n * @tips 该属性需要 vant 版本大等于 4.8.6 才支持\n */\n submitAtEnd: { type: Boolean, default: true },\n /** 对提交的数据进行处理 - 与 format 配合使用 */\n valueFormat: { type: Function as PropType<(option: SubmitOption) => any | Promise<any>>, default: (v: SubmitOption) => v },\n /** 当需要作为图片回显时的处理函数 - 与 format 配合使用 */\n format: { type: Function as PropType<(option: unknown) => string>, default: signatureFormat },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const signaturePropsPrivate = signaturePropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const signatureProps = {\n ...VanField.props as unknown as {},\n ...signaturePropsPrivate,\n};\nexport type SignatureProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof signaturePropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function signatureEmitsGeneric<T>() {\n return {\n /** 组件加载后触发 - 供可选渲染 VanField 使用 */\n load: (params: any) => true,\n };\n}\n/** 组件事件 - 私有 */\nexport const signatureEmitsPrivate = signatureEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const signatureEmits = {\n ...VanField.emits,\n ...signatureEmitsPrivate,\n};\n\nexport type SignatureEmits<T> = ReturnType<typeof signatureEmitsGeneric<T>>;\n\nexport interface SignatureSlots extends CommonSlots<any> {\n}\n\n/** 提交时的参数 */\nexport interface SubmitOption {\n /** base64 */\n image: string;\n /** */\n canvas: string;\n}\n\n/** 格式化回显图片时的参数 */\nexport function signatureFormat(option: SubmitOption | string | Blob) {\n if (!option) return '';\n if (typeof option === 'string') return option;\n if (option instanceof Blob) return URL.createObjectURL(option);\n return option.image;\n}\n","<template>\n <VanSignature\n v-if=\"!(globalDisabled || disabled || globalReadonly || readonly)\"\n ref=\"signatureRef\"\n v-bind=\"signatureProps\" v-on=\"signatureOn\"\n @end=\"end\" @submit=\"change\" @clear=\"clear\"\n >\n <template v-for=\"(item, slotName) of signatureSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanSignature>\n <img v-else-if=\"imgSrc\" :src=\"imgSrc\" style=\"padding: var(--van-signature-padding);\">\n <i v-else />\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport type { SignatureInstance } from 'vant';\nimport { Field as VanField, Signature as VanSignature } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, nextTick, onBeforeUnmount, onMounted, ref, useTemplateRef, watch } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { SignatureSlots, SubmitOption } from './types';\nimport { signatureEmitsPrivate as emits, signaturePropsPrivate as props } from './types';\n\nconst ratio = typeof window !== 'undefined' ? window.devicePixelRatio : 1;\nfunction getSize(canvas: HTMLCanvasElement) {\n return { width: canvas.offsetWidth * ratio, height: canvas.offsetHeight * ratio };\n}\n/**\n * 绘制图片到 canvas 上\n * @param {object} opt - 绘制选项\n * @param {HTMLCanvasElement} opt.canvas - 待渲染的画布\n * @param {string} opt.src - 图片来源\n * @param {CanvasRenderingContext2D} [opt.ctx] - 画布上下文,若未提供则使用 canvas.getContext('2d') 获取\n * @param {() => boolean} [opt.allowPaint] - 是否允许绘制, 默认为 true\n */\nfunction drawImage(opt: {\n /** 待渲染的画布 */\n canvas: HTMLCanvasElement | undefined;\n src: string | undefined;\n ctx?: CanvasRenderingContext2D | null;\n allowPaint?: () => boolean;\n}) {\n const canvas = opt.canvas;\n if (!(canvas && opt.src)) return;\n const ctx = opt.ctx || canvas.getContext('2d');\n if (!ctx) return;\n const img = new Image();\n img.onload = () => {\n if (opt.allowPaint?.() === false) return;\n const { width, height } = getSize(canvas);\n ctx.clearRect(0, 0, width, height);\n ctx.drawImage(img, 0, 0, width / ratio, height / ratio);\n };\n img.src = opt.src;\n}\n/** 释放 blob */\nfunction revokeBlob(value: any) {\n typeof value === 'string' && value.slice(0, 5) === 'blob:' && URL.revokeObjectURL(value);\n}\n\n/**\n * @file 纯签名组件\n */\nexport default defineComponent({\n name: 'HSignaturePure',\n components: { VanField, VanSignature },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<SignatureSlots>,\n setup(props, ctx) {\n const signatureRef = useTemplateRef<SignatureInstance>('signatureRef');\n const plain = usePlain(props);\n plain.on('reset', () => reset);\n /** 将当前值转为图片地址 */\n const imgSrc = computed(() => props.format(plain.checked.value));\n watch(imgSrc, (value, oldValue) => oldValue && revokeBlob(oldValue));\n onBeforeUnmount(() => imgSrc.value && revokeBlob(imgSrc.value));\n /** 是否由用户触发 */\n const isUserChange = ref(false);\n /** 覆盖值更改事件 */\n function change(value: SubmitOption) {\n isUserChange.value = true;\n plain.change(props.valueFormat(value));\n nextTick(() => isUserChange.value = false);\n }\n onMounted(() => updateCanvasContent(imgSrc.value));\n watch(imgSrc, updateCanvasContent);\n /** 更新画布内容 */\n function updateCanvasContent(val: string | undefined) {\n if (isUserChange.value) return;\n // 当图片地址变化且非用户触发时, 说明外部值发生了变化, 此时需要重新绘制图片\n drawImage({\n ...getCanvas(),\n src: val,\n allowPaint: () => val === imgSrc.value,\n });\n }\n const { slotProps } = useCommonSetup(props, ctx, plain);\n const isResetting = ref(false);\n /** 清空事件 */\n function clear() {\n if (isResetting.value) return;\n plain.change(undefined);\n }\n /** 重置事件 */\n function reset() {\n if (!signatureRef.value) return;\n let _src = imgSrc.value;\n if (signatureRef.value.clear) {\n isResetting.value = true;\n nextTick(() => isResetting.value = false);\n signatureRef.value.clear();\n }\n // 兼容低版本的 VanSignature 组件,低版本没有 clear 方法\n else {\n const { canvas, ctx } = getCanvas();\n if (!(canvas && ctx)) return;\n const { width, height } = getSize(canvas);\n ctx.clearRect(0, 0, width, height);\n ctx.closePath();\n const bgColor = props.signatureProps?.backgroundColor;\n if (bgColor) {\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, width, height);\n }\n }\n // 重置后, 如果图片值未改变则无法触发 watch 回调, 需要主动重新绘制\n nextTick(() => _src === imgSrc.value && updateCanvasContent(_src));\n }\n /** 获取画布 */\n function getCanvas() {\n const canvas = signatureRef.value?.$el?.getElementsByTagName('canvas')[0] as HTMLCanvasElement | undefined;\n const ctx = canvas?.getContext('2d');\n return { canvas, ctx };\n }\n /** 签名结束事件 */\n function end() {\n props.submitAtEnd && signatureRef.value?.submit?.();\n }\n ctx.emit('load', plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n change,\n slotProps,\n signatureRef,\n imgSrc,\n clear,\n end,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanSignature\n v-if=\"!(globalDisabled || disabled || globalReadonly || readonly)\"\n ref=\"signatureRef\"\n v-bind=\"signatureProps\" v-on=\"signatureOn\"\n @end=\"end\" @submit=\"change\" @clear=\"clear\"\n >\n <template v-for=\"(item, slotName) of signatureSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanSignature>\n <img v-else-if=\"imgSrc\" :src=\"imgSrc\" style=\"padding: var(--van-signature-padding);\">\n <i v-else />\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport type { SignatureInstance } from 'vant';\nimport { Field as VanField, Signature as VanSignature } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, nextTick, onBeforeUnmount, onMounted, ref, useTemplateRef, watch } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { SignatureSlots, SubmitOption } from './types';\nimport { signatureEmitsPrivate as emits, signaturePropsPrivate as props } from './types';\n\nconst ratio = typeof window !== 'undefined' ? window.devicePixelRatio : 1;\nfunction getSize(canvas: HTMLCanvasElement) {\n return { width: canvas.offsetWidth * ratio, height: canvas.offsetHeight * ratio };\n}\n/**\n * 绘制图片到 canvas 上\n * @param {object} opt - 绘制选项\n * @param {HTMLCanvasElement} opt.canvas - 待渲染的画布\n * @param {string} opt.src - 图片来源\n * @param {CanvasRenderingContext2D} [opt.ctx] - 画布上下文,若未提供则使用 canvas.getContext('2d') 获取\n * @param {() => boolean} [opt.allowPaint] - 是否允许绘制, 默认为 true\n */\nfunction drawImage(opt: {\n /** 待渲染的画布 */\n canvas: HTMLCanvasElement | undefined;\n src: string | undefined;\n ctx?: CanvasRenderingContext2D | null;\n allowPaint?: () => boolean;\n}) {\n const canvas = opt.canvas;\n if (!(canvas && opt.src)) return;\n const ctx = opt.ctx || canvas.getContext('2d');\n if (!ctx) return;\n const img = new Image();\n img.onload = () => {\n if (opt.allowPaint?.() === false) return;\n const { width, height } = getSize(canvas);\n ctx.clearRect(0, 0, width, height);\n ctx.drawImage(img, 0, 0, width / ratio, height / ratio);\n };\n img.src = opt.src;\n}\n/** 释放 blob */\nfunction revokeBlob(value: any) {\n typeof value === 'string' && value.slice(0, 5) === 'blob:' && URL.revokeObjectURL(value);\n}\n\n/**\n * @file 纯签名组件\n */\nexport default defineComponent({\n name: 'HSignaturePure',\n components: { VanField, VanSignature },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<SignatureSlots>,\n setup(props, ctx) {\n const signatureRef = useTemplateRef<SignatureInstance>('signatureRef');\n const plain = usePlain(props);\n plain.on('reset', () => reset);\n /** 将当前值转为图片地址 */\n const imgSrc = computed(() => props.format(plain.checked.value));\n watch(imgSrc, (value, oldValue) => oldValue && revokeBlob(oldValue));\n onBeforeUnmount(() => imgSrc.value && revokeBlob(imgSrc.value));\n /** 是否由用户触发 */\n const isUserChange = ref(false);\n /** 覆盖值更改事件 */\n function change(value: SubmitOption) {\n isUserChange.value = true;\n plain.change(props.valueFormat(value));\n nextTick(() => isUserChange.value = false);\n }\n onMounted(() => updateCanvasContent(imgSrc.value));\n watch(imgSrc, updateCanvasContent);\n /** 更新画布内容 */\n function updateCanvasContent(val: string | undefined) {\n if (isUserChange.value) return;\n // 当图片地址变化且非用户触发时, 说明外部值发生了变化, 此时需要重新绘制图片\n drawImage({\n ...getCanvas(),\n src: val,\n allowPaint: () => val === imgSrc.value,\n });\n }\n const { slotProps } = useCommonSetup(props, ctx, plain);\n const isResetting = ref(false);\n /** 清空事件 */\n function clear() {\n if (isResetting.value) return;\n plain.change(undefined);\n }\n /** 重置事件 */\n function reset() {\n if (!signatureRef.value) return;\n let _src = imgSrc.value;\n if (signatureRef.value.clear) {\n isResetting.value = true;\n nextTick(() => isResetting.value = false);\n signatureRef.value.clear();\n }\n // 兼容低版本的 VanSignature 组件,低版本没有 clear 方法\n else {\n const { canvas, ctx } = getCanvas();\n if (!(canvas && ctx)) return;\n const { width, height } = getSize(canvas);\n ctx.clearRect(0, 0, width, height);\n ctx.closePath();\n const bgColor = props.signatureProps?.backgroundColor;\n if (bgColor) {\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, width, height);\n }\n }\n // 重置后, 如果图片值未改变则无法触发 watch 回调, 需要主动重新绘制\n nextTick(() => _src === imgSrc.value && updateCanvasContent(_src));\n }\n /** 获取画布 */\n function getCanvas() {\n const canvas = signatureRef.value?.$el?.getElementsByTagName('canvas')[0] as HTMLCanvasElement | undefined;\n const ctx = canvas?.getContext('2d');\n return { canvas, ctx };\n }\n /** 签名结束事件 */\n function end() {\n props.submitAtEnd && signatureRef.value?.submit?.();\n }\n ctx.emit('load', plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n change,\n slotProps,\n signatureRef,\n imgSrc,\n clear,\n end,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"renderField && !hide\"\n :name=\"field\"\n :disabled=\"finalDisabled\"\n :readonly=\"finalReadonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <HSignaturePure v-bind=\"allAttrs\" @load=\"load\" />\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-if=\"plain\" :plain=\"plain\" :props=\"$props\" v-bind=\"row\" />\n </template>\n </VanField>\n <HSignaturePure v-else-if=\"!hide\" v-bind=\"allAttrs\" />\n</template>\n\n<script lang=\"ts\">\nimport type { usePlain } from '@xiaohaih/json-form-core';\nimport { getNode, getProvideValue, hyphenate } from '@xiaohaih/json-form-core';\nimport type { SignatureInstance } from 'vant';\nimport { Field as VanField, Signature as VanSignature } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, inject, nextTick, onBeforeUnmount, onMounted, ref, useTemplateRef, watch } from 'vue';\nimport { useCommonSetup } from '../use';\nimport HSignaturePure from './instance.vue';\nimport type { SignatureSlots, SubmitOption } from './types';\nimport { signatureEmitsPrivate as emits, signaturePropsPrivate as props } from './types';\n\n/**\n * @file 签名\n */\nexport default defineComponent({\n name: 'HSignature',\n components: { VanField, VanSignature, HSignaturePure },\n inheritAttrs: false,\n props,\n emits,\n setup(props, ctx) {\n const allAttrs = computed(() => ({ ...props, ...ctx.attrs }));\n const wrapperProvide = getProvideValue();\n const finalDisabled = computed(() => props.disabled || wrapperProvide?.disabled?.value);\n const finalReadonly = computed(() => props.readonly || wrapperProvide?.readonly?.value);\n\n const plain = ref<ReturnType<typeof usePlain> | null>(null);\n function load(_plain: ReturnType<typeof usePlain>) {\n plain.value = _plain;\n }\n\n return {\n hyphenate,\n getNode,\n allAttrs,\n finalDisabled,\n finalReadonly,\n plain,\n load,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"renderField && !hide\"\n :name=\"field\"\n :disabled=\"finalDisabled\"\n :readonly=\"finalReadonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <HSignaturePure v-bind=\"allAttrs\" @load=\"load\" />\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-if=\"plain\" :plain=\"plain\" :props=\"$props\" v-bind=\"row\" />\n </template>\n </VanField>\n <HSignaturePure v-else-if=\"!hide\" v-bind=\"allAttrs\" />\n</template>\n\n<script lang=\"ts\">\nimport type { usePlain } from '@xiaohaih/json-form-core';\nimport { getNode, getProvideValue, hyphenate } from '@xiaohaih/json-form-core';\nimport type { SignatureInstance } from 'vant';\nimport { Field as VanField, Signature as VanSignature } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, inject, nextTick, onBeforeUnmount, onMounted, ref, useTemplateRef, watch } from 'vue';\nimport { useCommonSetup } from '../use';\nimport HSignaturePure from './instance.vue';\nimport type { SignatureSlots, SubmitOption } from './types';\nimport { signatureEmitsPrivate as emits, signaturePropsPrivate as props } from './types';\n\n/**\n * @file 签名\n */\nexport default defineComponent({\n name: 'HSignature',\n components: { VanField, VanSignature, HSignaturePure },\n inheritAttrs: false,\n props,\n emits,\n setup(props, ctx) {\n const allAttrs = computed(() => ({ ...props, ...ctx.attrs }));\n const wrapperProvide = getProvideValue();\n const finalDisabled = computed(() => props.disabled || wrapperProvide?.disabled?.value);\n const finalReadonly = computed(() => props.readonly || wrapperProvide?.readonly?.value);\n\n const plain = ref<ReturnType<typeof usePlain> | null>(null);\n function load(_plain: ReturnType<typeof usePlain>) {\n plain.value = _plain;\n }\n\n return {\n hyphenate,\n getNode,\n allAttrs,\n finalDisabled,\n finalReadonly,\n plain,\n load,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Slider as VanSlider } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function sliderPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** VanSlider 组件的属性 */\n sliderProps: { type: Object as PropType<Partial<ComponentProps<typeof VanSlider>>> },\n /** VanSlider 组件的事件 - 兼容 vue2 版本 */\n sliderOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanSlider.emits>>>>>, default: () => ({}) },\n /** VanSlider 组件的插槽 */\n sliderSlots: { type: Object as PropType<{\n /** 自定义滑块按钮 */\n button?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义左侧滑块按钮(双滑块模式下) */\n leftButton?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义右侧滑块按钮(双滑块模式下) */\n rightButton?: ComponentType<CommonSlotsProps<any, any>>;\n }> },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const sliderPropsPrivate = sliderPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const sliderProps = {\n ...VanField.props as unknown as {},\n ...sliderPropsPrivate,\n};\nexport type SliderProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof sliderPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function sliderEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const sliderEmitsPrivate = sliderEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const sliderEmits = {\n ...VanField.emits,\n ...sliderEmitsPrivate,\n};\n\nexport type SliderEmits<T> = ReturnType<typeof sliderEmitsGeneric<T>>;\n\nexport interface SliderSlots extends CommonSlots<any> {\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :model-value=\"(checked as number)\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanSlider\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n :model-value=\"(checked as number)\"\n v-bind=\"sliderProps\" v-on=\"sliderOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of sliderSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanSlider>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Slider as VanSlider } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { SliderSlots } from './types';\nimport { sliderEmitsPrivate as emits, sliderPropsPrivate as props } from './types';\n\n/**\n * @file 滑块\n */\nexport default defineComponent({\n name: 'HSlider',\n components: { VanField, VanSlider },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<SliderSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :model-value=\"(checked as number)\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanSlider\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n :model-value=\"(checked as number)\"\n v-bind=\"sliderProps\" v-on=\"sliderOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of sliderSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanSlider>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Slider as VanSlider } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { SliderSlots } from './types';\nimport { sliderEmitsPrivate as emits, sliderPropsPrivate as props } from './types';\n\n/**\n * @file 滑块\n */\nexport default defineComponent({\n name: 'HSlider',\n components: { VanField, VanSlider },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<SliderSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Stepper as VanStepper } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function stepperPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** VanStepper 组件的属性 */\n stepperProps: { type: Object as PropType<Partial<ComponentProps<typeof VanStepper>>> },\n /** VanStepper 组件的事件 - 兼容 vue2 版本 */\n stepperOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanStepper.emits>>>>>, default: () => ({}) },\n /** VanStepper 组件的插槽 */\n stepperSlots: { type: Object as PropType<{\n }> },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const stepperPropsPrivate = stepperPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const stepperProps = {\n ...VanField.props as unknown as {},\n ...stepperPropsPrivate,\n};\nexport type StepperProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof stepperPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function stepperEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const stepperEmitsPrivate = stepperEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const stepperEmits = {\n ...VanField.emits,\n ...stepperEmitsPrivate,\n};\n\nexport type StepperEmits<T> = ReturnType<typeof stepperEmitsGeneric<T>>;\n\nexport interface StepperSlots extends CommonSlots<any> {\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :model-value=\"checked\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanStepper\n :disabled=\"globalDisabled || disabled || globalReadonly || readonly\"\n :model-value=\"(checked as number)\"\n v-bind=\"stepperProps\" v-on=\"stepperOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of stepperSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanStepper>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Stepper as VanStepper } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { StepperSlots } from './types';\nimport { stepperEmitsPrivate as emits, stepperPropsPrivate as props } from './types';\n\n/**\n * @file 步进器\n */\nexport default defineComponent({\n name: 'HStepper',\n components: { VanField, VanStepper },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<StepperSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :model-value=\"checked\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanStepper\n :disabled=\"globalDisabled || disabled || globalReadonly || readonly\"\n :model-value=\"(checked as number)\"\n v-bind=\"stepperProps\" v-on=\"stepperOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of stepperSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanStepper>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Stepper as VanStepper } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { StepperSlots } from './types';\nimport { stepperEmitsPrivate as emits, stepperPropsPrivate as props } from './types';\n\n/**\n * @file 步进器\n */\nexport default defineComponent({\n name: 'HStepper',\n components: { VanField, VanStepper },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<StepperSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Switch as VanSwitch } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function switchPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** VanSwitch 组件的属性 */\n switchProps: { type: Object as PropType<Partial<ComponentProps<typeof VanSwitch>>> },\n /** VanSwitch 组件的事件 - 兼容 vue2 版本 */\n switchOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanSwitch.emits>>>>>, default: () => ({}) },\n /** VanSwitch 组件的插槽 */\n switchSlots: { type: Object as PropType<{\n /** 自定义按钮的内容 */\n node?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义开关的背景内容 */\n background?: ComponentType<CommonSlotsProps<any, any>>;\n }> },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const switchPropsPrivate = switchPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const switchProps = {\n ...VanField.props as unknown as {},\n ...switchPropsPrivate,\n};\nexport type SwitchProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof switchPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function switchEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const switchEmitsPrivate = switchEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const switchEmits = {\n ...VanField.emits,\n ...switchEmitsPrivate,\n};\n\nexport type SwitchEmits<T> = ReturnType<typeof switchEmitsGeneric<T>>;\n\nexport interface SwitchSlots extends CommonSlots<any> {\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanSwitch\n :disabled=\"globalDisabled || disabled || globalReadonly || readonly\"\n :model-value=\"checked\"\n v-bind=\"switchProps\" v-on=\"switchOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of switchSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanSwitch>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Switch as VanSwitch } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { SwitchSlots } from './types';\nimport { switchEmitsPrivate as emits, switchPropsPrivate as props } from './types';\n\n/**\n * @file 开关\n */\nexport default defineComponent({\n name: 'HSwitch',\n components: { VanField, VanSwitch },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<SwitchSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanSwitch\n :disabled=\"globalDisabled || disabled || globalReadonly || readonly\"\n :model-value=\"checked\"\n v-bind=\"switchProps\" v-on=\"switchOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of switchSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanSwitch>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Switch as VanSwitch } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { SwitchSlots } from './types';\nimport { switchEmitsPrivate as emits, switchPropsPrivate as props } from './types';\n\n/**\n * @file 开关\n */\nexport default defineComponent({\n name: 'HSwitch',\n components: { VanField, VanSwitch },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<SwitchSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport type { Popup as VanPopup } from 'vant';\nimport { Field as VanField, TimePicker as VanTimePicker } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentEmit, ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { PickerOption } from '../picker/types';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function timePickerPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** VanTimePicker 组件的属性 */\n timePickerProps: { type: Object as PropType<Partial<ComponentProps<typeof VanTimePicker>>> },\n /** VanTimePicker 组件的事件 - 兼容 vue2 版本 */\n timePickerOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanTimePicker.emits>>>>>, default: () => ({}) },\n /** VanTimePicker 组件的插槽 */\n timePickerSlots: { type: Object as PropType<{\n /** 自定义整个顶部栏的内容 */\n toolbar?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义标题内容 */\n title?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义确认按钮内容 */\n confirm?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义取消按钮内容 */\n cancel?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义选项内容 */\n option?: ComponentType<{ option: PickerOption; index: number } & CommonSlotsProps<any, any>>;\n /** 自定义选项上方内容 */\n columnsTop?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义选项下方内容 */\n columnsBottom?: ComponentType<CommonSlotsProps<any, any>>;\n }> },\n /** 是否展示右侧箭头并开启点击反馈 - Field 字段, 调整默认值 */\n isLink: { type: Boolean, default: true },\n /** 点击事件, 当传递了此事件时, 会忽略内部打开弹窗操作 */\n onRowClick: { type: Function as PropType<(option: { open: () => void; close: () => void }, ev: MouseEvent) => void> },\n /** 日期分隔符 @default : */\n separator: { type: String, default: ':' },\n /** 对值进行格式化 - 显示在页面上的值 */\n format: { type: Function as PropType<(option: string[], separator: string) => any>, default: valueFormatDefault },\n /** 对值进行格式化 - 提交值 */\n valueFormat: { type: Function as PropType<(option: string[], separator: string) => any>, default: valueFormatDefault },\n /** 取消值的格式化 - 给 VanDatePicker 的值 */\n valueUnformat: { type: Function as PropType<(option: any, separator: string) => string[]>, default: valueUnformatDefault },\n /** 值触发方式 @default confirm */\n valueTrigger: { type: String as PropType<'change' | 'confirm' | 'cancel'>, default: 'confirm' },\n /** 弹窗组件的属性 */\n popupProps: { type: Object as PropType<Partial<ComponentExposed<typeof VanPopup>>> },\n /** 弹窗组件的事件 - 兼容 vue2 版本 */\n popupOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanPopup.emits>>>>>, default: () => ({}) },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const timePickerPropsPrivate = timePickerPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const timePickerProps = {\n ...VanField.props as unknown as {},\n ...timePickerPropsPrivate,\n};\nexport type TimePickerProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof timePickerPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function timePickerEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const timePickerEmitsPrivate = timePickerEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const timePickerEmits = {\n ...VanField.emits,\n ...timePickerEmitsPrivate,\n};\n\nexport type TimePickerEmits<T> = ReturnType<typeof timePickerEmitsGeneric<T>>;\n\nexport interface TimePickerSlots extends CommonSlots<any> {\n}\n\n/** 默认的合并函数 */\nfunction valueFormatDefault(option: string[], separator: string) {\n return option.join(separator);\n}\n/** 默认的取消格式化函数 */\nfunction valueUnformatDefault(val: string, separator: string) {\n if (!val) return [];\n return Array.isArray(val) ? val : val.split(separator);\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :is-link=\"isLink\"\n :model-value=\"showText\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanTimePicker\n :model-value=\"checkedArr\"\n v-bind=\"timePickerProps\" v-on=\"timePickerOn\"\n @change=\"changeHandle\" @confirm=\"confirmHandle\" @cancel=\"cancelHandle\"\n >\n <template v-for=\"(item, slotName) of timePickerSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanTimePicker>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Popup as VanPopup, TimePicker as VanTimePicker } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, nextTick, ref, watch } from 'vue';\nimport type { PickerOption } from '../picker/types';\nimport { useCommonSetup } from '../use';\nimport type { TimePickerSlots } from './types';\nimport { timePickerEmitsPrivate as emits, timePickerPropsPrivate as props } from './types';\n\n/**\n * @file 时间选择框\n */\nexport default defineComponent({\n name: 'HTimePicker',\n components: { VanField, VanPopup, VanTimePicker },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<TimePickerSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 展示在页面上的值 */\n const showText = ref('');\n /** 给时间组件的值 */\n const checkedArr = ref<string[]>([]);\n let tempValue: any;\n // 监听外部值的改变, 如果改变且与临时值不一致时\n // 则更新当前值, 并重置临时值\n watch(\n plain.checked,\n (val) => {\n if (val === tempValue) return tempValue = null;\n tempValue = null;\n checkedArr.value = val ? props.valueUnformat(val, props.separator) : [];\n showText.value = checkedArr.value.length ? props.format(checkedArr.value, props.separator) : '';\n },\n { immediate: true },\n );\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /**\n * 时间更改事件\n * @param {string} type 事件类型\n * @param {string} value 日期值\n */\n function timeEventHandle(type: string, value: PickerOption) {\n if (props.valueTrigger === type || props.timePickerProps?.showToolbar === false) {\n checkedArr.value = value.selectedValues;\n plain.change(props.valueFormat(value.selectedValues, props.separator));\n showText.value = props.format(value.selectedValues, props.separator);\n tempValue = plain.checked.value;\n nextTick(() => tempValue = null);\n }\n switch (type) {\n case 'confirm':\n case 'cancel':\n {\n popupInfo.value.close();\n break;\n }\n default: break;\n }\n }\n\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n showText,\n checkedArr,\n clickHandle,\n changeHandle: timeEventHandle.bind(null, 'change'),\n confirmHandle: timeEventHandle.bind(null, 'confirm'),\n cancelHandle: timeEventHandle.bind(null, 'cancel'),\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :is-link=\"isLink\"\n :model-value=\"showText\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanTimePicker\n :model-value=\"checkedArr\"\n v-bind=\"timePickerProps\" v-on=\"timePickerOn\"\n @change=\"changeHandle\" @confirm=\"confirmHandle\" @cancel=\"cancelHandle\"\n >\n <template v-for=\"(item, slotName) of timePickerSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanTimePicker>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Popup as VanPopup, TimePicker as VanTimePicker } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, nextTick, ref, watch } from 'vue';\nimport type { PickerOption } from '../picker/types';\nimport { useCommonSetup } from '../use';\nimport type { TimePickerSlots } from './types';\nimport { timePickerEmitsPrivate as emits, timePickerPropsPrivate as props } from './types';\n\n/**\n * @file 时间选择框\n */\nexport default defineComponent({\n name: 'HTimePicker',\n components: { VanField, VanPopup, VanTimePicker },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<TimePickerSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 展示在页面上的值 */\n const showText = ref('');\n /** 给时间组件的值 */\n const checkedArr = ref<string[]>([]);\n let tempValue: any;\n // 监听外部值的改变, 如果改变且与临时值不一致时\n // 则更新当前值, 并重置临时值\n watch(\n plain.checked,\n (val) => {\n if (val === tempValue) return tempValue = null;\n tempValue = null;\n checkedArr.value = val ? props.valueUnformat(val, props.separator) : [];\n showText.value = checkedArr.value.length ? props.format(checkedArr.value, props.separator) : '';\n },\n { immediate: true },\n );\n\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /**\n * 时间更改事件\n * @param {string} type 事件类型\n * @param {string} value 日期值\n */\n function timeEventHandle(type: string, value: PickerOption) {\n if (props.valueTrigger === type || props.timePickerProps?.showToolbar === false) {\n checkedArr.value = value.selectedValues;\n plain.change(props.valueFormat(value.selectedValues, props.separator));\n showText.value = props.format(value.selectedValues, props.separator);\n tempValue = plain.checked.value;\n nextTick(() => tempValue = null);\n }\n switch (type) {\n case 'confirm':\n case 'cancel':\n {\n popupInfo.value.close();\n break;\n }\n default: break;\n }\n }\n\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n showText,\n checkedArr,\n clickHandle,\n changeHandle: timeEventHandle.bind(null, 'change'),\n confirmHandle: timeEventHandle.bind(null, 'confirm'),\n cancelHandle: timeEventHandle.bind(null, 'cancel'),\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport type { TreeSelectChild, Popup as VanPopup } from 'vant';\nimport { Field as VanField, TreeSelect as VanTreeSelect } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentEmit, ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { PickerOption } from '../picker/types';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function treeSelectPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** VanTreeSelect 组件的属性 */\n treeSelectProps: { type: Object as PropType<Partial<ComponentProps<typeof VanTreeSelect>>> },\n /** VanTreeSelect 组件的事件 - 兼容 vue2 版本 */\n treeSelectOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanTreeSelect.emits>>>>>, default: () => ({}) },\n /** VanTreeSelect 组件的插槽 */\n treeSelectSlots: { type: Object as PropType<{\n /** 自定义导航名称 */\n navText?: ComponentType<{ item: TreeSelectChild } & CommonSlotsProps<any, any>>;\n /** 自定义右侧区域内容 */\n content?: ComponentType<{ options: any[] } & CommonSlotsProps<any, any>>;\n }> },\n /** 是否展示右侧箭头并开启点击反馈 - Field 字段, 调整默认值 */\n isLink: { type: Boolean, default: true },\n /** 点击事件, 当传递了此事件时, 会忽略内部打开弹窗操作 */\n onRowClick: { type: Function as PropType<(option: { open: () => void; close: () => void }, ev: MouseEvent) => void> },\n /** 显示文本的分隔符 @default / */\n separator: { type: String, default: ',' },\n /** 对值进行格式化 - 显示在页面上的值 */\n format: { type: Function as PropType<(option: {\n source: TreeSelectOption[];\n value: string | string[];\n separator: string;\n }) => any> },\n /** 值触发方式 @default confirm */\n valueTrigger: { type: String as PropType<'change' | 'confirm' | 'cancel'>, default: 'confirm' },\n /** 弹窗组件的属性 */\n popupProps: { type: Object as PropType<Partial<ComponentExposed<typeof VanPopup>>> },\n /** 弹窗组件的事件 - 兼容 vue2 版本 */\n popupOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanPopup.emits>>>>>, default: () => ({}) },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const treeSelectPropsPrivate = treeSelectPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const treeSelectProps = {\n ...VanField.props as unknown as {},\n ...treeSelectPropsPrivate,\n};\nexport type TreeSelectProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof treeSelectPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function treeSelectEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const treeSelectEmitsPrivate = treeSelectEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const treeSelectEmits = {\n ...VanField.emits,\n ...treeSelectEmitsPrivate,\n};\n\nexport type TreeSelectEmits<T> = ReturnType<typeof treeSelectEmitsGeneric<T>>;\n\nexport interface TreeSelectSlots extends CommonSlots<any> {\n}\n\nexport interface TreeSelectOption {\n text: string;\n id: string;\n children: Omit<TreeSelectOption, 'children'>[];\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :is-link=\"isLink\"\n :model-value=\"showText\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanTreeSelect\n :main-active-index=\"mainActiveIndex\"\n :active-id=\"checked\"\n :items=\"finalOption\"\n v-bind=\"treeSelectProps\" v-on=\"treeSelectOn\"\n @update:main-active-index=\"mainActiveIndexChange\"\n @update:active-id=\"activeIdChange\"\n >\n <template v-for=\"(item, slotName) of treeSelectSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" :options=\"finalOption\" />\n </template>\n </VanTreeSelect>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Popup as VanPopup, TreeSelect as VanTreeSelect } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, nextTick, ref, watch } from 'vue';\nimport type { PickerOption } from '../picker/types';\nimport { useCommonSetup } from '../use';\nimport type { TreeSelectOption, TreeSelectSlots } from './types';\nimport { treeSelectEmitsPrivate as emits, treeSelectPropsPrivate as props } from './types';\n\n/**\n * @file 分类选择器\n */\nexport default defineComponent({\n name: 'HTreeSelect',\n components: { VanTreeSelect, VanField, VanPopup },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<TreeSelectSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 展示在页面上的值 */\n const showText = computed(() => {\n const value = plain.checked.value as string | string[];\n if (!value) return '';\n const { format, separator } = props;\n const source = (props.treeSelectProps?.items || plain.finalOption.value) as TreeSelectOption[];\n if (format) return format({ source, value, separator });\n const result: string[] = [];\n let _item: TreeSelectOption['children'][number] | undefined;\n if (typeof value === 'string') {\n source.some((o) => {\n _item = o.children.find((oo) => oo.id === value);\n _item && result.push(_item.text);\n return !!_item;\n });\n }\n else {\n value.forEach((val) => source.some((oo) => {\n _item = oo.children.find((ooo) => ooo.id === val);\n _item && result.push(_item.text);\n return !!_item;\n }));\n }\n return result.filter(Boolean).join(separator);\n });\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /** 左侧激活项 */\n const mainActiveIndex = ref(0);\n let tempChecked: any;\n watch(\n [plain.checked, plain.finalOption],\n ([val, options]) => {\n if (!options?.length) return;\n // 两者相等, 说明是 activeIdChange, 可以直接返回\n if (tempChecked === val) {\n tempChecked = null;\n return;\n }\n tempChecked = null;\n // 直接重置为 0\n mainActiveIndex.value = 0;\n if (!(val && val.length)) return;\n // 如果是字符串, 直接赋值所在下标\n if (typeof val === 'string') {\n let flag: boolean;\n (options as TreeSelectOption[]).some((o, idx) => {\n flag = o.children.some((oo) => oo.id === val);\n flag && (mainActiveIndex.value = idx);\n return flag;\n });\n }\n else {\n // 如果是数组, 取最小的一个下标\n const idxs = (val as string[]).map((o) => (options as TreeSelectOption[]).findIndex((oo) => oo.children.some((ooo) => ooo.id === o)));\n // Math.max 兜底处理, 防止出现 -1\n mainActiveIndex.value = Math.max(0, Math.min(...idxs));\n }\n },\n { immediate: true },\n );\n /** 左侧标签更改事件 */\n function mainActiveIndexChange(index: number) {\n mainActiveIndex.value = index;\n }\n /** 右侧更改事件 */\n function activeIdChange(value: string | string[]) {\n plain.change(value);\n tempChecked = plain.checked.value;\n nextTick(() => tempChecked = null);\n }\n\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n showText,\n clickHandle,\n mainActiveIndex,\n mainActiveIndexChange,\n activeIdChange,\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"true\"\n :is-link=\"isLink\"\n :model-value=\"showText\"\n v-bind=\"$attrs\"\n @click=\"clickHandle\"\n >\n <template #extra>\n <VanPopup v-model:show=\"popupInfo.visible\" teleport=\"body\" round position=\"bottom\" v-bind=\"popupProps\" v-on=\"popupOn\" @close=\"popupInfo.close\">\n <VanTreeSelect\n :main-active-index=\"mainActiveIndex\"\n :active-id=\"checked\"\n :items=\"finalOption\"\n v-bind=\"treeSelectProps\" v-on=\"treeSelectOn\"\n @update:main-active-index=\"mainActiveIndexChange\"\n @update:active-id=\"activeIdChange\"\n >\n <template v-for=\"(item, slotName) of treeSelectSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" :options=\"finalOption\" />\n </template>\n </VanTreeSelect>\n </VanPopup>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Popup as VanPopup, TreeSelect as VanTreeSelect } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { computed, defineComponent, nextTick, ref, watch } from 'vue';\nimport type { PickerOption } from '../picker/types';\nimport { useCommonSetup } from '../use';\nimport type { TreeSelectOption, TreeSelectSlots } from './types';\nimport { treeSelectEmitsPrivate as emits, treeSelectPropsPrivate as props } from './types';\n\n/**\n * @file 分类选择器\n */\nexport default defineComponent({\n name: 'HTreeSelect',\n components: { VanTreeSelect, VanField, VanPopup },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<TreeSelectSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n /** 展示在页面上的值 */\n const showText = computed(() => {\n const value = plain.checked.value as string | string[];\n if (!value) return '';\n const { format, separator } = props;\n const source = (props.treeSelectProps?.items || plain.finalOption.value) as TreeSelectOption[];\n if (format) return format({ source, value, separator });\n const result: string[] = [];\n let _item: TreeSelectOption['children'][number] | undefined;\n if (typeof value === 'string') {\n source.some((o) => {\n _item = o.children.find((oo) => oo.id === value);\n _item && result.push(_item.text);\n return !!_item;\n });\n }\n else {\n value.forEach((val) => source.some((oo) => {\n _item = oo.children.find((ooo) => ooo.id === val);\n _item && result.push(_item.text);\n return !!_item;\n }));\n }\n return result.filter(Boolean).join(separator);\n });\n /** 点击事件 */\n function clickHandle(ev: MouseEvent) {\n if (plain.globalDisabled.value || props.disabled || plain.globalReadonly.value || props.readonly) return;\n props.onRowClick ? props.onRowClick(popupInfo.value, ev) : popupInfo.value.open();\n }\n /** 左侧激活项 */\n const mainActiveIndex = ref(0);\n let tempChecked: any;\n watch(\n [plain.checked, plain.finalOption],\n ([val, options]) => {\n if (!options?.length) return;\n // 两者相等, 说明是 activeIdChange, 可以直接返回\n if (tempChecked === val) {\n tempChecked = null;\n return;\n }\n tempChecked = null;\n // 直接重置为 0\n mainActiveIndex.value = 0;\n if (!(val && val.length)) return;\n // 如果是字符串, 直接赋值所在下标\n if (typeof val === 'string') {\n let flag: boolean;\n (options as TreeSelectOption[]).some((o, idx) => {\n flag = o.children.some((oo) => oo.id === val);\n flag && (mainActiveIndex.value = idx);\n return flag;\n });\n }\n else {\n // 如果是数组, 取最小的一个下标\n const idxs = (val as string[]).map((o) => (options as TreeSelectOption[]).findIndex((oo) => oo.children.some((ooo) => ooo.id === o)));\n // Math.max 兜底处理, 防止出现 -1\n mainActiveIndex.value = Math.max(0, Math.min(...idxs));\n }\n },\n { immediate: true },\n );\n /** 左侧标签更改事件 */\n function mainActiveIndexChange(index: number) {\n mainActiveIndex.value = index;\n }\n /** 右侧更改事件 */\n function activeIdChange(value: string | string[]) {\n plain.change(value);\n tempChecked = plain.checked.value;\n nextTick(() => tempChecked = null);\n }\n\n /** 弹窗显示状态 */\n const popupInfo = ref({\n visible: false,\n open() {\n popupInfo.value.visible = true;\n },\n close() {\n popupInfo.value.visible = false;\n },\n });\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n showText,\n clickHandle,\n mainActiveIndex,\n mainActiveIndexChange,\n activeIdChange,\n popupInfo,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","import type { emits2obj, PlainProps } from '@xiaohaih/json-form-core';\nimport { emits2props, plainProps } from '@xiaohaih/json-form-core';\nimport type { PopupProps, UploaderFileListItem } from 'vant';\nimport { Field as VanField, Uploader as VanUploader } from 'vant';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentProps } from 'vue-component-type-helpers';\nimport type { CommonProps, CommonSlots, CommonSlotsProps, ComponentType } from '../share';\nimport { commonProps } from '../share';\n\n/** 组件传参 - 私有 */\nexport function uploadPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...commonProps as CommonProps<Query, OptionQuery>,\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** VanUploader 组件的属性 */\n uploadProps: { type: Object as PropType<Partial<ComponentProps<typeof VanUploader>>> },\n /** VanUploader 组件的事件 - 兼容 vue2 版本 */\n uploadOn: { type: Object as PropType<Partial<ReturnType<typeof emits2obj<NonNullable<typeof VanUploader.emits>>>>>, default: () => ({}) },\n /** VanUploader 组件的插槽 */\n uploadSlots: { type: Object as PropType<{\n /** 自定义上传区域 */\n default?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义删除按钮 */\n previewDelete?: ComponentType<CommonSlotsProps<any, any>>;\n /** 自定义覆盖在预览区域上方的内容 */\n previewCover?: ComponentType<{ item: UploaderFileListItem } & CommonSlotsProps<any, any>>;\n }> },\n /** 文件读取完毕后执行的回调 */\n afterRead: { type: Function as PropType<(file: FileInfo | FileInfo[], detail: UploadDetail, option: UploadOption) => void> },\n /** 文件上传方法 */\n uploadRequest: { type: Function as PropType<(option: UploadOption) => Promise<any> | void> },\n /** 上传中的提示 */\n uploadingMessage: { type: [String, Function] as PropType<string | ((fileInfo: FileInfo) => string)>, default: '上传中' },\n /** 失败的提示 */\n failedMessage: { type: [String, Function] as PropType<string | ((fileInfo: FileInfo, response: any) => string)> },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const uploadPropsPrivate = uploadPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const uploadProps = {\n ...VanField.props as unknown as {},\n ...uploadPropsPrivate,\n};\nexport type UploadProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof uploadPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function uploadEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 - 私有 */\nexport const uploadEmitsPrivate = uploadEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const uploadEmits = {\n ...VanField.emits,\n ...uploadEmitsPrivate,\n};\n\nexport type UploadEmits<T> = ReturnType<typeof uploadEmitsGeneric<T>>;\n\nexport interface UploadSlots extends CommonSlots<any> {\n}\n\n/** 上传文件信息 */\nexport interface FileInfo extends UploaderFileListItem {\n /** 服务器返回的信息 */\n response?: any;\n}\n/** */\nexport interface UploadDetail {\n name: number | string;\n index: number;\n}\n\n/** 文件上传提供的参数 */\nexport interface UploadOption {\n /** 当前选中的第一个文件 */\n file: FileInfo;\n /** 多选时所有文件 */\n files: FileInfo[];\n /** 成功回调 */\n success: (file: FileInfo | FileInfo[], res: any) => void;\n /** 失败回调 */\n fail: (file: FileInfo | FileInfo[], res: any) => void;\n}\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanUploader\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n :afterRead=\"rewriteAfterRead\"\n :model-value=\"checked\"\n v-bind=\"uploadProps\" v-on=\"uploadOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of uploadSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanUploader>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Uploader as VanUploader } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { defineComponent, unref } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { FileInfo, UploadDetail, UploadOption, UploadSlots } from './types';\nimport { uploadEmitsPrivate as emits, uploadPropsPrivate as props } from './types';\n\n/**\n * @file 上传\n */\nexport default defineComponent({\n name: 'HUploader',\n components: { VanField, VanUploader },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<UploadSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n /** 重写文件上传功能 */\n function rewriteAfterRead(file: FileInfo | FileInfo[], detail: UploadDetail) {\n const opt = getUploadOption(file, detail);\n if (props.afterRead) return props.afterRead(file, detail, opt);\n if (!props.uploadRequest) return;\n\n opt.files.forEach((o) => {\n o.status = 'uploading';\n o.message = typeof props.uploadingMessage === 'function' ? props.uploadingMessage(o) : props.uploadingMessage;\n });\n const res = props.uploadRequest(opt);\n typeof res === 'object' && (res.then ? res.then(opt.success.bind(null, opt.files)) : res.catch(opt.fail.bind(null, opt.files)));\n }\n function getUploadOption(file: FileInfo | FileInfo[], detail: UploadDetail) {\n return {\n file: Array.isArray(file) ? file[0] : file,\n files: Array.isArray(file) ? file : [file],\n success: successCallback,\n fail: failCallback,\n } as UploadOption;\n }\n function successCallback(file: FileInfo | FileInfo[], res: any) {\n const files = Array.isArray(file) ? file : [file];\n files.some((o) => {\n if (o.status !== 'uploading') return false;\n o.status = 'done';\n o.message = '';\n o.response = res;\n return false;\n });\n }\n function failCallback(file: FileInfo | FileInfo[], res: any) {\n const files = Array.isArray(file) ? file : [file];\n files.some((o) => {\n if (o.status !== 'uploading') return false;\n o.status = 'failed';\n o.message = typeof props.failedMessage === 'function' ? props.failedMessage(o, res) : props.failedMessage;\n o.response = res;\n return false;\n });\n }\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n rewriteAfterRead,\n getUploadOption,\n successCallback,\n failCallback,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","<template>\n <VanField\n v-if=\"!hide\"\n :name=\"field\"\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n v-bind=\"$attrs\"\n >\n <template #input>\n <VanUploader\n :disabled=\"globalDisabled || disabled\"\n :readonly=\"globalReadonly || readonly\"\n :afterRead=\"rewriteAfterRead\"\n :model-value=\"checked\"\n v-bind=\"uploadProps\" v-on=\"uploadOn\"\n @update:model-value=\"change\"\n >\n <template v-for=\"(item, slotName) of uploadSlots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanUploader>\n </template>\n <template v-for=\"(item, slotName) of slots\" :key=\"slotName\" #[hyphenate(slotName)]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"slotProps\" v-bind.prop=\"row\" />\n </template>\n </VanField>\n</template>\n\n<script lang=\"ts\">\nimport { getNode, hyphenate, usePlain } from '@xiaohaih/json-form-core';\nimport { Field as VanField, Uploader as VanUploader } from 'vant';\nimport type { SlotsType } from 'vue';\nimport { defineComponent, unref } from 'vue';\nimport { useCommonSetup } from '../use';\nimport type { FileInfo, UploadDetail, UploadOption, UploadSlots } from './types';\nimport { uploadEmitsPrivate as emits, uploadPropsPrivate as props } from './types';\n\n/**\n * @file 上传\n */\nexport default defineComponent({\n name: 'HUploader',\n components: { VanField, VanUploader },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<UploadSlots>,\n setup(props, ctx) {\n const plain = usePlain(props);\n const { slotProps } = useCommonSetup(props, ctx, plain);\n\n /** 重写文件上传功能 */\n function rewriteAfterRead(file: FileInfo | FileInfo[], detail: UploadDetail) {\n const opt = getUploadOption(file, detail);\n if (props.afterRead) return props.afterRead(file, detail, opt);\n if (!props.uploadRequest) return;\n\n opt.files.forEach((o) => {\n o.status = 'uploading';\n o.message = typeof props.uploadingMessage === 'function' ? props.uploadingMessage(o) : props.uploadingMessage;\n });\n const res = props.uploadRequest(opt);\n typeof res === 'object' && (res.then ? res.then(opt.success.bind(null, opt.files)) : res.catch(opt.fail.bind(null, opt.files)));\n }\n function getUploadOption(file: FileInfo | FileInfo[], detail: UploadDetail) {\n return {\n file: Array.isArray(file) ? file[0] : file,\n files: Array.isArray(file) ? file : [file],\n success: successCallback,\n fail: failCallback,\n } as UploadOption;\n }\n function successCallback(file: FileInfo | FileInfo[], res: any) {\n const files = Array.isArray(file) ? file : [file];\n files.some((o) => {\n if (o.status !== 'uploading') return false;\n o.status = 'done';\n o.message = '';\n o.response = res;\n return false;\n });\n }\n function failCallback(file: FileInfo | FileInfo[], res: any) {\n const files = Array.isArray(file) ? file : [file];\n files.some((o) => {\n if (o.status !== 'uploading') return false;\n o.status = 'failed';\n o.message = typeof props.failedMessage === 'function' ? props.failedMessage(o, res) : props.failedMessage;\n o.response = res;\n return false;\n });\n }\n\n return {\n hyphenate,\n getNode,\n ...plain,\n slotProps,\n rewriteAfterRead,\n getUploadOption,\n successCallback,\n failCallback,\n };\n },\n});\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n","/**\n * 组件导出中转文件\n * 从组件定义文件中导出所有组件\n */\nexport * from '../area/index';\nexport * from '../cascader/index';\nexport * from '../checkbox-group/index';\nexport * from '../checkbox/index';\nexport * from '../custom-render/index';\nexport * from '../date-picker/index';\nexport * from '../date-time-picker-group/index';\nexport * from '../input/index';\nexport * from '../number-keyboard/index';\nexport * from '../password-input/index';\nexport * from '../picker/index';\nexport * from '../radio-group/index';\nexport * from '../radio/index';\nexport * from '../rate/index';\nexport * from '../signature/index';\nexport * from '../slider/index';\nexport * from '../stepper/index';\nexport * from '../switch/index';\nexport * from '../time-picker/index';\nexport * from '../tree-select/index';\nexport * from '../upload/index';\n\nexport const HDatetimePicker = { render: () => null };\nexport interface DatetimePickerProps<A, B> {}\n\n","import { markRaw } from 'vue';\nimport {\n HArea,\n HCascader,\n HCheckbox,\n HCheckboxGroup,\n HCustomRender,\n HDatePicker,\n HDatetimePicker,\n HDateTimePickerGroup,\n HInput,\n HNumberKeyboard,\n HPasswordInput,\n HPicker,\n HRadio,\n HRadioGroup,\n HRate,\n HSignature,\n HSlider,\n HStepper,\n HSwitch,\n HTimePicker,\n HTreeSelect,\n HUpload,\n} from '../component-definition/components';\n\n/* eslint-disable ts/no-unnecessary-type-assertion */\nconst compMap = {\n 'area': markRaw(HArea) as typeof HArea,\n 'cascader': markRaw(HCascader) as typeof HCascader,\n 'checkbox': markRaw(HCheckbox) as typeof HCheckbox,\n 'checkbox-group': markRaw(HCheckboxGroup) as typeof HCheckboxGroup,\n 'custom-render': markRaw(HCustomRender) as typeof HCustomRender,\n 'datepicker': markRaw(HDatePicker) as typeof HDatePicker,\n 'date-picker': markRaw(HDatePicker) as typeof HDatePicker,\n 'date-time-picker-group': markRaw(HDateTimePickerGroup) as typeof HDateTimePickerGroup,\n 'datetime-picker': markRaw(HDatetimePicker) as typeof HDatetimePicker,\n 'input': markRaw(HInput) as typeof HInput,\n 'number-keyboard': markRaw(HNumberKeyboard) as typeof HNumberKeyboard,\n 'password-input': markRaw(HPasswordInput) as typeof HPasswordInput,\n 'picker': markRaw(HPicker) as typeof HPicker,\n 'select': markRaw(HPicker) as typeof HPicker,\n 'radio': markRaw(HRadio) as typeof HRadio,\n 'radio-group': markRaw(HRadioGroup) as typeof HRadioGroup,\n 'rate': markRaw(HRate) as typeof HRate,\n 'signature': markRaw(HSignature) as typeof HSignature,\n 'slider': markRaw(HSlider) as typeof HSlider,\n 'stepper': markRaw(HStepper) as typeof HStepper,\n 'switch': markRaw(HSwitch) as typeof HSwitch,\n 'time-picker': markRaw(HTimePicker) as typeof HTimePicker,\n 'timepicker': markRaw(HTimePicker) as typeof HTimePicker,\n 'tree-select': markRaw(HTreeSelect) as typeof HTreeSelect,\n 'upload': markRaw(HUpload) as typeof HUpload,\n};\n/* eslint-enable ts/no-unnecessary-type-assertion */\nconst userCompMap: Record<string, any> = {};\n\n/** 默认定义组件的类型 */\nexport type ComponentTypeDef = (typeof compMap)[keyof typeof compMap];\n\n/**\n * 注册自定义组件\n * @param {string} name 类型\n * @param {} comp 可渲染的组件\n */\nexport function registerComponent(name: string, comp: any) {\n userCompMap[name] = markRaw(comp);\n}\n\n/**\n * 删除自定义组件\n * @param {string} name 定义的类型\n */\nexport function unregisterComponent(name: string) {\n delete userCompMap[name];\n}\n\n/**\n * 获取指定组件\n * 根据组件类型名称获取对应的组件实例,优先从用户自定义组件中查找\n *\n * @param {string} name - 组件类型名称\n * @returns {ComponentTypeDef | null} - 返回指定的组件\n */\nexport function getComponent(name: string): ComponentTypeDef | null {\n return userCompMap[name] || compMap[name as keyof typeof compMap] || (console.warn('未找到该组件类型: ', name), null);\n}\n\n/**\n * 获取指定类型/所有组件\n *\n * @param {string} [type] 内置组件(builtIn)\n *\n * @returns {Record<string, ComponentTypeDef>} - 返回指定的组件或所有组件的映射表\n */\nexport function getAllComponent(type?: 'builtIn' | 'user'): Record<string, ComponentTypeDef> {\n if (!type) return { ...compMap, ...userCompMap };\n else return type === 'user' ? { ...userCompMap } : { ...compMap };\n}\n","import type { EventsWithoutInstance, getProvideValue } from '@xiaohaih/json-form-core';\nimport type { ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentType } from '../share';\n\nexport interface GroupHookOption {\n /** 组件创建前触发的钩子, 可在内部监听生命周期, 获取实例, 以及操作该组件内的各种属性 */\n created?: (options: { props: ExtractPublicPropTypes<ReturnType<typeof groupPropsGeneric>>; wrapper: ReturnType<typeof getProvideValue> } & EventsWithoutInstance) => void;\n}\n\n/** 组件传参 */\nexport function groupPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...{} as unknown as Record<'class' | 'style', { type: PropType<string | Record<string, any> | any[]> }>,\n /** 当前组件类型(防止被继承, 主动声明) */\n t: { type: String },\n /** 提交字段 */\n field: { type: String },\n /** 当前条件对象 */\n query: { type: Object as PropType<Query>, required: true },\n /** 渲染的标签 */\n tag: { type: [Object, String, Array, Function] as PropType<any>, default: 'div' },\n /** 传递给渲染标签的插槽(默认插槽是渲染的子条件) */\n tagSlots: { type: Object as PropType<Record<string, ComponentType<{ query: Query; wrapper: ReturnType<typeof getProvideValue> }>>> },\n /** 渲染的子条件 */\n config: { type: [Object, Array, Function] as PropType<any> },\n /** 传递给组件的插槽 */\n slots: { type: Object as PropType<GroupSlots<Query, OptionQuery>> },\n /** 组件额外的钩子() */\n hooks: { type: [Object] as PropType<GroupHookOption>, default: undefined },\n /** 获取表单组件实例 */\n getFormRef: { type: Function as PropType<() => any> },\n } as const;\n}\n/** 组件传参 */\nexport const groupPropsPrivate = groupPropsGeneric();\n/** 组件传参 - 外部调用 */\nexport const groupProps = groupPropsPrivate;\nexport type GroupProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof groupPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 */\nexport function groupEmitsGeneric<T>() {\n return {};\n}\n/** 组件事件 */\nexport const groupEmitsPrivate = groupEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const groupEmits = groupEmitsPrivate;\nexport type GroupEmits<T> = ReturnType<typeof groupEmitsGeneric<T>>;\n\nexport interface GroupSlots<Query extends Record<string, any> = any, OptionQuery extends Record<string, any> = any> {\n /** 在表单项前渲染 */\n prepend?: ComponentType<{ query: Query; wrapper: ReturnType<typeof getProvideValue> }>;\n /** 自定义表单渲染逻辑 */\n default?: ComponentType<{ config: Record<string, any> | Record<string, any>[]; query: Query; wrapper: ReturnType<typeof getProvideValue> }>;\n /** 在表单项后渲染 */\n append?: ComponentType<{ query: Query; wrapper: ReturnType<typeof getProvideValue> }>;\n}\n","<template>\n <template v-if=\"tag\">\n <component :is=\"tag\" v-bind=\"$attrs\" ref=\"tagRef\" v-on=\"events\">\n <slot />\n <template v-for=\"(item, slotName) in slots\" :key=\"slotName\" #[slotName]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"row\" :wrapper=\"wrapper\" :query=\"query\" />\n </template>\n </component>\n </template>\n <slot v-else />\n</template>\n\n<script lang=\"tsx\">\nimport { getNode } from '@xiaohaih/json-form-core';\nimport type { PropType } from 'vue';\nimport { computed, defineComponent, ref } from 'vue';\n\n/**\n * @file 对 Group 组件进行包装, 以支持无根节点渲染\n */\nexport default defineComponent({\n name: 'VirtualGroup',\n inheritAttrs: false,\n props: {\n tag: { type: [Object, String, Array, Function] as PropType<any>, default: 'div' },\n slots: { type: [Object] as PropType<Record<string, any>> },\n wrapper: { type: [Object] as PropType<Record<string, any>> },\n query: { type: [Object] as PropType<Record<string, any>> },\n },\n setup(props, ctx) {\n // @ts-expect-error 兼容 vue2.x\n const events = computed(() => ctx.listeners || {});\n return { getNode, tagRef: ref<Record<string, any> | undefined>(), events };\n },\n});\n</script>\n\n<style lang=\"css\" scoped></style>\n","<template>\n <template v-if=\"tag\">\n <component :is=\"tag\" v-bind=\"$attrs\" ref=\"tagRef\" v-on=\"events\">\n <slot />\n <template v-for=\"(item, slotName) in slots\" :key=\"slotName\" #[slotName]=\"row\">\n <component :is=\"getNode(item)\" v-bind=\"row\" :wrapper=\"wrapper\" :query=\"query\" />\n </template>\n </component>\n </template>\n <slot v-else />\n</template>\n\n<script lang=\"tsx\">\nimport { getNode } from '@xiaohaih/json-form-core';\nimport type { PropType } from 'vue';\nimport { computed, defineComponent, ref } from 'vue';\n\n/**\n * @file 对 Group 组件进行包装, 以支持无根节点渲染\n */\nexport default defineComponent({\n name: 'VirtualGroup',\n inheritAttrs: false,\n props: {\n tag: { type: [Object, String, Array, Function] as PropType<any>, default: 'div' },\n slots: { type: [Object] as PropType<Record<string, any>> },\n wrapper: { type: [Object] as PropType<Record<string, any>> },\n query: { type: [Object] as PropType<Record<string, any>> },\n },\n setup(props, ctx) {\n // @ts-expect-error 兼容 vue2.x\n const events = computed(() => ctx.listeners || {});\n return { getNode, tagRef: ref<Record<string, any> | undefined>(), events };\n },\n});\n</script>\n\n<style lang=\"css\" scoped></style>\n","<template>\n <!-- eslint-disable-next-line vue/no-unused-refs -->\n <VirtualGroup ref=\"virtualGroupRef\" v-bind=\"$attrs\" :tag=\"virtualTag\" :slots=\"virtualSlots || tagSlots\" :query=\"query\" :wrapper=\"wrapper\">\n <template v-if=\"slots?.prepend || ($slots as GroupSlots).prepend\">\n <component :is=\"getNode(slots?.prepend || ($slots as GroupSlots).prepend)\" :query=\"query\" :wrapper=\"wrapper\" />\n </template>\n <template v-if=\"slots?.default\">\n <component :is=\"slots.default\" :config=\"finalConfig\" :query=\"query\" :wrapper=\"wrapper\" />\n </template>\n <slot v-else-if=\"$slots.default\" :config=\"finalConfig\" :query=\"query\" />\n <template v-else>\n <template v-for=\"(item, key) of finalConfig\" :key=\"item.as || item.field || item[REWRITE_FIELD_KEY] || key\">\n <component :is=\"getComponent2(item.t)!\" v-if=\"item\" v-bind=\"item\" :field=\"item.as || item.field || item[REWRITE_FIELD_KEY] || key\" :query=\"query\" />\n </template>\n </template>\n <template v-if=\"slots?.append || ($slots as GroupSlots).append\">\n <component :is=\"getNode(slots?.append || ($slots as GroupSlots).append)\" :query=\"query\" :wrapper=\"wrapper\" />\n </template>\n </VirtualGroup>\n</template>\n\n<script lang=\"tsx\">\nimport { get, getNode, getProvideValue, hasOwn, hyphenate, isPlainObject, useEmitter, usePlain } from '@xiaohaih/json-form-core';\nimport { CellGroup as VanCellGroup } from 'vant';\nimport type { FunctionalComponent, SlotsType } from 'vue';\nimport { computed, defineComponent, markRaw, ref, watch } from 'vue';\nimport { pick } from '../../src/utils';\nimport { getComponent } from './assist';\nimport type { GroupSlots } from './types';\nimport { groupEmitsPrivate as emits, groupPropsPrivate as props } from './types';\nimport VirtualGroup from './virtual-group.vue';\n\n/** 当 field 不存在, 但 fields 存在时, 合并 fields 到对象上的 key */\nconst REWRITE_FIELD_KEY = '__field__' as const;\n/** 特殊类型可以直接复用组件的 */\nconst specialComponents: Record<string, {\n /** 重渲染的组件 */\n tag: any;\n /** 该组件所拥有的插槽(默认插槽不用定义) */\n slots?: (slots: Record<string, any> | undefined) => Record<string, any> | undefined;\n}> = {\n 'cell-group': {\n tag: markRaw(VanCellGroup),\n slots: (slots) => slots?.title ? { title: slots.title } : undefined,\n },\n};\n\n/**\n * @file 自定义组件 - 支持多列渲染\n */\nexport default defineComponent({\n name: 'HGroup',\n components: {\n VirtualGroup,\n },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<GroupSlots>,\n setup(props, ctx) {\n const virtualGroupRef = ref<Record<string, any> | undefined>();\n const virtualTag = computed(() => {\n const { tag, t } = props;\n return specialComponents[t!]?.tag || tag;\n });\n const virtualSlots = computed(() => {\n const { t, slots } = props;\n return specialComponents[t!]?.slots?.(slots);\n });\n const tagRef = computed(() => virtualGroupRef.value?.tagRef);\n /** 容器注入值 */\n const wrapper = getProvideValue();\n const finalConfig = computed(() => {\n const { config } = props;\n // 如果函数且提供了 formRef 时, formRef 获取失败时不渲染\n // 防止重复渲染一次导致 getOptions 重复请求\n if (typeof config === 'function' && props.getFormRef && !props.getFormRef?.()) return [];\n return typeof config === 'function' ? coverObjOption2Arr<any[]>(config({ query: props.query, wrapper, formRef: props.getFormRef?.() })) : coverObjOption2Arr<any[]>(config);\n });\n /** 将对象形式的配置项转为数组 */\n function coverObjOption2Arr<T>(opt: any): T {\n if (isPlainObject(opt)) {\n const r: any[] = [];\n Object.entries(opt).forEach(([key, value]) => {\n value.field = key;\n r.push(value);\n });\n return r as unknown as T;\n }\n opt.forEach((o: any) => !o.field && o.fields && (o[REWRITE_FIELD_KEY] = o.fields.join(',')));\n return opt as unknown as T;\n }\n /** 对 group 组件特殊处理 */\n function getComponent2(name: string) {\n return name === 'group' || specialComponents[name] ? 'HGroup' : getComponent(name);\n }\n\n const emitter = useEmitter(wrapper);\n props.hooks?.created?.({ props, wrapper, ...emitter });\n\n return {\n hyphenate,\n getNode,\n REWRITE_FIELD_KEY,\n virtualGroupRef,\n virtualTag,\n virtualSlots,\n tagRef,\n wrapper,\n finalConfig,\n getComponent2,\n };\n },\n});\n</script>\n\n<style lang=\"css\" scoped></style>\n","<template>\n <!-- eslint-disable-next-line vue/no-unused-refs -->\n <VirtualGroup ref=\"virtualGroupRef\" v-bind=\"$attrs\" :tag=\"virtualTag\" :slots=\"virtualSlots || tagSlots\" :query=\"query\" :wrapper=\"wrapper\">\n <template v-if=\"slots?.prepend || ($slots as GroupSlots).prepend\">\n <component :is=\"getNode(slots?.prepend || ($slots as GroupSlots).prepend)\" :query=\"query\" :wrapper=\"wrapper\" />\n </template>\n <template v-if=\"slots?.default\">\n <component :is=\"slots.default\" :config=\"finalConfig\" :query=\"query\" :wrapper=\"wrapper\" />\n </template>\n <slot v-else-if=\"$slots.default\" :config=\"finalConfig\" :query=\"query\" />\n <template v-else>\n <template v-for=\"(item, key) of finalConfig\" :key=\"item.as || item.field || item[REWRITE_FIELD_KEY] || key\">\n <component :is=\"getComponent2(item.t)!\" v-if=\"item\" v-bind=\"item\" :field=\"item.as || item.field || item[REWRITE_FIELD_KEY] || key\" :query=\"query\" />\n </template>\n </template>\n <template v-if=\"slots?.append || ($slots as GroupSlots).append\">\n <component :is=\"getNode(slots?.append || ($slots as GroupSlots).append)\" :query=\"query\" :wrapper=\"wrapper\" />\n </template>\n </VirtualGroup>\n</template>\n\n<script lang=\"tsx\">\nimport { get, getNode, getProvideValue, hasOwn, hyphenate, isPlainObject, useEmitter, usePlain } from '@xiaohaih/json-form-core';\nimport { CellGroup as VanCellGroup } from 'vant';\nimport type { FunctionalComponent, SlotsType } from 'vue';\nimport { computed, defineComponent, markRaw, ref, watch } from 'vue';\nimport { pick } from '../../src/utils';\nimport { getComponent } from './assist';\nimport type { GroupSlots } from './types';\nimport { groupEmitsPrivate as emits, groupPropsPrivate as props } from './types';\nimport VirtualGroup from './virtual-group.vue';\n\n/** 当 field 不存在, 但 fields 存在时, 合并 fields 到对象上的 key */\nconst REWRITE_FIELD_KEY = '__field__' as const;\n/** 特殊类型可以直接复用组件的 */\nconst specialComponents: Record<string, {\n /** 重渲染的组件 */\n tag: any;\n /** 该组件所拥有的插槽(默认插槽不用定义) */\n slots?: (slots: Record<string, any> | undefined) => Record<string, any> | undefined;\n}> = {\n 'cell-group': {\n tag: markRaw(VanCellGroup),\n slots: (slots) => slots?.title ? { title: slots.title } : undefined,\n },\n};\n\n/**\n * @file 自定义组件 - 支持多列渲染\n */\nexport default defineComponent({\n name: 'HGroup',\n components: {\n VirtualGroup,\n },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<GroupSlots>,\n setup(props, ctx) {\n const virtualGroupRef = ref<Record<string, any> | undefined>();\n const virtualTag = computed(() => {\n const { tag, t } = props;\n return specialComponents[t!]?.tag || tag;\n });\n const virtualSlots = computed(() => {\n const { t, slots } = props;\n return specialComponents[t!]?.slots?.(slots);\n });\n const tagRef = computed(() => virtualGroupRef.value?.tagRef);\n /** 容器注入值 */\n const wrapper = getProvideValue();\n const finalConfig = computed(() => {\n const { config } = props;\n // 如果函数且提供了 formRef 时, formRef 获取失败时不渲染\n // 防止重复渲染一次导致 getOptions 重复请求\n if (typeof config === 'function' && props.getFormRef && !props.getFormRef?.()) return [];\n return typeof config === 'function' ? coverObjOption2Arr<any[]>(config({ query: props.query, wrapper, formRef: props.getFormRef?.() })) : coverObjOption2Arr<any[]>(config);\n });\n /** 将对象形式的配置项转为数组 */\n function coverObjOption2Arr<T>(opt: any): T {\n if (isPlainObject(opt)) {\n const r: any[] = [];\n Object.entries(opt).forEach(([key, value]) => {\n value.field = key;\n r.push(value);\n });\n return r as unknown as T;\n }\n opt.forEach((o: any) => !o.field && o.fields && (o[REWRITE_FIELD_KEY] = o.fields.join(',')));\n return opt as unknown as T;\n }\n /** 对 group 组件特殊处理 */\n function getComponent2(name: string) {\n return name === 'group' || specialComponents[name] ? 'HGroup' : getComponent(name);\n }\n\n const emitter = useEmitter(wrapper);\n props.hooks?.created?.({ props, wrapper, ...emitter });\n\n return {\n hyphenate,\n getNode,\n REWRITE_FIELD_KEY,\n virtualGroupRef,\n virtualTag,\n virtualSlots,\n tagRef,\n wrapper,\n finalConfig,\n getComponent2,\n };\n },\n});\n</script>\n\n<style lang=\"css\" scoped></style>\n","import type { CamelCase, Obj2Props, PlainProps, usePlain } from '@xiaohaih/json-form-core';\nimport { plainProps } from '@xiaohaih/json-form-core';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { groupPropsGeneric, GroupSlots } from '../group/index';\nimport { groupProps } from '../group/index';\nimport type { ComponentType } from '../share';\n\n/** 组件传参 - 私有 */\nexport function dynamicGroupPropsGeneric<Query extends Record<string, any>, OptionQuery extends Record<string, any>>() {\n return {\n ...plainProps as PlainProps<Query, OptionQuery>,\n /** 当前组件类型(防止被继承, 主动声明) */\n t: { type: String },\n /** 渲染的标签 */\n tag: { type: [Object, String, Array, Function] as PropType<any>, default: 'div' },\n /** 渲染的子条件 */\n config: { type: [Object, Array, Function] as PropType<any> },\n /**\n * 如果是组件是存在于数组中的, 需要传递一个唯一键, 读取当前对象中的某个值\n * 防止依赖本数组其它下标中的值时, 如果前一项被删除, 导致依赖误触发\n * 也是作为循环时唯一 key\n *\n * @example\n * ``` ts\n * // 当表单项根据 query.users 动态生成时, 想保证某些情况下依赖不会产生错误\n * // 可传递 uniqueKey: 'id', 此时依赖判断会以条件项的 user[].id 的值做唯一值判断\n * const query = { users: [{ id: '1', name: '', value: '' }, { id: '2', name: '', value: '' }, ...] }\n * ```\n */\n uniqueKey: { type: String },\n /** 传递给每行表单项 DOM 节点的属性 */\n contentProps: { type: Object as PropType<Partial<Record<'class' | 'style', string | Record<string, any> | any[]>>> },\n /** 传递给组件的插槽 - 重写声明 */\n slots: { type: Object as PropType<DynamicGroupSlots<Query, OptionQuery>> },\n /** 传递给动态渲染组件的插槽 */\n itemSlots: { type: Object as PropType<{\n /** 在动态表单项前渲染 */\n prepend?: ComponentType<{ query: Query; checked: any[]; index: number; plain: ReturnType<typeof usePlain> }>;\n /** 在动态表单项后渲染 */\n append?: ComponentType<{ query: Query; checked: any[]; index: number; plain: ReturnType<typeof usePlain> }>;\n }>, default: () => ({}) },\n } as const;\n}\n/** 组件传参 - 私有 */\nexport const dynamicGroupPropsPrivate = dynamicGroupPropsGeneric();\n/** 组件传参 - 外部调用 */\n\nexport const dynamicGroupProps = dynamicGroupPropsPrivate;\nexport type DynamicGroupProps<Query extends Record<string, any>, OptionQuery extends Record<string, any>> = ExtractPublicPropTypes<ReturnType<typeof dynamicGroupPropsGeneric<Query, OptionQuery>>>;\n\n/** 组件事件 - 私有 */\nexport function dynamicGroupEmitsGeneric<T>() {\n return {\n };\n}\n/** 组件事件 - 私有 */\nexport const dynamicGroupEmitsPrivate = dynamicGroupEmitsGeneric();\n/** 组件事件 - 外部调用 */\nexport const dynamicGroupEmits = dynamicGroupEmitsPrivate;\nexport type DynamicGroupEmits<T> = ReturnType<typeof dynamicGroupEmitsGeneric<T>>;\n\nexport interface DynamicGroupSlots<Query extends Record<string, any> = any, OptionQuery extends Record<string, any> = any> {\n /** 在表单项前渲染 */\n prepend?: ComponentType<{ query: Query; checked: any[]; plain: ReturnType<typeof usePlain> }>;\n /** 在表单项后渲染 */\n append?: ComponentType<{ query: Query; checked: any[]; plain: ReturnType<typeof usePlain> }>;\n}\n","<template>\n <VirtualGroup ref=\"virtualGroupRef\" :tag=\"tag\">\n <template v-if=\"slots?.prepend || ($slots as DynamicGroupSlots).prepend\">\n <component :is=\"getNode(slots?.prepend || ($slots as DynamicGroupSlots).prepend)\" :query=\"query\" :checked=\"plain.checked.value\" :plain=\"plain\" />\n </template>\n <template v-for=\"(opt, idx) of finalConfig\" :key=\"opt.uniqueValue\">\n <div v-bind=\"contentProps\">\n <component :is=\"itemSlots.prepend\" :query=\"query\" :checked=\"plain.checked.value\" :index=\"idx\" :plain=\"plain\" />\n <template v-for=\"(item) of opt.options\" :key=\"`${field}.${idx}.${item.field || item[REWRITE_FIELD_KEY]}`\">\n <component :is=\"getComponent2(item.t)!\" v-if=\"item\" v-bind=\"item\" :unique-value=\"opt.uniqueValue\" :field=\"`${field}.${idx}.${item.field || item[REWRITE_FIELD_KEY]}`\" :query=\"query\" :parent-query=\"plain.checked.value[idx]\" />\n </template>\n <component :is=\"itemSlots.append\" :query=\"query\" :checked=\"plain.checked.value\" :index=\"idx\" :plain=\"plain\" />\n </div>\n </template>\n <template v-if=\"slots?.append || ($slots as DynamicGroupSlots).append\">\n <component :is=\"getNode(slots?.append || ($slots as DynamicGroupSlots).append)\" :query=\"query\" :checked=\"plain.checked.value\" :plain=\"plain\" />\n </template>\n </VirtualGroup>\n</template>\n\n<script lang=\"tsx\">\nimport type { PlainProps } from '@xiaohaih/json-form-core';\nimport { defineCommonMethod, get, getNode, getProvideValue, hyphenate, isPlainObject, set, usePlain } from '@xiaohaih/json-form-core';\nimport type { ExtractPublicPropTypes, Ref, SlotsType } from 'vue';\nimport { computed, defineComponent, inject, markRaw, ref, watch } from 'vue';\nimport { pick } from '../../src/utils';\nimport { getComponent, HGroup } from '../group/index';\nimport VirtualGroup from '../group/virtual-group.vue';\nimport type { DynamicGroupSlots } from './types';\nimport { dynamicGroupEmitsPrivate as emits, dynamicGroupPropsPrivate as props } from './types';\n\ntype Option = Omit<ExtractPublicPropTypes<PlainProps<Record<string, any>, Record<string, any>>>, 'query'> & { t: string; [REWRITE_FIELD_KEY]: string };\n\nlet globalId = 0;\n/** 当 field 不存在, 但 fields 存在时, 合并 fields 到对象上的 key */\nconst REWRITE_FIELD_KEY = '__field__' as const;\n\n/**\n * @file 自定义组件 - 动态删减组件(对应动态表单)\n */\nexport default defineComponent({\n name: 'HDynamicGroup',\n components: {\n VirtualGroup,\n },\n props,\n emits,\n slots: Object as SlotsType<DynamicGroupSlots>,\n setup(props, ctx) {\n const virtualGroupRef = ref<Record<string, any> | undefined>();\n const tagRef = computed(() => virtualGroupRef.value?.tagRef);\n const plain = usePlain(props);\n const checked = plain.checked as Ref<Record<string, any>[] | undefined>;\n\n // /** watch 版本的配置项, watch 自带旧值记录, 方便做优化 */\n // const finalConfig = ref<{ uniqueValue: string | number; options: Option[] }[]>([]);\n // watch(\n // [() => checked.value && [...checked.value], () => props.config],\n // ([value, config], oldVal) => {\n // if (!value?.length) return finalConfig.value = [];\n // const { uniqueKey } = props;\n // const isFunc = typeof config === 'function';\n // const arr = !isFunc && coverObjOption2Arr<Option[]>(config);\n // finalConfig.value = value.map((o, i) => ({\n // uniqueValue: uniqueKey ? o[uniqueKey] : getId(o, oldVal?.[0], i),\n // options: isFunc ? coverObjOption2Arr<Option[]>(config({ item: o, index: i, query: props.query })) : arr as Option[],\n // }));\n // },\n // { immediate: true },\n // );\n // /**\n // * 获取唯一 id, 如果与旧引用相同, 则复用唯一 id(配合 finalConfig - watch 版本使用)\n // * (为动态新增的表单项做的优化, 不然可以用下方的计算属性(finalConfig))\n // */\n // function getId(val: Record<string, any>, oldVal: Record<string, any>[] | undefined, idx: number) {\n // return oldVal?.[idx] === val ? finalConfig.value[idx].uniqueValue : ++globalId;\n // }\n /** 由于计算属性不似 watch 有上条数据, 因为手动记录 */\n let configSnapshot = {\n /** 记录每行配置项的唯一值集合 */\n configUniqueValue: [] as any[],\n /** 记录每行数据的值集合 */\n checkedValue: [] as any[],\n };\n /** 计算属性版本的 config 配置项(防止生成的配置项中用了响应式变量, 不在计算属性中生成无法捕捉到) */\n const finalConfig = computed(() => {\n const { config } = props;\n if (!config) return [];\n const value = checked.value;\n if (!value?.length) return [];\n const isFunc = typeof config === 'function';\n const arr = !isFunc && coverObjOption2Arr<Option[]>(config);\n const { uniqueKey } = props;\n const result = value.map((o, i) => ({ uniqueValue: uniqueKey ? o[uniqueKey] : getId(o, i), options: isFunc ? coverObjOption2Arr<Option[]>(config({ item: o, index: i, checked: value, query: props.query, plain })) : arr as Option[] }));\n // eslint-disable-next-line vue/no-side-effects-in-computed-properties\n configSnapshot.configUniqueValue = result.map((r) => r.uniqueValue);\n // eslint-disable-next-line vue/no-side-effects-in-computed-properties\n configSnapshot.checkedValue = [...value];\n return result;\n });\n /**\n * 获取唯一 id, 如果与旧引用相同, 则复用唯一 id(配合 finalConfig - computed 版本使用)\n * (为动态新增的表单项做的优化, 不然可以用下方的计算属性(finalConfig))\n */\n function getId(val: Record<string, any>, idx: number) {\n return configSnapshot.checkedValue[idx] === val ? configSnapshot.configUniqueValue[idx] : ++globalId;\n }\n /** 将对象形式的配置项转为数组 */\n function coverObjOption2Arr<T>(opt: any): T {\n if (isPlainObject(opt)) {\n const r: any[] = [];\n Object.entries(opt).forEach(([key, value]) => {\n value.field = key;\n r.push(value);\n });\n return r as unknown as T;\n }\n opt.forEach((o: any) => !o.field && o.fields && (o[REWRITE_FIELD_KEY] = o.fields.join(',')));\n return opt as unknown as T;\n }\n\n function getComponent2(name: string) {\n return name === 'dynamic-group' ? 'HDynamicGroup' : name === 'group' ? HGroup : getComponent(name);\n }\n\n return {\n hyphenate,\n getNode,\n REWRITE_FIELD_KEY,\n virtualGroupRef,\n tagRef,\n plain,\n finalConfig,\n getComponent2,\n };\n },\n});\n</script>\n\n<style lang=\"css\" scoped></style>\n","<template>\n <VirtualGroup ref=\"virtualGroupRef\" :tag=\"tag\">\n <template v-if=\"slots?.prepend || ($slots as DynamicGroupSlots).prepend\">\n <component :is=\"getNode(slots?.prepend || ($slots as DynamicGroupSlots).prepend)\" :query=\"query\" :checked=\"plain.checked.value\" :plain=\"plain\" />\n </template>\n <template v-for=\"(opt, idx) of finalConfig\" :key=\"opt.uniqueValue\">\n <div v-bind=\"contentProps\">\n <component :is=\"itemSlots.prepend\" :query=\"query\" :checked=\"plain.checked.value\" :index=\"idx\" :plain=\"plain\" />\n <template v-for=\"(item) of opt.options\" :key=\"`${field}.${idx}.${item.field || item[REWRITE_FIELD_KEY]}`\">\n <component :is=\"getComponent2(item.t)!\" v-if=\"item\" v-bind=\"item\" :unique-value=\"opt.uniqueValue\" :field=\"`${field}.${idx}.${item.field || item[REWRITE_FIELD_KEY]}`\" :query=\"query\" :parent-query=\"plain.checked.value[idx]\" />\n </template>\n <component :is=\"itemSlots.append\" :query=\"query\" :checked=\"plain.checked.value\" :index=\"idx\" :plain=\"plain\" />\n </div>\n </template>\n <template v-if=\"slots?.append || ($slots as DynamicGroupSlots).append\">\n <component :is=\"getNode(slots?.append || ($slots as DynamicGroupSlots).append)\" :query=\"query\" :checked=\"plain.checked.value\" :plain=\"plain\" />\n </template>\n </VirtualGroup>\n</template>\n\n<script lang=\"tsx\">\nimport type { PlainProps } from '@xiaohaih/json-form-core';\nimport { defineCommonMethod, get, getNode, getProvideValue, hyphenate, isPlainObject, set, usePlain } from '@xiaohaih/json-form-core';\nimport type { ExtractPublicPropTypes, Ref, SlotsType } from 'vue';\nimport { computed, defineComponent, inject, markRaw, ref, watch } from 'vue';\nimport { pick } from '../../src/utils';\nimport { getComponent, HGroup } from '../group/index';\nimport VirtualGroup from '../group/virtual-group.vue';\nimport type { DynamicGroupSlots } from './types';\nimport { dynamicGroupEmitsPrivate as emits, dynamicGroupPropsPrivate as props } from './types';\n\ntype Option = Omit<ExtractPublicPropTypes<PlainProps<Record<string, any>, Record<string, any>>>, 'query'> & { t: string; [REWRITE_FIELD_KEY]: string };\n\nlet globalId = 0;\n/** 当 field 不存在, 但 fields 存在时, 合并 fields 到对象上的 key */\nconst REWRITE_FIELD_KEY = '__field__' as const;\n\n/**\n * @file 自定义组件 - 动态删减组件(对应动态表单)\n */\nexport default defineComponent({\n name: 'HDynamicGroup',\n components: {\n VirtualGroup,\n },\n props,\n emits,\n slots: Object as SlotsType<DynamicGroupSlots>,\n setup(props, ctx) {\n const virtualGroupRef = ref<Record<string, any> | undefined>();\n const tagRef = computed(() => virtualGroupRef.value?.tagRef);\n const plain = usePlain(props);\n const checked = plain.checked as Ref<Record<string, any>[] | undefined>;\n\n // /** watch 版本的配置项, watch 自带旧值记录, 方便做优化 */\n // const finalConfig = ref<{ uniqueValue: string | number; options: Option[] }[]>([]);\n // watch(\n // [() => checked.value && [...checked.value], () => props.config],\n // ([value, config], oldVal) => {\n // if (!value?.length) return finalConfig.value = [];\n // const { uniqueKey } = props;\n // const isFunc = typeof config === 'function';\n // const arr = !isFunc && coverObjOption2Arr<Option[]>(config);\n // finalConfig.value = value.map((o, i) => ({\n // uniqueValue: uniqueKey ? o[uniqueKey] : getId(o, oldVal?.[0], i),\n // options: isFunc ? coverObjOption2Arr<Option[]>(config({ item: o, index: i, query: props.query })) : arr as Option[],\n // }));\n // },\n // { immediate: true },\n // );\n // /**\n // * 获取唯一 id, 如果与旧引用相同, 则复用唯一 id(配合 finalConfig - watch 版本使用)\n // * (为动态新增的表单项做的优化, 不然可以用下方的计算属性(finalConfig))\n // */\n // function getId(val: Record<string, any>, oldVal: Record<string, any>[] | undefined, idx: number) {\n // return oldVal?.[idx] === val ? finalConfig.value[idx].uniqueValue : ++globalId;\n // }\n /** 由于计算属性不似 watch 有上条数据, 因为手动记录 */\n let configSnapshot = {\n /** 记录每行配置项的唯一值集合 */\n configUniqueValue: [] as any[],\n /** 记录每行数据的值集合 */\n checkedValue: [] as any[],\n };\n /** 计算属性版本的 config 配置项(防止生成的配置项中用了响应式变量, 不在计算属性中生成无法捕捉到) */\n const finalConfig = computed(() => {\n const { config } = props;\n if (!config) return [];\n const value = checked.value;\n if (!value?.length) return [];\n const isFunc = typeof config === 'function';\n const arr = !isFunc && coverObjOption2Arr<Option[]>(config);\n const { uniqueKey } = props;\n const result = value.map((o, i) => ({ uniqueValue: uniqueKey ? o[uniqueKey] : getId(o, i), options: isFunc ? coverObjOption2Arr<Option[]>(config({ item: o, index: i, checked: value, query: props.query, plain })) : arr as Option[] }));\n // eslint-disable-next-line vue/no-side-effects-in-computed-properties\n configSnapshot.configUniqueValue = result.map((r) => r.uniqueValue);\n // eslint-disable-next-line vue/no-side-effects-in-computed-properties\n configSnapshot.checkedValue = [...value];\n return result;\n });\n /**\n * 获取唯一 id, 如果与旧引用相同, 则复用唯一 id(配合 finalConfig - computed 版本使用)\n * (为动态新增的表单项做的优化, 不然可以用下方的计算属性(finalConfig))\n */\n function getId(val: Record<string, any>, idx: number) {\n return configSnapshot.checkedValue[idx] === val ? configSnapshot.configUniqueValue[idx] : ++globalId;\n }\n /** 将对象形式的配置项转为数组 */\n function coverObjOption2Arr<T>(opt: any): T {\n if (isPlainObject(opt)) {\n const r: any[] = [];\n Object.entries(opt).forEach(([key, value]) => {\n value.field = key;\n r.push(value);\n });\n return r as unknown as T;\n }\n opt.forEach((o: any) => !o.field && o.fields && (o[REWRITE_FIELD_KEY] = o.fields.join(',')));\n return opt as unknown as T;\n }\n\n function getComponent2(name: string) {\n return name === 'dynamic-group' ? 'HDynamicGroup' : name === 'group' ? HGroup : getComponent(name);\n }\n\n return {\n hyphenate,\n getNode,\n REWRITE_FIELD_KEY,\n virtualGroupRef,\n tagRef,\n plain,\n finalConfig,\n getComponent2,\n };\n },\n});\n</script>\n\n<style lang=\"css\" scoped></style>\n","import type { ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport { registerComponent } from '../group/index';\nimport HDynamicGroup from './index.vue';\n// 为防止循环依赖(dynamic-group -> group -> assist -> dynamic-group),\n// 异步注册组件\nregisterComponent('dynamic-group', HDynamicGroup);\n\nexport { HDynamicGroup };\nexport type HDynamicGroupInstance = ComponentExposed<typeof HDynamicGroup>;\nexport * from './types';\n","/**\n * 表单包装器类型定义文件\n *\n * 定义表单组件所需的各种类型、属性和事件\n */\nimport type { CamelCase, WrapperProps as CoreWrapperProps, emits2props, Obj2Props, useWrapper, WrapperArrayable } from '@xiaohaih/json-form-core';\nimport { wrapperProps as coreWrapperProps, emits2obj } from '@xiaohaih/json-form-core';\nimport { Form as VanForm } from 'vant';\nimport type { Component, ExtractPublicPropTypes, PropType } from 'vue';\nimport type { ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type { defineOption } from '../../src/assist';\nimport type { ComponentType } from '../share';\n\n/**\n * Vant 表单属性对象\n * 从 Vant Form 组件中提取属性定义\n */\nconst vantFormProps = VanForm.props as unknown as Obj2Props<ComponentProps<typeof VanForm>>;\n/**\n * Vant 表单事件对象\n */\nconst vantFormEmits = emits2obj(VanForm.emits);\n\n/** 表单属性生成函数 */\nexport function formPropsGeneric<T extends Record<string, any> = Record<string, any>, O extends Record<keyof T, any> = Record<keyof T, any>>() {\n type _Prop = typeof vantFormProps & ReturnType<typeof emits2props<null, [NonNullable<typeof vantFormEmits>]>> & {\n class: { type: PropType<string | Record<string, any> | any[]> };\n style: { type: PropType<string | Record<string, any> | any[]> };\n };\n\n return {\n ...{} as Omit<_Prop, 'model'>,\n ...coreWrapperProps,\n /** 数据源 - 表单项配置对象 */\n config: { type: [Object, Array, Function] as PropType<any[] | ((...args: any[]) => any) | Record<string, any>> },\n } as const;\n}\n/** 表单组件内部使用的属性定义 */\nexport const formPropsPrivate = formPropsGeneric();\n\n/**\n * 表单组件对外暴露的属性定义\n */\nexport const formProps = {\n ...vantFormProps,\n ...formPropsPrivate,\n};\n\n/**\n * 表单事件生成函数 - 泛型版本\n */\nexport function formEmitsGeneric<T>() {\n return {\n ...{} as typeof vantFormEmits,\n /** 重写提交事件 - 覆盖传参 */\n submit: (params: Record<string, any>) => true,\n };\n}\n\n/** 表单组件内部使用的事件定义 */\nexport const formEmitsPrivate = formEmitsGeneric();\n\n/**\n * 表单组件对外暴露的事件定义\n */\nexport const formEmits = {\n ...vantFormEmits,\n ...formEmitsPrivate,\n} as typeof vantFormEmits & typeof formEmitsPrivate;\n\n/**\n * 表单事件类型定义\n */\nexport type FormEmits<T> = ReturnType<typeof formEmitsGeneric<T>>;\n\n/**\n * 表单插槽接口\n */\nexport interface FormSlots<Query extends Record<string, any>, OptionQuery extends Partial<Record<keyof Query, any>>> {\n /** 前置插槽 - 在表单项之前 */\n prepend?: ComponentType<FormSlotProps<Query, OptionQuery>>;\n /** 默认插槽 - 在表单项之后 */\n default?: ComponentType<FormSlotProps<Query, OptionQuery>>;\n}\n\n/**\n * 表单插槽属性接口\n */\nexport interface FormSlotProps<Query extends Record<string, any>, OptionQuery extends Partial<Record<keyof Query, any>>> {\n /** 获取表单属性的方法 */\n props: ExtractPublicPropTypes<ReturnType<typeof formPropsGeneric<Query, OptionQuery>>>;\n /** 表单包装器实例 */\n wrapper: ReturnType<typeof useWrapper>;\n}\n","<template>\n <HGroup v-bind=\"$attrs\" ref=\"groupRef\" :disabled=\"disabled\" :config=\"config\" :model=\"query\" :query=\"query\" :get-form-ref=\"getFormRef\" :tag=\"VanForm\" v-on=\"events\" @submit=\"submitHandle\">\n <template v-if=\"$slots.prepend\" #prepend>\n <slot name=\"prepend\" v-bind=\"slotProps\" />\n </template>\n <template #append>\n <slot v-bind=\"slotProps\" />\n </template>\n </HGroup>\n</template>\n\n<script lang=\"ts\">\nimport { execOnCallback, useWrapper } from '@xiaohaih/json-form-core';\nimport type { FormInstance } from 'vant';\nimport { Form as VanForm } from 'vant';\nimport type { Ref, SlotsType } from 'vue';\nimport { computed, defineComponent, Fragment, markRaw, nextTick, onMounted, ref, watch } from 'vue';\nimport type { ComponentExposed } from 'vue-component-type-helpers';\nimport { pick } from '../../src/utils';\nimport { HGroup } from '../group/index';\nimport type { FormSlots } from './types';\nimport { formEmitsPrivate as emits, formPropsPrivate as props } from './types';\n\n/**\n * @file 容器\n */\nexport default defineComponent({\n name: 'HForm',\n components: {\n HGroup,\n },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<FormSlots<any, any>>,\n setup(props, ctx) {\n const groupRef = ref<ComponentExposed<typeof HGroup>>();\n const formRef = computed(() => groupRef.value?.tagRef as FormInstance | undefined);\n // @ts-expect-error 兼容 vue2.x\n const events = computed(() => ctx.listeners || {});\n\n /** 覆盖 van-form 的 submit 事件 */\n function submitHandle(params: Record<any, string>) {\n ctx.emit('submit', wrapper.getQuery());\n }\n\n /** 验证 vant 的表单 */\n function validate(...args: Parameters<FormInstance['validate']>) {\n return formRef.value!.validate(...args);\n }\n /** 验证 vant 的表单字段 */\n function validateField(...args: Parameters<FormInstance['validate']>) {\n return formRef.value!.validate(...args);\n }\n /** 清除 vant 的表单验证 */\n function clearValidate(...args: Parameters<FormInstance['resetValidation']>) {\n return formRef.value!.resetValidation(...args);\n }\n /** 重置 vant 的表单验证 */\n function resetValidation(...args: Parameters<FormInstance['resetValidation']>) {\n return formRef.value!.resetValidation(...args);\n }\n /** 获取所有表单项当前的值 */\n function getValues(...args: Parameters<FormInstance['getValues']>) {\n return formRef.value!.getValues(...args);\n }\n /** 获取所有表单项的校验状态 */\n function getValidationStatus(...args: Parameters<FormInstance['getValidationStatus']>) {\n return formRef.value!.getValidationStatus(...args);\n }\n /** 滚动到指定表单字段 */\n function scrollToField(...args: Parameters<FormInstance['scrollToField']>) {\n return formRef.value!.scrollToField(...args);\n }\n /** 获取表单实例 */\n function getFormRef() {\n return formRef.value;\n }\n const wrapper = useWrapper(props, {\n formRef,\n });\n /** 触发提交事件 */\n function submit() {\n formRef.value?.submit();\n }\n /** 重置 */\n function reset() {\n wrapper.reset();\n setTimeout(clearValidate);\n }\n\n const slotProps = computed(() => ({ props, wrapper }));\n\n return {\n groupRef,\n VanForm: markRaw(VanForm),\n formRef: formRef as Ref<ComponentExposed<typeof VanForm>>,\n events,\n submitHandle,\n ...wrapper,\n validate,\n validateField,\n clearValidate,\n resetValidation,\n submit,\n reset,\n getValues,\n getValidationStatus,\n scrollToField,\n getFormRef,\n slotProps,\n };\n },\n});\n</script>\n\n<style></style>\n","<template>\n <HGroup v-bind=\"$attrs\" ref=\"groupRef\" :disabled=\"disabled\" :config=\"config\" :model=\"query\" :query=\"query\" :get-form-ref=\"getFormRef\" :tag=\"VanForm\" v-on=\"events\" @submit=\"submitHandle\">\n <template v-if=\"$slots.prepend\" #prepend>\n <slot name=\"prepend\" v-bind=\"slotProps\" />\n </template>\n <template #append>\n <slot v-bind=\"slotProps\" />\n </template>\n </HGroup>\n</template>\n\n<script lang=\"ts\">\nimport { execOnCallback, useWrapper } from '@xiaohaih/json-form-core';\nimport type { FormInstance } from 'vant';\nimport { Form as VanForm } from 'vant';\nimport type { Ref, SlotsType } from 'vue';\nimport { computed, defineComponent, Fragment, markRaw, nextTick, onMounted, ref, watch } from 'vue';\nimport type { ComponentExposed } from 'vue-component-type-helpers';\nimport { pick } from '../../src/utils';\nimport { HGroup } from '../group/index';\nimport type { FormSlots } from './types';\nimport { formEmitsPrivate as emits, formPropsPrivate as props } from './types';\n\n/**\n * @file 容器\n */\nexport default defineComponent({\n name: 'HForm',\n components: {\n HGroup,\n },\n inheritAttrs: false,\n props,\n emits,\n slots: Object as SlotsType<FormSlots<any, any>>,\n setup(props, ctx) {\n const groupRef = ref<ComponentExposed<typeof HGroup>>();\n const formRef = computed(() => groupRef.value?.tagRef as FormInstance | undefined);\n // @ts-expect-error 兼容 vue2.x\n const events = computed(() => ctx.listeners || {});\n\n /** 覆盖 van-form 的 submit 事件 */\n function submitHandle(params: Record<any, string>) {\n ctx.emit('submit', wrapper.getQuery());\n }\n\n /** 验证 vant 的表单 */\n function validate(...args: Parameters<FormInstance['validate']>) {\n return formRef.value!.validate(...args);\n }\n /** 验证 vant 的表单字段 */\n function validateField(...args: Parameters<FormInstance['validate']>) {\n return formRef.value!.validate(...args);\n }\n /** 清除 vant 的表单验证 */\n function clearValidate(...args: Parameters<FormInstance['resetValidation']>) {\n return formRef.value!.resetValidation(...args);\n }\n /** 重置 vant 的表单验证 */\n function resetValidation(...args: Parameters<FormInstance['resetValidation']>) {\n return formRef.value!.resetValidation(...args);\n }\n /** 获取所有表单项当前的值 */\n function getValues(...args: Parameters<FormInstance['getValues']>) {\n return formRef.value!.getValues(...args);\n }\n /** 获取所有表单项的校验状态 */\n function getValidationStatus(...args: Parameters<FormInstance['getValidationStatus']>) {\n return formRef.value!.getValidationStatus(...args);\n }\n /** 滚动到指定表单字段 */\n function scrollToField(...args: Parameters<FormInstance['scrollToField']>) {\n return formRef.value!.scrollToField(...args);\n }\n /** 获取表单实例 */\n function getFormRef() {\n return formRef.value;\n }\n const wrapper = useWrapper(props, {\n formRef,\n });\n /** 触发提交事件 */\n function submit() {\n formRef.value?.submit();\n }\n /** 重置 */\n function reset() {\n wrapper.reset();\n setTimeout(clearValidate);\n }\n\n const slotProps = computed(() => ({ props, wrapper }));\n\n return {\n groupRef,\n VanForm: markRaw(VanForm),\n formRef: formRef as Ref<ComponentExposed<typeof VanForm>>,\n events,\n submitHandle,\n ...wrapper,\n validate,\n validateField,\n clearValidate,\n resetValidation,\n submit,\n reset,\n getValues,\n getValidationStatus,\n scrollToField,\n getFormRef,\n slotProps,\n };\n },\n});\n</script>\n\n<style></style>\n","import type { CoreOption, getProvideValue } from '@xiaohaih/json-form-core';\nimport type { Form as VanForm } from 'vant';\nimport type { ExtractPublicPropTypes, PropType, Ref } from 'vue';\nimport { ref } from 'vue';\nimport type { ComponentExposed } from 'vue-component-type-helpers';\nimport type * as JSONFormTs from './interface';\n\n/** 对对象类型的泛型进行解析 - 推断出 query 和 optionsQuery */\ntype AssistOption<T extends Record<string, any>, O extends Partial<Record<keyof T, any>>> = {\n /** 添加问号是允许泛型声明的字段可以多过配置项内的字段 */\n [K in keyof T]?: JSONFormTs.JSONFormOption<T[K], T & TypeAll, O[K], O & TypeAll> | FalsyType;\n};\n/** 对数组类型的泛型进行解析 - 推断出 query 和 optionsQuery */\ntype AssistOptionArr<T extends Record<string, any>, O extends Record<keyof T, any>> = JSONFormTs.JSONFormOption<keyof T, CoreOption.Merge<T> & TypeAll, O[keyof O], CoreOption.Merge<Required<O>> & TypeAll>;\n/** 假值类型 */\ntype FalsyType = number | boolean | string | null | undefined;\n/** 允许调用任意字段 */\ntype TypeAll = Record<string | symbol | number, any>;\n\n/**\n * 定义配置项\n * 未补充泛型声明时, 不建议通过函数返回对象形式的配置项(声明会报错)\n */\nexport function defineOption<T extends Record<string, any>, O extends Partial<Record<keyof T, any>> = Partial<Record<keyof T, any>>>(config: (AssistOptionArr<T, O> | FalsyType)[]): AssistOptionArr<T, O>[];\nexport function defineOption<T extends Record<string, any>, O extends Partial<Record<keyof T, any>> = Partial<Record<keyof T, any>>>(config: (opt: DefineOptionParams<T, O>) => (AssistOptionArr<T, O> | FalsyType)[]): AssistOptionArr<T, O>[];\nexport function defineOption<T extends Record<string, any>, O extends Partial<Record<keyof T, any>> = Partial<Record<keyof T, any>>>(config: AssistOption<T, O>): AssistOption<T, O>;\nexport function defineOption<T extends Record<string, any>, O extends Partial<Record<keyof T, any>> = Partial<Record<keyof T, any>>>(config: (opt: DefineOptionParams<T, O>) => AssistOption<T, O>): AssistOption<T, O>;\nexport function defineOption(config: any) {\n return config;\n}\n\n/** defineOption 为函数时所携带的参数 */\nexport interface DefineOptionParams<Query extends Record<string, any>, Options extends Record<string, any>> {\n /** 表单 model 对象 */\n query: Query;\n /** 表单封装的一些参数 */\n wrapper: Pick<NonNullable<ReturnType<typeof getProvideValue<Query, Options>>>, 'disabled' | 'readonly' | 'options' | 'reset'> | undefined;\n /** 表单实例 */\n formRef: ComponentExposed<typeof VanForm> | undefined;\n}\n","import type { CoreOption, GetOptions, getProvideValue, usePlain } from '@xiaohaih/json-form-core';\nimport type { CellGroupProps as VanCellGroupProps, Form as VanForm } from 'vant';\nimport type { Ref } from 'vue';\nimport type { ComponentExposed, ComponentProps } from 'vue-component-type-helpers';\nimport type {\n AreaProps as PureAreaProps,\n CascaderProps as PureCascaderProps,\n CheckboxGroupProps as PureCheckboxGroupProps,\n CheckboxProps as PureCheckboxProps,\n CustomRenderProps as PureCustomRenderProps,\n DatePickerProps as PureDatePickerProps,\n DateTimePickerGroupProps as PureDateTimePickerGroupProps,\n DatetimePickerProps as PureDatetimePickerProps,\n DynamicGroupProps as PureDynamicGroupProps,\n GroupProps as PureGroupProps,\n InputProps as PureInputProps,\n NumberKeyboardProps as PureNumberKeyboardProps,\n PasswordInputProps as PurePasswordInputProps,\n PickerProps as PurePickerProps,\n RadioGroupProps as PureRadioGroupProps,\n RadioProps as PureRadioProps,\n RateProps as PureRateProps,\n SignatureProps as PureSignatureProps,\n SliderProps as PureSliderProps,\n StepperProps as PureStepperProps,\n SwitchProps as PureSwitchProps,\n TimePickerProps as PureTimePickerProps,\n TreeSelectProps as PureTreeSelectProps,\n UploadProps as PureUploadProps,\n} from '../components/index';\nimport type { ComponentType } from '../components/share';\n\ntype BuiltInField<T = ''> = CoreOption.BuiltInField | keyof RewriteOption<any, any, any, any> | T;\n\n/** 重写下列选项(函数内导出的属性无法被推断出来) */\ninterface RewriteOption<Field, Query extends Record<string, any>, Option, OptionQuery extends Record<string, any>> {\n /** 提交的字段 */\n field?: Field;\n /** 提交的字段集(多选时, 每个下标对应的字段可能不一样)) */\n fields?: Field[];\n /** 数据源 */\n options?: Option;\n /** 获取数据源的方法 */\n getOptions?: GetOptions<Query, OptionQuery>;\n}\n\n/** 条件声明集合 */\nexport type JSONFormOption<Field, Query extends Record<string, any>, Option, OptionQuery extends Record<string, any>>\n = | AreaProps<Field, Query, Option, OptionQuery>\n | CascaderProps<Field, Query, Option, OptionQuery>\n | CheckboxGroupProps<Field, Query, Option, OptionQuery>\n | CheckboxProps<Field, Query, Option, OptionQuery>\n | CustomRenderProps<Field, Query, Option, OptionQuery>\n | DatePickerProps<Field, Query, Option, OptionQuery>\n | DateTimePickerGroupProps<Field, Query, Option, OptionQuery>\n | DatetimePickerProps<Field, Query, Option, OptionQuery>\n | DynamicGroupProps<Field, Query, Option, OptionQuery>\n | GroupProps<Field, Query, Option, OptionQuery>\n | CellGroupProps<Field, Query, Option, OptionQuery>\n | InputProps<Field, Query, Option, OptionQuery>\n | NumberKeyboardProps<Field, Query, Option, OptionQuery>\n | PasswordInputProps<Field, Query, Option, OptionQuery>\n | PickerProps<Field, Query, Option, OptionQuery>\n | RadioGroupProps<Field, Query, Option, OptionQuery>\n | RadioProps<Field, Query, Option, OptionQuery>\n | RateProps<Field, Query, Option, OptionQuery>\n | SignatureProps<Field, Query, Option, OptionQuery>\n | SliderProps<Field, Query, Option, OptionQuery>\n | StepperProps<Field, Query, Option, OptionQuery>\n | SwitchProps<Field, Query, Option, OptionQuery>\n | TimePickerProps<Field, Query, Option, OptionQuery>\n | TreeSelectProps<Field, Query, Option, OptionQuery>\n | UploadProps<Field, Query, Option, OptionQuery>;\n\nexport interface AreaProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureAreaProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'area';\n}\nexport interface CascaderProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureCascaderProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'cascader';\n}\nexport interface CheckboxGroupProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureCheckboxGroupProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'checkbox-group';\n}\nexport interface CheckboxProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureCheckboxProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'checkbox';\n}\nexport interface CustomRenderProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureCustomRenderProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'custom-render';\n}\nexport interface DatePickerProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureDatePickerProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'date-picker';\n}\nexport interface DateTimePickerGroupProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureDateTimePickerGroupProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'date-time-picker-group';\n}\nexport interface DatetimePickerProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureDatetimePickerProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n /**\n * @deprecated vant@3.x版本使用, vant@4.x版本使用 date-time-picker-group\n */\n t: 'datetime-picker';\n}\nexport interface DynamicGroupProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureDynamicGroupProps<Query, OptionQuery>, BuiltInField | 'config'>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'dynamic-group';\n /**\n * 渲染的子条件(重写该属性以补充声明)\n * 动态表单不是根级属性, 不应该暴露出来, 遂用 string 替代\n */\n config?: MaybeFunction<[{ item: Record<string, any>; index: number; checked: Record<string, any>[]; query: Query; plain: ReturnType<typeof usePlain> }], JSONFormOption<string, Query, Option, OptionQuery>[] | Record<keyof Query, JSONFormOption<string, Query, Option, OptionQuery>>>;\n}\nexport interface GroupProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureGroupProps<Query, OptionQuery>, BuiltInField | 'config' | 'getFormRef'>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'group';\n /** 渲染的子条件(重写该属性以补充声明) */\n config?: MaybeFunction<[{ query: Query; wrapper?: ReturnType<typeof getProvideValue<Query, OptionQuery, Ref<ComponentExposed<typeof VanForm>>>> }], JSONFormOption<Field, Query, Option, OptionQuery>[] | Record<keyof Query, JSONFormOption<Field, Query, Option, OptionQuery>>>;\n}\nexport interface CellGroupProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureGroupProps<Query, OptionQuery>, BuiltInField | 'config' | 'getFormRef' | 'slots' | 'tagSlots'>, RewriteOption<Field, Query, Option, OptionQuery>, Partial<VanCellGroupProps> {\n t: 'cell-group';\n /** 重写插槽声明 */\n slots?: PureGroupProps<Query, OptionQuery>['slots'] & {\n /** 自定义分组标题 */\n title?: ComponentType<{ query: Query; wrapper?: ReturnType<typeof getProvideValue<Query, OptionQuery, Ref<ComponentExposed<typeof VanForm>>>> }>;\n };\n /** 渲染的子条件(重写该属性以补充声明) */\n config?: MaybeFunction<[{ query: Query; wrapper?: ReturnType<typeof getProvideValue<Query, OptionQuery, Ref<ComponentExposed<typeof VanForm>>>> }], JSONFormOption<Field, Query, Option, OptionQuery>[] | Record<keyof Query, JSONFormOption<Field, Query, Option, OptionQuery>>>;\n}\nexport interface InputProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureInputProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'input';\n}\nexport interface NumberKeyboardProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureNumberKeyboardProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'number-keyboard';\n}\nexport interface PasswordInputProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PurePasswordInputProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'password-input';\n}\nexport interface PickerProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PurePickerProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'picker' | 'select';\n}\nexport interface RadioGroupProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureRadioGroupProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'radio-group';\n}\nexport interface RadioProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureRadioProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'radio';\n}\nexport interface RateProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureRateProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'rate';\n}\nexport interface SignatureProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureSignatureProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'signature';\n}\nexport interface SliderProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureSliderProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'slider';\n}\nexport interface StepperProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureStepperProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'stepper';\n}\nexport interface SwitchProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureSwitchProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'switch';\n}\nexport interface TimePickerProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureTimePickerProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'time-picker';\n}\nexport interface TreeSelectProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureTreeSelectProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'tree-select';\n}\nexport interface UploadProps<\n Field,\n Query extends Record<string, any>,\n Option,\n OptionQuery extends Record<string, any> = Record<string, any>,\n> extends Omit<PureUploadProps<Query, OptionQuery>, BuiltInField>, RewriteOption<Field, Query, Option, OptionQuery> {\n t: 'upload';\n}\n\nexport type MaybeFunction<TParams extends any[], TResult> = TResult | ((...args: TParams) => TResult);\n","/** 版本号 */\nexport const version = '0.0.1';\n"],"x_google_ignoreList":[0],"mappings":"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"}
|