{"_id":"vue-element-customize","_rev":"83-fdb3f5a036e422da06ac0b750cd0742b","name":"vue-element-customize","dist-tags":{"latest":"1.1.11","next":"3.0.1"},"versions":{"0.0.1":{"name":"vue-element-customize","version":"0.0.1","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"f98fcac77d411e6db9a4b4315ee2c99261b88fdc","_id":"vue-element-customize@0.0.1","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-iutYyiO6nUvhdPWH3y5VFP7m/GS1L6Br4+32QcruIuWwjP1l+4InnHT6EBidnIvMlpL/ZwlGnEtbrhScVn5QPw==","shasum":"2040205f04564598577e2372078fa3a2ad3162e1","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.1.tgz","fileCount":10,"unpackedSize":26367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeYxiICRA9TVsSAnZWagAAJ+8P/2p8xQhWD0/PobBpFnEx\nC1qLZMypKN+rZXoUe3V9hltqNjUma+H/B0gP0ITFx3mcYufoK1+XHiCnz4s3\nLzj+9oH1iJ/FnPpl/h8iFRtIvinpuuWpeUj2kJp3LFj7JM9zymsx/du8tuLO\nkzB2T2Ph8CFs9RKQm0vLGQIxK6L+GLmcQSg4uQztxAbsQLq4r8I1MMRugoZ0\nnB/GJtMrJcLChHeET+FAmXtCoUPd4KsMM3YVitz/CRxTZsRPFZ7rCvyNruE1\nPQdQeh/+DzPZUpFHKoOZ6XNtsDTIN7SWTb1U4NVNkj/L2wgNfBbvcEvt9f3a\nsr5EA0XzVRDX5gOc1OStFf0564zHGnB0+I518o6k8L8/iK61qMCcXZLKeHiD\nsmZ6w0Y7gi6EFkoMGxk6mBRJPSrKrw9jYIeja/++zs61OjOevW7ce49uNqS3\nf1ifxL5rCsxAwvKbrwSPwMypFfgLlUvblLy/cwYmLNc4o0B7Ig46iNJqkLwW\n9lYKGyajs++KijWSbJ0HrYnzzziC5XKDp5AQoYSxnxyFQWhJtCtQqMJWr8gW\nZOOH/idSJcpD0MmtmwBg7GYTKRPI1AgXMYZQxM0maZ8dTTzYiyYIK4aQ1BVW\nOChrbvxmhcuM7o13Nvm+N4u0QV9ksMx5IyF1a0n1Xqfb2nycyBfYkykfLxwU\nP8cR\r\n=qp2L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuNc0yk3HsjqOB6kA8Y3qHrA+tiRyCVmQZOlOtkEexFgIhALvu+PC3+pTG48BicQfH5sRzy7cxI5p9ICqjeMV2J6Js"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.1_1583552648273_0.7589601545254339"},"_hasShrinkwrap":false},"0.0.2":{"name":"vue-element-customize","version":"0.0.2","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"65c7dddc93090b74afebb8ed20708b3c741518c6","_id":"vue-element-customize@0.0.2","_nodeVersion":"10.16.3","_npmVersion":"6.14.2","dist":{"integrity":"sha512-jRL8o16uO6BCKNrZzts08Tq86XNkMeGk5pq+eKDqAMHJC7S9r/iwsQGUv+A8VBvwKtGv55MGrEGD0Dx98IEhJA==","shasum":"5fdb0062b08ee2b393e45b89d7a48f8123a59d05","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.2.tgz","fileCount":10,"unpackedSize":38838,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZwrLCRA9TVsSAnZWagAAwmAQAIA5hEMlQaWlVQ8CtKXF\nJu9vWVA0Xt92umWYGPI9Dc0V7buLW3Bb+Nu80BEcxZ6EhoXqgceXGkm0J6zB\n9GjymPcxrTH2q4RG/2skce1X4p+iDeDbeF4fs05Ni0EdYJjgSjV7a1vDs50H\napi1fv2gnhHnxhV7Mgfg75i9SyE3H6MhOhsl+3TXQQ/K0h/OYotKrRqfi77b\nPxc7GyPbr0Gu5Rz1nz1d7Qr0HUD1BNFnMQU+mdtSJlUZFjq9TMR6nONRtnFm\nTTLppVzCbZY0HHlAp/wYyDHsdD6yeldu2hLEVib1Fk+2JBIQaYYi6ahcmAp/\n5avwLC8lNu0njx3wKxixl5SYrweDvbSj8HWUTPCdN8dOTv+7WyJmmNzEavIf\njPyeiQlaxnw8Ypy5E5jc8TAPDt8cdu6VjKwiDYH6ug70+AVD6j55cL0aHLZl\nFS1hqDlFRgv/b0Xh4tSEROMWHUUy0ejgXwZMP3z/cTm+53ZeGPBHxgznO9/o\nbs4EDQ+lZOIB3lRVQmpppxgdiwZ5ZZFfQsp25trQm3PUftZCkSo2Ge9Bfp+1\nE43DJjaDWBBLEymK2LibcvhRyiSZFZp+wdMWbx34mcBRO4RzEBtUl8Gx0AXF\nnDpKwfpmDz5/z/ufhTzgVlW+ZNvwtXGoy35JIntg/Zk9pXQSeFfFQ7iOqFaT\n6jzH\r\n=eDGY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCk60o1QRdSsBoWlY8oRjY1XI4UjHXSym1h4coKkegqPAIhAOK4efe/7bQg9gdfnlf/m8G9/XwDLYok4BMFtFS90YTF"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.2_1583811275287_0.8194096724686515"},"_hasShrinkwrap":false},"0.0.3":{"name":"vue-element-customize","version":"0.0.3","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"ddf652d7748c7906746e9a64cac3808be1108df8","_id":"vue-element-customize@0.0.3","_nodeVersion":"10.16.3","_npmVersion":"6.14.2","dist":{"integrity":"sha512-fb6UiCUOaIAWJBF5hqZggKc4IszMM9B/HzKpH0D1iQVJhZpRhFNK3hiRzimyVHcB7u+6uGo0VGAV5LaiKEcTLA==","shasum":"43f67d9ed6f85379f6b8f544b4af54b8c4558ac6","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.3.tgz","fileCount":12,"unpackedSize":48354,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaEMBCRA9TVsSAnZWagAAMCkP/RPsbqTTJrdDgG2eS/0R\nUTPPyqc9gJL7kcBJ4NsyqcYNFl8bXL4xaHMPSN6zX8rkSJSbkPklfVbAh0Gs\naUVlllR1ufw+pJ2JKDBiwTAR+7He32tYdIOPplqIgm9TR0mEVuvMow8786Gf\ns+gD6Ok41YZ6EkkYthT0J4UM9h5tTS3SVeg496CUXlXYl5o8aNGH9uwq+TUy\n80OLUeHxVV+Rxm7qBy8E8kgiY/BmR0cKUI8xwWi47YLFq6CTdUioe3Q6Xbri\nBxI281EsBRMlZhmhpoafwwjStkAUOdaIppp2xwgZ4ZZyxVgxb4llwdrh3nqg\nq4RA5TUQTNpatxzoluC0nmVuj7ZZKqlN/CffTRrwgzjeVQfQAZK6TDxeYMu5\nk1aMjVMf1fB/meiCcPJgr/PvIxii2R31qs/zH5fmnJXieRTzN3Frzr1NOS7f\nsmuVfysWX/YaW/iRkt35lSXb7olz4ELaeY38Oa3hhZkQGRQOkNLVayBGvGXW\nDEPM2pOmPSdaa2KU1L+F7RZlQ8nOEvCnBVQ/ePpCx0Dm0RqkQHmHZ6BNwZng\nqgYxA+NVynaquwQSal/oMExz1Rdy9VBE4sioYk3jmAto5yGSEdvS5kvaVfQF\ncdpOSNwLfGvNaEGSpB//UCsr2MQrubaYI3UUS/jcIdKPJ7lYzVGkZJu7EUPo\n1d73\r\n=DH/E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKbUoRJYpozdQ5fdApkX3xylL4/3CeiMUhvYNXRwqhCAIhANQnXmjwDSlS+ho0wySnlqvy+/8Zyq8m9hYE179HjYcC"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.3_1583891201207_0.20622880297776303"},"_hasShrinkwrap":false},"0.0.4":{"name":"vue-element-customize","version":"0.0.4","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"0063c4ce874ae31a039f2e97feb502c5395bc7c0","_id":"vue-element-customize@0.0.4","_nodeVersion":"10.16.3","_npmVersion":"6.14.2","dist":{"integrity":"sha512-kNbUj+czH13OCk/+bBGub1Yt82jpmRJHI0KsGIQpkuueZ0Yc4Yne7tYBgzAUPCQmV52gICTpTU83ntM7FPGxaw==","shasum":"ce0763df1075a4943fd3101c6ffb5a667019c7bb","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.4.tgz","fileCount":12,"unpackedSize":48924,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaII7CRA9TVsSAnZWagAAbUUP/jXB1nRF24lWRdYCehON\nlhZTpDU21a+0OMt3fPSLw0wvOkOGPU3+6baKI3+7H58i0aO8L0/gwOmlM/6E\n7wYcJxiL2BwweZs99HyTu7G38deBhnawpO2cZfOOgDpDx1RAEXIgeqavK81n\nngNyfacDXfD58+ynBMV0aKyCeJ8N66UEtssSffsfOCqfbUBXI3aBNebi1GpD\nwS/2oJN7niuN/Dn3nnHgmiuB4lJqsfSSYBrVQx2VQYX0uAc/lamTHyXCcUJy\nlAOWmPaxAXjob9s9p0IUeGdIXR3RFMIeJRgozljSkVI7jzh8Sgvzvn1avahA\nbthEl38QIzy3d1TxD0orU0IZyX05GV/q01zxQutSyqUiB8GZy9FQS3g0ECjI\nZ0b/J8x0Rrq51TPTmjxPNQMb/4HQ3JW5MEAu0cXe/PY0Gen5qVqkTpwaeaQC\nz/51rTmOLEVQ7n7AZGzVKQuO1MwQ25zKFcabCfxXYe8rUCkqA8vFuiEroKrq\nDJ9icK3ncRRTcVlJTFvzuwTuY3yMdJYmQ+4fmlCnI7OC4V12Cuk16CYQeozI\nw24cu9fKhYZMEDzYga0rQczZr1hrY/RormfrdG1lljJCXgUPY8NZ9jfFtXCO\nI3gvRe9ldrS+SWjL2DPUafW4PVMNmILQdi7SAY2u6AGRcqFBmHUxa/nqE+1D\nLUjH\r\n=s8fT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEFi55CJSykcgh2BC7avtZF2wn2c9WUfSzEV1cJ9PlugAiEAng/HDbkPLIHM+EKkGaGNHcLkkhsbqTFpCzfdBInXpv4="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.4_1583907386905_0.582360419285757"},"_hasShrinkwrap":false},"0.0.5":{"name":"vue-element-customize","version":"0.0.5","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"0063c4ce874ae31a039f2e97feb502c5395bc7c0","_id":"vue-element-customize@0.0.5","_nodeVersion":"10.16.3","_npmVersion":"6.14.2","dist":{"integrity":"sha512-jEC44bEF3FhaJEAU2/2eBXp9Wx+Kr1x/4bKCdvRR+lxeTIF0lQFDzM18HtP39RgvVdCJ4nDq6vqW82ObeLsdWA==","shasum":"29bae19870c975470c2ac6e6504068738dc2feb5","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.5.tgz","fileCount":12,"unpackedSize":48924,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaIUQCRA9TVsSAnZWagAAD5cP/3YJMopa5vtFfqfzoPny\nBQ7BnDygYRUXCKWUGJ6abo7RVue4ymK5OznLbgwtTeOFOttg5Jbn5/NX9tT9\n4Z8JQWpiPcxhHp3BhKUWV7ZSEOmE7nMGpP8WtWA93D9qpY41O0PXyhMQisz5\nacc9f7ESW7Tuj2VPb1yGZ623otbAVnjwetxCMXiVCPV4RvLUxIs6XBlEpx7N\nAyRyojoaOnAoBu2OBTtkXulTVMh88eu6kibIl1shRJigqBZTtZSsZLyyJZcG\nvjRZGYbRrm7dr71CEQHEsRb1pEDBcG0lvTxAvRvVNDhoasWRAOfE4Bz8s+Fr\nb9Jjo97z2A0S8dhzsqvylHg6VTjWrTTWm4vzkmC89zrVfwAjKOHj8AOvy8tt\necKWkcCE9RwQPdnaINLOnb29Va/fhlnC09EOvYZIr55Vy3spciTHReW9aQHm\nORhu+ue8+RIUTo87iituxn0OQFNM3S/Lnuvx0qlXo13uoJLCpHiNFRco3yPW\n9cbQF+eVfFUaoZHhKsN3+5mdPwoB2HtlOyualJXS8UDuK9kDbO4q0t7ai0mJ\nTMRBSEm6Avm/xLnsdn4z64nRzCPijCj487+gTt9IP6j4jRCbmXQ65lU3cCPU\nMCAJaaxpALINmrJ13UCt6vJVchlfVM4gv7VzVhbH2E2p8xuk8t7fd5NB+Jq8\nxEy7\r\n=rtkB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3r54LlHSq2vTubDp7+AOyESaXpN25OgJr2POmRAt1QQIgEhLat7ZYiweTosnAMcYkZCCgVut7eN4MovaeQsPjwyo="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.5_1583908111863_0.9599016048169882"},"_hasShrinkwrap":false},"0.0.6":{"name":"vue-element-customize","version":"0.0.6","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"3c9f923aa88f19796e33ae8d7721bc7c781e18fd","_id":"vue-element-customize@0.0.6","_nodeVersion":"10.16.3","_npmVersion":"6.14.2","dist":{"integrity":"sha512-Zab9PjHoKG4MGtrP7wVVaUZSvDiuH2XAGZQDuwpSn4ThYOIvktZR7fb9i6ZV+4qbhw4uYzW6kwLQaVpvoyWB9w==","shasum":"e3375787e46e5ca8b0e4671e5f5526bd4a060d9e","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.6.tgz","fileCount":12,"unpackedSize":49129,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeaLlECRA9TVsSAnZWagAA9q4QAKGyfGCsBUwGd17S1PsL\nOKNHBXEI5f8WsAIYmDO/BdQ4EwUjGNVfcpHq91N+Qay34WTK0ePd0zNpM3oI\nSUMVKPiFzlMJPdbDBqPZhFSeY7bKIWeIMXyStVhkuB/6P9WIzDFxLQN+Ofpo\nqhVQfXPEJWk06M1FggY1c2smOz+oGeOE72Cpm+hvUB+TQj1xKjdgivp6Bah7\nbVXs8z2rEa0+mmEd4nYOkPdjrHZAYC4bbbAEIBNKS6Q7lRf/yif8FeumNQZ+\n+cloyhvO+Smt4lUv8n06ShHzE9zr3mHYuwbgMsDPr6jZNtO0/vr1nWMWA8tJ\nkLPnIg1YXkiXn49sb8fzoENL/myvGpejFUI7x8qpEAhfbjEptkTOjkQNh7gz\nAcqPnm5VMZKlzrTLF4Bxmj7HiZo4ktHP4c3FxeLv7t5L33XuwUOyhFq2IpYS\nZxFXLaIAWbYkJfBlWeQ8SdPaCdSYIkGhTu7B1hJ7J2cLhsxULQzY+hHF9505\niL6AKXmP4sV1zx90SXlX6nFTqa/nAc6e7xwjHlGyeNupCTc3QXD+gDahrByL\noosW40DNQ+m462nl3YDveTLRKHOKlyTPrcoo7BBuHHNi4jbg9GVVD4mclAwH\nFPa77q5OvgHndVWY88dtLAxg23YSpzBkB/RO1gBtD433Seqya9vLR/dSJFox\nIBFY\r\n=nEti\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBaVGmb5m+fAL6VT1tqqqlmAR01Dj/wK/HolGilEf7MZAiEAiS6utZEsMEcYWL3IA6ifX20MPwl1IDVGzq7g+AKOiDo="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.6_1583921475624_0.6453777413403132"},"_hasShrinkwrap":false},"0.0.7":{"name":"vue-element-customize","version":"0.0.7","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"efd1be6ae2b3c67c9b8a6e9d48bb2fc587adef6c","_id":"vue-element-customize@0.0.7","_nodeVersion":"10.16.3","_npmVersion":"6.14.2","dist":{"integrity":"sha512-kl36yuLSmt4Jt4ebt4eYb9GA/8RRfA0g8tzKjR8JAzcBK+XXtfiWj2zXAz0u7wqPtGdEBT83qAUUjKDOcJZSKg==","shasum":"4f34d0263515b1da595367db0a281c07d8f4c432","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.7.tgz","fileCount":12,"unpackedSize":49129,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeayiyCRA9TVsSAnZWagAAVSsQAJ95rp2uMjaAQtKU5Job\nGuHJTPl3RJG/CFDmBA20m9CmINsOrmAJpd0yLcxQdPq07dj2gGpxaqQkVtHj\nwUUvB1JIF/2qz5HLyCCzW/CIwT0WEDK/8KcVLCIGCswlxdT5aXfSF2zOr4tP\nAIzFUjB9brnfBeaY6wLpjkkqTjnZzDrpl5SjRDEcMjXh4cd2pXChloW1I8IC\ncXtyUnf/1ktyCzJFCkBh2bxmYbHFjAlcPpLuhkglfCtoVaRO3mo5X0SIFhnR\nbo6oSqXyeex3pD1OoSroL8r0LAeF5OlHRJ9HMnHCx/9r6IrZXCXM3fP2v9ai\nrCH1EbAiviDwz/hUmEZNW5xc30rN2BFU8rBBg47HY3/gHPuJEUL7DuSGgGmQ\n1np6rpKadakCVhA8wrlvsgHbn2htgw0AiurlcJEb2UX7XRjT+2S1Qfaa2FyJ\nFriE2WZv5JLmgXqogtgd9dgBCF3RL3L7Ahlb2nCEras0n5pJa1l1o7ErmviM\nMzPuWFSx5nLcGeZbJskAU4hEwUE7mBdFrAHaNnwVLS3m/Lj2KhGP2gIR1W0r\n56MO4Ox0lWt2OJfPEHy/p9skhW+/haFIzG7TT/Eyu5NtGvv253c9pGfir6fN\nWhY/Jhmwj7G0haac9bD0/ltN4RIP8/tUaJ+hiTM0CFLlxss+WLEPDFtX3BIz\nf/xM\r\n=a6Uf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE3Khf/sFKdUmD91lHNsc0IbE8vvtaW7RW826RMp82DYAiEAxNDn0DfyPxc/YHw736DEteQjBjIo6GRDNXlkHXhYjok="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.7_1584081073480_0.9179746055288627"},"_hasShrinkwrap":false},"0.0.8":{"name":"vue-element-customize","version":"0.0.8","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"3dadc4728082f0d8f82a5e3f6132b9a28c691d29","_id":"vue-element-customize@0.0.8","_nodeVersion":"10.16.3","_npmVersion":"6.14.2","dist":{"integrity":"sha512-DDgYeRmTiqugAm/D0ucnyotY4wA7sZ79UOfzcUpOzYwKsxNSzW/oxtqwBjdARy2K0waHCP0L17hjRFi8Ke/NFQ==","shasum":"bbfcfc38155509b1394c4196e444df314b9807d8","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.8.tgz","fileCount":12,"unpackedSize":49313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea0JwCRA9TVsSAnZWagAAMFIP/Rpjq2iPAan/V1I+rlaY\nWi6HsxZyCqfZk1fNZch+cNRwosL03ct6xCYKbgLxKafqkimzLL7tfWP0cQZK\nIJsrol/w+3qAPZzYjpY/hl0dqXbSE/3KvQqQCLvnVp28xQ7+GOiQOH2UjBwz\nOhpOPRQH89QC+qoqOnjuKI33Ph/TUuPuDYamKg+4rIhLOc9neg1QhU6mY7RY\noJ86hpP2Bj0Q8Xi1Ll+xCCZrtG1FSLjHF2Tq3sdZnP5kmEKcUsjEw2WGZ5lI\nA+0ktOMugmobeIeuAP++4UDO7u6LPfdHXShuTeBgDLPZQQOzln7snL1H2EeI\nPGVzBAh6zsAxy3EDbSLkpYoUSgeNpYLHnvENYDQUpDX7XSYecQVz8yU2NUyU\nHTRzHybovjCtVt6460224llyEJ5frcOODtes4QlmvORsiI2lnskV7Q7mMq+J\nnJEWH+6BNQhRre00HgpfXqpvef+cF31Mxy22uA/XZoQONqDdCbNugyHE1Zw9\nGYsBFoUsjZGFMbyAo7iam2YSoPGIMtZU/p9SaybqFC60fCy0Dbe8MncGbU1E\nod8EnV0y/yB4GkDK4SCJHQBCPZutLt/q0XXJO9th7gazaQpJ2XNP1Om1v0aN\nbtuacYgd/Vj7NKszQWJCd6WBcmZIOt468irMy9Pbhvq/9q4+YC72YSoG6Rgw\nb32A\r\n=eJya\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDO2GIMCSXLe4F3r9jCeip7wFVD9xUljD489I38hHtJBgIhANWoXAIa6ZrbNbWC7l2yyyn/HJKMZEwBFXjRumuNtOFo"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.8_1584087663880_0.41334995029073496"},"_hasShrinkwrap":false},"0.0.9":{"name":"vue-element-customize","version":"0.0.9","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"a77d5d8e8de6081c698e36f53d31ad98a97a409f","_id":"vue-element-customize@0.0.9","_nodeVersion":"10.16.3","_npmVersion":"6.14.2","dist":{"integrity":"sha512-KRGIB14UclKmfwgDfUfySvuFIhlZYAMDdcEBAR/BkLJINlZoS0Ue1aNQuKjsxEFs5rsF8PEvwTt5T44oS/gavA==","shasum":"987f8b1ec38849ba61635189f7b46fccd37342c2","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.9.tgz","fileCount":12,"unpackedSize":49345,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJea1mRCRA9TVsSAnZWagAAjOIQAJTwMJYk7BX/hLqDznWF\nRV+4WAXPI47ediRr1NDIbZT5IB8dCquGtBZbsO6mi4Mh6BnV5Y7vmyMA6zBi\nlL7p4Opo2Kkx7yZFNIGQpuo4fKJJZe5Vuvgnywp1QH6ZkwkUjo5Ws7MDOB+v\nMPfyIEXIjbNJgLKAymQvRvQFNo2d6WNrbnWeK/sG0X/5UreU4F6OlZMw1h5B\ncLuJIYQ0GeOjaYRZvtVLjB9fSxA3JiM9m43EMrl0aqBcbAOUMEERHmz8xqHy\n1xwbZePqnmfyWGsUXtLOQymUCF/nUkPTEqAS2kTwLayMh20P44A6MOu56a/U\npLnr0Stcg6qRRdxJUF+J/yNA3X79lKebGtN7YNXMsFvaOjiP4eb4n2CteX0I\nTE8JqShGGdfgQsy+aulebVsllgq++iayYNHCuzAkqarjFv9IX2hyYYx+aWzs\nSccTM0l4PDNdWxNPYLUVVMhO+f3EiWw2XfhX+6SGNQHw6a70Hg74kLMMHzeG\nQYGpwhmSrJAxqBk4WmOkR7dr4101yv0tRtmQW1oScMGxkU5I94HrD0JKDWRX\nVQJMfey20OS/fgooa6XseJfQKz4UoVPWiZ6DBOUHAgZDrBefPBkNJX4gKJxy\nwWLO7tyvZROtr1ul9jXZckrli7/JMq6+0m0LHhTlShXjN1gYLl0079ofnU8R\nA6ep\r\n=PWms\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEbSgWnrenD4B22GP35WukzvYVJol2R26vd/Kgmc9WVoAiADXzlyxRF3/H4LwrQvC3R/5T+BEu1uboNv8T6mX1pH4w=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.9_1584093584818_0.3871349192021456"},"_hasShrinkwrap":false},"0.0.10":{"name":"vue-element-customize","version":"0.0.10","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"9a8c78f2b9185890fc40020ab2e26dbb49184ca7","_id":"vue-element-customize@0.0.10","_nodeVersion":"10.16.3","_npmVersion":"6.14.2","dist":{"integrity":"sha512-UXSrkatWUIkXGKsbQUwbDEBEIsjcdY1KQYWVWkDCqhZD4eynlgbH1viVClAXYnYWq5ajGRFgxAl8uZoqtA4uFQ==","shasum":"dfb23d647aaa878c28737389fccac7eedbda0d78","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.10.tgz","fileCount":12,"unpackedSize":49433,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJecs5uCRA9TVsSAnZWagAALEoQAI8qMVaMxCiBuINpY4U6\nQHxWgxWMfi7GFADHptuZGZdEd/jkI6jS5zUwKMOhNEgrk6nMllysWy4jCCog\nxkaB42rJZZEfIdKzD3jKqrEm3TfYqOoH/SBfrDaj6805kGVBveSgoC8Px6cQ\nMmpnTvm1nr7vLP7GhKUXOCIR9QzURR5Rrt4cMzkZSh0JHm6pfo28MeJcE0Q9\nttB+3nOdzQhJv9KT+Z1H1SWum3SQoQAgcNx2zXsuU8BR4Bp1YFU0arLecGhz\nXk9yixaqOs/eC4GLQa0cH+W7z32Lw/y78ilxV4odyQcMuUyW8mZQM9WGqq9I\nll+HwmSs/SGAybZaR24dB08sCRp3nAsHAX5u2EUNoimD5smQL29HTMR5smpE\nwysUJeAWQEikEAPNqOWxCk+pdhZiFV1A2tDncnMQ+n7xCjrcaOfjU0szbkwg\nX1mfhLtpGa19ZLCPEuUnsPm05O+BbrhtxrjcUrlqc7f4iqr2pHM4E1LAob49\ntEWIgchHgHdlNDff44vsbhQ2tHfoyFL0AZo2HDXRkHHSh+Tb5rArO05vSJCR\nYqgP1Yl4nwXoJBxfd/GfVSOKGQdujX+f9XcA16BBs5Gz6vBOKudILBjCYCgR\najrVtBQ4nmjTW0mhZ95HaKfshS6ubZNKK5yIx3Frw+kXuab5hJcyvZ9SCsKv\n5cRw\r\n=0S8u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2h+X0Dr/2dBpFgiotBR0rkVKm8cEqwDLTWE7DlabcEQIgfBSTp97wfzW0vfvcRhcnpsw9otwNPs8kQwxjSMuOhCQ="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.10_1584582253394_0.06292274256234576"},"_hasShrinkwrap":false},"0.0.11":{"name":"vue-element-customize","version":"0.0.11","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"c6a309ca742d34e4492c0c190349a3afc7c59465","_id":"vue-element-customize@0.0.11","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-ESnhtwwKofVec8GA4ewg1tLS8uCAsl34KU5oOKay0F7s2GBRODs43qDp35rcyL9CkEL7Qrl8UlYiwsezflNldQ==","shasum":"dba2d6de7538b4c74650dec91aa2177e191c13ba","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.11.tgz","fileCount":12,"unpackedSize":51496,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeeGsuCRA9TVsSAnZWagAA90AQAKA8VQXmZB7Sp8CyKPdn\n70RtDuvse1EIxQDPn2pS6zSlBkMtbnnTHnT4FLn2yH/YsD/vR9ANfAdXwvNp\nyTMznwbn6z3N5qK6JXwZB/Ey0bjqyLfB+VyFdp4TMR8Za8SLEgGWN1CY+qNp\nxnDd0RVRzsWApfNeSznL5vf7XOGI1wJ+uBF+UkOA/JVN83k0h9p5KyWXkDrh\nDV9EcUT6krsYjmdUICA4I24r1NHSthLbsMOW2+oDgfF4JbRP5XCvMULhAqkt\nNTzwBp25M0kQUcI8EyfjDwoJzOk3q9YJsFQ+zlFg8aF7KjrZWxV8f6b8HxmU\n0pggyafurZ2WprWMPSbTZcKHK70syC4cslTP5DYBiaUg8edzMb6tzhtzO3vm\nNq4egOzobeyhBPwg3quo9lm3fkDiRfS84avnUkafMlCxKObU+8eXLTNG2kaV\nqx2eqXUPH7hKrLr3fYSL0VTw7ZJgfsIY9qk6007woTaPch8Aw1Mk80sRWy9m\n1oASAquBhsTcLoC76bzFqnX93iYH/O8mjnQXk0xcXivdZ6GckNEd1NOiuMtk\n+77cEel9NgL3j+KWn5dJ/D3vVekTQrfJ50mQkgtWNDgQmEw9iDdruz9Xotwr\nsnh5TvnmAVAqCvGx9s00ZBf9kgth6wW8CwmcWotyWQxoi194aN3l6ZaxtuGs\nHWPt\r\n=TXS9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGtcKGjmvYYvzF2sZZCm/hwUVBQ/o1w1yQ3nn08CvcoWAiEArYV2oELif0k7rGYKhAgRGYy4ESVK1eRzcyxKpDbl19I="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.11_1584950062297_0.3817286727064111"},"_hasShrinkwrap":false},"0.0.12":{"name":"vue-element-customize","version":"0.0.12","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"8af5ef38c90bbd9d01b7e25a9efde1eca1c07500","_id":"vue-element-customize@0.0.12","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-Dw3dl/R5FxSjmjWb+pSBdMtFVK9HulG9G/j8l9KGTTh+IgAP/NYyLegWHz5Jvzm0e9L8tw1OsEajJTc/CfkzTA==","shasum":"34265837fa147120460a719ff0ae6f709a4d8c2d","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.12.tgz","fileCount":12,"unpackedSize":51575,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeeG/9CRA9TVsSAnZWagAAyFkP/3WDJbvct06S+8LBFOX2\nR8T1s/Dg8AVas+b3DQbW8WZdmyBJuWJep0Hqp+yjjJe2aNCJN+yrr1reorZq\nZZoYI/oRCtKNHhXy6o3oeZHnbGLNR8SCANTrZ9QE2s6g0do/xCUTBFDj4Z10\nLHsQoqitC1Cr1W9j6eeO1jBFTpjQN8Edk7pWTQaGC3OPF1Eaoost13IM44aR\njXIcTyTRgo9spBRuazAALdYMhlc+9JvsTPoSbbyeLf5EtoMOqKocE20L/cZB\n6Ki4QkRigny28plG6o2OZiW3mK/0MBDS3qywhtHJ/ieSLUyAR9SfzsAAvCQd\nMzavKnjQPH8dk29fB/feLxLyJpXmXIoDl9NWppvPbWlUssl3HwmYV4S9N5sW\nfoL++KaovrsnDWDOlfwLgPRMabXD7Q0eqwxC4xq1+OSr/mHznlxHH8SsqyQx\niOdHgIF0uV3Lx22lAFaPBnfuw+lv31o6mgH6V+aDQW83xNEFDj+gvd769MJg\n9tegdcYD9YISEebnXHlu3wd81AP6I+wFcueTOu6PPMkfvYunQWCy1D/hWgEb\nJeJHoruvZKFTzZV6buK0noQovAFm9M7XWnaR5oeUfjlSOST9PeCojqYjNtmC\nuSemvWlP8OYitTJNNUjAD/efalWpLhPoqZLH7AALl+31EYzDwTN9kcTuB7wk\nC1iX\r\n=0FEM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+DOnshaBMDbOyFg1WNcOWk4vAFElJ9LP6f/d/rcg29AIgHCUDotQfsAuyF67n2DCfxtGuTpbMtxCw4X+bWl0ILSo="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.12_1584951292620_0.06852556169199131"},"_hasShrinkwrap":false},"0.0.13":{"name":"vue-element-customize","version":"0.0.13","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"4a40ebb713e3194d2dc0fcf21d9449e1caa4aa37","_id":"vue-element-customize@0.0.13","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-3H6jhx1cgzN441TyCTWCOlHMkhubhgEh3nfajIXHg2vIx6KEfZORYrPzaRHqgidv2EXVL2vAuZKmZti7cX06Cw==","shasum":"bab2857c84297f7b9bdbdc1b7c2f7832d840062f","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.13.tgz","fileCount":12,"unpackedSize":53628,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefiMCCRA9TVsSAnZWagAAU3wQAJWlPVVy9En8u3yIgp50\n1qT6Pimu4z5Kk9nfF4g+dQ4tciuQcsDsM6juNVFEtwzbMdzbiCUzwV4cxryY\nJHhvPvvg/s9LJVsQSM8Y5r5la6BJlniSL18nMDsjaMcvnYEbYwYmPgVGj8Pu\n1RZna54iqUIASf5ZSfkjP1pHd20t/MlFoPmfZGCrGO5q/PxV8rJpDiGXi4gr\nOZZ6zdCjK+vM3r/rXD5/OiOFQ9WdLIOgP37Bp0SZa5P0FGhKVZxbmTsXI7sw\nqpcUK5gc+DlwynIR3yZIgayIQctrGr9+nvPvJSYG6IIk7QoKnXLb8Q76kpot\nJ0g/CT/FBiGDOIqusj0MSrkzUPaVNHnEF9i2EXIQxDya2YVfTvp0nQYfrufW\nQOrQ8EKmaKFzbxhurYPw/yIo8kEeGuT0l7hQ18jMzhNZsSoF40AqE/xIlozQ\nhJ11eIqvTqu6x5XD1IDJEJVj6IiXCYMF7xK73Dv79PaW9ShLdq0ZxXQTvf+j\nJwmwpSaMzGJqwNK45r/+dOGHHhKP1TdVWWC8sEOEgRYJ5fyOAsqWtePtieBW\nvQA7+KOTpNcWzDDeHP9X0yvAxzfFSiiIlMDhGhE21qGdKFcCyBabmqVDauuf\nfB1wRojUb/4RNZhf0vru5O4dwpYHFOr0HQtg4OFNmAZ046NexsVqhRg2+r0O\nnpku\r\n=kpQf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF7F7KOEm5T348DOp4fkvE51jkm2OvzGVewcE9bNTwu2AiBqmafEceT6TRFDiOSHH96PeHnUcFW8XqevZsPUATAtYQ=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.13_1585324801944_0.43784601547863033"},"_hasShrinkwrap":false},"0.0.14":{"name":"vue-element-customize","version":"0.0.14","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"77e603324de474d64f72e22b8adea614dff1237c","_id":"vue-element-customize@0.0.14","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Vua0ajwL284CTGgCvdkoW9x3fW2MbazT9I0Bl4eD4C6hIOmLV7lnhaoRYTWIueM9DYBMMioPTNWxa+CZipd1JA==","shasum":"78e01d3c1a6bc528d262737aae74e715f547f0de","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.14.tgz","fileCount":12,"unpackedSize":51458,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegVMVCRA9TVsSAnZWagAAfoMP/Rebuy5RPBHKk3EbAPTH\nceX481e2lyT6XQaaCkZeHTdSNe6/ROpX2T/Vm3HG8IDeWSJIPCmLlx5OrZl1\noRcgrMcERDAWb/CyoPs9L3uDvP2gCeV1OqsjkMCw1zgxLHYLKPoCRG7Jxuxf\nLqODW9kOYkEtAtTxH6rdWAnacRVpT518jzV8P1qKSobMXP9Gmp1K/K+xuAPC\nrUKUi0H8CXH07jBCflaV8poVn5jNjXwLw1wjnRbY+rolAN+xPsi1ytltvxE9\nMlhFfgv9brBOsJtqgWbpZvzTvmZttJkCUyE+S44TniICUEgFZgud8YsBdWU1\n97GrLDaOoHX6jCD2GX8wpvpXGP9/eYSACdbi69iGVAMDcsBTQPaRh7SaK4Yh\nHjE7zP6dfX1tC6nEqwm0ibcuqSbPbUkFKBhK1RzUL4gd6ipJ/5QElgYUFxJM\nQsbDYZsLaH1El7iMzJ2g3e9WTyyuf0hD8SGl21Yjcfc1oL/sHvjFRnCWcQIP\nUScmd8beiY9Z209m+yndywssN6Qp1+oiBWiGVSsa0Z4BzeYiw/Ik5XnHGd1u\nOdlzpUvMGdVqI5cLRpbqJtahRBK1YgEoKaLaGDIZ9Vm6sLg9WeLvW1LovUHg\nbjqH0VQx/elSOGcmlEyawq7sYgthn/YrdGRV4QgMeuvhp4bZBWsZV7SVlReS\n/H+6\r\n=FPNl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDauDyewknw45803F0hX/cLJf2F2QsVJcfqqVpA46IcGwIhAN3MoalGuRWAbNVW4uQ+i7XKEMkGgz4ljsQyBV6uiltG"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.14_1585533716613_0.050742191876413045"},"_hasShrinkwrap":false},"0.0.15":{"name":"vue-element-customize","version":"0.0.15","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-init-template.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"82fec0774fd099d568db6cd2040bd3de86fc30b2","_id":"vue-element-customize@0.0.15","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-xIEqLF1bVFCqXUPrn0wxMqcDFbUDmCVI/x+o3t5tXLX3kuyR42j/8FDy5nE/uqv5o0tSMdsF5HoDAMp7F68dPw==","shasum":"9666179b6fdd7ce33c2870b3b98f9418d832564c","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.15.tgz","fileCount":12,"unpackedSize":46782,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehFiiCRA9TVsSAnZWagAAhi8P/0UT9VNmAz+Qtv74orsA\nnkDni1OZLGISQyr4BBe7IQlzJzW4PUVJARkDvkenD2nP8o7hXH+NIZrEneOo\nau9Q6bX6/NUsQAm8MRZJ6tN8xrHx2jFbby1MGEui/35acjznbJnh7dDXJlX5\nw77yyamZDyZ1fdF+HZznTLfNHRZCJeIpA76IL6/A76aZKXPFWi9gCrYNKud+\nyIMuzagAHGuDe96hJfDVodpNQp6GuJVqeKUCjRMXBEX9RIkUEWYCIGXmSM4y\nTPUDVTr9UxsY+3qWmO/eVviS39JVCGJVEcxMMGuBeoRZnIIjtuVXmfRHqIvC\nn43dVMjXNwGVVSII0jMXqKfvQNzmaosWpZxZ8DKPxZvUxxinU9pa23WEqcYD\nlddShkdKNroivyw9EWqHAsjyPpV+fHN8SNi6W2ZMu6c96h1+IAb62pVaQzLI\nYMS6VtQs+3iK/Y7wMzvV7AQtkhiINHsrp0z/9aEZY8Di3BgqVofV2AzkJ3rc\nF5AVr8MPcos4wZZ46AekWG0PhdckpACYZ37msPLQ5c5MqD28woXLSNPQ+X0U\nhIzfDVROiC1X5C+MBOBLxFIU22bKddE2pScxKaOehpt3t7BNIhIToopXlFOn\nlWbV2yRmeWU8m/dXi15llwIiIW8yJ1hFPpqS72cb/hRhbn1/3VXwn7EAy8xL\nn3hM\r\n=pAEd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClADQcDp5QVcI87kkszeanGjiZBT21rVM77stfrNeQ7AIgJQtuVq2Jcyn47DOV+oE+/MFv79SFBJjRL3jcnVT3Q6E="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.15_1585731745776_0.9964570408308207"},"_hasShrinkwrap":false},"0.0.16":{"name":"vue-element-customize","version":"0.0.16","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"f750ee84f577457695d8f0da892adfcbc993c47b","_id":"vue-element-customize@0.0.16","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-t6afnfyM95IkbZQPRom73zhqrjdFeG+J2O9IQnxQZStiXiVJA0Ce3VoxyfZUhjhdS4TD0vCrcGDOepBhRYk7jQ==","shasum":"9527a8738a4479b2691957fdc08860849419b9c3","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.16.tgz","fileCount":16,"unpackedSize":69225,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejft7CRA9TVsSAnZWagAABRcQAIxOOwq8ekAQLpqkoebl\ngg5sbPXujqV9h0X1OeO3GSfNF7GeyQ8vJ7TaxzcQZT/6R/srWwrAeq3q9Gas\njSjCxUi+ibPeha34a88UFwSUSQGviPwI/6/6ltcw+vgDcy3r/wxVaga3d/Ua\nokTtSz9KdGJh8Z9JRuDE3rOOoeE5dcClBsGooXYaJZVZz1FdfVGGnWSdd850\n10LmUmj+SNf3bswxS5wYXZ/sLF5amfYuUAp7DgqidcSPOKyP0UUmXjuekV8s\nTcqjUhdSBPSwwdz2ijU3gBD+IzvbsuHBEWcf/yTPuN9RxoWFE+k+ZjBxfMgz\n5ajuVgl+LYGXt7DiwMgFPqxTmKIkU2VCXAtfpa5TJQCEaBZW5MXxMrboukEo\nYuPtuog7ceOrZ1878QD4cGCwJOprwmX50RhieVCu+6lzDie1aREhW51UMSc4\nXd2KhNKJytkKOcyDG/CO+RN+a0yI70kjJnjA+rW9scPQgRvhKizqtDIvga30\nVgwIV1PkW1n7KRWs2TK3MZQfLyv0NFTWj8KYbyrc4fYsnddEpW9LOR+I+dFJ\nl+ixOoEu2HZ3IjD+YSSc9TxTJA4DHlf3upclnDiv+ju/jjEw5CwUTbEMLAJP\nkikIOYdU55fLP1aJJKb31xL9iIPpFDO7yyTahxmcJghrTZaS0PcycKYCtW7Q\nTddM\r\n=LG9J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDH6wLNHShYWACgpfklHzY5LZiuKCDuELlzZZTna2xs6QIhAKT6oG8vsnt2jXBRUhqIclm897yU3Y/QNL03zOuLryWt"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.16_1586363258454_0.6173291446632401"},"_hasShrinkwrap":false},"0.0.17":{"name":"vue-element-customize","version":"0.0.17","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"ee767bd66cbbdbd4a2cef9557b0c0bea2d4543c5","_id":"vue-element-customize@0.0.17","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-R4ldm2RWdRQgICtJEQ1yw6HyZVnStG6RoKQHwf9VkwAd4CZmxStkhSJlveCLVUzM2UzAie2nEyje0ew2ni5tTw==","shasum":"79f5270dbdddef79dc2917198048d4bb5ab319e5","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.17.tgz","fileCount":16,"unpackedSize":68885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejvMiCRA9TVsSAnZWagAA4nMP/if4mohZzEO/jDy5t21W\n7B0Eg2mQ0e7wIcHTW8/QQ1+V4NuH52ZnDas9/rdZ2DifxKNTMXnyBBPOnyxk\n/QfDW1qOBV79Ib18N/E17OjHXOvpWQTBDA+9KTBof6MLVCIZ9iYI+WdW3IgT\nfVasLggOxv7gZ2KKUGUtqxmCn1AXF22ot54JiDPylAQ2M52OFPxJdRqT0Dbr\nVnPGyW+NsHBjBSxx5jgGkoLrmhkh/hV1nbzRTjX9r17e2t5PmiMnk0xS18fG\nd3Nr6l0iyZq3Giy9bGd4vZk/2nqrc6FtZxelamdpx78qAYy3v6GWgIaXeFpz\nWkqJc8pEJ1Nbk0ISLKSHjd1R6Lghxxnq1LnzoJ0Ni9B7DhRC/ZGJZca3Gn/g\nDJ+uXsPJONnlhwo8e4cNL00jta1IRsOnbtSMMTkwqKil+tFh0eWV9SHIcbEc\nNl+7UvkJiNtbqpmbcJ0DskUPjrW7k7UJtQLj+UTtis8yAeYSU/7CpgJJw3U/\npoQ8S10mPwHdau6yy8DdRdjJDQP+d5Obx7G34i6Q9HrVlIpguk1Ama1BB44h\nqncL7m1YXuEaQ9MUDTY5lYUK7LskVtnLC/WNg/l+z6y0yDi40dgMyAqorb4+\n+xO9Tr/MWJlYEtGkHv/NDf/LlVTfd1PADREONxnJNbXTb7VygMpH+fqnO8ti\nPIIQ\r\n=1cII\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLLQrVuwgqQPIeUy1JkRVcwK/ggX0FQ0f1svr0QNw2nwIgNC9pSoskyIlvTrMWtsOMD58SpF6NKZXolu7vHjfFcSU="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.17_1586426657949_0.8866371784508891"},"_hasShrinkwrap":false},"0.0.18":{"name":"vue-element-customize","version":"0.0.18","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"fed8590f664b938da2addcf1163678bff55b4e57","_id":"vue-element-customize@0.0.18","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-s4Q/T56tmtFNsPlk5IB6Yw1IRapTQWimzWmGu9NYfYU5prasEQQELyl/aG9CVIjVONnT28lkhdhdJflRTYe15g==","shasum":"a3426d6d4f5b4d84360ecb3240dcf86e432d0f14","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.18.tgz","fileCount":16,"unpackedSize":75154,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejzF1CRA9TVsSAnZWagAAY+QP/jK2Tb8OdCkEzzalewki\nYHuyd3oi2Ooq1Uk6qetmS7ql2X79o/jVmclIk+T5aSeFnl12r9NPyf4Yi1a/\ns6sP6R2rcH0PDDRdoh392JTvGGTRnNXlCkto/al1IYDxV+DSm5jRQoTkl4Sz\nzU5hqEN08MRFLsDXx+zmeHqDNRmO0YfwvAz+H/Uzw23FvsS+EFbRtNxf1UFE\nKlXQGBtv2ZNQ74QkqfiTfzRxgIelqlZ/j2SFMPAJULs5U6f1o9ZlrrvFfc/K\nzrK/GJEuRQyKlCypC2lZqWbWT83qsl9F/9cRN41JV8dF6N0IZ09DZlvZWH1E\nV26uPWZsMwAXKwdfi5EDnE9T0UleCB9tBorMpXSGsgX0BF/xfxO1N1rYOQjT\nck2cBHyvXIad3J0wHj1GaLIePPxOwMhZyQ2BtKPYmpNImd2mjJD3POxBWsry\nOKo9lMCZuz2jIp7qY60yrZ2kLax4YYnJJSS8J0CRz37qFR5QJXeLiSNlKByq\nIOWQpWxfenAV4P0KIBR4YeClZF/yHs+JLJY42lVRGN5xBlyoy9BzjCu1Zg3L\npsA2RmJmdigLgHeCxcs8fUBuN2BCX5ysDAjFCTwgPSvIzKY9KNTzraV3WYog\n7F2cfVkYmfyszmCF4Wqh+S39QYbkInw4Ni5QbhQ7qq45uDvBO5fVN2IMx1n8\njg2x\r\n=SCfv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDp4c6Io8JmgGmPxGys9Zi/xXEY5ah9ea93nLXG9gxdDwIgckZGJZOPh8aC+J18FwMtCbBl2gIXTsI2gyUkgIQTmgg="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.18_1586442612690_0.45428885918917694"},"_hasShrinkwrap":false},"0.0.19":{"name":"vue-element-customize","version":"0.0.19","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"0cec3056245e528e8356b8864de4edec78674367","_id":"vue-element-customize@0.0.19","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-bGretZHJuYtH/ZHlWPAs/lNmJHWAYw6moRgsd/juI9TJ8n0MBRR7mAOHGHTf57+Vp0tJrLzedKGM1+VWN7hCwQ==","shasum":"37c7f2c09d9d9b1f0ea0f782710be99c498a4eef","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.19.tgz","fileCount":16,"unpackedSize":72574,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekEcPCRA9TVsSAnZWagAAZGQP/R6GKC0SZqrpEMIX1jfp\nlcpgCZ4Fmy8cmCrX7xgQoSOP2o19JoFCRlgRAvyy+Rn55YpgZHr2Gev28IAn\nnGyxYS/0sF40ELlR7aQA4p1TWMbD7BsJqChKC0CwqF8R/R5AyHgiFOZmP9Gd\nbrgGNanO0AyKzPsrh9o6j0jU9C0PUfpEqSOhfew9lXkWO6sXScxLNtGs9txb\nHXMILrnwlbQN5cL8P0iq/2MHL5VHY2eD/q5eKVbeudFhsxoZWpOHaR+8y6bf\nPDPtTKDSeq5D8rQk6gJt3RKVOf+kCZDAQs4v0NGHjSwf4myIJ7Zv3lRw6JkP\nNKXbyXc3h+qSFX5PpmRj3IaE12hLtjGtZ0a6tbn2+shOldEYjUBQY6OHz5lQ\nQz4CBGqN1dQxyog8LE98jC0Wf8ZSy9PIh7IjaTnopMV+eI9jR0VgDYjpiCn4\nhp9JhmaRMrnzMwsAotSKv+pCxVyQ3aZBKTzoLmNbCWSeOcnL9W29Txg/INti\nENBXkRq2by1qjx7n2MnU+mCub6u5p3hXzsvRufeqL/5BKhOl6b2lkTwa2zHa\nG/fI8GOG14JokfEtfvFo3HoMZm0/p/tBtozM9y9TqcHqImS/SXefx4APL0hJ\nU55hMAm4Mf5nzqYZMhyH4kCgrSJ+oGZcm3wjmkqxKe6OV46poXnFJg/ej8lt\nOHNJ\r\n=vyFZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDvXmGqZc1SQtQyyCUtwbLTY3iSyXvR3FdbNM6z/UoCKAiBwMZljS+mFvGcOLqcB6vbOzAqYWuull5j62tr/zvL2cg=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.19_1586513678935_0.6762332414720189"},"_hasShrinkwrap":false},"0.0.20":{"name":"vue-element-customize","version":"0.0.20","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"1aab71555110521407254b2ea45fa1517ae9faf6","_id":"vue-element-customize@0.0.20","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-Vr64wGQ22RthSw8QF9JXilm/yatHY00HRaz5hUfXR6WQBEixR9XSQ0pKCZ+GdhQ+bNO6VjsRfYmeObSPOPI/gw==","shasum":"3f8011adc4e631180e004f8fcfd8fb3f303eaf0b","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.20.tgz","fileCount":18,"unpackedSize":92163,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJekuXYCRA9TVsSAnZWagAAxegQAJnZX4L2C3v0wfc9ggzm\n6H8l6rKABoVIjQAvnn5tBN/CgxCgzJ+X82+l+7iLWjDU9TV/uSp9nMiYhjvU\nOHaVTnBGx9/hVg59lnfnCjcF2LYxA5oEpKlStq9gzwMxu3wFOijWLzqCUlGZ\nXi2+qq//iUbwAORK8ovsLWEbPpyMtykNwYtZ/97R1SmMbunkDv9watZALFyP\nD62ZdaNRWKPyQ2wKgtYkI5v2+Rd1tz68hiAUps29NT8eANkH57FpmFO4vj9a\n1tCe1dXQx6GnZ0f8M6vvXW7LQm4391afTdKvjNN7rN2375bN5cSuu8G1d89O\n3tPFwGwY44EsXGSUVRwE7jQvBp6gVim8aC0OwOIWVZ+Tj/UFNiPwrSOpEkTP\nlUKyWXcmWCc6e2XoNHacpoJ0bRxEJNbDDqq/nP5LHKiX/OK+T2BJtH7tSd5M\nLENgbC6olJWXUckmSnwqi6PVkqgOUqJNdZppa/u/gvL8n3LyuemHjTDPOggl\na/zGrRQhpzFEnPkCpGdDiHwJSILuh0ohzXfcthuq2DhgeFR7lmQrVovPFHMj\n45rMeEuPmbF92IzvZBF59cRITFwBLURaydqKvdClrlAStZPigchCFTXYyjVd\n167TfujRlCcn6la3bc7wjVvmf945brbDpk4etEqM23Njg/beeUWpMZ7ON/aD\nnf4Q\r\n=JYEf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGbo61w5yf3Eoo2m4zVmLPNOTRvoozjjahssJbOZyyzHAiBw8hHoTmIpR9NZvgWmPAkTDhtk8Kf5Nva16futNZNprQ=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.20_1586685400105_0.38830102319554105"},"_hasShrinkwrap":false},"0.0.21":{"name":"vue-element-customize","version":"0.0.21","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"e278f2ccb95f20d5cd734cbccb9bc4d5f45dd757","_id":"vue-element-customize@0.0.21","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-5wQ3nev5q7HONas+z8iZune1tFED/Pck49Qb59bnurN1siPOQwroHd4sLumPtskzAsZ1XQEYibGHBu74BBRFGg==","shasum":"3c5e9a29925851e5d6353153ee5c9483940eacc2","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.21.tgz","fileCount":18,"unpackedSize":89192,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelYxdCRA9TVsSAnZWagAAWSYP/iial8o5gJkbPIhLkTCI\nwhkwlGaDAyW+XAlU379O1/A+ybYGI3/i2/YxdCtJIWMHKZtGnXnWKugDW3rk\nWxAqlSmmBmGUG/5UtUqQc7vJUy5CQEA76Vk0GLzajdgV4g577rSFerkDzKvO\nHTPg+Jq+l21nEQtN2c5Ro2kWNx0/4fXIy9suMHRu55dcGMk/X8s0UiPr0RmM\nWO4LwwM3rcQIzZjXjToxgE2T4I9Xnjv0ev+DtR2d2OEb5JCmMlCSyYB32Ln1\n/lZC5NUbgjaFac9b5FTbPMyUMLnbgvD7tOSRACBjx8vfeiOhU+5KpcZ0gYut\nrX2ZscgnMZ2GQhxg87n0afKw42ik2fUDP6+YymZ46KoOY5m9F9VJULM2jnhz\nCpe9gz9vdF269MbVYMbRnt+kZ0C+L1Q5hQpEtegZrqykXWdwsPFJIEj/izeY\naGmvjeiMUMtiwlEphKJA7Fp17RhLZUq4WFAUNSncKiNTcXs/ZCYTmNjHLzxy\nnz6+LHC/DAkHinRcOF6nwt5IXubpVnHAt/UHrXCfj26qeCnwhB5W81mMtWzq\nxPrUaEhXnN0kgkS3/wKsWA8/dW8gp57uKmd6lbsY4Fp9m1r/7/qF3dy/cC33\nRpb6uywmEqbtYWS2RrwHqLkDVmXVpWFsMqddIG0yB40ET6s+hbCfMLERhBDJ\nuo+1\r\n=Cfpn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBrAqMeg99bjgmuVfqOjSWGmrgSrw/dClkotUpoTTlh5AiEA+fhzM1mHuUUavOT1/YUlGvh/S/ItZuFPABjheA9bmOc="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.21_1586859100736_0.15929520765492033"},"_hasShrinkwrap":false},"0.0.22":{"name":"vue-element-customize","version":"0.0.22","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"97bf38374f2f0ba5b85bede6f2528db140537304","_id":"vue-element-customize@0.0.22","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-rdPDVwTdEQZehxCwZ0qstMStW/+qAyH7JuRawMqTTsjLHN1EFzTFnn/MRZwRxYqSEW34i1HGietD6jn1u55vMQ==","shasum":"e0272a9d242ba1269666f89e792b4eb1dd5bc235","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.22.tgz","fileCount":19,"unpackedSize":95104,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelmDnCRA9TVsSAnZWagAAGCQP/Apxre0tyGwvOP7JeZgi\nO80AfZu4SnhBGbNGGq9BSTN9A3aV85v0GAkSbfZ5dCq0bEjm50+ew4MMV+CT\n/jlfze31gCMDevM29nm1O82MGuUS6mrn+L3mdh88VLZPEBskOb6s//T0TG3V\nf2djFZ38ZZwgUEMrkzOMKLVSPTrRmpjIgTpOGDVF0tjrMKh4zeJqly5dPFV6\njIl2Q1B1fz6CDXXdkbJqW/Auc7KVmQZBuJaA9qgWQkPva6zHuEggQORM58sz\n0Z6YpYqAiSzZCbOgtmf65kQhPYNvk9Zo7SzN+WOP55aKuCW08xlUhJDoA1bd\nYwTPIlt9xSAqs4hcFecpGwopvElXJveExl6ttpGqe9VTUb8/n5i/sDGsJVX5\n3dMmISw8YQ9ncWfZiiHhH/9zNCn/FxV+sPH8o9V80zpiyqyvH9QhG5x6Y7fM\nOBdLn99wf+9cSrlSA+zHFRbyWe0+p0m9SF8ybMSZLB+nw6vhyRLPOo/oRVD0\nSKFx0/8jNwbd5fDyJK2ou3HT/95csoXyFxe9Ig7RVRDa2wXJByLPr6U6rssc\njFxmL4sjj1RWwvdkAHtoQg5XI/iV2LeOgALLtsNq3ygAJG9TTTEiSLMOlznU\nqjD+kHwBlBASHrqRPR14UtFlQjiphCT8Ydp7tfJMXFYqhI9KEG7fQfohRo+X\n/IvA\r\n=k1Lc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCMjt4uNdK+0ecpabk4+77MaKQfhkMYr/to/7dS/Ra5AIgFUUKkBNcIT1pdl/qPyqNPeKKL30VnoIGfx8tv2q45w0="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.22_1586913510614_0.26560876979449355"},"_hasShrinkwrap":false},"0.0.23":{"name":"vue-element-customize","version":"0.0.23","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"7b293889c34be41d7cd0fcca9d2f3775280cdaac","_id":"vue-element-customize@0.0.23","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-uUHv53o51Kifjk5eDVvQy7gPq9EH3mdczIFGYVsR8X9a+0a1WP9PIqIlzq+fnjpbtzQPopWnA6SOlOAWIINHvw==","shasum":"9b0afe1e874e5d9228546a3219cdde635727b9db","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.23.tgz","fileCount":19,"unpackedSize":97421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeltz5CRA9TVsSAnZWagAAiAcP/3R7HAEY2c4rsQgXmDe+\nfrXBIQqfF/KWp9c0tcG/qCYsfoXfiWGSMbe9CzM9J174Z9nbcRTvEC3JOA84\nbCHhIarrdSgIDCKb67hFc+RqFBPY3rC7UJWrbsQD85GQDtIYDfOZip5/jv4C\nMRwB/DHljEAiSE5YcL8GgpIOPlM8EzRJDkRQ2TBpEfYc+kc3K/l0wPD+xY3l\nuhvn99GOGIIDsl2CiBaMBd+bmJk4E5UmEFR4IwJK+JuU07x9Pomo+SwKGGPN\n6H6CXkUk5/6YGARyqjlWjV+9TEgkjzUJUNKGrySTDqAJez42s0iqHws8+iHe\nx03iGoyqF8h+oJlcMAeAtuFGrbF1snrzMKmGaVAJz4lcagDtmVuXvecMmqJr\nfxDdNJaDdGSA7nqRnfNPwBmWPdQy7tnsh113cx3XFofRnsoqUyAzK+ksu+vE\nnC7sv8v/5xLzEfcY44RlQ4Ir/bospt3CcGZFdkp2Aw144UyF/iGfmz9rglOi\nOPN+tF+/kK7LHENmGA0KyD41qFA3Byrg/6IjC8XrNi3xk3Bz7UuwijmYbdti\njQQJtLw8m9pfZtBV8MyyoZZl4ZOyc/Vx5NQg+bYjSQ/kvAqd0RyJc6dItHJ9\nj49tC0TUPQmNoQfvu2kGPQ0ITS+P86IriM6y3vSvgA3Ls1y+3TJIqJjnYI4J\n56wx\r\n=UZlw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAVv8r42zwVml7Pa1Ee6LWAqlscQFGHkIAkaCNaulgjuAiEApZo6gR8Gnz5V3bumMsTs1CW5BkmHla+KOBq5L++H6to="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.23_1586945272461_0.4530377830356438"},"_hasShrinkwrap":false},"0.0.24":{"name":"vue-element-customize","version":"0.0.24","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"f6e974b7e27c47e522c1612c3b9dc3f31391bc19","_id":"vue-element-customize@0.0.24","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-m7rw2QDZgv25/7WpB8yfKPUzXx8KZrYBxbJR00QxCjw05pdH94Ym6oxAkuVBIncdaHuZrcFgmO3lDqpo00QdKA==","shasum":"7e3a2cedaee7bb5e78bdfcea1b75053f76d780e7","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.24.tgz","fileCount":19,"unpackedSize":101328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJelzKPCRA9TVsSAnZWagAAHmwP/AmFC4cHbUzTcfIqcTU+\nY1gl+P1+ql/uM8cmgON/ebqgZoAV2lq08zSVY7rha/7iw+yN2GF60ZE7VGv+\nMW4xWwu3hqbYK1sRGB0zn3Hzoqok9y4DcGHpRYyWUD8z18tj8H/7eAag6CFv\n6X8JiMOKcC/b8189OF5hqLUhKeOWlUn8O551saJNIOHE+EebnCJOV+7yxPFd\nrMKxHAG2jbwAZh5SGPrZtGklKt0VmbC64PIgT2Ivw0XFipgl1WZ/BNIKFeqV\nn+BMd5U+ZdLmhmnMeQOsq9RcieAqDeImezsenrsM+q9PcK+7aohv0E90hENO\nsYOc4L0I1j8Xtvj2I4v4rcd3UOyDInnvGiYMA3tDOHePU1vHiUAwNyygrroz\nb1nie0TmRdimvkcCclLN91AM2/D0j5TFiwjAtCqOVgLc8663sDlKzarWMHmd\nig5C7w5otD3z3x5XCM293cXT34Ycj8e9cZRf1S07j/TcbY/ZlzlDy5XOKqxb\nvOfq9F/hZPuF+NdzMXz8kwQXN6aKsaFVMRJMa5t71sJ1jWkQ4CZZ7pHpd/hk\nblMY8Q/uaHPB99KH/WlwBUO5pLeEnfbwSX303sZzvTAn9NcrvoayY0X8jc7R\ngmqH/ApDdqHnasIAYfhHXhxAE7fa1ap6iCcaIKp+kcEHJ5GsS+O+dc9CGL17\nAM5E\r\n=H9qw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICO8lGLB497VL+Ga2/ZtQjh7C8H+v6E0qWx8oaRXT8HNAiEA5YOI1qVirvjjTf9Nq2O0ISZLG5UPirMqtzkzZRqiwkc="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.24_1586967182766_0.9952134252874945"},"_hasShrinkwrap":false},"0.0.25":{"name":"vue-element-customize","version":"0.0.25","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"a7794e9d5680eb708e5156a424cca1a2d4bd347a","_id":"vue-element-customize@0.0.25","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-NzOR0o5ORl2AVzvJxXZD5T+fiNIhwh2VDSdCgWwT8FhBqcvMLZ03BAHaon3/00NESy3DaXxzHwoc7HKWEF6VZg==","shasum":"42f3f8c008b916a32de65b3bde23cb4f5d86f4ec","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.25.tgz","fileCount":20,"unpackedSize":102374,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJemC33CRA9TVsSAnZWagAAv+AP/1l54RVeFrgHx8+oQ2w5\nDnm2Gq82c9x5bpmxnqQI0mu9ad71GnFEC9mciUsJRFyydkb4KlYliKFxi5W4\nw/PKhCfpTWA/Lw8FeGgpS/1+ik8/m/EYRop3xAtXLZFWphj2W7oKv6Jek3jn\n7BDpdEqkmYf+bsLwnZkZnRyVc8/ru1u4BLhjTyA33JzHaJm/nRSxyCPAvYbA\nVwm+ev+UXOlUEqJZ3xTOqSBcfeG197x3i0sVu3o4rVDrMbr873HkMW6GZDUP\nss9DAHfrfcqeNJE3he5cUhuAHfqVB83sMjnL3TLfPlKxSta4VimQSE+jSZF3\nQUQXUmIsFosSrsWbK9EQP26SVygtLtonrBmmrzZCMcmoW2QCMID+Y38pVQvS\nAzI0dWWxGtV+i/qkvXkxMwPyEcLu9EVRTOzUn0lCF8q8/V3PxJ1K/vV01jZy\nOYaPAu+uO9qT3pLpHnvJTo7iVT/prcgzIeh96vEip82ntH32C0HcUyW2L4dl\nIZiMSDkFEUkdK5cPeX0erVvw1Yk4FG5HxdX9NnIHUzlwxr9gV6hh9C4vRr88\ncd76a0QQkAdMiPLk6iXIwk4t48Q58UdylBq8vVFjuj3wTZ7w0rjAQsR1lYw1\n8LTKk2UkdoExLtnAZoXwt/5LJEApU3qsVa4OSxRjrsDNrtb62McgldYgAKaM\ngn7R\r\n=7V8K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFgheHngfhGkFo3BjnzV45nenVRSUugdsTpTNZT1Z5uCAiBkPn7TGtFy+jFROWtPG95Mid2Cbg+usuN32z6rCsz5jA=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.25_1587031541929_0.09743261784229906"},"_hasShrinkwrap":false},"0.0.26":{"name":"vue-element-customize","version":"0.0.26","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"b72128cf49b6579ec84f92d0a7be50281c96d5c0","_id":"vue-element-customize@0.0.26","_nodeVersion":"12.13.1","_npmVersion":"6.14.2","dist":{"integrity":"sha512-A7qFV7GUrUGQJ41VY1YQnrrNAf1GKxOeH/gLA+yqerHwUsbis4WiqEdFds3MPDilsm4Bq5GWCfogJRIBArermg==","shasum":"fe63d5e17c6d450aab6300723176be811f255851","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.26.tgz","fileCount":20,"unpackedSize":103014,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJemIlACRA9TVsSAnZWagAAr9kQAIM59ZehRqaFiY35rzZR\n87XYlwgkDDfk91958dkOxKhQHZVIOH1i50iMi2td87Jxi5SKmw2KPnxxKY5/\nFC3PSa2Dk11C9a/8Of7qoNSMEHmVs7sbFSgNhVMinDlNZQFy7wknnr2gStK1\nuXRCEc7CDM4s8ZXeX8pVcAXP3IN7BbFHFUiw11Rtkmy9twp4jgN0I5YRCQGs\nXbH7hCgEiIkcrwScxLmlCLzicMAdPxF1Yz2kEFTsrWemsogmCIqywBBEjp4A\nq8N2rsh8QUUsQP6/z4caaNClMmbjg/k9OP54s0vYxCLIlOghxeMgz0t0fExV\nW0n/PAFoGEj6rzJQMMCKyem3QD5XDK5vnfeF9pT76VjozMVrCq87w5e9Avvo\nCDpvGNb+0pPVAzQyRub4NfvNzI/NJXCSEXOhHlTgWYel/hLCDRX17/Y8tt9b\nDusmEyc2GKwAqNaQ3wE7PO2UROGJTOyD/S9X4cVq3VG4srEwE8HZuH6nsWbm\nfGxKdFmhNDi3/5gtC+W/IHBJIOoLcaWbxLyJf3Jdr4OjVcR6zMi1vQxK2H22\nWHHTNJT8bkz6a3Jai7OTHDqvxRfwY0gqtfEGg8hW2oG6iW4jvVZJy96+Egha\n+RLYEtpZNOy2kQcRHTb/23Rdbo9fbe4w6Ysclj7BF4jgIXvOD4xVYI9FXtt9\np0GV\r\n=6iIs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjrTzmXVxcdwHgY2v/Gtv/xdwrmbcXJPscfSRQ7muoMgIgMseb7nhV91KUWLDN7ABrR1vxh2VLmCcPwg1QPGuqnLc="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.26_1587054911607_0.2192942168877623"},"_hasShrinkwrap":false},"0.0.27":{"name":"vue-element-customize","version":"0.0.27","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"0011ef347ee0e382f2af2005f8ad7bedcde478f0","_id":"vue-element-customize@0.0.27","_nodeVersion":"12.13.1","_npmVersion":"6.14.2","dist":{"integrity":"sha512-LRp7baAN/lmMzjyKWrZMMqVl5q3knX3O2QHiJDmwcoCYBmnBzNG7gSRnhRmWGHqFsCRyI0WY4K7tgd4LpGUv1A==","shasum":"3da996848cffd5c64bdec7cee94f2f10cdd9edae","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.27.tgz","fileCount":20,"unpackedSize":104229,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJemtFdCRA9TVsSAnZWagAAT3oP/A8kVR8E5wNtiMAGkScY\nhPpUzmdvcFSbHuBKI0vH3PLlkHuAW4gQuSNM7XAQW7sMXbn8KegX/qbVex5W\nUgmaXq4yNFWgqMsSBUp8NZOH3zHikNCO3bZ3PWCzcblgvVAfqBXK0x4Uf50f\n/pY37xZPkIqAvPm5yLTRWkXM5YPU30CfJej3/XrK3Imkm5iYlJPr5eW3QzPN\nbhYgk/TqZevQqbONDBq2sdAprghh9G6Jvhbd667QQlb3JWL6m/rGLFGLqcQ8\nSClf5I4GDsPJVn+eHtOf6Amxb/GokZIVVraPkcJUDsURz+VrWogOjupWUTtw\nflKyDb0nA0xSKy9JIj6ZSvw9/VC2dJx7riCEU0lhmtnWiiGCAgEQWl/NotMF\nH9ZFk3GBwIG5NAFl0pilDEjhaoAPwjP0XxJYG5NKa3odv1AsL89GCN1ZAmvP\nlviyy30/g0W2HotVkGtnkaR8INMQ5y7hWLZugir+3LS1eGHo6g3VSiJ+jpSK\nfmSCtAvtkrz8Qa7SzRdO11PqYTjoQeT4W5e+24pIoYCDNGWKqtSjDtKlwT7w\nuHFkCe6nOq0GpRIFCdmckX4qIHFDIYyUVtW/tQFZ+j3yQoSa+cwyhby6GYRI\nYH9x0zX/v4cmPxFeFlP3IuW41Cyl24duXmFORv6KQnyvC9iMlEyBDetnIxlN\nlykZ\r\n=2BzO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+bpy//zIuB8/BAxEionovNhh+Nz9gR5P2cMINUKdjuwIgYQ3a5b98kKLZHOBOJS8EuDldSS3zhTzTAM+hFvSkcp8="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.27_1587204445074_0.3201236417314137"},"_hasShrinkwrap":false},"0.0.28":{"name":"vue-element-customize","version":"0.0.28","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"fe95b886ac4a8b6ed130fa0cd96211bd1a7ac211","_id":"vue-element-customize@0.0.28","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-qD9qffZv7dpoZr+tbAz8ADE8JwCa90aWlyWHEBQsNxWU4RKVbnD2YbZw7Qtma4jqQz62dHqaZl/CeHUvF6ATSA==","shasum":"9b12335d4cef7bf323e29ccfe1dce694e3ee021c","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.28.tgz","fileCount":20,"unpackedSize":107231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJen8kgCRA9TVsSAnZWagAArVYP/0JOAgOQu0EoTCDtXm+9\n/0+NLpoZBuLlwaYRi0Wkvh4r0rzzO0eMcw48+D68aeNrJE+goa7S5D93+iap\ntXg3xhc5CSvuTthURF7TiptWm7/62oJ1fAFx62xpMvmoXGydtPPw4mHCHbXY\nUZasEfKSanTAt459uw9/ZGLRYet7XT/Y7EgS9ADFx/p3A9IVKWvtbpVqN+L7\n1sJuHBeK7DHwUeQI1yXYYe/fT2DxPGbVQqs9oRUD2aSUBRsxaURM/Cj2i2eZ\n3HKBLsXnWw5PdBs/ZIctI1K6K3m4+mMI9AfMJvLXwLpRnVvVtYc0MydvNLSJ\nL6KOlqV9kS1klF34Q39eIKhkSfgqdyymZXUSWdhusgFbgcK/GqYtb16dJCcp\nM8c7n5F7enZgIO5fiQF+UObXj4CxOgjD9wnvA4IddJCSYl5adqysVC3Lrn2L\nWSSZtNu4frC1+qrBddGrWsr0fH/cB0UX9XNDi85hRdYipbRaBkrSRfFeWZtD\nu7TJt2PeiYPac2Ntk2IOUXBFPpRR1RklXd1LKZ8/K8AAws6/ylhwQ0vsAzZK\ntvzCT8Un3LyfneOCoiiOaliS9ZaP0z76d9jcxJB6leieQJhOvH0L8ftTWLxW\n4EpMaDXMEuXrasCwRJ2TG6vjVqdrSWeULnX+FzvbNJt4z6onCCNOr97jGAZr\nazCJ\r\n=9hoV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHS1BqW3VFVnCxpUA1Qq11+xG+4M4JHkNu3kwCiAPJGIAiAvR/lHzREqMIruSLMoo1zX3ppMhe0oKr6aEF0tmZqKcg=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.28_1587530016372_0.009589399450687264"},"_hasShrinkwrap":false},"0.0.29":{"name":"vue-element-customize","version":"0.0.29","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"d3dbba91d5f4766307591f9883b79645eac27901","_id":"vue-element-customize@0.0.29","_nodeVersion":"12.13.1","_npmVersion":"6.14.2","dist":{"integrity":"sha512-I8WKXw1q0nhsFsXdXSOxI5uRvXCWlyLeG8nxYMDkukz1EVbEB85rvnlW6dXqfZ2/FTtZ2kR9A4zG77DvXEwFcA==","shasum":"82d1bc0bf7f2057badba6304fbc3095513e28ecc","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.29.tgz","fileCount":20,"unpackedSize":108059,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoEqzCRA9TVsSAnZWagAAj1IQAJQ30p54eaq8Eiwvid9g\nrhm/qLm5Ppbkhjk0Uxu75ClAcR/06taG7IcgB4rj0hojIIp2TVSkyI3Zaj1e\n47uJf2PKp7puRFlXEoprfThWBQFTmJ+dtoMRMIZ9Pn+KLq/WGLiwPqUai+Yx\nCYGoMPeTnYqxwO6QUGPbnCWxu51JO33OCmox+Xa0L6JWf68vh1mCO5f0BVLW\nwGOJF15YfRO/72UeyB9I4Nq/cOLDmBjEQiznwjLtpAvu8aclFX7XoSNdDHGS\nQlnuwqUoYIPkBiM69z9V6idPI/TTN5je51C9BPy19Gnz/GF+FYQrJU8NoFKc\nraUHDI0S9TtxL6HfaujkK8SBfO5C0UN8IylrcGQYM9CWDJWWQDco225akpy1\nke9Lnb+ZjL+gxeHGi1XiY/0aYASMR4yLAVo5HERSPdYd+Eme2/yIy9jUYgsn\npw00MBezt+NlfBs4orj7Ow79gkRYO4bgmE3Vc/ggmKAOQ585TxmmvW6u569f\nnYJDoMevVtQd+ygmlgidhsJ0LdAcy4uwHQjKWUNez5MFpBOIw5DnioVdJIBP\nkxT2eW702K0Pk4l6QFVT1f3hda4Bcd9diYs3h98TgTa2wpNTX66LD/PiXg4r\n7a9q8VlwzUamsWIr5O74kNPEk67ZNydBFTJMjxJw54EB5Dm7F9zsg6ydcVMd\nWC4w\r\n=17N+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC8EqnLAP2HMydsZy3fsEBr0wz9wK84/kDG/WdGlHuhMAIhANTOua+RwH2sVFyGymxMdR1SZp+dAFWWwpmMTY41vs08"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.29_1587563186603_0.010259432899519139"},"_hasShrinkwrap":false},"0.0.30":{"name":"vue-element-customize","version":"0.0.30","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"80c94b4f46349f98b93bf80158ee89b938eb76c0","_id":"vue-element-customize@0.0.30","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-WM0FtsxVjn3O2I52fSPdkPi1Sv90n+97ZndAPIvPN9yZsRZrqt5yLTmzk62e5Lg1KVr7oYuZ8GFhWjEENaRo1w==","shasum":"92a8a12b63fac9df61216387eb058fb328bcf077","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.30.tgz","fileCount":20,"unpackedSize":107000,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoWDLCRA9TVsSAnZWagAAPfMQAJepU8EKRlbaiPyzMs9X\nRwo6V/Lz3yb67qiGtp5GvIraD9cyzH/fWDPf70Ozmz7E8DCkJV+l+8swnUZY\nSfdds4pSB3+l5cOLkQsrZzm8KFz+7K4AdydIf9laaU899dmbA0gTk2WfQNUW\nlyJJreq3ctB33UYv3jQF9Y3hrvAMPtockljM+F5JcBhepTuw56jthbLSYb5/\nd04wGZPNeI3q2tHAFFlHUdOz4zGD9g73svCyRgeEenpy8uLEv7JxuO8RQE0E\n2pMQQQqbhCMkMWJgZ+uYA15Vwo0fUycpKVWubmFijH4CB+Sn0lkYj0FxRBJx\nYPQvDOXOWWhxCDw3xmNZm3f7udh+S2FP0qyTsYseowoAitz3cmgr+A0dKD1i\nANHxSLwWFWDm6LZNE4Rxv0Qv7LMa/O5xTbnxDZGVTK9IAn/oiYYlBTo4JmzC\nuqH24jArAudrjDuOTimEpk3MJycwbQT0lPxBJhfDJ2UJhOh7+r3JzCKZti8O\nS9WDd9mkCWCgUnJQbsAfV97NtUX0k0U8rNv/nBMx0kppbQ8Z0CLatkT65Eyo\n7s8wXBkN3e7o7vAmMEseVlpOA645fBbCjYzZuqKS2eu26o+M+QDg56OJxZ9m\ncnefAU4EJtxzO2Qe0l/yE7pAaExFYKaRzCLTVycl8h4VRkdZKvgOOuv7rxGY\nSL5X\r\n=FlH4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDaPKhicsO3cewU0yDi2Usbp8wQvSNVMLojNuMEmTejTgIhAIiF8XF35jhmxyw2L7sbQbZXM2WizJ2QxW0RXQi++Yho"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.30_1587634378783_0.4349825423870204"},"_hasShrinkwrap":false},"0.0.31":{"name":"vue-element-customize","version":"0.0.31","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"164a6bc1119e15dfcf9ceeaed7fec436cf75a9a8","_id":"vue-element-customize@0.0.31","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-bZeYnrvdjnBdRtd/tZFnG45evr4rvrZbyLB4tk6wVLHRZjPGFiNb2tcYzp+/E92Dn6pzM3/QqitKMqZRGdXQNw==","shasum":"77122b8db70ef6794d10975284cff100882aad0b","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.31.tgz","fileCount":20,"unpackedSize":106741,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJep9T/CRA9TVsSAnZWagAAPM0P/AlpiAzja0rv6E+Mmqiu\nK1ji4jFzGzHwoPddW/mjqApcs5/5ixwGwtgmsO6IX+j2Hr3rBr1mrBsUG5Xc\nxBl201ivwoW8NqrYz79gnPwnmt6v2PmWeQaQXpixz99aj8p19UQ44I4VGOJq\nv97kqZPw5rTUaTkaoCfIsBSOb7yOsvyP43V0G+To4MAArxHceIJ8UTpGOTw5\nxmUsXvTIeyeR0Tsbl2pnvIV1B3JxagCNIGnxNeTcl8lEKCLWxE0U+PXIPbef\nGYlg/TkV2xy8eHyATcpWGdJ+MXJmDAtqKpD9MkTBex6+Chf5qoyBzMeIckVO\nuzVBSXY59GO3eszECSQyOs2NekVxFpePwqpg3+hSO6JzYzSguUrTxsa/+TJV\nthSCVIWSi2owbxI6dpnlRczaz53/khAIahkNVasn/5kWAzo3fjBNPwrP+hBw\nk42IUn6iMQG1ltlqIr+TzE36VbbPRZBY8s9Qk4ISZMNcPZn+RkwJW4gPCL8P\nKq5+Jwj3wmJvxNb49oN9tWY+JO+sGhEYBplZwGvn7BZ8ZHt7ufewH6XKaIXT\n3BR+MwPA5nxnlHgZ7rnWxFU3Kxkd1yp/rNa79jieq+oDHsmdVRRaR1fPtJqy\nbBFcA1Ree4c47+VYbIW6AzMhf5Zueb/KdHGP1Lig5lKgCUb0IL5PpUufxQ4n\nPiu9\r\n=QUZ6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFX8s/emhTFSsV5APq67dLkfIQ2zegEOMZFludVpnBPQAiEAv9RZYGDlQ+NaxRClJF66TbIFNz8ymExhw83tCmG67c4="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.31_1588057343214_0.05172542180387385"},"_hasShrinkwrap":false},"0.0.32":{"name":"vue-element-customize","version":"0.0.32","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"239d9e26a347f8dde6cb9d3c7c01bdb1f32d0565","_id":"vue-element-customize@0.0.32","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-sJqgW4r/K1dRo5FxQctrZZ88qQ0Ftye7/B7sQYeijUt07dwMSvYcw8HfeLPDhsp8j75L16umj/vV2cjZgD0Ldw==","shasum":"5f83b4b72e1148ed16d52c48cabeacd8bdf7ff14","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.32.tgz","fileCount":20,"unpackedSize":107012,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqAIyCRA9TVsSAnZWagAAM2QP/29d2BhlaGwyDN1WFVSN\nieiGJrTOGfHxkuLlgOTCct8zki41HwDKPhMnUDUxaQ2SLVfwv57NktEWKE4j\n/s+JceWXPIrEz7LX5lW2AKUIF4b+rCrWDdIZg/hIZLrmG/AZAtVwoSB4KdmR\n3N0QArbs8HSJvG9qLI96WgspFAA0qQ0iA712baV7BEwIKNpJoqdSLI5jFvH7\n2+Lx+OA4CAgKm2grKMDow1eYlMKAUPXqKOLlzRtR0vzOnjfl+vn/QnfZ8YOJ\nTpfgH2l+DCVLMPX82IUI4DoWoDRC4/452S+rcWzUzVg+VJuZc9THlkNyo3RC\nKBTFFIrtqW5hWyMZmCMUYn3pIwvS0aZLA4K8ojjD0E8q6Ra/adE7/HKBMAVj\nNYNth6Q25EoFi3TdaawWKuEQwFotjzi4KEGUhO5L16rVNIyIFvVFHgunUwoA\nVlsQniExu7SdODXM4kZY5nIj2ZnW1Lv5G8f2hqYl6gICpSCgQWeYPJdqI7c/\nXuFm7AcIaeAxWTdStJoCP2lRf9UlJpIoZ/8FuDXb7bpkqFT0sB6jnLgn4Ztq\nDtQGPL/vHaWZiBc3AjV7ICbtPvCSo/tMvTPsT+STrnK+d1vAHdGaOfA2y+Kr\najEjM0U79oQxfoN3r350j+InE3osJs1e9lKHr1jNA3xB85ZAjsjO8Ul9aQ17\ntNw1\r\n=KDoj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICYy3YMGVlZ/Rqc9z/2WSunaZL1lXsK22ctRezO475VoAiEAseb9LK6ZQU/EkxmzJ/OGunR0zjZMt2fWfvrH3X1nIHk="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.32_1588068914283_0.8119972855646298"},"_hasShrinkwrap":false},"0.0.33":{"name":"vue-element-customize","version":"0.0.33","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"gitHead":"f2570c9c9f7266893cba6f62248f36a1fe7f369c","_id":"vue-element-customize@0.0.33","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-O13vm2/3E2jWPA7IjYljWfHIogCtYhmRaynCPMO1fSZeLVLZR+45YH5evNExZMB7Es8a1CoLlH6w+Iy7baQUHw==","shasum":"88b5059f0eafc5dcd3fedd654bf58f354f8563a0","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.33.tgz","fileCount":20,"unpackedSize":107160,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeqjcZCRA9TVsSAnZWagAAo8YP/2U2n+CXjSuZOd2bCyCC\nvhKfw6n6A7EzeeNfJ96tGpZpksTdpz1UC0foZPOs1O4LwMZ6y9e6W7tsIc2z\nfsqGYHzBLNbIpYa8kKiOsjRCNjWh0Uyy/p53/sSsU1Uvz1+KXngL5+Q6nHnq\nx9GEtSbuEuhmibPs6ruW/keSdlMGZCHLUMbufceCqDRGPMls4fkN35qYDX5x\n7juLTGsKsBMojtw3Ck/Dt3YE+wCELY8W8gEF4grkp1gfj065PVRzw1W6V1Cb\nYwHmuq7ackWQRwrSznU0BS16EF006nQDJvU15rr7pzA30zJmICH3Z5j46HHO\n/Ns/0gcl+n670bVCUYYJHVmpQKw5djEbS/8U50RDVVxXxZpf2b6cbPpXW9Wi\n1zlmqxK8Bwl9QsbI2wnXB7JrnfDcwWCBJyES30sqtKIR2uivVpapyGSbteN9\n0l5EOnpkxUb2Je2SY8006YFgOclrpRjwQxbPqxWdmpEwcTCSy+xpVLXyR3ym\nMCG4O0ECoXu+/HjdelFuqKDufXQaz+lbh0jRaBkyia7FBeXvQYYjju1J3yj6\nVBiD8G4k4CI6AJ+4uyYlTHqzx/NbP5+iZJoAZbJne6CT7WIeGX+vREOoqH8V\nNbZ5I2snouAvtAI0Ljw7noO1/7+6riogP17ERPHsxC6BBrEOLRrkuJDBLxnQ\nykPy\r\n=KX54\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAGFkoKfV92eGzXrcuavd3u1ITERQVWeeWHc1CR4VdYSAiApNJ8WlHawKeKu9SaCPimwPWwlBVkiMrcNxtR7oChU2A=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.33_1588213528663_0.9530298678615541"},"_hasShrinkwrap":false},"0.0.34":{"name":"vue-element-customize","version":"0.0.34","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"devDependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15"},"gitHead":"69c11672713595da12ec37f3a0e9e38d6d750748","_id":"vue-element-customize@0.0.34","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-H+wA7HcnSfyWFTFwCx2uGSeICyyDOoqNhZXgRWD2D8BBDRl5AYNMjwpu1lqSNZSnJyyN20eh6WhYEN/G2WUFUA==","shasum":"5c336c4b40c4b871aaa0818e4daa2449275d8062","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.34.tgz","fileCount":33,"unpackedSize":177564,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerrP7CRA9TVsSAnZWagAARzoP/A+bjqkrC7umYxBoaTxg\n++Io9w8cPnn1bpVsoY3lKQMaViIeIqZ9yYN1bvrIyBne1wyvOkH5K23u4Y2j\ntneWlXfJjVV76u09EI+amJZA9oNDCcjINKviCX34M4VNRo1D+7KoR7FXNqhD\n4NDpF3+0FRkRSOOt7A1BoUodebKWsk7Qe5KCCc36DZP7oCkBETjreARHzwTI\nsqVqINPOmtsE6TfUarg9dFS5+hJVQMNVfw98m9ZofnXlt038HmSrT4vC14ZR\n/7CvDTFmn4L7I6/ZocS84MgXOMCB41tubagNAc5bxoiqKofek6FIn6mwegd+\nv5g3Pf50FgIN9nmVuDu3EUgq8OftXyWqwY0UeK+EXYdXfbpTwP1lOViP1LGu\nONcKeHAExQj0qg66IJHkbxeiCBikVDgMD9Woe/YMvLU1NpxojeOkW3O1OcLd\nUPGTz+vaI+5WdutYqYKu2DBUSwnRXq6CM9dX60T6WHhBh3hsO32pgC9y6fpP\nOjegJxCTTeSE7JhDsTL++sZUY7ng7GLQhlXizuwWjILYcknPMjOmP1NJO6sI\npW3ShoT6rZphDZXv2OMqkp7PGNb52oI4mJm7zgZad+7BHx1san4W9UuC9cEb\nCa7NwFbTAnQ4mjGCbXHvy1Y6As904H6mPvrNNkVMILHzbNWjmtUkZpnlLITF\nFsoS\r\n=2//i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB2V4RtmDLgf5xkSac+8KkcShvKBM048k8A040ciPj/gAiEA83DGeCoMiuzR7E3osaFGfA3OZbjQThXFxPbrXWUVi+M="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.34_1588507643451_0.4656759445662435"},"_hasShrinkwrap":false},"0.0.35":{"name":"vue-element-customize","version":"0.0.35","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"devDependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"5b1bdfdd090a206858f3b0c7cdc2ceee00cc6904","_id":"vue-element-customize@0.0.35","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-rdHmmgceTqL/8mXOQ4Yd1hszaMo2C5xkvy7aCLt+FByjrc85hEcETMg9QVNZe1+LY3uz3JGM9LCPaibEvJQmfQ==","shasum":"2626564c3c000a85d75c83632e0f5f492828956a","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.35.tgz","fileCount":33,"unpackedSize":185947,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerydeCRA9TVsSAnZWagAACcoP/RLEQI1lIOkv2zXe8tiR\noMbGXIkR4O6BeoTpmNbV3anAm4AIRlqSyQEtfJ/xW9Er3uSi9e3NqrW5KNbk\ngbVkVK22evW2w/RTiG5HDYv2TpC3CwA0WP1Lj9iUEYAqyx1ioKRRAZB6kifi\nSCPrRybRzwX6KwGBO6RXKV3aF4TVnac2nGa6lJMr01IUY8bIqkFtZbqEdmXO\no9bgssR1tS2/X7m943tmSYZpb61awm3t779c6e71C+M1xmuc+Hgt24SvTx0y\nAKonp17W2sqb6qR4gvjYwymmgkqh1uCQo/C6+9pp3q6rParjZV5pYWlxYGGL\nfcfzLsioaRUK3qV0MlxDtpR97Z/iVZb21L42D7rAx26u4cChyu1EBs4jAYV3\n3+W80STeCjBSEeD4Ik7Jvnpc4rlaSeVrPAY7X/3jb0YuzYzgThB3VAWcNWHb\nHqaQbOkmVvSednVlk7s6L0jxHOnIU5VYZcaqVKS8gdELdBq3Ib4I+RWue8j4\nRuWX1fD0NMIrAkvj10ZBoZ8yPsgp9oa/3lLzjc3mfNrbX0qn2Irm6v5yLa8H\ne+pDjClKahE6G1XHQzblde7osBxVJIyCJ3WcBkfuIVj+U3jTRsjBaXA9szyp\nb3faMATJNid1IFz4gq7bjJTB8A8J8s3r855GfEx0LfmLKuYHFeem++y4M4fA\nCfdO\r\n=HllZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHPP0evoRnwHce6vE1FVuLh8Y09jK5+QX4E+XaSwWEn2AiEA2qo7Qi6M5Kr4QjoSu+G+EmYyMGACRBWuel1Bp+hHY/4="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.35_1588537181776_0.8080518307552125"},"_hasShrinkwrap":false},"0.0.36":{"name":"vue-element-customize","version":"0.0.36","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"devDependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"6f19d01b101ac9e8f54a660511a4bc96210dbbe4","_id":"vue-element-customize@0.0.36","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-PGDDCLf3vcy/iqKWumZQt5KcqhFKcn+mrTT4wnMH0ZwAjJo/3AzHBgx0sOmRZDno9H1i5cyI4PCJGFPNRHsITg==","shasum":"941ba5acda35f738c34483e8d5ea58a2ae126d02","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.36.tgz","fileCount":33,"unpackedSize":186696,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesDxNCRA9TVsSAnZWagAAUAQP/2AaWJzQuG8czOjgyYD7\nuTULAsO96RvtTuz1xWjXyjAQpHv9SSPXOiokitCvCAGY/mmEfgcbxyEgOA6j\nFS+j0GRwlGIMzBexMWfjWQI+R+ZX2A7vmLOVDH/tpagl9llwvCxEfgzvX1an\nXGD7YtQPN9WlI8ovgZ21HgXgRWL/x5NviPyrBnXIDdZ7YRs9x1BAZvhAWu3y\nRfDPlV7wnFR3j/zsu73lENDLmX+9PdPpU2LqBKD3qqzxYDRRf9GL9pRnPoOG\nfpYP8CBQWJ4yNz8pot8bQjZd+6yY8xAt+uJS8EpI+PRFnLbRuiw2fn4xKfsf\nG3gKR3Zw732Aj3deX1xSGk2KhleIFQPAV/lCvauyZkMPJ1b2zEpVOvmy0ZJh\nSRA26Mevf08fsBetLYPIxhoa2w73mF2LU7xtiZQQgJ8ObhLJBvzyXQjTPw0F\nLcGeFFlHtLpUEOKIKh4yzQ2NIO18AtXivcYvQ4d/ZRyvIaJev1sI/vt5XQTs\nM1V+jeiwwWh9igNEMbemlJnXkVQoPOuChgcpfuXjCsttNScZNx8c1+dG6dfN\n4YJOrWm0JuJ3IQOO7OsSNaZ3IcVjkOzAySgdral4+z1fvwPq72uuQvCrLSh/\nbGaiLEpzI1e3tzYKRs4dQty1ZpSraI3X7sAk5PI+UYl3+KDsUAUUY/uzm0SG\n8pL7\r\n=9zOQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEQXRdwuSt5+C8JijDEVug4UmzfzHEg4xG0nX5u7bk/WAiAxj5kbJur2DcJtwP8MYPITDJ9YqHEbCdxqJuc6D21eGA=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.36_1588608076813_0.3427614657017166"},"_hasShrinkwrap":false},"0.0.37":{"name":"vue-element-customize","version":"0.0.37","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"devDependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"34b9040888099ba33897746e9d7e789574645600","_id":"vue-element-customize@0.0.37","_nodeVersion":"12.13.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-fZ6xiBQ0jAyyE394FssjW/hgzRCCZQkpo5b0ri+oLgWNwsSsmuSvNK6JaoAqrqyj+d6ItDlh1eCNmhk3TXbWhA==","shasum":"711ca4cb9f45f952ba2f5c13c7983d512ac4d4f7","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.37.tgz","fileCount":33,"unpackedSize":181937,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesQrGCRA9TVsSAnZWagAAzAwQAJ8A4vWdowX2sIZqhpl0\nOpLO9oqABRzeDzuzH0CwDia+SWq/7/0RWCcKHkxCgRpcFCN1Jyyrm7+HFDTN\nkQ9+EUL/u3J5TqKCVqfrQ3CJhQMYaaWr4sXS61eLBcGOIIise6yKjKxBUrb+\nJBZ6QsgssQX/TPg/IgsSU2NGeeqkK6sOGPrmIG54d2VHlLnDKO+cujxVqyL4\ndGj/qT3c8X7M9Y3OB4PW35iX+O0UY+jZvdoGz/4mE2TxjsjYq/ro8DDHYDJI\n+VdPOxSF6ZApy/bOPJjkcK/Th8ae0pejgiRGdDAYMM8N3PBwM8VXo92JnTJa\nXPVZuj/SwmzaZ2C90hx1kZ8r0VRKTETv2vItAfN4B80M5lhbpyHF15hHO309\nrzUrONGu8n0VjI2jrDwiZoU+acaqS9JvEjHqdHI0W8DCLfkdgVhXaJ2Qby2q\nVJI/OCjKiBYSZvyydjuxhZksoDr5G4fDSh8wJPAx7jCD48Acy+XThf84t4np\nNfv2HAQ9gDLUwPmoMkHrNJSpzOPObBDWkkSjebNtQIDPFPWItlHiT5s0iYWv\nS75QArNMPvF/WhjhBs9GgXe8awO5SFB7OaiQuK33ei8vDs8KQCOaAIps0xys\nyY47s7AcSI7VIoXnGIA9wYz2dcWmTc7N7WK72E7YJFbOCp/xzJQxehJee/N9\nSg/E\r\n=rZJm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGhl7kPvLsj/VlnX919OCS1624Mdaveu2FHPww0kac+gIhAJO9eM1mktorWe7SBbVGZIYUThl3sSJRHlB9KWBPfkiR"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.37_1588660934004_0.474600740927831"},"_hasShrinkwrap":false},"0.0.38":{"name":"vue-element-customize","version":"0.0.38","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"devDependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"e34d201d39bb22cb67ace0fcbe4b08ab0e758dc6","_id":"vue-element-customize@0.0.38","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-lNB2pUvDMSjMlw+lGwL7DVnB5LufE9bC1OjjLb1fQ+boNYjgfBnXcmTwGPSSVZFAdhR6cFtkk1c7ZhzFugHJ+Q==","shasum":"d39fde847a07c722904132776710698146099ace","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.38.tgz","fileCount":33,"unpackedSize":182053,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJes2c+CRA9TVsSAnZWagAA5DoP/AwZK3KPRyCwuR2M5/wn\nvavHP/tWIlhnvNdKhueOrHqktybLWRSUdznsgnwyzqrGgJkjTXZRxzdoaB7N\n0RDaSR6w0fVY4dIDcRd+6Nbd193/q5a7lOKOafUB673GDpbUu0vPX991QsmD\nGo4v/Em81DEFG8xF4tIRMJwMwgt226qJVoKpHOy6mnY5V3GMSgfSn5ahufXF\nkbtRLbvgZMOAbQfl3tTES1pCz+/Q/+n7kpBs7wxh1CNVksqXkYaG3VoeYswh\nz2o79sA8MVpUHIcfKpKQkhmsx6PekyHA9RCGWjqf5djVq6nHi6rqQdlKT1qN\nv4l8fESLiYV81WcCNqjhZOleVqX2XD98vtrtyAAgssqIWOvpWpd6FLV+5fJh\nFY7rFIk0cJFV+kZJaCKQeEHugW8XvC2tcwKhy2lfU/qL2oht3uykbvHYXo/T\nIo2ZFzrI8yF3Et1nnYRSlrkfxhHYWhtrUHe4wUnGnb2D2fIpK+z0uZagjCXJ\nMSu8QKKWzgN8dY24YgWAaiD6DOfanOUIs+pfrs8B+16CY8vzyLPBcCqAOSge\ntGRcM65sGbOZwSK3RBUB0jwMqH3EXbHDinMvtw4j+3L81Tn11yb9dTvJYnIc\nKRusrsfnmxba3nOF38vSzYXzbuoknNtyT9NrLwXLL2NL5VAKAqp+CDG80KeU\nyOe7\r\n=Xxc3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfdGrjBOx1HEjvUX4PlTOmi3dqUdDqYJQUbcKlixqWYwIhANkjJgrCsCVFL07LyeQ+2Iyy+5ZFwtx2oHguZ1sSgnjF"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.38_1588815678027_0.35910934283282314"},"_hasShrinkwrap":false},"0.0.39":{"name":"vue-element-customize","version":"0.0.39","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"devDependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"4019050782961cf99dc8f6044e32f53dfe92964c","_id":"vue-element-customize@0.0.39","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ybnXO8pKRD9oDjznnUaltcchAVjEHyCAGUvUNW+82L9Nr/KfEKyYzDDrbWAXvd38ZZwFSW3n9Opsu6ygrteXYA==","shasum":"b5bd8765c71be9167c37d76b286df9936f29e7ea","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.39.tgz","fileCount":33,"unpackedSize":182211,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJes9z2CRA9TVsSAnZWagAAjBgP/2k4hqoZir3lMZT32xDx\nDDF4RKM3UeCXZmP7RUtK+gJgiXWYFxwI2M0orUJTnd26eC/kOQyFLhNJBCPn\nHr3xcMtHQoAMw/h4UPFRtDEnUQI7X11YnmrbvW1kUWYNPSkMjCd8C0iYzKUu\nzsWfhL/xXcUHzW+WYSFnn+gq/145JfImsxwm96naid6G+Cn0OKSDP6FpPrxH\n+kBBjLYaJxpq8WobTtCKdgXr/8wx30+EichYSKLMBMVvvSvIrzq+WTEqj7lN\nntMsTb/VJvtXmnq9pwvsPMAO0SoaZjal8tylERRtZ4bVC7+v5Eba9MJDB2pr\n00wEZvYXRbF13I48W9W9dvHXhyUgjIv2ElFMb8xAIHmy0yulQFmieOgPduf3\nJrK1SfmZO/GFGV4nTBUmP2HIUPg619Bm0UX7mxXwmgojuTTrrE1NwEUWQkry\nb68WY4FI9ZtdyfjsVmcWJL0EDnmftdiP0/a18/u3RAR3Fv6LbGlqViQ1WQY8\ntLs68dvGUdUBeiMBmhodopDlJdqL8+D0w5dkovLPyWmT35+WSzLiia9qVJo4\ny/zYCoPSP6V1C0/N0XZ+Qy477cfdj9741kY33Q+3OaoR0hxX9a0znmEG0Tpi\nBbFfyxwqB13d13k3kFssPXT2jW4Q6YtmH/ed/eCAcW8/HyD/JXnXzqhz2etD\n1JDj\r\n=MOIu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDU6kcEX59eR2rokq7CVEzZ493p2cobR6f13FWXN6RiHgIgT35/nR5JNm63TkrrdEnIqyb3blOuNWTOczsi+x9Tz9g="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.39_1588845813545_0.8309665026204422"},"_hasShrinkwrap":false},"0.0.40":{"name":"vue-element-customize","version":"0.0.40","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"8c5d12bf3b46398993fab0877ccf3a1604cd4139","_id":"vue-element-customize@0.0.40","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-EsOiphy7D9pitSfMyiZ5qCEaIB/yMcu6M/do/J5S/lLRw7runz50oa+9Io0YNtGUPqONuISaqvuRTvACsAGi3g==","shasum":"4c9464344627d539222b74c9a6e884efe6563056","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.40.tgz","fileCount":31,"unpackedSize":158368,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetLRtCRA9TVsSAnZWagAAXWwQAKLfl+kO/i4hQR1f2iOI\nwzZqaAuDAt9FgWaVVlekAV/h0fQGPTKjVq3BZgvCLe1M7+oBS2Hnfw0G2hso\nOC2lIcua0fyvquM89yz4Zqs/XDlB/hmTNTDs+yL1vpQX43fAqa0nuRpbHyGR\nGi1w7eysQJelKZEIpJOxmTS2cFZjiG13Nh9mXmVjYq+KGQuP+Pmk9sca10UH\ncdkjlFqrIHisESzBoa6YwRd4zb/olQD8oH5l7MyJGVwXGfS9kDkqfIdsG5bO\nFOdIGmGqbngV0Uc4BVragFP0V1QMDPNTEN//Dv6Sg0FsJDyQhf5nU5qjy/Ax\nv14ekOmuerITpGcZc1CjzgAlzDFtrDbquZwgtDmMRwoT0ap2FwykIjhOmc4r\np8uN10+R2nsdCtLYfe3+kk1zEwPaYdhNDT8WYj2KEfBDs5Vap8oPKmI8zN/S\nYri/YDkHTbI3M8i2ogMTN9Ok3qTCmwAsQt2GjOA9xbgJobskLiW9SHIvec1e\nRpZ5EFEZglJ9TXKUFneOemoCf37ryRKfHI7LQK1QxENLcsZ77Xs2EstfP09Y\nrZetl2mEMFSf41Oc2WRib6fOnTyLx+QecDYwmz/FmVFggtM/CJHg0UphOpIx\nWhXThkxJxvKGuxH+iR/RoiNSjVmJmCcjK12B3AOrN5FPwz8oaIkWV5Ruy0M7\nSFbu\r\n=oE58\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDnYZpQ3Vc6cyuw2dJrLdygPkyOhhaozjkc3xKegfMmuwIgCUEE2eW5BcnUgJluTf91RFwtJiZOfHGkCxCQ/89bFgw="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.40_1588900972566_0.16645238681336694"},"_hasShrinkwrap":false},"0.0.41":{"name":"vue-element-customize","version":"0.0.41","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"6c24717e7ee531e8193de9f87e08428d066be89e","_id":"vue-element-customize@0.0.41","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-umZWqFY3oeWObwiRcC7ON9gTQcU2Ww4QHEdcqEpOFj5I3MbBdiIQRLKLkbw73HGMEQPBlPDfXLgZIYLq66c4Lw==","shasum":"df960c2a022877a16335798783c38817fc5d72d4","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.41.tgz","fileCount":31,"unpackedSize":158502,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetn0sCRA9TVsSAnZWagAAz8oP/jh4uGOPZgSvy1iOPgeI\npuJuZCSVqwA2TeFSm0c2n0cDnJ4oSFWAY7BG55AG+BpwScxxNhuKF0WeAjl4\noJl6cJPiIzRurWXXQYPM2dE4IiqhwSFtLloR3XZ/vYsbNmbpIXdQAMCvXH5N\nyrN8LgD6GoIE/L0kgps8mtEtF/o1pnkdGGt2L0BPDNcfD9yFCqJkDhHpdeep\nXL/DwXLwwq0bgZMn2S+3vo7F8mrRHyjhc38HDrzAL1+gTP7FbdHNpStxsuy5\nvNTRt4gBSOG95VyVFWwNCt5dGkzLoZxW9Jaf5sE6AZp3vV/aWixuP0vLbOn4\nJl9ONV0z1dCgQYUrHZK+moxeeK7THbCtwSNZACQGy65yDPHp57mAkLEGanNy\niQrtlY3dEkz3hBiRcUvPthVWe5sWp45jYtpJlQij6q3Ugq0MH6cN1rGXElau\n5BlCUXbXpZzQH6/3j2DG1UA0Ch5lRjFIU3tGUNECNd3NZbD0kGYLnU50GJRr\nmUM41VgvG9h9mLnMcL8FtLf2HVKSZsYbFPJ6tqgukT18VZ0S1XhK1jB1LnJS\n4059tycS4eyydQ1w9yWWf5JKm/7lixWpzvAbaXsSQ00f2BrZ3aH1EtcCjLFF\nxrOszpOf92EC8IKFIPyHkPpgFGQ9pKJ29z15K2QnXbXGADsnoKuipwIrc8xL\nfm1v\r\n=0KLn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsax+XLIWSvfliSv3OoLgVSXxVkXilltTh0sSk4XiIfwIgc8bfLSf/Yb3sWPKmhsLyxCtjpXfS7A6CAlxcCwiI/F8="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.41_1589017899345_0.7466213472176271"},"_hasShrinkwrap":false},"0.0.42":{"name":"vue-element-customize","version":"0.0.42","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"7ff252ddefc1933a31a7d6b882070491fa82a261","_id":"vue-element-customize@0.0.42","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-Tb9Mmll8BEPhPqkFFPijMcEJ88WdvCG5qLr15tEHuVBjhMCbezI3I4Eq1YZWIgcyejXGgxFnMbHbN992xjhtbg==","shasum":"aaab3e86b008b80a6798fc4db5cac2466b70efb4","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.42.tgz","fileCount":31,"unpackedSize":158621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeuNBMCRA9TVsSAnZWagAAbDoP/RJE1ck06XqB4/TobltZ\npzGBukSNcct0rUbELksC4oMkbefq7ckpSKE/K8Cxct+qHD1Aq2NrehvKVoew\nQgenybcCcpJaPEeCSEaGZjhnCQDpQHwbR5gEy+D3CHL70ZwdxMB5ig1MLvZk\nC01rqTstwhhUNmjnETICErzkdywN27DWSOP03cvoqqcBmbXuZeHOWGUZ0hkP\nRyOzZXPf9AVFW8q5c2fHYrx98Tf1sWmm+a67qZ7eSYTRk9Jr+u8IgnI7A807\nS+HZtUPz9ZqbC2BFZFNWrAz5qmIcZRJjSZhxBt8WrMUj2wFAinsfB1sjL31r\n12j/4Il7V3c/pWHFsRxXTy5KwLdhSsks9oFfAhqtVVFWVp8MXfzZ8WKyj1P3\no4BC4kZz2s5lUw8/MjcQH6NQGah2FziznklooYufFJOi/0zj3bJv9Pp3YWSX\nP3CR9HL1E1hX2YZBopLwRAJEkPqV9u7sduom5QDKgIEjGKHPqEiyNAsq4sqr\nBlaTem5va0u0/LARDX/hNlyCqX3sUWjb+NMZqkFf/VYAuSNBzfdDfWrsoY0Z\n9DPnfeXD3tYRln1d6M65hos1L42mOp8EvZ3lDHyIA89GkYNZ85QAWDIYMdhw\n86YVYN+BLVVtRrxiK3LM0bdDe5Ghd6BgJPTJlBabu+ieHNvaTh18Tcv98ii8\nZJxp\r\n=xoAN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZTAC8uLHDx0rSMIHjMeiw2yCAimEJR/nj54joM7PubAIhAOEdUflbM6TaQvpYLsuwCRvch4ClLAT/qOkjr1Lw5peq"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.42_1589170251260_0.6065104695701111"},"_hasShrinkwrap":false},"0.0.43":{"name":"vue-element-customize","version":"0.0.43","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"8cd0e3499cfdcb10c84159724b8de7ec3fc9f3a7","_id":"vue-element-customize@0.0.43","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-5RnPPRMwIXLGK2IOFqFDK/QjTsr+XSAFll+89gLoTtfIUhbOnGmKmY3+Cs//sDwyEhObqUn0kuaU0OpBoWs15A==","shasum":"0ffb947947da363136d87ca430dd18b4cca5d967","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.43.tgz","fileCount":31,"unpackedSize":160791,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeunOLCRA9TVsSAnZWagAA8+0P/21KHwpjsgV2xzjmhdp1\nD3Wut8zYH/sIDdvTOCq6P042MoH9gD1LxfMICZIjzpRPnHzGtrk5k85zoa9p\nByBsdL6yL2hcWtK7sA+ya+wHUhh/kAIgm+Oxn5nNd95VXW+hXn2WTYgN8/C+\n/zNQYlq2wNjmpCSaXRvs5Z+3DUBeC9qMpYeN1TF/PsBYo6FX1um3+f3BGFmb\nHZg29ZMtLi4wh+2zMYpTmndQDOpbB0zdbrBXrTQLzXkW5FBqWGmIGF8gp/Xh\n839+UyfRnJ4DdASvQXUss3StB4qzmZf0nbPjwi+hCYoxmCA/EZDGRIytoSqY\ncW9FLNb2wDFyefkWCvxBtafbg6kyZfnTq7tXE5j8S6PUkJYS55o4Ppfrtlnq\ncJoq3er/pv35stMjOV7ApWAGPF2cJFmkRer2PckHKILumLt4hwdPMjdk7UVs\nsemzRw69nzrp9RS0InLm0Q0S+K6T3n6xygUp4iPOYGEQwATiksM9EUCN3y15\nc4wkRidXojuP/uPDqJB52zfprYHOaJe2DYdXTArTlrhn625iPKVS6mHl1/oK\nO3+FxczBgeLOGAyCgoVaST+mIPKMyFKXWkj31VEqvUC/EFrbJo41stKUgi0I\nBBMOy53MFPW66PR5rs7VKhAN/OWnmMaxGy+fNXtaTY2fhCckFPY+42z2mZlV\nlqVw\r\n=+tKG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDU1JbZjn/hsUbSm81Nr5GL0Dy0udQtP402WYFLcGtn3QIhAMecxz0+7iuxz31+k/Ife7RoBDXD3zbUmLKTRjFzLrXD"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.43_1589277578704_0.4895719533673295"},"_hasShrinkwrap":false},"0.0.44":{"name":"vue-element-customize","version":"0.0.44","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"25b08a11acc1d992d35ca691437bd9da11d7078f","_id":"vue-element-customize@0.0.44","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-HNHkrsBeguSoV1tFUt2hUOiUvozcoD7bnYOQqC34MFzCws56KI/4KHp4H/zIQlyGWVaZ9zeVXe2y3InIojPfNw==","shasum":"70be4228752ba3024e70fa420955592893313f85","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.44.tgz","fileCount":31,"unpackedSize":160791,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeu218CRA9TVsSAnZWagAAmIYP/0qtf1faVyBw6GlbG16/\nZpG50dayMCnHGvzTRzFSOhn8PXqpOMgDzm4seyKyzSyCRX37YB1p4MmjwbHQ\nD3cXoD36ZMNaVHZBl0optvMTI0zjYrXaD1xRuA4UgCSNYElOiL1RWtSMsY7S\nUmaZ1B1qbye0lQZgR67fKQx1MQes0V1+ESjhR9J2qlYmFZwh+8NPiQ2Jx6wS\n9IhQW64owqPzklK6Vqs1GONn0EJ4+D25trnGeig51MWE7AYsqx8+V1gd68s9\ncSql9dIp7D7bfTq6YOFuIylLfvC1nleGQUHOqgbL4Y3Dgd8JmLEWf5QelCz+\n3Ay/m3Usu+g6YwiMzYa+b8iD0ZQ6uxWou5H/7kfyfDTL3X/yiUHOohvLfwPK\ngiSZRHjl03B81bWUwggb8++lLs+S85yvR6nwXF/HVGGVDRtl9eInJmrutZ6i\ndNvx9yJSVpNxg9oJk8Ile+X2H8aP0O1MCVBMU9rJj01shReI7nYC8aU5Ru7b\n9eyzYQV7H0fVcB1ziogu9U3F2Kd2DGq3HZXRDTDEETfqG4MdKwLhbWuuLMKk\n0l9qD0rAhq1a8fVZRlxdjNfSBJb/OizBHhy9RnAPWBR02JlyhAdIqdO5f6tm\nNE9Gsl3+G4ywkz7utoOrxi6zK3lEbwHdo9e7PsLChesWPW+I51EBmDqsk6o0\nW3z2\r\n=zNFP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmdldrw7l6PyblYoCJW+vpL0L1Bn+UMKvvGlonm6UatwIhAIGqXNfGXj2gtkThHxKVscMFhvrgxUVC+paMXzff1L61"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.44_1589341564203_0.04929032915408649"},"_hasShrinkwrap":false},"0.0.45":{"name":"vue-element-customize","version":"0.0.45","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"adfae612f6cdab5ea0ce6344ccd812b06bfb6bb6","_id":"vue-element-customize@0.0.45","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-T21qUhrE/+NCjG/bSpAxpE7y65nLU88LujbERPDPKw6lkOu14+J/jyezFk0MgcFICUAHnMoILin/eMBzDvtH7g==","shasum":"75e01780583a69bd14ae411aedc70d857e5a3d86","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.45.tgz","fileCount":31,"unpackedSize":161885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevO5rCRA9TVsSAnZWagAA8hgP/i3nDjRSu1dFjYzdcq+6\nx8+hG+5R+eytSwDpjSXPFO6fgRTvxCOa8cJ3vIjobmCRXQShC9bk4U8mn4et\nY099mZ1qFSZkUn0WED0W2U2S6z6ooZG92yJu8Sf9rLXtyz5CcH9Xxbb2M9LO\nFcaq/bVvrvEJg7j5BtK4u1HwiS0Y4UmbXBLfp1UTcN3bMuPC2ZJJhWDsA5/H\nbh4QS20Xd+Flz0fs2xoqWnVHPLZCOsmtnmwG0Fd33apmC6lNJqLCdOMGcOtL\ntzVSfolRMA+pSWalFaIWKvsXvRcY09BaOZEy0R7U29a5ttFJO5d1uY5WNZnV\n2rDncBO78lqIrnpbIMvIRGRX/qUiEUP6xbFD9v/3jzfBksdrskrvBLWjn4KG\nEyUqAYOFSRqW6QdBi3BdSKPjw4x3AZKctG9a9bBAlLzLizKcGpL1zBgRrwxM\nS/sANEp3dpqHwg8If9F4Zn1Rn4d3YebelBor8wc2y82L4lIa7z4re65I/pAx\ngBEZCx9qRcVdygS0t0okFTBrtwlzJ+MXiWhpj76beVyLaDKQzC7b8LMQrt/e\nCf0nKASPg4QeU1V2CgcdQmeUa5ok8h3lQH7mqab9i6fj0AYHECc77yJ4KGpd\nAmn0O9eAdElYtz9OEOaKWDlMfUigPbvPBG/6o26MxQdy0V1dpWDO9p3CqQ/A\nszvz\r\n=XzES\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDvL7/LYeRBb9oBCw1W0FkRFXu3cwCHKrRPpVfcluHsmAiBsaHRnW5dt1LWa0jYt6Ia9iINn94H7Vvc67X2ZL8Ebtw=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.45_1589440107281_0.7387694674874608"},"_hasShrinkwrap":false},"0.0.46":{"name":"vue-element-customize","version":"0.0.46","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"3a0220743cc5af65512a1ebadd4a1d068f4822e3","_id":"vue-element-customize@0.0.46","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-qc+3LgFpwMt7AIDhGBT95lm/LcrYuo9fmcn3YQOsfj6FJd/B/psq1XDffZeidxOXo/PSRLZfwBOyDi6+AuI5hA==","shasum":"20967dab9721322adcb6363ccbc34352270e7715","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.46.tgz","fileCount":31,"unpackedSize":161916,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevQPyCRA9TVsSAnZWagAAnzQP/ip9Q+JQ7iN+OTagSduz\n0NzTPNgzDWsFmgjZYxLuYis8z4CpxW+hTvQOpcwLW91sm+WHqGkVly2Y3SEN\n1AbCqS7hHksqYaU4sVXRq6Cf7o2PxKuE3D7N7aZKjm4SU/uIlBIdkEsOkXVM\nyb8a149wcCWukRjLqDAmafCU0RHdf5qA+nz5O5CEd3Fqiq0z1SaMOiLmq701\ntCJX9P0cN15X65d+KOnnESad16GqL1NV59bs2PdYgGRGkFo9ZcWMVYOeZ88W\n5b1vrmgDjsZzYVrvlfu+MR+zlUd6G5wrrxxVFhubutqY+DMzJBOy85MWH8vg\ne/Tm4x8MQ+qbpz/ZCh6Dxe2Az/TwRi5ppFg41mSQBAat4d7A5zYAdGHKQe7K\nyhklL1wGHz+Bi1qC4GerlmEHsboCGnvfa4R9ribpLwn+Tj0h4JyRKO659bIb\n10nM/n6b0ET4zgnmdX9yq9nkhn7Myy0MWjoyYoz3dutl9kTDsSNZz1+Uux09\nx88ce7c0l9sWFpR6eIYKtZ2/GVRrvH0ovy2sg1LD36opmybph6OCMw3rMkvZ\npDdZI8MbMDba2TwkYHJ5ngKKKYA48JMOTL+HvIobzhnXbF42ti9yXZYwTiUx\nIDXhfQrT7c5yJG8maZyZQQK83+EWssjLJvx6Ts90SEIJm2y/y9wVOvg65IgC\nnpQk\r\n=ApVU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGzCRUt3NAn0eE8CxS1aHzjJ91w60kBYWY+FM7wgqhu9AiEArg9wQjEHa1h6lyMP0YEMyviv90V9UbVgnlXd12GL5hY="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.46_1589445618230_0.07710303549170816"},"_hasShrinkwrap":false},"0.0.47":{"name":"vue-element-customize","version":"0.0.47","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"504fbc26dc26226d3f95d2696b7e57e25ac3e4c4","_id":"vue-element-customize@0.0.47","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-VKTTbYV8C7T9SANq3CbXwJsuu6S/YCh3Do7Iab141FeM0K0R9U1xtnwbRgHwsPZEw6IM5QIPo+N3mqoX0+Pb0A==","shasum":"42e0169e6f08a56568fb5590664ca82168eb95ac","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.47.tgz","fileCount":31,"unpackedSize":161950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevQlfCRA9TVsSAnZWagAATLkP/3U7hWZup39l/Vzx90eH\n+1Y9cjYO440s+VK3ZtJN7UYbfVVY64K5T9BOS/v8mLCE/OB8qtVFlwoYH2Id\n5cG9mjU7qFGaBs/F0A33paKSfO2e2aLINoijc1HVcEeo6CivK4XKExWYes1C\ne6UWg8CIYl18nYnaABa9ettVwQ9EB2dSCFlnsBumnKds/O5GOHx1+HGU/Pgl\n1MHkF8Gk+Sd9xDNT8HmO9TJ/Nxy653FhaJL3XlbRmdrP34Gq/fsBFqkQO7eI\no+4z4i8+PMS0EsttzBa9plFyEk90Ap6FGCi3ES6zdr2IhuV1bolOgDmFujPY\n6RrkGPvy8TDE7tDKavS3Ymxhd8kKIGc4lyiG5onfdYF7xuI11cMa4igysABD\nP/7zgZIZb2nnBgNAzVFgkLeV/vMgVbi+3ZLL9ptF/lMsnHMCG5duGkb4IUNB\nT1XOQqL9D16jpjvI4OoH/7PNEY7MD39VyTfiR3BDyrma6VpgHIlNbOWqtwDa\nCqxBOdxqTtUGlmM8mdGuVkibTlyJlaPjUlympn7nV2AmppcyV9NRwrPK6egW\nwt8foxfb5yp/Baqkk4KTWoPYNJ04W6/8Wz+Kq1OvbU9n7MWVYFlgsTQrTnk2\nrG5kU6j6pp3Gqg/P5uRJwql8SEfYJ4WU6Bskz6u1T+SuoQhOe2flUFdgilTs\nS+45\r\n=C88N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2XjDcrXTOtW6DRmney6NkCc9KIXyV/qmcCNfO70vszwIhAJ/ygdPmQQ/WJ7QHluCybugYQiDwCBNXMgiUPY1Zwp5E"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.47_1589447007360_0.8198267791798224"},"_hasShrinkwrap":false},"0.0.48":{"name":"vue-element-customize","version":"0.0.48","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"cea79ccf44c40dc1ff1f679bfbce30c5ab2a2bef","_id":"vue-element-customize@0.0.48","_nodeVersion":"10.16.3","_npmVersion":"6.14.4","dist":{"integrity":"sha512-IbIbNRsDGUdQzcCvxWRCrPHJuk2aYTDSj905DbhUfAffH9MoX+bQ5qwUqJZwXM/K9xIBHNOghP3SeShC34EdUw==","shasum":"a1d916de0339ba9ce31de06fd9b3edc398b7da23","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.48.tgz","fileCount":31,"unpackedSize":162412,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevmcECRA9TVsSAnZWagAAwhYQAIYqWYsZfXYOFs+A0SjS\nFSVugRnoxKt+iHIr4Q6m/gXy0zJ+ld2F0Iq3r9JggVv2l/8z8zHCAMKAZtm/\nxo8jCzM1iUtRNBwUWnqsF3PkVkK+pnJj8mCzvisKWBBcNul+wgHSE2zPVOce\n7zmaOFTD63LMLHz7h75Ga5sE5pNbe/WJRx8AY1zpjNFpE6YhUrAz0tNlOF1R\naYc5qrmjoqKnMo+sqQLJHVPgH5D/qkzUjVmLpuYAvhPkfMsqOvq9rBHqArZ0\nA0EUeEAroz2wBEYkuuREscl1Ex5LoWExWwEmCIp5piKEAO7BRf58n5Si+NzG\nGvGTqY3W4fdbr8Vju+jHA4/F0Ogel85e2KTOJzFft8+9KArLgpRkPwdwCewQ\nl3Qc/ibELQxzHjxgUyWuMyoR/FO0WBB4PNpcRabRfL5G/N41knw1u7upF3Nu\n6vfTMF84F5/qzBD06+10t/JSX2M3ArvFTri/KlAw2vrso1J699JFa7GG+AFI\n397rm2u+nKix5DSVfnM113PBVtW1CFOLFd/KW7rAi3lDYg/PrnW/gtoMgVhv\n55FNNKvB2Qkio0/3TV+O6VPAs5Ce0D6wLdxcrMsazJaIB12hxJ0Q1ugtqpmg\nQZg99FM5efop6+6yYld7g00WLGQW6vdH60S4nQkExgaIdD3Y7lNpGw5JOYiW\n6mOY\r\n=7TCy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRQ5Sb3rJu7APyKkAshc8Q55GuezCZgBOgOIjTUr/PMwIhAO2ZkNdAscrG/OovE3qMYkLz+kM7AMcOsDvTRr+cuJoQ"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.48_1589536515702_0.057589470342946036"},"_hasShrinkwrap":false},"0.0.49":{"name":"vue-element-customize","version":"0.0.49","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"1d88eed7362665676867f1d9b22a84c60cc5ef66","_id":"vue-element-customize@0.0.49","_nodeVersion":"10.16.3","_npmVersion":"6.14.5","dist":{"integrity":"sha512-WvIoglpW1QOFJWxwZy2QAUGJ9t7xcsTkzHRmpIepwAWwvMfVuLNhWsfJLF9EeU6qdhdlqggFlZezVaEdNBWnLQ==","shasum":"25d96d17f57b82d6d1eadab8767c23efed439e8d","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.49.tgz","fileCount":32,"unpackedSize":163639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewjx9CRA9TVsSAnZWagAAFngP/iuollqiNtxYCiq+bhFQ\nU+syNkln65S4VqRiiCpiN3OLqaFYO6Jf7yrvT93WerUTlXPwW04LK/BxGRA+\nJoEzDeDNtjYPe03fA9OV4jPuBXnfi5DDpkmbxjVjZ/bKPtGpQrUM3pOfvSv8\nu+OaIQ3pdKylz9womgJsbEnMhUZLyjHgzVzLlgPz0ySAw+K48lJtIFiBiSVC\nflksJk0P9RL7LITEBO/0b3D4OCmANzlt5ZzBScdvaZ6MdkBrFPw6rCkqJouM\nM6fPOSdPMkExoE5UeiAX+dkDGNla+ZbjmHKo2u0VG2/OxOXbLZuZ47aieXEz\nwlH9lhvo1e8benDPIzacWZ+h5mURTDYzrOnLmdBAwLIYV3O973xmAXNWytfx\nM8h+8w3uKLGRBgAfBzGrnGUcN6eA0Al61hrKBLDN2XrTLiiH7anvY7NBWqsf\nYfoSrej9qoAoHil+HX3cV6fXfo0K24m73Q32OeM0wjgqfKARX/CWUV5baFjT\nG8NX3lTGZwrY0m5raKvwQCszX8Loui8Dy/hvgEUPclykRG2pt0ZKFnz5KqIY\nnC2PJlRk63HZ1j10wAdcucT4NPsBYcRoTXVv5tnys042Q0OCXnZ+VoormfQ2\noyNjat7eZ5v15o4WTCTD/N9WMcK521l9h+gLL+g6eP3pTK3jmxK72dloefc9\nWPdd\r\n=l+k+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDw17GanD8BuVaVlkQJTYCyX9tb+GOejj0zgsw5Gp5h9AiAFVZja1I+swDySwDKGNdMMXgA5+tZ24RHZ1yGzIX/SbA=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.49_1589787772841_0.37658820790726777"},"_hasShrinkwrap":false},"0.0.50":{"name":"vue-element-customize","version":"0.0.50","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"bef5a343f8a13a324b842a87558ab5cf5b9809d6","_id":"vue-element-customize@0.0.50","_nodeVersion":"10.16.3","_npmVersion":"6.14.5","dist":{"integrity":"sha512-YK0Qo1frmenwIIf5dYhF/Ltl2Jbr+G39yWmCHKKzCpIJTUBsxHeBkEGgN/JJpBGhOK4KEGx4n0UbpVfMXiLc/g==","shasum":"cf4cbf7f1185ada9e68fdf8dcf0334a1fafa2d18","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.50.tgz","fileCount":32,"unpackedSize":163745,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew0wLCRA9TVsSAnZWagAAJbAP/jBT9gmySTdhm2PDl+l9\n8YawPcG+Kj9kCMOP7DF6Rkd3ndzo2d6m7mg2YKmgjC3R7or/hO4tCFUiNmhv\nB6Q/ClykImcXC+jtSF8riN54AQ58ecAi8GBJoen03V0PaDxiq0kEGyZ0khnr\nmKXSrSMolHvzsVHHyGDPgSNkTDD8jFKgEpKMMCPAZXHSzxplUbh2KQTY4Ajs\nc3Ef3jZT54xFXd2bLCxED1FvTPZYNC6LyxIrhklZj5hcDdpykEAbQmf6VS/i\nKykCpF0SHYIt5iYyN57oEYGurQuVxyKyOH/DsqMW5pVrHf49g4xuUzUfTU8Z\nFLoJZURYdxwbmgU+5iSNU00ZRNyIbcrewEJxjRqE26LZnTGmrklRDbgrI85N\nMRzIkNLOJABL5MQ0gl1TUnZbGhZvTAbb9Zr6IS1oRs4z/uCK0KS3sjQ/L5Ac\nF46HYVQVAVCLYl7MwKOwrK9OREsOcB9An0VXumP15iaegkaCGylfrit81J9E\nKDva6sPuPVFUAiw0Yc6zlaK3OtrIHScnMjPz709pz0PY5r/5PndiCLb+uSvY\nZycYfi40UpP/1odjVONPE+yXGV/XU+i0lfHtGQO2ofvyLatjEnNjz7Gr9QAE\nbCuSuORnIi9pNqwNUXDTlKiBBJrOoUFFQW782nblKts4unyPFL5uDFnTd/5z\nJPUN\r\n=8mtH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD1unnRYrfS/DRYDNHVBgEOUOK2U7D/BU9sUtiZl2GdGQIgPPQvSXvEg2d8XgJ/4MNPJ4JtKcS3clzaKvJbtEaIdVo="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.50_1589857290826_0.2838243228524233"},"_hasShrinkwrap":false},"1.0.0":{"name":"vue-element-customize","version":"1.0.0","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"ae9633f44da6a6a8d2dabd10674c4546cdc90748","_id":"vue-element-customize@1.0.0","_nodeVersion":"10.16.3","_npmVersion":"6.14.5","dist":{"integrity":"sha512-6WxQunNR0bRsIKMqlsMgLGXe+x6ZbnLKWeqbIh1S9yLtSLmyrDQcIfyn6W/paPOd2OCtMPYAIfQPiksfYaANqg==","shasum":"0b296715e934ff4f1f8146c5a2d7148301e7a996","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.0.0.tgz","fileCount":32,"unpackedSize":164330,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexhd+CRA9TVsSAnZWagAA0y0P/jFERcJSvda59mrs5DlH\nKpdVqL17o5090g621IIz79avo0S7/KWC7JICGk3IA1JD1vSdt2wsXJARHtaV\nD3jZ76gSjmiaFZsL9F+2ZvEvluNxKfKt2WbAeoFspEKPbeqSGRdu0bSDd886\nAV+2NLuiFJIyONIZkrp8VEAk/b3lcWQHe0JUpvtPc+/qjGSjylYqb71H+jXK\nO2maEONDkS7S2Vk4NZxYYfumbQ0Mj7SwRVr687PXLHzhaa5hUwyUSyo9kRvn\nj5790BP1e1XKcq2C0fsGGDebWzZJunNcqSiIleXPdg42uXFSAWNNgBlFJded\nO02uOCXgeI+JmpsejHRi9rDLq3JoB2OtumyGnPLahR5mYJ2kbX90BBltReLu\nCHzs7TSlmDDEcDRd+afMubcnFfxiCVjfKzGP+Xl5LtqYxpJc8IXlN+N+OQ3n\nEhPwgivznkp1BT5GFlpgnQSFcnEHZ+AUZ2sA9z/Ye7hf0/nftMd7Vp+OHtYG\nYis7qh1P/Stdioqpoil5TCkuMnB8fC6iKyO6GrcfvQTx8oGu+H4YZG+3SiMb\nMzpo27BwR5zfMiMblrh6f3qoXFqWmzVGorX9mTdGDO3uuzugWxhuhmVJLS7e\nwITt5jsqWMG+7V7e31uNx/TGakHusV4sDmXzAe8q98wu7yabfxFzEKeDY8Uc\nWdIO\r\n=dMyt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGl2WAsKG1C5rfBJOM5w1ME/wsyO1muYKKcskSlKyBwkAiEAgqfdgru1xMjSXryo53n3l7tX3cPB6QEaK3tvHDrHl4M="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.0.0_1590040445559_0.9316535684652913"},"_hasShrinkwrap":false},"1.0.1":{"name":"vue-element-customize","version":"1.0.1","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"2f7ffae61d13c65ed043691c0e5133876e3e5335","_id":"vue-element-customize@1.0.1","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-7qaIuZxDsFo/RbdBLeBSdGPk6anTuAcUKZevjZFFpOw8Tn4PAYOlkeBFCwZpcFKZ3bfr0VTivLbUxnTwS8OlTw==","shasum":"6c85ae1d521821a8aaca05629cdc01c635e18ae8","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.0.1.tgz","fileCount":32,"unpackedSize":164913,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDvFbCRA9TVsSAnZWagAAMt8QAI7jTKJvyB7BZTiQ5hjC\nhe4ih75EHYiHStOdDMFRD7dE6DO40fiJTGvroW6fhtBjAlfiYzjLXWUP07jn\naXeaTL97ZbrPdjM8DlsuAUO7V4e+EiY3W57/sZINiVoMUtOx9m0dxBlSwjvF\ne/fCDjXGNe5qfqaqmYJwvr9Oyz3FTVMcs4qGxGsE0mwzQ3Jod8bZhsv4vv+X\ncbQosct02Wz1QXeWpzy7o7WjH7/4ARTBwQJV4o8UKOIthYa4VNVO70InZuh5\nTHUvdvpdmxcjeiAE3n7gjSn5wk/qyGpN1XJdRhByx+BMq65/EmGAkpMRo8qK\nwbwvo6Xtjq/iXQxjhwDJgNZbpZIx/z4CpOT7ppobB2GDouPhzHHVrYcqXU9m\n8xVGKUXPpJ6ebZvdJnA0hNTGluWs0ovC+w1e0QqtC70O3j7AxyfMCa8ZKni7\n2xlXhP+K01EFyALCKnuD7d0JdQ23TgW13/CRuTT8XZj0gWFZehtMMrDJoOyo\nTsZBBO9anBTZMehgRIzPIZPInMCNyxejI2LphQ5yi4CMuhm+spnRWhIUWIUV\nASu2FuxoWTGxCZSQVZA8PkfGfw8X/TsDSYF8jjCUlME65ecK9hGJ0oSvgDSp\n+gy/6vTYPVWGbgUduIenSTMcHhDQ26bh4rtLlnOZ/7JZnlLKfkuGI0/4kO2o\n2n+1\r\n=q3iB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB22zQH7Zwq/Rj3t0SShZ4vQSgbDiQ3MgWlY613FdloZAiEAno85NCyiEkIhSN4mK7UqNJtr838anzkC8UxBcfHzALk="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.0.1_1594814811325_0.3785742981550271"},"_hasShrinkwrap":false},"1.0.2":{"name":"vue-element-customize","version":"1.0.2","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"bc77af21ed728c6157460daf7b4d2bf80a1f0c5c","_id":"vue-element-customize@1.0.2","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-2wujyNi+u8lhjuaySOhBbNobPRc4OV+c9nwVcgtrkRaPXJUnxh6wi0ERgDKKSvngs0oSkIdRmyV1BQWQy4FuhQ==","shasum":"9355ad1c83f5b92b39de275875053564f3477ff9","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.0.2.tgz","fileCount":32,"unpackedSize":164948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfD7rECRA9TVsSAnZWagAA1ocP/0ccAY2RCaexoqAPmc3g\nuuNRE/7us/irqSpY6O5SKslgoHglMBD/wTH5WE73ixuHQJELdjhwiJ7/4O0S\nTqwNVKxMIDmEnE9M1dbECYjg5YeGfjVDMIOldOXWt3Ft00Y/aVX0GqIKdsaS\nH+SlOXO1kChU/tCRGiX6vJgUCqAZ7s4W9KuNfrYb9PJ5wFAmSx9EMv03UKW9\nmWjFKPLKlQMYrm743SELftMnFXJF6SlpHnPsbjfV6hVQazFLhq1IxhxuDgF1\n5o/I31ppQ5Il6RjNASgNdqdzNMTAb4dVBSXK32dOI1zFWZrwcfNplJb6AVB4\npq0kZIUtBA20OEw/K5qnyX7UfvITi/Co8+4hP2v2XqGo4oYp3zjpHFo1PyA/\n7TDIB3d3l81k6h1zF8w4i4e6GlRb2jwBcyJ+inO07U/JvhFSUgY7bB+Tqm4t\nusvG6BFgONHyFK2Yg7wPqivkYEC9VUc2lAg1hrccsBBog+ZIewRO7zBBUPCt\nMUugyxjXIHE2/E74RL8JNZGQGzgMVITf57a8r7M4VukqOp8cCVkGNxLVyzN9\n2lP06xXB11WBgAfnVT86yYDmTB+lXyJCcT1TApqeB5kuUWZh1TxByhhlZQs6\nPYiDY+gfrkkFYmxVIGxykamEiLXkObs+Qqmx5sc8i2PUPuJ17yCp6+fBSVCs\nMbMj\r\n=6zb4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCms+FUJwvyGsncYdYNkbStD9uCnjU2zF9DbZqCHrM6KgIgYu7h+4Vrmw7GcvroOTz+D0qbKp3dCAVrZ45XciYoV7s="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.0.2_1594866372177_0.6901957926986848"},"_hasShrinkwrap":false},"1.0.3":{"name":"vue-element-customize","version":"1.0.3","description":"vue element-ui customize template","main":"./lib/index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{},"gitHead":"39c81c1c695f61fd4f7aa0d06a1f68f50ee6ce3a","_id":"vue-element-customize@1.0.3","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-5MolTTCYpNrDtAXe7tO/4PAMRjGfk+BR5iX8v5GaQbwhH21ucvJaeJ3lXbPGe8hOHZ+TSKeiCDJekq71et/jCw==","shasum":"9c0afda6e91e2ca824941b303a0ba75751a2a34c","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.0.3.tgz","fileCount":32,"unpackedSize":164936,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFmYgCRA9TVsSAnZWagAAuegP/jFho+dxM+oIUywXja4k\nJRNTXgwyokwHWJGF3ub5e+3pVE021fcSJr6CScuXBusku9DrMzissFhjB+zb\neKFD2gNF7lPmbqFWM8sXngdgBnMRosz3qiOCnPI3GBMg65GjFeTHELxkNtDA\narG8Rxfd6z5ZP2BLxs1BlA40/L9fH7cnjiAGgZ+rey4CHcouYsfHqEjPtENT\nMppNTnoCDJjZZnT37Y0EGSYRzeSS98gxasHBAnK25kiXJ0/z8X6KW+9tFWQf\ni84GX5NZBAAjpHhpE7aaC/3VIJwWFlSO0MTUdM2h5um2aBBsU3cHSxlK2sHu\ntUWFLHxq7K7rjtDi2ORL6UN61f37jorzHN1cG5Ruc7IsO++NYgSykzqA9+9w\nD4s7cgG5ldWfsjZu2OJI67w6e0mq8ahc/45JzmM7Ajuv+dYikirKyJm8gnj1\nPIg2FvHI8EMcgZLpjJae7ZOKCGGlfVMUG/WN5eCV/uUJbWyQvqAOKrU9V0Am\n9HYvWMuyAGhidgRBFFEH24tDVNFsmUohyiq7TN1x/BCork9W1XpUoG7reT3T\n5k8BnPpTiM9DF3JBuj8X3bfSXfsnx/8E14WIXk8tXZGROkqz/QAKaYmlvZGQ\nYk/0XDNByb17X/mOU0zUEY4l1lxztI5/EywKAQFbkTCwx0CmygW4SIcRAE5U\nWUyi\r\n=ayFN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiRIBGKBH7t49riHJVM5FAjsRj1NWpNeE/2kBgZohtqgIgQxExKIV4Hl9ZDgjTTPf7a1BvATe8LQfyLHi28Zydz64="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.0.3_1595303455394_0.14073640533147036"},"_hasShrinkwrap":false},"1.0.4":{"name":"vue-element-customize","version":"1.0.4","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{"@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","element-ui":"^2.13.2","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1"},"gitHead":"1cdaf10bf159cf7374796cb34d7009eeee7d973e","_id":"vue-element-customize@1.0.4","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-zoOqxcCV+xwMrm/XwKPTNwcSiGZ2aER9QN29H39jrswV6/8BYh4dxbgTuj+du0SNvBJq2Z8ZJov6Mfk2wrK39w==","shasum":"7c5238f38963e0261c70b39d2750a502751a9500","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.0.4.tgz","fileCount":42,"unpackedSize":1878240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHuu1CRA9TVsSAnZWagAAoi4P/iMVx31S1qovgMf9rzMn\nfCg1axVHG8Rk5+JWxBf3TWp12ZU28PzdCbhPasA0R+uuNuMl96m/NY9I1soM\nQtphP0AKoe1uTqotI5RQDw+mF6eowVzniF/h8SKy5a/ipTfOT2GNPQjWXr2C\nCWikwwNdtTIH1/YhObmOTZPKGz1d9dUC7Rft/QnhaS+LAOyiAbggB3CSuFby\niM6n01FnlFKw824/0obzQnINJG1FbWUiJuLpNaxwm/TAYvS7NABO8JlKtRw2\nIwWN49Lqh2v1YpZtbxwldPefFH0ZsjEwAUbJ4WgXJHCX054oDRXyZ4en2sZ1\n0ABNBz4zPDhxdpoobZ08YI1jI7vk0DpMFHz8HzXnzrmhrI3DBAX05xm4fCwh\nqpi6+csdzYT9PPdo2NGZ6SrFZAQ65N8v03jTSuAZ2CZX/9yOlSbFXIa0E+LT\nLDb1a/O1LcPwuuIbdWf5Ok6qRSstkZhBSUA14BOwOtQjYPtwXUo6W4i3FlTr\n8tGn2Cz7JgJAmDt81wLj8rdQoLnxB5bC+MQBUUhkjjLvvvJi7c7xaRlOfZyQ\nMuzvllZIUqGTxRpxlcRlIUz4+Q3kA4G1UbYAm9+1heS5bHRz2tQ/2DZtPAnP\nhg2sP0GAuhwZNE9yWylvbt2DT0V5QoUu3pjtGTdiyXaAo2oh1+XtpBq3gBOh\n6Xe9\r\n=eB41\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHbi9FDcUgvxm1bw1nYZ/m8xMZSgZ5J3PbtAGzlXWj1iAiB+ClidbBIDUk+/DUy4eN9wHtYpF7jP6SHoitdKIpCedA=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.0.4_1595861940598_0.4963058404747014"},"_hasShrinkwrap":false},"1.0.5":{"name":"vue-element-customize","version":"1.0.5","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build":"vue-cli-service build","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{"@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","element-ui":"^2.13.2","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1"},"gitHead":"a2e4bded4de9d4e8e7b9c12f0b5351254a2416c5","_id":"vue-element-customize@1.0.5","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-kVDkMe1geUKHWuIFqqRBIkHef6DjJQOEzGszxk8UH9/2armd06ie3yGlcZtwC02PNxPPVYGumsv/1oALOOYf0w==","shasum":"d2617266c3980960cc5839711869e27833c52f37","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.0.5.tgz","fileCount":52,"unpackedSize":592926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHvTLCRA9TVsSAnZWagAAxioP/3y3p5LO/7L15ZCriYu4\nPZuslV43tjGjfAi3OWkGpKriCFiLsFl7GknOyWyDc1ctYSMdVrenmooSGk+H\n1INaC8buE6wtB1r3lElHuRwWEgkQH5Y4XmgKr37KLxH7dwk3hP/2xXpRALZW\niLbPSYK/D2aNY0BXDh0rP+VcG8Yez/Kc9VTEp05TEymqYHzjwzW/WlrrbhwL\na+Ch3JU4OolDnj5GIzDt/kYp826NhpooZPRoVnfifC6MKWpH3vpwo+GVKaXg\nCf7q0WdQANi/SiBVDVFHnqGvJKOb2NdULFKbqB0QZdfKPk85hoed+fgnEJPw\n8n4JJTF4k8Ra8G6iXMPXbw/O6KlIcrQ0AT00WrzOjaF74Jf/yM2N/6Tj46TP\n8zZ8SHzYD7GU6ZqzmdNIsPMUQcya07W+uokzhvt9TnaPY+lZT/JX5+gYdxBb\njs2HpLJZAv53vNrjz+WSCYeQgL4xySqylY44e3HoXX4AvJpqfzoJikQoMI6n\nvDEZAJ2+HEuBUvn3RPATp/EBULs/3PemJrZuLJu5k93pTSjfWHQ21Ktya7GH\nslEKKi5n0aUxp5IIGr/Cad3s1AJzaOpvQVgPPdIU9cBgRcg5xRaUDOZSBPbv\nYy8yUeDeFQvgMjTT/eo9rZCUkLLFFbPqR44cCCKTQ5cqW2lAW/3WNrv76zpT\nni4S\r\n=lMeA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIElHhgBvfnKVANn8m2aaGk3h6vVoaV0lEZ1EYSAQRROSAiARNI9vTtHlEmSOYbxQJRGUguchT7vEhLORMIVsZyOA5A=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.0.5_1595864266915_0.6899779577289218"},"_hasShrinkwrap":false},"1.0.6":{"name":"vue-element-customize","version":"1.0.6","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build":"vue-cli-service build","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{"@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","element-ui":"^2.13.2","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1"},"gitHead":"57b721533b9ba9ab9a494ab85d111a224b658541","_id":"vue-element-customize@1.0.6","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-bC+rh9h6u3+HUdNTu6bYAsWCsHmmNGqgqfStGaFET1nZtaYCloVelqZqqjHor68OvAg1GJJHWmPOyyNWXoouCw==","shasum":"87131e0fd9204e2ce2aa0a00dbd7a1ee7e6ef2cc","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.0.6.tgz","fileCount":45,"unpackedSize":707080,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfH8j4CRA9TVsSAnZWagAA8zcP/j8t1+cNtSuGNFczQ7Hf\nuxSZ3LjmjsEs7SR4h+WZ04qaH697b4hmVJiPCU6u/t1UuoM1LB7fLRdEiE06\nXAlrSr6PLAqsVXtGrhwI46qHoIYzeMg4bV+HANa2y7xKKpLlVtsH/CdhJPq/\nmoth9uYrvaPEn5FE9HTKdisoQ3CIGBbqT8PFcU59KlSmJi35O6IOf5d+uapO\nxzkUz/+9DqW8h0KSZPfQM2jetPCNDdE6DM97V5nAkgUWzRGwg6DlWnfYxm5D\nkwfszaOZ+9ttCkGEODFme7WIjWc1dnROb5LZToPy0wsryoo6CAC/00cFSBqT\nXCqW3JmyqUpa/h1TcCKcbQkrMhOh5pixD6pg0ORU4tLXDNqeHoEbRqxYQGHR\nnq/Ea7RoRTT4UA9wPnWHSlValEsHHWiZFZUQIrfrqfxjDBVPWeVx0VLiC1Sd\n50o/FeY35pd06Rg/IOQtOQ9g4QPhlAJdLENYD0V/2lQ4eUYEn/uz8E2LU81O\nNwth5wia945LpiPRlRx5Q0xRNU2vGtaWjMMuRhY4ic681buuZepx0QDrkLIk\n0OUnnNobmmuccAz4JbfnmxDcG2dJ8H7LLjV0iijIFCd29ttRZSeFeAfKN6Af\nmyR0XadcT6l83VAdKMRu66ugk6+x1Sj0IVZJDbPWsfWApzsrgqJ6V13N2MFW\nFtAF\r\n=a0Yw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/dt/Yc65PQlE7OKSx05bGyxHel9rne/hh4X3irzk3QwIgO3BzT0r/b/6daS0clRCuvxBT108l80kuKpbDaKYRdu4="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.0.6_1595918583752_0.7737495249523723"},"_hasShrinkwrap":false},"1.0.7":{"name":"vue-element-customize","version":"1.0.7","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build":"vue-cli-service build","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{"@babel/polyfill":"^7.10.4","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","element-ui":"^2.13.2","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1"},"gitHead":"f9ca744d41b0ce83c63a4657fc97bda775518be3","_id":"vue-element-customize@1.0.7","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-lJqVJcSlAmN5V6rsGYZZl7w6jL3umJICbI1zMEHE9o70n2IE+UTtykml5UQFYc+EJ6ybMuhWfpSDfb+yo6hCeQ==","shasum":"31b39389520dfc97a1c01415382370e7d7384239","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.0.7.tgz","fileCount":43,"unpackedSize":702316,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfH/gNCRA9TVsSAnZWagAAgwsP/jSsLtdCs+dZ/xCzk/V3\n5erCEXFZJDJOrPrrzDSjM6UnYEJWC8BLDXQ8OErCj35e0xZl3hD/sHDe/8+I\nL0NoHusvjo/lFIBOjn9K8MmbSYZnPyVUy1oOTJpEKG0oBYIk5NmbG/mEmfBO\n7X3jNCrI9yiaSxgMDXncOJ3wK+HSgEz+v/lci6s3C9U58fVYX8AQSz/4ONl+\nVfMCEm0RIRLINztFidPDQ8e/Y6wiWBgPh/5gicThRbIGpo9oU5tKOlduGdTw\nuKZYacBDv+L3qkM3S8vj9vyamh24xwdaQMMhSpe7UJ/LoNs82EtAObjjU7fv\n2/EhuAEn+yvbfU27jKzh0eAAadDql/r460DDAa3Cu9t6ZNpcPv/lC7DLKbF7\nF6VaR3UUSgSe01T/wy1+YjpOjB3qofKOXCWL2emBp/RaX07cHLoDIbew0SoV\nsVTDgspGgV6XL0KjI/aWKRrYbtoZbyOj+G5gJdwi0VKtZ+uQRQ5umfmu4WYV\n0o4sAl8caTWZXPgSkeyEFeTPMhBRK3FKuJJdTWZ4vX8iSgCB1emDPHV/i7sE\n4Y3pAuCERq2vLp6XQpsd/gyP30t8N7cKswMK7R0sPzsmR3wz5TCOJ1xnIUWY\n9JccpUu78TIrGpG6UwEc3jj+OgNm23hSUK7sxzPK99/Ou90SU78b3MEGdxIA\nFwkv\r\n=lx/p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdZ54Swj1Usi00hhZqlhSbMhgdAZ5zCoAbHDw9lxyRGAIgE0Z1Iv1Kjr78uFGuId8bAflwNC550UU7hx+zDiqfy04="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.0.7_1595930636832_0.5776524199373994"},"_hasShrinkwrap":false},"1.0.8":{"name":"vue-element-customize","version":"1.0.8","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build":"vue-cli-service build","build:utils":"BABEL_ENV=utils babel utils --out-dir lib/utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@babel/polyfill":"^7.10.4","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","element-ui":"^2.13.2","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1"},"gitHead":"d5b0cbd7c0c746866344b70c993c8aea30d89722","_id":"vue-element-customize@1.0.8","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-v1Bma714hH7f/t1dwSI9+wcnYr+S0R4gCoieNK9BND36JPOZb6PVUrkzcyWEkl7dD2PhhMR3L1rw/Naavpj7og==","shasum":"08d47f1deb6ebff84c656c3b616808d69b32a40e","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.0.8.tgz","fileCount":46,"unpackedSize":711631,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIPSmCRA9TVsSAnZWagAAAeEP/0zFi4DOJN0vnK5mAl+Z\nSNDORpmyvN2fSve361IQMN6nzxcOhRElzJsHkXdvRHbAFT6BNKSmIdIkm4X8\nVF/XpWitV7NC0bVhz1m/EUymax6TOrgQnTnFM47YR9O7FW6OBtMrwD6+Pyvz\nZRhwVoqksaLj3hi49iui3F5+H02YZxf5WLJUqm4t9DqgND8NIrES7gTYq9H1\nHxF8Mval5NxJjU5ACKpNv4oZ4YdqPNj6nZfvLNF0acvNYa5PHL/9q2BqHfCc\nbyVbYL7PwS+D/ncGLU37Di4rO0Fem88+cFXwKGJaxWgSi9OEQU7NnQR0iBRQ\n9u1gZKnJajebIqC0WFErrhbvh1H1ugd3nfu4KtZDraq+O2LQpg0zw8Xto1xD\nPJbIiivM3WpKDnKsbilp6C4sfZSK/9J72p89i9pRy9XCKZcCiJ3EH5etM7w/\nsv1jdxIcGnrF4ptAD4Ku1DWSza/n5tQxDMeWaoQmKB86G5NJtr6N7oSZ0Wya\nh3E5wTWU0h+SXJhjbWmWAXbc1QDvvK5ifXijDxzWW47vI7twma29qq/uCAYn\nF4wZ9ytsYmZE2Bd+krBEqB866srxkzf1TYeYYI4toy04F0cQ2V0ksRS4loj5\nDV7/jsWHqoaLqtHxwQw4A/eyga6F20FJAnqPxxpS/o27iaWywelHJS7cIwtE\nq47j\r\n=7uPt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+WNKwvuctVDmw9I+DnLjCCtMEd7Zxmjpe7JsZgGMs7AIhANGEdUsxqQBLS7z4KjMSpQu1vFPeLrjoYABCvsNgzYdw"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.0.8_1595995301306_0.7475962366750812"},"_hasShrinkwrap":false},"1.0.9":{"name":"vue-element-customize","version":"1.0.9","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build:pkg":"vue-cli-service build","build:utils":"BABEL_ENV=utils babel utils --out-dir lib/utils","build":"npm run build:pkg && npm run build:utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@babel/polyfill":"^7.10.4","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","element-ui":"^2.13.2","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1"},"gitHead":"9667ce629d9d8d2023febd3a629d3a114957c3e5","_id":"vue-element-customize@1.0.9","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-i5XFD9w9JSXDZqzsaXG3Abx5kVW5Fh42Xd8YZnWzbOclM2WOqrqUNT2tYDB5+HBFLPVUwrsp8wrkHXkIp6JFlQ==","shasum":"a62329ba3e635c56a4b46787ae4d7c90ac06b62e","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.0.9.tgz","fileCount":46,"unpackedSize":1231504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIQ/rCRA9TVsSAnZWagAA4BIQAJIcjehNUsQT+U8ERx6T\nDwSc2wAYMqN2I3Qi6H9WVgqD66YQ1GhwpVHAQDK/oe0h9E0+k/fwloQlHOjH\nuC9QSLbCp0ARYoHhU211zYBWmL8iB3pMfc8c9FgNKRd7FiAUxVBfdbN8BTzh\nkTD53UC0DYc7RjmN+POed4V8++L6ecNFZZpk8NL2SWfMVylcV8QEE7U+0ksS\nvUhuOG852MLjSs/ZWJ99Ezf0jMksvc+yNKjSfE+IChDf6+7AEX8rmHLuEOG3\n6Yvw4exBADe/6EvWOyNq4e9UEIKMo0ksvYcv53mpsCYxmGoNIVA4wLdTJld+\nhgDuJU1t1/1c+uNwJrybgn84C3HdeeALIiAoTX0cC9H34VnrcsOi83Yrv1AX\nThLyN5ptm/AHtiaue0TRVr/vjZABLrmIGZ+hrv92WsqIbAOZ+CVniPLfFl1d\n4VO2VNbtwN1W7rCvJ2yHMGlnSAQenffCDQSbCtB/N2eozGLEDlaqPKk2DfR0\nqrys/PVOL1nr1hBZiW2NgzObu2rqKXnCvMlFJGLRD5PdcmyiOLSe2z1TC4v6\nDRE7Y+k33E20tmkX83gT1MABajvtwG7X2THvqt/VMoJcpW1Ws9IhAD0prOP1\nDPzk/5ZyvxqOxWAGNsYRazM9e7QRNxkIcxuS2RpFBi+jTwqKvAcHxwChrFdO\nebm4\r\n=ajY1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHfjyNO+IO6UnMvT3Gn2vaTLWWQzqJ1w4+STQI0f73lxAiBdXTblN0MUq3bzPxRWa/sjGEQBlj0KpibrBsmCgdGKKw=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.0.9_1596002283051_0.10748967907827445"},"_hasShrinkwrap":false},"1.1.0":{"name":"vue-element-customize","version":"1.1.0","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build:pkg":"vue-cli-service build","build:utils":"babel utils --out-dir lib/utils","build":"npm run build:pkg && npm run build:utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"peerDependencies":{"vue":"^2.6.11","vuex":"^3.4.0","clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2","element-ui":"^2.13.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1","clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"3e6b3eeca877eae2489a31a81da04ce10cb1f2e1","_id":"vue-element-customize@1.1.0","_nodeVersion":"12.13.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-UInis3D1sRtmi28dzw3ExdOfcX9ybYxwH+K+ONYbxPwLxa5HPYnWpyZXErEd1y0DPzFE8JiMCABuYtxBi7+6vw==","shasum":"0fe36226d68e0de18b578f29f8beaa89c60d0b6f","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.1.0.tgz","fileCount":46,"unpackedSize":753197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJPynCRA9TVsSAnZWagAAYHoP+wRvPOF8lVrm2d6chWEg\nnmxpiDdIeo4cLYiRXlc7142ndII8SeF6ILOQux5fCosOfuTofoIuALo0ctMM\n+XXSq4XYB3CzBoGDKmVb71DM/ZzELlp1BmZ1JwXHOk9ofhRZWJcPkaX3EF4x\nH/hJdkrKATSPZAXMhOfN/FM1m65S1/yu/uRpfjOTcrdW1LquEBzVAIPoiISy\n3SaE9ZQdj1ElwhLZp+qXLwZuRJhlu19YRvSjTZo0cEmLHFypfXTK5tInK7wY\nDbG5bDh0WPdZcPQIScCbyEJ0fB0Zi0/TNTZKDsy3Tz3PPAzMnayCdR7BxIrq\nomd3/RdcJV1fBJ5zVcDDX+cxJdBV6jfkaHF4qCTcxaYEJEadWaJ4UCgDgU7a\nucPIA1I7DLPQWmAZMRaKg6tbQH2dU6lfa72DeBTiPdjLZtOkztQ4OvNtVnW4\nxVuiaNtiUFBoYPKJf9tHp145PaqTjmhGtC47idwtGqmyZ0bZeIWBWQWKFf1W\nQPSDJb9CxmZhTxTMumXMRC6Mp+dVuMMgms7TR6B43UzQDr16+yUg+Jg886f7\n2ifM9rrAyvyPJ/lZfxiiH8KFwGwCHQGGcBN1nlMCp6FHbEwzdXjgYLAMc1cB\n57woHg4euaEOU1PGpyuqn8cpbROh3d8Rc9xY9w/C4bbasbhVu0PYknataOXT\nCMu7\r\n=NSnu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAfgncAH6Zp0PB7hQeYBfpLkcMu8Q7Gpxju7fbR3MHmDAiB9PWjPDoP06O2PdvLYXjXM47CBNQpXq3zzHylQcKq8MQ=="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.1.0_1596259494715_0.5308199079975886"},"_hasShrinkwrap":false},"1.1.1":{"name":"vue-element-customize","version":"1.1.1","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build:pkg":"vue-cli-service build","build:utils":"babel utils --out-dir lib/utils","build":"npm run build:pkg && npm run build:utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{},"peerDependencies":{"vue":"^2.6.11","vuex":"^3.4.0","element-ui":"^2.13.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1","clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"9688b4c33efc8402a677f546f59f2ecdda6c835c","_id":"vue-element-customize@1.1.1","_nodeVersion":"12.13.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-WIjqg8MHIv62YcN6BjFpDM05sZ7Bx/JkSkL6S0B4QYNpTmvXzo3Inz+ikd9pSdsToIgpAlGcHDCUd99lq5/dyQ==","shasum":"59adfe6ee3db8b9e738517eeae4c571f589d7ea4","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.1.1.tgz","fileCount":46,"unpackedSize":753106,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJQrZCRA9TVsSAnZWagAAuMMP/ipKOqOaPnLjl0tcEqBw\nNdagL3LxxP+iRlnUNOPLwOQ+nwr6yO2r18ZVfh1hAhs+C5q7oxo37j4MNSZV\nLE0QXA/uk2dH8jFbRvcH+QS5X38rk0ZPCoVlvf7ofzgbQ0t3Nlx3WQhuLDow\njf2rprL62jUWbS0TaDYsNUPBWIEIA5KuAnyCR3nmKQZE1XrtKRxqkMYMiCXl\naQnEJ9e63IspPCKOg5MRnpKyI9tRrQ3pS3+NG/eml6BDKD1aizrTl++vf/eT\nqyQb+4+37p3rXImi2JtkHnxnQC56IahmaJwKrOCzOHGEv/eXiFdUBagOA6Xs\nExh3BJGBNc/CE0nDU/qMgcg9XLphoKkiZK6bUZFM6WEUgnBk38zDjuWfq2Di\nR9vddMTbutn+9z4ZmNGy5n9G2vLDiFLV7WDrfCNUBTkcr9UuJcI6FWrYOEmN\n0OPowsUta8ay0QyX2YtLbJXMcpJliNOfKOpvA7mBjvNxC4lYHWSGm0silR0D\nYAXwyDs5eCSoR17UJ+OKoAxkP7PFL+K0AEwzwV+999Gl9nYe8t3pRqA10zK2\nVw3hfRWETcj2Ri5InwoToE8iyNKczkeKKIWL25toPYEUWYE+jJV2WVplk/wS\npbTMFvOoMUVrjZTTrFjm6bvYzftXw+77v3VaNlivVI47FMC2QlI595lghrH6\nUfOs\r\n=fDXr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAHd7ddlhPjEfrC+CUQEQygWjP377CLIzQz8PtAUilkhAiEAogXWbx6jyKUTMdeAgXo//ygx7WVLNnfvyIwBbOzWhHE="}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.1.1_1596263128310_0.5922124218187592"},"_hasShrinkwrap":false},"1.1.2":{"name":"vue-element-customize","version":"1.1.2","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build:pkg":"vue-cli-service build","build:utils":"babel utils --out-dir lib/utils","build":"npm run build:pkg && npm run build:utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"peerDependencies":{"vue":"^2.6.11","vuex":"^3.4.0","element-ui":"^2.13.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1","clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"90e7547eb9108c66cb5245711a265714375601c7","_id":"vue-element-customize@1.1.2","_nodeVersion":"12.13.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-sLPy1vFmhYqieOAv6CrdDKQfD+vILxP290eO6CpgY4Exq3pK76HrCqt4ilTVXo/xrOJkqwvaVl0IvEIzLjhLhQ==","shasum":"781ebf8b17c9e35c389ed531049ca5c33b5996dd","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.1.2.tgz","fileCount":46,"unpackedSize":753199,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJQvXCRA9TVsSAnZWagAAgL4P+wZJosO7V3vbEmQ7nwgJ\nUs4BfZjiDao1v4+c2ItJUhTr0wqD2iqIlYWKa3WQTTQ+DPuh2bilqBSHnnKQ\n1qA0gWb1pKmDH0bSJLeQ6fyLQgxQ+oxQVjUEvr3frvpyXVc+4XLhdP99Y7bP\nPSDJSDquQbNS2VLalXS2Tt9V4hTwit0OMwB/NukXEgW2KuasHB0W3W4PSyMN\nNyThFCnY2TA6wF2TXnDaJfp8bgMfURwBztbVU7Ss949eKHgVvw6Q8OMmF2EB\nWnh0uiTdPVHsdI4BUrjlfLHdy97CnBJu002o3XTDCZ2fpOGU0EypzeJ4ex6t\nPNNOebtWusUKL6OOHNmfJfa85vYEPgmjrDKp+xXxBG8RXOv8GCnSimWr4BAL\neLlvrIgpawUsGPDzvbqUoFcekPcvICkDRpCJEgB3xGaJTnRGXw0mJOPID7Ne\nmd3Xj/iSlVsnd4wSo1b2H5XcOaThEDCNTk5FnfUlxuv9q8R5hYrlzsxznp9H\nQ7W+fjnD03eQOF+Tdi0BAtbl8XTIR8BQ93vpUk7EBYkDaNETwTbj2pAMSkQG\njQ6RJaNYIZEHe7BtQNkWxU1C0TCwlZX76NWle+7Gm9sxgA66h+ptt+8oX8Br\nhlPhMtc3//75V3QAqO+XbrK2KXwKguIuKaCPiYo9TTz2M2YF/fugxoKckpFU\nFGjn\r\n=XnbZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoH6C5e45fR/VN3pc4M7JqDfrc2uHTO/Y6YR4w6ScsjAIhAJ30BiT36ggOlnDsK7HESQrq3F3LI7p9LJWCuerpeVRW"}]},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.1.2_1596263382420_0.7262740580251996"},"_hasShrinkwrap":false},"1.1.3":{"name":"vue-element-customize","version":"1.1.3","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build:pkg":"vue-cli-service build","build:utils":"babel utils --out-dir lib/utils","build":"npm run build:pkg && npm run build:utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"peerDependencies":{"vue":"^2.6.11","vuex":"^3.4.0","element-ui":"^2.13.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1","clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"d96a934a415e6fc0caeeedabc04204432bfb704e","_id":"vue-element-customize@1.1.3","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-2LUn9IyiIX3dK4C9iCho9WRdrtGTduUMIhIL/hJ0osUv8mbRpjmP0Xt+75UGGN+Rv7MJugPaJbNa1o7PMcOowg==","shasum":"f7cf80b34f2658c4564d78bc8d75a8043806ee74","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.1.3.tgz","fileCount":46,"unpackedSize":762819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXF3DCRA9TVsSAnZWagAAHgIP/iY6vQr5gcEU8oohOh/O\nK0qEtEOPt2YNh8PN0vuDUWUq6bYtkYiVnJeKsN95Y6V/jvzwxAIdpOEoJnCC\n3fz389Qd5miL6fdNFsyFbds5oSWDqIoe8ghNIS0LDsFSVAJ+EBcTSzlBxh+E\nMwkJT8k2IRHKxcj3Ls+YjtKvL5+JsIeG/27+MiN6CaT9O+iLrKu/11amKfv2\nHpepbaqG3u9ihW+ZUOOpEqM9IO2IB4r8QPN87mINYxZn0bcpgYECYEQV/1LI\nktCr/N88ahfgYRRgjSs+LQWCHg0y01Jf54Oq+tHwd1urH0D2A1Py9qwZIwAB\niKhoz5LaZmxy2zjN4G0WzH863k0ncDAuLiS53u1eKlAYDy1wivJsei124wfQ\nsKLxgzyt700uFMcbdsxvj3V2e129V+xddjUB+p3YJlHv3JL8mt0pD+FaKWyF\n3vE3VyLRBQ5xB/xMfAbin6rGMU1zqfdWW+qPUBYoE9lzHApD0Lz9afXPHQ3B\nWr4/WjyRK3Gl80qmQB7dAgPQd7LcosfIF/cfUS2Ggu3SPkj7U3k0Mh0vTiPx\ne9GkGifUnvuE4Hf2SdaawwjzPfdn9VNHsj7DrtPFoqv360M2qUqyIDomwzty\n6cjhjmIeJFamIppPZj7P5bTwkul1RAakL0MhK8rpBFRd2rdGS6sIUOwCFcub\nOsQm\r\n=Ekya\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgS5GWoxrAExMpvraz8AxHzdPc9qsWuJwPNpl49rsosQIgANpcSFJC0X4/Ldl2QpXxlcFrlkdlDcYi2yxL8D5YsL8="}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.1.3_1616666050780_0.18218333196606507"},"_hasShrinkwrap":false},"1.1.4":{"name":"vue-element-customize","version":"1.1.4","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build:pkg":"vue-cli-service build","build:utils":"babel utils --out-dir lib/utils","build":"npm run build:pkg && npm run build:utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"peerDependencies":{"vue":"^2.6.11","vuex":"^3.4.0","element-ui":"^2.13.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1","clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"f7ac4053a2478f2f90414f2c2e73bc9ef9b29a3c","_id":"vue-element-customize@1.1.4","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-B1JDNMeAEtJUdERpXT7GelcZS8msF7VbICt94WzD0vmH1Reeuhi4TFvL9BlsrAtIDu5je12C0JwEAedBgyYJDQ==","shasum":"b6dbfb5c66f15c2bf3287ec3285f6aec06f15648","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.1.4.tgz","fileCount":46,"unpackedSize":762839,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXGB5CRA9TVsSAnZWagAA/kEP/2OVVYUnOtj+SW6qzioL\nOWQ02wvC4BHIlVGwc2LVJ2OU2s48LX5aMX1LhbqR2FUOrB+tcGu+9LL79Xrf\n8Yr/FsVBb53gmufGqrDo6PRHEMSLdA2BF2L1Xhfi1OTWHAQVX76rF5t9EM/T\nYAXnUBfmFzxGB3eg6nVgdcDewi9Cc2s/lOCTHxfZlfetkL+tyEdijJDfz8D2\nIo2pe4UmoqiIj649Iy6cYFOpWkOOoTEWGh0bUr9zBK1s0jCvLWz0ppxQi0Rz\n0DMsnMLulgTUDh0jfXHVx5pQS/A08f28yQPC90xHPSW2+hA3OzxLZZBWx1Ea\ne3XBjg5pK/RaSBGlcp+E3W9heoon8acxguoVKEW/nFEv0jAD6Iw7caOLA0Hz\nIk9yWQVJzJF/lt3ODG8GXVskzHK82V3feBrwlfgvDkfQ3V7Jt1xOK537mDw4\nd2tE24/utMXrZyh1fUExDIBVVrVTqZx1FdSYBxmmQntW9QTLq1AflDh+EcxX\nLHioRaFq3K3S2ZjJbygZI0the7+tPGLb35I5QJ+gTihks9Pbbauy/ycuR2dt\nznac08QvQH5g+2ODy/BFJWFhCjmvZ0nAQ+j5jS6ptT2Pttf7+NfBSvS1oyMv\nIX6SArPilQi3AWSgIlyacukZHfcsuqTdbnulUXUAPHW/YxW+tMYT18acsEmS\nhBG5\r\n=bwfT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFeANtsHWcAp1BHemIVhYUPW/YHIkXbcnOiSijSVQnFdAiB78kp2kOSuvEXxAk17/o1I57YMABypjJMBSyo5N+ec2A=="}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.1.4_1616666744979_0.3897667562519882"},"_hasShrinkwrap":false},"1.1.5":{"name":"vue-element-customize","version":"1.1.5","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build:pkg":"vue-cli-service build","build:utils":"babel utils --out-dir lib/utils","build":"npm run build:pkg && npm run build:utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"peerDependencies":{"vue":"^2.6.11","vuex":"^3.4.0","element-ui":"^2.13.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1","clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"3938d25d934854545e3f7f5a2aeec6e5789c0340","_id":"vue-element-customize@1.1.5","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-S/mJouVBnrWgTyMpjlJz+G+NILQ+ltsHufQdBBC7LaShhv4tt+5M3LK2fmJib0ALleEkSn/cN+gNg9/Jl21j8g==","shasum":"2bfccb76c5db3313d76ec5784418be9c886fff6a","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.1.5.tgz","fileCount":46,"unpackedSize":762851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXWjQCRA9TVsSAnZWagAAc/cP/0vmzIvd/gvhG3+rI19E\nOkuFSUJKVR/NL/1BAl84Rduvsf5ozfb4mUMKgO3B2JnEryl3EA0sfYjoj2IA\n9nd0naOeTbmQPcMXLJYWJ4Ul7wSg7XX9FMp6Yohxdm3OIs8HFrIUVvbdqED8\nz7QWAP1j1iJll52ZTy9Q7DXu6Uwqjs82cRZoMb10/DZLvTvC0S0XIColtK5P\nWUHltBa6eQhi135feWBPNPp7C+s5kuLmv3OS2x1BFLeaPi2zukAQm2bf78Pp\nRxE76/qEr4Acflf3UHexiBPpdea4rvNnfZ/RJqadhIH7uXQOkaAKuXkAQ2c1\n4AlTuQ6TkAk0VzOYm4lrTjRsVo2lo4M9dKzOEfGhRBX6+u9UVgCm5R8UDjLX\nX9NKBy8KSsA5wjHXC0BkSxySAMI6C2AMZIAn34h5kxJ4I1fojHrKseGqjDQV\nIhww5yF4WdEgwAmfxEG7JNnvCrgDIVpiJwwjJ+MtegwGQKtopEFEh/1Sbahi\nmv5HvcAjqup6c7QTI3T5gpQCUcpNn58mtkyiU0e4Kadi1QcgiAGP7spnT+3z\nXYyc7UAdDMDCQnRWTL4WMiMmoM4jqO3hhLfGfbfII95KlbNGyAkScg6zKv8d\nlANPaPHqCQMiAoKby/xAAzAh6kZ+WaGIlNds0nlrFooiOtcSMlKCoRw3yNmq\n/wrI\r\n=awzy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFdCXaJjDpGoESTtTcMLb8VYoZ81H4//xPHuFQBnHy8RAiEA/Rxr/dhJipeHs8gEsbBbQaEUI/BSHluhMJhqfIGqKbE="}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.1.5_1616734415653_0.28754510655392207"},"_hasShrinkwrap":false},"1.1.6":{"name":"vue-element-customize","version":"1.1.6","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build:pkg":"vue-cli-service build","build:utils":"babel utils --out-dir lib/utils","build":"npm run build:pkg && npm run build:utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"peerDependencies":{"vue":"^2.6.11","vuex":"^3.4.0","element-ui":"^2.13.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1","clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"54dffc82c6add447fdd89ccbecc2858ebde2b405","_id":"vue-element-customize@1.1.6","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-a2LyueHcM6+jpaJg/s0ghMefFpoDJTJthlAjT4hStNyIM/sAW98ZyEdrNiHkvkPml+7Ijao488shFIKHN8Z42g==","shasum":"4856acefc9ba0e63be463e6a04abf1367b6af552","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.1.6.tgz","fileCount":46,"unpackedSize":762854,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXWnOCRA9TVsSAnZWagAAM5wP/i9ckKqL9aN5EjMCtX9M\nht7jGbHAY9sTpKd9PEm0ih/CWW/cCmmenlIuc5JeCEL5FamsZPw5kJV4gRWq\nHx7ihJYqrYWiLpykkcqFL8fTlnxqHC1iFCrDFGZ6SnGNVZL045RhkeB0XJHt\npny5ZuCHd7PSPCYjqZlUFmefyIRd//VZPk6I5jmC9yKdUa93EYDVcnJeEeWN\nIYu3820M8fEpxr4lt0F3lJt0exVRgGFPr/XdvxOVEpjtSfWg29Ncl+z4d60d\nvDlGKKKvpnYjyQpzAUuxy0uZFNteOt8duIDEcJmCnAZn80dLEIsWrGTi7i2w\n6Hmmk5pVtZxmnBZF9bM6rHuRa5i7bwJODGO31p1y5ahX+1LdYnSw2kWBnNFC\nGEXjOItmsz2acFHncmBzI/fSaAuWwti3OSxANbmrl7PA5gNUOQg0o4sTsijK\n3xFQZg2611wPEr+CjotHyKLabeSQgFjgdrkpKQkwJuzJNHMXibSnBxPCXMEV\nXuII1uysIiHbu/dG3DWM2tfvkz2YIIT021S2fKTRD1rD1NyqQsyrleJascLz\nRp49jKk5HHZ0PsGs9ExTycYEKacNuy22LA/xjalg+TEn83kqjKe65ZstCIo9\nTNWUDfVoLfrqOOJq7v/MQ2JvQzgY6caWOo8tDIj0NpZLRrcASTL7wOoyTln6\neI/h\r\n=iLCV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVgiB4C0XB6ZKUhWk3ru5utDPwdNusWT0nTvTw5gMxHQIhAM17m2DsNr78kHaqtKWSk1LSOWrk5C8t0kO9HCHJA6QP"}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.1.6_1616734670259_0.5631492373644942"},"_hasShrinkwrap":false},"1.1.7":{"name":"vue-element-customize","version":"1.1.7","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build:pkg":"vue-cli-service build","build:utils":"babel utils --out-dir lib/utils","build":"npm run build:pkg && npm run build:utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"peerDependencies":{"vue":"^2.6.11","vuex":"^3.4.0","element-ui":"^2.13.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1","clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"54dffc82c6add447fdd89ccbecc2858ebde2b405","_id":"vue-element-customize@1.1.7","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-qav2i0v0axl4P8mr5f/bc24RInDVx1yzto+Z6BwKORGdn5fHOo422dIdBo7ZOso/VHn1HYYOJx8BsbSX2f1bzw==","shasum":"152f5e485bbe36f080c4a6578f37f50c2ba435dc","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.1.7.tgz","fileCount":46,"unpackedSize":762845,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXW7lCRA9TVsSAnZWagAA0B4P/RRojMeFgb0QDaOCB5jK\n4qMwISj6PXT50/JAbYq9Fg9KsIfWeqlwXZ/lk70gZmismSTNlUbmSTxC0bpF\ngntLugYOc6S02wf4NxDMeDpdqqoNtV2IYiSnvXlmx+BbftULPqVJD71NGpDy\nGNqBniVQmobiorJmOV+m4ifZumsDew+uzw9Ub11ChgfNywDYsAN8EadmZ9ws\nov9rmDfM6nBklI7zoyFY2dlDxy8i0UNXNhBXwFwDU8+S7ttgiucM/1IkACvg\nMedxmqSK8/Uu8at5XXTVh5BN5TlsvGjhDttDM66Ad2+yd5pH539IHMOgOZ26\ncz16mnLd2msbPh5MtFFsPSfkavSSOoHgHcTq7mAsZVKuRNXAL124RVZIomJT\nL+nsFCYUmhpBYmFS8/YtFSajXZHfkvIF8rC/gTen+deYChKojFAPmpYCaePy\nVF9oAhPyp4QwaI2qPg+8Fgk9cbsDJwHZrlE7OFXrWi82FSrCkoJ1E1EWJJn9\nXLDRMPn6aH46AC/PVBUFeYuPt1NRB8rsX/7YyRkUHiXea4RXABcAL/k0NvAy\nkufDHIDQd84bL5oSScC+Eq+7+g9gDYCoTtBf5RPTLa3/xUGIrmhtCUDMNmZQ\nTitKY6JjJBFUzhZwo63V9wovAIokGqCKTlg1osYKOvQI4IqPfrMQYWCvTQuj\nRH0V\r\n=eYH3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID0+JCUxhaC1+3krWI/pxsQMPxfmQNby9avAUCBxR622AiEA6h2fct3fVYjPmmSUobnIX/hL74J8GN9wPIPFBJg+J3k="}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.1.7_1616735972523_0.6541097743403006"},"_hasShrinkwrap":false},"1.1.8":{"name":"vue-element-customize","version":"1.1.8","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build:pkg":"vue-cli-service build","build:utils":"babel utils --out-dir lib/utils","build":"npm run build:pkg && npm run build:utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"peerDependencies":{"vue":"^2.6.11","vuex":"^3.4.0","element-ui":"^2.13.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1","clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"54dffc82c6add447fdd89ccbecc2858ebde2b405","_id":"vue-element-customize@1.1.8","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-KPDsr1YA6TQbWsZWxMDeh1ZBB8DhQqUoD50bdHokn7G/Gv24ap/Ausk8cjrE1Uq+nec2UoOZTGX4OtUfG4bQgQ==","shasum":"3b174acefda05fbd75e147da237c2d566d0970f9","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.1.8.tgz","fileCount":46,"unpackedSize":762872,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXXAjCRA9TVsSAnZWagAAxfEP/iYbudW2G3toUL4TK6PW\nWT2XgyO+qabvls9JDQfxgiYieN7vCBGkuUz+tivEwSH233YwfFvgka0j3PMn\nvmdDLpLnXdK2Y+KtL9M9Nk/IF60o3bgdJCmVcBNQwp70Q3r03mPeA/bOgNMy\neoB1TXTuT0v+k+6KHiUbyWAREyKoXKXB/6ynG8VgQwKcvx39Pe18fjGHR8Mr\nCQusFW3oPjifnksqU9yFZXY/FJyLHaDaooVA7+GbnQJbOtjHBMFQr4zRSwra\nN6HM6QHsR0Bm2GwuOBfQ7SIe3+Ruwbz/4bSKkiV0a6e6Obj0CG8c7kRJrzty\ndhB5i7V7zVZDSYq6ykdnhOYfkhUxTmR9ixsXtora8w1NLpL5DR22gsggyQFC\n4qL73weJUQVhgr/wxXjaL7fIXufQs0JtvONS4zwfuEHFi8feuYysYrr9SD4J\nW5RPe9zUUkIOzlGCtOS8iK6m44TrKyZYPKMPm8A9vtgZVwi+X0kAtJqnkbfs\npJvf+Si+sbv4GbbXqPoGQR3rM1e6uKzdcS2N53oS60Xxg3Wt5Ehc1MAJcwoe\nZ70VEIYnbR69A0zjbOF5511VCTCeqEH2oTKDPEYBbjXycEfd10/6YT6/evqR\nPv0pYvETEqIwBySqdCDqv8Dv76A+QlMN3pC0Nw31sBp2wVDbOc6+8RHzIryh\nhSOl\r\n=zeDd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE2Pe4Rbqf02gRH+ZICr6MHADRRVnJyyoa8crURrVUT+AiEAzB63X59kTAS6SN6sWiSYmjB3ddkKLmv3b8sfriEGqa4="}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.1.8_1616736291126_0.2557124926230794"},"_hasShrinkwrap":false},"1.1.9":{"name":"vue-element-customize","version":"1.1.9","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build:pkg":"vue-cli-service build","build:utils":"babel utils --out-dir lib/utils","build":"npm run build:pkg && npm run build:utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"peerDependencies":{"vue":"^2.6.11","vuex":"^3.4.0","element-ui":"^2.13.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1","clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"54dffc82c6add447fdd89ccbecc2858ebde2b405","_id":"vue-element-customize@1.1.9","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-SpmO+84FliVHHFFdKNhJ4NCoYAvfR1JJQa/h7Rpd/iTrLRyYAeCx/lFvtjMXTAYR+lD18coJ6sGSPXyuIEB85A==","shasum":"32c833ab3d24df321968ea0351119f991e4872d7","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.1.9.tgz","fileCount":46,"unpackedSize":762890,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXXFgCRA9TVsSAnZWagAAZ/YP+wfHHt0o3IsbGHwpqdVe\nxZMgPv+VL918f4VceyVjiNJfAhGHV29f/X5uGxc2P4ggzEDtCiEx9Pl1LLim\n0prefuXFhGS/FlBFR0FNEuzPSAsQMFpOMrScyAJ5hqA+0ByUAre8A7dcOvQY\ne7e4O27gUXJsQHja9YZZJ+t64uYpk39S3lnbDsYeeFYo4jeepn6VMnjERpRU\nIs7yPYADtVEsOjD2m/tFbH0r3gqla7l2FX0Cp+rGyj/0kOFnxwRjKcwL0Yvw\nAbA0yZZequigEcVejYYFDvnp5I+aYe7vEWlBD0+TR/eprCfQ0cSjxQlxNbNz\n36F7g4njNH6Rphl2SWskZ81kitZh4zQSAZhoz4jeOEBtO/wCtAN0mCzNjS8q\nOx5OAAZx16dxS4oRumYi7N9DLDUgvmvn+6cA2+LTc3srfkHsu7twX9ycQkmX\nT5KOuQMpq+DEyY8Dek77HXTTcdG0/VO7mAVLhX2X12EYolLr2LoeJBaJnj/z\nFIGkZecOT7hc0K/8F+j4D3D9Zb0AyRdSh7zXxC7qUR0g3EguJXLvetaxE5Ol\nnvDdMk9nJLs3gCY5P9dfuxYOSQBnjTM/ICTZO6yt8QgyvvPyrmq6U6VRtm1f\n2MMVPvO2jth9hQnoBVNHTE8YlfrU4IYvRQNRY9vNcePJJOCsKY48aGh23BzH\n6T3M\r\n=Hstp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuG0mGInUSjV7doqPga9FHFez9ukeoaTKvGZBXDSbnRwIgXbAjhW+N8hk0XCVZxg3ol42t/OfWwbv/1qDQVCtO5gg="}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.1.9_1616736608167_0.7822676527825654"},"_hasShrinkwrap":false},"1.1.10":{"name":"vue-element-customize","version":"1.1.10","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build:pkg":"vue-cli-service build","build:utils":"babel utils --out-dir lib/utils","build":"npm run build:pkg && npm run build:utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"peerDependencies":{"vue":"^2.6.11","vuex":"^3.4.0","element-ui":"^2.13.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1","clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"54dffc82c6add447fdd89ccbecc2858ebde2b405","_id":"vue-element-customize@1.1.10","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-oB9SDKOxHoFDr5Hlsg+aaWsD2ZsP7RLmsmuz4T3sWG3Ar4SnwQcTFXLug/Ctp4yLDOcTXg6o3i0gZX4l/ULWAw==","shasum":"29c8c5c618ed4e76f0e8f8ef376979e881e53a99","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.1.10.tgz","fileCount":46,"unpackedSize":762989,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXXOLCRA9TVsSAnZWagAApVoP/jQltxHGye+ldRyuA2S4\n8nvzNR3+u9a6r9Olampv4pSciUdNYQnyW5YhZP2rBzPtLnaaABgIRvRHCBcq\nIFhq/oq/1i8ho0rKSVf/H/jAkwCxjrV81C0wM6AS/DNx2RvmaZH6EhSqms+4\n3OFNStIAkPCTJdAzHG01wnU7GQ3331mymCDCZys9oiUlpDAMYNtg+0CVKGen\nHakERYgWDv4Meo6GhwSbHLyox74o7xQzaBdsygbWYpxXDY6ZgImx18Ddy31D\nQYgYjvMv13vEGNLbj4gJePIQ27ASq5AXIdJYwk/gXlQBpKJCF9qdtlTgdq+n\nNPfTbKg3fuy/Rh2unseguoZm/J8JjwJm5tU+klterX1kL6Kgyqq+ElYlpBI6\n5cv8600GlDZgakUIatHXQ3KWXXoE33FwNQK78973qtR3+RkDEyu0eRFJS2np\nHga9fttNac9xEVhZM8vuSTvJ4CwOdLZrTr1JBzEP4HlThFhldLgDGi72RTKG\nnevRNMHxXXhgCMfaYDgW2oN3kIBwOLX/hPtyWKxYkZn4uoPpKap+J28BM5cC\nlwLTIroL27eYujXWWlfcakwWg9AdMWWrEQtWYOkNXMyZUhEVGM+6SrfQGMFb\n2SorOnYnPHvQCGyaTQIUvG6oej2izEhevEjFkJ2JyEVfizgJIJ+RijoBPzsl\nbmiw\r\n=Wuip\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDc73PX+ViAzl29q+0bZwFRyOZjthV0VxcIEMn/a0q+vgIhAM5xziY5vm0Ma+I6kkSfoKEzvMgYty99iNZgl97XerOH"}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.1.10_1616737162963_0.3034723640244048"},"_hasShrinkwrap":false},"1.1.11":{"name":"vue-element-customize","version":"1.1.11","description":"vue element-ui customize template","main":"lib/vue-element-customize.common.js","scripts":{"build:pkg":"vue-cli-service build","build:utils":"babel utils --out-dir lib/utils","build":"npm run build:pkg && npm run build:utils","test":"echo \"Error: no test specified\" && exit 1","lib":"vue-cli-service build --target lib --name vue-element-customize --dest lib packages/index.js","lib2":"vue-cli-service build --target lib --name CustomizeTable --dest lib packages/CustomizeTable/index.js"},"repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","dependencies":{"clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"peerDependencies":{"vue":"^2.6.11","vuex":"^3.4.0","element-ui":"^2.13.2"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.10.5","@vue/cli-plugin-babel":"^4.4.6","@vue/cli-service":"^4.4.6","babel-plugin-component":"^1.1.1","node-sass":"^4.14.1","sass-loader":"^9.0.2","vue-template-compiler":"^2.6.11","vuex":"^3.5.1","clipboard":"^2.0.6","vue2-ace-editor":"0.0.15","vuedraggable":"^2.23.2"},"gitHead":"4b273b9397f9eff4e72863e60f0629a5488ef9d5","_id":"vue-element-customize@1.1.11","_nodeVersion":"12.13.1","_npmVersion":"6.12.1","dist":{"integrity":"sha512-DEQUT8GzZthYLzet2LeEQc2DfzuREIR7FhZ6jNyer8Vtl/vED5wc01RLcf5att393HHjojLjrX2gEBsNbwxtuA==","shasum":"d46b986d8e8527239da3cd4b9c9fba04718da74f","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-1.1.11.tgz","fileCount":46,"unpackedSize":763092,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXXX0CRA9TVsSAnZWagAA8McP/3ihoytehSfbZo+Dn+sn\nYzttOBdIhW92MtpNqhsFbO47B8kB44RKeLu75se8oYNGaV1eSP1KUGAAOMqK\noTUEyuo+6BMsD2qBg4JaySUH4N0jjiJriF6q29h0yRgFySojePg+wkzJXmlV\n5sd5TE7FeDVgHbO5g2T8XcJdXb3PQJhjmFLxd4x8HrkRrNfv9FDdjuQi7r0f\noeW8R9eCmbHwq584wEImQnq6Wh67ve+fgf+dpfJr0ruzWj0mfpSXACLvUIKD\nDotXy//mcVO76l0wAu3i+1zxFOrwvH4yDP0A5B4N0gOHHyJbRcMjT+erx1y3\nUDWURoJfYGOVhiVx9boa2NxTukYAsDopgIPrvb5Q7n7n7oSIVZcaB3Zt9cMn\ntSUdftoqLXvnad1EMyPWt7evCe0hVTFY1uaVP1Guzc0fcJ7XG6HTY11YOw/3\nvFeOeMOFB9tZSAMqE5WyJ5tMIHM6R8FLWCuxG/L17+3mCfmAOBWlin8Byfio\n6qnSVeg2db3XIex5EEK0FxpLKSjD7/2TRAnZiXsA+nwnJn41c9ao9CkPm697\nMu4MqySewO0KxGNRY4V+mQMB8mWaXZGC/bYvZOt7SXPt7ESU6enq2fZP9AR/\nnR5eRwdejxB9YQG+PLbduD70oMVJRk+8gIHsYynHbS3l3VGFSvIosPe707t5\n3mmv\r\n=Hvli\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFXN1Ujkztdf0u7VBO7BebvYvGDL+iTPpUtd6PTEdiF8AiEA7N77wf86U2pEGDykQ/lZ/5rxdYsOSgyG+xE3wN1SAZk="}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_1.1.11_1616737779879_0.27911136312063456"},"_hasShrinkwrap":false},"0.0.1-next":{"name":"vue-element-customize","version":"0.0.1-next","description":"vue element-ui customize template","main":"./dist/vue-element-customize.umd.js","module":"./dist/vue-element-customize.es.js","types":"./index.d.ts","repository":{"type":"git","url":"git@github.com:Lmingli/vue-element-customize.git"},"author":"luanmingli","license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","peerDependencies":{"element-plus":"^2.0.4","vue":"^3.2.31"},"devDependencies":{"@types/lodash-es":"^4.17.6","@types/node":"^17.0.21","@vitejs/plugin-vue":"^2.2.4","element-plus":"^2.0.4","sass":"^1.46.0","typescript":"^4.6.2","vite":"^2.8.6","vue":"^3.2.31","vue-tsc":"^0.32.1"},"scripts":{"serve":"vite","build":"vue-tsc --noEmit && vite build","build:utils":"babel utils --out-dir lib/utils"},"readme":"<!-- TOC -->\n\n- [功能列表](#功能列表)\n  - [组件](#组件)\n  - [辅助函数](#辅助函数)\n  - [自定义样式](#自定义样式)\n- [全量引入](#全量引入)\n  - [传入配置项](#传入配置项)\n- [按需引入](#按需引入)\n  - [组件引入](#组件引入)\n  - [辅助函数引入](#辅助函数引入)\n    - [辅助函数全量引入](#辅助函数全量引入)\n    - [辅助函数按需引入](#辅助函数按需引入)\n    - [自定义样式引入](#自定义样式引入)\n- [项目级配置](#项目级配置)\n  - [CustomizeTable配置](#customizetable配置)\n  - [CustomizePagination配置](#customizepagination配置)\n  - [CustomizeSearchBar配置](#customizesearchbar配置)\n  - [CustomizeSwitch配置](#customizeswitch配置)\n  - [CustomizeForm配置](#customizeform配置)\n  - [CustomizeDialogForm配置](#customizedialogform配置)\n- [CustomizeTable组件](#customizetable组件)\n  - [组件配置](#组件配置)\n    - [props](#props)\n    - [emit](#emit)\n    - [ref](#ref)\n    - [slot](#slot)\n  - [example](#example)\n- [CustomizePagination组件](#customizepagination组件)\n  - [组件配置](#组件配置-1)\n    - [props](#props-1)\n    - [emit](#emit-1)\n  - [example](#example-1)\n- [CustomizeSearchBar组件](#customizesearchbar组件)\n  - [组件配置](#组件配置-2)\n    - [props](#props-2)\n    - [emit](#emit-2)\n    - [slot](#slot-1)\n    - [ref](#ref-1)\n  - [example](#example-2)\n  - [slot example](#slot-example)\n- [CustomizeSwitch组件](#customizeswitch组件)\n  - [组件配置](#组件配置-3)\n    - [props](#props-3)\n    - [emit](#emit-3)\n    - [ref](#ref-2)\n  - [example 双向绑定](#example-双向绑定)\n  - [example 非双向绑定](#example-非双向绑定)\n  - [example type=\"inside\"](#example-typeinside)\n- [CustomizeForm组件](#customizeform组件)\n  - [组件配置](#组件配置-4)\n    - [props](#props-4)\n    - [emit](#emit-4)\n    - [slot](#slot-2)\n    - [slot-scope](#slot-scope)\n    - [ref](#ref-3)\n  - [example](#example-3)\n  - [slot example](#slot-example-1)\n- [CustomizeDialogForm组件](#customizedialogform组件)\n  - [组件配置](#组件配置-5)\n    - [props](#props-5)\n    - [emit](#emit-5)\n    - [slot](#slot-3)\n    - [slot-scope](#slot-scope-1)\n    - [ref](#ref-4)\n  - [example](#example-4)\n- [CustomizePage组件](#customizepage组件)\n  - [example](#example-5)\n- [CustomizeFormBuilder组件](#customizeformbuilder组件)\n  - [组件配置](#组件配置-6)\n    - [props](#props-6)\n    - [event](#event)\n    - [slot](#slot-4)\n  - [example](#example-6)\n- [辅助函数](#辅助函数-1)\n  - [_isEmpty](#_isempty)\n  - [_clean](#_clean)\n  - [_setValue](#_setvalue)\n  - [_formatDate](#_formatdate)\n  - [_deepClone](#_deepclone)\n  - [_sleep](#_sleep)\n  - [_deepMerge](#_deepmerge)\n- [常用增删改查页面完整事例(无弹窗)](#常用增删改查页面完整事例无弹窗)\n- [常用增删改查页面完整事例(带弹窗)](#常用增删改查页面完整事例带弹窗)\n- [常用增删改查页面完整事例(带弹窗)单页](#常用增删改查页面完整事例带弹窗单页)\n\n<!-- /TOC -->\n\n### 功能列表\n\n#### 组件\n    CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder\n\n#### 辅助函数\n    isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge,\n\n#### 自定义样式\n    select, input, el-radio-group, el-checkbox-group [round]属性\n    input [no-border]属性\n\n\n\n### 全量引入\n    import Customize from 'vue-element-customize';\n    Vue.use(Customize);\n\n#### 传入配置项\n    Vue.use(Customize, {\n      CustomizeTable: {},\n      CustomizePagination: {},\n      CustomizeSearchBar: {},\n      CustomizeSwitch: {},\n      CustomizeForm: {},\n      CustomizeDialogForm: {},\n      CustomizeFormBuilder: {},\n    });\n\n<!-- 功能列表 end -->\n\n\n\n### 按需引入\n\n#### 组件引入\n    import { CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder } from 'vue-element-customize';\n    Vue.use(CustomizeTable, {});\n    Vue.use(CustomizePagination, {});\n    Vue.use(CustomizeSearchBar, {});\n    Vue.use(CustomizeSwitch, {});\n    Vue.use(CustomizeForm, {});\n    Vue.use(CustomizeDialogForm, {});\n    Vue.use(CustomizePage);\n    Vue.use(CustomizeFormBuilder);\n\n#### 辅助函数引入\n\n##### 辅助函数全量引入\n    import { CustomizeUtils } from 'vue-element-customize';\n    Vue.use(CustomizeUtils);\n\n##### 辅助函数按需引入\n    import { isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge } from 'vue-element-customize';\n    Vue.prototype._isEmpty = isEmpty;\n    Vue.prototype._clean = clean;\n    Vue.prototype._setValue = setValue;\n    Vue.prototype._deepClone = deepClone;\n    Vue.prototype._formatDate = formatDate;\n    Vue.prototype._sleep = sleep;\n    Vue.prototype._deepMerge = deepMerge;\n\n##### 自定义样式引入\n    import 'vue-element-customize/lib/styles/index.scss'\n\n\n<!-- 按需引入 end -->\n\n\n\n<!-- 项目级配置 start -->\n### 项目级配置\n\n#### CustomizeTable配置\n    stripe: Boolean,  // true\n    border: Boolean,  // false\n    size: String,  // medium\n    headerCellStyle: Object,  // { backgroundColor: '#f5f7fa', color: '#909399',  borderBottom: 0,  height: '50px', },\n    cellStyle: Object,  // { borderBottom: 0 },\n    className: String,\n    align: String,\n\n#### CustomizePagination配置\n    pageSizes: Array,  // [10,20,50,100]\n    layout: String,  // 'total, sizes, prev, pager, next, jumper'\n    align: String,  // right\n    className: String,\n    pageSize: Number,  // 10\n\n#### CustomizeSearchBar配置\n    size: String,  // medium\n    className: String,  //''\n    blockButtons: Boolean,  // false\n    showResetButton: Boolean,  // true\n    openEnterSearch: Boolean,  // false\n    searchButtonName: String,  // 查询\n    optionAllName: String,  // 全部\n\n#### CustomizeSwitch配置\n    defaultColor: Array,  // 默认的[打开背景色, 关闭背景色]\n    className: String,\n\n#### CustomizeForm配置\n    size: String,  // medium\n    className: String,  //''\n    showSubmitButton: Boolean,  // true\n    showResetButton: Boolean,  // true\n    submitButtonName: String,  // 提交\n    resetButtonName: String,  // 重置\n    openEnterSubmit: Boolean,  // false\n    optionAllName: String,  // 全部\n    labelWidth: String,  // 120px\n    clearable: Boolean,  // true\n    hideOptionAll: Boolean,  // true\n\n#### CustomizeDialogForm配置\n    form: Object,  // 弹窗内form的配置，同CustomizeForm\n    size: String,  // medium\n    closeButtonShow: [Boolean, String],  // true\n    closeButtonName: String,  // 关闭\n    className: String,  // dialog自定义class\n\n<!-- 项目级配置 end -->\n\n\n\n<!-- CustomizeTable start -->\n### CustomizeTable组件\n\n#### 组件配置 \n##### props \n    data: Array,  // 渲染的数据\n\n    column: Array,  // 表格配置\n      {\n        prop: String,  // 渲染数据的key值\n        label: String, // key值对应的表头名\n        width: String, //宽度\n        sortable: Function,  //排序\n        formatter: Function,  //(row, column, cellValue, index) {}\n        slot: String,  // 传入的slot名\n      }\n\n    size: String,\n    type: String,  // 'index'\n    headerCellStyle: Function,  // ({row, column, rowIndex, columnIndex}) {} '表头样式'\n    cellStyle: Object,\n    sortable: Boolean,\n    stripe: Boolean,\n    border: Boolean,\n    className: String,\n    maxHeight: [String, Number],\n    align: String,  // 'center'\n\n##### emit\n    @sortChange  //排序\n    @selectionChange\n\n##### ref\n    ref: 'table'\n\n##### slot\n    slot before // 默认slot 前\n    slot after  // 默认slot 最后\n\n#### example\n    <customize-table\n      :data=\"tableData\"\n      :column=\"tableColumn\"\n      v-loading=\"tableLoading\"\n    >\n      <template #slotName>\n        <el-table-column label=\"slot-slotName\" align=\"center\">\n          <template #default=\"{ row }\">\n            <span>{{ _isEmpty(row.status) }}</span>\n          </template>\n        </el-table-column>\n      </template>\n      <template #after>\n        <el-table-column label=\"操作\" align=\"center\">\n          <template #default=\"{ row }\">\n            <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n          </template>\n        </el-table-column>\n      </template>\n    </customize-table>\n\n    data() {\n      return {\n        tableLoading: false,\n        tableData: [],\n        tableColumn: [\n          // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n          { label: '名称', prop: 'name' },\n          { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n          { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n            const Enum = {\n              0: '暂停',\n              1: '启用',\n            }\n            return Enum[cellValue] || '--';\n          }},\n          { slot: 'slotName' }\n        ],\n      }\n    },\n\n<!-- CustomizeTable end -->\n\n\n<!-- CustomizePagination start -->\n### CustomizePagination组件\n\n#### 组件配置 \n##### props \n    current.sync: [Number, String],  // 当前页\n    size.sync: [Number, String],  // 当前每页个数\n    total: [Number, String],  // 总个数\n\n    pageSizes: Array,  // 每页显示个数选择器的选项设置\n    layout: String,  // 组件布局 'sizes, prev, pager, next, jumper, ->, total, slot',\n    align: String,  // 组件位置 text-align\n    className: String,\n\n##### emit\n    @change\n\n#### example\n    <customize-pagination\n      :current.sync=\"current\"\n      :total=\"total\"\n      :size.sync=\"size\"\n      @change=\"handleChangePage\"\n      style=\"padding-bottom: 30px;\"\n    ></customize-pagination>\n\n    data() {\n      return {\n        current: 1,\n        total: 0,\n        size: 10,\n      }\n    },\n\n    methods: {\n      handleChangePage({ current, size }) {\n        this.fetchData();\n      },\n    },\n\n<!-- CustomizePagination end -->\n\n\n<!-- CustomizeSearchBar start -->\n### CustomizeSearchBar组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/select\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n\n      slot: String,  // slot  #slot=\"{ form }\"\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    inlineButtons: Boolean  // 按钮不换行\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    blockButtons: Boolean,  // 是否将按钮组换行展示，默认false\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    searchButtonName: String,  // 查询按钮文案\n    full-width: Boolean,  // inline模式铺满宽度，输入框宽度自适应\n    inline: Boolean,  // inline 默认true\n    margin: String,  // el-form-item margin-right '10px'\n    marginLeft: String,  // el-form-item margin-right设为0，margin-left为该px\n    showSearchButton: Boolean,  // 是否显示搜索按钮 默认true\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // select全部选项的名称，默认全部\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <customize-search-bar\n      :loading.sync=\"searchBarLoading\"\n      @submit=\"handleSubmitSearch\"\n      :setting=\"searchBarSetting\"\n      :Enum=\"searchBarEnum\"\n    ></customize-search-bar>\n\n    data() {\n      return {\n        searchBarLoading: false,\n        searchBarSetting: [\n          { type: 'input', label: '名称', prop: 'name' },\n          { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n          { slot: 'type', prop: 'type' },\n        ],\n        searchBarEnum: {\n          allList: [],\n        },\n      }\n    },\n\n    methods: {\n      fetchData() {\n        this.searchBarLoading = false;\n      },\n      handleSubmitSearch(searchParams) {\n        this.current = 1;\n        this.fetchParams = { ...searchParams };\n        this.fetchData();\n      },\n      async searchBarInit() {\n        const { data } = await GetList({\n          pageNo:1,\n          paeSize: 100,\n        });\n        let allList = data.itemInfos || [];\n        allList = allList.map(n => ({\n          label: n.name,\n          value: n.id,\n        }))\n        this.$set(this.searchBarEnum, 'allList', allList);\n      },\n    },\n\n#### slot example\n    <template #type=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeSearchBar end -->\n\n\n\n<!-- CustomizeSwitch start -->\n### CustomizeSwitch组件\n\n#### 组件配置\n##### props\n    type: String,  // inside/right\n    mode: String,  // 同type\n\n    value/v-model: [Number, String, Boolean],\n\n    values: Array,  // [打开时value, 关闭时value]\n\n    text: Array,  // [打开时文案, 关闭时文案]\n    icon: Array,  // [打开时图标, 关闭时图标] 开启后覆盖text\n    color: Array,  // [打开时背景色, 关闭时背景色]\n    disabled: Boolean,  // 默认false,\n    width: Number,  // element中宽度，默认40\n    name: String,\n    validateEvent: Boolean,  // 改变后是否触发表单验证\n    activeTextColor: String,  // type为inside时文字颜色\n    className: String,\n    size: String,  // medium/small/mini\n\n##### emit\n    @change\n\n##### ref\n    ref: switch\n\n#### example 双向绑定\n    <customize-switch\n      v-model=\"switchValue\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n      }\n    },\n\n#### example 非双向绑定\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n        switchDisabled: false,\n      }\n    },\n\n    methods: {\n      async handleSwitchChange(value) {\n        try {\n          this.switchDisabled = true;\n          await this._sleep(1);\n          this.switchValue = value;\n          this.$message.success('操作成功');\n        } catch (error) {\n          \n        }\n        this.switchDisabled = false;\n      },\n    },\n\n#### example type=\"inside\"\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n      type='inside'\n      :width=\"54\"\n      :color=\"['#67C23A', '#909399']\"\n      active-text-color=\"#fff\"\n      size=\"small\"\n    ></customize-switch>\n\n<!-- CustomizeSwitch end -->\n\n\n\n<!-- CustomizeForm start -->\n### CustomizeForm组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/textarea/inputNumber/select/text/date/datepicker/switch/image/object/array/\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      validType: String,  // rules type, url/email/date\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n      labelWidth: String,  // label-width\n\n      slot: String,  // slot  #slot=\"{ form }\"\n      slotInside: String,  // 插入至el-form-item内\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      enumKey: Array,  // select时，enum的key值，默认['label', 'value']\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n      clearable: Boolean,  // date时，el-date-picker的 clearable，默认true\n      disabled: Boolean,  // disabled状态，默认false\n      dataType: Number/Boolean,  // 数据类型，默认String\n      inputNumber: Boolean,  // true且type number时显示el-input-number\n\n      visible: Array | Function,  // [属性名, 属性值] 设置后 当某属性为该值时，渲染该条。为function时return true时显示\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    showSubmitButton: Boolean,  // 是否展示提交按钮，默认true\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    submitButtonName: String,  // 提交按钮文案，默认提交\n    resetButtonName: String,  // 重置按钮文案，默认重置\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    margin: String,  // el-form-item margin-bottom\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // 下拉选择全部的名称，默认全部\n    labelWidth: String,  // el-form label-width，默认120px\n    itemWidth: String,  // form-item的宽度，默认auto\n    clearable: Boolean,  // el-date-picker clearable，默认true\n    hideOptionAll: Boolean, // select时，隐藏‘全部’选项传入true\n    hideOperate: Boolean,  // 隐藏操作el-form-item\n    cleanProps: Boolean,  // submit时仅传出setting中有的属性，删除其它属性\n    fn: Array,  // 传入的函数 配合image中fnName\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #button-before\n    #button\n\n##### slot-scope\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <template>\n      <customize-form\n        :loading.sync=\"formLoading\"\n        @submit=\"handleSubmit\"\n        :setting=\"formSetting\"\n        :Enum=\"formEnum\"\n        validate\n      ></customize-form>\n    </template>\n    \n    <script>\n    export default {\n      data() {\n        return {\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', disabled: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '' },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            } },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'object', label: '对象', prop: 'obj', default: {}, children: [\n              { type: 'input', label: '名称', prop: 'name', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'array', label: '数组', prop: 'arr', len: 3, default: [], children: [\n              { type: 'input', label: '名称', prop: 'name' },\n              { type: 'input', label: '名称2', prop: 'name2', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'image', label: '图片', prop: 'image', fn: this.uploadFn },\n          ],\n          formEnum: {\n            allList: [],\n          },\n        }\n      },\n\n      methods: {\n        async handleSubmit(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n        },\n\n        async uploadFn() {\n          const url = '';\n          await this._sleep(1);\n\n          return Promise.resolve(url);\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.formInit();\n      },\n    }\n    </script>\n\n#### slot example\n    <template #slotName=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeForm end -->\n\n\n\n<!-- CustomizeDialogForm start -->\n### CustomizeDialogForm组件\n\n#### 组件配置 \n##### props\n    visible.sync: Boolean,  // 弹窗是否显示\n    editData: Any,  // 以编辑进入时回显数据\n    title: [String, Array],  // 弹窗标题，为数组时[新建title, 编辑title]\n    top: String,  // el-dialog top\n    width: String,  // el-dialog width\n    size: String,  // medium\n    closeButtonShow:  [Boolean, String],  // 是否展示关闭弹窗按钮，默认展示。传入String时控制slot(button-before, button)\n    closeButtonName: String,  // 关闭弹窗按钮名称，默认关闭\n    className: String,  // dialog自定义class\n    其他prop同CustomizeForm\n\n##### emit\n    @submit form\n\n##### slot\n    同CustomizeForm\n    #button-before\n    #button\n\n##### slot-scope\n    同CustomizeForm\n    #after=\"form\" \n\n##### ref\n    ref: dialog\n\n#### example\n    <customize-dialog-form\n      title='123'\n      :visible.sync=\"dialogVisible\" \n      @submit=\"handleSubmitDialog\"\n      :loading.sync=\"submitLoading\"\n      :setting=\"formSetting\"\n      :Enum=\"formEnum\"\n      validate  \n    ></customize-dialog-form>\n\n    <script>\n    export default {\n      /* 作为单独组件引入时 */\n      // props: {\n      //   visible: Boolean,\n      // },\n\n      data() {\n        return { \n          submitLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', default: '1', required: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n            { slot: 'type', prop: 'type' },\n          ],\n          formEnum: {\n            allList: [],\n          },\n      \n          editData: null,\n\n          dialogVisible: false,\n        }\n      },\n\n      computed: {\n        /* 作为单独组件引入时，外部 :visible.sync */\n        // dialogVisible: {\n        //   get() {\n        //     return this.visible;\n        //   },\n        //   set(val) {\n        //     this.$emit('update:visible', val);\n        //   },\n        // },\n      },\n\n      methods: {\n        async handleSubmitDialog(form) {\n          console.log(form);\n          try {\n            /* 提交表单 */\n            await this._sleep(1)\n            \n            this.$message.success('提交成功');\n            this.dialogVisible = false;\n          } catch (error) {\n            console.log('submitDialogError', error);\n          }\n          this.submitLoading = false;\n        },\n\n        handleCreate() {\n          // 以创建进入\n          this.editData = null \n          this.dialogVisible = true;    \n        },\n        handleEdit() {\n          // 以编辑进入 同步数据\n          this.editData = {\n            name: 'name',\n            type: 2,\n          }\n          this.dialogVisible = true;    \n        },\n        async handleEditAsync() {   \n          // 以编辑进入 异步数据\n          this.editData = null\n          this.dialogVisible = true;\n          await this._sleep(1);\n          this.editData = { \n            name: 'name2',\n            type: 3,\n          }\n        }, \n        \n        async formInit() {\n          const data = {\n            itemInfos: [\n              {name:'a',id:1},\n              {name:'b',id:2},\n              {name:'c',id:3},\n            ]\n          } \n          this._sleep(2)\n          let allList = data.itemInfos || [];  \n          allList = allList.map(n => ({ \n            label: n.name, \n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList); \n        },\n      }\n    }\n    </script>\n\n<!-- CustomizeDialogForm end -->\n\n\n\n<!-- CustomizePage start -->\n### CustomizePage组件\n\n#### example\n    <template>\n      <customize-page\n        :pageSetting=\"pageSetting\"\n        :searchBarProps=\"searchBarProps\"\n        :dialogProps=\"dialogProps\"\n        :Enum=\"Enum\"\n        :tableProps=\"tableProps\"\n        :tableDataFn=\"tableDataFn\"\n        :editDataFn=\"editDataFn\"\n        :submitFn=\"submitFn\"\n      >\n        <template #slotName>\n          <el-table-column label=\"slot\" prop=\"slotName\">\n            <template #default=\"{ row }\">\n              {{ row.id }}\n            </template>\n          </el-table-column>\n        </template>\n\n        <template #tableButton=\"{ id }\">\n          <el-button type=\"danger\" size=\"mini\" @click=\"handleDelete(id)\">删除</el-button>\n        </template>\n      </customize-page>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          pageSetting: [\n            { label: 'ID', prop: 'id', width: '100px' },\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allSelectList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ], formatter: (row, column, cellValue, index) => (this.Enum.allSelectList.find(n => n.value == cellValue) || {})['label'] || '' },\n            { type: 'text', label: '啊啊', default: 'text', prop: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { slot: 'slotName', prop: 'slotName' },\n          ],\n\n          Enum: {\n            allSelectList: [],\n          },\n          \n          searchBarProps: ['name', 'type'],\n          dialogProps: ['name', 'type', 'text', 'radio', 'checkbox', 'switch'],\n          tableProps: ['id', 'name', 'type', 'slotName'],\n        }\n      },\n\n      methods: {\n        async tableDataFn(form) {\n          console.log(form);\n\n          /* 获取列表 */\n          const data = [\n            { id: '1', name: 'aaa', type: 1 },\n            { id: '2', name: 'bbb', type: 2 },\n            { id: '3', name: 'ccc', type: 3 },\n            { id: '4', name: 'ddd', type: 1 },\n          ];\n          const total = 100;\n          await this._sleep(1);\n\n          return Promise.resolve({ data, total });\n        },\n        async editDataFn(id) {\n          /* 获取详情 */\n          const data = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this._sleep(1);\n\n          return Promise.resolve(data);\n        },\n        async submitFn(form) {\n          console.log(form);\n          /* 提交表单 */\n          await this._sleep(1);\n\n          return Promise.resolve();\n        },\n        \n        async init() {\n          const allSelectList = [\n            { label: 'a', value: 1 },\n            { label: 'b', value: 2 },\n            { label: 'c', value: 3 },\n          ];\n          await this._sleep(1);\n          this.$set(this.Enum, 'allSelectList', allSelectList);\n        },\n\n        handleDelete(id) {\n          this.$alert(`删除 ${id}`);\n        },\n      },\n\n      created() {\n        this.init();\n      },\n\n    }\n    </script>\n\n    <style>\n    html, body {\n      margin: 0;\n    }\n    </style>\n\n<!-- CustomizePage end -->\n\n\n\n<!-- CustomizeFormBuilder start -->\n### CustomizeFormBuilder组件\n\n#### 组件配置 \n##### props\n    debug: Boolean,  // 实时显示formSetting数据\n    operate: Array,  // 操作区展示的按钮 ['import', 'clear', 'preview', 'schema', 'code']\n\n##### event\n    getSchema,  // 获取当前配置转码的schema\n    setSchema,  // 设置schema字符串并重新渲染\n\n##### slot\n    #operate-title 操作区域标题名\n    #operate-before 操作区域前置按钮\n    #operate-after 操作区域后置按钮\n\n\n#### example\n    <template>\n      <customize-form-builder ref=\"formBuilder\"></customize-form-builder>\n    </template>\n\n    <script>\n    export default {\n      methods: {\n        getSchema() {\n          const result = this.$refs.formBuilder.getSchema();\n          console.log(result)\n        },\n        setSchema() {\n          const schemaStr = `{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"type\":\"object\",\"properties\":{\"input_1588506741033\":{\"type\":\"input\",\"label\":\"单行文本\",\"prop\":\"input_1588506741033\",\"key\":1588506741033}}}`\n          this.$refs.formBuilder.setSchema(schemaStr);\n        },\n      },\n\n    }\n    </script>\n\n\n<!-- CustomizeFormBuilder end -->\n\n\n\n<!-- 辅助函数 start -->\n### 辅助函数\n\n#### _isEmpty\n判断是否不为空  \n@return { Boolean }\n\n#### _clean\n删除对象中值为空的属性  \n@param { Object }  \n@return { Object }  \n\n#### _setValue\n值不为空直接返回，为空返回默认值  \n@param { Any, Any }  需判断的值，默认值  \n@return { Any }  \n\n#### _formatDate\n时间格式化  \n@params { [String, Number, Date], String }  时间，格式(默认 yyyy-MM-dd hh:mm:ss)  \n@return { String }  \n\n#### _deepClone\n深拷贝  \n@params { Object }  \n@return { Object }  \n\n#### _sleep\n延迟几秒后继续执行  \n@params { Number }  延迟秒数  \n@return { Promise } resolve  \n\n#### _deepMerge\n对象深度合并    \n@params { Object, Object }  延迟秒数  \n@return { Object }    \n_deepMerge(a, b, [..option])  \n_deepMerge.all([a, b, c], [..option])  \n\n<!-- 辅助函数 end -->\n\n\n\n### 常用增删改查页面完整事例(无弹窗)\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        ></customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      name: 'home',\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                console.log(this._clean({\n                  ...this.fetchParams,\n                  page: this.current,\n                  size: this.size,\n                }))\n                const response = {\n                  data: [\n                    { name: 'a', aaa: 2, status: 0 },\n                    { name: 'b', aaa: 3, status: null },\n                    { name: 'c', aaa: 4, status: 1 },\n                    { name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 1111)\n            })\n\n            // const response = await GetList(this._clean({\n            //   ...this.fetchParams,\n            //   page: this.current,\n            //   size: this.size,\n            // }))\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n\n\n### 常用增删改查页面完整事例(带弹窗)\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <dialog-create\n          :editId=\"editId\" \n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n        ></dialog-create>\n      </div>\n    </template>\n\n    <script>\n    import DialogCreate from './DialogCreate';\n\n    export default {\n      components: {\n        DialogCreate,\n      },\n\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          dialogVisible: false,\n          editId: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                \n                const response = {\n                  data: [\n                    { id: 1, name: 'a', aaa: 2, status: 0 },\n                    { id: 2, name: 'b', aaa: 3, status: null },\n                    { id: 3, name: 'c', aaa: 4, status: 1 },\n                    { id: 4, name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 222)\n\n              // const response = await GetList(this._clean({\n              //   ...this.fetchParams,\n              //   page: this.current,\n              //   size: this.size,\n              // }))\n              this.tableData = response.data || [];\n              this.total = response.total || 0;\n            })\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editId = null;\n          this.dialogVisible = true;\n        },\n        handleEdit(id) {\n          this.editId = id;\n          this.dialogVisible = true;\n        },\n        handleSubmitDialog() {\n          console.log('handleDialog');\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n---\n\n    <template>\n      <el-dialog\n        title=\"title\"\n        top=\"15vh\"\n        width=\"600px\"\n        :visible.sync=\"dialogVisible\"\n        @close=\"handleClosed\"\n      >\n        <el-form :model=\"form\" :rules=\"rules\" ref=\"form\" label-width=\"180px\" size=\"small\">\n          <el-form-item label=\"名称:\" prop=\"name\">\n            <el-input v-model=\"form.name\"></el-input>\n          </el-form-item>\n\n          <el-form-item>\n            <el-button type=\"primary\" @click=\"handleSubmit\" :loading=\"loading\">提交</el-button>\n            <el-button @click=\"handleCancel\">取消</el-button>\n          </el-form-item>\n        </el-form>\n      </el-dialog>\n    </template>\n\n    <script>\n    const DEFAULT_FORM = () => ({\n      name: '',\n    });\n\n    export default {\n      props: {\n        visible: Boolean,\n        editId: {},\n      },\n\n      data() {\n        return {\n          dialogVisible: false,\n\n          form: DEFAULT_FORM(),\n          rules: {\n            name: { required: true, message: '请输入名称' },\n          },\n          loading: false,\n        }\n      },\n\n      methods: {\n        handleClosed() {\n          // reset here\n          this.$refs.form.resetFields();\n          this.form = DEFAULT_FORM();\n          this.$emit('update:visible', false);\n        },\n\n        async handleSubmit() {\n          console.log(this.form);\n          try {\n            await this.$refs.form.validate();\n\n            await this.$confirm(`是否确定提交`, \"提示\", {\n              confirmButtonText: \"确定\",\n              cancelButtonText: \"取消\",\n              type: \"warning\"\n            });\n\n            this.loading = true;\n            let params = this._deepClone(this.form);\n            if (!!this.editId) {\n              params.id = this.editId;\n              await Update(params);\n            }else{\n              await Save(params);\n            }\n\n            this.$message.success(`${!!this.editId ? '编辑' : '新增'}成功`);\n            this.dialogVisible = false;\n            this.$emit('submit');\n          } catch (error) {\n            console.log(error);\n          }\n          this.loading = false;\n        },\n        handleCancel() {\n          this.dialogVisible = false;\n        },\n      },\n\n      watch: {\n        visible: {\n          handler(newVal, oldVal) {\n            this.dialogVisible = newVal;\n          },\n          immediate: true,\n        }\n      },\n\n    }\n    </script>\n\n    <style lang='scss' scoped>\n\n    </style>\n\n\n### 常用增删改查页面完整事例(带弹窗)单页\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <customize-dialog-form\n          :editData=\"editData\"\n          title='title'\n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n          :loading.sync=\"formLoading\"\n          :setting=\"formSetting\"\n          :Enum=\"formEnum\"\n          validate  \n        ></customize-dialog-form>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ] },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n          ],\n          formEnum: {\n            allList: [],\n          },\n          dialogVisible: false,\n          editData: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          const params = this._clean({\n            ...this.fetchParams,\n            current: this.current,\n            size: this.size,\n          });\n          console.log(params);\n          this.tableLoading = true;\n          try {\n            const response = {\n              data: [\n                { id: 1, name: 'a', aaa: 2, status: 0 },\n                { id: 2, name: 'b', aaa: 3, status: null },\n                { id: 3, name: 'c', aaa: 4, status: 1 },\n                { id: 4, name: 'd', aaa: 5, status: 0 },\n              ],\n              total: 100,\n            }\n            await this._sleep(1);\n\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editData = null\n          this.dialogVisible = true;\n        },\n        async handleEdit(id) {\n          this.dialogVisible = true;\n\n          await this._sleep(1);\n          const editData = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this.editData = editData;\n        },\n        async handleSubmitDialog(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n          this.dialogVisible = false;\n          this.editData = null;\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.fetchData();\n        this.formInit();\n      },\n    }\n    </script>\n\n","_id":"vue-element-customize@0.0.1-next","_integrity":"sha512-mSKihhNb9cDkTq2qqC6rw2RE9uWRrCTLM0iuhJ1zo83oJAhIYtR2O8uWxwgI7mlelDGrKYq5i63PKaZ4oEUB7Q==","_resolved":"/Users/luanmingli/code/vue-element-customize/vue-element-customize-0.0.1-next.tgz","_from":"file:vue-element-customize-0.0.1-next.tgz","_nodeVersion":"16.13.1","_npmVersion":"8.5.2","dist":{"integrity":"sha512-mSKihhNb9cDkTq2qqC6rw2RE9uWRrCTLM0iuhJ1zo83oJAhIYtR2O8uWxwgI7mlelDGrKYq5i63PKaZ4oEUB7Q==","shasum":"aa09a31c7c9282ba51207dd18bd18088aecc0636","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.1-next.tgz","fileCount":5,"unpackedSize":325236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKGG5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrJ8A//dwt3jvGbgMVPbnipyvhDo8mZ7WVSth3vRCtkBRfxznF+A1Sx\r\nIyA0NPn+WnrFfYXlM4f2SUEzXCl9NpmUrvLY/v8Rcm5mF6jffzF01bCR+64L\r\npb81oKcO38LdAnk5ywLhKa8BBPriYUPBtPmhlcCikjuUmTG/dMern5o1Jzhs\r\nalP9y7ObldlS+ewf6L9o5ADujK8q40P6MfzdJhySkNS02KilUpdfEhQ9HjNd\r\nvIxp6Gq+qyukWc377OZxD9nX/lTktjxE3vpcrMko21M8Kha+isWi9QuDjTMX\r\nyuZs6p9TIRSAwdbDMhfyW//qj9YyJbOK2e8VsN02RajtDmnEowccWcVLgZTC\r\njARn/lG6yViUNoLJ7P4Wx2bNgWhG+xa5NH36aLfSaeRIsLvVDe9y5tfQVmTI\r\nE+2TGjPlBv9bMUPeqjD0o3CMFZsdQpKXW3WY3mewl50KbN2YAgAUxzfgUTcZ\r\ndROYLyzreGXMGA0ZzIUVYyAbyUvxn7cAdstH+SwL3uzgvuApLxtzuFbAQ0pB\r\nLZhz9w+4mnKL+qanjZDP2vu5J1SI6EKonVXtHWkpOhdeR+jG1WvMGyuwh4W7\r\nHBjgiJaTbAEG79Uz0KsAFEBgNmj6m7Hf9L/Yyyj6UAhjgZlHwiwFwF06Qi/i\r\nX+AHtUhUe4gd5GelUZSku5jEYHQz74rI6zE=\r\n=fDSD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIENxHZYsgl5dLAKpw3LB19a3N9iDttFX+hCyXB4lp4KxAiBgeh2RPf8pcCyYMTSJjaWrM9DO7a8oVq/HKxF5bvJbnA=="}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.1-next_1646813625411_0.17122244452871271"},"_hasShrinkwrap":false},"3.0.0-next":{"name":"vue-element-customize","version":"3.0.0-next","description":"vue element-ui customize template","main":"./dist/vue-element-customize.umd.js","module":"./dist/vue-element-customize.es.js","types":"./index.d.ts","repository":{"type":"git","url":"git@github.com:Lmingli/vue-element-customize.git"},"author":"luanmingli","license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","peerDependencies":{"element-plus":"^2.0.4","vue":"^3.2.31"},"devDependencies":{"@types/lodash-es":"^4.17.6","@types/node":"^17.0.21","@vitejs/plugin-vue":"^2.2.4","element-plus":"^2.0.4","sass":"^1.46.0","typescript":"^4.6.2","vite":"^2.8.6","vue":"^3.2.31","vue-tsc":"^0.32.1"},"scripts":{"serve":"vite","build":"vue-tsc --noEmit && vite build","build:utils":"babel utils --out-dir lib/utils","release":"pnpm run build && pnpm run publish"},"readme":"<!-- TOC -->\n\n- [功能列表](#功能列表)\n  - [组件](#组件)\n  - [辅助函数](#辅助函数)\n  - [自定义样式](#自定义样式)\n- [全量引入](#全量引入)\n  - [传入配置项](#传入配置项)\n- [按需引入](#按需引入)\n  - [组件引入](#组件引入)\n  - [辅助函数引入](#辅助函数引入)\n    - [辅助函数全量引入](#辅助函数全量引入)\n    - [辅助函数按需引入](#辅助函数按需引入)\n    - [自定义样式引入](#自定义样式引入)\n- [项目级配置](#项目级配置)\n  - [CustomizeTable配置](#customizetable配置)\n  - [CustomizePagination配置](#customizepagination配置)\n  - [CustomizeSearchBar配置](#customizesearchbar配置)\n  - [CustomizeSwitch配置](#customizeswitch配置)\n  - [CustomizeForm配置](#customizeform配置)\n  - [CustomizeDialogForm配置](#customizedialogform配置)\n- [CustomizeTable组件](#customizetable组件)\n  - [组件配置](#组件配置)\n    - [props](#props)\n    - [emit](#emit)\n    - [ref](#ref)\n    - [slot](#slot)\n  - [example](#example)\n- [CustomizePagination组件](#customizepagination组件)\n  - [组件配置](#组件配置-1)\n    - [props](#props-1)\n    - [emit](#emit-1)\n  - [example](#example-1)\n- [CustomizeSearchBar组件](#customizesearchbar组件)\n  - [组件配置](#组件配置-2)\n    - [props](#props-2)\n    - [emit](#emit-2)\n    - [slot](#slot-1)\n    - [ref](#ref-1)\n  - [example](#example-2)\n  - [slot example](#slot-example)\n- [CustomizeSwitch组件](#customizeswitch组件)\n  - [组件配置](#组件配置-3)\n    - [props](#props-3)\n    - [emit](#emit-3)\n    - [ref](#ref-2)\n  - [example 双向绑定](#example-双向绑定)\n  - [example 非双向绑定](#example-非双向绑定)\n  - [example type=\"inside\"](#example-typeinside)\n- [CustomizeForm组件](#customizeform组件)\n  - [组件配置](#组件配置-4)\n    - [props](#props-4)\n    - [emit](#emit-4)\n    - [slot](#slot-2)\n    - [slot-scope](#slot-scope)\n    - [ref](#ref-3)\n  - [example](#example-3)\n  - [slot example](#slot-example-1)\n- [CustomizeDialogForm组件](#customizedialogform组件)\n  - [组件配置](#组件配置-5)\n    - [props](#props-5)\n    - [emit](#emit-5)\n    - [slot](#slot-3)\n    - [slot-scope](#slot-scope-1)\n    - [ref](#ref-4)\n  - [example](#example-4)\n- [CustomizePage组件](#customizepage组件)\n  - [example](#example-5)\n- [CustomizeFormBuilder组件](#customizeformbuilder组件)\n  - [组件配置](#组件配置-6)\n    - [props](#props-6)\n    - [event](#event)\n    - [slot](#slot-4)\n  - [example](#example-6)\n- [辅助函数](#辅助函数-1)\n  - [_isEmpty](#_isempty)\n  - [_clean](#_clean)\n  - [_setValue](#_setvalue)\n  - [_formatDate](#_formatdate)\n  - [_deepClone](#_deepclone)\n  - [_sleep](#_sleep)\n  - [_deepMerge](#_deepmerge)\n- [常用增删改查页面完整事例(无弹窗)](#常用增删改查页面完整事例无弹窗)\n- [常用增删改查页面完整事例(带弹窗)](#常用增删改查页面完整事例带弹窗)\n- [常用增删改查页面完整事例(带弹窗)单页](#常用增删改查页面完整事例带弹窗单页)\n\n<!-- /TOC -->\n\n### 功能列表\n\n#### 组件\n    CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder\n\n#### 辅助函数\n    isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge,\n\n#### 自定义样式\n    select, input, el-radio-group, el-checkbox-group [round]属性\n    input [no-border]属性\n\n\n\n### 全量引入\n    import Customize from 'vue-element-customize';\n    Vue.use(Customize);\n\n#### 传入配置项\n    Vue.use(Customize, {\n      CustomizeTable: {},\n      CustomizePagination: {},\n      CustomizeSearchBar: {},\n      CustomizeSwitch: {},\n      CustomizeForm: {},\n      CustomizeDialogForm: {},\n      CustomizeFormBuilder: {},\n    });\n\n<!-- 功能列表 end -->\n\n\n\n### 按需引入\n\n#### 组件引入\n    import { CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder } from 'vue-element-customize';\n    Vue.use(CustomizeTable, {});\n    Vue.use(CustomizePagination, {});\n    Vue.use(CustomizeSearchBar, {});\n    Vue.use(CustomizeSwitch, {});\n    Vue.use(CustomizeForm, {});\n    Vue.use(CustomizeDialogForm, {});\n    Vue.use(CustomizePage);\n    Vue.use(CustomizeFormBuilder);\n\n#### 辅助函数引入\n\n##### 辅助函数全量引入\n    import { CustomizeUtils } from 'vue-element-customize';\n    Vue.use(CustomizeUtils);\n\n##### 辅助函数按需引入\n    import { isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge } from 'vue-element-customize';\n    Vue.prototype._isEmpty = isEmpty;\n    Vue.prototype._clean = clean;\n    Vue.prototype._setValue = setValue;\n    Vue.prototype._deepClone = deepClone;\n    Vue.prototype._formatDate = formatDate;\n    Vue.prototype._sleep = sleep;\n    Vue.prototype._deepMerge = deepMerge;\n\n##### 自定义样式引入\n    import 'vue-element-customize/lib/styles/index.scss'\n\n\n<!-- 按需引入 end -->\n\n\n\n<!-- 项目级配置 start -->\n### 项目级配置\n\n#### CustomizeTable配置\n    stripe: Boolean,  // true\n    border: Boolean,  // false\n    size: String,  // medium\n    headerCellStyle: Object,  // { backgroundColor: '#f5f7fa', color: '#909399',  borderBottom: 0,  height: '50px', },\n    cellStyle: Object,  // { borderBottom: 0 },\n    className: String,\n    align: String,\n\n#### CustomizePagination配置\n    pageSizes: Array,  // [10,20,50,100]\n    layout: String,  // 'total, sizes, prev, pager, next, jumper'\n    align: String,  // right\n    className: String,\n    pageSize: Number,  // 10\n\n#### CustomizeSearchBar配置\n    size: String,  // medium\n    className: String,  //''\n    blockButtons: Boolean,  // false\n    showResetButton: Boolean,  // true\n    openEnterSearch: Boolean,  // false\n    searchButtonName: String,  // 查询\n    optionAllName: String,  // 全部\n\n#### CustomizeSwitch配置\n    defaultColor: Array,  // 默认的[打开背景色, 关闭背景色]\n    className: String,\n\n#### CustomizeForm配置\n    size: String,  // medium\n    className: String,  //''\n    showSubmitButton: Boolean,  // true\n    showResetButton: Boolean,  // true\n    submitButtonName: String,  // 提交\n    resetButtonName: String,  // 重置\n    openEnterSubmit: Boolean,  // false\n    optionAllName: String,  // 全部\n    labelWidth: String,  // 120px\n    clearable: Boolean,  // true\n    hideOptionAll: Boolean,  // true\n\n#### CustomizeDialogForm配置\n    form: Object,  // 弹窗内form的配置，同CustomizeForm\n    size: String,  // medium\n    closeButtonShow: [Boolean, String],  // true\n    closeButtonName: String,  // 关闭\n    className: String,  // dialog自定义class\n\n<!-- 项目级配置 end -->\n\n\n\n<!-- CustomizeTable start -->\n### CustomizeTable组件\n\n#### 组件配置 \n##### props \n    data: Array,  // 渲染的数据\n\n    column: Array,  // 表格配置\n      {\n        prop: String,  // 渲染数据的key值\n        label: String, // key值对应的表头名\n        width: String, //宽度\n        sortable: Function,  //排序\n        formatter: Function,  //(row, column, cellValue, index) {}\n        slot: String,  // 传入的slot名\n      }\n\n    size: String,\n    type: String,  // 'index'\n    headerCellStyle: Function,  // ({row, column, rowIndex, columnIndex}) {} '表头样式'\n    cellStyle: Object,\n    sortable: Boolean,\n    stripe: Boolean,\n    border: Boolean,\n    className: String,\n    maxHeight: [String, Number],\n    align: String,  // 'center'\n\n##### emit\n    @sortChange  //排序\n    @selectionChange\n\n##### ref\n    ref: 'table'\n\n##### slot\n    slot before // 默认slot 前\n    slot after  // 默认slot 最后\n\n#### example\n    <customize-table\n      :data=\"tableData\"\n      :column=\"tableColumn\"\n      v-loading=\"tableLoading\"\n    >\n      <template #slotName>\n        <el-table-column label=\"slot-slotName\" align=\"center\">\n          <template #default=\"{ row }\">\n            <span>{{ _isEmpty(row.status) }}</span>\n          </template>\n        </el-table-column>\n      </template>\n      <template #after>\n        <el-table-column label=\"操作\" align=\"center\">\n          <template #default=\"{ row }\">\n            <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n          </template>\n        </el-table-column>\n      </template>\n    </customize-table>\n\n    data() {\n      return {\n        tableLoading: false,\n        tableData: [],\n        tableColumn: [\n          // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n          { label: '名称', prop: 'name' },\n          { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n          { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n            const Enum = {\n              0: '暂停',\n              1: '启用',\n            }\n            return Enum[cellValue] || '--';\n          }},\n          { slot: 'slotName' }\n        ],\n      }\n    },\n\n<!-- CustomizeTable end -->\n\n\n<!-- CustomizePagination start -->\n### CustomizePagination组件\n\n#### 组件配置 \n##### props \n    current.sync: [Number, String],  // 当前页\n    size.sync: [Number, String],  // 当前每页个数\n    total: [Number, String],  // 总个数\n\n    pageSizes: Array,  // 每页显示个数选择器的选项设置\n    layout: String,  // 组件布局 'sizes, prev, pager, next, jumper, ->, total, slot',\n    align: String,  // 组件位置 text-align\n    className: String,\n\n##### emit\n    @change\n\n#### example\n    <customize-pagination\n      :current.sync=\"current\"\n      :total=\"total\"\n      :size.sync=\"size\"\n      @change=\"handleChangePage\"\n      style=\"padding-bottom: 30px;\"\n    ></customize-pagination>\n\n    data() {\n      return {\n        current: 1,\n        total: 0,\n        size: 10,\n      }\n    },\n\n    methods: {\n      handleChangePage({ current, size }) {\n        this.fetchData();\n      },\n    },\n\n<!-- CustomizePagination end -->\n\n\n<!-- CustomizeSearchBar start -->\n### CustomizeSearchBar组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/select\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n\n      slot: String,  // slot  #slot=\"{ form }\"\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    inlineButtons: Boolean  // 按钮不换行\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    blockButtons: Boolean,  // 是否将按钮组换行展示，默认false\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    searchButtonName: String,  // 查询按钮文案\n    full-width: Boolean,  // inline模式铺满宽度，输入框宽度自适应\n    inline: Boolean,  // inline 默认true\n    margin: String,  // el-form-item margin-right '10px'\n    marginLeft: String,  // el-form-item margin-right设为0，margin-left为该px\n    showSearchButton: Boolean,  // 是否显示搜索按钮 默认true\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // select全部选项的名称，默认全部\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <customize-search-bar\n      :loading.sync=\"searchBarLoading\"\n      @submit=\"handleSubmitSearch\"\n      :setting=\"searchBarSetting\"\n      :Enum=\"searchBarEnum\"\n    ></customize-search-bar>\n\n    data() {\n      return {\n        searchBarLoading: false,\n        searchBarSetting: [\n          { type: 'input', label: '名称', prop: 'name' },\n          { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n          { slot: 'type', prop: 'type' },\n        ],\n        searchBarEnum: {\n          allList: [],\n        },\n      }\n    },\n\n    methods: {\n      fetchData() {\n        this.searchBarLoading = false;\n      },\n      handleSubmitSearch(searchParams) {\n        this.current = 1;\n        this.fetchParams = { ...searchParams };\n        this.fetchData();\n      },\n      async searchBarInit() {\n        const { data } = await GetList({\n          pageNo:1,\n          paeSize: 100,\n        });\n        let allList = data.itemInfos || [];\n        allList = allList.map(n => ({\n          label: n.name,\n          value: n.id,\n        }))\n        this.$set(this.searchBarEnum, 'allList', allList);\n      },\n    },\n\n#### slot example\n    <template #type=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeSearchBar end -->\n\n\n\n<!-- CustomizeSwitch start -->\n### CustomizeSwitch组件\n\n#### 组件配置\n##### props\n    type: String,  // inside/right\n    mode: String,  // 同type\n\n    value/v-model: [Number, String, Boolean],\n\n    values: Array,  // [打开时value, 关闭时value]\n\n    text: Array,  // [打开时文案, 关闭时文案]\n    icon: Array,  // [打开时图标, 关闭时图标] 开启后覆盖text\n    color: Array,  // [打开时背景色, 关闭时背景色]\n    disabled: Boolean,  // 默认false,\n    width: Number,  // element中宽度，默认40\n    name: String,\n    validateEvent: Boolean,  // 改变后是否触发表单验证\n    activeTextColor: String,  // type为inside时文字颜色\n    className: String,\n    size: String,  // medium/small/mini\n\n##### emit\n    @change\n\n##### ref\n    ref: switch\n\n#### example 双向绑定\n    <customize-switch\n      v-model=\"switchValue\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n      }\n    },\n\n#### example 非双向绑定\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n        switchDisabled: false,\n      }\n    },\n\n    methods: {\n      async handleSwitchChange(value) {\n        try {\n          this.switchDisabled = true;\n          await this._sleep(1);\n          this.switchValue = value;\n          this.$message.success('操作成功');\n        } catch (error) {\n          \n        }\n        this.switchDisabled = false;\n      },\n    },\n\n#### example type=\"inside\"\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n      type='inside'\n      :width=\"54\"\n      :color=\"['#67C23A', '#909399']\"\n      active-text-color=\"#fff\"\n      size=\"small\"\n    ></customize-switch>\n\n<!-- CustomizeSwitch end -->\n\n\n\n<!-- CustomizeForm start -->\n### CustomizeForm组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/textarea/inputNumber/select/text/date/datepicker/switch/image/object/array/\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      validType: String,  // rules type, url/email/date\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n      labelWidth: String,  // label-width\n\n      slot: String,  // slot  #slot=\"{ form }\"\n      slotInside: String,  // 插入至el-form-item内\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      enumKey: Array,  // select时，enum的key值，默认['label', 'value']\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n      clearable: Boolean,  // date时，el-date-picker的 clearable，默认true\n      disabled: Boolean,  // disabled状态，默认false\n      dataType: Number/Boolean,  // 数据类型，默认String\n      inputNumber: Boolean,  // true且type number时显示el-input-number\n\n      visible: Array | Function,  // [属性名, 属性值] 设置后 当某属性为该值时，渲染该条。为function时return true时显示\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    showSubmitButton: Boolean,  // 是否展示提交按钮，默认true\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    submitButtonName: String,  // 提交按钮文案，默认提交\n    resetButtonName: String,  // 重置按钮文案，默认重置\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    margin: String,  // el-form-item margin-bottom\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // 下拉选择全部的名称，默认全部\n    labelWidth: String,  // el-form label-width，默认120px\n    itemWidth: String,  // form-item的宽度，默认auto\n    clearable: Boolean,  // el-date-picker clearable，默认true\n    hideOptionAll: Boolean, // select时，隐藏‘全部’选项传入true\n    hideOperate: Boolean,  // 隐藏操作el-form-item\n    cleanProps: Boolean,  // submit时仅传出setting中有的属性，删除其它属性\n    fn: Array,  // 传入的函数 配合image中fnName\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #button-before\n    #button\n\n##### slot-scope\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <template>\n      <customize-form\n        :loading.sync=\"formLoading\"\n        @submit=\"handleSubmit\"\n        :setting=\"formSetting\"\n        :Enum=\"formEnum\"\n        validate\n      ></customize-form>\n    </template>\n    \n    <script>\n    export default {\n      data() {\n        return {\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', disabled: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '' },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            } },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'object', label: '对象', prop: 'obj', default: {}, children: [\n              { type: 'input', label: '名称', prop: 'name', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'array', label: '数组', prop: 'arr', len: 3, default: [], children: [\n              { type: 'input', label: '名称', prop: 'name' },\n              { type: 'input', label: '名称2', prop: 'name2', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'image', label: '图片', prop: 'image', fn: this.uploadFn },\n          ],\n          formEnum: {\n            allList: [],\n          },\n        }\n      },\n\n      methods: {\n        async handleSubmit(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n        },\n\n        async uploadFn() {\n          const url = '';\n          await this._sleep(1);\n\n          return Promise.resolve(url);\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.formInit();\n      },\n    }\n    </script>\n\n#### slot example\n    <template #slotName=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeForm end -->\n\n\n\n<!-- CustomizeDialogForm start -->\n### CustomizeDialogForm组件\n\n#### 组件配置 \n##### props\n    visible.sync: Boolean,  // 弹窗是否显示\n    editData: Any,  // 以编辑进入时回显数据\n    title: [String, Array],  // 弹窗标题，为数组时[新建title, 编辑title]\n    top: String,  // el-dialog top\n    width: String,  // el-dialog width\n    size: String,  // medium\n    closeButtonShow:  [Boolean, String],  // 是否展示关闭弹窗按钮，默认展示。传入String时控制slot(button-before, button)\n    closeButtonName: String,  // 关闭弹窗按钮名称，默认关闭\n    className: String,  // dialog自定义class\n    其他prop同CustomizeForm\n\n##### emit\n    @submit form\n\n##### slot\n    同CustomizeForm\n    #button-before\n    #button\n\n##### slot-scope\n    同CustomizeForm\n    #after=\"form\" \n\n##### ref\n    ref: dialog\n\n#### example\n    <customize-dialog-form\n      title='123'\n      :visible.sync=\"dialogVisible\" \n      @submit=\"handleSubmitDialog\"\n      :loading.sync=\"submitLoading\"\n      :setting=\"formSetting\"\n      :Enum=\"formEnum\"\n      validate  \n    ></customize-dialog-form>\n\n    <script>\n    export default {\n      /* 作为单独组件引入时 */\n      // props: {\n      //   visible: Boolean,\n      // },\n\n      data() {\n        return { \n          submitLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', default: '1', required: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n            { slot: 'type', prop: 'type' },\n          ],\n          formEnum: {\n            allList: [],\n          },\n      \n          editData: null,\n\n          dialogVisible: false,\n        }\n      },\n\n      computed: {\n        /* 作为单独组件引入时，外部 :visible.sync */\n        // dialogVisible: {\n        //   get() {\n        //     return this.visible;\n        //   },\n        //   set(val) {\n        //     this.$emit('update:visible', val);\n        //   },\n        // },\n      },\n\n      methods: {\n        async handleSubmitDialog(form) {\n          console.log(form);\n          try {\n            /* 提交表单 */\n            await this._sleep(1)\n            \n            this.$message.success('提交成功');\n            this.dialogVisible = false;\n          } catch (error) {\n            console.log('submitDialogError', error);\n          }\n          this.submitLoading = false;\n        },\n\n        handleCreate() {\n          // 以创建进入\n          this.editData = null \n          this.dialogVisible = true;    \n        },\n        handleEdit() {\n          // 以编辑进入 同步数据\n          this.editData = {\n            name: 'name',\n            type: 2,\n          }\n          this.dialogVisible = true;    \n        },\n        async handleEditAsync() {   \n          // 以编辑进入 异步数据\n          this.editData = null\n          this.dialogVisible = true;\n          await this._sleep(1);\n          this.editData = { \n            name: 'name2',\n            type: 3,\n          }\n        }, \n        \n        async formInit() {\n          const data = {\n            itemInfos: [\n              {name:'a',id:1},\n              {name:'b',id:2},\n              {name:'c',id:3},\n            ]\n          } \n          this._sleep(2)\n          let allList = data.itemInfos || [];  \n          allList = allList.map(n => ({ \n            label: n.name, \n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList); \n        },\n      }\n    }\n    </script>\n\n<!-- CustomizeDialogForm end -->\n\n\n\n<!-- CustomizePage start -->\n### CustomizePage组件\n\n#### example\n    <template>\n      <customize-page\n        :pageSetting=\"pageSetting\"\n        :searchBarProps=\"searchBarProps\"\n        :dialogProps=\"dialogProps\"\n        :Enum=\"Enum\"\n        :tableProps=\"tableProps\"\n        :tableDataFn=\"tableDataFn\"\n        :editDataFn=\"editDataFn\"\n        :submitFn=\"submitFn\"\n      >\n        <template #slotName>\n          <el-table-column label=\"slot\" prop=\"slotName\">\n            <template #default=\"{ row }\">\n              {{ row.id }}\n            </template>\n          </el-table-column>\n        </template>\n\n        <template #tableButton=\"{ id }\">\n          <el-button type=\"danger\" size=\"mini\" @click=\"handleDelete(id)\">删除</el-button>\n        </template>\n      </customize-page>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          pageSetting: [\n            { label: 'ID', prop: 'id', width: '100px' },\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allSelectList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ], formatter: (row, column, cellValue, index) => (this.Enum.allSelectList.find(n => n.value == cellValue) || {})['label'] || '' },\n            { type: 'text', label: '啊啊', default: 'text', prop: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { slot: 'slotName', prop: 'slotName' },\n          ],\n\n          Enum: {\n            allSelectList: [],\n          },\n          \n          searchBarProps: ['name', 'type'],\n          dialogProps: ['name', 'type', 'text', 'radio', 'checkbox', 'switch'],\n          tableProps: ['id', 'name', 'type', 'slotName'],\n        }\n      },\n\n      methods: {\n        async tableDataFn(form) {\n          console.log(form);\n\n          /* 获取列表 */\n          const data = [\n            { id: '1', name: 'aaa', type: 1 },\n            { id: '2', name: 'bbb', type: 2 },\n            { id: '3', name: 'ccc', type: 3 },\n            { id: '4', name: 'ddd', type: 1 },\n          ];\n          const total = 100;\n          await this._sleep(1);\n\n          return Promise.resolve({ data, total });\n        },\n        async editDataFn(id) {\n          /* 获取详情 */\n          const data = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this._sleep(1);\n\n          return Promise.resolve(data);\n        },\n        async submitFn(form) {\n          console.log(form);\n          /* 提交表单 */\n          await this._sleep(1);\n\n          return Promise.resolve();\n        },\n        \n        async init() {\n          const allSelectList = [\n            { label: 'a', value: 1 },\n            { label: 'b', value: 2 },\n            { label: 'c', value: 3 },\n          ];\n          await this._sleep(1);\n          this.$set(this.Enum, 'allSelectList', allSelectList);\n        },\n\n        handleDelete(id) {\n          this.$alert(`删除 ${id}`);\n        },\n      },\n\n      created() {\n        this.init();\n      },\n\n    }\n    </script>\n\n    <style>\n    html, body {\n      margin: 0;\n    }\n    </style>\n\n<!-- CustomizePage end -->\n\n\n\n<!-- CustomizeFormBuilder start -->\n### CustomizeFormBuilder组件\n\n#### 组件配置 \n##### props\n    debug: Boolean,  // 实时显示formSetting数据\n    operate: Array,  // 操作区展示的按钮 ['import', 'clear', 'preview', 'schema', 'code']\n\n##### event\n    getSchema,  // 获取当前配置转码的schema\n    setSchema,  // 设置schema字符串并重新渲染\n\n##### slot\n    #operate-title 操作区域标题名\n    #operate-before 操作区域前置按钮\n    #operate-after 操作区域后置按钮\n\n\n#### example\n    <template>\n      <customize-form-builder ref=\"formBuilder\"></customize-form-builder>\n    </template>\n\n    <script>\n    export default {\n      methods: {\n        getSchema() {\n          const result = this.$refs.formBuilder.getSchema();\n          console.log(result)\n        },\n        setSchema() {\n          const schemaStr = `{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"type\":\"object\",\"properties\":{\"input_1588506741033\":{\"type\":\"input\",\"label\":\"单行文本\",\"prop\":\"input_1588506741033\",\"key\":1588506741033}}}`\n          this.$refs.formBuilder.setSchema(schemaStr);\n        },\n      },\n\n    }\n    </script>\n\n\n<!-- CustomizeFormBuilder end -->\n\n\n\n<!-- 辅助函数 start -->\n### 辅助函数\n\n#### _isEmpty\n判断是否不为空  \n@return { Boolean }\n\n#### _clean\n删除对象中值为空的属性  \n@param { Object }  \n@return { Object }  \n\n#### _setValue\n值不为空直接返回，为空返回默认值  \n@param { Any, Any }  需判断的值，默认值  \n@return { Any }  \n\n#### _formatDate\n时间格式化  \n@params { [String, Number, Date], String }  时间，格式(默认 yyyy-MM-dd hh:mm:ss)  \n@return { String }  \n\n#### _deepClone\n深拷贝  \n@params { Object }  \n@return { Object }  \n\n#### _sleep\n延迟几秒后继续执行  \n@params { Number }  延迟秒数  \n@return { Promise } resolve  \n\n#### _deepMerge\n对象深度合并    \n@params { Object, Object }  延迟秒数  \n@return { Object }    \n_deepMerge(a, b, [..option])  \n_deepMerge.all([a, b, c], [..option])  \n\n<!-- 辅助函数 end -->\n\n\n\n### 常用增删改查页面完整事例(无弹窗)\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        ></customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      name: 'home',\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                console.log(this._clean({\n                  ...this.fetchParams,\n                  page: this.current,\n                  size: this.size,\n                }))\n                const response = {\n                  data: [\n                    { name: 'a', aaa: 2, status: 0 },\n                    { name: 'b', aaa: 3, status: null },\n                    { name: 'c', aaa: 4, status: 1 },\n                    { name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 1111)\n            })\n\n            // const response = await GetList(this._clean({\n            //   ...this.fetchParams,\n            //   page: this.current,\n            //   size: this.size,\n            // }))\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n\n\n### 常用增删改查页面完整事例(带弹窗)\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <dialog-create\n          :editId=\"editId\" \n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n        ></dialog-create>\n      </div>\n    </template>\n\n    <script>\n    import DialogCreate from './DialogCreate';\n\n    export default {\n      components: {\n        DialogCreate,\n      },\n\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          dialogVisible: false,\n          editId: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                \n                const response = {\n                  data: [\n                    { id: 1, name: 'a', aaa: 2, status: 0 },\n                    { id: 2, name: 'b', aaa: 3, status: null },\n                    { id: 3, name: 'c', aaa: 4, status: 1 },\n                    { id: 4, name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 222)\n\n              // const response = await GetList(this._clean({\n              //   ...this.fetchParams,\n              //   page: this.current,\n              //   size: this.size,\n              // }))\n              this.tableData = response.data || [];\n              this.total = response.total || 0;\n            })\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editId = null;\n          this.dialogVisible = true;\n        },\n        handleEdit(id) {\n          this.editId = id;\n          this.dialogVisible = true;\n        },\n        handleSubmitDialog() {\n          console.log('handleDialog');\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n---\n\n    <template>\n      <el-dialog\n        title=\"title\"\n        top=\"15vh\"\n        width=\"600px\"\n        :visible.sync=\"dialogVisible\"\n        @close=\"handleClosed\"\n      >\n        <el-form :model=\"form\" :rules=\"rules\" ref=\"form\" label-width=\"180px\" size=\"small\">\n          <el-form-item label=\"名称:\" prop=\"name\">\n            <el-input v-model=\"form.name\"></el-input>\n          </el-form-item>\n\n          <el-form-item>\n            <el-button type=\"primary\" @click=\"handleSubmit\" :loading=\"loading\">提交</el-button>\n            <el-button @click=\"handleCancel\">取消</el-button>\n          </el-form-item>\n        </el-form>\n      </el-dialog>\n    </template>\n\n    <script>\n    const DEFAULT_FORM = () => ({\n      name: '',\n    });\n\n    export default {\n      props: {\n        visible: Boolean,\n        editId: {},\n      },\n\n      data() {\n        return {\n          dialogVisible: false,\n\n          form: DEFAULT_FORM(),\n          rules: {\n            name: { required: true, message: '请输入名称' },\n          },\n          loading: false,\n        }\n      },\n\n      methods: {\n        handleClosed() {\n          // reset here\n          this.$refs.form.resetFields();\n          this.form = DEFAULT_FORM();\n          this.$emit('update:visible', false);\n        },\n\n        async handleSubmit() {\n          console.log(this.form);\n          try {\n            await this.$refs.form.validate();\n\n            await this.$confirm(`是否确定提交`, \"提示\", {\n              confirmButtonText: \"确定\",\n              cancelButtonText: \"取消\",\n              type: \"warning\"\n            });\n\n            this.loading = true;\n            let params = this._deepClone(this.form);\n            if (!!this.editId) {\n              params.id = this.editId;\n              await Update(params);\n            }else{\n              await Save(params);\n            }\n\n            this.$message.success(`${!!this.editId ? '编辑' : '新增'}成功`);\n            this.dialogVisible = false;\n            this.$emit('submit');\n          } catch (error) {\n            console.log(error);\n          }\n          this.loading = false;\n        },\n        handleCancel() {\n          this.dialogVisible = false;\n        },\n      },\n\n      watch: {\n        visible: {\n          handler(newVal, oldVal) {\n            this.dialogVisible = newVal;\n          },\n          immediate: true,\n        }\n      },\n\n    }\n    </script>\n\n    <style lang='scss' scoped>\n\n    </style>\n\n\n### 常用增删改查页面完整事例(带弹窗)单页\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <customize-dialog-form\n          :editData=\"editData\"\n          title='title'\n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n          :loading.sync=\"formLoading\"\n          :setting=\"formSetting\"\n          :Enum=\"formEnum\"\n          validate  \n        ></customize-dialog-form>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ] },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n          ],\n          formEnum: {\n            allList: [],\n          },\n          dialogVisible: false,\n          editData: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          const params = this._clean({\n            ...this.fetchParams,\n            current: this.current,\n            size: this.size,\n          });\n          console.log(params);\n          this.tableLoading = true;\n          try {\n            const response = {\n              data: [\n                { id: 1, name: 'a', aaa: 2, status: 0 },\n                { id: 2, name: 'b', aaa: 3, status: null },\n                { id: 3, name: 'c', aaa: 4, status: 1 },\n                { id: 4, name: 'd', aaa: 5, status: 0 },\n              ],\n              total: 100,\n            }\n            await this._sleep(1);\n\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editData = null\n          this.dialogVisible = true;\n        },\n        async handleEdit(id) {\n          this.dialogVisible = true;\n\n          await this._sleep(1);\n          const editData = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this.editData = editData;\n        },\n        async handleSubmitDialog(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n          this.dialogVisible = false;\n          this.editData = null;\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.fetchData();\n        this.formInit();\n      },\n    }\n    </script>\n\n","_id":"vue-element-customize@3.0.0-next","_integrity":"sha512-FWcsKQHaaDjO8o+Wp2OyPKvU0HSfu3uS5ODvVQoUQp+GwxZFvMIK70FEHkt1R62oQ/R6/9QlE4MysY96MVJCbw==","_resolved":"/Users/luanmingli/code/vue-element-customize/vue-element-customize-3.0.0-next.tgz","_from":"file:vue-element-customize-3.0.0-next.tgz","_nodeVersion":"16.13.1","_npmVersion":"8.5.2","dist":{"integrity":"sha512-FWcsKQHaaDjO8o+Wp2OyPKvU0HSfu3uS5ODvVQoUQp+GwxZFvMIK70FEHkt1R62oQ/R6/9QlE4MysY96MVJCbw==","shasum":"7cc42fffa500b69dfbf3a24423fb7ab1da351527","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-3.0.0-next.tgz","fileCount":5,"unpackedSize":325289,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKGJNACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqrIRAAnBWQ0iOqWI1L3P8JJZ7JHm/qntbtJG83UxaEhA6TJfsOxgmW\r\nEyEN1VEy7R59NZhKiO2n3LCXv/gl5FFKJHMFn5qguRotRlWrq/1MbZUCKpht\r\nfw3R43Kg5zNkngWDQeiiaV92q86ZGzR9UjkEZ3D/tg6rQMcyqnTIRD3HD7gw\r\nZSuZz+7zKldX5s8FhMHq3/M9vfUlDBJSyFyRgqd1hepgkcH4jrf1Tq3MskLH\r\nJcylbmohMWlOSYk70b+dZTN9J55RLFCqlw2ezZlADpPV24TG/A/7t/mbLp+f\r\nVZyL4q4cgSsGLOgzjRbs9GwJFw6IupLp/9KhM6Y2KJOD9rg43D2qvfn5fPgp\r\nAjk+GoUimkEszCe7xW5Ibn9Y+dZZgfMo4M/B9HsvvAvQe0tWWDDCMvU3AnMP\r\nt+iVZyspLybg9JzpomxSJlmseCIqX2ZEF+Ax34C9D3X4nhXyYJRrkYGbab8s\r\nYNcOWGV++z+2iyHAaXxvUN7UGtc3JLlmKlx440xbEkj17Q/LMiG7CRTZmxxk\r\nfdkEcjK51NY7PzKK0WQg/N2XgYVpk6q+kmMVCOHmWrkeXmLyrqyCyZfTRXje\r\n9kAs6nmMozaW2dpWGmWGTcl1L4KRj8SkdeTNdhAUYgsUxOIKa9wzVy74TPZv\r\nKYiNO5SEnavei8SoriaR5/ZrubOd3wgE0fk=\r\n=uqGi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAj2y1Zmz2w9gZ/xQHIsb46C6AE0dS+78VBaEHyy0EnZAiEA+9YSJxSH2BwKlImwm8etlmBbcH+dpkASOBFvjoaAkog="}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_3.0.0-next_1646813773453_0.8753296866844491"},"_hasShrinkwrap":false},"3.0.0":{"name":"vue-element-customize","version":"3.0.0","description":"vue element-ui customize template","main":"./dist/vue-element-customize.umd.js","module":"./dist/vue-element-customize.es.js","types":"./index.d.ts","repository":{"type":"git","url":"git@github.com:Lmingli/vue-element-customize.git"},"author":"luanmingli","license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","peerDependencies":{"element-plus":"^2.0.4","vue":"^3.2.31"},"devDependencies":{"@types/lodash-es":"^4.17.6","@types/node":"^17.0.21","@vitejs/plugin-vue":"^2.2.4","element-plus":"^2.0.4","sass":"^1.46.0","typescript":"^4.6.2","vite":"^2.8.6","vue":"^3.2.31","vue-tsc":"^0.32.1"},"scripts":{"serve":"vite","build":"vue-tsc --noEmit && vite build","build:utils":"babel utils --out-dir lib/utils","release":"pnpm run build && pnpm run publish"},"readme":"<!-- TOC -->\n\n- [功能列表](#功能列表)\n  - [组件](#组件)\n  - [辅助函数](#辅助函数)\n  - [自定义样式](#自定义样式)\n- [全量引入](#全量引入)\n  - [传入配置项](#传入配置项)\n- [按需引入](#按需引入)\n  - [组件引入](#组件引入)\n  - [辅助函数引入](#辅助函数引入)\n    - [辅助函数全量引入](#辅助函数全量引入)\n    - [辅助函数按需引入](#辅助函数按需引入)\n    - [自定义样式引入](#自定义样式引入)\n- [项目级配置](#项目级配置)\n  - [CustomizeTable配置](#customizetable配置)\n  - [CustomizePagination配置](#customizepagination配置)\n  - [CustomizeSearchBar配置](#customizesearchbar配置)\n  - [CustomizeSwitch配置](#customizeswitch配置)\n  - [CustomizeForm配置](#customizeform配置)\n  - [CustomizeDialogForm配置](#customizedialogform配置)\n- [CustomizeTable组件](#customizetable组件)\n  - [组件配置](#组件配置)\n    - [props](#props)\n    - [emit](#emit)\n    - [ref](#ref)\n    - [slot](#slot)\n  - [example](#example)\n- [CustomizePagination组件](#customizepagination组件)\n  - [组件配置](#组件配置-1)\n    - [props](#props-1)\n    - [emit](#emit-1)\n  - [example](#example-1)\n- [CustomizeSearchBar组件](#customizesearchbar组件)\n  - [组件配置](#组件配置-2)\n    - [props](#props-2)\n    - [emit](#emit-2)\n    - [slot](#slot-1)\n    - [ref](#ref-1)\n  - [example](#example-2)\n  - [slot example](#slot-example)\n- [CustomizeSwitch组件](#customizeswitch组件)\n  - [组件配置](#组件配置-3)\n    - [props](#props-3)\n    - [emit](#emit-3)\n    - [ref](#ref-2)\n  - [example 双向绑定](#example-双向绑定)\n  - [example 非双向绑定](#example-非双向绑定)\n  - [example type=\"inside\"](#example-typeinside)\n- [CustomizeForm组件](#customizeform组件)\n  - [组件配置](#组件配置-4)\n    - [props](#props-4)\n    - [emit](#emit-4)\n    - [slot](#slot-2)\n    - [slot-scope](#slot-scope)\n    - [ref](#ref-3)\n  - [example](#example-3)\n  - [slot example](#slot-example-1)\n- [CustomizeDialogForm组件](#customizedialogform组件)\n  - [组件配置](#组件配置-5)\n    - [props](#props-5)\n    - [emit](#emit-5)\n    - [slot](#slot-3)\n    - [slot-scope](#slot-scope-1)\n    - [ref](#ref-4)\n  - [example](#example-4)\n- [CustomizePage组件](#customizepage组件)\n  - [example](#example-5)\n- [CustomizeFormBuilder组件](#customizeformbuilder组件)\n  - [组件配置](#组件配置-6)\n    - [props](#props-6)\n    - [event](#event)\n    - [slot](#slot-4)\n  - [example](#example-6)\n- [辅助函数](#辅助函数-1)\n  - [_isEmpty](#_isempty)\n  - [_clean](#_clean)\n  - [_setValue](#_setvalue)\n  - [_formatDate](#_formatdate)\n  - [_deepClone](#_deepclone)\n  - [_sleep](#_sleep)\n  - [_deepMerge](#_deepmerge)\n- [常用增删改查页面完整事例(无弹窗)](#常用增删改查页面完整事例无弹窗)\n- [常用增删改查页面完整事例(带弹窗)](#常用增删改查页面完整事例带弹窗)\n- [常用增删改查页面完整事例(带弹窗)单页](#常用增删改查页面完整事例带弹窗单页)\n\n<!-- /TOC -->\n\n### 功能列表\n\n#### 组件\n    CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder\n\n#### 辅助函数\n    isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge,\n\n#### 自定义样式\n    select, input, el-radio-group, el-checkbox-group [round]属性\n    input [no-border]属性\n\n\n\n### 全量引入\n    import Customize from 'vue-element-customize';\n    Vue.use(Customize);\n\n#### 传入配置项\n    Vue.use(Customize, {\n      CustomizeTable: {},\n      CustomizePagination: {},\n      CustomizeSearchBar: {},\n      CustomizeSwitch: {},\n      CustomizeForm: {},\n      CustomizeDialogForm: {},\n      CustomizeFormBuilder: {},\n    });\n\n<!-- 功能列表 end -->\n\n\n\n### 按需引入\n\n#### 组件引入\n    import { CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder } from 'vue-element-customize';\n    Vue.use(CustomizeTable, {});\n    Vue.use(CustomizePagination, {});\n    Vue.use(CustomizeSearchBar, {});\n    Vue.use(CustomizeSwitch, {});\n    Vue.use(CustomizeForm, {});\n    Vue.use(CustomizeDialogForm, {});\n    Vue.use(CustomizePage);\n    Vue.use(CustomizeFormBuilder);\n\n#### 辅助函数引入\n\n##### 辅助函数全量引入\n    import { CustomizeUtils } from 'vue-element-customize';\n    Vue.use(CustomizeUtils);\n\n##### 辅助函数按需引入\n    import { isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge } from 'vue-element-customize';\n    Vue.prototype._isEmpty = isEmpty;\n    Vue.prototype._clean = clean;\n    Vue.prototype._setValue = setValue;\n    Vue.prototype._deepClone = deepClone;\n    Vue.prototype._formatDate = formatDate;\n    Vue.prototype._sleep = sleep;\n    Vue.prototype._deepMerge = deepMerge;\n\n##### 自定义样式引入\n    import 'vue-element-customize/lib/styles/index.scss'\n\n\n<!-- 按需引入 end -->\n\n\n\n<!-- 项目级配置 start -->\n### 项目级配置\n\n#### CustomizeTable配置\n    stripe: Boolean,  // true\n    border: Boolean,  // false\n    size: String,  // medium\n    headerCellStyle: Object,  // { backgroundColor: '#f5f7fa', color: '#909399',  borderBottom: 0,  height: '50px', },\n    cellStyle: Object,  // { borderBottom: 0 },\n    className: String,\n    align: String,\n\n#### CustomizePagination配置\n    pageSizes: Array,  // [10,20,50,100]\n    layout: String,  // 'total, sizes, prev, pager, next, jumper'\n    align: String,  // right\n    className: String,\n    pageSize: Number,  // 10\n\n#### CustomizeSearchBar配置\n    size: String,  // medium\n    className: String,  //''\n    blockButtons: Boolean,  // false\n    showResetButton: Boolean,  // true\n    openEnterSearch: Boolean,  // false\n    searchButtonName: String,  // 查询\n    optionAllName: String,  // 全部\n\n#### CustomizeSwitch配置\n    defaultColor: Array,  // 默认的[打开背景色, 关闭背景色]\n    className: String,\n\n#### CustomizeForm配置\n    size: String,  // medium\n    className: String,  //''\n    showSubmitButton: Boolean,  // true\n    showResetButton: Boolean,  // true\n    submitButtonName: String,  // 提交\n    resetButtonName: String,  // 重置\n    openEnterSubmit: Boolean,  // false\n    optionAllName: String,  // 全部\n    labelWidth: String,  // 120px\n    clearable: Boolean,  // true\n    hideOptionAll: Boolean,  // true\n\n#### CustomizeDialogForm配置\n    form: Object,  // 弹窗内form的配置，同CustomizeForm\n    size: String,  // medium\n    closeButtonShow: [Boolean, String],  // true\n    closeButtonName: String,  // 关闭\n    className: String,  // dialog自定义class\n\n<!-- 项目级配置 end -->\n\n\n\n<!-- CustomizeTable start -->\n### CustomizeTable组件\n\n#### 组件配置 \n##### props \n    data: Array,  // 渲染的数据\n\n    column: Array,  // 表格配置\n      {\n        prop: String,  // 渲染数据的key值\n        label: String, // key值对应的表头名\n        width: String, //宽度\n        sortable: Function,  //排序\n        formatter: Function,  //(row, column, cellValue, index) {}\n        slot: String,  // 传入的slot名\n      }\n\n    size: String,\n    type: String,  // 'index'\n    headerCellStyle: Function,  // ({row, column, rowIndex, columnIndex}) {} '表头样式'\n    cellStyle: Object,\n    sortable: Boolean,\n    stripe: Boolean,\n    border: Boolean,\n    className: String,\n    maxHeight: [String, Number],\n    align: String,  // 'center'\n\n##### emit\n    @sortChange  //排序\n    @selectionChange\n\n##### ref\n    ref: 'table'\n\n##### slot\n    slot before // 默认slot 前\n    slot after  // 默认slot 最后\n\n#### example\n    <customize-table\n      :data=\"tableData\"\n      :column=\"tableColumn\"\n      v-loading=\"tableLoading\"\n    >\n      <template #slotName>\n        <el-table-column label=\"slot-slotName\" align=\"center\">\n          <template #default=\"{ row }\">\n            <span>{{ _isEmpty(row.status) }}</span>\n          </template>\n        </el-table-column>\n      </template>\n      <template #after>\n        <el-table-column label=\"操作\" align=\"center\">\n          <template #default=\"{ row }\">\n            <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n          </template>\n        </el-table-column>\n      </template>\n    </customize-table>\n\n    data() {\n      return {\n        tableLoading: false,\n        tableData: [],\n        tableColumn: [\n          // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n          { label: '名称', prop: 'name' },\n          { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n          { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n            const Enum = {\n              0: '暂停',\n              1: '启用',\n            }\n            return Enum[cellValue] || '--';\n          }},\n          { slot: 'slotName' }\n        ],\n      }\n    },\n\n<!-- CustomizeTable end -->\n\n\n<!-- CustomizePagination start -->\n### CustomizePagination组件\n\n#### 组件配置 \n##### props \n    current.sync: [Number, String],  // 当前页\n    size.sync: [Number, String],  // 当前每页个数\n    total: [Number, String],  // 总个数\n\n    pageSizes: Array,  // 每页显示个数选择器的选项设置\n    layout: String,  // 组件布局 'sizes, prev, pager, next, jumper, ->, total, slot',\n    align: String,  // 组件位置 text-align\n    className: String,\n\n##### emit\n    @change\n\n#### example\n    <customize-pagination\n      :current.sync=\"current\"\n      :total=\"total\"\n      :size.sync=\"size\"\n      @change=\"handleChangePage\"\n      style=\"padding-bottom: 30px;\"\n    ></customize-pagination>\n\n    data() {\n      return {\n        current: 1,\n        total: 0,\n        size: 10,\n      }\n    },\n\n    methods: {\n      handleChangePage({ current, size }) {\n        this.fetchData();\n      },\n    },\n\n<!-- CustomizePagination end -->\n\n\n<!-- CustomizeSearchBar start -->\n### CustomizeSearchBar组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/select\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n\n      slot: String,  // slot  #slot=\"{ form }\"\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    inlineButtons: Boolean  // 按钮不换行\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    blockButtons: Boolean,  // 是否将按钮组换行展示，默认false\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    searchButtonName: String,  // 查询按钮文案\n    full-width: Boolean,  // inline模式铺满宽度，输入框宽度自适应\n    inline: Boolean,  // inline 默认true\n    margin: String,  // el-form-item margin-right '10px'\n    marginLeft: String,  // el-form-item margin-right设为0，margin-left为该px\n    showSearchButton: Boolean,  // 是否显示搜索按钮 默认true\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // select全部选项的名称，默认全部\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <customize-search-bar\n      :loading.sync=\"searchBarLoading\"\n      @submit=\"handleSubmitSearch\"\n      :setting=\"searchBarSetting\"\n      :Enum=\"searchBarEnum\"\n    ></customize-search-bar>\n\n    data() {\n      return {\n        searchBarLoading: false,\n        searchBarSetting: [\n          { type: 'input', label: '名称', prop: 'name' },\n          { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n          { slot: 'type', prop: 'type' },\n        ],\n        searchBarEnum: {\n          allList: [],\n        },\n      }\n    },\n\n    methods: {\n      fetchData() {\n        this.searchBarLoading = false;\n      },\n      handleSubmitSearch(searchParams) {\n        this.current = 1;\n        this.fetchParams = { ...searchParams };\n        this.fetchData();\n      },\n      async searchBarInit() {\n        const { data } = await GetList({\n          pageNo:1,\n          paeSize: 100,\n        });\n        let allList = data.itemInfos || [];\n        allList = allList.map(n => ({\n          label: n.name,\n          value: n.id,\n        }))\n        this.$set(this.searchBarEnum, 'allList', allList);\n      },\n    },\n\n#### slot example\n    <template #type=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeSearchBar end -->\n\n\n\n<!-- CustomizeSwitch start -->\n### CustomizeSwitch组件\n\n#### 组件配置\n##### props\n    type: String,  // inside/right\n    mode: String,  // 同type\n\n    value/v-model: [Number, String, Boolean],\n\n    values: Array,  // [打开时value, 关闭时value]\n\n    text: Array,  // [打开时文案, 关闭时文案]\n    icon: Array,  // [打开时图标, 关闭时图标] 开启后覆盖text\n    color: Array,  // [打开时背景色, 关闭时背景色]\n    disabled: Boolean,  // 默认false,\n    width: Number,  // element中宽度，默认40\n    name: String,\n    validateEvent: Boolean,  // 改变后是否触发表单验证\n    activeTextColor: String,  // type为inside时文字颜色\n    className: String,\n    size: String,  // medium/small/mini\n\n##### emit\n    @change\n\n##### ref\n    ref: switch\n\n#### example 双向绑定\n    <customize-switch\n      v-model=\"switchValue\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n      }\n    },\n\n#### example 非双向绑定\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n        switchDisabled: false,\n      }\n    },\n\n    methods: {\n      async handleSwitchChange(value) {\n        try {\n          this.switchDisabled = true;\n          await this._sleep(1);\n          this.switchValue = value;\n          this.$message.success('操作成功');\n        } catch (error) {\n          \n        }\n        this.switchDisabled = false;\n      },\n    },\n\n#### example type=\"inside\"\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n      type='inside'\n      :width=\"54\"\n      :color=\"['#67C23A', '#909399']\"\n      active-text-color=\"#fff\"\n      size=\"small\"\n    ></customize-switch>\n\n<!-- CustomizeSwitch end -->\n\n\n\n<!-- CustomizeForm start -->\n### CustomizeForm组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/textarea/inputNumber/select/text/date/datepicker/switch/image/object/array/\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      validType: String,  // rules type, url/email/date\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n      labelWidth: String,  // label-width\n\n      slot: String,  // slot  #slot=\"{ form }\"\n      slotInside: String,  // 插入至el-form-item内\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      enumKey: Array,  // select时，enum的key值，默认['label', 'value']\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n      clearable: Boolean,  // date时，el-date-picker的 clearable，默认true\n      disabled: Boolean,  // disabled状态，默认false\n      dataType: Number/Boolean,  // 数据类型，默认String\n      inputNumber: Boolean,  // true且type number时显示el-input-number\n\n      visible: Array | Function,  // [属性名, 属性值] 设置后 当某属性为该值时，渲染该条。为function时return true时显示\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    showSubmitButton: Boolean,  // 是否展示提交按钮，默认true\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    submitButtonName: String,  // 提交按钮文案，默认提交\n    resetButtonName: String,  // 重置按钮文案，默认重置\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    margin: String,  // el-form-item margin-bottom\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // 下拉选择全部的名称，默认全部\n    labelWidth: String,  // el-form label-width，默认120px\n    itemWidth: String,  // form-item的宽度，默认auto\n    clearable: Boolean,  // el-date-picker clearable，默认true\n    hideOptionAll: Boolean, // select时，隐藏‘全部’选项传入true\n    hideOperate: Boolean,  // 隐藏操作el-form-item\n    cleanProps: Boolean,  // submit时仅传出setting中有的属性，删除其它属性\n    fn: Array,  // 传入的函数 配合image中fnName\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #button-before\n    #button\n\n##### slot-scope\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <template>\n      <customize-form\n        :loading.sync=\"formLoading\"\n        @submit=\"handleSubmit\"\n        :setting=\"formSetting\"\n        :Enum=\"formEnum\"\n        validate\n      ></customize-form>\n    </template>\n    \n    <script>\n    export default {\n      data() {\n        return {\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', disabled: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '' },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            } },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'object', label: '对象', prop: 'obj', default: {}, children: [\n              { type: 'input', label: '名称', prop: 'name', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'array', label: '数组', prop: 'arr', len: 3, default: [], children: [\n              { type: 'input', label: '名称', prop: 'name' },\n              { type: 'input', label: '名称2', prop: 'name2', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'image', label: '图片', prop: 'image', fn: this.uploadFn },\n          ],\n          formEnum: {\n            allList: [],\n          },\n        }\n      },\n\n      methods: {\n        async handleSubmit(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n        },\n\n        async uploadFn() {\n          const url = '';\n          await this._sleep(1);\n\n          return Promise.resolve(url);\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.formInit();\n      },\n    }\n    </script>\n\n#### slot example\n    <template #slotName=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeForm end -->\n\n\n\n<!-- CustomizeDialogForm start -->\n### CustomizeDialogForm组件\n\n#### 组件配置 \n##### props\n    visible.sync: Boolean,  // 弹窗是否显示\n    editData: Any,  // 以编辑进入时回显数据\n    title: [String, Array],  // 弹窗标题，为数组时[新建title, 编辑title]\n    top: String,  // el-dialog top\n    width: String,  // el-dialog width\n    size: String,  // medium\n    closeButtonShow:  [Boolean, String],  // 是否展示关闭弹窗按钮，默认展示。传入String时控制slot(button-before, button)\n    closeButtonName: String,  // 关闭弹窗按钮名称，默认关闭\n    className: String,  // dialog自定义class\n    其他prop同CustomizeForm\n\n##### emit\n    @submit form\n\n##### slot\n    同CustomizeForm\n    #button-before\n    #button\n\n##### slot-scope\n    同CustomizeForm\n    #after=\"form\" \n\n##### ref\n    ref: dialog\n\n#### example\n    <customize-dialog-form\n      title='123'\n      :visible.sync=\"dialogVisible\" \n      @submit=\"handleSubmitDialog\"\n      :loading.sync=\"submitLoading\"\n      :setting=\"formSetting\"\n      :Enum=\"formEnum\"\n      validate  \n    ></customize-dialog-form>\n\n    <script>\n    export default {\n      /* 作为单独组件引入时 */\n      // props: {\n      //   visible: Boolean,\n      // },\n\n      data() {\n        return { \n          submitLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', default: '1', required: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n            { slot: 'type', prop: 'type' },\n          ],\n          formEnum: {\n            allList: [],\n          },\n      \n          editData: null,\n\n          dialogVisible: false,\n        }\n      },\n\n      computed: {\n        /* 作为单独组件引入时，外部 :visible.sync */\n        // dialogVisible: {\n        //   get() {\n        //     return this.visible;\n        //   },\n        //   set(val) {\n        //     this.$emit('update:visible', val);\n        //   },\n        // },\n      },\n\n      methods: {\n        async handleSubmitDialog(form) {\n          console.log(form);\n          try {\n            /* 提交表单 */\n            await this._sleep(1)\n            \n            this.$message.success('提交成功');\n            this.dialogVisible = false;\n          } catch (error) {\n            console.log('submitDialogError', error);\n          }\n          this.submitLoading = false;\n        },\n\n        handleCreate() {\n          // 以创建进入\n          this.editData = null \n          this.dialogVisible = true;    \n        },\n        handleEdit() {\n          // 以编辑进入 同步数据\n          this.editData = {\n            name: 'name',\n            type: 2,\n          }\n          this.dialogVisible = true;    \n        },\n        async handleEditAsync() {   \n          // 以编辑进入 异步数据\n          this.editData = null\n          this.dialogVisible = true;\n          await this._sleep(1);\n          this.editData = { \n            name: 'name2',\n            type: 3,\n          }\n        }, \n        \n        async formInit() {\n          const data = {\n            itemInfos: [\n              {name:'a',id:1},\n              {name:'b',id:2},\n              {name:'c',id:3},\n            ]\n          } \n          this._sleep(2)\n          let allList = data.itemInfos || [];  \n          allList = allList.map(n => ({ \n            label: n.name, \n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList); \n        },\n      }\n    }\n    </script>\n\n<!-- CustomizeDialogForm end -->\n\n\n\n<!-- CustomizePage start -->\n### CustomizePage组件\n\n#### example\n    <template>\n      <customize-page\n        :pageSetting=\"pageSetting\"\n        :searchBarProps=\"searchBarProps\"\n        :dialogProps=\"dialogProps\"\n        :Enum=\"Enum\"\n        :tableProps=\"tableProps\"\n        :tableDataFn=\"tableDataFn\"\n        :editDataFn=\"editDataFn\"\n        :submitFn=\"submitFn\"\n      >\n        <template #slotName>\n          <el-table-column label=\"slot\" prop=\"slotName\">\n            <template #default=\"{ row }\">\n              {{ row.id }}\n            </template>\n          </el-table-column>\n        </template>\n\n        <template #tableButton=\"{ id }\">\n          <el-button type=\"danger\" size=\"mini\" @click=\"handleDelete(id)\">删除</el-button>\n        </template>\n      </customize-page>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          pageSetting: [\n            { label: 'ID', prop: 'id', width: '100px' },\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allSelectList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ], formatter: (row, column, cellValue, index) => (this.Enum.allSelectList.find(n => n.value == cellValue) || {})['label'] || '' },\n            { type: 'text', label: '啊啊', default: 'text', prop: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { slot: 'slotName', prop: 'slotName' },\n          ],\n\n          Enum: {\n            allSelectList: [],\n          },\n          \n          searchBarProps: ['name', 'type'],\n          dialogProps: ['name', 'type', 'text', 'radio', 'checkbox', 'switch'],\n          tableProps: ['id', 'name', 'type', 'slotName'],\n        }\n      },\n\n      methods: {\n        async tableDataFn(form) {\n          console.log(form);\n\n          /* 获取列表 */\n          const data = [\n            { id: '1', name: 'aaa', type: 1 },\n            { id: '2', name: 'bbb', type: 2 },\n            { id: '3', name: 'ccc', type: 3 },\n            { id: '4', name: 'ddd', type: 1 },\n          ];\n          const total = 100;\n          await this._sleep(1);\n\n          return Promise.resolve({ data, total });\n        },\n        async editDataFn(id) {\n          /* 获取详情 */\n          const data = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this._sleep(1);\n\n          return Promise.resolve(data);\n        },\n        async submitFn(form) {\n          console.log(form);\n          /* 提交表单 */\n          await this._sleep(1);\n\n          return Promise.resolve();\n        },\n        \n        async init() {\n          const allSelectList = [\n            { label: 'a', value: 1 },\n            { label: 'b', value: 2 },\n            { label: 'c', value: 3 },\n          ];\n          await this._sleep(1);\n          this.$set(this.Enum, 'allSelectList', allSelectList);\n        },\n\n        handleDelete(id) {\n          this.$alert(`删除 ${id}`);\n        },\n      },\n\n      created() {\n        this.init();\n      },\n\n    }\n    </script>\n\n    <style>\n    html, body {\n      margin: 0;\n    }\n    </style>\n\n<!-- CustomizePage end -->\n\n\n\n<!-- CustomizeFormBuilder start -->\n### CustomizeFormBuilder组件\n\n#### 组件配置 \n##### props\n    debug: Boolean,  // 实时显示formSetting数据\n    operate: Array,  // 操作区展示的按钮 ['import', 'clear', 'preview', 'schema', 'code']\n\n##### event\n    getSchema,  // 获取当前配置转码的schema\n    setSchema,  // 设置schema字符串并重新渲染\n\n##### slot\n    #operate-title 操作区域标题名\n    #operate-before 操作区域前置按钮\n    #operate-after 操作区域后置按钮\n\n\n#### example\n    <template>\n      <customize-form-builder ref=\"formBuilder\"></customize-form-builder>\n    </template>\n\n    <script>\n    export default {\n      methods: {\n        getSchema() {\n          const result = this.$refs.formBuilder.getSchema();\n          console.log(result)\n        },\n        setSchema() {\n          const schemaStr = `{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"type\":\"object\",\"properties\":{\"input_1588506741033\":{\"type\":\"input\",\"label\":\"单行文本\",\"prop\":\"input_1588506741033\",\"key\":1588506741033}}}`\n          this.$refs.formBuilder.setSchema(schemaStr);\n        },\n      },\n\n    }\n    </script>\n\n\n<!-- CustomizeFormBuilder end -->\n\n\n\n<!-- 辅助函数 start -->\n### 辅助函数\n\n#### _isEmpty\n判断是否不为空  \n@return { Boolean }\n\n#### _clean\n删除对象中值为空的属性  \n@param { Object }  \n@return { Object }  \n\n#### _setValue\n值不为空直接返回，为空返回默认值  \n@param { Any, Any }  需判断的值，默认值  \n@return { Any }  \n\n#### _formatDate\n时间格式化  \n@params { [String, Number, Date], String }  时间，格式(默认 yyyy-MM-dd hh:mm:ss)  \n@return { String }  \n\n#### _deepClone\n深拷贝  \n@params { Object }  \n@return { Object }  \n\n#### _sleep\n延迟几秒后继续执行  \n@params { Number }  延迟秒数  \n@return { Promise } resolve  \n\n#### _deepMerge\n对象深度合并    \n@params { Object, Object }  延迟秒数  \n@return { Object }    \n_deepMerge(a, b, [..option])  \n_deepMerge.all([a, b, c], [..option])  \n\n<!-- 辅助函数 end -->\n\n\n\n### 常用增删改查页面完整事例(无弹窗)\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        ></customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      name: 'home',\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                console.log(this._clean({\n                  ...this.fetchParams,\n                  page: this.current,\n                  size: this.size,\n                }))\n                const response = {\n                  data: [\n                    { name: 'a', aaa: 2, status: 0 },\n                    { name: 'b', aaa: 3, status: null },\n                    { name: 'c', aaa: 4, status: 1 },\n                    { name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 1111)\n            })\n\n            // const response = await GetList(this._clean({\n            //   ...this.fetchParams,\n            //   page: this.current,\n            //   size: this.size,\n            // }))\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n\n\n### 常用增删改查页面完整事例(带弹窗)\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <dialog-create\n          :editId=\"editId\" \n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n        ></dialog-create>\n      </div>\n    </template>\n\n    <script>\n    import DialogCreate from './DialogCreate';\n\n    export default {\n      components: {\n        DialogCreate,\n      },\n\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          dialogVisible: false,\n          editId: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                \n                const response = {\n                  data: [\n                    { id: 1, name: 'a', aaa: 2, status: 0 },\n                    { id: 2, name: 'b', aaa: 3, status: null },\n                    { id: 3, name: 'c', aaa: 4, status: 1 },\n                    { id: 4, name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 222)\n\n              // const response = await GetList(this._clean({\n              //   ...this.fetchParams,\n              //   page: this.current,\n              //   size: this.size,\n              // }))\n              this.tableData = response.data || [];\n              this.total = response.total || 0;\n            })\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editId = null;\n          this.dialogVisible = true;\n        },\n        handleEdit(id) {\n          this.editId = id;\n          this.dialogVisible = true;\n        },\n        handleSubmitDialog() {\n          console.log('handleDialog');\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n---\n\n    <template>\n      <el-dialog\n        title=\"title\"\n        top=\"15vh\"\n        width=\"600px\"\n        :visible.sync=\"dialogVisible\"\n        @close=\"handleClosed\"\n      >\n        <el-form :model=\"form\" :rules=\"rules\" ref=\"form\" label-width=\"180px\" size=\"small\">\n          <el-form-item label=\"名称:\" prop=\"name\">\n            <el-input v-model=\"form.name\"></el-input>\n          </el-form-item>\n\n          <el-form-item>\n            <el-button type=\"primary\" @click=\"handleSubmit\" :loading=\"loading\">提交</el-button>\n            <el-button @click=\"handleCancel\">取消</el-button>\n          </el-form-item>\n        </el-form>\n      </el-dialog>\n    </template>\n\n    <script>\n    const DEFAULT_FORM = () => ({\n      name: '',\n    });\n\n    export default {\n      props: {\n        visible: Boolean,\n        editId: {},\n      },\n\n      data() {\n        return {\n          dialogVisible: false,\n\n          form: DEFAULT_FORM(),\n          rules: {\n            name: { required: true, message: '请输入名称' },\n          },\n          loading: false,\n        }\n      },\n\n      methods: {\n        handleClosed() {\n          // reset here\n          this.$refs.form.resetFields();\n          this.form = DEFAULT_FORM();\n          this.$emit('update:visible', false);\n        },\n\n        async handleSubmit() {\n          console.log(this.form);\n          try {\n            await this.$refs.form.validate();\n\n            await this.$confirm(`是否确定提交`, \"提示\", {\n              confirmButtonText: \"确定\",\n              cancelButtonText: \"取消\",\n              type: \"warning\"\n            });\n\n            this.loading = true;\n            let params = this._deepClone(this.form);\n            if (!!this.editId) {\n              params.id = this.editId;\n              await Update(params);\n            }else{\n              await Save(params);\n            }\n\n            this.$message.success(`${!!this.editId ? '编辑' : '新增'}成功`);\n            this.dialogVisible = false;\n            this.$emit('submit');\n          } catch (error) {\n            console.log(error);\n          }\n          this.loading = false;\n        },\n        handleCancel() {\n          this.dialogVisible = false;\n        },\n      },\n\n      watch: {\n        visible: {\n          handler(newVal, oldVal) {\n            this.dialogVisible = newVal;\n          },\n          immediate: true,\n        }\n      },\n\n    }\n    </script>\n\n    <style lang='scss' scoped>\n\n    </style>\n\n\n### 常用增删改查页面完整事例(带弹窗)单页\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <customize-dialog-form\n          :editData=\"editData\"\n          title='title'\n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n          :loading.sync=\"formLoading\"\n          :setting=\"formSetting\"\n          :Enum=\"formEnum\"\n          validate  \n        ></customize-dialog-form>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ] },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n          ],\n          formEnum: {\n            allList: [],\n          },\n          dialogVisible: false,\n          editData: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          const params = this._clean({\n            ...this.fetchParams,\n            current: this.current,\n            size: this.size,\n          });\n          console.log(params);\n          this.tableLoading = true;\n          try {\n            const response = {\n              data: [\n                { id: 1, name: 'a', aaa: 2, status: 0 },\n                { id: 2, name: 'b', aaa: 3, status: null },\n                { id: 3, name: 'c', aaa: 4, status: 1 },\n                { id: 4, name: 'd', aaa: 5, status: 0 },\n              ],\n              total: 100,\n            }\n            await this._sleep(1);\n\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editData = null\n          this.dialogVisible = true;\n        },\n        async handleEdit(id) {\n          this.dialogVisible = true;\n\n          await this._sleep(1);\n          const editData = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this.editData = editData;\n        },\n        async handleSubmitDialog(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n          this.dialogVisible = false;\n          this.editData = null;\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.fetchData();\n        this.formInit();\n      },\n    }\n    </script>\n\n","_id":"vue-element-customize@3.0.0","_integrity":"sha512-L8yQ/niPmn3VhgFEaW0KnA9ob0o6fbczXhEtkppSkbxbucD+IBNiVrISipyvi1Msp2lk859wJlgW1hOWHnqaSA==","_resolved":"/Users/luanmingli/code/vue-element-customize/vue-element-customize-3.0.0.tgz","_from":"file:vue-element-customize-3.0.0.tgz","_nodeVersion":"16.13.1","_npmVersion":"8.5.2","dist":{"integrity":"sha512-L8yQ/niPmn3VhgFEaW0KnA9ob0o6fbczXhEtkppSkbxbucD+IBNiVrISipyvi1Msp2lk859wJlgW1hOWHnqaSA==","shasum":"ffce3892711f2d56e712615ba42bbf23541cfe93","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-3.0.0.tgz","fileCount":5,"unpackedSize":325284,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKGJsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrNaQ//XCsPDY6AxWIlGrZ7Co+s2vbjY/OEtk0+zDUmXThNN9NcLy6q\r\nSPZHz+jzqOttDUk4grMLlJkQXZBl4c983pVmUUgr5eURVuwANi1sACL50bJP\r\ngQ94lmsS4HiLJSfi7r6LzLllbL9TumyphM7m4m0HTWQZp509EeJohYbbk6JP\r\nwjDdBrNs+5sbKAZaD1PlYQBDOC1pjmfn4OaSQWbyyvDjwEfE50nj2EFonnhl\r\nX/soWZlhAA/7Hje63UZ7j5JGRCE3FyGvqSmTR/h69ru8vuWw6/011OgfZrBY\r\n8IzDtnzdqUu/b94rL7t30iMyYuiZHJgO9WQ1duZel1mt+BzOZNZFAfa6xdcx\r\nG7PVK+pkyxz4btpjmQMsYmdkt1FLRrF0/eO+f/7OLj9L+pqfIW9x65dkQWFG\r\n5sVH40GqlJ+fcBYCBWRS2Dh+HizLcwkRXtIwIO6Lgn5vpP6xcxh9h6SnE3TQ\r\n6kZNeGJe1zw/kW4dZKIN7QVtn1SyhNWv5DxT2j4LVQbVclBU73ySmUNHxUc7\r\nLhrbRCm4ndkj7C5qfodxYJenuEoMEcoN+vnn2XE5KbKNhUcKr+cOchMGrjBe\r\njrqIOSCXVsDetE8koiLXGljZvbnngSpwIcjGcJi0k/Qxm/BChSQ/PCtiiN8J\r\n9uHXI1x9pVUFWzv6YWO5B3WYUlgdToFMIdM=\r\n=Eewg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEf9+z0XAJ37ZCNZGzfJW9exsfTz9GpUNcKpId4q6rysAiAbO/5E9Rf9hQh7+YKCp9A09JB1JVAliBOGQTBMdEM3Zw=="}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_3.0.0_1646813804707_0.11003009781736695"},"_hasShrinkwrap":false},"0.0.2-next":{"name":"vue-element-customize","version":"0.0.2-next","description":"vue element-ui customize template","main":"./dist/vue-element-customize.umd.js","module":"./dist/vue-element-customize.es.js","types":"./index.d.ts","repository":{"type":"git","url":"git@github.com:Lmingli/vue-element-customize.git"},"author":"luanmingli","license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","peerDependencies":{"element-plus":"^2.0.4","vue":"^3.2.31"},"devDependencies":{"@types/lodash-es":"^4.17.6","@types/node":"^17.0.21","@vitejs/plugin-vue":"^2.2.4","element-plus":"^2.0.4","sass":"^1.46.0","typescript":"^4.6.2","vite":"^2.8.6","vue":"^3.2.31","vue-tsc":"^0.32.1"},"scripts":{"serve":"vite","build":"vue-tsc --noEmit && vite build","build:utils":"babel utils --out-dir lib/utils","release":"pnpm run build && pnpm run publish"},"readme":"<!-- TOC -->\n\n- [功能列表](#功能列表)\n  - [组件](#组件)\n  - [辅助函数](#辅助函数)\n  - [自定义样式](#自定义样式)\n- [全量引入](#全量引入)\n  - [传入配置项](#传入配置项)\n- [按需引入](#按需引入)\n  - [组件引入](#组件引入)\n  - [辅助函数引入](#辅助函数引入)\n    - [辅助函数全量引入](#辅助函数全量引入)\n    - [辅助函数按需引入](#辅助函数按需引入)\n    - [自定义样式引入](#自定义样式引入)\n- [项目级配置](#项目级配置)\n  - [CustomizeTable配置](#customizetable配置)\n  - [CustomizePagination配置](#customizepagination配置)\n  - [CustomizeSearchBar配置](#customizesearchbar配置)\n  - [CustomizeSwitch配置](#customizeswitch配置)\n  - [CustomizeForm配置](#customizeform配置)\n  - [CustomizeDialogForm配置](#customizedialogform配置)\n- [CustomizeTable组件](#customizetable组件)\n  - [组件配置](#组件配置)\n    - [props](#props)\n    - [emit](#emit)\n    - [ref](#ref)\n    - [slot](#slot)\n  - [example](#example)\n- [CustomizePagination组件](#customizepagination组件)\n  - [组件配置](#组件配置-1)\n    - [props](#props-1)\n    - [emit](#emit-1)\n  - [example](#example-1)\n- [CustomizeSearchBar组件](#customizesearchbar组件)\n  - [组件配置](#组件配置-2)\n    - [props](#props-2)\n    - [emit](#emit-2)\n    - [slot](#slot-1)\n    - [ref](#ref-1)\n  - [example](#example-2)\n  - [slot example](#slot-example)\n- [CustomizeSwitch组件](#customizeswitch组件)\n  - [组件配置](#组件配置-3)\n    - [props](#props-3)\n    - [emit](#emit-3)\n    - [ref](#ref-2)\n  - [example 双向绑定](#example-双向绑定)\n  - [example 非双向绑定](#example-非双向绑定)\n  - [example type=\"inside\"](#example-typeinside)\n- [CustomizeForm组件](#customizeform组件)\n  - [组件配置](#组件配置-4)\n    - [props](#props-4)\n    - [emit](#emit-4)\n    - [slot](#slot-2)\n    - [slot-scope](#slot-scope)\n    - [ref](#ref-3)\n  - [example](#example-3)\n  - [slot example](#slot-example-1)\n- [CustomizeDialogForm组件](#customizedialogform组件)\n  - [组件配置](#组件配置-5)\n    - [props](#props-5)\n    - [emit](#emit-5)\n    - [slot](#slot-3)\n    - [slot-scope](#slot-scope-1)\n    - [ref](#ref-4)\n  - [example](#example-4)\n- [CustomizePage组件](#customizepage组件)\n  - [example](#example-5)\n- [CustomizeFormBuilder组件](#customizeformbuilder组件)\n  - [组件配置](#组件配置-6)\n    - [props](#props-6)\n    - [event](#event)\n    - [slot](#slot-4)\n  - [example](#example-6)\n- [辅助函数](#辅助函数-1)\n  - [_isEmpty](#_isempty)\n  - [_clean](#_clean)\n  - [_setValue](#_setvalue)\n  - [_formatDate](#_formatdate)\n  - [_deepClone](#_deepclone)\n  - [_sleep](#_sleep)\n  - [_deepMerge](#_deepmerge)\n- [常用增删改查页面完整事例(无弹窗)](#常用增删改查页面完整事例无弹窗)\n- [常用增删改查页面完整事例(带弹窗)](#常用增删改查页面完整事例带弹窗)\n- [常用增删改查页面完整事例(带弹窗)单页](#常用增删改查页面完整事例带弹窗单页)\n\n<!-- /TOC -->\n\n### 功能列表\n\n#### 组件\n    CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder\n\n#### 辅助函数\n    isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge,\n\n#### 自定义样式\n    select, input, el-radio-group, el-checkbox-group [round]属性\n    input [no-border]属性\n\n\n\n### 全量引入\n    import Customize from 'vue-element-customize';\n    Vue.use(Customize);\n\n#### 传入配置项\n    Vue.use(Customize, {\n      CustomizeTable: {},\n      CustomizePagination: {},\n      CustomizeSearchBar: {},\n      CustomizeSwitch: {},\n      CustomizeForm: {},\n      CustomizeDialogForm: {},\n      CustomizeFormBuilder: {},\n    });\n\n<!-- 功能列表 end -->\n\n\n\n### 按需引入\n\n#### 组件引入\n    import { CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder } from 'vue-element-customize';\n    Vue.use(CustomizeTable, {});\n    Vue.use(CustomizePagination, {});\n    Vue.use(CustomizeSearchBar, {});\n    Vue.use(CustomizeSwitch, {});\n    Vue.use(CustomizeForm, {});\n    Vue.use(CustomizeDialogForm, {});\n    Vue.use(CustomizePage);\n    Vue.use(CustomizeFormBuilder);\n\n#### 辅助函数引入\n\n##### 辅助函数全量引入\n    import { CustomizeUtils } from 'vue-element-customize';\n    Vue.use(CustomizeUtils);\n\n##### 辅助函数按需引入\n    import { isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge } from 'vue-element-customize';\n    Vue.prototype._isEmpty = isEmpty;\n    Vue.prototype._clean = clean;\n    Vue.prototype._setValue = setValue;\n    Vue.prototype._deepClone = deepClone;\n    Vue.prototype._formatDate = formatDate;\n    Vue.prototype._sleep = sleep;\n    Vue.prototype._deepMerge = deepMerge;\n\n##### 自定义样式引入\n    import 'vue-element-customize/lib/styles/index.scss'\n\n\n<!-- 按需引入 end -->\n\n\n\n<!-- 项目级配置 start -->\n### 项目级配置\n\n#### CustomizeTable配置\n    stripe: Boolean,  // true\n    border: Boolean,  // false\n    size: String,  // medium\n    headerCellStyle: Object,  // { backgroundColor: '#f5f7fa', color: '#909399',  borderBottom: 0,  height: '50px', },\n    cellStyle: Object,  // { borderBottom: 0 },\n    className: String,\n    align: String,\n\n#### CustomizePagination配置\n    pageSizes: Array,  // [10,20,50,100]\n    layout: String,  // 'total, sizes, prev, pager, next, jumper'\n    align: String,  // right\n    className: String,\n    pageSize: Number,  // 10\n\n#### CustomizeSearchBar配置\n    size: String,  // medium\n    className: String,  //''\n    blockButtons: Boolean,  // false\n    showResetButton: Boolean,  // true\n    openEnterSearch: Boolean,  // false\n    searchButtonName: String,  // 查询\n    optionAllName: String,  // 全部\n\n#### CustomizeSwitch配置\n    defaultColor: Array,  // 默认的[打开背景色, 关闭背景色]\n    className: String,\n\n#### CustomizeForm配置\n    size: String,  // medium\n    className: String,  //''\n    showSubmitButton: Boolean,  // true\n    showResetButton: Boolean,  // true\n    submitButtonName: String,  // 提交\n    resetButtonName: String,  // 重置\n    openEnterSubmit: Boolean,  // false\n    optionAllName: String,  // 全部\n    labelWidth: String,  // 120px\n    clearable: Boolean,  // true\n    hideOptionAll: Boolean,  // true\n\n#### CustomizeDialogForm配置\n    form: Object,  // 弹窗内form的配置，同CustomizeForm\n    size: String,  // medium\n    closeButtonShow: [Boolean, String],  // true\n    closeButtonName: String,  // 关闭\n    className: String,  // dialog自定义class\n\n<!-- 项目级配置 end -->\n\n\n\n<!-- CustomizeTable start -->\n### CustomizeTable组件\n\n#### 组件配置 \n##### props \n    data: Array,  // 渲染的数据\n\n    column: Array,  // 表格配置\n      {\n        prop: String,  // 渲染数据的key值\n        label: String, // key值对应的表头名\n        width: String, //宽度\n        sortable: Function,  //排序\n        formatter: Function,  //(row, column, cellValue, index) {}\n        slot: String,  // 传入的slot名\n      }\n\n    size: String,\n    type: String,  // 'index'\n    headerCellStyle: Function,  // ({row, column, rowIndex, columnIndex}) {} '表头样式'\n    cellStyle: Object,\n    sortable: Boolean,\n    stripe: Boolean,\n    border: Boolean,\n    className: String,\n    maxHeight: [String, Number],\n    align: String,  // 'center'\n\n##### emit\n    @sortChange  //排序\n    @selectionChange\n\n##### ref\n    ref: 'table'\n\n##### slot\n    slot before // 默认slot 前\n    slot after  // 默认slot 最后\n\n#### example\n    <customize-table\n      :data=\"tableData\"\n      :column=\"tableColumn\"\n      v-loading=\"tableLoading\"\n    >\n      <template #slotName>\n        <el-table-column label=\"slot-slotName\" align=\"center\">\n          <template #default=\"{ row }\">\n            <span>{{ _isEmpty(row.status) }}</span>\n          </template>\n        </el-table-column>\n      </template>\n      <template #after>\n        <el-table-column label=\"操作\" align=\"center\">\n          <template #default=\"{ row }\">\n            <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n          </template>\n        </el-table-column>\n      </template>\n    </customize-table>\n\n    data() {\n      return {\n        tableLoading: false,\n        tableData: [],\n        tableColumn: [\n          // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n          { label: '名称', prop: 'name' },\n          { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n          { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n            const Enum = {\n              0: '暂停',\n              1: '启用',\n            }\n            return Enum[cellValue] || '--';\n          }},\n          { slot: 'slotName' }\n        ],\n      }\n    },\n\n<!-- CustomizeTable end -->\n\n\n<!-- CustomizePagination start -->\n### CustomizePagination组件\n\n#### 组件配置 \n##### props \n    current.sync: [Number, String],  // 当前页\n    size.sync: [Number, String],  // 当前每页个数\n    total: [Number, String],  // 总个数\n\n    pageSizes: Array,  // 每页显示个数选择器的选项设置\n    layout: String,  // 组件布局 'sizes, prev, pager, next, jumper, ->, total, slot',\n    align: String,  // 组件位置 text-align\n    className: String,\n\n##### emit\n    @change\n\n#### example\n    <customize-pagination\n      :current.sync=\"current\"\n      :total=\"total\"\n      :size.sync=\"size\"\n      @change=\"handleChangePage\"\n      style=\"padding-bottom: 30px;\"\n    ></customize-pagination>\n\n    data() {\n      return {\n        current: 1,\n        total: 0,\n        size: 10,\n      }\n    },\n\n    methods: {\n      handleChangePage({ current, size }) {\n        this.fetchData();\n      },\n    },\n\n<!-- CustomizePagination end -->\n\n\n<!-- CustomizeSearchBar start -->\n### CustomizeSearchBar组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/select\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n\n      slot: String,  // slot  #slot=\"{ form }\"\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    inlineButtons: Boolean  // 按钮不换行\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    blockButtons: Boolean,  // 是否将按钮组换行展示，默认false\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    searchButtonName: String,  // 查询按钮文案\n    full-width: Boolean,  // inline模式铺满宽度，输入框宽度自适应\n    inline: Boolean,  // inline 默认true\n    margin: String,  // el-form-item margin-right '10px'\n    marginLeft: String,  // el-form-item margin-right设为0，margin-left为该px\n    showSearchButton: Boolean,  // 是否显示搜索按钮 默认true\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // select全部选项的名称，默认全部\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <customize-search-bar\n      :loading.sync=\"searchBarLoading\"\n      @submit=\"handleSubmitSearch\"\n      :setting=\"searchBarSetting\"\n      :Enum=\"searchBarEnum\"\n    ></customize-search-bar>\n\n    data() {\n      return {\n        searchBarLoading: false,\n        searchBarSetting: [\n          { type: 'input', label: '名称', prop: 'name' },\n          { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n          { slot: 'type', prop: 'type' },\n        ],\n        searchBarEnum: {\n          allList: [],\n        },\n      }\n    },\n\n    methods: {\n      fetchData() {\n        this.searchBarLoading = false;\n      },\n      handleSubmitSearch(searchParams) {\n        this.current = 1;\n        this.fetchParams = { ...searchParams };\n        this.fetchData();\n      },\n      async searchBarInit() {\n        const { data } = await GetList({\n          pageNo:1,\n          paeSize: 100,\n        });\n        let allList = data.itemInfos || [];\n        allList = allList.map(n => ({\n          label: n.name,\n          value: n.id,\n        }))\n        this.$set(this.searchBarEnum, 'allList', allList);\n      },\n    },\n\n#### slot example\n    <template #type=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeSearchBar end -->\n\n\n\n<!-- CustomizeSwitch start -->\n### CustomizeSwitch组件\n\n#### 组件配置\n##### props\n    type: String,  // inside/right\n    mode: String,  // 同type\n\n    value/v-model: [Number, String, Boolean],\n\n    values: Array,  // [打开时value, 关闭时value]\n\n    text: Array,  // [打开时文案, 关闭时文案]\n    icon: Array,  // [打开时图标, 关闭时图标] 开启后覆盖text\n    color: Array,  // [打开时背景色, 关闭时背景色]\n    disabled: Boolean,  // 默认false,\n    width: Number,  // element中宽度，默认40\n    name: String,\n    validateEvent: Boolean,  // 改变后是否触发表单验证\n    activeTextColor: String,  // type为inside时文字颜色\n    className: String,\n    size: String,  // medium/small/mini\n\n##### emit\n    @change\n\n##### ref\n    ref: switch\n\n#### example 双向绑定\n    <customize-switch\n      v-model=\"switchValue\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n      }\n    },\n\n#### example 非双向绑定\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n        switchDisabled: false,\n      }\n    },\n\n    methods: {\n      async handleSwitchChange(value) {\n        try {\n          this.switchDisabled = true;\n          await this._sleep(1);\n          this.switchValue = value;\n          this.$message.success('操作成功');\n        } catch (error) {\n          \n        }\n        this.switchDisabled = false;\n      },\n    },\n\n#### example type=\"inside\"\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n      type='inside'\n      :width=\"54\"\n      :color=\"['#67C23A', '#909399']\"\n      active-text-color=\"#fff\"\n      size=\"small\"\n    ></customize-switch>\n\n<!-- CustomizeSwitch end -->\n\n\n\n<!-- CustomizeForm start -->\n### CustomizeForm组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/textarea/inputNumber/select/text/date/datepicker/switch/image/object/array/\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      validType: String,  // rules type, url/email/date\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n      labelWidth: String,  // label-width\n\n      slot: String,  // slot  #slot=\"{ form }\"\n      slotInside: String,  // 插入至el-form-item内\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      enumKey: Array,  // select时，enum的key值，默认['label', 'value']\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n      clearable: Boolean,  // date时，el-date-picker的 clearable，默认true\n      disabled: Boolean,  // disabled状态，默认false\n      dataType: Number/Boolean,  // 数据类型，默认String\n      inputNumber: Boolean,  // true且type number时显示el-input-number\n\n      visible: Array | Function,  // [属性名, 属性值] 设置后 当某属性为该值时，渲染该条。为function时return true时显示\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    showSubmitButton: Boolean,  // 是否展示提交按钮，默认true\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    submitButtonName: String,  // 提交按钮文案，默认提交\n    resetButtonName: String,  // 重置按钮文案，默认重置\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    margin: String,  // el-form-item margin-bottom\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // 下拉选择全部的名称，默认全部\n    labelWidth: String,  // el-form label-width，默认120px\n    itemWidth: String,  // form-item的宽度，默认auto\n    clearable: Boolean,  // el-date-picker clearable，默认true\n    hideOptionAll: Boolean, // select时，隐藏‘全部’选项传入true\n    hideOperate: Boolean,  // 隐藏操作el-form-item\n    cleanProps: Boolean,  // submit时仅传出setting中有的属性，删除其它属性\n    fn: Array,  // 传入的函数 配合image中fnName\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #button-before\n    #button\n\n##### slot-scope\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <template>\n      <customize-form\n        :loading.sync=\"formLoading\"\n        @submit=\"handleSubmit\"\n        :setting=\"formSetting\"\n        :Enum=\"formEnum\"\n        validate\n      ></customize-form>\n    </template>\n    \n    <script>\n    export default {\n      data() {\n        return {\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', disabled: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '' },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            } },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'object', label: '对象', prop: 'obj', default: {}, children: [\n              { type: 'input', label: '名称', prop: 'name', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'array', label: '数组', prop: 'arr', len: 3, default: [], children: [\n              { type: 'input', label: '名称', prop: 'name' },\n              { type: 'input', label: '名称2', prop: 'name2', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'image', label: '图片', prop: 'image', fn: this.uploadFn },\n          ],\n          formEnum: {\n            allList: [],\n          },\n        }\n      },\n\n      methods: {\n        async handleSubmit(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n        },\n\n        async uploadFn() {\n          const url = '';\n          await this._sleep(1);\n\n          return Promise.resolve(url);\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.formInit();\n      },\n    }\n    </script>\n\n#### slot example\n    <template #slotName=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeForm end -->\n\n\n\n<!-- CustomizeDialogForm start -->\n### CustomizeDialogForm组件\n\n#### 组件配置 \n##### props\n    visible.sync: Boolean,  // 弹窗是否显示\n    editData: Any,  // 以编辑进入时回显数据\n    title: [String, Array],  // 弹窗标题，为数组时[新建title, 编辑title]\n    top: String,  // el-dialog top\n    width: String,  // el-dialog width\n    size: String,  // medium\n    closeButtonShow:  [Boolean, String],  // 是否展示关闭弹窗按钮，默认展示。传入String时控制slot(button-before, button)\n    closeButtonName: String,  // 关闭弹窗按钮名称，默认关闭\n    className: String,  // dialog自定义class\n    其他prop同CustomizeForm\n\n##### emit\n    @submit form\n\n##### slot\n    同CustomizeForm\n    #button-before\n    #button\n\n##### slot-scope\n    同CustomizeForm\n    #after=\"form\" \n\n##### ref\n    ref: dialog\n\n#### example\n    <customize-dialog-form\n      title='123'\n      :visible.sync=\"dialogVisible\" \n      @submit=\"handleSubmitDialog\"\n      :loading.sync=\"submitLoading\"\n      :setting=\"formSetting\"\n      :Enum=\"formEnum\"\n      validate  \n    ></customize-dialog-form>\n\n    <script>\n    export default {\n      /* 作为单独组件引入时 */\n      // props: {\n      //   visible: Boolean,\n      // },\n\n      data() {\n        return { \n          submitLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', default: '1', required: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n            { slot: 'type', prop: 'type' },\n          ],\n          formEnum: {\n            allList: [],\n          },\n      \n          editData: null,\n\n          dialogVisible: false,\n        }\n      },\n\n      computed: {\n        /* 作为单独组件引入时，外部 :visible.sync */\n        // dialogVisible: {\n        //   get() {\n        //     return this.visible;\n        //   },\n        //   set(val) {\n        //     this.$emit('update:visible', val);\n        //   },\n        // },\n      },\n\n      methods: {\n        async handleSubmitDialog(form) {\n          console.log(form);\n          try {\n            /* 提交表单 */\n            await this._sleep(1)\n            \n            this.$message.success('提交成功');\n            this.dialogVisible = false;\n          } catch (error) {\n            console.log('submitDialogError', error);\n          }\n          this.submitLoading = false;\n        },\n\n        handleCreate() {\n          // 以创建进入\n          this.editData = null \n          this.dialogVisible = true;    \n        },\n        handleEdit() {\n          // 以编辑进入 同步数据\n          this.editData = {\n            name: 'name',\n            type: 2,\n          }\n          this.dialogVisible = true;    \n        },\n        async handleEditAsync() {   \n          // 以编辑进入 异步数据\n          this.editData = null\n          this.dialogVisible = true;\n          await this._sleep(1);\n          this.editData = { \n            name: 'name2',\n            type: 3,\n          }\n        }, \n        \n        async formInit() {\n          const data = {\n            itemInfos: [\n              {name:'a',id:1},\n              {name:'b',id:2},\n              {name:'c',id:3},\n            ]\n          } \n          this._sleep(2)\n          let allList = data.itemInfos || [];  \n          allList = allList.map(n => ({ \n            label: n.name, \n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList); \n        },\n      }\n    }\n    </script>\n\n<!-- CustomizeDialogForm end -->\n\n\n\n<!-- CustomizePage start -->\n### CustomizePage组件\n\n#### example\n    <template>\n      <customize-page\n        :pageSetting=\"pageSetting\"\n        :searchBarProps=\"searchBarProps\"\n        :dialogProps=\"dialogProps\"\n        :Enum=\"Enum\"\n        :tableProps=\"tableProps\"\n        :tableDataFn=\"tableDataFn\"\n        :editDataFn=\"editDataFn\"\n        :submitFn=\"submitFn\"\n      >\n        <template #slotName>\n          <el-table-column label=\"slot\" prop=\"slotName\">\n            <template #default=\"{ row }\">\n              {{ row.id }}\n            </template>\n          </el-table-column>\n        </template>\n\n        <template #tableButton=\"{ id }\">\n          <el-button type=\"danger\" size=\"mini\" @click=\"handleDelete(id)\">删除</el-button>\n        </template>\n      </customize-page>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          pageSetting: [\n            { label: 'ID', prop: 'id', width: '100px' },\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allSelectList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ], formatter: (row, column, cellValue, index) => (this.Enum.allSelectList.find(n => n.value == cellValue) || {})['label'] || '' },\n            { type: 'text', label: '啊啊', default: 'text', prop: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { slot: 'slotName', prop: 'slotName' },\n          ],\n\n          Enum: {\n            allSelectList: [],\n          },\n          \n          searchBarProps: ['name', 'type'],\n          dialogProps: ['name', 'type', 'text', 'radio', 'checkbox', 'switch'],\n          tableProps: ['id', 'name', 'type', 'slotName'],\n        }\n      },\n\n      methods: {\n        async tableDataFn(form) {\n          console.log(form);\n\n          /* 获取列表 */\n          const data = [\n            { id: '1', name: 'aaa', type: 1 },\n            { id: '2', name: 'bbb', type: 2 },\n            { id: '3', name: 'ccc', type: 3 },\n            { id: '4', name: 'ddd', type: 1 },\n          ];\n          const total = 100;\n          await this._sleep(1);\n\n          return Promise.resolve({ data, total });\n        },\n        async editDataFn(id) {\n          /* 获取详情 */\n          const data = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this._sleep(1);\n\n          return Promise.resolve(data);\n        },\n        async submitFn(form) {\n          console.log(form);\n          /* 提交表单 */\n          await this._sleep(1);\n\n          return Promise.resolve();\n        },\n        \n        async init() {\n          const allSelectList = [\n            { label: 'a', value: 1 },\n            { label: 'b', value: 2 },\n            { label: 'c', value: 3 },\n          ];\n          await this._sleep(1);\n          this.$set(this.Enum, 'allSelectList', allSelectList);\n        },\n\n        handleDelete(id) {\n          this.$alert(`删除 ${id}`);\n        },\n      },\n\n      created() {\n        this.init();\n      },\n\n    }\n    </script>\n\n    <style>\n    html, body {\n      margin: 0;\n    }\n    </style>\n\n<!-- CustomizePage end -->\n\n\n\n<!-- CustomizeFormBuilder start -->\n### CustomizeFormBuilder组件\n\n#### 组件配置 \n##### props\n    debug: Boolean,  // 实时显示formSetting数据\n    operate: Array,  // 操作区展示的按钮 ['import', 'clear', 'preview', 'schema', 'code']\n\n##### event\n    getSchema,  // 获取当前配置转码的schema\n    setSchema,  // 设置schema字符串并重新渲染\n\n##### slot\n    #operate-title 操作区域标题名\n    #operate-before 操作区域前置按钮\n    #operate-after 操作区域后置按钮\n\n\n#### example\n    <template>\n      <customize-form-builder ref=\"formBuilder\"></customize-form-builder>\n    </template>\n\n    <script>\n    export default {\n      methods: {\n        getSchema() {\n          const result = this.$refs.formBuilder.getSchema();\n          console.log(result)\n        },\n        setSchema() {\n          const schemaStr = `{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"type\":\"object\",\"properties\":{\"input_1588506741033\":{\"type\":\"input\",\"label\":\"单行文本\",\"prop\":\"input_1588506741033\",\"key\":1588506741033}}}`\n          this.$refs.formBuilder.setSchema(schemaStr);\n        },\n      },\n\n    }\n    </script>\n\n\n<!-- CustomizeFormBuilder end -->\n\n\n\n<!-- 辅助函数 start -->\n### 辅助函数\n\n#### _isEmpty\n判断是否不为空  \n@return { Boolean }\n\n#### _clean\n删除对象中值为空的属性  \n@param { Object }  \n@return { Object }  \n\n#### _setValue\n值不为空直接返回，为空返回默认值  \n@param { Any, Any }  需判断的值，默认值  \n@return { Any }  \n\n#### _formatDate\n时间格式化  \n@params { [String, Number, Date], String }  时间，格式(默认 yyyy-MM-dd hh:mm:ss)  \n@return { String }  \n\n#### _deepClone\n深拷贝  \n@params { Object }  \n@return { Object }  \n\n#### _sleep\n延迟几秒后继续执行  \n@params { Number }  延迟秒数  \n@return { Promise } resolve  \n\n#### _deepMerge\n对象深度合并    \n@params { Object, Object }  延迟秒数  \n@return { Object }    \n_deepMerge(a, b, [..option])  \n_deepMerge.all([a, b, c], [..option])  \n\n<!-- 辅助函数 end -->\n\n\n\n### 常用增删改查页面完整事例(无弹窗)\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        ></customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      name: 'home',\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                console.log(this._clean({\n                  ...this.fetchParams,\n                  page: this.current,\n                  size: this.size,\n                }))\n                const response = {\n                  data: [\n                    { name: 'a', aaa: 2, status: 0 },\n                    { name: 'b', aaa: 3, status: null },\n                    { name: 'c', aaa: 4, status: 1 },\n                    { name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 1111)\n            })\n\n            // const response = await GetList(this._clean({\n            //   ...this.fetchParams,\n            //   page: this.current,\n            //   size: this.size,\n            // }))\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n\n\n### 常用增删改查页面完整事例(带弹窗)\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <dialog-create\n          :editId=\"editId\" \n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n        ></dialog-create>\n      </div>\n    </template>\n\n    <script>\n    import DialogCreate from './DialogCreate';\n\n    export default {\n      components: {\n        DialogCreate,\n      },\n\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          dialogVisible: false,\n          editId: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                \n                const response = {\n                  data: [\n                    { id: 1, name: 'a', aaa: 2, status: 0 },\n                    { id: 2, name: 'b', aaa: 3, status: null },\n                    { id: 3, name: 'c', aaa: 4, status: 1 },\n                    { id: 4, name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 222)\n\n              // const response = await GetList(this._clean({\n              //   ...this.fetchParams,\n              //   page: this.current,\n              //   size: this.size,\n              // }))\n              this.tableData = response.data || [];\n              this.total = response.total || 0;\n            })\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editId = null;\n          this.dialogVisible = true;\n        },\n        handleEdit(id) {\n          this.editId = id;\n          this.dialogVisible = true;\n        },\n        handleSubmitDialog() {\n          console.log('handleDialog');\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n---\n\n    <template>\n      <el-dialog\n        title=\"title\"\n        top=\"15vh\"\n        width=\"600px\"\n        :visible.sync=\"dialogVisible\"\n        @close=\"handleClosed\"\n      >\n        <el-form :model=\"form\" :rules=\"rules\" ref=\"form\" label-width=\"180px\" size=\"small\">\n          <el-form-item label=\"名称:\" prop=\"name\">\n            <el-input v-model=\"form.name\"></el-input>\n          </el-form-item>\n\n          <el-form-item>\n            <el-button type=\"primary\" @click=\"handleSubmit\" :loading=\"loading\">提交</el-button>\n            <el-button @click=\"handleCancel\">取消</el-button>\n          </el-form-item>\n        </el-form>\n      </el-dialog>\n    </template>\n\n    <script>\n    const DEFAULT_FORM = () => ({\n      name: '',\n    });\n\n    export default {\n      props: {\n        visible: Boolean,\n        editId: {},\n      },\n\n      data() {\n        return {\n          dialogVisible: false,\n\n          form: DEFAULT_FORM(),\n          rules: {\n            name: { required: true, message: '请输入名称' },\n          },\n          loading: false,\n        }\n      },\n\n      methods: {\n        handleClosed() {\n          // reset here\n          this.$refs.form.resetFields();\n          this.form = DEFAULT_FORM();\n          this.$emit('update:visible', false);\n        },\n\n        async handleSubmit() {\n          console.log(this.form);\n          try {\n            await this.$refs.form.validate();\n\n            await this.$confirm(`是否确定提交`, \"提示\", {\n              confirmButtonText: \"确定\",\n              cancelButtonText: \"取消\",\n              type: \"warning\"\n            });\n\n            this.loading = true;\n            let params = this._deepClone(this.form);\n            if (!!this.editId) {\n              params.id = this.editId;\n              await Update(params);\n            }else{\n              await Save(params);\n            }\n\n            this.$message.success(`${!!this.editId ? '编辑' : '新增'}成功`);\n            this.dialogVisible = false;\n            this.$emit('submit');\n          } catch (error) {\n            console.log(error);\n          }\n          this.loading = false;\n        },\n        handleCancel() {\n          this.dialogVisible = false;\n        },\n      },\n\n      watch: {\n        visible: {\n          handler(newVal, oldVal) {\n            this.dialogVisible = newVal;\n          },\n          immediate: true,\n        }\n      },\n\n    }\n    </script>\n\n    <style lang='scss' scoped>\n\n    </style>\n\n\n### 常用增删改查页面完整事例(带弹窗)单页\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <customize-dialog-form\n          :editData=\"editData\"\n          title='title'\n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n          :loading.sync=\"formLoading\"\n          :setting=\"formSetting\"\n          :Enum=\"formEnum\"\n          validate  \n        ></customize-dialog-form>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ] },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n          ],\n          formEnum: {\n            allList: [],\n          },\n          dialogVisible: false,\n          editData: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          const params = this._clean({\n            ...this.fetchParams,\n            current: this.current,\n            size: this.size,\n          });\n          console.log(params);\n          this.tableLoading = true;\n          try {\n            const response = {\n              data: [\n                { id: 1, name: 'a', aaa: 2, status: 0 },\n                { id: 2, name: 'b', aaa: 3, status: null },\n                { id: 3, name: 'c', aaa: 4, status: 1 },\n                { id: 4, name: 'd', aaa: 5, status: 0 },\n              ],\n              total: 100,\n            }\n            await this._sleep(1);\n\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editData = null\n          this.dialogVisible = true;\n        },\n        async handleEdit(id) {\n          this.dialogVisible = true;\n\n          await this._sleep(1);\n          const editData = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this.editData = editData;\n        },\n        async handleSubmitDialog(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n          this.dialogVisible = false;\n          this.editData = null;\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.fetchData();\n        this.formInit();\n      },\n    }\n    </script>\n\n","_id":"vue-element-customize@0.0.2-next","_integrity":"sha512-kDdvTSppcwL3QuT6GbNtSMe/RYBMpyHgK7F1cbsfbwWmkS4I3AHjjaoQF8IFNLrNZOfJu+Xx4s/wqHwnHjctMg==","_resolved":"/Users/luanmingli/code/vue-element-customize/vue-element-customize-0.0.2-next.tgz","_from":"file:vue-element-customize-0.0.2-next.tgz","_nodeVersion":"16.13.1","_npmVersion":"8.5.2","dist":{"integrity":"sha512-kDdvTSppcwL3QuT6GbNtSMe/RYBMpyHgK7F1cbsfbwWmkS4I3AHjjaoQF8IFNLrNZOfJu+Xx4s/wqHwnHjctMg==","shasum":"ccaeb3acb5805baf147e6297ea27e54b07f47bd7","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.2-next.tgz","fileCount":5,"unpackedSize":325309,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKGRrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpUCg/9HHflkECSXOD/ROd4fSu+5I/Dm8Kqp/KfuGQGto73hygxzw70\r\ntsZzwU7tgK/YDo/7i8+rN/Y/lsHiT2iRhzyz7P1Ujk/eynuIKHU65Vjx77TJ\r\nYGNv4HEeNofiz6DEPbtWbByAHZqJn4ipyWKoiX+aKcnLP5KtK98J9O7rsWsR\r\nohCyGC923/FoIURgw0GPu8OhkGGpiBgBxAaCCT/VYAw4bkzZ/KiL8mbNHAHx\r\nFIU8C/ZUNEHdN4ZFc8O0tv320xM3o0ZjhuOIvI+5C05Vae87nc1BiNkFz7SF\r\n4VnV2EDZh+Fd+cWVrO0KrI17qevsgcJVfs8g2kD3k0FgAiYpupS4SH3YHdh7\r\nIV55+4tkLxTdCAlca/gPSs2oTXABLGA6AenvMZADcRsSm0q4/7B63BXB3lEf\r\nGJnX8XIbVUnk3CEPfDYvNrffxZdPFKwjDhT7W0ISr/zBimVQTkSUvNoVkkPi\r\nTzzyKRVKxOuTq/Pzr0b6hUUtzCFu2ThWEU5sBuXztQaAOxVEfXXvS/4hXrkM\r\nVFRb0h9wWKeXdHEYhc3E0I0mkE7tbegdVMxZUD3J3gmlYiND9UrX1rYapl0H\r\nr4TfKBBu2OjeQ/jptwVGKOP20NUv7OzEArN036tsaXZrSUQeXNLqdFOvRtV/\r\ntfSSZB+f/VIXGmP/LN2k9Gg1+kOx+csEFW8=\r\n=TMD+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICZTlq4D1S4nfZV2o6vVM2cA+GCBwm8HCnlwjVfgd1r1AiEA0dEi64o9aGbCT7QKa3KSTUyrfEHHSvSnfCzu/qPlig8="}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.2-next_1646814315579_0.7693964105978179"},"_hasShrinkwrap":false},"0.0.3-next":{"name":"vue-element-customize","version":"0.0.3-next","description":"vue element-ui customize template","main":"./dist/vue-element-customize.umd.js","module":"./dist/vue-element-customize.es.js","types":"./index.d.ts","repository":{"type":"git","url":"git@github.com:Lmingli/vue-element-customize.git"},"author":"luanmingli","license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","peerDependencies":{"element-plus":"^2.0.4","vue":"^3.2.31"},"devDependencies":{"@types/lodash-es":"^4.17.6","@types/node":"^17.0.21","@vitejs/plugin-vue":"^2.2.4","element-plus":"^2.0.4","sass":"^1.46.0","typescript":"^4.6.2","vite":"^2.8.6","vue":"^3.2.31","vue-tsc":"^0.32.1"},"scripts":{"serve":"vite","build":"vue-tsc --noEmit && vite build","build:utils":"babel utils --out-dir lib/utils","release":"pnpm run build && pnpm run publish"},"readme":"<!-- TOC -->\n\n- [功能列表](#功能列表)\n  - [组件](#组件)\n  - [辅助函数](#辅助函数)\n  - [自定义样式](#自定义样式)\n- [全量引入](#全量引入)\n  - [传入配置项](#传入配置项)\n- [按需引入](#按需引入)\n  - [组件引入](#组件引入)\n  - [辅助函数引入](#辅助函数引入)\n    - [辅助函数全量引入](#辅助函数全量引入)\n    - [辅助函数按需引入](#辅助函数按需引入)\n    - [自定义样式引入](#自定义样式引入)\n- [项目级配置](#项目级配置)\n  - [CustomizeTable配置](#customizetable配置)\n  - [CustomizePagination配置](#customizepagination配置)\n  - [CustomizeSearchBar配置](#customizesearchbar配置)\n  - [CustomizeSwitch配置](#customizeswitch配置)\n  - [CustomizeForm配置](#customizeform配置)\n  - [CustomizeDialogForm配置](#customizedialogform配置)\n- [CustomizeTable组件](#customizetable组件)\n  - [组件配置](#组件配置)\n    - [props](#props)\n    - [emit](#emit)\n    - [ref](#ref)\n    - [slot](#slot)\n  - [example](#example)\n- [CustomizePagination组件](#customizepagination组件)\n  - [组件配置](#组件配置-1)\n    - [props](#props-1)\n    - [emit](#emit-1)\n  - [example](#example-1)\n- [CustomizeSearchBar组件](#customizesearchbar组件)\n  - [组件配置](#组件配置-2)\n    - [props](#props-2)\n    - [emit](#emit-2)\n    - [slot](#slot-1)\n    - [ref](#ref-1)\n  - [example](#example-2)\n  - [slot example](#slot-example)\n- [CustomizeSwitch组件](#customizeswitch组件)\n  - [组件配置](#组件配置-3)\n    - [props](#props-3)\n    - [emit](#emit-3)\n    - [ref](#ref-2)\n  - [example 双向绑定](#example-双向绑定)\n  - [example 非双向绑定](#example-非双向绑定)\n  - [example type=\"inside\"](#example-typeinside)\n- [CustomizeForm组件](#customizeform组件)\n  - [组件配置](#组件配置-4)\n    - [props](#props-4)\n    - [emit](#emit-4)\n    - [slot](#slot-2)\n    - [slot-scope](#slot-scope)\n    - [ref](#ref-3)\n  - [example](#example-3)\n  - [slot example](#slot-example-1)\n- [CustomizeDialogForm组件](#customizedialogform组件)\n  - [组件配置](#组件配置-5)\n    - [props](#props-5)\n    - [emit](#emit-5)\n    - [slot](#slot-3)\n    - [slot-scope](#slot-scope-1)\n    - [ref](#ref-4)\n  - [example](#example-4)\n- [CustomizePage组件](#customizepage组件)\n  - [example](#example-5)\n- [CustomizeFormBuilder组件](#customizeformbuilder组件)\n  - [组件配置](#组件配置-6)\n    - [props](#props-6)\n    - [event](#event)\n    - [slot](#slot-4)\n  - [example](#example-6)\n- [辅助函数](#辅助函数-1)\n  - [_isEmpty](#_isempty)\n  - [_clean](#_clean)\n  - [_setValue](#_setvalue)\n  - [_formatDate](#_formatdate)\n  - [_deepClone](#_deepclone)\n  - [_sleep](#_sleep)\n  - [_deepMerge](#_deepmerge)\n- [常用增删改查页面完整事例(无弹窗)](#常用增删改查页面完整事例无弹窗)\n- [常用增删改查页面完整事例(带弹窗)](#常用增删改查页面完整事例带弹窗)\n- [常用增删改查页面完整事例(带弹窗)单页](#常用增删改查页面完整事例带弹窗单页)\n\n<!-- /TOC -->\n\n### 功能列表\n\n#### 组件\n    CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder\n\n#### 辅助函数\n    isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge,\n\n#### 自定义样式\n    select, input, el-radio-group, el-checkbox-group [round]属性\n    input [no-border]属性\n\n\n\n### 全量引入\n    import Customize from 'vue-element-customize';\n    Vue.use(Customize);\n\n#### 传入配置项\n    Vue.use(Customize, {\n      CustomizeTable: {},\n      CustomizePagination: {},\n      CustomizeSearchBar: {},\n      CustomizeSwitch: {},\n      CustomizeForm: {},\n      CustomizeDialogForm: {},\n      CustomizeFormBuilder: {},\n    });\n\n<!-- 功能列表 end -->\n\n\n\n### 按需引入\n\n#### 组件引入\n    import { CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder } from 'vue-element-customize';\n    Vue.use(CustomizeTable, {});\n    Vue.use(CustomizePagination, {});\n    Vue.use(CustomizeSearchBar, {});\n    Vue.use(CustomizeSwitch, {});\n    Vue.use(CustomizeForm, {});\n    Vue.use(CustomizeDialogForm, {});\n    Vue.use(CustomizePage);\n    Vue.use(CustomizeFormBuilder);\n\n#### 辅助函数引入\n\n##### 辅助函数全量引入\n    import { CustomizeUtils } from 'vue-element-customize';\n    Vue.use(CustomizeUtils);\n\n##### 辅助函数按需引入\n    import { isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge } from 'vue-element-customize';\n    Vue.prototype._isEmpty = isEmpty;\n    Vue.prototype._clean = clean;\n    Vue.prototype._setValue = setValue;\n    Vue.prototype._deepClone = deepClone;\n    Vue.prototype._formatDate = formatDate;\n    Vue.prototype._sleep = sleep;\n    Vue.prototype._deepMerge = deepMerge;\n\n##### 自定义样式引入\n    import 'vue-element-customize/lib/styles/index.scss'\n\n\n<!-- 按需引入 end -->\n\n\n\n<!-- 项目级配置 start -->\n### 项目级配置\n\n#### CustomizeTable配置\n    stripe: Boolean,  // true\n    border: Boolean,  // false\n    size: String,  // medium\n    headerCellStyle: Object,  // { backgroundColor: '#f5f7fa', color: '#909399',  borderBottom: 0,  height: '50px', },\n    cellStyle: Object,  // { borderBottom: 0 },\n    className: String,\n    align: String,\n\n#### CustomizePagination配置\n    pageSizes: Array,  // [10,20,50,100]\n    layout: String,  // 'total, sizes, prev, pager, next, jumper'\n    align: String,  // right\n    className: String,\n    pageSize: Number,  // 10\n\n#### CustomizeSearchBar配置\n    size: String,  // medium\n    className: String,  //''\n    blockButtons: Boolean,  // false\n    showResetButton: Boolean,  // true\n    openEnterSearch: Boolean,  // false\n    searchButtonName: String,  // 查询\n    optionAllName: String,  // 全部\n\n#### CustomizeSwitch配置\n    defaultColor: Array,  // 默认的[打开背景色, 关闭背景色]\n    className: String,\n\n#### CustomizeForm配置\n    size: String,  // medium\n    className: String,  //''\n    showSubmitButton: Boolean,  // true\n    showResetButton: Boolean,  // true\n    submitButtonName: String,  // 提交\n    resetButtonName: String,  // 重置\n    openEnterSubmit: Boolean,  // false\n    optionAllName: String,  // 全部\n    labelWidth: String,  // 120px\n    clearable: Boolean,  // true\n    hideOptionAll: Boolean,  // true\n\n#### CustomizeDialogForm配置\n    form: Object,  // 弹窗内form的配置，同CustomizeForm\n    size: String,  // medium\n    closeButtonShow: [Boolean, String],  // true\n    closeButtonName: String,  // 关闭\n    className: String,  // dialog自定义class\n\n<!-- 项目级配置 end -->\n\n\n\n<!-- CustomizeTable start -->\n### CustomizeTable组件\n\n#### 组件配置 \n##### props \n    data: Array,  // 渲染的数据\n\n    column: Array,  // 表格配置\n      {\n        prop: String,  // 渲染数据的key值\n        label: String, // key值对应的表头名\n        width: String, //宽度\n        sortable: Function,  //排序\n        formatter: Function,  //(row, column, cellValue, index) {}\n        slot: String,  // 传入的slot名\n      }\n\n    size: String,\n    type: String,  // 'index'\n    headerCellStyle: Function,  // ({row, column, rowIndex, columnIndex}) {} '表头样式'\n    cellStyle: Object,\n    sortable: Boolean,\n    stripe: Boolean,\n    border: Boolean,\n    className: String,\n    maxHeight: [String, Number],\n    align: String,  // 'center'\n\n##### emit\n    @sortChange  //排序\n    @selectionChange\n\n##### ref\n    ref: 'table'\n\n##### slot\n    slot before // 默认slot 前\n    slot after  // 默认slot 最后\n\n#### example\n    <customize-table\n      :data=\"tableData\"\n      :column=\"tableColumn\"\n      v-loading=\"tableLoading\"\n    >\n      <template #slotName>\n        <el-table-column label=\"slot-slotName\" align=\"center\">\n          <template #default=\"{ row }\">\n            <span>{{ _isEmpty(row.status) }}</span>\n          </template>\n        </el-table-column>\n      </template>\n      <template #after>\n        <el-table-column label=\"操作\" align=\"center\">\n          <template #default=\"{ row }\">\n            <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n          </template>\n        </el-table-column>\n      </template>\n    </customize-table>\n\n    data() {\n      return {\n        tableLoading: false,\n        tableData: [],\n        tableColumn: [\n          // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n          { label: '名称', prop: 'name' },\n          { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n          { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n            const Enum = {\n              0: '暂停',\n              1: '启用',\n            }\n            return Enum[cellValue] || '--';\n          }},\n          { slot: 'slotName' }\n        ],\n      }\n    },\n\n<!-- CustomizeTable end -->\n\n\n<!-- CustomizePagination start -->\n### CustomizePagination组件\n\n#### 组件配置 \n##### props \n    current.sync: [Number, String],  // 当前页\n    size.sync: [Number, String],  // 当前每页个数\n    total: [Number, String],  // 总个数\n\n    pageSizes: Array,  // 每页显示个数选择器的选项设置\n    layout: String,  // 组件布局 'sizes, prev, pager, next, jumper, ->, total, slot',\n    align: String,  // 组件位置 text-align\n    className: String,\n\n##### emit\n    @change\n\n#### example\n    <customize-pagination\n      :current.sync=\"current\"\n      :total=\"total\"\n      :size.sync=\"size\"\n      @change=\"handleChangePage\"\n      style=\"padding-bottom: 30px;\"\n    ></customize-pagination>\n\n    data() {\n      return {\n        current: 1,\n        total: 0,\n        size: 10,\n      }\n    },\n\n    methods: {\n      handleChangePage({ current, size }) {\n        this.fetchData();\n      },\n    },\n\n<!-- CustomizePagination end -->\n\n\n<!-- CustomizeSearchBar start -->\n### CustomizeSearchBar组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/select\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n\n      slot: String,  // slot  #slot=\"{ form }\"\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    inlineButtons: Boolean  // 按钮不换行\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    blockButtons: Boolean,  // 是否将按钮组换行展示，默认false\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    searchButtonName: String,  // 查询按钮文案\n    full-width: Boolean,  // inline模式铺满宽度，输入框宽度自适应\n    inline: Boolean,  // inline 默认true\n    margin: String,  // el-form-item margin-right '10px'\n    marginLeft: String,  // el-form-item margin-right设为0，margin-left为该px\n    showSearchButton: Boolean,  // 是否显示搜索按钮 默认true\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // select全部选项的名称，默认全部\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <customize-search-bar\n      :loading.sync=\"searchBarLoading\"\n      @submit=\"handleSubmitSearch\"\n      :setting=\"searchBarSetting\"\n      :Enum=\"searchBarEnum\"\n    ></customize-search-bar>\n\n    data() {\n      return {\n        searchBarLoading: false,\n        searchBarSetting: [\n          { type: 'input', label: '名称', prop: 'name' },\n          { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n          { slot: 'type', prop: 'type' },\n        ],\n        searchBarEnum: {\n          allList: [],\n        },\n      }\n    },\n\n    methods: {\n      fetchData() {\n        this.searchBarLoading = false;\n      },\n      handleSubmitSearch(searchParams) {\n        this.current = 1;\n        this.fetchParams = { ...searchParams };\n        this.fetchData();\n      },\n      async searchBarInit() {\n        const { data } = await GetList({\n          pageNo:1,\n          paeSize: 100,\n        });\n        let allList = data.itemInfos || [];\n        allList = allList.map(n => ({\n          label: n.name,\n          value: n.id,\n        }))\n        this.$set(this.searchBarEnum, 'allList', allList);\n      },\n    },\n\n#### slot example\n    <template #type=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeSearchBar end -->\n\n\n\n<!-- CustomizeSwitch start -->\n### CustomizeSwitch组件\n\n#### 组件配置\n##### props\n    type: String,  // inside/right\n    mode: String,  // 同type\n\n    value/v-model: [Number, String, Boolean],\n\n    values: Array,  // [打开时value, 关闭时value]\n\n    text: Array,  // [打开时文案, 关闭时文案]\n    icon: Array,  // [打开时图标, 关闭时图标] 开启后覆盖text\n    color: Array,  // [打开时背景色, 关闭时背景色]\n    disabled: Boolean,  // 默认false,\n    width: Number,  // element中宽度，默认40\n    name: String,\n    validateEvent: Boolean,  // 改变后是否触发表单验证\n    activeTextColor: String,  // type为inside时文字颜色\n    className: String,\n    size: String,  // medium/small/mini\n\n##### emit\n    @change\n\n##### ref\n    ref: switch\n\n#### example 双向绑定\n    <customize-switch\n      v-model=\"switchValue\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n      }\n    },\n\n#### example 非双向绑定\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n        switchDisabled: false,\n      }\n    },\n\n    methods: {\n      async handleSwitchChange(value) {\n        try {\n          this.switchDisabled = true;\n          await this._sleep(1);\n          this.switchValue = value;\n          this.$message.success('操作成功');\n        } catch (error) {\n          \n        }\n        this.switchDisabled = false;\n      },\n    },\n\n#### example type=\"inside\"\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n      type='inside'\n      :width=\"54\"\n      :color=\"['#67C23A', '#909399']\"\n      active-text-color=\"#fff\"\n      size=\"small\"\n    ></customize-switch>\n\n<!-- CustomizeSwitch end -->\n\n\n\n<!-- CustomizeForm start -->\n### CustomizeForm组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/textarea/inputNumber/select/text/date/datepicker/switch/image/object/array/\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      validType: String,  // rules type, url/email/date\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n      labelWidth: String,  // label-width\n\n      slot: String,  // slot  #slot=\"{ form }\"\n      slotInside: String,  // 插入至el-form-item内\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      enumKey: Array,  // select时，enum的key值，默认['label', 'value']\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n      clearable: Boolean,  // date时，el-date-picker的 clearable，默认true\n      disabled: Boolean,  // disabled状态，默认false\n      dataType: Number/Boolean,  // 数据类型，默认String\n      inputNumber: Boolean,  // true且type number时显示el-input-number\n\n      visible: Array | Function,  // [属性名, 属性值] 设置后 当某属性为该值时，渲染该条。为function时return true时显示\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    showSubmitButton: Boolean,  // 是否展示提交按钮，默认true\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    submitButtonName: String,  // 提交按钮文案，默认提交\n    resetButtonName: String,  // 重置按钮文案，默认重置\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    margin: String,  // el-form-item margin-bottom\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // 下拉选择全部的名称，默认全部\n    labelWidth: String,  // el-form label-width，默认120px\n    itemWidth: String,  // form-item的宽度，默认auto\n    clearable: Boolean,  // el-date-picker clearable，默认true\n    hideOptionAll: Boolean, // select时，隐藏‘全部’选项传入true\n    hideOperate: Boolean,  // 隐藏操作el-form-item\n    cleanProps: Boolean,  // submit时仅传出setting中有的属性，删除其它属性\n    fn: Array,  // 传入的函数 配合image中fnName\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #button-before\n    #button\n\n##### slot-scope\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <template>\n      <customize-form\n        :loading.sync=\"formLoading\"\n        @submit=\"handleSubmit\"\n        :setting=\"formSetting\"\n        :Enum=\"formEnum\"\n        validate\n      ></customize-form>\n    </template>\n    \n    <script>\n    export default {\n      data() {\n        return {\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', disabled: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '' },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            } },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'object', label: '对象', prop: 'obj', default: {}, children: [\n              { type: 'input', label: '名称', prop: 'name', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'array', label: '数组', prop: 'arr', len: 3, default: [], children: [\n              { type: 'input', label: '名称', prop: 'name' },\n              { type: 'input', label: '名称2', prop: 'name2', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'image', label: '图片', prop: 'image', fn: this.uploadFn },\n          ],\n          formEnum: {\n            allList: [],\n          },\n        }\n      },\n\n      methods: {\n        async handleSubmit(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n        },\n\n        async uploadFn() {\n          const url = '';\n          await this._sleep(1);\n\n          return Promise.resolve(url);\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.formInit();\n      },\n    }\n    </script>\n\n#### slot example\n    <template #slotName=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeForm end -->\n\n\n\n<!-- CustomizeDialogForm start -->\n### CustomizeDialogForm组件\n\n#### 组件配置 \n##### props\n    visible.sync: Boolean,  // 弹窗是否显示\n    editData: Any,  // 以编辑进入时回显数据\n    title: [String, Array],  // 弹窗标题，为数组时[新建title, 编辑title]\n    top: String,  // el-dialog top\n    width: String,  // el-dialog width\n    size: String,  // medium\n    closeButtonShow:  [Boolean, String],  // 是否展示关闭弹窗按钮，默认展示。传入String时控制slot(button-before, button)\n    closeButtonName: String,  // 关闭弹窗按钮名称，默认关闭\n    className: String,  // dialog自定义class\n    其他prop同CustomizeForm\n\n##### emit\n    @submit form\n\n##### slot\n    同CustomizeForm\n    #button-before\n    #button\n\n##### slot-scope\n    同CustomizeForm\n    #after=\"form\" \n\n##### ref\n    ref: dialog\n\n#### example\n    <customize-dialog-form\n      title='123'\n      :visible.sync=\"dialogVisible\" \n      @submit=\"handleSubmitDialog\"\n      :loading.sync=\"submitLoading\"\n      :setting=\"formSetting\"\n      :Enum=\"formEnum\"\n      validate  \n    ></customize-dialog-form>\n\n    <script>\n    export default {\n      /* 作为单独组件引入时 */\n      // props: {\n      //   visible: Boolean,\n      // },\n\n      data() {\n        return { \n          submitLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', default: '1', required: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n            { slot: 'type', prop: 'type' },\n          ],\n          formEnum: {\n            allList: [],\n          },\n      \n          editData: null,\n\n          dialogVisible: false,\n        }\n      },\n\n      computed: {\n        /* 作为单独组件引入时，外部 :visible.sync */\n        // dialogVisible: {\n        //   get() {\n        //     return this.visible;\n        //   },\n        //   set(val) {\n        //     this.$emit('update:visible', val);\n        //   },\n        // },\n      },\n\n      methods: {\n        async handleSubmitDialog(form) {\n          console.log(form);\n          try {\n            /* 提交表单 */\n            await this._sleep(1)\n            \n            this.$message.success('提交成功');\n            this.dialogVisible = false;\n          } catch (error) {\n            console.log('submitDialogError', error);\n          }\n          this.submitLoading = false;\n        },\n\n        handleCreate() {\n          // 以创建进入\n          this.editData = null \n          this.dialogVisible = true;    \n        },\n        handleEdit() {\n          // 以编辑进入 同步数据\n          this.editData = {\n            name: 'name',\n            type: 2,\n          }\n          this.dialogVisible = true;    \n        },\n        async handleEditAsync() {   \n          // 以编辑进入 异步数据\n          this.editData = null\n          this.dialogVisible = true;\n          await this._sleep(1);\n          this.editData = { \n            name: 'name2',\n            type: 3,\n          }\n        }, \n        \n        async formInit() {\n          const data = {\n            itemInfos: [\n              {name:'a',id:1},\n              {name:'b',id:2},\n              {name:'c',id:3},\n            ]\n          } \n          this._sleep(2)\n          let allList = data.itemInfos || [];  \n          allList = allList.map(n => ({ \n            label: n.name, \n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList); \n        },\n      }\n    }\n    </script>\n\n<!-- CustomizeDialogForm end -->\n\n\n\n<!-- CustomizePage start -->\n### CustomizePage组件\n\n#### example\n    <template>\n      <customize-page\n        :pageSetting=\"pageSetting\"\n        :searchBarProps=\"searchBarProps\"\n        :dialogProps=\"dialogProps\"\n        :Enum=\"Enum\"\n        :tableProps=\"tableProps\"\n        :tableDataFn=\"tableDataFn\"\n        :editDataFn=\"editDataFn\"\n        :submitFn=\"submitFn\"\n      >\n        <template #slotName>\n          <el-table-column label=\"slot\" prop=\"slotName\">\n            <template #default=\"{ row }\">\n              {{ row.id }}\n            </template>\n          </el-table-column>\n        </template>\n\n        <template #tableButton=\"{ id }\">\n          <el-button type=\"danger\" size=\"mini\" @click=\"handleDelete(id)\">删除</el-button>\n        </template>\n      </customize-page>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          pageSetting: [\n            { label: 'ID', prop: 'id', width: '100px' },\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allSelectList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ], formatter: (row, column, cellValue, index) => (this.Enum.allSelectList.find(n => n.value == cellValue) || {})['label'] || '' },\n            { type: 'text', label: '啊啊', default: 'text', prop: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { slot: 'slotName', prop: 'slotName' },\n          ],\n\n          Enum: {\n            allSelectList: [],\n          },\n          \n          searchBarProps: ['name', 'type'],\n          dialogProps: ['name', 'type', 'text', 'radio', 'checkbox', 'switch'],\n          tableProps: ['id', 'name', 'type', 'slotName'],\n        }\n      },\n\n      methods: {\n        async tableDataFn(form) {\n          console.log(form);\n\n          /* 获取列表 */\n          const data = [\n            { id: '1', name: 'aaa', type: 1 },\n            { id: '2', name: 'bbb', type: 2 },\n            { id: '3', name: 'ccc', type: 3 },\n            { id: '4', name: 'ddd', type: 1 },\n          ];\n          const total = 100;\n          await this._sleep(1);\n\n          return Promise.resolve({ data, total });\n        },\n        async editDataFn(id) {\n          /* 获取详情 */\n          const data = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this._sleep(1);\n\n          return Promise.resolve(data);\n        },\n        async submitFn(form) {\n          console.log(form);\n          /* 提交表单 */\n          await this._sleep(1);\n\n          return Promise.resolve();\n        },\n        \n        async init() {\n          const allSelectList = [\n            { label: 'a', value: 1 },\n            { label: 'b', value: 2 },\n            { label: 'c', value: 3 },\n          ];\n          await this._sleep(1);\n          this.$set(this.Enum, 'allSelectList', allSelectList);\n        },\n\n        handleDelete(id) {\n          this.$alert(`删除 ${id}`);\n        },\n      },\n\n      created() {\n        this.init();\n      },\n\n    }\n    </script>\n\n    <style>\n    html, body {\n      margin: 0;\n    }\n    </style>\n\n<!-- CustomizePage end -->\n\n\n\n<!-- CustomizeFormBuilder start -->\n### CustomizeFormBuilder组件\n\n#### 组件配置 \n##### props\n    debug: Boolean,  // 实时显示formSetting数据\n    operate: Array,  // 操作区展示的按钮 ['import', 'clear', 'preview', 'schema', 'code']\n\n##### event\n    getSchema,  // 获取当前配置转码的schema\n    setSchema,  // 设置schema字符串并重新渲染\n\n##### slot\n    #operate-title 操作区域标题名\n    #operate-before 操作区域前置按钮\n    #operate-after 操作区域后置按钮\n\n\n#### example\n    <template>\n      <customize-form-builder ref=\"formBuilder\"></customize-form-builder>\n    </template>\n\n    <script>\n    export default {\n      methods: {\n        getSchema() {\n          const result = this.$refs.formBuilder.getSchema();\n          console.log(result)\n        },\n        setSchema() {\n          const schemaStr = `{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"type\":\"object\",\"properties\":{\"input_1588506741033\":{\"type\":\"input\",\"label\":\"单行文本\",\"prop\":\"input_1588506741033\",\"key\":1588506741033}}}`\n          this.$refs.formBuilder.setSchema(schemaStr);\n        },\n      },\n\n    }\n    </script>\n\n\n<!-- CustomizeFormBuilder end -->\n\n\n\n<!-- 辅助函数 start -->\n### 辅助函数\n\n#### _isEmpty\n判断是否不为空  \n@return { Boolean }\n\n#### _clean\n删除对象中值为空的属性  \n@param { Object }  \n@return { Object }  \n\n#### _setValue\n值不为空直接返回，为空返回默认值  \n@param { Any, Any }  需判断的值，默认值  \n@return { Any }  \n\n#### _formatDate\n时间格式化  \n@params { [String, Number, Date], String }  时间，格式(默认 yyyy-MM-dd hh:mm:ss)  \n@return { String }  \n\n#### _deepClone\n深拷贝  \n@params { Object }  \n@return { Object }  \n\n#### _sleep\n延迟几秒后继续执行  \n@params { Number }  延迟秒数  \n@return { Promise } resolve  \n\n#### _deepMerge\n对象深度合并    \n@params { Object, Object }  延迟秒数  \n@return { Object }    \n_deepMerge(a, b, [..option])  \n_deepMerge.all([a, b, c], [..option])  \n\n<!-- 辅助函数 end -->\n\n\n\n### 常用增删改查页面完整事例(无弹窗)\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        ></customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      name: 'home',\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                console.log(this._clean({\n                  ...this.fetchParams,\n                  page: this.current,\n                  size: this.size,\n                }))\n                const response = {\n                  data: [\n                    { name: 'a', aaa: 2, status: 0 },\n                    { name: 'b', aaa: 3, status: null },\n                    { name: 'c', aaa: 4, status: 1 },\n                    { name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 1111)\n            })\n\n            // const response = await GetList(this._clean({\n            //   ...this.fetchParams,\n            //   page: this.current,\n            //   size: this.size,\n            // }))\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n\n\n### 常用增删改查页面完整事例(带弹窗)\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <dialog-create\n          :editId=\"editId\" \n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n        ></dialog-create>\n      </div>\n    </template>\n\n    <script>\n    import DialogCreate from './DialogCreate';\n\n    export default {\n      components: {\n        DialogCreate,\n      },\n\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          dialogVisible: false,\n          editId: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                \n                const response = {\n                  data: [\n                    { id: 1, name: 'a', aaa: 2, status: 0 },\n                    { id: 2, name: 'b', aaa: 3, status: null },\n                    { id: 3, name: 'c', aaa: 4, status: 1 },\n                    { id: 4, name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 222)\n\n              // const response = await GetList(this._clean({\n              //   ...this.fetchParams,\n              //   page: this.current,\n              //   size: this.size,\n              // }))\n              this.tableData = response.data || [];\n              this.total = response.total || 0;\n            })\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editId = null;\n          this.dialogVisible = true;\n        },\n        handleEdit(id) {\n          this.editId = id;\n          this.dialogVisible = true;\n        },\n        handleSubmitDialog() {\n          console.log('handleDialog');\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n---\n\n    <template>\n      <el-dialog\n        title=\"title\"\n        top=\"15vh\"\n        width=\"600px\"\n        :visible.sync=\"dialogVisible\"\n        @close=\"handleClosed\"\n      >\n        <el-form :model=\"form\" :rules=\"rules\" ref=\"form\" label-width=\"180px\" size=\"small\">\n          <el-form-item label=\"名称:\" prop=\"name\">\n            <el-input v-model=\"form.name\"></el-input>\n          </el-form-item>\n\n          <el-form-item>\n            <el-button type=\"primary\" @click=\"handleSubmit\" :loading=\"loading\">提交</el-button>\n            <el-button @click=\"handleCancel\">取消</el-button>\n          </el-form-item>\n        </el-form>\n      </el-dialog>\n    </template>\n\n    <script>\n    const DEFAULT_FORM = () => ({\n      name: '',\n    });\n\n    export default {\n      props: {\n        visible: Boolean,\n        editId: {},\n      },\n\n      data() {\n        return {\n          dialogVisible: false,\n\n          form: DEFAULT_FORM(),\n          rules: {\n            name: { required: true, message: '请输入名称' },\n          },\n          loading: false,\n        }\n      },\n\n      methods: {\n        handleClosed() {\n          // reset here\n          this.$refs.form.resetFields();\n          this.form = DEFAULT_FORM();\n          this.$emit('update:visible', false);\n        },\n\n        async handleSubmit() {\n          console.log(this.form);\n          try {\n            await this.$refs.form.validate();\n\n            await this.$confirm(`是否确定提交`, \"提示\", {\n              confirmButtonText: \"确定\",\n              cancelButtonText: \"取消\",\n              type: \"warning\"\n            });\n\n            this.loading = true;\n            let params = this._deepClone(this.form);\n            if (!!this.editId) {\n              params.id = this.editId;\n              await Update(params);\n            }else{\n              await Save(params);\n            }\n\n            this.$message.success(`${!!this.editId ? '编辑' : '新增'}成功`);\n            this.dialogVisible = false;\n            this.$emit('submit');\n          } catch (error) {\n            console.log(error);\n          }\n          this.loading = false;\n        },\n        handleCancel() {\n          this.dialogVisible = false;\n        },\n      },\n\n      watch: {\n        visible: {\n          handler(newVal, oldVal) {\n            this.dialogVisible = newVal;\n          },\n          immediate: true,\n        }\n      },\n\n    }\n    </script>\n\n    <style lang='scss' scoped>\n\n    </style>\n\n\n### 常用增删改查页面完整事例(带弹窗)单页\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <customize-dialog-form\n          :editData=\"editData\"\n          title='title'\n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n          :loading.sync=\"formLoading\"\n          :setting=\"formSetting\"\n          :Enum=\"formEnum\"\n          validate  \n        ></customize-dialog-form>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ] },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n          ],\n          formEnum: {\n            allList: [],\n          },\n          dialogVisible: false,\n          editData: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          const params = this._clean({\n            ...this.fetchParams,\n            current: this.current,\n            size: this.size,\n          });\n          console.log(params);\n          this.tableLoading = true;\n          try {\n            const response = {\n              data: [\n                { id: 1, name: 'a', aaa: 2, status: 0 },\n                { id: 2, name: 'b', aaa: 3, status: null },\n                { id: 3, name: 'c', aaa: 4, status: 1 },\n                { id: 4, name: 'd', aaa: 5, status: 0 },\n              ],\n              total: 100,\n            }\n            await this._sleep(1);\n\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editData = null\n          this.dialogVisible = true;\n        },\n        async handleEdit(id) {\n          this.dialogVisible = true;\n\n          await this._sleep(1);\n          const editData = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this.editData = editData;\n        },\n        async handleSubmitDialog(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n          this.dialogVisible = false;\n          this.editData = null;\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.fetchData();\n        this.formInit();\n      },\n    }\n    </script>\n\n","_id":"vue-element-customize@0.0.3-next","_integrity":"sha512-BFgfu2JGoAjdZke4UjhShJO4EegQfGb9pe4WZPSfEHdPi0oZKdIyATZWHYG63WkAZcf0FO+PRZgryXqorh+gfQ==","_resolved":"/Users/luanmingli/code/vue-element-customize/vue-element-customize-0.0.3-next.tgz","_from":"file:vue-element-customize-0.0.3-next.tgz","_nodeVersion":"16.13.1","_npmVersion":"8.5.2","dist":{"integrity":"sha512-BFgfu2JGoAjdZke4UjhShJO4EegQfGb9pe4WZPSfEHdPi0oZKdIyATZWHYG63WkAZcf0FO+PRZgryXqorh+gfQ==","shasum":"6777565ccc4b88ee34829b67a4bb4a1877620299","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-0.0.3-next.tgz","fileCount":5,"unpackedSize":325309,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKGVfACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpNuhAAlLQeEJ8WPWSzKyxHyj14aS1YLfl6ELovB0/HUMelU2ibP0F/\r\nsY9APWupOZqDfOZ+cDPXr1Rk6J6Gjvjx0+I/Nh2ZnbIDWqRjvTYvixAr4eEi\r\n7LCth3nos3tY52+59TvDcgDSC/EmwOjt3FZaufUkWHHIxaAB3J64rlrhjAp5\r\naQVyW3QSvtsvXQYjtTYlWiwcSvX/o9bV20N+nC7VzJp9QWYpquX1eQzUgEDs\r\n0rkNnTTo8wf8LVWT+9NrctGKGsKQzWM77v32tSISPVpTzqR+WWIjeA8EPGtO\r\nWCKbIETB1F3+u5iZJGvSATEP6QnN+E5u/Rp1/jUvflzLhQbmHG7IxnE/UbMK\r\n72CDnQEd7Vqv5twxEWZW1Ora329tyfT/+iV2YCtRKVXyIRIeWbqpMhNfV2sV\r\nthYyJMcFiGv4AjNItkatwOsuxzZoxzRLFrgp4FUWfsf7WlUrzNCfQd6BjfUS\r\nFglbtZHDH5h1i88htGOv/fARbH+V6Jan/lwpfJWGYabW+nCmTnyKMIfvzO8r\r\nhvsU4ZfnVwzJPw5VJD/fbHrqH0Tc9SUyIs0Pm6Y/q3EGfw5MjdDGqGQGwPYg\r\npuVebvdhiyInvqyXURL/c9gmJA6gCFXAIeC59sWK1cZsnes8naHv5m2ivb+e\r\nSePUmxKw4oPgBhP/+FL/xjIWXcNvZBuSKXI=\r\n=qkVD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbQuth6miFYhooaWsm1PQq0Ff2rzLWrxEKRJfYKjNlCAIgAvmThcEKexWDdSy8nBk5nt19FhTlFZorCXXhm9HckJA="}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_0.0.3-next_1646814559685_0.31181576173732806"},"_hasShrinkwrap":false},"3.0.1":{"name":"vue-element-customize","version":"3.0.1","description":"vue element-ui customize template","main":"./dist/vue-element-customize.umd.js","module":"./dist/vue-element-customize.es.js","types":"./index.d.ts","repository":{"type":"git","url":"git@github.com:Lmingli/vue-element-customize.git"},"author":"luanmingli","license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","peerDependencies":{"element-plus":"^2.0.4","vue":"^3.2.31"},"devDependencies":{"@types/lodash-es":"^4.17.6","@types/node":"^17.0.21","@vitejs/plugin-vue":"^2.2.4","element-plus":"^2.0.4","sass":"^1.46.0","typescript":"^4.6.2","vite":"^2.8.6","vue":"^3.2.31","vue-tsc":"^0.32.1"},"scripts":{"serve":"vite","build":"vue-tsc --noEmit && vite build","build:utils":"babel utils --out-dir lib/utils","release":"pnpm run build && pnpm run publish"},"readme":"<!-- TOC -->\n\n- [功能列表](#功能列表)\n  - [组件](#组件)\n  - [辅助函数](#辅助函数)\n  - [自定义样式](#自定义样式)\n- [全量引入](#全量引入)\n  - [传入配置项](#传入配置项)\n- [按需引入](#按需引入)\n  - [组件引入](#组件引入)\n  - [辅助函数引入](#辅助函数引入)\n    - [辅助函数全量引入](#辅助函数全量引入)\n    - [辅助函数按需引入](#辅助函数按需引入)\n    - [自定义样式引入](#自定义样式引入)\n- [项目级配置](#项目级配置)\n  - [CustomizeTable配置](#customizetable配置)\n  - [CustomizePagination配置](#customizepagination配置)\n  - [CustomizeSearchBar配置](#customizesearchbar配置)\n  - [CustomizeSwitch配置](#customizeswitch配置)\n  - [CustomizeForm配置](#customizeform配置)\n  - [CustomizeDialogForm配置](#customizedialogform配置)\n- [CustomizeTable组件](#customizetable组件)\n  - [组件配置](#组件配置)\n    - [props](#props)\n    - [emit](#emit)\n    - [ref](#ref)\n    - [slot](#slot)\n  - [example](#example)\n- [CustomizePagination组件](#customizepagination组件)\n  - [组件配置](#组件配置-1)\n    - [props](#props-1)\n    - [emit](#emit-1)\n  - [example](#example-1)\n- [CustomizeSearchBar组件](#customizesearchbar组件)\n  - [组件配置](#组件配置-2)\n    - [props](#props-2)\n    - [emit](#emit-2)\n    - [slot](#slot-1)\n    - [ref](#ref-1)\n  - [example](#example-2)\n  - [slot example](#slot-example)\n- [CustomizeSwitch组件](#customizeswitch组件)\n  - [组件配置](#组件配置-3)\n    - [props](#props-3)\n    - [emit](#emit-3)\n    - [ref](#ref-2)\n  - [example 双向绑定](#example-双向绑定)\n  - [example 非双向绑定](#example-非双向绑定)\n  - [example type=\"inside\"](#example-typeinside)\n- [CustomizeForm组件](#customizeform组件)\n  - [组件配置](#组件配置-4)\n    - [props](#props-4)\n    - [emit](#emit-4)\n    - [slot](#slot-2)\n    - [slot-scope](#slot-scope)\n    - [ref](#ref-3)\n  - [example](#example-3)\n  - [slot example](#slot-example-1)\n- [CustomizeDialogForm组件](#customizedialogform组件)\n  - [组件配置](#组件配置-5)\n    - [props](#props-5)\n    - [emit](#emit-5)\n    - [slot](#slot-3)\n    - [slot-scope](#slot-scope-1)\n    - [ref](#ref-4)\n  - [example](#example-4)\n- [CustomizePage组件](#customizepage组件)\n  - [example](#example-5)\n- [CustomizeFormBuilder组件](#customizeformbuilder组件)\n  - [组件配置](#组件配置-6)\n    - [props](#props-6)\n    - [event](#event)\n    - [slot](#slot-4)\n  - [example](#example-6)\n- [辅助函数](#辅助函数-1)\n  - [_isEmpty](#_isempty)\n  - [_clean](#_clean)\n  - [_setValue](#_setvalue)\n  - [_formatDate](#_formatdate)\n  - [_deepClone](#_deepclone)\n  - [_sleep](#_sleep)\n  - [_deepMerge](#_deepmerge)\n- [常用增删改查页面完整事例(无弹窗)](#常用增删改查页面完整事例无弹窗)\n- [常用增删改查页面完整事例(带弹窗)](#常用增删改查页面完整事例带弹窗)\n- [常用增删改查页面完整事例(带弹窗)单页](#常用增删改查页面完整事例带弹窗单页)\n\n<!-- /TOC -->\n\n### 功能列表\n\n#### 组件\n    CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder\n\n#### 辅助函数\n    isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge,\n\n#### 自定义样式\n    select, input, el-radio-group, el-checkbox-group [round]属性\n    input [no-border]属性\n\n\n\n### 全量引入\n    import Customize from 'vue-element-customize';\n    Vue.use(Customize);\n\n#### 传入配置项\n    Vue.use(Customize, {\n      CustomizeTable: {},\n      CustomizePagination: {},\n      CustomizeSearchBar: {},\n      CustomizeSwitch: {},\n      CustomizeForm: {},\n      CustomizeDialogForm: {},\n      CustomizeFormBuilder: {},\n    });\n\n<!-- 功能列表 end -->\n\n\n\n### 按需引入\n\n#### 组件引入\n    import { CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder } from 'vue-element-customize';\n    Vue.use(CustomizeTable, {});\n    Vue.use(CustomizePagination, {});\n    Vue.use(CustomizeSearchBar, {});\n    Vue.use(CustomizeSwitch, {});\n    Vue.use(CustomizeForm, {});\n    Vue.use(CustomizeDialogForm, {});\n    Vue.use(CustomizePage);\n    Vue.use(CustomizeFormBuilder);\n\n#### 辅助函数引入\n\n##### 辅助函数全量引入\n    import { CustomizeUtils } from 'vue-element-customize';\n    Vue.use(CustomizeUtils);\n\n##### 辅助函数按需引入\n    import { isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge } from 'vue-element-customize';\n    Vue.prototype._isEmpty = isEmpty;\n    Vue.prototype._clean = clean;\n    Vue.prototype._setValue = setValue;\n    Vue.prototype._deepClone = deepClone;\n    Vue.prototype._formatDate = formatDate;\n    Vue.prototype._sleep = sleep;\n    Vue.prototype._deepMerge = deepMerge;\n\n##### 自定义样式引入\n    import 'vue-element-customize/lib/styles/index.scss'\n\n\n<!-- 按需引入 end -->\n\n\n\n<!-- 项目级配置 start -->\n### 项目级配置\n\n#### CustomizeTable配置\n    stripe: Boolean,  // true\n    border: Boolean,  // false\n    size: String,  // medium\n    headerCellStyle: Object,  // { backgroundColor: '#f5f7fa', color: '#909399',  borderBottom: 0,  height: '50px', },\n    cellStyle: Object,  // { borderBottom: 0 },\n    className: String,\n    align: String,\n\n#### CustomizePagination配置\n    pageSizes: Array,  // [10,20,50,100]\n    layout: String,  // 'total, sizes, prev, pager, next, jumper'\n    align: String,  // right\n    className: String,\n    pageSize: Number,  // 10\n\n#### CustomizeSearchBar配置\n    size: String,  // medium\n    className: String,  //''\n    blockButtons: Boolean,  // false\n    showResetButton: Boolean,  // true\n    openEnterSearch: Boolean,  // false\n    searchButtonName: String,  // 查询\n    optionAllName: String,  // 全部\n\n#### CustomizeSwitch配置\n    defaultColor: Array,  // 默认的[打开背景色, 关闭背景色]\n    className: String,\n\n#### CustomizeForm配置\n    size: String,  // medium\n    className: String,  //''\n    showSubmitButton: Boolean,  // true\n    showResetButton: Boolean,  // true\n    submitButtonName: String,  // 提交\n    resetButtonName: String,  // 重置\n    openEnterSubmit: Boolean,  // false\n    optionAllName: String,  // 全部\n    labelWidth: String,  // 120px\n    clearable: Boolean,  // true\n    hideOptionAll: Boolean,  // true\n\n#### CustomizeDialogForm配置\n    form: Object,  // 弹窗内form的配置，同CustomizeForm\n    size: String,  // medium\n    closeButtonShow: [Boolean, String],  // true\n    closeButtonName: String,  // 关闭\n    className: String,  // dialog自定义class\n\n<!-- 项目级配置 end -->\n\n\n\n<!-- CustomizeTable start -->\n### CustomizeTable组件\n\n#### 组件配置 \n##### props \n    data: Array,  // 渲染的数据\n\n    column: Array,  // 表格配置\n      {\n        prop: String,  // 渲染数据的key值\n        label: String, // key值对应的表头名\n        width: String, //宽度\n        sortable: Function,  //排序\n        formatter: Function,  //(row, column, cellValue, index) {}\n        slot: String,  // 传入的slot名\n      }\n\n    size: String,\n    type: String,  // 'index'\n    headerCellStyle: Function,  // ({row, column, rowIndex, columnIndex}) {} '表头样式'\n    cellStyle: Object,\n    sortable: Boolean,\n    stripe: Boolean,\n    border: Boolean,\n    className: String,\n    maxHeight: [String, Number],\n    align: String,  // 'center'\n\n##### emit\n    @sortChange  //排序\n    @selectionChange\n\n##### ref\n    ref: 'table'\n\n##### slot\n    slot before // 默认slot 前\n    slot after  // 默认slot 最后\n\n#### example\n    <customize-table\n      :data=\"tableData\"\n      :column=\"tableColumn\"\n      v-loading=\"tableLoading\"\n    >\n      <template #slotName>\n        <el-table-column label=\"slot-slotName\" align=\"center\">\n          <template #default=\"{ row }\">\n            <span>{{ _isEmpty(row.status) }}</span>\n          </template>\n        </el-table-column>\n      </template>\n      <template #after>\n        <el-table-column label=\"操作\" align=\"center\">\n          <template #default=\"{ row }\">\n            <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n          </template>\n        </el-table-column>\n      </template>\n    </customize-table>\n\n    data() {\n      return {\n        tableLoading: false,\n        tableData: [],\n        tableColumn: [\n          // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n          { label: '名称', prop: 'name' },\n          { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n          { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n            const Enum = {\n              0: '暂停',\n              1: '启用',\n            }\n            return Enum[cellValue] || '--';\n          }},\n          { slot: 'slotName' }\n        ],\n      }\n    },\n\n<!-- CustomizeTable end -->\n\n\n<!-- CustomizePagination start -->\n### CustomizePagination组件\n\n#### 组件配置 \n##### props \n    current.sync: [Number, String],  // 当前页\n    size.sync: [Number, String],  // 当前每页个数\n    total: [Number, String],  // 总个数\n\n    pageSizes: Array,  // 每页显示个数选择器的选项设置\n    layout: String,  // 组件布局 'sizes, prev, pager, next, jumper, ->, total, slot',\n    align: String,  // 组件位置 text-align\n    className: String,\n\n##### emit\n    @change\n\n#### example\n    <customize-pagination\n      :current.sync=\"current\"\n      :total=\"total\"\n      :size.sync=\"size\"\n      @change=\"handleChangePage\"\n      style=\"padding-bottom: 30px;\"\n    ></customize-pagination>\n\n    data() {\n      return {\n        current: 1,\n        total: 0,\n        size: 10,\n      }\n    },\n\n    methods: {\n      handleChangePage({ current, size }) {\n        this.fetchData();\n      },\n    },\n\n<!-- CustomizePagination end -->\n\n\n<!-- CustomizeSearchBar start -->\n### CustomizeSearchBar组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/select\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n\n      slot: String,  // slot  #slot=\"{ form }\"\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    inlineButtons: Boolean  // 按钮不换行\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    blockButtons: Boolean,  // 是否将按钮组换行展示，默认false\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    searchButtonName: String,  // 查询按钮文案\n    full-width: Boolean,  // inline模式铺满宽度，输入框宽度自适应\n    inline: Boolean,  // inline 默认true\n    margin: String,  // el-form-item margin-right '10px'\n    marginLeft: String,  // el-form-item margin-right设为0，margin-left为该px\n    showSearchButton: Boolean,  // 是否显示搜索按钮 默认true\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // select全部选项的名称，默认全部\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <customize-search-bar\n      :loading.sync=\"searchBarLoading\"\n      @submit=\"handleSubmitSearch\"\n      :setting=\"searchBarSetting\"\n      :Enum=\"searchBarEnum\"\n    ></customize-search-bar>\n\n    data() {\n      return {\n        searchBarLoading: false,\n        searchBarSetting: [\n          { type: 'input', label: '名称', prop: 'name' },\n          { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n          { slot: 'type', prop: 'type' },\n        ],\n        searchBarEnum: {\n          allList: [],\n        },\n      }\n    },\n\n    methods: {\n      fetchData() {\n        this.searchBarLoading = false;\n      },\n      handleSubmitSearch(searchParams) {\n        this.current = 1;\n        this.fetchParams = { ...searchParams };\n        this.fetchData();\n      },\n      async searchBarInit() {\n        const { data } = await GetList({\n          pageNo:1,\n          paeSize: 100,\n        });\n        let allList = data.itemInfos || [];\n        allList = allList.map(n => ({\n          label: n.name,\n          value: n.id,\n        }))\n        this.$set(this.searchBarEnum, 'allList', allList);\n      },\n    },\n\n#### slot example\n    <template #type=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeSearchBar end -->\n\n\n\n<!-- CustomizeSwitch start -->\n### CustomizeSwitch组件\n\n#### 组件配置\n##### props\n    type: String,  // inside/right\n    mode: String,  // 同type\n\n    value/v-model: [Number, String, Boolean],\n\n    values: Array,  // [打开时value, 关闭时value]\n\n    text: Array,  // [打开时文案, 关闭时文案]\n    icon: Array,  // [打开时图标, 关闭时图标] 开启后覆盖text\n    color: Array,  // [打开时背景色, 关闭时背景色]\n    disabled: Boolean,  // 默认false,\n    width: Number,  // element中宽度，默认40\n    name: String,\n    validateEvent: Boolean,  // 改变后是否触发表单验证\n    activeTextColor: String,  // type为inside时文字颜色\n    className: String,\n    size: String,  // medium/small/mini\n\n##### emit\n    @change\n\n##### ref\n    ref: switch\n\n#### example 双向绑定\n    <customize-switch\n      v-model=\"switchValue\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n      }\n    },\n\n#### example 非双向绑定\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n        switchDisabled: false,\n      }\n    },\n\n    methods: {\n      async handleSwitchChange(value) {\n        try {\n          this.switchDisabled = true;\n          await this._sleep(1);\n          this.switchValue = value;\n          this.$message.success('操作成功');\n        } catch (error) {\n          \n        }\n        this.switchDisabled = false;\n      },\n    },\n\n#### example type=\"inside\"\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n      type='inside'\n      :width=\"54\"\n      :color=\"['#67C23A', '#909399']\"\n      active-text-color=\"#fff\"\n      size=\"small\"\n    ></customize-switch>\n\n<!-- CustomizeSwitch end -->\n\n\n\n<!-- CustomizeForm start -->\n### CustomizeForm组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/textarea/inputNumber/select/text/date/datepicker/switch/image/object/array/\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      validType: String,  // rules type, url/email/date\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n      labelWidth: String,  // label-width\n\n      slot: String,  // slot  #slot=\"{ form }\"\n      slotInside: String,  // 插入至el-form-item内\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      enumKey: Array,  // select时，enum的key值，默认['label', 'value']\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n      clearable: Boolean,  // date时，el-date-picker的 clearable，默认true\n      disabled: Boolean,  // disabled状态，默认false\n      dataType: Number/Boolean,  // 数据类型，默认String\n      inputNumber: Boolean,  // true且type number时显示el-input-number\n\n      visible: Array | Function,  // [属性名, 属性值] 设置后 当某属性为该值时，渲染该条。为function时return true时显示\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    showSubmitButton: Boolean,  // 是否展示提交按钮，默认true\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    submitButtonName: String,  // 提交按钮文案，默认提交\n    resetButtonName: String,  // 重置按钮文案，默认重置\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    margin: String,  // el-form-item margin-bottom\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // 下拉选择全部的名称，默认全部\n    labelWidth: String,  // el-form label-width，默认120px\n    itemWidth: String,  // form-item的宽度，默认auto\n    clearable: Boolean,  // el-date-picker clearable，默认true\n    hideOptionAll: Boolean, // select时，隐藏‘全部’选项传入true\n    hideOperate: Boolean,  // 隐藏操作el-form-item\n    cleanProps: Boolean,  // submit时仅传出setting中有的属性，删除其它属性\n    fn: Array,  // 传入的函数 配合image中fnName\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #button-before\n    #button\n\n##### slot-scope\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <template>\n      <customize-form\n        :loading.sync=\"formLoading\"\n        @submit=\"handleSubmit\"\n        :setting=\"formSetting\"\n        :Enum=\"formEnum\"\n        validate\n      ></customize-form>\n    </template>\n    \n    <script>\n    export default {\n      data() {\n        return {\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', disabled: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '' },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            } },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'object', label: '对象', prop: 'obj', default: {}, children: [\n              { type: 'input', label: '名称', prop: 'name', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'array', label: '数组', prop: 'arr', len: 3, default: [], children: [\n              { type: 'input', label: '名称', prop: 'name' },\n              { type: 'input', label: '名称2', prop: 'name2', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'image', label: '图片', prop: 'image', fn: this.uploadFn },\n          ],\n          formEnum: {\n            allList: [],\n          },\n        }\n      },\n\n      methods: {\n        async handleSubmit(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n        },\n\n        async uploadFn() {\n          const url = '';\n          await this._sleep(1);\n\n          return Promise.resolve(url);\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.formInit();\n      },\n    }\n    </script>\n\n#### slot example\n    <template #slotName=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeForm end -->\n\n\n\n<!-- CustomizeDialogForm start -->\n### CustomizeDialogForm组件\n\n#### 组件配置 \n##### props\n    visible.sync: Boolean,  // 弹窗是否显示\n    editData: Any,  // 以编辑进入时回显数据\n    title: [String, Array],  // 弹窗标题，为数组时[新建title, 编辑title]\n    top: String,  // el-dialog top\n    width: String,  // el-dialog width\n    size: String,  // medium\n    closeButtonShow:  [Boolean, String],  // 是否展示关闭弹窗按钮，默认展示。传入String时控制slot(button-before, button)\n    closeButtonName: String,  // 关闭弹窗按钮名称，默认关闭\n    className: String,  // dialog自定义class\n    其他prop同CustomizeForm\n\n##### emit\n    @submit form\n\n##### slot\n    同CustomizeForm\n    #button-before\n    #button\n\n##### slot-scope\n    同CustomizeForm\n    #after=\"form\" \n\n##### ref\n    ref: dialog\n\n#### example\n    <customize-dialog-form\n      title='123'\n      :visible.sync=\"dialogVisible\" \n      @submit=\"handleSubmitDialog\"\n      :loading.sync=\"submitLoading\"\n      :setting=\"formSetting\"\n      :Enum=\"formEnum\"\n      validate  \n    ></customize-dialog-form>\n\n    <script>\n    export default {\n      /* 作为单独组件引入时 */\n      // props: {\n      //   visible: Boolean,\n      // },\n\n      data() {\n        return { \n          submitLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', default: '1', required: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n            { slot: 'type', prop: 'type' },\n          ],\n          formEnum: {\n            allList: [],\n          },\n      \n          editData: null,\n\n          dialogVisible: false,\n        }\n      },\n\n      computed: {\n        /* 作为单独组件引入时，外部 :visible.sync */\n        // dialogVisible: {\n        //   get() {\n        //     return this.visible;\n        //   },\n        //   set(val) {\n        //     this.$emit('update:visible', val);\n        //   },\n        // },\n      },\n\n      methods: {\n        async handleSubmitDialog(form) {\n          console.log(form);\n          try {\n            /* 提交表单 */\n            await this._sleep(1)\n            \n            this.$message.success('提交成功');\n            this.dialogVisible = false;\n          } catch (error) {\n            console.log('submitDialogError', error);\n          }\n          this.submitLoading = false;\n        },\n\n        handleCreate() {\n          // 以创建进入\n          this.editData = null \n          this.dialogVisible = true;    \n        },\n        handleEdit() {\n          // 以编辑进入 同步数据\n          this.editData = {\n            name: 'name',\n            type: 2,\n          }\n          this.dialogVisible = true;    \n        },\n        async handleEditAsync() {   \n          // 以编辑进入 异步数据\n          this.editData = null\n          this.dialogVisible = true;\n          await this._sleep(1);\n          this.editData = { \n            name: 'name2',\n            type: 3,\n          }\n        }, \n        \n        async formInit() {\n          const data = {\n            itemInfos: [\n              {name:'a',id:1},\n              {name:'b',id:2},\n              {name:'c',id:3},\n            ]\n          } \n          this._sleep(2)\n          let allList = data.itemInfos || [];  \n          allList = allList.map(n => ({ \n            label: n.name, \n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList); \n        },\n      }\n    }\n    </script>\n\n<!-- CustomizeDialogForm end -->\n\n\n\n<!-- CustomizePage start -->\n### CustomizePage组件\n\n#### example\n    <template>\n      <customize-page\n        :pageSetting=\"pageSetting\"\n        :searchBarProps=\"searchBarProps\"\n        :dialogProps=\"dialogProps\"\n        :Enum=\"Enum\"\n        :tableProps=\"tableProps\"\n        :tableDataFn=\"tableDataFn\"\n        :editDataFn=\"editDataFn\"\n        :submitFn=\"submitFn\"\n      >\n        <template #slotName>\n          <el-table-column label=\"slot\" prop=\"slotName\">\n            <template #default=\"{ row }\">\n              {{ row.id }}\n            </template>\n          </el-table-column>\n        </template>\n\n        <template #tableButton=\"{ id }\">\n          <el-button type=\"danger\" size=\"mini\" @click=\"handleDelete(id)\">删除</el-button>\n        </template>\n      </customize-page>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          pageSetting: [\n            { label: 'ID', prop: 'id', width: '100px' },\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allSelectList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ], formatter: (row, column, cellValue, index) => (this.Enum.allSelectList.find(n => n.value == cellValue) || {})['label'] || '' },\n            { type: 'text', label: '啊啊', default: 'text', prop: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { slot: 'slotName', prop: 'slotName' },\n          ],\n\n          Enum: {\n            allSelectList: [],\n          },\n          \n          searchBarProps: ['name', 'type'],\n          dialogProps: ['name', 'type', 'text', 'radio', 'checkbox', 'switch'],\n          tableProps: ['id', 'name', 'type', 'slotName'],\n        }\n      },\n\n      methods: {\n        async tableDataFn(form) {\n          console.log(form);\n\n          /* 获取列表 */\n          const data = [\n            { id: '1', name: 'aaa', type: 1 },\n            { id: '2', name: 'bbb', type: 2 },\n            { id: '3', name: 'ccc', type: 3 },\n            { id: '4', name: 'ddd', type: 1 },\n          ];\n          const total = 100;\n          await this._sleep(1);\n\n          return Promise.resolve({ data, total });\n        },\n        async editDataFn(id) {\n          /* 获取详情 */\n          const data = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this._sleep(1);\n\n          return Promise.resolve(data);\n        },\n        async submitFn(form) {\n          console.log(form);\n          /* 提交表单 */\n          await this._sleep(1);\n\n          return Promise.resolve();\n        },\n        \n        async init() {\n          const allSelectList = [\n            { label: 'a', value: 1 },\n            { label: 'b', value: 2 },\n            { label: 'c', value: 3 },\n          ];\n          await this._sleep(1);\n          this.$set(this.Enum, 'allSelectList', allSelectList);\n        },\n\n        handleDelete(id) {\n          this.$alert(`删除 ${id}`);\n        },\n      },\n\n      created() {\n        this.init();\n      },\n\n    }\n    </script>\n\n    <style>\n    html, body {\n      margin: 0;\n    }\n    </style>\n\n<!-- CustomizePage end -->\n\n\n\n<!-- CustomizeFormBuilder start -->\n### CustomizeFormBuilder组件\n\n#### 组件配置 \n##### props\n    debug: Boolean,  // 实时显示formSetting数据\n    operate: Array,  // 操作区展示的按钮 ['import', 'clear', 'preview', 'schema', 'code']\n\n##### event\n    getSchema,  // 获取当前配置转码的schema\n    setSchema,  // 设置schema字符串并重新渲染\n\n##### slot\n    #operate-title 操作区域标题名\n    #operate-before 操作区域前置按钮\n    #operate-after 操作区域后置按钮\n\n\n#### example\n    <template>\n      <customize-form-builder ref=\"formBuilder\"></customize-form-builder>\n    </template>\n\n    <script>\n    export default {\n      methods: {\n        getSchema() {\n          const result = this.$refs.formBuilder.getSchema();\n          console.log(result)\n        },\n        setSchema() {\n          const schemaStr = `{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"type\":\"object\",\"properties\":{\"input_1588506741033\":{\"type\":\"input\",\"label\":\"单行文本\",\"prop\":\"input_1588506741033\",\"key\":1588506741033}}}`\n          this.$refs.formBuilder.setSchema(schemaStr);\n        },\n      },\n\n    }\n    </script>\n\n\n<!-- CustomizeFormBuilder end -->\n\n\n\n<!-- 辅助函数 start -->\n### 辅助函数\n\n#### _isEmpty\n判断是否不为空  \n@return { Boolean }\n\n#### _clean\n删除对象中值为空的属性  \n@param { Object }  \n@return { Object }  \n\n#### _setValue\n值不为空直接返回，为空返回默认值  \n@param { Any, Any }  需判断的值，默认值  \n@return { Any }  \n\n#### _formatDate\n时间格式化  \n@params { [String, Number, Date], String }  时间，格式(默认 yyyy-MM-dd hh:mm:ss)  \n@return { String }  \n\n#### _deepClone\n深拷贝  \n@params { Object }  \n@return { Object }  \n\n#### _sleep\n延迟几秒后继续执行  \n@params { Number }  延迟秒数  \n@return { Promise } resolve  \n\n#### _deepMerge\n对象深度合并    \n@params { Object, Object }  延迟秒数  \n@return { Object }    \n_deepMerge(a, b, [..option])  \n_deepMerge.all([a, b, c], [..option])  \n\n<!-- 辅助函数 end -->\n\n\n\n### 常用增删改查页面完整事例(无弹窗)\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        ></customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      name: 'home',\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                console.log(this._clean({\n                  ...this.fetchParams,\n                  page: this.current,\n                  size: this.size,\n                }))\n                const response = {\n                  data: [\n                    { name: 'a', aaa: 2, status: 0 },\n                    { name: 'b', aaa: 3, status: null },\n                    { name: 'c', aaa: 4, status: 1 },\n                    { name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 1111)\n            })\n\n            // const response = await GetList(this._clean({\n            //   ...this.fetchParams,\n            //   page: this.current,\n            //   size: this.size,\n            // }))\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n\n\n### 常用增删改查页面完整事例(带弹窗)\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <dialog-create\n          :editId=\"editId\" \n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n        ></dialog-create>\n      </div>\n    </template>\n\n    <script>\n    import DialogCreate from './DialogCreate';\n\n    export default {\n      components: {\n        DialogCreate,\n      },\n\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          dialogVisible: false,\n          editId: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                \n                const response = {\n                  data: [\n                    { id: 1, name: 'a', aaa: 2, status: 0 },\n                    { id: 2, name: 'b', aaa: 3, status: null },\n                    { id: 3, name: 'c', aaa: 4, status: 1 },\n                    { id: 4, name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 222)\n\n              // const response = await GetList(this._clean({\n              //   ...this.fetchParams,\n              //   page: this.current,\n              //   size: this.size,\n              // }))\n              this.tableData = response.data || [];\n              this.total = response.total || 0;\n            })\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editId = null;\n          this.dialogVisible = true;\n        },\n        handleEdit(id) {\n          this.editId = id;\n          this.dialogVisible = true;\n        },\n        handleSubmitDialog() {\n          console.log('handleDialog');\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n---\n\n    <template>\n      <el-dialog\n        title=\"title\"\n        top=\"15vh\"\n        width=\"600px\"\n        :visible.sync=\"dialogVisible\"\n        @close=\"handleClosed\"\n      >\n        <el-form :model=\"form\" :rules=\"rules\" ref=\"form\" label-width=\"180px\" size=\"small\">\n          <el-form-item label=\"名称:\" prop=\"name\">\n            <el-input v-model=\"form.name\"></el-input>\n          </el-form-item>\n\n          <el-form-item>\n            <el-button type=\"primary\" @click=\"handleSubmit\" :loading=\"loading\">提交</el-button>\n            <el-button @click=\"handleCancel\">取消</el-button>\n          </el-form-item>\n        </el-form>\n      </el-dialog>\n    </template>\n\n    <script>\n    const DEFAULT_FORM = () => ({\n      name: '',\n    });\n\n    export default {\n      props: {\n        visible: Boolean,\n        editId: {},\n      },\n\n      data() {\n        return {\n          dialogVisible: false,\n\n          form: DEFAULT_FORM(),\n          rules: {\n            name: { required: true, message: '请输入名称' },\n          },\n          loading: false,\n        }\n      },\n\n      methods: {\n        handleClosed() {\n          // reset here\n          this.$refs.form.resetFields();\n          this.form = DEFAULT_FORM();\n          this.$emit('update:visible', false);\n        },\n\n        async handleSubmit() {\n          console.log(this.form);\n          try {\n            await this.$refs.form.validate();\n\n            await this.$confirm(`是否确定提交`, \"提示\", {\n              confirmButtonText: \"确定\",\n              cancelButtonText: \"取消\",\n              type: \"warning\"\n            });\n\n            this.loading = true;\n            let params = this._deepClone(this.form);\n            if (!!this.editId) {\n              params.id = this.editId;\n              await Update(params);\n            }else{\n              await Save(params);\n            }\n\n            this.$message.success(`${!!this.editId ? '编辑' : '新增'}成功`);\n            this.dialogVisible = false;\n            this.$emit('submit');\n          } catch (error) {\n            console.log(error);\n          }\n          this.loading = false;\n        },\n        handleCancel() {\n          this.dialogVisible = false;\n        },\n      },\n\n      watch: {\n        visible: {\n          handler(newVal, oldVal) {\n            this.dialogVisible = newVal;\n          },\n          immediate: true,\n        }\n      },\n\n    }\n    </script>\n\n    <style lang='scss' scoped>\n\n    </style>\n\n\n### 常用增删改查页面完整事例(带弹窗)单页\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <customize-dialog-form\n          :editData=\"editData\"\n          title='title'\n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n          :loading.sync=\"formLoading\"\n          :setting=\"formSetting\"\n          :Enum=\"formEnum\"\n          validate  \n        ></customize-dialog-form>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ] },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n          ],\n          formEnum: {\n            allList: [],\n          },\n          dialogVisible: false,\n          editData: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          const params = this._clean({\n            ...this.fetchParams,\n            current: this.current,\n            size: this.size,\n          });\n          console.log(params);\n          this.tableLoading = true;\n          try {\n            const response = {\n              data: [\n                { id: 1, name: 'a', aaa: 2, status: 0 },\n                { id: 2, name: 'b', aaa: 3, status: null },\n                { id: 3, name: 'c', aaa: 4, status: 1 },\n                { id: 4, name: 'd', aaa: 5, status: 0 },\n              ],\n              total: 100,\n            }\n            await this._sleep(1);\n\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editData = null\n          this.dialogVisible = true;\n        },\n        async handleEdit(id) {\n          this.dialogVisible = true;\n\n          await this._sleep(1);\n          const editData = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this.editData = editData;\n        },\n        async handleSubmitDialog(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n          this.dialogVisible = false;\n          this.editData = null;\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.fetchData();\n        this.formInit();\n      },\n    }\n    </script>\n\n","_id":"vue-element-customize@3.0.1","_integrity":"sha512-wdmdQI5KcLHNgzXi5N3TV6Vq6FVibqLB0x2KvR90uCV9mV8dUhBNgbAv3cpgmOlypDCjUF/ztrIWOfoPOx6Zag==","_resolved":"/Users/luanmingli/code/vue-element-customize/vue-element-customize-3.0.1.tgz","_from":"file:vue-element-customize-3.0.1.tgz","_nodeVersion":"16.13.1","_npmVersion":"8.5.2","dist":{"integrity":"sha512-wdmdQI5KcLHNgzXi5N3TV6Vq6FVibqLB0x2KvR90uCV9mV8dUhBNgbAv3cpgmOlypDCjUF/ztrIWOfoPOx6Zag==","shasum":"99e85d030edb0fef3fb1f36158deb11ae027884a","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-3.0.1.tgz","fileCount":5,"unpackedSize":325304,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKGXeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqyQg/5AarUFUBBufuu3VkLmEvObwjZ/xCqwMq6FNEAY7wx5FSEFRb5\r\nLn/oPCEJqzLCpi7qSejusaozFxY5eVpwlpJtvcDsdRcK0m+A2MwZGGC2YKjT\r\ncQM4zkq+x3qgVDoSKsCpANLvh94DuXIEDKkDwRfhkBapMCEQbS9mUc41ncSc\r\ntBmUs2fY8dRGo3IaPwbk3k00Qh9pAtDhW47p4qrTpjHh5kM3h77BqJTA5gFM\r\nX+IvR79dDYyH0kj8B9eC++o7sbMjxBmIPKVeI39xdWYaG3hSQSTTlWZUxtip\r\n2zmeOLGrPQH+/6UsAMblOdfMXDXddeq9BHb0n8IW8fB4n2++RNCc/DpBs0j3\r\nItG11KX4sxZCp3V2FOs99OU3HzxZSS8KCOvvsUOJLEd0rVaragWP5XxotROB\r\n0FHRRCD+BJj2ay/kSovsjxvFLcpknIc4LGN9Fsbu1bi/QjUlG6AtzrNapxaz\r\nUZbJBxYR+eQZYq1RlJJndrtmzxcH3dpeUQ0PnRVBVBrAFLdewkjwFoDQEW1k\r\nxW08f+Twl+5qUfgfS1MQ6/U/pHM51fC59sHhopGBMXhAMx2azCcPDXierb7t\r\nd4ZRoJ3PEErWcgEACTHRyKugOHWu1RMPmRV61Oc4UjIlXAfmnDkUTguE80q3\r\n1XUneYj8cmzEMM67UZI1gWsQtlPWCnT/Uk4=\r\n=anq5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSDI1OgJc0qjTd9BAqZ9E/RN8CRsrRcngIy1LOvxqH0gIgIfxXA3ej0VmrbUZSztQ7e8fUrSta4QbaLkQmXWnIQLo="}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_3.0.1_1646814686164_0.02397491623803316"},"_hasShrinkwrap":false},"3.0.3":{"name":"vue-element-customize","version":"3.0.3","description":"vue element-ui customize template","scripts":{"serve":"vite","build":"vue-tsc --noEmit && vite build","build:utils":"babel utils --out-dir lib/utils","publish":"pnpm publish --tag=next --no-git-checks","release":"pnpm run build && pnpm run publish"},"main":"./dist/vue-element-customize.umd.js","module":"./dist/vue-element-customize.es.js","types":"./index.d.ts","repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"license":"MIT","bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"homepage":"https://github.com/Lmingli/vue-element-customize#readme","peerDependencies":{"element-plus":"^2.0.4","vue":"^3.2.31"},"devDependencies":{"@types/lodash-es":"^4.17.6","@types/node":"^17.0.21","@vitejs/plugin-vue":"^2.2.4","element-plus":"^2.0.4","sass":"^1.46.0","typescript":"^4.6.2","vite":"^2.8.6","vue":"^3.2.31","vue-tsc":"^0.32.1"},"gitHead":"831fafa62738ea1e6295bb136db00fa52b072a5c","_id":"vue-element-customize@3.0.3","_nodeVersion":"16.13.1","_npmVersion":"8.5.2","dist":{"integrity":"sha512-MJApMCA/Cqb0JjXTztd7zeGLY17nohlVk4STrfjBC80CAiYr5h0vdVZED5Q8jKcANIvJTX94fa7lk6ZDckUENQ==","shasum":"239a69a182d600168279e89f9f0f8b3bac6bce46","tarball":"https://registry.npmjs.org/vue-element-customize/-/vue-element-customize-3.0.3.tgz","fileCount":6,"unpackedSize":273014,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKITnACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpAZw//ce0dELs51HWVgAxVOErkDFM/Xh6Bet7ksShmiWMmT7LuTj1S\r\nH8k/kmhr4PrGC11GggoAq/+z5i5UIqApktGdoehBKTmHV1fbOAufOuNpNvk7\r\nMJ6TOee/uRkj9R2UNidximSolKm09i3gWSJ6KgU9Ql7f+8skW7on+D6JfsG6\r\nATWaxyfBeCtqM+kRSu1Doo9xrEqXEOzpjuJwl5P6h1xTkzKt5U/jE/SH/q1W\r\nTWXjGy8XuNgJ8t4UsSk/TtoenXkEXGp/mOZwt9EyqOqaRKVjuqA+me48A2et\r\n74y2vqsoOre3bFosAYDk0YbWmZBn8b3OmTBzof+/E1KFUJMFlPCr/C8N8VuL\r\nWWhNdt1gRoA8EyZrCyHC2PH5gYcsClw8rXgxoei6ebwxAJMEjJr7fEh6MKqb\r\nAAJg4qHk5RrYZw0m2e8xvc9V9hzzpyDg/tlOfou8Vl6FUb9U3MSj6WDOMN8P\r\nDB+rYNFKqWl3jbuL/XiGtENls2B1FNyT3HWclv/WAUKWcHIauiGahhOG8nR3\r\nkF/hkly2981RRZbDT1fCyJOHXYWsIJ9fSjKM0prIAmquSsa9CbQYHRZmcf1L\r\n6bJC2zS7VrASRiGlxyFNGwvPSv685fAr3OUY58Gk61xDWHDgCCR8A1Z44i1W\r\ncLYObSDsyHG3xdP2jOjhYEZRHqVKqhvGHhw=\r\n=qBRx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCf10Q4aV5kp1b6M72nw0vz4bS4AVhYMWHfg+dbk88KJgIhAJeoGFGSiDw0K9lawbGsl19nW3pluHNGVFRuzkOFStSk"}]},"_npmUser":{"name":"luanmingli","email":"2269800@gmail.com"},"directories":{},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/vue-element-customize_3.0.3_1646822630902_0.89407123068008"},"_hasShrinkwrap":false}},"time":{"created":"2020-03-07T03:44:08.272Z","0.0.1":"2020-03-07T03:44:08.432Z","modified":"2022-05-23T14:36:12.100Z","0.0.2":"2020-03-10T03:34:35.434Z","0.0.3":"2020-03-11T01:46:41.391Z","0.0.4":"2020-03-11T06:16:27.130Z","0.0.5":"2020-03-11T06:28:31.986Z","0.0.6":"2020-03-11T10:11:15.787Z","0.0.7":"2020-03-13T06:31:13.639Z","0.0.8":"2020-03-13T08:21:04.030Z","0.0.9":"2020-03-13T09:59:45.047Z","0.0.10":"2020-03-19T01:44:13.526Z","0.0.11":"2020-03-23T07:54:22.421Z","0.0.12":"2020-03-23T08:14:52.760Z","0.0.13":"2020-03-27T16:00:02.202Z","0.0.14":"2020-03-30T02:01:56.750Z","0.0.15":"2020-04-01T09:02:25.955Z","0.0.16":"2020-04-08T16:27:38.602Z","0.0.17":"2020-04-09T10:04:18.095Z","0.0.18":"2020-04-09T14:30:12.833Z","0.0.19":"2020-04-10T10:14:39.109Z","0.0.20":"2020-04-12T09:56:40.273Z","0.0.21":"2020-04-14T10:11:40.888Z","0.0.22":"2020-04-15T01:18:30.791Z","0.0.23":"2020-04-15T10:07:52.635Z","0.0.24":"2020-04-15T16:13:02.945Z","0.0.25":"2020-04-16T10:05:42.411Z","0.0.26":"2020-04-16T16:35:11.775Z","0.0.27":"2020-04-18T10:07:25.193Z","0.0.28":"2020-04-22T04:33:36.469Z","0.0.29":"2020-04-22T13:46:26.722Z","0.0.30":"2020-04-23T09:32:59.132Z","0.0.31":"2020-04-28T07:02:23.326Z","0.0.32":"2020-04-28T10:15:14.413Z","0.0.33":"2020-04-30T02:25:28.820Z","0.0.34":"2020-05-03T12:07:23.540Z","0.0.35":"2020-05-03T20:19:41.882Z","0.0.36":"2020-05-04T16:01:16.970Z","0.0.37":"2020-05-05T06:42:14.137Z","0.0.38":"2020-05-07T01:41:18.183Z","0.0.39":"2020-05-07T10:03:33.815Z","0.0.40":"2020-05-08T01:22:52.784Z","0.0.41":"2020-05-09T09:51:39.559Z","0.0.42":"2020-05-11T04:10:51.438Z","0.0.43":"2020-05-12T09:59:38.819Z","0.0.44":"2020-05-13T03:46:04.301Z","0.0.45":"2020-05-14T07:08:27.442Z","0.0.46":"2020-05-14T08:40:18.385Z","0.0.47":"2020-05-14T09:03:27.582Z","0.0.48":"2020-05-15T09:55:15.864Z","0.0.49":"2020-05-18T07:42:53.010Z","0.0.50":"2020-05-19T03:01:30.998Z","1.0.0":"2020-05-21T05:54:05.680Z","1.0.1":"2020-07-15T12:06:51.442Z","1.0.2":"2020-07-16T02:26:12.323Z","1.0.3":"2020-07-21T03:50:55.537Z","1.0.4":"2020-07-27T14:59:00.790Z","1.0.5":"2020-07-27T15:37:47.018Z","1.0.6":"2020-07-28T06:43:03.884Z","1.0.7":"2020-07-28T10:03:57.095Z","1.0.8":"2020-07-29T04:01:41.590Z","1.0.9":"2020-07-29T05:58:03.170Z","1.1.0":"2020-08-01T05:24:54.824Z","1.1.1":"2020-08-01T06:25:28.504Z","1.1.2":"2020-08-01T06:29:42.627Z","1.1.3":"2021-03-25T09:54:10.970Z","1.1.4":"2021-03-25T10:05:45.148Z","1.1.5":"2021-03-26T04:53:35.892Z","1.1.6":"2021-03-26T04:57:50.430Z","1.1.7":"2021-03-26T05:19:32.639Z","1.1.8":"2021-03-26T05:24:51.325Z","1.1.9":"2021-03-26T05:30:08.470Z","1.1.10":"2021-03-26T05:39:23.135Z","1.1.11":"2021-03-26T05:49:40.089Z","0.0.1-next":"2022-03-09T08:13:45.603Z","3.0.0-next":"2022-03-09T08:16:13.622Z","3.0.0":"2022-03-09T08:16:44.834Z","0.0.2-next":"2022-03-09T08:25:15.760Z","0.0.3-next":"2022-03-09T08:29:19.854Z","3.0.1":"2022-03-09T08:31:26.341Z","3.0.2":"2022-03-09T10:42:28.538Z","3.0.3":"2022-03-09T10:43:51.073Z"},"maintainers":[{"name":"luanmingli","email":"2269800@gmail.com"}],"description":"vue element-ui customize template","homepage":"https://github.com/Lmingli/vue-element-customize#readme","repository":{"type":"git","url":"git+ssh://git@github.com/Lmingli/vue-element-customize.git"},"author":{"name":"luanmingli"},"bugs":{"url":"https://github.com/Lmingli/vue-element-customize/issues"},"license":"MIT","readme":"<!-- TOC -->\n\n- [功能列表](#功能列表)\n  - [组件](#组件)\n  - [辅助函数](#辅助函数)\n  - [自定义样式](#自定义样式)\n- [全量引入](#全量引入)\n  - [传入配置项](#传入配置项)\n- [按需引入](#按需引入)\n  - [组件引入](#组件引入)\n  - [辅助函数引入](#辅助函数引入)\n    - [辅助函数全量引入](#辅助函数全量引入)\n    - [辅助函数按需引入](#辅助函数按需引入)\n    - [自定义样式引入](#自定义样式引入)\n- [项目级配置](#项目级配置)\n  - [CustomizeTable配置](#customizetable配置)\n  - [CustomizePagination配置](#customizepagination配置)\n  - [CustomizeSearchBar配置](#customizesearchbar配置)\n  - [CustomizeSwitch配置](#customizeswitch配置)\n  - [CustomizeForm配置](#customizeform配置)\n  - [CustomizeDialogForm配置](#customizedialogform配置)\n- [CustomizeTable组件](#customizetable组件)\n  - [组件配置](#组件配置)\n    - [props](#props)\n    - [emit](#emit)\n    - [ref](#ref)\n    - [slot](#slot)\n  - [example](#example)\n- [CustomizePagination组件](#customizepagination组件)\n  - [组件配置](#组件配置-1)\n    - [props](#props-1)\n    - [emit](#emit-1)\n  - [example](#example-1)\n- [CustomizeSearchBar组件](#customizesearchbar组件)\n  - [组件配置](#组件配置-2)\n    - [props](#props-2)\n    - [emit](#emit-2)\n    - [slot](#slot-1)\n    - [ref](#ref-1)\n  - [example](#example-2)\n  - [slot example](#slot-example)\n- [CustomizeSwitch组件](#customizeswitch组件)\n  - [组件配置](#组件配置-3)\n    - [props](#props-3)\n    - [emit](#emit-3)\n    - [ref](#ref-2)\n  - [example 双向绑定](#example-双向绑定)\n  - [example 非双向绑定](#example-非双向绑定)\n  - [example type=\"inside\"](#example-typeinside)\n- [CustomizeForm组件](#customizeform组件)\n  - [组件配置](#组件配置-4)\n    - [props](#props-4)\n    - [emit](#emit-4)\n    - [slot](#slot-2)\n    - [slot-scope](#slot-scope)\n    - [ref](#ref-3)\n  - [example](#example-3)\n  - [slot example](#slot-example-1)\n- [CustomizeDialogForm组件](#customizedialogform组件)\n  - [组件配置](#组件配置-5)\n    - [props](#props-5)\n    - [emit](#emit-5)\n    - [slot](#slot-3)\n    - [slot-scope](#slot-scope-1)\n    - [ref](#ref-4)\n  - [example](#example-4)\n- [CustomizePage组件](#customizepage组件)\n  - [example](#example-5)\n- [CustomizeFormBuilder组件](#customizeformbuilder组件)\n  - [组件配置](#组件配置-6)\n    - [props](#props-6)\n    - [event](#event)\n    - [slot](#slot-4)\n  - [example](#example-6)\n- [辅助函数](#辅助函数-1)\n  - [_isEmpty](#_isempty)\n  - [_clean](#_clean)\n  - [_setValue](#_setvalue)\n  - [_formatDate](#_formatdate)\n  - [_deepClone](#_deepclone)\n  - [_sleep](#_sleep)\n  - [_deepMerge](#_deepmerge)\n- [常用增删改查页面完整事例(无弹窗)](#常用增删改查页面完整事例无弹窗)\n- [常用增删改查页面完整事例(带弹窗)](#常用增删改查页面完整事例带弹窗)\n- [常用增删改查页面完整事例(带弹窗)单页](#常用增删改查页面完整事例带弹窗单页)\n\n<!-- /TOC -->\n\n### 功能列表\n\n#### 组件\n    CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder\n\n#### 辅助函数\n    isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge,\n\n#### 自定义样式\n    select, input, el-radio-group, el-checkbox-group [round]属性\n    input [no-border]属性\n\n\n\n### 全量引入\n    import Customize from 'vue-element-customize';\n    Vue.use(Customize);\n\n#### 传入配置项\n    Vue.use(Customize, {\n      CustomizeTable: {},\n      CustomizePagination: {},\n      CustomizeSearchBar: {},\n      CustomizeSwitch: {},\n      CustomizeForm: {},\n      CustomizeDialogForm: {},\n      CustomizeFormBuilder: {},\n    });\n\n<!-- 功能列表 end -->\n\n\n\n### 按需引入\n\n#### 组件引入\n    import { CustomizeTable, CustomizePagination, CustomizeSearchBar, CustomizeSwitch, CustomizeForm, CustomizeDialogForm, CustomizePage, CustomizeFormBuilder } from 'vue-element-customize';\n    Vue.use(CustomizeTable, {});\n    Vue.use(CustomizePagination, {});\n    Vue.use(CustomizeSearchBar, {});\n    Vue.use(CustomizeSwitch, {});\n    Vue.use(CustomizeForm, {});\n    Vue.use(CustomizeDialogForm, {});\n    Vue.use(CustomizePage);\n    Vue.use(CustomizeFormBuilder);\n\n#### 辅助函数引入\n\n##### 辅助函数全量引入\n    import { CustomizeUtils } from 'vue-element-customize';\n    Vue.use(CustomizeUtils);\n\n##### 辅助函数按需引入\n    import { isEmpty, clean, setValue, deepClone, formatDate, sleep, deepMerge } from 'vue-element-customize';\n    Vue.prototype._isEmpty = isEmpty;\n    Vue.prototype._clean = clean;\n    Vue.prototype._setValue = setValue;\n    Vue.prototype._deepClone = deepClone;\n    Vue.prototype._formatDate = formatDate;\n    Vue.prototype._sleep = sleep;\n    Vue.prototype._deepMerge = deepMerge;\n\n##### 自定义样式引入\n    import 'vue-element-customize/lib/styles/index.scss'\n\n\n<!-- 按需引入 end -->\n\n\n\n<!-- 项目级配置 start -->\n### 项目级配置\n\n#### CustomizeTable配置\n    stripe: Boolean,  // true\n    border: Boolean,  // false\n    size: String,  // medium\n    headerCellStyle: Object,  // { backgroundColor: '#f5f7fa', color: '#909399',  borderBottom: 0,  height: '50px', },\n    cellStyle: Object,  // { borderBottom: 0 },\n    className: String,\n    align: String,\n\n#### CustomizePagination配置\n    pageSizes: Array,  // [10,20,50,100]\n    layout: String,  // 'total, sizes, prev, pager, next, jumper'\n    align: String,  // right\n    className: String,\n    pageSize: Number,  // 10\n\n#### CustomizeSearchBar配置\n    size: String,  // medium\n    className: String,  //''\n    blockButtons: Boolean,  // false\n    showResetButton: Boolean,  // true\n    openEnterSearch: Boolean,  // false\n    searchButtonName: String,  // 查询\n    optionAllName: String,  // 全部\n\n#### CustomizeSwitch配置\n    defaultColor: Array,  // 默认的[打开背景色, 关闭背景色]\n    className: String,\n\n#### CustomizeForm配置\n    size: String,  // medium\n    className: String,  //''\n    showSubmitButton: Boolean,  // true\n    showResetButton: Boolean,  // true\n    submitButtonName: String,  // 提交\n    resetButtonName: String,  // 重置\n    openEnterSubmit: Boolean,  // false\n    optionAllName: String,  // 全部\n    labelWidth: String,  // 120px\n    clearable: Boolean,  // true\n    hideOptionAll: Boolean,  // true\n\n#### CustomizeDialogForm配置\n    form: Object,  // 弹窗内form的配置，同CustomizeForm\n    size: String,  // medium\n    closeButtonShow: [Boolean, String],  // true\n    closeButtonName: String,  // 关闭\n    className: String,  // dialog自定义class\n\n<!-- 项目级配置 end -->\n\n\n\n<!-- CustomizeTable start -->\n### CustomizeTable组件\n\n#### 组件配置 \n##### props \n    data: Array,  // 渲染的数据\n\n    column: Array,  // 表格配置\n      {\n        prop: String,  // 渲染数据的key值\n        label: String, // key值对应的表头名\n        width: String, //宽度\n        sortable: Function,  //排序\n        formatter: Function,  //(row, column, cellValue, index) {}\n        slot: String,  // 传入的slot名\n      }\n\n    size: String,\n    type: String,  // 'index'\n    headerCellStyle: Function,  // ({row, column, rowIndex, columnIndex}) {} '表头样式'\n    cellStyle: Object,\n    sortable: Boolean,\n    stripe: Boolean,\n    border: Boolean,\n    className: String,\n    maxHeight: [String, Number],\n    align: String,  // 'center'\n\n##### emit\n    @sortChange  //排序\n    @selectionChange\n\n##### ref\n    ref: 'table'\n\n##### slot\n    slot before // 默认slot 前\n    slot after  // 默认slot 最后\n\n#### example\n    <customize-table\n      :data=\"tableData\"\n      :column=\"tableColumn\"\n      v-loading=\"tableLoading\"\n    >\n      <template #slotName>\n        <el-table-column label=\"slot-slotName\" align=\"center\">\n          <template #default=\"{ row }\">\n            <span>{{ _isEmpty(row.status) }}</span>\n          </template>\n        </el-table-column>\n      </template>\n      <template #after>\n        <el-table-column label=\"操作\" align=\"center\">\n          <template #default=\"{ row }\">\n            <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n          </template>\n        </el-table-column>\n      </template>\n    </customize-table>\n\n    data() {\n      return {\n        tableLoading: false,\n        tableData: [],\n        tableColumn: [\n          // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n          { label: '名称', prop: 'name' },\n          { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n          { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n            const Enum = {\n              0: '暂停',\n              1: '启用',\n            }\n            return Enum[cellValue] || '--';\n          }},\n          { slot: 'slotName' }\n        ],\n      }\n    },\n\n<!-- CustomizeTable end -->\n\n\n<!-- CustomizePagination start -->\n### CustomizePagination组件\n\n#### 组件配置 \n##### props \n    current.sync: [Number, String],  // 当前页\n    size.sync: [Number, String],  // 当前每页个数\n    total: [Number, String],  // 总个数\n\n    pageSizes: Array,  // 每页显示个数选择器的选项设置\n    layout: String,  // 组件布局 'sizes, prev, pager, next, jumper, ->, total, slot',\n    align: String,  // 组件位置 text-align\n    className: String,\n\n##### emit\n    @change\n\n#### example\n    <customize-pagination\n      :current.sync=\"current\"\n      :total=\"total\"\n      :size.sync=\"size\"\n      @change=\"handleChangePage\"\n      style=\"padding-bottom: 30px;\"\n    ></customize-pagination>\n\n    data() {\n      return {\n        current: 1,\n        total: 0,\n        size: 10,\n      }\n    },\n\n    methods: {\n      handleChangePage({ current, size }) {\n        this.fetchData();\n      },\n    },\n\n<!-- CustomizePagination end -->\n\n\n<!-- CustomizeSearchBar start -->\n### CustomizeSearchBar组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/select\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n\n      slot: String,  // slot  #slot=\"{ form }\"\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    inlineButtons: Boolean  // 按钮不换行\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    blockButtons: Boolean,  // 是否将按钮组换行展示，默认false\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    searchButtonName: String,  // 查询按钮文案\n    full-width: Boolean,  // inline模式铺满宽度，输入框宽度自适应\n    inline: Boolean,  // inline 默认true\n    margin: String,  // el-form-item margin-right '10px'\n    marginLeft: String,  // el-form-item margin-right设为0，margin-left为该px\n    showSearchButton: Boolean,  // 是否显示搜索按钮 默认true\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // select全部选项的名称，默认全部\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <customize-search-bar\n      :loading.sync=\"searchBarLoading\"\n      @submit=\"handleSubmitSearch\"\n      :setting=\"searchBarSetting\"\n      :Enum=\"searchBarEnum\"\n    ></customize-search-bar>\n\n    data() {\n      return {\n        searchBarLoading: false,\n        searchBarSetting: [\n          { type: 'input', label: '名称', prop: 'name' },\n          { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n          { slot: 'type', prop: 'type' },\n        ],\n        searchBarEnum: {\n          allList: [],\n        },\n      }\n    },\n\n    methods: {\n      fetchData() {\n        this.searchBarLoading = false;\n      },\n      handleSubmitSearch(searchParams) {\n        this.current = 1;\n        this.fetchParams = { ...searchParams };\n        this.fetchData();\n      },\n      async searchBarInit() {\n        const { data } = await GetList({\n          pageNo:1,\n          paeSize: 100,\n        });\n        let allList = data.itemInfos || [];\n        allList = allList.map(n => ({\n          label: n.name,\n          value: n.id,\n        }))\n        this.$set(this.searchBarEnum, 'allList', allList);\n      },\n    },\n\n#### slot example\n    <template #type=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeSearchBar end -->\n\n\n\n<!-- CustomizeSwitch start -->\n### CustomizeSwitch组件\n\n#### 组件配置\n##### props\n    type: String,  // inside/right\n    mode: String,  // 同type\n\n    value/v-model: [Number, String, Boolean],\n\n    values: Array,  // [打开时value, 关闭时value]\n\n    text: Array,  // [打开时文案, 关闭时文案]\n    icon: Array,  // [打开时图标, 关闭时图标] 开启后覆盖text\n    color: Array,  // [打开时背景色, 关闭时背景色]\n    disabled: Boolean,  // 默认false,\n    width: Number,  // element中宽度，默认40\n    name: String,\n    validateEvent: Boolean,  // 改变后是否触发表单验证\n    activeTextColor: String,  // type为inside时文字颜色\n    className: String,\n    size: String,  // medium/small/mini\n\n##### emit\n    @change\n\n##### ref\n    ref: switch\n\n#### example 双向绑定\n    <customize-switch\n      v-model=\"switchValue\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n      }\n    },\n\n#### example 非双向绑定\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n    ></customize-switch>\n\n    data() {\n      return {\n        switchValue: 1,\n        switchDisabled: false,\n      }\n    },\n\n    methods: {\n      async handleSwitchChange(value) {\n        try {\n          this.switchDisabled = true;\n          await this._sleep(1);\n          this.switchValue = value;\n          this.$message.success('操作成功');\n        } catch (error) {\n          \n        }\n        this.switchDisabled = false;\n      },\n    },\n\n#### example type=\"inside\"\n    <customize-switch\n      :value=\"switchValue\"\n      :disabled=\"switchDisabled\"\n      :text=\"['开启', '关闭']\"\n      :values=\"[1, 0]\"\n      @change=\"handleSwitchChange\"\n      type='inside'\n      :width=\"54\"\n      :color=\"['#67C23A', '#909399']\"\n      active-text-color=\"#fff\"\n      size=\"small\"\n    ></customize-switch>\n\n<!-- CustomizeSwitch end -->\n\n\n\n<!-- CustomizeForm start -->\n### CustomizeForm组件\n\n#### 组件配置 \n##### props\n    loading.sync: false,  // 搜索按钮loading状态\n\n    setting: [{\n      type: String,  // input/textarea/inputNumber/select/text/date/datepicker/switch/image/object/array/\n      label: String // 表单label名\n      prop: String,  // 提交的字段名 必填\n      placeholder: String,  // 默认为请输入/选择 label \n      default: Any, // 默认值\n      width: String, // style中width\n      rules: Array,  // 替换默认rule\n      required: Boolean, // true/false\n      msg: String, // 错误提示信息\n      validType: String,  // rules type, url/email/date\n      prefixIcon: String, // type input时，输入框icon\n      className: String,  // type input时,el-form-item的class\n      labelWidth: String,  // label-width\n\n      slot: String,  // slot  #slot=\"{ form }\"\n      slotInside: String,  // 插入至el-form-item内\n\n      enum: Array | Object,  // 直接传入枚举或数组  label value\n      enumProp: String,  // select时，enum中传入的枚举属性值\n      enumKey: Array,  // select时，enum的key值，默认['label', 'value']\n      hideOptionAll: true, // select时，隐藏‘全部’选项传入true\n      optionAllName: String,  // select，全部显示label名，默认全部\n      clearable: Boolean,  // date时，el-date-picker的 clearable，默认true\n      disabled: Boolean,  // disabled状态，默认false\n      dataType: Number/Boolean,  // 数据类型，默认String\n      inputNumber: Boolean,  // true且type number时显示el-input-number\n\n      visible: Array | Function,  // [属性名, 属性值] 设置后 当某属性为该值时，渲染该条。为function时return true时显示\n    }],\n\n    enum: {\n      [enumProp]: [{ label: '', prop: '' }]\n    }\n\n    validate: Boolean,  // 开启表单验证 配合rules\n    size: String,  // 表单size\n    className: String,  // form自定义class\n    showSubmitButton: Boolean,  // 是否展示提交按钮，默认true\n    showResetButton: Boolean,  // 是否展示重置按钮，默认true\n    submitButtonName: String,  // 提交按钮文案，默认提交\n    resetButtonName: String,  // 重置按钮文案，默认重置\n    openEnterSearch: Boolean,  // 是否开启input的回车搜索，默认false\n    margin: String,  // el-form-item margin-bottom\n    immediate: Boolean,  // select/date，是否值改变时立即触发搜索，默认false\n    optionAllName: String,  // 下拉选择全部的名称，默认全部\n    labelWidth: String,  // el-form label-width，默认120px\n    itemWidth: String,  // form-item的宽度，默认auto\n    clearable: Boolean,  // el-date-picker clearable，默认true\n    hideOptionAll: Boolean, // select时，隐藏‘全部’选项传入true\n    hideOperate: Boolean,  // 隐藏操作el-form-item\n    cleanProps: Boolean,  // submit时仅传出setting中有的属性，删除其它属性\n    fn: Array,  // 传入的函数 配合image中fnName\n\n##### emit\n    @submit  // emit所有表单参数\n\n##### slot\n    #button-before\n    #button\n\n##### slot-scope\n    #after=\"form\" \n\n##### ref\n    ref: form\n\n#### example\n    <template>\n      <customize-form\n        :loading.sync=\"formLoading\"\n        @submit=\"handleSubmit\"\n        :setting=\"formSetting\"\n        :Enum=\"formEnum\"\n        validate\n      ></customize-form>\n    </template>\n    \n    <script>\n    export default {\n      data() {\n        return {\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', disabled: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '' },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            } },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { type: 'object', label: '对象', prop: 'obj', default: {}, children: [\n              { type: 'input', label: '名称', prop: 'name', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'array', label: '数组', prop: 'arr', len: 3, default: [], children: [\n              { type: 'input', label: '名称', prop: 'name' },\n              { type: 'input', label: '名称2', prop: 'name2', required: true },\n              { type: 'select', label: '分类', prop: 'type', enum: { 1: 'a', 2: 'b' }, default: '1' },\n            ] },\n            { type: 'image', label: '图片', prop: 'image', fn: this.uploadFn },\n          ],\n          formEnum: {\n            allList: [],\n          },\n        }\n      },\n\n      methods: {\n        async handleSubmit(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n        },\n\n        async uploadFn() {\n          const url = '';\n          await this._sleep(1);\n\n          return Promise.resolve(url);\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.formInit();\n      },\n    }\n    </script>\n\n#### slot example\n    <template #slotName=\"{ form }\">\n      <el-form-item label=\"分类\">\n        <el-select v-model=\"form.type\" placeholder=\"请选择分类\" @change=\"handleChange\">\n          <el-option label=\"全部\" value=\"\"></el-option>\n          <el-option\n            v-for=\"item in allList\"\n            :label=\"item.name\"\n            :value=\"item.id\"\n            :key=\"item.id\"\n          ></el-option>\n        </el-select>\n      </el-form-item>\n    </template>\n\n<!-- CustomizeForm end -->\n\n\n\n<!-- CustomizeDialogForm start -->\n### CustomizeDialogForm组件\n\n#### 组件配置 \n##### props\n    visible.sync: Boolean,  // 弹窗是否显示\n    editData: Any,  // 以编辑进入时回显数据\n    title: [String, Array],  // 弹窗标题，为数组时[新建title, 编辑title]\n    top: String,  // el-dialog top\n    width: String,  // el-dialog width\n    size: String,  // medium\n    closeButtonShow:  [Boolean, String],  // 是否展示关闭弹窗按钮，默认展示。传入String时控制slot(button-before, button)\n    closeButtonName: String,  // 关闭弹窗按钮名称，默认关闭\n    className: String,  // dialog自定义class\n    其他prop同CustomizeForm\n\n##### emit\n    @submit form\n\n##### slot\n    同CustomizeForm\n    #button-before\n    #button\n\n##### slot-scope\n    同CustomizeForm\n    #after=\"form\" \n\n##### ref\n    ref: dialog\n\n#### example\n    <customize-dialog-form\n      title='123'\n      :visible.sync=\"dialogVisible\" \n      @submit=\"handleSubmitDialog\"\n      :loading.sync=\"submitLoading\"\n      :setting=\"formSetting\"\n      :Enum=\"formEnum\"\n      validate  \n    ></customize-dialog-form>\n\n    <script>\n    export default {\n      /* 作为单独组件引入时 */\n      // props: {\n      //   visible: Boolean,\n      // },\n\n      data() {\n        return { \n          submitLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', default: '1', required: true },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList' },\n            { slot: 'type', prop: 'type' },\n          ],\n          formEnum: {\n            allList: [],\n          },\n      \n          editData: null,\n\n          dialogVisible: false,\n        }\n      },\n\n      computed: {\n        /* 作为单独组件引入时，外部 :visible.sync */\n        // dialogVisible: {\n        //   get() {\n        //     return this.visible;\n        //   },\n        //   set(val) {\n        //     this.$emit('update:visible', val);\n        //   },\n        // },\n      },\n\n      methods: {\n        async handleSubmitDialog(form) {\n          console.log(form);\n          try {\n            /* 提交表单 */\n            await this._sleep(1)\n            \n            this.$message.success('提交成功');\n            this.dialogVisible = false;\n          } catch (error) {\n            console.log('submitDialogError', error);\n          }\n          this.submitLoading = false;\n        },\n\n        handleCreate() {\n          // 以创建进入\n          this.editData = null \n          this.dialogVisible = true;    \n        },\n        handleEdit() {\n          // 以编辑进入 同步数据\n          this.editData = {\n            name: 'name',\n            type: 2,\n          }\n          this.dialogVisible = true;    \n        },\n        async handleEditAsync() {   \n          // 以编辑进入 异步数据\n          this.editData = null\n          this.dialogVisible = true;\n          await this._sleep(1);\n          this.editData = { \n            name: 'name2',\n            type: 3,\n          }\n        }, \n        \n        async formInit() {\n          const data = {\n            itemInfos: [\n              {name:'a',id:1},\n              {name:'b',id:2},\n              {name:'c',id:3},\n            ]\n          } \n          this._sleep(2)\n          let allList = data.itemInfos || [];  \n          allList = allList.map(n => ({ \n            label: n.name, \n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList); \n        },\n      }\n    }\n    </script>\n\n<!-- CustomizeDialogForm end -->\n\n\n\n<!-- CustomizePage start -->\n### CustomizePage组件\n\n#### example\n    <template>\n      <customize-page\n        :pageSetting=\"pageSetting\"\n        :searchBarProps=\"searchBarProps\"\n        :dialogProps=\"dialogProps\"\n        :Enum=\"Enum\"\n        :tableProps=\"tableProps\"\n        :tableDataFn=\"tableDataFn\"\n        :editDataFn=\"editDataFn\"\n        :submitFn=\"submitFn\"\n      >\n        <template #slotName>\n          <el-table-column label=\"slot\" prop=\"slotName\">\n            <template #default=\"{ row }\">\n              {{ row.id }}\n            </template>\n          </el-table-column>\n        </template>\n\n        <template #tableButton=\"{ id }\">\n          <el-button type=\"danger\" size=\"mini\" @click=\"handleDelete(id)\">删除</el-button>\n        </template>\n      </customize-page>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          pageSetting: [\n            { label: 'ID', prop: 'id', width: '100px' },\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allSelectList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ], formatter: (row, column, cellValue, index) => (this.Enum.allSelectList.find(n => n.value == cellValue) || {})['label'] || '' },\n            { type: 'text', label: '啊啊', default: 'text', prop: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n            { slot: 'slotName', prop: 'slotName' },\n          ],\n\n          Enum: {\n            allSelectList: [],\n          },\n          \n          searchBarProps: ['name', 'type'],\n          dialogProps: ['name', 'type', 'text', 'radio', 'checkbox', 'switch'],\n          tableProps: ['id', 'name', 'type', 'slotName'],\n        }\n      },\n\n      methods: {\n        async tableDataFn(form) {\n          console.log(form);\n\n          /* 获取列表 */\n          const data = [\n            { id: '1', name: 'aaa', type: 1 },\n            { id: '2', name: 'bbb', type: 2 },\n            { id: '3', name: 'ccc', type: 3 },\n            { id: '4', name: 'ddd', type: 1 },\n          ];\n          const total = 100;\n          await this._sleep(1);\n\n          return Promise.resolve({ data, total });\n        },\n        async editDataFn(id) {\n          /* 获取详情 */\n          const data = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this._sleep(1);\n\n          return Promise.resolve(data);\n        },\n        async submitFn(form) {\n          console.log(form);\n          /* 提交表单 */\n          await this._sleep(1);\n\n          return Promise.resolve();\n        },\n        \n        async init() {\n          const allSelectList = [\n            { label: 'a', value: 1 },\n            { label: 'b', value: 2 },\n            { label: 'c', value: 3 },\n          ];\n          await this._sleep(1);\n          this.$set(this.Enum, 'allSelectList', allSelectList);\n        },\n\n        handleDelete(id) {\n          this.$alert(`删除 ${id}`);\n        },\n      },\n\n      created() {\n        this.init();\n      },\n\n    }\n    </script>\n\n    <style>\n    html, body {\n      margin: 0;\n    }\n    </style>\n\n<!-- CustomizePage end -->\n\n\n\n<!-- CustomizeFormBuilder start -->\n### CustomizeFormBuilder组件\n\n#### 组件配置 \n##### props\n    debug: Boolean,  // 实时显示formSetting数据\n    operate: Array,  // 操作区展示的按钮 ['import', 'clear', 'preview', 'schema', 'code']\n\n##### event\n    getSchema,  // 获取当前配置转码的schema\n    setSchema,  // 设置schema字符串并重新渲染\n\n##### slot\n    #operate-title 操作区域标题名\n    #operate-before 操作区域前置按钮\n    #operate-after 操作区域后置按钮\n\n\n#### example\n    <template>\n      <customize-form-builder ref=\"formBuilder\"></customize-form-builder>\n    </template>\n\n    <script>\n    export default {\n      methods: {\n        getSchema() {\n          const result = this.$refs.formBuilder.getSchema();\n          console.log(result)\n        },\n        setSchema() {\n          const schemaStr = `{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"type\":\"object\",\"properties\":{\"input_1588506741033\":{\"type\":\"input\",\"label\":\"单行文本\",\"prop\":\"input_1588506741033\",\"key\":1588506741033}}}`\n          this.$refs.formBuilder.setSchema(schemaStr);\n        },\n      },\n\n    }\n    </script>\n\n\n<!-- CustomizeFormBuilder end -->\n\n\n\n<!-- 辅助函数 start -->\n### 辅助函数\n\n#### _isEmpty\n判断是否不为空  \n@return { Boolean }\n\n#### _clean\n删除对象中值为空的属性  \n@param { Object }  \n@return { Object }  \n\n#### _setValue\n值不为空直接返回，为空返回默认值  \n@param { Any, Any }  需判断的值，默认值  \n@return { Any }  \n\n#### _formatDate\n时间格式化  \n@params { [String, Number, Date], String }  时间，格式(默认 yyyy-MM-dd hh:mm:ss)  \n@return { String }  \n\n#### _deepClone\n深拷贝  \n@params { Object }  \n@return { Object }  \n\n#### _sleep\n延迟几秒后继续执行  \n@params { Number }  延迟秒数  \n@return { Promise } resolve  \n\n#### _deepMerge\n对象深度合并    \n@params { Object, Object }  延迟秒数  \n@return { Object }    \n_deepMerge(a, b, [..option])  \n_deepMerge.all([a, b, c], [..option])  \n\n<!-- 辅助函数 end -->\n\n\n\n### 常用增删改查页面完整事例(无弹窗)\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        ></customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      name: 'home',\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                console.log(this._clean({\n                  ...this.fetchParams,\n                  page: this.current,\n                  size: this.size,\n                }))\n                const response = {\n                  data: [\n                    { name: 'a', aaa: 2, status: 0 },\n                    { name: 'b', aaa: 3, status: null },\n                    { name: 'c', aaa: 4, status: 1 },\n                    { name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 1111)\n            })\n\n            // const response = await GetList(this._clean({\n            //   ...this.fetchParams,\n            //   page: this.current,\n            //   size: this.size,\n            // }))\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n\n\n### 常用增删改查页面完整事例(带弹窗)\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <dialog-create\n          :editId=\"editId\" \n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n        ></dialog-create>\n      </div>\n    </template>\n\n    <script>\n    import DialogCreate from './DialogCreate';\n\n    export default {\n      components: {\n        DialogCreate,\n      },\n\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          dialogVisible: false,\n          editId: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          this.tableLoading = true;\n          try {\n            const response = await new Promise(resolve => {\n              setTimeout(_ => {\n                \n                const response = {\n                  data: [\n                    { id: 1, name: 'a', aaa: 2, status: 0 },\n                    { id: 2, name: 'b', aaa: 3, status: null },\n                    { id: 3, name: 'c', aaa: 4, status: 1 },\n                    { id: 4, name: 'd', aaa: 5, status: 0 },\n                  ],\n                  total: 100,\n                }\n                resolve(response);\n              }, 222)\n\n              // const response = await GetList(this._clean({\n              //   ...this.fetchParams,\n              //   page: this.current,\n              //   size: this.size,\n              // }))\n              this.tableData = response.data || [];\n              this.total = response.total || 0;\n            })\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editId = null;\n          this.dialogVisible = true;\n        },\n        handleEdit(id) {\n          this.editId = id;\n          this.dialogVisible = true;\n        },\n        handleSubmitDialog() {\n          console.log('handleDialog');\n          this.fetchData();\n        },\n      },\n\n      created() {\n        this.fetchData();\n      },\n    }\n    </script>\n\n---\n\n    <template>\n      <el-dialog\n        title=\"title\"\n        top=\"15vh\"\n        width=\"600px\"\n        :visible.sync=\"dialogVisible\"\n        @close=\"handleClosed\"\n      >\n        <el-form :model=\"form\" :rules=\"rules\" ref=\"form\" label-width=\"180px\" size=\"small\">\n          <el-form-item label=\"名称:\" prop=\"name\">\n            <el-input v-model=\"form.name\"></el-input>\n          </el-form-item>\n\n          <el-form-item>\n            <el-button type=\"primary\" @click=\"handleSubmit\" :loading=\"loading\">提交</el-button>\n            <el-button @click=\"handleCancel\">取消</el-button>\n          </el-form-item>\n        </el-form>\n      </el-dialog>\n    </template>\n\n    <script>\n    const DEFAULT_FORM = () => ({\n      name: '',\n    });\n\n    export default {\n      props: {\n        visible: Boolean,\n        editId: {},\n      },\n\n      data() {\n        return {\n          dialogVisible: false,\n\n          form: DEFAULT_FORM(),\n          rules: {\n            name: { required: true, message: '请输入名称' },\n          },\n          loading: false,\n        }\n      },\n\n      methods: {\n        handleClosed() {\n          // reset here\n          this.$refs.form.resetFields();\n          this.form = DEFAULT_FORM();\n          this.$emit('update:visible', false);\n        },\n\n        async handleSubmit() {\n          console.log(this.form);\n          try {\n            await this.$refs.form.validate();\n\n            await this.$confirm(`是否确定提交`, \"提示\", {\n              confirmButtonText: \"确定\",\n              cancelButtonText: \"取消\",\n              type: \"warning\"\n            });\n\n            this.loading = true;\n            let params = this._deepClone(this.form);\n            if (!!this.editId) {\n              params.id = this.editId;\n              await Update(params);\n            }else{\n              await Save(params);\n            }\n\n            this.$message.success(`${!!this.editId ? '编辑' : '新增'}成功`);\n            this.dialogVisible = false;\n            this.$emit('submit');\n          } catch (error) {\n            console.log(error);\n          }\n          this.loading = false;\n        },\n        handleCancel() {\n          this.dialogVisible = false;\n        },\n      },\n\n      watch: {\n        visible: {\n          handler(newVal, oldVal) {\n            this.dialogVisible = newVal;\n          },\n          immediate: true,\n        }\n      },\n\n    }\n    </script>\n\n    <style lang='scss' scoped>\n\n    </style>\n\n\n### 常用增删改查页面完整事例(带弹窗)单页\n\n    <template>\n      <div class=\"home\">\n        <customize-search-bar\n          :loading.sync=\"searchBarLoading\"\n          @submit=\"handleSubmitSearch\"\n          :setting=\"searchBarSetting\"\n        >\n          <template #button>\n            <el-button type=\"primary\" @click=\"handleAdd\">新建</el-button>\n          </template>\n        </customize-search-bar>\n\n        <customize-table\n          :data=\"tableData\"\n          :column=\"tableColumn\"\n          v-loading=\"tableLoading\"\n        >\n          <template #slotName>\n            <el-table-column label=\"slot-slotName\" align=\"center\">\n              <template #default=\"{ row }\">\n                <span>_isEmpty  {{ _isEmpty(row.status) }}</span>\n              </template>\n            </el-table-column>\n          </template>\n          <template #after>\n            <el-table-column label=\"操作\" align=\"center\">\n              <template #default=\"{ row }\">\n                <el-button type=\"primary\" size=\"mini\" @click=\"handleEdit(row.id)\">编辑</el-button>\n              </template>\n            </el-table-column>\n          </template>\n        </customize-table>\n\n        <customize-pagination\n          :current.sync=\"current\"\n          :total=\"total\"\n          :size.sync=\"size\"\n          @change=\"handleChangePage\"\n          style=\"padding-bottom: 30px;\"\n        ></customize-pagination>\n\n        <customize-dialog-form\n          :editData=\"editData\"\n          title='title'\n          :visible.sync=\"dialogVisible\" \n          @submit=\"handleSubmitDialog\"\n          :loading.sync=\"formLoading\"\n          :setting=\"formSetting\"\n          :Enum=\"formEnum\"\n          validate  \n        ></customize-dialog-form>\n      </div>\n    </template>\n\n    <script>\n    export default {\n      data() {\n        return {\n          /* 列表请求参数 */\n          fetchParams: {},\n\n          /* 搜索相关 */\n          searchBarLoading: false,\n          searchBarSetting: [\n            { type: 'input', label: '名称', prop: 'name' },\n            { type: 'select', label: '分类', prop: 'type', enum: {\n              0: '暂停',\n              1: '启用',\n            } },\n            { slot: 'type', prop: 'type' },\n          ],\n\n          /* 表格相关 */\n          tableLoading: false,\n          tableData: [],\n          tableColumn: [\n            // { type: 'index', index: (index) => (this.current - 1) * this.size + index + 1 },\n            { label: '名称', prop: 'name' },\n            { label: '属性', prop: 'aaa', width: '100px', w: '100px' },\n            { label: '状态', prop: 'status', formatter(row, column, cellValue, index) { \n              const Enum = {\n                0: '暂停',\n                1: '启用',\n              }\n              return Enum[cellValue] || '--';\n            }},\n            { slot: 'slotName' }\n          ],\n\n          /* 分页相关 */\n          current: 1,\n          total: 0,\n          size: 10,\n\n          /* 弹窗相关 */\n          formLoading: false,\n          formSetting: [\n            { type: 'input', label: '名称', prop: 'name', required: true, msg: '321' },\n            { type: 'select', label: '分类', prop: 'type', enumProp: 'allList', enumKey: ['label', 'value'], default: '', rules: [\n              { required: true, message: 'message' }\n            ] },\n            { slot: 'slotName', prop: 'slotName' },\n            { type: 'text', label: '啊啊', default: 'text' },\n            { type: 'radio', label: '单选', prop: 'radio', enum: {\n              1: 'a',\n              2: 'b',\n            }, disabled: true },\n            { type: 'checkbox', label: '多选', prop: 'checkbox', enum: [\n              { label: 'aa', value: 11 },\n              { label: 'bb', value: 22 },\n              { label: 'cc', value: 33 },\n              { label: 'dd', value: 44 },\n              { label: 'ee', value: 55 },\n            ], default: [] },\n            { type: 'switch', label: '开关', prop: 'switch', text: ['开启', '关闭'], values: [1, 0], default: 0 },\n          ],\n          formEnum: {\n            allList: [],\n          },\n          dialogVisible: false,\n          editData: null,\n        }\n      },\n\n      methods: {\n        /* 请求数据 */\n        async fetchData() {\n          const params = this._clean({\n            ...this.fetchParams,\n            current: this.current,\n            size: this.size,\n          });\n          console.log(params);\n          this.tableLoading = true;\n          try {\n            const response = {\n              data: [\n                { id: 1, name: 'a', aaa: 2, status: 0 },\n                { id: 2, name: 'b', aaa: 3, status: null },\n                { id: 3, name: 'c', aaa: 4, status: 1 },\n                { id: 4, name: 'd', aaa: 5, status: 0 },\n              ],\n              total: 100,\n            }\n            await this._sleep(1);\n\n            this.tableData = response.data || [];\n            this.total = response.total || 0;\n          } catch (error) {\n            this.tableData = [];\n            this.total = 0;\n          }\n          this.tableLoading = false;\n          this.searchBarLoading = false;\n        },\n\n        /* 搜索相关 */\n        handleSubmitSearch(searchParams) {\n          this.current = 1;\n          this.fetchParams = searchParams;\n          this.fetchData();\n        },\n\n        /* 分页相关 */\n        handleChangePage() {\n          this.fetchData();\n        },\n\n        /* 弹窗相关 */\n        handleAdd() {\n          this.editData = null\n          this.dialogVisible = true;\n        },\n        async handleEdit(id) {\n          this.dialogVisible = true;\n\n          await this._sleep(1);\n          const editData = {\n            id,\n            name: '1',\n            type: 2,\n            checkbox: [22, 33],\n            switch: 1,\n          }\n          this.editData = editData;\n        },\n        async handleSubmitDialog(form) {\n          console.log(form)\n          /* 提交表单 */\n          await this._sleep(1);\n\n          this.$message.success('提交成功');\n          this.formLoading = false;\n          this.dialogVisible = false;\n          this.editData = null;\n        },\n\n        async formInit() {\n          const data = {\n            itemInfos: [\n              { name: 'a', id: 1 },\n              { name: 'b', id: 2 },\n              { name: 'c', id: 3 },\n            ],\n          };\n          await this._sleep(1);\n\n          let allList = data.itemInfos || [];\n          allList = allList.map(n => ({\n            label: n.name,\n            value: n.id,\n          }))\n          this.$set(this.formEnum, 'allList', allList);\n        },\n      },\n\n      created() {\n        this.fetchData();\n        this.formInit();\n      },\n    }\n    </script>\n\n","readmeFilename":"README.md"}