商铺点位、上传音频、视频、照片

lijinlong
吕天方 1 year ago
parent e5dbf62a24
commit 35b190d392

@ -2,7 +2,7 @@
# @Author: 张涛
# @Date: 2023-11-09 18:29:41
# @LastEditors: JC9527
# @LastEditTime: 2023-12-28 19:43:38
# @LastEditTime: 2024-01-04 15:50:30
# @FilePath: \JiangningUrbanManagePc\.env.development
###
# 页面标题
@ -13,9 +13,10 @@ ENV = 'development'
# 若依管理系统/开发环境
# /dev-api
VUE_APP_BASE_API = 'http://39.101.188.84:9037'
# VUE_APP_BASE_API = 'http://39.101.188.84:9037'
VUE_APP_BASE_API1 = 'https://t-kd-process-server.jsszkd.com'
# VUE_APP_BASE_API = 'http://192.168.1.142:9037'
VUE_APP_BASE_API2 = 'https://t-jn-development-manager-server.jsszkd.com/api/webapp'
VUE_APP_BASE_API = 'http://192.168.0.108:9037'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

@ -1,8 +1,9 @@
import request from "@/utils/request2"
// 事件来源
export function getDeviceList(params) {
// 事件来源按日/月纬度统计
export function getTrend(params) {
return request({
baseURL: process.env.VUE_APP_BASE_API2,
url: "/event/source/trend",
method:'get',
params
@ -10,19 +11,21 @@ export function getDeviceList(params) {
}
// 事件列表查询
export function getQueryViewListPage(data) {
export function getQueryViewListPage(params,data) {
return request({
url: "/api/eform/engine/viewEngine/queryViewListPage",
method:'post',
params,
data
})
}
// 自动提交事件---保存事件数据
export function eventSaveData(data) {
export function eventSaveData(params,data) {
return request({
url: "/api/eform/engine/formEngine/saveData",
method:'post',
params,
data
})
}

@ -96,4 +96,17 @@ export function getCarManageList(params) {
method:'get',
params
})
}
/**
* 沿街商铺
*/
// 查询沿街店铺列表 streetShop
export function getStreetShopList(params) {
return request({
url: '/jn/shop/list',
method: 'get',
params
})
}

@ -129,7 +129,8 @@
display: flex;
align-items: center;
justify-content: center;
width: 194px;
// width: 194px;
width: 404px;
height: 30px;
background: linear-gradient(270deg, rgba(9, 32, 53, 0) 0%, rgba(8, 37, 64, 0.98) 51%, rgba(9, 34, 56, 0) 100%);
border-radius: 0px 0px 0px 0px;
@ -304,8 +305,9 @@
//
.monitoring-popup {
width: 242px;
height: 230px;
width: 282px;
// height: 230px;
// height: 220px;
background-image: url("../images/popup/bg4.png");
background-size: 100% 100%;
z-index: 600;
@ -325,7 +327,8 @@
display: flex;
align-items: center;
justify-content: center;
width: 194px;
// width: 194px;
width: 234px;
height: 30px;
background: linear-gradient(270deg, rgba(9, 32, 53, 0) 0%, rgba(8, 37, 64, 0.98) 51%, rgba(9, 34, 56, 0) 100%);
border-radius: 0px 0px 0px 0px;
@ -342,21 +345,49 @@
}
.monitoring {
padding: 11px 25px 24px 25px;
padding: 11px 0 0 0;
.bg {
background-image: url("../images/popup/screenshot20230817.png");
background-size: 100% 100%;
width: 192px;
height: 108px;
padding: 2px;
display: flex;
align-items: center;
justify-content: center;
.monitoring-list {
padding: 12px 32px 10px 30px;
img {
width: 92px;
cursor: pointer;
.person-info {
display: flex;
// align-items: center;
margin-bottom: 10px;
.info-left {
display: flex;
// align-items: center;
width: 45%;
.dot {
width: 4px;
height: 4px;
background: #DAEBFF;
box-shadow: 0px 0px 10px 5px rgba(0, 119, 255, 0.25), 0px 0px 5px 0px rgba(229, 241, 255, 0.25);
border-radius: 20px 20px 20px 20px;
margin-right: 10px;
margin-top: 7px;
}
.name {
text-align: right;
flex: 1;
font-size: 12px;
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
font-weight: 500;
color: #E9F4FF;
line-height: 14px;
}
}
.position {
font-size: 12px;
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
font-weight: 500;
color: #E9F4FF;
line-height: 14px;
margin-right: 9px;
flex: 1;
}
}
}
@ -364,7 +395,8 @@
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 16px;
// margin-top: 16px;
padding: 0 25px 15px 25px;
.btn {
background-image: url("../images/popup/icon2btn.png");

@ -4,7 +4,7 @@ const TokenKey = 'Admin-Token'
const AccessToken = 'X-Access-Token'
Cookies.set(AccessToken, 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDM1MjkyMzAsInVzZXJuYW1lIjoi6LW15YWtIn0.iV5P9-g1X309RxfTiWLb42yk7QBGazSUwKLHSEPeLuA')
Cookies.set(AccessToken, 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDQzNTgzOTIsInVzZXJuYW1lIjoi6LW15YWtIn0.7aDgV90lBTw7kjK0yNU9UioPPBZzv_rk6iL6cnaAXNk')
export function getAccessToken() {
return Cookies.get(AccessToken)

@ -122,7 +122,7 @@
},
{
"type": "Feature",
"properties": {"name":"监控视频"},
"properties": {"name":"监控视频","status":1},
"geometry": {
"coordinates": [
118.79202271621062,
@ -133,7 +133,7 @@
},
{
"type": "Feature",
"properties": {"name":"监控视频"},
"properties": {"name":"监控视频","status":1},
"geometry": {
"coordinates": [
118.78822314147698,
@ -144,7 +144,7 @@
},
{
"type": "Feature",
"properties": {"name":"监控视频"},
"properties": {"name":"监控视频","status":0},
"geometry": {
"coordinates": [
118.82115278916302,

@ -20,7 +20,8 @@ axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.NODE_ENV === "production" ? location.origin : process.env.VUE_APP_BASE_API1,
// baseURL: process.env.NODE_ENV === "production" ? location.origin : process.env.VUE_APP_BASE_API1,
baseURL: process.env.VUE_APP_BASE_API1,
// 超时
timeout: 10000
})
@ -32,6 +33,7 @@ service.interceptors.request.use(config => {
// 是否需要防止数据重复提交
const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
if (getAccessToken() && !isToken) {
// config.headers['Authorization'] = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token 请根据实际情况自行修改
config.headers['X-Access-Token'] = getAccessToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
// get请求映射params参数

@ -4,7 +4,7 @@
* @Author: JC9527
* @Date: 2023-08-15 09:44:13
* @LastEditors: JC9527
* @LastEditTime: 2023-12-28 23:51:19
* @LastEditTime: 2024-01-04 15:23:57
-->
<template>
<div class="left-box">
@ -79,7 +79,7 @@
<script>
import titleBox from '../../components/title/index.vue'
import mapNumber from '../../components/mapLeftNumber/index.vue'
import { getDeviceList } from '@/api/bigScreenApi/eventApi.js'
import { getQueryViewListPage,getTrend } from '@/api/bigScreenApi/eventApi.js'
export default {
name:'mapLeftContent',
components:{titleBox,mapNumber},
@ -139,7 +139,21 @@ export default {
},
oneHeight:0,
screenHeight:'',
$listeners:false
$listeners:false,
eventList:{
viewCode:"event-all-list",
pageNo:"1",
pageSize:"10"
},
eventData:{
"queryValue": [
// {
// "colCode": "name",
// "queryValue": "111"
// },
],
"myInstanceClassify": "all"
}
}
},
props:['personLine','carLine'],
@ -178,7 +192,7 @@ export default {
})
},
getEvent(){
getDeviceList({type:1}).then(res=>{
getQueryViewListPage(this.eventList,this.eventData).then(res=>{
console.log(res,'resres');
})
},
@ -189,7 +203,10 @@ export default {
this.getDomHeight();
});
this.getDomHeight();
// this.getEvent();
this.getEvent();
getTrend({type:1}).then(res=>{
console.log(res,'事件来源');
})
},
}
</script>

@ -180,16 +180,36 @@
>
<div class="monitoring-popup">
<div class="monitoring-title">
<div class="title">{{ monitoringInfo.info.name }} {{ monitoringInfo.info.status == 1 ? "在线":"离线" }}</div>
<div class="title">{{ monitoringInfo.info.name }}</div>
<div class="mask" @click="markersClosePopup"></div>
</div>
<div class="monitoring">
<div class="bg">
<img src="@/assets/images/play-circle-fill@2x.png" alt="" @click="playVideo(monitoringInfo.info.status)">
<div class="monitoring-list">
<div class="person-info">
<div class="info-left">
<div class="dot"></div>
<div class="name">监控点名称</div>
</div>
<div class="position">{{ monitoringInfo.info.name }}</div>
</div>
<div class="person-info">
<div class="info-left">
<div class="dot"></div>
<div class="name">在线状态</div>
</div>
<div class="position">{{ monitoringInfo.info.status == 1 ? "在线":"离线" }}</div>
</div>
<div class="person-info">
<div class="info-left">
<div class="dot"></div>
<div class="name">安装位置</div>
</div>
<div class="position">{{ monitoringInfo.info.installPlace }}</div>
</div>
</div>
<div class="btns">
<div class="btn" @click="monitorVideos"></div>
<div class="btn">转发</div>
<div class="btn" @click="monitorVideos(monitoringInfo.info.status)"></div>
<div class="btn" @click="copyUrl()"></div>
</div>
</div>
</div>
@ -374,7 +394,7 @@
</div>
<personage-track ref="personageTrack"></personage-track>
<crew-assign ref="crewAssign"></crew-assign>
<video-wall ref="videoWall"></video-wall>
<!-- <video-wall ref="videoWall"></video-wall> -->
<alone-video ref="aloneVideo"></alone-video>
<shop ref="shop" width="50%" title="商铺详情查看" />
<new-event ref="newEvent"></new-event>
@ -463,8 +483,7 @@ import {
getVideoPageEq,
getPreviewURLs,
getCarManageList,
getQueryViewListPage,
eventSaveData
getStreetShopList,
} from "@/api/bigScreenApi";
import flvjs from "flv.js";
import axios from "axios";
@ -604,7 +623,8 @@ export default {
this.layers.text = new AMap.OverlayGroup(); //
this.layers.text1 = new AMap.OverlayGroup(); //
this.layers.markers = new AMap.OverlayGroup(); // markers
// this.layers.layer2.setzIndex(10);
// this.layers.layer3.setzIndex(9);
this.$nextTick(() => {
var geojson1 = new AMap.Polygon({
path:OneGJ02.features[0].geometry.coordinates[0][0],
@ -773,10 +793,14 @@ export default {
this.getQuyuGeoJson();
//
this.getLuduanGeoJson();
//
// this.layers.layer2.setOptions({ zIndex: 100 });
// this.layers.layer3.setOptions({ zIndex: 99 });
this.layers.layer2.on('click', (e)=>{
// console.log(e,'this.layers.layer2');
if(this.isPositioning) {
console.log(e,'eeeeeeee');
console.log(e.lnglat,'lnglat');
// console.log(e,'eeeeeeee');
var marker = new AMap.Marker({
position: new AMap.LngLat(e.lnglat.lng, e.lnglat.lat),
anchor: 'bottom-center',
@ -784,8 +808,12 @@ export default {
this.layers.layer4.addOverlay(marker);
map.add(this.layers.layer4)
let addressName
var lng = e.lnglat.lng + ''
var lat = e.lnglat.lat + ''
var lng = e.lnglat.lng + '';
var lat = e.lnglat.lat + '';
// let clickPoint = this.layers.layer2.getOverlays();
// for (var i = 0; i < clickPoint.length; i++) {
// console.log(clickPoint[i],'');
// }
axios.get('https://restapi.amap.com/v3/geocode/regeo',{
params:{
key: "5f4a2c045cffa20551a0300c31c1ee78",
@ -795,41 +823,11 @@ export default {
}
}).then(response=>{
// console.log(response,'response');
addressName = response.data.regeocode.aois[0].name;
console.log(addressName,'this.addressName');
addressName = response.data.regeocode.aois[0]?.name || response.data.regeocode.pois[0]?.name;
// console.log(addressName,'this.addressName');
if(this.layers.layer4) {
this.$refs.newEvent.open({lnglat:e.lnglat,address:addressName});
this.isPositioning = false;
}
})
}
})
this.layers.layer3.on('click', (e)=>{
if(this.isPositioning) {
console.log(e,'eeeeeeee');
console.log(e.lnglat,'lnglat');
var marker = new AMap.Marker({
position: new AMap.LngLat(e.lnglat.lng, e.lnglat.lat),
anchor: 'bottom-center',
})
this.layers.layer4.addOverlay(marker);
map.add(this.layers.layer4)
let addressName
var lng = e.lnglat.lng + ''
var lat = e.lnglat.lat + ''
axios.get('https://restapi.amap.com/v3/geocode/regeo',{
params:{
key: "5f4a2c045cffa20551a0300c31c1ee78",
location: `${lng.substring(0,9)},${lat.substring(0,9)}`,
extensions: 'all',
// batch: true,
}
}).then(response=>{
// console.log(response,'response');
addressName = response.data.regeocode.aois[0].name;
console.log(addressName,'this.addressName');
if(this.layers.layer4) {
this.$refs.newEvent.open({lnglat:e.lnglat,address:addressName});
// e.target.getExtData().name; e.target.getExtData()extDataname
this.$refs.newEvent.open({lnglat:e.lnglat,address:addressName,meshOccurs:e.target.getExtData().name});
this.isPositioning = false;
}
})
@ -880,8 +878,6 @@ export default {
this.layers.text.show();
}
} else if(zoom > 13.2){
//
// this.getWanggeGeoJson();
if(this.layers.layer2) {
this.layers.layer2.show();
this.layers.text1.hide();
@ -1299,41 +1295,59 @@ export default {
}
})
} else if(id == 4){
point.features.forEach((element)=>{
if (element.properties.name == "监控视频") {
this.mapLoading = false;
let obj = {position:[]};
obj.position[0] = element.geometry.coordinates[0];
obj.position[1] = element.geometry.coordinates[1];
obj.imgSrc = element.properties.status == "0" ? offIcon4 : ico5;
// obj.imgSrc = ico5;
obj.info = element;
this.markers.push(obj)
}
})
// getVideoPageEq({pageNo:1,pageSize:50}).then(res=>{
// this.mapLoading = false;
// // console.log(res,"res");
// res.data.forEach((element)=>{
// let obj = {position:[]};
// obj.position[0] = element.longitude;
// obj.position[1] = element.latitude;
// // obj.imgSrc = element.status == "0" ? offIcon4 : ico5;
// obj.imgSrc = ico5;
// obj.info = element
// this.markers.push(obj)
// })
// }).catch(err=>{
// this.mapLoading = false;
// })
} else if(id == 5){
// point.features.forEach((element)=>{
// if (element.properties.name == "") {
// if (element.properties.name == "沿") {
// let obj = {position:[]};
// obj.position[0] = element.geometry.coordinates[0];
// obj.position[1] = element.geometry.coordinates[1];
// obj.imgSrc = ico5;
// obj.imgSrc = ico6;
// this.markers.push(obj)
// this.mapLoading = false;
// }
// })
getVideoPageEq({pageNo:1,pageSize:50}).then(res=>{
this.mapLoading = false;
// console.log(res,"res");
res.data.forEach((element)=>{
getStreetShopList({pageSize:20,pageNum:1}).then(res=>{
res.rows.forEach(element => {
let obj = {position:[]};
obj.position[0] = element.longitude;
obj.position[1] = element.latitude;
// obj.imgSrc = element.status == "0" ? offIcon4 : ico5;
obj.imgSrc = ico5;
obj.info = element
obj.imgSrc = ico6;
obj.info = element;
this.markers.push(obj)
this.mapLoading = false;
})
}).catch(err=>{
this.$modal.msgError(err);
this.mapLoading = false;
})
} else if(id == 5){
point.features.forEach((element)=>{
if (element.properties.name == "沿街商铺分布") {
let obj = {position:[]};
obj.position[0] = element.geometry.coordinates[0];
obj.position[1] = element.geometry.coordinates[1];
obj.imgSrc = ico6;
this.markers.push(obj)
this.mapLoading = false;
}
})
}
},
// TODO:
@ -1506,12 +1520,37 @@ export default {
} else {
this.$modal.msgError("该设备已离线");
}
},
//
monitorVideos(){
this.$refs.videoWall.open();
monitorVideos(status){
// this.$refs.videoWall.open();
if(status == 1) {
getPreviewURLs({protocol:'hls',cameraIndexCode:this.monitoringInfo.info.cameraIndexCode,expand:"transcode=1"}).then(res=>{
if(res.code == 200) {
// console.log(res,'');
this.$refs.aloneVideo.open(res.msg);
}
})
} else {
this.$modal.msgError("该设备已离线");
}
},
//
copyUrl(){
getPreviewURLs({protocol:'hls',cameraIndexCode:this.monitoringInfo.info.cameraIndexCode,expand:"transcode=1"}).then(res=>{
if(res.code == 200) {
// this.$refs.aloneVideo.open(res.msg);
var aux = document.createElement("input");
aux.setAttribute("value", res.msg);
document.body.appendChild(aux);
aux.select();
document.execCommand("copy");
document.body.removeChild(aux);
this.$modal.msgSuccess("视频地址已复制");
}
}).catch(error=>{
this.$modal.msgError(error);
})
},
//
getShopInfo(){
@ -1531,6 +1570,9 @@ export default {
fillOpacity: 0.3,
editable:false,
visible:true,
extData:{
name: element.properties.NAME
},
})
var text = new AMap.Text({
// position: [element.properties.CENTERX,element.properties.CENTERY],
@ -1570,6 +1612,7 @@ export default {
var circle = new AMap.Circle({
center: shapeStr.features[0].geometry.coordinates,
radius: shapeStr.features[0].properties.radius,
bubble: true,
extData:{
id: '围栏polygon'
},
@ -1603,11 +1646,13 @@ export default {
this.map.add(this.layers.layer3);
element.myPolygon = circle;
element.text = text;
this.openClick(circle)
// this.map.add(text);
//
} else if (shapeStr.features[0].geometry.type == "Polygon") {
var weilan = new AMap.Polygon({
path:shapeStr.features[0].geometry.coordinates,
bubble: true,
extData:{
id: '围栏polygon'
},
@ -1643,6 +1688,7 @@ export default {
this.map.add(this.layers.layer3);
element.myPolygon = weilan;
element.text = text;
this.openClick(weilan)
// this.map.add([wangge,text]);
// this.map.add(text);
}
@ -1657,6 +1703,7 @@ export default {
let shapeStr = JSON.parse(element.shapeStr);
var quyu = new AMap.Polygon({
path:shapeStr.features[0].geometry.coordinates,
bubble: true,
strokeOpacity: 0,
strokeColor: '#FF0000',
fillColor: '#FF0000',
@ -1664,7 +1711,8 @@ export default {
editable:false,
visible:true,
extData:{
id: '区域polygon'
id: '区域polygon',
name: element.name
},
})
var text = new AMap.Text({
@ -1688,6 +1736,7 @@ export default {
this.layers.layer3.addOverlay(text)
this.layers.layer3.hide();
this.map.add(this.layers.layer3);
this.openClick(quyu)
// this.map.add([quyu,text]);
// this.map.add(text);
})
@ -1703,6 +1752,7 @@ export default {
// console.log(shapeStr,'shapeStrshapeStrshapeStr');
var luduan = new AMap.Polyline({
path:shapeStr.features[0].geometry.coordinates,
bubble: true,
strokeOpacity: 1,
strokeColor: '#46FF77',
editable:false,
@ -1726,11 +1776,59 @@ export default {
this.map.add(this.layers.layer3);
element.myPolyline = luduan;
element.text = text;
this.openClick(luduan)
// this.map.add([luduan,text]);
// this.map.add(text);
})
})
},
//
openClick(layer){
layer.on('click',(e)=>{
// console.log(e,'');
// console.log(this.map.getAllOverlays('circle','polyline','polygon'),'this.layers.layer2');
if(this.isPositioning) {
let latlng = e.lnglat
let name;
this.layers.layer2.eachOverlay((item)=>{
// console.log(item,'item');
if(item.getBounds().contains(latlng)){
name = item.getExtData().name
}
})
var marker = new AMap.Marker({
position: new AMap.LngLat(e.lnglat.lng, e.lnglat.lat),
anchor: 'bottom-center',
})
this.layers.layer4.addOverlay(marker);
this.map.add(this.layers.layer4)
let addressName
var lng = e.lnglat.lng + '';
var lat = e.lnglat.lat + '';
// let clickPoint = this.layers.layer2.getOverlays();
// for (var i = 0; i < clickPoint.length; i++) {
// console.log(clickPoint[i],'');
// }
axios.get('https://restapi.amap.com/v3/geocode/regeo',{
params:{
key: "5f4a2c045cffa20551a0300c31c1ee78",
location: `${lng.substring(0,9)},${lat.substring(0,9)}`,
extensions: 'all',
// batch: true,
}
}).then(response=>{
// console.log(response,'response');
addressName = response.data.regeocode.aois[0]?.name || response.data.regeocode.pois[0]?.name;
// console.log(addressName,'this.addressName');
if(this.layers.layer4) {
// e.target.getExtData().name; e.target.getExtData()extDataname
this.$refs.newEvent.open({lnglat:latlng,address:addressName,meshOccurs:name});
this.isPositioning = false;
}
})
}
})
},
//
realTimeLocationClick(item){
this.map.setZoomAndCenter(16,[item.longitude,item.latitude]);

@ -11,11 +11,25 @@
:on-error="handleUploadError"
:on-exceed="handleExceed"
ref="imageUpload"
:on-remove="handleDelete"
:on-preview="handlePictureCardPreview"
:show-file-list="false"
>
<i class="el-icon-plus"></i>
>
<!-- show-file-list是否显示已上传文件列表 :on-remove="handleDelete" :on-preview="handlePictureCardPreview"-->
<i class="el-icon-plus" v-show="fileList.length < 1"></i>
<TransitionGroup name="el-fade-in-linear" class="upload-items" tag="ul" v-show="fileList.length > 0">
<li v-for="(item, index) in fileList" :key="index" class="updataLI" @click.stop="handlePictureCardPreview(item)">
<div class="item-updata">
<div class="file">
<!-- <i class="el-icon-document"></i> -->
<span class="omit">{{ item.name }}</span>
</div>
<div class="delete">
<el-link @click.stop="handleDelete(item)" :underline="false" type="danger">删除</el-link>
</div>
</div>
</li>
</TransitionGroup>
</el-upload>
<!-- 上传提示 -->
@ -26,17 +40,37 @@
的文件
</div> -->
<!-- <el-dialog
<el-dialog
:visible.sync="dialogVisible"
title="预览"
width="800"
:close-on-press-escape="false"
:close-on-click-modal="false"
:title="dialogTitle"
width="500px"
append-to-body
@close="close"
>
<img
v-if="fileFormat == 'png' || fileFormat == 'jpg' || fileFormat == 'jpeg'"
:src="dialogImageUrl"
style="display: block; max-width: 100%; margin: 0 auto"
/>
</el-dialog> -->
<video
v-if="fileFormat == 'mp4'"
ref="myVideo"
:src="dialogImageUrl"
controls
style="display: block; max-width: 100%; margin: 0 auto"
>
</video>
<audio
v-if="fileFormat == 'mp3'"
:src="dialogImageUrl"
ref="myAudio"
controls
style="display: block; max-width: 100%; margin: 0 auto"
>
</audio>
</el-dialog>
</div>
</template>
@ -53,7 +87,7 @@ export default {
},
// (MB)
fileSize: {
type: Number,
type: Number,
default: 5,
},
// , ['png', 'jpg', 'jpeg']
@ -76,7 +110,9 @@ export default {
hideUpload: false,
baseUrl: process.env.VUE_APP_BASE_API,
uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/upload", //
fileList: []
fileList: [],
fileFormat:"",
dialogTitle:'图片预览'
};
},
watch: {
@ -89,9 +125,9 @@ export default {
this.fileList = list.map(item => {
if (typeof item === "string") {
if (item.indexOf(this.baseUrl) === -1) {
item = { name: this.baseUrl + item, url: this.baseUrl + item };
item = { name: this.baseUrl + item, url: this.baseUrl + item };
} else {
item = { name: item, url: item };
item = { name: item, url: item };
}
}
return item;
@ -115,8 +151,8 @@ export default {
// loading
handleBeforeUpload(file) {
let isImg = false;
let fileExtension = "";
if (this.fileType.length) {
let fileExtension = "";
if (file.name.lastIndexOf(".") > -1) {
fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
}
@ -128,19 +164,19 @@ export default {
} else {
isImg = file.type.indexOf("image") > -1;
}
// console.log(fileExtension,'fileExtension');
if (!isImg) {
this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!`);
this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}${this.fileType.includes('mp4') ? '视频' : this.fileType.includes('mp3') || this.fileType.includes('flac') ? '音频' : '图片'}格式文件!`);
return false;
}
if (this.fileSize) {
const isLt = file.size / 1024 / 1024 < this.fileSize;
if (!isLt) {
this.$modal.msgError(`上传头像图片大小不能超过 ${this.fileSize} MB!`);
this.$modal.msgError(`上传${fileExtension == 'mp4' ? '视频' : fileExtension == 'mp3' || fileExtension == 'flac' ? '音频' : '图片'}大小不能超过 ${this.fileSize} MB!`);
return false;
}
}
this.$modal.loading("正在上传图片,请稍候...");
this.$modal.loading(`正在上传${fileExtension == 'mp4' ? '视频' : fileExtension == 'mp3' || fileExtension == 'flac' ? '音频' : '图片'},请稍候...`);
this.number++;
},
//
@ -159,6 +195,7 @@ export default {
this.$refs.imageUpload.handleRemove(file);
this.uploadedSuccessfully();
}
this.$refs.imageUpload.clearFiles();
},
//
handleDelete(file) {
@ -170,7 +207,7 @@ export default {
},
//
handleUploadError() {
this.$modal.msgError("上传图片失败,请重试");
this.$modal.msgError("上传失败,请重试");
this.$modal.closeLoading();
},
//
@ -190,6 +227,14 @@ export default {
},
//
handlePictureCardPreview(file) {
this.fileFormat = file.name.slice(file.name.lastIndexOf(".") + 1)
if(this.fileFormat == 'mp4') {
this.dialogTitle = "视频预览"
} else if(this.fileFormat == "mp3") {
this.dialogTitle = "音频预览"
} else {
this.dialogTitle = "照片预览"
}
this.dialogImageUrl = file.url;
this.dialogVisible = true;
},
@ -203,6 +248,14 @@ export default {
}
}
return strs != '' ? strs.substr(0, strs.length - 1) : '';
},
//
close(){
if(this.fileFormat == 'mp4') {
this.$refs.myVideo.pause();
} else if(this.fileFormat == "mp3") {
this.$refs.myAudio.pause();
}
}
}
};
@ -210,17 +263,48 @@ export default {
<style scoped lang="scss">
// .el-upload--picture-card
::v-deep.hide .el-upload--picture-card {
display: none;
display: none;
}
::v-deep .upload-items {
list-style: none;
padding-left: 10px;
line-height: 35px;
margin: 0;
width: 100%;
.updataLI {
.item-updata {
display: flex;
align-items: center;
.file {
font-size: 14px;
font-family: "Source Han Sans CN-Medium";
font-weight: 500;
color: #e9f4ff;
display: flex;
align-items: center;
.omit {
display: inline-block;
width: 190px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.delete {
margin-left: 10px;
}
}
}
}
//
::v-deep .el-list-enter-active,
::v-deep .el-list-leave-active {
transition: all 0s;
transition: all 0s;
}
::v-deep .el-list-enter, .el-list-leave-active {
opacity: 0;
transform: translateY(0);
opacity: 0;
transform: translateY(0);
}
</style>

@ -1,20 +1,20 @@
<template>
<dia-log ref="dialog5" width="45%" title="新增事件" @close="Close">
<el-form :inline="true" :model="formInline" class="demo-form-inline" ref="myForm">
<el-form :inline="true" :model="formInline" class="demo-form-inline" ref="formInline" :rules="rules">
<el-row>
<el-col :span="12">
<el-form-item>
<el-form-item prop="reportEventObj.name">
<template slot="label">
<div class="new-event-form">
<div class="ball"></div>
<span>事件名称</span>
</div>
</template>
<el-input v-model="formInline.eventName" placeholder="请输入事件名称"></el-input>
<el-input v-model="formInline.reportEventObj.name" placeholder="请输入事件名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<el-form-item prop="reportEventObj.openTime">
<template slot="label">
<div class="new-event-form">
<div class="ball"></div>
@ -22,7 +22,7 @@
</div>
</template>
<el-date-picker
v-model="formInline.time"
v-model="formInline.reportEventObj.openTime"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetime"
placeholder="选择日期时间">
@ -32,14 +32,14 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item>
<el-form-item prop="reportEventObj.type">
<template slot="label">
<div class="new-event-form">
<div class="ball"></div>
<span>事件类别</span>
</div>
</template>
<el-select v-model="formInline.type" placeholder="请选择事件类别">
<el-select v-model="formInline.reportEventObj.type" placeholder="请选择事件类别">
<el-option
v-for="item in options"
:key="item.value"
@ -51,38 +51,38 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<el-form-item prop="reportEventObj.content">
<template slot="label">
<div class="new-event-form">
<div class="ball"></div>
<span>事件内容</span>
</div>
</template>
<el-input v-model="formInline.eventName" placeholder="请输入事件内容"></el-input>
<el-input v-model="formInline.reportEventObj.content" placeholder="请输入事件内容"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item>
<el-form-item prop="reportEventObj.address">
<template slot="label">
<div class="new-event-form">
<div class="ball"></div>
<span>事件地址</span>
</div>
</template>
<el-input v-model="formInline.address" placeholder="请输入事件地址"></el-input>
<el-input v-model="formInline.reportEventObj.address" placeholder="请输入事件地址"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<el-form-item prop="reportEventObj.meshOccurs">
<template slot="label">
<div class="new-event-form">
<div class="ball"></div>
<span>发生网格</span>
</div>
</template>
<el-select v-model="formInline.grid" placeholder="请选择">
<!-- <el-select v-model="formInline.reportEventObj.meshOccurs" placeholder="请选择">
<el-option
v-for="item in gridOptions"
:key="item.value"
@ -90,26 +90,31 @@
:value="item.value"
>
</el-option>
</el-select>
</el-select> -->
<el-cascader
v-model="formInline.reportEventObj.meshOccurs"
:options="gridOptions"
@change="handleChange">
</el-cascader>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item class="nobackground">
<el-form-item class="nobackground" prop="reportEventObj.imgUrl">
<template slot="label">
<div class="new-event-form">
<div class="ball"></div>
<span>事件照片</span>
</div>
</template>
<image-up v-model="formInline.imageUrls" :limit="1" />
<my-upload v-model="formInline.reportEventObj.imgUrl" :limit="1" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item class="nobackground">
<el-form-item class="nobackground" prop="reportEventObj.videoUrl">
<template slot="label">
<div class="new-event-form">
<div class="ball"></div>
@ -117,23 +122,24 @@
</div>
</template>
<!-- <el-input v-model="formInline.eventName" placeholder="请输入事件名称"></el-input> -->
<videoUpload v-model="formInline.videoUrls" :limit="1" />
<!-- <videoUpload v-model="formInline.reportEventObj.videoUrl" :limit="1" /> -->
<my-upload v-model="formInline.reportEventObj.videoUrl" :limit="1" :fileType="['mp4']" :fileSize="10" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item class="nobackground">
<el-form-item class="nobackground" prop="reportEventObj.audioUrl">
<template slot="label">
<div class="new-event-form">
<div class="ball"></div>
<span>事件音频</span>
</div>
</template>
<div class="component-upload-image">
<!-- <div class="component-upload-image">
<el-upload
id="audioUpload"
v-model="formInline.audioUrl"
v-model="formInline.reportEventObj.audioUrl"
class="upload-demo-audio"
action=""
:http-request="httpRequestHandler"
@ -144,15 +150,16 @@
>
<i class="el-icon-plus"></i>
</el-upload>
</div>
</div> -->
<my-upload v-model="formInline.reportEventObj.audioUrl" :limit="1" :fileType="['mp3','flac']" :fileSize="20" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="btns">
<div class="btn" @click="cancel()"></div>
<div class="btn btnTwo" @click="confirm()"></div>
<div class="btn" @click="cancel('formInline')"></div>
<div class="btn btnTwo" @click="confirm('formInline')"></div>
</div>
</el-col>
</el-row>
@ -161,26 +168,102 @@
</template>
<script>
import diaLog from "../../components/dialog/index.vue"
import imageUp from "../ImageUpload/index.vue"
import myUpload from "../myUpload/index.vue"
import videoUpload from "../videoFileUpload/index.vue"
import {
getQueryViewListPage,
eventSaveData
} from "@/api/bigScreenApi/eventApi.js";
export default {
components:{diaLog,imageUp,videoUpload},
components:{diaLog,myUpload,videoUpload},
data() {
return {
formInline: {
eventName: '',
time: "",
type: '',
grid: '',
address: '',
imageUrls: [],
videoUrls: [],
audioUrl: '',
reportEventObj: {
address: "", //
audioUrl: "", //
content: "", //
createPhone: "", //
dataStatus: "", // 稿 1
eventSource: "", //
imgUrl: "", //
isSimple: "", //
meshOccurs: "", //
name: "", //
openTime: "", //
randNumber: "", //
type: "", //
videoUrl: "" //
}
},
rules: {
"reportEventObj.name":[
{ required: true, message: '请输入事件名称', trigger: 'blur' },
],
"reportEventObj.openTime":[
{ required: true, message: '请选择发生时间', trigger: 'change' }
],
"reportEventObj.type":[
{ required: true, message: '请选择事件类别', trigger: 'change' }
],
"reportEventObj.content":[
{ required: true, message: '请输入事件内容', trigger: 'blur' },
],
"reportEventObj.address":[
{ required: true, message: '请输入事件地址', trigger: 'blur' },
],
"reportEventObj.meshOccurs":[
{ required: true, message: '请选择发生网格', trigger: 'change' }
],
"reportEventObj.imgUrl":[
{ required: true, message: '请选择事件照片', trigger: 'blur' },
],
"reportEventObj.videoUrl":[
{ required: true, message: '请选择事件视频', trigger: 'blur' },
],
"reportEventObj.audioUrl":[
{ required: true, message: '请选择事件音频', trigger: 'blur' },
],
},
baseUrl: process.env.VUE_APP_BASE_API,
formInfo:{
formKey:"report-event-submit", //
processDefId:"Process_17roha9:2:7fed99d1-964d-11ee-b204-0242ac1e0014", // id
isFlow:"true", // true
},
formData:{
"formData":{
"reportEventObj": {
"address": "上海镇江市鄂城区",
"audioUrl": "http://xsupqgraf.io/vnszlcr",
"content": "veniam",
"createPhone": "18644579846",
"dataStatus": "fugiat est nisi",
"eventSource": "non ex",
"imgUrl": "http://dummyimage.com/400x400",
"isSimple": "dolore",
"meshOccurs": "ut cillum nisi",
"name": "义里再",
"openTime": "2014-11-02 21:34:15",
"randNumber": "2",
"type": "veniam Lorem ullamco id reprehenderit",
"videoUrl": "http://ederrs.ga/fbbtutxdhq"
}
}
},
gridOptions: [
{
value: '选项1',
label: '选项1'
value: '一中队',
label: '一中队',
children: [
{
value: '一号网格',
label: '一号网格',
},{
value: '二号网格',
label: '二号网格',
},
]
},
],
options: [
@ -195,20 +278,39 @@ export default {
},
methods:{
open(obj) {
console.log(obj,'obj');
if(obj) {
this.formInline.address = obj.address
}
// console.log(obj,'obj');
this.$refs.dialog5.open('3');
this.$nextTick(()=>{
this.formInline.reportEventObj.address = obj?.address
})
},
Close() {
this.$refs.myForm.resetFields();
this.$refs.formInline.resetFields();
},
cancel(){
handleChange(){},
//
cancel(refForm){
this.$refs[refForm].resetFields();
this.$refs.dialog5.Close();
},
confirm(){
this.$refs.dialog5.Close();
//
confirm(formName){
this.$refs[formName].validate((valid) => {
if(valid){
this.formInline.reportEventObj.imgUrl = this.baseUrl + this.formInline.reportEventObj.imgUrl;
this.formInline.reportEventObj.videoUrl = this.baseUrl + this.formInline.reportEventObj.videoUrl;
this.formInline.reportEventObj.audioUrl = this.baseUrl + this.formInline.reportEventObj.audioUrl;
this.formInline.reportEventObj.meshOccurs = this.formInline.reportEventObj.meshOccurs.join(',');
console.log(this.formInline);
}
})
// eventSaveData(this.formInfo,{formData:this.formInline}).then(res=>{
// console.log(res,'===================res');
// if(res.code == 200 && res.success == true) {
// this.$refs.dialog5.Close();
// }
// })
},
beforeAvatarUpload(file) {
console.log('file', file)
@ -272,6 +374,11 @@ export default {
// color: #CCCCCC;
// line-height: 20px;
// }
.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before {
content: ' ';
width: 0px;
margin-right: 0px;
}
.new-event-form {
display: flex;
align-items: center;
@ -304,7 +411,7 @@ export default {
// background-color: transparent;
// width: 250px;
// }
.el-date-editor,.el-input--medium {
.el-date-editor,.el-input--medium,.el-cascader {
background-color: transparent;
width: 250px;
.el-input__inner {
@ -381,6 +488,54 @@ export default {
-webkit-text-fill-color: rgba(211, 238, 242, 0.2);
}
}
.el-cascader {
background-color: transparent;
width: 250px;
.el-input
.el-input__suffix
.el-input__suffix-inner
.el-icon-arrow-down {
display: flex;
align-items: center;
justify-content: center;
}
.el-input
.el-input__suffix
.el-input__suffix-inner
.el-icon-arrow-down::before {
content: "";
background: url("~@/assets/images/pull-down.png") center center
no-repeat;
background-size: 100% 100%;
width: 100%;
height: 22px;
}
.el-input__suffix .el-input__suffix-inner .el-input__icon {
width: 22px;
}
.el-input__suffix {
margin-right: 5px;
}
.el-input__inner {
background-color: transparent;
border: none;
width: 100%;
height: 35px;
font-size: 14px;
font-family: "Source Han Sans CN-Medium";
font-weight: 500;
color: #e9f4ff;
}
.el-input__inner::placeholder {
/* 在这里添加你想要修改的 placeholder 样式 */
font-size: 14px;
font-family: "Source Han Sans CN-Regular";
font-weight: 400;
color: #d3eef2;
-webkit-background-clip: text;
-webkit-text-fill-color: rgba(211, 238, 242, 0.2);
}
}
}
.nobackground {
.el-form-item__content {

@ -24,7 +24,7 @@
<div class="item">
<div class="ball"></div>
<div class="content">
当前状态<span>{{ person ? "移动中" : "行驶中" }}</span>
当前状态<span>{{ person ? personItem.status == '1' ? '在线' : personItem.status == '0' ? '离线' : '' : "行驶中" }}</span>
</div>
</div>
</div>

@ -4,7 +4,7 @@
* @Author: JC9527
* @Date: 2023-12-26 18:01:27
* @LastEditors: JC9527
* @LastEditTime: 2023-12-26 18:26:14
* @LastEditTime: 2024-01-04 09:43:35
-->
<template>
<div class="component-upload-image">
@ -13,11 +13,28 @@
ref="upload"
:auto-upload="false"
:multiple="false"
action="http://up-z2.qiniu.com"
:action="uploadVideo"
:on-success="successVideo"
:before-upload="handleBeforeUpload"
:limit="limit"
:on-error="handleUploadError"
:on-exceed="handleExceed"
:show-file-list="false"
>
<i class="el-icon-plus"></i>
<i class="el-icon-plus" v-show="fileList.length < 1"></i>
<TransitionGroup name="el-fade-in-linear" class="upload-items" tag="ul" v-show="fileList.length > 0">
<li v-for="(item, index) in fileList" :key="index" class="updataLI" @click.stop="handlePictureCardPreview(item)">
<div class="item-updata">
<div class="file">
<!-- <i class="el-icon-document"></i> -->
<span class="omit">{{ item.name }}</span>
</div>
<div class="delete">
<el-link @click.stop="handleDelete(item)" :underline="false" type="danger">删除</el-link>
</div>
</div>
</li>
</TransitionGroup>
</el-upload>
</div>
</template>
@ -25,10 +42,82 @@
export default {
data() {
return {
fileList:[]
fileList:[],
baseUrl: process.env.VUE_APP_BASE_API,
uploadVideo: process.env.VUE_APP_BASE_API + "/common/upload", //
}
},
props: {
limit:{
type:Number,
default:1
},
fileType: {
type: Array,
default: () => ["mp4"],
},
},
watch: {
value: {
handler(val) {
if (val) {
//
const list = Array.isArray(val) ? val : this.value.split(',');
//
this.fileList = list.map(item => {
if (typeof item === "string") {
if (item.indexOf(this.baseUrl) === -1) {
item = { name: this.baseUrl + item, url: this.baseUrl + item };
} else {
item = { name: item, url: item };
}
}
return item;
});
} else {
this.fileList = [];
return [];
}
},
deep: true,
immediate: true
}
},
methods:{
// loading
handleBeforeUpload(file) {
let isImg = false;
if (this.fileType.length) {
let fileExtension = "";
if (file.name.lastIndexOf(".") > -1) {
fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
}
isImg = this.fileType.some(type => {
if (file.type.indexOf(type) > -1) return true;
if (fileExtension && fileExtension.indexOf(type) > -1) return true;
return false;
});
} else {
isImg = file.type.indexOf("video") > -1;
}
if (!isImg) {
this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}视频格式文件!`);
return false;
}
// if (this.fileSize) {
// const isLt = file.size / 1024 / 1024 < this.fileSize;
// if (!isLt) {
// this.$modal.msgError(` ${this.fileSize} MB!`);
// return false;
// }
// }
this.$modal.loading("正在上传视频,请稍候...");
},
//
handleExceed() {
this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`);
},
successVideo(response, file, fileList) {
var url = URL.createObjectURL(fileList[0].raw);
var audioElement = new Audio(url);
@ -37,7 +126,20 @@ export default {
duration =parseInt(audioElement.duration) ; //
console.log(duration);
});
}
},
//
handleUploadError() {
this.$modal.msgError("上传图片失败,请重试");
this.$modal.closeLoading();
},
//
handleDelete(file) {
const findex = this.fileList.map(f => f.name).indexOf(file.name);
if(findex > -1) {
this.fileList.splice(findex, 1);
this.$emit("input", this.listToString(this.fileList));
}
},
},
}
</script>

@ -55,6 +55,13 @@ module.exports = {
["^" + process.env.VUE_APP_BASE_API1]: "",
},
},
[process.env.VUE_APP_BASE_API2]: {
target: `http://localhost:9029`,
changeOrigin: true,
pathRewrite: {
["^" + process.env.VUE_APP_BASE_API2]: "",
},
},
},
disableHostCheck: true,
},

Loading…
Cancel
Save