mirror of https://github.com/halo-dev/halo
feat: support export markdown package. (halo-dev/console#279)
parent
cfa91c6541
commit
b7914e07c4
|
@ -6,21 +6,21 @@
|
|||
"dependencies": {
|
||||
"@ant-design/colors": {
|
||||
"version": "3.2.2",
|
||||
"resolved": "https://registry.npm.taobao.org/@ant-design/colors/download/@ant-design/colors-3.2.2.tgz?cache=0&sync_timestamp=1596611369344&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40ant-design%2Fcolors%2Fdownload%2F%40ant-design%2Fcolors-3.2.2.tgz",
|
||||
"integrity": "sha1-WtQ9YZ6RHzSI66wwPWBuZqhCOQM=",
|
||||
"resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-3.2.2.tgz",
|
||||
"integrity": "sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ==",
|
||||
"requires": {
|
||||
"tinycolor2": "^1.4.1"
|
||||
}
|
||||
},
|
||||
"@ant-design/icons": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npm.taobao.org/@ant-design/icons/download/@ant-design/icons-2.1.1.tgz?cache=0&sync_timestamp=1596529338545&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40ant-design%2Ficons%2Fdownload%2F%40ant-design%2Ficons-2.1.1.tgz",
|
||||
"integrity": "sha1-e5wI3/1PXUHbZn2dvl4BB9C9mko="
|
||||
"resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-2.1.1.tgz",
|
||||
"integrity": "sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w=="
|
||||
},
|
||||
"@ant-design/icons-vue": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/@ant-design/icons-vue/download/@ant-design/icons-vue-2.0.0.tgz?cache=0&sync_timestamp=1598869253063&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40ant-design%2Ficons-vue%2Fdownload%2F%40ant-design%2Ficons-vue-2.0.0.tgz",
|
||||
"integrity": "sha1-A1f1AQpATp80qHpLQbKgjfaR284=",
|
||||
"resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-2.0.0.tgz",
|
||||
"integrity": "sha512-2c0QQE5hL4N48k5NkPG5sdpMl9YnvyNhf0U7YkdZYDlLnspoRU7vIA0UK9eHBs6OpFLcJB6o8eJrIl2ajBskPg==",
|
||||
"requires": {
|
||||
"@ant-design/colors": "^3.1.0",
|
||||
"babel-runtime": "^6.26.0"
|
||||
|
@ -1343,17 +1343,17 @@
|
|||
},
|
||||
"@simonwep/pickr": {
|
||||
"version": "1.7.4",
|
||||
"resolved": "https://registry.npm.taobao.org/@simonwep/pickr/download/@simonwep/pickr-1.7.4.tgz",
|
||||
"integrity": "sha1-sU/NlFiQOIuHDNbbTWx41THyUUE=",
|
||||
"resolved": "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.7.4.tgz",
|
||||
"integrity": "sha512-fq7jgKJT21uWGC1mARBHvvd1JYlEf93o7SuVOB4Lr0x/2UPuNC9Oe9n/GzVeg4oVtqMDfh1wIEJpsdOJEZb+3g==",
|
||||
"requires": {
|
||||
"core-js": "^3.6.5",
|
||||
"nanopop": "^2.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"core-js": {
|
||||
"version": "3.6.5",
|
||||
"resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.6.5.tgz?cache=0&sync_timestamp=1589682726446&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.6.5.tgz",
|
||||
"integrity": "sha1-c5XcJzrzf7LlDpvT2f6EEoUjHRo="
|
||||
"version": "3.8.2",
|
||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.2.tgz",
|
||||
"integrity": "sha512-FfApuSRgrR6G5s58casCBd9M2k+4ikuu4wbW6pJyYU7bd9zvFc9qf7vr5xmrZOhT9nn+8uwlH1oRR9jTnFoA3A=="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -2462,18 +2462,6 @@
|
|||
"supports-color": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
|
||||
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"big.js": "^5.2.2",
|
||||
"emojis-list": "^3.0.0",
|
||||
"json5": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"locate-path": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
|
||||
|
@ -2603,31 +2591,6 @@
|
|||
"webpack-sources": "^1.4.3"
|
||||
}
|
||||
},
|
||||
"vue-loader-v16": {
|
||||
"version": "npm:vue-loader@16.1.1",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.1.tgz",
|
||||
"integrity": "sha512-wz/+HFg/3SBayHWAlZXARcnDTl3VOChrfW9YnxvAweiuyKX/7IGx1ad/4yJHmwhgWlOVYMAbTiI7GV8G33PfGQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"chalk": "^4.1.0",
|
||||
"hash-sum": "^2.0.0",
|
||||
"loader-utils": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"chalk": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"wrap-ansi": {
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
|
||||
|
@ -3016,8 +2979,8 @@
|
|||
},
|
||||
"add-dom-event-listener": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npm.taobao.org/add-dom-event-listener/download/add-dom-event-listener-1.1.0.tgz",
|
||||
"integrity": "sha1-apLbOg3Qq8JU4JXA8dwUrLuq4xA=",
|
||||
"resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz",
|
||||
"integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==",
|
||||
"requires": {
|
||||
"object-assign": "4.x"
|
||||
}
|
||||
|
@ -3113,9 +3076,9 @@
|
|||
}
|
||||
},
|
||||
"ant-design-vue": {
|
||||
"version": "1.7.1",
|
||||
"resolved": "https://registry.npm.taobao.org/ant-design-vue/download/ant-design-vue-1.7.1.tgz",
|
||||
"integrity": "sha1-55d/kjl+/rEXM71hMcFv2rz554Q=",
|
||||
"version": "1.7.2",
|
||||
"resolved": "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-1.7.2.tgz",
|
||||
"integrity": "sha512-iVskTSG62OSiptyGQkvyhoeLlLMiqKtAOTcWZ7MmsMrj38h0TCpGtqSYS4/fwq4yYgyzloYSteBo8U8TrV99RA==",
|
||||
"requires": {
|
||||
"@ant-design/icons": "^2.1.1",
|
||||
"@ant-design/icons-vue": "^2.0.0",
|
||||
|
@ -3229,8 +3192,8 @@
|
|||
},
|
||||
"array-tree-filter": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npm.taobao.org/array-tree-filter/download/array-tree-filter-2.1.0.tgz",
|
||||
"integrity": "sha1-hzrAD+yDdJ8lWsjdCDgUtPYykZA="
|
||||
"resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz",
|
||||
"integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw=="
|
||||
},
|
||||
"array-union": {
|
||||
"version": "1.0.2",
|
||||
|
@ -3358,9 +3321,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"async-validator": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-3.4.0.tgz",
|
||||
"integrity": "sha1-hxs+WUEkv0xOt7zRqeeLRPOwnK4="
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-3.5.1.tgz",
|
||||
"integrity": "sha512-DDmKA7sdSAJtTVeNZHrnr2yojfFaoeW8MfQN8CeuXg8DDQHTqKk9Fdv38dSvnesHoO8MUwMI2HphOeSyIF+wmQ=="
|
||||
},
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
|
@ -3498,8 +3461,8 @@
|
|||
},
|
||||
"babel-helper-vue-jsx-merge-props": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
|
||||
"integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY="
|
||||
"resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
|
||||
"integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
|
||||
},
|
||||
"babel-jest": {
|
||||
"version": "26.3.0",
|
||||
|
@ -4906,8 +4869,8 @@
|
|||
},
|
||||
"classnames": {
|
||||
"version": "2.2.6",
|
||||
"resolved": "https://registry.npm.taobao.org/classnames/download/classnames-2.2.6.tgz",
|
||||
"integrity": "sha1-Q5Nb/90pHzJtrQogUwmzjQD2UM4="
|
||||
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
|
||||
"integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
|
||||
},
|
||||
"clean-css": {
|
||||
"version": "4.2.3",
|
||||
|
@ -5375,7 +5338,7 @@
|
|||
},
|
||||
"component-classes": {
|
||||
"version": "1.2.6",
|
||||
"resolved": "https://registry.npm.taobao.org/component-classes/download/component-classes-1.2.6.tgz",
|
||||
"resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz",
|
||||
"integrity": "sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=",
|
||||
"requires": {
|
||||
"component-indexof": "0.0.3"
|
||||
|
@ -5389,7 +5352,7 @@
|
|||
},
|
||||
"component-indexof": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npm.taobao.org/component-indexof/download/component-indexof-0.0.3.tgz",
|
||||
"resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz",
|
||||
"integrity": "sha1-EdCRMSI5648yyPJa6csAL/6NPCQ="
|
||||
},
|
||||
"compressible": {
|
||||
|
@ -6507,12 +6470,12 @@
|
|||
},
|
||||
"dom-align": {
|
||||
"version": "1.12.0",
|
||||
"resolved": "https://registry.npm.taobao.org/dom-align/download/dom-align-1.12.0.tgz?cache=0&sync_timestamp=1589854754211&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-align%2Fdownload%2Fdom-align-1.12.0.tgz",
|
||||
"integrity": "sha1-VvtxVt8LkQmYMDZNLUj4iWP1opw="
|
||||
"resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.0.tgz",
|
||||
"integrity": "sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA=="
|
||||
},
|
||||
"dom-closest": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npm.taobao.org/dom-closest/download/dom-closest-0.2.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/dom-closest/-/dom-closest-0.2.0.tgz",
|
||||
"integrity": "sha1-69n5HRvyLo1vR3h2u80+yQIWwM8=",
|
||||
"requires": {
|
||||
"dom-matches": ">=1.0.1"
|
||||
|
@ -6535,13 +6498,13 @@
|
|||
},
|
||||
"dom-matches": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/dom-matches/download/dom-matches-2.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/dom-matches/-/dom-matches-2.0.0.tgz",
|
||||
"integrity": "sha1-0nKLQWqHUzmA6wibhI0lPPI6dYw="
|
||||
},
|
||||
"dom-scroll-into-view": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npm.taobao.org/dom-scroll-into-view/download/dom-scroll-into-view-2.0.1.tgz",
|
||||
"integrity": "sha1-DezIUigB/Y0/HGujVadNOCxfmJs="
|
||||
"resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz",
|
||||
"integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w=="
|
||||
},
|
||||
"dom-serializer": {
|
||||
"version": "0.2.2",
|
||||
|
@ -9118,7 +9081,7 @@
|
|||
},
|
||||
"intersperse": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/intersperse/download/intersperse-1.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/intersperse/-/intersperse-1.0.0.tgz",
|
||||
"integrity": "sha1-8lYfsc/vn1J3zDNHoiiGtDUaUYE="
|
||||
},
|
||||
"invariant": {
|
||||
|
@ -9323,13 +9286,13 @@
|
|||
},
|
||||
"is-mobile": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npm.taobao.org/is-mobile/download/is-mobile-2.2.2.tgz?cache=0&sync_timestamp=1592980494392&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-mobile%2Fdownload%2Fis-mobile-2.2.2.tgz",
|
||||
"integrity": "sha1-9snF1Q7gElTOBec5vdg18e1OmVQ="
|
||||
"resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-2.2.2.tgz",
|
||||
"integrity": "sha512-wW/SXnYJkTjs++tVK5b6kVITZpAZPtUrt9SF80vvxGiF/Oywal+COk1jlRkiVq15RFNEQKQY31TkV24/1T5cVg=="
|
||||
},
|
||||
"is-negative-zero": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.0.tgz",
|
||||
"integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE="
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
|
||||
"integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w=="
|
||||
},
|
||||
"is-number": {
|
||||
"version": "3.0.0",
|
||||
|
@ -9485,8 +9448,8 @@
|
|||
},
|
||||
"ismobilejs": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npm.taobao.org/ismobilejs/download/ismobilejs-1.1.1.tgz",
|
||||
"integrity": "sha1-xWygro5Sskyg8iul7zIVot27qg4="
|
||||
"resolved": "https://registry.npmjs.org/ismobilejs/-/ismobilejs-1.1.1.tgz",
|
||||
"integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw=="
|
||||
},
|
||||
"isobject": {
|
||||
"version": "3.0.1",
|
||||
|
@ -10427,7 +10390,7 @@
|
|||
},
|
||||
"json2mq": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npm.taobao.org/json2mq/download/json2mq-0.2.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz",
|
||||
"integrity": "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=",
|
||||
"requires": {
|
||||
"string-convert": "^0.2.0"
|
||||
|
@ -11619,8 +11582,8 @@
|
|||
},
|
||||
"moment": {
|
||||
"version": "2.29.1",
|
||||
"resolved": "https://registry.npm.taobao.org/moment/download/moment-2.29.1.tgz",
|
||||
"integrity": "sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M="
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
|
||||
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
|
||||
},
|
||||
"move-concurrently": {
|
||||
"version": "1.0.1",
|
||||
|
@ -11659,8 +11622,8 @@
|
|||
},
|
||||
"mutationobserver-shim": {
|
||||
"version": "0.3.7",
|
||||
"resolved": "https://registry.npm.taobao.org/mutationobserver-shim/download/mutationobserver-shim-0.3.7.tgz",
|
||||
"integrity": "sha1-i/YzsMCwKRoRByVe0ywTCIqMW/M="
|
||||
"resolved": "https://registry.npmjs.org/mutationobserver-shim/-/mutationobserver-shim-0.3.7.tgz",
|
||||
"integrity": "sha512-oRIDTyZQU96nAiz2AQyngwx1e89iApl2hN5AOYwyxLUB47UYsU3Wv9lJWqH5y/QdiYkc5HQLi23ZNB3fELdHcQ=="
|
||||
},
|
||||
"mute-stream": {
|
||||
"version": "0.0.8",
|
||||
|
@ -11707,8 +11670,8 @@
|
|||
},
|
||||
"nanopop": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npm.taobao.org/nanopop/download/nanopop-2.1.0.tgz?cache=0&sync_timestamp=1598256090184&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnanopop%2Fdownload%2Fnanopop-2.1.0.tgz",
|
||||
"integrity": "sha1-I0dlE87iQFiIr9LopLVAZrcLnmA="
|
||||
"resolved": "https://registry.npmjs.org/nanopop/-/nanopop-2.1.0.tgz",
|
||||
"integrity": "sha512-jGTwpFRexSH+fxappnGQtN9dspgE2ipa1aOjtR24igG0pv6JCxImIAmrLRHX+zUF5+1wtsFVbKyfP51kIGAVNw=="
|
||||
},
|
||||
"native-request": {
|
||||
"version": "1.0.7",
|
||||
|
@ -12079,8 +12042,8 @@
|
|||
},
|
||||
"omit.js": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npm.taobao.org/omit.js/download/omit.js-1.0.2.tgz",
|
||||
"integrity": "sha1-kaFPDrqEBm36AVvzDkdMR/MLyFg=",
|
||||
"resolved": "https://registry.npmjs.org/omit.js/-/omit.js-1.0.2.tgz",
|
||||
"integrity": "sha512-/QPc6G2NS+8d4L/cQhbk6Yit1WTB6Us2g84A7A/1+w9d/eRGHyEqC5kkQtHVoHZ5NFWGG7tUGgrhVZwgZanKrQ==",
|
||||
"requires": {
|
||||
"babel-runtime": "^6.23.0"
|
||||
}
|
||||
|
@ -13502,8 +13465,8 @@
|
|||
},
|
||||
"raf": {
|
||||
"version": "3.4.1",
|
||||
"resolved": "https://registry.npm.taobao.org/raf/download/raf-3.4.1.tgz?cache=0&sync_timestamp=1586264003311&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fraf%2Fdownload%2Fraf-3.4.1.tgz",
|
||||
"integrity": "sha1-B0LpmkplUvRF1z4+4DKK8P8e3jk=",
|
||||
"resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
|
||||
"integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
|
||||
"requires": {
|
||||
"performance-now": "^2.1.0"
|
||||
}
|
||||
|
@ -13929,8 +13892,8 @@
|
|||
},
|
||||
"resize-observer-polyfill": {
|
||||
"version": "1.5.1",
|
||||
"resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz",
|
||||
"integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ="
|
||||
"resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
|
||||
"integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.17.0",
|
||||
|
@ -14344,13 +14307,13 @@
|
|||
},
|
||||
"shallow-equal": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npm.taobao.org/shallow-equal/download/shallow-equal-1.2.1.tgz",
|
||||
"integrity": "sha1-TBar+lYEOqINBQMk76aJQLDaedo="
|
||||
"resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz",
|
||||
"integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="
|
||||
},
|
||||
"shallowequal": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npm.taobao.org/shallowequal/download/shallowequal-1.1.0.tgz",
|
||||
"integrity": "sha1-GI1SHelbkIdAT9TctosT3wrk5/g="
|
||||
"resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
|
||||
"integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
|
||||
},
|
||||
"shebang-command": {
|
||||
"version": "1.2.0",
|
||||
|
@ -14918,7 +14881,7 @@
|
|||
},
|
||||
"string-convert": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npm.taobao.org/string-convert/download/string-convert-0.2.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz",
|
||||
"integrity": "sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c="
|
||||
},
|
||||
"string-length": {
|
||||
|
@ -15450,8 +15413,8 @@
|
|||
},
|
||||
"tinycolor2": {
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.2.tgz",
|
||||
"integrity": "sha1-P2pNEHGtB2dtf6Ry4frECnGdiAM="
|
||||
"resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz",
|
||||
"integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA=="
|
||||
},
|
||||
"tmp": {
|
||||
"version": "0.0.33",
|
||||
|
@ -16169,6 +16132,87 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"vue-loader-v16": {
|
||||
"version": "npm:vue-loader@16.1.2",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz",
|
||||
"integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"chalk": "^4.1.0",
|
||||
"hash-sum": "^2.0.0",
|
||||
"loader-utils": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
|
||||
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"big.js": "^5.2.2",
|
||||
"emojis-list": "^3.0.0",
|
||||
"json5": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"has-flag": "^4.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"vue-ls": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/vue-ls/-/vue-ls-3.2.1.tgz",
|
||||
|
@ -16176,8 +16220,8 @@
|
|||
},
|
||||
"vue-ref": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/vue-ref/download/vue-ref-2.0.0.tgz",
|
||||
"integrity": "sha1-SDCE1zKr7RHaeWd4qCZqOvDqGpw="
|
||||
"resolved": "https://registry.npmjs.org/vue-ref/-/vue-ref-2.0.0.tgz",
|
||||
"integrity": "sha512-uKNKpFOVeWNqS2mrBZqnpLyXJo5Q+vnkex6JvpENvhXHFNBW/SJTP8vJywLuVT3DpxwXcF9N0dyIiZ4/NpTexQ=="
|
||||
},
|
||||
"vue-router": {
|
||||
"version": "3.4.3",
|
||||
|
@ -16339,8 +16383,8 @@
|
|||
},
|
||||
"warning": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz",
|
||||
"integrity": "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=",
|
||||
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
|
||||
"integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
|
||||
"requires": {
|
||||
"loose-envify": "^1.0.0"
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
"test:unit": "vue-cli-service test:unit"
|
||||
},
|
||||
"dependencies": {
|
||||
"ant-design-vue": "^1.7.1",
|
||||
"ant-design-vue": "^1.7.2",
|
||||
"axios": "^0.19.2",
|
||||
"dayjs": "^1.8.36",
|
||||
"enquire.js": "^2.1.6",
|
||||
|
|
|
@ -65,4 +65,32 @@ backupApi.deleteExportedData = filename => {
|
|||
})
|
||||
}
|
||||
|
||||
backupApi.exportMarkdowns = needFrontMatter => {
|
||||
return service({
|
||||
url: `${baseUrl}/markdown/export`,
|
||||
method: 'post',
|
||||
data: {
|
||||
needFrontMatter: needFrontMatter
|
||||
},
|
||||
timeout: 8640000 // 24 hours
|
||||
})
|
||||
}
|
||||
|
||||
backupApi.listExportedMarkdowns = () => {
|
||||
return service({
|
||||
url: `${baseUrl}/markdown/export`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
backupApi.deleteExportedMarkdown = filename => {
|
||||
return service({
|
||||
url: `${baseUrl}/markdown/export`,
|
||||
params: {
|
||||
filename: filename
|
||||
},
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export default backupApi
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
import service from '@/utils/service'
|
||||
|
||||
const baseUrl = '/api/admin/static_page'
|
||||
|
||||
const staticPageApi = {}
|
||||
|
||||
staticPageApi.list = () => {
|
||||
return service({
|
||||
url: baseUrl,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
staticPageApi.generate = () => {
|
||||
return service({
|
||||
url: `${baseUrl}/generate`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
staticPageApi.deploy = () => {
|
||||
return service({
|
||||
url: `${baseUrl}/deploy`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
staticPageApi.deployType = {
|
||||
GIT: {
|
||||
type: 'GIT',
|
||||
text: 'Git'
|
||||
},
|
||||
NETLIFY: {
|
||||
type: 'NETLIFY',
|
||||
text: 'Netlify'
|
||||
}
|
||||
}
|
||||
|
||||
export default staticPageApi
|
|
@ -185,13 +185,6 @@ export const asyncRouterMap = [
|
|||
component: () => import('@/views/system/ToolList'),
|
||||
meta: { title: '小工具', hiddenHeaderContent: false }
|
||||
},
|
||||
// {
|
||||
// path: '/system/tools/staticpages',
|
||||
// name: 'StaticPagesManage',
|
||||
// hidden: true,
|
||||
// component: () => import('@/views/system/staticpages/StaticPagesManage'),
|
||||
// meta: { title: '静态部署', hiddenHeaderContent: false }
|
||||
// },
|
||||
{
|
||||
path: '/system/about',
|
||||
name: 'About',
|
||||
|
|
|
@ -25,29 +25,6 @@
|
|||
>进入</a-button>
|
||||
</a-card>
|
||||
</a-col>
|
||||
<!-- <a-col
|
||||
:xl="6"
|
||||
:lg="6"
|
||||
:md="12"
|
||||
:sm="24"
|
||||
:xs="24"
|
||||
:style="{ marginBottom: '12px' }"
|
||||
>
|
||||
<a-card
|
||||
:bordered="false"
|
||||
:bodyStyle="{ padding: '16px' }"
|
||||
>
|
||||
<div slot="title">
|
||||
<a-icon type="html5" /> 静态部署
|
||||
</div>
|
||||
<p style="min-height: 50px;">生成静态页面并部署到 Github Pages 之类的托管平台</p>
|
||||
<a-button
|
||||
type="primary"
|
||||
style="float:right"
|
||||
@click="handleToStaticPagesManage"
|
||||
>管理</a-button>
|
||||
</a-card>
|
||||
</a-col> -->
|
||||
<a-col
|
||||
:xl="6"
|
||||
:lg="6"
|
||||
|
@ -79,6 +56,12 @@
|
|||
>
|
||||
数据导出
|
||||
</a-menu-item>
|
||||
<a-menu-item
|
||||
key="3"
|
||||
@click="exportMarkdownDrawerVisible = true"
|
||||
>
|
||||
导出文章为 Markdown 文档
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
<a-button class="ml-2"> 备份
|
||||
<a-icon type="down" />
|
||||
|
@ -127,22 +110,26 @@
|
|||
</a-modal>
|
||||
<BackupWorkDirDrawer v-model="backupWorkDirDrawerVisible"></BackupWorkDirDrawer>
|
||||
<ExportDataDrawer v-model="exportDataDrawerVisible"></ExportDataDrawer>
|
||||
<ExportMarkdownDrawer v-model="exportMarkdownDrawerVisible"></ExportMarkdownDrawer>
|
||||
</page-view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex'
|
||||
import backupApi from '@/api/backup'
|
||||
import { PageView } from '@/layouts'
|
||||
import BackupWorkDirDrawer from './components/BackupWorkDirDrawer'
|
||||
import ExportDataDrawer from './components/ExportDataDrawer'
|
||||
import ExportMarkdownDrawer from './components/ExportMarkdownDrawer'
|
||||
|
||||
import { mapGetters } from 'vuex'
|
||||
|
||||
import backupApi from '@/api/backup'
|
||||
export default {
|
||||
components: { PageView, BackupWorkDirDrawer, ExportDataDrawer },
|
||||
components: { PageView, BackupWorkDirDrawer, ExportDataDrawer, ExportMarkdownDrawer },
|
||||
data() {
|
||||
return {
|
||||
backupWorkDirDrawerVisible: false,
|
||||
exportDataDrawerVisible: false,
|
||||
exportMarkdownDrawerVisible: false,
|
||||
markdownUpload: false,
|
||||
uploadHandler: backupApi.importMarkdown,
|
||||
}
|
||||
|
@ -165,9 +152,6 @@ export default {
|
|||
handleToDeveloperOptions() {
|
||||
this.$router.push({ name: 'DeveloperOptions' })
|
||||
},
|
||||
// handleToStaticPagesManage() {
|
||||
// this.$router.push({ name: 'StaticPagesManage' })
|
||||
// },
|
||||
onUploadClose() {
|
||||
this.$refs.upload.handleClearFileList()
|
||||
},
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
>
|
||||
<a-col :span="24">
|
||||
<a-alert
|
||||
message="注意:备份后生成的压缩文件存储在临时文件中,重启服务器会造成备份文件的丢失,所以请尽快下载!"
|
||||
message="注意:备份后生成的压缩文件存储在临时文件中,重启服务器会造成备份文件的丢失,所以请尽快下载。"
|
||||
banner
|
||||
closable
|
||||
/>
|
||||
|
@ -89,19 +89,19 @@ export default {
|
|||
backuping: false,
|
||||
loading: false,
|
||||
backupErrored: false,
|
||||
backups: []
|
||||
backups: [],
|
||||
}
|
||||
},
|
||||
model: {
|
||||
prop: 'visible',
|
||||
event: 'close'
|
||||
event: 'close',
|
||||
},
|
||||
props: {
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: true
|
||||
}
|
||||
default: true,
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
handleAfterVisibleChanged(visible) {
|
||||
|
@ -113,7 +113,7 @@ export default {
|
|||
this.loading = true
|
||||
backupApi
|
||||
.listWorkDirBackups()
|
||||
.then(response => {
|
||||
.then((response) => {
|
||||
this.backups = response.data.data
|
||||
})
|
||||
.finally(() => {
|
||||
|
@ -153,7 +153,7 @@ export default {
|
|||
},
|
||||
onClose() {
|
||||
this.$emit('close', false)
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
>
|
||||
<a-col :span="24">
|
||||
<a-alert
|
||||
message="注意:导出后的数据文件存储在临时文件中,重启服务器会造成备份文件的丢失,所以请尽快下载!"
|
||||
message="注意:导出后的数据文件存储在临时文件中,重启服务器会造成备份文件的丢失,所以请尽快下载。"
|
||||
banner
|
||||
closable
|
||||
/>
|
||||
|
|
|
@ -0,0 +1,166 @@
|
|||
<template>
|
||||
<a-drawer
|
||||
title="导出文章为 Markdown 文档"
|
||||
:width="isMobile()?'100%':'480'"
|
||||
closable
|
||||
:visible="visible"
|
||||
destroyOnClose
|
||||
@close="onClose"
|
||||
:afterVisibleChange="handleAfterVisibleChanged"
|
||||
>
|
||||
<a-row
|
||||
type="flex"
|
||||
align="middle"
|
||||
>
|
||||
<a-col :span="24">
|
||||
<a-alert
|
||||
message="注意:导出后的数据文件存储在临时文件中,重启服务器会造成备份文件的丢失,所以请尽快下载。"
|
||||
banner
|
||||
closable
|
||||
/>
|
||||
<a-divider>历史文件</a-divider>
|
||||
<a-list
|
||||
itemLayout="vertical"
|
||||
size="small"
|
||||
:dataSource="files"
|
||||
:loading="loading"
|
||||
>
|
||||
<a-list-item
|
||||
slot="renderItem"
|
||||
slot-scope="file"
|
||||
>
|
||||
<a-button
|
||||
slot="extra"
|
||||
type="link"
|
||||
style="color: red"
|
||||
icon="delete"
|
||||
:loading="file.deleting"
|
||||
@click="handleFileDeleteClick(file)"
|
||||
>删除</a-button>
|
||||
<a-list-item-meta>
|
||||
<a
|
||||
slot="title"
|
||||
:href="file.downloadLink"
|
||||
>
|
||||
<a-icon
|
||||
type="schedule"
|
||||
style="color: #52c41a"
|
||||
/>
|
||||
{{ file.filename }}
|
||||
</a>
|
||||
<p slot="description">{{ file.updateTime | timeAgo }}/{{ file.fileSize | fileSizeFormat }}</p>
|
||||
</a-list-item-meta>
|
||||
</a-list-item>
|
||||
</a-list>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider class="divider-transparent" />
|
||||
<div class="bottom-control">
|
||||
<a-space>
|
||||
<a-popconfirm
|
||||
title="是否同时为 Markdown 文档生成 Front Matter?"
|
||||
@confirm="handleExportClick(true)"
|
||||
@cancel="handleExportClick(false)"
|
||||
okText="是"
|
||||
cancelText="否"
|
||||
>
|
||||
<ReactiveButton
|
||||
type="primary"
|
||||
icon="download"
|
||||
@callback="handleBackupedCallback"
|
||||
:loading="backuping"
|
||||
:errored="backupErrored"
|
||||
text="备份"
|
||||
loadedText="备份成功"
|
||||
erroredText="备份失败"
|
||||
></ReactiveButton>
|
||||
</a-popconfirm>
|
||||
<a-button
|
||||
type="dashed"
|
||||
icon="reload"
|
||||
:loading="loading"
|
||||
@click="handleListBackups"
|
||||
>刷新</a-button>
|
||||
</a-space>
|
||||
</div>
|
||||
</a-drawer>
|
||||
</template>
|
||||
<script>
|
||||
import { mixin, mixinDevice } from '@/utils/mixin.js'
|
||||
import backupApi from '@/api/backup'
|
||||
export default {
|
||||
name: 'ExportDataDrawer',
|
||||
mixins: [mixin, mixinDevice],
|
||||
data() {
|
||||
return {
|
||||
backuping: false,
|
||||
loading: false,
|
||||
backupErrored: false,
|
||||
files: [],
|
||||
}
|
||||
},
|
||||
model: {
|
||||
prop: 'visible',
|
||||
event: 'close',
|
||||
},
|
||||
props: {
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: true,
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
handleAfterVisibleChanged(visible) {
|
||||
if (visible) {
|
||||
this.handleListBackups()
|
||||
}
|
||||
},
|
||||
handleListBackups() {
|
||||
this.loading = true
|
||||
backupApi
|
||||
.listExportedMarkdowns()
|
||||
.then((response) => {
|
||||
this.files = response.data.data
|
||||
})
|
||||
.finally(() => {
|
||||
setTimeout(() => {
|
||||
this.loading = false
|
||||
}, 200)
|
||||
})
|
||||
},
|
||||
handleExportClick(needFrontMatter = false) {
|
||||
this.backuping = true
|
||||
backupApi
|
||||
.exportMarkdowns(needFrontMatter)
|
||||
.catch(() => {
|
||||
this.backupErrored = true
|
||||
})
|
||||
.finally(() => {
|
||||
setTimeout(() => {
|
||||
this.backuping = false
|
||||
}, 400)
|
||||
})
|
||||
},
|
||||
handleBackupedCallback() {
|
||||
if (this.backupErrored) {
|
||||
this.backupErrored = false
|
||||
} else {
|
||||
this.handleListBackups()
|
||||
}
|
||||
},
|
||||
handleFileDeleteClick(file) {
|
||||
file.deleting = true
|
||||
backupApi.deleteExportedMarkdown(file.filename).finally(() => {
|
||||
setTimeout(() => {
|
||||
file.deleting = false
|
||||
}, 400)
|
||||
this.handleListBackups()
|
||||
})
|
||||
},
|
||||
onClose() {
|
||||
this.$emit('close', false)
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
|
@ -1,43 +0,0 @@
|
|||
<template>
|
||||
<div>
|
||||
<a-row>
|
||||
<a-col :span="24">
|
||||
<div class="card-container">
|
||||
<a-tabs type="card">
|
||||
<a-tab-pane key="environment">
|
||||
<span slot="tab">
|
||||
<a-icon type="folder" />文件列表
|
||||
</span>
|
||||
<StaticPagesList />
|
||||
</a-tab-pane>
|
||||
<a-tab-pane key="runtimeLogs">
|
||||
<span slot="tab">
|
||||
<a-icon type="appstore" />部署平台
|
||||
</span>
|
||||
<DeploySettingsForm />
|
||||
</a-tab-pane>
|
||||
<a-tab-pane key="optionsList">
|
||||
<span slot="tab">
|
||||
<a-icon type="setting" />配置
|
||||
</span>
|
||||
<SettingsForm />
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
</div>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import StaticPagesList from './tabs/StaticPagesList'
|
||||
import DeploySettingsForm from './tabs/DeploySettingsForm'
|
||||
import SettingsForm from './tabs/SettingsForm'
|
||||
export default {
|
||||
name: 'StaticPagesManage',
|
||||
components: {
|
||||
StaticPagesList,
|
||||
DeploySettingsForm,
|
||||
SettingsForm
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -1,106 +0,0 @@
|
|||
<template>
|
||||
<a-form
|
||||
layout="vertical"
|
||||
:wrapperCol="wrapperCol"
|
||||
>
|
||||
<a-form-item label="部署平台:">
|
||||
<a-select v-model="options.static_deploy_type">
|
||||
<a-select-option
|
||||
v-for="item in Object.keys(deployType)"
|
||||
:key="item"
|
||||
:value="item"
|
||||
>{{ deployType[item].text }}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<div
|
||||
id="gitForm"
|
||||
v-show="options.static_deploy_type === 'GIT'"
|
||||
>
|
||||
<a-form-item label="域名:">
|
||||
<a-input v-model="options.git_static_deploy_domain" />
|
||||
</a-form-item>
|
||||
<a-form-item label="仓库:">
|
||||
<a-input v-model="options.git_static_deploy_repository" />
|
||||
</a-form-item>
|
||||
<a-form-item label="分支:">
|
||||
<a-input v-model="options.git_static_deploy_branch" />
|
||||
</a-form-item>
|
||||
<a-form-item label="仓库用户名:">
|
||||
<a-input v-model="options.git_static_deploy_username" />
|
||||
</a-form-item>
|
||||
<a-form-item label="邮箱:">
|
||||
<a-input v-model="options.git_static_deploy_email" />
|
||||
</a-form-item>
|
||||
<a-form-item label="Token:">
|
||||
<a-input-password
|
||||
v-model="options.git_static_deploy_token"
|
||||
autocomplete="new-password"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="CNAME:">
|
||||
<a-input v-model="options.git_static_deploy_cname" />
|
||||
</a-form-item>
|
||||
</div>
|
||||
<div
|
||||
id="netlifyForm"
|
||||
v-show="options.static_deploy_type === 'NETLIFY'"
|
||||
>
|
||||
<a-form-item label="域名:">
|
||||
<a-input v-model="options.netlify_static_deploy_domain" />
|
||||
</a-form-item>
|
||||
<a-form-item label="Site ID:">
|
||||
<a-input v-model="options.netlify_static_deploy_site_id" />
|
||||
</a-form-item>
|
||||
<a-form-item label="Token:">
|
||||
<a-input-password
|
||||
v-model="options.netlify_static_deploy_token"
|
||||
autocomplete="new-password"
|
||||
/>
|
||||
</a-form-item>
|
||||
</div>
|
||||
<a-form-item>
|
||||
<a-button
|
||||
type="primary"
|
||||
@click="handleSaveOptions"
|
||||
>保存</a-button>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</template>
|
||||
<script>
|
||||
import staticPageApi from '@/api/staticPage'
|
||||
import optionApi from '@/api/option'
|
||||
import { mapActions } from 'vuex'
|
||||
export default {
|
||||
name: 'DeploySettingsForm',
|
||||
data() {
|
||||
return {
|
||||
deployType: staticPageApi.deployType,
|
||||
wrapperCol: {
|
||||
xl: { span: 8 },
|
||||
lg: { span: 8 },
|
||||
sm: { span: 12 },
|
||||
xs: { span: 24 }
|
||||
},
|
||||
options: []
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.loadFormOptions()
|
||||
},
|
||||
methods: {
|
||||
...mapActions(['refreshOptionsCache']),
|
||||
loadFormOptions() {
|
||||
optionApi.listAll().then(response => {
|
||||
this.options = response.data.data
|
||||
})
|
||||
},
|
||||
handleSaveOptions() {
|
||||
optionApi.save(this.options).then(response => {
|
||||
this.loadFormOptions()
|
||||
this.refreshOptionsCache()
|
||||
this.$message.success('保存成功!')
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -1,10 +0,0 @@
|
|||
<template>
|
||||
<div>
|
||||
SettingsForm
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: 'SettingsForm'
|
||||
}
|
||||
</script>
|
|
@ -1,113 +0,0 @@
|
|||
<template>
|
||||
<div class="option-tab-wrapper">
|
||||
<a-card
|
||||
:bordered="false"
|
||||
:bodyStyle="{ padding: 0 }"
|
||||
>
|
||||
<div class="table-operator">
|
||||
<a-button
|
||||
type="primary"
|
||||
icon="reload"
|
||||
@click="handleGenerate"
|
||||
>生成</a-button>
|
||||
<a-button
|
||||
icon="cloud-upload"
|
||||
@click="handleDeploy"
|
||||
:loading="deployLoading"
|
||||
:disabled="deployLoading"
|
||||
>
|
||||
部署
|
||||
</a-button>
|
||||
<a-button
|
||||
icon="sync"
|
||||
@click="loadStaticPageList"
|
||||
:loading="loading"
|
||||
:disabled="loading"
|
||||
>
|
||||
刷新
|
||||
</a-button>
|
||||
</div>
|
||||
<div class="mt-4">
|
||||
<a-table
|
||||
:rowKey="record => record.id"
|
||||
:columns="columns"
|
||||
:dataSource="staticPages"
|
||||
:pagination="false"
|
||||
size="middle"
|
||||
:loading="loading"
|
||||
>
|
||||
<span
|
||||
slot="name"
|
||||
slot-scope="name"
|
||||
>
|
||||
<ellipsis
|
||||
:length="64"
|
||||
tooltip
|
||||
>
|
||||
{{ name }}
|
||||
</ellipsis>
|
||||
</span>
|
||||
</a-table>
|
||||
</div>
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import staticPageApi from '@/api/staticPage'
|
||||
const columns = [
|
||||
{
|
||||
title: '文件名',
|
||||
dataIndex: 'name',
|
||||
scopedSlots: { customRender: 'name' }
|
||||
}
|
||||
]
|
||||
export default {
|
||||
name: 'StaticPagesList',
|
||||
data() {
|
||||
return {
|
||||
columns: columns,
|
||||
staticPages: [],
|
||||
loading: false,
|
||||
deployLoading: false
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.loadStaticPageList()
|
||||
},
|
||||
methods: {
|
||||
loadStaticPageList() {
|
||||
this.loading = true
|
||||
staticPageApi.list().then(response => {
|
||||
this.staticPages = response.data.data
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
handleGenerate() {
|
||||
this.loading = true
|
||||
const hide = this.$message.loading('生成中...', 0)
|
||||
staticPageApi
|
||||
.generate()
|
||||
.then(response => {
|
||||
this.$message.success('生成成功!')
|
||||
})
|
||||
.finally(response => {
|
||||
this.loadStaticPageList()
|
||||
hide()
|
||||
})
|
||||
},
|
||||
handleDeploy() {
|
||||
this.deployLoading = true
|
||||
const hide = this.$message.loading('部署中...', 0)
|
||||
staticPageApi
|
||||
.deploy()
|
||||
.then(response => {
|
||||
this.$message.success('部署成功!')
|
||||
})
|
||||
.finally(response => {
|
||||
this.deployLoading = false
|
||||
hide()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
Loading…
Reference in New Issue