| @@ -3,8 +3,14 @@ ENV = 'development' | |||
| # 默认BASE URL | |||
| VUE_APP_BASE_API = '' | |||
| # minio | |||
| VUE_APP_MINIO_API = 'http://{HOST}/minio' | |||
| # 数据管理 | |||
| VUE_APP_DATA_API = '' | |||
| # 训练可视化 | |||
| VUE_APP_VISUAL_API = '' | |||
| # 用户 minio 访问地址 | |||
| VUE_APP_MINIO_API = '' | |||
| # atlas 服务,需要单独部署 | |||
| VUE_APP_ATLAS_HOST = '' | |||
| @@ -14,6 +20,7 @@ VUE_APP_ATLAS_HOST = '' | |||
| VUE_APP_DCM_API = 'http://{HOST}/dcm4chee/dcm4chee-arc/aets/DCM4CHEE_ADMIN' | |||
| # minIO 服务 IP | |||
| # 部署文档参考:http://docs.dubhe.ai/docs/setup/deploy-minio | |||
| VUE_APP_MINIO_ENDPOINT = '' | |||
| # minIO 服务 端口 | |||
| @@ -23,4 +30,7 @@ VUE_APP_MINIO_PORT = '9000' | |||
| VUE_APP_MINIO_USESSL = 'false' | |||
| # bucketName | |||
| VUE_APP_MINIO_BUCKETNAME = 'dubhe-dev' | |||
| VUE_APP_MINIO_BUCKETNAME = 'dubhe-cloud-dev' | |||
| # 文档链接 | |||
| VUE_APP_DOCS_URL = http://docs.dubhe.ai/docs/ | |||
| @@ -5,9 +5,16 @@ VUE_APP_MOCK=true | |||
| # 默认BASE URL,需要自行配置 | |||
| VUE_APP_BASE_API = '/mock' | |||
| VUE_APP_DATA_API = '/mock' | |||
| # 训练可视化 | |||
| VUE_APP_VISUAL_API = '' | |||
| # 用户 minio 访问地址 | |||
| VUE_APP_MINIO_API = 'http://{HOST}/minio' | |||
| VUE_APP_MINIO_API = '' | |||
| # atlas | |||
| VUE_APP_ATLAS_HOST = '' | |||
| # minIO 服务 IP | |||
| VUE_APP_MINIO_ENDPOINT = '' | |||
| @@ -19,4 +26,7 @@ VUE_APP_MINIO_PORT = '9000' | |||
| VUE_APP_MINIO_USESSL = 'false' | |||
| # bucketName | |||
| VUE_APP_MINIO_BUCKETNAME = 'dubhe-dev' | |||
| VUE_APP_MINIO_BUCKETNAME = 'dubhe-cloud-dev' | |||
| # 文档链接 | |||
| VUE_APP_DOCS_URL = http://docs.dubhe.ai/docs/ | |||
| @@ -1,13 +1,19 @@ | |||
| ENV = 'production' | |||
| # 默认BASE URL, 后端服务地址 | |||
| VUE_APP_BASE_API = 'http://127.0.0.1:8000' | |||
| VUE_APP_BASE_API = '' | |||
| # 数据管理 | |||
| VUE_APP_DATA_API = '' | |||
| # 训练可视化 | |||
| VUE_APP_VISUAL_API = '' | |||
| # 用户 minio 访问地址 | |||
| VUE_APP_MINIO_API = 'http://{HOST}/minio' | |||
| VUE_APP_MINIO_API = '' | |||
| # atlas 服务,需要单独部署 | |||
| VUE_APP_ATLAS_HOST = 'http://127.0.0.1:8000' | |||
| VUE_APP_ATLAS_HOST = '' | |||
| # 医疗影像 DCM4CHEE 服务访问地址 | |||
| # 部署文档参考:http://docs.dubhe.ai/docs/setup/deploy-algorithm | |||
| @@ -15,7 +21,7 @@ VUE_APP_DCM_API = 'http://{HOST}/dcm4chee/dcm4chee-arc/aets/DCM4CHEE_ADMIN' | |||
| # minIO 服务 IP | |||
| # 部署文档参考:http://docs.dubhe.ai/docs/setup/deploy-minio | |||
| VUE_APP_MINIO_ENDPOINT = '{IP}' | |||
| VUE_APP_MINIO_ENDPOINT = '' | |||
| # minIO 服务 端口 | |||
| VUE_APP_MINIO_PORT = '9000' | |||
| @@ -25,3 +31,6 @@ VUE_APP_MINIO_USESSL = 'false' | |||
| # bucketName | |||
| VUE_APP_MINIO_BUCKETNAME = 'dubhe-prod' | |||
| # 文档链接 | |||
| VUE_APP_DOCS_URL = http://docs.dubhe.ai/docs/ | |||
| @@ -3,6 +3,12 @@ ENV = 'test' | |||
| # 默认BASE URL | |||
| VUE_APP_BASE_API = '' | |||
| # 数据管理 | |||
| VUE_APP_DATA_API = '' | |||
| # 训练可视化 | |||
| VUE_APP_VISUAL_API = '' | |||
| # 用户 minio 访问地址 | |||
| VUE_APP_MINIO_API = '' | |||
| @@ -14,6 +20,7 @@ VUE_APP_ATLAS_HOST = '' | |||
| VUE_APP_DCM_API = 'http://{HOST}/dcm4chee/dcm4chee-arc/aets/DCM4CHEE_ADMIN' | |||
| # minIO 服务 IP | |||
| # 部署文档参考:http://docs.dubhe.ai/docs/setup/deploy-minio | |||
| VUE_APP_MINIO_ENDPOINT = '' | |||
| # minIO 服务 端口 | |||
| @@ -23,5 +30,7 @@ VUE_APP_MINIO_PORT = '9000' | |||
| VUE_APP_MINIO_USESSL = 'false' | |||
| # BucketName | |||
| VUE_APP_MINIO_BUCKETNAME = 'dubhe-test' | |||
| VUE_APP_MINIO_BUCKETNAME = 'dubhe-cloud-test' | |||
| # 文档链接 | |||
| VUE_APP_DOCS_URL = http://docs.dubhe.ai/docs/ | |||
| @@ -3,4 +3,6 @@ src/assets | |||
| public | |||
| dist | |||
| src/components/Crud | |||
| mock | |||
| mock | |||
| src/views/visual | |||
| src/store/modules/Visual | |||
| @@ -19,53 +19,29 @@ module.exports = { | |||
| } | |||
| }, | |||
| rules: { | |||
| "comma-dangle": [2, "always-multiline"], | |||
| "no-var": "error", | |||
| "no-console": [2, { allow: ["warn", "error"] }], | |||
| "no-restricted-syntax": "off", | |||
| 'prettier/prettier': [ | |||
| 'error', | |||
| { | |||
| printWidth: 100, | |||
| semi: true, | |||
| singleQuote: true, | |||
| trailingComma: 'es5', | |||
| endOfLine: 'auto', | |||
| arrowParens: 'always', | |||
| }, | |||
| ], | |||
| 'vue/require-default-prop': 'off', | |||
| 'vue/attribute-hyphenation': 'off', | |||
| 'no-console': ['error', { allow: ['warn', 'error', 'info'] }], | |||
| 'no-param-reassign': 'off', | |||
| 'import/extensions': 'off', | |||
| 'import/prefer-default-export': 'off', | |||
| "no-shadow": "off", | |||
| "no-underscore-dangle": "off", | |||
| "no-unused-expressions": "off", | |||
| "no-restricted-syntax": "off", | |||
| "guard-for-in": "off", | |||
| "object-shorthand": 2, | |||
| "consistent-return": "off", | |||
| "camelcase": "off", | |||
| "no-multi-assign": "off", | |||
| "no-shadow": "off", | |||
| "no-restricted-globals": "off", | |||
| "no-restricted-properties": "off", | |||
| "no-prototype-builtins": "off", | |||
| "no-unused-vars": [ | |||
| 2, | |||
| { ignoreRestSiblings: true, argsIgnorePattern: "^h$" } | |||
| ], | |||
| "import/prefer-default-export": "off", | |||
| 'import/extensions': ['error', 'always', { | |||
| 'js': 'never', | |||
| 'vue': 'never' | |||
| }], | |||
| "no-unused-expressions": "off", | |||
| "no-undef": 2, | |||
| camelcase: "off", | |||
| "no-extra-boolean-cast": "off", | |||
| "no-param-reassign":"off", | |||
| semi: ["error", "always"], | |||
| "vue/require-prop-types": "off", | |||
| "vue/require-default-prop": "off", | |||
| "vue/no-reserved-keys": "off", | |||
| "vue/attribute-hyphenation": "off", | |||
| "vue/comment-directive": "off", | |||
| "vue/prop-name-casing": "off", | |||
| "vue/max-attributes-per-line": [2, { | |||
| singleline: 20, | |||
| multiline: { | |||
| max: 1, | |||
| allowFirstLine: false | |||
| }} | |||
| ], | |||
| "vue/html-indent": ["error", 2, { | |||
| "attribute": 1, | |||
| "baseIndent": 1, | |||
| "closeBracket": 0, | |||
| "alignAttributesVertically": true, | |||
| "ignores": [] | |||
| }] | |||
| } | |||
| }; | |||
| @@ -2,7 +2,7 @@ module.exports = { | |||
| code: 200, | |||
| msg: null, | |||
| data: { | |||
| "finished": 10, | |||
| "unfinished": 0 | |||
| "publicCount": 10, | |||
| "privateCount": 0 | |||
| } | |||
| } | |||
| @@ -0,0 +1,8 @@ | |||
| module.exports = { | |||
| code: 200, | |||
| msg: null, | |||
| data: { | |||
| "trainId": 607, | |||
| "id": 1204 | |||
| }, | |||
| } | |||
| @@ -1,4 +1,5 @@ | |||
| // 定义 RESTful 接口和实际代码的映射 | |||
| module.exports = { | |||
| 'GET::/api/data/datasets/(\\d+)/count': 'api/data/datasets/count', | |||
| 'GET::/api/v1/data/datasets/(\\d+)/count': 'api/v1/data/datasets/count', | |||
| 'DELETE::/api/v1/train/trainJob': 'api/v1/train/trainJobDelete', | |||
| }; | |||
| @@ -13,6 +13,8 @@ | |||
| "scripts": { | |||
| "mock": "vue-cli-service serve --mode mock --open", | |||
| "dev": "vue-cli-service serve --open", | |||
| "serve": "vue-cli-service serve --host 0.0.0.0", | |||
| "serve:test": "vue-cli-service serve --mode test --open", | |||
| "build:prod": "vue-cli-service build", | |||
| "build:test": "vue-cli-service build --mode test", | |||
| "build:dev": "vue-cli-service build --mode development", | |||
| @@ -40,9 +42,10 @@ | |||
| "dependencies": { | |||
| "@riophae/vue-treeselect": "0.1.0", | |||
| "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", | |||
| "@vue/composition-api": "^0.5.0", | |||
| "@vue/composition-api": "^1.0.0-rc.1", | |||
| "@wulucxy/dwv": "0.28.1-beta.9", | |||
| "add-dom-event-listener": "^1.1.0", | |||
| "assert": "^2.0.0", | |||
| "axios": "0.18.1", | |||
| "chroma-js": "^2.1.0", | |||
| "classnames": "^2.2.6", | |||
| @@ -59,11 +62,11 @@ | |||
| "element-ui": "2.13.2", | |||
| "file-saver": "^2.0.2", | |||
| "filereader-stream": "^2.0.0", | |||
| "immutability-helper": "^3.1.1", | |||
| "jquery": "^3.5.1", | |||
| "jquery-contextmenu": "^2.9.1", | |||
| "js-beautify": "^1.13.0", | |||
| "js-cookie": "2.2.0", | |||
| "jschardet": "^2.2.1", | |||
| "jsencrypt": "^3.0.0-rc.1", | |||
| "json2csv": "^5.0.1", | |||
| "lodash": "^4.17.15", | |||
| @@ -72,8 +75,10 @@ | |||
| "normalize.css": "7.0.0", | |||
| "nprogress": "0.2.0", | |||
| "p-map": "^4.0.0", | |||
| "papaparse": "^5.3.0", | |||
| "path-to-regexp": "^6.2.0", | |||
| "portal-vue": "^2.1.7", | |||
| "prism-themes": "^1.5.0", | |||
| "prismjs": "^1.20.0", | |||
| "promise.allsettled": "^1.0.2", | |||
| "qs": "^6.9.1", | |||
| @@ -88,7 +93,10 @@ | |||
| "vue-prism-component": "^1.2.0", | |||
| "vue-prism-editor": "^1.2.2", | |||
| "vue-router": "^3.0.2", | |||
| "vuex": "3.1.0" | |||
| "vuex": "3.1.0", | |||
| "wavesurfer.js": "^4.6.0", | |||
| "web-highlighter": "^0.7.1", | |||
| "xlsx": "^0.16.9" | |||
| }, | |||
| "devDependencies": { | |||
| "@babel/core": "7.0.0", | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template> | |||
| <div id="app"> | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/v1/algorithm', | |||
| url: `/${API_MODULE_NAME.ALGORITHM}/algorithms`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/v1/algorithm', | |||
| url: `/${API_MODULE_NAME.ALGORITHM}/algorithms`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/v1/algorithm', | |||
| url: `/${API_MODULE_NAME.ALGORITHM}/algorithms`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -42,7 +43,7 @@ export function edit(data) { | |||
| export function del(ids) { | |||
| return request({ | |||
| url: 'api/v1/algorithm', | |||
| url: `/${API_MODULE_NAME.ALGORITHM}/algorithms`, | |||
| method: 'delete', | |||
| data: ids, | |||
| }); | |||
| @@ -50,7 +51,15 @@ export function del(ids) { | |||
| export function myAlgorithmCount() { | |||
| return request({ | |||
| url: `api/v1/algorithm/myAlgorithmCount`, | |||
| url: `/${API_MODULE_NAME.ALGORITHM}/algorithms/myAlgorithmCount`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| // 获取可推理算法列表 | |||
| export function getInferenceAlgorithm() { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ALGORITHM}/algorithms/getInferenceAlgorithm`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/v1/algorithmUsage', | |||
| url: `/${API_MODULE_NAME.ALGORITHM}/algorithmUsage`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/v1/algorithmUsage', | |||
| url: `/${API_MODULE_NAME.ALGORITHM}/algorithmUsage`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function del(ids) { | |||
| return request({ | |||
| url: 'api/v1/algorithmUsage', | |||
| url: `/${API_MODULE_NAME.ALGORITHM}/algorithmUsage`, | |||
| method: 'delete', | |||
| data: ids, | |||
| }); | |||
| @@ -1,25 +1,26 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| /* eslint-disable no-unreachable */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/v1/ptMeasure', | |||
| url: `/${API_MODULE_NAME.ATLAS}/ptMeasure`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -27,7 +28,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/v1/ptMeasure', | |||
| url: `/${API_MODULE_NAME.ATLAS}/ptMeasure`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -35,7 +36,7 @@ export function add(data) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/v1/ptMeasure', | |||
| url: `/${API_MODULE_NAME.ATLAS}/ptMeasure`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -43,7 +44,7 @@ export function edit(data) { | |||
| export function del(ids) { | |||
| return request({ | |||
| url: 'api/v1/ptMeasure', | |||
| url: `/${API_MODULE_NAME.ATLAS}/ptMeasure`, | |||
| method: 'delete', | |||
| data: { ids }, | |||
| }); | |||
| @@ -51,7 +52,7 @@ export function del(ids) { | |||
| export function getGraphs(name) { | |||
| return request({ | |||
| url: 'api/v1/ptMeasure/byName', | |||
| url: `/${API_MODULE_NAME.ATLAS}/ptMeasure/byName`, | |||
| method: 'get', | |||
| params: { name }, | |||
| }); | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function login(data) { | |||
| return request({ | |||
| url: '/auth/login', | |||
| url: `/${API_MODULE_NAME.ADMIN}/auth/login`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function login(data) { | |||
| export function registerUser(data) { | |||
| return request({ | |||
| url: 'auth/userRegister', | |||
| url: `/${API_MODULE_NAME.ADMIN}/auth/userRegister`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function registerUser(data) { | |||
| export function resetPassword(data) { | |||
| return request({ | |||
| url: 'auth/resetPassword', | |||
| url: `/${API_MODULE_NAME.ADMIN}/auth/resetPassword`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -42,7 +43,7 @@ export function resetPassword(data) { | |||
| export function getCodeBySentEmail(data) { | |||
| return request({ | |||
| url: 'auth/getCodeBySentEmail', | |||
| url: `/${API_MODULE_NAME.ADMIN}/auth/getCodeBySentEmail`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -50,28 +51,28 @@ export function getCodeBySentEmail(data) { | |||
| export function getInfo() { | |||
| return request({ | |||
| url: 'auth/info', | |||
| url: `/${API_MODULE_NAME.ADMIN}/auth/info`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function getCodeImg() { | |||
| return request({ | |||
| url: '/auth/code', | |||
| url: `/${API_MODULE_NAME.ADMIN}/auth/code`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function getPublicKey() { | |||
| return request({ | |||
| url: '/auth/getPublicKey', | |||
| url: `/${API_MODULE_NAME.ADMIN}/auth/getPublicKey`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function logout() { | |||
| return request({ | |||
| url: 'auth/logout', | |||
| url: `/${API_MODULE_NAME.ADMIN}/auth/logout`, | |||
| method: 'delete', | |||
| }); | |||
| } | |||
| @@ -79,6 +80,6 @@ export function logout() { | |||
| // 获取minIO 秘钥 | |||
| export function getMinIOAuth() { | |||
| return request({ | |||
| url: 'api/data/datasets/minio/info', | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/minio/info`, | |||
| }); | |||
| } | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/batchServing', | |||
| url: `/${API_MODULE_NAME.BATCH_SERVING}/batchServices`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/batchServing', | |||
| url: `/${API_MODULE_NAME.BATCH_SERVING}/batchServices`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/batchServing', | |||
| url: `/${API_MODULE_NAME.BATCH_SERVING}/batchServices`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -42,7 +43,7 @@ export function edit(data) { | |||
| export function del(id) { | |||
| return request({ | |||
| url: `api/batchServing`, | |||
| url: `/${API_MODULE_NAME.BATCH_SERVING}/batchServices`, | |||
| method: 'delete', | |||
| data: { id }, | |||
| }); | |||
| @@ -50,7 +51,7 @@ export function del(id) { | |||
| export function detail(id) { | |||
| return request({ | |||
| url: `api/batchServing/detail`, | |||
| url: `/${API_MODULE_NAME.BATCH_SERVING}/batchServices/detail`, | |||
| method: 'get', | |||
| params: { id }, | |||
| }); | |||
| @@ -58,7 +59,7 @@ export function detail(id) { | |||
| export function start(id) { | |||
| return request({ | |||
| url: `api/batchServing/start`, | |||
| url: `/${API_MODULE_NAME.BATCH_SERVING}/batchServices/start`, | |||
| method: 'post', | |||
| data: { id }, | |||
| }); | |||
| @@ -66,7 +67,7 @@ export function start(id) { | |||
| export function stop(id) { | |||
| return request({ | |||
| url: `api/batchServing/stop`, | |||
| url: `/${API_MODULE_NAME.BATCH_SERVING}/batchServices/stop`, | |||
| method: 'post', | |||
| data: { id }, | |||
| }); | |||
| @@ -74,14 +75,14 @@ export function stop(id) { | |||
| export function getBatchServingPods(id) { | |||
| return request({ | |||
| url: `api/batchServing/pod/${id}`, | |||
| url: `/${API_MODULE_NAME.BATCH_SERVING}/batchServices/pod/${id}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function getServiceProgress(id) { | |||
| return request({ | |||
| url: `api/batchServing/queryById/${id}`, | |||
| url: `/${API_MODULE_NAME.BATCH_SERVING}/batchServices/queryById/${id}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/serving', | |||
| url: `/${API_MODULE_NAME.CLOUD_SERVING}/services`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/serving', | |||
| url: `/${API_MODULE_NAME.CLOUD_SERVING}/services`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/serving', | |||
| url: `/${API_MODULE_NAME.CLOUD_SERVING}/services`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -42,7 +43,7 @@ export function edit(data) { | |||
| export function del(id) { | |||
| return request({ | |||
| url: `api/serving`, | |||
| url: `/${API_MODULE_NAME.CLOUD_SERVING}/services`, | |||
| method: 'delete', | |||
| data: { id }, | |||
| }); | |||
| @@ -50,7 +51,7 @@ export function del(id) { | |||
| export function detail(id) { | |||
| return request({ | |||
| url: `api/serving/detail`, | |||
| url: `/${API_MODULE_NAME.CLOUD_SERVING}/services/detail`, | |||
| method: 'get', | |||
| params: { id }, | |||
| }); | |||
| @@ -58,7 +59,7 @@ export function detail(id) { | |||
| export function start(id) { | |||
| return request({ | |||
| url: `api/serving/start`, | |||
| url: `/${API_MODULE_NAME.CLOUD_SERVING}/services/start`, | |||
| method: 'post', | |||
| data: { id }, | |||
| }); | |||
| @@ -66,7 +67,7 @@ export function start(id) { | |||
| export function stop(id) { | |||
| return request({ | |||
| url: `api/serving/stop`, | |||
| url: `/${API_MODULE_NAME.CLOUD_SERVING}/services/stop`, | |||
| method: 'post', | |||
| data: { id }, | |||
| }); | |||
| @@ -74,7 +75,7 @@ export function stop(id) { | |||
| export function getPredictParam(id) { | |||
| return request({ | |||
| url: `api/serving/predictParam`, | |||
| url: `/${API_MODULE_NAME.CLOUD_SERVING}/services/predictParam`, | |||
| method: 'get', | |||
| params: { id }, | |||
| }); | |||
| @@ -82,28 +83,28 @@ export function getPredictParam(id) { | |||
| export function getMetrics(id) { | |||
| return request({ | |||
| url: `api/serving/metrics/${id}`, | |||
| url: `/${API_MODULE_NAME.CLOUD_SERVING}/services/metrics/${id}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function getServingPods(configId) { | |||
| return request({ | |||
| url: `api/serving/servingConfig/pod/${configId}`, | |||
| url: `/${API_MODULE_NAME.CLOUD_SERVING}/services/servingConfig/pod/${configId}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function getRollbackList(servingId) { | |||
| return request({ | |||
| url: `api/serving/rollback/${servingId}`, | |||
| url: `/${API_MODULE_NAME.CLOUD_SERVING}/services/rollback/${servingId}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function predict(data, params) { | |||
| return request({ | |||
| url: `api/serving/predict`, | |||
| url: `/${API_MODULE_NAME.CLOUD_SERVING}/services/predict`, | |||
| method: 'post', | |||
| headers: { 'Content-Type': 'multipart/form-data' }, | |||
| params, | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/v1/notebook/notebooks', | |||
| url: `/${API_MODULE_NAME.NOTEBOOK}/notebooks`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/v1/notebook/notebooks', | |||
| url: `/${API_MODULE_NAME.NOTEBOOK}/notebooks`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function del(ids) { | |||
| return request({ | |||
| url: 'api/v1/notebook', | |||
| url: `/${API_MODULE_NAME.NOTEBOOK}/notebooks`, | |||
| method: 'delete', | |||
| data: ids, | |||
| }); | |||
| @@ -42,7 +43,7 @@ export function del(ids) { | |||
| export function start(params) { | |||
| return request({ | |||
| url: 'api/v1/notebook/start', | |||
| url: `/${API_MODULE_NAME.NOTEBOOK}/notebooks/start`, | |||
| method: 'put', | |||
| params, | |||
| }); | |||
| @@ -50,7 +51,7 @@ export function start(params) { | |||
| export function stop(params) { | |||
| return request({ | |||
| url: 'api/v1/notebook/stop', | |||
| url: `/${API_MODULE_NAME.NOTEBOOK}/notebooks/stop`, | |||
| method: 'put', | |||
| params, | |||
| }); | |||
| @@ -58,35 +59,35 @@ export function stop(params) { | |||
| export function open(id) { | |||
| return request({ | |||
| url: `api/v1/notebook/${id}`, | |||
| url: `/${API_MODULE_NAME.NOTEBOOK}/notebooks/${id}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function getStatus() { | |||
| return request({ | |||
| url: `api/v1/notebook/status`, | |||
| url: `/${API_MODULE_NAME.NOTEBOOK}/notebooks/status`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function getModels() { | |||
| return request({ | |||
| url: `api/v1/notebook/notebook-model`, | |||
| url: `/${API_MODULE_NAME.NOTEBOOK}/notebooks/notebook-model`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function myNotebookCount() { | |||
| return request({ | |||
| url: `api/v1/notebook/run-number`, | |||
| url: `/${API_MODULE_NAME.NOTEBOOK}/notebooks/run-number`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function createNotebook(source, data) { | |||
| return request({ | |||
| url: `api/v1/notebook/create/${source}`, | |||
| url: `/${API_MODULE_NAME.NOTEBOOK}/notebooks/create/${source}`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -94,14 +95,14 @@ export function createNotebook(source, data) { | |||
| export function getNotebookAddress(id) { | |||
| return request({ | |||
| url: `api/v1/notebook/${id}/get-address`, | |||
| url: `/${API_MODULE_NAME.NOTEBOOK}/notebooks/${id}/get-address`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function detail(data) { | |||
| return request({ | |||
| url: 'api/v1/notebook/detail', | |||
| url: `/${API_MODULE_NAME.NOTEBOOK}/notebooks/detail`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/ptModelInfo', | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelInfo`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/ptModelInfo', | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelInfo`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/ptModelInfo', | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelInfo`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -42,18 +43,68 @@ export function edit(data) { | |||
| export function del(data) { | |||
| return request({ | |||
| url: 'api/ptModelInfo', | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelInfo`, | |||
| method: 'delete', | |||
| data, | |||
| }); | |||
| } | |||
| export function getModelByResource(modelResource) { | |||
| export function getModelByResource(modelResource, packaged) { | |||
| return request({ | |||
| url: 'api/ptModelInfo/byResource', | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelInfo/byResource`, | |||
| method: 'get', | |||
| params: { modelResource, packaged }, | |||
| }); | |||
| } | |||
| export function packageAtlasModel(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelInfo/package`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| export function getServingModel(modelResource) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelInfo/servingModel`, | |||
| method: 'get', | |||
| params: { modelResource }, | |||
| }); | |||
| } | |||
| export function addOptimizeModel(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelInfo/uploadModel`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| // 获取框架与模型格式之间的对应关系 | |||
| export function getModelTypeMap() { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelType`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| // 获取模型格式与模型文件后缀之间的对应关系 | |||
| export function getModelSuffix(params) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelSuffix`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| // 根据模型 ID 查询模型信息 | |||
| export function getModelById(id) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelInfo/byModelId`, | |||
| method: 'get', | |||
| params: { id }, | |||
| }); | |||
| } | |||
| export default { list, add, edit, del }; | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/ptModelBranch', | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelBranch`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/ptModelBranch', | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelBranch`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/ptModelBranch', | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelBranch`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -42,10 +43,27 @@ export function edit(data) { | |||
| export function del(data) { | |||
| return request({ | |||
| url: 'api/ptModelBranch', | |||
| url: `/${API_MODULE_NAME.MODEL}/ptModelBranch`, | |||
| method: 'delete', | |||
| data, | |||
| }); | |||
| } | |||
| export function convertPreset(data) { | |||
| return request({ | |||
| url: `${API_MODULE_NAME.MODEL}/ptModelBranch/convertPreset`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| // 模型格式转换,只支持转至 ONNX | |||
| export function formatConvert(id) { | |||
| return request({ | |||
| url: `${API_MODULE_NAME.MODEL}/ptModelBranch/convertOnnx`, | |||
| method: 'post', | |||
| data: { id }, | |||
| }); | |||
| } | |||
| export default { list, add, edit, del }; | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/modelOpt/task', | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/task`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/modelOpt/task', | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/task`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/modelOpt/task', | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/task`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -42,7 +43,7 @@ export function edit(data) { | |||
| export function del(data) { | |||
| return request({ | |||
| url: `api/modelOpt/task`, | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/task`, | |||
| method: 'delete', | |||
| data, | |||
| }); | |||
| @@ -50,7 +51,7 @@ export function del(data) { | |||
| export function getOptimizeAlgorithms(params) { | |||
| return request({ | |||
| url: 'api/modelOpt/task/getAlgorithm', | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/task/getAlgorithm`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -58,7 +59,7 @@ export function getOptimizeAlgorithms(params) { | |||
| export function getBuiltInModel(params) { | |||
| return request({ | |||
| url: 'api/modelOpt/task/getBuiltInModel', | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/task/getBuiltInModel`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -66,7 +67,7 @@ export function getBuiltInModel(params) { | |||
| export function getOptimizeDatasets(params) { | |||
| return request({ | |||
| url: 'api/modelOpt/task/getDataset', | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/task/getDataset`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -74,7 +75,7 @@ export function getOptimizeDatasets(params) { | |||
| export function getCustomizeDatasets(params) { | |||
| return request({ | |||
| url: 'api/modelOpt/task/MyDataset', | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/task/myDataset`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -82,15 +83,7 @@ export function getCustomizeDatasets(params) { | |||
| export function addCustomizeDatasets(data) { | |||
| return request({ | |||
| url: 'api/modelOpt/task/MyDataset', | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| export function addCustomizeModel(data) { | |||
| return request({ | |||
| url: 'api/ptModelInfo/uploadModel', | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/task/myDataset`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -98,7 +91,7 @@ export function addCustomizeModel(data) { | |||
| export function submit(data) { | |||
| return request({ | |||
| url: `api/modelOpt/task/submit`, | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/task/submit`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/modelOpt/taskInstance', | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/taskInstance`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function del(data) { | |||
| return request({ | |||
| url: `api/modelOpt/taskInstance`, | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/taskInstance`, | |||
| method: 'delete', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function del(data) { | |||
| export function getInstance(params) { | |||
| return request({ | |||
| url: `api/modelOpt/taskInstance/detail`, | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/taskInstance/detail`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -42,7 +43,7 @@ export function getInstance(params) { | |||
| export function cancel(data) { | |||
| return request({ | |||
| url: `api/modelOpt/taskInstance/cancel`, | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/taskInstance/cancel`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -50,7 +51,7 @@ export function cancel(data) { | |||
| export function resubmit(data) { | |||
| return request({ | |||
| url: `api/modelOpt/taskInstance/resubmit`, | |||
| url: `/${API_MODULE_NAME.MODEL_OPTIMIZE}/taskInstance/resubmit`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function batchFinishAnnotation(data, datasetId) { | |||
| return request({ | |||
| url: `api/data/datasets/files/${datasetId}/annotations`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/files/${datasetId}/annotations`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -27,7 +28,7 @@ export function batchFinishAnnotation(data, datasetId) { | |||
| export function delAnnotation(id) { | |||
| const delData = { datasetId: id }; | |||
| return request({ | |||
| url: 'api/data/datasets/files/annotations', | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/files/annotations`, | |||
| method: 'delete', | |||
| data: delData, | |||
| }); | |||
| @@ -35,7 +36,7 @@ export function delAnnotation(id) { | |||
| export function track(id) { | |||
| return request({ | |||
| url: `api/data/datasets/files/annotations/auto/track/${id}`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/files/annotations/auto/track/${id}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| @@ -43,7 +44,7 @@ export function track(id) { | |||
| export function autoAnnotate(ids) { | |||
| const data = { datasetIds: ids }; | |||
| return request({ | |||
| url: 'api/data/datasets/files/annotations/auto', | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/files/annotations/auto`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -51,7 +52,7 @@ export function autoAnnotate(ids) { | |||
| export function annotateStatus(id) { | |||
| return request({ | |||
| url: `api/data/datasets/${id}`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${id}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| @@ -59,7 +60,7 @@ export function annotateStatus(id) { | |||
| // 发布版本 | |||
| export function publish(data = {}) { | |||
| return request({ | |||
| url: 'api/data/datasets/versions', | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/versions`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -1,26 +1,27 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| const {datasetId} = params; | |||
| const { datasetId } = params; | |||
| delete params.datasetId; | |||
| return request({ | |||
| url: `api/data/datasets/${datasetId}/files`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${datasetId}/files`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -31,7 +32,7 @@ export function del(params) { | |||
| delete params.datasetIds; | |||
| params.datasetIds = [datasetId]; | |||
| return request({ | |||
| url: 'api/data/datasets/files', | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/files`, | |||
| method: 'delete', | |||
| data: params, | |||
| }); | |||
| @@ -39,7 +40,7 @@ export function del(params) { | |||
| export function submit(id, files) { | |||
| return request({ | |||
| url: `api/data/datasets/${id}/files`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${id}/files`, | |||
| method: 'post', | |||
| data: { files }, | |||
| }); | |||
| @@ -47,10 +48,36 @@ export function submit(id, files) { | |||
| export function submitVideo(id, data) { | |||
| return request({ | |||
| url: `api/data/datasets/${id}/video`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${id}/video`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| export function tableImport(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/tableImport`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| export function getAudioDetail(params) { | |||
| const { datasetId } = params; | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${datasetId}/files/audio`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| export function getCustomFileList(params) { | |||
| const { datasetId } = params; | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${datasetId}/files/filePage`, | |||
| method: 'post', | |||
| data: { ...params }, | |||
| }); | |||
| } | |||
| export default { list, del }; | |||
| @@ -1,39 +1,41 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function getLabels(id) { | |||
| return request({ | |||
| url: `api/data/datasets/${id}/labels`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${id}/labels`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function createLabel(id, label) { | |||
| return request({ | |||
| url: `api/data/datasets/${id}/labels`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${id}/labels`, | |||
| method: 'post', | |||
| data: label, | |||
| }); | |||
| } | |||
| export function editLabel(id, label) { | |||
| export function editLabel(labelId, label) { | |||
| label.labelId = labelId; | |||
| return request({ | |||
| url: `api/data/datasets/labels/${id}`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/labels`, | |||
| method: 'put', | |||
| data: label, | |||
| }); | |||
| @@ -41,8 +43,15 @@ export function editLabel(id, label) { | |||
| export function getAutoLabels(labelGroupType) { | |||
| return request({ | |||
| url: `api/data/datasets/labels/auto/${labelGroupType}`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/labels/auto/${labelGroupType}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function deleteLabel(datasetId, labelId) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/labels`, | |||
| method: 'delete', | |||
| data: { datasetId, labelId }, | |||
| }); | |||
| } | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: '/api/data/datasets', | |||
| url: `/${API_MODULE_NAME.DATA}/datasets`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -27,7 +28,7 @@ export function list(params) { | |||
| // 数据集详情 | |||
| export function detail(id) { | |||
| return request({ | |||
| url: `/api/data/datasets/${id}`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${id}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| @@ -35,7 +36,7 @@ export function detail(id) { | |||
| // 数据集状态(导入数据集轮询使用) | |||
| export function queryDatasetStatus(ids) { | |||
| return request({ | |||
| url: `/api/data/datasets/status`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/status`, | |||
| method: 'get', | |||
| params: { datasetIds: ids }, | |||
| }); | |||
| @@ -43,7 +44,7 @@ export function queryDatasetStatus(ids) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/data/datasets', | |||
| url: `/${API_MODULE_NAME.DATA}/datasets`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -52,7 +53,7 @@ export function add(data) { | |||
| export function del(ids) { | |||
| const delData = { ids }; | |||
| return request({ | |||
| url: 'api/data/datasets', | |||
| url: `/${API_MODULE_NAME.DATA}/datasets`, | |||
| method: 'delete', | |||
| data: delData, | |||
| }); | |||
| @@ -60,7 +61,7 @@ export function del(ids) { | |||
| export function editDataset(data) { | |||
| return request({ | |||
| url: `api/data/datasets/${data.id}`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${data.id}`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -68,15 +69,33 @@ export function editDataset(data) { | |||
| export function topDataset(data) { | |||
| return request({ | |||
| url: `api/data/datasets/${data.id}/top`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${data.id}/top`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| // 用普通数据集生成预置数据集 | |||
| export function convertPreset(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/convertPreset`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| // 查询数据集是否已转预置 | |||
| export function getConvertInfo(id) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/getConvertInfoByDatasetId`, | |||
| method: 'get', | |||
| params: { datasetId: id }, | |||
| }); | |||
| } | |||
| // 导入自定义数据集 | |||
| export function addCustomDataset(data) { | |||
| return request({ | |||
| url: `api/data/datasets/custom`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/custom`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -85,7 +104,16 @@ export function addCustomDataset(data) { | |||
| // 切换版本 | |||
| export function toggleVersion({ datasetId, versionName }) { | |||
| return request({ | |||
| url: `api/data/datasets/versions/${datasetId}`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/versions/${datasetId}`, | |||
| method: 'put', | |||
| params: { versionName }, | |||
| }); | |||
| } | |||
| // 切换OfRecord | |||
| export function shiftOfRecord({ datasetId, versionName }) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/versions/${datasetId}/ofRecord`, | |||
| method: 'put', | |||
| params: { versionName }, | |||
| }); | |||
| @@ -94,7 +122,7 @@ export function toggleVersion({ datasetId, versionName }) { | |||
| // 删除版本 | |||
| export function deleteVersion({ datasetId, versionName }) { | |||
| return request({ | |||
| url: `api/data/datasets/versions`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/versions`, | |||
| method: 'delete', | |||
| data: { datasetId, versionName }, | |||
| }); | |||
| @@ -102,7 +130,7 @@ export function deleteVersion({ datasetId, versionName }) { | |||
| export function getDatasetVersions(datasetId) { | |||
| return request({ | |||
| url: `/api/data/datasets/versions/${datasetId}/list`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/versions/${datasetId}/list`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| @@ -110,14 +138,14 @@ export function getDatasetVersions(datasetId) { | |||
| // 查询下一个发布版本号 | |||
| export function queryNextVersion(datasetId) { | |||
| return request({ | |||
| url: `/api/data/datasets/versions/${datasetId}/nextVersionName`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/versions/${datasetId}/nextVersionName`, | |||
| }); | |||
| }; | |||
| } | |||
| // 目标检测文件列表 | |||
| export function detectFileList(datasetId, params) { | |||
| return request({ | |||
| url: `api/data/datasets/${datasetId}/files/detection`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${datasetId}/files/detection`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -125,7 +153,7 @@ export function detectFileList(datasetId, params) { | |||
| export function getPublishedDatasets(params) { | |||
| return request({ | |||
| url: '/api/data/datasets/versions/filter', | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/versions/filter`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -134,7 +162,7 @@ export function getPublishedDatasets(params) { | |||
| // 查询文件偏移值 | |||
| export function queryFileOffset(datasetId, fileId, query = {}) { | |||
| return request({ | |||
| url: `api/data/datasets/${datasetId}/files/${fileId}/offset`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${datasetId}/files/${fileId}/offset`, | |||
| params: query, | |||
| }); | |||
| } | |||
| @@ -142,16 +170,16 @@ export function queryFileOffset(datasetId, fileId, query = {}) { | |||
| // 查询数据集标签 | |||
| export function queryLabels(datasetId, params) { | |||
| return request({ | |||
| url: `api/data/datasets/${datasetId}/labels`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${datasetId}/labels`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| // 创建数据集标签 | |||
| export function createLabel (datasetId, data) { | |||
| export function createLabel(datasetId, data) { | |||
| return request({ | |||
| url: `api/data/datasets/${datasetId}/labels`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${datasetId}/labels`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -160,7 +188,7 @@ export function createLabel (datasetId, data) { | |||
| // 查询预置标签 | |||
| export function queryPresetLabels() { | |||
| return request({ | |||
| url: `api/data/datasets/presetLabels`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/presetLabels`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| @@ -168,8 +196,7 @@ export function queryPresetLabels() { | |||
| // 查询数据增强字典 | |||
| export function queryDataEnhanceList() { | |||
| return request({ | |||
| baseURL: process.env.VUE_APP_BASE_API, | |||
| url: `api/v1/user/dict/dataset_enhance`, | |||
| url: `/${API_MODULE_NAME.ADMIN}/user/dict/dataset_enhance`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| @@ -177,7 +204,7 @@ export function queryDataEnhanceList() { | |||
| // 数据增强 | |||
| export function postDataEnhance(datasetId, types = []) { | |||
| return request({ | |||
| url: `api/data/datasets/enhance`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/enhance`, | |||
| data: { | |||
| datasetId, | |||
| types, | |||
| @@ -189,28 +216,37 @@ export function postDataEnhance(datasetId, types = []) { | |||
| // 指定原始文件,获取增强文件列表 | |||
| export function getEnhanceFileList(datasetId, fileId) { | |||
| return request({ | |||
| url: `api/data/datasets/${datasetId}/${fileId}/enhanceFileList`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${datasetId}/${fileId}/enhanceFileList`, | |||
| }); | |||
| } | |||
| // 根据数据集版本,获取原始文件数量 | |||
| export function getOriginFileCount(datasetId) { | |||
| return request({ | |||
| url: `api/data/datasets/versions/${datasetId}/originFileCount`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/versions/${datasetId}/originFileCount`, | |||
| }); | |||
| } | |||
| // 预置数据集和我的数据集的数量查询 | |||
| export function queryDatasetsCount() { | |||
| return request({ | |||
| url: `/api/data/datasets/count`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/count`, | |||
| }); | |||
| } | |||
| // 查询数据集状态 | |||
| export function queryDatasetsProgress(params) { | |||
| return request({ | |||
| url: `/api/data/datasets/progress`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/progress`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| // 查询数据集该搜索条件下的文件数量 | |||
| export function count(datasetId, params) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${datasetId}/count`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -1,52 +1,62 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| // 创建标签组 | |||
| export function add(data) { | |||
| return request({ | |||
| url: `/api/data/labelGroup`, | |||
| url: `/${API_MODULE_NAME.DATA}/labelGroup`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| // 编辑标签组 | |||
| export function edit(data) { | |||
| return request({ | |||
| url: `/api/data/labelGroup/${data.id}`, | |||
| url: `/${API_MODULE_NAME.DATA}/labelGroup/${data.id}`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| } | |||
| // 删除标签组 | |||
| export function del(ids) { | |||
| return request({ | |||
| url: `/api/data/labelGroup`, | |||
| url: `/${API_MODULE_NAME.DATA}/labelGroup`, | |||
| method: 'delete', | |||
| data: {ids}, | |||
| data: { ids }, | |||
| }); | |||
| } | |||
| // 复制标签组 | |||
| export function copy(data) { | |||
| return request({ | |||
| url: `/api/data/labelGroup/copy`, | |||
| url: `/${API_MODULE_NAME.DATA}/labelGroup/copy`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| // 将普通标签组转为预置标签组 | |||
| export function convertPreset(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.DATA}/labelGroup/convertPreset`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -55,7 +65,7 @@ export function copy(data) { | |||
| // 标签组列表分页查询 | |||
| export function list(params) { | |||
| return request({ | |||
| url: `/api/data/labelGroup/query`, | |||
| url: `/${API_MODULE_NAME.DATA}/labelGroup/query`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -64,7 +74,7 @@ export function list(params) { | |||
| // 标签组列表的简况查询 用于详情页选择标签组列举 | |||
| export function getLabelGroupList(params) { | |||
| return request({ | |||
| url: `/api/data/labelGroup/getList`, | |||
| url: `/${API_MODULE_NAME.DATA}/labelGroup/getList`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -73,13 +83,13 @@ export function getLabelGroupList(params) { | |||
| // 获取标签组详情 | |||
| export function getLabelGroupDetail(id) { | |||
| return request({ | |||
| url: `/api/data/labelGroup/${id}`, | |||
| url: `/${API_MODULE_NAME.DATA}/labelGroup/${id}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function importLabelGroup(form) { | |||
| return request.post(`api/data/labelGroup/import`, form, { | |||
| return request.post(`/${API_MODULE_NAME.DATA}/labelGroup/import`, form, { | |||
| headers: { | |||
| 'Content-Type': 'multipart/form-data', | |||
| }, | |||
| @@ -87,4 +97,3 @@ export function importLabelGroup(form) { | |||
| } | |||
| export default { list, add, del, edit }; | |||
| @@ -1,25 +1,26 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| // 获取数据集对应的 studyInstanceUID 和 seriesInstanceUID | |||
| export function getCaseInfo(datasetId) { | |||
| return request({ | |||
| url: `api/data/datasets/medical/detail/${datasetId}`, | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/detail/${datasetId}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| @@ -27,7 +28,7 @@ export function getCaseInfo(datasetId) { | |||
| // 获取自动标注详情 | |||
| export const queryAutoResult = (datasetId) => { | |||
| return request({ | |||
| url: `api/data/datasets/medical/getAuto/${datasetId}`, | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/getAuto/${datasetId}`, | |||
| method: 'get', | |||
| }); | |||
| }; | |||
| @@ -35,14 +36,14 @@ export const queryAutoResult = (datasetId) => { | |||
| // 获取手动标注详情 | |||
| export const queryManualResult = (datasetId) => { | |||
| return request({ | |||
| url: `api/data/datasets/medical/getFinished/${datasetId}`, | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/getFinished/${datasetId}`, | |||
| method: 'get', | |||
| }); | |||
| }; | |||
| export function list(params) { | |||
| return request({ | |||
| url: '/api/data/datasets/medical', | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -51,7 +52,7 @@ export function list(params) { | |||
| // 数据集详情 | |||
| export function detail(id) { | |||
| return request({ | |||
| url: `/api/data/datasets/medical/${id}`, | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/${id}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| @@ -59,7 +60,7 @@ export function detail(id) { | |||
| // 创建数据集 | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/data/datasets/medical', | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -68,7 +69,7 @@ export function add(data) { | |||
| // 保存标注 | |||
| export function save(data) { | |||
| return request({ | |||
| url: '/api/data/datasets/medical/annotation/save', | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/annotation/save`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -77,7 +78,7 @@ export function save(data) { | |||
| // 上传文件 | |||
| export function upload(datasetId, params) { | |||
| return request({ | |||
| url: '/api/data/datasets/medical/files', | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/files`, | |||
| method: 'post', | |||
| data: { | |||
| id: datasetId, | |||
| @@ -89,7 +90,7 @@ export function upload(datasetId, params) { | |||
| export function del(ids) { | |||
| const delData = { ids }; | |||
| return request({ | |||
| url: 'api/data/datasets/medical', | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical`, | |||
| method: 'delete', | |||
| data: delData, | |||
| }); | |||
| @@ -97,7 +98,7 @@ export function del(ids) { | |||
| export function editDataset(data) { | |||
| return request({ | |||
| url: `api/data/datasets/medical/${data.medicalId}`, | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/${data.medicalId}`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -106,7 +107,7 @@ export function editDataset(data) { | |||
| // 导入自定义数据集 | |||
| export function addCustomDataset(data) { | |||
| return request({ | |||
| url: `api/data/datasets/medical/custom`, | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/custom`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -115,7 +116,7 @@ export function addCustomDataset(data) { | |||
| export function autoAnnotate(id) { | |||
| const data = { medicalId: id }; | |||
| return request({ | |||
| url: 'api/data/datasets/medical/annotation/auto', | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/annotation/auto`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -124,7 +125,7 @@ export function autoAnnotate(id) { | |||
| // 查询数据集状态 | |||
| export function queryDatasetsProgress(params) { | |||
| return request({ | |||
| url: `/api/data/datasets/medical/annotation/schedule`, | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/annotation/schedule`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -133,7 +134,7 @@ export function queryDatasetsProgress(params) { | |||
| // 保存病灶信息 | |||
| export function saveLesions(medicalId, data) { | |||
| return request({ | |||
| url: `/api/data/datasets/medical/lesion/${medicalId}`, | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/lesion/${medicalId}`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -142,7 +143,7 @@ export function saveLesions(medicalId, data) { | |||
| // 查询病灶信息 | |||
| export function queryLesions(medicalId, params) { | |||
| return request({ | |||
| url: `/api/data/datasets/medical/lesion/${medicalId}`, | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/lesion/${medicalId}`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -151,7 +152,7 @@ export function queryLesions(medicalId, params) { | |||
| // 删除病灶信息 | |||
| export function deleteLesion(id) { | |||
| return request({ | |||
| url: `/api/data/datasets/medical/lesion`, | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/lesion`, | |||
| method: 'delete', | |||
| data: { id }, | |||
| }); | |||
| @@ -160,11 +161,10 @@ export function deleteLesion(id) { | |||
| // 修改病灶信息 | |||
| export function updateLesion(id) { | |||
| return request({ | |||
| url: `/api/data/datasets/medical/lesion`, | |||
| url: `/${API_MODULE_NAME.DCM}/datasets/medical/lesion`, | |||
| method: 'put', | |||
| data: { id }, | |||
| }); | |||
| } | |||
| export default { list, add, del }; | |||
| @@ -15,26 +15,21 @@ | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| const { datasetId } = params; | |||
| return request({ | |||
| url: `api/data/datasets/${datasetId}/files/txt`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${datasetId}/files/txt`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| export function count(datasetId) { | |||
| return request({ | |||
| url: `/api/data/datasets/${datasetId}/count`, | |||
| }); | |||
| } | |||
| // 获取分页信息 | |||
| // 获取分页信息 deprecated | |||
| export function queryFiles(datasetId, params) { | |||
| return request({ | |||
| url: `/api/data/datasets/${datasetId}/files/txt`, | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${datasetId}/files/txt`, | |||
| params, | |||
| }); | |||
| } | |||
| @@ -42,7 +37,7 @@ export function queryFiles(datasetId, params) { | |||
| // 删除文件 | |||
| export function deleteFile(datasetId, fileId) { | |||
| return request({ | |||
| url: `/api/data/datasets/files`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/files`, | |||
| method: 'delete', | |||
| data: { | |||
| datasetIds: [Number(datasetId)], | |||
| @@ -52,12 +47,21 @@ export function deleteFile(datasetId, fileId) { | |||
| } | |||
| // 保存 | |||
| export function save(datasetId, fileId, data){ | |||
| export function save(datasetId, fileId, data) { | |||
| return request({ | |||
| url: `/api/data/datasets/files/${datasetId}/${fileId}/annotations/finish`, | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/files/${datasetId}/${fileId}/annotations/finish`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| export default { list }; | |||
| export function search(params) { | |||
| const { datasetId } = params; | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.DATA}/datasets/${datasetId}/files/content`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| export default { list }; | |||
| @@ -0,0 +1,58 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/authCode`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| export function add(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/authCode`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| export function del(ids) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/authCode`, | |||
| method: 'delete', | |||
| data: { ids }, | |||
| }); | |||
| } | |||
| export function edit(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/authCode`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| } | |||
| // 不分页的列表接口,用于角色权限管理 | |||
| export function getAuthCodeList() { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/authCode/list`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/v1/dict', | |||
| url: `/${API_MODULE_NAME.ADMIN}/dict`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/v1/dict', | |||
| url: `/${API_MODULE_NAME.ADMIN}/dict`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function del(ids) { | |||
| return request({ | |||
| url: 'api/v1/dict/', | |||
| url: `/${API_MODULE_NAME.ADMIN}/dict`, | |||
| method: 'delete', | |||
| data: { ids }, | |||
| }); | |||
| @@ -42,7 +43,7 @@ export function del(ids) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/v1/dict', | |||
| url: `/${API_MODULE_NAME.ADMIN}/dict`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/v1/dictDetail', | |||
| url: `/${API_MODULE_NAME.ADMIN}/dictDetail`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/v1/dictDetail', | |||
| url: `/${API_MODULE_NAME.ADMIN}/dictDetail`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function del(ids) { | |||
| return request({ | |||
| url: 'api/v1/dictDetail', | |||
| url: `/${API_MODULE_NAME.ADMIN}/dictDetail`, | |||
| method: 'delete', | |||
| data: { ids }, | |||
| }); | |||
| @@ -42,7 +43,7 @@ export function del(ids) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/v1/dictDetail', | |||
| url: `/${API_MODULE_NAME.ADMIN}/dictDetail`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -0,0 +1,59 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function getMenusTree() { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/menus/tree`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function list(params) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/menus`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| export function add(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/menus`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| export function del(ids) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/menus`, | |||
| method: 'delete', | |||
| data: { ids }, | |||
| }); | |||
| } | |||
| export function edit(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/menus`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| } | |||
| export default { list, add, edit, del, getMenusTree }; | |||
| @@ -1,25 +1,44 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function getNodes(params) { | |||
| return request({ | |||
| url: 'api/v1/node/findAllNode', | |||
| url: `/${API_MODULE_NAME.K8S}/node/findAllNode`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| // 创建资源隔离 | |||
| export function addNodeIsolation(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.K8S}/node/isolation`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| // 移除资源隔离 | |||
| export function removeNodeIsolation(nodeNames) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.K8S}/node/isolation`, | |||
| method: 'delete', | |||
| data: { nodeNames }, | |||
| }); | |||
| } | |||
| @@ -0,0 +1,57 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/permission`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| export function add(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/permission`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| export function del(ids) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/permission`, | |||
| method: 'delete', | |||
| data: { ids }, | |||
| }); | |||
| } | |||
| export function edit(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/permission`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| } | |||
| export function getPermissionTree() { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/permission/tree`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function getPodLog(params) { | |||
| return request({ | |||
| url: 'api/v1/pod/log', | |||
| url: `/${API_MODULE_NAME.K8S}/pod/log`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function getPodLog(params) { | |||
| export function downloadPodLog(params) { | |||
| return request({ | |||
| url: 'api/v1/pod/log/download', | |||
| url: `/${API_MODULE_NAME.K8S}/pod/log/download`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -34,17 +35,33 @@ export function downloadPodLog(params) { | |||
| export function batchDownloadPodLog(data) { | |||
| return request({ | |||
| url: 'api/v1/pod/log/download', | |||
| url: `/${API_MODULE_NAME.K8S}/pod/log/download`, | |||
| method: 'post', | |||
| responseType: 'blob', | |||
| data, | |||
| }); | |||
| } | |||
| export function countPodLogs(podVOList) { | |||
| export function countPodLogs(namespace, podVOList) { | |||
| return request({ | |||
| url: 'api/v1/pod/log/count', | |||
| url: `/${API_MODULE_NAME.K8S}/pod/log/count`, | |||
| method: 'post', | |||
| data: { podVOList }, | |||
| data: { namespace, podVOList }, | |||
| }); | |||
| } | |||
| export function getMetrics(params) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.K8S}/pod/realtimeMetrics`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| export function getHistoryMetrics(params) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.K8S}/pod/rangeMetrics`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| @@ -0,0 +1,51 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/recycleTask`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| export function del(ids) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/recycleTask`, | |||
| method: 'delete', | |||
| data: { recycleTaskIdList: ids }, | |||
| }); | |||
| } | |||
| export function restoreTask(params) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/recycleTask`, | |||
| method: 'put', | |||
| params, | |||
| }); | |||
| } | |||
| export function getRecycleModuleMap() { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/recycleTask/recycleModuleMap`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export default { list, del }; | |||
| @@ -0,0 +1,50 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/resourceSpecs`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| export function add(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/resourceSpecs`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| export function del(ids) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/resourceSpecs`, | |||
| method: 'delete', | |||
| data: { ids }, | |||
| }); | |||
| } | |||
| export function edit(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/resourceSpecs`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| } | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/v1/roles', | |||
| url: `/${API_MODULE_NAME.ADMIN}/roles`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -27,14 +28,14 @@ export function list(params) { | |||
| // 获取所有的Role | |||
| export function getAll() { | |||
| return request({ | |||
| url: 'api/v1/roles/all', | |||
| url: `/${API_MODULE_NAME.ADMIN}/roles/all`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/v1/roles', | |||
| url: `/${API_MODULE_NAME.ADMIN}/roles`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -42,14 +43,14 @@ export function add(data) { | |||
| export function get(id) { | |||
| return request({ | |||
| url: `api/v1/roles/${ id}`, | |||
| url: `/${API_MODULE_NAME.ADMIN}/roles/${id}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function del(ids) { | |||
| return request({ | |||
| url: 'api/v1/roles', | |||
| url: `/${API_MODULE_NAME.ADMIN}/roles`, | |||
| method: 'delete', | |||
| data: { ids }, | |||
| }); | |||
| @@ -57,7 +58,7 @@ export function del(ids) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/v1/roles', | |||
| url: `/${API_MODULE_NAME.ADMIN}/roles`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -65,16 +66,17 @@ export function edit(data) { | |||
| export function editMenu(data) { | |||
| return request({ | |||
| url: 'api/v1/roles/menu', | |||
| url: `/${API_MODULE_NAME.ADMIN}/roles/menu`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| } | |||
| export function getMenusTree() { | |||
| export function editOperations(data) { | |||
| return request({ | |||
| url: 'api/v1/menus/tree', | |||
| method: 'get', | |||
| url: `/${API_MODULE_NAME.ADMIN}/roles/auth`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| } | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/v1/users', | |||
| url: `/${API_MODULE_NAME.ADMIN}/users`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/v1/users', | |||
| url: `/${API_MODULE_NAME.ADMIN}/users`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function del(ids) { | |||
| return request({ | |||
| url: 'api/v1/users', | |||
| url: `/${API_MODULE_NAME.ADMIN}/users`, | |||
| method: 'delete', | |||
| data: { ids }, | |||
| }); | |||
| @@ -42,11 +43,18 @@ export function del(ids) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/v1/users', | |||
| url: `/${API_MODULE_NAME.ADMIN}/users`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| } | |||
| export default { list, add, edit, del }; | |||
| // 根据用户名模糊搜索用户列表 | |||
| export function findByNickName() { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/users/findByNickName`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export default { list, add, edit, del }; | |||
| @@ -0,0 +1,109 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/group`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| export function add(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/group`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| export function edit(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/group`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| } | |||
| export function del(id) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/group`, | |||
| method: 'delete', | |||
| data: { ids: [id] }, | |||
| }); | |||
| } | |||
| export function getUserListByGroup(groupId) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/group/byGroupId`, | |||
| method: 'get', | |||
| params: { groupId }, | |||
| }); | |||
| } | |||
| export function deleteUserFromGroup(userIds, groupId) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/group/deleteUser`, | |||
| method: 'delete', | |||
| data: { groupId, userIds }, | |||
| }); | |||
| } | |||
| export function getUngroupedUsers() { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/group/findUser`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| // 更新用户组成员列表 | |||
| export function updateGroupUsers(data) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/group/updateUser`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| } | |||
| // 批量激活/锁定用户组成员 | |||
| export function updateUserState(groupId, enabled) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/group/userState`, | |||
| method: 'put', | |||
| data: { groupId, enabled }, | |||
| }); | |||
| } | |||
| // 批量修改用户组成员角色 | |||
| export function updateUserRoles(groupId, roleIds) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/group/userRoles`, | |||
| method: 'put', | |||
| data: { groupId, roleIds }, | |||
| }); | |||
| } | |||
| // 批量删除用户组成员 | |||
| export function deleteGroupUsers(groupId) { | |||
| return request({ | |||
| url: `/${API_MODULE_NAME.ADMIN}/group/delete`, | |||
| method: 'delete', | |||
| data: { groupId }, | |||
| }); | |||
| } | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/v1/ptImage/info', | |||
| url: `/${API_MODULE_NAME.IMAGE}/ptImage/info`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/v1/ptImage/uploadImage', | |||
| url: `/${API_MODULE_NAME.IMAGE}/ptImage/uploadImage`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/v1/ptImage', | |||
| url: `/${API_MODULE_NAME.IMAGE}/ptImage`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -42,7 +43,7 @@ export function edit(data) { | |||
| export function del(ids) { | |||
| return request({ | |||
| url: 'api/v1/ptImage', | |||
| url: `/${API_MODULE_NAME.IMAGE}/ptImage`, | |||
| method: 'delete', | |||
| data: ids, | |||
| }); | |||
| @@ -50,7 +51,7 @@ export function del(ids) { | |||
| export function getImageNameList(params) { | |||
| return request({ | |||
| url: 'api/v1/ptImage/imageNameList', | |||
| url: `/${API_MODULE_NAME.IMAGE}/ptImage/imageNameList`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -58,7 +59,7 @@ export function getImageNameList(params) { | |||
| export function getImageTagList(params) { | |||
| return request({ | |||
| url: 'api/v1/ptImage', | |||
| url: `/${API_MODULE_NAME.IMAGE}/ptImage`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -66,7 +67,7 @@ export function getImageTagList(params) { | |||
| export function setPrecast(params) { | |||
| return request({ | |||
| url: 'api/v1/ptImage/imageResource', | |||
| url: `/${API_MODULE_NAME.IMAGE}/ptImage/imageResource`, | |||
| method: 'put', | |||
| params, | |||
| }); | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/v1/trainJob', | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainJob`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/v1/trainJob', | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainJob`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/v1/trainJob', | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainJob`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -42,7 +43,7 @@ export function edit(data) { | |||
| export function del(ids) { | |||
| return request({ | |||
| url: 'api/v1/trainJob', | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainJob`, | |||
| method: 'delete', | |||
| data: ids, | |||
| }); | |||
| @@ -50,7 +51,7 @@ export function del(ids) { | |||
| export function resumeTrain(data) { | |||
| return request({ | |||
| url: 'api/v1/trainJob/resume', | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainJob/resume`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -58,7 +59,7 @@ export function resumeTrain(data) { | |||
| export function stop(data) { | |||
| return request({ | |||
| url: 'api/v1/trainJob/stop', | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainJob/stop`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -66,7 +67,7 @@ export function stop(data) { | |||
| export function getJobList(params) { | |||
| return request({ | |||
| url: `api/v1/trainJob/trainJobVersionDetail`, | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainJob/trainJobVersionDetail`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -74,7 +75,7 @@ export function getJobList(params) { | |||
| export function getJobDetail(jobId) { | |||
| return request({ | |||
| url: `api/v1/trainJob/jobDetail`, | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainJob/jobDetail`, | |||
| method: 'get', | |||
| params: { id: jobId }, | |||
| }); | |||
| @@ -82,7 +83,7 @@ export function getJobDetail(jobId) { | |||
| export function getTrainLog(params) { | |||
| return request({ | |||
| url: `api/v1/trainLog`, | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainLog`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -90,35 +91,37 @@ export function getTrainLog(params) { | |||
| export function myTrainJobCount() { | |||
| return request({ | |||
| url: `api/v1/trainJob/mine`, | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainJob/mine`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function getTrainJobSpecs(params) { | |||
| return request({ | |||
| url: `api/v1/trainJob/trainJobSpecs`, | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainJob/trainJobSpecs`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| export function getGarafanaInfo(jobId) { | |||
| export function getPods(jobId) { | |||
| return request({ | |||
| url: `api/v1/trainJob/grafanaUrl/${jobId}`, | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainLog/pod/${jobId}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function getPods(jobId) { | |||
| export function getTrainModel(params) { | |||
| return request({ | |||
| url: `api/v1/trainLog/pod/${jobId}`, | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainJob/model`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| } | |||
| export function getTrainModel(params) { | |||
| export function getTrainingVisualList(params) { | |||
| return request({ | |||
| url: `api/v1/trainJob/model`, | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainJob/visualTrain`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function list(params) { | |||
| return request({ | |||
| url: 'api/v1/trainParams', | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainParams`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,7 +27,7 @@ export function list(params) { | |||
| export function add(data) { | |||
| return request({ | |||
| url: 'api/v1/trainParams', | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainParams`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -34,7 +35,7 @@ export function add(data) { | |||
| export function edit(data) { | |||
| return request({ | |||
| url: 'api/v1/trainParams', | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainParams`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -42,7 +43,7 @@ export function edit(data) { | |||
| export function del(ids) { | |||
| return request({ | |||
| url: 'api/v1/trainParams', | |||
| url: `/${API_MODULE_NAME.TRAIN}/trainParams`, | |||
| method: 'delete', | |||
| data: ids, | |||
| }); | |||
| @@ -1,24 +1,25 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import request from '@/utils/request'; | |||
| import { API_MODULE_NAME } from '@/config'; | |||
| export function userMenus(params) { | |||
| return request({ | |||
| url: 'api/v1/user/menus', | |||
| url: `/${API_MODULE_NAME.ADMIN}/user/menus`, | |||
| method: 'get', | |||
| params, | |||
| }); | |||
| @@ -26,14 +27,14 @@ export function userMenus(params) { | |||
| export function dictDetail(name) { | |||
| return request({ | |||
| url: `api/v1/user/dict/${name}`, | |||
| url: `/${API_MODULE_NAME.ADMIN}/user/dict/${name}`, | |||
| method: 'get', | |||
| }); | |||
| } | |||
| export function userInfo(data) { | |||
| return request({ | |||
| url: 'api/v1/user/info', | |||
| url: `/${API_MODULE_NAME.ADMIN}/user/info`, | |||
| method: 'get', | |||
| data, | |||
| }); | |||
| @@ -41,7 +42,7 @@ export function userInfo(data) { | |||
| export function editUser(data) { | |||
| return request({ | |||
| url: 'api/v1/user/info', | |||
| url: `/${API_MODULE_NAME.ADMIN}/user/info`, | |||
| method: 'put', | |||
| data, | |||
| }); | |||
| @@ -49,7 +50,7 @@ export function editUser(data) { | |||
| export function updateAvatar(data) { | |||
| return request({ | |||
| url: 'api/v1/user/updateAvatar', | |||
| url: `/${API_MODULE_NAME.ADMIN}/user/updateAvatar`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -57,7 +58,7 @@ export function updateAvatar(data) { | |||
| export function updatePass(data) { | |||
| return request({ | |||
| url: 'api/v1/user/updatePass', | |||
| url: `/${API_MODULE_NAME.ADMIN}/user/updatePass`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -65,7 +66,7 @@ export function updatePass(data) { | |||
| export function resetEmail(data) { | |||
| return request({ | |||
| url: 'api/v1/user/resetEmail', | |||
| url: `/${API_MODULE_NAME.ADMIN}/user/resetEmail`, | |||
| method: 'post', | |||
| data, | |||
| }); | |||
| @@ -1,23 +1,22 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| // eslint-disable-next-line import/no-cycle | |||
| import request, { useGet } from '@/utils/request'; | |||
| const baseURL = process.env.VUE_APP_BASE_API; | |||
| // 这个文件没用起来 | |||
| export function initVisual(params) { | |||
| return request({ | |||
| @@ -24,6 +24,10 @@ | |||
| display: block; | |||
| } | |||
| .di { | |||
| display: inline; | |||
| } | |||
| .dib { | |||
| display: inline-block; | |||
| } | |||
| @@ -113,6 +117,10 @@ | |||
| padding-right: 5px; | |||
| } | |||
| .pr-20 { | |||
| padding-right: 20px; | |||
| } | |||
| .pl-0 { | |||
| padding-left: 0; | |||
| } | |||
| @@ -129,6 +137,21 @@ | |||
| padding-bottom: 10px; | |||
| } | |||
| .py-4 { | |||
| padding-top: 4px; | |||
| padding-bottom: 4px; | |||
| } | |||
| .py-10 { | |||
| padding-top: 10px; | |||
| padding-bottom: 10px; | |||
| } | |||
| .px-20 { | |||
| padding-right: 20px; | |||
| padding-left: 20px; | |||
| } | |||
| .mt-0 { | |||
| margin-top: 0 !important; | |||
| } | |||
| @@ -169,6 +192,10 @@ | |||
| margin-left: 40px; | |||
| } | |||
| .ml-auto { | |||
| margin-left: auto; | |||
| } | |||
| .mb-50 { | |||
| margin-bottom: 50px; | |||
| } | |||
| @@ -190,6 +217,11 @@ | |||
| margin-left: 10px; | |||
| } | |||
| .my-5 { | |||
| margin-top: 5px; | |||
| margin-bottom: 5px; | |||
| } | |||
| .my-10 { | |||
| margin-top: 10px; | |||
| margin-bottom: 10px; | |||
| @@ -205,6 +237,10 @@ | |||
| margin-bottom: auto; | |||
| } | |||
| .w-100 { | |||
| width: 100px; | |||
| } | |||
| .w-150 { | |||
| width: 150px; | |||
| } | |||
| @@ -213,14 +249,34 @@ | |||
| width: 200px; | |||
| } | |||
| .w-300 { | |||
| width: 300px; | |||
| } | |||
| .w-500 { | |||
| width: 500px; | |||
| } | |||
| .h-100 { | |||
| height: 100px; | |||
| } | |||
| .lh-1 { | |||
| line-height: 1; | |||
| } | |||
| .lh-20 { | |||
| line-height: 20px; | |||
| } | |||
| .bold { | |||
| font-weight: bold; | |||
| } | |||
| .normal { | |||
| font-weight: normal; | |||
| } | |||
| img.responsive { | |||
| display: inline-block; | |||
| max-width: 100%; | |||
| @@ -290,6 +346,10 @@ img.responsive { | |||
| border-color: $borderColor; | |||
| } | |||
| .no-border { | |||
| border: none; | |||
| } | |||
| .g3 { | |||
| color: #333; | |||
| } | |||
| @@ -318,6 +378,10 @@ img.responsive { | |||
| font-size: 18px; | |||
| } | |||
| .f22 { | |||
| font-size: 22px; | |||
| } | |||
| .ellipsis { | |||
| @include text-overflow; | |||
| } | |||
| @@ -20,6 +20,15 @@ | |||
| //main-container全局样式 | |||
| .app-container { | |||
| padding: 10px 20px 70px 20px; | |||
| .wrapper.fixed { | |||
| width: 1080px; | |||
| min-width: 60vw; | |||
| max-width: calc(100vw - 80px); | |||
| max-height: 100%; | |||
| padding: 20px 0 0; | |||
| margin: 0 auto; | |||
| } | |||
| } | |||
| .head-container { | |||
| @@ -69,22 +78,18 @@ | |||
| margin-left: auto; | |||
| } | |||
| .my-code { | |||
| position: relative; | |||
| padding: 15px; | |||
| font-family: Courier New, serif; | |||
| font-size: 12px; | |||
| line-height: 20px; | |||
| color: #333; | |||
| border-left: 5px solid #ddd; | |||
| } | |||
| // 自定义search-bar样式 | |||
| .search-bar { | |||
| float: right; | |||
| margin-top: 8px; | |||
| } | |||
| .disabled { | |||
| color: $infoColor; | |||
| pointer-events: none; | |||
| cursor: not-allowed; | |||
| } | |||
| // 自定义drawer样式 | |||
| .ts-drawer { | |||
| margin: 30px 20px 0 0; | |||
| @@ -250,3 +255,39 @@ pre { | |||
| background: rgb(30, 30, 30); | |||
| border-radius: 5px; | |||
| } | |||
| .field-extra { | |||
| font-size: 14px; | |||
| line-height: 1.5; | |||
| color: $infoColor; | |||
| } | |||
| .app-result-content { | |||
| padding: 24px 40px; | |||
| margin-top: 24px; | |||
| text-align: left; | |||
| background-color: #fafafa; | |||
| } | |||
| .app-result-title { | |||
| font-size: 24px; | |||
| line-height: 1.8; | |||
| color: rgba(0, 0, 0, 0.85); | |||
| text-align: center; | |||
| } | |||
| .app-result-subtitle { | |||
| font-size: 14px; | |||
| line-height: 1.6; | |||
| color: rgba(0, 0, 0, 0.45); | |||
| text-align: center; | |||
| } | |||
| .rotate { | |||
| @include rotate(3s); | |||
| } | |||
| .ts-tip { | |||
| color: $tipColor; | |||
| background-color: $tipBgColor; | |||
| } | |||
| @@ -44,6 +44,15 @@ | |||
| } | |||
| } | |||
| .el-button.danger { | |||
| color: $red; | |||
| &:hover, | |||
| &:active { | |||
| color: $red; | |||
| } | |||
| } | |||
| // el-radio border | |||
| .el-radio.is-bordered { | |||
| &.is-checked, | |||
| @@ -22,12 +22,23 @@ | |||
| @import 'sidebar'; | |||
| @import 'common'; | |||
| @media screen and (max-width: 768px) { | |||
| .mb-dn { | |||
| display: none !important; | |||
| } | |||
| .mb-w100 { | |||
| width: 100% !important; | |||
| } | |||
| } | |||
| body { | |||
| height: 100%; | |||
| -moz-osx-font-smoothing: grayscale; | |||
| -webkit-font-smoothing: antialiased; | |||
| text-rendering: optimizeLegibility; | |||
| font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; | |||
| color: rgba(0, 0, 0, 0.85); | |||
| } | |||
| label { | |||
| @@ -102,4 +102,24 @@ | |||
| border-right: $color-border-style; | |||
| border-bottom: $transparent-border-style; | |||
| } | |||
| @else if $direction==right-up { | |||
| border: $width solid $color; | |||
| border-top: $transparent-border-style; | |||
| border-left: $transparent-border-style; | |||
| } | |||
| } | |||
| @mixin rotate($duration) { | |||
| animation: spin infinite $duration linear; | |||
| } | |||
| @keyframes spin { | |||
| from { | |||
| transform: rotate(330deg); | |||
| } | |||
| to { | |||
| transform: rotate(-30deg); | |||
| } | |||
| } | |||
| @@ -40,13 +40,16 @@ $menuBg: #f3f7ff; | |||
| $menuText: $commonTextColor; | |||
| $menuActiveText: $primaryColor; | |||
| $menuHoverBg:#d8dfff; | |||
| $menuHoverBg: #d8dfff; | |||
| $subMenuBg: #edf0ff; | |||
| $menuActiveBg:#d8dfff; | |||
| $menuActiveBg: #d8dfff; | |||
| $sideBarWidth: 205px; | |||
| $iconBarWidth: 64px; | |||
| $navBarHeight: 50px; | |||
| $tipBgColor: #ffe9cc; | |||
| $tipColor: #f38900; | |||
| :export { | |||
| menuBg: $menuBg; | |||
| menuText: $menuText; | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import Vue from 'vue'; | |||
| import { Message, MessageBox } from 'element-ui'; | |||
| @@ -24,7 +24,7 @@ const TOKENEXPIRE = 20012; // Token 失效 | |||
| let isMsgOn = false; | |||
| // 全局未捕获异常处理(包括普通异常和 await 未被捕获的异常) | |||
| Vue.config.errorHandler = (err) =>{ | |||
| Vue.config.errorHandler = (err) => { | |||
| console.error(err); | |||
| // 未授权只提示一次 | |||
| if (err.code === UNAUTHORIZED) { | |||
| @@ -46,7 +46,7 @@ Vue.config.errorHandler = (err) =>{ | |||
| // 只针对 promise 异步捕获 | |||
| // eslint-disable-next-line func-names | |||
| window.addEventListener('unhandledrejection', function(event) { | |||
| const {reason} = event; | |||
| const { reason } = event; | |||
| if (reason) { | |||
| // 未授权 | |||
| if (reason.code === TOKENEXPIRE) { | |||
| @@ -58,16 +58,19 @@ window.addEventListener('unhandledrejection', function(event) { | |||
| confirmButtonText: '确认', | |||
| cancelButtonText: '取消', | |||
| type: 'warning', | |||
| }).then(() => { | |||
| // 此处调用 store lotout | |||
| store.dispatch('LogOut').then(() => { | |||
| location.pathname !== '/login' && location.reload(); | |||
| }) | |||
| .then(() => { | |||
| // 此处调用 store lotout | |||
| store.dispatch('LogOut').then(() => { | |||
| window.location.pathname !== '/login' && window.location.reload(); | |||
| }); | |||
| }) | |||
| .finally(() => { | |||
| isMsgOn = false; | |||
| }); | |||
| }).finally(() => { | |||
| isMsgOn = false; | |||
| }); | |||
| return; | |||
| } if (reason.code === UNAUTHORIZED) { | |||
| } | |||
| if (reason.code === UNAUTHORIZED) { | |||
| // 未授权提醒只展示一次 | |||
| if (isMsgOn === true) return; | |||
| isMsgOn = true; | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import './errorHandle'; | |||
| @@ -0,0 +1,165 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template> | |||
| <el-form ref="formRef" :model="model" v-bind="attrs" v-on="$listeners" @submit.native.prevent> | |||
| <template v-for="item of mergedFormItems"> | |||
| <el-form-item | |||
| v-if="!hideItem(item)" | |||
| :key="item.prop" | |||
| :label="item.label" | |||
| :label-width="item.labelWidth" | |||
| :prop="item.prop" | |||
| > | |||
| <!-- 输入框/文本域 --> | |||
| <template v-if="item.type === 'input'"> | |||
| <el-input | |||
| v-model="model[item.prop]" | |||
| :type="item.inputType" | |||
| v-bind="item" | |||
| @change="(value) => runFunc(item.change, value)" | |||
| /> | |||
| </template> | |||
| <!-- 下拉框 --> | |||
| <template v-else-if="item.type === 'select'"> | |||
| <el-select | |||
| v-model="model[item.prop]" | |||
| v-bind="item" | |||
| @change="(value) => runFunc(item.change, value)" | |||
| > | |||
| <el-option | |||
| v-for="option of item.options" | |||
| :key="option.value" | |||
| :value="option.value" | |||
| :label="option.label" | |||
| :disabled="option.disabled" | |||
| /> | |||
| </el-select> | |||
| </template> | |||
| <!-- 时间选择器 --> | |||
| <el-date-picker | |||
| v-else-if="item.type === 'date'" | |||
| v-model="model[item.prop]" | |||
| :type="item.dateType" | |||
| v-bind="item" | |||
| @change="(value) => runFunc(item.change, value)" | |||
| /> | |||
| <!-- 按钮 --> | |||
| <template v-else-if="item.type === 'button'"> | |||
| <el-button | |||
| :type="item.btnType" | |||
| :disabled="item.disabled" | |||
| v-bind="item" | |||
| @click="runFunc(item.func)" | |||
| > | |||
| <template v-if="!item.circle">{{ item.btnText }}</template> | |||
| </el-button> | |||
| </template> | |||
| </el-form-item> | |||
| </template> | |||
| </el-form> | |||
| </template> | |||
| <script> | |||
| import { computed, reactive, ref } from '@vue/composition-api'; | |||
| import { runFunc } from '@/utils'; | |||
| // 默认表单属性 | |||
| const defaultFormAttrs = { | |||
| // TODO: 确认是否添加表单默认属性 | |||
| }; | |||
| // 默认表单项定义 | |||
| const defaultItemDefinition = { | |||
| type: 'input', | |||
| clearable: true, | |||
| rows: 4, | |||
| }; | |||
| export default { | |||
| name: 'BaseForm', | |||
| inheritAttrs: false, | |||
| props: { | |||
| formItems: { | |||
| type: Array, | |||
| required: true, | |||
| }, | |||
| model: { | |||
| type: Object, | |||
| required: true, | |||
| }, | |||
| }, | |||
| setup(props, ctx) { | |||
| const { model } = reactive(props); | |||
| // 表单组件 ref | |||
| const formRef = ref(null); | |||
| // 合并表单默认属性和 $attrs | |||
| const attrs = computed(() => { | |||
| return { ...defaultFormAttrs, ...ctx.attrs }; | |||
| }); | |||
| const hideItem = (item) => { | |||
| if (item.hidden) return true; | |||
| if (typeof item.hiddenFunc === 'function') return item.hiddenFunc(); | |||
| return false; | |||
| }; | |||
| // 表单项预处理 | |||
| const mergedFormItems = computed(() => { | |||
| return props.formItems.map((item) => { | |||
| return { ...defaultItemDefinition, ...item }; | |||
| }); | |||
| }); | |||
| // 表单校验方法 | |||
| const validate = (resolve, reject) => { | |||
| let valid; | |||
| formRef.value.validate((isValid) => { | |||
| valid = isValid; | |||
| if (isValid) { | |||
| if (typeof resolve === 'function') { | |||
| return resolve(model); | |||
| } | |||
| return true; | |||
| } | |||
| if (typeof reject === 'function') { | |||
| return reject(model); | |||
| } | |||
| return false; | |||
| }); | |||
| return valid; | |||
| }; | |||
| // 清空表单校验 | |||
| const clearValidate = () => { | |||
| formRef.value.clearValidate(); | |||
| }; | |||
| return { | |||
| formRef, | |||
| attrs, | |||
| mergedFormItems, | |||
| runFunc, | |||
| hideItem, | |||
| validate, | |||
| clearValidate, | |||
| }; | |||
| }, | |||
| }; | |||
| </script> | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import { isNil } from 'lodash'; | |||
| import { reactive, watch, ref } from '@vue/composition-api'; | |||
| @@ -74,19 +74,20 @@ const BaseModal = { | |||
| ctx.emit('ok', e); | |||
| }; | |||
| const handleClose = e => { | |||
| const handleClose = (e) => { | |||
| // 这里只针对状态变更进行控制,只转发 element close 事件 | |||
| ctx.emit('close', e); | |||
| ctx.emit('change', false); | |||
| }; | |||
| watch(() => props.visible, (next) => { | |||
| Object.assign(state, { | |||
| sVisible: next, | |||
| }); | |||
| }, { | |||
| lazy: true, | |||
| }); | |||
| watch( | |||
| () => props.visible, | |||
| (next) => { | |||
| Object.assign(state, { | |||
| sVisible: next, | |||
| }); | |||
| } | |||
| ); | |||
| return { | |||
| state, | |||
| @@ -99,15 +100,23 @@ const BaseModal = { | |||
| render() { | |||
| const renderFooter = () => { | |||
| return ( | |||
| <div class='modal-footer'> | |||
| { this.showCancel && ( | |||
| <el-button id="cancel" onClick={this.handleCancel}>{this.cancelText}</el-button> | |||
| ) | |||
| } | |||
| { this.showOk && ( | |||
| <el-button id="ok" type='primary' disabled={this.disabled} onClick={this.handleOk} loading={this.loading}>{this.okText}</el-button> | |||
| ) | |||
| } | |||
| <div class="modal-footer"> | |||
| {this.showCancel && ( | |||
| <el-button id="cancel" onClick={this.handleCancel}> | |||
| {this.cancelText} | |||
| </el-button> | |||
| )} | |||
| {this.showOk && ( | |||
| <el-button | |||
| id="ok" | |||
| type="primary" | |||
| disabled={this.disabled} | |||
| onClick={this.handleOk} | |||
| loading={this.loading} | |||
| > | |||
| {this.okText} | |||
| </el-button> | |||
| )} | |||
| </div> | |||
| ); | |||
| }; | |||
| @@ -130,9 +139,9 @@ const BaseModal = { | |||
| }; | |||
| return ( | |||
| <el-dialog {...dialogProps} ref='dialogRef'> | |||
| <el-dialog {...dialogProps} ref="dialogRef"> | |||
| {this.$slots.default} | |||
| <div slot='footer'>{footer}</div> | |||
| <div slot="footer">{footer}</div> | |||
| </el-dialog> | |||
| ); | |||
| }, | |||
| @@ -0,0 +1,276 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template> | |||
| <el-table ref="table" v-loading="loading" :data="data" v-bind="attrs" v-on="$listeners"> | |||
| <template v-for="column in mergedColumns"> | |||
| <el-table-column | |||
| v-if="!column.hide" | |||
| :key="column.prop" | |||
| :type="column.columnType" | |||
| v-bind="column" | |||
| > | |||
| <template #header> | |||
| <template v-if="headerSlots.includes(column.prop)"> | |||
| <slot :name="`header-${column.prop}`" /> | |||
| </template> | |||
| <DropdownHeader | |||
| v-else-if="headerOptions[column.prop]" | |||
| :title="column.label" | |||
| :list="headerOptions[column.prop]" | |||
| :filterFunc="column.filterFunc" | |||
| @command="column.func" | |||
| /> | |||
| <span v-else> | |||
| {{ column.label }} | |||
| </span> | |||
| </template> | |||
| <template v-if="column.type !== 'selection'" #default="scope"> | |||
| <template v-if="defaultSlots.includes(column.prop)"> | |||
| <slot :row="scope.row" :name="column.prop" /> | |||
| </template> | |||
| <!-- 时间列 --> | |||
| <span v-else-if="column.type === 'time'"> | |||
| {{ parseTime(scope.row[column.prop]) }} | |||
| </span> | |||
| <!-- 操作列 --> | |||
| <div v-else-if="column.type === 'operation'"> | |||
| <template v-for="operation in column.operations"> | |||
| <!-- 更多操作下拉 --> | |||
| <el-dropdown | |||
| v-if=" | |||
| operation.type === 'more' && | |||
| !getOperationStatus('hide', 'hideFunc', operation, scope.row) | |||
| " | |||
| :key="operation.key" | |||
| > | |||
| <el-button type="text" class="ml-10" @click.stop | |||
| >{{ column.moreText }}<i class="el-icon-arrow-down el-icon--right" /> | |||
| </el-button> | |||
| <el-dropdown-menu slot="dropdown"> | |||
| <el-dropdown-item | |||
| v-for="moreOp in operation.operations" | |||
| :key="moreOp.key" | |||
| :disabled="getOperationStatus('disabled', 'disableFunc', moreOp, scope.row)" | |||
| @click.native="() => runFunc(moreOp.func, scope.row)" | |||
| > | |||
| <el-button | |||
| type="text" | |||
| :disabled="getOperationStatus('disabled', 'disableFunc', moreOp, scope.row)" | |||
| > | |||
| {{ moreOp.label }} | |||
| <IconFont v-if="moreOp.iconAfter" :type="moreOp.iconAfter" /> | |||
| </el-button> | |||
| </el-dropdown-item> | |||
| </el-dropdown-menu> | |||
| </el-dropdown> | |||
| <el-button | |||
| v-else-if="!getOperationStatus('hide', 'hideFunc', operation, scope.row)" | |||
| :id="operation.label + scope.$index" | |||
| :key="operation.key" | |||
| type="text" | |||
| :disabled="getOperationStatus('disabled', 'disableFunc', operation, scope.row)" | |||
| @click.stop="() => runFunc(operation.func, scope.row)" | |||
| > | |||
| {{ operation.label }} | |||
| <IconFont v-if="operation.iconAfter" :type="operation.iconAfter" /> | |||
| </el-button> | |||
| </template> | |||
| </div> | |||
| <!-- tag 展示列 --> | |||
| <el-tag v-else-if="column.type === 'tag'" v-bind="getTagAttrs(column, scope.row)">{{ | |||
| getContent(column, scope.row) | |||
| }}</el-tag> | |||
| <!-- 其他展示列 --> | |||
| <span v-else> | |||
| {{ getContent(column, scope.row) }} | |||
| </span> | |||
| </template> | |||
| </el-table-column> | |||
| </template> | |||
| </el-table> | |||
| </template> | |||
| <script> | |||
| import { computed, ref } from '@vue/composition-api'; | |||
| import { parseTime, noop, runFunc } from '@/utils'; | |||
| import DropdownHeader from '@/components/DropdownHeader'; | |||
| const defaultColunmDefinition = { | |||
| columnType: 'default', | |||
| hide: false, // 是否展示该列 | |||
| fixed: false, // 是否为固定列 | |||
| sortable: false, // 是否可排序 | |||
| showOverflowTooltip: true, // 是否在过长时展示 tooltip,默认为 true | |||
| moreText: '更多', // 用于替换操作数超限时 “更多” 按钮的文本 | |||
| operationLimit: 4, // 超过限制数量时自动压缩 | |||
| }; | |||
| const defaultTableAttrs = { | |||
| 'highlight-current-row': true, | |||
| }; | |||
| const elTableColumnTypes = ['default', 'selection', 'expand', 'index']; | |||
| export default { | |||
| name: 'BaseTable', | |||
| components: { DropdownHeader }, | |||
| inheritAttrs: false, | |||
| props: { | |||
| columns: { | |||
| type: Array, | |||
| required: true, | |||
| }, | |||
| data: { | |||
| type: Array, | |||
| required: true, | |||
| }, | |||
| loading: { | |||
| type: Boolean, | |||
| default: false, | |||
| }, | |||
| }, | |||
| setup(props, ctx) { | |||
| // 合并表格默认属性和 $attrs | |||
| const attrs = computed(() => { | |||
| return { ...defaultTableAttrs, ...ctx.attrs }; | |||
| }); | |||
| // 设置默认属性 | |||
| const mergedColumns = computed(() => { | |||
| return props.columns.map((originColumn) => { | |||
| // 赋默认值 | |||
| const column = { ...defaultColunmDefinition, ...originColumn }; | |||
| if (elTableColumnTypes.includes(column.type)) { | |||
| column.columnType = column.type; | |||
| } | |||
| // 过滤不需要展示的 operation,生成折叠结构 | |||
| if (column.type === 'operation') { | |||
| const displayOperations = column.operations.filter((op) => !op.hide); | |||
| let moreOperation = displayOperations.find((operation) => operation.type === 'more'); | |||
| if (moreOperation) { | |||
| moreOperation.operations = moreOperation.operations.filter((op) => !op.hide); | |||
| } else if (displayOperations.length > column.operationLimit) { | |||
| moreOperation = { | |||
| label: column.moreText, | |||
| type: 'more', | |||
| operations: displayOperations.splice(column.operationLimit - 1), | |||
| }; | |||
| displayOperations.push(moreOperation); | |||
| } | |||
| // operation 设置默认值为 noop,添加 key | |||
| displayOperations.forEach((operation, index) => { | |||
| operation.func = operation.func || noop; | |||
| operation.key = operation.label + index; | |||
| if (operation.type === 'more') { | |||
| operation.operations.forEach((moreOp, moreIndex) => { | |||
| moreOp.func = moreOp.func || noop; | |||
| moreOp.key = moreOp.label + moreIndex; | |||
| }); | |||
| } | |||
| }); | |||
| column.operations = displayOperations; | |||
| } | |||
| // 处理下拉表头 | |||
| if (column.dropdownList && typeof column.func !== 'function') { | |||
| column.func = noop; | |||
| } | |||
| return column; | |||
| }); | |||
| }); | |||
| // 计算生成下拉表头 | |||
| // 如果直接传入 column.dropdownList 会导致表头选项不可响应 | |||
| const headerOptions = computed(() => { | |||
| const result = Object.create(null); | |||
| mergedColumns.value.forEach((column) => { | |||
| if (column.dropdownList) { | |||
| result[column.prop] = column.dropdownList; | |||
| } | |||
| }); | |||
| return result; | |||
| }); | |||
| // 展示文本格式化 | |||
| const getContent = (column, row) => { | |||
| if (typeof column.formatter === 'function') { | |||
| return column.formatter(row[column.prop]); | |||
| } | |||
| return row[column.prop]; | |||
| }; | |||
| // 判断操作属性名和函数名返回布尔值 | |||
| const getOperationStatus = (propName, funcName, operation, row, defaultResult = false) => { | |||
| if (operation[propName] !== undefined) { | |||
| return operation[propName]; | |||
| } | |||
| if (typeof operation[funcName] === 'function') { | |||
| return operation[funcName](row); | |||
| } | |||
| return defaultResult; | |||
| }; | |||
| // 根据列的 tagAttrFunc/tagAttr/tagMap 计算返回 el-tag 的属性 | |||
| const getTagAttrs = (column, row) => { | |||
| if (typeof column.tagAttrFunc === 'function') { | |||
| return column.tagAttrFunc(row[column.prop], row); | |||
| } | |||
| const tagAttr = column.tagAttr || {}; | |||
| const tagMap = column.tagMap || {}; | |||
| return { | |||
| type: tagMap[row[column.prop]], | |||
| effect: 'plain', | |||
| ...tagAttr, | |||
| }; | |||
| }; | |||
| // 插槽名列表 | |||
| const headerRe = /^header-([a-zA-Z]+)$/; | |||
| const defaultSlots = ref([]); | |||
| const headerSlots = ref([]); | |||
| let headerSlotName; | |||
| Object.keys(ctx.slots).forEach((slot) => { | |||
| headerSlotName = slot.match(headerRe); | |||
| if (headerSlotName) { | |||
| headerSlots.value.push(headerSlotName[1]); | |||
| } else { | |||
| defaultSlots.value.push(slot); | |||
| } | |||
| }); | |||
| return { | |||
| attrs, | |||
| mergedColumns, | |||
| headerOptions, | |||
| getContent, | |||
| getOperationStatus, | |||
| getTagAttrs, | |||
| // slots | |||
| defaultSlots, | |||
| headerSlots, | |||
| // Utils 方法 | |||
| parseTime, | |||
| runFunc, | |||
| }; | |||
| }, | |||
| }; | |||
| </script> | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template functional> | |||
| <div class="info-card" @click="props.handleClick"> | |||
| @@ -16,10 +16,22 @@ | |||
| <template> | |||
| <span> | |||
| <el-button :loading="crud.status.cu === 2" :disabled="disabledEdit" type="text" @click="crud.toEdit(data)"> | |||
| <el-button | |||
| v-if="showEdit" | |||
| :loading="crud.status.cu === 2" | |||
| :disabled="disabledEdit" | |||
| type="text" | |||
| @click="crud.toEdit(data)" | |||
| > | |||
| {{ crud.props.optText.edit }} | |||
| </el-button> | |||
| <el-button slot="reference" :disabled="disabledDle" type="text" @click="toDelete"> | |||
| <el-button | |||
| v-if="showDelete" | |||
| slot="reference" | |||
| :disabled="disabledDle" | |||
| type="text" | |||
| @click="toDelete" | |||
| > | |||
| {{ crud.props.optText.del }} | |||
| </el-button> | |||
| </span> | |||
| @@ -42,6 +54,14 @@ export default { | |||
| type: Boolean, | |||
| default: false, | |||
| }, | |||
| showEdit: { | |||
| type: Boolean, | |||
| default: true, | |||
| }, | |||
| showDelete: { | |||
| type: Boolean, | |||
| default: true, | |||
| }, | |||
| msg: { | |||
| type: String, | |||
| default: '确定删除本条数据吗?', | |||
| @@ -1,18 +1,18 @@ | |||
| /* | |||
| * Copyright 2019-2020 Zheng Jie | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| * Copyright 2019-2020 Zheng Jie | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| import Vue from 'vue'; | |||
| import { dictDetail } from '@/api/user'; | |||
| @@ -23,22 +23,24 @@ export default class Dict { | |||
| } | |||
| async init(names, completeCallback) { | |||
| if (names === undefined || name === null) { | |||
| if (names === undefined || names === null) { | |||
| throw new Error('need Dict names'); | |||
| } | |||
| const ps = []; | |||
| names.forEach(n => { | |||
| names.forEach((n) => { | |||
| Vue.set(this.dict.dict, n, {}); | |||
| Vue.set(this.dict.label, n, {}); | |||
| Vue.set(this.dict, n, []); | |||
| ps.push(dictDetail(n).then(data => { | |||
| const details = data && data.dictDetails || []; | |||
| this.dict[n].splice(0, 0, ...details); | |||
| details.forEach(d => { | |||
| Vue.set(this.dict.dict[n], d.value, d); | |||
| Vue.set(this.dict.label[n], d.value, d.label); | |||
| }); | |||
| })); | |||
| ps.push( | |||
| dictDetail(n).then((data) => { | |||
| const details = (data && data.dictDetails) || []; | |||
| this.dict[n].splice(0, 0, ...details); | |||
| details.forEach((d) => { | |||
| Vue.set(this.dict.dict[n], d.value, d); | |||
| Vue.set(this.dict.label[n], d.value, d.label); | |||
| }); | |||
| }) | |||
| ); | |||
| }); | |||
| await Promise.all(ps); | |||
| completeCallback(); | |||
| @@ -1,18 +1,18 @@ | |||
| /* | |||
| * Copyright 2019-2020 Zheng Jie | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| * Copyright 2019-2020 Zheng Jie | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| import Dict from './Dict'; | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <script> | |||
| import { reactive } from '@vue/composition-api'; | |||
| @@ -43,7 +43,7 @@ export default { | |||
| }); | |||
| function getPoint(event) { | |||
| // 容器尺寸 | |||
| // 容器尺寸 | |||
| const bound = findAncestorSvg(event).getBoundingClientRect(); | |||
| const { clientX, clientY } = event; | |||
| @@ -64,14 +64,14 @@ export default { | |||
| y: resetOnStart ? point.y : -state.dy + point.y, | |||
| }; | |||
| Object.assign(state, nextState); | |||
| if (typeof onDragStart === 'function') onDragStart(nextState, event); | |||
| if (typeof onDragStart === 'function') onDragStart(nextState, event); | |||
| } | |||
| function dragMove(event) { | |||
| if (!state.isDragging) return; | |||
| const point = getPoint(event); | |||
| // 避免无效移动 | |||
| if(Math.abs(point.x - state.x) < 2 && Math.abs(point.y - state.y) < 2) return; | |||
| if (Math.abs(point.x - state.x) < 2 && Math.abs(point.y - state.y) < 2) return; | |||
| const nextState = { | |||
| isDragging: true, | |||
| isMoving: true, | |||
| @@ -90,9 +90,10 @@ export default { | |||
| const prevState = { ...state }; | |||
| Object.assign(state, nextState); | |||
| // 传递 prevState | |||
| if (typeof onDragEnd === 'function') onDragEnd(state, event, { | |||
| prevState, | |||
| }); | |||
| if (typeof onDragEnd === 'function') | |||
| onDragEnd(state, event, { | |||
| prevState, | |||
| }); | |||
| } | |||
| return { | |||
| @@ -108,24 +109,22 @@ export default { | |||
| return ( | |||
| <g> | |||
| {this.state.isDragging && | |||
| ( | |||
| {this.state.isDragging && ( | |||
| <rect | |||
| width={this.width} | |||
| height={this.height} | |||
| onMousemove={this.dragMove} | |||
| onMouseup={this.dragEnd} | |||
| fill='transparent' | |||
| fill="transparent" | |||
| /> | |||
| )} | |||
| { typeof children === 'function' && ( | |||
| {typeof children === 'function' && | |||
| children({ | |||
| state: this.state, | |||
| dragStart: this.dragStart, | |||
| dragMove: this.dragMove, | |||
| dragEnd: this.dragEnd, | |||
| }) | |||
| ) } | |||
| })} | |||
| </g> | |||
| ); | |||
| }, | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import Drag from './drag'; | |||
| @@ -1,37 +1,39 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template> | |||
| <el-dropdown trigger="click" placement="bottom-start" @command="onCommand"> | |||
| <div> | |||
| <span :class="{primary: filtered}">{{ title }}</span> | |||
| <span :class="{ primary: dropdownSelected }">{{ title }}</span> | |||
| <i class="el-icon-arrow-down el-icon--right" /> | |||
| </div> | |||
| <el-dropdown-menu slot="dropdown" :style="dropdownStyle"> | |||
| <el-dropdown-item | |||
| v-for="(item, index) in list" | |||
| :key="index" | |||
| :command="item[valueTag]" | |||
| >{{ item[labelTag] }}</el-dropdown-item> | |||
| <el-dropdown-item v-for="(item, index) in list" :key="index" :command="item[valueTag]">{{ | |||
| item[labelTag] | |||
| }}</el-dropdown-item> | |||
| </el-dropdown-menu> | |||
| </el-dropdown> | |||
| </template> | |||
| <script> | |||
| import { computed, ref } from '@vue/composition-api'; | |||
| import { isNil } from 'lodash'; | |||
| export default { | |||
| name: 'DropdownHeader', | |||
| props: { | |||
| title: { | |||
| type: String, | |||
| @@ -54,19 +56,40 @@ export default { | |||
| // filtered 用于标识是否处于筛选状态 | |||
| filtered: { | |||
| type: Boolean, | |||
| default: false, | |||
| default: undefined, | |||
| }, | |||
| filterFunc: { | |||
| type: Function, | |||
| default(value) { | |||
| return !isNil(value); | |||
| }, | |||
| }, | |||
| // 下拉框样式可配置 | |||
| dropdownStyle: { | |||
| type: String, | |||
| default: "", | |||
| default: '', | |||
| }, | |||
| }, | |||
| setup(props, ctx) { | |||
| // 记录当前选择值 | |||
| const currentValue = ref(null); | |||
| const onCommand = (value) => { | |||
| currentValue.value = value; | |||
| ctx.emit('command', value); | |||
| }; | |||
| return { onCommand }; | |||
| const dropdownSelected = computed(() => { | |||
| if (!isNil(props.filtered)) { | |||
| return props.filtered; | |||
| } | |||
| return props.filterFunc(currentValue.value); | |||
| }); | |||
| return { | |||
| onCommand, | |||
| dropdownSelected, | |||
| }; | |||
| }, | |||
| }; | |||
| </script> | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template functional> | |||
| <div class="exception"> | |||
| @@ -1,30 +1,23 @@ | |||
| /* | |||
| * Copyright 2019-2020 Zheng Jie | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| /* * Copyright 2019-2020 Zheng Jie * * Licensed under the Apache License, Version 2.0 (the | |||
| "License"); * you may not use this file except in compliance with the License. * You may obtain a | |||
| copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by | |||
| applicable law or agreed to in writing, software * distributed under the License is distributed on | |||
| an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See | |||
| the License for the specific language governing permissions and * limitations under the License. */ | |||
| <template> | |||
| <div @click="toggleClick"> | |||
| <svg | |||
| :class="{'is-active':isActive}" | |||
| :class="{ 'is-active': isActive }" | |||
| class="hamburger" | |||
| viewBox="0 0 1024 1024" | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| width="64" | |||
| height="64" | |||
| > | |||
| <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" /> | |||
| <path | |||
| d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" | |||
| /> | |||
| </svg> | |||
| </div> | |||
| </template> | |||
| @@ -1,20 +1,20 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import { createElement } from '@vue/composition-api'; | |||
| import { h } from '@vue/composition-api'; | |||
| import { svgBaseProps } from './utils'; | |||
| const Icon = { | |||
| @@ -29,13 +29,17 @@ const Icon = { | |||
| ...svgBaseProps, | |||
| }, | |||
| }; | |||
| return createElement('svg', { | |||
| style: { | |||
| // verticalAlign: 'text-bottom' | |||
| verticalAlign: '-0.15em', | |||
| return h( | |||
| 'svg', | |||
| { | |||
| style: { | |||
| // verticalAlign: 'text-bottom' | |||
| verticalAlign: '-0.15em', | |||
| }, | |||
| ...svgProps, | |||
| }, | |||
| ...svgProps, | |||
| }, ctx.slots.default()); | |||
| ctx.slots.default() | |||
| ); | |||
| }; | |||
| // 事件 | |||
| @@ -50,9 +54,7 @@ const Icon = { | |||
| }, | |||
| render() { | |||
| const { iProps } = this; | |||
| return ( | |||
| <i {...iProps}>{this.renderInnerNode()}</i> | |||
| ); | |||
| return <i {...iProps}>{this.renderInnerNode()}</i>; | |||
| }, | |||
| }; | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import cx from 'classnames'; | |||
| import { mergeProps } from '@/utils'; | |||
| @@ -23,7 +23,7 @@ const scriptUrlCache = new Set(); | |||
| const iconList = []; | |||
| const create = (options = {}) => { | |||
| const { scriptUrl, extraIconProps = {}} = options; | |||
| const { scriptUrl, extraIconProps = {} } = options; | |||
| if (!scriptUrlCache.has(scriptUrl)) { | |||
| const script = document.createElement('script'); | |||
| @@ -32,8 +32,8 @@ const create = (options = {}) => { | |||
| document.body.appendChild(script); | |||
| fetch(scriptUrl) | |||
| .then(response => response.text()) | |||
| .then(params => { | |||
| .then((response) => response.text()) | |||
| .then((params) => { | |||
| params.replace(/id="([^"]+)"/gi, (...item) => { | |||
| iconList.push(item[1].replace(/icon-/, '')); | |||
| }); | |||
| @@ -65,11 +65,14 @@ const create = (options = {}) => { | |||
| [`${extraIconProps.class}-${type}`]: !!extraIconProps.class, | |||
| }); | |||
| // 合并 vue 参数 | |||
| const iconProps = mergeProps(extraIconProps, data, { class: classString }, { props: restProps, on: listeners }); | |||
| return ( | |||
| <Icon {...iconProps}>{content}</Icon> | |||
| const iconProps = mergeProps( | |||
| extraIconProps, | |||
| data, | |||
| { class: classString }, | |||
| { props: restProps, on: listeners } | |||
| ); | |||
| return <Icon {...iconProps}>{content}</Icon>; | |||
| }, | |||
| }; | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| /** | |||
| * 使用方式: | |||
| @@ -26,7 +26,7 @@ | |||
| import create from './iconfont'; | |||
| const IconFont = create({ | |||
| scriptUrl: '//at.alicdn.com/t/font_1756495_6jl45md8krp.js', | |||
| scriptUrl: '//at.alicdn.com/t/font_1756495_qucjcrwy5rm.js', | |||
| extraIconProps: { class: 'svg-icon' }, | |||
| }); | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| // Reference: https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4 | |||
| export const svgBaseProps = { | |||
| @@ -22,4 +22,3 @@ export const svgBaseProps = { | |||
| 'aria-hidden': 'true', | |||
| focusable: 'false', | |||
| }; | |||
| @@ -1,42 +1,27 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template> | |||
| <div :class="rootClass" class="img-gallery"> | |||
| <ul v-if="dataImagesLocal.length" :class="rootClass + '__wrapper'"> | |||
| <li | |||
| v-for="(dataImage) in dataImagesLocal" | |||
| :key="dataImage.id" | |||
| :class="rootClass + '__item'" | |||
| > | |||
| <li v-for="dataImage in dataImagesLocal" :key="dataImage.id" :class="rootClass + '__item'"> | |||
| <div v-if="!isMultiple" :class="classThumbnail(singleSelected.id, dataImage.id)"> | |||
| <img :src="formatUrl(dataImage.url)" :alt="dataImage.alt" :class="rootClass + '__img'" /> | |||
| <div | |||
| v-if="!isMultiple" | |||
| :class="classThumbnail(singleSelected.id, dataImage.id)" | |||
| > | |||
| <img | |||
| :src="formatUrl(dataImage.url)" | |||
| :alt="dataImage.alt" | |||
| :class="rootClass + '__img'" | |||
| > | |||
| <label | |||
| v-if="useLabel" | |||
| :class="rootClass + '__lbl'" | |||
| > | |||
| <label v-if="useLabel" :class="rootClass + '__lbl'"> | |||
| {{ dataImage.alt }} | |||
| </label> | |||
| </div> | |||
| @@ -52,17 +37,25 @@ | |||
| :alt="dataImage.alt" | |||
| :class="rootClass + '__img'" | |||
| @click="onClickImg(dataImage)" | |||
| /> | |||
| <el-tag | |||
| v-if="imageTagVisible && !isStatus(dataImage, 'UNANNOTATED')" | |||
| :hit="false" | |||
| class="image-tag" | |||
| :color="imageLabelTag[dataImage.id]['color']" | |||
| >{{ imageLabelTag[dataImage.id]['text'] }}</el-tag | |||
| > | |||
| <el-tag v-if="imageTagVisible && statusCodeMap[dataImage.status] !== 'UNANNOTATED'" :hit="false" class="image-tag" :color="imageLabelTag[dataImage.id]['color']">{{ imageLabelTag[dataImage.id]['text'] }}</el-tag> | |||
| <el-checkbox v-show="showOption(dataImage.id)" :value="selectedMap[dataImage.id]" class="image-checkbox" @change="checked => handleCheck(dataImage, checked)" /> | |||
| <el-checkbox | |||
| v-show="showOption(dataImage.id)" | |||
| :value="selectedMap[dataImage.id]" | |||
| class="image-checkbox" | |||
| @change="(checked) => handleCheck(dataImage, checked)" | |||
| /> | |||
| <div v-show="showOption(dataImage.id)" :title="dataImage.name" class="img-name-row"> | |||
| <div class="img-name">{{ basename(dataImage.url) }}</div> | |||
| </div> | |||
| <label | |||
| v-if="useLabel" | |||
| :class="rootClass + '__lbl'" | |||
| > | |||
| <label v-if="useLabel" :class="rootClass + '__lbl'"> | |||
| {{ dataImage.alt }} | |||
| </label> | |||
| </div> | |||
| @@ -74,7 +67,7 @@ | |||
| <script> | |||
| import Vue from 'vue'; | |||
| import { bucketHost } from '@/utils/minIO'; | |||
| import { fileCodeMap, findKey, statusCodeMap } from '@/views/dataset/util'; | |||
| import { fileCodeMap, findKey, isStatus } from '@/views/dataset/util'; | |||
| // eslint-disable-next-line import/no-extraneous-dependencies | |||
| const path = require('path'); | |||
| @@ -119,13 +112,13 @@ export default { | |||
| multipleSelected: [], | |||
| imageTagVisible: true, | |||
| imgStatusMap: { | |||
| 'UNRECOGNIZED': {'text': '未识别', 'color': '#FFFFFF'}, | |||
| 'UNANNOTATED': {'text': '未标注', 'color': '#FFFFFF'}, | |||
| 'AUTO_ANNOTATED': { 'text': '自动', 'color': '#468CFF' }, | |||
| 'MANUAL_ANNOTATED': { 'text': '人工', 'color': '#FF9943' }, | |||
| UNRECOGNIZED: { text: '未识别', color: '#FFFFFF' }, | |||
| UNANNOTATED: { text: '未标注', color: '#FFFFFF' }, | |||
| AUTO_ANNOTATED: { text: '自动', color: '#468CFF' }, | |||
| MANUAL_ANNOTATED: { text: '人工', color: '#FF9943' }, | |||
| }, | |||
| hoverImg: null, | |||
| statusCodeMap, | |||
| isStatus, | |||
| }; | |||
| }, | |||
| computed: { | |||
| @@ -142,21 +135,28 @@ export default { | |||
| }, | |||
| imageLabelTag() { | |||
| const labelTag = {}; | |||
| this.dataImages.forEach((item) => { | |||
| const statusInfo = this.imgStatusMap[findKey(item.status, fileCodeMap)]; | |||
| const annotation = JSON.parse(item.annotation); | |||
| let categoryName = '未识别'; | |||
| let tagColor = '#db2a2a'; | |||
| if (statusInfo && (annotation instanceof Array) && annotation.length > 0) { | |||
| const categoryId = annotation[0].category_id; | |||
| categoryName = this.categoryId2Name[categoryId]; | |||
| tagColor = statusInfo.color; | |||
| } | |||
| labelTag[item.id] = { | |||
| 'text': `${statusInfo.text} | ${categoryName}`, | |||
| 'color': tagColor, | |||
| }; | |||
| }); | |||
| try { | |||
| this.dataImages.forEach((item) => { | |||
| const statusInfo = this.imgStatusMap[findKey(item.status, fileCodeMap)]; | |||
| const annotation = JSON.parse(item.annotation); | |||
| let categoryName = '未识别'; | |||
| let tagColor = '#db2a2a'; | |||
| if (statusInfo && Array.isArray(annotation) && annotation.length > 0) { | |||
| annotation.sort((a, b) => b.score - a.score); // 标注按照score降序排序 | |||
| const categoryId = annotation[0].category_id; // 取score最高的标注标签予以显示 | |||
| categoryName = this.categoryId2Name[categoryId] || ''; | |||
| tagColor = statusInfo.color; | |||
| } | |||
| const divider = categoryName && `| ${categoryName}`; | |||
| labelTag[item.id] = { | |||
| text: `${statusInfo.text} ${divider}`, | |||
| color: tagColor, | |||
| }; | |||
| }); | |||
| } catch (err) { | |||
| console.error(err); | |||
| throw err; | |||
| } | |||
| return labelTag; | |||
| }, | |||
| }, | |||
| @@ -187,7 +187,7 @@ export default { | |||
| return `${baseMultipleClass}`; | |||
| }, | |||
| onSelectImage(objectImage) { | |||
| this.singleSelected = { ...this.singleSelected, ...objectImage}; | |||
| this.singleSelected = { ...this.singleSelected, ...objectImage }; | |||
| this.$emit('onselectimage', objectImage); | |||
| }, | |||
| onClickImg(objectImage) { | |||
| @@ -211,7 +211,7 @@ export default { | |||
| return this.hoverImg?.id === id; | |||
| }, | |||
| hasSelected(id) { | |||
| return this.multipleSelected.find(item => id === item); | |||
| return this.multipleSelected.find((item) => id === item); | |||
| }, | |||
| showOption(id) { | |||
| return this.isHover(id) || this.hasSelected(id); | |||
| @@ -234,7 +234,7 @@ export default { | |||
| this.$emit('onselectmultipleimage', this.multipleSelected); | |||
| }, | |||
| selectAll() { | |||
| this.multipleSelected = this.dataImages.map(d => d.id); | |||
| this.multipleSelected = this.dataImages.map((d) => d.id); | |||
| for (const key in this.selectedMap) { | |||
| this.selectedMap[key] = true; | |||
| } | |||
| @@ -257,7 +257,7 @@ export default { | |||
| setInitialSelection() { | |||
| if (this.selectImgsId) { | |||
| if (!this.isMultiple && this.selectImgsId.length === 1) { | |||
| this.singleSelected = { ...this.selectImgsId[0]}; | |||
| this.singleSelected = { ...this.selectImgsId[0] }; | |||
| } else { | |||
| this.multipleSelected = [].concat(this.selectImgsId); | |||
| } | |||
| @@ -271,8 +271,8 @@ export default { | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| @import "~@/assets/styles/variables.scss"; | |||
| @import "~@/assets/styles/mixin.scss"; | |||
| @import '~@/assets/styles/variables.scss'; | |||
| @import '~@/assets/styles/mixin.scss'; | |||
| .img-gallery { | |||
| min-height: 200px; | |||
| @@ -0,0 +1,44 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template functional> | |||
| <div class="el-alert el-alert--primary is-dark"> | |||
| <div class="el-alert-content"> | |||
| <slot /> | |||
| </div> | |||
| </div> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| name: 'InfoAlert', | |||
| }; | |||
| </script> | |||
| <style scoped lang="scss"> | |||
| @import '~@/assets/styles/variables.scss'; | |||
| .el-alert--primary { | |||
| padding-top: 7px; | |||
| padding-bottom: 7px; | |||
| line-height: 30px; | |||
| color: #2e4fde; | |||
| background-color: $primaryPlainBgColor; | |||
| border: 1px solid $primaryBorderColor; | |||
| .el-alert-content { | |||
| width: 100%; | |||
| } | |||
| } | |||
| </style> | |||
| @@ -0,0 +1,19 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import InfoRadio from './info-radio'; | |||
| export default InfoRadio; | |||
| @@ -0,0 +1,111 @@ | |||
| <template> | |||
| <div class="info-data-radio"> | |||
| <el-radio-group ref="radioRef" v-model="state.sValue" v-bind="attrs" v-on="listeners"> | |||
| <component | |||
| :is="radioElement" | |||
| v-for="item in state.list" | |||
| :key="item.value" | |||
| :label="item.value" | |||
| :disabled="item.disabled" | |||
| :title="item.label" | |||
| > | |||
| {{ item.label }} | |||
| </component> | |||
| </el-radio-group> | |||
| </div> | |||
| </template> | |||
| <script> | |||
| import { reactive, computed, watch, ref } from '@vue/composition-api'; | |||
| import { isNil } from 'lodash'; | |||
| export default { | |||
| name: 'InfoRadio', | |||
| inheritAttrs: false, | |||
| model: { | |||
| prop: 'value', | |||
| event: 'change', | |||
| }, | |||
| props: { | |||
| request: Function, // 预留 | |||
| value: { | |||
| type: [String, Number], | |||
| }, | |||
| type: { | |||
| type: String, | |||
| }, | |||
| labelKey: { | |||
| type: String, | |||
| default: 'label', | |||
| }, | |||
| valueKey: { | |||
| type: String, | |||
| default: 'value', | |||
| }, | |||
| dataSource: { | |||
| type: Array, | |||
| default: () => [], | |||
| }, | |||
| transformOptions: Function, | |||
| innerRef: Function, | |||
| }, | |||
| setup(props, ctx) { | |||
| const { labelKey, valueKey, innerRef, transformOptions } = props; | |||
| const elementRef = !isNil(innerRef) ? innerRef() : ref(null); | |||
| const buildOptions = (list) => | |||
| list.map((d) => ({ | |||
| ...d, | |||
| label: d[labelKey], | |||
| value: d[valueKey], | |||
| })); | |||
| const rawList = buildOptions(props.dataSource); | |||
| const list = typeof transformOptions === 'function' ? transformOptions(rawList) : rawList; | |||
| const state = reactive({ | |||
| list, | |||
| sValue: !isNil(props.value) ? props.value : undefined, | |||
| }); | |||
| const handleChange = (value) => { | |||
| ctx.emit('change', value); | |||
| }; | |||
| watch( | |||
| () => props.value, | |||
| (next) => { | |||
| Object.assign(state, { | |||
| sValue: next, | |||
| }); | |||
| } | |||
| ); | |||
| watch( | |||
| () => props.dataSource, | |||
| (next) => { | |||
| Object.assign(state, { | |||
| list: buildOptions(next), | |||
| }); | |||
| } | |||
| ); | |||
| const radioElement = computed(() => (props.type === 'button' ? 'el-radio-button' : 'el-radio')); | |||
| const attrs = computed(() => ctx.attrs); | |||
| const listeners = computed(() => ({ | |||
| ...ctx.listeners, | |||
| change: handleChange, | |||
| })); | |||
| return { | |||
| state, | |||
| attrs, | |||
| elementRef, | |||
| listeners, | |||
| radioElement, | |||
| handleChange, | |||
| }; | |||
| }, | |||
| }; | |||
| </script> | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import InfoSelect from './info-select'; | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template> | |||
| <div class="info-data-select"> | |||
| @@ -62,7 +62,7 @@ export default { | |||
| }, | |||
| dataSource: { | |||
| type: Array, | |||
| default: () => ([]), | |||
| default: () => [], | |||
| }, | |||
| innerRef: Function, | |||
| }, | |||
| @@ -71,11 +71,12 @@ export default { | |||
| const selectRef = !isNil(innerRef) ? innerRef() : ref(null); | |||
| const buildOptions = (list) => list.map(d => ({ | |||
| ...d, | |||
| label: d[labelKey], | |||
| value: d[valueKey], | |||
| })); | |||
| const buildOptions = (list) => | |||
| list.map((d) => ({ | |||
| ...d, | |||
| label: d[labelKey], | |||
| value: d[valueKey], | |||
| })); | |||
| const state = reactive({ | |||
| list: buildOptions(props.dataSource), | |||
| @@ -86,24 +87,26 @@ export default { | |||
| ctx.emit('change', value); | |||
| }; | |||
| watch(() => props.value, (next) => { | |||
| Object.assign(state, { | |||
| sValue: next, | |||
| }); | |||
| }, { | |||
| lazy: true, | |||
| }); | |||
| watch( | |||
| () => props.value, | |||
| (next) => { | |||
| Object.assign(state, { | |||
| sValue: next, | |||
| }); | |||
| } | |||
| ); | |||
| watch(() => props.dataSource, (next) => { | |||
| Object.assign(state, { | |||
| list: buildOptions(next), | |||
| }); | |||
| }, { | |||
| lazy: true, | |||
| }); | |||
| watch( | |||
| () => props.dataSource, | |||
| (next) => { | |||
| Object.assign(state, { | |||
| list: buildOptions(next), | |||
| }); | |||
| } | |||
| ); | |||
| const attrs = computed(() => ctx.attrs); | |||
| const selectEleWidth =computed(() => props.width || '100%'); | |||
| const selectEleWidth = computed(() => props.width || '100%'); | |||
| const listeners = computed(() => ({ | |||
| ...ctx.listeners, | |||
| change: handleChange, | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| export default { | |||
| name: 'info-table-column', | |||
| @@ -24,7 +24,7 @@ export default { | |||
| if (typeof props.render === 'function') { | |||
| columnProps.scopedSlots = { | |||
| default: d => { | |||
| default: (d) => { | |||
| return props.render(d, { refresh: props.refresh }); | |||
| }, | |||
| }; | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import InfoTable from './info-table'; | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template> | |||
| <div class="info-data-table"> | |||
| @@ -135,7 +135,7 @@ export default { | |||
| }); | |||
| }; | |||
| const queryList = async(cfg = {}) => { | |||
| const queryList = async (cfg = {}) => { | |||
| if (state.loading) { | |||
| return; | |||
| } | |||
| @@ -149,7 +149,7 @@ export default { | |||
| ...cfg, | |||
| }); | |||
| // 这边按照统一的 result, page 来进行管理 | |||
| const { result = [], page = {}} = res || {}; | |||
| const { result = [], page = {} } = res || {}; | |||
| setPageInfo({ total: page.total }); | |||
| setData(result); | |||
| } finally { | |||
| @@ -159,44 +159,47 @@ export default { | |||
| onMounted(() => { | |||
| // 首先判断是否为异步请求 | |||
| if(typeof request === 'function') { | |||
| if (typeof request === 'function') { | |||
| queryList(); | |||
| if (typeof actionRef === 'function') { | |||
| actionRef().value = { | |||
| refresh: queryList, | |||
| }; | |||
| } | |||
| } else if(Array.isArray(props.dataSource)) { | |||
| } else if (Array.isArray(props.dataSource)) { | |||
| // 检测是否为静态数据源 | |||
| setData(props.dataSource); | |||
| } | |||
| }); | |||
| watch(() => pageInfo.pageSize, () => { | |||
| setPageInfo({ ...pageInfo, current: 1 }); | |||
| queryList(); | |||
| }, { | |||
| lazy: true, | |||
| }); | |||
| watch( | |||
| () => pageInfo.pageSize, | |||
| () => { | |||
| setPageInfo({ ...pageInfo, current: 1 }); | |||
| queryList(); | |||
| } | |||
| ); | |||
| watch(() => props.dataSource, (next) => { | |||
| setData(next); | |||
| }, { | |||
| lazy: true, | |||
| }); | |||
| watch( | |||
| () => props.dataSource, | |||
| (next) => { | |||
| setData(next); | |||
| } | |||
| ); | |||
| watch(() => pageInfo.current, () => { | |||
| queryList(); | |||
| }, { | |||
| lazy: true, | |||
| }); | |||
| watch( | |||
| () => pageInfo.current, | |||
| () => { | |||
| queryList(); | |||
| } | |||
| ); | |||
| return { | |||
| state, | |||
| pageAttrs, | |||
| pageInfo, | |||
| refresh: queryList, | |||
| setPageInfo: info => | |||
| setPageInfo: (info) => | |||
| setPageInfo({ | |||
| ...pageInfo, | |||
| ...info, | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template> | |||
| <ValidationObserver ref="observerRef"> | |||
| @@ -93,12 +93,12 @@ export default { | |||
| // 编辑标注名称 | |||
| const handleOk = () => { | |||
| observerRef.value.validate().then(success => { | |||
| observerRef.value.validate().then((success) => { | |||
| if (!success) { | |||
| return; | |||
| } | |||
| // 判断是否发生过变更 | |||
| if(String(state.value) !== String(props.row[valueBy])) { | |||
| if (String(state.value) !== String(props.row[valueBy])) { | |||
| ctx.emit('handleOk', state.value, props.row); | |||
| } | |||
| handleCancel(); | |||
| @@ -109,16 +109,20 @@ export default { | |||
| // onShow 的时候重置 | |||
| state.value = props.row[valueBy]; | |||
| Vue.nextTick(() => { | |||
| const input = inputRef && inputRef.value.$refs.input || inputRef && inputRef.value.$refs.textarea; | |||
| const input = | |||
| (inputRef && inputRef.value.$refs.input) || (inputRef && inputRef.value.$refs.textarea); | |||
| input && input.focus(); | |||
| }); | |||
| }; | |||
| watch(() => props.row, (next) => { | |||
| if (next) { | |||
| state.value = next[valueBy]; | |||
| watch( | |||
| () => props.row, | |||
| (next) => { | |||
| if (next) { | |||
| state.value = next[valueBy]; | |||
| } | |||
| } | |||
| }); | |||
| ); | |||
| return { | |||
| props, | |||
| @@ -1,23 +1,21 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template> | |||
| <div | |||
| v-mouse-wheel="getLog" | |||
| > | |||
| <div v-mouse-wheel="getLog"> | |||
| <prism-render :code="logTxt" /> | |||
| </div> | |||
| </template> | |||
| @@ -86,28 +84,31 @@ export default { | |||
| ...this.options, | |||
| startLine: this.currentLogLine, | |||
| lines: this.logLines, | |||
| }).then(res => { | |||
| this.logList = this.logList.concat(res.content); | |||
| this.currentLogLine = res.endLine + 1; | |||
| }) | |||
| .then((res) => { | |||
| this.logList = this.logList.concat(res.content); | |||
| this.currentLogLine = res.endLine + 1; | |||
| // 当请求到的行数小于请求行数时,冻结请求一秒 | |||
| if (res.lines < this.logLines) { | |||
| this.pauseRequest(); | |||
| // 当返回行数小于三行时提示日志已到达底部 | |||
| // TODO: logMsgInstance 到达底部提示是否应该设为,当有新的提示出现,关闭旧的提示,而不是等三秒后自动消失? | |||
| if (!noWarning && res.lines < 3 && !this.logMsgInstance) { | |||
| this.logMsgInstance = this.$message.warning({ | |||
| message: '已经到达日志底部了。', | |||
| onClose: this.onLogMsgClose, | |||
| }); | |||
| // 当请求到的行数小于请求行数时,冻结请求一秒 | |||
| if (res.lines < this.logLines) { | |||
| this.pauseRequest(); | |||
| // 当返回行数小于三行时提示日志已到达底部 | |||
| // TODO: logMsgInstance 到达底部提示是否应该设为,当有新的提示出现,关闭旧的提示,而不是等三秒后自动消失? | |||
| if (!noWarning && res.lines < 3 && !this.logMsgInstance) { | |||
| this.logMsgInstance = this.$message.warning({ | |||
| message: '已经到达日志底部了。', | |||
| onClose: this.onLogMsgClose, | |||
| }); | |||
| } | |||
| } | |||
| } | |||
| }).catch(err => { | |||
| this.pauseRequest(); | |||
| throw err; | |||
| }).finally(() => { | |||
| this.logLoading = false; | |||
| }); | |||
| }) | |||
| .catch((err) => { | |||
| this.pauseRequest(); | |||
| throw err; | |||
| }) | |||
| .finally(() => { | |||
| this.logLoading = false; | |||
| }); | |||
| }, | |||
| reset(getLog = false) { | |||
| this.logList = []; | |||
| @@ -1,37 +1,27 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template> | |||
| <div class="rel pod-log-container-inside"> | |||
| <div | |||
| v-if="showFunctional" | |||
| > | |||
| <div v-if="showFunctional"> | |||
| <el-tooltip effect="dark" content="日志置顶" placement="left"> | |||
| <el-button | |||
| class="log-left-btn" | |||
| icon="el-icon-caret-top" | |||
| @click="onToTop" | |||
| /> | |||
| <el-button class="log-left-btn" icon="el-icon-caret-top" @click="onToTop" /> | |||
| </el-tooltip> | |||
| <el-tooltip effect="dark" content="日志置底" placement="left"> | |||
| <el-button | |||
| class="log-left-btn" | |||
| icon="el-icon-caret-bottom" | |||
| @click="onToBottom" | |||
| /> | |||
| <el-button class="log-left-btn" icon="el-icon-caret-bottom" @click="onToBottom" /> | |||
| </el-tooltip> | |||
| <el-tooltip effect="dark" content="自动跟随" placement="left"> | |||
| <el-button | |||
| @@ -42,18 +32,10 @@ | |||
| /> | |||
| </el-tooltip> | |||
| <el-tooltip effect="dark" content="清空日志" placement="left"> | |||
| <el-button | |||
| icon="el-icon-delete" | |||
| class="log-left-btn" | |||
| @click="onClearLogs" | |||
| /> | |||
| <el-button icon="el-icon-delete" class="log-left-btn" @click="onClearLogs" /> | |||
| </el-tooltip> | |||
| </div> | |||
| <div | |||
| ref="logContent" | |||
| v-mouse-wheel="params" | |||
| class="log-content" | |||
| > | |||
| <div ref="logContent" v-mouse-wheel="params" class="log-content"> | |||
| <prism-render :code="logTxt" /> | |||
| </div> | |||
| </div> | |||
| @@ -76,9 +58,9 @@ export default { | |||
| PrismRender, | |||
| }, | |||
| props: { | |||
| // 包含podName的pod对象, 用于请求日志总行数 | |||
| podName: { | |||
| type: String, | |||
| // 包含 podName、namespace 的 podVO 对象 | |||
| pod: { | |||
| type: Object, | |||
| required: true, | |||
| }, | |||
| // 查询日志需要用到的其他参数 | |||
| @@ -96,15 +78,6 @@ export default { | |||
| type: Number, | |||
| default: 200, | |||
| }, | |||
| // 顶部展示特定信息 | |||
| showMsg: { | |||
| type: Boolean, | |||
| default: false, | |||
| }, | |||
| msg: { | |||
| type: String, | |||
| default: '', | |||
| }, | |||
| disabled: { | |||
| type: Boolean, | |||
| default: false, | |||
| @@ -123,16 +96,15 @@ export default { | |||
| logBottomLine: 0, // 当前日志数组最后一行的行号 | |||
| autoFollow: false, // 自动跟随 | |||
| topWarning: true, // 向上滚动请求时,如果已经到顶了,会提示一次日志到顶;每次请求日志时刷新 | |||
| noRenderTag: false, // 自动跟随中点击清空时,对于下一次的结果不进行处理 | |||
| }; | |||
| }, | |||
| computed: { | |||
| params() { | |||
| return {up: throttle(1000, this.mouseUp), down: throttle(1000, this.mouseDown)}; | |||
| return { up: throttle(1000, this.mouseUp), down: throttle(1000, this.mouseDown) }; | |||
| }, | |||
| // 传入的 msg 信息会展示在所有日志的最前面 | |||
| logTxt() { | |||
| return `${this.showMsg ? `${this.msg}\n` : ''}${this.logList.join('\n')}`; | |||
| return this.logList.length ? this.logList.join('\n') : '暂无日志\n'; | |||
| }, | |||
| // 确保存放日志的数组上限至少为两倍日志请求行数。 | |||
| localLineLimit() { | |||
| @@ -148,17 +120,25 @@ export default { | |||
| this.mouseDownThrottle = throttle(1000, this.mouseDown); | |||
| this.mouseUpThrottle = throttle(1000, this.mouseUp); | |||
| }, | |||
| deactivated() { | |||
| // 切出时停止跟随轮询 | |||
| this.stopPolling(); | |||
| }, | |||
| methods: { | |||
| getLog(startLine, lines) { | |||
| if (!this.podName) { | |||
| this.message('没有传入 podName, 无法查询日志'); | |||
| return; | |||
| if (!this.pod.namespace) { | |||
| this.message('缺少 namespace 信息, 无法查询日志'); | |||
| return Promise.reject(); | |||
| } | |||
| if (!this.pod.podName) { | |||
| this.message('缺少 podName 信息, 无法查询日志'); | |||
| return Promise.reject(); | |||
| } | |||
| startLine = startLine || 1; | |||
| lines = lines || this.logLines; | |||
| this.topWarning = true; | |||
| return getPodLog({ | |||
| podName: this.podName, | |||
| podName: this.pod.podName, | |||
| namespace: this.pod.namespace, | |||
| startLine, | |||
| lines, | |||
| ...this.options, | |||
| @@ -169,18 +149,13 @@ export default { | |||
| async mouseUp() { | |||
| // 如果已处于第一行或没有日志, 不向上请求 | |||
| if (this.logTopLine <= 1) { | |||
| // 只进行一次到达顶部提示;任意请求日志后刷新 | |||
| if (this.topWarning) { | |||
| this.topWarning = false; | |||
| if(!this.logMsgInstance) { | |||
| this.message('已经到达日志顶部.'); | |||
| } | |||
| } | |||
| return; | |||
| } | |||
| // 如果此时元素已不存在,则不进行任何其他操作 | |||
| if (!this.$refs.logContent) { return; } | |||
| if (!this.$refs.logContent) { | |||
| return; | |||
| } | |||
| // 向上滚动时,起始行为 logTopLine 减去请求行数 | |||
| let reqStartLine = this.logTopLine - this.logLines; | |||
| @@ -189,19 +164,24 @@ export default { | |||
| // 请求前日志区高度 | |||
| const beforeHeight = this.$refs.logContent.scrollHeight; | |||
| const { content, startLine: resStartLine } = await this.getLog(reqStartLine, this.logTopLine - reqStartLine); | |||
| const result = await this.getLog(reqStartLine, this.logTopLine - reqStartLine); | |||
| if (!result) return; | |||
| const { content, startLine: resStartLine } = result; | |||
| this.logList = content.concat(this.logList); | |||
| this.$nextTick(() => { | |||
| // 如果此时元素已不存在,则不进行任何其他操作 | |||
| if (!this.$refs.logContent) { return; } | |||
| if (!this.$refs.logContent) { | |||
| return; | |||
| } | |||
| // 请求后日志区高度,从而设置顶部高度差 | |||
| const afterHeight = this.$refs.logContent.scrollHeight; | |||
| this.$refs.logContent.scrollTop = afterHeight - beforeHeight; | |||
| // 限制总行数为 localLineLimit | |||
| if(this.logList.length > this.localLineLimit) { | |||
| if (this.logList.length > this.localLineLimit) { | |||
| this.logList.splice(this.localLineLimit); | |||
| } | |||
| @@ -211,42 +191,71 @@ export default { | |||
| }, | |||
| // 滚轮向上滚动到底部时的事件 | |||
| async mouseDown(disableWarning) { | |||
| async mouseDown(toBottom = false) { | |||
| // 如果此时元素已不存在,则不进行任何其他操作 | |||
| if (!this.$refs.logContent) { return; } | |||
| if (!this.$refs.logContent) { | |||
| return; | |||
| } | |||
| // 不进行请求,同时重置 tag | |||
| if (this.noRenderTag) { | |||
| this.noRenderTag = false; | |||
| return; | |||
| } | |||
| // 请求前日志区顶部高度 | |||
| const beforeTop = this.$refs.logContent.scrollTop; | |||
| const { content, endLine, lines } = await this.getLog(this.logBottomLine + 1); | |||
| const result = await this.getLog(this.logBottomLine + 1); | |||
| if (!result) return; | |||
| const { content, endLine } = result; | |||
| this.logList = this.logList.concat(content); | |||
| this.logBottomLine = endLine; // 向下滚动时, 返回的 endLine 就是最后一行的行号 | |||
| if (toBottom) { | |||
| if (this.logList.length > this.localLineLimit) { | |||
| this.logList.splice(0, this.logList.length - this.localLineLimit); | |||
| } | |||
| // 将进度条拉到底部 | |||
| this.$nextTick(() => { | |||
| // 如果此时元素已不存在,则不进行任何其他操作 | |||
| if (!this.$refs.logContent) { | |||
| return; | |||
| } | |||
| this.$refs.logContent.scrollTop = this.$refs.logContent.scrollHeight; | |||
| }); | |||
| return; | |||
| } | |||
| this.$nextTick(() => { | |||
| // 如果此时元素已不存在,则不进行任何其他操作 | |||
| if (!this.$refs.logContent) { return; } | |||
| if (!this.$refs.logContent) { | |||
| return; | |||
| } | |||
| // 请求后日志区高度 | |||
| const afterReqHeight = this.$refs.logContent.scrollHeight; | |||
| // 限制总行数为 localLineLimit | |||
| if(this.logList.length > this.localLineLimit) { | |||
| if (this.logList.length > this.localLineLimit) { | |||
| this.logList.splice(0, this.logList.length - this.localLineLimit); | |||
| } | |||
| this.$nextTick(() => { | |||
| // 如果此时元素已不存在,则不进行任何其他操作 | |||
| if (!this.$refs.logContent) { return; } | |||
| // 剪切后日志区高度,计算高度变化差,设置去掉高度差后的 scrollTop | |||
| if (!this.$refs.logContent) { | |||
| return; | |||
| } | |||
| // 剪切后日志区高度,计算高度变化差,设置去掉高度差后的 scrollTop | |||
| const afterSpliceHeight = this.$refs.logContent.scrollHeight; | |||
| this.$refs.logContent.scrollTop = Math.max(0, beforeTop - (afterReqHeight - afterSpliceHeight)); | |||
| this.$refs.logContent.scrollTop = Math.max( | |||
| 0, | |||
| beforeTop - (afterReqHeight - afterSpliceHeight) | |||
| ); | |||
| this.logBottomLine = endLine; // 向下滚动时, 返回的 endLine 就是最后一行的行号 | |||
| this.logTopLine = this.logBottomLine - this.logList.length + 1; // 此时第一行的行号需要通过 logList 的长度进行计算 | |||
| if (lines < 3 && !this.logMsgInstance && !this.autoFollow && disableWarning !== true) { | |||
| this.message('已经到达日志底部.'); | |||
| } | |||
| }); | |||
| }); | |||
| }, | |||
| @@ -257,7 +266,7 @@ export default { | |||
| this.logList = []; | |||
| this.logTopLine = this.logBottomLine = 0; | |||
| this.$nextTick(() => { | |||
| this.mouseDown(true); | |||
| this.mouseDown(); | |||
| }); | |||
| }, | |||
| @@ -292,6 +301,10 @@ export default { | |||
| // 清空当前日志内容 | |||
| async onClearLogs() { | |||
| if (this.autoFollow) { | |||
| // 如果已经在自动跟随中,则设置 tag | |||
| this.noRenderTag = true; | |||
| } | |||
| await this.changeAutoFollow(true); | |||
| // 开启自动跟随请求最底部日志之后,清空当前日志列表 | |||
| this.logList = []; | |||
| @@ -306,34 +319,28 @@ export default { | |||
| return; | |||
| } | |||
| this.logList = []; | |||
| const countObj = await countPodLogs([{ podName: this.podName }]); // 获取对应pod日志总行数 | |||
| const linesCount = countObj[this.podName]; | |||
| const countObj = await countPodLogs(this.pod.namespace, [this.pod]); // 获取对应pod日志总行数 | |||
| const linesCount = countObj[this.pod.podName]; | |||
| // 请求最后的 logLines 行 | |||
| this.logBottomLine = Math.max(linesCount - this.logLines, 0); | |||
| await this.mouseDown(); | |||
| // 将进度条拉到底部 | |||
| this.$nextTick(() => { | |||
| // 如果此时元素已不存在,则不进行任何其他操作 | |||
| if (!this.$refs.logContent) { return; } | |||
| this.$refs.logContent.scrollTop = this.$refs.logContent.scrollHeight; | |||
| }); | |||
| await this.mouseDown(true); | |||
| }, | |||
| // 日志跟随实现 | |||
| async logPolling() { | |||
| if (!this.autoFollow) { return; } | |||
| if (!this.autoFollow) { | |||
| return; | |||
| } | |||
| await this.mouseDownThrottle(); | |||
| // 将进度条拉到底部 | |||
| this.$nextTick(() => { | |||
| // 如果此时元素已不存在,则不进行任何其他操作 | |||
| if (!this.$refs.logContent) { return; } | |||
| await this.mouseDownThrottle(true); | |||
| this.$refs.logContent.scrollTop = this.$refs.logContent.scrollHeight; | |||
| }); | |||
| setTimeout(this.logPolling, 1000); | |||
| }, | |||
| // 停止跟随 | |||
| stopPolling() { | |||
| this.autoFollow = false; | |||
| }, | |||
| // 判断在自动跟随滚轮是否向上 | |||
| watchScroll(event) { | |||
| @@ -361,4 +368,8 @@ export default { | |||
| overflow: auto; | |||
| border: #ccc solid 1px; | |||
| } | |||
| ::v-deep pre[class*='language-'] { | |||
| margin: 0; | |||
| } | |||
| </style> | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template> | |||
| <div style="height: 100%;"> | |||
| @@ -21,12 +21,8 @@ | |||
| <div class="right" /> | |||
| </div> | |||
| <div id="content"> | |||
| <div class="left"> | |||
| <div | |||
| class="image" | |||
| @mouseenter="stopSlider" | |||
| @mouseleave="startSlider" | |||
| > | |||
| <div class="left mb-dn"> | |||
| <div class="image" @mouseenter="stopSlider" @mouseleave="startSlider"> | |||
| <transition-group ref="loginList" name="login-list" tag="ul"> | |||
| <li | |||
| v-for="item in loginImageList" | |||
| @@ -35,25 +31,21 @@ | |||
| class="image-item" | |||
| > | |||
| <!-- 文本介绍 --> | |||
| <div class="carousel-title">{{item.title}}</div> | |||
| <div class="carousel-text">{{item.text}}</div> | |||
| <div class="carousel-title">{{ item.title }}</div> | |||
| <div class="carousel-text">{{ item.text }}</div> | |||
| </li> | |||
| </transition-group> | |||
| <!-- 翻页指示器 --> | |||
| <ul class="indicator-item"> | |||
| <li | |||
| v-for="(item,index) in loginImageList.length" | |||
| v-for="(item, index) in loginImageList.length" | |||
| :key="index" | |||
| :class="{'active': index === currentIndex}" | |||
| :class="{ active: index === currentIndex }" | |||
| @click="currentIndex = index" | |||
| > | |||
| </li> | |||
| ></li> | |||
| </ul> | |||
| <!-- 底部 --> | |||
| <div | |||
| v-if="$store.state.settings.showFooter" | |||
| id="el-login-footer" | |||
| > | |||
| <div v-if="$store.state.settings.showFooter" id="el-login-footer"> | |||
| <span>{{ $store.state.settings.footerTxt }}</span> | |||
| <template v-if="$store.state.settings.caseNumber"> | |||
| <span>⋅</span> | |||
| @@ -62,11 +54,11 @@ | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="right"> | |||
| <div class="right mb-w100"> | |||
| <!-- 左侧部分 --> | |||
| <slot /> | |||
| <div class="footer-logo"> | |||
| <img src="@/assets/images/dubhe-logo.svg" width="74" alt> | |||
| <img src="@/assets/images/dubhe-logo.svg" width="74" alt /> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -282,4 +274,3 @@ export default { | |||
| transition: all 0.5s linear; | |||
| } | |||
| </style> | |||
| @@ -0,0 +1,50 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. * * Licensed under the Apache License, | |||
| Version 2.0 (the "License"); * you may not use state file except in compliance with the License. * | |||
| You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless | |||
| required by applicable law or agreed to in writing, software * distributed under the License is | |||
| distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | |||
| implied. * See the License for the specific language governing permissions and * limitations under | |||
| the License. * ============================================================= */ | |||
| <template> | |||
| <el-popover v-if="show" placement="right" width="400" trigger="hover" :offset="20"> | |||
| <el-table :data="msgList" :show-header="false" :empty-text="emptyText"> | |||
| <el-table-column prop="name" show-overflow-tooltip /> | |||
| <el-table-column prop="message" show-overflow-tooltip /> | |||
| </el-table> | |||
| <i slot="reference" class="el-icon-warning-outline primary f16 v-text-top" /> | |||
| </el-popover> | |||
| </template> | |||
| <script> | |||
| import { computed } from '@vue/composition-api'; | |||
| export default { | |||
| props: { | |||
| show: Boolean, | |||
| statusDetail: { | |||
| type: String, | |||
| require: true, | |||
| }, | |||
| emptyText: { | |||
| type: String, | |||
| default: '暂无提示信息', | |||
| }, | |||
| }, | |||
| setup(props) { | |||
| const msgList = computed(() => { | |||
| try { | |||
| const msg = JSON.parse(props.statusDetail); | |||
| const list = Object.keys(msg).map((m) => ({ name: m, message: msg[m] })); | |||
| return list; | |||
| } catch (e) { | |||
| return []; | |||
| } | |||
| }); | |||
| return { | |||
| msgList, | |||
| }; | |||
| }, | |||
| }; | |||
| </script> | |||
| @@ -0,0 +1,498 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template> | |||
| <div v-loading="loadingHistory" class="pod-monitor-container"> | |||
| <div v-if="displayCpu" :id="cpuId" class="charts" /> | |||
| <div v-if="displayMem" :id="memId" class="charts" /> | |||
| <div v-if="displayGpu && !usePodName" class="gpu-select-container"> | |||
| <label class="pr-20">GPU 节点</label> | |||
| <el-select | |||
| v-model="selectedPod" | |||
| placeholder="请选择展示的节点" | |||
| class="my-10" | |||
| filterable | |||
| @change="onPodSelectChange" | |||
| > | |||
| <el-option label="全部" :value="null" /> | |||
| <el-option v-for="pod in gpuPodList" :key="pod" :label="pod" :value="pod" /> | |||
| </el-select> | |||
| </div> | |||
| <div v-if="displayGpu" :id="gpuId" class="charts" /> | |||
| </div> | |||
| </template> | |||
| <script> | |||
| import { nanoid } from 'nanoid'; | |||
| import echarts from 'echarts'; | |||
| import { parseTime, cpuPercentage, memNormalize, ONE_HOUR, toUnixTimestamp } from '@/utils'; | |||
| import { getMetrics, getHistoryMetrics } from '@/api/system/pod'; | |||
| import { defaultOption, cpuOption, memOption, gpuOption } from './util'; | |||
| export default { | |||
| name: 'PodMonitor', | |||
| props: { | |||
| namespace: { | |||
| type: String, | |||
| default: null, | |||
| }, | |||
| resourceName: { | |||
| type: String, | |||
| default: null, | |||
| }, | |||
| podName: [Array, String], // podName 支持直接传入或以数组传入 | |||
| // idTag 用于构成 echarts 元素的唯一 ID,避免同页面多个监控组件导致 ID 重复 | |||
| idTag: { | |||
| type: String, | |||
| default: nanoid(4), | |||
| }, | |||
| // timeStep 用于指定多久轮询一次,单位毫秒,k8s 五秒更新一次数据,建议不小于 5000 | |||
| timeStep: { | |||
| type: Number, | |||
| default: 5000, | |||
| }, | |||
| // timePoints 用于指定保持的时间点个数 | |||
| timePoints: { | |||
| type: Number, | |||
| default: 12 * 60 * 4, // 默认保留 5秒/次-四小时 的数据 | |||
| }, | |||
| // timeFormat 用于格式化 X 轴时间展示,规则详见 @/utils -> parseTime | |||
| timeFormat: { | |||
| type: String, | |||
| default: '{h}:{i}:{s}', | |||
| }, | |||
| displayCpu: { | |||
| type: Boolean, | |||
| default: true, | |||
| }, | |||
| displayMem: { | |||
| type: Boolean, | |||
| default: true, | |||
| }, | |||
| displayGpu: { | |||
| type: Boolean, | |||
| default: true, | |||
| }, | |||
| }, | |||
| data() { | |||
| return { | |||
| pollId: 1, | |||
| loadingHistory: false, | |||
| polling: false, // 是否正在查询状态 | |||
| cpuData: {}, // 以 pod 为键的一个对象 | |||
| memData: {}, | |||
| gpuData: {}, | |||
| cpuHistoryTimeArray: [], // 拉取历史数据时,CPU、内存、GPU 使用独立的时间点数组 | |||
| memHistoryTimeArray: [], | |||
| gpuHistoryTimeArray: [], | |||
| pollTimeArray: [], // 轮询期间使用统一的时间点数组 | |||
| cpuChart: null, // CPU 折线图实例 | |||
| memChart: null, // 内存折线图实例 | |||
| gpuChart: null, // GPU 折线图实例 | |||
| podNameSet: new Set(), | |||
| selectedPod: null, | |||
| }; | |||
| }, | |||
| computed: { | |||
| usePodName() { | |||
| // 如果 podName 传入数组,则验证数组是否有成员 | |||
| if (Array.isArray(this.podName)) return this.podName.length > 0; | |||
| return Boolean(this.podName); | |||
| }, | |||
| cpuId() { | |||
| return `pod-monitor-cpu-${this.idTag}`; | |||
| }, | |||
| memId() { | |||
| return `pod-monitor-mem-${this.idTag}`; | |||
| }, | |||
| gpuId() { | |||
| return `pod-monitor-gpu-${this.idTag}`; | |||
| }, | |||
| gpuPodList() { | |||
| return Object.keys(this.gpuData); | |||
| }, | |||
| monitorParam() { | |||
| const param = { | |||
| namespace: this.namespace, | |||
| }; | |||
| if (this.usePodName) { | |||
| param.podNames = this.podName; | |||
| } else { | |||
| param.resourceName = this.resourceName || undefined; | |||
| } | |||
| return param; | |||
| }, | |||
| }, | |||
| beforeDestroy() { | |||
| this.stop(); | |||
| }, | |||
| methods: { | |||
| async getMetrics(option = {}) { | |||
| // 如果 namespace 不存在,或者 resourceName 和 podName 都不存在,则停止查询直接返回 | |||
| if (!this.namespace || (!this.resourceName && !this.usePodName)) { | |||
| return; | |||
| } | |||
| // 如果不存在 pollId,或者 pollId 与当前 pollId 不一致,说明已经不是同一轮查询,则不继续查询直接返回 | |||
| if (!option.pollId || option.pollId !== this.pollId) return; | |||
| const datas = await getMetrics(this.monitorParam); | |||
| this.pushTime(); | |||
| datas.forEach(this.parseData); | |||
| this.drawCharts(); | |||
| setTimeout(() => { | |||
| this.getMetrics(option); | |||
| }, this.timeStep); | |||
| }, | |||
| async getHistoryMetrics() { | |||
| if (!this.namespace) { | |||
| this.$message.warning('命名空间为空,无法获取监控信息'); | |||
| return; | |||
| } | |||
| if (!this.resourceName && !this.usePodName) { | |||
| this.$message.warning('资源名称或节点名为空,无法获取监控信息'); | |||
| return; | |||
| } | |||
| const params = { ...this.monitorParam }; | |||
| const now = new Date().getTime(); | |||
| params.startTime = toUnixTimestamp(now - 4 * ONE_HOUR); | |||
| params.endTime = toUnixTimestamp(now - this.timeStep); | |||
| params.step = Math.round(this.timeStep / 1000); | |||
| this.loadingHistory = true; | |||
| const datas = await getHistoryMetrics(params).finally(() => { | |||
| this.loadingHistory = false; | |||
| }); | |||
| datas.forEach(this.parseHistoryData); | |||
| }, | |||
| pushTime() { | |||
| // 获取当前时间,并且整理时间列表 | |||
| const now = parseTime(new Date(), this.timeFormat); | |||
| this.pollTimeArray.push(now); | |||
| // 如果 pollTimeArray 超过了限制,此时各指标 HistoryTimeArray 应当已经清空,直接清理 pollTimeArray 即可 | |||
| if (this.pollTimeArray.length > this.timePoints) { | |||
| this.pollTimeArray.splice(0, 1); | |||
| return; | |||
| } | |||
| // gap 为 CPU/Mem/GPU 总时间节点超过时间点上限的数量,超过则清除最前面的 gap 个时间点 | |||
| let gap = this.cpuHistoryTimeArray.length + this.pollTimeArray.length - this.timePoints; | |||
| if (gap > 0) { | |||
| this.cpuHistoryTimeArray.splice(0, gap); | |||
| } | |||
| gap = this.memHistoryTimeArray.length + this.pollTimeArray.length - this.timePoints; | |||
| if (gap > 0) { | |||
| this.memHistoryTimeArray.splice(0, gap); | |||
| } | |||
| gap = this.gpuHistoryTimeArray.length + this.pollTimeArray.length - this.timePoints; | |||
| if (gap > 0) { | |||
| this.gpuHistoryTimeArray.splice(0, gap); | |||
| } | |||
| }, | |||
| parseHistoryData(pod) { | |||
| const { podName } = pod; | |||
| // 如果出现了重复的 podName, 则忽略重复数据 | |||
| if (this.podNameSet.has(podName)) return; | |||
| this.podNameSet.add(podName); | |||
| if (this.displayCpu) { | |||
| this.cpuData[podName] = {}; | |||
| pod.cpuMetrics.forEach((data) => { | |||
| const time = parseTime(data.time, this.timeFormat); | |||
| this.cpuHistoryTimeArray.push(time); | |||
| this.cpuData[podName][time] = data.value; | |||
| }); | |||
| this.cpuHistoryTimeArray = Array.from(new Set(this.cpuHistoryTimeArray)).sort((a, b) => | |||
| a.localeCompare(b) | |||
| ); | |||
| } | |||
| if (this.displayMem) { | |||
| this.memData[podName] = {}; | |||
| pod.memoryMetrics.forEach((data) => { | |||
| const time = parseTime(data.time, this.timeFormat); | |||
| this.memHistoryTimeArray.push(time); | |||
| this.memData[podName][time] = Math.round(memNormalize(data.value, 'Ki') * 10) / 10; | |||
| }); | |||
| this.memHistoryTimeArray = Array.from(new Set(this.memHistoryTimeArray)).sort((a, b) => | |||
| a.localeCompare(b) | |||
| ); | |||
| } | |||
| if (this.displayGpu) { | |||
| this.$set(this.gpuData, podName, {}); | |||
| let isFirstCard = true; // 只针对第一张 GPU 卡插入时间点 | |||
| this.gpuData[podName].cardSet = new Set(); | |||
| pod.gpuMetrics.forEach((card) => { | |||
| // 如果存在重复的卡,则忽略重复数据 | |||
| if (this.gpuData[podName].cardSet.has(card.accId)) return; | |||
| this.gpuData[podName].cardSet.add(card.accId); | |||
| this.gpuData[podName][card.accId] = {}; | |||
| card.values.forEach((data) => { | |||
| const time = parseTime(data.time, this.timeFormat); | |||
| // 只针对第一张 GPU 卡插入时间点 | |||
| isFirstCard && this.gpuHistoryTimeArray.push(time); | |||
| this.gpuData[podName][card.accId][time] = data.value; | |||
| }); | |||
| isFirstCard && (isFirstCard = false); | |||
| }); | |||
| this.gpuHistoryTimeArray = Array.from(new Set(this.gpuHistoryTimeArray)).sort((a, b) => | |||
| a.localeCompare(b) | |||
| ); | |||
| } | |||
| }, | |||
| parseData(data) { | |||
| const { | |||
| podName, | |||
| cpuRequestAmount, | |||
| cpuRequestFormat, | |||
| cpuUsageAmount, | |||
| cpuUsageFormat, | |||
| memoryUsageAmount, | |||
| memoryUsageFormat, | |||
| } = data; | |||
| // 必须先插入时间,然后进行数据解析 | |||
| const now = this.pollTimeArray[this.pollTimeArray.length - 1]; | |||
| if (!this.podNameSet.has(podName)) { | |||
| this.podNameSet.add(podName); | |||
| this.displayCpu && (this.cpuData[podName] = {}); | |||
| this.displayMem && (this.memData[podName] = {}); | |||
| this.displayGpu && this.$set(this.gpuData, podName, { cardSet: new Set() }); | |||
| } | |||
| // 解析 CPU 数据 | |||
| this.displayCpu && | |||
| (this.cpuData[podName][now] = cpuPercentage( | |||
| cpuUsageAmount, | |||
| cpuUsageFormat, | |||
| cpuRequestAmount, | |||
| cpuRequestFormat | |||
| )); | |||
| // 解析内存数据 | |||
| this.displayMem && | |||
| (this.memData[podName][now] = | |||
| Math.round(memNormalize(memoryUsageAmount, memoryUsageFormat) * 10) / 10); | |||
| // 解析 GPU 数据 | |||
| if (this.displayGpu) { | |||
| data.gpuUsagePersent.forEach((card) => { | |||
| if (!this.gpuData[podName].cardSet.has(card.accId)) { | |||
| this.gpuData[podName].cardSet.add(card.accId); | |||
| this.gpuData[podName][card.accId] = {}; | |||
| } | |||
| this.gpuData[podName][card.accId][now] = card.usage; | |||
| }); | |||
| } | |||
| }, | |||
| // 出口方法 | |||
| stop() { | |||
| this.pollId += 1; // 退出时自增,避免轮询干扰 | |||
| this.cpuChart && this.cpuChart.clear(); | |||
| this.memChart && this.memChart.clear(); | |||
| this.gpuChart && this.gpuChart.clear(); | |||
| this.podNameSet.clear(); | |||
| this.cpuChart = this.memChart = this.gpuChart = null; | |||
| this.cpuHistoryTimeArray.length = 0; | |||
| this.memHistoryTimeArray.length = 0; | |||
| this.gpuHistoryTimeArray.length = 0; | |||
| this.pollTimeArray.length = 0; | |||
| this.cpuData = {}; | |||
| this.memData = {}; | |||
| this.gpuData = {}; | |||
| this.polling = false; | |||
| }, | |||
| // 入口方法 | |||
| async init() { | |||
| if (this.polling) { | |||
| this.stop(); | |||
| } | |||
| this.initCharts(); | |||
| this.polling = true; | |||
| await this.getHistoryMetrics(); | |||
| this.getMetrics({ pollId: this.pollId }); | |||
| }, | |||
| initCharts() { | |||
| if (this.displayCpu) { | |||
| this.initCpu(); | |||
| } | |||
| if (this.displayMem) { | |||
| this.initMem(); | |||
| } | |||
| if (this.displayGpu) { | |||
| this.initGpu(); | |||
| } | |||
| }, | |||
| initCpu() { | |||
| this.cpuChart = echarts.init(document.getElementById(this.cpuId)); | |||
| this.cpuChart.setOption(defaultOption); | |||
| this.cpuChart.setOption(cpuOption); | |||
| }, | |||
| initMem() { | |||
| this.memChart = echarts.init(document.getElementById(this.memId)); | |||
| this.memChart.setOption(defaultOption); | |||
| this.memChart.setOption(memOption); | |||
| }, | |||
| initGpu() { | |||
| this.gpuChart = echarts.init(document.getElementById(this.gpuId)); | |||
| this.gpuChart.setOption(defaultOption); | |||
| this.gpuChart.setOption(gpuOption); | |||
| }, | |||
| drawCharts() { | |||
| if (this.displayCpu) { | |||
| this.drawCpu(); | |||
| } | |||
| if (this.displayMem) { | |||
| this.drawMem(); | |||
| } | |||
| if (this.displayGpu) { | |||
| this.drawGpu(); | |||
| } | |||
| }, | |||
| drawCpu() { | |||
| // 数据计算放在画图的地方来做,在不需要画图时就无需计算 | |||
| const timeArray = this.cpuHistoryTimeArray.concat(this.pollTimeArray); | |||
| const seriesData = []; | |||
| Object.keys(this.cpuData).forEach((podName) => { | |||
| const data = timeArray.map((time) => this.cpuData[podName][time]); | |||
| seriesData.push({ | |||
| name: podName, | |||
| type: 'line', | |||
| data, | |||
| }); | |||
| }); | |||
| this.cpuChart && | |||
| this.cpuChart.setOption({ | |||
| xAxis: { | |||
| type: 'category', | |||
| boundaryGap: false, | |||
| data: timeArray, | |||
| }, | |||
| series: seriesData, | |||
| legend: { | |||
| data: Object.keys(this.cpuData), | |||
| }, | |||
| }); | |||
| }, | |||
| drawMem() { | |||
| // 数据计算放在画图的地方来做,在不需要画图时就无需计算 | |||
| const timeArray = this.memHistoryTimeArray.concat(this.pollTimeArray); | |||
| const seriesData = []; | |||
| Object.keys(this.memData).forEach((podName) => { | |||
| const data = timeArray.map((time) => this.memData[podName][time]); | |||
| seriesData.push({ | |||
| name: podName, | |||
| type: 'line', | |||
| data, | |||
| }); | |||
| }); | |||
| this.memChart && | |||
| this.memChart.setOption({ | |||
| xAxis: { | |||
| type: 'category', | |||
| boundaryGap: false, | |||
| data: timeArray, | |||
| }, | |||
| series: seriesData, | |||
| legend: { | |||
| data: Object.keys(this.memData), | |||
| }, | |||
| }); | |||
| }, | |||
| drawGpu(noMerge) { | |||
| // 数据计算放在画图的地方来做,在不需要画图时就无需计算 | |||
| const timeArray = this.gpuHistoryTimeArray.concat(this.pollTimeArray); | |||
| const seriesData = []; | |||
| const legendList = []; | |||
| let name; | |||
| Object.keys(this.gpuData).forEach((pod) => { | |||
| if (this.selectedPod && this.selectedPod !== pod) return; | |||
| Array.from(this.gpuData[pod].cardSet).forEach((card) => { | |||
| name = `${pod}: ${card | |||
| .split('-') | |||
| .slice(0, 2) | |||
| .join('-')}`; // 由于卡名的构成是 UUID,为缩减长度,画图时只截取前两段 | |||
| legendList.push(name); | |||
| const data = timeArray.map((time) => this.gpuData[pod][card][time]); | |||
| seriesData.push({ | |||
| name, | |||
| type: 'line', | |||
| data, | |||
| }); | |||
| }); | |||
| }); | |||
| // noMerge 模式下完全重新绘制 | |||
| if (noMerge) { | |||
| this.gpuChart.clear(); | |||
| this.gpuChart.setOption(defaultOption); | |||
| this.gpuChart.setOption(gpuOption); | |||
| } | |||
| this.gpuChart && | |||
| this.gpuChart.setOption({ | |||
| xAxis: { | |||
| type: 'category', | |||
| boundaryGap: false, | |||
| data: timeArray, | |||
| }, | |||
| series: seriesData, | |||
| legend: { | |||
| data: legendList, | |||
| }, | |||
| }); | |||
| }, | |||
| onPodSelectChange() { | |||
| this.drawGpu(true); | |||
| }, | |||
| }, | |||
| }; | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .charts { | |||
| min-height: 300px; | |||
| } | |||
| </style> | |||
| @@ -0,0 +1,147 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| import { round } from 'lodash'; | |||
| // 公共默认配置 | |||
| export const defaultOption = { | |||
| // x轴 | |||
| xAxis: { | |||
| type: 'category', | |||
| boundaryGap: false, | |||
| }, | |||
| // y轴 | |||
| yAxis: { | |||
| splitLine: { | |||
| show: false, | |||
| }, | |||
| min(value) { | |||
| // 如果图中没有值,y轴最小值默认设为 0 | |||
| if (value.min === Infinity) { | |||
| return 0; | |||
| } | |||
| // y轴最小值不小于 0; y轴最小值与数据最小值的距离不大于 10,且不大于数据最大值与 100 之间的距离 | |||
| return round(Math.max(value.min - Math.min(100 - value.max, 10), 0), 2); | |||
| }, | |||
| max(value) { | |||
| // 如果图中没有值,y轴最大值默认设为 100 | |||
| if (value.max === -Infinity) { | |||
| return 100; | |||
| } | |||
| // y轴最大值不大于 100; y轴最大值与数据最大值的距离不大于 10,且不大于数据最小值与 0 之间的距离 | |||
| return round(Math.min(value.max + Math.min(value.min, 10), 100), 2); | |||
| }, | |||
| }, | |||
| grid: { | |||
| right: '5%', | |||
| }, | |||
| // 图例,涉及多节点展示 | |||
| legend: { | |||
| show: true, | |||
| width: 400, | |||
| data: [], | |||
| }, | |||
| series: { | |||
| type: 'line', | |||
| data: [], | |||
| }, | |||
| tooltip: { | |||
| trigger: 'axis', | |||
| backgroundColor: 'rgba(245, 245, 245, 0.8)', | |||
| borderWidth: 1, | |||
| borderColor: '#ccc', | |||
| textStyle: { | |||
| color: '#000', | |||
| }, | |||
| formatter(params) { | |||
| const toolTips = params.map(({ seriesName, value }) => { | |||
| return `${seriesName}: <strong>${value === undefined ? '-' : value}</strong>`; | |||
| }); | |||
| return toolTips.join('<br />'); | |||
| }, | |||
| }, | |||
| toolbox: { | |||
| right: 30, | |||
| feature: { | |||
| dataZoom: { | |||
| yAxisIndex: 'none', | |||
| }, | |||
| restore: {}, | |||
| }, | |||
| }, | |||
| dataZoom: [ | |||
| { | |||
| start: 0, | |||
| }, | |||
| { | |||
| type: 'inside', | |||
| }, | |||
| ], | |||
| }; | |||
| export const cpuOption = { | |||
| title: { | |||
| text: 'CPU', | |||
| }, | |||
| // y轴 | |||
| yAxis: { | |||
| name: 'CPU 占用率(%)', | |||
| }, | |||
| }; | |||
| export const memOption = { | |||
| title: { | |||
| text: '内存', | |||
| }, | |||
| // y轴 | |||
| yAxis: { | |||
| name: '内存使用量(Gi)', | |||
| min(value) { | |||
| if (value.min === Infinity) { | |||
| return 0; | |||
| } | |||
| // 内存 y轴最小值不小于 0; y轴最小值与数据最小值的距离不大于 1。内存理论上不设置内存上限 | |||
| return round(Math.max(value.min - 1, 0), 2); | |||
| }, | |||
| max(value) { | |||
| // 内存无数据时默认设置 y 轴上限为 8 | |||
| if (value.max === -Infinity) { | |||
| return 8; | |||
| } | |||
| // 内存 y轴最大值与数据最大值的距离不大于 1,且不大于数据最小值与 0 之间的距离; 理论上不设置上限 | |||
| return round(value.max + Math.min(1, value.min), 2); | |||
| }, | |||
| }, | |||
| }; | |||
| export const gpuOption = { | |||
| title: { | |||
| text: 'GPU', | |||
| }, | |||
| // y轴 | |||
| yAxis: { | |||
| name: 'GPU 占用率(%)', | |||
| }, | |||
| tooltip: { | |||
| formatter(params) { | |||
| const toolTips = params.map(({ seriesName, value }) => { | |||
| const [podName, accId] = seriesName.split(': '); | |||
| return `${podName}: <br />${accId}: <strong>${value === undefined ? '-' : value}</strong>`; | |||
| }); | |||
| return toolTips.join('<br />'); | |||
| }, | |||
| }, | |||
| }; | |||
| @@ -1,18 +1,18 @@ | |||
| /** Copyright 2020 Tianshu AI Platform. All Rights Reserved. | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| * ============================================================= | |||
| */ | |||
| <template> | |||
| <div class="prism-wrapper"> | |||
| @@ -22,7 +22,7 @@ | |||
| <script> | |||
| import 'prismjs'; | |||
| import 'prismjs/themes/prism.css'; | |||
| import 'prism-themes/themes/prism-atom-dark.css'; | |||
| import 'prismjs/components/prism-python'; | |||
| import Prism from 'vue-prism-component'; | |||
| @@ -41,13 +41,9 @@ export default { | |||
| }; | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .prism-wrapper .prism-content { | |||
| background: none; | |||
| } | |||
| code[class*="language-"], | |||
| pre[class*="language-"] { | |||
| word-wrap: break-word; | |||
| white-space: pre-wrap; | |||
| } | |||
| code[class*='language-'], | |||
| pre[class*='language-'] { | |||
| word-wrap: break-word; | |||
| white-space: pre-wrap; | |||
| } | |||
| </style> | |||