类型:开发

描述:
This commit is contained in:
2025-09-25 15:57:37 +08:00
parent 90347ba87a
commit a23660efd6
9 changed files with 269 additions and 39 deletions

View File

@@ -7,7 +7,13 @@ export function getListApi() {
method: 'get'
})
}
// 统计
export function getDetailApi(id) {
return request({
url: '/fjtcc-api/api/largeScreen/workorder/detail/'+id,
method: 'get'
})
}
// 统计
export function getTotalApi() {
return request({

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long

View File

@@ -26,7 +26,7 @@
<el-input placeholder="请输入内容" v-model="cameraName" @input="onInput" />
<img class="search-icon" src="/src/assets/images/search-icon-1.png" alt="" />
</div>
<div class="tree-box">
<div class="tree-item" v-for="(item, i) in regionList" :key="i">
<div class="tree-item__node" @click="handleRegions(i)">
@@ -91,7 +91,7 @@
</p>
</div>
</div>
</div>
<div class="pagination">
<el-pagination
@@ -244,7 +244,7 @@
if (status == 0) {
thisVideo.value.isCollect=1
videoList.value[index].isCollect = 1
} else {
thisVideo.value.isCollect=0
videoList.value[index].isCollect = 0
@@ -427,14 +427,13 @@
cameraName: cameraName.value,
businessScenicArea: params.businessScenicArea
})
console.log(res,11111111111111)
regionList.value = res.data
regionList.value.forEach((item,index)=>{
// item.show = true
item.videoResources=item.resourcesList[0].videoResources
})
regionList.value[0].show = true
regionList.value[0].show = false
}
const handleRegions = (e) => {
regionList.value[e].show = !regionList.value[e].show
@@ -448,10 +447,10 @@
cameraName.value = ''
params.businessScenicArea = data.name
getVideoRegions()
})
onMonitorChange()
})
onUnmounted(() => {
clearHlsRefs()
@@ -506,7 +505,7 @@
}
}
.video-box {
display: flex;
flex: 1;
flex: 1;

View File

@@ -22,8 +22,8 @@
</div>
<div class="main">
<a @click="hanldeToDetails" class="look-btn">
查看详情
<!-- <img src="@/assets/images/d-ico-1.png" /> -->
<!-- 查看详情-->
<img src="@/assets/images/d-icon-1.png" />
</a>
<iframe v-if="scenicSpotId == 'root000000'" width="100%" height="100%" src="/map/sxzd/bdc.html"></iframe>
<iframe v-if="scenicSpotId == 'root00000000'" width="100%" height="100%" src="/map/sxzd/sxzd.html"></iframe>
@@ -110,10 +110,8 @@
<template v-if="scenicSpotId == 'root00000000'">
<div>徒步订票</div>
</template>
<template v-else>
<div>团队订票</div>
<div>散客订票</div>
</template>
<div>团队订票</div>
<div>散客订票</div>
</div>
<div class="list">
<div class="item" v-for="(item, index) in gridData" :key="index">
@@ -122,10 +120,8 @@
<template v-if="scenicSpotId == 'root00000000'">
<div>{{ item.walk }}</div>
</template>
<template v-else>
<div>{{ item.group }}</div>
<div>{{ item.single }}</div>
</template>
<div>{{ item.group }}</div>
<div>{{ item.single }}</div>
</div>
</div>
</div>
@@ -329,14 +325,14 @@ import pubSub from 'pubsub-js'
padding: vw(20);
display: flex;
align-items: center;
background: #0a4190;
//background: #0a4190;
border-radius: vw(4);
font-size: vw(16);
font-weight:700;
color: #fff;
z-index: 999;
img{
width:vw(100);
width:vw(80);
// height:;
}
}

View File

@@ -393,10 +393,11 @@
hIndex.value = index;
}
const handlePop2 = async()=>{
dialogTableVisible2.value = true
let res = await getSpotPassengerFlow({scenicSpotId:props.scenicSpotId})
tjArr.value = res.data
console.log(res,'res')
if(props.scenicSpotId=="root00000000"){
dialogTableVisible2.value = true
let res = await getSpotPassengerFlow({scenicSpotId:props.scenicSpotId})
tjArr.value = res.data
}
}
let show = ref(false)
let scenicChange = null

