CodeMaster/node_modules/.cache/vue-loader/ac1b5a42f2ab198a3150044d7b06e10b.json
2025-04-02 21:57:33 +08:00

1 line
21 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"remainingRequest":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/vue-loader/lib/index.js??vue-loader-options!/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/src/tool/form/ConfigForm.vue?vue&type=script&lang=js","dependencies":[{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/src/tool/form/ConfigForm.vue","mtime":1742646402774},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/cache-loader/dist/cjs.js","mtime":1743264595665},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/babel-loader/lib/index.js","mtime":1743264596348},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/cache-loader/dist/cjs.js","mtime":1743264595665},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/vue-loader/lib/index.js","mtime":1743264596512}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CmltcG9ydCBGb3JtSXRlbUxhYmVsIGZyb20gJy4vbGFiZWwnOwppbXBvcnQgRm9ybUl0ZW1Db250ZW50IGZyb20gJy4vY29udGVudCc7CmltcG9ydCBBc3luY1ZhbGlkYXRvciBmcm9tICdhc3luYy12YWxpZGF0b3InOwppbXBvcnQgewogIGlzRnVuY3Rpb24sCiAgaXNQbGFpbk9iamVjdCwKICBjbG9uZURlZXAsCiAgaXNTdHJpbmcsCiAgb21pdCwKICBub29wLAogIGhhcywKfSBmcm9tICdsb2Rhc2gtZXMnOwppbXBvcnQgewogIGdldERlZmF1bHRWYWx1ZSwKICBnZXRJbmplY3RlZEV2ZW50cywKICBnZXRGaWx0ZXJEYXRhLAogIG5vdEVtcHR5LAp9IGZyb20gJy4vaGVscGVycyc7CgpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ0NvbmZpZ0Zvcm0nLAogIGNvbXBvbmVudHM6IHsKICAgIEZvcm1JdGVtTGFiZWwsCiAgICBGb3JtSXRlbUNvbnRlbnQsCiAgfSwKICBwcm9wczogewogICAgLyoqCiAgICAgKiDnu4Tku7bmoLjlv4PphY3nva7pobkKICAgICAqLwogICAgb3B0aW9uczogewogICAgICB0eXBlOiBBcnJheSwKICAgICAgZGVmYXVsdDogKCkgPT4gW10sCiAgICB9LAogICAgLyoqCiAgICAgKiDnlKjkuo7ljLnphY3nu4Tku7bvvIznlKjmiLflj6/ku6XmoLnmja7mjqXmlLbliLDnmoTnu4Tku7blkI3np7Dov5Tlm57mg7PopoHnmoTnu4Tku7bvvIzov5Tlm57nu5PmnpzlsIbkvZzkuLpjcmVhdGVFbGVtZW5055qE56ys5LiA5Liq5Y+C5pWwCiAgICAgKi8KICAgIG1hdGNoZXI6IHsKICAgICAgdHlwZTogRnVuY3Rpb24sCiAgICAgIGRlZmF1bHQ6IG5vb3AsCiAgICB9LAogICAgLyoqCiAgICAgKiDnroDljZXnmoRpMThu5aSE55CG5Ye95pWwCiAgICAgKi8KICAgIGxvY2FsZTogewogICAgICB0eXBlOiBGdW5jdGlvbiwKICAgICAgZGVmYXVsdDoga2V5ID0+IGtleSwKICAgIH0sCiAgICAvKioKICAgICAqIOS4uuagoemqjOWksei0pemhuea3u+WKoOeahOm7mOiupOexu+WQje+8jOWklumDqOWPr+agueaNrui/meS4quexu+WQjeWOu+WumuS5iS/kv67mlLnnu4Tku7bmoLflvI8KICAgICAqLwogICAgZXJyb3JDbGFzczogewogICAgICB0eXBlOiBTdHJpbmcsCiAgICAgIGRlZmF1bHQ6ICdmb3JtLWl0ZW0tZXJyb3InLAogICAgfSwKICB9LAogIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBmb3JtRGF0YToge30sCiAgICAgIGZsYXRPcHRpb25zOiB7fSwgLy8g5oyJa2V55bCG5Y6f5aeL6YCJ6aG55a2Y5YKoCiAgICAgIHZhbGlkYXRvcjogbnVsbCwKICAgICAgZXJyb3JzOiB7fSwKICAgIH07CiAgfSwKICBjb21wdXRlZDogewogICAgcmVzdWx0KCkgewogICAgICBjb25zdCByZXN1bHQgPSB7fTsKICAgICAgY29uc3QgeyBmb3JtRGF0YSwgZmxhdE9wdGlvbnMgfSA9IHRoaXM7CiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZsYXRPcHRpb25zKSkgewogICAgICAgIGNvbnN0IHsgbWFwcGVyIH0gPSB2YWx1ZTsKCiAgICAgICAgLy8gbWFwcGVy5Li6ZmFsc2Xku6PooajlvZPliY1rZXnlgLzkuI3pnIDopoHliqDlhaXmnIDnu4jnu5PmnpwKICAgICAgICBpZiAobWFwcGVyID09PSBmYWxzZSkgY29udGludWU7CgogICAgICAgIC8vIG1hcHBlcuayoeaciei/lOWbnuWAvOeahOivnem7mOiupOS9v+eUqOW9k+WJjeWAvCBmb3JtRGF0YVtrZXldIOWFnOW6lQogICAgICAgIGNvbnN0IG1hcHBlclZhbHVlID0gaXNGdW5jdGlvbihtYXBwZXIpID8gbWFwcGVyKGZvcm1EYXRhKSA6IGZvcm1EYXRhW2tleV07CiAgICAgICAgLy8g56m65YC86L+H5rukCiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QobWFwcGVyVmFsdWUpKSB7CiAgICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgZ2V0RmlsdGVyRGF0YShtYXBwZXJWYWx1ZSkpOwogICAgICAgIH0gZWxzZSBpZiAobm90RW1wdHkobWFwcGVyVmFsdWUpKSB7CiAgICAgICAgICByZXN1bHRba2V5XSA9IG1hcHBlclZhbHVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSwKICB9LAogIHdhdGNoOiB7CiAgICBvcHRpb25zOiB7CiAgICAgIGRlZXA6IHRydWUsCiAgICAgIGltbWVkaWF0ZTogdHJ1ZSwKICAgICAgaGFuZGxlcigpIHsKICAgICAgICB0aGlzLmluaXRGb3JtRGF0YSgpOwogICAgICB9LAogICAgfSwKICAgIGZvcm1EYXRhOiB7CiAgICAgIGRlZXA6IHRydWUsCiAgICAgIGhhbmRsZXIodmFsKSB7CiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsKTsKICAgICAgfSwKICAgIH0sCiAgfSwKICBtZXRob2RzOiB7CiAgICBtYXRjaChuYW1lKSB7CiAgICAgIC8vIOWMuemFjee7hOS7tgogICAgICByZXR1cm4gdGhpcy5tYXRjaGVyKG5hbWUpID8/IG5hbWU7CiAgICB9LAogICAgaW5pdEZvcm1EYXRhKCkgewogICAgICBjb25zdCBmb3JtRGF0YSA9IHt9OwogICAgICBjb25zdCBmbGF0T3B0aW9ucyA9IHt9OwogICAgICBjb25zdCBkZXNjcmlwdG9yID0ge307CgogICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5vcHRpb25zKSB7CiAgICAgICAgY29uc3QgeyBsYWJlbCwga2V5LCBydWxlcyB9ID0gaXRlbTsKCiAgICAgICAgZmxhdE9wdGlvbnNba2V5XSA9IGl0ZW07CiAgICAgICAgaWYgKHJ1bGVzKSB7CiAgICAgICAgICAvLyBydWxlc+S4uuWHveaVsOaXtuinhuS4unZhbGlkYXRvcumAiemhuQogICAgICAgICAgZGVzY3JpcHRvcltrZXldID0gaXNGdW5jdGlvbihydWxlcykgPyB7IHZhbGlkYXRvcjogcnVsZXMgfSA6IHJ1bGVzOwogICAgICAgIH0KCiAgICAgICAgLy8g6K6+572u6buY6K6k5YC877yM6ICD6JmR6aG555uu5Y+v6IO95rKh5pyJ5byV5YWlVnVlUm91dGVyCiAgICAgICAgT2JqZWN0LmFzc2lnbihmb3JtRGF0YSwgZ2V0RGVmYXVsdFZhbHVlKGl0ZW0sIHRoaXMuJHJvdXRlPy5xdWVyeSkpOwoKICAgICAgICAvLyDlpITnkIZsYWJlbAogICAgICAgIGlmIChpc1BsYWluT2JqZWN0KGxhYmVsKSkgewogICAgICAgICAgZmxhdE9wdGlvbnNbbGFiZWwua2V5XSA9IGxhYmVsOwogICAgICAgIH0KICAgICAgfQoKICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7CiAgICAgICAgZmxhdE9wdGlvbnMsCiAgICAgICAgZm9ybURhdGEsCiAgICAgICAgdmFsaWRhdG9yOiBuZXcgQXN5bmNWYWxpZGF0b3IoZGVzY3JpcHRvciksCiAgICAgIH0pOwogICAgfSwKICAgIGdldFByb3BzKGtleSwgb3B0aW9ucykgewogICAgICBjb25zdCB7IGZvcm1EYXRhIH0gPSB0aGlzOwogICAgICBjb25zdCB7CiAgICAgICAgcHJvcHMgPSB7fSwKICAgICAgICBhdHRycyA9IHt9LAogICAgICAgIG9uOiBldmVudCA9IHt9LAogICAgICAgIG5hdGl2ZU9uOiBuYXRpdmVFdmVudCA9IHt9LAogICAgICAgIC4uLm90aGVyT3B0aW9ucwogICAgICB9ID0gb3B0aW9uczsKCiAgICAgIC8qKgogICAgICAgKiDkuLrkuovku7blpITnkIblh73mlbDms6jlhaVzZXRTdGF0ZeWPguaVsAogICAgICAgKi8KICAgICAgY29uc3Qgb24gPSBnZXRJbmplY3RlZEV2ZW50cyhldmVudCwgdGhpcy5zZXRTdGF0ZS5iaW5kKHRoaXMpKTsKICAgICAgY29uc3QgbmF0aXZlT24gPSBnZXRJbmplY3RlZEV2ZW50cyhuYXRpdmVFdmVudCwgdGhpcy5zZXRTdGF0ZS5iaW5kKHRoaXMpKTsKCiAgICAgIGNvbnN0IHVwZGF0ZSA9IG5ld1ZhbCA9PiB7CiAgICAgICAgdGhpcy4kc2V0KHRoaXMuZXJyb3JzLCBrZXksIG51bGwpOyAvLyDmuIXpmaTplJnor6/nirbmgIEKICAgICAgICB0aGlzLnNldFN0YXRlKHsgW2tleV06IG5ld1ZhbCB9KTsKICAgICAgfTsKCiAgICAgIGNvbnN0IGFsbEF0dHJzID0gT2JqZWN0LmFzc2lnbihhdHRycywgcHJvcHMpOwoKICAgICAgcmV0dXJuIHsKICAgICAgICAuLi5vdGhlck9wdGlvbnMsIC8vIOWFtuS7lumAiemhueebtOaOpeWOn+agt+S8oOmAku+8jOS/neivgeaLk+WxleaApwogICAgICAgIGZvcm1PcHRpb246IHRoaXMuZmxhdE9wdGlvbnNba2V5XSwgLy8g5Z+65pys5L+h5oGv77yM5L6/5LqO55So5oi35L2/55SobWF0Y2hlcuiHquWumuS5iee7hOS7tgogICAgICAgIGtleSwKICAgICAgICBuYXRpdmVPbiwKICAgICAgICBvbjogT2JqZWN0LmFzc2lnbih7fSwgb24sIHsKICAgICAgICAgIGlucHV0OiBpc0Z1bmN0aW9uKG9uLmlucHV0KQogICAgICAgICAgICA/IG5ld1ZhbCA9PiB7IG9uLmlucHV0KG5ld1ZhbCk7IHVwZGF0ZShuZXdWYWwpOyB9CiAgICAgICAgICAgIDogdXBkYXRlLAogICAgICAgIH0pLAogICAgICAgIC8qKgogICAgICAgICAqIOWQiOW5tmF0dHJzL3Byb3Bz77yM57uf5LiA5Lyg57uZYXR0cnMKICAgICAgICAgKiBWdWXlhoXpg6jop6PmnpDlsZ7mgKfml7bvvIzkvJrlsIblr7nlupTnu4Tku7bnmoRgcHJvcHPku47miYDmnInnmoRhdHRyc+S4reaPkOWPluWHuuadpQogICAgICAgICAqIOW5tuWwhnByb3Bz5Lyg6YCS57uZ57uE5Lu255qEcHJvcHPvvIzliankuIvnmoRhdHRyc+aUvui/m2AkYXR0cnNg77yM5omA5Lul6buY6K6k5Lyg57uZYXR0cnPmsqHmnInpl67popgKICAgICAgICAgKiDkvYbmmK/lpoLmnpzpu5jorqTkvKDnu5lwcm9wc+WwhuWPr+iDveS8muWvvOiHtOafkOS6m+iHquWumuS5iee7hOS7tuaXoOazleato+ehruino+aekOW+l+WIsGAkYXR0cnNgCiAgICAgICAgICog5q+U5aaC5LiA5Lqb6YCP5Lyg5bGe5oCn77yM57uE5Lu25Lit5aaC5p6c5rKh5pyJ5aOw5piO5a+55bqU55qEcHJvcHPvvIzmsqHmnInooqvnu4Tku7bmjqXmkJznmoRwcm9wc+WxnuaAp+WwhuS4jeS8mui/m+WFpWAkYXR0cnNgCiAgICAgICAgICog5LuO6ICM5a+86Ie05YaF6YOo5L2/55So5YiwYCRhdHRyc2Dlj5jph4/nmoTlnLDmlrnlh7rnjrDpl67popgKICAgICAgICAgKi8KICAgICAgICBhdHRyczogT2JqZWN0LmFzc2lnbih7fSwgYWxsQXR0cnMsIHsKICAgICAgICAgIC8vIOS8mOWFiOmHh+eUqCB2YWx1ZQogICAgICAgICAgdmFsdWU6IGhhcyhhbGxBdHRycywgJ3ZhbHVlJykKICAgICAgICAgICAgPyBhbGxBdHRycy52YWx1ZQogICAgICAgICAgICA6IGZvcm1EYXRhW2tleV0sCiAgICAgICAgfSksCiAgICAgIH07CiAgICB9LAogICAgY3JlYXRlQ29tcG9uZW50KG9wdGlvbnMpIHsKICAgICAgY29uc3QgaCA9IHRoaXMuJGNyZWF0ZUVsZW1lbnQ7CiAgICAgIGNvbnN0IHsgY29tcG9uZW50LCBrZXksIC4uLm90aGVyT3B0aW9ucyB9ID0gb3B0aW9uczsKCiAgICAgIGlmICgha2V5KSB7CiAgICAgICAgY29uc29sZS5lcnJvcignTWlzc2luZyByZXF1aXJlZCBwcm9wIFwna2V5XCcnKTsKICAgICAgfQoKICAgICAgLy8gY29tcG9uZW50IOimgeS5iOaYr3N0cmluZ+imgeS5iOaYr2Z1bmN0aW9uCiAgICAgIGlmIChpc1N0cmluZyhjb21wb25lbnQpKSB7CiAgICAgICAgcmV0dXJuIGgoCiAgICAgICAgICB0aGlzLm1hdGNoKGNvbXBvbmVudCksCiAgICAgICAgICB0aGlzLmdldFByb3BzKGtleSwgb3RoZXJPcHRpb25zKSwKICAgICAgICApOwogICAgICB9CgogICAgICBpZiAoaXNGdW5jdGlvbihjb21wb25lbnQpKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29tcG9uZW50KGgsIHRoaXMuZm9ybURhdGEsIHRoaXMuc2V0U3RhdGUpOwogICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiB0aGlzLiR2bm9kZS5jb25zdHJ1Y3RvcikgewogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgLy8g5LiN5pivVk5vZGXlsLHorqTkuLrmmK/lr7nosaHvvIzljIXlkKtjb21wb25lbnTjgIFwcm9wc+OAgWF0dHJz44CBb27nrYnlsZ7mgKcKICAgICAgICByZXR1cm4gaCgKICAgICAgICAgIHRoaXMubWF0Y2gocmVzdWx0LmNvbXBvbmVudCksCiAgICAgICAgICB0aGlzLmdldFByb3BzKGtleSwgb21pdChyZXN1bHQsICdjb21wb25lbnQnKSksCiAgICAgICAgKTsKICAgICAgfQoKICAgICAgY29uc29sZS53YXJuKCdcJ2NvbXBvbmVudFwnIG11c3QgYmUgc3RyaW5nIG9yIGZ1bmN0aW9uJyk7CiAgICB9LAogICAgLyoqCiAgICAgKiDkuIvliJflh73mlbDlpJbpg6jlj6/osIPnlKgKICAgICAqLwogICAgZ2V0UmVzdWx0KCkgewogICAgICByZXR1cm4gY2xvbmVEZWVwKHRoaXMucmVzdWx0KTsKICAgIH0sCiAgICBnZXRGb3JtRGF0YSgpIHsKICAgICAgcmV0dXJuIGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhKTsKICAgIH0sCiAgICBzZXRTdGF0ZShjYWxsYmFjaykgewogICAgICBjb25zdCBkYXRhID0gaXNGdW5jdGlvbihjYWxsYmFjaykgPyBjYWxsYmFjayh0aGlzLmZvcm1EYXRhKSA6IGNhbGxiYWNrOwogICAgICBpZiAoaXNQbGFpbk9iamVjdChkYXRhKSkgewogICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5mb3JtRGF0YSwgZGF0YSk7CiAgICAgIH0KICAgIH0sCiAgICByZXNldCgpIHsKICAgICAgY29uc3QgZm9ybURhdGEgPSB7fTsKICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5mbGF0T3B0aW9ucykpIHsKICAgICAgICBjb25zdCB7IGRlZmF1bHQ6IGRlZmF1bHRWYWx1ZSB9ID0gdmFsdWU7CiAgICAgICAgZm9ybURhdGFba2V5XSA9IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKQogICAgICAgICAgPyBkZWZhdWx0VmFsdWUoe30pIC8vIOWklumDqOWPr+iDveino+aehO+8jOS8oOWFpeepuuWvueixoemYsuaKpemUmQogICAgICAgICAgOiBkZWZhdWx0VmFsdWU7CiAgICAgIH0KICAgICAgdGhpcy5mb3JtRGF0YSA9IGZvcm1EYXRhOwogICAgICB0aGlzLmVycm9ycyA9IHt9OwogICAgfSwKICAgIHRvUXVlcnkoKSB7CiAgICAgIGNvbnN0IHF1ZXJ5ID0ge307CiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuZmxhdE9wdGlvbnMpKSB7CiAgICAgICAgY29uc3QgeyB0b1F1ZXJ5LCBtYXBwZXIgfSA9IHRoaXMuZmxhdE9wdGlvbnNba2V5XTsKICAgICAgICBsZXQgdmFsdWU7CiAgICAgICAgaWYgKHRvUXVlcnkgPT09IHRydWUgJiYgaXNGdW5jdGlvbihtYXBwZXIpKSB7CiAgICAgICAgICB2YWx1ZSA9IG1hcHBlcih0aGlzLmZvcm1EYXRhKSA/PyB0aGlzLmZvcm1EYXRhW2tleV07CiAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRvUXVlcnkpKSB7CiAgICAgICAgICB2YWx1ZSA9IHRvUXVlcnkodGhpcy5mb3JtRGF0YSk7CiAgICAgICAgfQogICAgICAgIC8vIOepuuWAvOi/h+a7pCwgdmFsdWXkuI3kuLogdW5kZWZpbmVkIOaIliBudWxsIOaIliAnJwogICAgICAgIGlmIChub3RFbXB0eSh2YWx1ZSkpIHsKICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkgewogICAgICAgICAgICBPYmplY3QuYXNzaWduKHF1ZXJ5LCBnZXRGaWx0ZXJEYXRhKHZhbHVlKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBxdWVyeVtrZXldID0gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBxdWVyeTsKICAgIH0sCiAgICB2YWxpZGF0ZShvcHRpb25zID0ge30pIHsKICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdG9yPy52YWxpZGF0ZSh0aGlzLmZvcm1EYXRhLCBvcHRpb25zKS50aGVuKCgpID0+IHsKICAgICAgICB0aGlzLmVycm9ycyA9IHt9OwogICAgICAgIHJldHVybiB0aGlzLmdldFJlc3VsdCgpOwogICAgICB9KS5jYXRjaChlID0+IHsKICAgICAgICBjb25zdCB7IGVycm9ycyB9ID0gZTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlcnJvcnMpKSB7CiAgICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycy5yZWR1Y2UoKHJlc3VsdCwgaXRlbSkgPT4gewogICAgICAgICAgICByZXN1bHRbaXRlbS5maWVsZF0gPSBpdGVtLm1lc3NhZ2U7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9LCB7fSk7CiAgICAgICAgfQogICAgICAgIHRocm93IGU7CiAgICAgIH0pOwogICAgfSwKICB9LAp9Owo="},{"version":3,"sources":["ConfigForm.vue"],"names":[],"mappings":";AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"ConfigForm.vue","sourceRoot":"src/tool/form","sourcesContent":["e<template lang=\"pug\">\n.form-container\n .form-item(\n v-for=\"option in options\",\n :key=\"option.key\",\n :class=\"{ [errorClass]: !!errors[option.key] }\"\n )\n .form-item-label\n FormItemLabel(ref=\"formItem\", :option=\"option.label\")\n .form-item-content\n FormItemContent.content(ref=\"formItem\", :option=\"option\")\n .err-msg(v-if=\"errors[option.key]\") {{ errors[option.key] }}\n</template>\n\n<script>\nimport FormItemLabel from './label';\nimport FormItemContent from './content';\nimport AsyncValidator from 'async-validator';\nimport {\n isFunction,\n isPlainObject,\n cloneDeep,\n isString,\n omit,\n noop,\n has,\n} from 'lodash-es';\nimport {\n getDefaultValue,\n getInjectedEvents,\n getFilterData,\n notEmpty,\n} from './helpers';\n\nexport default {\n name: 'ConfigForm',\n components: {\n FormItemLabel,\n FormItemContent,\n },\n props: {\n /**\n * 组件核心配置项\n */\n options: {\n type: Array,\n default: () => [],\n },\n /**\n * 用于匹配组件用户可以根据接收到的组件名称返回想要的组件返回结果将作为createElement的第一个参数\n */\n matcher: {\n type: Function,\n default: noop,\n },\n /**\n * 简单的i18n处理函数\n */\n locale: {\n type: Function,\n default: key => key,\n },\n /**\n * 为校验失败项添加的默认类名,外部可根据这个类名去定义/修改组件样式\n */\n errorClass: {\n type: String,\n default: 'form-item-error',\n },\n },\n data() {\n return {\n formData: {},\n flatOptions: {}, // 按key将原始选项存储\n validator: null,\n errors: {},\n };\n },\n computed: {\n result() {\n const result = {};\n const { formData, flatOptions } = this;\n for (const [key, value] of Object.entries(flatOptions)) {\n const { mapper } = value;\n\n // mapper为false代表当前key值不需要加入最终结果\n if (mapper === false) continue;\n\n // mapper没有返回值的话默认使用当前值 formData[key] 兜底\n const mapperValue = isFunction(mapper) ? mapper(formData) : formData[key];\n // 空值过滤\n if (isPlainObject(mapperValue)) {\n Object.assign(result, getFilterData(mapperValue));\n } else if (notEmpty(mapperValue)) {\n result[key] = mapperValue;\n }\n }\n return result;\n },\n },\n watch: {\n options: {\n deep: true,\n immediate: true,\n handler() {\n this.initFormData();\n },\n },\n formData: {\n deep: true,\n handler(val) {\n this.$emit('change', val);\n },\n },\n },\n methods: {\n match(name) {\n // 匹配组件\n return this.matcher(name) ?? name;\n },\n initFormData() {\n const formData = {};\n const flatOptions = {};\n const descriptor = {};\n\n for (const item of this.options) {\n const { label, key, rules } = item;\n\n flatOptions[key] = item;\n if (rules) {\n // rules为函数时视为validator选项\n descriptor[key] = isFunction(rules) ? { validator: rules } : rules;\n }\n\n // 设置默认值考虑项目可能没有引入VueRouter\n Object.assign(formData, getDefaultValue(item, this.$route?.query));\n\n // 处理label\n if (isPlainObject(label)) {\n flatOptions[label.key] = label;\n }\n }\n\n Object.assign(this, {\n flatOptions,\n formData,\n validator: new AsyncValidator(descriptor),\n });\n },\n getProps(key, options) {\n const { formData } = this;\n const {\n props = {},\n attrs = {},\n on: event = {},\n nativeOn: nativeEvent = {},\n ...otherOptions\n } = options;\n\n /**\n * 为事件处理函数注入setState参数\n */\n const on = getInjectedEvents(event, this.setState.bind(this));\n const nativeOn = getInjectedEvents(nativeEvent, this.setState.bind(this));\n\n const update = newVal => {\n this.$set(this.errors, key, null); // 清除错误状态\n this.setState({ [key]: newVal });\n };\n\n const allAttrs = Object.assign(attrs, props);\n\n return {\n ...otherOptions, // 其他选项直接原样传递,保证拓展性\n formOption: this.flatOptions[key], // 基本信息便于用户使用matcher自定义组件\n key,\n nativeOn,\n on: Object.assign({}, on, {\n input: isFunction(on.input)\n ? newVal => { on.input(newVal); update(newVal); }\n : update,\n }),\n /**\n * 合并attrs/props统一传给attrs\n * Vue内部解析属性时会将对应组件的`props从所有的attrs中提取出来\n * 并将props传递给组件的props剩下的attrs放进`$attrs`所以默认传给attrs没有问题\n * 但是如果默认传给props将可能会导致某些自定义组件无法正确解析得到`$attrs`\n * 比如一些透传属性组件中如果没有声明对应的props没有被组件接搜的props属性将不会进入`$attrs`\n * 从而导致内部使用到`$attrs`变量的地方出现问题\n */\n attrs: Object.assign({}, allAttrs, {\n // 优先采用 value\n value: has(allAttrs, 'value')\n ? allAttrs.value\n : formData[key],\n }),\n };\n },\n createComponent(options) {\n const h = this.$createElement;\n const { component, key, ...otherOptions } = options;\n\n if (!key) {\n console.error('Missing required prop \\'key\\'');\n }\n\n // component 要么是string要么是function\n if (isString(component)) {\n return h(\n this.match(component),\n this.getProps(key, otherOptions),\n );\n }\n\n if (isFunction(component)) {\n const result = component(h, this.formData, this.setState);\n if (result instanceof this.$vnode.constructor) {\n return result;\n }\n // 不是VNode就认为是对象包含component、props、attrs、on等属性\n return h(\n this.match(result.component),\n this.getProps(key, omit(result, 'component')),\n );\n }\n\n console.warn('\\'component\\' must be string or function');\n },\n /**\n * 下列函数外部可调用\n */\n getResult() {\n return cloneDeep(this.result);\n },\n getFormData() {\n return cloneDeep(this.formData);\n },\n setState(callback) {\n const data = isFunction(callback) ? callback(this.formData) : callback;\n if (isPlainObject(data)) {\n Object.assign(this.formData, data);\n }\n },\n reset() {\n const formData = {};\n for (const [key, value] of Object.entries(this.flatOptions)) {\n const { default: defaultValue } = value;\n formData[key] = isFunction(defaultValue)\n ? defaultValue({}) // 外部可能解构,传入空对象防报错\n : defaultValue;\n }\n this.formData = formData;\n this.errors = {};\n },\n toQuery() {\n const query = {};\n for (const key of Object.keys(this.flatOptions)) {\n const { toQuery, mapper } = this.flatOptions[key];\n let value;\n if (toQuery === true && isFunction(mapper)) {\n value = mapper(this.formData) ?? this.formData[key];\n } else if (isFunction(toQuery)) {\n value = toQuery(this.formData);\n }\n // 空值过滤, value不为 undefined 或 null 或 ''\n if (notEmpty(value)) {\n if (isPlainObject(value)) {\n Object.assign(query, getFilterData(value));\n } else {\n query[key] = value;\n }\n }\n }\n return query;\n },\n validate(options = {}) {\n return this.validator?.validate(this.formData, options).then(() => {\n this.errors = {};\n return this.getResult();\n }).catch(e => {\n const { errors } = e;\n if (Array.isArray(errors)) {\n this.errors = errors.reduce((result, item) => {\n result[item.field] = item.message;\n return result;\n }, {});\n }\n throw e;\n });\n },\n },\n};\n</script>\n\n<style scoped lang=\"stylus\">\n.form-container >>>\n display grid\n grid-template-columns repeat(auto-fill, minmax(240px, 1fr))\n grid-gap 12px\n justify-items center\n\n.form-item\n width 100%\n display flex\n flex-direction column\n\n.form-item-label >>>\n height 22px\n line-height 22px\n margin-bottom 10px\n color primary-text-color\n font-size 14px\n .bui-select-wrapper-plain\n display flex\n align-items center\n height 22px\n .bui-select-icon-plain\n margin-bottom 0\n\n.form-item-content\n .content\n width 100%\n .err-msg\n margin-top 5px\n font-size 12px\n color error-color\n</style>\n"]}]}