Files
sgxt_web/src/views/home/components/deployControlItem.vue

241 lines
7.2 KiB
Vue
Raw Normal View History

2025-08-01 17:16:03 +08:00
<template>
2025-11-22 21:59:58 +08:00
<div class="warning-card" :style="{ 'border': `1px solid ${changeBG(item.yjjb)}` }">
2025-08-01 17:16:03 +08:00
<div class="warning-image flex">
2025-10-26 12:25:50 +08:00
<!-- -->
2025-11-22 21:59:58 +08:00
<template v-if="!item.yjtp || item.yjtp.includes('baidu')">
<img src="@/assets/images/car.png" width="65" height="70" v-if="item.yjlb == 2" />
2025-10-26 12:25:50 +08:00
<img src="@/assets/images/default_male.png" width="65" height="70" v-else />
2025-10-09 21:33:58 +08:00
</template>
2025-11-22 21:59:58 +08:00
<el-image preview-teleported v-else @click.stop style="width: 65px; height: 70px" :src="item.yjtp" :preview-src-list="[item.yjtp]" show-progress>
2025-10-26 12:25:50 +08:00
<template #error>
<div class="image-slot error">
2025-11-22 21:59:58 +08:00
<img src="@/assets/images/car.png" width="65" height="70" v-if="item.yjlb == 2" />
2025-10-26 12:25:50 +08:00
<img src="@/assets/images/default_male.png" width="65" height="70" v-else />
</div>
</template>
</el-image>
2025-08-01 17:16:03 +08:00
<div class="ml10 warning-info">
<div class="flex just-between align-center">
2025-11-22 21:59:58 +08:00
<div class="flex align-center mt4" v-if="item.yjlb == 2">
<span>{{ item.cph }}</span>
2025-10-26 12:25:50 +08:00
</div>
2025-08-01 17:16:03 +08:00
<div class="flex align-center mt4" v-else>
2025-11-22 21:59:58 +08:00
<span>{{ item.ryxm }}</span>
2025-08-01 17:16:03 +08:00
<span class="gapline mr10 ml10"></span>
2025-11-22 21:59:58 +08:00
<span>{{ IdCard(item.rysfzh, 2) }}</span>
2025-08-01 17:16:03 +08:00
<span class="gapline mr10 ml10"></span>
2025-11-22 21:59:58 +08:00
<span>{{ IdCard(item.rysfzh, 3) }}</span>
2025-08-01 17:16:03 +08:00
</div>
2025-11-22 21:59:58 +08:00
<span class="tag" v-if="item.yjbq" :style="{ 'background': `${changeBG(item.yjjb)}` }">{{ item.yjbq }}</span>
2025-10-26 12:25:50 +08:00
</div>
2025-11-22 21:59:58 +08:00
<div v-if="item.yjlb == 2" class="flex">车牌类型
<DictTag :tag="false" :value="item.hplx" color="#fff" :options="dict.D_BZ_HPZL" />
2025-08-01 17:16:03 +08:00
</div>
2025-11-22 21:59:58 +08:00
<div class="mt4" v-else>身份证{{ item.rysfzh }}</div>
<div class="mt4 two_text_detail">预警时间{{ item.yjsj }}</div>
2025-08-01 17:16:03 +08:00
</div>
</div>
2025-11-22 21:59:58 +08:00
<div class="warning-info warning-boder pb5" v-if="item.yjlx == '01'">
<div class="mt4 two_text_detail">预警内容{{ item.yjnr }}</div>
2025-08-01 17:16:03 +08:00
</div>
2025-11-22 21:59:58 +08:00
<div class="warning-info pt5 pb5 warning-boder" v-if="item.yjlx == '01'">
<div class="mt4 two_text_detail">处置结果{{ item.yjnr }}</div>
2025-08-01 17:16:03 +08:00
</div>
2025-11-22 21:59:58 +08:00
<div class="warning-info pt5 " v-if="item.yjlx == '01'">
2025-10-26 12:25:50 +08:00
<div class="two_text_detail flex lh25"><img src="@/assets/images/ddtb.png" width="20" height="25" alt=""
srcset="">{{
2025-11-22 21:59:58 +08:00
item.yjnr }}</div>
</div>
<div class="mt4 two_text_detail" v-if="buttonBox">
2025-11-28 22:25:58 +08:00
<el-button type="primary" @click="pushAssess(item)">全息档案</el-button>
<el-button type="primary" @click="pushWarning(item)">预警指派</el-button>
2025-11-22 21:59:58 +08:00
<el-button color="#ef7762" @click="showDetail(item)" style="color: #fff;">转合成</el-button>
2025-11-27 14:27:59 +08:00
<!-- <el-button type="warning">转基管</el-button> -->
2025-11-22 21:59:58 +08:00
<el-button type="danger">转会商</el-button>
<el-button type="success" @click="showFeedback(item, '签收')" v-if="item.czzt == '01'">签收</el-button>
<el-button type="success" @click="showFeedback(item, '反馈')" v-if="item.czzt == '02'">反馈</el-button>
<el-button type="success" @click="showFeedback(item, '查看反馈')" v-if="item.czzt == '03'">查看反馈</el-button>
<el-button type="success" @click="plotThetrajectory(item.rysfzh)">轨迹上图</el-button>
2025-08-01 17:16:03 +08:00
</div>
2025-11-22 21:59:58 +08:00
<!-- props.item.czzt == '03'" -->
2025-08-01 17:16:03 +08:00
</div>
2025-11-22 21:59:58 +08:00
<HolographicArchive v-model="assessShow" :dataList="dataList" />
2025-11-28 22:25:58 +08:00
<WarningAssignment v-model="warningShow" :dataList="dataList"/>
2025-08-01 17:16:03 +08:00
</template>
<script setup>
import { IdCard } from '@/utils/validate.js'
2025-11-28 22:25:58 +08:00
import { reactive, ref, getCurrentInstance, watch } from "vue";
2025-11-22 21:59:58 +08:00
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import HolographicArchive from './holographicArchive.vue'
2025-11-28 22:25:58 +08:00
import WarningAssignment from './warningAssignment.vue'
2025-11-22 21:59:58 +08:00
const { proxy } = getCurrentInstance();
2025-08-01 17:16:03 +08:00
const props = defineProps({
item: {
type: Object,
default: {}
}, dict: {
tupe: Object,
default: {}
2025-11-22 21:59:58 +08:00
}, buttonBox: {
type: Boolean,
default: false
2025-08-01 17:16:03 +08:00
}
});
2025-11-28 22:25:58 +08:00
watch(() => props.item, (newVal, oldVal) => {
emit('fkLxOptions', newVal);
},{deep:true,immediate:true})
const emit = defineEmits(["plotThetrajectory", "showDetail", 'showFeedback','fkLxOptions']);
2025-08-01 17:16:03 +08:00
const changeBG = (str) => {
switch (str) {
2025-11-28 22:25:58 +08:00
case "01":
2025-08-01 17:16:03 +08:00
return "red";
2025-11-28 22:25:58 +08:00
case "02":
2025-08-01 17:16:03 +08:00
return "orange";
2025-11-28 22:25:58 +08:00
case "03":
2025-10-26 12:25:50 +08:00
return "#b5b522";
2025-11-22 21:59:58 +08:00
default:
return "blue";
2025-08-01 17:16:03 +08:00
}
};
2025-11-22 21:59:58 +08:00
// 轨迹上图
const plotThetrajectory = (val) => {
emit('plotThetrajectory', val);
}
// 查看反馈
const showFeedback = (val, type) => {
switch (type) {
case '签收':
proxy.$confirm("是否确定要签收?", "警告", { type: "warning" }).then(() => {
2025-11-28 22:25:58 +08:00
// switch (val.czzt) {
// case '01':
// val.czzt = '02'
// break;
// case '02':
// val.czzt = '03'
// break;
// default:
// break;
// }
2025-11-22 21:59:58 +08:00
qcckPost({ id: val.id }, "/mosty-gsxt/tbYjxx/yjqs").then(() => {
val.czzt = '02'
proxy.$message({ type: "success", message: "签收成功" });
});
})
break;
case '反馈':
case '查看反馈':
const data = {
...val,
type: type,
}
emit('showFeedback', data);
break;
}
}
const showDetail = (item) => {
emit('showDetail', item);
}
2025-11-28 22:25:58 +08:00
// 全息档案
2025-11-22 21:59:58 +08:00
const assessShow = ref(false)
const dataList = ref()
const pushAssess = (val) => {
assessShow.value = true;
dataList.value = val;
}
2025-11-28 22:25:58 +08:00
// 预警指派
const warningShow = ref(false)
const pushWarning = (val) => {
warningShow.value = true;
dataList.value = val;
}
2025-08-01 17:16:03 +08:00
</script>
<style lang="scss" scoped>
.warning-card {
2025-10-26 12:25:50 +08:00
// background: url("~@/assets/images/xxxxxx.png") no-repeat center center;
2025-08-01 17:16:03 +08:00
background-size: 100% 100%;
2025-10-26 12:25:50 +08:00
2025-08-01 17:16:03 +08:00
gap: 12px;
margin-bottom: 4px;
padding: 10px;
box-sizing: border-box;
.warning-image {
2025-10-09 21:33:58 +08:00
//
2025-08-01 17:16:03 +08:00
// width: 80px;
// height: 100px;
// img {
// width: 100%;
// height: 100%;
// object-fit: cover;
// }
}
.warning-info {
flex: 1;
2025-10-09 21:33:58 +08:00
2025-08-01 17:16:03 +08:00
.tag {
padding: 1px 6px;
background: #0072FF;
border-radius: 2px 2px 2px 2px;
font-size: 12px;
}
.gapline {
width: 2px;
height: 14px;
background: #e9e9e9;
}
}
2025-10-09 21:33:58 +08:00
// 图片错误状态样式
.image-slot {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
background-color: #f5f5f5;
border-radius: 4px;
}
// 主图错误和预览图错误的样式
.image-slot.error,
.image-slot.viewer-error {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
}
2025-10-26 12:25:50 +08:00
.warning-boder {
border-bottom: 2px dashed #0958b2;
2025-08-01 17:16:03 +08:00
}
}
.red {
background: url("~@/assets/images/GroupRed.png") no-repeat center center;
background-size: 100% 100%;
}
.orange {
background: url("~@/assets/images/GroupOrange.png") no-repeat center center;
background-size: 100% 100%;
}
.yellow {
background: url("~@/assets/images/GroupYellow.png") no-repeat center center;
background-size: 100% 100%;
}
.blue {
background: url("~@/assets/images/GroupBlue.png") no-repeat center center;
background-size: 100% 100%;
}
</style>