View File

@@ -8,24 +8,236 @@
<span :class="item.level">{{ item.level_text }}</span>
<p>{{ item.title }}</p>
<span class="time">{{ item.time }}</span>
<span class="btn" @click="showDetail(item.id)">详情</span>
</div>
</div>
<el-dialog :title="'工单详情'" center v-model="dialogVisible">
<div class="bom-box">
<div class="modal-body">
<div class="m-modal">
<div class="item-title--primary">工单信息</div>
<div class="item-col">
<div class="detail-item">
<span class="label">所属景区</span>
<span class="value">{{ detail.road }}</span>
</div>
<div class="detail-item">
<span class="label">工单类型</span>
<span class="value">{{ detail.type }}</span>
</div>
<div class="detail-item">
<span class="label">紧急程度</span>
<span :class="'value '+detail.level">{{ detail.levelText }}</span>
</div>
</div>
<div class="item-col">
<div class="detail-item">
<span class="label">具体地点</span>
<span class="value">{{ detail.address }}</span>
</div>
<div class="detail-item">
<span class="label">创建时间</span>
<span class="value">{{ detail.createTime }}</span>
</div>
<div class="detail-item">
<span class="label">完成期限</span>
<span class="value">{{ detail.completionDeadline }}</span>
</div>
</div>
<div class="item-col">
<div class="detail-item">
<span class="label">创建人</span>
<span class="value">{{ detail.unidName }}</span>
</div>
<div class="detail-item">
<span class="label">状态</span>
<span class="value important" v-if="detail.status==0">待处理</span>
<span class="value warn" v-else-if="detail.status==1">进行中</span>
<span class="value normal" v-else-if="detail.status==2">已完成</span>
<span class="value" v-else>已关闭</span>
</div>
<div class="detail-item">
<span class="label">工单内容</span>
<span class="value">{{ detail.title }}</span>
</div>
</div>
<div class="detail-item" v-if="detail.imgs">
<el-image class="img" :preview-src-list="detail.imgs.split(',')" :src="src" v-for="(src, index) in detail.imgs.split(',')"></el-image>
</div>
<div class="item-title--warning" v-if="detail.follow && detail.follow.length>0">跟进信息</div>
<template v-for="item in detail.follow">
<div class="item-col" >
<div class="detail-item">
<span class="label">跟进人</span>
<span class="value">{{ item.unidName }}</span>
</div>
<div class="detail-item">
<span class="label">跟进地点</span>
<span class="value">{{ item.address }}</span>
</div>
<div class="detail-item">
<span class="label">完成率</span>
<span class="value">{{ item.rate }}%</span>
</div>
</div>
<div class="item-col">
<div class="detail-item" style="flex: 2">
<span class="label">跟进内容</span>
<span class="value">{{ item.title }}</span>
</div>
<div class="detail-item">
<span class="label">跟进时间</span>
<span class="value">{{ item.createTime }}</span>
</div>
</div>
<div class="detail-item" v-if="item.img">
<el-image class="img" :preview-src-list="item.img.split(',')" :src="src" v-for="(src, index) in item.img.split(',')"></el-image>
</div>
<div style="border-bottom: 1px solid #ffffff;margin: 10px 0;"></div>
</template>
<div class="item-title--warning" v-if="detail.evaluate && detail.evaluate.length>0">评价信息</div>
<template v-for="item in detail.evaluate">
<div class="item-col" >
<div class="detail-item">
<span class="label">评价人</span>
<span class="value warn">{{ item.unidName }}</span>
</div>
<div class="detail-item">
<span class="label">评价内容</span>
<span class="value">{{ item.title }}</span>
</div>
<div class="detail-item">
<span class="label">评价时间</span>
<span class="value">{{ item.createTime }}</span>
</div>
</div>
<div class="detail-item" v-if="item.img">
<el-image class="img" :preview-src-list="item.img.split(',')" :src="src" v-for="(src, index) in item.img.split(',')"></el-image>
</div>
<div style="border-bottom: 1px solid #ffffff;margin: 10px 0;"></div>
</template>
</div>
</div>
</div>
</el-dialog>
</div>
</template>
<script setup>
import { getListApi } from '@/api/workOrder'
import {getDetailApi, getListApi} from '@/api/workOrder'
let dialogVisible = ref(false)
let list = ref([])
let detail = ref({})
const getList = async () => {
let res = await getListApi()
list.value = res.data
}
const showDetail = async (id) => {
dialogVisible.value = true
let res = await getDetailApi(id)
console.log( res.data);
detail.value = res.data
}
onMounted(() => {
getList()
})
</script>
<style lang="scss" scoped>
:deep(.el-dialog__headerbtn .el-dialog__close){
color:#fff;
font-size:40px;
position:relative;
top:15px;
right:15px;
}
:deep(.el-dialog__header.show-close){
padding-right:0;
}
:deep(.el-dialog) {
background: url('/src/assets/images/map-bg-2.png') no-repeat top center;
background-size: 100% 100%;
width:vw(1500);
}
:deep(.el-dialog__title) {
color: #fff;
font-weight: bold;
}
.m-modal{
padding: vw(30);
.normal {
padding:3px 10px;
background: #2380fb;
}
.warn {
padding:3px 10px;
background: #feae00;
}
.important {
padding:3px 10px;
background: #d9011b;
}
.item-title{
font-size: 18px;
margin-bottom: vw(30);
&--primary {
@extend .item-title;
color: #02f9fa;
background-image: url('@/assets/images/mask-primary.png');
background-size: 100% 100%;
}
&--error {
@extend .item-title;
background-image: url('@/assets/images/mask-error.png');
background-size: 100% 100%;
}
&--warning {
@extend .item-title;
background-image: url('@/assets/images/mask-warning.png');
background-size: 100% 100%;
}
&--success {
@extend .item-title;
background-image: url('@/assets/images/mask-success.png');
background-size: 100% 100%;
}
}
.item-col{
display: flex;
justify-content: space-between;
}
}
.detail-item {
flex:1;
margin-bottom: 12px;
line-height: 1.5;
.img{
width:vw(200);
height: vw(200);
margin: 10px;
}
}
.bom-box {
.modal-body {
padding: 16px;
color:#fff;
height:vh(780);
overflow:auto;
/* 滚动条整体样式 */
&::-webkit-scrollbar {
width: vw(4); /* 滚动条的宽度 */
}
/* 滚动条轨道 */
&::-webkit-scrollbar-track {
background: 'transparent'; /* 轨道的背景色 */
}
/* 滚动条滑块 */
&::-webkit-scrollbar-thumb {
background: rgba(0, 150, 255, 0.63); /* 滑块的背景色 */
border-radius: 5px; /* 滑块的圆角 */
}
}
}
.work-box-1 {
width: vw(815);
height: vh(950);
@@ -84,7 +296,7 @@
@extend .label;
background: #d9011b;
}
.time {
.time,.btn {
font-weight: 400;
font-size: vw(12);
color: rgba(255, 255, 255, 0.6);
@@ -94,9 +306,13 @@
text-transform: none;
margin-left: vw(30);
}
.btn{
color: #2380fb;
cursor: pointer;
}
p {
font-weight: 400;
font-size: vw(15);
//font-size: vw(15);
color: #ffffff;
text-align: left;
font-style: normal;

View File

@@ -12,12 +12,13 @@
<div class="item item1">
工单完成数 <span class="color1"><countup :end-val="totalData.complete" /></span>
</div>
<div class="item item3">
紧急工单数 <span class=""><countup :end-val="totalData.warn" /></span>
</div>
<div class="item item2">
重要工单数 <span class=""><countup :end-val="totalData.important" /></span>
</div>
<div class="item item3">
紧急工单数 <span class=""><countup :end-val="totalData.warn" /></span>
</div>
<div class="item item1">
普通工单数 <span class=""><countup :end-val="totalData.normal" /></span>
</div>
@@ -311,11 +312,11 @@
background-size: 100% 100%;
}
.item2 {
background-image: url('@/assets/images/work-n-bg-2.png');
background-image: url('@/assets/images/work-n-bg-3.png');
background-size: 100% 100%;
}
.item3 {
background-image: url('@/assets/images/work-n-bg-3.png');
background-image: url('@/assets/images/work-n-bg-2.png');
background-size: 100% 100%;
}
}