src/components/LeftNav.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/serfDiagram/vue-d3-network/components/svgRenderer.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/pages/cameraAccess/components/DataStackInfo.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/pages/cameraAccess/components/SceneRule.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/pages/cameraAccess/components/SeparateRules.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/pages/cameraAccess/components/scene/Editor.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/pages/index/App.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/pages/settings/components/BasicSetting.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/pages/settings/components/ClusterManagement.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/components/LeftNav.vue
@@ -151,6 +151,9 @@ </el-submenu> </el-menu> </el-tab-pane> <el-tab-pane label="集群" name="cluster" :style="`height:${height - 56}px;`" v-if="showCluster"> </el-tab-pane> <el-tab-pane label="数据栈" name="dataStack" @@ -289,6 +292,9 @@ showCam() { return this.appName === "Camera" || this.appName === "Search"; }, showCluster() { return this.appName === "Cluster" }, showDataStack() { return this.appName === "DataStack" || this.appName === "Search"; }, src/components/serfDiagram/vue-d3-network/components/svgRenderer.vue
@@ -205,3 +205,9 @@ } }; </script> <style> /* .net-svg{ background-color: aquamarine; border-radius: 50%; } */ </style> src/pages/cameraAccess/components/DataStackInfo.vue
@@ -140,9 +140,9 @@ <el-image v-if="row.type==2" style="width: 30x; height: 30px" :src="`/files/${row.identifier}.jpg`" :src="`/files/${row.path.substr(row.path.lastIndexOf('/')+1)}`" fit="fill" :preview-src-list="[`/files/${row.identifier}.jpg`]" :preview-src-list="[`/files/${row.path.substr(row.path.lastIndexOf('/')+1)}`]" > <div slot="error" :class="snapshotClass"></div> </el-image> @@ -421,7 +421,7 @@ this.videoUrl = "/files/" + row.identifier + ".mp4" }else if(row.type===2){ this.imgUrl = "/files/" + row.identifier + ".jpg" this.imgUrl = "/files/" + row.path.substr(row.path.lastIndexOf('/')+1) } }, // 清空输入框 @@ -445,7 +445,7 @@ this.fileList = []; }, selectDir(node) { debugger if (node.id === "") { return } @@ -492,6 +492,7 @@ findAllFileByStackId({ name: this.searchInput, stackId: this.form.id, page: this.page, size: this.size, type: 0 }).then(rsp => { if (rsp && rsp.success && rsp.data.total > 0) { this.fileList = rsp.data.dataList; this.total = rsp.data.total; // 定时刷新会清空选中状态,在这里恢复 src/pages/cameraAccess/components/SceneRule.vue
@@ -235,6 +235,7 @@ time_rule_id: "", }; this.$refs.sceneEditor.cleanRule(); this.$refs.sceneEditor.getSdkConnection(); }, handleCreate() { src/pages/cameraAccess/components/SeparateRules.vue
@@ -144,7 +144,7 @@ ></polygon-canvas> </template> <template v-else> <div style="width:100%" v-loading='getStackFileLoading'> <div style="width:100%" v-loading="getStackFileLoading"> <swiper ref="swiper" :auto-update="true" @@ -182,12 +182,20 @@ </div> </swiper-slide> </swiper> <div class="swiper-local-prev" v-show="swipercanvasData.length>1" @click="prevClick"> <div class="swiper-local-prev" v-show="swipercanvasData.length>1" @click="prevClick" > <div class="icon-btn" slot="button-prev"> <i class="iconfont iconzuo"></i> </div> </div> <div class="swiper-local-next" v-show="swipercanvasData.length>1" @click="nextClick"> <div class="swiper-local-next" v-show="swipercanvasData.length>1" @click="nextClick" > <div class="icon-btn" slot="button-next"> <i class="iconfont iconyou1"></i> </div> @@ -327,6 +335,7 @@ this.stackFilesSize = 5; this.stackId = n; if(this.stackId){ console.log('getStackFiles') this.swipercanvasData = []; this.getStackFiles() } @@ -366,6 +375,7 @@ }, getStackFiles () { this.getStackFileLoading = true; let _this = this; findAllFileByStackId({ name: '', stackId: this.stackId, page: this.stackFilesPage, size: this.stackFilesSize, type: 0 }).then(res => { if (res && res.success ) { if(res.data.dataList.length > 0){ @@ -374,12 +384,14 @@ return { name: item.name, stackId: item.stack_id, baseImg: item.type == 2 ? `/files/${item.identifier}.jpg` : item.snapshot_url, baseImg: item.type == 2 ? `/files/${item.path.substr(item.path.lastIndexOf('/') + 1)}` : item.snapshot_url, type: item.type, id: item.id, loading: false } }); console.log(_this.swipercanvasData) console.log(this.swipercanvasData) this.swiperIndex = 0; this.$refs.swiper.swiper.activeIndex = 0; @@ -454,7 +466,7 @@ this.loading = false; this.Camera.cameraId = id; await this.Camera.update(); debugger } this.$refs.timeSlider.activeTab = this.VideoManageData.TimeRules[0].id; @@ -480,7 +492,7 @@ message: "策略保存成功!" }); //刷新左侧树 debugger _this.$root.$children[0].$children[0].querySearchAsync('camera') } src/pages/cameraAccess/components/scene/Editor.vue
@@ -32,12 +32,13 @@ placeholder="选关系" @change="selConnection(sdkItem)" > <el-option value="&&" title="and/且" label="and/且"></el-option> <el-option :value="item.value" :title="item.name" :label="item.name" v-for="item in sdkConnects" :key="item.id"></el-option> <!-- <el-option value="&&" title="and/且" label="and/且"></el-option> <el-option value="||" title="or/或" label="or/或"></el-option> <el-option value="=>" title="—>/触发" label="—>/触发"></el-option> <el-option value="=>" title="—>/触发" label="—>/触发"></el-option> --> </el-select> <el-checkbox v-show="sdkItem.rule_with_pre == '=>'" v-show="sdkItem.rule_with_pre == '=>' || sdkItem.rule_with_pre == '!=>'" v-model="sdkItem.is_save_anyhow" style="margin-left:30px" >保存过程数据</el-checkbox> @@ -386,13 +387,13 @@ sdkGroup: { handler(newV, oldV) { if (newV) { debugger newV.forEach(sdk => { let rangeOne = sdk.defaultArg.find( arg => arg.operators[0].operator == 'range' ) if (rangeOne) { debugger if (rangeOne.min.trim() && rangeOne.max.trim()) { rangeOne.sdk_arg_value = rangeOne.min + '|' + rangeOne.max } else { @@ -421,13 +422,14 @@ } // ruleList: { // handler(newVal, oldVal) { // debugger // // this.editHandle(newVal) // } // } }, mounted() { this.TaskMange.findAllSdk({ installed: true }) //this.TaskMange.list1 = sdkJson.data; @@ -523,8 +525,18 @@ } }, methods: { getSdkConnection(){ console.log(this.VideoManageData.Dictionary) this.sdkConnects = this.VideoManageData.Dictionary['RULECOMPUTEBETWEEN'].map(r => { return { name: r.name, value: r.value } }); }, selConnection(sdkItem) { debugger }, addSdkItem() { @@ -533,9 +545,9 @@ itemTemp.polygonObj = JSON.parse(JSON.stringify(this.allPolygonData[0])) this.selectPolygonOption(itemTemp) this.sdkGroup.push(itemTemp) }, delConfigItem(index) { debugger // if(index != 0){ // this.sdkGroup.splice(index,1); // }else{ @@ -626,7 +638,7 @@ } }, selOptionalArg(sdkItem, optArgItem) { debugger let newSort = 0 sdkItem.optNames.forEach(name => { if (name.name == optArgItem.name) { @@ -657,7 +669,7 @@ console.log(argObj.valueOptions) }, setOptArgValueOptions(optArg) { debugger let alias = optArg.alias; console.log(this.VideoManageData.Dictionary[alias]) optArg.valueOptions = this.VideoManageData.Dictionary[alias].map(r => { @@ -668,7 +680,7 @@ }); }, validateArgVal(sdkArgItem, e) { debugger if (typeof (sdkArgItem.sdk_arg_value) == 'string' && sdkArgItem.sdk_arg_value == '') { this.$notify({ type: 'warning', @@ -688,7 +700,7 @@ let res = sdkArgItem.range.match(reg) let min = Number(res[1]), max = Number(res[2]) debugger //判断非区间类 if (sdkArgItem.sdk_arg_value && sdkArgItem.operator != 'range') { @@ -822,7 +834,7 @@ this.valideArgValue(rule) }, selectPolygonOption(rule) { debugger rule.polygon_id = rule.polygonObj.polygonId ? rule.polygonObj.polygonId : rule.polygon_id @@ -833,7 +845,7 @@ }, //选择算法 resetArgs为true是添加为false是初始化编辑 selectSDKOption(sdkItem, resetArgs) { debugger //sdkItem.sdk_id = sdkItem.sdkObj.id; if (resetArgs) { sdkItem.argDef = JSON.parse(sdkItem.sdkObj.argDef) @@ -849,12 +861,12 @@ if (arg.operators[0].operator == 'range') { //区间值的处理 debugger //this.$set(arg, 'sdk_arg_value', arg.min+','+arg.max) //this.$set(arg, 'sdk_arg_value', arg.range.substring(1,arg.range.length-1)); } } debugger if(arg.type == 'option'){ this.setOptArgValueOptions(arg) } @@ -873,14 +885,14 @@ sort: arg.sort, isSelected: false })) debugger sdkItem.initAddOptional = sdkItem.optionalArg.length > 0 ? true : false sdkItem.optArg = [] } //添加场景时,如果场景名称为空,就将选择的第一个算法名同步到场景名称 if (this.sdkGroup[0] && resetArgs) { debugger this.$emit('sdkNameChange', this.sdkGroup[0].sdkObj.sdk_name) } @@ -912,7 +924,7 @@ }, //选择算法配置 selOperator(rule) { debugger }, selectArgsOption(rule, resetArgValue) { // rule.operator_type = ""; @@ -1102,7 +1114,7 @@ this.groupRules.splice(index + 1, 0, newRule) }, editHandle(ruleTxt) { debugger // if (ruleTxt.length < 1) { // return // } @@ -1127,12 +1139,12 @@ // } }, editRule(ruleGroup) { debugger this.sdkGroup = [] this.group_id = '' ruleGroup.forEach(rule => { debugger let tempObj = {} if (rule.group_id && rule.group_id != '') { @@ -1170,7 +1182,7 @@ sdkObj = this.TaskMange.list1.find(sdk => sdk.id == rule.sdk_id) argDef = JSON.parse(sdkObj.argDef) debugger defaultArg = argDef.filter(arg => !arg.config.isOptional) optionalArg = argDef.filter(arg => arg.config.isOptional) @@ -1202,7 +1214,7 @@ } //在push之前,需要判断是否配置了这个可选项 在sdk_set配置数组里, debugger optArg.push(optItem) } else { @@ -1210,14 +1222,14 @@ if (d.sort == arg.sort) { if (arg.sdk_arg_value.indexOf('|') > 0) { debugger //区间值 d.min = arg.sdk_arg_value.split(',')[0]; d.max = arg.sdk_arg_value.split(',')[1]; d.operator = 'range' //} else if(arg.sdk_arg_value.indexOf(',') > 0){ } else if(arg.operator_type == 'option'){ debugger //多选类型的值 d.sdk_arg_value = arg.sdk_arg_value.split(','); this.setOptArgValueOptions(d) @@ -1263,7 +1275,7 @@ tempObj.isAddable = false; } //this.selectSDKOption(tempObj, false) debugger this.sdkGroup.push(tempObj) //设置算法 }) @@ -1294,7 +1306,7 @@ .catch(() => { }) }, submitRule() { debugger let groupRule = { rules: [] } let group_text = '' @@ -1315,7 +1327,7 @@ } else { //校验必填项 let undefinished = this.sdkGroup.some((sdk, index) => { debugger //没有配置算法 if (Object.keys(sdk.sdkObj).length == 0) { return sdk @@ -1324,7 +1336,7 @@ if (sdk.rule_with_pre === '' && index != 0) { return sdk } debugger //处理未展示的参数的值 sdk.defaultArg.forEach(arg => { if(!arg.config.isShow){ @@ -1354,7 +1366,7 @@ } else { //区间类参数值最小,最大值是否都设置 if (arg.operator == 'range') { debugger if (!arg.min.trim() && arg.max.trim()) { return arg } @@ -1395,9 +1407,9 @@ } //校验若算法关系为触发,则算法名不能重 let sameSdk = this.sdkGroup.some((sdk, index) => { debugger if (sdk.index != 0 && sdk.rule_with_pre == '=>') { debugger if (sdk.sdkObj.id == this.sdkGroup[index - 1].sdkObj.id) { return sdk } @@ -1462,7 +1474,7 @@ } if (arg.operator == 'range') { let valRange = ''; debugger valRange = arg.sdk_arg_value.replace(',', '-'); defaultArgDesc += `${arg.name}${arg.operators[0].name}${valRange}${arg.unit || ''}, ` } else { @@ -1472,7 +1484,7 @@ } }); debugger; ; defaultArgDesc = defaultArgDesc.substring(0, defaultArgDesc.length - 2); //defaultArgDesc = defaultArgDesc.substring(0,defaultArgDesc.length-3)+defaultArgDesc.substring(defaultArgDesc.length-1,defaultArgDesc.length); @@ -1548,11 +1560,14 @@ case '=>': rule_with_pre = ' -> ' break case '!=>': rule_with_pre = ' !-> ' break default: rule_with_pre = '' } } debugger; ; group_text += `${rule_with_pre ? "<br/>" + rule_with_pre + "<br/>" : ""} <span style="background-color:RGB(183,183,183);">${ sdk.sdkObj.sdk_name }</span> ${ @@ -1568,7 +1583,7 @@ group_text.substring(0, group_text.length - 3) + group_text.substring(group_text.length - 2, group_text.length) } debugger }) console.log(group_text) } src/pages/index/App.vue
@@ -1,7 +1,7 @@ <template> <div class v-loading="vLoading" :style="`width: ${currentWidth}px;height:${currentHeight}px`"> <div class="web-site"> <a href="http://www.aiotlink.com" target="_blank">www.aiotlink.com</a> <a href="http://www.smartai.com" target="_blank">www.smartai.com</a> </div> <licence /> <div class="right-bg" style> @@ -45,7 +45,7 @@ </el-form-item> </el-form> </div> <p class="gradient-text gradient-text-one">——— {{serverTitle || '智 能 计 算 节 点 — ReID'}} ———</p> <p class="gradient-text gradient-text-one">——— {{serverTitle || 'SmartAI — ReID'}} ———</p> </div> </div> </template> @@ -166,10 +166,11 @@ async getServerName() { let res = await getServerName() if (res && res.success) { console.log(res.data.serverName) this.serverTitle = res.data.serverName window.document.title = res.data.serverName ? res.data.serverName : '智 能 计 算 节 点' : 'SmartAI' sessionStorage.setItem('title', res.data.serverName) } }, @@ -178,6 +179,9 @@ this.getServerName() this.getScreenHeight() }, mounted(){ console.log(this.serverTitle) }, watch: {}, beforeDestroy() { window.onresize = null src/pages/settings/components/BasicSetting.vue
@@ -257,7 +257,7 @@ <el-tab-pane label="集群管理" name="third"> <cluster-management></cluster-management> </el-tab-pane> <el-tab-pane label="外部访问" name="fourth"> <!-- <el-tab-pane label="外部访问" name="fourth"> <el-menu :default-openeds="openeds" background-color="#fff" @@ -297,7 +297,7 @@ </el-submenu> </el-menu> </el-tab-pane> </el-tab-pane> --> <el-tab-pane label="权限管理" name="user"> <authority-management v-if="activeName === 'user'"></authority-management> </el-tab-pane> src/pages/settings/components/ClusterManagement.vue
@@ -7,7 +7,7 @@ <el-col :span="12"> <el-tabs v-model="activeName" id="e-alaycluster" v-if="!isHasColony"> <el-tab-pane label="创建集群" name="1" :disabled="isHasColony"> <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="80px"> <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px"> <el-form-item label="集群名称" prop="clustername"> <el-input v-model="ruleForm.clustername" placeholder="手动输入, 如“集群A”" size="small"></el-input> </el-form-item> @@ -19,10 +19,9 @@ <el-button type="text" slot="suffix" @click="generatePassword">生成密码</el-button> </el-input> </el-form-item> <!-- <el-form-item label="虚拟IP" prop="virtualip"> <ip-input :ip="ruleForm.virtualip" :on-blur="onIpBlur"></ip-input> </el-form-item>--> <el-form-item label="虚拟/外部IP" prop="virtualIp"> <ip-input :ip="ruleForm.virtualIp" :on-blur="onIpBlur"></ip-input> </el-form-item> <el-form-item style="width:500px"> <el-button type="primary" size="small" @click="submitForm('ruleForm')">保存</el-button> </el-form-item> @@ -70,7 +69,7 @@ </el-tabs> <!-- 有集群的情况 --> <div v-if="isHasColony" id="h-alaycluster"> <el-form :model="ruleForm" ref="ruleForm" label-width="80px"> <el-form :model="ruleForm" ref="ruleForm" label-width="100px"> <el-form-item label="集群名称" prop="clustername"> <el-input v-model="ruleForm.clustername" placeholder="手动输入, 如“集群A”" size="small"></el-input> </el-form-item> @@ -86,9 +85,9 @@ ></el-input> </el-form-item> <!-- <el-form-item label="虚拟IP" prop="virtualip"> <ip-input :ip="ruleForm.virtualip" :on-blur="onIpBlur"></ip-input> </el-form-item>--> <el-form-item label="虚拟IP" prop="virtualIp"> <ip-input :ip="ruleForm.virtualIp" :on-blur="onIpBlur"></ip-input> </el-form-item> <el-form-item style="width:440px;text-align: right;"> <el-button size="small" type="danger" @click="leave">退出集群</el-button> <el-button @@ -101,32 +100,18 @@ </el-form> </div> </el-col> <el-col :span="10" style="height: 100%;" v-if="members.length !== 0"> <el-col :span="12" style="height: 100%;" v-if="members.length !== 0"> <serfDiagram ref="diagram" :members="members" :agent="agentName" v-loading="loading" @selected-node="joinNode" class="nodes-svg" ></serfDiagram> </el-col> </el-row> <div class="ui-top-view"> <div class="ui-top-title">漂移IP</div> </div> <el-row> <el-col :span="12"> <el-form :model="vrIpForm" ref="vrIpForm" :rules="vrIpRules" style="padding:20px 40px;"> <el-form-item label="虚拟IP" prop="virtual_ip"> <ip-input :ip="vrIpForm.virtual_ip" :on-blur="onIpBlur"></ip-input> <el-switch v-model="vrIpForm.enable" style="margin-left:30px;"></el-switch> </el-form-item> <el-form-item style="width:500px"> <el-button type="primary" size="small" @click="saveForm('vrIpForm')">保存</el-button> </el-form-item> </el-form> </el-col> </el-row> <div class="ui-top-view"> <div class="ui-top-title">存储集群管理</div> </div> @@ -178,6 +163,7 @@ </el-tabs> </el-col> </el-row> </div> </template> @@ -205,7 +191,7 @@ import serfDiagram from "@/components/serfDiagram"; import ipInput from "@/components/subComponents/IPInput"; import {isIPv4} from "@/scripts/validate"; export default { components: { serfDiagram, @@ -229,6 +215,7 @@ } }, 1000); }; return { activeName: "1", sActiveName: "s-first", @@ -240,7 +227,7 @@ ruleForm: { clustername: "", clusterpwd: "", //virtualip: "" virtualIp: "" }, vrIpForm: { enable: true, @@ -262,15 +249,15 @@ { required: true, message: "请输入集群名称", trigger: "change" } ], clusterpwd: [{ validator: checkPwd, trigger: "change" }], // virtualip: [ // { required: true, message: "请输入虚拟IP", trigger: "change" } // ] }, vrIpRules: { virtualip: [ { required: true, message: "请输入虚拟IP", trigger: "change" } virtualIp: [ { required: true, validator: isIPv4, trigger: "change" } ] }, // vrIpRules: { // virtualIp: [ // { required: true, message: "请输入虚拟IP", trigger: "change" } // ] // }, joinRules: { clusterpwd: [ { required: true, message: "请输入集群密码", trigger: "change" }, @@ -303,12 +290,13 @@ submitForm(formName) { this.$refs[formName].validate(valid => { if (valid) { debugger //alert("submit!"); let json = { clusterId: this.clusterid, clusterName: this.ruleForm.clustername, password: this.ruleForm.clusterpwd, //virtualip: this.ruleForm.virtualip virtualIp: this.ruleForm.virtualIp }; this.createCluster(json).then(() => { this.findCluster(); @@ -319,6 +307,7 @@ } }); }, saveForm(formName) { this.$refs[formName].validate(valid => { if (valid) { @@ -338,6 +327,7 @@ } }); }, join(formName) { this.$refs[formName].validate(valid => { if (valid) { @@ -482,9 +472,11 @@ this.clusterid = res.data.clusterId; this.ruleForm.clustername = res.data.clusterName; this.ruleForm.clusterpwd = res.data.clusterpwd //this.ruleForm.virtualip = res.data.virtualip this.ruleForm.virtualIp = res.data.virtualIp let list = res.data.nodes.map(i => { debugger let obj = {}; obj.device_type = i.device_type; obj.cluster_id = i.cluster_id; obj.clusterName = res.data.clusterName; obj.create_time = i.create_time; @@ -612,9 +604,7 @@ this.ruleForm.clusterpwd = uuid.join(""); }, onIpBlur(ip) { this.vrIpForm.virtual_ip = ip; }, async getEsClusterNodes() { let rsp = await getDevInfo(); let hostIpAddr = ""; @@ -699,8 +689,22 @@ message: rsp.msg }); }) }, onIpBlur (ip) { //this.vrIpForm.virtual_ip = ip; this.ruleForm.virtualIp = ip; console.log(this.ruleForm.virtualIp) } } }, mounted () { this.findCluster(); }, created () { } }; </script> <style lang="scss"> @@ -772,4 +776,7 @@ height: 30px; line-height: 30px; } .nodes-svg{ background-color: aquamarine; } </style>