This commit is contained in:
lcw
2026-01-23 15:43:22 +08:00
parent 47a7081963
commit 5b62d707ff
76 changed files with 3333 additions and 880 deletions

View File

@ -68,7 +68,7 @@
</div>
<div style="width: 100%;" class="mt10">
<el-form-item prop="bkDj" label="布控部门" v-if="props.name == 'myControl'">
<el-form-item prop="bkDj" label="布控等级" v-if="props.name == 'myControl'">
<MOSTY.Select v-model="listQuery.bkDj" :dictEnum="props.dic.D_GS_SSYJ" placeholder="请选择布控级别"
clearable />
</el-form-item>
@ -192,6 +192,7 @@ const rules = reactive({
czJsdwdm: [{ required: true, message: "请选择处置接收单位", trigger: "change" }],
bkshrSsbmdm: [{ required: true, message: "请选择审核部门", trigger: "change" }],
bksprSsbmdm: [{ required: true, message: "请选择审批部门", trigger: "change" }],
czYq: [{ required: true, message: "请选择处置要求", trigger: "change" }],
})
let tableDate = reactive({
keyCount: 0,

View File

@ -0,0 +1,263 @@
<template>
<el-dialog :model-value="modelValue" :destroy-on-close="true" title="回执单" @close="close"
:close-on-click-modal="false">
<div class="hzd-container">
<h2 class="hzd-title">林芝市公安局临时布控工作回执单</h2>
<table class="hzd-table">
<tr>
<td class="hzd-label">布控对象</td>
<td class="hzd-value">{{ listQuery.bkdx }}</td>
<td class="hzd-label">申请日期</td>
<td class="hzd-value">
<el-date-picker v-model="listQuery.sqrq" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择日期" style="width: 100%" />
</td>
</tr>
<tr>
<td class="hzd-label">对象信息</td>
<td class="hzd-value" colspan="3">{{ listQuery.bkdxList }}</td>
</tr>
<tr>
<td class="hzd-label">布控来源</td>
<td class="hzd-value">{{ listQuery.ly }}</td>
<td class="hzd-label">布控范围</td>
<td class="hzd-value">全市工布江达县</td>
</tr>
<tr>
<td class="hzd-label">布控级别</td>
<td class="hzd-value">{{ listQuery.dj }}</td>
<td class="hzd-label">处置要求</td>
<td class="hzd-value">{{ listQuery.czyq }}</td>
</tr>
<tr>
<td class="hzd-label">经办人员</td>
<td class="hzd-value">{{ listQuery.bkcjrXm }}</td>
<td class="hzd-label">联系方式</td>
<td class="hzd-value">
<el-input v-model="listQuery.lxfs" style="width: 100%" placeholder="请输入经办人联系方式" />
</td>
</tr>
<tr>
<td class="hzd-label">布控理由</td>
<td class="hzd-value" colspan="3">
<el-input v-model="listQuery.bkSy" style="width: 100%" placeholder="请输入布控理由" />
</td>
</tr>
<tr>
<td class="hzd-label">执法依据</td>
<td class="hzd-value" colspan="3">
<el-input v-model="listQuery.zfyj" style="width: 100%" placeholder="请输入执法依据" />
</td>
</tr>
<tr>
<td class="hzd-label">布控时间</td>
<td class="hzd-value">
<el-date-picker v-model="listQuery.bkSjKs" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择日期" style="width: 100%" />
</td>
<td class="hzd-label">布控时间</td>
<td class="hzd-value">
<el-date-picker v-model="listQuery.bkSjJs" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择日期" style="width: 100%" />
</td>
</tr>
<tr>
<td class="hzd-label">布控结果</td>
<td class="hzd-value" colspan="3">{{ listQuery.bkzt }}</td>
</tr>
<tr>
<td class="hzd-label">备注</td>
<td class="hzd-value" colspan="3">
<el-input v-model="listQuery.bz" type="textarea" style="width: 100%" placeholder="请输入备注" />
<div v-show="false" class="input-value">{{ listQuery.bz }}</div>
</td>
</tr>
</table>
</div>
<template #footer>
<div class="flex just-center">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="exportWord">导出Word</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { reactive, ref, getCurrentInstance, watch } from 'vue';
import { timeValidate } from '@/utils/tools'
import { saveAs } from 'file-saver'
const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
bkDx: {
type: String,
default: '01'
},
dataList: {
type: Object,
default: () => ({})
}, dict: {
type: Object,
default: () => ({})
},
name: {
type: String,
default: ''
}
})
const emits = defineEmits(["update:modelValue", "choosed", "choosedAdd"]);
const { proxy } = getCurrentInstance();
const { D_BZ_XB, D_GS_ZDR_YJDJ } = proxy.$dict("D_BZ_XB", "D_GS_ZDR_YJDJ"); // 获取字典数据
const input = ref('')
const value1 = ref('')
const value2 = ref('')
const listQuery = ref({})
watch(() => props.dataList, (newVal) => {
if (newVal) {
listQuery.value = newVal
listQuery.value.bkdxList = newVal.bkdxList.map(item => {
return item.rySfzh
}).join(',')
listQuery.value.sqrq = timeValidate()
listQuery.value.bkdx = props.dict.D_GS_BK_NEWDX.find(item => item.dm == listQuery.value.bkDx).zdmc
listQuery.value.ly = props.dict.D_BZ_BKLYS.find(item => item.dm == listQuery.value.bkly).zdmc
listQuery.value.czyq =listQuery.value.czYq? props.dict.D_GS_BK_CZYQ.find(item => item.dm == listQuery.value.czYq).zdmc:""
listQuery.value.bkzt = props.dict.D_GZL_SHZT.find(item => item.dm == listQuery.value.bkZt).zdmc
if (props.name == 'myControl') {
listQuery.value.dj = props.dict.D_GS_SSYJ.find(item => item.dm == listQuery.value.bkDj).zdmc
} else {
listQuery.value.dj = props.dict.D_BZ_JQDJ.find(item => item.dm == listQuery.value.bkDj).zdmc
}
}
})
// options: route.name == 'myControl' ? D_GS_SSYJ : D_BZ_JQDJ
const submitForm = () => {
elform.value.submit((val) => {
val.id = new Date().getTime()
emits('choosedAdd', val)
close()
})
}
const close = async () => {
emits("update:modelValue", false);
}
const exportWord = () => {
// 获取表格HTML内容
const tableElement = document.querySelector('.hzd-table');
if (!tableElement) return;
// 克隆表格以避免修改原始DOM
const clonedTable = tableElement.cloneNode(true);
// 处理备注输入框的值
const noteCell = clonedTable.querySelector('.hzd-value[colspan="3"]:last-child');
if (noteCell) {
const inputElement = noteCell.querySelector('el-input');
const inputValue = noteCell.querySelector('.input-value');
if (inputValue) {
// 清空单元格内容并添加纯文本值
noteCell.innerHTML = inputValue.textContent || '';
}
}
// 处理其他输入框和日期选择器的值
const inputElements = clonedTable.querySelectorAll('input');
inputElements.forEach(input => {
const parentTd = input.closest('td');
if (parentTd) {
// 替换为输入框的值
parentTd.innerHTML = input.value || '';
}
});
// 构建完整的HTML内容
const htmlContent = `
<html>
<head>
<meta charset="utf-8">
<style>
body { font-family: SimSun, serif; }
h2 { text-align: center; margin-bottom: 20px; }
table {
width: 100%;
border-collapse: collapse;
margin: 0 auto;
}
td {
border: 1px solid #000;
padding: 8px;
text-align: left;
}
.hzd-label {
font-weight: bold;
width: 150px;
background-color: #f5f7fa;
}
</style>
</head>
<body>
<h2>林芝市公安局临时布控工作回执单</h2>
${clonedTable.outerHTML}
</body>
</html>
`;
// 创建Blob对象并下载
const blob = new Blob([htmlContent], { type: 'application/msword' });
saveAs(blob, '布控工作回执单.doc');
}
</script>
<style lang="scss" scoped>
.hzd-container {
width: 100%;
padding: 20px;
box-sizing: border-box;
}
.hzd-title {
text-align: center;
font-size: 18px;
font-weight: bold;
margin-bottom: 20px;
}
.hzd-table {
width: 100%;
border-collapse: collapse;
border: 1px solid #000;
}
.hzd-table td {
border: 1px solid #000;
padding: 8px;
text-align: left;
}
.hzd-label {
font-weight: bold;
width: 150px;
background-color: #f5f7fa;
}
.hzd-value {
width: calc((100% - 150px) / 3);
}
.hzd-table td[colspan="3"] {
width: calc(100% - 150px);
}
</style>

