This commit is contained in:
2025-04-16 23:06:01 +08:00
parent 16b8bc2467
commit 1ccecb7258
23 changed files with 22670 additions and 390 deletions

View File

@ -0,0 +1,222 @@
<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="130"
inline
label-position="right"
>
<el-divider content-position="left">基础信息</el-divider>
<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.sszt" placeholder="请输入所属专题" />
</el-form-item>
<el-form-item label="群体名称">
<el-input v-model="listQuery.qtmc" placeholder="请输入群体名称" />
</el-form-item>
<el-form-item label="群体类型">
<el-input v-model="listQuery.qtlx" placeholder="请输入群体类型" />
</el-form-item>
<el-form-item label="上报单位">
<el-input v-model="listQuery.sbdw" placeholder="请输入上报单位" />
</el-form-item>
<el-form-item label="上报时间">
<el-date-picker
style="width:100%"
v-model="listQuery.sbsj"
type="datetime"
placeholder="请选择上报时间"
/>
</el-form-item>
<el-form-item label="线索内容" style="width: 100%">
<el-input
v-model="listQuery.xsnr"
type="textarea"
style="width: 100%"
:rows="3"
placeholder="请输入线索内容"
/>
</el-form-item>
<el-divider content-position="left">标签信息</el-divider>
<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.xsbqdl"
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.xsbqxl"
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.xsly" placeholder="请输入线索来源" />
</el-form-item>
<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.xsfxdj"
placeholder="请选择是否设计外地"
>
<el-option label="是" value="1" />
<el-option label="否" value="0" />
</el-select>
</el-form-item>
<el-form-item label="指向地点">
<el-input v-model="listQuery.zxdd" placeholder="请输入指向地点" />
</el-form-item>
<el-form-item label="具体部位">
<el-input v-model="listQuery.jtbw" placeholder="请输入具体部位" />
</el-form-item>
<el-form-item label="指向时间类型">
<el-input v-model="listQuery.sjlx" placeholder="请输入指向时间类型" />
</el-form-item>
<el-form-item label="指向时间段">
<el-date-picker
v-model="listQuery.sjd"
type="daterange"
placeholder="请选择指向时间段"
/>
</el-form-item>
<el-divider content-position="left">涉及人员</el-divider>
<el-form-item label="姓名">
<el-input v-model="listQuery.xm" placeholder="请输入姓名" />
</el-form-item>
<el-form-item label="身份证号">
<el-input v-model="listQuery.sfzh" placeholder="请输入身份证号" />
</el-form-item>
<el-form-item label="联系方式">
<el-input v-model="listQuery.lxfs" placeholder="请输入联系方式" />
</el-form-item>
<el-form-item label="住址">
<el-input v-model="listQuery.zz" placeholder="请输入住址" />
</el-form-item>
<el-divider content-position="left">审批信息</el-divider>
<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>
<el-form-item label="申请原因" style="width: 100%">
<el-input
style="width: 100%"
v-model="listQuery.sqyy"
type="textarea"
:rows="3"
placeholder="请输入申请原因"
/>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref } from "vue";
const dialogForm = ref(false);
const listQuery = ref({
xsmc: "", // 线索名称
xsly: "", // 线索来源
xsbh: "", // 线索编号
sbsj: "", // 上报时间
xslx: "", // 线索类型
xszt: "", // 线索状态
xsnr: "", // 线索内容
xm: "", // 姓名
sfzh: "", // 身份证号
lxfs: "", // 联系方式
zz: "", // 住址
sqr: "", // 申请人
sqsj: "", // 申请时间
sqyy: "" // 申请原因
});
// 初始化数据
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;
}
}
</style>

View File

