| | |
| | | :style="{ left: clientX + 'px', top: clientY + 'px' }" |
| | | > |
| | | <el-card :body-style="{ padding: '10px' }"> |
| | | <el-form :model="dialogForm" size="mini" :rules="rules" ref="dialogForm" label-width="70px"> |
| | | <el-form |
| | | :model="dialogForm" |
| | | size="mini" |
| | | :rules="rules" |
| | | ref="dialogForm" |
| | | label-width="70px" |
| | | > |
| | | <el-form-item label="名称:" prop="name"> |
| | | <el-input v-model="dialogForm.text"></el-input> |
| | | </el-form-item> |
| | | <div class="text-center pb-2"> |
| | | <el-button size="mini" type="primary" @click="submitForm">保存</el-button> |
| | | <el-button size="mini" type="primary" @click="submitForm" |
| | | >保存</el-button |
| | | > |
| | | <el-button size="mini" @click="hideDialogBox">取消</el-button> |
| | | </div> |
| | | </el-form> |
| | |
| | | |
| | | <script> |
| | | // import VJstree from "./jsTree"; |
| | | import ZTree from "./zTree/ztree" |
| | | import ZTree from "./zTree/ztree"; |
| | | |
| | | export default { |
| | | name: "GiantTreeMenu", |
| | | components: { |
| | | ZTree |
| | | ZTree, |
| | | }, |
| | | props: { |
| | | app: { |
| | | type: String, |
| | | default: "Video" |
| | | default: "Video", |
| | | }, |
| | | node: { |
| | | type: Array |
| | | type: Array, |
| | | }, |
| | | treeName: { |
| | | type: String, |
| | | default: "" |
| | | default: "", |
| | | }, |
| | | gb28181: { |
| | | type: Boolean, |
| | | default: false |
| | | default: false, |
| | | }, |
| | | height: { |
| | | type: Number, |
| | | default: 0 |
| | | default: 0, |
| | | }, |
| | | setting: { |
| | | type: Object, |
| | |
| | | default: function () { |
| | | return {}; |
| | | }, |
| | | }, |
| | | clickType: { |
| | | type: String, |
| | | default: "", |
| | | }, |
| | | }, |
| | | data() { |
| | |
| | | clientX: 0, |
| | | clientY: 0, |
| | | dialogForm: { |
| | | text: "" |
| | | text: "", |
| | | }, |
| | | rules: { |
| | | text: [ |
| | | { required: true, message: "请输入节点名称", trigger: "change" }, |
| | | { min: 2, max: 10, message: "长度在2到10个字", trigger: "change" } |
| | | ] |
| | | { min: 2, max: 10, message: "长度在2到10个字", trigger: "change" }, |
| | | ], |
| | | }, |
| | | curNodeTid: '', |
| | | curNodeTid: "", |
| | | }; |
| | | }, |
| | | created() { |
| | |
| | | if (newValue !== this.treeName) { |
| | | this.TreeDataPool.cleanTree(this.treeName); |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | methods: { |
| | | handleCreated: function (ztreeObj) { |
| | |
| | | // 摄像机配置切换时, 设置选中状态 |
| | | if (this.TreeDataPool.selectedNode.id) { |
| | | // 取消所有多选的节点,仅保留当前单选的节点 |
| | | this.TreeDataPool.selectedNodes = [this.TreeDataPool.selectedNode.id] |
| | | this.TreeDataPool.selectedNodes = [this.TreeDataPool.selectedNode.id]; |
| | | this.curNodeTid = this.TreeDataPool.selectedNode.tId; |
| | | //摄像机信息更新信息后,如果节点位置有变tId就不准了,this.TreeDataPool.selectedNode此时还是旧的信息 |
| | | let ztreeNodes = ztreeObj.getNodes(); |
| | | //var curNodeTid = ''; |
| | | _this.findTidByIdFromArr(ztreeNodes); |
| | | this.TreeDataPool.selectedNode.tId = _this.curNodeTid; |
| | | let node = this.ztreeObj.getNodeByTId(this.TreeDataPool.selectedNode.tId) |
| | | let node = this.ztreeObj.getNodeByTId( |
| | | this.TreeDataPool.selectedNode.tId |
| | | ); |
| | | |
| | | // 多选时, 选中单选单击的节点 |
| | | if (this.TreeDataPool.multiple) { |
| | |
| | | this.ztreeObj.checkNode(node, true, false, false); |
| | | } |
| | | |
| | | this.ztreeObj.selectNode(node, false, true) |
| | | this.ztreeObj.selectNode(node, false, true); |
| | | } |
| | | }, |
| | | |
| | |
| | | this.findTidByIdFromArr(arr[i].children); |
| | | } |
| | | } |
| | | |
| | | }, |
| | | onDblClick(evt, treeId, item) { |
| | | if (item.type !== "4" || this.app !== "Camera") { |
| | |
| | | this.TreeDataPool.activeVideoIndex !== "" && |
| | | this.TreeDataPool.activeVideoIndex <= videoArr.length - 1 |
| | | ) { |
| | | this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, undefined, this); |
| | | this.TreeDataPool.setVideoArr( |
| | | this.TreeDataPool.activeVideoIndex, |
| | | undefined, |
| | | this |
| | | ); |
| | | this.$nextTick(() => { |
| | | this.TreeDataPool.setVideoArr( |
| | | this.TreeDataPool.activeVideoIndex, |
| | | item, |
| | | this |
| | | ); |
| | | }) |
| | | }); |
| | | return; |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | if (nullVideoIndex === "") { |
| | | this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, undefined, this); |
| | | this.TreeDataPool.setVideoArr( |
| | | this.TreeDataPool.activeVideoIndex, |
| | | undefined, |
| | | this |
| | | ); |
| | | this.$nextTick(() => { |
| | | this.TreeDataPool.setVideoArr( |
| | | this.TreeDataPool.activeVideoIndex, |
| | | item, |
| | | this |
| | | ); |
| | | }) |
| | | }); |
| | | } else { |
| | | // this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, undefined, this); |
| | | this.$nextTick(() => { |
| | |
| | | item, |
| | | this |
| | | ); |
| | | }) |
| | | }); |
| | | this.TreeDataPool.activeVideoIndex = nullVideoIndex; |
| | | } |
| | | }, |
| | |
| | | this.dialogForm = { |
| | | text: "", |
| | | method: "add", |
| | | node: node.id |
| | | node: node.id, |
| | | }; |
| | | this.showDialogBox(event); |
| | | }, |
| | |
| | | method: "edit", |
| | | node: node.id, |
| | | alias: node.alias, |
| | | gb28181: this.gb28181 |
| | | gb28181: this.gb28181, |
| | | }; |
| | | this.showDialogBox(event); |
| | | }, |
| | |
| | | }, |
| | | submitForm() { |
| | | // 提交新增或者编辑区域节点表单 |
| | | this.$refs.dialogForm.validate(valid => { |
| | | this.$refs.dialogForm.validate((valid) => { |
| | | if (valid) { |
| | | if (this.dialogForm.method == "add") { |
| | | this.TreeDataPool.add(this.dialogForm.text, this.dialogForm.node); |
| | |
| | | this.showDialog = true; |
| | | }, |
| | | itemClick(evt, treeId, treeNode) { |
| | | if (this.clickType == "multiple") { |
| | | evt.target.parentNode.parentNode.querySelector(".chk").click(); |
| | | return; |
| | | } |
| | | |
| | | this.TreeDataPool.selectedNode = treeNode; |
| | | this.TreeDataPool.treeType = this.treeName; |
| | |
| | | this.TreeDataPool.countCheckedNodes(checkedNodes); |
| | | |
| | | // 保存一份数据 |
| | | this.TreeDataPool.activeTreeData = this.ztreeObj.getNodes() |
| | | this.TreeDataPool.activeTreeData = this.ztreeObj.getNodes(); |
| | | }, |
| | | //展开 |
| | | itemExpand(e, id, node) { |
| | | delete this.TreeDataPool.foldNodeList[node.id] |
| | | delete this.TreeDataPool.foldNodeList[node.id]; |
| | | }, |
| | | // 折叠 |
| | | itemCollapse(e, id, node) { |
| | | this.TreeDataPool.foldNodeList[node.id] = true |
| | | this.TreeDataPool.foldNodeList[node.id] = true; |
| | | }, |
| | | dropNode(node, item, draggedItem, e) { |
| | | // console.log('dropNode', node, item, draggedItem); |
| | | this.TreeDataPool.dropNode(draggedItem.id, item.id) |
| | | this.TreeDataPool.dropNode(draggedItem.id, item.id); |
| | | }, |
| | | showCameraPic(nodeId) { |
| | | this.TreeDataPool.showBaseImage(nodeId) |
| | | } |
| | | } |
| | | this.TreeDataPool.showBaseImage(nodeId); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | <style lang="scss" scoped> |
| | |
| | | <ip-input :ip="gb28181.ServerIp" @on-blur="gb28181.ServerIp = arguments[0]"></ip-input> |
| | | </el-form-item>--> |
| | | |
| | | <div style="text-align: left;margin-bottom: 16px;"> |
| | | <div style="text-align: left; margin-bottom: 16px">
|
| | | <el-radio-group v-model="gb28181.idType"> |
| | | <el-radio :label="0">输入已有ID</el-radio> |
| | | <el-radio :label="1">生成新的ID</el-radio> |
| | |
| | | style="position: absolute" |
| | | v-show="gb28181.idType === 1" |
| | | @click="newGBID" |
| | | >生成ID</el-button> |
| | | >生成ID</el-button
|
| | | >
|
| | | </el-form-item> |
| | | |
| | | <!-- <el-form-item label="国际服务器端口" prop="GbServerPort"> |
| | |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="国标端口" prop="GbServerPort"> |
| | | <el-input v-model.number="gb28181.GbServerPort" placeholder="请输入" size="small"></el-input> |
| | | <el-input
|
| | | v-model.number="gb28181.GbServerPort"
|
| | | placeholder="请输入"
|
| | | size="small"
|
| | | ></el-input>
|
| | | </el-form-item> |
| | | |
| | | <el-form-item label="开启鉴权" style="text-align: left"> |
| | |
| | | </el-form-item> |
| | | |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" @click="submitGB28281" size="small">保存</el-button> |
| | | <el-button type="primary" @click="submitGB28281" size="small"
|
| | | >保存</el-button
|
| | | >
|
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | |
| | | fit |
| | | highlight-current-row |
| | | style="width: 100%; color:#000" |
| | | :header-cell-style="{ background: '#f8f8f8', color: '#222222', height:'30px' }" |
| | | :header-cell-style="{
|
| | | background: '#f8f8f8',
|
| | | color: '#222222',
|
| | | height: '30px',
|
| | | }"
|
| | | > |
| | | <el-table-column type="index" label="序号" align="center" width="50"></el-table-column> |
| | | <el-table-column prop="name" label="名称" align="center"></el-table-column> |
| | | <el-table-column prop="publicid" label="ID" align="center"></el-table-column> |
| | | <el-table-column prop="ip" label="IP" align="center"></el-table-column> |
| | | <el-table-column
|
| | | type="index"
|
| | | label="序号"
|
| | | align="center"
|
| | | width="50"
|
| | | ></el-table-column>
|
| | | <el-table-column
|
| | | prop="name"
|
| | | label="名称"
|
| | | align="center"
|
| | | ></el-table-column>
|
| | | <el-table-column
|
| | | prop="publicid"
|
| | | label="ID"
|
| | | align="center"
|
| | | ></el-table-column>
|
| | | <el-table-column
|
| | | prop="ip"
|
| | | label="IP"
|
| | | align="center"
|
| | | ></el-table-column>
|
| | | <el-table-column prop="status" label="状态" align="center"> |
| | | <template slot-scope="scope"> |
| | | <span |
| | | :style="scope.row.alive ? `color:#047d19` : 'color:#f11a1a;' " |
| | | >{{scope.row.alive ? "在线": "离线"}}</span> |
| | | >{{ scope.row.alive ? "在线" : "离线" }}</span
|
| | | >
|
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="corp" label="备注" align="center"></el-table-column> |
| | | <el-table-column
|
| | | prop="corp"
|
| | | label="备注"
|
| | | align="center"
|
| | | ></el-table-column>
|
| | | </el-table> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="国标摄像机" name="cameras"> |
| | | <div style="text-align:left"> |
| | | <el-button type="primary" size="small" @click="updateCamerasFromVideosvr">刷新</el-button> |
| | | <el-button
|
| | | type="primary"
|
| | | size="small"
|
| | | @click="updateCamerasFromVideosvr"
|
| | | >刷新</el-button
|
| | | >
|
| | | </div> |
| | | <div class="camera-title"> |
| | | <b>国标摄像机配置</b> |
| | |
| | | :node="TreeDataPool.treeData" |
| | | :height="treeHeight" |
| | | :setting="treeSettings" |
| | | clickType="multiple"
|
| | | style="width:600px;min-height:500px" |
| | | /> |
| | | <div class="base-image" v-loading="TreeDataPool.baseImageLoading"> |
| | | <span>{{TreeDataPool.cameraNameForBaseImage}}</span> |
| | | <div class="camera-image" v-show="TreeDataPool.cameraNameForBaseImage.length"> |
| | | <div
|
| | | class="camera-image"
|
| | | v-show="TreeDataPool.cameraNameForBaseImage.length"
|
| | | >
|
| | | <img |
| | | :src="'data:image/png;base64,' + TreeDataPool.gb28181CameraBaseImage" |
| | | :src="
|
| | | 'data:image/png;base64,' + TreeDataPool.gb28181CameraBaseImage
|
| | | "
|
| | | width="450px" |
| | | alt |
| | | /> |
| | |
| | | / {{TreeDataPool.gb28181ChildNodeCount}} ) 路 |
| | | </span> |
| | | |
| | | <el-button type="primary" size="small" @click="saveChecked">保存</el-button> |
| | | <el-button type="primary" size="small" @click="saveChecked"
|
| | | >保存</el-button
|
| | | >
|
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | |
| | | getGb28181AreaList, |
| | | newGb28181ID, |
| | | getAllSubServer, |
| | | saveGb28181CamTree |
| | | } from './api' |
| | | saveGb28181CamTree,
|
| | | } from "./api";
|
| | | |
| | | import TreeMenu from "@/components/giantTree/index"; |
| | | import { isPort, isIPv4 } from '@/scripts/validate' |
| | | import bus from '@/plugin/bus' |
| | | import { isPort, isIPv4 } from "@/scripts/validate";
|
| | | import bus from "@/plugin/bus";
|
| | | export default { |
| | | name: 'Gb28181Setting', |
| | | name: "Gb28181Setting",
|
| | | components: { |
| | | TreeMenu |
| | | TreeMenu,
|
| | | }, |
| | | directives: { |
| | | focus: { |
| | | inserted: function (el) { |
| | | el.querySelector('input').focus() |
| | | } |
| | | } |
| | | el.querySelector("input").focus();
|
| | | },
|
| | | },
|
| | | }, |
| | | |
| | | data() { |
| | |
| | | treeHeight: 750, |
| | | loading: false, |
| | | loadingText: "", |
| | | openeds: ['0'], |
| | | openeds: ["0"],
|
| | | gb28181: {}, |
| | | subDevTable: [], |
| | | idType: 1, |
| | | treeSettings: { |
| | | check: { |
| | | enable: true |
| | | } |
| | | enable: true,
|
| | | },
|
| | | }, |
| | | rules: { |
| | | ip: [ |
| | | { |
| | | required: true, |
| | | message: '请输入IP地址', |
| | | trigger: 'change' |
| | | message: "请输入IP地址",
|
| | | trigger: "change",
|
| | | }, |
| | | { validator: isIPv4, trigger: 'change' } |
| | | { validator: isIPv4, trigger: "change" },
|
| | | ], |
| | | ServerIp: [ |
| | | { |
| | | required: true, |
| | | message: '请输入IP地址', |
| | | trigger: 'change' |
| | | message: "请输入IP地址",
|
| | | trigger: "change",
|
| | | }, |
| | | { validator: isIPv4, trigger: 'change' } |
| | | { validator: isIPv4, trigger: "change" },
|
| | | ], |
| | | ServerPort: [ |
| | | { |
| | | required: true, |
| | | message: '请输入端口', |
| | | trigger: 'change' |
| | | message: "请输入端口",
|
| | | trigger: "change",
|
| | | }, |
| | | { validator: isPort, trigger: 'change' } |
| | | { validator: isPort, trigger: "change" },
|
| | | ], |
| | | GbServerPort: [ |
| | | { |
| | | required: true, |
| | | message: '请输入端口', |
| | | trigger: 'change' |
| | | message: "请输入端口",
|
| | | trigger: "change",
|
| | | }, |
| | | { validator: isPort, trigger: 'change' } |
| | | ] |
| | | { validator: isPort, trigger: "change" },
|
| | | ],
|
| | | }, |
| | | locationCity: { |
| | | province: '', |
| | | city: '', |
| | | county: '', |
| | | province: "",
|
| | | city: "",
|
| | | county: "",
|
| | | provinceOptions: [], |
| | | cityOptions: [], |
| | | countyOptions: [] |
| | | } |
| | | } |
| | | countyOptions: [],
|
| | | },
|
| | | };
|
| | | }, |
| | | mounted() { |
| | | this.TreeDataPool.multiple = true; |
| | | |
| | | // 记录目录是否折叠 |
| | | let foldList = localStorage.getItem("ztree_fold_list") |
| | | let foldList = localStorage.getItem("ztree_fold_list");
|
| | | if (foldList) { |
| | | this.TreeDataPool.foldNodeList = JSON.parse(foldList) |
| | | this.TreeDataPool.foldNodeList = JSON.parse(foldList);
|
| | | } |
| | | |
| | | this.initGB28181Conf(); |
| | |
| | | methods: { |
| | | hanleTabClick(tab, event) { |
| | | if (this.activeName == "subordinates") { |
| | | getAllSubServer().then(rsp => { |
| | | getAllSubServer().then((rsp) => {
|
| | | if (rsp && rsp.success) { |
| | | this.subDevTable = rsp.data; |
| | | } |
| | | }) |
| | | });
|
| | | } else if (this.activeName == "cameras") { |
| | | this.getCamerasFromVideosvr(); |
| | | } |
| | | |
| | | |
| | | }, |
| | | async getCamerasFromVideosvr() { |
| | | this.loading = true; |
| | |
| | | this.loading = false; |
| | | }, |
| | | saveChecked() { |
| | | localStorage.setItem('ztree_fold_list', JSON.stringify(this.TreeDataPool.foldNodeList)) |
| | | localStorage.setItem(
|
| | | "ztree_fold_list",
|
| | | JSON.stringify(this.TreeDataPool.foldNodeList)
|
| | | );
|
| | | |
| | | if (this.TreeDataPool.gb28181CheckedCount > 500) { |
| | | this.$message({ |
| | | type: "warning", |
| | | message: "最多仅支持选择500路摄像机. 请重新选择" |
| | | }) |
| | | message: "最多仅支持选择500路摄像机. 请重新选择",
|
| | | });
|
| | | |
| | | return; |
| | | } |
| | | |
| | | this.loading = true; |
| | | |
| | | let treeData = this.TreeDataPool.newTreeByChecked(this.TreeDataPool.activeTreeData) |
| | | let treeData = this.TreeDataPool.newTreeByChecked(
|
| | | this.TreeDataPool.activeTreeData
|
| | | );
|
| | | |
| | | saveGb28181CamTree({ checkedMenus: treeData }).then(rsp => { |
| | | saveGb28181CamTree({ checkedMenus: treeData })
|
| | | .then((rsp) => {
|
| | | if (rsp && rsp.success) { |
| | | this.$message({ |
| | | type: "success", |
| | | message: "保存成功" |
| | | }) |
| | | message: "保存成功",
|
| | | });
|
| | | } |
| | | this.loading = false; |
| | | }).catch(err => { |
| | | })
|
| | | .catch((err) => {
|
| | | this.$message({ |
| | | type: "error", |
| | | message: "保存失败" |
| | | }) |
| | | message: "保存失败",
|
| | | });
|
| | | this.loading = false; |
| | | }) |
| | | });
|
| | | }, |
| | | initGB28181Conf() { |
| | | getGB28181Config().then(rsp => { |
| | | getGB28181Config().then((rsp) => {
|
| | | if (rsp && rsp.success) { |
| | | this.gb28181 = rsp.data |
| | | this.gb28181 = rsp.data;
|
| | | //this.gb28181.idType = 0; |
| | | |
| | | this.$set(this.gb28181, 'idType', 0) |
| | | this.$refs['gb28181'].resetFields(); |
| | | this.$set(this.gb28181, "idType", 0);
|
| | | this.$refs["gb28181"].resetFields();
|
| | | } |
| | | }) |
| | | getGb28181AreaList().then(rsp => { |
| | | });
|
| | | getGb28181AreaList().then((rsp) => {
|
| | | if (rsp && rsp.success) { |
| | | this.locationCity.provinceOptions = rsp.data |
| | | this.locationCity.provinceOptions = rsp.data;
|
| | | } |
| | | }) |
| | | });
|
| | | }, |
| | | submitGB28281() { |
| | | this.$refs['gb28181'].validate(valid => { |
| | | this.$refs["gb28181"].validate((valid) => {
|
| | | if (valid) { |
| | | saveGB28181Config(this.gb28181).then(rsp => { |
| | | saveGB28181Config(this.gb28181).then((rsp) => {
|
| | | if (rsp && rsp.success) { |
| | | this.$notify({ |
| | | type: 'success', |
| | | message: 'GB28181设置保存成功' |
| | | }) |
| | | type: "success",
|
| | | message: "GB28181设置保存成功",
|
| | | });
|
| | | } |
| | | }) |
| | | });
|
| | | } else { |
| | | console.log('error submit!!') |
| | | return false |
| | | console.log("error submit!!");
|
| | | return false;
|
| | | } |
| | | }) |
| | | });
|
| | | }, |
| | | changeProvince() { |
| | | let pid = this.locationCity.province |
| | | getGb28181AreaList({ parentId: pid }).then(rsp => { |
| | | 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() |
| | | 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 => { |
| | | 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 |
| | | this.locationCity.countyOptions = rsp.data;
|
| | | this.locationCity.county = this.locationCity.countyOptions[0].id;
|
| | | } |
| | | }) |
| | | });
|
| | | }, |
| | | newGBID() { |
| | | let cCode = this.locationCity.county + '' |
| | | newGb28181ID({ code: cCode }).then(rsp => { |
| | | let cCode = this.locationCity.county + "";
|
| | | newGb28181ID({ code: cCode }).then((rsp) => {
|
| | | if (rsp && rsp.success) { |
| | | this.gb28181.PublicId = rsp.data |
| | | this.gb28181.PublicId = rsp.data;
|
| | | } |
| | | }) |
| | | });
|
| | | }, |
| | | menuOpen() { |
| | | |
| | | }, |
| | | menuClose() { |
| | | |
| | | }, |
| | | menuOpen() {},
|
| | | menuClose() {},
|
| | | toOpenMenuList(e) { |
| | | let t = e.clientY - this.$el.offsetTop + 30; |
| | | let l = e.clientX - this.$el.offsetLeft; |
| | | |
| | | window.parent.postMessage({ source: location.href.split('/')[location.href.split('/').length - 1], trigger: 'contextmenu', menuT: t, menuL: l }, "*"); |
| | | window.parent.postMessage(
|
| | | {
|
| | | source: location.href.split("/")[location.href.split("/").length - 1],
|
| | | trigger: "contextmenu",
|
| | | menuT: t,
|
| | | menuL: l,
|
| | | },
|
| | | "*"
|
| | | );
|
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | },
|
| | | },
|
| | | };
|
| | | </script> |
| | | <style lang="scss"> |
| | | .s-system-manage { |