U interface->class

This commit is contained in:
zhenorzz 2022-03-20 11:41:08 +08:00
parent c6d1f4f2e6
commit 64a3015b29
40 changed files with 685 additions and 791 deletions

359
web/package-lock.json generated
View File

@ -39,10 +39,15 @@
"resolved": "https://registry.npmjs.org/@chenfengyuan/vue-qrcode/-/vue-qrcode-2.0.0-rc.1.tgz",
"integrity": "sha512-TcdJtpnTX7TlkCV4j0ym+UwjHHhEPFbK3MKJQd4gBEiNZZmClXAwLORnrpsK5XeJtwpk0Hk4DryC7wlja6McAg=="
},
"@element-plus/icons": {
"version": "0.0.11",
"resolved": "https://registry.npmjs.org/@element-plus/icons/-/icons-0.0.11.tgz",
"integrity": "sha512-iKQXSxXu131Ai+I9Ymtcof9WId7kaXvB1+WRfAfpQCW7UiAMYgdNDqb/u0hgTo2Yq3MwC4MWJnNuTBEpG8r7+A=="
"@ctrl/tinycolor": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz",
"integrity": "sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ=="
},
"@element-plus/icons-vue": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-1.1.3.tgz",
"integrity": "sha512-eaL3acguwQMmQcGssYtzDYJLgXwXae7zpKuA6uXCtz1wrEMVtN+T3u5tY+p7FzZ+2d/R9tzT/rq0EHmjKs33XQ=="
},
"@eslint/eslintrc": {
"version": "1.2.0",
@ -248,9 +253,9 @@
}
},
"@popperjs/core": {
"version": "2.9.3",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.3.tgz",
"integrity": "sha512-xDu17cEfh7Kid/d95kB6tZsLOmSWKCZKtprnhVepjsSaCij+lM3mItSJDuuHDMbCWTh8Ejmebwb+KONcCJ0eXQ=="
"version": "2.11.4",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.4.tgz",
"integrity": "sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg=="
},
"@rollup/pluginutils": {
"version": "4.1.1",
@ -575,9 +580,9 @@
},
"dependencies": {
"@babel/parser": {
"version": "7.17.7",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.7.tgz",
"integrity": "sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA==",
"version": "7.17.8",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz",
"integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==",
"dev": true
},
"@vue/compiler-core": {
@ -856,6 +861,29 @@
"integrity": "sha512-j2j1MRmjalVKr3YBTxl/BClSIc8UQ8NnPpLYclxerK65JIowI4O7n8O8lElveEtEoHxy1d7BelPUDI0Q4bumqg==",
"dev": true
},
"@vueuse/core": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.1.1.tgz",
"integrity": "sha512-NmpizOcQXW0OHV0qa6YwFtw5hQBe0RxMuxQoIIbCa6jRT16MTweFPecIM6VgA1e5vZJtAO7p//TgLSpzi3joZQ==",
"requires": {
"@vueuse/metadata": "8.1.1",
"@vueuse/shared": "8.1.1",
"vue-demi": "*"
}
},
"@vueuse/metadata": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.1.1.tgz",
"integrity": "sha512-TSmA3UaSmBcV8pJ7fnHAL7NjSE1RQZlpJklg6YysFxwxDb0MZlo+Q8j9U1hLBZT1fnAjwZMaoxilanHN8ZwugQ=="
},
"@vueuse/shared": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.1.1.tgz",
"integrity": "sha512-lWRcK8W9+q1t1XMxW9JIljXFQLIViInTOEF7wUHcISQNAYwHtHgr0z+U5SRM8tA4eJd/dVs/2BV1/z2DG7aKEg==",
"requires": {
"vue-demi": "*"
}
},
"ace-builds": {
"version": "1.4.12",
"resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.4.12.tgz",
@ -886,16 +914,16 @@
}
},
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"requires": {
"color-convert": "^1.9.0"
"color-convert": "^2.0.1"
}
},
"anymatch": {
@ -960,9 +988,9 @@
"dev": true
},
"async-validator": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-3.5.2.tgz",
"integrity": "sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ=="
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.0.7.tgz",
"integrity": "sha512-Pj2IR7u8hmUEDOwB++su6baaRi+QvsgajuFB9j95foM1N2gy5HM4z60hfusIO0fBPG5uLAEl6yCJr1jNSVugEQ=="
},
"at-least-node": {
"version": "1.0.0",
@ -1004,11 +1032,6 @@
"pascalcase": "^0.1.1"
}
},
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"big-integer": {
"version": "1.6.48",
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz",
@ -1064,39 +1087,6 @@
"fill-range": "^7.0.1"
}
},
"buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
"buffer-alloc": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
"integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
"requires": {
"buffer-alloc-unsafe": "^1.1.0",
"buffer-fill": "^1.0.0"
}
},
"buffer-alloc-unsafe": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
"integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
},
"buffer-fill": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
"integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
},
"buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"buffer-indexof-polyfill": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
@ -1238,13 +1228,13 @@
}
},
"cliui": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
"integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"requires": {
"string-width": "^3.1.0",
"strip-ansi": "^5.2.0",
"wrap-ansi": "^5.1.0"
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^6.2.0"
}
},
"clone": {
@ -1264,17 +1254,17 @@
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"requires": {
"color-name": "1.1.3"
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"colorette": {
"version": "1.3.0",
@ -1460,9 +1450,9 @@
"integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ=="
},
"dayjs": {
"version": "1.10.6",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.6.tgz",
"integrity": "sha512-AztC/IOW4L1Q41A86phW5Thhcrco3xuAA+YX/BLpLWWjRcTj5TOt/QImBLmCKlrF7u7k47arTnOyL6GnbG8Hvw=="
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.0.tgz",
"integrity": "sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug=="
},
"debug": {
"version": "4.3.2",
@ -1638,24 +1628,28 @@
}
},
"element-plus": {
"version": "1.0.2-beta.71",
"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-1.0.2-beta.71.tgz",
"integrity": "sha512-tlfbRORIav8gJcIpjZI5F6aJIVHIaDuGO6/vKu43lgYq4JS2JPNRTjvrSE2p4f5xLfaFNfOWjCS3sybXLfMg8g==",
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.1.4.tgz",
"integrity": "sha512-pcwgDbKUrzyWbixYB/zIbLPLBQ/NPGPJnGXJ+jYozUSthPW4SuriaUGJKgbAE6PDBAtw3IodiT2E2GbiaZLxww==",
"requires": {
"@element-plus/icons": "^0.0.11",
"@popperjs/core": "^2.4.4",
"async-validator": "^3.4.0",
"dayjs": "1.x",
"lodash": "^4.17.20",
"mitt": "^2.1.0",
"normalize-wheel": "^1.0.1",
"resize-observer-polyfill": "^1.5.1"
"@ctrl/tinycolor": "^3.4.0",
"@element-plus/icons-vue": "^1.1.1",
"@popperjs/core": "^2.11.3",
"@vueuse/core": "^8.0.1",
"async-validator": "^4.0.7",
"dayjs": "^1.10.8",
"escape-html": "^1.0.3",
"lodash": "^4.17.21",
"lodash-es": "^4.17.21",
"lodash-unified": "^1.0.2",
"memoize-one": "^6.0.0",
"normalize-wheel-es": "^1.1.1"
}
},
"emoji-regex": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"emojis-list": {
"version": "3.0.0",
@ -1663,12 +1657,22 @@
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
"dev": true
},
"encode-utf8": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
"integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
},
"entities": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
"dev": true
},
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@ -2078,11 +2082,12 @@
}
},
"find-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"requires": {
"locate-path": "^3.0.0"
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
}
},
"flat-cache": {
@ -2425,11 +2430,6 @@
"integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
"dev": true
},
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"ignore": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
@ -2561,9 +2561,9 @@
"dev": true
},
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
},
"is-glob": {
"version": "4.0.1",
@ -2611,11 +2611,6 @@
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true
},
"isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@ -2730,12 +2725,11 @@
}
},
"locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"requires": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
"p-locate": "^4.1.0"
}
},
"lodash": {
@ -2743,6 +2737,16 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"lodash-es": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
},
"lodash-unified": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.2.tgz",
"integrity": "sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g=="
},
"lodash.camelcase": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
@ -2793,6 +2797,11 @@
"integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
"dev": true
},
"memoize-one": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
},
"merge-options": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz",
@ -2840,11 +2849,6 @@
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"mitt": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mitt/-/mitt-2.1.0.tgz",
"integrity": "sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg=="
},
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
@ -2988,10 +2992,10 @@
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
"normalize-wheel": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
"integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
"normalize-wheel-es": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.1.1.tgz",
"integrity": "sha512-157VNH4CngrcsvF8xOVOe22cwniIR3nxSltdctvQeHZj8JttEeOXffK28jucWfWBXs0QNetAumjc1GiInnwX4w=="
},
"normalize.css": {
"version": "8.0.1",
@ -3098,11 +3102,11 @@
}
},
"p-locate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"requires": {
"p-limit": "^2.0.0"
"p-limit": "^2.2.0"
}
},
"p-try": {
@ -3131,9 +3135,9 @@
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
},
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
},
"path-is-absolute": {
"version": "1.0.1",
@ -3164,9 +3168,9 @@
"dev": true
},
"pngjs": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
"integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
"integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="
},
"posix-character-classes": {
"version": "0.1.1",
@ -3392,17 +3396,14 @@
"dev": true
},
"qrcode": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.4.tgz",
"integrity": "sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q==",
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.0.tgz",
"integrity": "sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ==",
"requires": {
"buffer": "^5.4.3",
"buffer-alloc": "^1.2.0",
"buffer-from": "^1.1.1",
"dijkstrajs": "^1.0.1",
"isarray": "^2.0.1",
"pngjs": "^3.3.0",
"yargs": "^13.2.4"
"encode-utf8": "^1.0.3",
"pngjs": "^5.0.0",
"yargs": "^15.3.1"
}
},
"query-string": {
@ -3821,13 +3822,13 @@
"dev": true
},
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"requires": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
}
},
"string_decoder": {
@ -3839,11 +3840,11 @@
}
},
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"requires": {
"ansi-regex": "^4.1.0"
"ansi-regex": "^5.0.1"
}
},
"strip-json-comments": {
@ -4474,33 +4475,33 @@
}
},
"vscode-css-languageservice": {
"version": "5.1.13",
"resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-5.1.13.tgz",
"integrity": "sha512-FA0foqMzMmEoO0WJP+MjoD4dRERhKS+Ag+yBrtmWQDmw2OuZ1R/5FkvI/XdTkCpHmTD9VMczugpHRejQyTXCNQ==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-5.2.0.tgz",
"integrity": "sha512-FR5yDEfzbXJtYmZYrA7JWFcRSLHsJw3nv55XAmx7qdwRpFj9yy0ulKfN/NUUdiZW2jZU2fD/+Y4VJYPdafHDag==",
"dev": true,
"requires": {
"vscode-languageserver-textdocument": "^1.0.1",
"vscode-languageserver-textdocument": "^1.0.4",
"vscode-languageserver-types": "^3.16.0",
"vscode-nls": "^5.0.0",
"vscode-uri": "^3.0.2"
"vscode-uri": "^3.0.3"
}
},
"vscode-html-languageservice": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-4.2.2.tgz",
"integrity": "sha512-4ICwlpplGbiNQq6D/LZr4qLbPZuMmnSQeX/57UAYP7jD1LOvKeru4lVI+f6d6Eyd7uS46nLJ5DUY4AAlq35C0g==",
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-4.2.4.tgz",
"integrity": "sha512-1HqvXKOq9WlZyW4HTD+0XzrjZoZ/YFrgQY2PZqktbRloHXVAUKm6+cAcvZi4YqKPVn05/CK7do+KBHfuSaEdbg==",
"dev": true,
"requires": {
"vscode-languageserver-textdocument": "^1.0.3",
"vscode-languageserver-textdocument": "^1.0.4",
"vscode-languageserver-types": "^3.16.0",
"vscode-nls": "^5.0.0",
"vscode-uri": "^3.0.3"
}
},
"vscode-json-languageservice": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.0.tgz",
"integrity": "sha512-XNawv0Vdy/sUK0S+hGf7cq/qsVAbIniGJr89TvZOqMCNJmpgKTy1e8PL1aWW0uy6BfWMG7vxa5lZb3ypuFtuGQ==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz",
"integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==",
"dev": true,
"requires": {
"jsonc-parser": "^3.0.0",
@ -4628,6 +4629,11 @@
}
}
},
"vue-demi": {
"version": "0.12.4",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.4.tgz",
"integrity": "sha512-ztPDkFt0TSUdoq1ZI6oD730vgztBkiByhUW7L1cOTebiSBqSYfSQgnhYakYigBkyAybqCTH7h44yZuDJf2xILQ=="
},
"vue-eslint-parser": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz",
@ -4761,13 +4767,13 @@
"dev": true
},
"wrap-ansi": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"requires": {
"ansi-styles": "^3.2.0",
"string-width": "^3.0.0",
"strip-ansi": "^5.0.0"
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
}
},
"wrappy": {
@ -4827,26 +4833,27 @@
}
},
"yargs": {
"version": "13.3.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
"integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
"version": "15.4.1",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
"integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"requires": {
"cliui": "^5.0.0",
"find-up": "^3.0.0",
"cliui": "^6.0.0",
"decamelize": "^1.2.0",
"find-up": "^4.1.0",
"get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
"require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
"string-width": "^3.0.0",
"string-width": "^4.2.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^13.1.2"
"yargs-parser": "^18.1.2"
}
},
"yargs-parser": {
"version": "13.1.2",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
"integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
"version": "18.1.3",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
"integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"

View File

@ -8,20 +8,21 @@
},
"dependencies": {
"@chenfengyuan/vue-qrcode": "^2.0.0-beta",
"@element-plus/icons-vue": "^1.1.3",
"asciinema-player": "^3.0.0-rc.1",
"axios": "^0.21.4",
"cron-validator": "^1.2.1",
"cronstrue": "^1.113.0",
"diff": "^5.0.0",
"echarts": "^5.2.1",
"element-plus": "^1.0.2-beta.70",
"element-plus": "^2.1.4",
"js-cookie": "^2.2.1",
"listenercount": "^1.0.1",
"normalize.css": "^8.0.1",
"nprogress": "^0.2.0",
"path-browserify": "^1.0.1",
"path-to-regexp": "^6.2.0",
"qrcode": "^1.4.4",
"qrcode": "^1.5.0",
"unzipper": "^0.10.11",
"vue": "^3.2.31",
"vue-i18n": "^9.1.6",

View File

@ -1,22 +1,20 @@
import { Request, Pagination, ID } from './types'
export class CronData {
public declare datagram: {
id: number
serverId: number
expression: string
command: string
singleMode: number
logLevel: number
description: string
creator: string
creatorId: number
editor: string
editorId: number
state: number
InsertTime: string
UpdateTime: string
}
export interface CronData {
id: number
serverId: number
expression: string
command: string
singleMode: number
logLevel: number
description: string
creator: string
creatorId: number
editor: string
editorId: number
state: number
InsertTime: string
UpdateTime: string
}
export class CronList extends Request {
@ -28,7 +26,7 @@ export class CronList extends Request {
public pagination: Pagination
public declare datagram: {
list: CronData['datagram'][]
list: CronData[]
}
constructor(param: CronList['param'], pagination: Pagination) {
super()

View File

@ -1,11 +1,39 @@
import { Request, Pagination, Total, ID } from './types'
import { ProjectData } from './project'
export interface PublishTraceData {
id: number
token: string
projectId: number
projectName: string
detail: string
state: number
publisherId: number
publisherName: string
type: number
ext: string
serverName: string
publishState: number
insertTime: string
updateTime: string
}
export interface PublishTraceExt {
branch: string
commit: string
message: string
author: string
timestamp: number
diff: string
script: string
command: string
}
export class DeployList extends Request {
readonly url = '/deploy/getList'
readonly method = 'get'
public declare datagram: {
list: ProjectData['datagram'][]
list: ProjectData[]
}
}
@ -23,26 +51,6 @@ export class DeployRebuild extends Request {
}
}
export class PublishTraceData {
public declare datagram: {
id: number
token: string
projectId: number
projectName: string
detail: string
state: number
publisherId: number
publisherName: string
type: number
ext: string
commit: string
serverName: string
publishState: number
insertTime: string
updateTime: string
}
}
export class DeployPreviewList extends Request {
readonly url = '/deploy/getPreview'
readonly method = 'get'
@ -59,7 +67,7 @@ export class DeployPreviewList extends Request {
public pagination: Pagination
public declare datagram: {
list: PublishTraceData['datagram'][]
list: PublishTraceData[]
pagination: Pagination & Total
}
constructor(param: DeployPreviewList['param'], pagination: Pagination) {
@ -76,7 +84,7 @@ export class DeployTrace extends Request {
lastPublishToken: string
}
public declare datagram: {
list: PublishTraceData['datagram'][]
list: PublishTraceData[]
}
constructor(param: DeployTrace['param']) {
super()

View File

@ -1,15 +1,50 @@
import { Request, Pagination, Total } from './types'
export class LoginLogData {
public declare datagram: {
id: number
account: string
remoteAddr: string
userAgent: string
referer: string
reason: string
loginTime: string
}
export interface LoginLogData {
id: number
account: string
remoteAddr: string
userAgent: string
referer: string
reason: string
loginTime: string
}
export interface SftpLogData {
id: number
namespaceId: number
userId: number
username: string
serverId: number
serverName: string
remoteAddr: string
userAgent: string
type: string
path: string
reason: string
}
export interface TerminalLogData {
id: number
namespaceId: number
userId: number
username: string
serverId: number
serverName: string
remoteAddr: string
userAgent: string
startTime: string
endTime: string
}
export interface PublishLogData {
token: string
publisherId: number
publisherName: string
projectId: number
projectName: string
state: number
insertTime: string
}
export class LoginLogList extends Request {
@ -23,7 +58,7 @@ export class LoginLogList extends Request {
}
public declare datagram: {
list: LoginLogData['datagram'][]
list: LoginLogData[]
}
constructor(param: LoginLogList['param'], pagination: Pagination) {
super()
@ -48,22 +83,6 @@ export class LoginLogTotal extends Request {
}
}
export class SftpLogData {
public declare datagram: {
id: number
namespaceId: number
userId: number
username: string
serverId: number
serverName: string
remoteAddr: string
userAgent: string
type: string
path: string
reason: string
}
}
export class SftpLogList extends Request {
readonly url = '/log/getSftpLogList'
readonly method = 'get'
@ -76,7 +95,7 @@ export class SftpLogList extends Request {
}
public declare datagram: {
list: SftpLogData['datagram'][]
list: SftpLogData[]
}
constructor(param: SftpLogList['param'], pagination: Pagination) {
super()
@ -102,21 +121,6 @@ export class SftpLogTotal extends Request {
}
}
export class TerminalLogData {
public declare datagram: {
id: number
namespaceId: number
userId: number
username: string
serverId: number
serverName: string
remoteAddr: string
userAgent: string
startTime: string
endTime: string
}
}
export class TerminalLogList extends Request {
readonly url = '/log/getTerminalLogList'
readonly method = 'get'
@ -129,7 +133,7 @@ export class TerminalLogList extends Request {
}
public declare datagram: {
list: TerminalLogData['datagram'][]
list: TerminalLogData[]
}
constructor(param: TerminalLogList['param'], pagination: Pagination) {
super()
@ -155,18 +159,6 @@ export class TerminalLogTotal extends Request {
}
}
export class PublishLogData {
public declare datagram: {
token: string
publisherId: number
publisherName: string
projectId: number
projectName: string
state: number
insertTime: string
}
}
export class PublishLogList extends Request {
readonly url = '/log/getPublishLogList'
readonly method = 'get'
@ -179,7 +171,7 @@ export class PublishLogList extends Request {
}
public declare datagram: {
list: PublishLogData['datagram'][]
list: PublishLogData[]
}
constructor(param: PublishLogList['param'], pagination: Pagination) {
super()

View File

@ -1,22 +1,20 @@
import { Request, Pagination, ID, Total } from './types'
export class MonitorData {
public declare datagram: {
id: number
namespaceId: number
name: string
url: string
second: number
times: number
notifyType: number
notifyTarget: string
notifyTimes: number
description: string
errorContent: string
state: number
insertTime: string
updateTime: string
}
export interface MonitorData {
id: number
namespaceId: number
name: string
url: string
second: number
times: number
notifyType: number
notifyTarget: string
notifyTimes: number
description: string
errorContent: string
state: number
insertTime: string
updateTime: string
}
export class MonitorList extends Request {
@ -25,7 +23,7 @@ export class MonitorList extends Request {
public pagination: Pagination
public declare datagram: {
list: MonitorData['datagram'][]
list: MonitorData[]
}
constructor(pagination: Pagination) {
super()

View File

@ -1,27 +1,23 @@
import { Request, Pagination, ID, Total } from './types'
export class NamespaceData {
public declare datagram: {
id: number
name: string
userId: number
role: string
insertTime: string
updateTime: string
}
export interface NamespaceData {
id: number
name: string
userId: number
role: string
insertTime: string
updateTime: string
}
export class NamespaceUserData {
public declare datagram: {
id: number
namespaceId: number
namespaceName: string
userId: number
userName: string
role: string
insertTime: string
updateTime: string
}
export interface NamespaceUserData {
id: number
namespaceId: number
namespaceName: string
userId: number
userName: string
role: string
insertTime: string
updateTime: string
}
export class NamespaceList extends Request {
@ -31,7 +27,7 @@ export class NamespaceList extends Request {
public pagination: Pagination
public declare datagram: {
list: NamespaceData['datagram'][]
list: NamespaceData[]
}
constructor(pagination: Pagination) {
super()
@ -52,7 +48,7 @@ export class NamespaceUserOption extends Request {
readonly method = 'get'
public declare datagram: {
list: NamespaceUserData['datagram'][]
list: NamespaceUserData[]
}
}
@ -61,7 +57,7 @@ export class NamespaceOption extends Request {
readonly method = 'get'
public declare datagram: {
list: NamespaceUserData['datagram'][]
list: NamespaceUserData[]
}
}
@ -70,7 +66,7 @@ export class NamespaceUserList extends Request {
readonly method = 'get'
public param: ID
public declare datagram: {
list: NamespaceUserData['datagram'][]
list: NamespaceUserData[]
}
constructor(param: NamespaceUserList['param']) {
super()

View File

@ -1,41 +1,101 @@
import { Request, Pagination, ID, Total } from './types'
export class ProjectData {
public declare datagram: {
id: number
namespaceId: number
userId: number
name: string
repoType: string
url: string
path: string
environment: number
branch: string
symlinkPath: string
symlinkBackupNumber: number
review: number
reviewURL: string
afterPullScriptMode: string
afterPullScript: string
afterDeployScriptMode: string
afterDeployScript: string
rsyncOption: string
autoDeploy: number
publisherId: number
publisherName: string
publishExt: string
deployState: number
lastPublishToken: string
notifyType: number
notifyTarget: string
serverIds: number[]
userIds: number[]
state: number
insertTime: string
updateTime: string
}
export interface ProjectData {
id: number
namespaceId: number
userId: number
name: string
repoType: string
url: string
path: string
environment: number
branch: string
symlinkPath: string
symlinkBackupNumber: number
review: number
reviewURL: string
afterPullScriptMode: string
afterPullScript: string
afterDeployScriptMode: string
afterDeployScript: string
rsyncOption: string
autoDeploy: number
publisherId: number
publisherName: string
publishExt: string
deployState: number
lastPublishToken: string
notifyType: number
notifyTarget: string
serverIds: number[]
userIds: number[]
state: number
insertTime: string
updateTime: string
}
export interface ProjectServerData {
id: number
projectId: number
serverId: number
serverName: string
serverIP: string
serverPort: number
serverOwner: string
serverPassword: string
serverPath: string
serverDescription: string
insertTime: string
updateTime: string
}
export interface ProjectUserData {
id: number
namespaceId: number
projectId: number
projectName: string
userId: number
userName: string
role: string
insertTime: string
updateTime: string
}
export interface ProjectFileData {
id: number
projectId: number
filename: string
insertTime: string
updateTime: string
}
export interface ProjectTaskData {
id: number
projectId: number
branch: string
commit: string
date: string
state: number
isRun: number
creator: string
creatorId: number
editor: string
editorId: number
insertTime: string
updateTime: string
}
export interface ProjectProcessData {
id: number
projectId: number
name: string
status: string
start: string
stop: string
restart: string
insertTime: string
updateTime: string
}
export class ProjectList extends Request {
readonly url = '/project/getList'
readonly method = 'get'
@ -45,7 +105,7 @@ export class ProjectList extends Request {
public pagination: Pagination
public declare datagram: {
list: ProjectData['datagram'][]
list: ProjectData[]
}
constructor(param: ProjectList['param'], pagination: Pagination) {
super()
@ -172,28 +232,12 @@ export class ProjectRemove extends Request {
}
}
export class ProjectServerData {
public declare datagram: {
id: number
projectId: number
serverId: number
serverName: string
serverIP: string
serverPort: number
serverOwner: string
serverPassword: string
serverPath: string
serverDescription: string
insertTime: string
updateTime: string
}
}
export class ProjectServerList extends Request {
readonly url = '/project/getBindServerList'
readonly method = 'get'
public param: ID
public declare datagram: {
list: ProjectServerData['datagram'][]
list: ProjectServerData[]
}
constructor(param: ProjectServerList['param']) {
super()
@ -226,25 +270,12 @@ export class ProjectServerRemove extends Request {
}
}
export class ProjectUserData {
public declare datagram: {
id: number
namespaceId: number
projectId: number
projectName: string
userId: number
userName: string
role: string
insertTime: string
updateTime: string
}
}
export class ProjectUserList extends Request {
readonly url = '/project/getBindUserList'
readonly method = 'get'
public param: ID
public declare datagram: {
list: ProjectUserData['datagram'][]
list: ProjectUserData[]
}
constructor(param: ProjectUserList['param']) {
super()
@ -277,21 +308,12 @@ export class ProjectUserRemove extends Request {
}
}
export class ProjectFileData {
public declare datagram: {
id: number
projectId: number
filename: string
insertTime: string
updateTime: string
}
}
export class ProjectFileList extends Request {
readonly url = '/project/getProjectFileList'
readonly method = 'get'
public param: ID
public declare datagram: {
list: ProjectFileData['datagram'][]
list: ProjectFileData[]
}
constructor(param: ProjectUserList['param']) {
super()
@ -352,24 +374,6 @@ export class ProjectFileRemove extends Request {
}
}
export class ProjectTaskData {
public declare datagram: {
id: number
projectId: number
branch: string
commit: string
date: string
state: number
isRun: number
creator: string
creatorId: number
editor: string
editorId: number
insertTime: string
updateTime: string
}
}
export class ProjectTaskList extends Request {
readonly url = '/project/getTaskList'
readonly method = 'get'
@ -377,7 +381,7 @@ export class ProjectTaskList extends Request {
public pagination: Pagination
public declare datagram: {
list: ProjectTaskData['datagram'][]
list: ProjectTaskData[]
pagination: Pagination & Total
}
constructor(param: ProjectTaskList['param'], pagination: Pagination) {
@ -433,7 +437,7 @@ export class ProjectReviewList extends Request {
public pagination: Pagination
public declare datagram: {
list: ProjectTaskData['datagram'][]
list: ProjectTaskData[]
pagination: Pagination & Total
}
constructor(param: ProjectReviewList['param'], pagination: Pagination) {
@ -457,20 +461,6 @@ export class ReposFileList extends Request {
}
}
export class ProjectProcessData {
public declare datagram: {
id: number
projectId: number
name: string
status: string
start: string
stop: string
restart: string
insertTime: string
updateTime: string
}
}
export class ProjectProcessList extends Request {
readonly url = '/project/getProcessList'
readonly method = 'get'
@ -480,7 +470,7 @@ export class ProjectProcessList extends Request {
public pagination: Pagination
public declare datagram: {
list: ProjectProcessData['datagram'][]
list: ProjectProcessData[]
}
constructor(param: ProjectProcessList['param'], pagination: Pagination) {
super()

View File

@ -1,15 +1,13 @@
import { Request, ID } from './types'
export class CommitData {
public declare datagram: {
branch: string
commit: string
author: string
timestamp: number
message: string
tag: string
diff: string
}
export interface CommitData {
branch: string
commit: string
author: string
timestamp: number
message: string
tag: string
diff: string
}
export class RepositoryBranchList extends Request {
@ -37,7 +35,7 @@ export class RepositoryCommitList extends Request {
}
public declare datagram: {
list: CommitData['datagram'][]
list: CommitData[]
}
constructor(param: RepositoryCommitList['param']) {
super()
@ -52,7 +50,7 @@ export class RepositoryTagList extends Request {
public param: ID
public declare datagram: {
list: CommitData['datagram'][]
list: CommitData[]
}
constructor(param: RepositoryTagList['param']) {
super()

View File

@ -1,26 +1,42 @@
import { HttpResponse, Request, Pagination, Total, ID } from './types'
export class ServerData {
public declare datagram: {
id: number
label: string
name: string
ip: string
port: number
owner: string
path: string
password: string
jumpIP: string
jumpPort: number
jumpOwner: string
jumpPath: string
jumpPassword: string
namespaceId: number
description: string
state: number
insertTime: string
updateTime: string
}
export interface ServerData {
id: number
label: string
name: string
ip: string
port: number
owner: string
path: string
password: string
jumpIP: string
jumpPort: number
jumpOwner: string
jumpPath: string
jumpPassword: string
namespaceId: number
description: string
state: number
insertTime: string
updateTime: string
}
export interface ServerMonitorData {
id: number
serverId: number
item: string
formula: string
operator: string
value: string
groupCycle: number
lastCycle: number
silentCycle: number
startTime: string
endTime: string
notifyType: number
notifyTarget: string
insertTime: string
updateTime: string
}
export class ServerList extends Request {
@ -30,7 +46,7 @@ export class ServerList extends Request {
public pagination: Pagination
public declare datagram: {
list: ServerData['datagram'][]
list: ServerData[]
}
constructor(pagination: Pagination) {
super()
@ -81,7 +97,7 @@ export class ServerOption extends Request {
readonly method = 'get'
public declare datagram: {
list: ServerData['datagram'][]
list: ServerData[]
}
public request(): Promise<HttpResponse<this['datagram']>> {
return super.request().then((response) => {
@ -207,26 +223,6 @@ export class ServerReport extends Request {
}
}
export class ServerMonitorData {
public declare datagram: {
id: number
serverId: number
item: string
formula: string
operator: string
value: string
groupCycle: number
lastCycle: number
silentCycle: number
startTime: string
endTime: string
notifyType: number
notifyTarget: string
insertTime: string
updateTime: string
}
}
export class ServerMonitorList extends Request {
readonly url = '/server/getAllMonitor'
readonly method = 'get'
@ -236,7 +232,7 @@ export class ServerMonitorList extends Request {
}
public declare datagram: {
list: ServerMonitorData['datagram'][]
list: ServerMonitorData[]
}
constructor(param: ServerMonitorList['param']) {

View File

@ -1,5 +1,18 @@
import { Request, Pagination, ID, Total } from './types'
export interface UserData {
account: string
contact: string
id: number
insertTime: string
lastLoginTime: string
name: string
password: string
state: number
superManager: number
updateTime: string
}
export class Login extends Request {
readonly url = '/user/login'
readonly method = 'post'
@ -29,29 +42,12 @@ export class Info extends Request {
}
}
export class UserData {
public datagram!: {
account: string
contact: string
id: number
insertTime: string
lastLoginTime: string
name: string
password: string
state: number
superManager: number
updateTime: string
}
}
export class UserList extends Request {
readonly url = '/user/getList'
readonly method = 'get'
public pagination: Pagination
public declare datagram: {
list: UserData['datagram'][]
list: UserData[]
}
constructor(pagination: Pagination) {
super()
@ -70,18 +66,7 @@ export class UserOption extends Request {
readonly url = '/user/getOption'
readonly method = 'get'
public declare datagram: {
list: {
id: number
account: string
contact: string
name: string
password: string
state: number
superManager: number
lastLoginTime: string
insertTime: string
updateTime: string
}[]
list: UserData[]
}
}

View File

@ -9,7 +9,6 @@
<el-dropdown
style="float: left; line-height: 48px; cursor: pointer"
trigger="click"
size="medium"
placement="bottom-start"
@visible-change="handleNamespaceVisible"
@command="handleNamespaceChange"
@ -37,11 +36,10 @@
<div class="international">
<el-dropdown
trigger="click"
size="medium"
placement="bottom"
@command="handleSetLanguage"
>
<div>
<div style="height: 100%">
<svg-icon class-name="international-icon" icon-class="language" />
</div>
<template #dropdown>
@ -61,7 +59,7 @@
</div>
<div class="user-menu">
<div class="user-container">
<el-dropdown trigger="click" size="medium">
<el-dropdown trigger="click">
<div class="user-wrapper">
<el-row type="flex">
<el-row>
@ -216,11 +214,13 @@ async function logout() {
.international {
display: inline-block;
line-height: 50px;
cursor: pointer;
&-icon {
font-size: 18px;
}
.el-dropdown {
line-height: 50px;
}
}
.user-menu {
float: right;

View File

@ -7,13 +7,12 @@
align="middle"
>
<el-row>
<el-button type="text" size="medium" @click="switchJSONView">
<el-button type="text" @click="switchJSONView">
<svg-icon icon-class="switch" /> JSON Pretty
</el-button>
<el-button
v-show="json.view === 'pretty'"
type="text"
size="medium"
@click="expandAll"
>
{{ $t('JSONPage.expandAll') }}
@ -21,7 +20,6 @@
<el-button
v-show="json.view === 'pretty'"
type="text"
size="medium"
@click="collapseAll"
>
{{ $t('JSONPage.collapseAll') }}
@ -29,7 +27,6 @@
<el-button
v-show="json.view === 'pretty'"
type="text"
size="medium"
@click="unmarkAll"
>
{{ $t('JSONPage.unmarkAll') }}
@ -48,14 +45,12 @@
</el-row>
<el-input
v-show="json.view === 'raw'"
ref="jsonStringInput"
v-model="json.input"
style="width: 100%"
:autosize="{ minRows: 25, maxRows: 25 }"
type="textarea"
class="json-string-input"
placeholder="JSON string"
contenteditable="true"
@input="handleInput"
@paste="onPaste"
/>

View File

@ -2,82 +2,42 @@
<div class="fab">
<el-popover placement="left-end" trigger="click" popper-class="fab-popper">
<div style="margin: 0 10px">
<el-button
type="text"
size="medium"
@click="showTransformDialog('time')"
>
<el-button type="text" @click="showTransformDialog('time')">
Date Transform
</el-button>
<el-button
type="text"
size="medium"
@click="showTransformDialog('json')"
>
<el-button type="text" @click="showTransformDialog('json')">
JSON Pretty
</el-button>
<el-button
type="text"
size="medium"
@click="showTransformDialog('password')"
>
<el-button type="text" @click="showTransformDialog('password')">
Random PWD
</el-button>
<el-button
type="text"
size="medium"
@click="showTransformDialog('unicode')"
>
<el-button type="text" @click="showTransformDialog('unicode')">
Unicode
</el-button>
<el-button
type="text"
size="medium"
@click="showTransformDialog('decodeURI')"
>
<el-button type="text" @click="showTransformDialog('decodeURI')">
DecodeURI
</el-button>
<div>
<el-button
type="text"
size="medium"
@click="showTransformDialog('md5')"
>
<el-button type="text" @click="showTransformDialog('md5')">
MD5
</el-button>
</div>
<el-button
type="text"
size="medium"
@click="showTransformDialog('cron')"
>
<el-button type="text" @click="showTransformDialog('cron')">
Crontab
</el-button>
<el-button
type="text"
size="medium"
@click="showTransformDialog('qrcode')"
>
<el-button type="text" @click="showTransformDialog('qrcode')">
QRcode
</el-button>
<el-button
type="text"
size="medium"
@click="showTransformDialog('byte')"
>
<el-button type="text" @click="showTransformDialog('byte')">
Byte Transform
</el-button>
<el-button
type="text"
size="medium"
@click="showTransformDialog('color')"
>
<el-button type="text" @click="showTransformDialog('color')">
Color Transform
</el-button>
</div>
<template #reference>
<div class="fab-cell">
<i class="el-icon-s-cooperation fab-icon" />
<Suitcase class="fab-icon" />
</div>
</template>
</el-popover>
@ -92,7 +52,7 @@
<TheJSONPretty v-model="transformType" />
<TheRandomPWD v-model="transformType" />
<TheUnicode v-model="transformType" />
<el-row v-show="transformType === 'decodeURI'">
<el-row v-show="transformType === 'decodeURI'" style="width: 100%">
<el-input
v-model="uri.escape"
type="textarea"
@ -147,6 +107,7 @@
</template>
<script lang="ts" setup>
import { Suitcase } from '@element-plus/icons-vue'
import VueQrcode from '@chenfengyuan/vue-qrcode'
import { md5 as hashByMD5 } from '@/utils/md5'
import TheDatetransform from './TheDatetransform.vue'
@ -189,20 +150,17 @@ function showTransformDialog(type: string) {
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.18);
text-align: center;
&-cell {
display: block;
position: relative;
width: 36px;
height: 36px;
transform: translateZ(0);
color: #999;
color: #333;
cursor: pointer;
}
&-icon {
line-height: 36px;
color: #999;
margin-top: 8px;
cursor: pointer;
width: 20px;
height: 20px;
width: 18px;
height: 18px;
}
}
@ -220,7 +178,6 @@ function showTransformDialog(type: string) {
min-width: 120px !important;
.el-button {
padding: 0;
margin: 4px 0;
color: #606266;
min-height: 20px;
}

View File

@ -17,24 +17,21 @@
:icon-class="onlyOneChild.meta.icon || item.meta.icon"
/>
<template #title>
{{ $t(`route.${onlyOneChild.meta.title}`) }}
<span class="menu-title">
{{ $t(`route.${onlyOneChild.meta.title}`) }}
</span>
</template>
</el-menu-item>
</app-link>
</template>
<el-submenu
v-else
ref="subMenu"
:index="resolvePath(item.path)"
popper-append-to-body
>
<el-sub-menu v-else ref="subMenu" :index="resolvePath(item.path)">
<template #title>
<svg-icon
v-if="item.meta && item.meta.icon"
:icon-class="item.meta.icon"
/>
<span>{{ $t(`route.${item.meta.title}`) }}</span>
<span class="menu-title">{{ $t(`route.${item.meta.title}`) }}</span>
</template>
<sidebar-item
v-for="child in item.children"
@ -44,7 +41,7 @@
:base-path="resolvePath(child.path)"
class="nest-menu"
/>
</el-submenu>
</el-sub-menu>
</div>
</template>

View File

@ -7,43 +7,36 @@
:text-color="variables.menuText"
:unique-opened="false"
:active-text-color="variables.menuActiveText"
:collapse-transition="false"
:collapse-transition="true"
mode="vertical"
>
<sidebar-item
v-for="route in permission.routes"
:key="route.path"
:item="route"
:base-path="route.path"
v-for="item in permission.routes"
:key="item.path"
:item="item"
:base-path="item.path"
/>
</el-menu>
</el-scrollbar>
</template>
<script lang="ts">
import { mapState } from 'vuex'
<script lang="ts" setup>
import { useStore } from 'vuex'
import { useRoute } from 'vue-router'
import SidebarItem from './SidebarItem.vue'
import variables from '@/styles/variables.module.scss'
import { defineComponent } from 'vue'
export default defineComponent({
components: { SidebarItem },
computed: {
...mapState(['app', 'permission']),
activeMenu() {
const route = this.$route
const { meta, path } = route
// if set path, the sidebar will highlight the path you set
if (meta.activeMenu) {
return meta.activeMenu
}
return path
},
variables() {
return variables
},
isCollapse() {
return !this.app.sidebar.opened
},
},
import { computed } from 'vue'
const route = useRoute()
const store = useStore()
const permission = computed(() => store.state['permission'])
const app = computed(() => store.state['app'])
const isCollapse = computed(() => !app.value.sidebar.opened)
const activeMenu = computed(() => {
const { meta, path } = route
// if set path, the sidebar will highlight the path you set
if (meta.activeMenu) {
return <string>meta.activeMenu
}
return path
})
</script>

View File

@ -28,7 +28,7 @@ const props = defineProps({
})
const emit = defineEmits(['scroll'])
const scrollContainer = ref()
const scrollWrapper = computed(() => scrollContainer.value.$refs.wrap)
const scrollWrapper = computed(() => scrollContainer.value.$refs.wrap$)
onMounted(() => {
scrollWrapper.value.addEventListener('scroll', emitScroll, true)
})

View File

@ -17,7 +17,7 @@
@contextmenu.prevent="openMenu(tag, $event)"
>
{{ $t('route.' + tag.title) }}
<span
<Close
v-if="!isAffix(tag)"
class="el-icon-close"
@click.prevent.stop="closeSelectedTag(tag)"
@ -42,6 +42,7 @@
</template>
<script lang="ts">
import { Close } from '@element-plus/icons-vue'
import ScrollPane from './ScrollPane.vue'
import path from 'path-browserify'
import { defineComponent } from 'vue'
@ -50,7 +51,7 @@ import { RootState } from '@/store/types'
import { RouteRecordRaw } from 'vue-router'
export default defineComponent({
components: { ScrollPane },
components: { ScrollPane, Close },
data() {
return {
visible: false,
@ -253,6 +254,23 @@ export default defineComponent({
&:last-of-type {
margin-right: 15px;
}
.el-icon-close {
width: 12px;
height: 12px;
vertical-align: -1px;
border-radius: 50%;
text-align: center;
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
transform-origin: 100% 50%;
&:before {
transform: scale(0.6);
display: inline-block;
}
&:hover {
background-color: #b4bccc;
color: #fff;
}
}
&.active {
background-color: #42b983;
color: #fff;
@ -293,29 +311,3 @@ export default defineComponent({
}
}
</style>
<style lang="scss">
//reset element css of el-icon-close
.tags-view-wrapper {
.tags-view-item {
.el-icon-close {
width: 16px;
height: 16px;
vertical-align: 2px;
border-radius: 50%;
text-align: center;
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
transform-origin: 100% 50%;
&:before {
transform: scale(0.6);
display: inline-block;
vertical-align: -3px;
}
&:hover {
background-color: #b4bccc;
color: #fff;
}
}
}
}
</style>

View File

@ -7,13 +7,11 @@ import '@/permission'
import i18n from '@/lang' // internationalization
import SvgIcon from '@/components/SvgIcon/index.vue' // svg component
import ElementPlus from 'element-plus'
import 'element-plus/packages/theme-chalk/src/index.scss'
import 'element-plus/dist/index.css'
import 'vite-plugin-svg-icons/register' // register svg sprite map
import App from './App.vue'
const app = createApp(App)
app.use(ElementPlus, {
size: 'mini',
})
app.use(ElementPlus)
app.use(router)
app.use(store)
app.use(i18n)

View File

@ -46,16 +46,16 @@
display: none;
}
.menu-title {
margin-left:16px;
}
a {
display: inline-block;
width: 100%;
overflow: hidden;
}
.svg-icon {
margin-right: 16px;
}
.el-menu {
border: none;
height: 100%;
@ -65,18 +65,18 @@
// menu hover
.submenu-title-noDropdown,
.el-submenu__title {
.el-sub-menu__title {
&:hover {
background-color: $menuHover !important;
}
}
.is-active>.el-submenu__title {
.is-active>.el-sub-menu__title {
color: $subMenuActiveText !important;
}
& .nest-menu .el-submenu>.el-submenu__title,
& .el-submenu .el-menu-item {
& .nest-menu .el-sub-menu>.el-sub-menu__title,
& .el-sub-menu .el-menu-item {
min-width: $sideBarWidth !important;
background-color: $subMenuBg !important;
&:hover {
@ -107,25 +107,25 @@
}
}
.el-submenu {
.el-sub-menu {
overflow: hidden;
&>.el-submenu__title {
&>.el-sub-menu__title {
padding: 0!important;
.svg-icon {
margin-left: 20px;
}
.el-submenu__icon-arrow {
.el-sub-menu__icon-arrow {
display: none;
}
}
}
.el-menu--collapse {
.el-submenu {
&>.el-submenu__title {
.el-sub-menu {
&>.el-sub-menu__title {
&>span {
height: 0;
width: 0;
@ -138,7 +138,7 @@
}
}
.el-menu--collapse .el-menu .el-submenu {
.el-menu--collapse .el-menu .el-sub-menu {
min-width: $sideBarWidth !important;
}
@ -179,7 +179,7 @@
}
}
.nest-menu .el-submenu>.el-submenu__title,
.nest-menu .el-sub-menu>.el-sub-menu__title,
.el-menu-item {
&:hover {
// you can use $subMenuHover

View File

@ -95,7 +95,7 @@ const props = defineProps({
default: false,
},
projectRow: {
type: Object as PropType<ProjectData['datagram']>,
type: Object as PropType<ProjectData>,
required: true,
},
})

View File

@ -345,6 +345,7 @@ import {
DeployTrace,
DeployTraceDetail,
PublishTraceData,
PublishTraceExt,
} from '@/api/deploy'
import { ProjectData } from '@/api/project'
import { NamespaceUserOption } from '@/api/namespace'
@ -359,7 +360,7 @@ const props = defineProps({
default: false,
},
projectRow: {
type: Object as PropType<ProjectData['datagram']>,
type: Object as PropType<ProjectData>,
required: true,
},
onRebuilt: {
@ -429,13 +430,13 @@ const filterParams = reactive<Record<string, any>>({
commitDate: [],
deployDate: [],
})
const gitTraceList = ref<DeployPreviewList['datagram']['list']>([])
const gitTraceList = ref<(PublishTraceData & PublishTraceExt)[]>([])
const pagination = reactive({ page: 1, rows: 11, total: 0 })
const traceDetail = ref<Record<number, string>>({})
const publishToken = ref('')
const publishLocalTraceList = ref<DeployTrace['datagram']['list']>([])
const publishLocalTraceList = ref<(PublishTraceData & PublishTraceExt)[]>([])
const publishRemoteTraceList = ref<
Record<string, DeployTrace['datagram']['list']>
Record<string, (PublishTraceData & PublishTraceExt)[]>
>({})
const filterlength = computed(() => {
let number = 0
@ -485,7 +486,8 @@ const getPreviewList = (projectId: number) => {
)
.request()
.then((response) => {
gitTraceList.value = response.data.list.map((element) => {
gitTraceList.value = response.data.list.map((item) => {
let element = <PublishTraceData & PublishTraceExt>item
if (element.ext !== '') {
Object.assign(element, JSON.parse(element.ext))
element.commit = element['commit']
@ -529,7 +531,7 @@ const getPublishTrace = (publishToken: string) => {
if (element.ext !== '') {
Object.assign(element, JSON.parse(element.ext))
}
return element
return <PublishTraceData & PublishTraceExt>element
})
publishLocalTraceList.value = publishTraceList.filter(
@ -558,7 +560,7 @@ const handleTraceChange = (lastPublishToken: string) => {
getPublishTrace(publishToken.value)
}
const getPublishTraceDetail = (data: PublishTraceData['datagram']) => {
const getPublishTraceDetail = (data: PublishTraceData) => {
traceDetail.value[data.id] = ''
new DeployTraceDetail({ id: data.id }).request().then((response) => {
traceDetail.value[data.id] =
@ -568,7 +570,7 @@ const getPublishTraceDetail = (data: PublishTraceData['datagram']) => {
})
}
const rebuild = (data: PublishTraceData['datagram']) => {
const rebuild = (data: PublishTraceData & PublishTraceExt) => {
ElMessageBox.confirm(
t('deployPage.publishCommitTips', { commit: data.commit }),
t('tips'),
@ -610,8 +612,7 @@ const rebuild = (data: PublishTraceData['datagram']) => {
&-commit {
margin-right: 5px;
padding-right: 8px;
width: 246px;
line-height: 12px;
width: 243px;
}
&-commitID {
display: inline-block;
@ -642,7 +643,7 @@ const rebuild = (data: PublishTraceData['datagram']) => {
.project-detail {
padding-left: 5px;
height: 470px;
height: 490px;
overflow-y: auto;
@include scrollBar();
}

View File

@ -15,7 +15,7 @@
<template #append>
<el-button
type="primary"
icon="el-icon-folder-opened"
:icon="FolderOpened"
@click="handleSelectPath(filePath)"
/>
</template>
@ -192,6 +192,7 @@
</template>
<script lang="ts" setup>
import { FolderOpened } from '@element-plus/icons-vue'
import { diffLines } from 'diff'
import path from 'path-browserify'
import { FileCompare, FileDiff } from '@/api/deploy'
@ -205,7 +206,7 @@ const props = defineProps({
default: false,
},
projectRow: {
type: Object as PropType<ProjectData['datagram']>,
type: Object as PropType<ProjectData>,
required: true,
},
})

View File

@ -200,7 +200,7 @@ const props = defineProps({
default: false,
},
projectRow: {
type: Object as PropType<ProjectData['datagram']>,
type: Object as PropType<ProjectData>,
required: true,
},
})
@ -266,10 +266,7 @@ const commandRes = ref<ManageProcess['datagram']>({
stderr: '',
})
const commandLoading = ref(false)
const handleProcessCmd = (
data: ProjectServerData['datagram'],
command: string
) => {
const handleProcessCmd = (data: ProjectServerData, command: string) => {
ElMessageBox.confirm(t('deployPage.execTips', { command }), t('tips'), {
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),
@ -322,7 +319,7 @@ function handleAdd() {
processVisible.value = true
formData.value.id = 0
}
function handleEdit(data: ProjectProcessData['datagram']) {
function handleEdit(data: ProjectProcessData) {
processVisible.value = true
formData.value.id = data.id
formData.value.name = data.name

View File

@ -5,11 +5,7 @@
:fullscreen="$store.state.app.device === 'mobile'"
>
<el-row class="app-bar" type="flex" justify="end">
<el-button
type="primary"
icon="el-icon-plus"
@click="handleAddProjectTask"
/>
<el-button type="primary" :icon="Plus" @click="handleAddProjectTask" />
</el-row>
<el-table
v-loading="tableLoading"
@ -154,6 +150,7 @@
</TheCommitListDialog>
</template>
<script lang="ts" setup>
import { Plus } from '@element-plus/icons-vue'
import RepoURL from '@/components/RepoURL/index.vue'
import {
ProjectData,
@ -178,7 +175,7 @@ const props = defineProps({
default: false,
},
projectRow: {
type: Object as PropType<ProjectData['datagram']>,
type: Object as PropType<ProjectData>,
required: true,
},
})
@ -224,7 +221,7 @@ const handleAddProjectTask = () => {
commitDialogVisible.value = true
}
function submitTask(data: ProjectTaskData['datagram']) {
function submitTask(data: ProjectTaskData) {
const date = dayjs(data.date).format('YYYY-MM-DD HH:mm:ss')
new ProjectTaskAdd({ ...data, date })
.request()
@ -238,7 +235,7 @@ function submitTask(data: ProjectTaskData['datagram']) {
})
}
function removeProjectTask(data: ProjectTaskData['datagram']) {
function removeProjectTask(data: ProjectTaskData) {
ElMessageBox.confirm(
t('deployPage.removeProjectTaskTips', {
projectName: props.projectRow.name,

View File

@ -74,7 +74,6 @@
>
<template #default="scope">
<RepoURL
style="font-size: 12px"
:url="scope.row['url']"
:suffix="'/tree/' + scope.row['branch'].split('/').pop()"
:text="scope.row.branch"
@ -95,7 +94,6 @@
placement="top"
>
<RepoURL
style="font-size: 12px"
:url="scope.row['url']"
:suffix="'/commit/' + scope.row['commit']"
:text="
@ -367,6 +365,7 @@ import TheFileCompareDialog from './TheFileCompareDialog.vue'
import TheFileSyncDialog from './TheFileSyncDialog.vue'
import getTableHeight from '@/composables/tableHeight'
import type { ElForm } from 'element-plus'
import type { Sort } from 'element-plus/es/components/table/src/table/defaults'
import { ElMessageBox, ElMessage } from 'element-plus'
import { computed, watch, h, ref } from 'vue'
import { CommitData } from '@/api/repository'
@ -385,11 +384,11 @@ const processManagerDialogVisible = ref(false)
const reviewListDialogVisible = ref(false)
const dialogVisible = ref(false)
const searchProject = ref({ name: '', environment: '', autoDeploy: '' })
const selectedItem = ref({} as ProjectData['datagram'])
const selectedItem = ref({} as ProjectData)
const { tableHeight } = getTableHeight()
const tableDefaultSort = getTableSort()
const tableloading = ref(false)
const tableData = ref<DeployList['datagram']['list']>([])
const tableData = ref<any[]>([])
const pagination = ref({ page: 1, rows: 20 })
const greyServerForm = ref<InstanceType<typeof ElForm>>()
const greyServerFormProps = ref({
@ -401,7 +400,7 @@ const greyServerFormData = ref({
commit: '',
serverIds: [],
})
const greyServerFormRules = {
const greyServerFormRules = <InstanceType<typeof ElForm>['rules']>{
serverIds: [
{
type: 'array',
@ -478,7 +477,8 @@ function getList() {
new DeployList()
.request()
.then((response) => {
tableData.value = response.data.list.map((element) => {
tableData.value = response.data.list.map((item) => {
let element: any = item
element.progressPercentage = 0
element.tagType = 'info'
element.tagText = 'Not deploy'
@ -512,7 +512,9 @@ function getList() {
})
}
function sortChange({ prop, order }: { prop: string; order: string }) {
function sortChange(sort: Sort) {
let prop = <keyof ProjectData>sort.prop
let order = sort.order
setTableSort(prop, order)
if (!prop && !order) {
prop = 'id'
@ -522,13 +524,10 @@ function sortChange({ prop, order }: { prop: string; order: string }) {
prop = 'environment'
}
tableData.value = tableData.value.sort(
(row1: ProjectData['datagram'], row2: ProjectData['datagram']): number => {
let val1
let val2
if (order === 'ascending') {
val1 = row1[prop]
val2 = row2[prop]
} else if (order === 'descending') {
(row1: ProjectData, row2: ProjectData): number => {
let val1 = row1[prop]
let val2 = row2[prop]
if (order === 'descending') {
val1 = row2[prop]
val2 = row1[prop]
}
@ -552,7 +551,7 @@ function handlePageChange(page = 1) {
pagination.value.page = page
}
function handleDetail(data: ProjectData['datagram']) {
function handleDetail(data: ProjectData) {
selectedItem.value = data
dialogVisible.value = true
}
@ -564,7 +563,7 @@ function handleRebuilt() {
tableData.value[projectIndex].deployState = 1
}
function handleGreyPublish(data: CommitData['datagram']) {
function handleGreyPublish(data: CommitData) {
new ProjectServerList({ id: selectedItem.value.id })
.request()
.then((response) => {
@ -576,7 +575,7 @@ function handleGreyPublish(data: CommitData['datagram']) {
greyServerDialogVisible.value = true
}
const commandFunc: { [K: string]: (data: ProjectData['datagram']) => void } = {
const commandFunc: { [K: string]: (data: ProjectData) => void } = {
handleCommitCommand,
handleTagCommand,
handleTaskCommand,
@ -586,42 +585,42 @@ const commandFunc: { [K: string]: (data: ProjectData['datagram']) => void } = {
handleReviewCommand,
}
function handleCommitCommand(data: ProjectData['datagram']) {
function handleCommitCommand(data: ProjectData) {
selectedItem.value = data
commitDialogVisible.value = true
}
function handleTagCommand(data: ProjectData['datagram']) {
function handleTagCommand(data: ProjectData) {
selectedItem.value = data
tagDialogVisible.value = true
}
function handleTaskCommand(data: ProjectData['datagram']) {
function handleTaskCommand(data: ProjectData) {
selectedItem.value = data
taskListDialogVisible.value = true
}
function handleFileCompareCommand(data: ProjectData['datagram']) {
function handleFileCompareCommand(data: ProjectData) {
selectedItem.value = data
fileCompareDialogVisible.value = true
}
function handleFileSyncCommand(data: ProjectData['datagram']) {
function handleFileSyncCommand(data: ProjectData) {
selectedItem.value = data
fileSyncDialogVisible.value = true
}
function handleProcessManagerCommand(data: ProjectData['datagram']) {
function handleProcessManagerCommand(data: ProjectData) {
selectedItem.value = data
processManagerDialogVisible.value = true
}
function handleReviewCommand(data: ProjectData['datagram']) {
function handleReviewCommand(data: ProjectData) {
selectedItem.value = data
reviewListDialogVisible.value = true
}
function publish(data: ProjectData['datagram']) {
function publish(data: ProjectData) {
const id = data.id
let color = ''
if (data.environment === 1) {
@ -659,7 +658,7 @@ function publish(data: ProjectData['datagram']) {
})
}
function publishByCommit(data: CommitData['datagram']) {
function publishByCommit(data: CommitData) {
ElMessageBox.confirm(
t('deployPage.publishCommitTips', { commit: data.commit }),
t('tips'),
@ -690,7 +689,7 @@ function publishByCommit(data: CommitData['datagram']) {
})
}
function resetState(data: ProjectData['datagram']) {
function resetState(data: ProjectData) {
ElMessageBox.confirm(t('deployPage.resetStateTips'), t('tips'), {
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),
@ -758,10 +757,10 @@ function enterToBR(detail: string) {
return detail ? detail.replace(/\n|(\r\n)/g, '<br>') : ''
}
function getTableSort(): { prop: string; order: string } {
function getTableSort(): Sort {
const sortJsonStr = localStorage.getItem('deploy-table-sort')
if (sortJsonStr) {
return JSON.parse(sortJsonStr) as { prop: string; order: string }
return <Sort>JSON.parse(sortJsonStr)
}
return { prop: 'id', order: 'descending' }
}

View File

@ -239,7 +239,12 @@ export default { name: 'PublishLog' }
</script>
<script lang="ts" setup>
import { PublishLogData, PublishLogList, PublishLogTotal } from '@/api/log'
import { DeployTrace, DeployTraceDetail, PublishTraceData } from '@/api/deploy'
import {
DeployTrace,
DeployTraceDetail,
PublishTraceData,
PublishTraceExt,
} from '@/api/deploy'
import { parseTime } from '@/utils'
import getTableHeight from '@/composables/tableHeight'
import { ref } from 'vue'
@ -255,9 +260,9 @@ const pagination = ref({ page: 1, rows: 17, total: 0 })
const traceLoading = ref(false)
const traceDetail = ref({} as Record<number, string>)
const activeRomoteTracePane = ref('')
const publishLocalTraceList = ref<DeployTrace['datagram']['list']>([])
const publishLocalTraceList = ref<(PublishTraceData & PublishTraceExt)[]>([])
const publishRemoteTraceList = ref(
{} as Record<string, DeployTrace['datagram']['list']>
{} as Record<string, (PublishTraceData & PublishTraceExt)[]>
)
getList()
getTotal()
@ -288,7 +293,7 @@ function handlePageChange(val = 1) {
pagination.value.page = val
getList()
}
function handleDetail(data: PublishLogData['datagram']) {
function handleDetail(data: PublishLogData) {
dialogVisible.value = true
traceLoading.value = true
new DeployTrace({ lastPublishToken: data.token })
@ -298,7 +303,7 @@ function handleDetail(data: PublishLogData['datagram']) {
if (element.ext !== '') {
Object.assign(element, JSON.parse(element.ext))
}
return element
return <PublishTraceData & PublishTraceExt>element
})
publishLocalTraceList.value = publishTraceList.filter(
@ -322,7 +327,7 @@ function handleDetail(data: PublishLogData['datagram']) {
})
}
function getPublishTraceDetail(data: PublishTraceData['datagram']) {
function getPublishTraceDetail(data: PublishTraceData) {
traceDetail.value[data.id] = ''
new DeployTraceDetail({ id: data.id }).request().then((response) => {
traceDetail.value[data.id] =

View File

@ -119,7 +119,7 @@ function handlePageChange(val = 1) {
pagination.value.page = val
getList()
}
function handleRecord(data: TerminalLogData['datagram']) {
function handleRecord(data: TerminalLogData) {
recordViewer.value = true
const castUrl = `${location.origin}${
import.meta.env.VITE_APP_BASE_API

View File

@ -19,9 +19,8 @@
<span class="svg-container">
<svg-icon icon-class="user" />
</span>
<el-input
<input
v-model="loginForm.account"
size="medium"
placeholder="account"
name="account"
type="text"
@ -34,11 +33,10 @@
<span class="svg-container">
<svg-icon icon-class="password" />
</span>
<el-input
<input
:key="passwordType"
v-model="loginForm.password"
:type="passwordType"
size="medium"
placeholder="password"
name="password"
tabindex="2"
@ -54,7 +52,6 @@
<el-button
:loading="loading"
size="medium"
type="primary"
class="login-form-btn"
style="width: 100%; margin-bottom: 30px"
@ -169,32 +166,29 @@ $light_gray: #fff;
$cursor: #2f2f2f;
@supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
.login-container .el-input input {
.login-container input {
color: $cursor;
}
}
/* reset element-ui css */
.login-container {
.el-input {
display: inline-block;
height: 42px;
input {
width: 85%;
background: $bg;
border: none;
-webkit-appearance: none;
padding: 12px 5px 12px 15px;
color: #2f2f2f;
height: 40px;
caret-color: $cursor;
input {
background: $bg;
border: 0px;
-webkit-appearance: none;
border-radius: 0px;
padding: 12px 5px 12px 15px;
color: #2f2f2f;
height: 40px;
caret-color: $cursor;
&:-webkit-autofill {
box-shadow: 0 0 0px 1000px $bg inset !important;
-webkit-text-fill-color: $cursor !important;
}
&:-webkit-autofill {
box-shadow: 0 0 0px 1000px $bg inset !important;
-webkit-text-fill-color: $cursor !important;
}
&:focus {
outline: none;
}
}
.el-form-item__error {

View File

@ -247,13 +247,13 @@ function handleAdd() {
dialogVisible.value = true
}
function handleEdit(data: UserData['datagram']) {
function handleEdit(data: UserData) {
restoreFormData()
formData.value = Object.assign(formData.value, data)
dialogVisible.value = true
}
function handleRemove(data: UserData['datagram']) {
function handleRemove(data: UserData) {
ElMessageBox.confirm(
t('memberPage.removeUserTips', { name: data.name }),
t('tips'),

View File

@ -335,12 +335,12 @@ function handleAdd() {
dialogVisible.value = true
}
function handleEdit(data: MonitorData['datagram']) {
function handleEdit(data: MonitorData) {
formData.value = Object.assign({}, data)
dialogVisible.value = true
}
function handleToggle(data: MonitorData['datagram']) {
function handleToggle(data: MonitorData) {
if (data.state === 1) {
ElMessageBox.confirm(
t('monitorPage.toggleStateTips', {
@ -370,7 +370,7 @@ function handleToggle(data: MonitorData['datagram']) {
}
}
function handleRemove(data: MonitorData['datagram']) {
function handleRemove(data: MonitorData) {
ElMessageBox.confirm(
t('monitorPage.removeMontiorTips', {
monitorName: data.name,

View File

@ -233,7 +233,7 @@ function add() {
})
}
function remove(data: NamespaceUserData['datagram']) {
function remove(data: NamespaceUserData) {
ElMessageBox.confirm(t('namespacePage.removeUserTips'), t('tips'), {
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),

View File

@ -129,7 +129,7 @@ const dialogUserVisible = ref(false)
const tableLoading = ref(false)
const tableData = ref<NamespaceList['datagram']['list']>([])
const pagination = ref({ page: 1, rows: 17, total: 0 })
const selectedItem = ref<NamespaceData['datagram']>()
const selectedItem = ref<NamespaceData>()
const form = ref<InstanceType<typeof ElForm>>()
const tempFormData = { id: 0, name: '' }
const formData = ref(tempFormData)
@ -168,12 +168,12 @@ function handleAdd() {
dialogVisible.value = true
}
function handleEdit(data: NamespaceData['datagram']) {
function handleEdit(data: NamespaceData) {
formData.value = Object.assign({}, data)
dialogVisible.value = true
}
function handleUser(data: NamespaceData['datagram']) {
function handleUser(data: NamespaceData) {
selectedItem.value = data
dialogUserVisible.value = true
}

View File

@ -157,7 +157,7 @@ const tableData = ref<ProjectServerList['datagram']['list']>([])
const form = ref<InstanceType<typeof ElForm>>()
const formProps = ref({ disabled: false })
const formData = ref({ projectId: 0, serverIds: [] })
const formRules = {
const formRules = <InstanceType<typeof ElForm>['rules']>{
serverIds: [
{
type: 'array',
@ -203,7 +203,7 @@ function add() {
})
}
function remove(data: ProjectServerData['datagram']) {
function remove(data: ProjectServerData) {
ElMessageBox.confirm(t('projectPage.removeServerTips'), t('tips'), {
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),

View File

@ -171,7 +171,7 @@ const tableData = ref<ProjectUserList['datagram']['list']>([])
const form = ref<InstanceType<typeof ElForm>>()
const formProps = ref({ disabled: false })
const formData = ref({ projectId: 0, userIds: [] })
const formRules = {
const formRules = <InstanceType<typeof ElForm>['rules']>{
userIds: [
{
type: 'array',
@ -220,7 +220,7 @@ function add() {
})
}
function remove(data: ProjectUserData['datagram']) {
function remove(data: ProjectUserData) {
ElMessageBox.confirm(t('namespacePage.removeUserTips'), t('tips'), {
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),

View File

@ -202,7 +202,7 @@
@change="formProps.branch = []"
/>
<el-button
:icon="'el-icon-view'"
icon="el-icon-view"
type="success"
:loading="formProps.pinging"
@click="pingRepos"
@ -720,7 +720,7 @@ const dialogServerVisible = ref(false)
const dialogUserVisible = ref(false)
const serverOption = ref<ServerOption['datagram']['list']>([])
const userOption = ref<NamespaceUserOption['datagram']['list']>([])
const selectedItem = ref({} as ProjectData['datagram'])
const selectedItem = ref({} as ProjectData)
const { tableHeight } = getTableHeight()
const tableloading = ref(false)
const tableData = ref<ProjectList['datagram']['list']>([])
@ -876,7 +876,7 @@ function handleAdd() {
dialogVisible.value = true
}
function handleEdit(data: ProjectData['datagram']) {
function handleEdit(data: ProjectData) {
formData.value = Object.assign({}, data)
formProps.value.symlink = formData.value.symlinkPath !== ''
formProps.value.showServers = formProps.value.showUsers = false
@ -896,7 +896,7 @@ function handleEdit(data: ProjectData['datagram']) {
dialogVisible.value = true
}
function handleCopy(data: ProjectData['datagram']) {
function handleCopy(data: ProjectData) {
handleEdit(data)
formData.value.id = 0
formData.value.serverIds = []
@ -904,7 +904,7 @@ function handleCopy(data: ProjectData['datagram']) {
formProps.value.showServers = formProps.value.showUsers = true
}
function handleRemove(data: ProjectData['datagram']) {
function handleRemove(data: ProjectData) {
ElMessageBox.confirm(
t('projectPage.removeProjectTips', {
projectName: data.name,
@ -954,19 +954,19 @@ function handleSymlink(value: boolean) {
}
}
function handleAutoDeploy(data: ProjectData['datagram']) {
function handleAutoDeploy(data: ProjectData) {
dialogAutoDeployVisible.value = true
selectedItem.value = data
autoDeployFormData.value.id = data.id
autoDeployFormData.value.autoDeploy = data.autoDeploy
}
function handleServer(data: ProjectData['datagram']) {
function handleServer(data: ProjectData) {
selectedItem.value = data
dialogServerVisible.value = true
}
function handleUser(data: ProjectData['datagram']) {
function handleUser(data: ProjectData) {
selectedItem.value = data
dialogUserVisible.value = true
}

View File

@ -454,7 +454,7 @@ const shortcuts = [
},
]
const datetimeRange = ref<Dayjs[]>([])
const tableData = ref<ServerMonitorData['datagram'][]>([])
const tableData = ref<ServerMonitorData[]>([])
const tableLoading = ref(false)
const form = ref<InstanceType<typeof ElForm>>()
const tempFormData = {
@ -507,12 +507,12 @@ function handleAdd() {
monitorDialogVisible.value = true
}
function handleEdit(data: ServerMonitorData['datagram']) {
function handleEdit(data: ServerMonitorData) {
formData.value = Object.assign({}, data)
monitorDialogVisible.value = true
}
function handleDelete(data: ServerMonitorData['datagram']) {
function handleDelete(data: ServerMonitorData) {
ElMessageBox.confirm(
t('serverPage.removeMonitorTips', {
item: data.item,

View File

@ -261,12 +261,12 @@ function handleAdd() {
dialogVisible.value = true
}
function handleEdit(data: CronData['datagram']) {
function handleEdit(data: CronData) {
formData.value = data
dialogVisible.value = true
}
function handleRemove(data: CronData['datagram']) {
function handleRemove(data: CronData) {
ElMessageBox.confirm(t('serverPage.removeUserTips'), t('tips'), {
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),

View File

@ -187,7 +187,7 @@
placeholder="/root/.ssh/id_rsa"
/>
<el-button
:icon="'el-icon-copy-document'"
icon="el-icon-copy-document"
type="success"
:loading="formProps.copyPubLoading"
:disabled="formData.path === ''"
@ -326,7 +326,7 @@ const formProps = ref({
copyPubLoading: false,
disabled: false,
})
const formRules = {
const formRules = <InstanceType<typeof ElForm>['rules']>{
namespaceId: [
{ required: true, message: 'Namespace required', trigger: 'blur' },
],
@ -407,7 +407,7 @@ function handlePageChange(val = 1) {
getList()
}
function handleSelectionChange(value: ServerData['datagram'][]) {
function handleSelectionChange(value: ServerData[]) {
selectedItems.value = value
}
@ -438,18 +438,18 @@ function handleAdd() {
dialogVisible.value = true
}
function handleEdit(data: ServerData['datagram']) {
function handleEdit(data: ServerData) {
formData.value = Object.assign({}, data)
dialogVisible.value = true
}
function handleCopy(data: ServerData['datagram']) {
function handleCopy(data: ServerData) {
formData.value = Object.assign({}, data)
formData.value.id = 0
dialogVisible.value = true
}
function handleMonitor(data: ServerData['datagram']) {
function handleMonitor(data: ServerData) {
router.push({ path: '/server/agent', query: { serverId: data.id } })
}

View File

@ -62,7 +62,6 @@
text-overflow: ellipsis;
overflow: hidden;
"
size="medium"
@click="selectServer(server)"
>
<span :title="server.name + '(' + server.description + ')'">