parent
95402becad
commit
29e0ed7198
@ -0,0 +1,66 @@ |
|||||||
|
import axios from '@/utils/request' |
||||||
|
// 查询分页数据:
|
||||||
|
export const vehicleList = (arg) => { |
||||||
|
return axios.request({ |
||||||
|
url: '/vehicle/list', |
||||||
|
method: 'get', |
||||||
|
params: arg, |
||||||
|
dataType: 'json', |
||||||
|
|
||||||
|
}) |
||||||
|
} |
||||||
|
// 查询详情数据:
|
||||||
|
export const vehicleGetById = (arg) => { |
||||||
|
return axios.request({ |
||||||
|
url: `/vehicle/getById`, |
||||||
|
method: 'get', |
||||||
|
params: arg, |
||||||
|
dataType: 'json', |
||||||
|
|
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 添加数据:
|
||||||
|
export const vehicleAdd = (arg) => { |
||||||
|
return axios.request({ |
||||||
|
url: '/vehicle/add', |
||||||
|
method: 'post', |
||||||
|
data: arg, |
||||||
|
dataType: 'json', |
||||||
|
|
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 修改数据:
|
||||||
|
export const vehicleUpdate = (arg) => { |
||||||
|
return axios.request({ |
||||||
|
url: '/vehicle/update', |
||||||
|
method: 'put', |
||||||
|
data: arg, |
||||||
|
dataType: 'json', |
||||||
|
|
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 删除数据:
|
||||||
|
export const vehicleDelete = (arg) => { |
||||||
|
return axios.request({ |
||||||
|
url: '/vehicle/delete', |
||||||
|
method: 'delete', |
||||||
|
params: { |
||||||
|
id:arg.id[0] |
||||||
|
}, |
||||||
|
dataType: 'json', |
||||||
|
|
||||||
|
}) |
||||||
|
} |
||||||
|
// 查询分页数据:
|
||||||
|
export const iproductionplanList = (arg) => { |
||||||
|
return axios.request({ |
||||||
|
url: '/iproductionplan/list', |
||||||
|
method: 'get', |
||||||
|
params: arg, |
||||||
|
dataType: 'json', |
||||||
|
|
||||||
|
}) |
||||||
|
} |
@ -0,0 +1,100 @@ |
|||||||
|
<script setup> |
||||||
|
import { reactive } from 'vue' |
||||||
|
import { vehicleList, vehicleAdd, vehicleUpdate, vehicleDelete, vehicleGetById, iproductionplanList } from './api' |
||||||
|
import { baseModelOptions, baseFilterOptions } from './options' |
||||||
|
import { useRouter } from 'vue-router'; |
||||||
|
|
||||||
|
const cameraList = reactive([ |
||||||
|
{ name: '5305#摄像头', source: 'rtsp://admin:admin@IP_ADDRESS' }, |
||||||
|
{ name: '5601#摄像头', source: 'rtsp://admin:admin@IP_ADDRESS' } |
||||||
|
]) |
||||||
|
const state = reactive({ |
||||||
|
currentCameraIndex: 0 |
||||||
|
}) |
||||||
|
</script> |
||||||
|
|
||||||
|
<template> |
||||||
|
<div class="app-container"> |
||||||
|
<!-- 监控摄像头名称列表 --> |
||||||
|
<div class="camera-name-list"> |
||||||
|
<template v-for="(camera, index) in cameraList" :key="index"> |
||||||
|
<span |
||||||
|
class="camera-name" |
||||||
|
@click="switchCamera(index)" |
||||||
|
:class="{ active: state.currentCameraIndex === index }" |
||||||
|
> |
||||||
|
{{ camera.name }} |
||||||
|
</span> |
||||||
|
</template> |
||||||
|
</div> |
||||||
|
<!-- 摄像头展示区域 --> |
||||||
|
<div class="camera-display"> |
||||||
|
<video |
||||||
|
v-if="state.currentCameraIndex !== -1" |
||||||
|
:src="cameraList[state.currentCameraIndex].source" |
||||||
|
controls |
||||||
|
autoplay |
||||||
|
muted |
||||||
|
></video> |
||||||
|
<p v-else>请选择摄像头</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
.app-container { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
align-items: center; |
||||||
|
padding: 20px; |
||||||
|
min-height: 100vh; |
||||||
|
} |
||||||
|
|
||||||
|
.camera-name-list { |
||||||
|
display: flex; |
||||||
|
gap: 15px; |
||||||
|
margin-bottom: 20px; |
||||||
|
flex-wrap: wrap; |
||||||
|
justify-content: center; |
||||||
|
} |
||||||
|
|
||||||
|
.camera-name { |
||||||
|
padding: 8px 16px; |
||||||
|
border: 1px solid #ccc; |
||||||
|
border-radius: 20px; |
||||||
|
cursor: pointer; |
||||||
|
transition: all 0.3s ease; |
||||||
|
background-color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.camera-name:hover { |
||||||
|
background-color: #e0e0e0; |
||||||
|
transform: translateY(-2px); |
||||||
|
} |
||||||
|
|
||||||
|
.camera-name.active { |
||||||
|
background-color: #2196F3; |
||||||
|
color: white; |
||||||
|
border-color: #2196F3; |
||||||
|
} |
||||||
|
|
||||||
|
.camera-display { |
||||||
|
width: 80%; |
||||||
|
max-width: 800px; |
||||||
|
background-color: #fff; |
||||||
|
padding: 20px; |
||||||
|
border-radius: 8px; |
||||||
|
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); |
||||||
|
} |
||||||
|
|
||||||
|
video { |
||||||
|
width: 100%; |
||||||
|
height: auto; |
||||||
|
} |
||||||
|
|
||||||
|
p { |
||||||
|
text-align: center; |
||||||
|
color: #666; |
||||||
|
font-size: 18px; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,43 @@ |
|||||||
|
export const baseModelOptions = () => { |
||||||
|
return [ |
||||||
|
|
||||||
|
] |
||||||
|
} |
||||||
|
|
||||||
|
export const baseFilterOptions = () => { |
||||||
|
return [ |
||||||
|
{ |
||||||
|
tag: 'el-input', |
||||||
|
label: '设备名称:', |
||||||
|
key: 'deviceName', |
||||||
|
value: '', |
||||||
|
default: '', |
||||||
|
attribute: {//属性
|
||||||
|
type: 'text', |
||||||
|
placeholder: '请输入设备名称', |
||||||
|
}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
tag: 'el-input', |
||||||
|
label: 'IMEI:', |
||||||
|
key: 'imei', |
||||||
|
value: '', |
||||||
|
default: '', |
||||||
|
attribute: {//属性
|
||||||
|
type: 'text', |
||||||
|
placeholder: '请输入IMEI', |
||||||
|
}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
tag: 'el-input', |
||||||
|
label: '设备类型:', |
||||||
|
key: 'mcType', |
||||||
|
value: '', |
||||||
|
default: '', |
||||||
|
attribute: {//属性
|
||||||
|
type: 'text', |
||||||
|
placeholder: '请输入设备类型', |
||||||
|
}, |
||||||
|
}, |
||||||
|
] |
||||||
|
} |
Loading…
Reference in new issue