| | |
| | | }); |
| | | }; |
| | | |
| | | export const setServerName = (query: any) => { |
| | | return request({ |
| | | url: "/data/api-v/sysset/setSerName", |
| | | method: "post", |
| | | data: qs.stringify(query) |
| | | }); |
| | | }; |
| | | |
| | | export const getWireList = (query: any) => { |
| | | return request({ |
| | | url: "/data/api-v/sysset/getNetWorkCards", |
| | | method: "get", |
| | | data: (query) |
| | | }); |
| | | }; |
| | | export const setNetWorkCard = (query: any) => { |
| | | return request({ |
| | | url: "/data/api-v/sysset/setNetWorkCard", |
| | | method: "post", |
| | | data: qs.stringify(query) |
| | | }); |
| | | }; |
| | | |
| | | export const getNetWorkCardInfo = (query: any) => { |
| | | return request({ |
| | | url: "/data/api-v/sysset/getNetWorkCardInfo", |
| | | method: "post", |
| | | data: qs.stringify(query) |
| | | }); |
| | | }; |
| | | |
| | | export const deleteDate = (query: any) => { |
| | | return request({ |
| | | url: "/data/api-v/clearData/deleteEsData", |
| | |
| | | }); |
| | | }; |
| | | |
| | | export const deleteUser = (params: any) => { |
| | | return request({ |
| | | url: "/data/api-u/users/delUser", |
| | | method: "post", |
| | | data: params |
| | | }); |
| | | }; |
| | |
| | | </template> |
| | | <el-menu-item index="transferMemo">视频转储记录</el-menu-item> |
| | | <el-menu-item index="transferDeviceManage">转储设备管理</el-menu-item> |
| | | <el-menu-item index="lkgManage">LKG数据管理</el-menu-item> |
| | | <el-menu-item index="lkgManage">LKJ数据管理</el-menu-item> |
| | | </el-submenu> |
| | | <el-submenu index="7"> |
| | | <template slot="title"> |
| | |
| | | <template> |
| | | <div class="lkg-manage"> |
| | | <div class="import-btn"> |
| | | <label>上传LKG数据文件</label> |
| | | <label>上传LKJ数据文件</label> |
| | | <el-button |
| | | size="mini" |
| | | type="primary" |
| | |
| | | v-for="(item, index) in popDownArr" |
| | | :key="index" |
| | | :command="item" |
| | | >{{ item.CameraPosition }}</el-dropdown-item> |
| | | >{{ item.CameraPosition }}</el-dropdown-item |
| | | > |
| | | </el-dropdown-menu> |
| | | </el-dropdown> |
| | | |
| | |
| | | </template> |
| | | <div class="player-control"> |
| | | <div class="progress-bar"> |
| | | <el-tooltip placement="top" v-for="(item, index) in eventMarks" :key="index"> |
| | | <el-tooltip |
| | | placement="top" |
| | | v-for="(item, index) in eventMarks" |
| | | :key="index" |
| | | > |
| | | <div slot="content"> |
| | | {{ getTimeStr(item.offset) }} |
| | | <br /> |
| | |
| | | @click="dotJump(item.offset)" |
| | | ></div> |
| | | </el-tooltip> |
| | | <el-tooltip placement="top" v-for="(item, index) in labelMarks" :key="index"> |
| | | <el-tooltip |
| | | placement="top" |
| | | v-for="(item, index) in labelMarks" |
| | | :key="index" |
| | | > |
| | | <div slot="content"> |
| | | {{ getTimeStr(item.offset) }} |
| | | <br /> |
| | |
| | | v-show="isUnusual == 1" |
| | | type="primary" |
| | | @click="addLabel(curVideo)" |
| | | >添加标注</el-button> |
| | | >添加标注</el-button |
| | | > |
| | | </div> |
| | | <div class="flex-box fixed-height-box"> |
| | | <label v-if="!showTable">标注信息:</label> |
| | | <div class="mark-list" v-if="!showTable"> |
| | | <div class="mark" v-for="mark in curVideo.LableLst" :key="mark.ID"> |
| | | <div |
| | | class="mark" |
| | | v-for="mark in curVideo.LableLst" |
| | | :key="mark.ID" |
| | | > |
| | | <div class="time"> |
| | | <span> |
| | | {{ pad0(Math.floor(mark.Time / 60)) }}:{{ |
| | | pad0(mark.Time % 60) |
| | | pad0(mark.Time % 60) |
| | | }} |
| | | </span> |
| | | <i class="el-icon-edit" @click="editCurLabel(mark)"></i> |
| | |
| | | <div class="label-check"> |
| | | <p class="label">隐患问题:</p> |
| | | <el-checkbox-group v-model="labelCheckedList"> |
| | | <el-checkbox v-for="item in labelOptions" :key="item.ID" :label="item.ID">{{ item.Name }}</el-checkbox> |
| | | <el-checkbox |
| | | v-for="item in labelOptions" |
| | | :key="item.ID" |
| | | :label="item.ID" |
| | | >{{ item.Name }}</el-checkbox |
| | | > |
| | | </el-checkbox-group> |
| | | </div> |
| | | <div class="btns"> |
| | | <el-button @click="cancelLabelChecked" size="small">取消</el-button> |
| | | <el-button @click="submitLabelChecked" size="small" type="primary">确定</el-button> |
| | | <el-button @click="submitLabelChecked" size="small" type="primary" |
| | | >确定</el-button |
| | | > |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | |
| | | filters: { |
| | | fixPath(str) { |
| | | if (!str || str == undefined) { |
| | | return "" |
| | | return ""; |
| | | } |
| | | |
| | | return str.replace("/opt/vasystem", "") |
| | | } |
| | | return str.replace("/opt/vasystem", ""); |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | _this.$nextTick(() => { |
| | | _this.$refs[`player_${_this.curVideo.id}`][0].init(); |
| | | }); |
| | | // let _this = this; |
| | | // console.log(cmd) |
| | | // getCarVideos({ |
| | | // TrainNumber: cmd.TrainNumber, |
| | | // CarNumber: cmd.CarNumber, |
| | | // Driver1: cmd.Driver1, |
| | | // }).then((res) => { |
| | | // _this.allCurVideos = res.data; |
| | | // _this.curCamera = cmd.CameraPosition; |
| | | // _this.curRoomVideos = _this.allCurVideos.filter((item) => { |
| | | // return item.CameraPosition == cmd.CameraPosition; |
| | | // }); |
| | | // _this.curVideo = _this.curRoomVideos.find((item) => { |
| | | // return item.ID == cmd.ID; |
| | | // }); |
| | | // _this.$nextTick(() => { |
| | | // _this.$refs[`player_${_this.curVideo.ID}`][0].init(); |
| | | // }); |
| | | // }); |
| | | |
| | | }, |
| | | pad0(val) { |
| | | return val < 10 ? "0" + val : val; |
| | |
| | | CarNumber: v.CarNumber, |
| | | Driver1: v.Driver1, |
| | | }).then((res) => { |
| | | |
| | | res.data.forEach((item) => { |
| | | item.marks = _this.mergeMarks(item); |
| | | }); |
| | |
| | | _this.$nextTick(() => { |
| | | _this.$refs[`player_${_this.curVideo.id}`][0].init(); |
| | | let arr = _this.maxVideoTime.split(":"); |
| | | let min = +arr[1], sec = +arr[2]; |
| | | let min = +arr[1], |
| | | sec = +arr[2]; |
| | | _this.maxSecond = min * 60 + sec; |
| | | }); |
| | | }); |
| | |
| | | _this.curCamera = _this.popDownArr[0].CameraPosition; |
| | | } |
| | | }); |
| | | _this.popDownArr |
| | | _this.popDownArr; |
| | | }, |
| | | renderLabelOpts() { |
| | | let _this = this; |
| | |
| | | }, |
| | | refreshCurVideoLabel(video) { |
| | | let _this = this; |
| | | _this.popDownArr = [] |
| | | _this.popDownArr = []; |
| | | getRelatedVideoInfo({ GroupID: video.GroupID }).then((res) => { |
| | | res.data.forEach((item) => { |
| | | _this.popDownArr.push(item); |
| | |
| | | video.LableLst = item.LableLst; |
| | | } |
| | | }); |
| | | // res.data.forEach((d) => { |
| | | // if (item.ID === video.ID) { |
| | | // video.LableLst = item.LableLst; |
| | | // } |
| | | // }); |
| | | }); |
| | | _this.popDownArr |
| | | _this.popDownArr; |
| | | }, |
| | | checkVideo(video, index) { |
| | | this.refreshCurVideoLabel(video); |
| | | this.curVideo = video; |
| | | this.eventMarks = [] |
| | | this.labelMarks = [] |
| | | video.marks.forEach((item) => { |
| | | if (item.type == 0) { |
| | | this.eventMarks.push(item); |
| | | } else { |
| | | this.labelMarks.push(item); |
| | | } |
| | | }) |
| | | |
| | | this.videoArrs = this.allCurVideos.filter( |
| | | (item) => video.GroupID == item.GroupID |
| | | ); |
| | |
| | | }, |
| | | removeCurLabel(mark) { |
| | | let _this = this; |
| | | debugger |
| | | debugger; |
| | | let obj = { |
| | | ID: mark.ID, |
| | | VideoIds: mark.VideoIds |
| | | VideoIds: mark.VideoIds, |
| | | }; |
| | | delLabel(obj).then((rsp) => { |
| | | if (rsp && rsp.success) { |
| | |
| | | }, |
| | | mergeMarks(videoInfo) { |
| | | if (!videoInfo.EventLst || !videoInfo.LableLst) { |
| | | console.log("mergeMarks data null") |
| | | console.log("mergeMarks data null"); |
| | | return; |
| | | } |
| | | |
| | |
| | | height: 8px; |
| | | width: 6px; |
| | | z-index: 1; |
| | | background-color:yellowgreen ; |
| | | background-color: yellowgreen; |
| | | cursor: pointer; |
| | | -webkit-transform: translateX(-50%); |
| | | transform: translateX(-50%); |
| | |
| | | <div class="permission" v-if="inAccountDetail && isSetPermission"> |
| | | <div class="title">权限管理</div> |
| | | |
| | | <div class="line"> |
| | | <div class="name">实时监控</div> |
| | | <el-switch |
| | | v-model="isRealtime" |
| | | active-color="rgba(61, 104, 225, 1)" |
| | | > |
| | | </el-switch> |
| | | <div class="line-wrap" v-for="item in sysMenus" :key="item.id"> |
| | | <div class="line"> |
| | | <div class="name">{{ item.name }}</div> |
| | | <el-switch |
| | | v-model="item.selected" |
| | | active-color="rgba(61, 104, 225, 1)" |
| | | > |
| | | </el-switch> |
| | | </div> |
| | | <div v-if="item.children"> |
| | | <div class="line" style="margin-left:55px;" v-for="x in item.children" :key="x.id"> |
| | | <div class="name">{{ x.name }}</div> |
| | | <el-switch |
| | | v-model="x.selected" |
| | | active-color="rgba(61, 104, 225, 1)" |
| | | > |
| | | </el-switch> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="line"> |
| | | <div class="name">统计查询</div> |
| | | <el-switch v-model="isCount" active-color="rgba(61, 104, 225, 1)"> |
| | | </el-switch> |
| | | </div> |
| | | <div class="line"> |
| | | <div class="name">算力管理</div> |
| | | <el-switch |
| | | v-model="isCalculate" |
| | | active-color="rgba(61, 104, 225, 1)" |
| | | > |
| | | </el-switch> |
| | | </div> |
| | | |
| | | <div class="btns"> |
| | | <div class="cancel" @click="cancelSet">取消</div> |
| | | <div class="ok">保存</div> |
| | |
| | | getUsers, |
| | | updateUser, |
| | | updatePassword, |
| | | deleteUser, |
| | | getUserMenus, |
| | | getSysMenus, |
| | | } from "@/api/user"; |
| | | import switchBar from "../components/switchBar"; |
| | | import ipInput from "@/components/subComponents/IPInput"; |
| | |
| | | showYrsInput: false, |
| | | showMonthInput: false, |
| | | showDayInput: false, |
| | | |
| | | cameraInfo: false, |
| | | dependentScene: false, |
| | | timestamp: 0, |
| | | inAccountDetail: false, |
| | | isChangePw: false, |
| | |
| | | confirmPassword: "", |
| | | }, |
| | | activeAccountIndex: 0, |
| | | sysMenus: [], |
| | | addForm: { |
| | | userName: "", |
| | | nickName: "", |
| | |
| | | }); |
| | | |
| | | this.fetchUserList(); |
| | | this.fetchSysMenus(); |
| | | }, |
| | | methods: { |
| | | fetchUserList() { |
| | |
| | | syncBrowser(val) { |
| | | this.isSyncBrowser = val; |
| | | if (val == false) { |
| | | console.log(12121); |
| | | clearInterval(this.browserTimer); |
| | | } else { |
| | | this.browserTimer = setInterval(() => { |
| | |
| | | }, 1000); |
| | | } |
| | | }, |
| | | openChangePw() {}, |
| | | showAddAccount() { |
| | | this.inAccountDetail = false; |
| | | this.isAddAccount = true; |
| | |
| | | cancelChangePassword() { |
| | | this.isChangePw = false; |
| | | this.inAccountDetail = false; |
| | | }, |
| | | fetchSysMenus() { |
| | | getSysMenus().then((rsp) => { |
| | | if (rsp && rsp.success) { |
| | | this.sysMenus = rsp.data; |
| | | console.log(this.sysMenus); |
| | | } |
| | | }); |
| | | }, |
| | | saveAddAccount(formName) { |
| | | this.$refs[formName].validate((valid) => { |
| | |
| | | cancelButtonText: "取消", |
| | | }) |
| | | .then(() => { |
| | | this.$message({ |
| | | type: "success", |
| | | message: "删除成功!", |
| | | debugger; |
| | | deleteUser({ |
| | | ids: [this.activeAccountItem.id], |
| | | }).then((res) => { |
| | | if (res.success) { |
| | | this.fetchUserList(); |
| | | this.$message({ |
| | | type: "success", |
| | | message: "删除成功!", |
| | | }); |
| | | } else { |
| | | this.$message.warning("删除失败"); |
| | | } |
| | | }); |
| | | }) |
| | | .catch(() => {}); |
| | |
| | | openPermission() { |
| | | this.inAccountDetail = true; |
| | | this.isSetPermission = true; |
| | | getUserMenus({ |
| | | userId: this.activeAccountItem.id, |
| | | }).then((res) => { |
| | | if (res && res.success) { |
| | | res.data.menus.forEach(e => { |
| | | |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | // getUserMenus({ userId: row.id }).then(rsp => { |
| | | // if (rsp && rsp.success) { |
| | | // this.userMenus = rsp.data.menus.map(menu => { |
| | | // return menu.id |
| | | // }) |
| | | // } |
| | | // }) |
| | | }, |
| | | }, |
| | | |
| | | watch: { |
| | | isManual(v) { |
| | | this.isNtp = !v; |
| | |
| | | size="small"
|
| | | ></el-input>
|
| | | </el-form-item>
|
| | | <div class="save-btn">保存</div>
|
| | | <div class="save-btn" @click="saveServerName">保存</div>
|
| | | </el-form>
|
| | | </div>
|
| | |
|
| | |
| | |
|
| | | <div class="wire" v-if="activePage == 'wire' && !inWireDetail">
|
| | | <div
|
| | | |
| | | class="wire-bar"
|
| | | v-for="(item, i) in wireArr"
|
| | | :key="i"
|
| | | @click="checkWire(item)"
|
| | | @click.self="checkWire(item)"
|
| | | >
|
| | | <div class="name">{{ item.name }}</div>
|
| | | <div class="name">{{ "网络" + item.index }}</div>
|
| | |
|
| | | <div class="right">
|
| | | <span class="icon iconfont"></span>
|
| | |
| | | </div>
|
| | | </div>
|
| | | <div class="wire-detail" v-if="activePage == 'wire' && inWireDetail">
|
| | | <div class="title">网络设置</div>
|
| | | <div class="title">网络设置</div>
|
| | | <el-form
|
| | | :model="wireForm"
|
| | | :rules="wireFormRules"
|
| | | ref="wireForm"
|
| | | label-width="150px"
|
| | | >
|
| | | <el-form-item label="网络名称" prop="name">
|
| | | <div class="wifi-name">{{ 12123 }}</div>
|
| | | <el-form-item label="网络名称" prop="name">
|
| | | <div class="wifi-name">{{"网络" + activeWireItem.index }}</div>
|
| | | </el-form-item>
|
| | | <el-form-item label="网卡" prop="name">
|
| | | <div class="wifi-name">{{ 12123 }}</div>
|
| | | <el-form-item label="网卡" prop="ifname">
|
| | | <div class="wifi-name">{{ activeWireItem.name }}</div>
|
| | | </el-form-item>
|
| | | <el-form-item label="IP" prop="ip">
|
| | | <ip-input
|
| | |
| | |
|
| | | <el-form-item label="网关" prop="gateway">
|
| | | <ip-input
|
| | | :ip="ipv4Form.gateway"
|
| | | @on-blur="ipv4Form.gateway = arguments[0]"
|
| | | :ip="wireForm.gateway"
|
| | | @on-blur="wireForm.gateway = arguments[0]"
|
| | | ></ip-input>
|
| | | </el-form-item>
|
| | | <el-form-item label="首选DNS" prop="dns">
|
| | | <el-form-item label="DNS" prop="dns">
|
| | | <ip-input
|
| | | :ip="ipv4Form.dns1"
|
| | | @on-blur="ipv4Form.dns1 = arguments[0]"
|
| | | ></ip-input>
|
| | | </el-form-item>
|
| | | <el-form-item label="备用DNS" prop="dns">
|
| | | <ip-input
|
| | | :ip="ipv4Form.dns2"
|
| | | @on-blur="ipv4Form.dns2 = arguments[0]"
|
| | | :ip="wireForm.dns"
|
| | | @on-blur="wireForm.dns = arguments[0]"
|
| | | ></ip-input>
|
| | | </el-form-item>
|
| | | </el-form>
|
| | |
|
| | | <div class="btns">
|
| | | <div class="cancel" @click="cancelSaveWire">取消</div>
|
| | | <div class="ok" @click="saveWire">保存</div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | |
| | | addESNode,
|
| | | getEsClusterInfo,
|
| | | } from "@/api/clusterManage";
|
| | | import { setServerName, getWireList, setNetWorkCard,getNetWorkCardInfo } from "@/api/system";
|
| | |
|
| | | import cloudNode from "../components/CloudNode";
|
| | | import ipInput from "@/components/subComponents/IPInput";
|
| | | import { isIPv4 } from "@/scripts/validate";
|
| | |
| | | name: "",
|
| | | password: "",
|
| | | },
|
| | | wireArr: [{ name: "有线网络1" }, { name: "有线网络2" }],
|
| | | wireArr: [],
|
| | | inWifiDetail: false,
|
| | | wifiList: [{ name: "无线网络1" }, { name: "无线网络2" }],
|
| | | isOpenWifi: false,
|
| | | inWireDetail: false,
|
| | | wireForm:{
|
| | |
|
| | | wireForm: {
|
| | | dns:"",
|
| | | subMask:"",
|
| | | gateway:"",
|
| | | ip:"",
|
| | | },
|
| | | wireFormRules:{
|
| | |
|
| | | },
|
| | | wireFormRules: {},
|
| | | activePage: "net",
|
| | | activeWireItem: {},
|
| | | rules: {
|
| | | deviceName: [
|
| | | { required: true, message: "请输入设备名称", trigger: "change" },
|
| | |
| | | beforeDestroy() {},
|
| | | props: ["barName"],
|
| | | methods: {
|
| | | fetchWireList() {
|
| | | getWireList().then((res) => {
|
| | | if (res && res.success) {
|
| | | console.log(res);
|
| | | this.wireArr = res.data;
|
| | | }
|
| | | });
|
| | | },
|
| | | cancelSaveWire() {
|
| | | this.inWireDetail = false;
|
| | | },
|
| | | saveServerName() {
|
| | | setServerName({
|
| | | server_name: this.ruleForm.deviceName,
|
| | | server_port: this.ruleForm.port,
|
| | | }).then((res) => {
|
| | | console.log(res);
|
| | | if (res && res.success) {
|
| | | this.$message.success(res.data);
|
| | | }
|
| | | });
|
| | | },
|
| | | openRight(typ) {
|
| | | this.activePage = typ;
|
| | | if (typ == "wire") {
|
| | | this.fetchWireList();
|
| | | }
|
| | | },
|
| | | saveWire(ifname) {
|
| | | debugger
|
| | | let data ={
|
| | | ip: this.wireForm.ip,
|
| | | gateway: this.wireForm.gateway,
|
| | | dns: this.wireForm.dns,
|
| | | subMask: this.wireForm.subMask,
|
| | | ifname: this.activeWireItem.name,
|
| | | }
|
| | | setNetWorkCard(data).then((res) => {
|
| | | if (res&&res.success) {
|
| | | this.$message.success(res.data)
|
| | | }
|
| | | },(err) => {
|
| | | this.$message.error("保存失败:"+ err.msg)
|
| | | });
|
| | | },
|
| | | wifiControl(val) {},
|
| | | checkWifi() {
|
| | |
| | | },
|
| | | checkWire(item) {
|
| | | this.inWireDetail = true;
|
| | | this.activeWireItem = item;
|
| | | getNetWorkCardInfo({
|
| | | ifname:item.name
|
| | | }).then((res) => {
|
| | | if (res&&res.success) {
|
| | | debugger
|
| | | this.wireForm.ip = res.data.ip
|
| | | this.wireForm.gateway = res.data.gateway
|
| | | this.wireForm.dns = res.data.dns
|
| | | this.wireForm.subMask = res.data.subMask
|
| | | }
|
| | | })
|
| | | },
|
| | | },
|
| | | };
|
| | |
| | | <style lang="scss">
|
| | | .all {
|
| | | width: 100%;
|
| | | }
|
| | | .wire-detail {
|
| | | .btns {
|
| | | display: flex;
|
| | | justify-content: space-between;
|
| | | .cancel {
|
| | | background-color: rgba(240, 240, 240, 1);
|
| | | height: 40px;
|
| | | line-height: 40px;
|
| | | width: 48%;
|
| | | border-radius: 10px;
|
| | | }
|
| | | .ok {
|
| | | background-color: rgba(61, 104, 225, 1);
|
| | | height: 40px;
|
| | | line-height: 40px;
|
| | | width: 48%;
|
| | | color: #fff;
|
| | | border-radius: 10px;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | .cluster-content {
|
| | |
| | | overflow: auto;
|
| | | box-sizing: border-box;
|
| | | flex-shrink: 0;
|
| | | padding: 10px; border-right: 5px solid #f8f8f8;
|
| | | padding: 10px;
|
| | | border-right: 5px solid #f8f8f8;
|
| | |
|
| | | // background-color: lavender;
|
| | | .menu-item {
|