更新
This commit is contained in:
@ -0,0 +1,283 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">情报信息流转{{ title }}</span>
|
||||
<div>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cntinfo">
|
||||
<el-form :model="listQuery" :label-width="130" label-position="right">
|
||||
<el-divider content-position="left">基础信息</el-divider>
|
||||
<div class="form-row">
|
||||
<el-form-item label="线索名称">
|
||||
<el-input v-model="listQuery.xsmc" placeholder="请输入线索名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="线索来源">
|
||||
<el-input v-model="listQuery.xsly" placeholder="请输入线索来源" />
|
||||
</el-form-item>
|
||||
<el-form-item label="线索编号">
|
||||
<el-input v-model="listQuery.xsbh" placeholder="请输入线索编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所属专题">
|
||||
<el-input v-model="listQuery.xszt" placeholder="请输入所属专题" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="线索类型">
|
||||
<el-select v-model="listQuery.xslx" placeholder="请选择线索类型">
|
||||
<el-option label="类型1" value="1"/>
|
||||
<el-option label="类型2" value="2"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="线索等级">
|
||||
<el-select v-model="listQuery.xsdj" placeholder="请选择线索等级">
|
||||
<el-option label="一级" value="1"/>
|
||||
<el-option label="二级" value="2"/>
|
||||
</el-select>
|
||||
</el-form-item> -->
|
||||
</div>
|
||||
|
||||
<el-divider content-position="left">线索描述</el-divider>
|
||||
<div class="form-row">
|
||||
<el-form-item label="线索内容" class="full-width">
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="listQuery.xsnr"
|
||||
:rows="4"
|
||||
placeholder="请输入线索内容"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<el-form-item label="线索标签大类">
|
||||
<el-select
|
||||
v-model="listQuery.bqdl"
|
||||
placeholder="请选择线索标签大类"
|
||||
>
|
||||
<el-option label="类型1" value="1" />
|
||||
<el-option label="类型2" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="线索标签细类">
|
||||
<el-select
|
||||
v-model="listQuery.bqxl"
|
||||
placeholder="请选择线索标签细类"
|
||||
>
|
||||
<el-option label="一级" value="1" />
|
||||
<el-option label="二级" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="线索标签二级系类">
|
||||
<el-select
|
||||
v-model="listQuery.bqxl"
|
||||
placeholder="请选择线索标签二级系类"
|
||||
>
|
||||
<el-option label="一级" value="1" />
|
||||
<el-option label="二级" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="线索来源">
|
||||
<el-select v-model="listQuery.xsly" placeholder="请选择线线索来源">
|
||||
<el-option label="一级" value="1" />
|
||||
<el-option label="二级" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<el-form-item label="线索风险等级">
|
||||
<el-select
|
||||
v-model="listQuery.xsfxdj"
|
||||
placeholder="请选择线索风险等级"
|
||||
>
|
||||
<el-option label="类型1" value="1" />
|
||||
<el-option label="类型2" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="线索备注">
|
||||
<el-input v-model="listQuery.xsbz" placeholder="请输入线索备注" />
|
||||
</el-form-item>
|
||||
<el-form-item label="市内外">
|
||||
<el-input v-model="listQuery.snw" placeholder="请输入市内外" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否涉及外地">
|
||||
<el-select
|
||||
v-model="listQuery.fxdj"
|
||||
placeholder="请选择线索风险等级"
|
||||
>
|
||||
<el-option label="是" value="1" />
|
||||
<el-option label="否" value="0" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="指向地点">
|
||||
<el-select v-model="listQuery.zxdd" placeholder="请选择指向地点">
|
||||
<el-option label="一级" value="1" />
|
||||
<el-option label="二级" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<el-divider content-position="left">相关人员</el-divider>
|
||||
<div class="mt10 mb10">
|
||||
<el-button type="primary" size="small">添加人员</el-button>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<MyTable
|
||||
:tableData="pageForm.tableData"
|
||||
:tableColumn="pageForm.tableColumn"
|
||||
:tableHeight="pageForm.tableHeight"
|
||||
:key="pageForm.keyCount"
|
||||
:tableConfiger="pageForm.tableConfiger"
|
||||
:controlsWidth="pageForm.controlsWidth"
|
||||
@chooseData="chooseData"
|
||||
>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link
|
||||
size="small"
|
||||
type="primary"
|
||||
@click="addEdit('detail', row)"
|
||||
>详情</el-link
|
||||
>
|
||||
<el-link size="small" type="success" @click="addEdit('edit', row)"
|
||||
>编辑</el-link
|
||||
>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row)"
|
||||
>删除</el-link
|
||||
>
|
||||
</template>
|
||||
</MyTable>
|
||||
</div>
|
||||
|
||||
<el-divider content-position="left">申请人</el-divider>
|
||||
<div class="form-row">
|
||||
<el-form-item label="申请单位">
|
||||
<el-input v-model="listQuery.sqdw" placeholder="请输入申请单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="申请人">
|
||||
<el-input v-model="listQuery.sqr" placeholder="请输入申请人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核单位">
|
||||
<el-input v-model="listQuery.shdw" placeholder="请输入审核单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核人">
|
||||
<el-input v-model="listQuery.shr" placeholder="请输入审核人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批单位">
|
||||
<el-input v-model="listQuery.spdw" placeholder="请输入审批单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批人">
|
||||
<el-input v-model="listQuery.spr" placeholder="请输入审批人" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import { ref,reactive } from "vue";
|
||||
|
||||
const dialogForm = ref(false);
|
||||
const title = ref("");
|
||||
const listQuery = ref({
|
||||
xgry: []
|
||||
});
|
||||
const pageForm = reactive({
|
||||
tableData: [
|
||||
{
|
||||
xm: "张三",
|
||||
xb: "男",
|
||||
sfzh: "51018319969699999",
|
||||
hjd: "",
|
||||
hjdpcs: "",
|
||||
bq: "重点人员"
|
||||
}
|
||||
],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false
|
||||
},
|
||||
controlsWidth: 220,
|
||||
tableColumn: [
|
||||
{ label: "姓名", prop: "xm" },
|
||||
{ label: "性别", prop: "xb" },
|
||||
{ label: "身份证号", prop: "sfzh" },
|
||||
{ label: "户籍地", prop: "hjd" },
|
||||
{ label: "户籍地派出所", prop: "hjdpcs" },
|
||||
{ label: "标签", prop: "bq" }
|
||||
]
|
||||
});
|
||||
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
dialogForm.value = true;
|
||||
title.value = type === "add" ? "新增" : "编辑";
|
||||
if (type === "edit" && row) {
|
||||
listQuery.value = { ...row };
|
||||
} else {
|
||||
listQuery.value = {
|
||||
xgry: []
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
const close = () => {
|
||||
dialogForm.value = false;
|
||||
};
|
||||
|
||||
const handleAdd = () => {
|
||||
listQuery.value.xgry.push({
|
||||
xm: "",
|
||||
zjhm: "",
|
||||
lxdh: ""
|
||||
});
|
||||
};
|
||||
|
||||
const handleDelete = (index) => {
|
||||
listQuery.value.xgry.splice(index, 1);
|
||||
};
|
||||
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.dialog {
|
||||
padding: 20px;
|
||||
|
||||
.head_box {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.cntinfo {
|
||||
height: calc(100% - 70px);
|
||||
overflow: hidden;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.form-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 20px;
|
||||
|
||||
.el-form-item {
|
||||
flex: 1;
|
||||
min-width: 300px;
|
||||
margin-right: 20px;
|
||||
|
||||
&.full-width {
|
||||
flex: 0 0 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.el-divider__text) {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,216 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="titleBox">
|
||||
<PageTitle title="情报信息流转">
|
||||
<el-button type="primary" @click="addEdit('add', '')">
|
||||
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
<el-button type="danger" @click="addEdit('add', '')">
|
||||
<el-icon style="vertical-align: middle"><Dete /></el-icon>
|
||||
<span style="vertical-align: middle">批量删除</span>
|
||||
</el-button>
|
||||
</PageTitle>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable
|
||||
:tableData="pageData.tableData"
|
||||
:tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData">
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link size="small" type="primary" @click="addEdit('detail', row)">详情</el-link>
|
||||
<el-link size="small" type="success" @click="addEdit('edit', row)">编辑</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row)">删除</el-link>
|
||||
<el-link size="small" type="warning" @click="transferClue(row)">续报</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"
|
||||
></Pages>
|
||||
</div>
|
||||
<!-- 详情 -->
|
||||
<DetailForm ref="detailDiloag" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import DetailForm from "./components/addForm.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const detailDiloag = ref();
|
||||
const searchBox = ref(); //搜索框
|
||||
|
||||
const searchConfiger = ref([
|
||||
{ label: "线索名称", prop: 'clueTitle', placeholder: "请输入线索名称", showType: "input" },
|
||||
{ label: "语义关键字", prop: 'semanticKeywords', placeholder: "请输入语义关键字", showType: "input" },
|
||||
{ label: "线索类型", prop: 'clueType', placeholder: "请选择线索类型", showType: "select" },
|
||||
{ label: "线索来源", prop: 'clueSource', placeholder: "请选择线索来源", showType: "select" },
|
||||
{ label: "线索状态", prop: 'xszt', placeholder: "请选择线索状态", showType: "select" },
|
||||
{ label: "处置状态", prop: 'czzt', placeholder: "请选择处置状态", showType: "select" },
|
||||
{ label: "开始时间", prop: 'startTime', placeholder: "请选择开始时间", showType: "date" },
|
||||
{ label: "结束时间", prop: 'endTime', placeholder: "请选择结束时间", showType: "date" },
|
||||
{ label: "指向地点", prop: 'targetLocation', placeholder: "请输入指向地点", showType: "input" },
|
||||
]);
|
||||
|
||||
const pageData = reactive({
|
||||
tableData: [
|
||||
{
|
||||
clueNo: "XS20240101001",
|
||||
clueTitle: "可疑人员活动线索",
|
||||
clueType: "人员线索",
|
||||
clueSource: "群众举报",
|
||||
startTime: "2024-01-01 08:00:00",
|
||||
endTime: "2024-01-01 18:00:00",
|
||||
targetLocation: "某市某区某街道",
|
||||
clueContent: "发现多名可疑人员在该区域频繁出入,疑似从事非法活动。",
|
||||
attachment: "report.pdf"
|
||||
},
|
||||
{
|
||||
clueNo: "XS20240101002",
|
||||
clueTitle: "涉毒交易线索",
|
||||
clueType: "违法犯罪线索",
|
||||
clueSource: "技术侦查",
|
||||
startTime: "2024-01-02 10:00:00",
|
||||
endTime: "2024-01-02 16:00:00",
|
||||
targetLocation: "某市某区某小区",
|
||||
clueContent: "监控发现多次可疑交易活动,疑似涉及违禁物品。",
|
||||
attachment: "evidence.docx"
|
||||
},
|
||||
{
|
||||
clueNo: "XS20240101003",
|
||||
clueTitle: "非法聚集线索",
|
||||
clueType: "群体性事件",
|
||||
clueSource: "网络监控",
|
||||
startTime: "2024-01-03 14:00:00",
|
||||
endTime: "2024-01-03 22:00:00",
|
||||
targetLocation: "某市某广场",
|
||||
clueContent: "网络平台发现有组织策划非法聚集活动的信息。",
|
||||
attachment: "online_evidence.zip"
|
||||
}
|
||||
],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 220,
|
||||
tableColumn: [
|
||||
{ label: "线索编号", prop: "clueNo" },
|
||||
{ label: "线索名称", prop: "clueTitle" },
|
||||
{ label: "线索类型", prop: "clueType" },
|
||||
{ label: "线索来源", prop: "clueSource" },
|
||||
{ label: "开始时间", prop: "startTime" },
|
||||
{ label: "结束时间", prop: "endTime" },
|
||||
{ label: "指向地点", prop: "targetLocation" },
|
||||
{ label: "线索内容", prop: "clueContent", width: 200 },
|
||||
{ label: "附件", prop: "attachment", slot: true },
|
||||
]
|
||||
});
|
||||
|
||||
const queryFrom = ref({});
|
||||
|
||||
onMounted(() => {
|
||||
getList()
|
||||
tabHeightFn();
|
||||
});
|
||||
|
||||
//选择类型
|
||||
const handleType = (val) => {
|
||||
pageData.keyCount++;
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
// 搜索
|
||||
const onSearch = (val) =>{
|
||||
queryFrom.value = {...val}
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
|
||||
const changeNo = (val) =>{
|
||||
pageData.pageConfiger.pageNum = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) =>{
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
|
||||
// 获取列表
|
||||
const getList = (val) =>{
|
||||
// pageData.tableConfiger.loading = true;
|
||||
let data = { ...pageData.pageConfiger, ...queryFrom.value };
|
||||
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
|
||||
// qcckPost(data,url).then(res=>{
|
||||
// pageData.tableData = res.records || [];
|
||||
// pageData.total = res.total;
|
||||
// pageData.tableConfiger.loading = false;
|
||||
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
|
||||
}
|
||||
|
||||
// 详情
|
||||
const addEdit = (type, row) => {
|
||||
detailDiloag.value.init(type, row);
|
||||
};
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
// 下载附件
|
||||
const downloadAttachment = (row) => {
|
||||
// TODO: 实现附件下载逻辑
|
||||
};
|
||||
|
||||
// 预览附件
|
||||
const previewAttachment = (row) => {
|
||||
// TODO: 实现附件预览逻辑
|
||||
};
|
||||
|
||||
// 删除行
|
||||
const deleteRow = (row) => {
|
||||
// TODO: 实现删除逻辑
|
||||
};
|
||||
|
||||
// 流转线索
|
||||
const transferClue = (row) => {
|
||||
// TODO: 实现线索流转逻辑
|
||||
};
|
||||
@ -0,0 +1,158 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">新增指令</span>
|
||||
<div>
|
||||
<el-button size="small" @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cntinfo">
|
||||
<el-form :model="listQuery" :label-width="120" label-position="right">
|
||||
<div class="form-row">
|
||||
<el-form-item label="指令标题">
|
||||
<MOSTY.Other width="100%" v-model="listQuery.title" placeholder="请输入指令标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否生成指令号">
|
||||
<MOSTY.Select width="100%" v-model="listQuery.generateNumber" :dictEnum="[{lable:'是',value:1}]" />
|
||||
</el-form-item>
|
||||
<el-form-item label="指令类型">
|
||||
<MOSTY.Select width="100%" v-model="listQuery.type" :dictEnum="[{lable:'类型1',value:1}]" />
|
||||
</el-form-item>
|
||||
<el-form-item label="指令等级">
|
||||
<MOSTY.Select width="100%" v-model="listQuery.type" :dictEnum="[{lable:'等级1',value:1}]" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<el-form-item label="指令发起人">
|
||||
<el-input v-model="listQuery.initiator" placeholder="请输入发起人"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="发起部门">
|
||||
<el-input v-model="listQuery.department" placeholder="请输入发起部门"/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="联系人">
|
||||
<el-input v-model="listQuery.contact" placeholder="请输入联系人"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系电话">
|
||||
<el-input v-model="listQuery.phone" placeholder="请输入联系电话"/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<el-form-item label="关联线索" class="full-width">
|
||||
<div class="flex" style="width:100%;">
|
||||
<el-input v-model="listQuery.relatedClues" placeholder="请输入关联线索"/>
|
||||
<span type="primary" size="small" class="add-btn">+</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="主送单位" class="full-width">
|
||||
<div class="flex" style="width:100%;">
|
||||
<el-input v-model="listQuery.mainUnit" placeholder="请输入主送单位"/>
|
||||
<span type="primary" size="small" class="add-btn">+</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="抄送单位" class="full-width">
|
||||
<div class="flex" style="width:100%;">
|
||||
<el-input v-model="listQuery.ccUnit" placeholder="请输入抄送单位"/>
|
||||
<span type="primary" size="small" class="add-btn">+</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<el-form-item label="指令内容" class="full-width">
|
||||
<el-input type="textarea" v-model="listQuery.content" :rows="6" placeholder="请输入指令内容"/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<el-form-item label="附件" class="full-width">
|
||||
<!-- Upload选择 -->
|
||||
<MOSTY.Upload width="100%" v-model="listQuery.tpdz" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
import { ref, reactive } from 'vue';
|
||||
|
||||
const dialogForm = ref(false);
|
||||
const listQuery = ref({
|
||||
title: '',
|
||||
generateNumber: true,
|
||||
type: '',
|
||||
level: '',
|
||||
initiator: '',
|
||||
department: '',
|
||||
contact: '',
|
||||
phone: '',
|
||||
relatedClues: '',
|
||||
mainUnit: '',
|
||||
ccUnit: '',
|
||||
content: '',
|
||||
attachments: []
|
||||
});
|
||||
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
dialogForm.value = true;
|
||||
// 根据type和row初始化表单数据
|
||||
};
|
||||
|
||||
const close = () => {
|
||||
dialogForm.value = false;
|
||||
};
|
||||
|
||||
defineExpose({init})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.dialog {
|
||||
padding: 20px;
|
||||
|
||||
.head_box {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.cntinfo{
|
||||
height: calc(100% - 70px);
|
||||
overflow: hidden;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.form-row {
|
||||
display: flex;
|
||||
|
||||
.el-form-item {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
.full-width {
|
||||
width: 100%;
|
||||
margin-right: 0 !important;
|
||||
|
||||
.el-input {
|
||||
width: calc(100% - 40px);
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.add-btn {
|
||||
display: inline-block;
|
||||
background: #0072ff;
|
||||
color: #fff;
|
||||
font-size: 36px;
|
||||
text-align: center;
|
||||
width: 60px;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
@ -0,0 +1,178 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="titleBox">
|
||||
<PageTitle title="指令信息">
|
||||
<el-button type="primary" @click="addEdit('add', '')">
|
||||
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
<el-button type="danger" @click="addEdit('add', '')">
|
||||
<el-icon style="vertical-align: middle"><Dete /></el-icon>
|
||||
<span style="vertical-align: middle">批量删除</span>
|
||||
</el-button>
|
||||
<el-button >
|
||||
<el-icon style="vertical-align: middle"><Setting /></el-icon>
|
||||
<span style="vertical-align: middle">批量处置</span>
|
||||
</el-button>
|
||||
</PageTitle>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"/>
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable
|
||||
:tableData="pageData.tableData"
|
||||
:tableColumn="pageData.tableColumn"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount"
|
||||
:tableConfiger="pageData.tableConfiger"
|
||||
:controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData">
|
||||
<!-- 事故照片 -->
|
||||
<template #accidentPhoto="{ row }">
|
||||
<el-image
|
||||
style="width: 50px; height: 50px"
|
||||
:src="row.accidentPhoto"
|
||||
:preview-src-list="[row.accidentPhoto]">
|
||||
</el-image>
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link size="small" type="primary" @click="addEdit('detail', row)">查看</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('edit', row)">编辑</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteRow(row)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages
|
||||
@changeNo="changeNo"
|
||||
@changeSize="changeSize"
|
||||
:tableHeight="pageData.tableHeight"
|
||||
:pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"
|
||||
></Pages>
|
||||
</div>
|
||||
<!-- 详情 -->
|
||||
<DetailForm ref="detailDiloag" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Search from "@/components/aboutTable/Search.vue";
|
||||
import DetailForm from "./components/detailForm.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const detailDiloag = ref();
|
||||
const searchBox = ref(); //搜索框
|
||||
|
||||
const searchConfiger = ref([
|
||||
{ label: "指令标题", prop: 'instructionTitle', placeholder: "请输入指令标题", showType: "input" },
|
||||
{ label: "督办对象", prop: 'supervisoryObject', placeholder: "请输入督办对象", showType: "input" },
|
||||
{ label: "指令类型", prop: 'instructionType', placeholder: "请选择指令类型", showType: "input" },
|
||||
{ label: "指令等级", prop: 'instructionLevel', placeholder: "请选择指令等级", showType: "input" },
|
||||
{ label: "指令来源", prop: 'instructionSource', placeholder: "请输入指令来源", showType: "input" },
|
||||
{ label: "处置状态", prop: 'processingStatus', placeholder: "请选择处置状态", showType: "input" },
|
||||
{ label: "数据来源", prop: 'dataSource', placeholder: "请输入数据来源", showType: "input" },
|
||||
{ label: "反馈截止时间", prop: 'feedbackDeadline', placeholder: "请选择反馈截止时间", showType: "input" },
|
||||
{ label: "指令流向", prop: 'instructionFlow', placeholder: "请输入指令流向", showType: "input" },
|
||||
]);
|
||||
|
||||
const queryFrom = ref({});
|
||||
const pageData = reactive({
|
||||
tableData: [
|
||||
{id: 1, instructionFlow: '本级发起', instructionTitle: '关于XX的指令', urgencyLevel: '紧急', informationSource: '信息来源', workingStatus: '工作中', supervisoryObject: '督办对象', instructionLevel: '一级', feedbackPosition: '反馈位置', feedbackDeadline: '2024-01-20', receivedNumber: 5, unreceivedNumber: 2, processingStatus: '已处理', status: '已完成'},
|
||||
],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 180,
|
||||
tableColumn: [
|
||||
{ label: '指令流向', prop: 'instructionFlow' },
|
||||
{ label: '指令标题', prop: 'instructionTitle' },
|
||||
{ label: '紧急程度', prop: 'urgencyLevel', width: 100 },
|
||||
{ label: '信息来源', prop: 'informationSource' },
|
||||
{ label: '工作状态', prop: 'workingStatus', width: 100 },
|
||||
{ label: '督办对象', prop: 'supervisoryObject' },
|
||||
{ label: '指令等级', prop: 'instructionLevel', width: 100 },
|
||||
{ label: '反馈位置', prop: 'feedbackPosition' },
|
||||
{ label: '反馈截止时间', prop: 'feedbackDeadline', width: 120 },
|
||||
{ label: '发送人数', prop: 'receivedNumber', width: 100 },
|
||||
{ label: '未接收人数', prop: 'unreceivedNumber', width: 100 },
|
||||
{ label: '处置状态', prop: 'processingStatus', width: 100 },
|
||||
{ label: '状态', prop: 'status', width: 100 },
|
||||
]
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
getList()
|
||||
tabHeightFn();
|
||||
});
|
||||
|
||||
//选择类型
|
||||
const handleType = (val) => {
|
||||
pageData.keyCount++;
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
// 搜索
|
||||
const onSearch = (val) =>{
|
||||
queryFrom.value = {...val}
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
|
||||
const changeNo = (val) =>{
|
||||
pageData.pageConfiger.pageNum = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) =>{
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
|
||||
// 获取列表
|
||||
const getList = (val) =>{
|
||||
// pageData.tableConfiger.loading = true;
|
||||
let data = { ...pageData.pageConfiger, ...queryFrom.value };
|
||||
// let url = '/mosty-lzcj/tbDwMbkf/queryList';
|
||||
// qcckPost(data,url).then(res=>{
|
||||
// pageData.tableData = res.records || [];
|
||||
// pageData.total = res.total;
|
||||
// pageData.tableConfiger.loading = false;
|
||||
// }).catch(()=>{ pageData.tableConfiger.loading = false; })
|
||||
}
|
||||
|
||||
// 详情
|
||||
const addEdit = (type, row) => {
|
||||
detailDiloag.value.init(type, row);
|
||||
};
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,259 @@
|
||||
<template>
|
||||
<div class="statistical-analysis">
|
||||
<!-- 左侧树形菜单 -->
|
||||
<div class="left-menu">
|
||||
<!-- 这个部分用的是组件-后期替换 -->
|
||||
<el-tree
|
||||
:data="treeData"
|
||||
:props="defaultProps"
|
||||
@node-click="handleNodeClick"
|
||||
default-expand-all
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- 右侧内容区 -->
|
||||
<div class="right-content">
|
||||
<!-- 顶部筛选 -->
|
||||
<div class="filter-section">
|
||||
<el-radio-group v-model="radio">
|
||||
<el-radio :label="it.value" v-for="it in timeList" :key="it.value">{{
|
||||
it.label
|
||||
}}</el-radio>
|
||||
</el-radio-group>
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
@change="handleDateChange"
|
||||
/>
|
||||
<el-button type="primary" @click="handleExport">查询</el-button>
|
||||
<el-button type="primary" @click="handleExport">重置</el-button>
|
||||
</div>
|
||||
|
||||
<!-- 统计图表区域 -->
|
||||
<div class="charts-container">
|
||||
<div class="chart-item">
|
||||
<div class="chart-title">
|
||||
<span>线索采集统计</span>
|
||||
<el-button type="primary">导出统计表</el-button>
|
||||
</div>
|
||||
<div class="chart">
|
||||
<PieEcharts
|
||||
echartsId="pieChart"
|
||||
color="#333"
|
||||
:data="obj.cjList"
|
||||
></PieEcharts>
|
||||
</div>
|
||||
</div>
|
||||
<div class="chart-item">
|
||||
<div class="chart-title">
|
||||
<span>指令统计</span>
|
||||
<el-button type="primary">导出统计表</el-button>
|
||||
</div>
|
||||
<div class="chart">
|
||||
<DbarEcharts
|
||||
echartsId="bar3DChart"
|
||||
:data="obj.zlList"
|
||||
></DbarEcharts>
|
||||
</div>
|
||||
</div>
|
||||
<div class="chart-item">
|
||||
<div class="chart-title">
|
||||
<span>线索类型统计</span>
|
||||
<el-button type="primary">导出统计表</el-button>
|
||||
</div>
|
||||
<ul class="chart">
|
||||
<li v-for="(it, idx) in obj.jjList" :key="idx" class="mb6">
|
||||
<div style="color: #333">{{ it.label }}</div>
|
||||
<el-progress
|
||||
:text-inside="true"
|
||||
:stroke-width="20"
|
||||
:percentage="50"
|
||||
status="exception"
|
||||
>
|
||||
<span
|
||||
><span style="color: #e37233">{{ it.value }}</span> 个</span
|
||||
>
|
||||
</el-progress>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="chart-item">
|
||||
<div class="chart-title">
|
||||
<span>线索类型统计</span>
|
||||
<el-button type="primary">导出统计表</el-button>
|
||||
</div>
|
||||
<lineEcharts
|
||||
color="#333"
|
||||
echartsId="areaChart"
|
||||
:data="obj.bkgzList"
|
||||
></lineEcharts>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import lineEcharts from "@/views/home/echarts/lineEcharts.vue";
|
||||
import PieEcharts from "@/views/home/echarts/pieEcharts.vue";
|
||||
import DbarEcharts from "@/views/home/echarts/3DbarEcharts.vue";
|
||||
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
|
||||
import * as echarts from "echarts";
|
||||
const radio = ref("日");
|
||||
const timeList = ref([
|
||||
{ label: "日", value: "0" },
|
||||
{ label: "月", value: "1" },
|
||||
{ label: "季", value: "2" },
|
||||
{ label: "年", value: "3" }
|
||||
]);
|
||||
const obj = reactive({
|
||||
listQuery: {},
|
||||
cjList: [
|
||||
{ label: "采纳数", value: 18 },
|
||||
{ label: "编刊数", value: 20 },
|
||||
{ label: "退回数", value: 50 },
|
||||
{ label: "合并数", value: 40 },
|
||||
{ label: "其他", value: 30 }
|
||||
],
|
||||
// 布控工作统计
|
||||
bkgzList: [
|
||||
{ label: "发起总数", value: 10 },
|
||||
{ label: "审核总数", value: 20 },
|
||||
{ label: "审批总数", value: 50 },
|
||||
{ label: "处置总数", value: 40 },
|
||||
{ label: "其他", value: 30 }
|
||||
],
|
||||
jjList: [
|
||||
{ label: "涉稳", value: 10 },
|
||||
{ label: "涉毒", value: 20 },
|
||||
{ label: "行政", value: 50 },
|
||||
{ label: "群体", value: 40 },
|
||||
{ label: "灾害", value: 40 }
|
||||
],
|
||||
zlList: {
|
||||
list: [
|
||||
{ label: "下发数", val: 50 },
|
||||
{ label: "未签收", val: 40 },
|
||||
{ label: "已签收", val: 10 },
|
||||
{ label: "超时签收", val: 30 },
|
||||
{ label: "未反馈", val: 40 },
|
||||
{ label: "已反馈", val: 40 }
|
||||
],
|
||||
topColor:'#1bd6c2',
|
||||
colors: ["#28EEBF","#0DBAC5"],
|
||||
}
|
||||
});
|
||||
|
||||
// 树形菜单数据
|
||||
const treeData = ref([
|
||||
{
|
||||
label: "林芝市公安局(200)",
|
||||
children: [
|
||||
{ label: "工布江达县公安局(100)" },
|
||||
{ label: "工布江达城区派出所(10)" },
|
||||
{ label: "某某某派出所(10)" },
|
||||
{ label: "某某某公安局(100)" }
|
||||
]
|
||||
}
|
||||
]);
|
||||
|
||||
const defaultProps = {
|
||||
children: "children",
|
||||
label: "label"
|
||||
};
|
||||
|
||||
// 日期范围
|
||||
const dateRange = ref([]);
|
||||
|
||||
// 事件处理函数
|
||||
const handleNodeClick = (data) => {
|
||||
console.log(data);
|
||||
};
|
||||
|
||||
const handleDateChange = () => {
|
||||
// 处理日期变化
|
||||
};
|
||||
|
||||
const handleExport = () => {
|
||||
// 处理导出
|
||||
};
|
||||
|
||||
onMounted(() => {});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.statistical-analysis {
|
||||
display: flex;
|
||||
height: 100%;
|
||||
|
||||
.left-menu {
|
||||
width: 280px;
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
border-radius: 4px;
|
||||
background-color: #fff;
|
||||
border-right: 1px solid #e8e8e8;
|
||||
}
|
||||
|
||||
.right-content {
|
||||
flex: 1;
|
||||
padding: 20px;
|
||||
.filter-section {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
margin-bottom: 20px;
|
||||
background: #fff;
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.charts-container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
height: calc(100% - 50px);
|
||||
.chart-item {
|
||||
width: 49.5%;
|
||||
height: calc(50% - 5px);
|
||||
background-color: #fff;
|
||||
border-radius: 8px;
|
||||
padding: 20px;
|
||||
.chart-title {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 16px;
|
||||
color: #333;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
.chart {
|
||||
height: calc(100% - 40px);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::v-deep .el-radio {
|
||||
color: #333;
|
||||
}
|
||||
::v-deep .el-radio__inner {
|
||||
border-radius: 4px;
|
||||
}
|
||||
::v-deep .el-progress-bar__innerText {
|
||||
color: #333;
|
||||
margin: 0 -40px;
|
||||
}
|
||||
::v-deep .el-progress.is-exception .el-progress-bar__inner {
|
||||
background: linear-gradient(90deg, #fe5d00 0%, #face35 100%);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user