From b4902c47c0ffd80276ffd9cb0ea6bf6908b0420c Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@iotlink.com> Date: 星期四, 30 七月 2020 11:15:40 +0800 Subject: [PATCH] 添加数据推送, 日志管理 --- src/pages/datapush/index/RightEvent.vue | 862 ++++++++++++++++++++++++++ src/pages/datapush/index/main.ts | 25 src/pages/vindicate/index/App.vue | 159 ++-- src/pages/settings/components/BasicSetting.vue | 230 ------ src/pages/datapush/index/App.vue | 113 +++ src/pages/desktop/index/App.vue | 8 src/pages/desktop/index/components/Tools.vue | 109 +- src/pages/desktop/index/mock/userData.json | 2 src/pages/datapush/index/LeftList.vue | 225 ++++++ src/pages/syslog/index/App.vue | 190 +++++ src/pages/syslog/index/main.ts | 11 11 files changed, 1,574 insertions(+), 360 deletions(-) diff --git a/src/pages/datapush/index/App.vue b/src/pages/datapush/index/App.vue new file mode 100644 index 0000000..c217fe8 --- /dev/null +++ b/src/pages/datapush/index/App.vue @@ -0,0 +1,113 @@ +<template> + <div class="flex-box bg-w p10"> + <div class="ev-left-list"> + <leftList + ref="baseSync" + listWidth="350px" + title="鍚屾搴�" + type="1" + :isSelected="isSelected" + :activeId="selectedId" + @getEvents="getEventList" + @del-list="delList" + @add="changeToAdd" + @enabled="eventSwitch" + ></leftList> + </div> + + <div v-show="isShowRight"> + <rightEvent + ref="right" + :eventObject="eventObject" + @onCancle="onCancle" + @updateList="updateList" + ></rightEvent> + </div> + </div> +</template> +<script> +import leftList from "./LeftList"; +import rightEvent from "./RightEvent"; +import { getById } from "@/api/event"; + +export default { + name: "eventPush", + components: { + leftList, + rightEvent + }, + props: {}, + data() { + return { + // 鏄惁灞曠ず鍙充晶 + isShowRight: false, + // 鏄惁閫変腑 + isSelected: false, + // 褰撳墠閫変腑鐨勪簨浠� + eventObject: {}, + selectedId: "" + }; + }, + methods: { + eventSwitch(e) { + if (this.eventObject.id) { + if (e.id === this.eventObject.id) { + this.eventObject.enable = e.enable + } + } + // console.log(e) + }, + /** + * 娣诲姞浜嬩欢鎺ㄩ�� + */ + changeToAdd() { + this.$refs.right.reAdd(); + this.isShowRight = true; + }, + // 鑾峰彇浜嬩欢鍒楄〃 + async getEventList(data) { + // console.log(data, "褰撳墠閫変腑鐨�"); + let json = { + id: data.id + }; + let res = await getById(json); + if (res && res.success) { + this.eventObject = res.data; + this.isShowRight = true; + } + }, + // 淇濆瓨鎴愬姛鍚庣殑鍥炶皟 + updateList(id) { + this.$refs.baseSync.findAll(); + this.getEventList({ id: id }); + this.selectedId = id; + }, + delList() { + this.$refs.baseSync.findAll(); + this.isShowRight = false; + }, + onCancle() { + this.isShowRight = false; + } + } +}; +</script> + +<style src="../../../assets/css/common.scss" lang="scss"></style> +<style src="../../../assets/css/overried.scss" lang="scss"></style> +<style lang="scss"> +.ev-left-list { + border-right: 1px solid #e0e0e0; +} + +.ant-divider, +.ant-divider-vertical { + margin: 0 8px; + display: inline-block; + height: 100%; + width: 1px; + vertical-align: middle; + position: relative; + top: -0.06em; +} +</style> diff --git a/src/pages/datapush/index/LeftList.vue b/src/pages/datapush/index/LeftList.vue new file mode 100644 index 0000000..4feb9e5 --- /dev/null +++ b/src/pages/datapush/index/LeftList.vue @@ -0,0 +1,225 @@ +<template> + <div class="out-div"> + <div class="flex-center left-list"> + <el-input placeholder="璇疯緭鍏ュ唴瀹�" v-model="eventName" size="mini" style="width: 280px"> + <i slot="suffix" class="el-input__icon el-icon-search"></i> + </el-input> + + <div class="icon-btn" @click="add" style="margin-left:10px"> + <i class="el-icon-circle-plus-outline"></i> + <span> 鏂板</span> + </div> + </div> + <div class="max-height" style="overflow-y:auto;overflow-x:hidden"> + <el-row + class="cursor-pointer" + v-for="(item, index) in eventList" + :key="item.id" + @click.native="clickCategory(index, item)" + :class="{activeRow:categoryIndex==index}" + > + <div class="event-name"> + <b>{{item.name}}</b> + <p style="margin-top:8px; color:#9e9e9e">{{item.time_start}} ~ {{item.time_end}}</p> + </div> + + <div class="event-btn"> + <el-switch + v-model="item.enable" + @change="enabled(item)" + :inactive-value="false" + :active-value="true" + style="margin-top:-5px" + ></el-switch> + <span + class="iconfont iconshanchu iconStyle1" + style="color:#E74C3C" + @click.stop="deleteBase(item)" + ></span> + </div> + </el-row> + </div> + </div> +</template> +<script> +import { findAll, changeStatus, deleteByid } from "@/api/event"; +export default { + name: "leftList", + + props: { + listWidth: { + default: "350px", + type: String + }, + title: { + default: "", + type: String + }, + isSelected: { + default: false, + type: Boolean + }, + type: { + default: "", + type: String + }, + activeId: { + default: "", + type: String + } + }, + data() { + return { + activeNames: ["1"], + categoryIndex: -1, + eventList: [], + // 褰撳墠鐐瑰嚮鐨勪簨浠跺璞� + clickBase: {}, + // 浜嬩欢鍚嶇О + eventName: "" + }; + }, + mounted() { + this.findAll(); + }, + methods: { + async enabled(item) { + let json = { + id: item.id, + enable: item.enable + }; + let res = await changeStatus(json); + if (res && res.success) { + // console.log(res, "鏇存柊鐘舵��"); + this.$emit("enabled", item) + } + // this.$emit("getEvents", item); + }, + async searchSyncTables() { + // let res = await selectSyncTables() + // this.data = res.data.datalist + }, + async searchLocalTables() { + // let res = await selectLocalTables() + // this.data = res.data.datalist + }, + add() { + this.$emit("add"); + this.categoryIndex = -1; + }, + clickCategory(index, item) { + // 杩欓噷鎴戜滑浼犲叆涓�涓綋鍓嶅�� + this.categoryIndex = index; + // 璋冪敤鍒囨崲鍙充晶闈㈡澘鐨勫嚱鏁板苟涓斿垏鎹㈢埗缁勪欢涓璱sSelected鐨勫�艰鍙︿竴涓粍浠舵竻闄よ閫変腑鐘舵�� + this.clickBase = item; + this.$emit("getEvents", item); + }, + edit(item) { + this.$emit("changeShow", item, this.type); + }, + async deleteBase(data) { + // console.log(data, "瑕佸垹闄ょ殑浜嬩欢鎺ㄩ��"); + this.$confirm("纭畾瑕佸垹闄よ鏉℃帹閫佷换鍔″悧锛�", { + center: true, + cancelButtonClass: "comfirm-class-cancle", + confirmButtonClass: "comfirm-class-sure" + }).then(() => { + let json = { + type: "formData", + id: data.id + }; + deleteByid(json).then(res => { + if (res && res.success) { + this.$emit("del-list"); + this.$notify({ + type: "success", + message: "鍒犻櫎鎴愬姛" + }) + } + }); + }) + }, + // 鏌ヨ浜嬩欢鍒楄〃 + async findAll() { + let json = { + name: this.eventName + }; + let res = await findAll(json); + if (res && res.success) { + // console.log(res, "鏌ヨ鎵�鏈変簨浠跺垪琛�"); + if (this.activeId !== "") { + res.data.forEach((element, index) => { + if (element.id === this.activeId) { + this.categoryIndex = index; + } + }); + } + this.eventList = res.data; + + + } + } + } +}; +</script> +<style lang="scss" scoped> +.flex-center { + justify-content: left; +} +.iconStyle1 { + font-size: 18px; + margin-left: 15px; + cursor: pointer; +} +.activeRow { + background: #f8f8f8; +} +.cursor-pointer { + cursor: pointer; + height: 75px; +} +.max-height { + position: absolute; + left: 0px; + width: 355px; + height: 100%; + margin-top: 20px; + border-top: 1px solid #e0e0e0; + border-bottom: 1px solid #e0e0e0; +} +.out-div { + width: 350px; + height: 58.9em; + text-align: left; + padding-top: 20px; + .left-list { + position: absolute; + left: 15px; + top: 10px; + } +} +.event-name { + padding: 17px; + font-size: 14px; +} +.event-btn { + position: absolute; + left: 79%; + top: 18%; +} +.icon-btn { + i { + font-size: 18px; + position: relative; + top: 2px; + } + span { + font-size: 14px; + } + display: inline; + color: #3d68e1; + line-height: 38px; + margin-left: 10px; + cursor: pointer; +} +</style> diff --git a/src/pages/datapush/index/RightEvent.vue b/src/pages/datapush/index/RightEvent.vue new file mode 100644 index 0000000..cc4c6f0 --- /dev/null +++ b/src/pages/datapush/index/RightEvent.vue @@ -0,0 +1,862 @@ +<template> + <div class="s-event-push-right"> + <div class="s-right-config"> + <el-form> + <el-form-item label="鍚嶇О"> + <el-input v-model="eventData.name" placeholder="璇疯緭鍏ュ悕绉�" size="small" style="width:400px"></el-input> + </el-form-item> + + <el-form-item label="鏃堕棿"> + <el-date-picker + v-model="eventData.time" + format="yyyy-MM-dd HH:mm:ss" + value-format="yyyy-MM-dd HH:mm:ss" + type="datetimerange" + range-separator="鑷�" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡" + size="small" + ></el-date-picker> + </el-form-item> + + <span style="line-height: 38px;">鎺ㄩ�佹湇鍔″櫒</span> + <div class="icon-btn" v-if="ips.length < 1" @click="addUrl('ip')"> + <i class="el-icon-circle-plus-outline"></i> + <span> 娣诲姞ip</span> + </div> + <div class="icon-btn" v-if="domains.length < 1" @click="addUrl('domain')"> + <i class="el-icon-circle-plus-outline"></i> + <span> 娣诲姞鍩熷悕</span> + </div> + <div v-for="(item,index) in urls" :key="item.hash" class="flex-box server-url"> + <div> + <el-checkbox v-model="item.enable"></el-checkbox> + <span class="ml20">{{item.type =='ip' ? 'IP ' : '鍩熷悕 '}}</span> + <!-- <el-input v-model="item.url" style="width:400px;margin-left:34px;" size="small"></el-input> --> + <ip-input + v-if="item.type == 'ip'" + :id="item.url" + :ip="item.ip" + :item="item" + :on-item-change="onIpBlur" + style="width: 255px" + ></ip-input> + <el-input + v-else + v-model="item.domain" + style="width:256px;margin-left:0px;" + size="small" + ></el-input> + <span class="ml10">绔彛</span> + <el-input v-model="item.port" style="width:100px;margin-left:5px;" size="small"></el-input> + </div> + <div class="server-add"> + <i + class="el-icon-remove-outline" + @click="delUrl(index)" + style="color:red;margin-right:10px" + /> + <i class="el-icon-circle-plus-outline" @click="addUrl(item.type)"></i> + </div> + </div> + + <el-form-item label="鑱斿姩鏂瑰紡" style="margin-top: 20px;width:100"> + <el-select v-model="eventData.lineWay" placeholder="璇烽�夋嫨" size="small"> + <el-option + v-for="item in eventData.lineOptions" + :key="item.value" + :label="item.label" + :value="item.value" + ></el-option> + </el-select> + </el-form-item> + + <el-form-item label="鏍囩"> + <el-radio v-model="eventData.radioValue" label="1">婊¤冻鍏ㄩ儴</el-radio> + <el-radio v-model="eventData.radioValue" label="2">婊¤冻浠绘剰涓�涓�</el-radio> + </el-form-item> + </el-form> + </div> + <div class="s-right-mid"></div> + <div class="s-right-rule"> + <div class="rule-title"> + <b style="margin-right:20px">浠诲姟閰嶇疆</b> + <div class="icon-btn" v-if="dataList.length === 0" @click="createSet"> + <i class="el-icon-circle-plus-outline"></i> + <span> 鏂板</span> + </div> + <div class="icon-btn" v-if="dataList.length > 0" @click="cleanSet"> + <i class="el-icon-remove-outline"></i> + <span> 娓呯┖</span> + </div> + </div> + + <div v-for="(temp,index) in dataList" :key="index" style="margin-top:10px"> + <el-row :gutter="20"> + <el-col :span="4"> + <el-select + v-model="temp.polygon_id" + placeholder="璇烽�夋嫨" + @change="selectChange($event,'options1',temp)" + size="small" + > + <el-option + v-for="item in temp.options1" + :key="item.id" + :label="item.name" + :value="item.value" + ></el-option> + </el-select> + </el-col> + <el-col :span="4"> + <el-select + v-model="temp.sdk_id" + placeholder="璇烽�夋嫨" + @change="selectChange($event,'options2',temp)" + size="small" + > + <el-option + v-for="item in temp.options2" + :key="item.id" + :label="item.name" + :value="item.value" + ></el-option> + </el-select> + </el-col> + <el-col :span="4"> + <el-select + v-model="temp.sdk_arg_alias" + placeholder="璇烽�夋嫨" + @change="selectChange($event,'options3',temp)" + size="small" + > + <el-option + v-for="item in temp.options3" + :key="item.id" + :label="item.name" + :value="item.value" + ></el-option> + </el-select> + </el-col> + <el-col :span="4"> + <el-select + v-model="temp.operator" + placeholder="璇烽�夋嫨" + @change="selectChange($event,'options4',temp)" + size="small" + > + <el-option + v-for="item in temp.options4" + :key="item.id" + :label="item.name" + :value="item.value" + ></el-option> + </el-select> + </el-col> + <el-col :span="4"> + <div v-if="temp.operator === 'custom'"> + <el-input v-model="temp.operator_type" placeholder="璇疯緭鍏ュ唴瀹�" size="small"></el-input> + </div> + <div v-if="temp.operator !== 'custom'"> + <el-select + v-model="temp.operator_type" + placeholder="璇烽�夋嫨" + @change="selectChange($event,'options5',temp)" + size="small" + > + <el-option + v-for="item in temp.options5" + :key="item.id" + :label="item.name" + :disabled="item.disabled" + :value="item.value" + ></el-option> + </el-select> + </div> + </el-col> + <el-col :span="4"> + <div class="rule-edit-btn"> + <i + v-show="dataList.length > 1" + class="el-icon-remove-outline" + @click="delRule(index)" + style="color:red;margin-right:10px" + /> + <i + v-show="index === dataList.length -1" + class="el-icon-circle-plus-outline" + @click="addRule()" + style="color:#3D68E1" + ></i> + </div> + </el-col> + </el-row> + <el-row></el-row> + </div> + + <div class="rule-title2"> + <b>瑙勫垯</b> + <div class="div-border">{{eventData.eventTxt}}</div> + </div> + <div class="save-btn"> + <el-button type="info" size="small" @click="onCancle">鍙栨秷</el-button> + <el-button type="primary" @click="eventPushsSave" size="small">淇濆瓨</el-button> + </div> + </div> + </div> +</template> +<script> +import ipInput from "@/components/subComponents/IPInput"; + +import { eventPushsSave, findByEventTopic } from "@/api/event"; +import { findDictionaryByType, findDictionaryByID } from "@/api/dictionary"; +export default { + name: "rightEvent", + components: { ipInput }, + filters: { + ipSplit(url) { + return url.split(":")[0] + }, + portSplit(url) { + return url.split(":")[1] + } + }, + props: { + eventObject: { + type: Object, + default: () => { + return {}; + } + } + }, + computed: { + urls() { + return this.eventData.urls + }, + ips() { + return this.eventData.urls.filter(item => { + return item.type === 'ip'; + }) + }, + domains() { + return this.eventData.urls.filter(item => { + return item.type === 'domain'; + }) + } + }, + watch: { + eventObject: { + handler(newVal, oldVal) { + this.eventData.enable = this.eventObject.enable; + if (newVal !== oldVal) { + // console.log(newVal, "褰撳墠閫変腑鐨勪簨浠秝atch"); + if (this.eventData.id !== newVal.id) { + this.dataList = []; + // console.log(this.eventObject.enable) + + this.eventData.id = newVal.id; + this.eventData.name = newVal.name; + this.eventData.time = [ + this.eventObject.time_start, + this.eventObject.time_end + ]; + this.eventData.serverIp = newVal.ip_ports; + this.eventData.urls = newVal.urls; + this.eventData.lineWay = newVal.link_type; + this.eventData.eventTxt = newVal.rule_text; + this.eventData.radioValue = newVal.is_satisfy_all ? "1" : "2"; + + // urls鍙嶈В鏋� + let ipSum = 0, domainSum = 0; + if (!this.eventData.urls) { + this.$set(this.eventData, "urls", []) + } + for (let i = 0; i < this.eventData.urls.length; i++) { + let item = this.eventData.urls[i] + item.hash = Math.random().toString(36).substr(2); + // 瑙f瀽鎴恑p鎴栧煙鍚� + let addr = item.url.split(":")[0] + if (this.isValidIP(addr)) { + item.ip = addr + this.$set(item, "domain", "") + this.$set(item, "type", "ip") + ipSum++ + } else { + this.$set(item, "domain", addr) + this.$set(item, "type", "domain") + item.ip = "" + domainSum++ + } + // item.port = + this.$set(item, "port", item.url.split(":")[1]) + } + this.eventData.urls.sort(function (a, b) { + var val1 = b.type; + var val2 = a.type; + if (val1 < val2) { + return -1; + } else if (val1 > val2) { + return 1; + } else { + return 0; + } + }) + if (newVal.rules) { + newVal.rules.map((i, index) => { + this.dataList.push(JSON.parse(JSON.stringify(this.baseDateL))); + this.dataList[index].id = i.id; + this.dataList[index].event_push_id = i.event_push_id; + this.dataList[index].polygon_id = i.topic_type; + this.selectChange(i.topic_type, "options1", this.dataList[index]); + this.dataList[index].sdk_id = i.topic_arg; + this.selectChange(i.topic_arg, "options2", this.dataList[index]); + this.dataList[index].operator_type = i.rule_value; + this.dataList[index].sdk_arg_alias = i.operator; + this.dataList[index].operator = i.operator_type; + }); + } + } + } + }, + deep: true + } + }, + data() { + return { + eventData: { + enable: false, + id: "", + name: "", + time: [ + this.$moment().format("YYYY-MM-DD 00:00:00"), + this.$moment().format("YYYY-MM-DD HH:mm:ss") + ], + serverIp: [ + { + enable: true, + server_ip: "", + port: 0 + } + ], + urls: [ + { + enable: true, + url: "http://" + } + ], + lineWay: "", + lineOptions: [ + { + value: "001", + label: "IP骞挎挱" + } + ], + radioValue: "1", + eventTxt: "" + }, + dataList: [], + baseDateL: { + event_push_id: "", + id: "", + options1: [ + { + id: "all", + name: "鍏ㄩ儴鍖哄煙" + }, + { + id: "002", + name: "鐭╁舰1" + } + ], + polygon_id: "", + options2: [ + { + value: "001", + label: "鍏ㄩ儴绠楁硶" + }, + { + value: "002", + label: "绠楁硶1" + }, + { + value: "003", + label: "绠楁硶2" + } + ], + sdk_id: "", + options3: [ + { + value: "001", + label: "浜烘暟" + }, + { + value: "002", + label: "鏁忔劅搴�" + }, + { + value: "003", + label: "鎸佺画鏃堕棿" + } + ], + sdk_arg_alias: "", + unit: "", + options4: [ + { + value: "001", + label: ">" + }, + { + value: "002", + label: "<" + }, + { + value: "003", + label: "==" + } + ], + operator: "", + options5: [ + { + value: "001", + label: "鍊�" + }, + { + value: "002", + label: "澶囬�夐」" + } + ], + operator_type: "", + options6: [ + { + value: "001", + label: "鍊�" + }, + { + value: "002", + label: "澶囬�夐」" + } + ], + select_time_rule: "", + sdk_arg_value: "", + options7: [ + { + value: "001", + label: "浠诲姟1" + }, + { + value: "002", + label: "浠诲姟2" + } + ], + select_task: "" + } + }; + }, + methods: { + addServer() { + // console.log("addServer"); + let obj = { + enable: true, + server_ip: "", + port: "" + }; + this.eventData.serverIp.push(obj); + }, + addUrl(type) { + let obj = { + checked: true, + hash: Math.random().toString(36).substr(2), + url: "", + ip: "", + port: "", + type: type, + domain: "" + }; + this.eventData.urls.push(obj); + this.eventData.urls.sort(function (a, b) { + var val1 = b.type; + var val2 = a.type; + if (val1 < val2) { + return -1; + } else if (val1 > val2) { + return 1; + } else { + return 0; + } + }) + }, + delUrl(index) { + this.$set(this.eventData.urls, index, this.baseDateL) + this.eventData.urls.splice(index, 1) + }, + // 淇濆瓨 + async eventPushsSave() { + // 鍒ゆ柇淇濆瓨鐨刬p鏄惁绗﹀悎鏍煎紡瑕佹眰 + if (this.eventData.urls.length < 1) { + this.$notify({ + type: "warning", + message: "璇烽厤缃嚦灏戜竴鍙版帹閫佹湇鍔″櫒" + }); + return; + } + let isValid = true; + for (let i = 0; i < this.eventData.urls.length; i++) { + let item = this.eventData.urls[i] + if (item.type == 'ip') { + if (this.isValidIP(item.ip) && this.isValidPort(item.port)) { + item.url = item.ip + ":" + item.port + } else { + isValid = false + } + } else { + if (item.domain.length > 0 && this.isValidPort(item.port)) { + item.url = item.domain + ":" + item.port + } else { + isValid = false + } + } + } + if (!isValid) { + this.$notify({ + type: "warning", + message: "璇疯緭鍏ユ纭牸寮忕殑鏈嶅姟鍣ㄥ湴鍧� 鍜� 绔彛" + }); + return; + } + // 鎷兼帴瀛楃涓� + + let ruleDesc = [] + this.dataList.map(i => { + let str = ""; + if (i.polygon_id) { + str += this.getNameByValue(i.options1, i.polygon_id); + } + if (i.sdk_id && i.sdk_id !== 'empty') { + str += this.getNameByValue(i.options2, i.sdk_id); + } + if (i.sdk_arg_alias === '==') { + str += '='; + } else { + // str += i.sdk_arg_alias; + str += this.getNameByValue(i.options3, i.sdk_arg_alias); + } + if (i.operator_type) { + if (i.operator === "custom") { + str += i.operator_type; + } else { + str += this.getNameByValue(i.options5, i.operator_type); + } + } + + if (str.length > 0) { + ruleDesc.push(str) + } + }); + // 澶勭悊瑙勫垯鍒楄〃鏁版嵁缁撴瀯 + let list = this.dataList.map(i => { + let obj = {}; + obj.operator = i.sdk_arg_alias; + obj.rule_value = i.operator_type; + obj.operator_type = i.operator; + obj.topic_type = i.polygon_id; + obj.topic_arg = i.sdk_id; + return obj; + }); + // console.log(this.eventData) + let json = { + enable: this.eventData.enable, + id: this.eventData.id, + ip_ports: this.eventData.serverIp, + name: this.eventData.name, + rule_text: ruleDesc.join("锛�"), + rules: list, + time_start: this.eventData.time[0], + time_end: this.eventData.time[1], + urls: this.eventData.urls, + is_satisfy_all: this.eventData.radioValue === "1", + link_type: this.eventData.lineWay + }; + let res = await eventPushsSave(json); + if (res && res.success) { + this.eventData.eventTxt = ruleDesc.join("锛�"); + this.$emit("updateList", res.data.id); + this.$notify({ + type: "success", + message: "淇濆瓨鎴愬姛" + }); + } + }, + // 鏌ユ壘瀛楀吀 + async findByType() { + let res = await findDictionaryByType(); + if (res && res.success) { + // console.log(res, "鏌ヨ閰嶇疆鍖哄煙鏁版嵁婧�"); + this.baseDateL.options1 = res.data.EVENTRULETOPIC; + this.baseDateL.options3 = res.data.RULECOMPUTE; + this.baseDateL.options4 = res.data.EVENTTYPECOMPUTE; + } + }, + // 楠岃瘉ip鐨刯s鏂规硶 + isValidIP(str) { + // let reg = /^(http:\/\/|https:\/\/)(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\:([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-5]{2}[0-3][0-5])(\/)([a-zA-Z0-9_/]+)$/ + /* eslint-disable */ + let reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/; + return reg.test(str); + }, + isValidPort(str) { + return parseInt(str) > 0 && parseInt(str) < 65536 + }, + // 鏂板缓閰嶇疆 + createSet() { + this.dataList.push(JSON.parse(JSON.stringify(this.baseDateL))); + }, + cleanSet() { + this.dataList.splice(0, this.dataList.length); + }, + // 娣诲姞瀛愯鍒� + addRule() { + this.dataList.push(JSON.parse(JSON.stringify(this.baseDateL))); + }, + // 鍒犻櫎瀛愯鍒� + delRule(index) { + this.dataList.splice(index, 1); + }, + // 瑙勫垯涓笅鎷夋鐨勯�夋嫨鍥炶皟 + async selectChange(value, type, data) { + if (type === "options1") { + this.$set(data, "sdk_id", ""); + if (value === "dbtable" || value === "task" || value === "alarmLevel") { + let list = [ + { + name: "绌�", + value: "empty", + id: "000" + } + ]; + this.$set(data, "options2", list); + this.$set(data, "sdk_id", "empty"); + let json = { + topic: data.polygon_id, + type: "" + }; + let res = await findByEventTopic(json); + if (res && res.success) { + console.log(res, "鏍规嵁涓�浜岀骇閫夐」鑾峰彇"); + this.$set(data, "options5", res.data); + } + } else { + let id = this.getIdByValue(data.options1, value); + if (id !== undefined) { + this.findByParentId(id).then(i => { + // console.log(i, '鏍规嵁鐖秈d鏌ヨ瀛愬弬鏁�') + if (i && i.length !== 0) { + this.$set(data, "options2", i); + } + }); + } + } + } + if (type === "options2") { + if (data.polygon_id && data.sdk_id) { + let json = { + topic: data.polygon_id, + type: data.sdk_id + }; + let res = await findByEventTopic(json); + if (res && res.success) { + // console.log(res, "鏍规嵁涓�浜岀骇閫夐」鑾峰彇"); + this.$set(data, "options5", res.data); + } + } + } + if (type === "options3") { + return false; + } + if (type === "options4") { + return false; + } + if (type === "options5") { + return false; + } + }, + // 鏍规嵁value杩斿洖瀵瑰簲鐨刬d + getIdByValue(arr, id) { + let s = arr.find(item => { + return item.value === id; + }); + // console.log(s, 'label') + return s.id; + }, + // 鏍规嵁value杩斿洖瀵瑰簲鐨刵ame + getNameByValue(arr, value) { + let s = arr.find(item => { + return item.value === value; + }); + return s.name; + }, + // 鏍规嵁瀛楀吀鐨刬d鏌ヨ瀵瑰簲鐨勫瓧鍏� + async findByParentId(id) { + let res = await findDictionaryByID({ parentId: id }); + if (res && res.success) { + // console.log(res, "鏍规嵁瀛楀吀鐨刬d鏌ヨ瀵瑰簲鐨勫瓧鍏�"); + let list = JSON.parse(JSON.stringify(res.data)); + return list; + } + }, + // 娓呯┖閲嶆柊鏂板 + reAdd() { + this.eventData = { + id: "", + name: "", + time: [ + this.$moment().format("YYYY-MM-DD 00:00:00"), + this.$moment().format("YYYY-MM-DD HH:mm:ss") + ], + serverIp: [ + { + enable: true, + server_ip: "", + port: 0 + } + ], + urls: [ + ], + lineWay: "", + lineOptions: [ + { + value: "001", + label: "IP骞挎挱" + } + ], + radioValue: "1", + eventTxt: "" + }; + this.dataList = []; + }, + onIpBlur(ip, item) { + item.ip = ip + }, + onCancle(){ + this.$emit('onCancle') + } + }, + mounted() { + this.findByType().then(() => { + if (Object.keys(this.eventObject).length !== 0) { + // console.log(this.eventObject, "褰撳墠閫変腑鐨勪簨浠秏ounted"); + this.eventData.enable = this.eventObject.enable; + this.eventData.id = this.eventObject.id; + this.eventData.name = this.eventObject.name; + this.eventData.time = [ + this.eventObject.time_start, + this.eventObject.time_end + ]; + this.eventData.serverIp = this.eventObject.ip_ports; + this.eventData.urls = this.eventObject.urls; + this.eventData.lineWay = this.eventObject.link_type; + this.eventData.eventTxt = this.eventObject.rule_text; + this.eventData.radioValue = this.eventObject.is_satisfy_all ? "1" : "2"; + + if (this.eventObject.rules) { + this.eventObject.rules.map((i, index) => { + this.dataList.push(JSON.parse(JSON.stringify(this.baseDateL))); + this.dataList[index].id = i.id; + this.dataList[index].event_push_id = i.event_push_id; + this.dataList[index].polygon_id = i.topic_type; + this.selectChange(i.topic_type, "options1", this.dataList[index]); + this.dataList[index].sdk_id = i.topic_arg; + this.selectChange(i.topic_arg, "options2", this.dataList[index]); + this.dataList[index].sdk_arg_alias = i.operator; + this.dataList[index].operator = i.operator_type; + this.dataList[index].operator_type = i.rule_value; + }); + } + } + }); + } +}; +</script> +<style lang="scss"> +.s-event-push-right { + text-align: left; + font-size: 14px; + i { + cursor: pointer; + } + .s-right-config { + padding: 10px 40px; + } + + .el-form-item__label { + text-align: left; + } + + .s-right-mid { + height: 10px; + background-color: #e9ebf2; + width: 100%; + position: absolute; + } + + .s-right-rule { + padding: 20px 40px; + margin-top: 17px; + .rule-title { + border-bottom: 1px solid #e0e0e0; + } + .rule-title2 { + margin-top: 20px; + } + + .div-border { + width: 995px; + padding: 10px; + margin-top: 15px; + min-height: 80px; + background: #fafafa; + border: 1px solid #f2f2f2; + } + + .rule-edit-btn { + font-size: 18px; + line-height: 38px; + } + + .save-btn { + // float: right; + margin-top: 20px; + margin-left: 895px; + } + } + + .el-button--text { + text-decoration: unset; + } + + .icon-btn { + i { + font-size: 18px; + position: relative; + top: 2px; + } + span { + font-size: 14px; + } + display: inline; + color: #3d68e1; + line-height: 38px; + margin-left: 10px; + cursor: pointer; + } + + .server-url { + padding-top: 25px; + } + .server-add { + font-size: 18px; + margin-left: 8px; + color: #3d68e1; + line-height: 39px; + } +} +</style> diff --git a/src/pages/datapush/index/main.ts b/src/pages/datapush/index/main.ts new file mode 100644 index 0000000..74d944a --- /dev/null +++ b/src/pages/datapush/index/main.ts @@ -0,0 +1,25 @@ +import Vue from 'vue'; +import ElementUI from 'element-ui'; +import 'element-ui/lib/theme-chalk/index.css'; +import "@/assets/css/element-variables.scss"; +import "../../../assets/icons/alibaba/iconfont.css"; +import "../../../assets/icons/basic/iconfont.css"; +import "../../../assets/icons/iconfont.css"; +import "../../../assets/icons/symbol.js"; + +import App from './App.vue' +import moment from "moment"; +Vue.prototype.$moment = moment; + +Vue.use(ElementUI) + +Vue.filter('moment', function (value, formatString) { + formatString = formatString || 'YYYY-MM-DD HH:mm:ss'; + return moment(value).format(formatString); + +}); + +new Vue({ + el: '#app', + render: h => h(App) +}) diff --git a/src/pages/desktop/index/App.vue b/src/pages/desktop/index/App.vue index d87fecd..38d0b0e 100644 --- a/src/pages/desktop/index/App.vue +++ b/src/pages/desktop/index/App.vue @@ -11,8 +11,6 @@ <script> import Desktop from './components/Desktop'; -import Dock from './components/Dock'; -import Preference from './components/Preference'; import NotificationCenter from './components/NotificationCenter'; import NoticeTip from './components/NoticeTip'; import Tools from './components/Tools'; @@ -22,7 +20,7 @@ export default { name: 'app', components: { - Desktop, Dock, Preference, NotificationCenter, NoticeTip, Tools, ToolsEntry + Desktop, NotificationCenter, NoticeTip, Tools, ToolsEntry }, mounted() { document.getElementById('app').style.backgroundImage = process.env.VUE_APP_MAIN_URL; @@ -118,8 +116,8 @@ background-attachment: fixed; } -.clearFix:after{ - content: ''; +.clearFix:after { + content: ""; display: block; height: 0; clear: both; diff --git a/src/pages/desktop/index/components/Tools.vue b/src/pages/desktop/index/components/Tools.vue index 124e00a..72b59ef 100644 --- a/src/pages/desktop/index/components/Tools.vue +++ b/src/pages/desktop/index/components/Tools.vue @@ -1,67 +1,56 @@ <template> <div class="tools"> - - <div class="tools-left"> - <div - :class="['tools-icon','tools-show-desktop', {clicked:this.$store.state.desktop.preferenceVisiable}]" - @click="togglePreference()" - > - <img class="system" :src="`${publicPath}images/header-icon/system.png`" /> - <!-- <span class="fa fa-apple"></span> --> - </div> - <div class="tools-icon" > - <!-- <span class="fa fa-safari"></span> --> - <img class="smart-ai" :src="`${publicPath}images/header-icon/SmartAI.png`" alt /> - </div> + <div class="tools-left"> + <div + :class="['tools-icon','tools-show-desktop', {clicked:this.$store.state.desktop.preferenceVisiable}]" + @click="togglePreference()" + > + <img class="system" :src="`${publicPath}images/header-icon/system.png`" /> + <!-- <span class="fa fa-apple"></span> --> </div> - <div class="tools-middle"> - <div - v-for="dock in this.$store.state.desktop.minDocks" - :key="dock.id" - class="dock-item-wrap" - - > - <a @click="dockClick(dock)"> - <img class="dock-item" :src="dock.src" :alt="dock.alt" /> - </a> - </div> + <div class="tools-icon"> + <!-- <span class="fa fa-safari"></span> --> + <img class="smart-ai" :src="`${publicPath}images/header-icon/SmartAI.png`" alt /> </div> - <div class="tools-right"> - <div class="tools-icon"> - <!-- <span class="fa fa-battery-full"></span> --> - <img :src="`${publicPath}images/header-icon/search.png`" alt /> - </div> - <div class="tools-icon"> - <!-- <span class="fa fa-battery-full"></span> --> - <img :src="`${publicPath}images/header-icon/help.png`" alt /> - </div> - <div class="tools-icon" @click="notificationCenterClick()"> - <!-- <span class="fa fa-battery-full"></span> --> - <img :src="`${publicPath}images/header-icon/notice.png`" alt /> - </div> - <div class="tools-icon"> - <!-- <span class="fa fa-battery-full"></span> --> - <img :src="`${publicPath}images/header-icon/user.png`" alt /> - </div> - <!-- <timer></timer> --> - <!-- <div class="tools-icon tools-notification-center" @click="notificationCenterClick()"> + </div> + <div class="tools-middle"> + <div v-for="dock in this.$store.state.desktop.minDocks" :key="dock.id" class="dock-item-wrap"> + <a @click="dockClick(dock)"> + <img class="dock-item" :src="dock.src" :alt="dock.alt" /> + </a> + </div> + </div> + <div class="tools-right"> + <div class="tools-icon"> + <!-- <span class="fa fa-battery-full"></span> --> + <img :src="`${publicPath}images/header-icon/search.png`" alt /> + </div> + <div class="tools-icon"> + <!-- <span class="fa fa-battery-full"></span> --> + <img :src="`${publicPath}images/header-icon/help.png`" alt /> + </div> + <div class="tools-icon" @click="notificationCenterClick()"> + <!-- <span class="fa fa-battery-full"></span> --> + <img :src="`${publicPath}images/header-icon/notice.png`" alt /> + </div> + <div class="tools-icon"> + <!-- <span class="fa fa-battery-full"></span> --> + <img :src="`${publicPath}images/header-icon/user.png`" alt /> + </div> + <!-- <timer></timer> --> + <!-- <div class="tools-icon tools-notification-center" @click="notificationCenterClick()"> <span :class="['fa', {'fa-list-ul':notificationCenterNoMessage()}, {'fa-comment-o on-new-msg':!notificationCenterNoMessage()},{'fa-commenting-o':notificationCenterMessageFlicker()}]" ></span> - </div> --> - </div> - + </div>--> + </div> </div> </template> <script> -import Timer from "./Timer"; export default { name: "Tools", - components: { - Timer - }, data() { return { publicPath: process.env.BASE_URL, @@ -75,23 +64,23 @@ window.toolIntervalArr.forEach(item => clearInterval(item)); } window.toolIntervalArr = [ - setInterval(function() { + setInterval(function () { _that.notificationCenterMessageCount += 1; }, 600) ]; }, methods: { - notificationCenterClick: function() { + notificationCenterClick: function () { this.notificationCenterVisible = !this.notificationCenterVisible; this.$store.commit( "desktop/changeNotificationCenterVisible", this.notificationCenterVisible ); }, - notificationCenterNoMessage: function() { + notificationCenterNoMessage: function () { return this.$store.state.desktop.messageNotices.length === 0; }, - notificationCenterMessageFlicker: function() { + notificationCenterMessageFlicker: function () { return ( this.notificationCenterMessageCount % 2 === 0 && !this.notificationCenterNoMessage() @@ -102,7 +91,7 @@ //this.$store.commit("desktop/togglePreference"); //鏄剧ず妗岄潰,鏈�灏忓寲宸叉墦寮�鐨勫簲鐢� debugger; - this.$store.state.desktop.frames.forEach(frame=>{ + this.$store.state.desktop.frames.forEach(frame => { this.$store.commit('desktop/addMinDock', { id: frame.id, src: frame.icon, @@ -152,14 +141,14 @@ float: left; margin-left: 14px; } -.tools .tools-middle{ +.tools .tools-middle { float: left; position: relative; } -.tools .tools-middle::before{ +.tools .tools-middle::before { width: 1px; height: 20px; - content: ''; + content: ""; position: absolute; top: 10px; left: 0; @@ -174,10 +163,10 @@ border-bottom: 2px solid transparent; } .tools .tools-middle .dock-item-wrap:hover, -.tools .tools-middle .dock-item-wrap.clicked{ +.tools .tools-middle .dock-item-wrap.clicked { color: white; background-color: #98aabe; - border-color: #40C3FF; + border-color: #40c3ff; cursor: pointer; } .dock-item-wrap a { diff --git a/src/pages/desktop/index/mock/userData.json b/src/pages/desktop/index/mock/userData.json index a08717b..5e2e466 100644 --- a/src/pages/desktop/index/mock/userData.json +++ b/src/pages/desktop/index/mock/userData.json @@ -120,7 +120,7 @@ "src": "../../images/app-mid/log-manage.png", "alt": "鏃ュ織绠$悊", "type": "2", - "url": "/view/logManage", + "url": "/view/syslog", "name": "鏃ュ織绠$悊" }, { diff --git a/src/pages/settings/components/BasicSetting.vue b/src/pages/settings/components/BasicSetting.vue index 3562a61..255e35d 100644 --- a/src/pages/settings/components/BasicSetting.vue +++ b/src/pages/settings/components/BasicSetting.vue @@ -18,7 +18,6 @@ class="menu-css" @open="menuOpen" @close="menuClose" - > <!-- 鏈満淇℃伅 --> <el-submenu index="0"> @@ -160,7 +159,7 @@ </el-menu-item-group> </el-submenu> <!-- 瀵瑰鏈嶅姟IP 鏀瑰悕涓哄閮ㄧ綉缁�(鏂皌ab)--> - + <!-- 鏂囦欢闊宠棰� --> <!-- <el-submenu index="4"> <template slot="title"> @@ -362,157 +361,30 @@ </div> <div class="flex-box"> <label>鍩熷悕</label> - <el-input size="small" v-model="ipServer.localhost"></el-input> + <el-input size="small" v-model="ipServer.localhost"></el-input> </div> <div class="flex-box"> <label>鏈湴鏂囦欢绔彛</label> - <el-input size="small" v-model="ipServer.localFilePort"></el-input> + <el-input size="small" v-model="ipServer.localFilePort"></el-input> </div> <div class="mt15 save-btn" style="width:460px; margin-bottom:20px; float:left;"> <el-button type="primary" @click="submitResource" size="small">淇濆瓨</el-button> </div> <div> - <el-table - :data="ipServer.fileTable" - border - fit - style="width: 100%"> - <el-table-column - type="index" - label="搴忓彿" - align="center" - width="50"> - </el-table-column> - <el-table-column - prop="date" - label="鍚嶇О" - align="center" - > - </el-table-column> - <el-table-column - prop="name" - label="ID" - align="center" - > - </el-table-column> - <el-table-column - prop="name" - label="IP" - align="center" - > - </el-table-column> - <el-table-column - prop="name" - label="鍦ㄧ嚎鐘舵��" - align="center" - > - </el-table-column> - </el-table> - </div> + <el-table :data="ipServer.fileTable" border fit style="width: 100%"> + <el-table-column type="index" label="搴忓彿" align="center" width="50"></el-table-column> + <el-table-column prop="date" label="鍚嶇О" align="center"></el-table-column> + <el-table-column prop="name" label="ID" align="center"></el-table-column> + <el-table-column prop="name" label="IP" align="center"></el-table-column> + <el-table-column prop="name" label="鍦ㄧ嚎鐘舵��" align="center"></el-table-column> + </el-table> + </div> </el-tab-pane> - <el-tab-pane label="鏉冮檺绠$悊" name="user" > + <el-tab-pane label="鏉冮檺绠$悊" name="user"> <authority-management v-if="activeName === 'user'"></authority-management> </el-tab-pane> - <el-tab-pane label="骞挎挱璁剧疆" name="radio" > + <el-tab-pane label="骞挎挱璁剧疆" name="radio"> <radio-set v-if="activeName === 'radio'"></radio-set> - </el-tab-pane> - <!-- GB28181璁剧疆 --> - <el-tab-pane label="GB28181璁剧疆" name="fifth"> - <el-form - :model="gb28181" - :rules="rules" - label-width="140px" - class="alarmSetting" - ref="gb28181" - > - <!-- <el-form-item label="鍥介檯鏈嶅姟鍣↖P" prop="ServerIp"> - <ip-input :ip="gb28181.ServerIp" @on-blur="gb28181.ServerIp = arguments[0]"></ip-input> - </el-form-item>--> - - <div style="text-align: left;margin-bottom: 22px;"> - <el-radio-group v-model="gb28181.idType"> - <el-radio :label="0">杈撳叆宸叉湁ID</el-radio> - <el-radio :label="1">鐢熸垚鏂扮殑ID</el-radio> - </el-radio-group> - </div> - - <el-form-item label="鎵�鍦ㄥ湴"> - <el-select - v-model="locationCity.province" - @change="changeProvince" - size="small" - placeholder="璇烽�夋嫨鐪佷唤" - > - <el-option - v-for="item in locationCity.provinceOptions" - :key="item.id" - :label="item.name" - size="small" - :value="item.id" - ></el-option> - </el-select> - <el-select - class="ml10 mr10" - v-model="locationCity.city" - :disabled="!locationCity.province" - @change="changeCity" - size="small" - placeholder="璇烽�夋嫨鍩庡競" - > - <el-option - v-for="item in locationCity.cityOptions" - :key="item.id" - :label="item.name" - :value="item.id" - ></el-option> - </el-select> - <el-select - v-model="locationCity.county" - :disabled="!locationCity.city" - size="small" - placeholder="璇烽�夋嫨鍖哄幙" - > - <el-option - v-for="item in locationCity.countyOptions" - :key="item.id" - :label="item.name" - :value="item.id" - ></el-option> - </el-select> - <el-button - type="text" - style="position: absolute" - v-show="gb28181.idType === 1" - @click="newGBID" - >鐢熸垚ID</el-button> - </el-form-item> - - <!-- <el-form-item label="鍥介檯鏈嶅姟鍣ㄧ鍙�" prop="GbServerPort"> - <el-input v-model.number="gb28181.ServerPort" placeholder="璇疯緭鍏�" size="small"></el-input> - </el-form-item>--> - - <el-form-item label="鍥芥爣ID"> - <el-input v-model="gb28181.PublicId" placeholder="璇疯緭鍏�" size="small"></el-input> - </el-form-item> - - <el-form-item label="鍥芥爣绔彛" prop="ServerPort"> - <el-input v-model.number="gb28181.GbServerPort" placeholder="璇疯緭鍏�" size="small"></el-input> - </el-form-item> - - <el-form-item label="寮�鍚壌鏉�"> - <el-switch v-model="gb28181.IsAuth"></el-switch> - </el-form-item> - - <el-form-item label="閴存潈瀵嗙爜" v-show="gb28181.IsAuth"> - <el-input v-model="gb28181.Password" placeholder="璇疯緭鍏�" size="small"></el-input> - </el-form-item> - - <el-col :span="12"> - <el-form-item> - <el-button type="primary" @click="submitGB28281" size="small">淇濆瓨</el-button> - </el-form-item> - </el-col> - </el-form> </el-tab-pane> </el-tabs> </div> @@ -522,17 +394,13 @@ import { getDevInfo, getAlarmConfig, - getGB28181Config, saveDevInfo, saveAlarmConfig, - saveGB28181Config, getClockInfo, saveClockInfo, testNTPserver, getResourceConfig, saveResourceConfig, - getGb28181AreaList, - newGb28181ID } from "@/api/system"; import { isPort, isIPv4 } from "@/scripts/validate"; @@ -588,7 +456,6 @@ timestamp: 0, sysinfo: {}, alarmConf: {}, - gb28181: {}, originNetConfig: { ip: "", gw: "", @@ -702,7 +569,6 @@ this.initSysinfo(); // this.initAlarmConf(); this.initResourceConfig(); - this.initGB28181Conf(); this.initClockConf(); }); }, @@ -773,19 +639,6 @@ this.ipServer.ip = rsp.data.serviceIp this.ipServer.localhost = rsp.data.domain this.ipServer.localFilePort = rsp.data.filePort - } - }) - }, - initGB28181Conf() { - getGB28181Config().then(rsp => { - if (rsp && rsp.success) { - this.gb28181 = rsp.data; - this.gb28181.idType = 0; - } - }); - getGb28181AreaList().then(rsp => { - if (rsp && rsp.success) { - this.locationCity.provinceOptions = rsp.data; } }) }, @@ -969,23 +822,6 @@ } }) }, - submitGB28281() { - this.$refs["gb28181"].validate(valid => { - if (valid) { - saveGB28181Config(this.gb28181).then(rsp => { - if (rsp && rsp.success) { - this.$notify({ - type: "success", - message: "GB28181璁剧疆淇濆瓨鎴愬姛" - }); - } - }); - } else { - console.log("error submit!!"); - return false; - } - }); - }, onIpBlur(e, ip) { console.log(e, ip); }, @@ -1040,33 +876,6 @@ let re = /^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*$/ return re.test(str) }, - changeProvince() { - let pid = this.locationCity.province; - getGb28181AreaList({ parentId: pid }).then(rsp => { - if (rsp && rsp.success) { - this.locationCity.cityOptions = rsp.data; - this.locationCity.city = this.locationCity.cityOptions[0].id; - this.changeCity(); - } - }) - }, - changeCity() { - let pid = this.locationCity.city; - getGb28181AreaList({ parentId: pid }).then(rsp => { - if (rsp && rsp.success) { - this.locationCity.countyOptions = rsp.data; - this.locationCity.county = this.locationCity.countyOptions[0].id; - } - }) - }, - newGBID() { - let cCode = this.locationCity.county + ""; - newGb28181ID({ code: cCode }).then(rsp => { - if (rsp && rsp.success) { - this.gb28181.PublicId = rsp.data; - } - }) - } } }; </script> @@ -1076,7 +885,7 @@ height: 100%; .el-form { width: 1000px; - + // margin-left: -80px; .el-form-item { text-align: left; @@ -1136,7 +945,6 @@ font-weight: 600; background-color: #e4e6ed; } - #cut_min_duration { .el-slider__bar { @@ -1218,13 +1026,13 @@ } </style> <style lang="scss" scoped> -.flex-box{ +.flex-box { display: flex; height: 50px; - label{ + label { width: 120px; - } - .el-input{ + } + .el-input { width: 300px; } } @@ -1236,7 +1044,7 @@ margin: 0; padding-left: 0; background-color: #ffffff; - + .tree-font { font-family: PingFangSC-Medium; font-size: 14px; diff --git a/src/pages/syslog/index/App.vue b/src/pages/syslog/index/App.vue new file mode 100644 index 0000000..2b2d37e --- /dev/null +++ b/src/pages/syslog/index/App.vue @@ -0,0 +1,190 @@ +<template> + <div class="s-log-management"> + <div class="top"> + <b>鏃ュ織绫诲瀷:</b> + <el-select v-model="logValue" placeholder="璇烽�夋嫨" size="small"> + <el-option + v-for="item in logOptions" + :key="item.value" + :label="item.label" + :value="item.value" + ></el-option> + </el-select> + <b>鏃堕棿:</b> + <el-date-picker + v-model="timeValue" + type="datetimerange" + size="small" + range-separator="鑷�" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡" + ></el-date-picker> + <el-input + v-model="searchValue" + placeholder="璇疯緭鍏ュ唴瀹�" + clearable + style="width: 150px;margin: 0px 10px;" + size="small" + ></el-input> + <el-button type="primary" size="small">鎼滅储</el-button> + <el-button type="danger" size="small" @click="delSelected">鎵归噺鍒犻櫎</el-button> + <el-button type="text" size="small" style="font-size: 13px;font-weight: 600;">瀵煎嚭</el-button> + </div> + <div class="foot-table s-table"> + <el-table + ref="multipleTable" + highlight-current-row + :data="tableData" + style="width: 100%" + :header-cell-style="{background:'#f8f8f8',color:'#222222'}" + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55"></el-table-column> + <el-table-column :align="'center'" sortable prop="index" label="搴忓彿"></el-table-column> + <el-table-column :align="'center'" sortable prop="logtype" label="鏃ュ織绫诲瀷"></el-table-column> + <el-table-column :align="'center'" sortable prop="username" label="鐢ㄦ埛鍚�"></el-table-column> + <el-table-column :align="'center'" sortable prop="ipaddress" label="IP鍦板潃"></el-table-column> + <el-table-column :align="'center'" sortable prop="operation" label="鎿嶄綔鍔熻兘"></el-table-column> + <el-table-column :align="'center'" sortable prop="operatetime" label="鎿嶄綔鏃堕棿"></el-table-column> + <el-table-column :align="'center'" sortable prop="operateinfo" label="鎿嶄綔淇℃伅"></el-table-column> + <el-table-column label="鎿嶄綔" :align="'center'"> + <template slot-scope="scope"> + <el-button + type="text" + style="color: red;font-size:16px" + @click="handleDelete(scope.$index, scope.row)" + icon="el-icon-delete" + ></el-button> + </template> + </el-table-column> + </el-table> + </div> + </div> +</template> + +<script> +export default { + data() { + return { + tableData: [ + { + index: "1", + logtype: "寮傚父", + username: "admin", + ipaddress: "192.168.10.110", + operation: "娣诲姞鎽勫儚鏈�", + operatetime: "2019-5-31 16:38:21", + operateinfo: "娣诲姞鎿嶄綔" + }, + { + index: "2", + logtype: "淇℃伅", + username: "admin", + ipaddress: "192.168.10.108", + operation: "鍒犻櫎鎽勫儚鏈�", + operatetime: "2019-5-31 16:38:21", + operateinfo: "娣诲姞鎿嶄綔" + }, + { + index: "3", + logtype: "鎿嶄綔", + username: "admin", + ipaddress: "192.168.10.110", + operation: "娣诲姞鎽勫儚鏈�", + operatetime: "2019-5-31 16:38:21", + operateinfo: "娣诲姞鎿嶄綔" + }, + { + index: "4", + logtype: "寮傚父", + username: "admin", + ipaddress: "192.168.10.110", + operation: "娣诲姞鎽勫儚鏈�", + operatetime: "2019-5-31 16:38:21", + operateinfo: "娣诲姞鎿嶄綔" + }, + { + index: "5", + logtype: "寮傚父", + username: "admin", + ipaddress: "192.168.10.110", + operation: "鍒犻櫎鎽勫儚鏈�", + operatetime: "2019-5-31 16:38:21", + operateinfo: "娣诲姞鎿嶄綔" + }, + { + index: "6", + logtype: "寮傚父", + username: "admin", + ipaddress: "192.168.10.110", + operation: "娣诲姞鎽勫儚鏈�", + operatetime: "2019-5-31 16:38:21", + operateinfo: "娣诲姞鎿嶄綔" + } + ], + multipleSelection: [], + logOptions: [ + { + value: "鍏ㄩ儴绫诲瀷", + label: "鍏ㄩ儴绫诲瀷" + }, + { + value: "鍏朵粬绫诲瀷", + label: "鍏朵粬绫诲瀷" + } + ], + logValue: "鍏ㄩ儴绫诲瀷", + timeValue: [ + new Date(2000, 10, 10, 10, 10), + new Date(2000, 10, 11, 10, 10) + ], + searchValue: "" + }; + }, + methods: { + handleDelete(index, row) { + console.log(index, row); + }, + handleSelectionChange(val) { + this.multipleSelection = val; + }, + delSelected() { + console.log(this.multipleSelection); + } + } +}; +</script> +<style lang="scss"> +.s-log-management { + height: 100%; + width: 100%; + .top { + width: 100%; + margin-top: 10px; + margin-bottom: 20px; + overflow-y: auto; + min-width: 1156px; + height: 40px; + text-align: left; + b { + padding: 0px 10px; + } + } + .export { + display: inline-block; + padding-right: 10px; + box-sizing: border-box; + margin-top: 20px; + b:hover { + color: #2249b4; + } + } + .clear-searching { + cursor: pointer; + text-decoration: underline; + width: 40px; + font-size: 13px; + color: #3d68e1; + } +} +</style> diff --git a/src/pages/syslog/index/main.ts b/src/pages/syslog/index/main.ts new file mode 100644 index 0000000..80f18a4 --- /dev/null +++ b/src/pages/syslog/index/main.ts @@ -0,0 +1,11 @@ +import Vue from 'vue' +import ElementUI from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +import App from './App.vue' + +Vue.use(ElementUI) + +new Vue({ + el: '#app', + render: h => h(App) +}) diff --git a/src/pages/vindicate/index/App.vue b/src/pages/vindicate/index/App.vue index 8ff9750..5884d28 100644 --- a/src/pages/vindicate/index/App.vue +++ b/src/pages/vindicate/index/App.vue @@ -1,12 +1,12 @@ <template> - <el-tabs - id="systemMaintenance" - v-model="activeName" - v-loading="loading" - :element-loading-text="loadingText" - > - <el-tab-pane label="璁惧缁存姢" name="first" > - <div class="s-system-maintenance"> + <el-tabs + id="systemMaintenance" + v-model="activeName" + v-loading="loading" + :element-loading-text="loadingText" + > + <el-tab-pane label="璁惧缁存姢" name="first"> + <div class="s-system-maintenance"> <div class="box-card"> <div class="ui-top-view"> <div class="ui-top-title">閲嶅惎</div> @@ -14,14 +14,10 @@ <el-divider></el-divider> <div class="box-card-content"> - - - <el-button type="primary" size="small" style="width:80px" @click="reboot">閲嶅惎</el-button> - - - <b class="card-text">閲嶅惎鑺傜偣</b> - - + <el-button type="primary" size="small" style="width:80px" @click="reboot">閲嶅惎</el-button> + + <b class="card-text">閲嶅惎鑺傜偣</b> + <el-row style="margin-top:20px"> <el-col> <vue-cron :expression="rebootCron" @update="setRebootCron" /> @@ -124,43 +120,42 @@ </el-row> </div> </div> - </el-tab-pane> - <el-tab-pane label="鏁版嵁搴撶淮鎶�" name="second" > - <div class="box"> - <p class="title"> - <label>鏁版嵁娓呯悊</label> - </p> - <div class="range"> - <div class="left"> - <p>閫夋嫨鏁版嵁鑼冨洿锛�</p> - </div> - <div class="middle"> - <el-date-picker - v-model="dataRange" - type="daterange" - range-separator="鑷�" - start-placeholder="寮�濮嬫棩鏈�" - end-placeholder="缁撴潫鏃ユ湡" - style="height:38px" - :picker-options="pickerOptions" - ></el-date-picker> - </div> - <div class="right"> - <el-button @click="deleteData" style="height:38px;background:#ff0000;color:white">鍒犻櫎鏁版嵁</el-button> - </div> - </div> - <div class="tip"> - <i class="iconfont icontishi-zhuyi"></i> - <p class="zhuyi">璇锋敞鎰忥紝鎸変互涓婃棩鏈熻寖鍥村垹闄ょ殑鏁版嵁涓嶅彲鎭㈠锛岀珛鍗崇敓鏁堬紝璇疯皑鎱庢搷浣�</p> - </div> - </div> - </el-tab-pane> - </el-tabs> - + </el-tab-pane> + <el-tab-pane label="鏁版嵁搴撶淮鎶�" name="second"> + <div class="box"> + <p class="title"> + <label>鏁版嵁娓呯悊</label> + </p> + <div class="range"> + <div class="left"> + <p>閫夋嫨鏁版嵁鑼冨洿锛�</p> + </div> + <div class="middle"> + <el-date-picker + v-model="dataRange" + type="daterange" + range-separator="鑷�" + start-placeholder="寮�濮嬫棩鏈�" + end-placeholder="缁撴潫鏃ユ湡" + style="height:38px" + :picker-options="pickerOptions" + ></el-date-picker> + </div> + <div class="right"> + <el-button @click="deleteData" style="height:38px;background:#ff0000;color:white">鍒犻櫎鏁版嵁</el-button> + </div> + </div> + <div class="tip"> + <i class="iconfont icontishi-zhuyi"></i> + <p class="zhuyi">璇锋敞鎰忥紝鎸変互涓婃棩鏈熻寖鍥村垹闄ょ殑鏁版嵁涓嶅彲鎭㈠锛岀珛鍗崇敓鏁堬紝璇疯皑鎱庢搷浣�</p> + </div> + </div> + </el-tab-pane> + </el-tabs> </template> <script> -import { rebootServer, getDevInfo, getRebootTask, setRebootTask, fileUpload, doUpgrade,deleteDate } from "@/api/system" +import { rebootServer, getDevInfo, getRebootTask, setRebootTask, fileUpload, doUpgrade, deleteDate } from "@/api/system" import VueCron from "@/components/subComponents/VueCron" import FileUploader from "@/components/subComponents/FileUpload/index" @@ -220,7 +215,7 @@ } }, methods: { - isShow (authority) { + isShow(authority) { if (this.isAdmin) { return true } else if ( @@ -285,8 +280,8 @@ var timeRange = this.format(this.dataRange); var showStartTime = timeRange[0] var showEndTime = timeRange[1] - console.log("鏃堕棿锛�",showStartTime,showEndTime) - this.$confirm("鎻愮ず锛�"+showStartTime+" 鑷� "+showEndTime+" 浜х敓鐨勫叏閮ㄦ暟鎹皢琚垹闄わ紝姝ゆ搷浣滅珛鍗崇敓鏁堬紝涓嶅彲鎭㈠锛屾槸鍚﹀垹闄わ紵", { + console.log("鏃堕棿锛�", showStartTime, showEndTime) + this.$confirm("鎻愮ず锛�" + showStartTime + " 鑷� " + showEndTime + " 浜х敓鐨勫叏閮ㄦ暟鎹皢琚垹闄わ紝姝ゆ搷浣滅珛鍗崇敓鏁堬紝涓嶅彲鎭㈠锛屾槸鍚﹀垹闄わ紵", { center: true, cancelButtonClass: "comfirm-class-cancle", confirmButtonClass: "comfirm-class-sure" @@ -417,13 +412,13 @@ } } } -.box{ +.box { width: 50%; min-width: 700px; height: 270px; border: 1px solid #eee; .title { - font-size:20px; + font-size: 20px; font-weight: bold; text-align: left; padding: 20px; @@ -475,35 +470,33 @@ } } } -#systemMaintenance{ - +#systemMaintenance { .el-tabs__header { - border: 0px solid #dcdfe6; - .el-tabs__item { - padding: 5px 50px; - height: 50px; - font-family: PingFangSC-Regular; - font-size: 14px; - color: #222222; - text-align: center; - border: 0px solid transparent; - } - .el-tabs__item:nth-child(2) { - padding-left: 50px; - } - .el-tabs__item:last-child { - padding-right: 50px; - } - .el-tabs__item.is-active { - color: #ff7733; - font-weight: bold; - // border-right-color: #fff; - // border-left-color: #fff; - } - .el-tabs__item:not(.is-disabled):hover { - color: #ff7733; - } - + border: 0px solid #dcdfe6; + .el-tabs__item { + padding: 5px 50px; + height: 50px; + font-family: PingFangSC-Regular; + font-size: 14px; + color: #222222; + text-align: center; + border: 0px solid transparent; + } + .el-tabs__item:nth-child(2) { + padding-left: 50px; + } + .el-tabs__item:last-child { + padding-right: 50px; + } + .el-tabs__item.is-active { + color: #ff7733; + font-weight: bold; + // border-right-color: #fff; + // border-left-color: #fff; + } + .el-tabs__item:not(.is-disabled):hover { + color: #ff7733; + } } .el-tabs__active-bar { background-color: #ff7733; -- Gitblit v1.8.0