diff --git a/components.d.ts b/components.d.ts deleted file mode 100644 index 40a545e5..00000000 --- a/components.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -// generated by unplugin-vue-components -// We suggest you to commit this file into source control -// Read more: https://github.com/vuejs/core/pull/3399 -import '@vue/runtime-core' - -export {} - -declare module '@vue/runtime-core' { - export interface GlobalComponents { - BadgeStatus: typeof import('./src/components/BadgeStatus/index.vue')['default'] - CardBox: typeof import('./src/components/CardBox/index.vue')['default'] - FormFormBuilder: typeof import('./src/components/Form/FormBuilder.vue')['default'] - GeoComponent: typeof import('./src/components/GeoComponent/index.vue')['default'] - MonacoEditor: typeof import('./src/components/MonacoEditor/index.vue')['default'] - PermissionButton: typeof import('./src/components/PermissionButton/index.vue')['default'] - RouterLink: typeof import('vue-router')['RouterLink'] - RouterView: typeof import('vue-router')['RouterView'] - SearchItem: typeof import('./src/components/Search/Item.vue')['default'] - SearchSearch: typeof import('./src/components/Search/Search.vue')['default'] - Table: typeof import('./src/components/Table/index.vue')['default'] - TitleComponent: typeof import('./src/components/TitleComponent/index.vue')['default'] - ValueItem: typeof import('./src/components/ValueItem/index.vue')['default'] - } -} diff --git a/package-lock.json b/package-lock.json index db42a318..65b3c300 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,6 +43,7 @@ "typescript": "^4.9.3", "vite": "^4.0.0", "vite-plugin-html": "^3.2.0", + "vite-plugin-style-import": "^2.0.0", "vite-plugin-vue-setup-extend": "^0.4.0", "vue-tsc": "^1.0.11" } @@ -2399,6 +2400,17 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==" }, + "node_modules/capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, "node_modules/capture-stack-trace": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz", @@ -2421,6 +2433,26 @@ "node": ">=10" } }, + "node_modules/change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz", @@ -2737,6 +2769,23 @@ "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", "dev": true }, + "node_modules/console": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/console/-/console-0.7.2.tgz", + "integrity": "sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g==", + "dev": true + }, + "node_modules/constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, "node_modules/conventional-changelog-angular": { "version": "5.0.13", "resolved": "https://registry.npmmirror.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", @@ -3242,6 +3291,12 @@ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, "node_modules/esbuild": { "version": "0.16.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.12.tgz", @@ -3818,6 +3873,16 @@ "he": "bin/he" } }, + "node_modules/header-case": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "dev": true, + "dependencies": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -6640,6 +6705,16 @@ "tslib": "^2.0.3" } }, + "node_modules/path-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", + "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", @@ -7334,6 +7409,17 @@ "integrity": "sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA==", "dev": true }, + "node_modules/sentence-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", @@ -7420,6 +7506,16 @@ "node": ">=4" } }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8058,6 +8154,24 @@ "node": ">=8" } }, + "node_modules/upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/uppercamelcase": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/uppercamelcase/-/uppercamelcase-1.1.0.tgz", @@ -8232,6 +8346,52 @@ "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", "dev": true }, + "node_modules/vite-plugin-style-import": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vite-plugin-style-import/-/vite-plugin-style-import-2.0.0.tgz", + "integrity": "sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.1.2", + "change-case": "^4.1.2", + "console": "^0.7.2", + "es-module-lexer": "^0.9.3", + "fs-extra": "^10.0.0", + "magic-string": "^0.25.7", + "pathe": "^0.2.0" + }, + "peerDependencies": { + "vite": ">=2.0.0" + } + }, + "node_modules/vite-plugin-style-import/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/vite-plugin-style-import/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/vite-plugin-style-import/node_modules/pathe": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.2.0.tgz", + "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", + "dev": true + }, "node_modules/vite-plugin-vue-setup-extend": { "version": "0.4.0", "resolved": "https://registry.npmmirror.com/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.4.0.tgz", @@ -10382,6 +10542,17 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==" }, + "capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, "capture-stack-trace": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz", @@ -10398,6 +10569,26 @@ "supports-color": "^7.1.0" } }, + "change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz", @@ -10653,6 +10844,23 @@ "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", "dev": true }, + "console": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/console/-/console-0.7.2.tgz", + "integrity": "sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g==", + "dev": true + }, + "constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, "conventional-changelog-angular": { "version": "5.0.13", "resolved": "https://registry.npmmirror.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", @@ -11078,6 +11286,12 @@ } } }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, "esbuild": { "version": "0.16.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.12.tgz", @@ -11518,6 +11732,16 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "header-case": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "dev": true, + "requires": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -13740,6 +13964,16 @@ "tslib": "^2.0.3" } }, + "path-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", + "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", @@ -14283,6 +14517,17 @@ "integrity": "sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA==", "dev": true }, + "sentence-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", @@ -14356,6 +14601,16 @@ "babel-code-frame": "^6.26.0" } }, + "snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -14836,6 +15091,24 @@ } } }, + "upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, "uppercamelcase": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/uppercamelcase/-/uppercamelcase-1.1.0.tgz", @@ -14961,6 +15234,48 @@ } } }, + "vite-plugin-style-import": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vite-plugin-style-import/-/vite-plugin-style-import-2.0.0.tgz", + "integrity": "sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.1.2", + "change-case": "^4.1.2", + "console": "^0.7.2", + "es-module-lexer": "^0.9.3", + "fs-extra": "^10.0.0", + "magic-string": "^0.25.7", + "pathe": "^0.2.0" + }, + "dependencies": { + "@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "pathe": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.2.0.tgz", + "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", + "dev": true + } + } + }, "vite-plugin-vue-setup-extend": { "version": "0.4.0", "resolved": "https://registry.npmmirror.com/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.4.0.tgz", diff --git a/package.json b/package.json index 896ac93a..26e555d8 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "typescript": "^4.9.3", "vite": "^4.0.0", "vite-plugin-html": "^3.2.0", + "vite-plugin-style-import": "^2.0.0", "vite-plugin-vue-setup-extend": "^0.4.0", "vue-tsc": "^1.0.11" }, diff --git a/src/api/device/instance.ts b/src/api/device/instance.ts index 2399ab2c..dd91bf13 100644 --- a/src/api/device/instance.ts +++ b/src/api/device/instance.ts @@ -1,3 +1,16 @@ import server from '@/utils/request' -export const deleteMetadata = (deviceId: string) => server.remove(`/device-instance/${deviceId}/metadata`) \ No newline at end of file +/** + * 删除设备物模型 + * @param deviceId 设备ID + * @returns + */ +export const deleteMetadata = (deviceId: string) => server.remove(`/device-instance/${deviceId}/metadata`) + +/** + * 保存设备物模型 + * @param id 设备ID + * @param data 物模型 + * @returns + */ +export const saveMetadata = (id: string, data: string) => server.put(`/device/instance/${id}/metadata`, data) \ No newline at end of file diff --git a/src/api/device/product.ts b/src/api/device/product.ts index ac44c574..53183eb3 100644 --- a/src/api/device/product.ts +++ b/src/api/device/product.ts @@ -1,3 +1,26 @@ import server from '@/utils/request' +import type { DeviceMetadata } from '@/views/device/Product/typings' -export const queryNoPagingPost = (data: any) => server.post(`/device-product/_query/no-paging?paging=false`, data) \ No newline at end of file +/** + * 根据条件查询产品(不带翻页) + * @param data 查询条件 + * @returns + */ +export const queryNoPagingPost = (data: any) => server.post(`/device-product/_query/no-paging?paging=false`, data) + +/** + * 导入第三方物模型 + * @param direction from|to + * @param type 物模型类型 + * @param data 物模型数据 + * @returns + */ +export const convertMetadata = (direction: 'from' | 'to', type: string, data: any) => server.post(`/device/product/metadata/convert-${direction}/${type}`, data) + +/** + * 修改产品 + * @param id 产品ID + * @param data 产品数据 + * @returns + */ +export const modify = (id: string, data: any) => server.put(`/device-product/${id}`, data) \ No newline at end of file diff --git a/src/components/CardBox/index.vue b/src/components/CardBox/index.vue index 1cc26f6e..4da3e72c 100644 --- a/src/components/CardBox/index.vue +++ b/src/components/CardBox/index.vue @@ -54,31 +54,24 @@ delete: item.key === 'delete', }" > + - - + @@ -291,10 +284,10 @@ const handleClick = () => { display: flex; flex-grow: 1; - > span, - & button { - width: 100%; - border-radius: 0; + & > span, + button { + width: 100% !important; + border-radius: 0 !important; } button { @@ -372,9 +365,9 @@ const handleClick = () => { } } - :deep(.ant-tooltip-disabled-compatible-wrapper) { - width: 100%; - } + // :deep(.ant-tooltip-disabled-compatible-wrapper) { + // width: 100%; + // } } } } diff --git a/src/components/RadioCard/index.vue b/src/components/RadioCard/index.vue new file mode 100644 index 00000000..2d27ba0b --- /dev/null +++ b/src/components/RadioCard/index.vue @@ -0,0 +1,71 @@ + + + + + + diff --git a/src/components/Table/index.module.less b/src/components/Table/index.module.less new file mode 100644 index 00000000..a0e94e07 --- /dev/null +++ b/src/components/Table/index.module.less @@ -0,0 +1,52 @@ +.jtable-body { + width: 100%; + padding: 0 24px 24px; + background-color: white; + .jtable-body-header { + padding: 16px 0; + display: flex; + justify-content: space-between; + align-items: center; + .jtable-body-header-right { + display: flex; + gap: 8px; + .jtable-setting-item { + color: rgba(0, 0, 0, 0.75); + font-size: 16px; + cursor: pointer; + + &:hover { + color: @primary-color-hover; + } + + &.active { + color: @primary-color-active; + } + } + } + } + .jtable-content { + .jtable-alert { + margin-bottom: 16px; + } + .jtable-card { + .jtable-card-items { + display: grid; + grid-gap: 26px; + .jtable-card-item { + display: flex; + } + } + } + } + .jtable-pagination { + margin-top: 20px; + display: flex; + justify-content: flex-end; + :global { + .ant-pagination-item { + display: none !important; + } + } + } +} \ No newline at end of file diff --git a/src/components/Table/index.tsx b/src/components/Table/index.tsx new file mode 100644 index 00000000..915657c7 --- /dev/null +++ b/src/components/Table/index.tsx @@ -0,0 +1,313 @@ +import { UnorderedListOutlined, AppstoreOutlined } from '@ant-design/icons-vue' +import styles from './index.module.less' +import { Pagination, Table, Empty, Spin, Alert } from 'ant-design-vue' +import type { TableProps, ColumnProps } from 'ant-design-vue/es/table' +import type { TooltipProps } from 'ant-design-vue/es/tooltip' +import type { PopconfirmProps } from 'ant-design-vue/es/popconfirm' +import { CSSProperties, PropType } from 'vue'; + +enum ModelEnum { + TABLE = 'TABLE', + CARD = 'CARD', +} + +type RequestData = { + code: string; + result: { + data: Record[] | undefined; + pageIndex: number; + pageSize: number; + total: number; + }; + status: number; +} & Record; + +export interface ActionsType { + key: string; + text?: string; + disabled?: boolean; + permission?: boolean; + onClick?: (data: any) => void; + style?: CSSProperties; + tooltip?: TooltipProps; + popConfirm?: PopconfirmProps; + icon?: string; +} + +export interface JColumnProps extends ColumnProps{ + scopedSlots?: boolean; // 是否为插槽 true: 是 false: 否 +} + +export interface JTableProps extends TableProps{ + request?: (params: Record & { + pageSize: number; + pageIndex: number; + }) => Promise>; + cardBodyClass?: string; + columns: JColumnProps[]; + params?: Record & { + pageSize: number; + pageIndex: number; + }; + model?: keyof typeof ModelEnum | undefined; // 显示table还是card + // actions?: ActionsType[]; + noPagination?: boolean; + rowSelection?: TableProps['rowSelection']; + cardProps?: Record; + dataSource?: Record[]; + gridColumn: number; + /** + * 用于不同分辨率 + * gridColumns[0] 1366 ~ 1440 分辨率; + * gridColumns[1] 1440 ~ 1600 分辨率; + * gridColumns[2] > 1600 分辨率; + */ + gridColumns?: number[]; + alertRender?: boolean; +} + +const JTable = defineComponent({ + name: 'JTable', + slots: [ + 'headerTitle', // 顶部左边插槽 + 'card', // 卡片内容 + ], + emits: [ + 'modelChange', // 切换卡片和表格 + ], + props: { + request: { + type: Function, + default: undefined + }, + cardBodyClass: { + type: String, + default: '' + }, + columns: { + type: Array, + default: () => [] + }, + params: { + type: Object, + default: () => {} + }, + model: { + type: [String, undefined], + default: undefined + }, + // actions: { + // type: Array as PropType, + // default: () => [] + // }, + noPagination: { + type: Boolean, + default: false + }, + rowSelection: { + type: Object as PropType, + default: () => undefined + }, + cardProps: { + type: Object, + default: undefined + }, + dataSource: { + type: Array, + default: () => [] + }, + gridColumns: { + type: Array as PropType, + default: [2, 3, 4] + }, + gridColumn: { + type: Number, + default: 4 + }, + alertRender: { + type: Boolean, + default: true + } + } as any, + setup(props: JTableProps ,{ slots, emit }){ + const simpleImage = Empty.PRESENTED_IMAGE_SIMPLE + const _model = ref(props.model ? props.model : ModelEnum.CARD); // 模式切换 + const column = ref(props.gridColumn || 4); + const _dataSource = ref[]>([]) + const pageIndex = ref(0) + const pageSize = ref(6) + const total = ref(0) + const _columns = ref(props?.columns || []) + const loading = ref(true) + + /** + * 监听宽度,计算显示卡片个数 + */ + const windowChange = () => { + if (window.innerWidth <= 1440) { + const _column = props.gridColumn && props.gridColumn < 2 ? props.gridColumn : 2; + column.value = props.gridColumns ? props.gridColumns[0] : _column + } else if (window.innerWidth > 1440 && window.innerWidth <= 1600) { + const _column = props.gridColumn && props.gridColumn < 3 ? props.gridColumn : 3; + column.value = props.gridColumns ? props.gridColumns[1] : _column + } else if (window.innerWidth > 1600) { + const _column = props.gridColumn && props.gridColumn < 4 ? props.gridColumn : 4; + column.value = props.gridColumns ? props.gridColumns[2] : _column + } + } + + /** + * 请求数据 + */ + const handleSearch = async (_params?: Record) => { + loading.value = true + if(props.request) { + const resp = await props.request({ + pageSize: 12, + pageIndex: 1, + ..._params + }) + if(resp.status === 200){ + // 判断如果是最后一页且最后一页为空,就跳转到前一页 + if(resp.result?.data?.length === 0 && resp.result.total && resp.result.pageSize && resp.result.pageIndex) { + handleSearch({ + ..._params, + pageSize: pageSize.value, + pageIndex: pageIndex.value - 1, + }) + } else { + _dataSource.value = resp.result?.data || [] + pageIndex.value = resp.result?.pageIndex || 0 + pageSize.value = resp.result?.pageSize || 6 + total.value = resp.result?.total || 0 + } + } + } else { + _dataSource.value = props?.dataSource || [] + } + loading.value = false + } + + watchEffect(() => { + handleSearch(props.params) + }) + + onMounted(() => { + window.onresize = () => { + windowChange() + } + }) + + onUnmounted(() => { + window.onresize = null + }) + + return () => +
+
+
+ {/* 顶部左边插槽 */} + {slots.headerTitle && slots.headerTitle()} +
+
+
{ + _model.value = ModelEnum.CARD + }}> + +
+
{ + _model.value = ModelEnum.TABLE + }}> + +
+
+
+ {/* content */} +
+ { + props.alertRender && props?.rowSelection && props?.rowSelection?.selectedRowKeys && props.rowSelection.selectedRowKeys?.length ? +
+ { + emit('cancelSelect') + }} + closeText={取消选择} + /> +
: null + } + { + _model.value === ModelEnum.CARD ? +
+ { + _dataSource.value.length ? +
+ { + _dataSource.value.map(item => slots.card ? +
+ {slots.card(item)} +
: null + ) + } +
: +
+ } +
: +
+ ) => { + const {column, record} = dt; + if((column?.key || column?.dataIndex) && column?.scopedSlots && (slots?.[column?.dataIndex] || slots?.[column?.key])) { + const _key = column?.key || column?.dataIndex + return slots?.[_key]!(record) + } else { + return record?.[column?.dataIndex] || '' + } + } + }} + /> + + } + + {/* 分页 */} + { + _dataSource.value.length && !props.noPagination && +
+ { + return `第 ${range[0]} - ${range[1]} 条/总共 ${total} 条` + }} + onChange={(page, size) => { + handleSearch({ + ...props.params, + pageSize: size, + pageIndex: pageSize.value === size ? page : 1, + }) + }} + /> +
+ } + + + } +}) + +export default JTable diff --git a/src/components/Table/index.vue b/src/components/Table/index.vue index d352dcc4..274d5d3b 100644 --- a/src/components/Table/index.vue +++ b/src/components/Table/index.vue @@ -79,7 +79,7 @@ - diff --git a/src/views/demo/test.tsx b/src/views/demo/test.tsx new file mode 100644 index 00000000..b2204213 --- /dev/null +++ b/src/views/demo/test.tsx @@ -0,0 +1,9 @@ +import { Button } from 'ant-design-vue' + +export default defineComponent({ + setup(){ + return () =>
+ +
+ } +}) \ No newline at end of file diff --git a/src/views/device/Instance/typings.d.ts b/src/views/device/Instance/typings.d.ts new file mode 100644 index 00000000..2fbe7f1c --- /dev/null +++ b/src/views/device/Instance/typings.d.ts @@ -0,0 +1,84 @@ +export type DeviceInstance = { + id: string; + name: string; + describe: string; + description: string; + productId: string; + productName: string; + protocolName: string; + security: any; + deriveMetadata: string; + metadata: string; + binds: any; + state: { + value: string; + text: string; + }; + creatorId: string; + creatorName: string; + createTime: number; + registryTime: string; + disabled?: boolean; + aloneConfiguration?: boolean; + deviceType: { + value: string; + text: string; + }; + transportProtocol: string; + messageProtocol: string; + orgId: string; + orgName: string; + configuration: Record; + relations?: any[]; + cachedConfiguration: any; + transport: string; + protocol: string; + address: string; + registerTime: number; + onlineTime: string | number; + offlineTime: string | number; + tags: any; + photoUrl: string; + independentMetadata?: boolean; + accessProvider?: string; + accessId?: string; + features?: any[]; + parentId?: string; + classifiedName?: string; +}; + +type Unit = { + id: string; + name: string; + symbol: string; + text: string; + type: string; + value: string; + description: string; +}; + +type PropertyData = { + data: { + value?: + | { + formatValue: string; + property: string; + value: any; + } + | any; + timeString: string; + timestamp: number; + formatValue: string; + property: string; + }; +}; + +type InstanceModel = { + current: Partial; + detail: Partial; + config: any; + metadataItem: MetadataItem; + params: Set; // 处理无限循环Card + active?: string; // 当前编辑的Card + selectedRows: Map; +} \ No newline at end of file diff --git a/src/views/device/Product/typings.d.ts b/src/views/device/Product/typings.d.ts new file mode 100644 index 00000000..d7b9c831 --- /dev/null +++ b/src/views/device/Product/typings.d.ts @@ -0,0 +1,179 @@ +import type { BaseItem, State } from '@/utils/typings'; + +type DeviceType = { + text: string; + value: string; +}; + +export type ProductItem = { + id: string; + name: string; + classifiedId: string | string[]; + classifiedName: string; + configuration: Record; + createTime: number; + updateTime: number; + creatorId: string; + deviceType: DeviceType; + deviceTypeId?: string; + count?: number; + messageProtocol: string; + metadata: string; + orgId: string; + protocolName: string; + state: number; + transportProtocol: string; + describe?: string; + accessId?: string; + accessName?: string; + photoUrl?: string; + storePolicy?: string; + accessProvider?: string; + modifyTime?: string; +}; + +export type ConfigProperty = { + property: string; + name: string; + description: string; + type: { + name: string; + id: string; + type: string; + elements?: any[]; + expands?: any; + }; + scopes: any[]; +}; + +export type ConfigMetadata = { + name: string; + description: string; + scopes: any[]; + properties: ConfigProperty[]; +}; + +export type MetadataType = 'events' | 'functions' | 'properties' | 'tags'; + +export type DeviceMetadata = { + events: Partial[]; + properties: Partial[]; + functions: Partial[]; + tags: Partial[]; +}; +export type MetadataItem = Partial & + Record; + +type EventMetadata = { + id: string; + name: string; + expands?: { + eventType?: string; + level?: string; + } & Record; + valueType: { + type: string; + properties: { + id: string; + name: string; + dataType: string; + valueType: { + type: string; + } & Record; + }[]; + }; + description: string; +}; +type FunctionMetadata = { + id: string; + name: string; + async: boolean; + output: Record; + inputs: ({ + id: string; + name: string; + valueType: { + type: string; + } & Record; + } & Record)[]; +}; +type PropertyMetadata = { + id: string; + name: string; + dataType?: string; + valueType: { + type: string; + } & Record; + expands: Record; + description?: string; + // 运行状态处需要数据 + list?: Record[]; +}; +type TagMetadata = { + id: string; + name: string; + valueType: { + type: string; + } & Record; + expands: Record; +}; + +type AlarmRule = { + actions: { + configuration: Record; + executor: string; + }[]; + productId: string; + productName: string; + properties: Record[]; + shakeLimit: Record; + triggers: Record[]; +} & BaseItem; + +type AlarmSetting = { + state: State; + createTime: number; + target: string; + targetId: string; + alarmRule: AlarmRule[]; +} & BaseItem; + +type AlarmRecord = { + id: string; + alarmId: string; + alarmName: string; + alarmTime: number; + description: string; + deviceId: string; + deviceName: string; + productId: string; + productName: string; + state: string; + updateTime: number; + alarmData: { + alarmId: string; + alarmName: string; + deviceId: string; + deviceName: string; + id: string; + productId: string; + productName: string; + timestamp: number; + } & Record; +}; + +type UnitType = { + id: string; + name: string; + description: string; + symbol: string; + text: string; + type: string; + value: string; +}; + +type ObserverMetadata = { + type: unknown[]; + subscribe: (data: any) => void; + next: (data: any) => void; +}; diff --git a/src/views/link/AccessConfig/Detail/index.vue b/src/views/link/AccessConfig/Detail/index.vue index 97c13e2e..5c9b4546 100644 --- a/src/views/link/AccessConfig/Detail/index.vue +++ b/src/views/link/AccessConfig/Detail/index.vue @@ -9,7 +9,8 @@
- + +
@@ -17,10 +18,11 @@ \ No newline at end of file + diff --git a/src/views/link/AccessConfig/components/Media/index.vue b/src/views/link/AccessConfig/components/Media/index.vue new file mode 100644 index 00000000..75957aea --- /dev/null +++ b/src/views/link/AccessConfig/components/Media/index.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/views/link/AccessConfig/components/Network.vue b/src/views/link/AccessConfig/components/Network.vue index 8bb9b232..163d4813 100644 --- a/src/views/link/AccessConfig/components/Network.vue +++ b/src/views/link/AccessConfig/components/Network.vue @@ -35,18 +35,34 @@ : descriptionList[provider.id], }" > -
- -
+ @@ -130,37 +131,31 @@
- - + + - + @@ -259,7 +254,7 @@ :scroll="{ y: 300 }" >