This commit is contained in:
lcw
2025-11-22 21:59:58 +08:00
parent ea3022c3f6
commit 93c49dff27
661 changed files with 195357 additions and 2160 deletions

View File

@ -1,59 +1,73 @@
<template>
<div class="warning-card" :style="{'border':`1px solid ${changeBG(item.yjJb)}`}" >
<div class="warning-card" :style="{ 'border': `1px solid ${changeBG(item.yjjb)}` }">
<div class="warning-image flex">
<!-- -->
<template v-if="!item.yjTp || item.yjTp.includes('baidu')">
<img src="@/assets/images/car.png" width="65" height="70" v-if="item.yjLx == 2" />
<template v-if="!item.yjtp || item.yjtp.includes('baidu')">
<img src="@/assets/images/car.png" width="65" height="70" v-if="item.yjlb == 2" />
<img src="@/assets/images/default_male.png" width="65" height="70" v-else />
</template>
<el-image v-else style="width: 65px; height: 70px" :src="item.yjTp" :preview-src-list="[item.yjTp]" show-progress>
<el-image preview-teleported v-else @click.stop style="width: 65px; height: 70px" :src="item.yjtp" :preview-src-list="[item.yjtp]" show-progress>
<template #error>
<div class="image-slot error">
<img src="@/assets/images/car.png" width="65" height="70" v-if="item.yjLx == 2" />
<img src="@/assets/images/car.png" width="65" height="70" v-if="item.yjlb == 2" />
<img src="@/assets/images/default_male.png" width="65" height="70" v-else />
</div>
</template>
</el-image>
<div class="ml10 warning-info">
<div class="flex just-between align-center">
<div class="flex align-center mt4" v-if="item.yjLx == 2">
<span>{{ item.yjClcph }}</span>
<div class="flex align-center mt4" v-if="item.yjlb == 2">
<span>{{ item.cph }}</span>
</div>
<div class="flex align-center mt4" v-else>
<span>{{ item.yjRyxm }}</span>
<span>{{ item.ryxm }}</span>
<span class="gapline mr10 ml10"></span>
<span>{{ IdCard(item.yjRysfzh, 2) }}</span>
<span>{{ IdCard(item.rysfzh, 2) }}</span>
<span class="gapline mr10 ml10"></span>
<span>{{ IdCard(item.yjRysfzh, 3) }}</span>
<span>{{ IdCard(item.rysfzh, 3) }}</span>
</div>
<span class="tag" v-if="item.yjbqmc" :style="{'background':`${changeBG(item.yjJb)}`}">{{ item.yjbqmc }}</span>
<span class="tag" v-if="item.yjbq" :style="{ 'background': `${changeBG(item.yjjb)}` }">{{ item.yjbq }}</span>
</div>
<div v-if="item.yjLx == 2" class="flex">车牌类型
<DictTag :tag="false" :value="item.yjHplx" color="#fff" :options="dict.D_BZ_HPZL" />
<div v-if="item.yjlb == 2" class="flex">车牌类型
<DictTag :tag="false" :value="item.hplx" color="#fff" :options="dict.D_BZ_HPZL" />
</div>
<div class="mt4" v-else>身份证{{ item.yjRysfzh }}</div>
<div class="mt4 two_text_detail">预警时间{{ item.yjSj }}</div>
<div class="mt4" v-else>身份证{{ item.rysfzh }}</div>
<div class="mt4 two_text_detail">预警时间{{ item.yjsj }}</div>
</div>
</div>
<div class="warning-info warning-boder pb5">
<div class="mt4 two_text_detail">预警内容{{ item.yjNr }}</div>
<div class="warning-info warning-boder pb5" v-if="item.yjlx == '01'">
<div class="mt4 two_text_detail">预警内容{{ item.yjnr }}</div>
</div>
<div class="warning-info pt5 pb5 warning-boder">
<div class="mt4 two_text_detail">处置结果{{ item.yjNr }}</div>
<div class="warning-info pt5 pb5 warning-boder" v-if="item.yjlx == '01'">
<div class="mt4 two_text_detail">处置结果{{ item.yjnr }}</div>
</div>
<div class="warning-info pt5 ">
<div class="warning-info pt5 " v-if="item.yjlx == '01'">
<div class="two_text_detail flex lh25"><img src="@/assets/images/ddtb.png" width="20" height="25" alt=""
srcset="">{{
item.yjNr }}</div>
item.yjnr }}</div>
</div>
<div class="mt4 two_text_detail" v-if="buttonBox">
<el-button type="primary" @click="pushAssess(item)">全息档案</el-button>
<el-button color="#ef7762" @click="showDetail(item)" style="color: #fff;">转合成</el-button>
<el-button type="warning">转基管</el-button>
<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>
</div>
<!-- props.item.czzt == '03'" -->
</div>
<HolographicArchive v-model="assessShow" :dataList="dataList" />
</template>
<script setup>
import { IdCard } from '@/utils/validate.js'
import { reactive, ref } from "vue";
import { reactive, ref, getCurrentInstance } from "vue";
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
import HolographicArchive from './holographicArchive.vue'
const { proxy } = getCurrentInstance();
const props = defineProps({
item: {
type: Object,
@ -61,8 +75,12 @@ const props = defineProps({
}, dict: {
tupe: Object,
default: {}
}, buttonBox: {
type: Boolean,
default: false
}
});
const emit = defineEmits(["plotThetrajectory", "showDetail", 'showFeedback']);
const changeBG = (str) => {
switch (str) {
@ -72,9 +90,44 @@ const changeBG = (str) => {
return "orange";
case "30":
return "#b5b522";
default: return "blue";
default:
return "blue";
}
};
// 轨迹上图
const plotThetrajectory = (val) => {
emit('plotThetrajectory', val);
}
// 查看反馈
const showFeedback = (val, type) => {
switch (type) {
case '签收':
proxy.$confirm("是否确定要签收", "警告", { type: "warning" }).then(() => {
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);
}
const assessShow = ref(false)
const dataList = ref()
const pushAssess = (val) => {
assessShow.value = true;
dataList.value = val;
}
</script>
<style lang="scss" scoped>

View File

@ -0,0 +1,431 @@
<!--全息档案展示组件 -->
<template>
<el-dialog v-model="modelValue" :title="title" :width="width" @close="close" append-to-body>
<div class="archive-container">
<!-- 基本信息卡片 -->
<div class="basic-info-card">
<div class="info-header">
<!-- 头像区域 -->
<div class="avatar-section">
<el-image class="main-avatar" :src="personData.rltp || personData.qsztp" fit="cover"
:preview-src-list="[personData.rltp , personData.qsztp]" />
</div>
<!-- 基本信息 -->
<div class="basic-info">
<!-- 姓名字段单独一行 -->
<div class="info-row">
<div class="info-item">
<span class="info-label">姓名</span>
<span class="info-value">{{ personData.xm || '未记录' }}</span>
</div>
<div class="info-item">
<span class="info-label">身份号</span>
<span class="info-value">{{ personData.sfzhm || '未记录' }}</span>
</div>
</div>
<!-- 基本信息 - 两个字段一行 -->
<div class="info-row">
<div class="info-item">
<span class="info-label">出生日期</span>
<span class="info-value">{{ personData.csrq || '未记录' }}</span>
</div>
<div class="info-item">
<span class="info-label">性别</span>
<span class="info-value">{{ personData.xb || '未记录' }}</span>
</div>
</div>
<div class="info-row">
<div class="info-item">
<span class="info-label">民族</span>
<span class="info-value">{{ personData.mz || '未记录' }}</span>
</div>
<div class="info-item">
<span class="info-label">婚姻状况</span>
<span class="info-value">{{ personData.hyzq || '未记录' }}</span>
</div>
</div>
<div class="info-row">
<div class="info-item">
<span class="info-label">联系方式</span>
<span class="info-value">{{ personData.lxfs || '未记录' }}</span>
</div>
<div class="info-item">
<span class="info-label">户主号码</span>
<span class="info-value">{{ personData.hzhm || '未记录' }}</span>
</div>
</div>
<div class="info-row">
<div class="info-item">
<span class="info-label">文化程度</span>
<span class="info-value">{{ personData.whcd || '未记录' }}</span>
</div>
<div class="info-item">
<span class="info-label">毕业情况</span>
<span class="info-value">{{ personData.byqq || '未记录' }}</span>
</div>
</div>
<div class="info-row">
<div class="info-item">
<span class="info-label">身高</span>
<span class="info-value">{{ personData.sg || '未记录' }}</span>
</div>
</div>
<div class="info-row">
<div class="info-item full-width">
<span class="info-label">人员标签</span>
<span class="info-value">{{ personData.rybq || '未记录' }}</span>
</div>
</div>
</div>
</div>
<!-- 详细信息 -->
<div class="detail-info">
<!-- 详细信息 - 两个字段一行 -->
<div class="info-row">
<div class="info-item">
<span class="info-label">人员国籍</span>
<span class="info-value">{{ personData.rygj || '未记录' }}</span>
</div>
<div class="info-item">
<span class="info-label">人员地区</span>
<span class="info-value">{{ personData.rydq || '未记录' }}</span>
</div>
</div>
<div class="info-row">
<div class="info-item">
<span class="info-label">户籍城市</span>
<span class="info-value">{{ personData.hjcs || '未记录' }}</span>
</div>
<div class="info-item">
<span class="info-label">户籍籍贯</span>
<span class="info-value">{{ personData.hjjg || '未记录' }}</span>
</div>
</div>
<div class="info-row">
<div class="info-item">
<span class="info-label">工作单位</span>
<span class="info-value">{{ personData.gzdw || '未记录' }}</span>
</div>
<div class="info-item">
<span class="info-label">职业信息</span>
<span class="info-value">{{ personData.zyxx || '未记录' }}</span>
</div>
</div>
<div class="info-row">
<div class="info-item">
<span class="info-label">入境时间</span>
<span class="info-value">{{ personData.rjsj || '未记录' }}</span>
</div>
<div class="info-item">
<span class="info-label">入境事由</span>
<span class="info-value">{{ personData.rjsy || '未记录' }}</span>
</div>
</div>
<div class="info-row">
<div class="info-item">
<span class="info-label">证件类型</span>
<span class="info-value">{{ personData.qzlx || '未记录' }}</span>
</div>
<div class="info-item">
<span class="info-label">证件号码</span>
<span class="info-value">{{ personData.qzhm || '未记录' }}</span>
</div>
</div>
<div class="info-row">
<div class="info-item">
<span class="info-label">证件校验</span>
<span class="info-value">{{ personData.zjxy || '未记录' }}</span>
</div>
<div class="info-item">
<span class="info-label">境外人员类别</span>
<span class="info-value">{{ personData.jwrylb || '未记录' }}</span>
</div>
</div>
<!-- <div class="info-row">
<div class="info-item">
<span class="info-label">毕业情况</span>
<span class="info-value">{{ personData.byqq || '未记录' }}</span>
</div>
<div class="info-item">
<span class="info-label">统战序列备注</span>
<span class="info-value">{{ personData.trzxlbz || '未记录' }}</span>
</div>
</div> -->
<!-- <div class="info-row">
<div class="info-item">
<span class="info-label">户主号码</span>
<span class="info-value">{{ personData.hzhm || '未记录' }}</span>
</div>
</div> -->
<!-- <div class="info-row">
<div class="info-item">
<span class="info-label">起始图片</span>
<span class="info-value">{{ personData.qsztp ? '已上传' : '未记录' }}</span>
</div>
</div> -->
<!-- 户籍和居住地放在最后独占一行 -->
<div class="info-row">
<div class="info-item full-width">
<span class="info-label">户籍所在地</span>
<span class="info-value">{{ personData.hjdz || '未记录' }}</span>
</div>
</div>
<div class="info-row">
<div class="info-item full-width">
<span class="info-label">居住地</span>
<span class="info-value">{{ personData.jzdz || '未记录' }}</span>
</div>
</div>
</div>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="close">关闭</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { ref, defineProps, defineEmits, reactive, watch } from 'vue';
import {ryxxJbxxSave} from '@/api/qxda.js'
const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
title: {
type: String,
default: '全息档案'
},
width: {
type: String,
default: '50%'
},
url: {
type: String,
default: ''
},
dataList: {
type: Object,
default: () => ({})
}
});
watch(() => props.modelValue, (newVal, oldVal) => {
if (newVal) {
getryxxJbxxSave()
}
})
// 个人信息数据对象 - 使用用户提供的数据
const personData = ref({ });
// 预览图片列表
const srcList = ref([
'https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg',
'https://fuss10.elemecdn.com/1/34/19aa98b1fcb2781c4fba33d850549jpeg.jpeg',
'https://fuss10.elemecdn.com/0/6f/e35ff375812e6b0020b6b4e8f9583jpeg.jpeg',
'https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg',
'https://fuss10.elemecdn.com/d/e6/c4d93a3805b3ce3f323f7974e6f78jpeg.jpeg',
'https://fuss10.elemecdn.com/3/28/bbf893f792f03a54408b3b7a7ebf0jpeg.jpeg',
'https://fuss10.elemecdn.com/2/11/6535bcfb26e4c79b48ddde44f4b6fjpeg.jpeg',
]);
// 定义事件
const emit = defineEmits(['update:modelValue']);
const getryxxJbxxSave = () => {
ryxxJbxxSave({ sfzhm:'540402195805123219' // props.dataList.rysfzh
}).then((res) => {
personData.value = res[0]
});
}
const close = () => {
emit('update:modelValue', false);
};
</script>
<style scoped>
/* 容器样式 */
.archive-container {
padding: 15px;
height: 50vh;
overflow: auto;
}
/* 基本信息卡片 */
.basic-info-card {
background-color: #f0f9ff;
border: 1px solid #91d5ff;
border-radius: 8px;
padding: 25px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.05);
}
/* 信息头部(头像+基础信息) */
.info-header {
display: flex;
align-items: flex-start;
gap: 40px;
margin-bottom: 0;
padding-bottom: 20px;
border-bottom: 1px solid #d6eaff;
margin-bottom: 20px;
}
/* 头像区域 */
.avatar-section {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
/* 主头像 */
.main-avatar {
width: 120px;
height: 140px;
border: 3px solid #409EFF;
border-radius: 4px;
background-color: #fff;
}
/* 辅助头像容器 */
.sub-avatars {
display: flex;
gap: 8px;
}
/* 小头像 */
.sub-avatar {
width: 50px;
height: 50px;
border: 2px solid #409EFF;
border-radius: 4px;
background-color: #fff;
}
/* 基本信息区域 */
.basic-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
gap: 12px;
}
/* 信息行 */
.info-row {
display: flex;
margin-bottom: 0;
align-items: center;
flex-wrap: wrap;
min-height: 32px;
}
/* 信息项 */
.info-item {
margin-right: 0;
margin-bottom: 0;
flex: 0 0 calc(50% - 10px);
max-width: calc(50% - 10px);
min-height: 32px;
display: flex;
align-items: center;
padding-right: 20px;
}
/* 全宽信息项(用于姓名字段和地址字段) */
.info-item.full-width {
flex: 0 0 100%;
max-width: 100%;
padding-right: 0;
}
/* 信息标签 */
.info-label {
color: #0060c8;
font-weight: bold;
font-size: 14px;
margin-right: 8px;
white-space: nowrap;
min-width: 80px;
}
/* 信息值 */
.info-value {
color: #000;
font-size: 14px;
word-break: break-all;
flex: 1;
}
/* 详细信息区域 */
.detail-info {
background-color: #fff;
border-radius: 6px;
padding: 20px;
border-left: 4px solid #409EFF;
margin-top: 0;
display: flex;
flex-direction: column;
gap: 12px;
}
/* 响应式设计 */
@media (max-width: 768px) {
.info-header {
flex-direction: column;
align-items: center;
text-align: left;
gap: 20px;
}
.info-row {
flex-direction: column;
align-items: stretch;
min-height: auto;
margin-bottom: 0;
}
.info-item {
margin-right: 0;
margin-bottom: 0;
flex: 0 0 100%;
max-width: 100%;
min-height: 36px;
display: flex;
align-items: center;
padding-right: 0;
}
.info-label {
display: inline-block;
min-width: 80px;
}
.info-value {
flex: 1;
}
/* 全宽信息项在移动端保持全宽 */
.info-item.full-width {
flex: 0 0 100%;
max-width: 100%;
}
}
</style>

View File

@ -45,15 +45,7 @@
<div class="mt4 two_text_detail">预警时间{{ item.yjSj }}</div>
<div class="mt4 one_text_detail">预警地址{{ item.yjDz }}</div>
<div class="mt4 two_text_detail">预警内容{{ item.yjNr }}</div>
<div class="mt4 two_text_detail">
<el-button type="primary">全息档案</el-button>
<el-button color="#ef7762" style="color: #fff;">转合成</el-button>
<el-button type="warning">转基管</el-button>
<el-button type="danger">转会商</el-button>
<el-button type="success">查看反馈</el-button>
<el-button type="success">轨迹上图</el-button>
</div>
</div>
</div>
</template>