From b2640a3571c3b9bc3f8ee69aa46b7e87055ed069 Mon Sep 17 00:00:00 2001 From: YCA001 <2915341988@qq.com> Date: Wed, 24 May 2023 16:05:26 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/.env.development | 3 + app/.env.production | 3 + app/api/manage.ts | 55 --- app/api/search.ts | 25 -- app/api/show.ts | 33 -- app/api/template.ts | 34 -- app/deploy/nginx/nginx.conf | 8 +- app/package.json | 5 + app/pnpm-lock.yaml | 433 +++++++++++++++++++++++ app/src/App.vue | 21 +- app/{ => src}/api/baseUrl.ts | 0 app/{ => src}/api/request.ts | 9 +- app/src/api/show.ts | 128 +++++++ app/src/assets/Black-horizontal.png | Bin 0 -> 1499 bytes app/src/assets/copy.png | Bin 0 -> 426 bytes app/src/before.ts | 4 + app/src/components/AppHeader.vue | 85 +++-- app/src/components/ChangeCheck.vue | 20 -- app/src/components/Permissions.vue | 77 ++++ app/src/main.ts | 6 +- app/src/pages/AppLogin.vue | 19 + app/src/pages/apiTokens/ApiTokens.vue | 167 +++++++++ app/src/pages/apiTokens/GreateTokens.vue | 68 ++++ app/src/pages/listShow/ChangeCheck.vue | 70 ++++ app/src/pages/listShow/CreatePgp.vue | 397 +++++++++++++++++++++ app/src/pages/listShow/CreateX509.vue | 407 +++++++++++++++++++++ app/src/pages/listShow/ImportPgp.vue | 353 ++++++++++++++++++ app/src/pages/listShow/ImportX509.vue | 305 ++++++++++++++++ app/src/pages/listShow/ListShow.vue | 140 +------- app/src/pages/listShow/PrivateTable.vue | 344 ++++++++++++++++++ app/src/pages/listShow/PublicTable.vue | 344 ++++++++++++++++++ app/src/router.ts | 11 + app/src/shared/utils/common.ts | 118 ++++++ app/src/shared/utils/ele-reset.ts | 5 + app/src/shared/utils/helper.ts | 210 +++++++++++ app/src/shared/utils/login.ts | 161 +++++++++ app/src/store/base.ts | 11 + app/src/store/counter.ts | 11 + app/src/store/data.ts | 88 +++++ app/tsconfig.json | 2 +- app/vite.config.ts | 11 +- 41 files changed, 3836 insertions(+), 355 deletions(-) create mode 100644 app/.env.development create mode 100644 app/.env.production delete mode 100644 app/api/manage.ts delete mode 100644 app/api/search.ts delete mode 100644 app/api/show.ts delete mode 100644 app/api/template.ts rename app/{ => src}/api/baseUrl.ts (100%) rename app/{ => src}/api/request.ts (87%) create mode 100644 app/src/api/show.ts create mode 100644 app/src/assets/Black-horizontal.png create mode 100644 app/src/assets/copy.png create mode 100644 app/src/before.ts delete mode 100644 app/src/components/ChangeCheck.vue create mode 100644 app/src/components/Permissions.vue create mode 100644 app/src/pages/AppLogin.vue create mode 100644 app/src/pages/apiTokens/ApiTokens.vue create mode 100644 app/src/pages/apiTokens/GreateTokens.vue create mode 100644 app/src/pages/listShow/ChangeCheck.vue create mode 100644 app/src/pages/listShow/CreatePgp.vue create mode 100644 app/src/pages/listShow/CreateX509.vue create mode 100644 app/src/pages/listShow/ImportPgp.vue create mode 100644 app/src/pages/listShow/ImportX509.vue create mode 100644 app/src/pages/listShow/PrivateTable.vue create mode 100644 app/src/pages/listShow/PublicTable.vue create mode 100644 app/src/shared/utils/common.ts create mode 100644 app/src/shared/utils/ele-reset.ts create mode 100644 app/src/shared/utils/helper.ts create mode 100644 app/src/shared/utils/login.ts create mode 100644 app/src/store/base.ts create mode 100644 app/src/store/counter.ts create mode 100644 app/src/store/data.ts diff --git a/app/.env.development b/app/.env.development new file mode 100644 index 0000000..77a5080 --- /dev/null +++ b/app/.env.development @@ -0,0 +1,3 @@ +VITE_COOKIE_DOMAIN = 127.0.0.1 + +VITE_LOGIN_ORIGIN = https://id.openeuler.org diff --git a/app/.env.production b/app/.env.production new file mode 100644 index 0000000..79e379e --- /dev/null +++ b/app/.env.production @@ -0,0 +1,3 @@ +VITE_COOKIE_DOMAIN = .openeuler.org + +VITE_LOGIN_ORIGIN = https://id.openeuler.org diff --git a/app/api/manage.ts b/app/api/manage.ts deleted file mode 100644 index 24037fe..0000000 --- a/app/api/manage.ts +++ /dev/null @@ -1,55 +0,0 @@ -// 导入axios实例 -import { AxiosRequestConfig } from 'axios'; -import http from './request'; - -// 第三方认证管理查询 -export const queryCooperator = (param: any) => - http({ - method: 'get', - url: '/api-certification/console/cooperator/list', - params: param, - }); -// 第三方新增管理查询 -export const queryCertcategory = (param: any) => - http({ - method: 'get', - url: '/api-certification/console/cooperator/certCategory/list', - params: param, - }); - -// 查询证书类型 -export const queryCertTypeList = () => - http({ - method: 'get', - url: '/api-certification/console/certType/list', - // params:param - }); - -// 新增证书 -export const queryCooperatorSave = (param: any) => - http({ - method: 'post', - url: '/api-certification/console/cooperator/save', - data: param, - }); -// 删除证书 -export const queryCooperatorDelete = (param: any) => - http({ - method: 'post', - url: '/api-certification/console/cooperator/delete', - params: param, - }); -// 证书详情 -export const queryCooperatorDetail = (param: any) => - http({ - method: 'get', - url: '/api-certification/console/cooperator/detail', - params: param, - }); -// 上传LOGO -export const queryConsoleFileUpload = (param: any) => - http({ - method: 'post', - url: '/api-certification/console/fileUpload?type=LOGO', - data: param, - }); diff --git a/app/api/search.ts b/app/api/search.ts deleted file mode 100644 index 9fe3d8f..0000000 --- a/app/api/search.ts +++ /dev/null @@ -1,25 +0,0 @@ -// 导入axios实例 -import { AxiosRequestConfig } from 'axios'; -import http from './request'; -/** - * 证书查询 - */ - -export const searchApi = (param: any) => http({ - method:'get', - url:'/api-certification/console/certification/list', - params:param -}); -/** - * 导出证书 - */ - - export const exportApi = (param: any) => http({ - method:'get', - url:'/api-certification/console/certification/list/certInfoExport', - responseType:'blob', - params:param -}); - - - diff --git a/app/api/show.ts b/app/api/show.ts deleted file mode 100644 index 1d92465..0000000 --- a/app/api/show.ts +++ /dev/null @@ -1,33 +0,0 @@ -// 导入axios实例 -import http from './request'; - -// 证书类型统计 -export const typeStatistics = () => http({ - method:'get', - url:'/api-certification/console/certification/statistics/countByCooperator', - -}); -// 证书增长分布 -export const growStatistics = (param:any) => http({ - method:'get', - url:'/api-certification/console/certification/statistics/countByIncrease', - params:param - -}); - -// 换取token -export const getToken = (param:any) => http({ - method:'get', - url:'/api-certification/console/auth/login', - params:param - -}); - -// 退出登录 - -export const queryIDToken = () => http({ - method:'get', - url:'/api-certification/console/auth/logout', - - -}); \ No newline at end of file diff --git a/app/api/template.ts b/app/api/template.ts deleted file mode 100644 index b02cbc2..0000000 --- a/app/api/template.ts +++ /dev/null @@ -1,34 +0,0 @@ -// 导入axios实例 -import { AxiosRequestConfig } from 'axios'; -import http from './request'; - -/** - * 证书编辑 - */ - - export const editApi = (param: any) => http({ - method:'put', - url:'/api-certification/console/certification', - params:param -}); - - -/** - * 信息上传 - */ - - export const uploadApi = (param: any) => http({ - method:'put', - url:'/api-certification/console/certification', - params:param -}); - -/** - * 证书删除 - */ - - export const deleteApi = (param: any) => http({ - method:'delete', - url:'/api-certification/console/certification', - params:param -}); \ No newline at end of file diff --git a/app/deploy/nginx/nginx.conf b/app/deploy/nginx/nginx.conf index 851644e..f503926 100644 --- a/app/deploy/nginx/nginx.conf +++ b/app/deploy/nginx/nginx.conf @@ -92,15 +92,11 @@ http { } location /oneid/ { - proxy_pass https://omapi.test.osinfra.cn; + proxy_pass https://omapi.osinfra.cn/; } location /api/ { - proxy_pass https://dsapi.osinfra.cn/; - } - - location /query/ { - proxy_pass https://dsapi.osinfra.cn; + proxy_pass https://signatrust.test.osinfra.cn/; } diff --git a/app/package.json b/app/package.json index 0302435..26b58e0 100644 --- a/app/package.json +++ b/app/package.json @@ -9,8 +9,11 @@ "preview": "vite preview" }, "dependencies": { + "authing-js-sdk": "^4.23.44", "axios": "^1.3.6", + "clipboard": "^2.0.11", "element-plus": "^2.3.4", + "js-cookie": "^3.0.5", "opendesign": "./opendesign", "pinia": "^2.0.35", "vue": "^3.2.47", @@ -27,6 +30,8 @@ "@vue/eslint-config-typescript": "^11.0.3", "eslint": "^8.39.0", "eslint-plugin-vue": "^9.11.0", + "husky": "^8.0.3", + "lint-staged": "^13.2.2", "prettier": "^2.8.8", "sass": "^1.62.1", "typescript": "^5.0.4", diff --git a/app/pnpm-lock.yaml b/app/pnpm-lock.yaml index 24d46e0..cc4c145 100644 --- a/app/pnpm-lock.yaml +++ b/app/pnpm-lock.yaml @@ -9,10 +9,15 @@ specifiers: '@vitejs/plugin-vue-jsx': ^3.0.1 '@vue/eslint-config-prettier': ^7.1.0 '@vue/eslint-config-typescript': ^11.0.3 + authing-js-sdk: ^4.23.44 axios: ^1.3.6 + clipboard: ^2.0.11 element-plus: ^2.3.4 eslint: ^8.39.0 eslint-plugin-vue: ^9.11.0 + husky: ^8.0.3 + js-cookie: ^3.0.5 + lint-staged: ^13.2.2 opendesign: ./opendesign pinia: ^2.0.35 prettier: ^2.8.8 @@ -29,8 +34,11 @@ specifiers: vue-tsc: ^1.4.4 dependencies: + authing-js-sdk: 4.23.44 axios: 1.3.6 + clipboard: 2.0.11 element-plus: 2.3.4_vue@3.2.47 + js-cookie: 3.0.5 opendesign: link:opendesign pinia: 2.0.35_dtjfskxukdxv24psui2m5c75zy vue: 3.2.47 @@ -47,6 +55,8 @@ devDependencies: '@vue/eslint-config-typescript': 11.0.3_7ntaozazn6u7xxl3xxcxahusia eslint: 8.39.0 eslint-plugin-vue: 9.11.0_eslint@8.39.0 + husky: 8.0.3 + lint-staged: 13.2.2 prettier: 2.8.8 sass: 1.62.1 typescript: 5.0.4 @@ -1151,6 +1161,14 @@ packages: hasBin: true dev: true + /aggregate-error/3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + /ajv/6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -1160,6 +1178,13 @@ packages: uri-js: 4.4.1 dev: true + /ansi-escapes/4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + /ansi-regex/2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} @@ -1170,6 +1195,11 @@ packages: engines: {node: '>=8'} dev: true + /ansi-regex/6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + /ansi-styles/2.2.1: resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} engines: {node: '>=0.10.0'} @@ -1189,6 +1219,11 @@ packages: color-convert: 2.0.1 dev: true + /ansi-styles/6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true + /anymatch/3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -1231,6 +1266,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /astral-regex/2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + /async-validator/4.2.5: resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} dev: false @@ -1245,6 +1285,28 @@ packages: hasBin: true dev: true + /authing-js-sdk/4.23.44: + resolution: {integrity: sha512-mPFJ7+iCEFFh6o7qzeLBIf+CmR2jBvNLBFJHxWyiO9U2hcALuSoFJ1+DIZy5QQ8/ZzQj/n7jfMj3ecKD42y1MQ==} + engines: {node: '>=8.9'} + dependencies: + axios: 0.26.1 + crypto: 1.0.1 + crypto-js: 4.1.1 + jsencrypt: 3.3.2 + jwt-decode: 2.2.0 + sm-crypto: 0.3.12 + transitivePeerDependencies: + - debug + dev: false + + /axios/0.26.1: + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} + dependencies: + follow-redirects: 1.15.2 + transitivePeerDependencies: + - debug + dev: false + /axios/1.3.6: resolution: {integrity: sha512-PEcdkk7JcdPiMDkvM4K6ZBRYq9keuVJsToxm2zQIM70Qqo2WHTdJZMXcG9X+RmRp2VPNUQC8W1RAGbgt6b1yMg==} dependencies: @@ -1395,6 +1457,11 @@ packages: supports-color: 7.2.0 dev: true + /chalk/5.2.0: + resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + /chokidar/3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -1420,6 +1487,42 @@ packages: static-extend: 0.1.2 dev: true + /clean-stack/2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true + + /cli-cursor/3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-truncate/2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + dev: true + + /cli-truncate/3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + dev: true + + /clipboard/2.0.11: + resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==} + dependencies: + good-listener: 1.2.2 + select: 1.1.2 + tiny-emitter: 2.1.0 + dev: false + /clone/2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} @@ -1454,6 +1557,10 @@ packages: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true + /colorette/2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true + /combined-stream/1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -1461,6 +1568,11 @@ packages: delayed-stream: 1.0.0 dev: false + /commander/10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: true + /commander/7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} @@ -1500,6 +1612,15 @@ packages: which: 2.0.2 dev: true + /crypto-js/4.1.1: + resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==} + dev: false + + /crypto/1.0.1: + resolution: {integrity: sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==} + deprecated: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. + dev: false + /css-select/4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} dependencies: @@ -1606,6 +1727,10 @@ packages: engines: {node: '>=0.4.0'} dev: false + /delegate/3.2.0: + resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==} + dev: false + /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1671,6 +1796,10 @@ packages: domhandler: 4.3.1 dev: true + /eastasianwidth/0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + /electron-to-chromium/1.4.376: resolution: {integrity: sha512-TFeOKd98TpJzRHkr4Aorn16QkMnuCQuGAE6IZ0wYF+qkbSfMPqjplvRppR02tMUpVxZz8nyBNvVm9lIZsqrbPQ==} dev: true @@ -1700,6 +1829,14 @@ packages: - '@vue/composition-api' dev: false + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex/9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + /emojis-list/3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} @@ -1946,6 +2083,21 @@ packages: strip-final-newline: 2.0.0 dev: true + /execa/7.1.1: + resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + /expand-brackets/2.1.4: resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} engines: {node: '>=0.10.0'} @@ -2189,6 +2341,12 @@ packages: slash: 3.0.0 dev: true + /good-listener/1.2.2: + resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==} + dependencies: + delegate: 3.2.0 + dev: false + /graceful-fs/4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true @@ -2283,6 +2441,17 @@ packages: engines: {node: '>=10.17.0'} dev: true + /human-signals/4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /husky/8.0.3: + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} + hasBin: true + dev: true + /ignore/5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} @@ -2311,6 +2480,11 @@ packages: engines: {node: '>=0.8.19'} dev: true + /indent-string/4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + /inflight/1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: @@ -2402,6 +2576,16 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-fullwidth-code-point/4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + dev: true + /is-glob/4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2443,6 +2627,11 @@ packages: engines: {node: '>=8'} dev: true + /is-stream/3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /is-windows/1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -2472,6 +2661,11 @@ packages: resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} dev: true + /js-cookie/3.0.5: + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} + engines: {node: '>=14'} + dev: false + /js-sdsl/4.4.0: resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} dev: true @@ -2487,6 +2681,14 @@ packages: argparse: 2.0.1 dev: true + /jsbn/1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + dev: false + + /jsencrypt/3.3.2: + resolution: {integrity: sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A==} + dev: false + /jsesc/2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} @@ -2526,6 +2728,10 @@ packages: graceful-fs: 4.2.11 dev: true + /jwt-decode/2.2.0: + resolution: {integrity: sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ==} + dev: false + /kind-of/3.2.2: resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} engines: {node: '>=0.10.0'} @@ -2562,6 +2768,53 @@ packages: type-check: 0.4.0 dev: true + /lilconfig/2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lint-staged/13.2.2: + resolution: {integrity: sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + dependencies: + chalk: 5.2.0 + cli-truncate: 3.1.0 + commander: 10.0.1 + debug: 4.3.4 + execa: 7.1.1 + lilconfig: 2.1.0 + listr2: 5.0.8 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-inspect: 1.12.3 + pidtree: 0.6.0 + string-argv: 0.3.1 + yaml: 2.2.2 + transitivePeerDependencies: + - enquirer + - supports-color + dev: true + + /listr2/5.0.8: + resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==} + engines: {node: ^14.13.1 || >=16.0.0} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + dependencies: + cli-truncate: 2.1.0 + colorette: 2.0.20 + log-update: 4.0.0 + p-map: 4.0.0 + rfdc: 1.3.0 + rxjs: 7.8.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + dev: true + /loader-utils/1.4.2: resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} engines: {node: '>=4.0.0'} @@ -2606,6 +2859,16 @@ packages: /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + /log-update/4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + dev: true + /lru-cache/5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -2713,6 +2976,11 @@ packages: engines: {node: '>=6'} dev: true + /mimic-fn/4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + /minimatch/3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -2818,6 +3086,13 @@ packages: path-key: 3.1.1 dev: true + /npm-run-path/5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + /nth-check/2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} dependencies: @@ -2838,6 +3113,10 @@ packages: kind-of: 3.2.2 dev: true + /object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: true + /object-visit/1.0.1: resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} engines: {node: '>=0.10.0'} @@ -2865,6 +3144,13 @@ packages: mimic-fn: 2.1.0 dev: true + /onetime/6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + /optionator/0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} @@ -2891,6 +3177,13 @@ packages: p-limit: 3.1.0 dev: true + /p-map/4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + dev: true + /parent-module/1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -2918,6 +3211,11 @@ packages: engines: {node: '>=8'} dev: true + /path-key/4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true @@ -2943,6 +3241,12 @@ packages: engines: {node: '>=8.6'} dev: true + /pidtree/0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + dev: true + /pinia/2.0.35_dtjfskxukdxv24psui2m5c75zy: resolution: {integrity: sha512-P1IKKQWhxGXiiZ3atOaNI75bYlFUbRxtJdhPLX059Z7+b9Z04rnTZdSY8Aph1LA+/4QEMAYHsTQ638Wfe+6K5g==} peerDependencies: @@ -3135,6 +3439,14 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /restore-cursor/3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + /ret/0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} @@ -3145,6 +3457,10 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true + /rfdc/1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + dev: true + /rimraf/3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true @@ -3166,6 +3482,12 @@ packages: queue-microtask: 1.2.3 dev: true + /rxjs/7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.5.0 + dev: true + /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true @@ -3190,6 +3512,10 @@ packages: resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} dev: true + /select/1.1.2: + resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} + dev: false + /semver/6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true @@ -3234,6 +3560,38 @@ packages: engines: {node: '>=8'} dev: true + /slice-ansi/3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /slice-ansi/4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /slice-ansi/5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + dev: true + + /sm-crypto/0.3.12: + resolution: {integrity: sha512-272PBzB4PYaBdeGa41TH9ZlMGLPVRmS36Gs4FjmHwXIdihQypAbhhFWZTaa/3de69q2KfMme1M5O2W5+spAdrg==} + dependencies: + jsbn: 1.1.0 + dev: false + /snapdragon-node/2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} @@ -3324,6 +3682,29 @@ packages: engines: {node: '>=0.10.0'} dev: true + /string-argv/0.3.1: + resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} + engines: {node: '>=0.6.19'} + dev: true + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string-width/5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.0.1 + dev: true + /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: @@ -3344,11 +3725,23 @@ packages: ansi-regex: 5.0.1 dev: true + /strip-ansi/7.0.1: + resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + /strip-final-newline/2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} dev: true + /strip-final-newline/3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -3433,6 +3826,14 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true + /through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /tiny-emitter/2.1.0: + resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} + dev: false + /to-fast-properties/2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -3477,6 +3878,10 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true + /tslib/2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + dev: true + /tsutils/3.21.0_typescript@5.0.4: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -3499,6 +3904,11 @@ packages: engines: {node: '>=10'} dev: true + /type-fest/0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + /typescript/5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} @@ -3830,6 +4240,24 @@ packages: engines: {node: '>=0.10.0'} dev: true + /wrap-ansi/6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true @@ -3847,6 +4275,11 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yaml/2.2.2: + resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} + engines: {node: '>= 14'} + dev: true + /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/app/src/App.vue b/app/src/App.vue index a8f78ca..39e27c6 100644 --- a/app/src/App.vue +++ b/app/src/App.vue @@ -1,14 +1,14 @@ + diff --git a/app/api/baseUrl.ts b/app/src/api/baseUrl.ts similarity index 100% rename from app/api/baseUrl.ts rename to app/src/api/baseUrl.ts diff --git a/app/api/request.ts b/app/src/api/request.ts similarity index 87% rename from app/api/request.ts rename to app/src/api/request.ts index b991de1..3e48f59 100644 --- a/app/api/request.ts +++ b/app/src/api/request.ts @@ -2,7 +2,7 @@ import axios from 'axios'; import type { AxiosRequestConfig, AxiosPromise } from 'axios'; import { ElMessage } from 'element-plus'; import { baseUrls } from './baseUrl'; -// import { getUserAuth, tokenFailIndicateLogin } from '../shared/utils/login'; +import { getUserAuth, tokenFailIndicateLogin } from '@/shared/utils/login'; // 创建一个 axios 实例 const service = axios.create({ @@ -17,10 +17,11 @@ service.interceptors.request.use( // 在发送请求之前做些什么 (config: any) => { - // const { token } = getUserAuth(); - // if (token) { + // const { Authorization} = getUserAuth(); + // const Authorization = 'LzPvbFaBQO45oqoXv8m31I2g0eO5WvkF67k7J515' + // if (Authorization) { // const to = { - // token, + // Authorization, // }; // Object.assign(config.headers, to); // } diff --git a/app/src/api/show.ts b/app/src/api/show.ts new file mode 100644 index 0000000..45067e3 --- /dev/null +++ b/app/src/api/show.ts @@ -0,0 +1,128 @@ +// 导入axios实例 +import http from './request'; + +/** + * 获取授权的相关回调链接 + */ +// export const queryCourse= (param:any) => http({ +// method:'get', +// url:'/oneid/oidc/authorize', +// params:param + +// }); + +// 换取token +export const getToken = (param:any) => http({ + method:'get', + url:'/api/v1/users/callback', + params:param + +}); + +// 退出登录 + +export const queryIDToken = () => http({ + method:'post', + url:'/api/v1/users/logout', + + +}); + +// 跳转 +export const queryCourse = () => http({ + method:'get', + url:'/api/v1/users/login', +}); +// 详细信息 +export const queryPermissions = (param:any) => http({ + method:'get', + url:'/api/v1/users/', + params:param + +}); +// 获取表格数据 +export const queryAllData = (param:any) => http({ + method:'get', + url:'/api/v1/keys/', + params:param + +}); + +//创建新的key +export const queryNewKey = (param:any) => http({ + method:'post', + url:'/api/v1/keys/', + data: param, + +}); +//注入key +export const queryImportKey = (param:any) => http({ + method:'post', + url:'/api/v1/keys/import', + data: param, + +}); +//删除key +export const queryDeleteKey = (param:any) => http({ + method:'post', + url:`/api/v1/keys/${param}/cancel_delete`, + + +}); +//无效化key +export const queryDisableKey = (param:any) => http({ + method:'post', + url:`/api/v1/keys/${param}/disable`, + +}); +//激活key +export const queryEnableKey = (param:any) => http({ + method:'post', + url:`/api/v1/keys/${param}/enable`, + +}); +//导出key +export const queryExportKey = (param:any) => http({ + method:'post', + url:`/api/v1/keys/${param}/export`, + + +}); +//请求删除key +export const queryRequestKey = (param:any) => http({ + method:'post', + url:`/api/v1/keys/${param}/request_delete`, + + +}); + +//获取api_keys列表 + +export const queryApiKeys = () => http({ + method:'get', + url:'/api/v1/users/api_keys', + +}); + +// 删除api_keys + +export const deleteApiKeys = (param:any) => http({ + method:'delete', + url:`/api/v1/users/api_keys/${param}`, + +}); +//注册api_keys + +export const getApiKeys = (param:any) => http({ + method:'post', + url:'/api/v1/users/api_keys', + data: param, +}); + +//姓名查重 + +export const headName = (param:any) => http({ + method:'head', + url:'/api/v1/keys/name_identical', + params: param, +}); \ No newline at end of file diff --git a/app/src/assets/Black-horizontal.png b/app/src/assets/Black-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..ef32bcc7dbd3f21dad0305721ebf17680f80b04b GIT binary patch literal 1499 zcmV<11tj{3P)Px)l}SWFR9Hvtm}Q7=RTPGwYoZvKD0U|{c6S$IpkgPss9=kVtyjhF!XI`ZHY$Pz zirs~Z-QDtB){^bM=X`T!<{R+GtUoi~IXmC|u6MorjG;Lu0rm%G0!{_KY-#s@d%Pg9 zp?LQW@O{zFte6h?8F&L22z>WCf3$b3UmNCJ3YY+Rt6a0PBj^_w9i9UY z0v?NJ^8sf8n-py>2lj}AIU;n>tl1ScJn%qd zNK@YjfeoX``Cbs72Ig#NEJ(`%vaSUGBEWUl@e&{tAB`9LROGu4u*h1N1+EEvv*U4K zj+TwT4y+spSb}dh3BIvS4ZiGFR+_?-{k+(6MWaaM$G+uNVJl@EwDg5 zzYEwj4ltSTD_zsA?yaBT>jF$?8Je*Ja9#XRGL*C3fy?5VQgukt-UE0F&@z4-+O9@_ z7VP&>l`9!EVYFR3HZ-+t>fm;U3%(@EJ>C`sOBbjck{C*B!Y;GYNBe_YhyZvouiuwWnQFtlk#ljffoHK6W(XB6x7 z*ZI3;n*Tg@J!){erYj1{RAv6N1&af0u@wZQ)}->b9inzlgTnb2pg-x<}F-J+^) zUk{Yvdsx~}*=d-1o^lq-+~it-ZpKjG)#{84!Pj_rPmmP;^>fAxu^%0dbj%8Q!bSf}Er0%ged zWgSo&%qH942w2!Nl(gKWa;EK6CVPdPx$WJyFpR5(v#{Ql$D|KQ?d4BL)8XTS$oS(q4VQZ*UM5;U+XV+0w*X}*>rH&T_s zTvrIES;-Bj8Gioy$55N5#ZZ;3iJ=Z|(2_QDhG1tIoCb+FY-BLe5@a}Z?lnVADyCs1 z8Pr#-&+zNdKZd-{^B9JaY*3u90>hm3_b?12$)KbF1qNp`aj^FnY<|G7Vc%1R`V4J` zibM?tq74cvKFYBD$P3IsW@KP^w%eC@gFq&H{r-pH|9^y8$1lBQ@XJ5KaDSUOszL6S z5)78{dl^1|{exn&t|~vn=7}~Kt~qky4TEd?K}>^!oMaf5Zhy$|@yl-%O^Q<73|=;p z#2bV!9brpgI9)_FgM96z7^)^;X88OKHH?s5V{0hF5aTTm7Q*QwZyQO5)aEk`pT6KW z$iYOEp)f`bzd=;<8dVG;RE%JYwHx<8GqlXU#_#}^Ac-m1aFs8nIzkNlXFD(e0J`l4 UOp>*b{r~^~07*qoM6N<$f~kMDYybcN literal 0 HcmV?d00001 diff --git a/app/src/before.ts b/app/src/before.ts new file mode 100644 index 0000000..fd7956d --- /dev/null +++ b/app/src/before.ts @@ -0,0 +1,4 @@ +import { getCodeByUrl } from '@/shared/utils/login'; + + +// getCodeByUrl(); diff --git a/app/src/components/AppHeader.vue b/app/src/components/AppHeader.vue index 176e697..abe9fd5 100644 --- a/app/src/components/AppHeader.vue +++ b/app/src/components/AppHeader.vue @@ -1,46 +1,61 @@ \ No newline at end of file diff --git a/app/src/components/Permissions.vue b/app/src/components/Permissions.vue new file mode 100644 index 0000000..208f02d --- /dev/null +++ b/app/src/components/Permissions.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/app/src/main.ts b/app/src/main.ts index 3b03d10..c29765b 100644 --- a/app/src/main.ts +++ b/app/src/main.ts @@ -5,8 +5,12 @@ import './shared/ele-reset.ts' import OpenDesign from 'opendesign'; import { router } from './router'; import ElementPlus from 'element-plus' +import 'element-plus/theme-chalk/index.css' +import './before.ts'; +import { createPinia } from 'pinia'; const app = createApp(App) app.use(router) -app.use(OpenDesign); app.use(ElementPlus) +app.use(createPinia()); +app.use(OpenDesign); app.mount('#app') diff --git a/app/src/pages/AppLogin.vue b/app/src/pages/AppLogin.vue new file mode 100644 index 0000000..62ce788 --- /dev/null +++ b/app/src/pages/AppLogin.vue @@ -0,0 +1,19 @@ + + + + diff --git a/app/src/pages/apiTokens/ApiTokens.vue b/app/src/pages/apiTokens/ApiTokens.vue new file mode 100644 index 0000000..c135640 --- /dev/null +++ b/app/src/pages/apiTokens/ApiTokens.vue @@ -0,0 +1,167 @@ + + + diff --git a/app/src/pages/apiTokens/GreateTokens.vue b/app/src/pages/apiTokens/GreateTokens.vue new file mode 100644 index 0000000..d861db5 --- /dev/null +++ b/app/src/pages/apiTokens/GreateTokens.vue @@ -0,0 +1,68 @@ + + + + diff --git a/app/src/pages/listShow/ChangeCheck.vue b/app/src/pages/listShow/ChangeCheck.vue new file mode 100644 index 0000000..c433d9b --- /dev/null +++ b/app/src/pages/listShow/ChangeCheck.vue @@ -0,0 +1,70 @@ + + + + diff --git a/app/src/pages/listShow/CreatePgp.vue b/app/src/pages/listShow/CreatePgp.vue new file mode 100644 index 0000000..591ccef --- /dev/null +++ b/app/src/pages/listShow/CreatePgp.vue @@ -0,0 +1,397 @@ + + + + diff --git a/app/src/pages/listShow/CreateX509.vue b/app/src/pages/listShow/CreateX509.vue new file mode 100644 index 0000000..2202eaf --- /dev/null +++ b/app/src/pages/listShow/CreateX509.vue @@ -0,0 +1,407 @@ + + + + diff --git a/app/src/pages/listShow/ImportPgp.vue b/app/src/pages/listShow/ImportPgp.vue new file mode 100644 index 0000000..ad9fc56 --- /dev/null +++ b/app/src/pages/listShow/ImportPgp.vue @@ -0,0 +1,353 @@ + + + + diff --git a/app/src/pages/listShow/ImportX509.vue b/app/src/pages/listShow/ImportX509.vue new file mode 100644 index 0000000..7fd823f --- /dev/null +++ b/app/src/pages/listShow/ImportX509.vue @@ -0,0 +1,305 @@ + + + + diff --git a/app/src/pages/listShow/ListShow.vue b/app/src/pages/listShow/ListShow.vue index cd784d4..f7cfbc5 100644 --- a/app/src/pages/listShow/ListShow.vue +++ b/app/src/pages/listShow/ListShow.vue @@ -1,140 +1,32 @@ - \ No newline at end of file + diff --git a/app/src/pages/listShow/PrivateTable.vue b/app/src/pages/listShow/PrivateTable.vue new file mode 100644 index 0000000..1a65671 --- /dev/null +++ b/app/src/pages/listShow/PrivateTable.vue @@ -0,0 +1,344 @@ + + + diff --git a/app/src/pages/listShow/PublicTable.vue b/app/src/pages/listShow/PublicTable.vue new file mode 100644 index 0000000..be4f088 --- /dev/null +++ b/app/src/pages/listShow/PublicTable.vue @@ -0,0 +1,344 @@ + + + diff --git a/app/src/router.ts b/app/src/router.ts index d692f07..ebb99dd 100644 --- a/app/src/router.ts +++ b/app/src/router.ts @@ -5,7 +5,18 @@ export const routes: RouteRecordRaw[] = [ component: () => { return import('@/pages/listShow/ListShow.vue'); }, + },{ + path: '/apiTokens', + component: () => { + return import('@/pages/apiTokens/ApiTokens.vue'); + }, }, + // { + // path: '/login', + // component: () => { + // return import('@/pages/AppLogin.vue'); + // }, + // }, ]; export const router = createRouter({ diff --git a/app/src/shared/utils/common.ts b/app/src/shared/utils/common.ts new file mode 100644 index 0000000..9a0779f --- /dev/null +++ b/app/src/shared/utils/common.ts @@ -0,0 +1,118 @@ +// 公共函数方法 + +import { requiredNumber } from "element-plus/es/components/table-v2/src/common"; + +/** + * 方法pre=next视图不刷新 + * 解决数组直接赋值不刷新视图 + * @param pre 修改前的值 + * @param next 修改后数组 + */ +export function commonAssignArray(pre: Array, next: Array) { + pre.splice(0, pre.length); + pre.push(...next); +} + +/** + * 计算除法返回商和余数 + * @param dividend 被除数 + * @param divisor 除数 + */ +function computingDivision(dividend: number, divisor: number) { + const quotient = Math.floor(dividend / divisor) || 0; + const remainder = Math.round(dividend % divisor) || 0; + return [quotient, remainder]; +} + +interface TimeRangeConfig { + thousands: boolean; +} + +/** + * 将时间戳范围转换为时分秒天的展示方式 + * @param startTime 开始时间 + * @param endTime 结束时间 + */ + +export function timeRangeToRealTime(startTime: string | number, endTime: string | number, config?: TimeRangeConfig) { + const { thousands = true } = config || {}; + const _rangeTime = Number(endTime) - Number(startTime); + const rangeTime = thousands ? _rangeTime / 1000 : _rangeTime; + const minutes = 60; + const hours = 60 * minutes; + const days = 24 * hours; + // 返回时间值 + let s = 0; + let min = 0; + let h = 0; + let day = 0; + const calcDay = computingDivision(rangeTime, days); + day = calcDay[0]; + s = calcDay[1]; + if (s) { + const calcHour = computingDivision(s, hours); + h = calcHour[0]; + s = calcHour[1]; + } + if (s) { + const calcMin = computingDivision(s, minutes); + min = calcMin[0]; + s = calcMin[1]; + } + let str = ''; + str += day ? `${day}days ` : ''; + str += h ? `${h}h ` : ''; + str += min ? `${min}min ` : ''; + str += s ? `${s}s ` : ''; + return { + day, + h, + min, + s, + str: str ? str : '0s', + }; +} + +export function dateFormat(time: any, type: string) { + let formatTime; + let date; + if (time === 0) { + date = new Date(); + } else { + date = new Date(time); + } + let Year = date.getFullYear(); + let month = date.getMonth() + 1; + let Month = month >= 10 ? month : '0' + month; + let day = date.getDate(); + let Day = day >= 10 ? day : '0' + day; + let Hour = date.getHours() < 10 ? '0' + date.getHours() : date.getHours(); + let Minute = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(); + let Second = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds(); + if (type === 'yyyy-MM-dd') { + formatTime = Year + '-' + Month + '-' + Day; + return formatTime; + } else if (type === 'yyyy-MM-dd hh:mm:ss') { + formatTime = Year + '-' + month + '-' + day + ' ' + Hour + ':' + Minute + ':' + Second; + return formatTime; + } else if (type === 'hh:mm:ss') { + formatTime = Hour + ':' + Minute + ':' + Second; + return formatTime; + } else { + return 'error type!'; + } +} +/** + * 判断数据是否为空 + * @param data 数据 + * @param strict 是否为严格模式 + * @returns boolean + */ +export function isCheckEmpty(data: any, strict = false): boolean { + const strictArr = [null, undefined, '', NaN]; + if (strict) { + return strictArr.includes(data); + } + return [...strictArr, 0, false].includes(data); +} + diff --git a/app/src/shared/utils/ele-reset.ts b/app/src/shared/utils/ele-reset.ts new file mode 100644 index 0000000..7f49cc7 --- /dev/null +++ b/app/src/shared/utils/ele-reset.ts @@ -0,0 +1,5 @@ +// 重置element-ui 样式 +// 全局设置ele表格默认颜色 +document.documentElement.style.setProperty('--el-color-primary', '#002FA7'); +document.documentElement.style.setProperty('--el-component-size', '48px'); +export {} \ No newline at end of file diff --git a/app/src/shared/utils/helper.ts b/app/src/shared/utils/helper.ts new file mode 100644 index 0000000..5524302 --- /dev/null +++ b/app/src/shared/utils/helper.ts @@ -0,0 +1,210 @@ +const cacheStringFn = string>(fn: T): T => { + const cache: Record = Object.create(null); + return ((str: string) => { + let rlt = cache[str]; + if (!rlt) { + cache[str] = rlt; + rlt = fn(str); + } + return rlt; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + }) as any; +}; + +const camelizeRegExp = /-(\w)/; +/** + * kebab-case to camelCase + */ +export const camelize = cacheStringFn((str: string): string => { + return str.replace(camelizeRegExp, (_, c) => (c ? c.toUpperCase() : '')); +}); + +/** + * kebab-case to PascalCase + */ +export const pascalize = cacheStringFn((str: string): string => { + const k = camelize(str); + return k.charAt(0).toUpperCase() + k.slice(1); +}); + +const kebablizeRegExp = /\B([A-Z])/; +/** + * to kebab-case + */ +export const kebablize = cacheStringFn((str: string): string => { + return str.replace(kebablizeRegExp, '-$1').toLowerCase(); +}); + +// 格式化数字 K +export function formatNumber(key: number) { + let num: number | string = 0; + if (key === undefined) { + num = 0; + } else { + num = key >= 1e3 ? `${parseInt(`${(key / 1e3) * 10}`) / 10}K` : key; + } + + return num; +} + +// 格式化数字1000=>1,000 +export function toThousands(key: number | 0) { + let num: number | string = 0; + if (key === undefined) { + num = 0; + } else { + num = Number(key).toLocaleString('en-US'); + } + return num; +} + +// 数字排序 arr.sort(sortExp('code', false)) +export function sortExp(key: string, isAsc: boolean) { + return function (x: any, y: any) { + return (x[key] - y[key]) * (isAsc ? 1 : -1); + }; +} + +// 百分比计算 +export const percentageTotal = (num: number, total: number) => { + return `${((num / total) * 100).toFixed(1)}%`; +}; + +// 获取当前日期 yy-mm-dd +export const getNowFormatDate = () => { + const date = new Date(); + const seperator1 = '-'; + + const year = date.getFullYear(); + const month = date.getMonth() + 1; + const day = date.getDate(); + + const yearStr = `${year}`; + let monthStr = `${month}`; + let dayStr = `${day}`; + + if (month >= 1 && month <= 9) { + monthStr = `0${month}`; + } + if (day >= 0 && day <= 9) { + dayStr = `0${day}`; + } + const currentdate = yearStr + seperator1 + monthStr + seperator1 + dayStr; + return currentdate; +}; + +/** + * 将颜色值转换为有透明度的颜色值 rgb格式 + * @param value 为带'#'的纯色格式或rgb格式 + * @param opcity 透明度 + * @returns rgb格式 + */ +export const getColorOpcity = (value: string, opcity = 1) => { + const _value = getRGBColor(value); + if (_value.startsWith('rgb') || _value.startsWith('RGB')) { + const arr = _value.split(/\(|\)|,/); + return `rgba(${arr[1]},${arr[2]},${arr[3]}, ${opcity})`; + } + return ''; +}; + +/** + * 将颜色值转换为有透明度的颜色值 rgb格式 + * @param value 为带'#'的格式 + * @returns rgb格式 + */ +export const getRGBColor = (value: string) => { + if (value.startsWith('#') && [4, 7].includes(value.length)) { + let _value = value.slice(1); + if (_value.length === 3) { + _value = _value + .split('') + .map(item => `${item}${item}`) + .join(''); + } + const r = parseInt(_value.slice(0, 2), 16); + const g = parseInt(_value.slice(2, 4), 16); + const b = parseInt(_value.slice(4, 6), 16); + return `rgba(${r}, ${g}, ${b})`; + } + return value; +}; + +/** + * 格式化SIG返回数据 + */ +// +export const sigsProcessing = (data: any) => { + const firstKeys = Object.keys(data); + const company = firstKeys.find(itme => itme !== 'metrics'); + const sigData = data[company as string]; + const sigs = sigData.map((item: any) => { + return item.sig; + }); + + return { company, sigs }; +}; + +/** + * 格式化Treemap数据 + */ +// +export const treeProcessing = (data: any) => { + const firstKeys = Object.keys(data); + const company = firstKeys.find(itme => itme !== 'metrics'); + const sigData = data[company as string]; + const sigs = sigData.map((item: any) => { + const obj = { sig: item.sig, group: item.feature }; + data['metrics'].reduce((pre: any, next: string, index: number) => { + pre[next] = item.value[index]; + return pre; + }, obj); + return obj; + }); + return { company, sigs }; +}; +/** + * 格式化users数据 + */ +// +export const processing = (data: any) => { + const firstKeys = Object.keys(data); + const company = firstKeys.find(itme => itme !== 'metrics'); + const sigData = data[company as string]; + return { company, sigData }; +}; + +/** + * 判断是否是移动端 + */ +export const testIsPhone = () => { + return /Android|webOS|iPhone|iPod|iPad|BlackBerry/i.test(navigator.userAgent); +}; + +/** + * 格式化日期 + */ +export const originalDate = (value: any) => { + var originalDate = new Date(value); + var year = originalDate.getFullYear(); + var month = originalDate.getMonth() + 1; + var day = originalDate.getDate(); + var hour = originalDate.getHours(); + var minute = originalDate.getMinutes(); + var second = originalDate.getSeconds(); + var newDateStr = + year + + '-' + + (month < 10 ? '0' + month : month) + + '-' + + (day < 10 ? '0' + day : day) + + ' ' + + (hour < 10 ? '0' + hour : hour) + + ':' + + (minute < 10 ? '0' + minute : minute) + + ':' + + (second < 10 ? '0' + second : second) + + '+08:00'; + + return newDateStr +}; diff --git a/app/src/shared/utils/login.ts b/app/src/shared/utils/login.ts new file mode 100644 index 0000000..b6a15b4 --- /dev/null +++ b/app/src/shared/utils/login.ts @@ -0,0 +1,161 @@ +import { queryCourse, getToken, queryIDToken } from '@/api/show'; +import { useCounter } from '@/store/counter'; +import { storeToRefs } from 'pinia'; +const LOGIN_KEYS = { + USER_TOKEN: '_U_T_', + USER_INFO: '_U_I_', +}; + +function setCookie(cname: string, cvalue: string, exdays: number) { + const d = new Date(); + d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000); + const expires = `expires=${d.toUTCString()};path=/`; + document.cookie = `${cname}=${cvalue}; ${expires}`; +} +function getCookie(cname: string) { + const name = `${cname}=`; + const ca = document.cookie.split(';'); + for (let i = 0; i < ca.length; i++) { + const c = ca[i].trim(); + if (c.indexOf(name) === 0) { + return c.substring(name.length, c.length); + } + } + return ''; +} +function deleteCookie(cname: string) { + setCookie(cname, 'null', -1); +} + +// 存储用户id及token,用于下次登录 +export function saveUserAuth(code = '', photo = '') { + if (!code) { + deleteCookie(LOGIN_KEYS.USER_TOKEN); + deleteCookie(LOGIN_KEYS.USER_INFO); + } else { + setCookie(LOGIN_KEYS.USER_TOKEN, code, 1); + setCookie(LOGIN_KEYS.USER_INFO, photo, 1); + } +} + +// 获取用户id及token +export function getUserAuth() { + const Authorization = getCookie(LOGIN_KEYS.USER_TOKEN) || ''; + const photo = getCookie(LOGIN_KEYS.USER_INFO) || ''; + if (!Authorization) { + saveUserAuth(); + } + return { + Authorization, + photo, + }; +} +const redirectUri = `${location.origin}/`; + +// // 退出登录 +export function logout() { + queryIDToken().then((res: any) => + window.location.href = window.location.origin + ); +} + +// 跳转首页 +export function goToHome() { + // window.location.href = window.location.origin; + queryCourse().then(() => {}); +} + +export function getCodeByUrl() { + const query = getUrlParam(); + if (query.code && query.state) { + const param = { + code: query.code, + }; + getToken(param).then((res: any) => { + saveUserAuth(res.data, res.data); + deleteUrlCode(query); + const newUrl = `${location.origin}/`; + window.parent.window.location.href = newUrl; + }); + } +} +// 删除url上的code +function deleteUrlCode(query: any) { + const arr = Object.entries(query); + let url = location.origin + location.pathname; + if (arr.length > 2) { + const _arr = arr.filter(item => !['code', 'state'].includes(item[0])); + const search = _arr.reduce((pre, next) => { + pre += `${next[0]}=${next[1]}`; + return pre; + }, '?'); + url += search; + } + history.replaceState(null, '', url); +} + +function getUrlParam(url = window.location.search) { + const param = {} as any; + const arr = url.split('?'); + if (arr[1]) { + const _arr = arr[1].split('&') || []; + _arr.forEach((item: any) => { + const it = item.split('='); + if (it.length === 2) { + const obj = { + [it[0]]: it[1], + }; + Object.assign(param, obj); + } + }); + } + + return param; +} + +function createClient(community: string) { + const obj: any = { + client_id: '623c3c2f1eca5ad5fca6c58a', + redirect_uri: 'http://127.0.0.1:5173', + response_type: 'code', + scope: 'openid profile', + }; +} +// scope配置,设置登录后用户返回信息 +const scopeConfig = { + scope: 'openid profile username', +}; +export function showGuard() { + // if (window.location.search.split('?')[1]) { + // } else { + // window.location.assign( + // 'https://omapi.osinfra.cn/oneid/oidc/authorize?client_id=623c3c2f1eca5ad5fca6c58a&redirect_uri=https://signatrust.test.osinfra.cn/api/v1/users/callback&scope=openid+profile+email&access_type=offline&response_type=code' + // ) + // } + queryCourse(); +} + +// token失效跳转首页 +export function tokenFailIndicateLogin() { + saveUserAuth(); + const { guardAuthClient } = useStoreData(); + guardAuthClient.value = {}; + // goToHome(); +} + +/** + * @callback store 将store返回,使用解构赋值接受 + */ +export function useStoreData() { + const counter = useCounter(); + const stores = storeToRefs(counter); + return stores; +} + +// export function hasPermission(per: string) { +// const { guardAuthClient } = useStoreData(); +// if (Array.isArray(guardAuthClient?.value?.permissions)) { +// return guardAuthClient.value.permissions.includes(per); +// } +// return false; +// } diff --git a/app/src/store/base.ts b/app/src/store/base.ts new file mode 100644 index 0000000..4198cae --- /dev/null +++ b/app/src/store/base.ts @@ -0,0 +1,11 @@ +import { defineStore } from 'pinia'; +export const useBaseStore = defineStore('base', { + state: () => ({ + dialogVisible:false + + }), + actions: { + }, + getters: { + }, +}); diff --git a/app/src/store/counter.ts b/app/src/store/counter.ts new file mode 100644 index 0000000..216b33f --- /dev/null +++ b/app/src/store/counter.ts @@ -0,0 +1,11 @@ +import { defineStore } from 'pinia'; +import { ref } from 'vue'; + +export const useCounter = defineStore('counter', () => { + // 登录信息 + const guardAuthClient = ref({} as any); + const isLoggingIn = ref(false); + const loginIframeSrc = ref(); + const dialogImageUrl = ref() + return { guardAuthClient, isLoggingIn, loginIframeSrc ,dialogImageUrl }; +}); diff --git a/app/src/store/data.ts b/app/src/store/data.ts new file mode 100644 index 0000000..3f9a997 --- /dev/null +++ b/app/src/store/data.ts @@ -0,0 +1,88 @@ +import { defineStore } from 'pinia'; +import { queryAllData } from '@/api/show'; +export const useDataStore = defineStore('data', { + state: () => ({ + startTime: new Date().getTime() - (365 / 2) * 24 * 3600 * 1000, + endTime: new Date().getTime(), + countWay: 'month', + tableData: [] as any, + visibility: 'public', + visib: 'private', + tablePriData: [] as any, + pgpData: '', + x509Data: '', + pgpPriData: '', + x509PriData: '', + realData: [] as any, + pagination: { + totalCount: 0, + currentPage: 1, + pageSize: 10, + searchInput: '', + }, + realPriData:[] as any, + paginationPri: { + totalCount: 0, + currentPage: 1, + pageSize: 10, + searchInput: '', + }, + }), + actions: { + async getTableData() { + const param = { + visibility: this.visibility, + }; + const res = await queryAllData(param); + this.realData = res; + this.tableData = this.realData.slice( + (this.pagination.currentPage - 1) * this.pagination.pageSize, + this.pagination.currentPage * this.pagination.pageSize + ); + if (this.pagination.searchInput) { + this.tableData = this.realData.filter( + (item: any) => item.name === this.pagination.searchInput + ); + this.pagination.totalCount = this.tableData.length; + } else { + this.pagination.totalCount = this.realData.length; + } + + this.pgpData = this.realData.filter( + (item: any) => item.key_type === 'pgp' + ).length; + this.x509Data = this.realData.filter( + (item: any) => item.key_type === 'x509' + ).length; + }, + async getPriTableData() { + const param = { + visibility: this.visib, + }; + const res = await queryAllData(param); + this.realPriData = res; + this.tablePriData = this.realPriData.slice( + (this.paginationPri.currentPage - 1) * this.paginationPri.pageSize, + this.paginationPri.currentPage * this.paginationPri.pageSize + ); + if (this.paginationPri.searchInput) { + this.tablePriData = this.realPriData.filter( + (item: any) => item.name === this.paginationPri.searchInput + ); + this.paginationPri.totalCount = this.tablePriData.length; + } else { + this.paginationPri.totalCount = this.realPriData.length; + } + + this.pgpPriData = this.realPriData.filter( + (item: any) => item.key_type === 'pgp' + ).length; + this.x509PriData = this.realPriData.filter( + (item: any) => item.key_type === 'x509' + ).length; + }, + }, + + getters: { + }, +}); diff --git a/app/tsconfig.json b/app/tsconfig.json index 73afe93..b773aa8 100644 --- a/app/tsconfig.json +++ b/app/tsconfig.json @@ -12,7 +12,7 @@ "resolveJsonModule": true, "esModuleInterop": true, "skipLibCheck": true, - "noEmit": true, + // "noEmit": true, "lib": ["esnext", "dom"], "baseUrl": "./", "paths": { diff --git a/app/vite.config.ts b/app/vite.config.ts index a66ccf7..84d3209 100644 --- a/app/vite.config.ts +++ b/app/vite.config.ts @@ -7,7 +7,7 @@ import vueJsx from '@vitejs/plugin-vue-jsx'; // https://vitejs.dev/config/ export default defineConfig({ - envDir: './viteEnv', + // envDir: './viteEnv', base: '/', build: { outDir: path.resolve(__dirname, '../../dist/euler'), @@ -31,8 +31,13 @@ export default defineConfig({ ], server: { proxy: { - '/oneid/': { - target: 'https://omapi.test.osinfra.cn/', + '/api': { + target: 'https://signatrust.test.osinfra.cn/', + secure: false, + changeOrigin: true, + }, + '/oneid': { + target: 'https://omapi.osinfra.cn/', secure: false, changeOrigin: true, }, -- Gitee