View File

@ -1,14 +1,14 @@
<template>
<div>
<div class="titleBox">
<PageTitle :title=" route.meta.title ">
<el-button type="primary" @click="handleAdd('add', null)">发起布控</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<div ref="searchBox" class="mt10">
<Search :searchArr="searchConfiger" @submit="onSearch" />
</div>
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
<template #left>
<el-button type="primary" size="small" @click="handleAdd('add', null)">发起布控</el-button>
</template>
</PageTitle>
<!-- 按钮组 -->
<div class="content">
<!-- 表格 -->
@ -20,8 +20,8 @@
<DictTag :tag="false" :value="row.bkZt" :options="D_GS_BK_ZT" />
</template>
<template #bkDj="{ row }">
<DictTag :tag="false" :value="row.bkDj" :options="D_GS_SSYJ" v-if="route.name=='myControl'" />
<DictTag :tag="false" :value="row.bkDj" :options="D_BZ_JQDJ" v-else/>
<DictTag :tag="false" :value="row.bkDj" :options="D_GS_SSYJ" v-if="route.name == 'myControl'" />
<DictTag :tag="false" :value="row.bkDj" :options="D_BZ_JQDJ" v-else />
</template>
<template #bkDx="{ row }">
<DictTag :tag="false" :value="row.bkDx" :options="D_GS_BK_NEWDX" />
@ -49,12 +49,13 @@
<template v-if="!row.gzlid">
<el-link type="primary" v-if="['01', '03', '06'].includes(row.bkZt)" size="small"
@click="createProcess(row)">送审</el-link>
<el-link type="primary" size="small" @click="tbGsxtBkQuashList( row)" v-else>撤控</el-link>
<el-link type="primary" size="small" @click="tbGsxtBkQuashList(row)" v-else>撤控</el-link>
<el-link type="primary" v-if="['01', '03', '06'].includes(row.bkZt)" size="small"
@click="handleAdd('edit', row)">编辑</el-link>
</template>
<!-- 审核通过后才有轨迹 -->
<el-link type="primary" size="small" @click="openShowHzd(row)">回执单</el-link>
<el-link type="primary" size="small" @click="handleAdd('detail', row)">详情</el-link>
<el-link type="danger" size="small" @click="handleRow(row.id)"
v-if="['01', '03', '06'].includes(row.bkZt)">删除</el-link>
@ -69,13 +70,14 @@
</div>
<!-- 布控类型 -->
<AddBkdx ref="addBkdxForm" @change="getList" :name="route.name" :dic="{
D_GS_BK_NEWDX, D_GS_BK_BKYS, D_BZ_XB, D_GS_BK_CZYQ,D_BZ_JQDJ,D_BZ_BKLYS,
D_GS_BK_NEWDX, D_GS_BK_BKYS, D_BZ_XB, D_GS_BK_CZYQ, D_BZ_JQDJ, D_BZ_BKLYS,
D_GS_SSYJ, BD_BK_CLYJBQ, D_GS_BK_CZJSDWLX, D_GS_BK_TJFS, D_GS_ZDR_YJDJ,
}" />
<!-- 预警弹窗 -->
<YjDialog ref="warningkdxForm"></YjDialog>
<SubmissionProcess v-model="showSp" :data="rowData" :userData="{ ajmc: '布控审批', flowType: 'BKSP', modelName: '布控' }"
:path="fixedValue" @getList="getList" />
<Hzd v-model="hzdVisible" :dataList="dataList" :dict="{D_GS_BK_NEWDX,D_BZ_BKLYS,D_GS_SSYJ,D_BZ_JQDJ,D_GZL_SHZT,D_GS_BK_CZYQ}" :name="route.name" />
</template>
<script setup>
@ -87,18 +89,19 @@ import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import SubmissionProcess from '@/components/flowPath/submissionProcess.vue'
import {tbGsxtBkQuash} from '@/api/zdr.js'
import { tbGsxtBkQuash } from '@/api/zdr.js'
import { useRouter, useRoute } from 'vue-router'
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import Hzd from "./components/dolog/hzd.vue";
import { rotate } from "ol/transform";
const router = useRouter()
const route = useRoute()
const { proxy } = getCurrentInstance();
const { D_GS_BK_BKYS, D_BZ_XB, D_GS_BK_SJLX, D_GS_SSYJ, BD_BK_CLYJBQ, D_GS_ZDR_YJDJ,
D_GS_BK_NEWDX, D_GS_BK_ZT, D_GS_BK_CZYQ, D_GS_BK_CZJSDWLX, D_GS_BK_TJFS,D_BZ_BKLYS,
D_GS_BK_NEWDX, D_GS_BK_ZT, D_GS_BK_CZYQ, D_GS_BK_CZJSDWLX, D_GS_BK_TJFS, D_BZ_BKLYS,D_GZL_SHZT,
D_BZ_JQDJ } = proxy.$dict("D_GS_ZDR_YJDJ", "D_GS_BK_BKYS", "D_BZ_XB", "D_GS_BK_SJLX",
"D_GS_SSYJ", "D_GS_BK_NEWDX", "D_GS_BK_ZT", "D_GS_BK_CZYQ", "D_GS_BK_CZJSDWLX", "D_GS_BK_TJFS",
'BD_BK_CLYJBQ', 'D_BZ_JQDJ',"D_BZ_BKLYS"); //获取字典数据
"D_GS_SSYJ", "D_GS_BK_NEWDX", "D_GS_BK_ZT", "D_GS_BK_CZYQ", "D_GS_BK_CZJSDWLX", "D_GS_BK_TJFS",'D_GZL_SHZT',
'BD_BK_CLYJBQ', 'D_BZ_JQDJ', "D_BZ_BKLYS"); //获取字典数据
const addBkdxForm = ref(null); //布控对象组件
const warningkdxForm = ref(); //布控对象组件
const searchBox = ref(); //搜索框
@ -124,11 +127,16 @@ const searchConfiger = ref([
showType: "select",
options: D_GS_BK_ZT
},
{
{
label: "布控时间",
prop: "startTime",
placeholder: "请选择布控时间",
showType: "datetimerange",
}, {
label: "布控部门",
prop: "bkfqrSsbmdm",
placeholder: "请选择布控部门",
showType: "department",
},
]);
const queryFrom = ref({});
@ -179,8 +187,8 @@ onMounted(() => {
const onSearch = (val) => {
queryFrom.value = {
...val,
startTime: val.startTime? val.startTime[0]: '',
endTime: val.startTime? val.startTime[1]: ''
startTime: val.startTime ? val.startTime[0] : '',
endTime: val.startTime ? val.startTime[1] : ''
};
pageData.pageConfiger.pageCurrent = 1;
getList();
@ -199,7 +207,6 @@ const changeSize = (val) => {
const getList = () => {
pageData.tableConfiger.loading = true;
let bklx = ''
console.log();
if (route.name == 'myControl') {
bklx = '01'
@ -234,7 +241,13 @@ const handleRow = (id) => {
});
})
};
// 回执单
const hzdVisible = ref(false)
const dataList= ref({})
const openShowHzd = (row) => {
hzdVisible.value = true
dataList.value = row
}
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
@ -243,7 +256,7 @@ const tabHeightFn = () => {
};
};
const tbGsxtBkQuashList = (item) => {
tbGsxtBkQuash({id:item.id}).then(res=>{
tbGsxtBkQuash({ id: item.id }).then(res => {
proxy.$message({ type: "success", message: "操作成功" });
getList();
})