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>&nbsp;鏂板</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>&nbsp;娣诲姞ip</span>
+        </div>
+        <div class="icon-btn" v-if="domains.length < 1" @click="addUrl('domain')">
+          <i class="el-icon-circle-plus-outline"></i>
+          <span>&nbsp;娣诲姞鍩熷悕</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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' : '鍩熷悕 '}}</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>&nbsp;鏂板</span>
+        </div>
+        <div class="icon-btn" v-if="dataList.length > 0" @click="cleanSet">
+          <i class="el-icon-remove-outline"></i>
+          <span>&nbsp;娓呯┖</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