@ -0,0 +1,469 @@
<template>
<div class="intelligence-management">
<!-- 左边 -->
<div class="left-panel">
<div class="pl80">
<el-tabs
v-model="activeName"
class="demo-tabs"
@tab-click="handleClick"
>
<el-tab-pane label="线索库" name="one"></el-tab-pane>
<el-tab-pane label="人员库" name="two"></el-tab-pane>
</el-tabs>
</div>
<div class="search-box">
<el-input
v-model="searchQuery"
placeholder="请输入线索标题"
suffix-icon="Search"
/>
</div>
<div class="flex mt10 just-center">
<el-button size="small" type="primary">上报线索</el-button>
<el-button size="small" type="primary" @click="addEdit('add',null)">新增线索</el-button>
<el-button size="small" type="primary">查询</el-button>
<el-button size="small">重置</el-button>
</div>
<div class="flex flex-warp">
<span
style="color: #0386fb"
class="f12 ml10 mt4"
v-for="(it, idex) in list.leftCoutn"
:key="idex"
>{{ it.label }}({{ it.value }})</span
>
</div>
<div class="person-list">
<div v-for="(item, index) in personList" :key="index" class="clue-item">
<div class="clue-tag" v-if="item.tag">{{ item.tag }}</div>
<span class="clue-status">处置</span>
<div class="clue-content flex align-center">
<img class="mr10" src="@/assets/images/icon100.png" alt="">
<div class="clue-info">
<div class="clue-header">*****线索</div>
<div>编号{{ item.number }}</div>
<div>来源{{ item.source }}</div>
<div>涉及人员数量{{ item.personCount }}</div>
<div>指向地点{{ item.location }}</div>
</div>
</div>
</div>
</div>
</div>
<!-- 右边 -->
<div class="right-panel">
<div class="flex just-between align-center">
<h2 class="title" style="color: #333">xxxx线索详情</h2>
<el-button type="primary" size="small">收藏</el-button>
</div>
<div style="width: 100%">
<el-descriptions :column="2" border>
<el-descriptions-item :width="260" label="线索标题"
>*****线索</el-descriptions-item
>
<el-descriptions-item label="线索编号"
>123213113212131312</el-descriptions-item
>
<el-descriptions-item label="线索类型"
>*****线索</el-descriptions-item
>
<el-descriptions-item label="线索来源"
>123213113212131312</el-descriptions-item
>
<el-descriptions-item label="开始时间"
>2020.04.12</el-descriptions-item
>
<el-descriptions-item label="截止时间"
>2020.04.19</el-descriptions-item
>
<el-descriptions-item label="上报单位"
>*****线索</el-descriptions-item
>
<el-descriptions-item label="指向地点"
>123213113212131312</el-descriptions-item
>
<el-descriptions-item label="上报时间"
>*****线索</el-descriptions-item
>
<el-descriptions-item label="处置状态"
>123213113212131312</el-descriptions-item
>
<el-descriptions-item label="群体状态"
>2020.04.12</el-descriptions-item
>
<el-descriptions-item label="群体名称"
>2020.04.19</el-descriptions-item
>
<el-descriptions-item label="线索标签大类"
>*****线索</el-descriptions-item
>
<el-descriptions-item label="线索标签细类"
>123213113212131312</el-descriptions-item
>
<el-descriptions-item label="所属专题"
>*****线索</el-descriptions-item
>
<el-descriptions-item label="市内外"
>123213113212131312</el-descriptions-item
>
<el-descriptions-item label="是否涉及外地"
>2020.04.12</el-descriptions-item
>
<el-descriptions-item label="具体部位"
>2020.04.19</el-descriptions-item
>
<el-descriptions-item label="指向时间类型"
>*****线索</el-descriptions-item
>
<el-descriptions-item label="指向时间备注"
>123213113212131312</el-descriptions-item
>
<el-descriptions-item label="表现形式"
>*****线索</el-descriptions-item
>
<el-descriptions-item label="涉事类型"
>123213113212131312</el-descriptions-item
>
<el-descriptions-item label="获取手段"
>2020.04.12</el-descriptions-item
>
<el-descriptions-item label="线索备注"
>2020.04.19</el-descriptions-item
>
<el-descriptions-item label="线索内容" :span="2"
>张三身份证号:1232025在林某...</el-descriptions-item
>
</el-descriptions>
<el-descriptions :column="5" border>
<el-descriptions-item :width="260" label="附件"
>3.xls</el-descriptions-item
>
<el-descriptions-item label="涉及地">林芝</el-descriptions-item>
<el-descriptions-item label="申请人">林芝</el-descriptions-item>
<el-descriptions-item label="审核人">林芝</el-descriptions-item>
<el-descriptions-item label="审批人">林芝</el-descriptions-item>
</el-descriptions>
</div>
<div class="flex mt10 just-center">
<el-button size="large" type="primary">核查单</el-button>
<el-button size="large" type="primary">验收</el-button>
</div>
<div class="flex align-center">
<h2 class="title" style="color: #333">******线索关联人员信息</h2>
<span
style="color: #0386fb"
class="f12 ml10"
v-for="(it, idex) in list.countList"
:key="idex"
>{{ it.label }}({{ it.value }})</span
>
</div>
<div style="width: 100%">
<Search
:searchArr="searchConfiger"
@submit="onSearch"
:key="pageData.keyCount"
>
<el-button type="primary">指派</el-button>
<el-button type="primary">导出</el-button>
</Search>
<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-button size="small">查看档案</el-button>
<el-button size="small">编辑</el-button>
<el-button size="small" type="danger">删除</el-button>
</template>
</MyTable>
</div>
<div class="flex mt10 just-center">
<el-button size="large" type="primary">保存</el-button>
<el-button size="large" type="primary">采纳</el-button>
<el-button size="large" type="primary">处置</el-button>
<el-button size="large">取消</el-button>
</div>
</div>
</div>
<!-- 新增 -->
<AddForm ref="detailDiloag" ></AddForm>
</template>
<script setup>
import AddForm from "./components/addForm.vue";
import Search from "@/components/aboutTable/Search.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import { ref, reactive } from "vue";
const detailDiloag = ref();
const list = reactive({
leftCoutn: [
{ label: "总数", value: 100 },
{ label: "下发总数", value: 100 },
{ label: "已处置数", value: 10 },
{ label: "收藏", value: 100 },
{ label: "已反馈数量", value: 100 },
{ label: "未反馈数量", value: 100 },
{ label: "未处置数量", value: 100 }
],
countList: [
{ label: "全部", value: 100 },
{ label: "已稳控", value: 100 },
{ label: "处置中", value: 10 },
{ label: "非本地人", value: 100 },
{ label: "未开始", value: 100 },
{ label: "其他人", value: 100 }
]
});
const searchQuery = ref(""); // 搜索关键词
const searchConfiger = ref([
{
label: "姓名",
prop: "name",
placeholder: "请输入姓名",
showType: "input"
},
{
label: "身份证号",
prop: "sfzh",
placeholder: "请输入身份证号",
showType: "input"
}
]);
const pageData = reactive({
tableData: [
{
name: "张三",
xb: "男",
sfzh: "510154545454544454",
sjh: "12345678900",
jcbm: "xx公安局",
zt: "已稳控"
},
{
name: "张三",
xb: "男",
sfzh: "510154545454544454",
sjh: "12345678900",
jcbm: "xx公安局",
zt: "已稳控"
},
{
name: "张三",
xb: "男",
sfzh: "510154545454544454",
sjh: "12345678900",
jcbm: "xx公安局",
zt: "已稳控"
},
{
name: "张三",
xb: "男",
sfzh: "510154545454544454",
sjh: "12345678900",
jcbm: "xx公安局",
zt: "已稳控"
},
{
name: "张三",
xb: "男",
sfzh: "510154545454544454",
sjh: "12345678900",
jcbm: "xx公安局",
zt: "已稳控"
}
], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false
},
tableHeight: 300,
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 250, //操作栏宽度
tableColumn: [
{ label: "姓名", prop: "name" },
{ label: "性别", prop: "xb" },
{ label: "身份证号", prop: "sfzh" },
{ label: "手机号", prop: "sjh" },
{ label: "检查部门", prop: "jcbm" },
{ label: "状态", prop: "zt" }
]
});
// 选中的人员
const selectedPerson = ref(null);
// 搜所
const onSearch = (data) => {
console.log(data);
};
// 模拟人员列表数据
const personList = ref([
{
number: "12345854",
title: "*****线索",
source: "*****",
personCount: "涉及人员数量",
location: "指向地点",
tag: "待签收",
status: "处置"
},
{
number: "12345854",
title: "*****线索",
source: "*****",
personCount: "涉及人员数量",
location: "指向地点",
status: "处置",
tag: "待签收",
}
// 更多人员数据...
]);
// 模拟相关人员数据
const relatedPersons = ref([
{
name: "李四",
relation: "朋友",
phone: "13900139000",
status: "正常"
}
// 更多相关人员数据...
]);
// 详情
const addEdit = (type, row) => {
detailDiloag.value.init(type, row);
};
// 选择人员
const selectPerson = (person) => {
selectedPerson.value = person;
};
</script>
<style lang="scss" scoped>
.intelligence-management {
margin-top: 10px;
width: 100%;
height: 100%;
position: relative;
.left-panel {
width: 300px;
border-right: 1px solid #dcdfe6;
background-color: #fff;
display: flex;
flex-direction: column;
height: 100%;
float: left;
.search-box {
padding: 16px;
border-bottom: 1px solid #dcdfe6;
}
.person-list {
flex: 1;
overflow-y: auto;
padding: 10px;
.clue-item {
background: #f5f7fa;
border-radius: 4px;
margin-bottom: 10px;
padding: 10px;
cursor: pointer;
position: relative;
overflow: hidden;
.clue-status {
position: absolute;
top: 50%;
transform: translateY(-50%);
right: 10px;
color: #fff;
background: #409eff;
padding: 2px 8px;
border-radius: 2px;
font-size: 12px;
}
.clue-tag {
position: absolute;
top: 1px;
left: -27px;
background: #f56c6c;
color: #fff;
padding: 10px 30px;
border-radius: 2px;
font-size: 12px;
transform: rotate(-38deg);
}
.clue-header {
color: #333;
font-size: 14px;
}
.clue-info {
font-size: 12px;
color: #666;
line-height: 1.8;
}
&:hover {
background: #e6f1fc;
}
}
}
}
.right-panel {
width: calc(100% - 310px);
height: 100%;
float: left;
margin-left: 10px;
padding: 10px 20px;
box-sizing: border-box;
background: #fff;
border-radius: 4px;
overflow: hidden;
overflow-y: auto;
.title {
position: relative;
&::after {
content: "";
position: absolute;
bottom: -10px;
left: 0;
width: 78px;
height: 4px;
background: linear-gradient(
90deg,
#3596f9 0%,
rgba(53, 150, 249, 0) 100%
);
border-radius: 4px 4px 4px 4px;
}
}
}
::v-deep .el-tabs__nav-wrap::after {
background: #e9e9e9;
width: 58%;
}
}
</style>