Commit bacfed30 by 潘建波

提交合并后版本

1 parent 09e2faff
Showing 57 changed files with 2512 additions and 52 deletions
No preview for this file type
{"commit":"ee93678efa5d71b73b150061b821123318d8e244","commitDate":"2020-11-27 9:51","buildDate":"2020-12-23 18:0","version":"2.0.9","info":"1.【new】添加admin重置普通用户密码功能 2.【new】添加密码登录5次锁定功能 3.【bug】修复角色管理菜单选中BUG 4.【bug】修复系统管理用户管理添加时间IE下显示错误"}
\ No newline at end of file
{"commit":"09e2faff9150d34bdd047ee5b5ed31865ef4aa7f","commitDate":"2020-12-23 18:27","buildDate":"2020-12-24 10:33","version":"2.0.9","info":"增加列表展示图片"}
\ No newline at end of file
......@@ -8,6 +8,7 @@ import resource from "./resource";
import codes from "./codes";
import ops from "./ops";
import {config} from '../../public/js/config.js'
import baseurl from './baseUrl'
let wsIP = "";
switch (process.env.NODE_ENV) {
case "development":
......@@ -31,5 +32,6 @@ export default {
resource,
codes,
ops,
wsIP
wsIP,
baseurl
};
......@@ -45,5 +45,20 @@ export default {
},
getSubTaskStatus() {
return api.get(`${baseUrl}/api/v1/devconf_fx/tasks/subtasks/status`);
},
algos: (devid,params) => {
return api.get(`${baseUrl}/api/v1/devconf_fx/devs/${devid}/algos`,params) // 设备算法
},
savealgocombs: (params) =>{
return api.post(`${baseUrl}/api/v1/devconf_fx/algo_combs`,params) // 保存模板
},
combs:(params) =>{
return api.get(`${baseUrl}/api/v1/devconf_fx/algo_combs`,params)
},
containeslist:(params) => {
return api.get(`${baseUrl}/api/v1/gpu/resource/containers`,params)
},
gpuresource:(params)=> {
return api.get(`${baseUrl}/api/v1/gpu/resource`,params)
}
};
import axios from "./axios";
let instance = axios();
export default {
......
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
@font-face {font-family: "iconfont";
src: url('iconfont.eot?t=1603174460886'); /* IE9 */
src: url('iconfont.eot?t=1603174460886#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
url('iconfont.woff?t=1603174460886') format('woff'),
url('iconfont.ttf?t=1603174460886') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('iconfont.svg?t=1603174460886#iconfont') format('svg'); /* iOS 4.1- */
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
[class^="icon-fx"], [class*="icon-fx"] {
font-family:"iconfont" !important;
/* 以下内容参照第三方图标库本身的规则 */
font-size: 18px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-fx-cipanio:before {
content: "\e63d";
}
.icon-fx-renwu:before {
content: "\e615";
}
.icon-fx-fuwuqi:before {
content: "\e61a";
}
.icon-fx-GPU:before {
content: "\e749";
}
.icon-fx-tubiaozhizuomoban-:before {
content: "\e604";
}
.icon-fx-mobanguanli:before {
content: "\e636";
}
.icon-fx-CPU:before {
content: "\e602";
}
.icon-fx-icon-test:before {
content: "\e650";
}
.icon-fx-diannao:before {
content: "\e667";
}
.icon-fx-renwu-:before {
content: "\e60c";
}
.icon-fx-moban:before {
content: "\e62d";
}
.icon-fx-shipin:before {
content: "\e618";
}
.icon-fx-liuliang:before {
content: "\e798";
}
.icon-fx-jiedian:before {
content: "\e717";
}
.icon-fx-neicun:before {
content: "\e605";
}
No preview for this file type
{
"id": "2143398",
"name": "showdev",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "1045409",
"name": "磁盘io",
"font_class": "cipanio",
"unicode": "e63d",
"unicode_decimal": 58941
},
{
"icon_id": "1240771",
"name": "任务",
"font_class": "renwu",
"unicode": "e615",
"unicode_decimal": 58901
},
{
"icon_id": "2032569",
"name": "服务器",
"font_class": "fuwuqi",
"unicode": "e61a",
"unicode_decimal": 58906
},
{
"icon_id": "2611816",
"name": "GPU",
"font_class": "GPU",
"unicode": "e749",
"unicode_decimal": 59209
},
{
"icon_id": "3816381",
"name": "视频",
"font_class": "tubiaozhizuomoban-",
"unicode": "e604",
"unicode_decimal": 58884
},
{
"icon_id": "4599422",
"name": "模板管理",
"font_class": "mobanguanli",
"unicode": "e636",
"unicode_decimal": 58934
},
{
"icon_id": "5017544",
"name": "CPU",
"font_class": "CPU",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "5183565",
"name": "告警",
"font_class": "icon-test",
"unicode": "e650",
"unicode_decimal": 58960
},
{
"icon_id": "7991662",
"name": "电脑",
"font_class": "diannao",
"unicode": "e667",
"unicode_decimal": 58983
},
{
"icon_id": "7992951",
"name": "任务",
"font_class": "renwu-",
"unicode": "e60c",
"unicode_decimal": 58892
},
{
"icon_id": "9495517",
"name": "模板",
"font_class": "moban",
"unicode": "e62d",
"unicode_decimal": 58925
},
{
"icon_id": "10352333",
"name": "视频",
"font_class": "shipin",
"unicode": "e618",
"unicode_decimal": 58904
},
{
"icon_id": "14095350",
"name": "流量",
"font_class": "liuliang",
"unicode": "e798",
"unicode_decimal": 59288
},
{
"icon_id": "14444812",
"name": "节点",
"font_class": "jiedian",
"unicode": "e717",
"unicode_decimal": 59159
},
{
"icon_id": "16136928",
"name": "内存",
"font_class": "neicun",
"unicode": "e605",
"unicode_decimal": 58885
}
]
}
No preview for this file type
No preview for this file type
No preview for this file type
......@@ -139,7 +139,9 @@
width: 100%!important;
}
/* 表格 */
.el-table {
@include font-colr(tablecolor)
}
.el-table__body tr{
@include background_color(table_tr_bg)
}
......
......@@ -24,6 +24,7 @@ $themes: (
pages_color:#303133,
input_color:#606266,
label_color:#606266,
tablecolor:#606266,
//背景
background_color: #fff,
header_background_color: #0069FF,
......@@ -72,6 +73,7 @@ $themes: (
pages_color:#3c87ed,
input_color:#fff,
label_color:#9b9b9b,
tablecolor:#fff,
//背景
setheader_bg:#0B1745,
background_color: #1b2531,
......
......@@ -10,7 +10,9 @@ import api from "./api/install";
import log from "./api/log"
import "./assets/css/public.css";
import echarts from "echarts";
import "./assets/icon/icon/iconfont.css";
import "./assets/icon/icon3/iconfont.css";
import "./assets/icon/icon4/iconfont.css";
import "../src/assets/js/vporto";
import { buildCode } from "../src/assets/js/buildcodes";
import particles from "particles.js";
......
......@@ -3,18 +3,16 @@ import VueRouter from "vue-router";
Vue.use(VueRouter);
export const constantRouterMap = [
{
export const constantRouterMap = [{
path: "/",
name: "交通态势",
component: resolve => require(["../views/Layout/index.vue"], resolve),
redirect: "/login",
children: [
{
children: [{
path: "/trficcshow",
name: "交通展示",
name: "状态展示",
component: resolve =>
require(["../views/trafficShow/index.vue"], resolve)
require(["../views/deviceshow/index.vue"], resolve)
},
{
path: "/behaviorshow",
......@@ -39,7 +37,7 @@ export const constantRouterMap = [
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: resolve => require(["../views/Show.vue"], resolve)
},{
}, {
path: "/resetpass",
name: "resetpassword",
// route level code-splitting
......@@ -48,16 +46,14 @@ export const constantRouterMap = [
component: resolve => require(["../views/Resetpassword.vue"], resolve)
},
];
export const asyncRouterMap = [
{
export const asyncRouterMap = [{
path: "/video_task",
name: "任务管理",
component: resolve => require(["../views/Layout/index.vue"], resolve),
meta: {
icon: "icon-fanxing-iconxuanzhongrenwuguanli1"
},
children: [
{
children: [{
path: "/video_task/config",
name: "场景设置",
meta: {
......@@ -84,8 +80,7 @@ export const asyncRouterMap = [
meta: {
icon: "icon-fanxing-iconxuanzhongzhinengjiansuo1"
},
children: [
{
children: [{
path: "/search/vehicle",
name: "过车检索",
meta: {
......@@ -145,20 +140,19 @@ export const asyncRouterMap = [
// component: resolve => require(["../views/search/publicFlow.vue"], resolve),
// }
]
},{
}, {
path: "/statement",
name: "数据统计",
component: resolve => require(["../views/Layout/index.vue"], resolve),
meta: {
icon: "icon-fanxing-iconxuanzhongziyuanguanli1"
},
children: [
{
children: [{
path: "/statement/base",
name: "基础统计",
component: resolve =>
require(["../views/statement/base.vue"], resolve)
},{
}, {
path: "/statement/area",
name: "区域排行",
component: resolve =>
......@@ -172,8 +166,7 @@ export const asyncRouterMap = [
meta: {
icon: "icon-fanxing-iconxuanzhongziyuanguanli1"
},
children: [
{
children: [{
path: "/resource/video",
name: "视频设备",
meta: {
......@@ -182,15 +175,15 @@ export const asyncRouterMap = [
component: resolve =>
require(["../views/resource/videoEquipment.vue"], resolve)
},
// {
// path: "/resource/equipment",
// name: "分析设备",
// meta: {
// icon: "el-icon-location"
// },
// component: resolve =>
// require(["../views/resource/analysis.vue"], resolve)
// },
// {
// path: "/resource/equipment",
// name: "分析设备",
// meta: {
// icon: "el-icon-location"
// },
// component: resolve =>
// require(["../views/resource/analysis.vue"], resolve)
// },
{
path: "/resource/store_confs",
name: "存储配置",
......@@ -236,8 +229,7 @@ export const asyncRouterMap = [
meta: {
icon: "icon-fanxing-iconxuanzhongxitongyunwei"
},
children: [
{
children: [{
path: "/ops/equipment_manage",
name: "设备管理",
meta: {
......@@ -295,6 +287,88 @@ export const asyncRouterMap = [
component: resolve => require(["../views/ops/capture_statistics.vue"], resolve)
}
]
}, {
path: "/algoawre",
name: "算法仓库",
component: resolve => require(["../views/Layout/index.vue"], resolve),
meta: {
icon: "el-icon-s-grid"
},
children: [{
path: "/algoawre/algo_manage",
name: "算法总览",
meta: {
icon: "el-icon-location"
},
component: resolve =>
require(["../views/algowre/algo_manage"], resolve)
}, {
path: "/algoawre/algo_template",
name: "算法模板",
meta: {
icon: "el-icon-location"
},
component: resolve =>
require(["../views/algowre/algo_template"], resolve)
}, {
path: "/algoawre/plug",
name: "插件管理",
meta: {
icon: "el-icon-location"
},
component: resolve =>
require(["../views/algowre/plugMnaage"], resolve)
}]
}, {
path: "/images",
name: "容器管理",
component: resolve => require(["../views/Layout/index.vue"], resolve),
meta: {
icon: "el-icon-receiving"
},
children: [{
path: "/images/image",
name: "镜像管理",
meta: {
icon: "el-icon-location"
},
component: resolve =>
require(["../views/dockerimages/image"], resolve)
},
// {
// path: "/images/imagesend",
// name: "服务发布",
// meta: {
// icon: "el-icon-location"
// },
// component: resolve =>
// require(["../views/dockerimages/imagesend"], resolve)
// },
{
path: "/images/servemanage",
name: "服务管理",
meta: {
icon: "el-icon-location"
},
component: resolve =>
require(["../views/dockerimages/serviecManage.vue"], resolve)
}, {
path: "/images/dockers",
name: "容器管理",
meta: {
icon: "el-icon-location"
},
component: resolve =>
require(["../views/dockerimages/dockers"], resolve)
}, {
path: "/images/status",
name: "容器状态",
meta: {
icon: "el-icon-location"
},
component: resolve =>
require(["../views/dockerimages/dockersstatus"], resolve)
}]
}
];
const router = new VueRouter({
......
......@@ -3,7 +3,7 @@
<el-container class="home-box">
<el-header class="headers">
<!-- <img class="logoImg" src="../../assets/img/home/logo.png" alt="" /> -->
<span class="logotitle">{{headertitle}}</span>
<span class="logotitle">AI智能运算能力平台</span>
<span
:class="{
'el-icon-s-fold': isopen,
......
......@@ -14,10 +14,7 @@
<span slot="title">态势总览</span>
</template>
<el-menu-item index="/trficcshow">
<i class="submenuicon"></i>交通展示
</el-menu-item>
<el-menu-item index="/behaviorshow">
<i class="submenuicon"></i>综治展示
<i class="submenuicon"></i>状态展示
</el-menu-item>
</el-submenu> -->
<el-submenu
......@@ -110,6 +107,10 @@ export default {
.menu-icon i{
font-size 14px;
padding-right:10px;
width auto
}
.el-submenu [class^=el-icon-] {
font-size 17px!important
}
.menu-icon .submenuicon{
display inline-block;
......
......@@ -20,7 +20,7 @@
>
</vue-particles> -->
<div class="box">
<h1 class="title">{{logintitle}}</h1>
<h1>AI智能运算能力平台</h1>
<div style="width: 60%;margin: 0 auto;">
<el-form
:model="ruleForm"
......
<template>
<div class="innnerBox">
<div class="algobox">
<el-row>
<el-col :span="8" class="itembox" >
<el-card shadow="always" class="sfbox">
<div class="sfboxcontent" @click="showsfdetail(1,'交通算法')">
<div class="left-icon">
<i class="icon-fanxing-teshucheliangzongliang"></i>
</div>
<div class="right-content">
<div class="sflx">交通算法</div>
<div class="sfzl">算法种类 {{jiaotong.length}}</div>
</div>
</div>
</el-card>
</el-col>
<el-col :span="8" class="itembox">
<el-card shadow="always" class="sfbox">
<div class="sfboxcontent" @click="showsfdetail(2,'城市综合治理算法')">
<div class="left-icon">
<i class="icon-fanxing-shanchu2"></i>
</div>
<div class="right-content">
<div class="sflx">城市综合治理算法</div>
<div class="sfzl">算法种类 {{zongzhi.length}}</div>
</div>
</div>
</el-card>
</el-col>
<el-col :span="8" class="itembox" >
<el-card shadow="always" class="sfbox">
<div class="sfboxcontent" @click="showsfdetail(3,'社区管理算法')">
<div class="left-icon">
<i class="el-icon-s-flag"></i>
</div>
<div class="right-content">
<div class="sflx">社区管理算法</div>
<div class="sfzl">算法种类 {{shequ.length}}</div>
</div>
</div>
</el-card>
</el-col>
<el-col :span="8" class="itembox">
<el-card shadow="always" class="sfbox">
<div class="sfboxcontent" @click="showsfdetail(4,'人脸识别算法')">
<div class="left-icon">
<i class="el-icon-user"></i>
</div>
<div class="right-content">
<div class="sflx">人脸识别算法</div>
<div class="sfzl">算法种类 {{renlian.length}}</div>
</div>
</div>
</el-card>
</el-col>
<el-col :span="8" class="itembox">
<el-card shadow="always" class="sfbox" >
<div class="sfboxcontent" @click="showsfdetail(5,'语义分析算法')">
<div class="left-icon">
<i class="el-icon-question"></i>
</div>
<div class="right-content">
<div class="sflx">语义分析算法</div>
<div class="sfzl">算法种类 {{yuyi.length}}</div>
</div>
</div>
</el-card>
</el-col>
<el-col :span="8" class="itembox">
<el-card shadow="always" class="sfbox">
<div class="sfboxcontent" @click="showsfdetail(6,'文本识别算法')">
<div class="left-icon">
<i class="el-icon-s-claim"></i>
</div>
<div class="right-content">
<div class="sflx">文本识别算法</div>
<div class="sfzl">算法种类 {{wenben.length}}</div>
</div>
</div>
</el-card>
</el-col>
</el-row>
</div>
<el-dialog :title="title" :visible.sync="isShow" width="80%" class="add-algomanage-box">
<div class="detailtable">
<el-table
:data="tableData"
height="500px"
style="width: 100%">
<el-table-column
prop="sfname"
label="算法名称"
>
</el-table-column>
<el-table-column
prop="sflb"
label="算法类别">
</el-table-column>
<el-table-column
prop="sfly"
label="来源">
</el-table-column>
<el-table-column
prop="yjzc"
label="硬件支持">
</el-table-column>
<el-table-column
prop="cj"
label="厂家">
</el-table-column>
<el-table-column
prop="fbsj"
label="发布时间">
</el-table-column>
<el-table-column
prop="bbh"
label="版本号">
</el-table-column>
<el-table-column
prop="info"
label="其他信息">
</el-table-column>
</el-table>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="isShow = false">取 消</el-button>
<el-button type="primary" @click="isShow = false">确 定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {zongzhi,jiaotong,shequ,renlian,yuyi,wenben} from './algotype'
export default {
data() {
return {
tableData: [],
isShow: false,
details: [],
title:'',
jiaotong:[],
zongzhi:[],
renlian:[],
shequ:[],
yuyi:[],
wenben:[]
};
},
methods: {
showsfdetail(index,title){
this.title = title;
this.isShow = true;
switch (index) {
case 1:
this.tableData = this.jiaotong
break;
case 2:
this.tableData = this.zongzhi
break;
case 3:
this.tableData = this.shequ
break;
case 4:
this.tableData = this.renlian
break;
case 5:
this.tableData = this.yuyi
break;
case 6:
this.tableData = this.wenben
break;
default:
break;
}
}
},
destroyed() {
this.zongzhi = []
},
created() {
//jiaotong
this.jiaotong = JSON.parse(JSON.stringify(jiaotong));
this.zongzhi = JSON.parse(JSON.stringify(zongzhi));
this.shequ = JSON.parse(JSON.stringify(shequ));
this.renlian = JSON.parse(JSON.stringify(renlian));
this.wenben = JSON.parse(JSON.stringify(wenben));
this.yuyi = JSON.parse(JSON.stringify(yuyi));
var plugData = JSON.parse(localStorage.getItem("plugData")?localStorage.getItem("plugData"):'[]');
plugData.map(ele=> {
if(ele.algotype == 'jiaotong'){
this.jiaotong.push(ele);
}
if(ele.algotype == 'zongzhi'){
this.zongzhi.push(ele);
}
if(ele.algotype == 'shequ'){
this.shequ.push(ele);
}
if(ele.algotype == 'renlian'){
this.renlian.push(ele);
}
if(ele.algotype == 'yuyi'){
this.yuyi.push(ele);
}
if(ele.algotype == 'wenben'){
this.wenben.push(ele);
}
})
}
};
</script>
<style lang="stylus" scoped>
.itembox {
padding: 40px 0px;
}
.algobox {
min-height: 800px;
}
.sfbox {
height: 180px;
width: 400px;
margin: 0 auto;
display: flex;
cursor pointer
}
.sfboxcontent{
display flex
}
.left-icon {
line-height: 130px;
padding-left 40px;
i {
font-size: 40px;
color #1890ff
}
}
.right-content{
font-size 20px
margin-left 70px
.sflx{
margin-top 30px
font-size 24px
}
.sfzl{
margin-top 20px
color #696c70
}
}
</style>
<template>
<div class="innnerBox">
<el-col :span="22">
<el-form ref="form" label-width="80px" inline>
<el-form-item label="模板类型">
<span class="selectBox">
<el-select v-model="algoSet" placeholder="请选择算法类型" @change="refreshAlgo" class="algo-header-left">
<el-option value="picture" label="图片模板"></el-option>
<el-option value="video" label="视频模板"></el-option>
</el-select>
</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="2">
<el-button class="" type="primary" @click="createTpl">添加</el-button>
<el-button class="mt10" @click="refreshAlgo">刷新</el-button>
</el-col>
<div class="table-box mt10" >
<el-table :data="tableData" tooltip-effect="dark" ref="multipleTable" height="700" style="width: 100%" @selection-change="handleSelectionChange" v-loading="loading">
<el-table-column type="index" width="55">
</el-table-column>
<el-table-column prop="unid" align="center" label="模板编号">
</el-table-column>
<el-table-column prop="name" align="center" label="模板编号">
</el-table-column>
<el-table-column align="center" label="模板类型">
<template slot-scope="scope">
<div>
{{filterAlgoName(scope.row.cate) ? filterAlgoName(scope.row.cate) : '无'}}
</div>
</template>
</el-table-column>
<el-table-column align="center" label="创建时间">
<template slot-scope="scope">
<div>
{{scope.row.create_dt ? scope.row.create_dt : '无'}}
</div>
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<div>
<span class="det-btn" @click="tpdetail(scope.row)">详情</span>
<span class="del-btn" @click="deltem(scope.row)">删除</span>
</div>
</template>
</el-table-column>
</el-table>
<div>
<el-pagination style="float: right;" class="mt10" @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="search.currentPage" :page-sizes="[20,100, 200, 300, 400]" :page-size="search.size"
layout="total, sizes, prev, pager, next, jumper" :total="search.total">
</el-pagination>
</div>
</div>
<div>
<addTemplate ref="addtpl"></addTemplate>
</div>
<div>
<tplDetails :tplData="tplData" ref="tpldetail"></tplDetails>
</div>
</div>
</template>
<script>
import tplDetails from "./temDetail";
import addTemplate from "./addTpl";
export default {
data() {
return {
algoSet: 'picture',
addalgoSet:'video',
tableData: [],
isShow: false,
details: [],
fileList:[],
tplData:[],
search:{
size:20,
limit:20,
offset:0,
currentPage:0,
total:0
}
}
},
components: {
tplDetails,
addTemplate,
},
methods: {
handlePreview(){},
submitUpload() {
this.$refs.upload.submit();
},
addalgomanage(){
this.isShow = true;
},
handleSelectionChange(){
this.refreshAlgo();
},
refreshAlgo() {
this.getData();
this.search.offset = 0;
this.search.currentPage = 1;
},
getData() {
this.loading = true
this.$api.device.combs(
{
offset: 0,
limit: 20,
algo_set: this.algoSet
}).then(m => {
this.tableData = m.list_data;
this.search.total = m.total_num
this.loading = false
})
},
handleSizeChange(val){
this.search.limit = val
this.getData()
},
handleCurrentChange(val){
this.search.currentPage = val;
this.search.offset = (val-1)*this.search.size
this.getData()
},
filterAlgoName: function (str) {
var zhType = '';
switch (str) {
case 'traffic':
zhType ='交通';
break;
case 'Safety':
zhType ='安防';
break;
case 'FlowCount':
zhType ='客流';
break;
default:
break;
}
return zhType;
},
createTpl: function () {
this.$refs.addtpl.tplInit(this.templateType);
},
tpdetail(data){
this.tplData = data
setTimeout(()=>{
this.$refs.tpldetail.init();
},0)
},
},
created() {
this.getData()
},
}
</script>
<style lang="stylus" scoped>
.search-item{
overflow hidden
}
.det-btn{
padding 0 10px
color #409EFF
cursor pointer
}
.del-btn{
padding 0 10px
color #F56C6C
cursor pointer
}
</style>
<template>
<div class="innnerBox">
<el-col :span="22">
<el-form ref="form" label-width="80px" inline>
<el-form-item label="模板名称">
<span class="selectBox">
<el-input v-model="algoname" placeholder="模板名称" class="algo-header-left"></el-input>
</span>
</el-form-item>
<el-form-item label="业务类型">
<span class="selectBox">
<el-select v-model="algoSet" placeholder="业务类型" class="algo-header-left">
<el-option value="jiaotong" label="交通算法"></el-option>
<el-option value="zongzhi" label="城市综合治理算法"></el-option>
<el-option value="shequ" label="社区管理算法"></el-option>
<el-option value="renlian" label="人脸识别算法"></el-option>
<el-option value="yuyi" label="语义分析算法"></el-option>
<el-option value="wenben" label="文本识别算法"></el-option>
</el-select>
</span>
</el-form-item>
</el-form>
</el-col>
<el-col :span="2">
<el-button class="" type="primary" @click="createTpl">添加</el-button>
<el-button class="mt10" @click="refreshAlgo">查询</el-button>
</el-col>
<div class="table-box mt10" >
<el-table :data="tableData" tooltip-effect="dark" ref="multipleTable" height="700" style="width: 100%" @selection-change="handleSelectionChange">
<el-table-column type="index" width="55">
</el-table-column>
<el-table-column prop="tid" align="center" label="模板编号">
</el-table-column>
<el-table-column prop="tplname" align="center" label="模板名称">
</el-table-column>
<el-table-column align="center" label="创建时间">
<template slot-scope="scope">
<div>
{{scope.row.create_dt ? scope.row.create_dt : '无'}}
</div>
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<div>
<span class="det-btn" @click="tpdetail(scope.row)">详情</span>
<span class="del-btn" @click="deltem(scope.$index, tableData)">删除</span>
</div>
</template>
</el-table-column>
</el-table>
<div>
<el-pagination style="float: right;" class="mt10" @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="search.currentPage" :page-sizes="[20,100, 200, 300, 400]" :page-size="search.size"
layout="total, sizes, prev, pager, next, jumper" :total="search.total">
</el-pagination>
</div>
</div>
<div>
<addTemplate ref="addtpl" @refresh="getData"></addTemplate>
</div>
<div>
<tplDetails :tplData="tplData" ref="tpldetail"></tplDetails>
</div>
</div>
</template>
<script>
import tplDetails from "./temDetail";
import addTemplate from "./addTpl";
export default {
data() {
return {
algoSet: '',
addalgoSet:'video',
tableData: [],
algoname:'',
isShow: false,
details: [],
fileList:[],
tplData:[],
search:{
size:20,
limit:20,
offset:0,
currentPage:0,
total:0
}
}
},
components: {
tplDetails,
addTemplate,
},
methods: {
handlePreview(){},
submitUpload() {
this.$refs.upload.submit();
},
addalgomanage(){
this.isShow = true;
},
handleSelectionChange(){
this.refreshAlgo();
},
refreshAlgo() {
this.getData();
this.search.offset = 0;
this.search.currentPage = 1;
},
getData() {
let LtableData = localStorage.getItem("tplData");
if(LtableData) {
this.tableData = JSON.parse(LtableData)
} else {
this.tableData = [];
// localStorage.setItem("tplData", JSON.stringify( this.tableData));
}
},
handleSizeChange(val){
this.search.limit = val
this.getData()
},
handleCurrentChange(val){
this.search.currentPage = val;
this.search.offset = (val-1)*this.search.size
this.getData()
},
filterAlgoName: function (str) {
var zhType = '';
switch (str) {
case 'traffic':
zhType ='交通';
break;
case 'Safety':
zhType ='安防';
break;
case 'FlowCount':
zhType ='客流';
break;
default:
break;
}
return zhType;
},
createTpl: function () {
this.$refs.addtpl.tplInit(this.templateType);
},
tpdetail(data){
setTimeout(()=>{
this.$refs.addtpl.editInit(data);
},0)
},
deltem(index, rows){
rows.splice(index, 1);
localStorage.setItem("tplData", JSON.stringify( this.tableData))
}
},
created() {
this.getData()
},
}
</script>
<style lang="stylus" scoped>
.search-item{
overflow hidden
}
.det-btn{
padding 0 10px
color #409EFF
cursor pointer
}
.del-btn{
padding 0 10px
color #F56C6C
cursor pointer
}
</style>
<template>
<div class="tpl-detail-modal">
<el-dialog title="算法模板详情" :visible.sync="dialogVisable" class="detail-modal" width="80%">
<div class="tpl-tbody">
<ul class="input-warp">
<li>
<span>模板编号:{{tplData.unid}}</span>
</li>
<li>
<span>模板名称:{{tplData.name}}</span>
</li>
</ul>
<div class="tpl-group-warp">
<h5>算法模板</h5>
<ul class="tpl-group">
<li v-for="(item, index) in algoData" :key="index">
<div class="algo-item scrollbar">
<span v-for="(algoItem, algoIndex) in item.list" :key="algoIndex" :title="algoItem.algid">{{ algoItem.algid }}</span>
</div>
<p>
<i>{{ item.name }}</i>
<b></b>
</p>
</li>
</ul>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="hideModal">关 闭</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
algoData: [{
name: '公约束',
list: []
},{
name: '目标检测',
list: []
},{
name: '目标跟踪',
list: []
},{
name: '业务逻辑',
list: []
},{
name: '图像增强',
list: []
},{
name: '目标属性',
list: []
}],
dialogVisable: false
}
},
props: ['tplData'],
methods: {
init: function () {
debugger
this.algoData.forEach((element) => {
element.list = [];
});
// console.log('父组件传的模板详情数据:', this.tplData[0])
let groups = [];
console.log(this.tplData)
if(this.tplData.algo_set === "picture") {
groups = this.tplData.algo_groups;
groups.length = 3;
this.algoData = [{
name: '公约束',
list: []
},{
name: '目标检测',
list: []
},{
name: '目标跟踪',
list: []
}]
} else {
groups = this.tplData.algo_groups;
this.algoData = [{
name: '公约束',
list: []
},{
name: '目标检测',
list: []
},{
name: '目标跟踪',
list: []
},{
name: '业务逻辑',
list: []
},{
name: '图像增强',
list: []
},{
name: '目标属性',
list: []
}]
}
this.buildData(groups);
this.dialogVisable = true;
},
buildData: function (data) {
for(var i = 0; i < data.length; i++) {
if(data[i].algos.length > 0) {
for(var j = 0; j < data[i].algos.length; j++) {
var key = parseInt(data[i].algos[j].comb_pos - 1);
var objVal = data[i].algos[j];
this.algoData[key].list.push(objVal);
}
} else {
this.algoData[i].list = [];
}
}
},
hideModal: function () {
this.dialogVisable = false;
}
}
}
</script>
<style lang="scss" scoped>
.detail-modal {
width: 100%;
}
.input-warp {
overflow: hidden;
margin-bottom: 0;
}
.input-warp li {
float: left;
width: 40%;
height: 36px;
line-height: 36px;
padding-right: 2%;
overflow: hidden;
}
.input-warp li span {
float: left;
padding-right: 2%;
overflow: hidden;
}
.input-warp li input {
float: left;
padding-right: 10px;
}
.tpl-group-warp h5 {
text-align: left;
}
.tpl-group {
overflow: hidden;
padding-left: 64px;
margin-bottom: 0;
}
.tpl-group li {
float: left;
width: 14%;
margin-right: 2%;
}
.tpl-group li:last-child {
margin-right: 0px;
}
.algo-item {
background: rgba(23,39,68,.6);
border-radius: 5px;
padding: 10px 20px 0;
height: 260px;
box-shadow: 3px 0 10px rgba(0, 0, 0, .5);
overflow: hidden;
}
.algo-item:hover {
overflow-x: hidden;
overflow-y: auto;
}
.algo-item span {
display: block;
width: 100%;
background: linear-gradient(to bottom, #1043d1, #2c5986);
border: 2px solid #2e4e81;
font-size: 16px;
padding-top: 6px;
padding-bottom: 6px;
border-radius: 3px;
cursor: pointer;
margin-bottom: 10%;
text-align: center;
overflow: hidden;
}
.tpl-group li > p {
margin-bottom: 0;
font-size: 16px;
display: block;
height: 36px;
line-height: 36px;
position: relative;
text-align: center;
}
.tpl-group li i{
list-style: none;
font-style: inherit;
font-size: 14px;
}
.tpl-group li:not(:last-child) > p b {
border-left: 2px solid transparent;
border-bottom: 2px solid transparent;
border-right: 2px solid #fff;
border-top: 2px solid #fff;
height: 6px;
width: 6px;
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
cursor: pointer;
position: absolute;
top: 14px;
right: -14px;
}
button {
width: 10%;
}
</style>
<template>
<div class="innnerBox">
<div class="contentbox">
<el-col :span="12" v-for="(item,index) in containeslist" :key="index">
<el-col :span="4" hidden>
<div class="sylist">CPU</div>
<div class="sylist">内存</div>
<div class="sylist">GPU</div>
<!-- <div class="sylist">4</div> -->
</el-col>
<el-col :span="24">
<div :id="item.container" class="chartbox"></div>
</el-col>
</el-col>
</div>
</div>
</template>
<script>
export default {
data() {
return {
containeslist: [],
stautsclock:null,
};
},
methods: {
getcontainer() {
this.$api .device.containeslist().then(res => {
this.containeslist = res;
res.map(ele => {
this.gpuresource(ele);
});
this.stautsclock = setInterval(() => {
res.map(ele => {
this.gpuresource(ele);
});
}, 10000)
});
},
gpuresource(val){
let start= this.$moment().subtract(1, "h").format("YYYY-MM-DD HH:mm:ss"); //当前时间前一天
let end= this.$moment().format("YYYY-MM-DD HH:mm:ss");
let params ={
startDt:start,
endDt:end,
container:val.container
}
this.$api.device.gpuresource(params).then(res => {
this.setChart(res,val);
console.log("数据源",res)
});
},
refreshData(val) {
let start= this.$moment().subtract(6, "s").format("YYYY-MM-DD HH:mm:ss"); //当前时间前一天
let end= this.$moment().format("YYYY-MM-DD HH:mm:ss");
let params ={
startDt:start,
endDt:end,
container:val.container
}
this.$api.device.gpuresource(params).then(res => {
if(res.length> 0) {
this.gpuresource(val);
}
});
},
setChart(val,elid) {
var myChart = this.$echarts.init(
document.getElementById(elid.container)
);
var mdata = [];
var cdata = [];
var gdata = [];
var DAY = 3600 * 24 * 1000;
var HOUR = 3600 * 1000;
for (var i = 0; i < val.length; i++) {
mdata.push([new Date( val[i].recordTime.replace('-', '/')).getTime(),parseInt((val[i].memoryUsed/val[i].memoryLimit*100))]);
cdata.push([new Date( val[i].recordTime.replace('-', '/')).getTime(), val[i].cpuPercent]);
gdata.push([new Date( val[i].recordTime.replace('-', '/')).getTime(), parseInt((val[i].resourceMemoryUsed/val[i].resourceMemoryTotal*100))]);
}
console.log("测试数据源",mdata)
//把new Date出来的时间格式转换为data123中的日期格式
var option = {
legend: {
top: 10,
left: 'center',
data: ['内存','CPU','GPU']
},
title: {
left: '12',
text: elid.container,
textStyle:{
//文字颜色
color:'#699',
//字体大小
     fontSize:14
}
},
grid:{
x:'4.6%',
y:'9%',
x2:'1%',
y2:'30%',
},
dataZoom: [
{
type: "slider"
},
{
type: "inside"
}
],
xAxis: {
type: "time",
// interval: DAY / 2,
axisLabel: {
// formatter: (value)=> {
// if (value % DAY === 0) {
// var month = this.$echarts.format.formatTime("M月", value);
// var dayOfM = this.$echarts.format.formatTime("d日", value);
// return "{strong|" + dayOfM + "}\n{lite|" + month + "}";
// } else {
// var formatted = this.$echarts.format.formatTime("h点", value);
// return formatted;
// }
// },
rich: {
strong: {
color: "#2784e8",
fontSize: 12,
fontWeight: 700
},
lite: {
color: "#999",
lineHeight: 25,
fontSize: 10
}
}
}
},
yAxis: {},
tooltip: {
trigger: "axis"
},
series: [
{
name:'内存',
type: "line",
showSymbol: false,
data: mdata
},
{
name:'CPU',
type: "line",
showSymbol: false,
data: cdata
},{
name:'GPU',
type: "line",
showSymbol: false,
data: gdata
}
]
};
myChart.setOption(option);
}
},
created() {
this.getcontainer();
},
beforeDestroy(){
clearInterval(this.stautsclock);
this.stautsclock = null;
},
mounted() {}
};
</script>
<style lang="stylus" scoped>
.contentbox {
overflow: hidden;
}
.sylist{
height 60px
margin-top 15px
width 90%
margin 15px auto 0;
border 1px solid #ccc
border-radius 2px
}
.chartbox {
height: 330px;
overflow hidden
}
</style>
<template>
<div class="setting-box">
<div class="search-box">
<!-- <el-col :span="4">
<el-col :span="4">
<el-input v-model="searchval"></el-input>
</el-col>
<el-col :span="2" class="ml10">
<el-button type="primary">查询</el-button>
</el-col> -->
</el-col>
<el-col :span="8" style="float:right" hidden>
<span class="resource-box">
<span class="title">可用分析资源:</span>
......@@ -285,7 +285,6 @@ export default {
text.dy(-6);
nested.click(function() {
let data = this.data("sdv");
_this.curDevData = data;
_this.getSubDev(data);
});
},
......
......@@ -432,6 +432,8 @@ export default {
type: "success",
message: "删除成功!"
});
debugger
rows.splice(index, 1);
let data = {
org_type: "address",
......@@ -533,6 +535,7 @@ export default {
}
},
editVideo(index, row) {
console.log("视频信息",row)
this.vchan_duid = row.vchan_duid;
this.videoEditParam.vchan_name = row.vchan_name;
this.videoEditParam.video_url = row.video_url;
......
......@@ -64,6 +64,11 @@
<span>违法类型:</span>
<span>{{ item.illegalType }}</span>
</li>
<li v-if="item.illegalType" :title="item.illegalType">
<span>特殊车辆:</span>
<span>{{ item.special_text }}</span>
</li>
<!-- 非机动车 -->
<li
......
......@@ -221,6 +221,10 @@
<span>违法类型:</span>
<span>{{ curPicData.illegalType }}</span>
</li>
<li v-if="curPicData.illegalType" :title="curPicData.illegalType">
<span>特殊车辆:</span>
<span>{{ curPicData.special_text }}</span>
</li>
</ul>
</el-col>
<el-col :span="24" v-if="curPicData.event_cate === 'behavior'">
......
......@@ -52,7 +52,7 @@
:data-subtask="subTask.subtask_id"
:id="subTask.vchan.vdev_unid + ',' + subTask.vchan.vchan_refid"
>
<i class="el-icon-fanxin-yuandian icon"></i>
<!-- <i class="el-icon-fanxin-yuandian icon"></i> -->
{{ subTask.subtask_name ? subTask.subtask_name : subTask.name }}
</li>
</ol>
......@@ -366,6 +366,7 @@ export default {
.subtaskActive {
position: relative;
color: #333;
padding-right:10px;
}
.subtaskActive::before {
......
......@@ -29,6 +29,7 @@
</el-form-item>
<el-form-item
label="算法类型"
hidden
prop="task_algo_type"
class="form-item"
>
......@@ -46,6 +47,21 @@
<el-option value="5" label="交通行人"></el-option>
</el-select>
</el-form-item>
<el-form-item
label="服务类型"
prop="task_algo_type"
class="form-item"
>
<el-select
v-model="formData.tem"
placeholder="请选择"
:popper-append-to-body="false"
:disabled="pedittype == 'edit'"
>
<el-option v-for="(item, index) in serveTableData" :key="index" :value="item.servename" :label="item.servename"></el-option>
</el-select>
</el-form-item>
<el-form-item label="场景占用" class="form-item" prop="resource_use">
<el-select
v-model="formData.resource_use"
......@@ -153,12 +169,13 @@ export default {
};
return {
setvisible: false,
serveTableData:[],
timer: ["00:00:00", "23:59:59"],
backpdata: "",
headertitle:"添加任务",
formData: {
task_name: "",
task_algo_type: "",
task_algo_type: 0,
is_send: 0,
store_conf: {
unid: ""
......@@ -231,7 +248,7 @@ export default {
this.timer = ["00:00:00", "23:59:59"];
this.formData = {
task_name: "",
task_algo_type: "",
task_algo_type: "0",
store_conf: {
unid: ""
},
......@@ -385,10 +402,15 @@ export default {
this.$api.device.getStore(params).then(res => {
this.store_confs = res.list_data;
});
}
},
getServeData(){
var tData = localStorage.getItem("serveData")?localStorage.getItem("serveData"):"[]";
this.serveTableData = JSON.parse(tData)
},
},
created() {
this.getStore();
this.getServeData();
}
};
</script>
......
......@@ -326,7 +326,7 @@ export default {
data[i].vchan.enableStatus = data[i].enableStatus
? data[i].enableStatus
: "";
data[i].vchan.info = data[i].info ? data[i].info : "";
data[i].vchan.info = data[i].device_id ? data[i].device_id : "";
}
ary.push(data[i].vchan);
}
......@@ -462,6 +462,7 @@ export default {
editVideo(index, row) {
this.setsSrollTop();
this.$refs.editvideo.showModal(row);
console.log(row);
},
editTask(type, index, row) {
if (type === "add") {
......@@ -483,6 +484,9 @@ export default {
});
},
setTaskStatus(data, type) {
if(type == 'start') {
localStorage.setItem("substatus",data.task_id)
}
this.setsSrollTop();
// if (data.status == "NotInTimeOfDay") {
// return;
......@@ -521,7 +525,8 @@ export default {
},
setsSrollTop() {
this.curscrollTop = this.$refs.table.$el.children[2].scrollTop;
}
},
},
mounted() {
this.getTaskList();
......
......@@ -33,9 +33,9 @@ module.exports = {
},
devServer: {
proxy: {
"/api": {
target: "http://192.168.9.62:20080", // 要访问的接口域名
ws: true, // 是否启用websockets
"/api/dashboards": {
target: "http://192.168.9.133:5000", // 要访问的接口域名
// ws: true, // 是否启用websockets
changeOrigin: true, //开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
pathRewrite: {
"^/api": "" //这里理解成用'/api'代替target里面的地址,比如我要调用'http://40.00.100.100:3002/user/add',直接写'/api/user/add'即可
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!