lcw
This commit is contained in:
@ -133,3 +133,35 @@ export const tbGsxtZdryAjxx = (id) => {
|
|||||||
method: "delete",
|
method: "delete",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// 新增或修改现实表现
|
||||||
|
export const tbGsxtZdryXsbxSaveOrUpdateXsbx = (data) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/tbGsxtZdryXsbx/saveOrUpdateXsbx`,
|
||||||
|
method: "post",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 查询走访记录信息
|
||||||
|
export const tbGsxtZdryXsbxSelectZfjl = (params) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/tbGsxtZdryXsbx/selectXsbx`,
|
||||||
|
method: "get",
|
||||||
|
params,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 删除走访记录信息
|
||||||
|
export const tbGsxtZdryXsbx = (id) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/tbGsxtZdryXsbx/${id}`,
|
||||||
|
method: "delete",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 查询操作日志
|
||||||
|
export const tbGsxtZdryCzrzSelectCzrz = (params) => {
|
||||||
|
return request({
|
||||||
|
url: api + `/tbGsxtZdryCzrz/selectCzrz`,
|
||||||
|
method: "get",
|
||||||
|
params,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
<template>
|
||||||
|
<!-- 添加 -->
|
||||||
|
<el-dialog v-model="modelValue" :title="title" width="40%" :before-close="handleClose">
|
||||||
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
|
||||||
|
</FormMessage>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="handleClose">取消</el-button>
|
||||||
|
<el-button type="primary" @click="submitForm">确认</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import { defineProps, defineEmits, ref, watch, reactive, getCurrentInstance } from 'vue'
|
||||||
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const props = defineProps({
|
||||||
|
data: {
|
||||||
|
type: Object,
|
||||||
|
default: () => { }
|
||||||
|
},
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: '走访信息'
|
||||||
|
},
|
||||||
|
dict: {
|
||||||
|
type: Object,
|
||||||
|
default: () => { }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const emit = defineEmits(['update:modelValue', 'comfirm'])
|
||||||
|
const listQuery = ref({})
|
||||||
|
const formData = ref([
|
||||||
|
{ label: "案件名称", prop: "ajmc", type: "input", width: '100%' },
|
||||||
|
{ label: "案件时间", prop: "sasj", type: "date", width: '100%' },
|
||||||
|
{ label: "案件编码", prop: "ajbm", type: "input", width: '100%' },
|
||||||
|
])
|
||||||
|
const rules = reactive({
|
||||||
|
ajmc: [{ required: true, message: "请输入案件名称", trigger: "blur" }],
|
||||||
|
sasj: [{ required: true, message: "请输入案件时间", trigger: "change" }],
|
||||||
|
ajbm: [{ required: true, message: "请输入案件编码", trigger: "blur" }],
|
||||||
|
})
|
||||||
|
|
||||||
|
const elform=ref(null)
|
||||||
|
const submitForm = () => {
|
||||||
|
elform.value.submit((val) => {
|
||||||
|
if (val) {
|
||||||
|
emit('comfirm', val)
|
||||||
|
handleClose()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.data,
|
||||||
|
(val) => {
|
||||||
|
listQuery.value = val ? { ...val } : {}
|
||||||
|
},
|
||||||
|
{ deep: true }
|
||||||
|
)
|
||||||
|
// 取消:关闭弹窗
|
||||||
|
const handleClose = () => {
|
||||||
|
listQuery.value = {}
|
||||||
|
emit('update:modelValue', false)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss"></style>
|
@ -0,0 +1,306 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog :title="titleValue" width="800px" :model-value="modelValue" append-to-body @close="closed">
|
||||||
|
<FormMessage v-model="listQuery" :formList="formData" labelWidth="120px" ref="elform" :rules="rules">
|
||||||
|
<template #rrry>
|
||||||
|
<el-input v-model="listQuery.rrry" :placeholder="`请输入民警姓名`" readonly @click="changeShow" />
|
||||||
|
</template>
|
||||||
|
<template #fjxx>
|
||||||
|
<!-- 文件列表区域 -->
|
||||||
|
<div class="file-attachment-section">
|
||||||
|
<div class="section-title">相关附件</div>
|
||||||
|
<div class="file-list-container">
|
||||||
|
<div v-if="listQuery.fileList.length === 0" class="empty-file-list">暂无附件</div>
|
||||||
|
<div v-else class="file-list">
|
||||||
|
<div v-for="(file, index) in listQuery.fileList" :key="index" class="file-item">
|
||||||
|
<div class="file-info">
|
||||||
|
<span class="file-name">{{ file.originalName }}</span>
|
||||||
|
<span class="file-time">{{ file.uploadTime }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="file-actions">
|
||||||
|
<el-button type="text" size="small" @click="downloadFile(file)" title="下载文件" :disabled="disabled">
|
||||||
|
<el-icon>
|
||||||
|
<Download />
|
||||||
|
</el-icon>
|
||||||
|
</el-button>
|
||||||
|
<el-button type="text" size="small" @click="deleteFile(index)" title="删除文件" class="delete-btn"
|
||||||
|
:disabled="disabled">
|
||||||
|
<el-icon>
|
||||||
|
<Delete />
|
||||||
|
</el-icon>
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 上传按钮区域 -->
|
||||||
|
<div class="upload-btn-container">
|
||||||
|
<el-upload v-model:file-list="listQuery.fileList" class="upload-demo" :show-file-list="false" multiple
|
||||||
|
:http-request="handleUploadRequest" :on-remove="handleRemove" :limit="3" :on-exceed="handleExceed">
|
||||||
|
<el-button type="primary" :disabled="disabled">上传文件</el-button>
|
||||||
|
</el-upload>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</FormMessage>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button @click="closed">取消</el-button>
|
||||||
|
<el-button type="primary" @click="onComfirm">确认</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
<ChooseUser :Single="true" v-model="chooseMarksVisible" @choosedUsers="addMarks" :roleIds="roleIds" />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted, reactive, watch, getCurrentInstance } from "vue";
|
||||||
|
import { generateRandom10Digits } from '@/utils/tools'
|
||||||
|
import { uploadMultipleFiles } from '@/views/backOfficeSystem/DeploymentDisposal/mpvGroup/model/fileUp.js'
|
||||||
|
import { ElMessage } from 'element-plus';
|
||||||
|
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||||
|
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue";
|
||||||
|
const { proxy } = getCurrentInstance()
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
titleValue: {
|
||||||
|
type: String,
|
||||||
|
default: "研判记录"
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
type: Object,
|
||||||
|
default: () => { }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const emits = defineEmits(["update:modelValue", "comfirm"]);
|
||||||
|
const formData = ref([
|
||||||
|
{ label: "录入人员", prop: "rrry", type: "slot", width: '100%' },
|
||||||
|
{ label: "录入时间", prop: "lrsj", type: "date", width: '100%' },
|
||||||
|
{ label: "表现内容", prop: "bxnr", type: "textarea", width: '100%' },
|
||||||
|
{ label: "附件信息", prop: "fjxx", type: "slot", width: '100%' },
|
||||||
|
])
|
||||||
|
const rules = reactive({
|
||||||
|
rrry: [{ required: true, message: "请选择民警姓名", trigger: "blur" }],
|
||||||
|
lrsj: [{ required: true, message: "请输入录入时间", trigger: "change" }],
|
||||||
|
bxnr: [{ required: true, message: "请输入表现内容", trigger: "blur" }],
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
const listQuery = ref({fileList:[]})
|
||||||
|
const roleIds=ref([])
|
||||||
|
const chooseMarksVisible=ref(false)
|
||||||
|
|
||||||
|
const changeShow = () => {
|
||||||
|
chooseMarksVisible.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
const addMarks = (val) => {
|
||||||
|
listQuery.value.rrry = val[0].userName
|
||||||
|
roleIds.value = val.map(item => item.id)
|
||||||
|
}
|
||||||
|
const closed = () => {
|
||||||
|
listQuery.value={}
|
||||||
|
listQuery.value.fileList = []
|
||||||
|
emits("update:modelValue", false);
|
||||||
|
};
|
||||||
|
const onComfirm = () => {
|
||||||
|
emits("comfirm", {...listQuery.value,fjxx:listQuery.value.fileList.length>0?JSON.stringify(listQuery.value.fileList):null });
|
||||||
|
emits("update:modelValue", false);
|
||||||
|
}
|
||||||
|
watch(() => props.data, (val) => {
|
||||||
|
if (val) {
|
||||||
|
listQuery.value={...val,fileList:val.fjxx}
|
||||||
|
}
|
||||||
|
},{deep: true})
|
||||||
|
|
||||||
|
// 下载文件
|
||||||
|
const downloadFile = (file) => {
|
||||||
|
// 实际项目中,这里应该调用下载API
|
||||||
|
console.log('下载文件:', file.name)
|
||||||
|
// 示例:window.open(file.url)
|
||||||
|
}
|
||||||
|
// 删除文件
|
||||||
|
const deleteFile = (index) => {
|
||||||
|
// 实际项目中,这里应该先调用删除API,成功后再从列表中移除
|
||||||
|
listQuery.value.fileList.splice(index, 1)
|
||||||
|
ElMessage.success('文件已删除')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 上传相关方法
|
||||||
|
const handleUploadRequest = async (options) => {
|
||||||
|
try {
|
||||||
|
// 调用uploadMultipleFiles进行文件上传
|
||||||
|
const result = await uploadMultipleFiles(options.file, {
|
||||||
|
uploadedFiles: listQuery.value.fileList,
|
||||||
|
fjIds: [], // 如果需要保存文件ID列表,可以在这里传递
|
||||||
|
compressImage: null // 可选的图片压缩函数
|
||||||
|
});
|
||||||
|
// 更新文件列表,添加上传时间信息
|
||||||
|
const index = listQuery.value.fileList.findIndex(f => f.originalName === options.file.name);
|
||||||
|
if (index !== -1) {
|
||||||
|
listQuery.value.fileList[index].uploadTime = new Date().toLocaleString('zh-CN');
|
||||||
|
}
|
||||||
|
// 调用成功回调
|
||||||
|
if (options.onSuccess) {
|
||||||
|
options.onSuccess(result);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('文件上传失败:', error);
|
||||||
|
// 调用失败回调
|
||||||
|
if (options.onError) {
|
||||||
|
options.onError(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleRemove = (uploadFile, uploadFiles) => {
|
||||||
|
// 实际项目中,这里应该先调用删除API,成功后再从列表中移除
|
||||||
|
const index = listQuery.value.fileList.findIndex(f => f.name === uploadFile.name);
|
||||||
|
if (index !== -1) {
|
||||||
|
listQuery.value.fileList.splice(index, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "@/assets/css/layout.scss";
|
||||||
|
@import "@/assets/css/element-plus.scss";
|
||||||
|
</style>
|
||||||
|
<style>
|
||||||
|
.tabBoxRadio .el-checkbox__inner {
|
||||||
|
border-radius: 50% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-attachment-section {
|
||||||
|
margin-top: 15px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
border-bottom: 1px solid #ebeef5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-list-container {
|
||||||
|
max-height: 100px;
|
||||||
|
overflow-y: auto;
|
||||||
|
border: 1px solid #ebeef5;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: #ffffff;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 自定义滚动条样式 */
|
||||||
|
.file-list-container::-webkit-scrollbar {
|
||||||
|
width: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-list-container::-webkit-scrollbar-track {
|
||||||
|
background: #f1f1f1;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-list-container::-webkit-scrollbar-thumb {
|
||||||
|
background: #c0c4cc;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-list-container::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: #909399;
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-file-list {
|
||||||
|
padding: 20px;
|
||||||
|
text-align: center;
|
||||||
|
color: #909399;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-list {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-item {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 8px 10px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-item:hover {
|
||||||
|
background-color: #e6f7ff;
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-info {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 15px;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-name {
|
||||||
|
flex: 1;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #303133;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-size {
|
||||||
|
font-size: 11px;
|
||||||
|
color: #909399;
|
||||||
|
min-width: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-time {
|
||||||
|
font-size: 11px;
|
||||||
|
color: #909399;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-actions {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 5px;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-actions .el-button {
|
||||||
|
padding: 0 5px;
|
||||||
|
margin: 0;
|
||||||
|
color: #606266;
|
||||||
|
transition: color 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-actions .el-button:hover {
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.delete-btn:hover {
|
||||||
|
color: #f56c6c !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-btn-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
@ -15,27 +15,27 @@
|
|||||||
<li @click="scrollToSection('backinfo-section')"
|
<li @click="scrollToSection('backinfo-section')"
|
||||||
:class="activeSection === 'backinfo-section' ? 'active' : ''">人员标签</li>
|
:class="activeSection === 'backinfo-section' ? 'active' : ''">人员标签</li>
|
||||||
<li @click="scrollToSection('groupLabels-section')"
|
<li @click="scrollToSection('groupLabels-section')"
|
||||||
:class="activeSection === 'groupLabels-section' ? 'active' : ''">关联车辆</li>
|
:class="activeSection === 'groupLabels-section' ? 'active' : ''" v-if="!butShow">关联车辆</li>
|
||||||
<li @click="scrollToSection('character-section')"
|
<li @click="scrollToSection('character-section')"
|
||||||
:class="activeSection === 'character-section' ? 'active' : ''">背景信息</li>
|
:class="activeSection === 'character-section' ? 'active' : ''">背景信息</li>
|
||||||
<li @click="scrollToSection('controlInfo-section')"
|
<li @click="scrollToSection('controlInfo-section')"
|
||||||
:class="activeSection === 'controlInfo-section' ? 'active' : ''">管控信息</li>
|
:class="activeSection === 'controlInfo-section' ? 'active' : ''" v-if="!butShow">管控信息</li>
|
||||||
<li @click="scrollToSection('featinfo-section')"
|
<li @click="scrollToSection('featinfo-section')"
|
||||||
:class="activeSection === 'featinfo-section' ? 'active' : ''">全要素布控</li>
|
:class="activeSection === 'featinfo-section' ? 'active' : ''" v-if="!butShow">全要素布控</li>
|
||||||
<li @click="scrollToSection('demandsInfo-section')"
|
<li @click="scrollToSection('demandsInfo-section')"
|
||||||
:class="activeSection === 'demandsInfo-section' ? 'active' : ''">密切联系人</li>
|
:class="activeSection === 'demandsInfo-section' ? 'active' : ''" v-if="!butShow">密切联系人</li>
|
||||||
<li @click="scrollToSection('requestInfo-section')"
|
<li @click="scrollToSection('requestInfo-section')"
|
||||||
:class="activeSection === 'requestInfo-section' ? 'active' : ''">动态轨迹</li>
|
:class="activeSection === 'requestInfo-section' ? 'active' : ''" v-if="!butShow">动态轨迹</li>
|
||||||
<li @click="scrollToSection('personnel-section')"
|
<li @click="scrollToSection('personnel-section')"
|
||||||
:class="activeSection === 'personnel-section' ? 'active' : ''">行为信息</li>
|
:class="activeSection === 'personnel-section' ? 'active' : ''" v-if="!butShow">行为信息</li>
|
||||||
<li @click="scrollToSection('judgmentRecord-section')"
|
<li @click="scrollToSection('judgmentRecord-section')"
|
||||||
:class="activeSection === 'judgmentRecord-section' ? 'active' : ''">走访记录</li>
|
:class="activeSection === 'judgmentRecord-section' ? 'active' : ''" v-if="!butShow">走访记录</li>
|
||||||
<li @click="scrollToSection('historyAssembly-section')"
|
<li @click="scrollToSection('historyAssembly-section')"
|
||||||
:class="activeSection === 'historyAssembly-section' ? 'active' : ''">案件信息</li>
|
:class="activeSection === 'historyAssembly-section' ? 'active' : ''" v-if="!butShow">案件信息</li>
|
||||||
<li @click="scrollToSection('joblogging-section')"
|
<li @click="scrollToSection('joblogging-section')"
|
||||||
:class="activeSection === 'joblogging-section' ? 'active' : ''">显示表现</li>
|
:class="activeSection === 'joblogging-section' ? 'active' : ''" v-if="!butShow">显示表现</li>
|
||||||
<li @click="scrollToSection('joblogging-joblog')"
|
<li @click="scrollToSection('joblogging-joblog')"
|
||||||
:class="activeSection === 'joblogging-joblog' ? 'active' : ''">操作日志</li>
|
:class="activeSection === 'joblogging-joblog' ? 'active' : ''" v-if="!butShow">操作日志</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="right_box" ref="rightBox">
|
<div class="right_box" ref="rightBox">
|
||||||
@ -45,64 +45,76 @@
|
|||||||
<div id="backinfo-section">
|
<div id="backinfo-section">
|
||||||
<PersonnelTags ref="personnelTags" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
<PersonnelTags ref="personnelTags" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||||
</div>
|
</div>
|
||||||
<div id="groupLabels-section">
|
<div id="groupLabels-section" v-if="!butShow">
|
||||||
<Vehicle ref="vehicle" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
<Vehicle ref="vehicle" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||||
</div>
|
</div>
|
||||||
<div id="character-section">
|
<div id="character-section">
|
||||||
<BackInfo ref="backInfo" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
<BackInfo ref="backInfo" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||||
</div>
|
</div>
|
||||||
<div id="controlInfo-section">
|
<div id="controlInfo-section" v-if="!butShow">
|
||||||
<ControlInfo ref="controlInfo" title="重点人" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
<ControlInfo ref="controlInfo" title="重点人" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||||
</div>
|
</div>
|
||||||
<div id="deployment-section">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="featinfo-section" v-if="!butShow">
|
||||||
<Deployment ref="deployment" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
<Deployment ref="deployment" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||||
</div>
|
</div>
|
||||||
<div id="contact-section">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="demandsInfo-section" v-if="!butShow">
|
||||||
<Contact ref="contact" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
<Contact ref="contact" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||||
</div>
|
</div>
|
||||||
<div id="dynamicTrajectory-section">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="requestInfo-section" v-if="!butShow">
|
||||||
<DynamicTrajectory ref="dynamicTrajectory" :disabled="disabled" :showBut="showBut" />
|
<DynamicTrajectory ref="dynamicTrajectory" :disabled="disabled" :showBut="showBut" />
|
||||||
</div>
|
</div>
|
||||||
<div id="requestInfo-section">
|
<div id="personnel-section" v-if="!butShow">
|
||||||
<BehaviorInfo ref="behaviorInfo" :disabled="disabled" :showBut="showBut" />
|
<BehaviorInfo ref="behaviorInfo" :disabled="disabled" :showBut="showBut" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="visitRecord-section">
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="judgmentRecord-section" v-if="!butShow">
|
||||||
<VisitRecord ref="visitRecord" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
<VisitRecord ref="visitRecord" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||||
</div>
|
</div>
|
||||||
<div id="caseInfo-section">
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="historyAssembly-section" v-if="!butShow" >
|
||||||
<CaseInfo ref="caseInfo" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
<CaseInfo ref="caseInfo" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||||
</div>
|
</div>
|
||||||
<div id="actualPerformance-section">
|
|
||||||
|
|
||||||
|
<div id="joblogging-section" v-if="!butShow">
|
||||||
<ActualPerformance ref="actualPerformance" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
<ActualPerformance ref="actualPerformance" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="behaviorInfo" style="">
|
|
||||||
<h3>操作日志</h3>
|
|
||||||
|
<div id="joblogging-joblog" v-if="!butShow" >
|
||||||
|
<CzModel ref="czModel" :disabled="disabled" :showBut="showBut" :dataList="listQuery" />
|
||||||
</div>
|
</div>
|
||||||
<div class="list-container">
|
|
||||||
<div class="list-header">
|
|
||||||
<span>账号名称</span>
|
|
||||||
<span>操作时间</span>
|
|
||||||
<span>操作记录</span>
|
|
||||||
</div>
|
|
||||||
<div class="list-body">
|
|
||||||
<div class="list-item" v-for="i in 30" :key="i">
|
|
||||||
<span>张三</span>
|
|
||||||
<span>2020-3030-2202</span>
|
|
||||||
<span>新增操作记录</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div> -->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <ChooseMarks v-model="chooseMarksVisible" @choosed="choosed" :roleIds="roleIds" /> -->
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { getItem } from "@/utils/storage";
|
import { getItem } from "@/utils/storage";
|
||||||
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
|
||||||
import { tbGsxtZdrySelectVoById,tbGsxtZdrySave } from "@/api/zdr.js";
|
import { tbGsxtZdrySelectVoById, tbGsxtZdrySave } from "@/api/zdr.js";
|
||||||
import ControlInfo from '../../mpvGroup/model/controlInfo.vue'
|
import ControlInfo from '../../mpvGroup/model/controlInfo.vue'
|
||||||
import Info from "../model/info.vue";
|
import Info from "../model/info.vue";
|
||||||
import PersonnelTags from '../model/personnelTags.vue'
|
import PersonnelTags from '../model/personnelTags.vue'
|
||||||
@ -115,6 +127,7 @@ import BehaviorInfo from '../model/behaviorInfo.vue'
|
|||||||
import VisitRecord from '../model/visitRecord.vue'
|
import VisitRecord from '../model/visitRecord.vue'
|
||||||
import CaseInfo from '../model/caseInfo.vue'
|
import CaseInfo from '../model/caseInfo.vue'
|
||||||
import ActualPerformance from '../model/actualPerformance.vue'
|
import ActualPerformance from '../model/actualPerformance.vue'
|
||||||
|
import CzModel from '../model/czModel.vue'
|
||||||
import { ref, onUnmounted } from "vue";
|
import { ref, onUnmounted } from "vue";
|
||||||
const emit = defineEmits(["updateDate"]);
|
const emit = defineEmits(["updateDate"]);
|
||||||
const chooseMarksVisible = ref(false);
|
const chooseMarksVisible = ref(false);
|
||||||
@ -125,6 +138,7 @@ const showBut = ref(false)
|
|||||||
const listQuery = ref({});
|
const listQuery = ref({});
|
||||||
const butShow = ref(false)
|
const butShow = ref(false)
|
||||||
const title = ref('新增')
|
const title = ref('新增')
|
||||||
|
const showData=ref(false)
|
||||||
// 初始化数据
|
// 初始化数据
|
||||||
const init = (type, row) => {
|
const init = (type, row) => {
|
||||||
dialogForm.value = true;
|
dialogForm.value = true;
|
||||||
@ -134,9 +148,10 @@ const init = (type, row) => {
|
|||||||
disabled.value = false
|
disabled.value = false
|
||||||
showBut.value = false
|
showBut.value = false
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
butShow.value = false
|
butShow.value = false
|
||||||
tbGsxtZdrySelectVoById({ id: row.id }).then(res => {
|
tbGsxtZdrySelectVoById({ id: row.id }).then(res => {
|
||||||
listQuery.value={...res}
|
listQuery.value = { ...res }
|
||||||
})
|
})
|
||||||
if (type == 'edit') {
|
if (type == 'edit') {
|
||||||
showBut.value = true
|
showBut.value = true
|
||||||
@ -179,7 +194,7 @@ const handleScroll = () => {
|
|||||||
'info-section', 'backinfo-section', 'groupLabels-section',
|
'info-section', 'backinfo-section', 'groupLabels-section',
|
||||||
'character-section', 'controlInfo-section', 'featinfo-section',
|
'character-section', 'controlInfo-section', 'featinfo-section',
|
||||||
'demandsInfo-section', 'requestInfo-section', 'personnel-section',
|
'demandsInfo-section', 'requestInfo-section', 'personnel-section',
|
||||||
'judgmentRecord-section', 'historyAssembly-section', 'joblogging-section'
|
'judgmentRecord-section', 'historyAssembly-section', 'joblogging-section', "czModel-section"
|
||||||
];
|
];
|
||||||
|
|
||||||
for (let i = sections.length - 1; i >= 0; i--) {
|
for (let i = sections.length - 1; i >= 0; i--) {
|
||||||
|
@ -2,23 +2,12 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="headClass" style="">
|
<div class="headClass" style="">
|
||||||
<h3>现实表现</h3>
|
<h3>现实表现</h3>
|
||||||
<!-- <el-button type="primary" :disabled="disabled" @click="AddPore">选择</el-button> -->
|
<el-button @click="AddPore" type="primary" v-if="showBut">新增</el-button>
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="headSelect">
|
|
||||||
|
|
||||||
<el-button @click="add" type="primary">新增</el-button>
|
|
||||||
</div>
|
</div>
|
||||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||||
<template #clys="{ row }">
|
<template #showSolt="{ row }">
|
||||||
<DictTag :tag="false" :value="row.clys" :options="D_BZ_CLYS" />
|
<span v-for="(item,index) in row.fjxx" :key="index">{{ item.originalName }}<span v-if="index < row.fjxx.length - 1">、</span></span>
|
||||||
</template>
|
|
||||||
<template #cllx="{ row }">
|
|
||||||
<DictTag :tag="false" :value="row.cllx" :options="D_BZ_CLLX" />
|
|
||||||
</template>
|
|
||||||
<template #clpp="{ row }">
|
|
||||||
<DictTag :tag="false" :value="row.clpp" :options="D_BZ_CLPP" />
|
|
||||||
</template>
|
</template>
|
||||||
<!-- 操作 -->
|
<!-- 操作 -->
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
@ -27,20 +16,23 @@
|
|||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
</div>
|
</div>
|
||||||
<VehiclDoing v-model="chooseMarksVisible" @comfirm="addMarks" :data="dataModel"
|
<!-- <VehiclDoing v-model="JudgmentShow" @comfirm="addMarks" :data="dataModel"
|
||||||
:dict="{ D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP }" />
|
:dict="{ D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP }" /> -->
|
||||||
|
|
||||||
|
<JudgmentRecord v-model="JudgmentShow" @comfirm="onComfirm" :data="dataModel" />
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { identityCardRule } from "@/utils/rules"
|
import { identityCardRule } from "@/utils/rules"
|
||||||
import { ref, reactive, watch, toRaw, getCurrentInstance, onMounted, onUnmounted } from "vue";
|
import { ref, reactive, watch, toRaw, getCurrentInstance, onMounted, onUnmounted } from "vue";
|
||||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
import VehiclDoing from "../component/vehiclDoing.vue";
|
import JudgmentRecord from "../component/judgmentRecord.vue";
|
||||||
import { tbZdryClxxAdd, tbZdryClxxBatchAdd, tbZdryClxxDelete, tbZdryClxxSelectPage, tbZdryClxxUpdate } from '@/api/zdr.js'
|
import { tbGsxtZdryXsbxSaveOrUpdateXsbx,tbGsxtZdryXsbxSelectZfjl,tbGsxtZdryXsbx } from '@/api/zdr.js'
|
||||||
import { ElMessage, ElMessageBox } from "element-plus";
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); //获取字典数据
|
const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); //获取字典数据
|
||||||
const chooseMarksVisible = ref(false)
|
const JudgmentShow = ref(false)
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
dataList: {
|
dataList: {
|
||||||
type: Object,
|
type: Object,
|
||||||
@ -66,20 +58,17 @@ watch(() => props.dataList, (val) => {
|
|||||||
const pageData = reactive({
|
const pageData = reactive({
|
||||||
tableData: [],
|
tableData: [],
|
||||||
tableColumn: [{
|
tableColumn: [{
|
||||||
prop: 'cph',
|
prop: 'rrry',
|
||||||
label: '录入人员',
|
label: '录入人员',
|
||||||
}, {
|
}, {
|
||||||
prop: 'cllx',
|
prop: 'lrsj',
|
||||||
label: '录入时间',
|
label: '录入时间',
|
||||||
showSolt: true,
|
|
||||||
prop: 'clpp',
|
|
||||||
}, {
|
}, {
|
||||||
showSolt: true,
|
prop: 'bxnr',
|
||||||
prop: 'clys',
|
|
||||||
label: '表现内容',
|
label: '表现内容',
|
||||||
}, {
|
}, {
|
||||||
showSolt: true,
|
showSolt: true,
|
||||||
prop: 'clpp',
|
prop: 'fjxx',
|
||||||
label: '附件信息',
|
label: '附件信息',
|
||||||
}],
|
}],
|
||||||
tableHeight: '200px',
|
tableHeight: '200px',
|
||||||
@ -97,45 +86,40 @@ const pageData = reactive({
|
|||||||
},
|
},
|
||||||
controlsWidth: 200,
|
controlsWidth: 200,
|
||||||
})
|
})
|
||||||
// 表单数据
|
|
||||||
const formData = reactive({
|
|
||||||
username: "",
|
|
||||||
ID: ""
|
|
||||||
})
|
|
||||||
const rulesForm = ref(identityCardRule({ validator: true }, 'rySfzh'))
|
|
||||||
// 修改数据接口
|
// 修改数据接口
|
||||||
const dataModel = ref()
|
const dataModel = ref()
|
||||||
const addMarks = (val) => {
|
const onComfirm = (val) => {
|
||||||
const params = {
|
const params = {
|
||||||
...val,
|
...val,
|
||||||
zdrid: listData.value.id,
|
zdryId: listData.value.id,
|
||||||
}
|
}
|
||||||
if (props.showBut && !props.disabled) {
|
console.log(params);
|
||||||
if (addUpd.value) {
|
|
||||||
tbZdryClxxAdd(params).then(res => {
|
// if (props.showBut && !props.disabled) {
|
||||||
|
// if (addUpd.value) {
|
||||||
|
tbGsxtZdryXsbxSaveOrUpdateXsbx(params).then(res => {
|
||||||
gettbZdryClxxSelectPage()
|
gettbZdryClxxSelectPage()
|
||||||
proxy.$message({
|
proxy.$message({
|
||||||
message: '关联车辆添加成功',
|
message: '关联车辆添加成功',
|
||||||
type: 'success'
|
type: 'success'
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
// }
|
||||||
else {
|
// else {
|
||||||
tbZdryClxxUpdate(params).then(res => {
|
// tbZdryClxxUpdate(params).then(res => {
|
||||||
gettbZdryClxxSelectPage()
|
// gettbZdryClxxSelectPage()
|
||||||
proxy.$message({
|
// proxy.$message({
|
||||||
message: '关联车辆修改成功',
|
// message: '关联车辆修改成功',
|
||||||
type: 'success'
|
// type: 'success'
|
||||||
})
|
// })
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
} else {
|
// } else {
|
||||||
pageData.tableData.push(val)
|
// pageData.tableData.push(val)
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
// 删除车辆
|
// 删除车辆
|
||||||
const delDictItem = (val) => {
|
const delDictItem = (val) => {
|
||||||
@ -150,10 +134,10 @@ const delDictItem = (val) => {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
tbZdryClxxDelete({ ids: [val] }).then(res => {
|
tbGsxtZdryXsbx(val).then(res => {
|
||||||
gettbZdryClxxSelectPage()
|
gettbZdryClxxSelectPage()
|
||||||
proxy.$message({
|
proxy.$message({
|
||||||
message: '关联车辆删除成功',
|
message: '表现信息删除成功',
|
||||||
type: 'success'
|
type: 'success'
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -171,24 +155,26 @@ const delDictItem = (val) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const updDictItem = (val) => {
|
const updDictItem = (val) => {
|
||||||
chooseMarksVisible.value = true
|
JudgmentShow.value = true
|
||||||
addUpd.value = false
|
addUpd.value = false
|
||||||
dataModel.value = val
|
dataModel.value = val
|
||||||
}
|
}
|
||||||
const AddPore = () => {
|
const AddPore = () => {
|
||||||
chooseMarksVisible.value = true
|
JudgmentShow.value = true
|
||||||
dataModel.value = {}
|
|
||||||
addUpd.value = true
|
addUpd.value = true
|
||||||
}
|
}
|
||||||
// 查询车辆
|
// 查询车辆
|
||||||
const gettbZdryClxxSelectPage = () => {
|
const gettbZdryClxxSelectPage = () => {
|
||||||
const promes = {
|
const promes = {
|
||||||
pageCurrent: 1,
|
|
||||||
pageSize: 20,
|
|
||||||
zdrid: listData.value.id
|
zdrid: listData.value.id
|
||||||
}
|
}
|
||||||
tbZdryClxxSelectPage(promes).then(res => {
|
tbGsxtZdryXsbxSelectZfjl(promes).then(res => {
|
||||||
pageData.tableData = res.records
|
pageData.tableData = res.map(item => {
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
fjxx: item.fjxx ? JSON.parse(item.fjxx) : []
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 抛出数据并验证标签列表不为空
|
// 抛出数据并验证标签列表不为空
|
||||||
@ -237,6 +223,9 @@ defineExpose({
|
|||||||
}
|
}
|
||||||
|
|
||||||
.headClass {
|
.headClass {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: #303133;
|
color: #303133;
|
||||||
|
@ -4,35 +4,7 @@
|
|||||||
<h3>行为信息</h3>
|
<h3>行为信息</h3>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 搜索区域 -->
|
|
||||||
<!-- <div class="search-container">
|
|
||||||
<el-form :inline="true" :model="searchForm" class="demo-form-inline">
|
|
||||||
<el-form-item label="行为类型">
|
|
||||||
<el-select v-model="searchForm.behaviorType" placeholder="请选择">
|
|
||||||
<el-option label="全部" value=""></el-option>
|
|
||||||
<el-option label="购票" value="ticket"></el-option>
|
|
||||||
<el-option label="入住" value="hotel"></el-option>
|
|
||||||
<el-option label="出入境" value="border"></el-option>
|
|
||||||
<el-option label="基站认证" value="baseStation"></el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="时间范围">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="searchForm.timeRange"
|
|
||||||
type="daterange"
|
|
||||||
range-separator="至"
|
|
||||||
start-placeholder="开始日期"
|
|
||||||
end-placeholder="结束日期"
|
|
||||||
format="YYYY-MM-DD HH:mm:ss"
|
|
||||||
value-format="YYYY-MM-DD HH:mm:ss"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" @click="handleSearch">搜索</el-button>
|
|
||||||
<el-button @click="resetSearch">重置</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
</div> -->
|
|
||||||
|
|
||||||
<!-- 列表区域 -->
|
<!-- 列表区域 -->
|
||||||
<div class="list-container">
|
<div class="list-container">
|
||||||
|
@ -2,41 +2,28 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="headClass" style="">
|
<div class="headClass" style="">
|
||||||
<h3>案件信息</h3>
|
<h3>案件信息</h3>
|
||||||
<!-- <el-button type="primary" :disabled="disabled" @click="AddPore">选择</el-button> -->
|
<el-button @click="AddPore" type="primary" v-if="showBut">新增</el-button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="headSelect">
|
|
||||||
|
|
||||||
<el-button @click="add" type="primary">新增</el-button>
|
|
||||||
</div>
|
|
||||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||||
<template #clys="{ row }">
|
|
||||||
<DictTag :tag="false" :value="row.clys" :options="D_BZ_CLYS" />
|
|
||||||
</template>
|
|
||||||
<template #cllx="{ row }">
|
|
||||||
<DictTag :tag="false" :value="row.cllx" :options="D_BZ_CLLX" />
|
|
||||||
</template>
|
|
||||||
<template #clpp="{ row }">
|
|
||||||
<DictTag :tag="false" :value="row.clpp" :options="D_BZ_CLPP" />
|
|
||||||
</template>
|
|
||||||
<!-- 操作 -->
|
|
||||||
<template #controls="{ row }">
|
<template #controls="{ row }">
|
||||||
<el-link type="danger" @click="delDictItem(row.id)">删除</el-link>
|
<el-link type="danger" @click="delDictItem(row.id)">删除</el-link>
|
||||||
<el-link type="danger" @click="updDictItem(row)">修改</el-link>
|
<el-link type="danger" @click="updDictItem(row)">修改</el-link>
|
||||||
</template>
|
</template>
|
||||||
</MyTable>
|
</MyTable>
|
||||||
</div>
|
</div>
|
||||||
<VehiclDoing v-model="chooseMarksVisible" @comfirm="addMarks" :data="dataModel"
|
<CaseLodig v-model="chooseMarksVisible" @comfirm="addMarks" :data="dataModel" />
|
||||||
:dict="{ D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP }" />
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { identityCardRule } from "@/utils/rules"
|
import { identityCardRule } from "@/utils/rules"
|
||||||
import { ref, reactive, watch, toRaw, getCurrentInstance, onMounted, onUnmounted } from "vue";
|
import { ref, reactive, watch, toRaw, getCurrentInstance, onMounted, onUnmounted } from "vue";
|
||||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
import VehiclDoing from "../component/vehiclDoing.vue";
|
import CaseLodig from "../component/caseLodig.vue";
|
||||||
import {tbGsxtZdryAjxxSaveOrUpdateAjxx, tbGsxtZdryAjxx, tbGsxtZdryAjxxselectAjxx } from '@/api/zdr.js'
|
import { tbGsxtZdryAjxxSaveOrUpdateAjxx, tbGsxtZdryAjxx, tbGsxtZdryAjxxselectAjxx } from '@/api/zdr.js'
|
||||||
import { ElMessage, ElMessageBox } from "element-plus";
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); //获取字典数据
|
const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); //获取字典数据
|
||||||
@ -71,10 +58,7 @@ const pageData = reactive({
|
|||||||
}, {
|
}, {
|
||||||
prop: 'ajmc',
|
prop: 'ajmc',
|
||||||
label: '案件名称',
|
label: '案件名称',
|
||||||
showSolt: true,
|
|
||||||
prop: 'clpp',
|
|
||||||
}, {
|
}, {
|
||||||
showSolt: true,
|
|
||||||
prop: 'sasj',
|
prop: 'sasj',
|
||||||
label: '受案时间',
|
label: '受案时间',
|
||||||
},],
|
},],
|
||||||
@ -98,30 +82,16 @@ const dataModel = ref()
|
|||||||
const addMarks = (val) => {
|
const addMarks = (val) => {
|
||||||
const params = {
|
const params = {
|
||||||
...val,
|
...val,
|
||||||
zdrid: listData.value.id,
|
zdryId: listData.value.id,
|
||||||
}
|
|
||||||
if (props.showBut && !props.disabled) {
|
|
||||||
if (addUpd.value) {
|
|
||||||
tbGsxtZdryAjxxSaveOrUpdateAjxx(params).then(res => {
|
|
||||||
gettbZdryClxxSelectPage()
|
|
||||||
proxy.$message({
|
|
||||||
message: '关联车辆添加成功',
|
|
||||||
type: 'success'
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
tbZdryClxxUpdate(params).then(res => {
|
|
||||||
gettbZdryClxxSelectPage()
|
|
||||||
proxy.$message({
|
|
||||||
message: '关联车辆修改成功',
|
|
||||||
type: 'success'
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
pageData.tableData.push(val)
|
|
||||||
}
|
}
|
||||||
|
tbGsxtZdryAjxxSaveOrUpdateAjxx(params).then(res => {
|
||||||
|
gettbZdryClxxSelectPage()
|
||||||
|
proxy.$message({
|
||||||
|
message: '案件信息操作成功',
|
||||||
|
type: 'success'
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
})
|
})
|
||||||
@ -174,7 +144,7 @@ const gettbZdryClxxSelectPage = () => {
|
|||||||
zdrid: listData.value.id
|
zdrid: listData.value.id
|
||||||
}
|
}
|
||||||
tbGsxtZdryAjxxselectAjxx(promes).then(res => {
|
tbGsxtZdryAjxxselectAjxx(promes).then(res => {
|
||||||
pageData.tableData = res.records
|
pageData.tableData = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 抛出数据并验证标签列表不为空
|
// 抛出数据并验证标签列表不为空
|
||||||
@ -224,6 +194,9 @@ defineExpose({
|
|||||||
|
|
||||||
.headClass {
|
.headClass {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: #303133;
|
color: #303133;
|
||||||
margin: 20px 0 10px 0;
|
margin: 20px 0 10px 0;
|
||||||
|
@ -2,15 +2,10 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="headClass" style="">
|
<div class="headClass" style="">
|
||||||
<h3>密切联系人</h3>
|
<h3>密切联系人</h3>
|
||||||
<el-button type="primary" @click="openDialog('新增密切联系人', {}, true)">新增</el-button>
|
<el-button type="primary" @click="openDialog('新增密切联系人', {}, true)" v-if="showBut">新增</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="headSelect">
|
<div class="headSelect">
|
||||||
<el-form :model="formData" :inline="true" ref="formRef" :rules="rulesForm" class="form-inline">
|
<el-form :model="formData" :inline="true" ref="formRef" :rules="rulesForm" class="form-inline">
|
||||||
<!-- 姓名 -->
|
|
||||||
<!-- <el-form-item label="姓名">
|
|
||||||
<el-input v-model="formData.username" placeholder="请输入姓名" />
|
|
||||||
</el-form-item> -->
|
|
||||||
<!-- 身份证号码 -->
|
|
||||||
<el-form-item label="身份证号码">
|
<el-form-item label="身份证号码">
|
||||||
<el-input v-model="formData.rySfzh" placeholder="请输入身份证号码" />
|
<el-input v-model="formData.rySfzh" placeholder="请输入身份证号码" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
@ -0,0 +1,222 @@
|
|||||||
|
<template>
|
||||||
|
<div class="backinfo-container">
|
||||||
|
<div class="headClass">
|
||||||
|
<h3>操作日志</h3>
|
||||||
|
</div>
|
||||||
|
<!-- 列表区域 -->
|
||||||
|
<div class="list-container">
|
||||||
|
<div v-loading="loading" class="behavior-list">
|
||||||
|
<div class="behavior-list-inner">
|
||||||
|
<div
|
||||||
|
v-for="(item, index) in behaviorList"
|
||||||
|
:key="item.id"
|
||||||
|
class="behavior-item"
|
||||||
|
>
|
||||||
|
<div class="behavior-item-header">
|
||||||
|
<span class="behavior-index">{{ index + 1 }}.</span>
|
||||||
|
<el-tag :type="getTagType(item.behaviorType)">{{ item.zhmc }}</el-tag>
|
||||||
|
<span class="behavior-time">{{ item.czsj }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="behavior-item-content">
|
||||||
|
<p class="behavior-description">{{ item.czjl }}</p>
|
||||||
|
<p class="behavior-location"><i class="el-icon-location-outline"></i> {{ item.bz }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="!loading && behaviorList.length === 0" class="empty-state">
|
||||||
|
<el-empty description="暂无操作记录" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, getCurrentInstance, onMounted,watch } from 'vue'
|
||||||
|
import GdMap from "@/components/GdMap/index.vue";
|
||||||
|
import {tbGsxtZdryCzrzSelectCzrz} from '@/api/zdr'
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const props = defineProps({
|
||||||
|
dataList: {
|
||||||
|
type: Object,
|
||||||
|
default: () => { },
|
||||||
|
}, disabled: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
showBut: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const listData = ref({})
|
||||||
|
watch(() => props.dataList, (val) => {
|
||||||
|
if (val) {
|
||||||
|
listData.value = val
|
||||||
|
fetchData()
|
||||||
|
}
|
||||||
|
}, { deep: true })
|
||||||
|
// 列表数据
|
||||||
|
const behaviorList = ref([])
|
||||||
|
const loading = ref(false)
|
||||||
|
|
||||||
|
// 获取数据
|
||||||
|
const fetchData = () => {
|
||||||
|
loading.value = true
|
||||||
|
tbGsxtZdryCzrzSelectCzrz({ zdrid: listData.value.id }).then(res => {
|
||||||
|
behaviorList.value = res
|
||||||
|
}).finally(() => {
|
||||||
|
loading.value = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 页面加载时获取数据
|
||||||
|
onMounted(() => {
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "~@/assets/css/layout.scss";
|
||||||
|
@import "~@/assets/css/element-plus.scss";
|
||||||
|
|
||||||
|
.backinfo-container {
|
||||||
|
padding-top: 20px;
|
||||||
|
width: 100%;
|
||||||
|
background-color: #f5f7fa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.headClass {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #303133;
|
||||||
|
margin: 0 0 20px 0;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
border-bottom: 2px solid #409eff;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-container {
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 16px;
|
||||||
|
border-radius: 6px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-form-inline {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-container {
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 16px;
|
||||||
|
border-radius: 6px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.behavior-list {
|
||||||
|
max-height: 600px;
|
||||||
|
overflow: hidden; /* 完全禁止滚动条 */
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.behavior-list-inner {
|
||||||
|
max-height: 600px;
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
|
padding-right: 10px; /* 为滚动条留出空间但不显示 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.behavior-item {
|
||||||
|
padding: 16px;
|
||||||
|
border-bottom: 1px solid #f0f0f0;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
position: relative;
|
||||||
|
left: 0; /* 初始位置 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.behavior-item:hover {
|
||||||
|
background-color: #fafafa;
|
||||||
|
left: 5px; /* 使用left属性代替transform,避免触发滚动条 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.behavior-item:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.behavior-item-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.behavior-index {
|
||||||
|
font-weight: 600;
|
||||||
|
color: #606266;
|
||||||
|
margin-right: 12px;
|
||||||
|
min-width: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.behavior-time {
|
||||||
|
margin-left: auto;
|
||||||
|
color: #909399;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.behavior-item-content {
|
||||||
|
padding-left: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.behavior-description {
|
||||||
|
margin: 0 0 8px 0;
|
||||||
|
color: #303133;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.behavior-location {
|
||||||
|
margin: 0;
|
||||||
|
color: #606266;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-state {
|
||||||
|
padding: 60px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-tag {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-date-editor .el-range-separator {
|
||||||
|
color: #606266;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.backinfo-container {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-form-inline {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-form-inline .el-form-item {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-container {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -6,11 +6,18 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="marginBox">
|
<div class="marginBox">
|
||||||
<div>身份证号码:{{ listData.rySfzh }} <span>({{ listData.zdrBkZt ? '已布控' : '未布控' }})</span></div>
|
<div>身份证号码:{{ listData.rySfzh }} <span>({{ listData.zdrBkZt ? '已布控' : '未布控' }})</span></div>
|
||||||
|
<div v-if="listData.ryLxdh&&listData.ryLxdh.length>0"> 手机号码:
|
||||||
<div>手机号码:{{ listData.ryLxdh?.[0] }} <span>({{ listData.zdrBkZt ? '已布控' : '未布控' }})</span>
|
<span style="color: #000;" v-for="(item, index) in listData.ryLxdh" :key="index">{{ item }}
|
||||||
|
<span v-if="index != listData.ryLxdh.length - 1">、</span>
|
||||||
|
</span>
|
||||||
<div> {{ listData.ryLxdh?.[1] }}<span>({{ listData.zdrBkZt ? '已布控' : '未布控' }})</span></div>
|
<div> {{ listData.ryLxdh?.[1] }}<span>({{ listData.zdrBkZt ? '已布控' : '未布控' }})</span></div>
|
||||||
</div>
|
</div>
|
||||||
<div>车牌号码:{{ listData.clHm }} <span>({{ listData.zdrBkZt ? '已布控' : '未布控' }})</span></div>
|
<div v-if="listData.clxxList">车牌号码:
|
||||||
|
<span style="color: #000;" v-for="(item, index) in listData.clxxList" :key="index">{{ item.cph }}
|
||||||
|
<span v-if="index != listData.clxxList.length - 1">、</span>
|
||||||
|
</span>
|
||||||
|
<span>({{ listData.zdrBkZt ? '已布控' : '未布控' }})</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -67,30 +74,28 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
&>:nth-child(1) {
|
&>:nth-child(1) {
|
||||||
width: 300px;
|
// width: 300px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&>:nth-child(2) {
|
&>:nth-child(2) {
|
||||||
width: 400px;
|
// width: 400px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
// justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
&>:nth-child(3) {
|
&>:nth-child(3) {
|
||||||
width: 210px;
|
// width: 210px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<el-button @click="resetForm">重置</el-button>
|
<el-button @click="resetForm">重置</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="mapBox">
|
<div class="mapBox">
|
||||||
<!-- <GdMap /> -->
|
<GdMap />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -171,6 +171,8 @@ const gettbGsxtZdryUpdate = () => {
|
|||||||
...listQuery.value,
|
...listQuery.value,
|
||||||
ryzp: listQuery.value.ryzp.length > 0 ? listQuery.value.ryzp.toString() : "",
|
ryzp: listQuery.value.ryzp.length > 0 ? listQuery.value.ryzp.toString() : "",
|
||||||
ryLxdh: listQuery.value.ryLxdh,
|
ryLxdh: listQuery.value.ryLxdh,
|
||||||
|
zdrSjjz:JSON.stringify(listQuery.value.zdrSjjz),
|
||||||
|
|
||||||
}
|
}
|
||||||
tbGsxtZdryUpdate(promes).then((res) => {
|
tbGsxtZdryUpdate(promes).then((res) => {
|
||||||
listQuery.value.ryzp = []
|
listQuery.value.ryzp = []
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="headClass" style="">
|
<div class="headClass" style="">
|
||||||
<h3>关联车辆</h3>
|
<h3>关联车辆</h3>
|
||||||
<el-button type="primary" :disabled="disabled" @click="AddPore">选择</el-button>
|
<el-button type="primary" :disabled="disabled" @click="AddPore" v-if="showBut">选择</el-button>
|
||||||
</div>
|
</div>
|
||||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||||
@ -30,7 +30,7 @@
|
|||||||
import { ref, reactive, watch, toRaw, getCurrentInstance, onMounted, onUnmounted } from "vue";
|
import { ref, reactive, watch, toRaw, getCurrentInstance, onMounted, onUnmounted } from "vue";
|
||||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||||
import VehiclDoing from "../component/vehiclDoing.vue";
|
import VehiclDoing from "../component/vehiclDoing.vue";
|
||||||
import { tbZdryClxxAdd, tbZdryClxxBatchAdd, tbZdryClxxDelete, tbZdryClxxSelectPage, tbZdryClxxUpdate } from '@/api/zdr.js'
|
import { tbZdryClxxAdd, tbZdryClxxDelete, tbZdryClxxSelectPage, tbZdryClxxUpdate } from '@/api/zdr.js'
|
||||||
import { ElMessage, ElMessageBox } from "element-plus";
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); //获取字典数据
|
const { D_BZ_CLLX, D_BZ_CLYS, D_BZ_CLPP } = proxy.$dict("D_BZ_CLLX", "D_BZ_CLYS", "D_BZ_CLPP"); //获取字典数据
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="headClass" style="">
|
<div class="headClass" style="">
|
||||||
<h3>走访记录</h3>
|
<h3>走访记录</h3>
|
||||||
<el-button @click="AddPore" type="primary">新增</el-button>
|
<el-button @click="AddPore" type="primary" v-if="showBut">新增</el-button>
|
||||||
</div>
|
</div>
|
||||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||||
|
@ -11,7 +11,6 @@ const loginDialog = ref(false);
|
|||||||
const deptList = ref([]);
|
const deptList = ref([]);
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
function redirectAuth() {
|
function redirectAuth() {
|
||||||
|
|
||||||
let token = location.hash.slice(20) || null;
|
let token = location.hash.slice(20) || null;
|
||||||
if (token != null) {
|
if (token != null) {
|
||||||
token = token.replace(/\ +/g, "");
|
token = token.replace(/\ +/g, "");
|
||||||
|
Reference in New Issue
Block a user