| | |
| | | type="border-card" |
| | | > |
| | | <!-- 本机信息 --> |
| | | <el-tab-pane label="本机信息" name="first"> |
| | | <el-tab-pane label="本机信息" name="sysInfo" v-if="isShow('settings:sysInfo')"> |
| | | <el-menu |
| | | :default-openeds="openeds" |
| | | background-color="#fff" |
| | |
| | | <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="xiangqin-label">设备ID</div> |
| | | <div class="xiangqing-info">{{sysinfo.server_id}}</div> |
| | | </el-col> |
| | | <el-col :span="12" class="flex-box"> |
| | | <!-- <el-col :span="12" class="flex-box"> |
| | | <div class="xiangqin-label">设备编号</div> |
| | | <div class="xiangqing-info">{{sysinfo.deviceNum}}</div> |
| | | </el-col> |
| | | </el-col>--> |
| | | <el-col :span="12" class="flex-box"> |
| | | <div class="xiangqin-label">设备型号</div> |
| | | <div class="xiangqing-info">{{sysinfo.deviceType}}</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.deviceSerialNum}}</div> |
| | | <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.webVersion}}</div> |
| | | </el-col> |
| | | <el-col :span="12" class="flex-box"> |
| | | <div class="xiangqin-label">通道个数</div> |
| | | <div class="xiangqing-info">{{sysinfo.channelCount}}</div> |
| | | <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">硬盘个数</div> |
| | | <div class="xiangqing-info">{{sysinfo.diskCount}}</div> |
| | | <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-menu-item-group> |
| | | </el-submenu> |
| | | <!-- 对外服务IP 改名为外部网络(新tab)--> |
| | | |
| | | </el-menu> |
| | | </el-tab-pane> |
| | | |
| | | <!-- 时间配置 --> |
| | | <el-tab-pane label="时间配置" name="second"> |
| | | <el-tab-pane label="时间配置" name="timeSet" v-if="isShow('settings:timeSet')"> |
| | | <el-form label-width="100px"> |
| | | <el-form-item label="设备时间"> |
| | | <!-- <el-input v-model="equipmentTime" placeholder="请输入" size="small"></el-input> --> |
| | | {{ equipmentTime }} |
| | | </el-form-item> |
| | | |
| | | <!-- <el-form-item label="时区" prop="timezone"> |
| | | <el-select |
| | | v-model="timezone" |
| | | placeholder="请选择" |
| | | style="width: 360px; height: 32px" |
| | | size="small" |
| | | @change="checkTimeZone" |
| | | > |
| | | <el-option |
| | | v-for="item in timeZoneOption" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> --> |
| | | <div style="text-align: left;padding: 10px 0px"> |
| | | <div class="time-type">NTP校时</div> |
| | | <div style="padding: 10px 0px;"> |
| | |
| | | style="position: absolute; left: 330px;" |
| | | :disabled="syncType === '2'" |
| | | @click="testNTP" |
| | | :loading="ntpTestLoading" |
| | | >测试</el-button> |
| | | </el-form-item> |
| | | |
| | |
| | | placeholder="选择日期时间" |
| | | size="small" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | |
| | | :disabled="syncType === '1'" |
| | | ></el-date-picker> |
| | | <el-checkbox |
| | |
| | | </el-tab-pane> |
| | | |
| | | <!-- 集群管理 --> |
| | | <el-tab-pane label="集群管理" name="third"> |
| | | <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-form> |
| | | </el-menu-item-group> |
| | | </el-submenu> |
| | | |
| | | </el-menu> |
| | | </el-tab-pane> --> |
| | | <el-tab-pane label="权限管理" name="user"> |
| | | <authority-management v-if="activeName === 'user'"></authority-management> |
| | | </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="radio"> |
| | | <radio-set v-if="activeName === 'radio'"></radio-set> |
| | | <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> |
| | |
| | | import ClusterManagement from "./ClusterManagement"; |
| | | import AuthorityManagement from "./AuthorityManagement"; |
| | | import RadioSet from "./RadioSet"; |
| | | import config from '../../../../package.json' |
| | | |
| | | export default { |
| | | name: "BasicSettings", |
| | |
| | | RadioSet |
| | | }, |
| | | computed: { |
| | | timeZoneOption() { |
| | | let options = [] |
| | | TimeZones.forEach(zone => { |
| | | options = options.concat(zone.utc.map(v => { |
| | | return { value: v, label: v } |
| | | })) |
| | | }) |
| | | return options |
| | | } |
| | | // timeZoneOption() { |
| | | // let options = [] |
| | | // TimeZones.forEach(zone => { |
| | | // options = options.concat(zone.utc.map(v => { |
| | | // return { value: v, label: v } |
| | | // })) |
| | | // }) |
| | | // return options |
| | | // }, |
| | | 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: { |
| | |
| | | loading: true, |
| | | loadingText: "", |
| | | gutter: 10, |
| | | activeName: "first", |
| | | activeName: "sysInfo", |
| | | timezone: "", |
| | | syncType: "1", |
| | | ntpServer: "", |
| | |
| | | cityOptions: [], |
| | | countyOptions: [] |
| | | }, |
| | | webPort: 0, |
| | | ntpTestLoading: false, |
| | | buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [], |
| | | }; |
| | | webPort: 0; |
| | | }, |
| | | 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.initResourceConfig(); |
| | | this.initClockConf(); |
| | | //this.markStartTime(); |
| | | |
| | | }); |
| | | }, |
| | | beforeDestroy() { |
| | |
| | | clearInterval(this.browserTimer); |
| | | }, |
| | | methods: { |
| | | isShow(authority) { |
| | | return this.isAdmin || this.buttonAuthority.indexOf("," + authority + ",") > -1 |
| | | }, |
| | | initSysinfo() { |
| | | this.loadingText = "正在获取设备信息..."; |
| | | getDevInfo().then(rsp => { |
| | |
| | | this.alarmConf.min_video_len = rsp.data.min_video_len; |
| | | this.alarmConf.max_video_len = rsp.data.max_video_len; |
| | | |
| | | 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; |
| | |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | initClockConf() { |
| | | 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; |
| | | this.syncType = rsp.data.ntp ? "1" : "2"; |
| | | if (!ntpTest) { |
| | | this.syncType = rsp.data.ntp ? "1" : "2"; |
| | | } |
| | | if (rsp.data.ntp) { |
| | | this.ntpServer = rsp.data.ntp_server; |
| | | this.timeInterval = rsp.data.interval; |
| | |
| | | }, |
| | | runClock() { |
| | | this.equipmentTime = this.formatTime(++this.timestamp, 'Y-M-D h:m:s'); |
| | | // console.log(this.equipmentTime) |
| | | this.clockTimer = setTimeout(() => { |
| | | this.runClock(); |
| | | }, 1000) |
| | |
| | | }, 1000) |
| | | } |
| | | }, |
| | | markStartTime(){ |
| | | markStartTime() { |
| | | let timestamp = new Date().getTime() / 1000; |
| | | this.settime = this.formatTime(timestamp, 'Y-M-D h:m:s') |
| | | }, |
| | |
| | | if (this.sysinfo.ip !== this.originNetConfig.ip) { |
| | | let newUri = location.protocol + "//" + this.sysinfo.ip + ":" + this.sysinfo.server_port; |
| | | var changeIPTimer = setTimeout(() => { |
| | | this.$alert('<strong>您已修改了服务器ip, 请重新登录</strong><a href="' + newUri + '"> ' + newUri + '<a/>', '提示', { |
| | | this.$alert('<strong>您已修改了服务器ip, 请重新登录</strong><a target="_parent" href="' + newUri + '"> ' + newUri + '<a/>', '提示', { |
| | | dangerouslyUseHTMLString: true |
| | | }); |
| | | }, 10000) |
| | |
| | | if (this.sysinfo.server_port !== this.webPort) { |
| | | let newUri = location.protocol + "//" + this.sysinfo.ip + ":" + this.sysinfo.server_port; |
| | | var changeIPTimer = setTimeout(() => { |
| | | this.$alert('<strong>您已修改了服务器端口, 请重新登录</strong><a href="' + newUri + '"> ' + newUri + '<a/>', '提示', { |
| | | this.$alert('<strong>您已修改了服务器端口, 请重新登录</strong><a target="_parent" href="' + newUri + '"> ' + newUri + '<a/>', '提示', { |
| | | dangerouslyUseHTMLString: true |
| | | }); |
| | | }, 5000) |
| | |
| | | } |
| | | }); |
| | | }, |
| | | checkTimeZone(val){ |
| | | debugger; |
| | | |
| | | checkTimeZone(val) { |
| | | |
| | | }, |
| | | submitClock() { |
| | | if (this.syncType === '1') { |
| | |
| | | message: "设置成功" |
| | | }); |
| | | } |
| | | this.initClockConf(); |
| | | }) |
| | | }, |
| | | testNTP() { |
| | | this.ntpTestLoading = true; |
| | | testNTPserver({ server: this.ntpServer }).then(rsp => { |
| | | if (rsp && rsp.success) { |
| | | this.$notify({ |
| | |
| | | message: "时间同步失败" |
| | | }); |
| | | } |
| | | this.ntpTestLoading = false; |
| | | this.initClockConf(true); |
| | | |
| | | }).catch(err => { |
| | | this.$notify({ |
| | | type: "error", |
| | | message: "时间同步失败,请检查服务器ip" |
| | | }); |
| | | this.ntpTestLoading = false; |
| | | }) |
| | | }, |
| | | submitAlarm() { |
| | |
| | | // margin-left: -80px; |
| | | .el-form-item { |
| | | text-align: left; |
| | | &.is-required:not(.is-no-asterisk)>.el-form-item__label:before{ |
| | | margin-left:-8px; |
| | | &.is-required:not(.is-no-asterisk) > .el-form-item__label:before { |
| | | margin-left: -8px; |
| | | } |
| | | .el-button { |
| | | float: right; |
| | |
| | | width: 300px; |
| | | } |
| | | } |
| | | .desc-info{ |
| | | .desc-info { |
| | | margin-bottom: 14px; |
| | | .flex-box{ |
| | | .flex-box { |
| | | height: 40px; |
| | | line-height: 40px; |
| | | .xiangqin-label{ |
| | | .xiangqin-label { |
| | | width: 80px; |
| | | } |
| | | } |