diff --git a/.gitignore b/.gitignore index 806a9df7..3fda4751 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,6 @@ gen /other /dev-sidecar-test /packages/core/certd/yarn.lock +/packages/test +/test/own /pnpm-lock.yaml diff --git a/lerna.json b/lerna.json new file mode 100644 index 00000000..e69de29b diff --git a/packages/core/api/package.json b/packages/core/api/package.json index 9c9bf721..aed4a79c 100644 --- a/packages/core/api/package.json +++ b/packages/core/api/package.json @@ -1,6 +1,6 @@ { "name": "@certd/api", - "version": "0.2.1", + "version": "0.3.0", "description": "", "type": "module", "author": "Greper", diff --git a/packages/core/certd/package.json b/packages/core/certd/package.json index 7637b870..a63abd35 100644 --- a/packages/core/certd/package.json +++ b/packages/core/certd/package.json @@ -1,6 +1,6 @@ { "name": "@certd/certd", - "version": "0.2.1", + "version": "0.3.0", "description": "a ssl cert keeper", "main": "src/index.js", "scripts": { @@ -10,8 +10,8 @@ "author": "Greper", "license": "MIT", "dependencies": { - "@certd/acme-client": "^0.2.0", - "@certd/api": "^0.2.1", + "@certd/acme-client": "^0.3.0", + "@certd/api": "^0.3.0", "dayjs": "^1.9.7", "lodash-es": "^4.17.20", "node-forge": "^0.10.0" diff --git a/packages/core/certd/src/acme.js b/packages/core/certd/src/acme.js index 8e83f345..6ad6a64d 100644 --- a/packages/core/certd/src/acme.js +++ b/packages/core/certd/src/acme.js @@ -5,6 +5,9 @@ const logger = util.logger export class AcmeService { constructor (store) { this.store = store + acme.setLogger((text) => { + logger.info(text) + }) } async getAccountConfig (email) { diff --git a/packages/core/executor/package.json b/packages/core/executor/package.json index 326170e1..ca2e0cd0 100644 --- a/packages/core/executor/package.json +++ b/packages/core/executor/package.json @@ -1,6 +1,6 @@ { "name": "@certd/executor", - "version": "0.2.2", + "version": "0.3.0", "description": "", "main": "src/index.js", "scripts": { @@ -10,15 +10,15 @@ }, "type": "module", "dependencies": { - "@certd/api": "^0.2.1", - "@certd/certd": "^0.2.1", + "@certd/api": "^0.3.0", + "@certd/certd": "^0.3.0", "dayjs": "^1.9.7", "lodash-es": "^4.17.20" }, "devDependencies": { - "@certd/plugin-aliyun": "^0.2.2", - "@certd/plugin-host": "^0.2.1", - "@certd/plugin-tencent": "^0.2.2", + "@certd/plugin-aliyun": "^0.3.0", + "@certd/plugin-host": "^0.3.0", + "@certd/plugin-tencent": "^0.3.0", "@rollup/plugin-commonjs": "^17.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^11.0.1", diff --git a/packages/plugins/plugin-aliyun/package.json b/packages/plugins/plugin-aliyun/package.json index a0df74f9..5dc585f0 100644 --- a/packages/plugins/plugin-aliyun/package.json +++ b/packages/plugins/plugin-aliyun/package.json @@ -1,6 +1,6 @@ { "name": "@certd/plugin-aliyun", - "version": "0.2.2", + "version": "0.3.0", "description": "", "type": "module", "main": "./dist/index.cjs", @@ -12,13 +12,13 @@ "@alicloud/cs20151215": "^3.0.3", "@alicloud/openapi-client": "^0.4.0", "@alicloud/pop-core": "^1.7.10", - "@certd/api": "^0.2.1", + "@certd/api": "^0.3.0", "dayjs": "^1.9.7", "lodash-es": "^4.17.20" }, "devDependencies": { - "@certd/certd": "^0.2.1", - "@certd/plugin-common": "^0.2.1", + "@certd/certd": "^0.3.0", + "@certd/plugin-common": "^0.3.0", "chai": "^4.2.0", "eslint": "^7.15.0", "eslint-config-standard": "^16.0.2", diff --git a/packages/plugins/plugin-common/package.json b/packages/plugins/plugin-common/package.json index 02ac14ae..e679f93d 100644 --- a/packages/plugins/plugin-common/package.json +++ b/packages/plugins/plugin-common/package.json @@ -1,6 +1,6 @@ { "name": "@certd/plugin-common", - "version": "0.2.1", + "version": "0.3.0", "description": "", "type": "module", "main": "./dist/index.cjs", @@ -13,7 +13,7 @@ "kubernetes-client": "^9.0.0" }, "devDependencies": { - "@certd/certd": "^0.2.1", + "@certd/certd": "^0.3.0", "chai": "^4.2.0", "eslint": "^7.15.0", "eslint-config-standard": "^16.0.2", diff --git a/packages/plugins/plugin-host/package.json b/packages/plugins/plugin-host/package.json index 6bb3dc86..6d1ceb86 100644 --- a/packages/plugins/plugin-host/package.json +++ b/packages/plugins/plugin-host/package.json @@ -1,6 +1,6 @@ { "name": "@certd/plugin-host", - "version": "0.2.1", + "version": "0.3.0", "description": "", "type": "module", "main": "./dist/index.cjs", @@ -9,13 +9,13 @@ "build": "rollup -c" }, "dependencies": { - "@certd/api": "^0.2.1", + "@certd/api": "^0.3.0", "dayjs": "^1.9.7", "lodash-es": "^4.17.20", "ssh2": "^0.8.9" }, "devDependencies": { - "@certd/certd": "^0.2.1", + "@certd/certd": "^0.3.0", "chai": "^4.2.0", "eslint": "^7.15.0", "eslint-config-standard": "^16.0.2", diff --git a/packages/plugins/plugin-tencent/package.json b/packages/plugins/plugin-tencent/package.json index b7ad98ca..9623ee48 100644 --- a/packages/plugins/plugin-tencent/package.json +++ b/packages/plugins/plugin-tencent/package.json @@ -1,6 +1,6 @@ { "name": "@certd/plugin-tencent", - "version": "0.2.2", + "version": "0.3.0", "description": "", "type": "module", "main": "./dist/index.cjs", @@ -9,15 +9,15 @@ "build": "rollup -c" }, "dependencies": { - "@certd/api": "^0.2.1", - "@certd/plugin-common": "^0.2.1", + "@certd/api": "^0.3.0", + "@certd/plugin-common": "^0.3.0", "dayjs": "^1.9.7", "kubernetes-client": "^9.0.0", "lodash-es": "^4.17.20", "tencentcloud-sdk-nodejs": "^4.0.44" }, "devDependencies": { - "@certd/certd": "^0.2.1", + "@certd/certd": "^0.3.0", "chai": "^4.2.0", "eslint": "^7.15.0", "eslint-config-standard": "^16.0.2", diff --git a/packages/ui/certd-server/package.json b/packages/ui/certd-server/package.json index fcb541d0..4ab36c58 100644 --- a/packages/ui/certd-server/package.json +++ b/packages/ui/certd-server/package.json @@ -10,11 +10,11 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { - "@certd/api": "^0.2.1", - "@certd/executor": "^0.2.2", - "@certd/plugin-aliyun": "^0.2.2", - "@certd/plugin-host": "^0.2.1", - "@certd/plugin-tencent": "^0.2.2", + "@certd/api": "^0.3.0", + "@certd/executor": "^0.3.0", + "@certd/plugin-aliyun": "^0.3.0", + "@certd/plugin-host": "^0.3.0", + "@certd/plugin-tencent": "^0.3.0", "compressing": "^1.5.1", "debug": "^4.1.1", "fs-extra": "^9.1.0", diff --git a/packages/ui/certd-server/templates/certd-run/index.js b/packages/ui/certd-server/templates/certd-run/index.js index 73e94cda..2d5c8500 100644 --- a/packages/ui/certd-server/templates/certd-run/index.js +++ b/packages/ui/certd-server/templates/certd-run/index.js @@ -3,16 +3,16 @@ import PluginAliyun from '@certd/plugin-aliyun' import PluginTencent from '@certd/plugin-tencent' import PluginHost from '@certd/plugin-host' +// import options +import { createRequire } from 'module' + // 安装默认插件和授权提供者 PluginAliyun.install() PluginTencent.install() PluginHost.install() - -// import options -import { createRequire } from 'module' const require = createRequire(import.meta.url) -const options =require('./options.json') +const options = require('./options.json') -//开始执行 +// 开始执行 const executor = new Executor() await executor.run(options) diff --git a/packages/ui/certd-server/templates/certd-run/package.json b/packages/ui/certd-server/templates/certd-run/package.json index eaa12c6b..9600504c 100644 --- a/packages/ui/certd-server/templates/certd-run/package.json +++ b/packages/ui/certd-server/templates/certd-run/package.json @@ -14,9 +14,9 @@ "author": "greper", "license": "MIT", "dependencies": { - "@certd/executor": "^0.1.15", - "@certd/plugin-aliyun": "^0.1.15", - "@certd/plugin-host": "^0.1.15", - "@certd/plugin-tencent": "^0.1.15" + "@certd/executor": "^0.3.0", + "@certd/plugin-aliyun": "^0.3.0", + "@certd/plugin-host": "^0.3.0", + "@certd/plugin-tencent": "^0.3.0" } } diff --git a/packages/ui/certd-ui/.env b/packages/ui/certd-ui/.env index 15f7db41..67f85a03 100644 --- a/packages/ui/certd-ui/.env +++ b/packages/ui/certd-ui/.env @@ -1 +1 @@ -VUE_APP_API=/api +VITE_APP_API=/api diff --git a/packages/ui/certd-ui/.eslintignore b/packages/ui/certd-ui/.eslintignore new file mode 100644 index 00000000..eb79dd5f --- /dev/null +++ b/packages/ui/certd-ui/.eslintignore @@ -0,0 +1,2 @@ +node_modules +.idea diff --git a/packages/ui/certd-ui/.eslintrc.js b/packages/ui/certd-ui/.eslintrc.js index c1f76fb9..a10cc42d 100644 --- a/packages/ui/certd-ui/.eslintrc.js +++ b/packages/ui/certd-ui/.eslintrc.js @@ -1,28 +1,76 @@ module.exports = { root: true, env: { - node: true + browser: true, + node: true, + es6: true + }, + parser: "vue-eslint-parser", + parserOptions: { + parser: "@typescript-eslint/parser", + ecmaVersion: 2020, + sourceType: "module", + jsxPragma: "React", + ecmaFeatures: { + jsx: true, + tsx: true + } }, extends: [ - 'plugin:vue/vue3-essential', - '@vue/standard' + "plugin:vue/vue3-recommended", + "plugin:@typescript-eslint/recommended", + "plugin:prettier/recommended", + "prettier" ], - parserOptions: { - parser: 'babel-eslint' - }, rules: { - 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', - 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' - }, - overrides: [ - { - files: [ - '**/__tests__/*.{j,t}s?(x)', - '**/tests/unit/**/*.spec.{j,t}s?(x)' - ], - env: { - mocha: true - } - } - ] -} + //"max-len": [0, 200, 2, { ignoreUrls: true }], + "@typescript-eslint/ban-ts-ignore": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/explicit-module-boundary-types": "off" + // "@typescript-eslint/no-unused-vars": [ + // "error", + // { + // argsIgnorePattern: "^h$", + // varsIgnorePattern: "^h$", + // }, + // ], + // "no-unused-vars": [ + // "error", + // { + // argsIgnorePattern: "^h$", + // varsIgnorePattern: "^h$", + // }, + // ], + // "vue/custom-event-name-casing": "off", + // "no-use-before-define": "off", + // "space-before-function-paren": "off", + + // "vue/attributes-order": "off", + // "vue/one-component-per-file": "off", + // "vue/html-closing-bracket-newline": "off", + // "vue/max-attributes-per-line": "off", + // "vue/multiline-html-element-content-newline": "off", + // "vue/singleline-html-element-content-newline": "off", + // "vue/attribute-hyphenation": "off", + // "vue/require-default-prop": "off", + // "vue/html-self-closing": [ + // "error", + // { + // html: { + // void: "always", + // normal: "never", + // component: "always", + // }, + // svg: "always", + // math: "always", + // }, + // ], + } +}; diff --git a/packages/ui/certd-ui/.gitignore b/packages/ui/certd-ui/.gitignore index cbb386fa..980be95d 100644 --- a/packages/ui/certd-ui/.gitignore +++ b/packages/ui/certd-ui/.gitignore @@ -1,7 +1,11 @@ -.vscode/ -node_modules/ -npm-debug.log -yarn-error.log +node_modules +.DS_Store +dist +dist-ssr +*.local +/stats.html yarn.lock -package-lock.json +.idea /.idea/ +yarn-error.log +vite-profile.cpuprofile diff --git a/packages/ui/certd-ui/.npmignore b/packages/ui/certd-ui/.npmignore new file mode 100644 index 00000000..b6c09bbd --- /dev/null +++ b/packages/ui/certd-ui/.npmignore @@ -0,0 +1,2 @@ +node_modules +/stats.html diff --git a/packages/ui/certd-ui/.prettierrc b/packages/ui/certd-ui/.prettierrc new file mode 100644 index 00000000..7944aa9b --- /dev/null +++ b/packages/ui/certd-ui/.prettierrc @@ -0,0 +1,5 @@ +{ + + "trailingComma": "none", + "printWidth": 120 +} diff --git a/packages/ui/certd-ui/index.html b/packages/ui/certd-ui/index.html new file mode 100644 index 00000000..e4e27302 --- /dev/null +++ b/packages/ui/certd-ui/index.html @@ -0,0 +1,21 @@ + + + + + + + certd + + + +
+
+
+
+
+
+ +
+ + + diff --git a/packages/ui/certd-ui/package.json b/packages/ui/certd-ui/package.json index 65e88bc0..fcc46085 100644 --- a/packages/ui/certd-ui/package.json +++ b/packages/ui/certd-ui/package.json @@ -1,62 +1,88 @@ { "name": "@certd/certd-ui", "version": "0.2.1", - "private": false, + "private": true, "scripts": { - "dev": "vue-cli-service serve", - "build": "vue-cli-service build", - "test:unit": "vue-cli-service test:unit", - "lint": "vue-cli-service lint" + "dev": "vite", + "dev:pm": "vite --mode pm", + "dev:force": "vite --force", + "debug": "vite --mode debug", + "debug:pm": "vite --mode debugpm", + "debug:force": "vite --force --mode debug", + "build": "vite build ", + "serve": "vite preview", + "preview": "vite preview", + "pretty-quick": "pretty-quick", + "lint-fix": "eslint --fix --ext .js --ext .jsx --ext .vue src/", + "upgrade": "yarn upgrade-interactive --latest" }, + "author": "Greper", + "license": "MIT", "dependencies": { + "@ant-design/colors": "^6.0.0", "@ant-design/icons-vue": "^6.0.1", - "ant-design-vue": "^2.0.0", - "axios": "^0.21.1", - "core-js": "^3.8.1", - "lodash-es": "^4.17.20", - "vue": "^3.0.4", - "vue-i18n": "^9.0.0-rc.2", - "vue-router": "^4.0.1" + "ant-design-vue": "^3.2.12", + "axios": "^0.27.2", + "core-js": "^3.25.4", + "dayjs": "^1.11.5", + "lodash-es": "^4.17.15", + "mitt": "^3.0.0", + "vue": "^3.2.40", + "vue-i18n": "^9.2.2", + "vue-router": "^4.1.5" }, "devDependencies": { - "@babel/core": "^7.12.10", - "@babel/eslint-parser": "^7.12.1", - "@vue/cli-plugin-babel": "~5.0.0-alpha.3", - "@vue/cli-plugin-eslint": "~5.0.0-alpha.3", - "@vue/cli-plugin-router": "~5.0.0-alpha.3", - "@vue/cli-plugin-unit-mocha": "~5.0.0-alpha.3", - "@vue/cli-plugin-webpack-4": "^5.0.0-alpha.3", - "@vue/cli-service": "~5.0.0-alpha.3", - "@vue/compiler-sfc": "^3.0.4", - "@vue/eslint-config-standard": "^6.0.0", - "@vue/test-utils": "^2.0.0-0", - "babel-eslint": "^10.1.0", - "babel-plugin-import": "^1.13.3", - "chai": "^4.2.0", - "compression-webpack-plugin": "^5.0.1", - "eslint": "^7.15.0", - "eslint-plugin-import": "^2.20.2", + "@rollup/plugin-commonjs": "^22.0.2", + "@rollup/plugin-node-resolve": "^14.1.0", + "@types/chai": "^4.3.3", + "@types/mocha": "^10.0.0", + "@types/node": "^18.8.0", + "@typescript-eslint/eslint-plugin": "^5.38.1", + "@typescript-eslint/parser": "^5.38.1", + "@vitejs/plugin-legacy": "^2.2.0", + "@vitejs/plugin-vue": "^3.1.2", + "@vitejs/plugin-vue-jsx": "^2.0.1", + "@vue/compiler-sfc": "^3.2.40", + "@vue/eslint-config-typescript": "^11.0.2", + "@vue/test-utils": "^2.1.0", + "autoprefixer": "^10.4.12", + "caller-path": "^4.0.0", + "chai": "^4.1.2", + "eslint": "^8.24.0", + "eslint-config-prettier": "^8.1.0", + "eslint-plugin-import": "^2.26.0", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-standard": "^5.0.0", - "eslint-plugin-vue": "^7.2.0", - "less": "^3.0.4", - "less-loader": "^5.0.0", - "lint-staged": "^9.5.0", - "postcss": "^8.2.4", - "webpack": "^4.0.0" + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-promise": "^6.0.1", + "eslint-plugin-vue": "^9.5.1", + "less": "^4.1.3", + "less-loader": "^11.0.0", + "lint-staged": "^13.0.3", + "postcss": "^8.4.17", + "prettier": "2.7.1", + "rimraf": "^3.0.2", + "rollup": "^2.79.1", + "rollup-plugin-visualizer": "^5.8.2", + "stylelint": "^14.13.0", + "stylelint-config-prettier": "^9.0.3", + "stylelint-order": "^5.0.0", + "vite": "^3.1.4", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-optimize-persist": "^0.1.2", + "vite-plugin-package-config": "^0.1.1", + "vue-eslint-parser": "^9.1.0" }, - "resolutions": { - "@vue/cli-*/webpack": "^4.0.0" + "husky": { + "hooks": { + "pre-commit": "pretty-quick --staged" + } }, - "gitHooks": { - "pre-commit": "lint-staged" - }, - "lint-staged": { - "*.{js,jsx,vue}": [ - "vue-cli-service lint", - "git add" - ] - }, - "gitHead": "5fbd7742665c0a949333d805153e9b6af91c0a71" + "gitHead": "9c2162697f3affea22c9a8cbc0ca74f4034ab27e", + "vite": { + "optimizeDeps": { + "include": [ + "@iconify/iconify" + ] + } + } } diff --git a/packages/ui/certd-ui/public/public/favicon.ico b/packages/ui/certd-ui/public/public/favicon.ico new file mode 100644 index 00000000..df36fcfb Binary files /dev/null and b/packages/ui/certd-ui/public/public/favicon.ico differ diff --git a/packages/ui/certd-ui/public/public/images/logo-certd/logo.svg b/packages/ui/certd-ui/public/public/images/logo-certd/logo.svg new file mode 100644 index 00000000..edcdefbe --- /dev/null +++ b/packages/ui/certd-ui/public/public/images/logo-certd/logo.svg @@ -0,0 +1,7 @@ + + + diff --git a/packages/ui/certd-ui/public/public/images/logo-certd/rect-black.svg b/packages/ui/certd-ui/public/public/images/logo-certd/rect-black.svg new file mode 100644 index 00000000..19bf439f --- /dev/null +++ b/packages/ui/certd-ui/public/public/images/logo-certd/rect-black.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 让你的证书永不过期 + + + diff --git a/packages/ui/certd-ui/public/public/images/logo-certd/rect.svg b/packages/ui/certd-ui/public/public/images/logo-certd/rect.svg new file mode 100644 index 00000000..acc2f41c --- /dev/null +++ b/packages/ui/certd-ui/public/public/images/logo-certd/rect.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 让你的证书永不过期 + + + diff --git a/packages/ui/certd-ui/public/public/images/logo-certd/square.svg b/packages/ui/certd-ui/public/public/images/logo-certd/square.svg new file mode 100644 index 00000000..026dd978 --- /dev/null +++ b/packages/ui/certd-ui/public/public/images/logo-certd/square.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/packages/ui/certd-ui/public/public/images/logo/logo.svg b/packages/ui/certd-ui/public/public/images/logo/logo.svg new file mode 100644 index 00000000..edcdefbe --- /dev/null +++ b/packages/ui/certd-ui/public/public/images/logo/logo.svg @@ -0,0 +1,7 @@ + + + diff --git a/packages/ui/certd-ui/public/public/images/logo/rect-black.svg b/packages/ui/certd-ui/public/public/images/logo/rect-black.svg new file mode 100644 index 00000000..a57352ec --- /dev/null +++ b/packages/ui/certd-ui/public/public/images/logo/rect-black.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/packages/ui/certd-ui/public/public/images/logo/rect.svg b/packages/ui/certd-ui/public/public/images/logo/rect.svg new file mode 100644 index 00000000..acc2f41c --- /dev/null +++ b/packages/ui/certd-ui/public/public/images/logo/rect.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 让你的证书永不过期 + + + diff --git a/packages/ui/certd-ui/public/public/images/logo/square.svg b/packages/ui/certd-ui/public/public/images/logo/square.svg new file mode 100644 index 00000000..1b1395a1 --- /dev/null +++ b/packages/ui/certd-ui/public/public/images/logo/square.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/packages/ui/certd-ui/public/public/index.css b/packages/ui/certd-ui/public/public/index.css new file mode 100644 index 00000000..0950b050 --- /dev/null +++ b/packages/ui/certd-ui/public/public/index.css @@ -0,0 +1,12 @@ +html, body, #app { height: 100%; margin: 0; padding: 0; width: 100%;} +.fs-bootstrap { background-color: #474949; height: 100%; display: flex; flex-direction: column;position: fixed;width: 100% } +.fs-bootstrap__main {flex:1; user-select: none; width: 100%; flex-grow: 1; display: flex; justify-content: center; align-items: center; flex-direction: column; } +.fs-bootstrap__footer { width: 100%; flex-grow: 0; text-align: center; padding: 10px 0; } +.fs-bootstrap__footer > a { font-size: 12px; color: #ABABAB; text-decoration: none; } +.fs-bootstrap__loading {box-sizing: border-box; height: 50px; width: 50px; margin-bottom: 5px;border:5px solid #333333;border-bottom:#aaa 5px solid; + border-radius:1000px; animation:load 1.1s infinite linear;-webkit-animation:load 1.1s infinite linear;-moz-animation:load 1.1s infinite linear; -o-animation:load 1.1s infinite linear; +} +@keyframes load {from {transform:rotate(0deg);-ms-transform:rotate(0deg);}to { transform:rotate(360deg);-ms-transform:rotate(360deg); } +}@-webkit-keyframes load {from {-webkit-transform:rotate(0deg); }to { -webkit-transform:rotate(360deg);} + }@-moz-keyframes load { from { -moz-transform:rotate(0deg); } to { -moz-transform:rotate(360deg);} + }@-o-keyframes load { from { -o-transform:rotate(0deg);} to { -o-transform:rotate(360deg);}} diff --git a/packages/ui/certd-ui/public/public/index.html b/packages/ui/certd-ui/public/public/index.html new file mode 100644 index 00000000..3e5a1396 --- /dev/null +++ b/packages/ui/certd-ui/public/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +
+ + + diff --git a/packages/ui/certd-ui/public/public/logo.svg b/packages/ui/certd-ui/public/public/logo.svg new file mode 100644 index 00000000..1b1395a1 --- /dev/null +++ b/packages/ui/certd-ui/public/public/logo.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/packages/ui/certd-ui/src/App.vue b/packages/ui/certd-ui/src/App.vue index d0d9a9e8..577d0083 100644 --- a/packages/ui/certd-ui/src/App.vue +++ b/packages/ui/certd-ui/src/App.vue @@ -16,7 +16,6 @@ diff --git a/packages/ui/certd-ui/src/api/api.access-providers.js b/packages/ui/certd-ui/src/api/api.access-providers.js index 37192cfc..ab0092ff 100644 --- a/packages/ui/certd-ui/src/api/api.access-providers.js +++ b/packages/ui/certd-ui/src/api/api.access-providers.js @@ -1,14 +1,14 @@ -import { request } from './service' -import inputHandler from './util.input.handler' +import { request } from "./service"; +import inputHandler from "./util.input.handler"; export default { - async list () { + async list() { const ret = await request({ - url: '/access-providers/list' - }) + url: "/access-providers/list" + }); - inputHandler.handle(ret) + inputHandler.handle(ret); - return ret + return ret; } -} +}; diff --git a/packages/ui/certd-ui/src/api/api.dns-providers.js b/packages/ui/certd-ui/src/api/api.dns-providers.js index a9bd4462..c7787f7e 100644 --- a/packages/ui/certd-ui/src/api/api.dns-providers.js +++ b/packages/ui/certd-ui/src/api/api.dns-providers.js @@ -1,14 +1,14 @@ -import { request } from './service' -import inputHandler from './util.input.handler' +import { request } from "./service"; +import inputHandler from "./util.input.handler"; export default { - async list () { + async list() { const ret = await request({ - url: '/dns-providers/list' - }) + url: "/dns-providers/list" + }); - inputHandler.handle(ret) + inputHandler.handle(ret); - return ret + return ret; } -} +}; diff --git a/packages/ui/certd-ui/src/api/api.exports.js b/packages/ui/certd-ui/src/api/api.exports.js index b49fb5c3..46f969de 100644 --- a/packages/ui/certd-ui/src/api/api.exports.js +++ b/packages/ui/certd-ui/src/api/api.exports.js @@ -1,40 +1,40 @@ -import { request } from './service' -import _ from 'lodash-es' -function arrayToMap (arr) { +import { request } from "./service"; +import _ from "lodash-es"; +function arrayToMap(arr) { if (arr && arr instanceof Array) { - const map = {} - _.forEach(arr, item => { - map[item.key] = item - }) - return map + const map = {}; + _.forEach(arr, (item) => { + map[item.key] = item; + }); + return map; } - return arr + return arr; } -function transfer (options) { - options.accessProviders = arrayToMap(options.accessProviders) +function transfer(options) { + options.accessProviders = arrayToMap(options.accessProviders); } export default { - exportsToZip (options) { - transfer(options) + exportsToZip(options) { + transfer(options); return request({ - url: '/exports/toZip', + url: "/exports/toZip", data: { options }, - method: 'post', - responseType: 'blob' // 重点在于配置responseType: 'blob' - }).then(res => { - console.log('res', res) - const filename = decodeURI(res.headers['content-disposition'].replace('attachment;filename=', '')) // 由后端设置下载文件名 - const blob = new Blob([res.data], { type: 'application/zip' }) - const a = document.createElement('a') - const url = window.URL.createObjectURL(blob) - a.href = url - a.download = filename - const body = document.getElementsByTagName('body')[0] - body.appendChild(a) - a.click() - body.removeChild(a) - window.URL.revokeObjectURL(url) - }) + method: "post", + responseType: "blob" // 重点在于配置responseType: 'blob' + }).then((res) => { + console.log("res", res); + const filename = decodeURI(res.headers["content-disposition"].replace("attachment;filename=", "")); // 由后端设置下载文件名 + const blob = new Blob([res.data], { type: "application/zip" }); + const a = document.createElement("a"); + const url = window.URL.createObjectURL(blob); + a.href = url; + a.download = filename; + const body = document.getElementsByTagName("body")[0]; + body.appendChild(a); + a.click(); + body.removeChild(a); + window.URL.revokeObjectURL(url); + }); } -} +}; diff --git a/packages/ui/certd-ui/src/api/api.plugins.js b/packages/ui/certd-ui/src/api/api.plugins.js index 331d98c4..202e875d 100644 --- a/packages/ui/certd-ui/src/api/api.plugins.js +++ b/packages/ui/certd-ui/src/api/api.plugins.js @@ -1,14 +1,14 @@ -import { request } from './service' -import inputHandler from './util.input.handler' +import { request } from "./service"; +import inputHandler from "./util.input.handler"; export default { - async list () { + async list() { const ret = await request({ - url: '/plugins/list' - }) + url: "/plugins/list" + }); - inputHandler.handle(ret) + inputHandler.handle(ret); - console.log('plugins', ret) - return ret + console.log("plugins", ret); + return ret; } -} +}; diff --git a/packages/ui/certd-ui/src/api/index.js b/packages/ui/certd-ui/src/api/index.js index 113eb526..21852c05 100644 --- a/packages/ui/certd-ui/src/api/index.js +++ b/packages/ui/certd-ui/src/api/index.js @@ -1,10 +1,15 @@ -import { assign, map } from 'lodash' -import { service, request } from './service' +import { assign, map } from "lodash"; +import { service, request } from "./service"; -const files = require.context('./modules', false, /\.js$/) -const generators = files.keys().map(key => files(key).default) +const files = require.context("./modules", false, /\.js$/); +const generators = files.keys().map((key) => files(key).default); -export default assign({}, ...map(generators, generator => generator({ - service, - request -}))) +export default assign( + {}, + ...map(generators, (generator) => + generator({ + service, + request + }) + ) +); diff --git a/packages/ui/certd-ui/src/api/service.js b/packages/ui/certd-ui/src/api/service.js index d688a48d..162ab4bd 100644 --- a/packages/ui/certd-ui/src/api/service.js +++ b/packages/ui/certd-ui/src/api/service.js @@ -1,94 +1,117 @@ -import axios from 'axios' -import { get } from 'lodash-es' -import { errorLog, errorCreate } from './tools' - +import axios from "axios"; +import { get } from "lodash-es"; +import { errorLog, errorCreate } from "./tools"; +import { env } from "/src/utils/util.env"; /** * @description 创建请求实例 */ -function createService () { +function createService() { // 创建一个 axios 实例 - const service = axios.create() + const service = axios.create(); // 请求拦截 service.interceptors.request.use( - config => config, - error => { + (config) => config, + (error) => { // 发送失败 - console.log(error) - return Promise.reject(error) + console.log(error); + return Promise.reject(error); } - ) + ); // 响应拦截 service.interceptors.response.use( - response => { - console.log('response.config', response.config) - if (response.config.responseType === 'blob') { - return response + (response) => { + console.log("response.config", response.config); + if (response.config.responseType === "blob") { + return response; } // dataAxios 是 axios 返回数据中的 data - const dataAxios = response.data + const dataAxios = response.data; // 这个状态码是和后端约定的 - const { code } = dataAxios + const { code } = dataAxios; // 根据 code 进行判断 if (code === undefined) { // 如果没有 code 代表这不是项目后端开发的接口 比如可能是 D2Admin 请求最新版本 if (response.config.unpack) { - return dataAxios + return dataAxios; } - return dataAxios.data + return dataAxios.data; } else { // 有 code 代表这是一个后端接口 可以进行进一步的判断 switch (code) { case 0: // [ 示例 ] code === 0 代表没有错误 - return dataAxios.data + return dataAxios.data; default: // 不是正确的 code - errorCreate(`${dataAxios.msg}: ${response.config.url}`) - return dataAxios + errorCreate(`${dataAxios.msg}: ${response.config.url}`); + return dataAxios; } } }, - error => { - const status = get(error, 'response.status') + (error) => { + const status = get(error, "response.status"); switch (status) { - case 400: error.message = '请求错误'; break - case 401: error.message = '未授权,请登录'; break - case 403: error.message = '拒绝访问'; break - case 404: error.message = `请求地址出错: ${error.response.config.url}`; break - case 408: error.message = '请求超时'; break - case 500: error.message = '服务器内部错误'; break - case 501: error.message = '服务未实现'; break - case 502: error.message = '网关错误'; break - case 503: error.message = '服务不可用'; break - case 504: error.message = '网关超时'; break - case 505: error.message = 'HTTP版本不受支持'; break - default: break + case 400: + error.message = "请求错误"; + break; + case 401: + error.message = "未授权,请登录"; + break; + case 403: + error.message = "拒绝访问"; + break; + case 404: + error.message = `请求地址出错: ${error.response.config.url}`; + break; + case 408: + error.message = "请求超时"; + break; + case 500: + error.message = "服务器内部错误"; + break; + case 501: + error.message = "服务未实现"; + break; + case 502: + error.message = "网关错误"; + break; + case 503: + error.message = "服务不可用"; + break; + case 504: + error.message = "网关超时"; + break; + case 505: + error.message = "HTTP版本不受支持"; + break; + default: + break; } - errorLog(error) - return Promise.reject(error) + errorLog(error); + return Promise.reject(error); } - ) - return service + ); + return service; } /** * @description 创建请求方法 * @param {Object} service axios 实例 */ -function createRequestFunction (service) { +function createRequestFunction(service) { return function (config) { const configDefault = { headers: { - 'Content-Type': get(config, 'headers.Content-Type', 'application/json') + "Content-Type": get(config, "headers.Content-Type", "application/json") }, timeout: 5000, - baseURL: process.env.VUE_APP_API, + baseURL: env.API, data: {} - } - return service(Object.assign(configDefault, config)) - } + }; + return service(Object.assign(configDefault, config)); + }; } // 用于真实网络请求的实例和请求方法 -export const service = createService() -export const request = createRequestFunction(service) +export const service = createService(); +export const request = createRequestFunction(service); diff --git a/packages/ui/certd-ui/src/api/tools.js b/packages/ui/certd-ui/src/api/tools.js index 7526ff94..d35f5064 100644 --- a/packages/ui/certd-ui/src/api/tools.js +++ b/packages/ui/certd-ui/src/api/tools.js @@ -1,18 +1,18 @@ -import { notification } from 'ant-design-vue' +import { notification } from "ant-design-vue"; /** * @description 安全地解析 json 字符串 * @param {String} jsonString 需要解析的 json 字符串 * @param {String} defaultValue 默认值 */ -export function parse (jsonString = '{}', defaultValue = {}) { - let result = defaultValue +export function parse(jsonString = "{}", defaultValue = {}) { + let result = defaultValue; try { - result = JSON.parse(jsonString) + result = JSON.parse(jsonString); } catch (error) { - console.log(error) + console.log(error); } - return result + return result; } /** @@ -21,11 +21,8 @@ export function parse (jsonString = '{}', defaultValue = {}) { * @param {String} msg 状态信息 * @param {Number} code 状态码 */ -export function response (data = {}, msg = '', code = 0) { - return [ - 200, - { code, msg, data } - ] +export function response(data = {}, msg = "", code = 0) { + return [200, { code, msg, data }]; } /** @@ -33,8 +30,8 @@ export function response (data = {}, msg = '', code = 0) { * @param {Any} data 返回值 * @param {String} msg 状态信息 */ -export function responseSuccess (data = {}, msg = '成功') { - return response(data, msg) +export function responseSuccess(data = {}, msg = "成功") { + return response(data, msg); } /** @@ -43,29 +40,29 @@ export function responseSuccess (data = {}, msg = '成功') { * @param {String} msg 状态信息 * @param {Number} code 状态码 */ -export function responseError (data = {}, msg = '请求失败', code = 500) { - return response(data, msg, code) +export function responseError(data = {}, msg = "请求失败", code = 500) { + return response(data, msg, code); } /** * @description 记录和显示错误 * @param {Error} error 错误对象 */ -export function errorLog (error) { +export function errorLog(error) { // 打印到控制台 - console.log(error) + console.log(error); // 显示提示 notification.error({ message: error.message - }) + }); } /** * @description 创建一个错误 * @param {String} msg 错误信息 */ -export function errorCreate (msg) { - const error = new Error(msg) - errorLog(error) - throw error +export function errorCreate(msg) { + const error = new Error(msg); + errorLog(error); + throw error; } diff --git a/packages/ui/certd-ui/src/api/util.input.handler.js b/packages/ui/certd-ui/src/api/util.input.handler.js index d94b7ff3..fc1b79e7 100644 --- a/packages/ui/certd-ui/src/api/util.input.handler.js +++ b/packages/ui/certd-ui/src/api/util.input.handler.js @@ -1,37 +1,35 @@ -import _ from 'lodash-es' +import _ from "lodash-es"; -function handleInputs (inputs) { +function handleInputs(inputs) { if (inputs == null) { - return + return; } _.forEach(inputs, (item, key) => { if (item.required === true) { if (item.component == null) { - item.component = {} + item.component = {}; } - let rules = item.component.rules + let rules = item.component.rules; if (rules == null) { - item.component.rules = rules = [] + item.component.rules = rules = []; } if (rules.length > 0) { - const hasRequired = rules.filter(rule => { - return rule.required === true - }) + const hasRequired = rules.filter((rule) => { + return rule.required === true; + }); if (hasRequired.length > 0) { - return + return; } } - rules.push({ required: true, message: '该项必填' }) - delete item.required + rules.push({ required: true, message: "该项必填" }); + delete item.required; } - }) + }); } export default { - - handle (list) { - _.forEach(list, item => { - handleInputs(item.input) - }) + handle(list) { + _.forEach(list, (item) => { + handleInputs(item.input); + }); } - -} +}; diff --git a/packages/ui/certd-ui/src/components/access-provider-selector/access-provider-manager.vue b/packages/ui/certd-ui/src/components/access-provider-selector/access-provider-manager.vue index 5342a906..51c2c56e 100644 --- a/packages/ui/certd-ui/src/components/access-provider-selector/access-provider-manager.vue +++ b/packages/ui/certd-ui/src/components/access-provider-selector/access-provider-manager.vue @@ -5,7 +5,8 @@ :closable="true" width="500px" v-model:visible="visible" - :after-visible-change="onAfterVisibleChange" + :destroyOnClose="true" + @after-visible-change="onAfterVisibleChange" >
@@ -73,8 +74,6 @@