workdesktop-ai 1.2.3 → 1.2.4

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.
Files changed (127) hide show
  1. package/dist/api-button/index.mjs +1 -1
  2. package/dist/auto-complete/index.mjs +1 -1
  3. package/dist/checkbox-list/index.mjs +1 -1
  4. package/dist/chunks/{ApiButton.vue_vue_type_script_setup_true_lang-3BjZSAPZ.mjs → ApiButton.vue_vue_type_script_setup_true_lang-GBEBLUxz.mjs} +2 -2
  5. package/dist/chunks/{ApiButton.vue_vue_type_script_setup_true_lang-3BjZSAPZ.mjs.map → ApiButton.vue_vue_type_script_setup_true_lang-GBEBLUxz.mjs.map} +1 -1
  6. package/dist/chunks/{AutoComplete-C6Nxatvt.mjs → AutoComplete-DqyhsqiS.mjs} +2 -2
  7. package/dist/chunks/{AutoComplete-C6Nxatvt.mjs.map → AutoComplete-DqyhsqiS.mjs.map} +1 -1
  8. package/dist/chunks/{CheckboxList-5AEx33r5.mjs → CheckboxList-RxJGe-LQ.mjs} +2 -2
  9. package/dist/chunks/{CheckboxList-5AEx33r5.mjs.map → CheckboxList-RxJGe-LQ.mjs.map} +1 -1
  10. package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-CXYH1Rlc.mjs → ConfirmButton.vue_vue_type_script_setup_true_lang-BPtvM5GB.mjs} +2 -2
  11. package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-CXYH1Rlc.mjs.map → ConfirmButton.vue_vue_type_script_setup_true_lang-BPtvM5GB.mjs.map} +1 -1
  12. package/dist/chunks/{DataForm-C6VLTSOm.mjs → DataForm-DYMderSS.mjs} +8 -7
  13. package/dist/chunks/{DataForm-C6VLTSOm.mjs.map → DataForm-DYMderSS.mjs.map} +1 -1
  14. package/dist/chunks/{DataGrid-Dd7n5JM7.mjs → DataGrid-DWAhwLVk.mjs} +3 -3
  15. package/dist/chunks/{DataGrid-Dd7n5JM7.mjs.map → DataGrid-DWAhwLVk.mjs.map} +1 -1
  16. package/dist/chunks/{DialogButton.vue_vue_type_script_setup_true_lang-CTXP79zc.mjs → DialogButton.vue_vue_type_script_setup_true_lang-ex2zYLZC.mjs} +2 -2
  17. package/dist/chunks/{DialogButton.vue_vue_type_script_setup_true_lang-CTXP79zc.mjs.map → DialogButton.vue_vue_type_script_setup_true_lang-ex2zYLZC.mjs.map} +1 -1
  18. package/dist/chunks/{Drawer-ucXKUecL.mjs → Drawer-BzdohcBg.mjs} +96 -90
  19. package/dist/chunks/Drawer-BzdohcBg.mjs.map +1 -0
  20. package/dist/chunks/{DrawerButton.vue_vue_type_script_setup_true_lang-DUda4p7_.mjs → DrawerButton.vue_vue_type_script_setup_true_lang-u5ifQw5k.mjs} +2 -2
  21. package/dist/chunks/{DrawerButton.vue_vue_type_script_setup_true_lang-DUda4p7_.mjs.map → DrawerButton.vue_vue_type_script_setup_true_lang-u5ifQw5k.mjs.map} +1 -1
  22. package/dist/chunks/{EditableGrid-CDeeVkaX.mjs → EditableGrid-e3wwCaem.mjs} +6 -5
  23. package/dist/chunks/{EditableGrid-CDeeVkaX.mjs.map → EditableGrid-e3wwCaem.mjs.map} +1 -1
  24. package/dist/chunks/Guide-AWaWvQoq.mjs +347 -0
  25. package/dist/chunks/Guide-AWaWvQoq.mjs.map +1 -0
  26. package/dist/chunks/Iframe-DcFFi0S9.mjs +128 -0
  27. package/dist/chunks/Iframe-DcFFi0S9.mjs.map +1 -0
  28. package/dist/chunks/{ImageUpload-CQA9XQ7Q.mjs → ImageUpload-BK7tbU2o.mjs} +5 -4
  29. package/dist/chunks/{ImageUpload-CQA9XQ7Q.mjs.map → ImageUpload-BK7tbU2o.mjs.map} +1 -1
  30. package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-oYaMH-CI.mjs → PromptButton.vue_vue_type_script_setup_true_lang-82Mxc2Qv.mjs} +2 -2
  31. package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-oYaMH-CI.mjs.map → PromptButton.vue_vue_type_script_setup_true_lang-82Mxc2Qv.mjs.map} +1 -1
  32. package/dist/chunks/{RadioList-BUWcP_Pk.mjs → RadioList-DuEeHumw.mjs} +2 -2
  33. package/dist/chunks/{RadioList-BUWcP_Pk.mjs.map → RadioList-DuEeHumw.mjs.map} +1 -1
  34. package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-xCw4QHCA.mjs +63 -0
  35. package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-xCw4QHCA.mjs.map +1 -0
  36. package/dist/chunks/{Select-uvFy7_NU.mjs → Select-MD3taMJo.mjs} +2 -2
  37. package/dist/chunks/{Select-uvFy7_NU.mjs.map → Select-MD3taMJo.mjs.map} +1 -1
  38. package/dist/chunks/{Station-BTP0SbBg.mjs → Station-2m9uznh3.mjs} +2 -2
  39. package/dist/chunks/{Station-BTP0SbBg.mjs.map → Station-2m9uznh3.mjs.map} +1 -1
  40. package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-DUhXAGs2.mjs → Switch.vue_vue_type_script_setup_true_lang-vok-8-BT.mjs} +2 -2
  41. package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-DUhXAGs2.mjs.map → Switch.vue_vue_type_script_setup_true_lang-vok-8-BT.mjs.map} +1 -1
  42. package/dist/chunks/Tips-B_18E4mc.mjs +71 -0
  43. package/dist/chunks/Tips-B_18E4mc.mjs.map +1 -0
  44. package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-CHGCjpKK.mjs → Upload.vue_vue_type_script_setup_true_lang-DVDw-3mF.mjs} +5 -4
  45. package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-CHGCjpKK.mjs.map → Upload.vue_vue_type_script_setup_true_lang-DVDw-3mF.mjs.map} +1 -1
  46. package/dist/chunks/{Viewer-CjLSQTrw.mjs → Viewer-FSV6xObc.mjs} +2 -2
  47. package/dist/chunks/{Viewer-CjLSQTrw.mjs.map → Viewer-FSV6xObc.mjs.map} +1 -1
  48. package/dist/chunks/config-B6nWG5dv.mjs +1378 -0
  49. package/dist/chunks/config-B6nWG5dv.mjs.map +1 -0
  50. package/dist/chunks/http-BKKP0gEJ.mjs +2774 -0
  51. package/dist/chunks/http-BKKP0gEJ.mjs.map +1 -0
  52. package/dist/chunks/{useApiAction-DxVQWWxv.mjs → useApiAction-71XPKjlQ.mjs} +2 -2
  53. package/dist/chunks/{useApiAction-DxVQWWxv.mjs.map → useApiAction-71XPKjlQ.mjs.map} +1 -1
  54. package/dist/chunks/{useColumnSettings-BwG2V9xp.mjs → useColumnSettings-CbiWd27-.mjs} +22 -21
  55. package/dist/chunks/{useColumnSettings-BwG2V9xp.mjs.map → useColumnSettings-CbiWd27-.mjs.map} +1 -1
  56. package/dist/chunks/useConfig-CPioiLWJ.mjs +23 -0
  57. package/dist/chunks/useConfig-CPioiLWJ.mjs.map +1 -0
  58. package/dist/chunks/{useOptionsLoader-DEVCYhrp.mjs → useOptionsLoader-D4Jh4f1F.mjs} +2 -2
  59. package/dist/chunks/{useOptionsLoader-DEVCYhrp.mjs.map → useOptionsLoader-D4Jh4f1F.mjs.map} +1 -1
  60. package/dist/confirm-button/index.mjs +1 -1
  61. package/dist/data-form/index.mjs +1 -1
  62. package/dist/data-grid/index.mjs +1 -1
  63. package/dist/dialog-button/index.mjs +1 -1
  64. package/dist/drawer/index.mjs +1 -1
  65. package/dist/drawer/style.css +1 -1
  66. package/dist/drawer-button/index.mjs +1 -1
  67. package/dist/editable-grid/index.mjs +1 -1
  68. package/dist/guide/index.mjs +7 -0
  69. package/dist/guide/index.mjs.map +1 -0
  70. package/dist/guide/style.css +1 -0
  71. package/dist/iframe/index.mjs +1 -1
  72. package/dist/iframe/style.css +1 -1
  73. package/dist/image-upload/index.mjs +1 -1
  74. package/dist/index.esm.js +194 -189
  75. package/dist/index.esm.js.map +1 -1
  76. package/dist/index.umd.js +25 -21
  77. package/dist/index.umd.js.map +1 -1
  78. package/dist/prompt-button/index.mjs +1 -1
  79. package/dist/radio-list/index.mjs +1 -1
  80. package/dist/requester/index.mjs +1 -1
  81. package/dist/select/index.mjs +1 -1
  82. package/dist/station/index.mjs +1 -1
  83. package/dist/station/style.css +1 -1
  84. package/dist/style.css +1 -1
  85. package/dist/switch/index.mjs +1 -1
  86. package/dist/tips/index.mjs +1 -1
  87. package/dist/tips/style.css +1 -1
  88. package/dist/types/src/components/buttons/ApiButton.vue.d.ts +3 -3
  89. package/dist/types/src/components/buttons/ConfirmButton.vue.d.ts +5 -5
  90. package/dist/types/src/components/buttons/DialogButton.vue.d.ts +3 -3
  91. package/dist/types/src/components/buttons/DrawerButton.vue.d.ts +4 -4
  92. package/dist/types/src/components/buttons/PopconfirmButton.vue.d.ts +6 -6
  93. package/dist/types/src/components/buttons/PromptButton.vue.d.ts +5 -5
  94. package/dist/types/src/components/buttons/RouteButton.vue.d.ts +1 -1
  95. package/dist/types/src/components/buttons/TipsButton.vue.d.ts +1 -1
  96. package/dist/types/src/components/containers/Drawer.vue.d.ts +4 -4
  97. package/dist/types/src/components/containers/Iframe.vue.d.ts +42 -0
  98. package/dist/types/src/components/data/datagrid/DataGrid.vue.d.ts +5 -5
  99. package/dist/types/src/components/data/editable-grid/EditableGrid.vue.d.ts +7 -7
  100. package/dist/types/src/components/data/viewer/Viewer.vue.d.ts +1 -1
  101. package/dist/types/src/components/form/FormItem.vue.d.ts +1 -1
  102. package/dist/types/src/components/form/SearchItem.vue.d.ts +1 -1
  103. package/dist/types/src/components/form/data-form/DataForm.vue.d.ts +10 -10
  104. package/dist/types/src/components/guide/Guide.vue.d.ts +116 -0
  105. package/dist/types/src/components/index.d.ts +2 -1
  106. package/dist/types/src/components/inputs/AutoComplete.vue.d.ts +6 -6
  107. package/dist/types/src/components/inputs/CheckboxList.vue.d.ts +6 -6
  108. package/dist/types/src/components/inputs/RadioList.vue.d.ts +6 -6
  109. package/dist/types/src/components/inputs/Select.vue.d.ts +6 -6
  110. package/dist/types/src/components/inputs/Switch.vue.d.ts +9 -9
  111. package/dist/types/src/components/styles/Path.vue.d.ts +1 -1
  112. package/dist/types/src/components/styles/Tips.vue.d.ts +17 -0
  113. package/dist/types/src/components/upload/ImageUpload.vue.d.ts +5 -5
  114. package/dist/types/src/components/upload/Upload.vue.d.ts +5 -5
  115. package/dist/types/src/entries/guide.d.ts +9 -0
  116. package/dist/upload/index.mjs +1 -1
  117. package/dist/viewer/index.mjs +1 -1
  118. package/package.json +1 -1
  119. package/dist/chunks/Drawer-ucXKUecL.mjs.map +0 -1
  120. package/dist/chunks/Iframe-CeSiMnvR.mjs +0 -65
  121. package/dist/chunks/Iframe-CeSiMnvR.mjs.map +0 -1
  122. package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-DkLqAjug.mjs +0 -80
  123. package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-DkLqAjug.mjs.map +0 -1
  124. package/dist/chunks/Tips-IWCZcR1K.mjs +0 -63
  125. package/dist/chunks/Tips-IWCZcR1K.mjs.map +0 -1
  126. package/dist/chunks/http-C06mNpwY.mjs +0 -4141
  127. package/dist/chunks/http-C06mNpwY.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"EditableGrid-CDeeVkaX.mjs","sources":["../../node_modules/async-validator/dist-web/index.js","../../src/components/data/editable-grid/EditableGrid.vue"],"sourcesContent":["function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n\n _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct.bind();\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nfunction _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\n/* eslint no-console:0 */\nvar formatRegExp = /%[sdj%]/g;\nvar warning = function warning() {}; // don't print warning message when in production env or node runtime\n\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') {\n warning = function warning(type, errors) {\n if (typeof console !== 'undefined' && console.warn && typeof ASYNC_VALIDATOR_NO_WARNING === 'undefined') {\n if (errors.every(function (e) {\n return typeof e === 'string';\n })) {\n console.warn(type, errors);\n }\n }\n };\n}\n\nfunction convertFieldsError(errors) {\n if (!errors || !errors.length) return null;\n var fields = {};\n errors.forEach(function (error) {\n var field = error.field;\n fields[field] = fields[field] || [];\n fields[field].push(error);\n });\n return fields;\n}\nfunction format(template) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var i = 0;\n var len = args.length;\n\n if (typeof template === 'function') {\n return template.apply(null, args);\n }\n\n if (typeof template === 'string') {\n var str = template.replace(formatRegExp, function (x) {\n if (x === '%%') {\n return '%';\n }\n\n if (i >= len) {\n return x;\n }\n\n switch (x) {\n case '%s':\n return String(args[i++]);\n\n case '%d':\n return Number(args[i++]);\n\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n\n break;\n\n default:\n return x;\n }\n });\n return str;\n }\n\n return template;\n}\n\nfunction isNativeStringType(type) {\n return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'date' || type === 'pattern';\n}\n\nfunction isEmptyValue(value, type) {\n if (value === undefined || value === null) {\n return true;\n }\n\n if (type === 'array' && Array.isArray(value) && !value.length) {\n return true;\n }\n\n if (isNativeStringType(type) && typeof value === 'string' && !value) {\n return true;\n }\n\n return false;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n var results = [];\n var total = 0;\n var arrLength = arr.length;\n\n function count(errors) {\n results.push.apply(results, errors || []);\n total++;\n\n if (total === arrLength) {\n callback(results);\n }\n }\n\n arr.forEach(function (a) {\n func(a, count);\n });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n var index = 0;\n var arrLength = arr.length;\n\n function next(errors) {\n if (errors && errors.length) {\n callback(errors);\n return;\n }\n\n var original = index;\n index = index + 1;\n\n if (original < arrLength) {\n func(arr[original], next);\n } else {\n callback([]);\n }\n }\n\n next([]);\n}\n\nfunction flattenObjArr(objArr) {\n var ret = [];\n Object.keys(objArr).forEach(function (k) {\n ret.push.apply(ret, objArr[k] || []);\n });\n return ret;\n}\n\nvar AsyncValidationError = /*#__PURE__*/function (_Error) {\n _inheritsLoose(AsyncValidationError, _Error);\n\n function AsyncValidationError(errors, fields) {\n var _this;\n\n _this = _Error.call(this, 'Async Validation Error') || this;\n _this.errors = errors;\n _this.fields = fields;\n return _this;\n }\n\n return AsyncValidationError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\nfunction asyncMap(objArr, option, func, callback, source) {\n if (option.first) {\n var _pending = new Promise(function (resolve, reject) {\n var next = function next(errors) {\n callback(errors);\n return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(source);\n };\n\n var flattenArr = flattenObjArr(objArr);\n asyncSerialArray(flattenArr, func, next);\n });\n\n _pending[\"catch\"](function (e) {\n return e;\n });\n\n return _pending;\n }\n\n var firstFields = option.firstFields === true ? Object.keys(objArr) : option.firstFields || [];\n var objArrKeys = Object.keys(objArr);\n var objArrLength = objArrKeys.length;\n var total = 0;\n var results = [];\n var pending = new Promise(function (resolve, reject) {\n var next = function next(errors) {\n results.push.apply(results, errors);\n total++;\n\n if (total === objArrLength) {\n callback(results);\n return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(source);\n }\n };\n\n if (!objArrKeys.length) {\n callback(results);\n resolve(source);\n }\n\n objArrKeys.forEach(function (key) {\n var arr = objArr[key];\n\n if (firstFields.indexOf(key) !== -1) {\n asyncSerialArray(arr, func, next);\n } else {\n asyncParallelArray(arr, func, next);\n }\n });\n });\n pending[\"catch\"](function (e) {\n return e;\n });\n return pending;\n}\n\nfunction isErrorObj(obj) {\n return !!(obj && obj.message !== undefined);\n}\n\nfunction getValue(value, path) {\n var v = value;\n\n for (var i = 0; i < path.length; i++) {\n if (v == undefined) {\n return v;\n }\n\n v = v[path[i]];\n }\n\n return v;\n}\n\nfunction complementError(rule, source) {\n return function (oe) {\n var fieldValue;\n\n if (rule.fullFields) {\n fieldValue = getValue(source, rule.fullFields);\n } else {\n fieldValue = source[oe.field || rule.fullField];\n }\n\n if (isErrorObj(oe)) {\n oe.field = oe.field || rule.fullField;\n oe.fieldValue = fieldValue;\n return oe;\n }\n\n return {\n message: typeof oe === 'function' ? oe() : oe,\n fieldValue: fieldValue,\n field: oe.field || rule.fullField\n };\n };\n}\nfunction deepMerge(target, source) {\n if (source) {\n for (var s in source) {\n if (source.hasOwnProperty(s)) {\n var value = source[s];\n\n if (typeof value === 'object' && typeof target[s] === 'object') {\n target[s] = _extends({}, target[s], value);\n } else {\n target[s] = value;\n }\n }\n }\n }\n\n return target;\n}\n\nvar required$1 = function required(rule, value, source, errors, options, type) {\n if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {\n errors.push(format(options.messages.required, rule.fullField));\n }\n};\n\n/**\n * Rule for validating whitespace.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nvar whitespace = function whitespace(rule, value, source, errors, options) {\n if (/^\\s+$/.test(value) || value === '') {\n errors.push(format(options.messages.whitespace, rule.fullField));\n }\n};\n\n// https://github.com/kevva/url-regex/blob/master/index.js\nvar urlReg;\nvar getUrlRegex = (function () {\n if (urlReg) {\n return urlReg;\n }\n\n var word = '[a-fA-F\\\\d:]';\n\n var b = function b(options) {\n return options && options.includeBoundaries ? \"(?:(?<=\\\\s|^)(?=\" + word + \")|(?<=\" + word + \")(?=\\\\s|$))\" : '';\n };\n\n var v4 = '(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}';\n var v6seg = '[a-fA-F\\\\d]{1,4}';\n var v6 = (\"\\n(?:\\n(?:\" + v6seg + \":){7}(?:\" + v6seg + \"|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8\\n(?:\" + v6seg + \":){6}(?:\" + v4 + \"|:\" + v6seg + \"|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4\\n(?:\" + v6seg + \":){5}(?::\" + v4 + \"|(?::\" + v6seg + \"){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4\\n(?:\" + v6seg + \":){4}(?:(?::\" + v6seg + \"){0,1}:\" + v4 + \"|(?::\" + v6seg + \"){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4\\n(?:\" + v6seg + \":){3}(?:(?::\" + v6seg + \"){0,2}:\" + v4 + \"|(?::\" + v6seg + \"){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4\\n(?:\" + v6seg + \":){2}(?:(?::\" + v6seg + \"){0,3}:\" + v4 + \"|(?::\" + v6seg + \"){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4\\n(?:\" + v6seg + \":){1}(?:(?::\" + v6seg + \"){0,4}:\" + v4 + \"|(?::\" + v6seg + \"){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4\\n(?::(?:(?::\" + v6seg + \"){0,5}:\" + v4 + \"|(?::\" + v6seg + \"){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4\\n)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1\\n\").replace(/\\s*\\/\\/.*$/gm, '').replace(/\\n/g, '').trim(); // Pre-compile only the exact regexes because adding a global flag make regexes stateful\n\n var v46Exact = new RegExp(\"(?:^\" + v4 + \"$)|(?:^\" + v6 + \"$)\");\n var v4exact = new RegExp(\"^\" + v4 + \"$\");\n var v6exact = new RegExp(\"^\" + v6 + \"$\");\n\n var ip = function ip(options) {\n return options && options.exact ? v46Exact : new RegExp(\"(?:\" + b(options) + v4 + b(options) + \")|(?:\" + b(options) + v6 + b(options) + \")\", 'g');\n };\n\n ip.v4 = function (options) {\n return options && options.exact ? v4exact : new RegExp(\"\" + b(options) + v4 + b(options), 'g');\n };\n\n ip.v6 = function (options) {\n return options && options.exact ? v6exact : new RegExp(\"\" + b(options) + v6 + b(options), 'g');\n };\n\n var protocol = \"(?:(?:[a-z]+:)?//)\";\n var auth = '(?:\\\\S+(?::\\\\S*)?@)?';\n var ipv4 = ip.v4().source;\n var ipv6 = ip.v6().source;\n var host = \"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9][-_]*)*[a-z\\\\u00a1-\\\\uffff0-9]+)\";\n var domain = \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*\";\n var tld = \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\";\n var port = '(?::\\\\d{2,5})?';\n var path = '(?:[/?#][^\\\\s\"]*)?';\n var regex = \"(?:\" + protocol + \"|www\\\\.)\" + auth + \"(?:localhost|\" + ipv4 + \"|\" + ipv6 + \"|\" + host + domain + tld + \")\" + port + path;\n urlReg = new RegExp(\"(?:^\" + regex + \"$)\", 'i');\n return urlReg;\n});\n\n/* eslint max-len:0 */\n\nvar pattern$2 = {\n // http://emailregex.com/\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+\\.)+[a-zA-Z\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]{2,}))$/,\n // url: new RegExp(\n // '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$',\n // 'i',\n // ),\n hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i\n};\nvar types = {\n integer: function integer(value) {\n return types.number(value) && parseInt(value, 10) === value;\n },\n \"float\": function float(value) {\n return types.number(value) && !types.integer(value);\n },\n array: function array(value) {\n return Array.isArray(value);\n },\n regexp: function regexp(value) {\n if (value instanceof RegExp) {\n return true;\n }\n\n try {\n return !!new RegExp(value);\n } catch (e) {\n return false;\n }\n },\n date: function date(value) {\n return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function' && !isNaN(value.getTime());\n },\n number: function number(value) {\n if (isNaN(value)) {\n return false;\n }\n\n return typeof value === 'number';\n },\n object: function object(value) {\n return typeof value === 'object' && !types.array(value);\n },\n method: function method(value) {\n return typeof value === 'function';\n },\n email: function email(value) {\n return typeof value === 'string' && value.length <= 320 && !!value.match(pattern$2.email);\n },\n url: function url(value) {\n return typeof value === 'string' && value.length <= 2048 && !!value.match(getUrlRegex());\n },\n hex: function hex(value) {\n return typeof value === 'string' && !!value.match(pattern$2.hex);\n }\n};\n\nvar type$1 = function type(rule, value, source, errors, options) {\n if (rule.required && value === undefined) {\n required$1(rule, value, source, errors, options);\n return;\n }\n\n var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];\n var ruleType = rule.type;\n\n if (custom.indexOf(ruleType) > -1) {\n if (!types[ruleType](value)) {\n errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n } // straight typeof check\n\n } else if (ruleType && typeof value !== rule.type) {\n errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n }\n};\n\nvar range = function range(rule, value, source, errors, options) {\n var len = typeof rule.len === 'number';\n var min = typeof rule.min === 'number';\n var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n\n var spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var val = value;\n var key = null;\n var num = typeof value === 'number';\n var str = typeof value === 'string';\n var arr = Array.isArray(value);\n\n if (num) {\n key = 'number';\n } else if (str) {\n key = 'string';\n } else if (arr) {\n key = 'array';\n } // if the value is not of a supported type for range validation\n // the validation rule rule should use the\n // type property to also test for a particular type\n\n\n if (!key) {\n return false;\n }\n\n if (arr) {\n val = value.length;\n }\n\n if (str) {\n // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n val = value.replace(spRegexp, '_').length;\n }\n\n if (len) {\n if (val !== rule.len) {\n errors.push(format(options.messages[key].len, rule.fullField, rule.len));\n }\n } else if (min && !max && val < rule.min) {\n errors.push(format(options.messages[key].min, rule.fullField, rule.min));\n } else if (max && !min && val > rule.max) {\n errors.push(format(options.messages[key].max, rule.fullField, rule.max));\n } else if (min && max && (val < rule.min || val > rule.max)) {\n errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));\n }\n};\n\nvar ENUM$1 = 'enum';\n\nvar enumerable$1 = function enumerable(rule, value, source, errors, options) {\n rule[ENUM$1] = Array.isArray(rule[ENUM$1]) ? rule[ENUM$1] : [];\n\n if (rule[ENUM$1].indexOf(value) === -1) {\n errors.push(format(options.messages[ENUM$1], rule.fullField, rule[ENUM$1].join(', ')));\n }\n};\n\nvar pattern$1 = function pattern(rule, value, source, errors, options) {\n if (rule.pattern) {\n if (rule.pattern instanceof RegExp) {\n // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n // flag is accidentally set to `true`, which in a validation scenario\n // is not necessary and the result might be misleading\n rule.pattern.lastIndex = 0;\n\n if (!rule.pattern.test(value)) {\n errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n }\n } else if (typeof rule.pattern === 'string') {\n var _pattern = new RegExp(rule.pattern);\n\n if (!_pattern.test(value)) {\n errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n }\n }\n }\n};\n\nvar rules = {\n required: required$1,\n whitespace: whitespace,\n type: type$1,\n range: range,\n \"enum\": enumerable$1,\n pattern: pattern$1\n};\n\nvar string = function string(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options, 'string');\n\n if (!isEmptyValue(value, 'string')) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n rules.pattern(rule, value, source, errors, options);\n\n if (rule.whitespace === true) {\n rules.whitespace(rule, value, source, errors, options);\n }\n }\n }\n\n callback(errors);\n};\n\nvar method = function method(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar number = function number(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (value === '') {\n value = undefined;\n }\n\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar _boolean = function _boolean(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar regexp = function regexp(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (!isEmptyValue(value)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar integer = function integer(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar floatFn = function floatFn(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar array = function array(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if ((value === undefined || value === null) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options, 'array');\n\n if (value !== undefined && value !== null) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar object = function object(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar ENUM = 'enum';\n\nvar enumerable = function enumerable(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules[ENUM](rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar pattern = function pattern(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (!isEmptyValue(value, 'string')) {\n rules.pattern(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar date = function date(rule, value, callback, source, options) {\n // console.log('integer rule called %j', rule);\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); // console.log('validate on %s value', value);\n\n if (validate) {\n if (isEmptyValue(value, 'date') && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (!isEmptyValue(value, 'date')) {\n var dateObject;\n\n if (value instanceof Date) {\n dateObject = value;\n } else {\n dateObject = new Date(value);\n }\n\n rules.type(rule, dateObject, source, errors, options);\n\n if (dateObject) {\n rules.range(rule, dateObject.getTime(), source, errors, options);\n }\n }\n }\n\n callback(errors);\n};\n\nvar required = function required(rule, value, callback, source, options) {\n var errors = [];\n var type = Array.isArray(value) ? 'array' : typeof value;\n rules.required(rule, value, source, errors, options, type);\n callback(errors);\n};\n\nvar type = function type(rule, value, callback, source, options) {\n var ruleType = rule.type;\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value, ruleType) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options, ruleType);\n\n if (!isEmptyValue(value, ruleType)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar any = function any(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n }\n\n callback(errors);\n};\n\nvar validators = {\n string: string,\n method: method,\n number: number,\n \"boolean\": _boolean,\n regexp: regexp,\n integer: integer,\n \"float\": floatFn,\n array: array,\n object: object,\n \"enum\": enumerable,\n pattern: pattern,\n date: date,\n url: type,\n hex: type,\n email: type,\n required: required,\n any: any\n};\n\nfunction newMessages() {\n return {\n \"default\": 'Validation error on field %s',\n required: '%s is required',\n \"enum\": '%s must be one of %s',\n whitespace: '%s cannot be empty',\n date: {\n format: '%s date %s is invalid for format %s',\n parse: '%s date could not be parsed, %s is invalid ',\n invalid: '%s date %s is invalid'\n },\n types: {\n string: '%s is not a %s',\n method: '%s is not a %s (function)',\n array: '%s is not an %s',\n object: '%s is not an %s',\n number: '%s is not a %s',\n date: '%s is not a %s',\n \"boolean\": '%s is not a %s',\n integer: '%s is not an %s',\n \"float\": '%s is not a %s',\n regexp: '%s is not a valid %s',\n email: '%s is not a valid %s',\n url: '%s is not a valid %s',\n hex: '%s is not a valid %s'\n },\n string: {\n len: '%s must be exactly %s characters',\n min: '%s must be at least %s characters',\n max: '%s cannot be longer than %s characters',\n range: '%s must be between %s and %s characters'\n },\n number: {\n len: '%s must equal %s',\n min: '%s cannot be less than %s',\n max: '%s cannot be greater than %s',\n range: '%s must be between %s and %s'\n },\n array: {\n len: '%s must be exactly %s in length',\n min: '%s cannot be less than %s in length',\n max: '%s cannot be greater than %s in length',\n range: '%s must be between %s and %s in length'\n },\n pattern: {\n mismatch: '%s value %s does not match pattern %s'\n },\n clone: function clone() {\n var cloned = JSON.parse(JSON.stringify(this));\n cloned.clone = this.clone;\n return cloned;\n }\n };\n}\nvar messages = newMessages();\n\n/**\n * Encapsulates a validation schema.\n *\n * @param descriptor An object declaring validation rules\n * for this schema.\n */\n\nvar Schema = /*#__PURE__*/function () {\n // ========================= Static =========================\n // ======================== Instance ========================\n function Schema(descriptor) {\n this.rules = null;\n this._messages = messages;\n this.define(descriptor);\n }\n\n var _proto = Schema.prototype;\n\n _proto.define = function define(rules) {\n var _this = this;\n\n if (!rules) {\n throw new Error('Cannot configure a schema with no rules');\n }\n\n if (typeof rules !== 'object' || Array.isArray(rules)) {\n throw new Error('Rules must be an object');\n }\n\n this.rules = {};\n Object.keys(rules).forEach(function (name) {\n var item = rules[name];\n _this.rules[name] = Array.isArray(item) ? item : [item];\n });\n };\n\n _proto.messages = function messages(_messages) {\n if (_messages) {\n this._messages = deepMerge(newMessages(), _messages);\n }\n\n return this._messages;\n };\n\n _proto.validate = function validate(source_, o, oc) {\n var _this2 = this;\n\n if (o === void 0) {\n o = {};\n }\n\n if (oc === void 0) {\n oc = function oc() {};\n }\n\n var source = source_;\n var options = o;\n var callback = oc;\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n if (!this.rules || Object.keys(this.rules).length === 0) {\n if (callback) {\n callback(null, source);\n }\n\n return Promise.resolve(source);\n }\n\n function complete(results) {\n var errors = [];\n var fields = {};\n\n function add(e) {\n if (Array.isArray(e)) {\n var _errors;\n\n errors = (_errors = errors).concat.apply(_errors, e);\n } else {\n errors.push(e);\n }\n }\n\n for (var i = 0; i < results.length; i++) {\n add(results[i]);\n }\n\n if (!errors.length) {\n callback(null, source);\n } else {\n fields = convertFieldsError(errors);\n callback(errors, fields);\n }\n }\n\n if (options.messages) {\n var messages$1 = this.messages();\n\n if (messages$1 === messages) {\n messages$1 = newMessages();\n }\n\n deepMerge(messages$1, options.messages);\n options.messages = messages$1;\n } else {\n options.messages = this.messages();\n }\n\n var series = {};\n var keys = options.keys || Object.keys(this.rules);\n keys.forEach(function (z) {\n var arr = _this2.rules[z];\n var value = source[z];\n arr.forEach(function (r) {\n var rule = r;\n\n if (typeof rule.transform === 'function') {\n if (source === source_) {\n source = _extends({}, source);\n }\n\n value = source[z] = rule.transform(value);\n }\n\n if (typeof rule === 'function') {\n rule = {\n validator: rule\n };\n } else {\n rule = _extends({}, rule);\n } // Fill validator. Skip if nothing need to validate\n\n\n rule.validator = _this2.getValidationMethod(rule);\n\n if (!rule.validator) {\n return;\n }\n\n rule.field = z;\n rule.fullField = rule.fullField || z;\n rule.type = _this2.getType(rule);\n series[z] = series[z] || [];\n series[z].push({\n rule: rule,\n value: value,\n source: source,\n field: z\n });\n });\n });\n var errorFields = {};\n return asyncMap(series, options, function (data, doIt) {\n var rule = data.rule;\n var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField === 'object');\n deep = deep && (rule.required || !rule.required && data.value);\n rule.field = data.field;\n\n function addFullField(key, schema) {\n return _extends({}, schema, {\n fullField: rule.fullField + \".\" + key,\n fullFields: rule.fullFields ? [].concat(rule.fullFields, [key]) : [key]\n });\n }\n\n function cb(e) {\n if (e === void 0) {\n e = [];\n }\n\n var errorList = Array.isArray(e) ? e : [e];\n\n if (!options.suppressWarning && errorList.length) {\n Schema.warning('async-validator:', errorList);\n }\n\n if (errorList.length && rule.message !== undefined) {\n errorList = [].concat(rule.message);\n } // Fill error info\n\n\n var filledErrors = errorList.map(complementError(rule, source));\n\n if (options.first && filledErrors.length) {\n errorFields[rule.field] = 1;\n return doIt(filledErrors);\n }\n\n if (!deep) {\n doIt(filledErrors);\n } else {\n // if rule is required but the target object\n // does not exist fail at the rule level and don't\n // go deeper\n if (rule.required && !data.value) {\n if (rule.message !== undefined) {\n filledErrors = [].concat(rule.message).map(complementError(rule, source));\n } else if (options.error) {\n filledErrors = [options.error(rule, format(options.messages.required, rule.field))];\n }\n\n return doIt(filledErrors);\n }\n\n var fieldsSchema = {};\n\n if (rule.defaultField) {\n Object.keys(data.value).map(function (key) {\n fieldsSchema[key] = rule.defaultField;\n });\n }\n\n fieldsSchema = _extends({}, fieldsSchema, data.rule.fields);\n var paredFieldsSchema = {};\n Object.keys(fieldsSchema).forEach(function (field) {\n var fieldSchema = fieldsSchema[field];\n var fieldSchemaList = Array.isArray(fieldSchema) ? fieldSchema : [fieldSchema];\n paredFieldsSchema[field] = fieldSchemaList.map(addFullField.bind(null, field));\n });\n var schema = new Schema(paredFieldsSchema);\n schema.messages(options.messages);\n\n if (data.rule.options) {\n data.rule.options.messages = options.messages;\n data.rule.options.error = options.error;\n }\n\n schema.validate(data.value, data.rule.options || options, function (errs) {\n var finalErrors = [];\n\n if (filledErrors && filledErrors.length) {\n finalErrors.push.apply(finalErrors, filledErrors);\n }\n\n if (errs && errs.length) {\n finalErrors.push.apply(finalErrors, errs);\n }\n\n doIt(finalErrors.length ? finalErrors : null);\n });\n }\n }\n\n var res;\n\n if (rule.asyncValidator) {\n res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n } else if (rule.validator) {\n try {\n res = rule.validator(rule, data.value, cb, data.source, options);\n } catch (error) {\n console.error == null ? void 0 : console.error(error); // rethrow to report error\n\n if (!options.suppressValidatorError) {\n setTimeout(function () {\n throw error;\n }, 0);\n }\n\n cb(error.message);\n }\n\n if (res === true) {\n cb();\n } else if (res === false) {\n cb(typeof rule.message === 'function' ? rule.message(rule.fullField || rule.field) : rule.message || (rule.fullField || rule.field) + \" fails\");\n } else if (res instanceof Array) {\n cb(res);\n } else if (res instanceof Error) {\n cb(res.message);\n }\n }\n\n if (res && res.then) {\n res.then(function () {\n return cb();\n }, function (e) {\n return cb(e);\n });\n }\n }, function (results) {\n complete(results);\n }, source);\n };\n\n _proto.getType = function getType(rule) {\n if (rule.type === undefined && rule.pattern instanceof RegExp) {\n rule.type = 'pattern';\n }\n\n if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {\n throw new Error(format('Unknown rule type %s', rule.type));\n }\n\n return rule.type || 'string';\n };\n\n _proto.getValidationMethod = function getValidationMethod(rule) {\n if (typeof rule.validator === 'function') {\n return rule.validator;\n }\n\n var keys = Object.keys(rule);\n var messageIndex = keys.indexOf('message');\n\n if (messageIndex !== -1) {\n keys.splice(messageIndex, 1);\n }\n\n if (keys.length === 1 && keys[0] === 'required') {\n return validators.required;\n }\n\n return validators[this.getType(rule)] || undefined;\n };\n\n return Schema;\n}();\n\nSchema.register = function register(type, validator) {\n if (typeof validator !== 'function') {\n throw new Error('Cannot register a validator by type, validator is not a function');\n }\n\n validators[type] = validator;\n};\n\nSchema.warning = warning;\nSchema.messages = messages;\nSchema.validators = validators;\n\nexport { Schema as default };\n//# sourceMappingURL=index.js.map\n","<template>\n <div\n ref=\"rootRef\"\n class=\"wd-editable-grid\"\n :class=\"{ 'wd-editable-grid--auto-height': autoHeight }\"\n :style=\"rootStyle\"\n >\n <!-- 工具栏:左 toolbar 插槽 + 新增按钮,右 批量保存 + actions + tools 功能按钮 -->\n <div v-if=\"withToolbar && (hasToolbar || hasTools)\" class=\"wd-editable-grid__toolbar\">\n <div class=\"wd-editable-grid__toolbar-left\">\n <slot name=\"toolbar\" :dirty-rows=\"dirtyRows\" :rows=\"rows\" :selection=\"selection\">\n <el-button v-if=\"withAdd\" type=\"primary\" :icon=\"Plus\" @click=\"addRow\">{{ addButtonText }}</el-button>\n </slot>\n </div>\n <div class=\"wd-editable-grid__toolbar-right\">\n <el-button\n v-if=\"withSave\"\n type=\"success\"\n :loading=\"saving\"\n :disabled=\"!dirtyRows.length\"\n @click=\"saveAll\"\n >\n {{ saveButtonText }}<span v-if=\"dirtyRows.length\">({{ dirtyRows.length }})</span>\n </el-button>\n <slot name=\"actions\" :dirty-rows=\"dirtyRows\" :rows=\"rows\" :selection=\"selection\" />\n <el-tooltip v-if=\"toolsConf.refresh\" content=\"刷新\" placement=\"top\">\n <el-button circle @click=\"refresh\">\n <el-icon><Refresh /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.size\" content=\"调整大小\" placement=\"top\">\n <el-dropdown trigger=\"click\" @command=\"onSizeChange\">\n <el-button circle>\n <el-icon><ScaleToOriginal /></el-icon>\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item command=\"large\" :disabled=\"innerSize === 'large'\">大</el-dropdown-item>\n <el-dropdown-item command=\"default\" :disabled=\"innerSize === 'default'\">默认</el-dropdown-item>\n <el-dropdown-item command=\"small\" :disabled=\"innerSize === 'small'\">小</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.modeSwitch || modeSwitch\" content=\"表格/列表切换\" placement=\"top\">\n <el-button circle @click=\"toggleMode\">\n <el-icon><Grid v-if=\"viewMode === 'card'\" /><Menu v-else /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.columnSetting || dynamicColumn\" content=\"列设置\" placement=\"top\">\n <el-button circle @click=\"colSettingVisible = true\">\n <el-icon><Setting /></el-icon>\n </el-button>\n </el-tooltip>\n </div>\n </div>\n\n <!-- 表格主体 -->\n <el-table\n v-if=\"viewMode === 'table'\"\n ref=\"tableRef\"\n v-loading=\"loading\"\n :data=\"rows\"\n :size=\"innerSize\"\n :border=\"border\"\n :stripe=\"stripe\"\n :height=\"tableHeight\"\n :row-key=\"rowKey || undefined\"\n :tree-props=\"treeProps\"\n :default-expand-all=\"defaultExpandAll\"\n :span-method=\"rowspanMethod\"\n class=\"wd-editable-grid__table\"\n @selection-change=\"onSelectionChange\"\n @cell-click=\"onCellClick\"\n >\n <el-table-column v-if=\"withSelection\" type=\"selection\" width=\"60\" align=\"center\" reserve-selection />\n <el-table-column v-if=\"withIndex\" type=\"index\" label=\"序号\" width=\"60\" align=\"center\" :index=\"indexMethod\" />\n\n <!-- 可编辑列(columns 配置驱动) -->\n <el-table-column\n v-for=\"col in visibleColumns\"\n :key=\"col.prop\"\n :prop=\"col.prop\"\n :label=\"col.label\"\n :width=\"col.width\"\n :min-width=\"col.minWidth\"\n :align=\"col.align || 'left'\"\n :fixed=\"col.fixed\"\n >\n <template #default=\"{ row, $index }\">\n <!-- 行编辑模式 -->\n <template v-if=\"editMode === 'row'\">\n <div class=\"wd-editable-grid__cell\" :class=\"cellState($index, col)\" :title=\"cellErrorText($index, col) || undefined\">\n <el-input\n v-if=\"isRowEditing($index) && col.editor === 'input'\"\n v-model=\"row[col.prop]\"\n :placeholder=\"col.placeholder\"\n @change=\"markCellChanged($index, col)\"\n />\n <el-input-number\n v-else-if=\"isRowEditing($index) && col.editor === 'number'\"\n v-model=\"row[col.prop]\"\n :min=\"col.min\"\n :max=\"col.max\"\n :precision=\"col.precision\"\n @change=\"markCellChanged($index, col)\"\n />\n <el-select\n v-else-if=\"isRowEditing($index) && col.editor === 'select'\"\n v-model=\"row[col.prop]\"\n :placeholder=\"col.placeholder\"\n @change=\"markCellChanged($index, col)\"\n >\n <el-option v-for=\"opt in col.options || []\" :key=\"opt.value\" :label=\"opt.text\" :value=\"opt.value\" />\n </el-select>\n <el-date-picker\n v-else-if=\"isRowEditing($index) && col.editor === 'date'\"\n v-model=\"row[col.prop]\"\n type=\"date\"\n value-format=\"YYYY-MM-DD\"\n :placeholder=\"col.placeholder\"\n @change=\"markCellChanged($index, col)\"\n />\n <slot v-else-if=\"isRowEditing($index)\" :name=\"`edit-${col.prop}`\" :row=\"row\" :index=\"$index\" :column=\"col\">\n <el-input v-model=\"row[col.prop]\" :placeholder=\"col.placeholder\" @change=\"markCellChanged($index, col)\" />\n </slot>\n <span v-else>{{ formatCell(row, col) }}</span>\n <template v-if=\"cellState($index, col)['is-dirty']\">\n <el-tooltip content=\"已修改\" placement=\"top\">\n <slot name=\"dirty-tip-{{ col.prop }}\" :row=\"row\" :column=\"col\" :index=\"$index\">\n <el-icon class=\"wd-editable-grid__cell-dirty-icon\">\n <WarningFilled />\n </el-icon>\n </slot>\n </el-tooltip>\n </template>\n </div>\n </template>\n\n <!-- 单元格编辑模式 -->\n <template v-else>\n <div class=\"wd-editable-grid__cell\" :class=\"cellState($index, col)\" :title=\"cellErrorText($index, col) || undefined\">\n <el-input\n v-if=\"activeCell === cellKey($index, col.prop) && col.editor === 'input'\"\n v-model=\"row[col.prop]\"\n :ref=\"focusCell\"\n :placeholder=\"col.placeholder\"\n @change=\"markCellChanged($index, col)\"\n />\n <el-input-number\n v-else-if=\"activeCell === cellKey($index, col.prop) && col.editor === 'number'\"\n v-model=\"row[col.prop]\"\n :ref=\"focusCell\"\n :min=\"col.min\"\n :max=\"col.max\"\n :precision=\"col.precision\"\n @change=\"markCellChanged($index, col)\"\n />\n <el-select\n v-else-if=\"activeCell === cellKey($index, col.prop) && col.editor === 'select'\"\n v-model=\"row[col.prop]\"\n :ref=\"focusCell\"\n :placeholder=\"col.placeholder\"\n @change=\"onSelectChange($index, col)\"\n >\n <el-option v-for=\"opt in col.options || []\" :key=\"opt.value\" :label=\"opt.text\" :value=\"opt.value\" />\n </el-select>\n <el-date-picker\n v-else-if=\"activeCell === cellKey($index, col.prop) && col.editor === 'date'\"\n v-model=\"row[col.prop]\"\n type=\"date\"\n value-format=\"YYYY-MM-DD\"\n :placeholder=\"col.placeholder\"\n @change=\"onDateChange($index, col)\"\n />\n <slot\n v-else-if=\"activeCell === cellKey($index, col.prop)\"\n :name=\"`edit-${col.prop}`\"\n :row=\"row\"\n :index=\"$index\"\n :column=\"col\"\n >\n <el-input v-model=\"row[col.prop]\" :placeholder=\"col.placeholder\" @change=\"markCellChanged($index, col)\" />\n </slot>\n <span v-else>{{ formatCell(row, col) }}</span>\n <template v-if=\"cellState($index, col)['is-dirty']\">\n <el-tooltip content=\"已修改\" placement=\"top\">\n <slot name=\"dirty-tip-{{ col.prop }}\" :row=\"row\" :column=\"col\" :index=\"$index\">\n <el-icon class=\"wd-editable-grid__cell-dirty-icon\">\n <WarningFilled />\n </el-icon>\n </slot>\n </el-tooltip>\n </template>\n </div>\n </template>\n </template>\n </el-table-column>\n\n <!-- 额外业务列:默认插槽内容(el-table-column),过滤隐藏列 -->\n <ColumnRenderer :vnodes=\"slotColumnVnodes\" />\n\n <!-- 内置操作列(rowActions 配置) -->\n <el-table-column\n v-if=\"rowActions.length\"\n label=\"操作\"\n :width=\"actionColumnWidth\"\n align=\"center\"\n fixed=\"right\"\n >\n <template #default=\"{ row }\">\n <el-button\n v-for=\"act in rowActions\"\n :key=\"act.command || act.text\"\n link\n size=\"small\"\n :type=\"(act.type as any) || 'primary'\"\n @click=\"onRowAction(row, act)\"\n >{{ act.text }}</el-button>\n </template>\n </el-table-column>\n\n <!-- 可编辑操作列 -->\n <el-table-column\n v-if=\"withActions\"\n label=\"操作\"\n :width=\"actionWidth\"\n align=\"center\"\n fixed=\"right\"\n >\n <template #default=\"{ row, $index }\">\n <template v-if=\"editMode === 'row'\">\n <template v-if=\"isRowEditing($index)\">\n <el-button link type=\"primary\" @click=\"saveRow($index)\">保存</el-button>\n <el-button link @click=\"cancelRow($index)\">取消</el-button>\n </template>\n <el-button v-else link type=\"primary\" @click=\"startEditRow($index)\">编辑</el-button>\n </template>\n <el-button v-if=\"withDelete\" link type=\"danger\" @click=\"removeRow($index)\">删除</el-button>\n <slot name=\"row-actions\" :row=\"row\" :index=\"$index\" />\n </template>\n </el-table-column>\n\n <template #empty>\n <slot name=\"empty\">\n <el-empty :description=\"loading ? '加载中...' : '暂无数据'\" :image-size=\"80\" />\n </slot>\n </template>\n </el-table>\n\n <!-- 列表(卡片)模式 -->\n <div v-else class=\"wd-editable-grid__cards\" v-loading=\"loading\">\n <el-empty v-if=\"!rows.length\" description=\"暂无数据\" :image-size=\"80\" />\n <div v-for=\"(row, idx) in rows\" :key=\"row[rowKey || 'id'] ?? idx\" class=\"wd-editable-grid__card\">\n <slot name=\"card-item\" :row=\"row\" :index=\"idx\">\n <div class=\"wd-editable-grid__card-title\">{{ row.name || row.title || `第 ${idx + 1} 项` }}</div>\n <div class=\"wd-editable-grid__card-body\">\n <div v-for=\"(val, k) in row\" :key=\"k\" class=\"wd-editable-grid__card-line\">\n <span class=\"wd-editable-grid__card-label\">{{ k }}</span>\n <span class=\"wd-editable-grid__card-value\">{{ val }}</span>\n </div>\n </div>\n </slot>\n </div>\n </div>\n\n <!-- 分页 -->\n <div v-if=\"withPager && viewMode === 'table'\" class=\"wd-editable-grid__pager\">\n <el-pagination\n :current-page=\"currentPage\"\n :page-size=\"pageSize\"\n :total=\"total\"\n :page-sizes=\"pagerPageSizes\"\n :layout=\"pagerLayout\"\n :small=\"pagerStyle === 'simple'\"\n :hide-on-single-page=\"hideOnSinglePage\"\n :background=\"true\"\n @current-change=\"onChangeCurrentpage\"\n @size-change=\"onChangePagesize\"\n />\n </div>\n\n <!-- 列设置弹层 -->\n <el-dialog v-model=\"colSettingVisible\" title=\"列设置\" width=\"360px\" append-to-body>\n <div class=\"wd-editable-grid__col-setting\">\n <div v-for=\"col in controllableColumns\" :key=\"col.key\" class=\"wd-editable-grid__col-item\">\n <el-checkbox\n :model-value=\"col.visible\"\n @update:model-value=\"(v: boolean) => setColumnVisible(col.key, v)\"\n >\n {{ col.label }}\n </el-checkbox>\n <div class=\"wd-editable-grid__col-actions\">\n <el-button link size=\"small\" :disabled=\"col.order === 0\" @click=\"moveColumn(col.key, -1)\">上移</el-button>\n <el-button\n link\n size=\"small\"\n :disabled=\"col.order === controllableColumns.length - 1\"\n @click=\"moveColumn(col.key, 1)\"\n >下移</el-button>\n </div>\n </div>\n </div>\n <template #footer>\n <el-button @click=\"resetColumns()\">恢复默认</el-button>\n <el-button type=\"primary\" @click=\"colSettingVisible = false\">完成</el-button>\n </template>\n </el-dialog>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n reactive,\n computed,\n onMounted,\n onBeforeUnmount,\n useSlots,\n watch,\n nextTick,\n defineComponent,\n type VNode,\n type PropType\n} from 'vue'\nimport { Plus, Refresh, Setting, ScaleToOriginal, Grid, Menu, WarningFilled } from '@element-plus/icons-vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport Schema from 'async-validator'\nimport { useDataGrid } from '../../../lib/composables/useDataGrid'\nimport { registerDataGrid, refreshDataGrid } from '../../../lib/core/linkage'\nimport { getGlobalConfig } from '../../../lib/core/config'\nimport { safeJsonParse } from '../../../lib/core/utils'\nimport { request } from '../../../lib/core/http'\nimport { filterProp, headRefreshDatagridProp } from '../../common/props'\nimport { useColumnSettings, extractColumns } from '../datagrid/useColumnSettings'\n\ndefineOptions({ name: 'WdEditableGrid' })\n\n/** 可编辑列配置 */\nexport interface EditableColumn {\n prop: string\n label: string\n width?: string | number\n minWidth?: string | number\n align?: 'left' | 'center' | 'right'\n fixed?: boolean | 'left' | 'right'\n /** 编辑器类型:input/number/select/date;默认 input */\n editor?: 'input' | 'number' | 'select' | 'date'\n editable?: boolean\n placeholder?: string\n /** select 选项 */\n options?: { text: string; value: any }[]\n /** number 约束 */\n min?: number\n max?: number\n precision?: number\n /** 必填校验 */\n required?: boolean\n /** 自定义校验:返回错误文案,空串/undefined 为通过 */\n validator?: (value: any, row: Record<string, any>) => string | undefined\n /**\n * 单元格内容校验规则(与 ElForm 的 rules 完全一致,基于 async-validator)。\n * 规则不满足时单元格显示约束样式,并在保存/行内保存时中断并提示。\n */\n rules?: Array<Record<string, any>>\n /** 展示格式化(只读态) */\n formatter?: (row: Record<string, any>, col: EditableColumn) => string\n}\n\n/**\n * 列渲染器:把默认插槽里的 el-table-column vnode 渲染进 el-table,\n * 保留插槽上下文({ row, column, $index })。\n */\nconst ColumnRenderer = defineComponent({\n name: 'WdColumnRenderer',\n props: {\n vnodes: { type: Array as PropType<VNode[]>, default: () => [] }\n },\n render() {\n return this.vnodes\n }\n})\n\nconst props = defineProps({\n ...filterProp,\n ...headRefreshDatagridProp,\n // ---- 可编辑列与数据 ----\n /** 可编辑列配置 */\n columns: {\n type: Array as PropType<EditableColumn[]>,\n default: () => []\n },\n /** 行数据(v-model,静态数据推荐用法) */\n modelValue: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => []\n },\n /** 编辑模式:cell=单元格点击编辑(默认);row=行编辑 */\n editMode: {\n type: String as PropType<'cell' | 'row'>,\n default: 'cell'\n },\n /** 批量保存地址;为空时仅本地保存并 emit save */\n saveApi: { type: String, default: '' },\n saveMethod: {\n type: String as PropType<'post' | 'put'>,\n default: 'post'\n },\n /** 新增行默认值(对象或工厂函数) */\n defaultRow: {\n type: [Object, Function] as PropType<Record<string, any> | (() => Record<string, any>)>,\n default: undefined\n },\n // ---- 数据源(继承 DataGrid:API / 静态) ----\n api: { type: String, default: '' },\n apiMethod: { type: String as PropType<'get' | 'post' | 'put' | 'delete'>, default: 'post' },\n apiParam: { type: Object as PropType<Record<string, any>>, default: () => ({}) },\n active: { type: Boolean, default: false },\n /** 静态数据(数组);不传时回退到 modelValue */\n dataSource: { type: [Array, Object] as PropType<any[] | any>, default: undefined },\n // ---- 分页 / 搜索 / 模式(继承 DataGrid) ----\n withPager: { type: Boolean, default: true },\n withSearch: { type: Boolean, default: false },\n modeSwitch: { type: Boolean, default: false },\n dynamicColumn: { type: Boolean, default: false },\n columnStorageKey: { type: String, default: '' },\n // ---- 表格展示(继承 DataGrid) ----\n fix: { type: Boolean, default: true },\n border: { type: Boolean, default: true },\n stripe: { type: Boolean, default: true },\n height: { type: [String, Number] as PropType<string | number>, default: undefined },\n autoHeight: { type: Boolean, default: false },\n rowKey: { type: String, default: 'id' },\n tableSize: { type: String as PropType<'large' | 'default' | 'small'>, default: 'default' },\n pagerStyle: { type: String as PropType<'simple' | 'normal' | 'full'>, default: 'normal' },\n withIndex: { type: Boolean, default: false },\n withSelection: { type: Boolean, default: false },\n // 行合并\n rowspanKey: { type: String, default: '' },\n rowspanColumn: { type: Array as PropType<string[]>, default: () => [] },\n // 树形\n treeProps: { type: Object, default: () => ({ children: 'children', hasChildren: 'hasChildren' }) },\n defaultExpandAll: { type: Boolean, default: false },\n // tools(继承 DataGrid)\n tools: {\n type: Object as PropType<{\n refresh?: boolean\n columnSetting?: boolean\n modeSwitch?: boolean\n size?: boolean\n }>,\n default: () => ({})\n },\n /** 内置只读操作列配置(渲染行操作按钮,点击 emit row-action) */\n rowActions: {\n type: Array as PropType<Array<{ text: string; command?: string; type?: string }>>,\n default: () => []\n },\n // ---- 可编辑能力开关 ----\n withToolbar: { type: Boolean, default: true },\n withAdd: { type: Boolean, default: true },\n withSave: { type: Boolean, default: true },\n withDelete: { type: Boolean, default: true },\n withActions: { type: Boolean, default: true },\n // ---- 文案 ----\n addButtonText: { type: String, default: '新增一行' },\n saveButtonText: { type: String, default: '批量保存' },\n actionWidth: { type: [String, Number], default: 150 }\n})\n\nconst emit = defineEmits([\n 'update:modelValue',\n 'change',\n 'save',\n 'row-add',\n 'row-remove',\n 'validate-fail',\n 'row-action',\n 'page-change',\n 'selection-change',\n 'mode-change',\n 'loaded',\n 'apiBefore',\n 'apiSuccess',\n 'apiFail',\n 'apiException',\n 'apiAfter'\n])\n\nconst slots = useSlots()\nconst tableRef = ref<any>(null)\nconst rootRef = ref<HTMLElement | null>(null)\nconst viewMode = ref<'table' | 'card'>('table')\n\n// ============ 数据源:API(useDataGrid)/ 静态 ============\nconst globalCfg = getGlobalConfig()\nconst pagerPageSizes = globalCfg.page.pager.pageSizes\nconst hideOnSinglePage = globalCfg.page.pager.hideOnSinglePage\n\nconst isStatic = computed(() => Array.isArray(props.dataSource) || (!props.api && props.modelValue.length > 0))\n\nconst grid = useDataGrid({\n api: isStatic.value ? '' : props.api,\n apiMethod: props.apiMethod,\n apiParam: props.apiParam,\n pageSize: globalCfg.page.pager.pageSize,\n immediate: false\n})\n\nconst { total, loading, currentPage, pageSize, selection } = grid\n\n/** 当前渲染行数据(可编辑直接作用于此) */\nconst rows = ref<Record<string, any>[]>([])\n\n/** 静态数据来源:dataSource 优先,否则 modelValue */\nconst staticSource = computed<any[]>(() =>\n Array.isArray(props.dataSource) ? props.dataSource : props.modelValue\n)\n\n// 编辑态集合须在下方 immediate watch 触发 resetEditState 之前初始化(避免 TDZ)\n/** 脏行索引集合 */\nconst dirtySet = reactive(new Set<number>())\n/** 行编辑模式:正在编辑的行索引 */\nconst editingRows = reactive(new Set<number>())\n/** 行编辑模式:进入编辑前的快照(取消时还原) */\nconst rowSnapshots = new Map<number, Record<string, any>>()\n/** 单元格编辑模式:当前激活单元格 */\nconst activeCell = ref('')\n/** 单元格基线值:行索引 -> 开始编辑时的行快照(用于判断单元格是否被修改) */\nconst cellBaselines = reactive(new Map<number, Record<string, any>>())\n/** 已修改单元格 key(`${index}-${prop}`),当前值与基线不一致 */\nconst dirtyCells = reactive(new Set<string>())\n/** 校验失败单元格:key -> 错误文案 */\nconst cellErrors = reactive(new Map<string, string>())\n/** 通过\"新增一行\"加入的行索引:即使改回基线仍算脏行(区别于编辑产生的脏) */\nconst addedRows = reactive(new Set<number>())\n\n// 静态数据同步(深拷贝,编辑过程不直接污染外部;保存时同步)\nwatch(\n staticSource,\n (val) => {\n if (isStatic.value) {\n rows.value = (val || []).map((r) => ({ ...r }))\n total.value = (val || []).length\n resetEditState()\n }\n },\n { immediate: true, deep: false }\n)\n\n// 接口数据同步到可编辑行\nwatch(\n grid.list,\n (val) => {\n if (!isStatic.value) {\n rows.value = (val || []).map((r) => ({ ...r }))\n resetEditState()\n }\n },\n { immediate: true }\n)\n\n// ============ 编辑态 ============\nconst saving = ref(false)\n\nfunction resetEditState() {\n dirtySet.clear()\n editingRows.clear()\n rowSnapshots.clear()\n activeCell.value = ''\n addedRows.clear()\n cellBaselines.clear()\n dirtyCells.clear()\n cellErrors.clear()\n}\n\nconst dirtyRows = computed(() => [...dirtySet].map((i) => rows.value[i]).filter(Boolean))\n\nfunction cellKey(index: number, prop: string) {\n return `${index}-${prop}`\n}\n\nfunction isRowEditing(index: number) {\n return editingRows.has(index)\n}\n\nfunction deactivateCell() {\n activeCell.value = ''\n}\nfunction handleDocumentClick(e: MouseEvent) {\n if (!activeCell.value || !rootRef.value) return\n // 如果点击在当前表格内部,不关闭\n if (rootRef.value.contains(e.target as Node)) return\n // 点击在外部,关闭激活单元格\n activeCell.value = ''\n}\nfunction focusCell(el: any) {\n if (!el) return\n const target = el?.focus ? el : el?.$el?.querySelector?.('input')\n if (target?.focus) target.focus()\n else if (el?.focus) el.focus()\n}\n\nfunction formatCell(row: Record<string, any>, col: EditableColumn): string {\n if (col.formatter) return col.formatter(row, col)\n const val = row[col.prop]\n if (val === undefined || val === null || val === '') return ''\n if (col.editor === 'select') {\n const opt = col.options?.find((o) => o.value === val)\n return opt ? opt.text : String(val)\n }\n return String(val)\n}\n\n/** 单元格点击:cell 模式下激活可编辑列,并记录该行基线值 */\nfunction onCellClick(row: Record<string, any>, column: any) {\n if (props.editMode !== 'cell' || viewMode.value !== 'table') return\n const prop = column?.property\n if (!prop) return\n const col = props.columns.find((c) => c.prop === prop)\n if (!col || col.editable === false) return\n const idx = rows.value.indexOf(row)\n if (idx < 0) return\n if (!cellBaselines.has(idx)) cellBaselines.set(idx, { ...row })\n activeCell.value = cellKey(idx, prop)\n}\n\nfunction markDirty(index: number) {\n dirtySet.add(index)\n emit('change', rows.value)\n}\n\n/** 编辑提交后的统一处理:标脏 + 刷新单元格脏状态 + 触发该单元格规则校验 */\nfunction markCellChanged(index: number, col: EditableColumn) {\n markDirty(index)\n syncDirtyCells(index)\n void validateCell(index, rows.value[index], col)\n}\n\nfunction onSelectChange(index: number, col: EditableColumn) {\n markCellChanged(index, col)\n activeCell.value = ''\n}\n\nfunction onDateChange(index: number, col: EditableColumn) {\n markCellChanged(index, col)\n activeCell.value = ''\n}\n\nfunction sameValue(a: any, b: any) {\n if (a === b) return true\n if ((a === undefined || a === null || a === '') && (b === undefined || b === null || b === '')) return true\n return false\n}\n\n/** 把行内单元格当前值与基线比对,刷新 dirtyCells(改回原值自动移除;新增行始终算脏) */\nfunction syncDirtyCells(index: number) {\n const base = cellBaselines.get(index)\n const row = rows.value[index]\n if (!base || !row) return\n let hasDirty = false\n for (const col of props.columns) {\n if (col.editable === false) continue\n if (!(col.prop in base)) continue\n const key = cellKey(index, col.prop)\n if (sameValue(base[col.prop], row[col.prop])) {\n dirtyCells.delete(key)\n } else {\n dirtyCells.add(key)\n hasDirty = true\n }\n }\n if (hasDirty) dirtySet.add(index)\n else if (!addedRows.has(index)) dirtySet.delete(index)\n}\n\n/** 单元格展示状态 class:已修改(is-dirty)/ 约束失败(is-error) */\nfunction cellState(index: number, col: EditableColumn) {\n const key = cellKey(index, col.prop)\n return {\n 'is-editable': props.editMode === 'cell' && col.editable !== false,\n 'is-dirty': dirtyCells.has(key),\n 'is-error': cellErrors.has(key)\n }\n}\n\n/** 单元格错误文案(title 悬浮提示) */\nfunction cellErrorText(index: number, col: EditableColumn) {\n return cellErrors.get(cellKey(index, col.prop)) || ''\n}\n\n/** 清除某行所有单元格级状态(删除/取消行编辑时) */\nfunction clearCellStates(index: number) {\n const prefix = `${index}-`\n for (const k of [...dirtyCells]) if (k.startsWith(prefix)) dirtyCells.delete(k)\n for (const k of [...cellErrors.keys()]) if (k.startsWith(prefix)) cellErrors.delete(k)\n}\n\n/** 单元格规则校验:失败返回错误文案并写入 cellErrors,通过则清除该单元格错误 */\nasync function validateCell(index: number, row: Record<string, any>, col: EditableColumn): Promise<string | undefined> {\n const key = cellKey(index, col.prop)\n cellErrors.delete(key)\n const val = row[col.prop]\n let error: string | undefined\n if (col.rules && col.rules.length) {\n try {\n // 与 ElForm 一致的 rules(async-validator):field 规则数组直接按字段校验\n await new Schema({ [col.prop]: col.rules }).validate({ [col.prop]: val }, { suppressWarning: true })\n } catch (e: any) {\n error = e?.errors?.[0]?.message ?? `「${col.label}」校验未通过`\n }\n } else {\n if (col.required && (val === undefined || val === null || val === '')) {\n error = `「${col.label}」不能为空`\n } else if (col.validator) {\n error = col.validator(val, row) || undefined\n }\n }\n if (error) cellErrors.set(key, error)\n return error\n}\n\n/** 校验一行内全部列:返回首条错误,同时刷新每个单元格错误状态 */\nasync function validateRowCells(\n index: number,\n row: Record<string, any>\n): Promise<{ error?: string; column?: string }> {\n let first: { error?: string; column?: string } | undefined\n for (const col of props.columns) {\n const err = await validateCell(index, row, col)\n if (err && !first) first = { error: err, column: col.prop }\n }\n return first ?? {}\n}\n\n/** 行编辑:进入(记录行快照与单元格基线) */\nfunction startEditRow(index: number) {\n rowSnapshots.set(index, { ...rows.value[index] })\n editingRows.add(index)\n if (!cellBaselines.has(index)) cellBaselines.set(index, { ...rows.value[index] })\n}\n\n/** 行内保存:校验单行,通过后退出编辑态(批量保存统一提交) */\nasync function saveRow(index: number) {\n const row = rows.value[index]\n const res = await validateRowCells(index, row)\n if (res.error) {\n ElMessage.warning(res.error)\n emit('validate-fail', { index, row, column: res.column, error: res.error })\n return\n }\n editingRows.delete(index)\n rowSnapshots.delete(index)\n // 更新基线:保存完成后刷新基线为当前行值,下次编辑以此为准对比\n cellBaselines.set(index, { ...rows.value[index] })\n // 清除该行所有脏单元格与错误状态\n clearCellStates(index)\n dirtySet.add(index)\n emit('change', rows.value)\n}\n\n/** 行内取消:还原快照,并清除该行单元格级状态 */\nfunction cancelRow(index: number) {\n const snapshot = rowSnapshots.get(index)\n if (snapshot) rows.value[index] = { ...snapshot }\n rowSnapshots.delete(index)\n editingRows.delete(index)\n dirtySet.delete(index)\n addedRows.delete(index)\n cellBaselines.delete(index)\n clearCellStates(index)\n}\n\nfunction addRow() {\n const base =\n typeof props.defaultRow === 'function'\n ? (props.defaultRow as () => Record<string, any>)()\n : { ...(props.defaultRow || {}) }\n rows.value.push({ ...base })\n const idx = rows.value.length - 1\n addedRows.add(idx)\n cellBaselines.set(idx, { ...rows.value[idx] })\n dirtySet.add(idx)\n if (isStatic.value) total.value = rows.value.length\n if (props.editMode === 'row') {\n rowSnapshots.set(idx, { ...rows.value[idx] })\n editingRows.add(idx)\n }\n emit('row-add', rows.value[idx])\n emit('update:modelValue', rows.value)\n emit('change', rows.value)\n}\n\nasync function removeRow(index: number) {\n try {\n await ElMessageBox.confirm('确认删除该行?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n })\n } catch {\n return\n }\n rows.value.splice(index, 1)\n // 重建删除行之后所有按索引记录的状态(脏行/新增行/单元格基线/脏单元格/错误单元格)\n const shift = (i: number) => (i < index ? i : i > index ? i - 1 : -1)\n const shiftSet = (s: Set<number>) => {\n const next = new Set<number>()\n for (const i of s) {\n const n = shift(i)\n if (n >= 0) next.add(n)\n }\n s.clear()\n next.forEach((i) => s.add(i))\n }\n shiftSet(dirtySet)\n shiftSet(addedRows)\n const baseNext = new Map<number, Record<string, any>>()\n cellBaselines.forEach((v, i) => {\n const n = shift(i)\n if (n >= 0) baseNext.set(n, v)\n })\n cellBaselines.clear()\n baseNext.forEach((v, k) => cellBaselines.set(k, v))\n const shiftKey = (k: string) => {\n const dash = k.indexOf('-')\n const i = Number(k.slice(0, dash))\n const n = shift(i)\n return n >= 0 ? `${n}-${k.slice(dash + 1)}` : null\n }\n for (const k of [...dirtyCells]) {\n const nk = shiftKey(k)\n dirtyCells.delete(k)\n if (nk) dirtyCells.add(nk)\n }\n for (const [k, v] of [...cellErrors.entries()]) {\n const nk = shiftKey(k)\n cellErrors.delete(k)\n if (nk) cellErrors.set(nk, v)\n }\n editingRows.clear()\n activeCell.value = ''\n if (isStatic.value) total.value = rows.value.length\n emit('row-remove', index)\n emit('update:modelValue', rows.value)\n emit('change', rows.value)\n}\n\n/** 校验所有脏行;失败中断并返回 false,同时刷新每个单元格错误状态 */\nasync function validateAll(): Promise<boolean> {\n const indices = [...dirtySet].sort((a, b) => a - b)\n for (const i of indices) {\n const row = rows.value[i]\n if (!row) continue\n const res = await validateRowCells(i, row)\n if (res.error) {\n ElMessage.warning(`第 ${i + 1} 行:${res.error}`)\n emit('validate-fail', { index: i, row, column: res.column, error: res.error })\n return false\n }\n }\n return true\n}\n\n/** 批量保存:先校验(rules 不满足中断并提示),通过后提交脏行 */\nasync function saveAll() {\n if (!dirtySet.size) {\n ElMessage.info('没有需要保存的修改')\n return\n }\n if (!(await validateAll())) return\n\n const changedRows = [...dirtySet].sort((a, b) => a - b).map((i) => rows.value[i])\n\n // 无保存接口:仅本地提交\n if (!props.saveApi) {\n resetEditState()\n emit('update:modelValue', rows.value)\n emit('save', { rows: changedRows, all: rows.value })\n ElMessage.success('保存成功')\n return\n }\n\n saving.value = true\n emit('apiBefore', { url: props.saveApi, rows: changedRows })\n try {\n const result =\n props.saveMethod === 'put'\n ? await request.put(props.saveApi, { rows: changedRows })\n : await request.post(props.saveApi, { rows: changedRows })\n if (result.success) {\n resetEditState()\n emit('apiSuccess', { data: result.data })\n emit('save', { rows: changedRows, all: rows.value, data: result.data })\n emit('update:modelValue', rows.value)\n if (props.headRefreshDatagrid) refreshDataGrid(props.headRefreshDatagrid, props.filter)\n // 接口模式:保存成功后刷新当前页\n if (!isStatic.value) grid.fetchData()\n } else {\n emit('apiFail', { code: result.code, message: result.message })\n }\n } catch (error: any) {\n emit('apiException', { error, message: error?.message })\n } finally {\n emit('apiAfter', { url: props.saveApi })\n saving.value = false\n }\n}\n\n// ============ 工具栏 tools(继承 DataGrid) ============\nconst toolsConf = computed(() => ({\n refresh: props.tools.refresh !== false, // 默认 true\n columnSetting: props.tools.columnSetting === true,\n modeSwitch: props.tools.modeSwitch === true,\n size: props.tools.size === true\n}))\n\nconst hasToolbar = computed(() => !!slots.toolbar || props.withAdd)\nconst hasTools = computed(\n () =>\n props.withSave ||\n !!slots.actions ||\n toolsConf.value.refresh ||\n toolsConf.value.columnSetting ||\n toolsConf.value.modeSwitch ||\n toolsConf.value.size ||\n props.modeSwitch ||\n props.dynamicColumn\n)\n\n// 表格尺寸持久化\nconst sizeStorageKey = props.columnStorageKey ? `wd:tablesize:${props.columnStorageKey}` : ''\nconst storedSize = sizeStorageKey ? safeJsonParse(localStorage.getItem(sizeStorageKey), null) : null\nconst innerSize = ref<'large' | 'default' | 'small'>(storedSize || props.tableSize)\nwatch(\n () => props.tableSize,\n (v) => {\n if (!storedSize) innerSize.value = v\n }\n)\nfunction onSizeChange(cmd: 'large' | 'default' | 'small') {\n innerSize.value = cmd\n if (sizeStorageKey) localStorage.setItem(sizeStorageKey, JSON.stringify(cmd))\n}\n\n// ============ 高度模式(继承 DataGrid) ============\nconst availFixHeight = ref(0)\nconst fixTableHeight = ref(0)\nconst isFixMode = computed(() => props.height === 'fix')\n\nconst rootStyle = computed(() =>\n isFixMode.value ? { height: `${availFixHeight.value}px` } : undefined\n)\n\nconst tableHeight = computed(() => {\n if (isFixMode.value) return fixTableHeight.value > 0 ? fixTableHeight.value : undefined\n if (props.autoHeight) return '100%'\n const h = props.height\n if (h == null || h === '') return undefined\n return h as string | number\n})\n\nfunction measureFixHeight() {\n const el = rootRef.value\n if (!el || !isFixMode.value) return\n const viewH = window.innerHeight\n const top = el.getBoundingClientRect().top\n const avail = Math.max(120, Math.floor(viewH - top))\n availFixHeight.value = avail\n const toolbar = el.querySelector('.wd-editable-grid__toolbar') as HTMLElement | null\n const pager = el.querySelector('.wd-editable-grid__pager') as HTMLElement | null\n fixTableHeight.value = Math.max(120, avail - (toolbar?.offsetHeight ?? 0) - (pager?.offsetHeight ?? 0))\n}\nfunction onViewportResize() {\n measureFixHeight()\n}\n\nwatch(\n () => props.height,\n (v) => {\n if (v === 'fix') {\n window.addEventListener('resize', onViewportResize)\n nextTick(measureFixHeight)\n } else {\n window.removeEventListener('resize', onViewportResize)\n }\n }\n)\n\n// ============ 分页档位 ============\nconst pagerLayout = computed(() => {\n if (props.pagerStyle === 'simple') return 'prev, pager, next'\n if (props.pagerStyle === 'full') return 'total, sizes, prev, pager, next, jumper'\n return globalCfg.page.pager.layout\n})\n\n// ============ 动态列(配置列 + 插槽列) ============\nconst {\n columns: colColumns,\n controllableColumns,\n hiddenKeys,\n settingVisible: colSettingVisible,\n init: initColumns,\n initMetas: initColumnMetas,\n setVisible: setColumnVisible,\n move: moveColumn,\n reset: resetColumns\n} = useColumnSettings(props.columnStorageKey || undefined)\n\nlet columnsInited = false\n\n/** 配置列:按列设置显隐(排序以 columns 配置为准) */\nconst visibleColumns = computed<EditableColumn[]>(() => {\n ensureColumnSettings()\n return props.columns.filter((c) => !hiddenKeys.value.has(c.prop))\n})\n\n/** 插槽列 vnode:过滤隐藏列与重复的 selection/index 列 */\nconst slotColumnVnodes = computed<VNode[]>(() => {\n ensureColumnSettings()\n const defaultSlot = slots.default\n if (!defaultSlot) return []\n return filterColumnVnodes(defaultSlot(), hiddenKeys.value)\n})\n\n/** 初始化列设置元信息(配置列 + 插槽列合并,仅一次) */\nfunction ensureColumnSettings() {\n if (columnsInited) return\n const slotVnodes = slots.default ? slots.default() : []\n const metas = [\n ...props.columns.map((c) => ({ key: c.prop, label: c.label, controllable: true, visible: true })),\n ...extractColumns(slotVnodes)\n .filter((c) => c.controllable)\n .map((c) => ({ key: c.key, label: c.label, controllable: true, visible: c.visible }))\n ]\n if (metas.length) {\n initColumnMetas(metas)\n } else {\n initColumns(slotVnodes)\n }\n columnsInited = true\n}\n\n/** 根据隐藏列 key 过滤插槽 vnode */\nfunction filterColumnVnodes(vnodes: VNode[], hidden: Set<string>): VNode[] {\n const result: VNode[] = []\n vnodes.forEach((vnode) => {\n if (!vnode || typeof vnode !== 'object') {\n if (vnode) result.push(vnode)\n return\n }\n const p = (vnode.props || {}) as Record<string, any>\n const key = String(p.prop || p.columnKey || '')\n if (p.type === 'selection' || p.type === 'index') return\n if (key && hidden.has(key)) return\n result.push(vnode)\n })\n return result\n}\n\n// ============ 序号 / 行合并(继承 DataGrid) ============\nfunction indexMethod(index: number) {\n return (currentPage.value - 1) * pageSize.value + index + 1\n}\n\nfunction rowspanMethod({ row, column, rowIndex, columnIndex }: any) {\n if (!props.rowspanKey || !props.rowspanColumn.length) return { rowspan: 1, colspan: 1 }\n const prop = column.property\n if (!props.rowspanColumn.includes(prop)) return { rowspan: 1, colspan: 1 }\n const data = rows.value\n const keyVal = row[props.rowspanKey]\n const firstIdx = data.findIndex((r) => r[props.rowspanKey] === keyVal)\n if (rowIndex === firstIdx) {\n const span = data.filter((r) => r[props.rowspanKey] === keyVal).length\n return { rowspan: span, colspan: 1 }\n }\n return { rowspan: 0, colspan: 0 }\n}\n\n// ============ 选择 / 分页 / 模式 / 行操作 ============\nfunction onSelectionChange(selected: any[]) {\n grid.setSelection(selected)\n emit('selection-change', selected)\n}\n\nfunction onChangeCurrentpage(val: number) {\n resetEditState()\n grid.onChangeCurrentpage(val)\n emit('page-change', { currentPage: val, pageSize: pageSize.value })\n}\nfunction onChangePagesize(val: number) {\n resetEditState()\n grid.onChangePagesize(val)\n emit('page-change', { currentPage: currentPage.value, pageSize: val })\n}\n\nfunction toggleMode() {\n viewMode.value = viewMode.value === 'table' ? 'card' : 'table'\n emit('mode-change', viewMode.value)\n}\n\n/** 只读操作列宽度:按按钮数量估算 */\nconst actionColumnWidth = computed(() => {\n const w = props.rowActions.reduce((sum, act) => sum + act.text.length * 14 + 16, 20)\n return Math.max(w, 90)\n})\n\nfunction onRowAction(row: any, act: { text: string; command?: string; type?: string }) {\n emit('row-action', { row, command: act.command ?? act.text, text: act.text })\n}\n\n// ============ 对外方法(DataGrid 数据能力 + 可编辑能力) ============\nfunction requestApi(options?: { apiParam?: Record<string, any> }) {\n if (isStatic.value) return Promise.resolve()\n return grid.fetchData(options?.apiParam).then((res) => emit('loaded', res))\n}\nfunction refresh() {\n resetEditState()\n if (isStatic.value) {\n rows.value = staticSource.value.map((r) => ({ ...r }))\n return Promise.resolve()\n }\n return grid.fetchData().then((res) => emit('loaded', res))\n}\nfunction getSelection() {\n return grid.getSelection()\n}\nfunction clearSelection() {\n tableRef.value?.clearSelection?.()\n grid.clearSelection()\n}\nfunction search(params?: Record<string, any>) {\n if (isStatic.value) return Promise.resolve()\n resetEditState()\n currentPage.value = 1\n return grid.fetchData(params).then((res) => emit('loaded', res))\n}\nfunction resetSearch() {\n resetEditState()\n return grid.reset()\n}\n/**\n * 全量校验:默认校验所有行所有列;若传入 columns prop 数组,则只校验指定列;不满足则全部显示错误样式,首错提示并返回 false\n */\nasync function validate(columns?: string[]) {\n // 如果指定了只校验某些列,则只校验这些列;否则校验所有行所有列\n if (columns && columns.length > 0) {\n for (let i = 0; i < rows.value.length; i++) {\n const row = rows.value[i]\n for (const prop of columns) {\n const col = props.columns.find(c => c.prop === prop)\n if (!col) continue\n await validateCell(i, row, col)\n }\n }\n // 检查是否存在任意错误\n if (cellErrors.size > 0) {\n const firstEntry = Array.from(cellErrors.entries())[0]\n const [key, error] = firstEntry\n const [index] = key.split('-')\n ElMessage.warning(error)\n emit('validate-fail', { index: Number(index), error })\n return false\n }\n return true\n }\n // 默认:所有行所有列\n for (let i = 0; i < rows.value.length; i++) {\n const row = rows.value[i]\n for (const col of props.columns) {\n await validateCell(i, row, col)\n }\n }\n if (cellErrors.size > 0) {\n const firstEntry = Array.from(cellErrors.entries())[0]\n const [key, error] = firstEntry\n const [index] = key.split('-')\n ElMessage.warning(error)\n emit('validate-fail', { index: Number(index), error })\n return false\n }\n return true\n}\nfunction getDirtyRows() {\n return dirtyRows.value\n}\n\ndefineExpose({\n // 数据能力\n requestApi,\n refresh,\n search,\n resetSearch,\n onChangePagesize,\n onChangeCurrentpage,\n getSelection,\n clearSelection,\n // 可编辑能力\n saveAll,\n validate,\n addRow,\n getDirtyRows,\n tableRef\n})\n\n// ============ 联动注册(继承 DataGrid,可被 SearchPanel / refreshDataGrid 驱动) ============\nlet unregister: (() => void) | null = null\nonMounted(() => {\n unregister = registerDataGrid({\n filter: props.filter,\n refresh: () => refresh(),\n search: (params?: Record<string, any>) => search(params),\n resetSearch: () => resetSearch()\n })\n if (props.active && !isStatic.value) {\n requestApi()\n }\n if (isFixMode.value) {\n window.addEventListener('resize', onViewportResize)\n measureFixHeight()\n }\n // 点击外部关闭激活单元格\n document.addEventListener('mousedown', handleDocumentClick)\n})\nonBeforeUnmount(() => {\n window.removeEventListener('resize', onViewportResize)\n document.removeEventListener('mousedown', handleDocumentClick)\n unregister?.()\n})\n\n// api 变化自动重载\nwatch(\n () => [props.api, props.apiMethod],\n () => {\n if (props.active && !isStatic.value) requestApi()\n }\n)\n</script>\n\n<style scoped>\n.wd-editable-grid {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background: var(--wd-bg-color, #fff);\n}\n.wd-editable-grid--auto-height {\n height: 100%;\n}\n.wd-editable-grid__toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wd-spacing-base, 12px);\n padding: 0 0 var(--wd-spacing-base, 12px);\n flex-wrap: wrap;\n}\n.wd-editable-grid__toolbar :deep(.el-button + .el-button) {\n margin-left: 0;\n}\n.wd-editable-grid__toolbar :deep(.el-button .el-icon) {\n font-size: 16px;\n}\n.wd-editable-grid__toolbar-left {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n.wd-editable-grid__toolbar-right {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: auto;\n flex-wrap: wrap;\n}\n.wd-editable-grid__table {\n flex: 1;\n min-height: 0;\n}\n.wd-editable-grid__cell {\n width: 100%;\n min-height: 24px;\n border-radius: var(--wd-radius-small, 2px);\n transition: background-color 0.2s;\n}\n.wd-editable-grid__cell.is-editable {\n cursor: cell;\n}\n.wd-editable-grid__cell.is-editable:hover {\n color: var(--el-color-primary);\n}\n/* 已修改样式:单元格当前值与开始编辑时的值不一致。\n 默认为单元格最右侧红色感叹号小图标;开发者可用 CSS 变量覆盖:\n --wd-cell-dirty-decoration 波浪线形态(如 underline wavy / none,仅当图标不显示时生效)\n --wd-cell-dirty-color 图标颜色(默认警告色)\n --wd-cell-dirty-bg 单元格底色(默认透明)\n --wd-cell-dirty-show-icon 是否显示感叹号图标(默认 true,false 不显示)\n 例如保留底色高亮效果+关闭图标:--wd-cell-dirty-show-icon:false; --wd-cell-dirty-decoration:none; --wd-cell-dirty-bg:rgba(230,162,60,.12) */\n.wd-editable-grid__cell.is-dirty {\n position: relative;\n padding-right: var(--wd-cell-dirty-padding-right, 20px);\n background: var(--wd-cell-dirty-bg, transparent);\n}\n.wd-editable-grid__cell.is-dirty .wd-editable-grid__cell-dirty-icon {\n display: var(--wd-cell-dirty-show-icon, inline-block);\n position: absolute;\n right: 2px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--wd-cell-dirty-color, var(--el-color-warning, #e6a23c));\n font-size: var(--wd-cell-dirty-icon-size, 14px);\n}\n/* 约束失败样式:不满足列 rules(与 ElForm 一致)时展示。\n 开发者可用 CSS 变量覆盖:\n --wd-cell-error-bg 单元格底色(默认 danger 淡色)\n --wd-cell-error-border 边框阴影(默认 1px danger 边框)\n 例如自定义深色覆盖:--wd-cell-error-bg: rgba(245, 108, 108, 0.3); */\n.wd-editable-grid__cell.is-error {\n background: var(--wd-cell-error-bg, rgba(245, 108, 108, 0.08));\n box-shadow: inset 0 0 0 1px var(--wd-cell-error-border, var(--el-color-danger, #f56c6c));\n}\n.wd-editable-grid__pager {\n display: flex;\n justify-content: flex-end;\n padding-top: var(--wd-spacing-base, 12px);\n}\n.wd-editable-grid__cards {\n flex: 1;\n min-height: 0;\n overflow: auto;\n}\n.wd-editable-grid__card {\n /* 组件级令牌回退链:皮肤可单独定制 EditableGrid 卡片 */\n background: var(--wd-editable-grid-bg, transparent);\n /* 背景素材:皮肤可挂纹理/图片(须置于 background 简写之后,否则被简写重置) */\n background-image: var(--wd-editable-grid-bg-image, none);\n border: var(--wd-border-width, 1px) var(--wd-border-style, solid) var(--wd-editable-grid-border-color, var(--wd-border-color-light, #e4e7ed));\n border-radius: var(--wd-editable-grid-radius, var(--wd-radius-base, 4px));\n padding: var(--wd-editable-grid-padding, var(--wd-spacing-base, 12px));\n margin-bottom: var(--wd-spacing-base, 12px);\n}\n.wd-editable-grid__card-title {\n font-weight: 600;\n font-size: var(--wd-font-size-large, 16px);\n color: var(--wd-text-color-primary, #303133);\n margin-bottom: 8px;\n}\n.wd-editable-grid__card-line {\n display: flex;\n font-size: var(--wd-font-size-base, 14px);\n line-height: 1.8;\n}\n.wd-editable-grid__card-label {\n width: 110px;\n color: var(--wd-text-color-secondary, #909399);\n flex-shrink: 0;\n}\n.wd-editable-grid__card-value {\n color: var(--wd-text-color-regular, #606266);\n word-break: break-all;\n}\n.wd-editable-grid__col-setting {\n max-height: 400px;\n overflow: auto;\n}\n.wd-editable-grid__col-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 0;\n border-bottom: var(--wd-border-width, 1px) var(--wd-border-style, solid) var(--wd-border-color-light, #f0f0f0);\n}\n.wd-editable-grid__col-actions {\n display: flex;\n gap: 4px;\n}\n</style>\n"],"names":["_extends","target","i","source","key","_inheritsLoose","subClass","superClass","_setPrototypeOf","_getPrototypeOf","o","p","_isNativeReflectConstruct","_construct","Parent","args","Class","a","Constructor","instance","_isNativeFunction","fn","_wrapNativeSuper","_cache","Wrapper","formatRegExp","warning","type","errors","e","convertFieldsError","fields","error","field","format","template","_len","_key","len","str","x","isNativeStringType","isEmptyValue","value","asyncParallelArray","arr","func","callback","results","total","arrLength","count","asyncSerialArray","index","next","original","flattenObjArr","objArr","ret","k","AsyncValidationError","_Error","_this","asyncMap","option","_pending","resolve","reject","flattenArr","firstFields","objArrKeys","objArrLength","pending","isErrorObj","obj","getValue","path","v","complementError","rule","oe","fieldValue","deepMerge","s","required$1","options","whitespace","urlReg","getUrlRegex","word","b","v4","v6seg","v6","v46Exact","v4exact","v6exact","ip","protocol","auth","ipv4","ipv6","host","domain","tld","port","regex","pattern$2","types","type$1","custom","ruleType","range","min","max","spRegexp","val","num","ENUM$1","enumerable$1","pattern$1","_pattern","rules","string","validate","method","number","_boolean","regexp","integer","floatFn","array","object","ENUM","enumerable","pattern","date","dateObject","required","any","validators","newMessages","cloned","messages","Schema","descriptor","_proto","name","item","_messages","source_","oc","_this2","complete","add","_errors","messages$1","series","keys","z","r","errorFields","data","doIt","deep","addFullField","schema","cb","errorList","filledErrors","fieldsSchema","paredFieldsSchema","fieldSchema","fieldSchemaList","errs","finalErrors","res","messageIndex","validator","ColumnRenderer","defineComponent","props","__props","emit","__emit","slots","useSlots","tableRef","ref","rootRef","viewMode","globalCfg","getGlobalConfig","pagerPageSizes","hideOnSinglePage","isStatic","computed","grid","useDataGrid","loading","currentPage","pageSize","selection","rows","staticSource","dirtySet","reactive","editingRows","rowSnapshots","activeCell","cellBaselines","dirtyCells","cellErrors","addedRows","watch","resetEditState","saving","dirtyRows","cellKey","prop","isRowEditing","handleDocumentClick","focusCell","el","_b","_a","formatCell","row","col","opt","onCellClick","column","c","idx","markDirty","markCellChanged","syncDirtyCells","validateCell","onSelectChange","onDateChange","sameValue","base","hasDirty","cellState","cellErrorText","clearCellStates","prefix","validateRowCells","first","err","startEditRow","saveRow","ElMessage","cancelRow","snapshot","addRow","removeRow","ElMessageBox","shift","shiftSet","n","baseNext","shiftKey","dash","nk","validateAll","indices","saveAll","changedRows","result","request","refreshDataGrid","toolsConf","hasToolbar","hasTools","sizeStorageKey","storedSize","safeJsonParse","innerSize","onSizeChange","cmd","availFixHeight","fixTableHeight","isFixMode","rootStyle","tableHeight","h","measureFixHeight","viewH","top","avail","toolbar","pager","onViewportResize","nextTick","pagerLayout","controllableColumns","hiddenKeys","colSettingVisible","initColumns","initColumnMetas","setColumnVisible","moveColumn","resetColumns","useColumnSettings","columnsInited","visibleColumns","ensureColumnSettings","slotColumnVnodes","defaultSlot","filterColumnVnodes","slotVnodes","metas","extractColumns","vnodes","hidden","vnode","indexMethod","rowspanMethod","rowIndex","columnIndex","keyVal","firstIdx","onSelectionChange","selected","onChangeCurrentpage","onChangePagesize","toggleMode","actionColumnWidth","w","sum","act","onRowAction","requestApi","refresh","getSelection","clearSelection","search","params","resetSearch","columns","firstEntry","getDirtyRows","__expose","unregister","onMounted","registerDataGrid","onBeforeUnmount","_createElementBlock","_normalizeClass","_openBlock","_hoisted_1","_createElementVNode","_hoisted_2","_renderSlot","_ctx","_unref","_createBlock","_component_el_button","Plus","_hoisted_3","_toDisplayString","_component_el_tooltip","_createVNode","_component_el_icon","Refresh","_component_el_dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","ScaleToOriginal","Grid","Menu","Setting","_component_el_table","_component_el_empty","_component_el_table_column","_Fragment","_renderList","_withCtx","$index","_component_el_input","$event","_component_el_input_number","_component_el_select","_component_el_option","_component_el_date_picker","_hoisted_6","WarningFilled","_hoisted_8","_createTextVNode","_withDirectives","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_component_el_pagination","_component_el_dialog","_hoisted_15","_component_el_checkbox","_hoisted_16"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"EditableGrid-e3wwCaem.mjs","sources":["../../node_modules/async-validator/dist-web/index.js","../../src/components/data/editable-grid/EditableGrid.vue"],"sourcesContent":["function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n\n _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct.bind();\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nfunction _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\n/* eslint no-console:0 */\nvar formatRegExp = /%[sdj%]/g;\nvar warning = function warning() {}; // don't print warning message when in production env or node runtime\n\nif (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') {\n warning = function warning(type, errors) {\n if (typeof console !== 'undefined' && console.warn && typeof ASYNC_VALIDATOR_NO_WARNING === 'undefined') {\n if (errors.every(function (e) {\n return typeof e === 'string';\n })) {\n console.warn(type, errors);\n }\n }\n };\n}\n\nfunction convertFieldsError(errors) {\n if (!errors || !errors.length) return null;\n var fields = {};\n errors.forEach(function (error) {\n var field = error.field;\n fields[field] = fields[field] || [];\n fields[field].push(error);\n });\n return fields;\n}\nfunction format(template) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var i = 0;\n var len = args.length;\n\n if (typeof template === 'function') {\n return template.apply(null, args);\n }\n\n if (typeof template === 'string') {\n var str = template.replace(formatRegExp, function (x) {\n if (x === '%%') {\n return '%';\n }\n\n if (i >= len) {\n return x;\n }\n\n switch (x) {\n case '%s':\n return String(args[i++]);\n\n case '%d':\n return Number(args[i++]);\n\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n\n break;\n\n default:\n return x;\n }\n });\n return str;\n }\n\n return template;\n}\n\nfunction isNativeStringType(type) {\n return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'date' || type === 'pattern';\n}\n\nfunction isEmptyValue(value, type) {\n if (value === undefined || value === null) {\n return true;\n }\n\n if (type === 'array' && Array.isArray(value) && !value.length) {\n return true;\n }\n\n if (isNativeStringType(type) && typeof value === 'string' && !value) {\n return true;\n }\n\n return false;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n var results = [];\n var total = 0;\n var arrLength = arr.length;\n\n function count(errors) {\n results.push.apply(results, errors || []);\n total++;\n\n if (total === arrLength) {\n callback(results);\n }\n }\n\n arr.forEach(function (a) {\n func(a, count);\n });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n var index = 0;\n var arrLength = arr.length;\n\n function next(errors) {\n if (errors && errors.length) {\n callback(errors);\n return;\n }\n\n var original = index;\n index = index + 1;\n\n if (original < arrLength) {\n func(arr[original], next);\n } else {\n callback([]);\n }\n }\n\n next([]);\n}\n\nfunction flattenObjArr(objArr) {\n var ret = [];\n Object.keys(objArr).forEach(function (k) {\n ret.push.apply(ret, objArr[k] || []);\n });\n return ret;\n}\n\nvar AsyncValidationError = /*#__PURE__*/function (_Error) {\n _inheritsLoose(AsyncValidationError, _Error);\n\n function AsyncValidationError(errors, fields) {\n var _this;\n\n _this = _Error.call(this, 'Async Validation Error') || this;\n _this.errors = errors;\n _this.fields = fields;\n return _this;\n }\n\n return AsyncValidationError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\nfunction asyncMap(objArr, option, func, callback, source) {\n if (option.first) {\n var _pending = new Promise(function (resolve, reject) {\n var next = function next(errors) {\n callback(errors);\n return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(source);\n };\n\n var flattenArr = flattenObjArr(objArr);\n asyncSerialArray(flattenArr, func, next);\n });\n\n _pending[\"catch\"](function (e) {\n return e;\n });\n\n return _pending;\n }\n\n var firstFields = option.firstFields === true ? Object.keys(objArr) : option.firstFields || [];\n var objArrKeys = Object.keys(objArr);\n var objArrLength = objArrKeys.length;\n var total = 0;\n var results = [];\n var pending = new Promise(function (resolve, reject) {\n var next = function next(errors) {\n results.push.apply(results, errors);\n total++;\n\n if (total === objArrLength) {\n callback(results);\n return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(source);\n }\n };\n\n if (!objArrKeys.length) {\n callback(results);\n resolve(source);\n }\n\n objArrKeys.forEach(function (key) {\n var arr = objArr[key];\n\n if (firstFields.indexOf(key) !== -1) {\n asyncSerialArray(arr, func, next);\n } else {\n asyncParallelArray(arr, func, next);\n }\n });\n });\n pending[\"catch\"](function (e) {\n return e;\n });\n return pending;\n}\n\nfunction isErrorObj(obj) {\n return !!(obj && obj.message !== undefined);\n}\n\nfunction getValue(value, path) {\n var v = value;\n\n for (var i = 0; i < path.length; i++) {\n if (v == undefined) {\n return v;\n }\n\n v = v[path[i]];\n }\n\n return v;\n}\n\nfunction complementError(rule, source) {\n return function (oe) {\n var fieldValue;\n\n if (rule.fullFields) {\n fieldValue = getValue(source, rule.fullFields);\n } else {\n fieldValue = source[oe.field || rule.fullField];\n }\n\n if (isErrorObj(oe)) {\n oe.field = oe.field || rule.fullField;\n oe.fieldValue = fieldValue;\n return oe;\n }\n\n return {\n message: typeof oe === 'function' ? oe() : oe,\n fieldValue: fieldValue,\n field: oe.field || rule.fullField\n };\n };\n}\nfunction deepMerge(target, source) {\n if (source) {\n for (var s in source) {\n if (source.hasOwnProperty(s)) {\n var value = source[s];\n\n if (typeof value === 'object' && typeof target[s] === 'object') {\n target[s] = _extends({}, target[s], value);\n } else {\n target[s] = value;\n }\n }\n }\n }\n\n return target;\n}\n\nvar required$1 = function required(rule, value, source, errors, options, type) {\n if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {\n errors.push(format(options.messages.required, rule.fullField));\n }\n};\n\n/**\n * Rule for validating whitespace.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\n\nvar whitespace = function whitespace(rule, value, source, errors, options) {\n if (/^\\s+$/.test(value) || value === '') {\n errors.push(format(options.messages.whitespace, rule.fullField));\n }\n};\n\n// https://github.com/kevva/url-regex/blob/master/index.js\nvar urlReg;\nvar getUrlRegex = (function () {\n if (urlReg) {\n return urlReg;\n }\n\n var word = '[a-fA-F\\\\d:]';\n\n var b = function b(options) {\n return options && options.includeBoundaries ? \"(?:(?<=\\\\s|^)(?=\" + word + \")|(?<=\" + word + \")(?=\\\\s|$))\" : '';\n };\n\n var v4 = '(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}';\n var v6seg = '[a-fA-F\\\\d]{1,4}';\n var v6 = (\"\\n(?:\\n(?:\" + v6seg + \":){7}(?:\" + v6seg + \"|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8\\n(?:\" + v6seg + \":){6}(?:\" + v4 + \"|:\" + v6seg + \"|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4\\n(?:\" + v6seg + \":){5}(?::\" + v4 + \"|(?::\" + v6seg + \"){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4\\n(?:\" + v6seg + \":){4}(?:(?::\" + v6seg + \"){0,1}:\" + v4 + \"|(?::\" + v6seg + \"){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4\\n(?:\" + v6seg + \":){3}(?:(?::\" + v6seg + \"){0,2}:\" + v4 + \"|(?::\" + v6seg + \"){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4\\n(?:\" + v6seg + \":){2}(?:(?::\" + v6seg + \"){0,3}:\" + v4 + \"|(?::\" + v6seg + \"){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4\\n(?:\" + v6seg + \":){1}(?:(?::\" + v6seg + \"){0,4}:\" + v4 + \"|(?::\" + v6seg + \"){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4\\n(?::(?:(?::\" + v6seg + \"){0,5}:\" + v4 + \"|(?::\" + v6seg + \"){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4\\n)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1\\n\").replace(/\\s*\\/\\/.*$/gm, '').replace(/\\n/g, '').trim(); // Pre-compile only the exact regexes because adding a global flag make regexes stateful\n\n var v46Exact = new RegExp(\"(?:^\" + v4 + \"$)|(?:^\" + v6 + \"$)\");\n var v4exact = new RegExp(\"^\" + v4 + \"$\");\n var v6exact = new RegExp(\"^\" + v6 + \"$\");\n\n var ip = function ip(options) {\n return options && options.exact ? v46Exact : new RegExp(\"(?:\" + b(options) + v4 + b(options) + \")|(?:\" + b(options) + v6 + b(options) + \")\", 'g');\n };\n\n ip.v4 = function (options) {\n return options && options.exact ? v4exact : new RegExp(\"\" + b(options) + v4 + b(options), 'g');\n };\n\n ip.v6 = function (options) {\n return options && options.exact ? v6exact : new RegExp(\"\" + b(options) + v6 + b(options), 'g');\n };\n\n var protocol = \"(?:(?:[a-z]+:)?//)\";\n var auth = '(?:\\\\S+(?::\\\\S*)?@)?';\n var ipv4 = ip.v4().source;\n var ipv6 = ip.v6().source;\n var host = \"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9][-_]*)*[a-z\\\\u00a1-\\\\uffff0-9]+)\";\n var domain = \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*\";\n var tld = \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\";\n var port = '(?::\\\\d{2,5})?';\n var path = '(?:[/?#][^\\\\s\"]*)?';\n var regex = \"(?:\" + protocol + \"|www\\\\.)\" + auth + \"(?:localhost|\" + ipv4 + \"|\" + ipv6 + \"|\" + host + domain + tld + \")\" + port + path;\n urlReg = new RegExp(\"(?:^\" + regex + \"$)\", 'i');\n return urlReg;\n});\n\n/* eslint max-len:0 */\n\nvar pattern$2 = {\n // http://emailregex.com/\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+\\.)+[a-zA-Z\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]{2,}))$/,\n // url: new RegExp(\n // '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$',\n // 'i',\n // ),\n hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i\n};\nvar types = {\n integer: function integer(value) {\n return types.number(value) && parseInt(value, 10) === value;\n },\n \"float\": function float(value) {\n return types.number(value) && !types.integer(value);\n },\n array: function array(value) {\n return Array.isArray(value);\n },\n regexp: function regexp(value) {\n if (value instanceof RegExp) {\n return true;\n }\n\n try {\n return !!new RegExp(value);\n } catch (e) {\n return false;\n }\n },\n date: function date(value) {\n return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function' && !isNaN(value.getTime());\n },\n number: function number(value) {\n if (isNaN(value)) {\n return false;\n }\n\n return typeof value === 'number';\n },\n object: function object(value) {\n return typeof value === 'object' && !types.array(value);\n },\n method: function method(value) {\n return typeof value === 'function';\n },\n email: function email(value) {\n return typeof value === 'string' && value.length <= 320 && !!value.match(pattern$2.email);\n },\n url: function url(value) {\n return typeof value === 'string' && value.length <= 2048 && !!value.match(getUrlRegex());\n },\n hex: function hex(value) {\n return typeof value === 'string' && !!value.match(pattern$2.hex);\n }\n};\n\nvar type$1 = function type(rule, value, source, errors, options) {\n if (rule.required && value === undefined) {\n required$1(rule, value, source, errors, options);\n return;\n }\n\n var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];\n var ruleType = rule.type;\n\n if (custom.indexOf(ruleType) > -1) {\n if (!types[ruleType](value)) {\n errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n } // straight typeof check\n\n } else if (ruleType && typeof value !== rule.type) {\n errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));\n }\n};\n\nvar range = function range(rule, value, source, errors, options) {\n var len = typeof rule.len === 'number';\n var min = typeof rule.min === 'number';\n var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n\n var spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var val = value;\n var key = null;\n var num = typeof value === 'number';\n var str = typeof value === 'string';\n var arr = Array.isArray(value);\n\n if (num) {\n key = 'number';\n } else if (str) {\n key = 'string';\n } else if (arr) {\n key = 'array';\n } // if the value is not of a supported type for range validation\n // the validation rule rule should use the\n // type property to also test for a particular type\n\n\n if (!key) {\n return false;\n }\n\n if (arr) {\n val = value.length;\n }\n\n if (str) {\n // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n val = value.replace(spRegexp, '_').length;\n }\n\n if (len) {\n if (val !== rule.len) {\n errors.push(format(options.messages[key].len, rule.fullField, rule.len));\n }\n } else if (min && !max && val < rule.min) {\n errors.push(format(options.messages[key].min, rule.fullField, rule.min));\n } else if (max && !min && val > rule.max) {\n errors.push(format(options.messages[key].max, rule.fullField, rule.max));\n } else if (min && max && (val < rule.min || val > rule.max)) {\n errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));\n }\n};\n\nvar ENUM$1 = 'enum';\n\nvar enumerable$1 = function enumerable(rule, value, source, errors, options) {\n rule[ENUM$1] = Array.isArray(rule[ENUM$1]) ? rule[ENUM$1] : [];\n\n if (rule[ENUM$1].indexOf(value) === -1) {\n errors.push(format(options.messages[ENUM$1], rule.fullField, rule[ENUM$1].join(', ')));\n }\n};\n\nvar pattern$1 = function pattern(rule, value, source, errors, options) {\n if (rule.pattern) {\n if (rule.pattern instanceof RegExp) {\n // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n // flag is accidentally set to `true`, which in a validation scenario\n // is not necessary and the result might be misleading\n rule.pattern.lastIndex = 0;\n\n if (!rule.pattern.test(value)) {\n errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n }\n } else if (typeof rule.pattern === 'string') {\n var _pattern = new RegExp(rule.pattern);\n\n if (!_pattern.test(value)) {\n errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n }\n }\n }\n};\n\nvar rules = {\n required: required$1,\n whitespace: whitespace,\n type: type$1,\n range: range,\n \"enum\": enumerable$1,\n pattern: pattern$1\n};\n\nvar string = function string(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options, 'string');\n\n if (!isEmptyValue(value, 'string')) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n rules.pattern(rule, value, source, errors, options);\n\n if (rule.whitespace === true) {\n rules.whitespace(rule, value, source, errors, options);\n }\n }\n }\n\n callback(errors);\n};\n\nvar method = function method(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar number = function number(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (value === '') {\n value = undefined;\n }\n\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar _boolean = function _boolean(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar regexp = function regexp(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (!isEmptyValue(value)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar integer = function integer(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar floatFn = function floatFn(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar array = function array(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if ((value === undefined || value === null) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options, 'array');\n\n if (value !== undefined && value !== null) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar object = function object(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar ENUM = 'enum';\n\nvar enumerable = function enumerable(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (value !== undefined) {\n rules[ENUM](rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar pattern = function pattern(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (!isEmptyValue(value, 'string')) {\n rules.pattern(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar date = function date(rule, value, callback, source, options) {\n // console.log('integer rule called %j', rule);\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); // console.log('validate on %s value', value);\n\n if (validate) {\n if (isEmptyValue(value, 'date') && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n\n if (!isEmptyValue(value, 'date')) {\n var dateObject;\n\n if (value instanceof Date) {\n dateObject = value;\n } else {\n dateObject = new Date(value);\n }\n\n rules.type(rule, dateObject, source, errors, options);\n\n if (dateObject) {\n rules.range(rule, dateObject.getTime(), source, errors, options);\n }\n }\n }\n\n callback(errors);\n};\n\nvar required = function required(rule, value, callback, source, options) {\n var errors = [];\n var type = Array.isArray(value) ? 'array' : typeof value;\n rules.required(rule, value, source, errors, options, type);\n callback(errors);\n};\n\nvar type = function type(rule, value, callback, source, options) {\n var ruleType = rule.type;\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value, ruleType) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options, ruleType);\n\n if (!isEmptyValue(value, ruleType)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n\n callback(errors);\n};\n\nvar any = function any(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n\n rules.required(rule, value, source, errors, options);\n }\n\n callback(errors);\n};\n\nvar validators = {\n string: string,\n method: method,\n number: number,\n \"boolean\": _boolean,\n regexp: regexp,\n integer: integer,\n \"float\": floatFn,\n array: array,\n object: object,\n \"enum\": enumerable,\n pattern: pattern,\n date: date,\n url: type,\n hex: type,\n email: type,\n required: required,\n any: any\n};\n\nfunction newMessages() {\n return {\n \"default\": 'Validation error on field %s',\n required: '%s is required',\n \"enum\": '%s must be one of %s',\n whitespace: '%s cannot be empty',\n date: {\n format: '%s date %s is invalid for format %s',\n parse: '%s date could not be parsed, %s is invalid ',\n invalid: '%s date %s is invalid'\n },\n types: {\n string: '%s is not a %s',\n method: '%s is not a %s (function)',\n array: '%s is not an %s',\n object: '%s is not an %s',\n number: '%s is not a %s',\n date: '%s is not a %s',\n \"boolean\": '%s is not a %s',\n integer: '%s is not an %s',\n \"float\": '%s is not a %s',\n regexp: '%s is not a valid %s',\n email: '%s is not a valid %s',\n url: '%s is not a valid %s',\n hex: '%s is not a valid %s'\n },\n string: {\n len: '%s must be exactly %s characters',\n min: '%s must be at least %s characters',\n max: '%s cannot be longer than %s characters',\n range: '%s must be between %s and %s characters'\n },\n number: {\n len: '%s must equal %s',\n min: '%s cannot be less than %s',\n max: '%s cannot be greater than %s',\n range: '%s must be between %s and %s'\n },\n array: {\n len: '%s must be exactly %s in length',\n min: '%s cannot be less than %s in length',\n max: '%s cannot be greater than %s in length',\n range: '%s must be between %s and %s in length'\n },\n pattern: {\n mismatch: '%s value %s does not match pattern %s'\n },\n clone: function clone() {\n var cloned = JSON.parse(JSON.stringify(this));\n cloned.clone = this.clone;\n return cloned;\n }\n };\n}\nvar messages = newMessages();\n\n/**\n * Encapsulates a validation schema.\n *\n * @param descriptor An object declaring validation rules\n * for this schema.\n */\n\nvar Schema = /*#__PURE__*/function () {\n // ========================= Static =========================\n // ======================== Instance ========================\n function Schema(descriptor) {\n this.rules = null;\n this._messages = messages;\n this.define(descriptor);\n }\n\n var _proto = Schema.prototype;\n\n _proto.define = function define(rules) {\n var _this = this;\n\n if (!rules) {\n throw new Error('Cannot configure a schema with no rules');\n }\n\n if (typeof rules !== 'object' || Array.isArray(rules)) {\n throw new Error('Rules must be an object');\n }\n\n this.rules = {};\n Object.keys(rules).forEach(function (name) {\n var item = rules[name];\n _this.rules[name] = Array.isArray(item) ? item : [item];\n });\n };\n\n _proto.messages = function messages(_messages) {\n if (_messages) {\n this._messages = deepMerge(newMessages(), _messages);\n }\n\n return this._messages;\n };\n\n _proto.validate = function validate(source_, o, oc) {\n var _this2 = this;\n\n if (o === void 0) {\n o = {};\n }\n\n if (oc === void 0) {\n oc = function oc() {};\n }\n\n var source = source_;\n var options = o;\n var callback = oc;\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n if (!this.rules || Object.keys(this.rules).length === 0) {\n if (callback) {\n callback(null, source);\n }\n\n return Promise.resolve(source);\n }\n\n function complete(results) {\n var errors = [];\n var fields = {};\n\n function add(e) {\n if (Array.isArray(e)) {\n var _errors;\n\n errors = (_errors = errors).concat.apply(_errors, e);\n } else {\n errors.push(e);\n }\n }\n\n for (var i = 0; i < results.length; i++) {\n add(results[i]);\n }\n\n if (!errors.length) {\n callback(null, source);\n } else {\n fields = convertFieldsError(errors);\n callback(errors, fields);\n }\n }\n\n if (options.messages) {\n var messages$1 = this.messages();\n\n if (messages$1 === messages) {\n messages$1 = newMessages();\n }\n\n deepMerge(messages$1, options.messages);\n options.messages = messages$1;\n } else {\n options.messages = this.messages();\n }\n\n var series = {};\n var keys = options.keys || Object.keys(this.rules);\n keys.forEach(function (z) {\n var arr = _this2.rules[z];\n var value = source[z];\n arr.forEach(function (r) {\n var rule = r;\n\n if (typeof rule.transform === 'function') {\n if (source === source_) {\n source = _extends({}, source);\n }\n\n value = source[z] = rule.transform(value);\n }\n\n if (typeof rule === 'function') {\n rule = {\n validator: rule\n };\n } else {\n rule = _extends({}, rule);\n } // Fill validator. Skip if nothing need to validate\n\n\n rule.validator = _this2.getValidationMethod(rule);\n\n if (!rule.validator) {\n return;\n }\n\n rule.field = z;\n rule.fullField = rule.fullField || z;\n rule.type = _this2.getType(rule);\n series[z] = series[z] || [];\n series[z].push({\n rule: rule,\n value: value,\n source: source,\n field: z\n });\n });\n });\n var errorFields = {};\n return asyncMap(series, options, function (data, doIt) {\n var rule = data.rule;\n var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField === 'object');\n deep = deep && (rule.required || !rule.required && data.value);\n rule.field = data.field;\n\n function addFullField(key, schema) {\n return _extends({}, schema, {\n fullField: rule.fullField + \".\" + key,\n fullFields: rule.fullFields ? [].concat(rule.fullFields, [key]) : [key]\n });\n }\n\n function cb(e) {\n if (e === void 0) {\n e = [];\n }\n\n var errorList = Array.isArray(e) ? e : [e];\n\n if (!options.suppressWarning && errorList.length) {\n Schema.warning('async-validator:', errorList);\n }\n\n if (errorList.length && rule.message !== undefined) {\n errorList = [].concat(rule.message);\n } // Fill error info\n\n\n var filledErrors = errorList.map(complementError(rule, source));\n\n if (options.first && filledErrors.length) {\n errorFields[rule.field] = 1;\n return doIt(filledErrors);\n }\n\n if (!deep) {\n doIt(filledErrors);\n } else {\n // if rule is required but the target object\n // does not exist fail at the rule level and don't\n // go deeper\n if (rule.required && !data.value) {\n if (rule.message !== undefined) {\n filledErrors = [].concat(rule.message).map(complementError(rule, source));\n } else if (options.error) {\n filledErrors = [options.error(rule, format(options.messages.required, rule.field))];\n }\n\n return doIt(filledErrors);\n }\n\n var fieldsSchema = {};\n\n if (rule.defaultField) {\n Object.keys(data.value).map(function (key) {\n fieldsSchema[key] = rule.defaultField;\n });\n }\n\n fieldsSchema = _extends({}, fieldsSchema, data.rule.fields);\n var paredFieldsSchema = {};\n Object.keys(fieldsSchema).forEach(function (field) {\n var fieldSchema = fieldsSchema[field];\n var fieldSchemaList = Array.isArray(fieldSchema) ? fieldSchema : [fieldSchema];\n paredFieldsSchema[field] = fieldSchemaList.map(addFullField.bind(null, field));\n });\n var schema = new Schema(paredFieldsSchema);\n schema.messages(options.messages);\n\n if (data.rule.options) {\n data.rule.options.messages = options.messages;\n data.rule.options.error = options.error;\n }\n\n schema.validate(data.value, data.rule.options || options, function (errs) {\n var finalErrors = [];\n\n if (filledErrors && filledErrors.length) {\n finalErrors.push.apply(finalErrors, filledErrors);\n }\n\n if (errs && errs.length) {\n finalErrors.push.apply(finalErrors, errs);\n }\n\n doIt(finalErrors.length ? finalErrors : null);\n });\n }\n }\n\n var res;\n\n if (rule.asyncValidator) {\n res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n } else if (rule.validator) {\n try {\n res = rule.validator(rule, data.value, cb, data.source, options);\n } catch (error) {\n console.error == null ? void 0 : console.error(error); // rethrow to report error\n\n if (!options.suppressValidatorError) {\n setTimeout(function () {\n throw error;\n }, 0);\n }\n\n cb(error.message);\n }\n\n if (res === true) {\n cb();\n } else if (res === false) {\n cb(typeof rule.message === 'function' ? rule.message(rule.fullField || rule.field) : rule.message || (rule.fullField || rule.field) + \" fails\");\n } else if (res instanceof Array) {\n cb(res);\n } else if (res instanceof Error) {\n cb(res.message);\n }\n }\n\n if (res && res.then) {\n res.then(function () {\n return cb();\n }, function (e) {\n return cb(e);\n });\n }\n }, function (results) {\n complete(results);\n }, source);\n };\n\n _proto.getType = function getType(rule) {\n if (rule.type === undefined && rule.pattern instanceof RegExp) {\n rule.type = 'pattern';\n }\n\n if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {\n throw new Error(format('Unknown rule type %s', rule.type));\n }\n\n return rule.type || 'string';\n };\n\n _proto.getValidationMethod = function getValidationMethod(rule) {\n if (typeof rule.validator === 'function') {\n return rule.validator;\n }\n\n var keys = Object.keys(rule);\n var messageIndex = keys.indexOf('message');\n\n if (messageIndex !== -1) {\n keys.splice(messageIndex, 1);\n }\n\n if (keys.length === 1 && keys[0] === 'required') {\n return validators.required;\n }\n\n return validators[this.getType(rule)] || undefined;\n };\n\n return Schema;\n}();\n\nSchema.register = function register(type, validator) {\n if (typeof validator !== 'function') {\n throw new Error('Cannot register a validator by type, validator is not a function');\n }\n\n validators[type] = validator;\n};\n\nSchema.warning = warning;\nSchema.messages = messages;\nSchema.validators = validators;\n\nexport { Schema as default };\n//# sourceMappingURL=index.js.map\n","<template>\n <div\n ref=\"rootRef\"\n class=\"wd-editable-grid\"\n :class=\"{ 'wd-editable-grid--auto-height': autoHeight }\"\n :style=\"rootStyle\"\n >\n <!-- 工具栏:左 toolbar 插槽 + 新增按钮,右 批量保存 + actions + tools 功能按钮 -->\n <div v-if=\"withToolbar && (hasToolbar || hasTools)\" class=\"wd-editable-grid__toolbar\">\n <div class=\"wd-editable-grid__toolbar-left\">\n <slot name=\"toolbar\" :dirty-rows=\"dirtyRows\" :rows=\"rows\" :selection=\"selection\">\n <el-button v-if=\"withAdd\" type=\"primary\" :icon=\"Plus\" @click=\"addRow\">{{ addButtonText }}</el-button>\n </slot>\n </div>\n <div class=\"wd-editable-grid__toolbar-right\">\n <el-button\n v-if=\"withSave\"\n type=\"success\"\n :loading=\"saving\"\n :disabled=\"!dirtyRows.length\"\n @click=\"saveAll\"\n >\n {{ saveButtonText }}<span v-if=\"dirtyRows.length\">({{ dirtyRows.length }})</span>\n </el-button>\n <slot name=\"actions\" :dirty-rows=\"dirtyRows\" :rows=\"rows\" :selection=\"selection\" />\n <el-tooltip v-if=\"toolsConf.refresh\" content=\"刷新\" placement=\"top\">\n <el-button circle @click=\"refresh\">\n <el-icon><Refresh /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.size\" content=\"调整大小\" placement=\"top\">\n <el-dropdown trigger=\"click\" @command=\"onSizeChange\">\n <el-button circle>\n <el-icon><ScaleToOriginal /></el-icon>\n </el-button>\n <template #dropdown>\n <el-dropdown-menu>\n <el-dropdown-item command=\"large\" :disabled=\"innerSize === 'large'\">大</el-dropdown-item>\n <el-dropdown-item command=\"default\" :disabled=\"innerSize === 'default'\">默认</el-dropdown-item>\n <el-dropdown-item command=\"small\" :disabled=\"innerSize === 'small'\">小</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.modeSwitch || modeSwitch\" content=\"表格/列表切换\" placement=\"top\">\n <el-button circle @click=\"toggleMode\">\n <el-icon><Grid v-if=\"viewMode === 'card'\" /><Menu v-else /></el-icon>\n </el-button>\n </el-tooltip>\n <el-tooltip v-if=\"toolsConf.columnSetting || dynamicColumn\" content=\"列设置\" placement=\"top\">\n <el-button circle @click=\"colSettingVisible = true\">\n <el-icon><Setting /></el-icon>\n </el-button>\n </el-tooltip>\n </div>\n </div>\n\n <!-- 表格主体 -->\n <el-table\n v-if=\"viewMode === 'table'\"\n ref=\"tableRef\"\n v-loading=\"loading\"\n :data=\"rows\"\n :size=\"innerSize\"\n :border=\"border\"\n :stripe=\"stripe\"\n :height=\"tableHeight\"\n :row-key=\"rowKey || undefined\"\n :tree-props=\"treeProps\"\n :default-expand-all=\"defaultExpandAll\"\n :span-method=\"rowspanMethod\"\n class=\"wd-editable-grid__table\"\n @selection-change=\"onSelectionChange\"\n @cell-click=\"onCellClick\"\n >\n <el-table-column v-if=\"withSelection\" type=\"selection\" width=\"60\" align=\"center\" reserve-selection />\n <el-table-column v-if=\"withIndex\" type=\"index\" label=\"序号\" width=\"60\" align=\"center\" :index=\"indexMethod\" />\n\n <!-- 可编辑列(columns 配置驱动) -->\n <el-table-column\n v-for=\"col in visibleColumns\"\n :key=\"col.prop\"\n :prop=\"col.prop\"\n :label=\"col.label\"\n :width=\"col.width\"\n :min-width=\"col.minWidth\"\n :align=\"col.align || 'left'\"\n :fixed=\"col.fixed\"\n >\n <template #default=\"{ row, $index }\">\n <!-- 行编辑模式 -->\n <template v-if=\"editMode === 'row'\">\n <div class=\"wd-editable-grid__cell\" :class=\"cellState($index, col)\" :title=\"cellErrorText($index, col) || undefined\">\n <el-input\n v-if=\"isRowEditing($index) && col.editor === 'input'\"\n v-model=\"row[col.prop]\"\n :placeholder=\"col.placeholder\"\n @change=\"markCellChanged($index, col)\"\n />\n <el-input-number\n v-else-if=\"isRowEditing($index) && col.editor === 'number'\"\n v-model=\"row[col.prop]\"\n :min=\"col.min\"\n :max=\"col.max\"\n :precision=\"col.precision\"\n @change=\"markCellChanged($index, col)\"\n />\n <el-select\n v-else-if=\"isRowEditing($index) && col.editor === 'select'\"\n v-model=\"row[col.prop]\"\n :placeholder=\"col.placeholder\"\n @change=\"markCellChanged($index, col)\"\n >\n <el-option v-for=\"opt in col.options || []\" :key=\"opt.value\" :label=\"opt.text\" :value=\"opt.value\" />\n </el-select>\n <el-date-picker\n v-else-if=\"isRowEditing($index) && col.editor === 'date'\"\n v-model=\"row[col.prop]\"\n type=\"date\"\n value-format=\"YYYY-MM-DD\"\n :placeholder=\"col.placeholder\"\n @change=\"markCellChanged($index, col)\"\n />\n <slot v-else-if=\"isRowEditing($index)\" :name=\"`edit-${col.prop}`\" :row=\"row\" :index=\"$index\" :column=\"col\">\n <el-input v-model=\"row[col.prop]\" :placeholder=\"col.placeholder\" @change=\"markCellChanged($index, col)\" />\n </slot>\n <span v-else>{{ formatCell(row, col) }}</span>\n <template v-if=\"cellState($index, col)['is-dirty']\">\n <el-tooltip content=\"已修改\" placement=\"top\">\n <slot name=\"dirty-tip-{{ col.prop }}\" :row=\"row\" :column=\"col\" :index=\"$index\">\n <el-icon class=\"wd-editable-grid__cell-dirty-icon\">\n <WarningFilled />\n </el-icon>\n </slot>\n </el-tooltip>\n </template>\n </div>\n </template>\n\n <!-- 单元格编辑模式 -->\n <template v-else>\n <div class=\"wd-editable-grid__cell\" :class=\"cellState($index, col)\" :title=\"cellErrorText($index, col) || undefined\">\n <el-input\n v-if=\"activeCell === cellKey($index, col.prop) && col.editor === 'input'\"\n v-model=\"row[col.prop]\"\n :ref=\"focusCell\"\n :placeholder=\"col.placeholder\"\n @change=\"markCellChanged($index, col)\"\n />\n <el-input-number\n v-else-if=\"activeCell === cellKey($index, col.prop) && col.editor === 'number'\"\n v-model=\"row[col.prop]\"\n :ref=\"focusCell\"\n :min=\"col.min\"\n :max=\"col.max\"\n :precision=\"col.precision\"\n @change=\"markCellChanged($index, col)\"\n />\n <el-select\n v-else-if=\"activeCell === cellKey($index, col.prop) && col.editor === 'select'\"\n v-model=\"row[col.prop]\"\n :ref=\"focusCell\"\n :placeholder=\"col.placeholder\"\n @change=\"onSelectChange($index, col)\"\n >\n <el-option v-for=\"opt in col.options || []\" :key=\"opt.value\" :label=\"opt.text\" :value=\"opt.value\" />\n </el-select>\n <el-date-picker\n v-else-if=\"activeCell === cellKey($index, col.prop) && col.editor === 'date'\"\n v-model=\"row[col.prop]\"\n type=\"date\"\n value-format=\"YYYY-MM-DD\"\n :placeholder=\"col.placeholder\"\n @change=\"onDateChange($index, col)\"\n />\n <slot\n v-else-if=\"activeCell === cellKey($index, col.prop)\"\n :name=\"`edit-${col.prop}`\"\n :row=\"row\"\n :index=\"$index\"\n :column=\"col\"\n >\n <el-input v-model=\"row[col.prop]\" :placeholder=\"col.placeholder\" @change=\"markCellChanged($index, col)\" />\n </slot>\n <span v-else>{{ formatCell(row, col) }}</span>\n <template v-if=\"cellState($index, col)['is-dirty']\">\n <el-tooltip content=\"已修改\" placement=\"top\">\n <slot name=\"dirty-tip-{{ col.prop }}\" :row=\"row\" :column=\"col\" :index=\"$index\">\n <el-icon class=\"wd-editable-grid__cell-dirty-icon\">\n <WarningFilled />\n </el-icon>\n </slot>\n </el-tooltip>\n </template>\n </div>\n </template>\n </template>\n </el-table-column>\n\n <!-- 额外业务列:默认插槽内容(el-table-column),过滤隐藏列 -->\n <ColumnRenderer :vnodes=\"slotColumnVnodes\" />\n\n <!-- 内置操作列(rowActions 配置) -->\n <el-table-column\n v-if=\"rowActions.length\"\n label=\"操作\"\n :width=\"actionColumnWidth\"\n align=\"center\"\n fixed=\"right\"\n >\n <template #default=\"{ row }\">\n <el-button\n v-for=\"act in rowActions\"\n :key=\"act.command || act.text\"\n link\n size=\"small\"\n :type=\"(act.type as any) || 'primary'\"\n @click=\"onRowAction(row, act)\"\n >{{ act.text }}</el-button>\n </template>\n </el-table-column>\n\n <!-- 可编辑操作列 -->\n <el-table-column\n v-if=\"withActions\"\n label=\"操作\"\n :width=\"actionWidth\"\n align=\"center\"\n fixed=\"right\"\n >\n <template #default=\"{ row, $index }\">\n <template v-if=\"editMode === 'row'\">\n <template v-if=\"isRowEditing($index)\">\n <el-button link type=\"primary\" @click=\"saveRow($index)\">保存</el-button>\n <el-button link @click=\"cancelRow($index)\">取消</el-button>\n </template>\n <el-button v-else link type=\"primary\" @click=\"startEditRow($index)\">编辑</el-button>\n </template>\n <el-button v-if=\"withDelete\" link type=\"danger\" @click=\"removeRow($index)\">删除</el-button>\n <slot name=\"row-actions\" :row=\"row\" :index=\"$index\" />\n </template>\n </el-table-column>\n\n <template #empty>\n <slot name=\"empty\">\n <el-empty :description=\"loading ? '加载中...' : '暂无数据'\" :image-size=\"80\" />\n </slot>\n </template>\n </el-table>\n\n <!-- 列表(卡片)模式 -->\n <div v-else class=\"wd-editable-grid__cards\" v-loading=\"loading\">\n <el-empty v-if=\"!rows.length\" description=\"暂无数据\" :image-size=\"80\" />\n <div v-for=\"(row, idx) in rows\" :key=\"row[rowKey || 'id'] ?? idx\" class=\"wd-editable-grid__card\">\n <slot name=\"card-item\" :row=\"row\" :index=\"idx\">\n <div class=\"wd-editable-grid__card-title\">{{ row.name || row.title || `第 ${idx + 1} 项` }}</div>\n <div class=\"wd-editable-grid__card-body\">\n <div v-for=\"(val, k) in row\" :key=\"k\" class=\"wd-editable-grid__card-line\">\n <span class=\"wd-editable-grid__card-label\">{{ k }}</span>\n <span class=\"wd-editable-grid__card-value\">{{ val }}</span>\n </div>\n </div>\n </slot>\n </div>\n </div>\n\n <!-- 分页 -->\n <div v-if=\"withPager && viewMode === 'table'\" class=\"wd-editable-grid__pager\">\n <el-pagination\n :current-page=\"currentPage\"\n :page-size=\"pageSize\"\n :total=\"total\"\n :page-sizes=\"pagerPageSizes\"\n :layout=\"pagerLayout\"\n :small=\"pagerStyle === 'simple'\"\n :hide-on-single-page=\"hideOnSinglePage\"\n :background=\"true\"\n @current-change=\"onChangeCurrentpage\"\n @size-change=\"onChangePagesize\"\n />\n </div>\n\n <!-- 列设置弹层 -->\n <el-dialog v-model=\"colSettingVisible\" title=\"列设置\" width=\"360px\" append-to-body>\n <div class=\"wd-editable-grid__col-setting\">\n <div v-for=\"col in controllableColumns\" :key=\"col.key\" class=\"wd-editable-grid__col-item\">\n <el-checkbox\n :model-value=\"col.visible\"\n @update:model-value=\"(v: boolean) => setColumnVisible(col.key, v)\"\n >\n {{ col.label }}\n </el-checkbox>\n <div class=\"wd-editable-grid__col-actions\">\n <el-button link size=\"small\" :disabled=\"col.order === 0\" @click=\"moveColumn(col.key, -1)\">上移</el-button>\n <el-button\n link\n size=\"small\"\n :disabled=\"col.order === controllableColumns.length - 1\"\n @click=\"moveColumn(col.key, 1)\"\n >下移</el-button>\n </div>\n </div>\n </div>\n <template #footer>\n <el-button @click=\"resetColumns()\">恢复默认</el-button>\n <el-button type=\"primary\" @click=\"colSettingVisible = false\">完成</el-button>\n </template>\n </el-dialog>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n ref,\n reactive,\n computed,\n onMounted,\n onBeforeUnmount,\n useSlots,\n watch,\n nextTick,\n defineComponent,\n type VNode,\n type PropType\n} from 'vue'\nimport { Plus, Refresh, Setting, ScaleToOriginal, Grid, Menu, WarningFilled } from '@element-plus/icons-vue'\nimport { ElMessage, ElMessageBox } from 'element-plus'\nimport Schema from 'async-validator'\nimport { useDataGrid } from '../../../lib/composables/useDataGrid'\nimport { registerDataGrid, refreshDataGrid } from '../../../lib/core/linkage'\nimport { getGlobalConfig } from '../../../lib/core/config'\nimport { safeJsonParse } from '../../../lib/core/utils'\nimport { request } from '../../../lib/core/http'\nimport { filterProp, headRefreshDatagridProp } from '../../common/props'\nimport { useColumnSettings, extractColumns } from '../datagrid/useColumnSettings'\n\ndefineOptions({ name: 'WdEditableGrid' })\n\n/** 可编辑列配置 */\nexport interface EditableColumn {\n prop: string\n label: string\n width?: string | number\n minWidth?: string | number\n align?: 'left' | 'center' | 'right'\n fixed?: boolean | 'left' | 'right'\n /** 编辑器类型:input/number/select/date;默认 input */\n editor?: 'input' | 'number' | 'select' | 'date'\n editable?: boolean\n placeholder?: string\n /** select 选项 */\n options?: { text: string; value: any }[]\n /** number 约束 */\n min?: number\n max?: number\n precision?: number\n /** 必填校验 */\n required?: boolean\n /** 自定义校验:返回错误文案,空串/undefined 为通过 */\n validator?: (value: any, row: Record<string, any>) => string | undefined\n /**\n * 单元格内容校验规则(与 ElForm 的 rules 完全一致,基于 async-validator)。\n * 规则不满足时单元格显示约束样式,并在保存/行内保存时中断并提示。\n */\n rules?: Array<Record<string, any>>\n /** 展示格式化(只读态) */\n formatter?: (row: Record<string, any>, col: EditableColumn) => string\n}\n\n/**\n * 列渲染器:把默认插槽里的 el-table-column vnode 渲染进 el-table,\n * 保留插槽上下文({ row, column, $index })。\n */\nconst ColumnRenderer = defineComponent({\n name: 'WdColumnRenderer',\n props: {\n vnodes: { type: Array as PropType<VNode[]>, default: () => [] }\n },\n render() {\n return this.vnodes\n }\n})\n\nconst props = defineProps({\n ...filterProp,\n ...headRefreshDatagridProp,\n // ---- 可编辑列与数据 ----\n /** 可编辑列配置 */\n columns: {\n type: Array as PropType<EditableColumn[]>,\n default: () => []\n },\n /** 行数据(v-model,静态数据推荐用法) */\n modelValue: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => []\n },\n /** 编辑模式:cell=单元格点击编辑(默认);row=行编辑 */\n editMode: {\n type: String as PropType<'cell' | 'row'>,\n default: 'cell'\n },\n /** 批量保存地址;为空时仅本地保存并 emit save */\n saveApi: { type: String, default: '' },\n saveMethod: {\n type: String as PropType<'post' | 'put'>,\n default: 'post'\n },\n /** 新增行默认值(对象或工厂函数) */\n defaultRow: {\n type: [Object, Function] as PropType<Record<string, any> | (() => Record<string, any>)>,\n default: undefined\n },\n // ---- 数据源(继承 DataGrid:API / 静态) ----\n api: { type: String, default: '' },\n apiMethod: { type: String as PropType<'get' | 'post' | 'put' | 'delete'>, default: 'post' },\n apiParam: { type: Object as PropType<Record<string, any>>, default: () => ({}) },\n active: { type: Boolean, default: false },\n /** 静态数据(数组);不传时回退到 modelValue */\n dataSource: { type: [Array, Object] as PropType<any[] | any>, default: undefined },\n // ---- 分页 / 搜索 / 模式(继承 DataGrid) ----\n withPager: { type: Boolean, default: true },\n withSearch: { type: Boolean, default: false },\n modeSwitch: { type: Boolean, default: false },\n dynamicColumn: { type: Boolean, default: false },\n columnStorageKey: { type: String, default: '' },\n // ---- 表格展示(继承 DataGrid) ----\n fix: { type: Boolean, default: true },\n border: { type: Boolean, default: true },\n stripe: { type: Boolean, default: true },\n height: { type: [String, Number] as PropType<string | number>, default: undefined },\n autoHeight: { type: Boolean, default: false },\n rowKey: { type: String, default: 'id' },\n tableSize: { type: String as PropType<'large' | 'default' | 'small'>, default: 'default' },\n pagerStyle: { type: String as PropType<'simple' | 'normal' | 'full'>, default: 'normal' },\n withIndex: { type: Boolean, default: false },\n withSelection: { type: Boolean, default: false },\n // 行合并\n rowspanKey: { type: String, default: '' },\n rowspanColumn: { type: Array as PropType<string[]>, default: () => [] },\n // 树形\n treeProps: { type: Object, default: () => ({ children: 'children', hasChildren: 'hasChildren' }) },\n defaultExpandAll: { type: Boolean, default: false },\n // tools(继承 DataGrid)\n tools: {\n type: Object as PropType<{\n refresh?: boolean\n columnSetting?: boolean\n modeSwitch?: boolean\n size?: boolean\n }>,\n default: () => ({})\n },\n /** 内置只读操作列配置(渲染行操作按钮,点击 emit row-action) */\n rowActions: {\n type: Array as PropType<Array<{ text: string; command?: string; type?: string }>>,\n default: () => []\n },\n // ---- 可编辑能力开关 ----\n withToolbar: { type: Boolean, default: true },\n withAdd: { type: Boolean, default: true },\n withSave: { type: Boolean, default: true },\n withDelete: { type: Boolean, default: true },\n withActions: { type: Boolean, default: true },\n // ---- 文案 ----\n addButtonText: { type: String, default: '新增一行' },\n saveButtonText: { type: String, default: '批量保存' },\n actionWidth: { type: [String, Number], default: 150 }\n})\n\nconst emit = defineEmits([\n 'update:modelValue',\n 'change',\n 'save',\n 'row-add',\n 'row-remove',\n 'validate-fail',\n 'row-action',\n 'page-change',\n 'selection-change',\n 'mode-change',\n 'loaded',\n 'apiBefore',\n 'apiSuccess',\n 'apiFail',\n 'apiException',\n 'apiAfter'\n])\n\nconst slots = useSlots()\nconst tableRef = ref<any>(null)\nconst rootRef = ref<HTMLElement | null>(null)\nconst viewMode = ref<'table' | 'card'>('table')\n\n// ============ 数据源:API(useDataGrid)/ 静态 ============\nconst globalCfg = getGlobalConfig()\nconst pagerPageSizes = globalCfg.page.pager.pageSizes\nconst hideOnSinglePage = globalCfg.page.pager.hideOnSinglePage\n\nconst isStatic = computed(() => Array.isArray(props.dataSource) || (!props.api && props.modelValue.length > 0))\n\nconst grid = useDataGrid({\n api: isStatic.value ? '' : props.api,\n apiMethod: props.apiMethod,\n apiParam: props.apiParam,\n pageSize: globalCfg.page.pager.pageSize,\n immediate: false\n})\n\nconst { total, loading, currentPage, pageSize, selection } = grid\n\n/** 当前渲染行数据(可编辑直接作用于此) */\nconst rows = ref<Record<string, any>[]>([])\n\n/** 静态数据来源:dataSource 优先,否则 modelValue */\nconst staticSource = computed<any[]>(() =>\n Array.isArray(props.dataSource) ? props.dataSource : props.modelValue\n)\n\n// 编辑态集合须在下方 immediate watch 触发 resetEditState 之前初始化(避免 TDZ)\n/** 脏行索引集合 */\nconst dirtySet = reactive(new Set<number>())\n/** 行编辑模式:正在编辑的行索引 */\nconst editingRows = reactive(new Set<number>())\n/** 行编辑模式:进入编辑前的快照(取消时还原) */\nconst rowSnapshots = new Map<number, Record<string, any>>()\n/** 单元格编辑模式:当前激活单元格 */\nconst activeCell = ref('')\n/** 单元格基线值:行索引 -> 开始编辑时的行快照(用于判断单元格是否被修改) */\nconst cellBaselines = reactive(new Map<number, Record<string, any>>())\n/** 已修改单元格 key(`${index}-${prop}`),当前值与基线不一致 */\nconst dirtyCells = reactive(new Set<string>())\n/** 校验失败单元格:key -> 错误文案 */\nconst cellErrors = reactive(new Map<string, string>())\n/** 通过\"新增一行\"加入的行索引:即使改回基线仍算脏行(区别于编辑产生的脏) */\nconst addedRows = reactive(new Set<number>())\n\n// 静态数据同步(深拷贝,编辑过程不直接污染外部;保存时同步)\nwatch(\n staticSource,\n (val) => {\n if (isStatic.value) {\n rows.value = (val || []).map((r) => ({ ...r }))\n total.value = (val || []).length\n resetEditState()\n }\n },\n { immediate: true, deep: false }\n)\n\n// 接口数据同步到可编辑行\nwatch(\n grid.list,\n (val) => {\n if (!isStatic.value) {\n rows.value = (val || []).map((r) => ({ ...r }))\n resetEditState()\n }\n },\n { immediate: true }\n)\n\n// ============ 编辑态 ============\nconst saving = ref(false)\n\nfunction resetEditState() {\n dirtySet.clear()\n editingRows.clear()\n rowSnapshots.clear()\n activeCell.value = ''\n addedRows.clear()\n cellBaselines.clear()\n dirtyCells.clear()\n cellErrors.clear()\n}\n\nconst dirtyRows = computed(() => [...dirtySet].map((i) => rows.value[i]).filter(Boolean))\n\nfunction cellKey(index: number, prop: string) {\n return `${index}-${prop}`\n}\n\nfunction isRowEditing(index: number) {\n return editingRows.has(index)\n}\n\nfunction deactivateCell() {\n activeCell.value = ''\n}\nfunction handleDocumentClick(e: MouseEvent) {\n if (!activeCell.value || !rootRef.value) return\n // 如果点击在当前表格内部,不关闭\n if (rootRef.value.contains(e.target as Node)) return\n // 点击在外部,关闭激活单元格\n activeCell.value = ''\n}\nfunction focusCell(el: any) {\n if (!el) return\n const target = el?.focus ? el : el?.$el?.querySelector?.('input')\n if (target?.focus) target.focus()\n else if (el?.focus) el.focus()\n}\n\nfunction formatCell(row: Record<string, any>, col: EditableColumn): string {\n if (col.formatter) return col.formatter(row, col)\n const val = row[col.prop]\n if (val === undefined || val === null || val === '') return ''\n if (col.editor === 'select') {\n const opt = col.options?.find((o) => o.value === val)\n return opt ? opt.text : String(val)\n }\n return String(val)\n}\n\n/** 单元格点击:cell 模式下激活可编辑列,并记录该行基线值 */\nfunction onCellClick(row: Record<string, any>, column: any) {\n if (props.editMode !== 'cell' || viewMode.value !== 'table') return\n const prop = column?.property\n if (!prop) return\n const col = props.columns.find((c) => c.prop === prop)\n if (!col || col.editable === false) return\n const idx = rows.value.indexOf(row)\n if (idx < 0) return\n if (!cellBaselines.has(idx)) cellBaselines.set(idx, { ...row })\n activeCell.value = cellKey(idx, prop)\n}\n\nfunction markDirty(index: number) {\n dirtySet.add(index)\n emit('change', rows.value)\n}\n\n/** 编辑提交后的统一处理:标脏 + 刷新单元格脏状态 + 触发该单元格规则校验 */\nfunction markCellChanged(index: number, col: EditableColumn) {\n markDirty(index)\n syncDirtyCells(index)\n void validateCell(index, rows.value[index], col)\n}\n\nfunction onSelectChange(index: number, col: EditableColumn) {\n markCellChanged(index, col)\n activeCell.value = ''\n}\n\nfunction onDateChange(index: number, col: EditableColumn) {\n markCellChanged(index, col)\n activeCell.value = ''\n}\n\nfunction sameValue(a: any, b: any) {\n if (a === b) return true\n if ((a === undefined || a === null || a === '') && (b === undefined || b === null || b === '')) return true\n return false\n}\n\n/** 把行内单元格当前值与基线比对,刷新 dirtyCells(改回原值自动移除;新增行始终算脏) */\nfunction syncDirtyCells(index: number) {\n const base = cellBaselines.get(index)\n const row = rows.value[index]\n if (!base || !row) return\n let hasDirty = false\n for (const col of props.columns) {\n if (col.editable === false) continue\n if (!(col.prop in base)) continue\n const key = cellKey(index, col.prop)\n if (sameValue(base[col.prop], row[col.prop])) {\n dirtyCells.delete(key)\n } else {\n dirtyCells.add(key)\n hasDirty = true\n }\n }\n if (hasDirty) dirtySet.add(index)\n else if (!addedRows.has(index)) dirtySet.delete(index)\n}\n\n/** 单元格展示状态 class:已修改(is-dirty)/ 约束失败(is-error) */\nfunction cellState(index: number, col: EditableColumn) {\n const key = cellKey(index, col.prop)\n return {\n 'is-editable': props.editMode === 'cell' && col.editable !== false,\n 'is-dirty': dirtyCells.has(key),\n 'is-error': cellErrors.has(key)\n }\n}\n\n/** 单元格错误文案(title 悬浮提示) */\nfunction cellErrorText(index: number, col: EditableColumn) {\n return cellErrors.get(cellKey(index, col.prop)) || ''\n}\n\n/** 清除某行所有单元格级状态(删除/取消行编辑时) */\nfunction clearCellStates(index: number) {\n const prefix = `${index}-`\n for (const k of [...dirtyCells]) if (k.startsWith(prefix)) dirtyCells.delete(k)\n for (const k of [...cellErrors.keys()]) if (k.startsWith(prefix)) cellErrors.delete(k)\n}\n\n/** 单元格规则校验:失败返回错误文案并写入 cellErrors,通过则清除该单元格错误 */\nasync function validateCell(index: number, row: Record<string, any>, col: EditableColumn): Promise<string | undefined> {\n const key = cellKey(index, col.prop)\n cellErrors.delete(key)\n const val = row[col.prop]\n let error: string | undefined\n if (col.rules && col.rules.length) {\n try {\n // 与 ElForm 一致的 rules(async-validator):field 规则数组直接按字段校验\n await new Schema({ [col.prop]: col.rules }).validate({ [col.prop]: val }, { suppressWarning: true })\n } catch (e: any) {\n error = e?.errors?.[0]?.message ?? `「${col.label}」校验未通过`\n }\n } else {\n if (col.required && (val === undefined || val === null || val === '')) {\n error = `「${col.label}」不能为空`\n } else if (col.validator) {\n error = col.validator(val, row) || undefined\n }\n }\n if (error) cellErrors.set(key, error)\n return error\n}\n\n/** 校验一行内全部列:返回首条错误,同时刷新每个单元格错误状态 */\nasync function validateRowCells(\n index: number,\n row: Record<string, any>\n): Promise<{ error?: string; column?: string }> {\n let first: { error?: string; column?: string } | undefined\n for (const col of props.columns) {\n const err = await validateCell(index, row, col)\n if (err && !first) first = { error: err, column: col.prop }\n }\n return first ?? {}\n}\n\n/** 行编辑:进入(记录行快照与单元格基线) */\nfunction startEditRow(index: number) {\n rowSnapshots.set(index, { ...rows.value[index] })\n editingRows.add(index)\n if (!cellBaselines.has(index)) cellBaselines.set(index, { ...rows.value[index] })\n}\n\n/** 行内保存:校验单行,通过后退出编辑态(批量保存统一提交) */\nasync function saveRow(index: number) {\n const row = rows.value[index]\n const res = await validateRowCells(index, row)\n if (res.error) {\n ElMessage.warning(res.error)\n emit('validate-fail', { index, row, column: res.column, error: res.error })\n return\n }\n editingRows.delete(index)\n rowSnapshots.delete(index)\n // 更新基线:保存完成后刷新基线为当前行值,下次编辑以此为准对比\n cellBaselines.set(index, { ...rows.value[index] })\n // 清除该行所有脏单元格与错误状态\n clearCellStates(index)\n dirtySet.add(index)\n emit('change', rows.value)\n}\n\n/** 行内取消:还原快照,并清除该行单元格级状态 */\nfunction cancelRow(index: number) {\n const snapshot = rowSnapshots.get(index)\n if (snapshot) rows.value[index] = { ...snapshot }\n rowSnapshots.delete(index)\n editingRows.delete(index)\n dirtySet.delete(index)\n addedRows.delete(index)\n cellBaselines.delete(index)\n clearCellStates(index)\n}\n\nfunction addRow() {\n const base =\n typeof props.defaultRow === 'function'\n ? (props.defaultRow as () => Record<string, any>)()\n : { ...(props.defaultRow || {}) }\n rows.value.push({ ...base })\n const idx = rows.value.length - 1\n addedRows.add(idx)\n cellBaselines.set(idx, { ...rows.value[idx] })\n dirtySet.add(idx)\n if (isStatic.value) total.value = rows.value.length\n if (props.editMode === 'row') {\n rowSnapshots.set(idx, { ...rows.value[idx] })\n editingRows.add(idx)\n }\n emit('row-add', rows.value[idx])\n emit('update:modelValue', rows.value)\n emit('change', rows.value)\n}\n\nasync function removeRow(index: number) {\n try {\n await ElMessageBox.confirm('确认删除该行?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n })\n } catch {\n return\n }\n rows.value.splice(index, 1)\n // 重建删除行之后所有按索引记录的状态(脏行/新增行/单元格基线/脏单元格/错误单元格)\n const shift = (i: number) => (i < index ? i : i > index ? i - 1 : -1)\n const shiftSet = (s: Set<number>) => {\n const next = new Set<number>()\n for (const i of s) {\n const n = shift(i)\n if (n >= 0) next.add(n)\n }\n s.clear()\n next.forEach((i) => s.add(i))\n }\n shiftSet(dirtySet)\n shiftSet(addedRows)\n const baseNext = new Map<number, Record<string, any>>()\n cellBaselines.forEach((v, i) => {\n const n = shift(i)\n if (n >= 0) baseNext.set(n, v)\n })\n cellBaselines.clear()\n baseNext.forEach((v, k) => cellBaselines.set(k, v))\n const shiftKey = (k: string) => {\n const dash = k.indexOf('-')\n const i = Number(k.slice(0, dash))\n const n = shift(i)\n return n >= 0 ? `${n}-${k.slice(dash + 1)}` : null\n }\n for (const k of [...dirtyCells]) {\n const nk = shiftKey(k)\n dirtyCells.delete(k)\n if (nk) dirtyCells.add(nk)\n }\n for (const [k, v] of [...cellErrors.entries()]) {\n const nk = shiftKey(k)\n cellErrors.delete(k)\n if (nk) cellErrors.set(nk, v)\n }\n editingRows.clear()\n activeCell.value = ''\n if (isStatic.value) total.value = rows.value.length\n emit('row-remove', index)\n emit('update:modelValue', rows.value)\n emit('change', rows.value)\n}\n\n/** 校验所有脏行;失败中断并返回 false,同时刷新每个单元格错误状态 */\nasync function validateAll(): Promise<boolean> {\n const indices = [...dirtySet].sort((a, b) => a - b)\n for (const i of indices) {\n const row = rows.value[i]\n if (!row) continue\n const res = await validateRowCells(i, row)\n if (res.error) {\n ElMessage.warning(`第 ${i + 1} 行:${res.error}`)\n emit('validate-fail', { index: i, row, column: res.column, error: res.error })\n return false\n }\n }\n return true\n}\n\n/** 批量保存:先校验(rules 不满足中断并提示),通过后提交脏行 */\nasync function saveAll() {\n if (!dirtySet.size) {\n ElMessage.info('没有需要保存的修改')\n return\n }\n if (!(await validateAll())) return\n\n const changedRows = [...dirtySet].sort((a, b) => a - b).map((i) => rows.value[i])\n\n // 无保存接口:仅本地提交\n if (!props.saveApi) {\n resetEditState()\n emit('update:modelValue', rows.value)\n emit('save', { rows: changedRows, all: rows.value })\n ElMessage.success('保存成功')\n return\n }\n\n saving.value = true\n emit('apiBefore', { url: props.saveApi, rows: changedRows })\n try {\n const result =\n props.saveMethod === 'put'\n ? await request.put(props.saveApi, { rows: changedRows })\n : await request.post(props.saveApi, { rows: changedRows })\n if (result.success) {\n resetEditState()\n emit('apiSuccess', { data: result.data })\n emit('save', { rows: changedRows, all: rows.value, data: result.data })\n emit('update:modelValue', rows.value)\n if (props.headRefreshDatagrid) refreshDataGrid(props.headRefreshDatagrid, props.filter)\n // 接口模式:保存成功后刷新当前页\n if (!isStatic.value) grid.fetchData()\n } else {\n emit('apiFail', { code: result.code, message: result.message })\n }\n } catch (error: any) {\n emit('apiException', { error, message: error?.message })\n } finally {\n emit('apiAfter', { url: props.saveApi })\n saving.value = false\n }\n}\n\n// ============ 工具栏 tools(继承 DataGrid) ============\nconst toolsConf = computed(() => ({\n refresh: props.tools.refresh !== false, // 默认 true\n columnSetting: props.tools.columnSetting === true,\n modeSwitch: props.tools.modeSwitch === true,\n size: props.tools.size === true\n}))\n\nconst hasToolbar = computed(() => !!slots.toolbar || props.withAdd)\nconst hasTools = computed(\n () =>\n props.withSave ||\n !!slots.actions ||\n toolsConf.value.refresh ||\n toolsConf.value.columnSetting ||\n toolsConf.value.modeSwitch ||\n toolsConf.value.size ||\n props.modeSwitch ||\n props.dynamicColumn\n)\n\n// 表格尺寸持久化\nconst sizeStorageKey = props.columnStorageKey ? `wd:tablesize:${props.columnStorageKey}` : ''\nconst storedSize = sizeStorageKey ? safeJsonParse(localStorage.getItem(sizeStorageKey), null) : null\nconst innerSize = ref<'large' | 'default' | 'small'>(storedSize || props.tableSize)\nwatch(\n () => props.tableSize,\n (v) => {\n if (!storedSize) innerSize.value = v\n }\n)\nfunction onSizeChange(cmd: 'large' | 'default' | 'small') {\n innerSize.value = cmd\n if (sizeStorageKey) localStorage.setItem(sizeStorageKey, JSON.stringify(cmd))\n}\n\n// ============ 高度模式(继承 DataGrid) ============\nconst availFixHeight = ref(0)\nconst fixTableHeight = ref(0)\nconst isFixMode = computed(() => props.height === 'fix')\n\nconst rootStyle = computed(() =>\n isFixMode.value ? { height: `${availFixHeight.value}px` } : undefined\n)\n\nconst tableHeight = computed(() => {\n if (isFixMode.value) return fixTableHeight.value > 0 ? fixTableHeight.value : undefined\n if (props.autoHeight) return '100%'\n const h = props.height\n if (h == null || h === '') return undefined\n return h as string | number\n})\n\nfunction measureFixHeight() {\n const el = rootRef.value\n if (!el || !isFixMode.value) return\n const viewH = window.innerHeight\n const top = el.getBoundingClientRect().top\n const avail = Math.max(120, Math.floor(viewH - top))\n availFixHeight.value = avail\n const toolbar = el.querySelector('.wd-editable-grid__toolbar') as HTMLElement | null\n const pager = el.querySelector('.wd-editable-grid__pager') as HTMLElement | null\n fixTableHeight.value = Math.max(120, avail - (toolbar?.offsetHeight ?? 0) - (pager?.offsetHeight ?? 0))\n}\nfunction onViewportResize() {\n measureFixHeight()\n}\n\nwatch(\n () => props.height,\n (v) => {\n if (v === 'fix') {\n window.addEventListener('resize', onViewportResize)\n nextTick(measureFixHeight)\n } else {\n window.removeEventListener('resize', onViewportResize)\n }\n }\n)\n\n// ============ 分页档位 ============\nconst pagerLayout = computed(() => {\n if (props.pagerStyle === 'simple') return 'prev, pager, next'\n if (props.pagerStyle === 'full') return 'total, sizes, prev, pager, next, jumper'\n return globalCfg.page.pager.layout\n})\n\n// ============ 动态列(配置列 + 插槽列) ============\nconst {\n columns: colColumns,\n controllableColumns,\n hiddenKeys,\n settingVisible: colSettingVisible,\n init: initColumns,\n initMetas: initColumnMetas,\n setVisible: setColumnVisible,\n move: moveColumn,\n reset: resetColumns\n} = useColumnSettings(props.columnStorageKey || undefined)\n\nlet columnsInited = false\n\n/** 配置列:按列设置显隐(排序以 columns 配置为准) */\nconst visibleColumns = computed<EditableColumn[]>(() => {\n ensureColumnSettings()\n return props.columns.filter((c) => !hiddenKeys.value.has(c.prop))\n})\n\n/** 插槽列 vnode:过滤隐藏列与重复的 selection/index 列 */\nconst slotColumnVnodes = computed<VNode[]>(() => {\n ensureColumnSettings()\n const defaultSlot = slots.default\n if (!defaultSlot) return []\n return filterColumnVnodes(defaultSlot(), hiddenKeys.value)\n})\n\n/** 初始化列设置元信息(配置列 + 插槽列合并,仅一次) */\nfunction ensureColumnSettings() {\n if (columnsInited) return\n const slotVnodes = slots.default ? slots.default() : []\n const metas = [\n ...props.columns.map((c) => ({ key: c.prop, label: c.label, controllable: true, visible: true })),\n ...extractColumns(slotVnodes)\n .filter((c) => c.controllable)\n .map((c) => ({ key: c.key, label: c.label, controllable: true, visible: c.visible }))\n ]\n if (metas.length) {\n initColumnMetas(metas)\n } else {\n initColumns(slotVnodes)\n }\n columnsInited = true\n}\n\n/** 根据隐藏列 key 过滤插槽 vnode */\nfunction filterColumnVnodes(vnodes: VNode[], hidden: Set<string>): VNode[] {\n const result: VNode[] = []\n vnodes.forEach((vnode) => {\n if (!vnode || typeof vnode !== 'object') {\n if (vnode) result.push(vnode)\n return\n }\n const p = (vnode.props || {}) as Record<string, any>\n const key = String(p.prop || p.columnKey || '')\n if (p.type === 'selection' || p.type === 'index') return\n if (key && hidden.has(key)) return\n result.push(vnode)\n })\n return result\n}\n\n// ============ 序号 / 行合并(继承 DataGrid) ============\nfunction indexMethod(index: number) {\n return (currentPage.value - 1) * pageSize.value + index + 1\n}\n\nfunction rowspanMethod({ row, column, rowIndex, columnIndex }: any) {\n if (!props.rowspanKey || !props.rowspanColumn.length) return { rowspan: 1, colspan: 1 }\n const prop = column.property\n if (!props.rowspanColumn.includes(prop)) return { rowspan: 1, colspan: 1 }\n const data = rows.value\n const keyVal = row[props.rowspanKey]\n const firstIdx = data.findIndex((r) => r[props.rowspanKey] === keyVal)\n if (rowIndex === firstIdx) {\n const span = data.filter((r) => r[props.rowspanKey] === keyVal).length\n return { rowspan: span, colspan: 1 }\n }\n return { rowspan: 0, colspan: 0 }\n}\n\n// ============ 选择 / 分页 / 模式 / 行操作 ============\nfunction onSelectionChange(selected: any[]) {\n grid.setSelection(selected)\n emit('selection-change', selected)\n}\n\nfunction onChangeCurrentpage(val: number) {\n resetEditState()\n grid.onChangeCurrentpage(val)\n emit('page-change', { currentPage: val, pageSize: pageSize.value })\n}\nfunction onChangePagesize(val: number) {\n resetEditState()\n grid.onChangePagesize(val)\n emit('page-change', { currentPage: currentPage.value, pageSize: val })\n}\n\nfunction toggleMode() {\n viewMode.value = viewMode.value === 'table' ? 'card' : 'table'\n emit('mode-change', viewMode.value)\n}\n\n/** 只读操作列宽度:按按钮数量估算 */\nconst actionColumnWidth = computed(() => {\n const w = props.rowActions.reduce((sum, act) => sum + act.text.length * 14 + 16, 20)\n return Math.max(w, 90)\n})\n\nfunction onRowAction(row: any, act: { text: string; command?: string; type?: string }) {\n emit('row-action', { row, command: act.command ?? act.text, text: act.text })\n}\n\n// ============ 对外方法(DataGrid 数据能力 + 可编辑能力) ============\nfunction requestApi(options?: { apiParam?: Record<string, any> }) {\n if (isStatic.value) return Promise.resolve()\n return grid.fetchData(options?.apiParam).then((res) => emit('loaded', res))\n}\nfunction refresh() {\n resetEditState()\n if (isStatic.value) {\n rows.value = staticSource.value.map((r) => ({ ...r }))\n return Promise.resolve()\n }\n return grid.fetchData().then((res) => emit('loaded', res))\n}\nfunction getSelection() {\n return grid.getSelection()\n}\nfunction clearSelection() {\n tableRef.value?.clearSelection?.()\n grid.clearSelection()\n}\nfunction search(params?: Record<string, any>) {\n if (isStatic.value) return Promise.resolve()\n resetEditState()\n currentPage.value = 1\n return grid.fetchData(params).then((res) => emit('loaded', res))\n}\nfunction resetSearch() {\n resetEditState()\n return grid.reset()\n}\n/**\n * 全量校验:默认校验所有行所有列;若传入 columns prop 数组,则只校验指定列;不满足则全部显示错误样式,首错提示并返回 false\n */\nasync function validate(columns?: string[]) {\n // 如果指定了只校验某些列,则只校验这些列;否则校验所有行所有列\n if (columns && columns.length > 0) {\n for (let i = 0; i < rows.value.length; i++) {\n const row = rows.value[i]\n for (const prop of columns) {\n const col = props.columns.find(c => c.prop === prop)\n if (!col) continue\n await validateCell(i, row, col)\n }\n }\n // 检查是否存在任意错误\n if (cellErrors.size > 0) {\n const firstEntry = Array.from(cellErrors.entries())[0]\n const [key, error] = firstEntry\n const [index] = key.split('-')\n ElMessage.warning(error)\n emit('validate-fail', { index: Number(index), error })\n return false\n }\n return true\n }\n // 默认:所有行所有列\n for (let i = 0; i < rows.value.length; i++) {\n const row = rows.value[i]\n for (const col of props.columns) {\n await validateCell(i, row, col)\n }\n }\n if (cellErrors.size > 0) {\n const firstEntry = Array.from(cellErrors.entries())[0]\n const [key, error] = firstEntry\n const [index] = key.split('-')\n ElMessage.warning(error)\n emit('validate-fail', { index: Number(index), error })\n return false\n }\n return true\n}\nfunction getDirtyRows() {\n return dirtyRows.value\n}\n\ndefineExpose({\n // 数据能力\n requestApi,\n refresh,\n search,\n resetSearch,\n onChangePagesize,\n onChangeCurrentpage,\n getSelection,\n clearSelection,\n // 可编辑能力\n saveAll,\n validate,\n addRow,\n getDirtyRows,\n tableRef\n})\n\n// ============ 联动注册(继承 DataGrid,可被 SearchPanel / refreshDataGrid 驱动) ============\nlet unregister: (() => void) | null = null\nonMounted(() => {\n unregister = registerDataGrid({\n filter: props.filter,\n refresh: () => refresh(),\n search: (params?: Record<string, any>) => search(params),\n resetSearch: () => resetSearch()\n })\n if (props.active && !isStatic.value) {\n requestApi()\n }\n if (isFixMode.value) {\n window.addEventListener('resize', onViewportResize)\n measureFixHeight()\n }\n // 点击外部关闭激活单元格\n document.addEventListener('mousedown', handleDocumentClick)\n})\nonBeforeUnmount(() => {\n window.removeEventListener('resize', onViewportResize)\n document.removeEventListener('mousedown', handleDocumentClick)\n unregister?.()\n})\n\n// api 变化自动重载\nwatch(\n () => [props.api, props.apiMethod],\n () => {\n if (props.active && !isStatic.value) requestApi()\n }\n)\n</script>\n\n<style scoped>\n.wd-editable-grid {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background: var(--wd-bg-color, #fff);\n}\n.wd-editable-grid--auto-height {\n height: 100%;\n}\n.wd-editable-grid__toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wd-spacing-base, 12px);\n padding: 0 0 var(--wd-spacing-base, 12px);\n flex-wrap: wrap;\n}\n.wd-editable-grid__toolbar :deep(.el-button + .el-button) {\n margin-left: 0;\n}\n.wd-editable-grid__toolbar :deep(.el-button .el-icon) {\n font-size: 16px;\n}\n.wd-editable-grid__toolbar-left {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n.wd-editable-grid__toolbar-right {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: auto;\n flex-wrap: wrap;\n}\n.wd-editable-grid__table {\n flex: 1;\n min-height: 0;\n}\n.wd-editable-grid__cell {\n width: 100%;\n min-height: 24px;\n border-radius: var(--wd-radius-small, 2px);\n transition: background-color 0.2s;\n}\n.wd-editable-grid__cell.is-editable {\n cursor: cell;\n}\n.wd-editable-grid__cell.is-editable:hover {\n color: var(--el-color-primary);\n}\n/* 已修改样式:单元格当前值与开始编辑时的值不一致。\n 默认为单元格最右侧红色感叹号小图标;开发者可用 CSS 变量覆盖:\n --wd-cell-dirty-decoration 波浪线形态(如 underline wavy / none,仅当图标不显示时生效)\n --wd-cell-dirty-color 图标颜色(默认警告色)\n --wd-cell-dirty-bg 单元格底色(默认透明)\n --wd-cell-dirty-show-icon 是否显示感叹号图标(默认 true,false 不显示)\n 例如保留底色高亮效果+关闭图标:--wd-cell-dirty-show-icon:false; --wd-cell-dirty-decoration:none; --wd-cell-dirty-bg:rgba(230,162,60,.12) */\n.wd-editable-grid__cell.is-dirty {\n position: relative;\n padding-right: var(--wd-cell-dirty-padding-right, 20px);\n background: var(--wd-cell-dirty-bg, transparent);\n}\n.wd-editable-grid__cell.is-dirty .wd-editable-grid__cell-dirty-icon {\n display: var(--wd-cell-dirty-show-icon, inline-block);\n position: absolute;\n right: 2px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--wd-cell-dirty-color, var(--el-color-warning, #e6a23c));\n font-size: var(--wd-cell-dirty-icon-size, 14px);\n}\n/* 约束失败样式:不满足列 rules(与 ElForm 一致)时展示。\n 开发者可用 CSS 变量覆盖:\n --wd-cell-error-bg 单元格底色(默认 danger 淡色)\n --wd-cell-error-border 边框阴影(默认 1px danger 边框)\n 例如自定义深色覆盖:--wd-cell-error-bg: rgba(245, 108, 108, 0.3); */\n.wd-editable-grid__cell.is-error {\n background: var(--wd-cell-error-bg, rgba(245, 108, 108, 0.08));\n box-shadow: inset 0 0 0 1px var(--wd-cell-error-border, var(--el-color-danger, #f56c6c));\n}\n.wd-editable-grid__pager {\n display: flex;\n justify-content: flex-end;\n padding-top: var(--wd-spacing-base, 12px);\n}\n.wd-editable-grid__cards {\n flex: 1;\n min-height: 0;\n overflow: auto;\n}\n.wd-editable-grid__card {\n /* 组件级令牌回退链:皮肤可单独定制 EditableGrid 卡片 */\n background: var(--wd-editable-grid-bg, transparent);\n /* 背景素材:皮肤可挂纹理/图片(须置于 background 简写之后,否则被简写重置) */\n background-image: var(--wd-editable-grid-bg-image, none);\n border: var(--wd-border-width, 1px) var(--wd-border-style, solid) var(--wd-editable-grid-border-color, var(--wd-border-color-light, #e4e7ed));\n border-radius: var(--wd-editable-grid-radius, var(--wd-radius-base, 4px));\n padding: var(--wd-editable-grid-padding, var(--wd-spacing-base, 12px));\n margin-bottom: var(--wd-spacing-base, 12px);\n}\n.wd-editable-grid__card-title {\n font-weight: 600;\n font-size: var(--wd-font-size-large, 16px);\n color: var(--wd-text-color-primary, #303133);\n margin-bottom: 8px;\n}\n.wd-editable-grid__card-line {\n display: flex;\n font-size: var(--wd-font-size-base, 14px);\n line-height: 1.8;\n}\n.wd-editable-grid__card-label {\n width: 110px;\n color: var(--wd-text-color-secondary, #909399);\n flex-shrink: 0;\n}\n.wd-editable-grid__card-value {\n color: var(--wd-text-color-regular, #606266);\n word-break: break-all;\n}\n.wd-editable-grid__col-setting {\n max-height: 400px;\n overflow: auto;\n}\n.wd-editable-grid__col-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 0;\n border-bottom: var(--wd-border-width, 1px) var(--wd-border-style, solid) var(--wd-border-color-light, #f0f0f0);\n}\n.wd-editable-grid__col-actions {\n display: flex;\n gap: 4px;\n}\n</style>\n"],"names":["_extends","target","i","source","key","_inheritsLoose","subClass","superClass","_setPrototypeOf","_getPrototypeOf","o","p","_isNativeReflectConstruct","_construct","Parent","args","Class","a","Constructor","instance","_isNativeFunction","fn","_wrapNativeSuper","_cache","Wrapper","formatRegExp","warning","type","errors","e","convertFieldsError","fields","error","field","format","template","_len","_key","len","str","x","isNativeStringType","isEmptyValue","value","asyncParallelArray","arr","func","callback","results","total","arrLength","count","asyncSerialArray","index","next","original","flattenObjArr","objArr","ret","k","AsyncValidationError","_Error","_this","asyncMap","option","_pending","resolve","reject","flattenArr","firstFields","objArrKeys","objArrLength","pending","isErrorObj","obj","getValue","path","v","complementError","rule","oe","fieldValue","deepMerge","s","required$1","options","whitespace","urlReg","getUrlRegex","word","b","v4","v6seg","v6","v46Exact","v4exact","v6exact","ip","protocol","auth","ipv4","ipv6","host","domain","tld","port","regex","pattern$2","types","type$1","custom","ruleType","range","min","max","spRegexp","val","num","ENUM$1","enumerable$1","pattern$1","_pattern","rules","string","validate","method","number","_boolean","regexp","integer","floatFn","array","object","ENUM","enumerable","pattern","date","dateObject","required","any","validators","newMessages","cloned","messages","Schema","descriptor","_proto","name","item","_messages","source_","oc","_this2","complete","add","_errors","messages$1","series","keys","z","r","errorFields","data","doIt","deep","addFullField","schema","cb","errorList","filledErrors","fieldsSchema","paredFieldsSchema","fieldSchema","fieldSchemaList","errs","finalErrors","res","messageIndex","validator","ColumnRenderer","defineComponent","props","__props","emit","__emit","slots","useSlots","tableRef","ref","rootRef","viewMode","globalCfg","getGlobalConfig","pagerPageSizes","hideOnSinglePage","isStatic","computed","grid","useDataGrid","loading","currentPage","pageSize","selection","rows","staticSource","dirtySet","reactive","editingRows","rowSnapshots","activeCell","cellBaselines","dirtyCells","cellErrors","addedRows","watch","resetEditState","saving","dirtyRows","cellKey","prop","isRowEditing","handleDocumentClick","focusCell","el","_b","_a","formatCell","row","col","opt","onCellClick","column","c","idx","markDirty","markCellChanged","syncDirtyCells","validateCell","onSelectChange","onDateChange","sameValue","base","hasDirty","cellState","cellErrorText","clearCellStates","prefix","validateRowCells","first","err","startEditRow","saveRow","ElMessage","cancelRow","snapshot","addRow","removeRow","ElMessageBox","shift","shiftSet","n","baseNext","shiftKey","dash","nk","validateAll","indices","saveAll","changedRows","result","request","refreshDataGrid","toolsConf","hasToolbar","hasTools","sizeStorageKey","storedSize","safeJsonParse","innerSize","onSizeChange","cmd","availFixHeight","fixTableHeight","isFixMode","rootStyle","tableHeight","h","measureFixHeight","viewH","top","avail","toolbar","pager","onViewportResize","nextTick","pagerLayout","controllableColumns","hiddenKeys","colSettingVisible","initColumns","initColumnMetas","setColumnVisible","moveColumn","resetColumns","useColumnSettings","columnsInited","visibleColumns","ensureColumnSettings","slotColumnVnodes","defaultSlot","filterColumnVnodes","slotVnodes","metas","extractColumns","vnodes","hidden","vnode","indexMethod","rowspanMethod","rowIndex","columnIndex","keyVal","firstIdx","onSelectionChange","selected","onChangeCurrentpage","onChangePagesize","toggleMode","actionColumnWidth","w","sum","act","onRowAction","requestApi","refresh","getSelection","clearSelection","search","params","resetSearch","columns","firstEntry","getDirtyRows","__expose","unregister","onMounted","registerDataGrid","onBeforeUnmount","_createElementBlock","_normalizeClass","_openBlock","_hoisted_1","_createElementVNode","_hoisted_2","_renderSlot","_ctx","_unref","_createBlock","_component_el_button","Plus","_hoisted_3","_toDisplayString","_component_el_tooltip","_createVNode","_component_el_icon","Refresh","_component_el_dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","ScaleToOriginal","Grid","Menu","Setting","_component_el_table","_component_el_empty","_component_el_table_column","_Fragment","_renderList","_withCtx","$index","_component_el_input","$event","_component_el_input_number","_component_el_select","_component_el_option","_component_el_date_picker","_hoisted_6","WarningFilled","_hoisted_8","_createTextVNode","_withDirectives","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_component_el_pagination","_component_el_dialog","_hoisted_15","_component_el_checkbox","_hoisted_16"],"mappings":"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","x_google_ignoreList":[0]}