|
|
@@ -6,41 +6,22 @@
|
|
|
<div class="card-header">
|
|
|
<div style="display: flex; flex-direction: row">
|
|
|
<div style="width: 4px; height: 19px; opacity: 1; background: #409eff"></div>
|
|
|
- <span
|
|
|
- style="
|
|
|
+ <span style="
|
|
|
font-family: PingFang SC;
|
|
|
font-size: 14px;
|
|
|
font-weight: normal;
|
|
|
line-height: 19px;
|
|
|
height: 19px;
|
|
|
margin-left: 5px;
|
|
|
- "
|
|
|
- >站点列表</span
|
|
|
- >
|
|
|
+ ">站点列表</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div style="margin-top: 20px; padding-left: 10px">
|
|
|
<el-input v-model="filterText" placeholder="输入关键字" />
|
|
|
- <el-tree-v2
|
|
|
- style="margin-top: 10px"
|
|
|
- ref="treeRef"
|
|
|
- class="filter-tree"
|
|
|
- :height="gettreeheight()"
|
|
|
- :data="data"
|
|
|
- :indent="treeIndent"
|
|
|
- :props="defaultProps"
|
|
|
- :filter-method="filterNode"
|
|
|
- @node-click="treeclick"
|
|
|
-
|
|
|
- >
|
|
|
+ <el-tree-v2 style="margin-top: 10px" ref="treeRef" class="filter-tree" :height="gettreeheight()" :data="data"
|
|
|
+ :indent="treeIndent" :props="defaultProps" :filter-method="filterNode" @node-click="treeclick">
|
|
|
<template v-slot:default="{ node }">
|
|
|
- <element-tree-line
|
|
|
- :node="node"
|
|
|
- :treeData="data"
|
|
|
- :showLabelLine="false"
|
|
|
- :indent="treeIndent"
|
|
|
-
|
|
|
- >
|
|
|
+ <element-tree-line :node="node" :treeData="data" :showLabelLine="false" :indent="treeIndent">
|
|
|
</element-tree-line>
|
|
|
</template>
|
|
|
</el-tree-v2>
|
|
|
@@ -50,105 +31,109 @@
|
|
|
<div class="card-header">
|
|
|
<div style="display: flex; flex-direction: row;position: relative">
|
|
|
<div style="width: 4px; height: 19px; opacity: 1; background: #409eff"></div>
|
|
|
- <span
|
|
|
- style="
|
|
|
+ <span style="
|
|
|
font-family: PingFang SC;
|
|
|
font-size: 14px;
|
|
|
font-weight: normal;
|
|
|
line-height: 19px;
|
|
|
height: 19px;
|
|
|
margin-left: 5px;
|
|
|
- "
|
|
|
- >站点设备</span
|
|
|
- >
|
|
|
- <span style="margin-left: 30px; font-size: 14px">{{currentdata?.label}}</span>
|
|
|
+ ">站点设备</span>
|
|
|
+ <span style="margin-left: 30px; font-size: 14px">{{ currentdata?.label }}</span>
|
|
|
|
|
|
|
|
|
</div>
|
|
|
- <el-button v-if="tableData.length>0 && tableData.length<4" type="primary" style="position: absolute;right: 20px;" @click="dialogVisible = true">添加设备</el-button>
|
|
|
+ <el-button v-if="tableData.length > 0 && tableData.length < 4" type="primary"
|
|
|
+ style="position: absolute;right: 20px;" @click="goAdd">添加设备</el-button>
|
|
|
</div>
|
|
|
<div style="margin-top: 20px">
|
|
|
<el-table :data="tableData" border style="width: 100%">
|
|
|
- <el-table-column prop="name" label="设备名称" width="160" >
|
|
|
- <template #default="scope">
|
|
|
- <div>
|
|
|
- <span>{{ scope.row.name }}</span> <el-tag style="margin-left: 40px;" type="success" v-if="scope.row.type=='cabinet'" >{{ '在线' }}</el-tag>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
+ <el-table-column prop="name" label="设备名称" width="160">
|
|
|
+ <template #default="scope">
|
|
|
+ <div>
|
|
|
+ <span>{{ scope.row.name }}</span> <el-tag style="margin-left: 40px;" type="success"
|
|
|
+ v-if="scope.row.type == 'cabinet'">{{ '在线' }}</el-tag>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="type" label="类型" >
|
|
|
- <template #default="scope">
|
|
|
- <div>
|
|
|
- <el-tag type="success" effect="dark">{{ scope.row.type }}</el-tag> <span style="margin-left: 20px;" v-if="scope.row.type=='cabinet'">{{ `共 ${currentCabinet.total} 格` }}<span style="margin-left: 5px;color:green" >{{ `可用 ${currentCabinet.total-currentCabinet.unused} 格` }}</span></span>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
+ <el-table-column prop="type" label="类型">
|
|
|
+ <template #default="scope">
|
|
|
+ <div>
|
|
|
+ <el-tag type="success" effect="dark">{{ scope.row.type }}</el-tag> <span style="margin-left: 20px;"
|
|
|
+ v-if="scope.row.type == 'cabinet'">{{ `共 ${currentCabinet.total} 格` }}<span
|
|
|
+ style="margin-left: 5px;color:green">{{ `可用 ${currentCabinet.total - currentCabinet.unused} 格`
|
|
|
+ }}</span></span>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="code" label="设备序列号" >
|
|
|
- <template #default="scope">
|
|
|
- <div style="display: flex;flex-wrap: nowrap;align-items: center;justify-content: space-between;">
|
|
|
- <el-input v-model="scope.row.code" style="width: 240px" placeholder="请输入" />
|
|
|
- <el-button type="primary" size="small" @click="savedata">保存</el-button>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
+ <el-table-column prop="code" label="设备序列号">
|
|
|
+ <template #default="scope">
|
|
|
+ <div style="display: flex;flex-wrap: nowrap;align-items: center;justify-content: space-between;">
|
|
|
+ <el-input v-model="scope.row.code" style="width: 240px" placeholder="请输入" />
|
|
|
+ <el-button type="primary" size="small" @click="savedata">保存</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="code" label="操作" >
|
|
|
- <template #default="scope">
|
|
|
- <div>
|
|
|
- <el-button type="danger" link size="small" @click="deleteDevice(scope.row)">删除</el-button>
|
|
|
- <el-button v-if="scope.row.type=='cabinet'" type="primary" link size="small">立即同步</el-button>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
+ <el-table-column prop="code" label="操作">
|
|
|
+ <template #default="scope">
|
|
|
+ <div>
|
|
|
+ <el-button type="danger" link size="small" @click="deleteDevice(scope.row)">删除</el-button>
|
|
|
+ <el-button v-if="scope.row.type == 'cabinet'" type="primary" link size="small">立即同步</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
|
|
|
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleTabClick">
|
|
|
- <el-tab-pane v-if="tableData.filter(i=>i.type=='camera').length>0" label="摄像头" name="camera">
|
|
|
+ <el-tab-pane v-if="tableData.filter(i => i.type == 'camera').length > 0" label="摄像头" name="camera">
|
|
|
<div id="video-container" style="border-radius: 10px;"></div>
|
|
|
- </el-tab-pane>
|
|
|
- <el-tab-pane v-if="tableData.filter(i=>i.type=='cabinet').length>0" label="快递柜" name="cabinet">
|
|
|
- <div style="display: flex;align-items: center;flex-wrap: wrap;gap: 10px;place-content: center;width: 100%;justify-content: flex-start;flex-direction: row;align-content: center;">
|
|
|
- <div :class="item.box_status==1?'':''" v-for="(item,index) in currentCabinet.boxlist" style="width: 60px;height:60px;border: 1px solid #33333317;border-radius: 6px;position: relative;">
|
|
|
- <div style="font-size: 10px;padding:8px">{{ item.box_name }}</div>
|
|
|
-
|
|
|
- <el-button size="small" text style="position: absolute;right: 0;bottom: 0;" @click="openbox">
|
|
|
- <img style="width:10px" src="@/assets/images/unlock@2x.png">
|
|
|
- </el-button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </el-tab-pane>
|
|
|
- </el-tabs>
|
|
|
+ </el-tab-pane>
|
|
|
+ <el-tab-pane v-if="tableData.filter(i => i.type == 'cabinet').length > 0" label="快递柜" name="cabinet">
|
|
|
+ <div
|
|
|
+ style="display: flex;align-items: center;flex-wrap: wrap;gap: 10px;place-content: center;width: 100%;justify-content: flex-start;flex-direction: row;align-content: center;">
|
|
|
+ <div :class="item.box_status == 1 ? '' : ''" v-for="(item, index) in currentCabinet.boxlist"
|
|
|
+ style="width: 60px;height:60px;border: 1px solid #33333317;border-radius: 6px;position: relative;">
|
|
|
+ <div style="font-size: 10px;padding:8px">{{ item.box_name }}</div>
|
|
|
+
|
|
|
+ <el-button size="small" text style="position: absolute;right: 0;bottom: 0;" @click="openbox">
|
|
|
+ <img style="width:10px" src="@/assets/images/unlock@2x.png">
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-tab-pane>
|
|
|
+ </el-tabs>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
-<el-dialog v-model="dialogVisible" title="添加设备" width="500">
|
|
|
- <el-form :model="formdata" ref="ruleForm" label-width="100px" class="demo-ruleForm">
|
|
|
- <el-form-item label="名称">
|
|
|
- <el-input v-model="formdata.name" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="类型">
|
|
|
- <el-select v-model="formdata.type" placeholder="请选择设备类型">
|
|
|
- <el-option v-if="tableData.filter(i=>i.type=='tts').length<1" label="tts" value="tts" />
|
|
|
- <el-option v-if="tableData.filter(i=>i.type=='led').length<1" label="led" value="led" />
|
|
|
- <el-option v-if="tableData.filter(i=>i.type=='cabinet').length<1" label="快递柜" value="cabinet" />
|
|
|
- <el-option v-if="tableData.filter(i=>i.type=='camera').length<1" label="摄像头" value="camera" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="序列号">
|
|
|
- <el-input v-model="formdata.code" />
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- <template #footer>
|
|
|
- <div class="dialog-footer">
|
|
|
- <el-button @click="dialogVisible = false">取消</el-button>
|
|
|
- <el-button type="primary" @click="addDevice">
|
|
|
- 保存
|
|
|
- </el-button>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
+ <el-dialog v-model="dialogVisible" title="添加设备" width="500">
|
|
|
+ <el-form :model="formdata" ref="ruleForm" label-width="100px" class="demo-ruleForm">
|
|
|
+ <el-form-item label="名称">
|
|
|
+ <el-input v-model="formdata.name" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="类型">
|
|
|
+ <el-select v-model="formdata.type" placeholder="请选择设备类型">
|
|
|
+ <el-option v-if="tableData.filter(i => i.type == 'tts').length < 1" label="tts" value="tts" />
|
|
|
+ <el-option v-if="tableData.filter(i => i.type == 'led').length < 1" label="led" value="led" />
|
|
|
+ <el-option v-if="tableData.filter(i => i.type == 'cabinet').length < 1" label="快递柜" value="cabinet" />
|
|
|
+ <el-option v-if="tableData.filter(i => i.type == 'camera').length < 1" label="摄像头" value="camera" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="序列号">
|
|
|
+ <el-input v-model="formdata.code" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button @click="dialogVisible = false">取消</el-button>
|
|
|
+ <el-button type="primary" @click="addDevice">
|
|
|
+ 保存
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
|
|
|
|
|
|
-</el-dialog>
|
|
|
+ </el-dialog>
|
|
|
|
|
|
</div>
|
|
|
</template>
|
|
|
@@ -158,7 +143,7 @@ import { TreeNode } from "element-plus";
|
|
|
import { useRoute, useRouter } from "vue-router";
|
|
|
import EZUIKit from 'ezuikit-js';
|
|
|
import { getCameraPlayerConfig } from '@/api/gpsData';
|
|
|
-import { updateData,listData } from "@/api/system/dict/data";
|
|
|
+import { updateData, listData } from "@/api/system/dict/data";
|
|
|
import imgulock from "@/assets/images/unlock@2x.png";
|
|
|
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
@@ -169,7 +154,7 @@ const sites = ref([]);
|
|
|
const formdata = ref({
|
|
|
name: "",
|
|
|
type: "",
|
|
|
- code:""
|
|
|
+ code: ""
|
|
|
})
|
|
|
|
|
|
|
|
|
@@ -178,7 +163,7 @@ const router = useRouter();
|
|
|
|
|
|
const tableData = ref([]);
|
|
|
|
|
|
-const activeName=ref("camera")
|
|
|
+const activeName = ref("camera")
|
|
|
|
|
|
const filterText = ref("");
|
|
|
const treeRef = ref(null);
|
|
|
@@ -188,6 +173,15 @@ const gettreeheight = () => {
|
|
|
return document.body.clientHeight - 100;
|
|
|
}
|
|
|
|
|
|
+const goAdd = () => {
|
|
|
+ dialogVisible.value = true
|
|
|
+ formdata.value = {
|
|
|
+ name: "",
|
|
|
+ type: "",
|
|
|
+ code: ""
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
const defaultProps = {
|
|
|
children: "children",
|
|
|
label: "label",
|
|
|
@@ -218,16 +212,16 @@ const savedata = () => {
|
|
|
}
|
|
|
|
|
|
const getSites = () => {
|
|
|
- listData({ dictType: "tbl_sites" }).then(res2 => {
|
|
|
- sites.value = res2.rows;
|
|
|
-
|
|
|
- var index = 1;
|
|
|
- data.value = [{
|
|
|
- id: 1,
|
|
|
- label: "站点",
|
|
|
- children: sites.value.map(i => { return { id: ++index, label: i.dictLabel } }),
|
|
|
- },];
|
|
|
- });
|
|
|
+ listData({ dictType: "tbl_sites" }).then(res2 => {
|
|
|
+ sites.value = res2.rows;
|
|
|
+
|
|
|
+ var index = 1;
|
|
|
+ data.value = [{
|
|
|
+ id: 1,
|
|
|
+ label: "站点",
|
|
|
+ children: sites.value.map(i => { return { id: ++index, label: i.dictLabel } }),
|
|
|
+ },];
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
const deleteDevice = (datac) => {
|
|
|
@@ -239,7 +233,7 @@ const deleteDevice = (datac) => {
|
|
|
dictType: "tbl_sites",
|
|
|
remark: JSON.stringify(tableData.value)
|
|
|
}
|
|
|
- updateData(data).then(res => {
|
|
|
+ updateData(data).then(res => {
|
|
|
ElMessage.success("成功!");
|
|
|
})
|
|
|
}
|
|
|
@@ -250,8 +244,8 @@ const handleTabClick = () => {
|
|
|
|
|
|
const filterNode = (value: string, node: TreeNode) => {
|
|
|
if (node.id == 1) return true;
|
|
|
- console.log(node.label.indexOf(value)!=-1)
|
|
|
- return node.label.indexOf(value)!=-1;
|
|
|
+ console.log(node.label.indexOf(value) != -1)
|
|
|
+ return node.label.indexOf(value) != -1;
|
|
|
};
|
|
|
|
|
|
const currentdata = ref(null)
|
|
|
@@ -301,18 +295,18 @@ const addDevice = () => {
|
|
|
ElMessage.warning("设备序列号未填写");
|
|
|
return;
|
|
|
}
|
|
|
- if (tableData.value.filter(i => i.type == formdata.value.type).length >0) {
|
|
|
+ if (tableData.value.filter(i => i.type == formdata.value.type).length > 0) {
|
|
|
ElMessage.warning("存在相同类型的设备");
|
|
|
return;
|
|
|
}
|
|
|
tableData.value.push(formdata.value);
|
|
|
- var data = {
|
|
|
+ var data = {
|
|
|
dictCode: currentdata.value.dictCode,
|
|
|
dictValue: currentdata.value.value,
|
|
|
dictLabel: currentdata.value.label,
|
|
|
dictType: "tbl_sites",
|
|
|
remark: JSON.stringify(tableData.value)
|
|
|
- }
|
|
|
+ }
|
|
|
updateData(data).then(res => {
|
|
|
ElMessage.success("成功!");
|
|
|
})
|
|
|
@@ -323,7 +317,7 @@ const addDevice = () => {
|
|
|
const currentCabinet = ref({
|
|
|
total: 40,
|
|
|
unused: 10,
|
|
|
- boxlist:[]
|
|
|
+ boxlist: []
|
|
|
})
|
|
|
const SycCabinet = (code) => {
|
|
|
//TODO 获取格数
|
|
|
@@ -332,11 +326,11 @@ const SycCabinet = (code) => {
|
|
|
for (var i = 0; i < currentCabinet.value.total; i++) {
|
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
|
//@ts-ignore
|
|
|
- currentCabinet.value.boxlist.push( {
|
|
|
- box_id: 1,
|
|
|
- box_name: (i+1)+"",
|
|
|
- box_status:i%2
|
|
|
- }
|
|
|
+ currentCabinet.value.boxlist.push({
|
|
|
+ box_id: 1,
|
|
|
+ box_name: (i + 1) + "",
|
|
|
+ box_status: i % 2
|
|
|
+ }
|
|
|
)
|
|
|
}
|
|
|
}
|
|
|
@@ -354,7 +348,7 @@ const data = computed(() => {
|
|
|
return [{
|
|
|
id: 1,
|
|
|
label: "站点",
|
|
|
- children: sites.value.map(i => { return {id:++index,label:i.dictLabel} }),
|
|
|
+ children: sites.value.map(i => { return { id: ++index, label: i.dictLabel } }),
|
|
|
},]
|
|
|
});
|
|
|
onMounted(() => {
|
|
|
@@ -377,7 +371,8 @@ onMounted(() => {
|
|
|
flex-direction: row;
|
|
|
justify-content: space-between;
|
|
|
}
|
|
|
-.boxunused{
|
|
|
+
|
|
|
+.boxunused {
|
|
|
background: #3333332d;
|
|
|
}
|
|
|
</style>
|