From 1e1e5f612f252d66b0d0386cf52873bb1f3f7d7b Mon Sep 17 00:00:00 2001 From: haoxuan <haoxuan> Date: 星期五, 01 九月 2023 16:10:37 +0800 Subject: [PATCH] 系统维护+系统监控器+调试工具的app 增加 --- src/pages/settings/components/BasicSetting.vue | 1065 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 1,065 insertions(+), 0 deletions(-) diff --git a/src/pages/settings/components/BasicSetting.vue b/src/pages/settings/components/BasicSetting.vue new file mode 100644 index 0000000..985f4bc --- /dev/null +++ b/src/pages/settings/components/BasicSetting.vue @@ -0,0 +1,1065 @@ +<template> + <div class="s-basic-setting"> + <el-tabs + id="e-basic-setting" + v-model="activeName" + v-loading="loading" + :element-loading-text="loadingText" + type="border-card" + > + <!-- 鏈満淇℃伅 --> + <el-tab-pane label="鏈満淇℃伅" name="sysInfo" v-if="isShow('settings:sysInfo')"> + <el-menu + :default-openeds="openeds" + background-color="#fff" + text-color="#303133" + active-text-color="#409EFF" + style="height: 100%" + class="menu-css" + @open="menuOpen" + @close="menuClose" + > + <!-- 鏈満淇℃伅 --> + <el-submenu index="0"> + <template slot="title"> + <b class="tree-font">鏈満淇℃伅</b> + </template> + <el-menu-item-group class="item-group"> + <el-form :model="sysinfo" :rules="rules" ref="sysinfo" label-width="100px"> + <el-row> + <el-col :span="12"> + <el-form-item label="鏈嶅姟鍣ㄥ悕绉�" prop="server_name"> + <el-input v-model="sysinfo.server_name" placeholder="鏈嶅姟鍣ㄥ悕绉�" size="small"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="鍩熷悕" prop="server_name"> + <el-input v-model="sysinfo.server_domain" placeholder="WEB鏈嶅姟鍩熷悕" size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="绔彛" prop="server_port"> + <el-input v-model="sysinfo.server_port" placeholder="WEB鏈嶅姟绔彛" size="small"></el-input> + </el-form-item> + </el-col> + </el-row> + + <el-row> + <el-col :span="12"> + <el-form-item label="IP" prop="ip"> + <ip-input :ip="sysinfo.ip" @on-blur="sysinfo.ip = arguments[0]"></ip-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="瀛愮綉鎺╃爜" prop="subMask"> + <ip-input :ip="sysinfo.subMask" @on-blur="sysinfo.subMask = arguments[0]"></ip-input> + </el-form-item> + </el-col> + </el-row> + + <el-row> + <el-col :span="12"> + <el-form-item label="缃戝叧" prop="gateway"> + <ip-input :ip="sysinfo.gateway" @on-blur="sysinfo.gateway = arguments[0]"></ip-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="DNS" prop="dns"> + <ip-input :ip="sysinfo.dns" @on-blur="sysinfo.dns = arguments[0]"></ip-input> + </el-form-item> + </el-col> + </el-row> + <div class="mt15 mb10 save-btn"> + <el-button type="primary" @click="submitSysinfo" size="small">淇濆瓨</el-button> + </div> + </el-form> + </el-menu-item-group> + </el-submenu> + + <el-submenu index="1"> + <template slot="title"> + <b class="tree-font">璇︾粏淇℃伅</b> + </template> + <el-menu-item-group class="item-group desc-info"> + <el-row :gutter="gutter"> + <el-col :span="12" class="flex-box"> + <div class="xiangqin-label">璁惧ID</div> + <div class="xiangqing-info">{{ sysinfo.server_id }}</div> + </el-col> + <!-- <el-col :span="12" class="flex-box"> + <div class="xiangqin-label">璁惧缂栧彿</div> + <div class="xiangqing-info">{{sysinfo.deviceNum}}</div> + </el-col>--> + <el-col :span="12" class="flex-box"> + <div class="xiangqin-label">璁惧鍨嬪彿</div> + <div class="xiangqing-info">{{ sysinfo.deviceModel }}</div> + </el-col> + <el-col :span="12" class="flex-box"> + <div class="xiangqin-label">璁惧绫诲瀷</div> + <div class="xiangqing-info">{{ sysinfo.deviceDesc }}</div> + </el-col> + <el-col :span="12" class="flex-box"> + <div class="xiangqin-label">閫氶亾涓暟</div> + <div class="xiangqing-info">{{ sysinfo.channelCount }}</div> + </el-col> + <el-col :span="12" class="flex-box"> + <div class="xiangqin-label">涓绘帶鐗堟湰</div> + <div class="xiangqing-info">{{ sysinfo.masterVersion }}</div> + </el-col> + <el-col :span="12" class="flex-box"> + <div class="xiangqin-label">web鐗堟湰</div> + <div class="xiangqing-info">{{ sysinfo.webVersion }}</div> + </el-col> + <el-col :span="12" class="flex-box"> + <div class="xiangqin-label">纭洏淇℃伅</div> + <div class="xiangqing-info">{{ sysinfo.disks }}</div> + </el-col> + <el-col :span="12" class="flex-box"> + <div class="xiangqin-label">CPU</div> + <div class="xiangqing-info">{{ sysinfo.cpuInfo }}</div> + </el-col> + <el-col :span="12" class="flex-box"> + <div class="xiangqin-label">鍐呭瓨</div> + <div class="xiangqing-info">{{ sysinfo.mem }}</div> + </el-col> + <el-col :span="12" class="flex-box"> + <div class="xiangqin-label">杩愯鏃堕棿</div> + <div class="xiangqing-info">{{ sysinfo.uptime }}</div> + </el-col> + </el-row> + </el-menu-item-group> + </el-submenu> + <!-- 浜嬩欢褰曞儚鏃堕暱 --> + <el-submenu index="2"> + <template slot="title"> + <b class="tree-font">浜嬩欢褰曞儚鏃堕暱</b> + </template> + <el-menu-item-group class="item-group"> + <el-form label-width="150px" class="alarmSetting" style="padding-left: 5px; padding-right: 5px"> + <el-form-item label="瑙嗛鎴彇鏈�鐭椂闀�" style="width: 724px"> + <el-slider + id="cut_min_duration" + @input="min_len = min_video_len" + v-model="fakeObj.min" + :min="5 / 1.2" + :max="100" + :step="5 / 1.2" + show-stops + :show-tooltip="true" + :format-tooltip="formatTooltip" + ></el-slider> + <el-input-number + v-model="min_len" + @change="fakeObj.min = +(min_len / 1.2)" + controls-position="right" + :min="5" + :max="120" + size="small" + ></el-input-number + > s + </el-form-item> + <el-form-item label="瑙嗛鎴彇鏈�闀挎椂闀�" style="width: 724px"> + <el-slider + id="cut_max_duration" + v-model="fakeObj.max" + :min="5 / 1.2" + @input="max_len = max_video_len" + :max="100" + :step="5 / 1.2" + show-stops + :format-tooltip="formatTooltip" + :show-tooltip="true" + ></el-slider> + <el-input-number + v-model="max_len" + @change="fakeObj.max = +(max_len / 1.2)" + controls-position="right" + :min="5" + :max="120" + size="small" + ></el-input-number + > s + </el-form-item> + <div class="mt15 mb10 save-btn"> + <el-button type="primary" @click="submitAlarm" size="small">淇濆瓨</el-button> + </div> + </el-form> + </el-menu-item-group> + </el-submenu> + <!-- 瀵瑰鏈嶅姟IP 鏀瑰悕涓哄閮ㄧ綉缁�(鏂皌ab)--> + </el-menu> + </el-tab-pane> + + <!-- 鏃堕棿閰嶇疆 --> + <el-tab-pane label="鏃堕棿閰嶇疆" name="timeSet" v-if="isShow('settings:timeSet')"> + <el-form label-width="100px"> + <el-form-item label="璁惧鏃堕棿"> + {{ equipmentTime }} + </el-form-item> + <div style="text-align: left; padding: 10px 0px"> + <div class="time-type">NTP鏍℃椂</div> + <div style="padding: 10px 0px"> + <el-radio v-model="syncType" label="1">NTP鏍℃椂</el-radio> + </div> + </div> + + <el-form-item label="鏈嶅姟鍣ㄥ湴鍧�"> + <ip-input :ip="ntpServer" @on-blur="ntpServer = arguments[0]" :disabled="syncType === '2'"></ip-input> + </el-form-item> + + <el-form-item label="鏍℃椂鏃堕棿闂撮殧" style="width: 41.3%"> + <el-input-number + v-model.number="timeInterval" + :min="1" + :max="60" + placeholder="璇疯緭鍏�" + size="small" + :controls="false" + :disabled="syncType === '2'" + ></el-input-number + > 鍒嗛挓 + <el-button + type="text" + style="position: absolute; left: 330px" + :disabled="syncType === '2'" + @click="testNTP" + :loading="ntpTestLoading" + >娴嬭瘯</el-button + > + </el-form-item> + + <div style="text-align: left; padding: 10px 0px"> + <div class="time-type">鎵嬪姩鏍℃椂</div> + <div style="padding: 10px 0px"> + <el-radio v-model="syncType" label="2">鎵嬪姩鏍℃椂</el-radio> + </div> + </div> + + <el-form-item label="璁剧疆鏃堕棿"> + <el-date-picker + v-model="settime" + type="datetime" + placeholder="閫夋嫨鏃ユ湡鏃堕棿" + size="small" + value-format="yyyy-MM-dd HH:mm:ss" + :disabled="syncType === '1'" + ></el-date-picker> + <el-checkbox + v-model="settimeRadio" + style="margin-left: 12px" + @change="syncBrowser" + :disabled="syncType === '1'" + >鍚屾鏈绠楁満鏃堕棿</el-checkbox + > + </el-form-item> + + <el-col :span="12" style="padding-right: 40px"> + <el-form-item> + <el-button type="primary" @click="submitClock" size="small">淇濆瓨</el-button> + </el-form-item> + </el-col> + </el-form> + </el-tab-pane> + + <!-- 闆嗙兢绠$悊 --> + <el-tab-pane label="闆嗙兢绠$悊" name="cluster" v-if="isShow('settings:cluster')"> + <cluster-management></cluster-management> + </el-tab-pane> + <!-- <el-tab-pane label="澶栭儴璁块棶" name="fourth"> + <el-menu + :default-openeds="openeds" + background-color="#fff" + text-color="#303133" + active-text-color="#409EFF" + style="height: 100%;" + class="menu-css" + @open="menuOpen" + @close="menuClose" + > + <el-submenu index="0"> + <template slot="title"> + <b class="tree-font">澶栭儴璁块棶璁剧疆</b> + </template> + <el-menu-item-group class="item-group"> + <el-form :model="sysinfo" :rules="rules" ref="sysinfo" label-width="100px"> + <div class="flex-box"> + <label>璁剧疆澶栭儴IP</label> + <div style="width:300px;"> + <ip-input :ip="ipServer.ip" @on-blur="ipServer.ip = arguments[0]"></ip-input> + </div> + <el-checkbox label="閫夌敤鏈満IP" size="small" style="margin-left: 20px"></el-checkbox> + </div> + <div class="flex-box"> + <label>鍩熷悕</label> + <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> + </div> + <div class="mt15 mb10 save-btn"> + <el-button type="primary" @click="submitSysinfo" size="small">淇濆瓨</el-button> + </div> + </el-form> + </el-menu-item-group> + </el-submenu> + </el-menu> + </el-tab-pane>--> + <el-tab-pane label="鏉冮檺绠$悊" name="permission" v-if="isShow('settings:permission')"> + <authority-management v-if="activeName === 'permission'"></authority-management> + </el-tab-pane> + <el-tab-pane label="骞挎挱璁剧疆" name="broadcast" v-if="isShow('settings:broadcast')"> + <radio-set v-if="activeName === 'broadcast'"></radio-set> + </el-tab-pane> + </el-tabs> + </div> +</template> + +<script> +import { + getDevInfo, + getAlarmConfig, + saveDevInfo, + saveAlarmConfig, + getClockInfo, + saveClockInfo, + testNTPserver, + getResourceConfig, + saveResourceConfig +} from "@/api/system" + +import { isPort, isIPv4 } from "@/scripts/validate" +import ipInput from "@/components/subComponents/IPInput" +import TimeZones from "@/Pool/TimeZones" + +import ClusterManagement from "./ClusterManagement" +import AuthorityManagement from "./AuthorityManagement" +import RadioSet from "./RadioSet" +import config from "../../../../package.json" + +export default { + name: "BasicSettings", + components: { + ipInput, + ClusterManagement, + AuthorityManagement, + RadioSet + }, + computed: { + min_video_len() { + // return +(this.fakeObj.min * 1.2).toFixed(0); + return Math.round(this.fakeObj.min * 1.2) + }, + max_video_len() { + return Math.round(this.fakeObj.max * 1.2) + // return +(this.fakeObj.max * 1.2).toFixed(0); + }, + isAdmin() { + if (sessionStorage.getItem("userInfo") && sessionStorage.getItem("userInfo") !== "") { + let loginName = JSON.parse(sessionStorage.getItem("userInfo")).username + return loginName === "superadmin" || loginName === "basic" + } + return false + } + }, + directives: { + focus: { + inserted: function(el) { + el.querySelector("input").focus() + } + } + }, + data() { + return { + loading: true, + loadingText: "", + gutter: 10, + activeName: "sysInfo", + timezone: "", + syncType: "1", + ntpServer: "", + equipmentTime: "", + NYPport: "", + settime: "", + timeInterval: 10, + settimeRadio: false, + clockTimer: null, + browserTimer: null, + timestamp: 0, + sysinfo: {}, + alarmConf: {}, + min_len: 0, + max_len: 0, + fakeObj: { + min: 0, + max: 0 + }, + originNetConfig: { + ip: "", + gw: "", + mask: "", + dns: "" + }, + rules: { + ip: [ + { + required: true, + message: "璇疯緭鍏P鍦板潃", + trigger: "change" + }, + { validator: isIPv4, trigger: "change" } + ], + ServerIp: [ + { + required: true, + message: "璇疯緭鍏P鍦板潃", + trigger: "change" + }, + { validator: isIPv4, trigger: "change" } + ], + ServerPort: [ + { + required: true, + message: "璇疯緭鍏ョ鍙�", + trigger: "change" + }, + { validator: isPort, trigger: "change" } + ], + GbServerPort: [ + { + required: true, + message: "璇疯緭鍏ョ鍙�", + trigger: "change" + }, + { validator: isPort, trigger: "change" } + ], + gateway: [ + { + required: true, + message: "璇疯緭鍏ョ綉鍏�", + trigger: "change" + }, + { validator: isIPv4, trigger: "change" } + ], + dns: [ + { + required: true, + message: "璇疯緭鍏ns鍦板潃", + trigger: "change" + }, + { validator: isIPv4, trigger: "change" } + ], + server_name: [{ required: true, message: "璇疯緭鍏ュ悕绉�", trigger: "change" }], + subMask: [ + { + required: true, + message: "璇疯緭鍏ュ瓙缃戞帺鐮�", + trigger: "change" + }, + { validator: isIPv4, trigger: "change" } + ] + }, + openeds: ["0"], + ipServer: { + diyOrLocalIP: "1", + ip: "", + localhost: "", + localFilePort: "" + }, + locationCity: { + province: "", + city: "", + county: "", + provinceOptions: [], + cityOptions: [], + countyOptions: [] + }, + webPort: 0, + ntpTestLoading: false, + buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [] + } + }, + created() { + if (this.isShow("settings:sysInfo")) { + this.activeName = "sysInfo" + } else if (this.isShow("settings:timeSet")) { + this.activeName = "timeSet" + } else if (this.isShow("settings:cluster")) { + this.activeName = "cluster" + } else if (this.isShow("settings:permission")) { + this.activeName = "permission" + } else if (this.isShow("settings:broadcast")) { + this.activeName = "broadcast" + } + }, + mounted() { + this.$nextTick(() => { + this.initSysinfo() + // this.initAlarmConf(); + this.initResourceConfig() + this.initClockConf() + //this.markStartTime(); + }) + }, + beforeDestroy() { + clearTimeout(this.clockTimer) + clearInterval(this.browserTimer) + }, + methods: { + formatTooltip(v) { + return Math.round(v * 1.2) + }, + isShow(authority) { + return this.isAdmin || this.buttonAuthority.indexOf("," + authority + ",") > -1 + }, + initSysinfo() { + this.loadingText = "姝e湪鑾峰彇璁惧淇℃伅..." + getDevInfo() + .then((rsp) => { + if (rsp && rsp.success) { + this.sysinfo = rsp.data + this.sysinfo.gateway = this.sysinfo.gateway.trim() + this.originNetConfig.ip = this.sysinfo.ip + this.originNetConfig.mask = this.sysinfo.subMask + this.originNetConfig.gw = this.sysinfo.gateway.trim() + this.originNetConfig.dns = this.sysinfo.dns ? this.sysinfo.dns : "" + // this.alarmConf.min_video_len = rsp.data.min_video_len; + // this.alarmConf.max_video_len = rsp.data.max_video_len; + this.fakeObj.min = rsp.data.min_video_len / 1.2 + this.fakeObj.max = rsp.data.max_video_len / 1.2 + if (this.sysinfo.deviceInfo) { + let devInfo = this.sysinfo.deviceInfo + + this.sysinfo.cpuInfo = devInfo.cpu[0].modelName + this.sysinfo.disks = "( " + devInfo.disk + ") " + this.sysinfo.mem = (devInfo.mem.total / 1024 / 1024 / 1024).toFixed(2) + "GB" + // this.sysinfo.arch = devInfo.host.kernelArch; + this.sysinfo.uptime = this.secondsFormat(devInfo.host.uptime) + } + + if (!this.sysinfo.server_port) { + this.sysinfo.server_port = 7003 + } + + this.webPort = this.sysinfo.server_port + + this.sysinfo.webVersion = "V" + config.version + } + + this.loading = false + }) + .catch((err) => { + this.loading = false + }) + }, + secondsFormat(s) { + var day = Math.floor(s / (24 * 3600)) // Math.floor()鍚戜笅鍙栨暣 + var hour = Math.floor((s - day * 24 * 3600) / 3600) + var minute = Math.floor((s - day * 24 * 3600 - hour * 3600) / 60) + var second = s - day * 24 * 3600 - hour * 3600 - minute * 60 + return day + "澶�" + hour + "鏃�" + minute + "鍒�" + second + "绉�" + }, + initClockConf(ntpTest = false) { + getClockInfo().then((rsp) => { + if (rsp && rsp.success) { + this.timezone = rsp.data.time_zone + if (!ntpTest) { + this.syncType = rsp.data.ntp ? "1" : "2" + } + if (rsp.data.ntp) { + this.ntpServer = rsp.data.ntp_server + this.timeInterval = rsp.data.interval + } + this.timestamp = rsp.data.local_time + if (this.clockTimer === null) { + this.runClock() + } + } + }) + }, + runClock() { + this.equipmentTime = this.formatTime(++this.timestamp, "Y-M-D h:m:s") + this.clockTimer = setTimeout(() => { + this.runClock() + }, 1000) + }, + initAlarmConf() { + // getAlarmConfig().then(rsp => { + // if (rsp && rsp.success) { + // this.alarmConf = rsp.data; + // } + // }); + }, + initResourceConfig() { + getResourceConfig().then((rsp) => { + if (rsp && rsp.success) { + this.ipServer.diyOrLocalIP = rsp.data.ipType + this.ipServer.ip = rsp.data.serviceIp + this.ipServer.localhost = rsp.data.domain + this.ipServer.localFilePort = rsp.data.filePort + } + }) + }, + syncBrowser(enable) { + if (!enable) { + clearInterval(this.browserTimer) + } else { + this.browserTimer = setInterval(() => { + let timestamp = new Date().getTime() / 1000 + this.settime = this.formatTime(timestamp, "Y-M-D h:m:s") + }, 1000) + } + }, + markStartTime() { + let timestamp = new Date().getTime() / 1000 + this.settime = this.formatTime(timestamp, "Y-M-D h:m:s") + }, + submitSysinfo() { + this.$refs["sysinfo"].validate((valid) => { + if (valid) { + if ( + this.sysinfo.ip !== this.originNetConfig.ip || + this.sysinfo.subMask !== this.originNetConfig.mask || + this.sysinfo.dns !== this.originNetConfig.dns || + this.sysinfo.gateway !== this.originNetConfig.gw || + this.sysinfo.server_port !== this.originNetConfig.server_port || + this.sysinfo.server_domain !== this.originNetConfig.server_domain + ) { + if (this.sysinfo.ip !== this.originNetConfig.ip) { + let newUri = location.protocol + "//" + this.sysinfo.ip + ":" + this.sysinfo.server_port + var changeIPTimer = setTimeout(() => { + this.$alert( + '<strong>鎮ㄥ凡淇敼浜嗘湇鍔″櫒閰嶇疆, 璇烽噸鏂扮櫥褰�</strong><a target="_parent" href="' + + newUri + + '"> ' + + newUri + + "<a/>", + "鎻愮ず", + { + dangerouslyUseHTMLString: true + } + ) + }, 10000) + } + + this.$confirm("纭闇�瑕佷慨鏀规湇鍔″櫒閰嶇疆鍚楋紵", { + center: true, + cancelButtonClass: "comfirm-class-cancle", + confirmButtonClass: "comfirm-class-sure" + }) + .then(() => { + this.loading = true + this.loadingText = "姝e湪澶勭悊..." + saveDevInfo(this.sysinfo) + .then((rsp) => { + if (rsp && rsp.success) { + this.$notify({ + type: "success", + message: "鏈嶅姟鍣ㄩ厤缃垚鍔�" + }) + } + this.initSysinfo() + this.loading = false + }) + .catch((err) => { + this.loading = false + clearTimeout(changeIPTimer) + this.$notify({ + type: "error", + message: "淇濆瓨澶辫触" + }) + }) + }) + .catch((err) => {}) + } else { + saveDevInfo(this.sysinfo).then((rsp) => { + if (rsp && rsp.success) { + this.$notify({ + type: "success", + message: "鏈満淇℃伅淇敼鎴愬姛" + }) + this.initSysinfo() + } else { + this.$notify({ + type: "error", + message: "淇濆瓨澶辫触" + }) + } + }) + } + } else { + console.log("error submit!!") + return false + } + }) + }, + checkTimeZone(val) {}, + submitClock() { + if (this.syncType === "1") { + if (this.ntpServer === "") { + this.$notify({ + type: "error", + message: "NTP 鏈嶅姟鍣ㄥ湴鍧�涓嶈兘涓虹┖" + }) + return false + } else if (this.timeInterval === "") { + this.timeInterval = 1 + } + } else { + if (this.settime === "") { + this.$notify({ + type: "error", + message: "璁剧疆鏃堕棿涓嶈兘涓虹┖" + }) + return false + } + } + let requestBody = { + timeZone: this.timezone, + ntp: this.syncType === "1", + ntpServer: this.ntpServer, + interval: this.timeInterval, + newTime: this.settime + } + saveClockInfo(requestBody).then((rsp) => { + if (rsp && rsp.success) { + this.$notify({ + type: "success", + message: "璁剧疆鎴愬姛" + }) + } + this.initClockConf() + }) + }, + testNTP() { + this.ntpTestLoading = true + testNTPserver({ server: this.ntpServer }) + .then((rsp) => { + if (rsp && rsp.success) { + this.$notify({ + type: "success", + message: "鏃堕棿鍚屾鎴愬姛" + }) + } else { + this.$notify({ + type: "error", + message: "鏃堕棿鍚屾澶辫触" + }) + } + this.ntpTestLoading = false + this.initClockConf(true) + }) + .catch((err) => { + this.$notify({ + type: "error", + message: "鏃堕棿鍚屾澶辫触,璇锋鏌ユ湇鍔″櫒ip" + }) + this.ntpTestLoading = false + }) + }, + submitAlarm() { + saveAlarmConfig({ + min_video_len: this.min_video_len, + max_video_len: this.max_video_len + }).then((rsp) => { + if (rsp && rsp.success) { + this.$notify({ + type: "success", + message: "淇濆瓨鎴愬姛" + }) + } + }) + }, + // submitResource() { + // let regNum = /^[0-9]*$/; + // if (!this.vaildHost(this.ipServer.localhost)) { + // this.$notify({ + // type: "warning", + // message: "璇疯緭鍏ユ纭牸寮忓緱鍩熷悕锛�", + // }); + // return false; + // } + // if (!regNum.test(this.ipServer.localFilePort)) { + // this.$notify({ + // type: "warning", + // message: "璇疯緭鍏ユ纭殑绔彛鍙凤紒", + // }); + // return false; + // } + // saveResourceConfig({ + // domain: this.ipServer.localhost, + // ipType: this.ipServer.diyOrLocalIP, + // serviceIp: this.ipServer.ip, + // filePort: Number(this.ipServer.localFilePort), + // }).then((res) => { + // if (res && res.success) { + // this.$notify({ + // type: "success", + // message: "淇濆瓨鎴愬姛", + // }); + // } else { + // this.$notify({ + // type: "error", + // message: "淇濆瓨澶辫触", + // }); + // } + // }); + // }, + // onIpBlur(e, ip) { + // console.log(e, ip); + // }, + formatTime(number, format) { + var formateArr = ["Y", "M", "D", "h", "m", "s"] + var returnArr = [] + + var date = new Date(number * 1000) + returnArr.push(date.getFullYear()) + returnArr.push(this.formatNumber(date.getMonth() + 1)) + returnArr.push(this.formatNumber(date.getDate())) + + returnArr.push(this.formatNumber(date.getHours())) + returnArr.push(this.formatNumber(date.getMinutes())) + returnArr.push(this.formatNumber(date.getSeconds())) + + for (var i in returnArr) { + format = format.replace(formateArr[i], returnArr[i]) + } + return format + }, + + //鏁版嵁杞寲 + formatNumber(n) { + n = n.toString() + return n[1] ? n : "0" + n + }, + menuOpen(event) {}, + menuClose(event) {}, + // handleEdit(row) { + // console.log(row); + // row.edit = true; + // }, + // handleCancel(row) { + // row.edit = false; + // console.log(row); + // }, + // handleSave(row) { + // console.log(row); + // row.edit = false; + // this.$notify({ + // message: "淇濆瓨鎴愬姛", + // type: "success", + // }); + // }, + //鏍¢獙鍩熷悕 + vaildHost(str) { + 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) + } + } +} +</script> +<style lang="scss"> +.s-basic-setting { + width: 100%; + height: 100%; + .el-form { + width: 1000px; + + // margin-left: -80px; + .el-form-item { + text-align: left; + &.is-required:not(.is-no-asterisk) > .el-form-item__label:before { + margin-left: -8px; + } + .el-button { + float: right; + } + + .el-form-item__content { + text-align: left; + input { + max-width: 360px; + } + .el-date-editor.el-input, + .el-date-editor.el-input__inner { + width: 216px; + } + .el-checkbox__label { + padding-left: 5px; + } + } + + .el-form-item__label { + text-align: left; + } + } + } + .alarmSetting { + .el-input { + width: 100%; + // padding-right: 10px; + } + .el-select { + max-width: 113px; + } + .el-slider { + width: calc(100% - 120px); + display: inline-block; + padding-right: 30px; + box-sizing: border-box; + vertical-align: middle; + } + .el-input-number { + width: 100px; + display: inline-block; + .el-input { + width: 100%; + } + } + } + + .time-type { + height: 25px; + width: 413px; + line-height: 28px; + padding: 3px 23px; + font-size: 14px; + font-weight: 600; + background-color: #e4e6ed; + } + + #cut_min_duration { + .el-slider__bar { + background-color: #3d68e1; + } + .el-slider__button { + width: 10px; + height: 10px; + border: 4px solid #3d68e1; + } + } + + #cut_max_duration { + .el-slider__bar { + background-color: #ff9e6e; + } + .el-slider__button { + width: 10px; + height: 10px; + border: 4px solid #ff9e6e; + } + } + .menu-css, + .el-menu { + border-right: none; + list-style: none; + position: relative; + margin: 0; + padding-left: 10px; + background-color: #ffffff; + .el-submenu__title { + height: 35px; + line-height: 35px; + font-size: 14px; + color: #303133; + padding: 0 20px; + list-style: none; + cursor: pointer; + position: relative; + -webkit-transition: border-color 0.3s, background-color 0.3s, color 0.3s; + transition: border-color 0.3s, background-color 0.3s, color 0.3s; + -webkit-box-sizing: border-box; + box-sizing: border-box; + white-space: nowrap; + } + .tree-font { + font-family: PingFangSC-Medium; + font-size: 14px; + color: #222222; + text-align: left; + } + li { + text-align: left; + .el-submenu__title { + // border-bottom: solid 1px #e6e6e6; + padding-left: 10px !important; + background-color: #e4e6ed !important; + border-radius: 2px; + .el-submenu__icon-arrow { + position: absolute; + top: 50%; + right: auto; + left: 135px; + margin-top: -7px; + -webkit-transition: -webkit-transform 0.3s; + transition: -webkit-transform 0.3s; + transition: transform 0.3s; + transition: transform 0.3s, -webkit-transform 0.3s; + font-size: 12px; + } + } + } + } + .save-btn { + text-align: right; + position: relative; + right: 40px; + } +} +</style> +<style lang="scss" scoped> +.flex-box { + display: flex; + height: 50px; + label { + width: 120px; + } + .el-input { + width: 300px; + } +} +.desc-info { + margin-bottom: 14px; + .flex-box { + height: 40px; + line-height: 40px; + .xiangqin-label { + width: 80px; + } + } +} +.menu-css, +.el-menu { + border-right: none; + list-style: none; + position: relative; + margin: 0; + padding-left: 0; + background-color: #ffffff; + + .tree-font { + font-family: PingFangSC-Medium; + font-size: 14px; + color: #222222; + text-align: left; + } + li { + text-align: left; + .el-submenu__title { + .el-submenu__icon-arrow { + position: absolute; + top: 50%; + right: 0; + margin-top: -7px; + -webkit-transition: -webkit-transform 0.3s; + transition: -webkit-transform 0.3s; + transition: transform 0.3s; + transition: transform 0.3s, -webkit-transform 0.3s; + font-size: 12px; + } + } + } +} +</style> -- Gitblit v1.8.0