| | |
| | | // 计算系统信息 |
| | | let res: any |
| | | if(sessionStorage.getItem("clusterId")) { |
| | | res = await clusterSysInfo({}); |
| | | res = await clusterSysInfo({ |
| | | clusterId: "", |
| | | }); |
| | | } |
| | | else { |
| | | res = await devicesSysInfo({ |
| | |
| | | } |
| | | |
| | | async fetchGbTree() { |
| | | // 后门 |
| | | // const rsp: any = await getGB28181CameraTree({ |
| | | // searchType: this.searchCamType, |
| | | // cameraName: this.searchInput |
| | | // }) |
| | | const rsp: any = await getGB28181CameraTree({ |
| | | parentId: "", |
| | | searchType: this.searchCamType, |
| | | cameraName: this.searchInput |
| | | }) |
| | | |
| | | // if (rsp && rsp.success) { |
| | | // this.gb28181Data = rsp.data ? rsp.data : [] |
| | | // if (this.gb28181Data && this.gb28181Data.length > 0) { |
| | | // this.sortTreeData(this.gb28181Data) |
| | | // } |
| | | if (rsp && rsp.success) { |
| | | this.gb28181Data = rsp.data.treeMenu ? rsp.data.treeMenu : [] |
| | | if (this.gb28181Data && this.gb28181Data.length > 0) { |
| | | this.sortTreeData(this.gb28181Data) |
| | | } |
| | | |
| | | // this.gb28181DataPure = JSON.parse(JSON.stringify(this.gb28181Data)) |
| | | // this.isFold(this.gb28181Data) |
| | | // } |
| | | this.gb28181DataPure = JSON.parse(JSON.stringify(this.gb28181Data)) |
| | | this.isFold(this.gb28181Data) |
| | | } |
| | | } |
| | | |
| | | async fetchTreeData() { |
| | |
| | | export const getGB28181CameraTree = (query: any) => { |
| | | return request({ |
| | | url: "/saas/api-s/gb28181/tree", |
| | | method: "get", |
| | | params: query |
| | | method: "post", |
| | | data: query |
| | | }); |
| | | }; |
| | | |
| | |
| | | }); |
| | | }; |
| | | |
| | | //刷新国标底图 |
| | | export const updategb28181 = (data: any) => { |
| | | return request({ |
| | | url: "/saas/api-s/gb28181/camera/capture", |
| | | method: "post", |
| | | data:data |
| | | }); |
| | | }; |
| | | |
| | | export const updateCameraTask = (params: any) => { |
| | | return request({ |
| | | url: "/data/api-v/cameraTask/updateCameraTaskStatus", |
| | |
| | | //获取集群下cpu |
| | | export const clusterSysInfo = (data: any) => { |
| | | return request({ |
| | | url: "/saas/api-d/device/clusterSysInfo", |
| | | url: "/saas/api-d/device/userClusterInfo", |
| | | method: "post", |
| | | data |
| | | }) |
| | |
| | | </router-link> |
| | | <div class="title" @click="$router.push('/')">工业互联网平台</div> |
| | | <div class="label" @click="$router.push('/')">首页</div> |
| | | <div class="label">云服务</div> |
| | | <!-- <div class="label">云服务</div> --> |
| | | <div class="label" @click="$router.push('/manageCenter')">管理中心</div> |
| | | <div class="label" @click="$router.push('/product')">应用商城</div> |
| | | </div> |
| | |
| | | > |
| | | <div class="iconList" slot="suffix"> |
| | | <i class="search iconfont" v-if="!isShow"></i> |
| | | <i class="search iconfont" v-if="isShow"></i> |
| | | <i class="search iconfont" @click="search" v-if="isShow" |
| | | ></i |
| | | > |
| | | <i class="del iconfont" v-if="isShow" @click="showInputBox(false)" |
| | | ></i |
| | | > |
| | |
| | | <div class="hotKey"> |
| | | <div class="title">热门搜索</div> |
| | | <ul class="keyCard"> |
| | | <li class="keyItem" v-for="(item, index) in hotKeyArr" :key="index"> |
| | | <li |
| | | class="keyItem" |
| | | @click="jumpToSearch(item)" |
| | | v-for="(item, index) in hotKeyArr" |
| | | :key="index" |
| | | > |
| | | {{ item }} |
| | | </li> |
| | | x |
| | | </ul> |
| | | </div> |
| | | |
| | | <div class="historyKey"> |
| | | <!-- <div class="historyKey"> |
| | | <div class="title colorLight">历史搜索</div> |
| | | |
| | | <ul class="keyCard"> |
| | |
| | | {{ item }} |
| | | </li> |
| | | </ul> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | |
| | | <!-- 遮罩层 --> |
| | |
| | | return { |
| | | keyWord: "", //输入框内容 |
| | | isShow: false, //显示下拉框 |
| | | hotKeyArr: ["算法", "智能AI", "云服务", "管理中心", "实时音视频", "短信"], //热门关键词 |
| | | hotKeyArr: ["打电话", "离岗", "睡岗", "入侵", "离岗", "安全帽"], //热门关键词 |
| | | historyKeyArr: ["云服务", "算法", "管理服务", "应用"], //历史关键词 |
| | | isShowBox: false, //输入下拉框 |
| | | userInfo: null, //用户信息 |
| | |
| | | showInputBox(toggle) { |
| | | this.isShow = toggle; |
| | | this.isShowBox = toggle; |
| | | this.keyWord = ""; |
| | | this.$emit("showInputBox", toggle); |
| | | }, |
| | | |
| | |
| | | }, |
| | | }); |
| | | }, |
| | | |
| | | search() { |
| | | this.$router.push({ |
| | | path: "/product", |
| | | query: { |
| | | keyWord: this.keyWord, |
| | | }, |
| | | }); |
| | | }, |
| | | |
| | | jumpToSearch(keyWord) { |
| | | this.$router.push({ |
| | | path: "/product", |
| | | query: { |
| | | keyWord, |
| | | }, |
| | | }); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | |
| | | </template> |
| | | <script> |
| | | import canvasDialog from "./Dialog"; |
| | | import { updateSnapshot } from "@/api/camera"; |
| | | import { updateSnapshot, updategb28181 } from "@/api/camera"; |
| | | export default { |
| | | name: "myCanvas", |
| | | components: { |
| | |
| | | if (this.currentCamera.cameraId) { |
| | | let _this = this; |
| | | |
| | | if (_this.currentCamera.type === 1) { |
| | | await updategb28181({ |
| | | id: _this.currentCamera.cameraId, |
| | | }).then((res) => { |
| | | if (res.data.cameraId === _this.currentCamera.cameraId) { |
| | | _this.baseImg = "data:image/png;base64," + res.data.base64; |
| | | _this.$emit( |
| | | "refresh", |
| | | _this.baseImg, |
| | | _this.currentCamera.cameraName |
| | | ); |
| | | _this.$forceUpdate(); |
| | | _this.$notify({ |
| | | type: "success", |
| | | message: "底图已刷新", |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | this.$emit("changeLoading", false); |
| | | |
| | | return; |
| | | } |
| | | |
| | | await updateSnapshot({ |
| | | id: _this.currentCamera.cameraId, |
| | | name: _this.currentCamera.cameraName, |
| | |
| | | ), |
| | | }, |
| | | { |
| | | path: "/register/resetPassword", |
| | | component: () => |
| | | import(/* webpackChunkName: "about" */ "../views/register/resetPassword"), |
| | | }, |
| | | { |
| | | path: "/login", |
| | | name: "login", |
| | | component: () => import(/* webpackChunkName: "about" */ "../views/login"), |
| | |
| | | if(config.url === '/saas/api-s/camera/rule/getLinkRulesByCameraIds') { |
| | | config.data.devId = sessionStorage.getItem('cameraDevId') |
| | | } |
| | | |
| | | //后门 |
| | | if(config.url === '/saas/api-d/device/userClusterInfo') { |
| | | config.data.clusterId = '' |
| | | } |
| | | |
| | | } |
| | | |
| | |
| | | { |
| | | label: "应用总数", |
| | | count: "", |
| | | img: "/images/equipmentManagement/应用_红.png", |
| | | img: "/images/equipmentManagement/app.png", |
| | | color: "red", |
| | | }, |
| | | { |
| | |
| | | <el-table-column label="操作" min-width="180"> |
| | | <template slot-scope="scope"> |
| | | <!-- 加入 --> |
| | | <span |
| | | class="iconfont option" |
| | | @click="joinCluster(scope.row)" |
| | | <el-tooltip |
| | | content="加入集群" |
| | | placement="top" |
| | | v-if="!scope.row.clusterId" |
| | | :class="{ disable: scope.row.isOnline != 1 }" |
| | | ></span |
| | | > |
| | | <span |
| | | class="iconfont option" |
| | | @click="joinCluster(scope.row)" |
| | | :class="{ disable: scope.row.isOnline != 1 }" |
| | | ></span |
| | | > |
| | | </el-tooltip> |
| | | <!-- 退出 --> |
| | | <span |
| | | class="iconfont option" |
| | | @click="quitCluster(scope.row)" |
| | | v-else |
| | | :class="{ disable: scope.row.isOnline != 1 }" |
| | | ></span |
| | | > |
| | | <el-tooltip content="退出集群" placement="top" v-else> |
| | | <span |
| | | class="iconfont option" |
| | | @click="quitCluster(scope.row)" |
| | | :class="{ disable: scope.row.isOnline != 1 }" |
| | | ></span |
| | | > |
| | | </el-tooltip> |
| | | <!-- 算法详情 --> |
| | | <span |
| | | class="iconfont option" |
| | | :class="{ disable: scope.row.isOnline != 1 }" |
| | | @click="algorithmDetail(scope.row)" |
| | | ></span |
| | | > |
| | | <el-tooltip content="应用详情" placement="top"> |
| | | <span |
| | | class="iconfont option" |
| | | :class="{ disable: scope.row.isOnline != 1 }" |
| | | @click="algorithmDetail(scope.row)" |
| | | ></span |
| | | > |
| | | </el-tooltip> |
| | | <!-- 设备详情 --> |
| | | <span |
| | | class="iconfont option" |
| | | :class="{ disable: scope.row.isOnline != 1 }" |
| | | @click="checkDetail(scope.row)" |
| | | ></span |
| | | > |
| | | <el-tooltip content="设备详情" placement="top"> |
| | | <span |
| | | class="iconfont option" |
| | | :class="{ disable: scope.row.isOnline != 1 }" |
| | | @click="checkDetail(scope.row)" |
| | | ></span |
| | | > |
| | | </el-tooltip> |
| | | <!-- 解绑 --> |
| | | <span |
| | | class="iconfont option" |
| | | @click="Untying(scope.row)" |
| | | :class="{ disable: scope.row.isOnline != 1 }" |
| | | ></span |
| | | > |
| | | <el-tooltip content="解除绑定" placement="top"> |
| | | <span |
| | | class="iconfont option" |
| | | @click="Untying(scope.row)" |
| | | :class="{ disable: scope.row.isOnline != 1 }" |
| | | ></span |
| | | > |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | </div> |
| | | |
| | | <div class="footer"> |
| | | <div class="button addModel">添加到模板</div> |
| | | <!-- <div class="button addModel">添加到模板</div> --> |
| | | <div class="button addRule" @click="addRule">添加新场景</div> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | <div class="footer"> |
| | | <div class="button addModel">添加到模板</div> |
| | | <!-- <div class="button addModel">添加到模板</div> --> |
| | | <div class="button addRule" @click="addRule">添加新场景</div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="close iconfont" @click="close()"></div> |
| | | |
| | | <div class="sdkList scroll"> |
| | | <img |
| | | <el-tooltip |
| | | v-for="(item, index) in this.TaskMange.list1" |
| | | :key="index" |
| | | :src="item.iconBlob" |
| | | alt="" |
| | | draggable="true" |
| | | @dragstart="dragstart(item)" |
| | | @dragend="dragleave" |
| | | /> |
| | | :content="item.sdk_name" |
| | | placement="top" |
| | | > |
| | | <img |
| | | :src="item.iconBlob" |
| | | alt="" |
| | | draggable="true" |
| | | @dragstart="dragstart(item)" |
| | | @dragend="dragleave" |
| | | /> |
| | | </el-tooltip> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | <script> |
| | | import bus from "@/plugin/bus"; |
| | | export default { |
| | | created() { |
| | | console.log(121212); |
| | | console.log(this.TaskMange.list1); |
| | | }, |
| | | methods: { |
| | | close() { |
| | | this.$emit("close"); |
| | |
| | | this.selectedNodes = []; |
| | | }, |
| | | beforeDestroy() { |
| | | clearInterval(this.intervalTimer); |
| | | //this.TreeDataPool.treeActiveName = "camera"; |
| | | sessionStorage.removeItem("devId"); |
| | | sessionStorage.removeItem("clusterId"); |
| | | clearInterval(this.intervalTimer); |
| | | //this.TreeDataPool.treeActiveName = "camera"; |
| | | }, |
| | | mounted() { |
| | | this.$nextTick(() => { |
| | |
| | | }, |
| | | hiddenList() { |
| | | this.showCluster = true; |
| | | this.$emit("refreshCluster"); |
| | | }, |
| | | back() { |
| | | this.$emit("back"); |
| | |
| | | :list="deviceList" |
| | | @chooseCluster="chooseCluster" |
| | | @chooseDevice="chooseDevice" |
| | | @refreshCluster="chooseCluster(ClusterId)" |
| | | @back="back" |
| | | :listType="listType" |
| | | ></ClusterList> |
| | |
| | | import ClusterList from "./components/ClusterList"; |
| | | import { |
| | | userStatisticRunInfo, |
| | | userSysInfo, |
| | | userStatisticRun, |
| | | clusterStatisticRunInfo, |
| | | clusterSysInfo, |
| | |
| | | ClusterList, |
| | | }, |
| | | created() { |
| | | sessionStorage.removeItem("devId"); |
| | | sessionStorage.removeItem("clusterId"); |
| | | this.getUserInfo(); |
| | | this.getUserDevice(); |
| | | }, |
| | |
| | | }, |
| | | deviceList: [], |
| | | listType: "cluster", |
| | | ClusterId: "", |
| | | }; |
| | | }, |
| | | methods: { |
| | |
| | | res1.data.stackRunningCount, |
| | | }; |
| | | } |
| | | const res2 = await userSysInfo(); |
| | | const res2 = await clusterSysInfo({ |
| | | clusterId: "", |
| | | }); |
| | | if (res2 && res2.success) { |
| | | this.systemInfo = { |
| | | cpu: parseInt(res2.data.cpu.usedPercent), |
| | |
| | | res1.data.stackRunningCount, |
| | | }; |
| | | } |
| | | const res2 = await clusterSysInfo({ clusterId: id }); |
| | | const res2 = await clusterSysInfo( |
| | | //id |
| | | { clusterId: "" } |
| | | ); |
| | | if (res2 && res2.success) { |
| | | this.systemInfo = { |
| | | cpu: parseInt(res2.data.cpu.usedPercent), |
| | |
| | | chooseCluster(id) { |
| | | this.getClusterInfo(id); |
| | | this.getClusterDevice(id); |
| | | this.ClusterId = id; |
| | | }, |
| | | back() { |
| | | this.getUserInfo(); |
| | |
| | | ></el-table-column> |
| | | <el-table-column label="支付方式"> |
| | | <template slot-scope="scope"> |
| | | <div v-if="scope.row.payMethod == 0">线下汇款</div> |
| | | <div v-if="scope.row.payMethod == 1">支付宝</div> |
| | | <div v-if="scope.row.payMethod == 2">微信</div> |
| | | <div v-if="scope.row.payMethod == 0">尚未支付</div> |
| | | <div v-if="scope.row.payMethod == 1">线下汇款</div> |
| | | <div v-if="scope.row.payMethod == 2">支付宝</div> |
| | | <div v-if="scope.row.payMethod == 3">微信</div> |
| | | <div v-if="scope.row.payMethod == 4">支付宝wap站</div> |
| | | <div v-if="scope.row.payMethod == 5">0元支付</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | > |
| | | <el-table-column prop="payMethod" label="支付渠道" min-width="80"> |
| | | <template slot-scope="scope"> |
| | | <div v-if="scope.row.payMethod == 0">尚未支付</div> |
| | | <div v-if="scope.row.payMethod == 1">线下汇款</div> |
| | | <div v-if="scope.row.payMethod == 2">支付宝</div> |
| | | <div v-if="scope.row.payMethod == 3">微信</div> |
| | | <div v-if="scope.row.payMethod == 4">支付宝wap站</div> |
| | | <div v-if="scope.row.payMethod == 5">0元支付</div> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column prop="payTime" label="付款时间" align="center" min-width="150" ></el-table-column> --> |
| | |
| | | <el-form-item label="密码" prop="password"> |
| | | <el-input v-model="ruleForm.password" style="width: 350px"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="重置密码"> |
| | | <!-- <el-form-item label="重置密码"> |
| | | <el-checkbox v-model="ruleForm.isChangePwd" |
| | | >首次登陆修改密码</el-checkbox |
| | | > |
| | | </el-form-item> |
| | | </el-form-item> --> |
| | | <el-form-item label="用户类型" prop="userType"> |
| | | <el-radio v-model="ruleForm.userType" :label="1">个人</el-radio> |
| | | <el-radio v-model="ruleForm.userType" :label="2">公司</el-radio> |
| | |
| | | color: #0065ff; |
| | | border-color: #0065ff; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | import { findAllCenterProduct, findDicByType } from "@/api/product"; |
| | | import productCard from "@/views/product/components/productCard"; |
| | | export default { |
| | | created() { |
| | | if (this.$route.query.keyWord) { |
| | | this.inputText = this.$route.query.keyWord; |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getDic(); |
| | | this.getProductList(); |
| | |
| | | color: #666; |
| | | } |
| | | } |
| | | |
| | | .IndexHeader ::v-deep { |
| | | .el-input { |
| | | display: none; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <el-form-item label="备注" prop="reserved"> |
| | | <el-input type="textarea" v-model="item.reserved"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="付款凭证" prop="pic"> |
| | | <el-form-item |
| | | label="付款凭证" |
| | | :prop="`list[${index}].appendix`" |
| | | :rules="[ |
| | | { required: true, message: '请上传凭证', trigger: 'blur' }, |
| | | ]" |
| | | > |
| | | <el-image |
| | | class="preview" |
| | | v-if="item.appendix" |
| | |
| | | width: 100%; |
| | | min-width: 1280px; |
| | | min-height: 960px; |
| | | background: url("/images/register/注册.png"); |
| | | background: url("/images/register/register.png"); |
| | | background-size: 100% 100%; |
| | | font-size: 14px; |
| | | |
| | |
| | | |
| | | .registerHeart { |
| | | margin: 0 auto; |
| | | width: 1280px; |
| | | width: 1200px; |
| | | overflow: hidden; |
| | | |
| | | .registerForm { |
| | | position: relative; |
| | | overflow: hidden; |
| | | margin-top: 60px; |
| | | margin-top: 5vh; |
| | | width: 660px; |
| | | height: 730px; |
| | | background: #ffffff; |
| | |
| | | width: 660px; |
| | | height: 450px; |
| | | left: 320px; |
| | | top: 262px; |
| | | top: 22vh; |
| | | text-align: center; |
| | | background: #ffffff; |
| | | |
New file |
| | |
| | | <template> |
| | | <div class="resetPassword"> |
| | | <Header> </Header> |
| | | <div class="container"> |
| | | <div class="title"> |
| | | <div class="left">请完善账户信息</div> |
| | | </div> |
| | | <div class="stepArea" v-if="step === 0"> |
| | | <img src="/images/register/" alt="" /> |
| | | </div> |
| | | </div> |
| | | <Footer></Footer> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Header from "@/components/Header"; |
| | | import Footer from "@/components/Footer"; |
| | | export default { |
| | | components: { |
| | | Header, |
| | | Footer, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .resetPassword { |
| | | position: absolute; |
| | | height: 100%; |
| | | width: 100%; |
| | | min-width: 1280px; |
| | | background: url("/images/register/success.png"); |
| | | background-size: 100% 100%; |
| | | font-size: 14px; |
| | | |
| | | .title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | margin: 0 30px 0 30px; |
| | | height: 74px; |
| | | border-bottom: 1px solid #e9ebee; |
| | | |
| | | .left { |
| | | font-size: 18px; |
| | | font-weight: 700; |
| | | } |
| | | } |
| | | |
| | | .container { |
| | | position: absolute; |
| | | width: 660px; |
| | | height: 468px; |
| | | left: 320px; |
| | | top: 22vh; |
| | | text-align: center; |
| | | background: #ffffff; |
| | | } |
| | | |
| | | .Footer { |
| | | position: absolute; |
| | | width: 100%; |
| | | bottom: 0; |
| | | background-color: #252525; |
| | | color: #9b9ea0; |
| | | } |
| | | } |
| | | </style> |