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

20008
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -20,6 +20,7 @@
"core-js": "^3.6.5",
"echarts": "^5.3.3",
"echarts-gl": "^2.0.9",
"el-table-infinite-scroll": "^3.0.6",
"element-plus": "2.0.2",
"gifler": "^0.1.0",
"lodash": "^4.17.21",

View File

@ -160,7 +160,6 @@ header {
&::v-deep .el-textarea__inner {
height: 7.5em;
border: 1px solid #F1F4F8;
// background-color: #02163b;
}
}

View File

@ -113,41 +113,85 @@ export const publicRoutes = [
},
]
},
//
{
path: "/Pawnbroking",
name: "Pawnbroking",
meta: { title: "典当业", icon: "article" },
path: "/ResearchJudgment",
name: "ResearchJudgment",
meta: { title: "线索研判盯办系统", icon: "article" },
children: [
{
path: "/PopManagement",
name: "PopManagement",
component: () => import("@/views/backOfficeSystem/Pawnbroking/PopManagement/index"),
path: "/DatAcquisition",
name: "DatAcquisition",
component: () => import("@/views/backOfficeSystem/ResearchJudgment/DatAcquisition/index"),
meta: {
title: "典当业场所管理",
title: "情报数据采集",
icon: "article"
}
},
{
path: "/ItemInformation",
name: "ItemInformation",
component: () => import("@/views/backOfficeSystem/Pawnbroking/ItemInformation/index"),
path: "/MoralAnalysis",
name: "MoralAnalysis",
component: () => import("@/views/backOfficeSystem/ResearchJudgment/MoralAnalysis/index"),
meta: {
title: "典当物品信息管理",
title: "情报语义分析",
icon: "article"
}
},
{
path: "/BusinessInformation",
name: "BusinessInformation",
component: () => import("@/views/backOfficeSystem/Pawnbroking/BusinessInformation/index"),
path: "/IntelligenceManagement",
name: "IntelligenceManagement",
component: () => import("@/views/backOfficeSystem/ResearchJudgment/IntelligenceManagement/index"),
meta: {
title: "典当业务信息管理",
title: "情报管理",
icon: "article"
}
},
{
path: "/InformationFlows",
name: "InformationFlows",
meta: { title: "情报流转", icon: "article" },
redirect: "/InformationFlow",
children: [
{
path: "/InformationFlow",
name: "InformationFlow",
component: () => import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/InformationFlow/index"),
meta: {
title: "情报信息流转",
icon: "article"
}
},
{
path: "/InstructionInformation",
name: "InstructionInformation",
component: () => import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/InstructionInformation/index"),
meta: {
title: "指令信息",
icon: "article"
}
},
{
path: "/StatisticalAnalysis",
name: "StatisticalAnalysis",
component: () => import("@/views/backOfficeSystem/ResearchJudgment/InformationFlows/StatisticalAnalysis/index"),
meta: {
title: "情报统计分析",
icon: "article"
}
},
]
},
{
path: "/RecordsOperations",
name: "RecordsOperations",
component: () => import("@/views/backOfficeSystem/ResearchJudgment/RecordsOperations/index"),
meta: {
title: "操作记录",
icon: "article"
}
},
],
},
//
{
path: "/ScrapMetal",
name: "ScrapMetal",

View File

@ -1,112 +0,0 @@
<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="230" label-position="left">
<div class="form-row">
<el-form-item label="业务流水号码">
<el-input v-model="listQuery.ywlsh" placeholder="01131213"/>
</el-form-item>
<el-form-item label="场所名称">
<el-input v-model="listQuery.csmc" placeholder="老于典当行"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="典当人姓名">
<el-input v-model="listQuery.ddrxm" placeholder="张三"/>
</el-form-item>
<el-form-item label="典当人证件号码">
<el-input v-model="listQuery.ddrzjhm" placeholder="511111111111111111"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="典当人联系电话">
<el-input v-model="listQuery.ddrlxdh" placeholder="15222222222"/>
</el-form-item>
<el-form-item label="典当日期">
<el-input v-model="listQuery.ddrq" placeholder="2025/1/20 10:00:00"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="预赎日期">
<el-input v-model="listQuery.ysrq" placeholder="2025/2/20 10:00:00"/>
</el-form-item>
<el-form-item label="逾期时间数量">
<el-input v-model="listQuery.yqsjsl" placeholder=""/>
</el-form-item>
</div>
</el-form>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue';
const dialogForm = ref(false);
const listQuery = ref({});
//
const init = (type, row) => {
dialogForm.value = true;
// typerow
};
const close = () => {
dialogForm.value = false;
};
defineExpose({init})
</script>
<style lang="scss" scoped>
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.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;
}
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -1,157 +0,0 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="典当业务信息管理"/>
</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-button size="small" @click="addEdit('detail', row)">详情</el-button>
</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: 'placeName', placeholder: "请输入场所名称", showType: "input" },
{ label: "典当人姓名", prop: 'pawner', placeholder: "请输入典当人姓名", showType: "input" },
{ label: "典当人身份证号", prop: 'pawnerIdCard', placeholder: "请输入典当人身份证号", showType: "input" },
{ label: "典当人联系电话", prop: 'pawnerPhone', placeholder: "请输入典当人联系电话", showType: "input" },
{ label: "所属辖区", prop: 'area', showType: "cascader", options: [], props: { multiple: false } },
{ label: "典当日期", prop: 'pawnDate', showType: "daterange" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{id: 1, placeName: '老王典当', area: '巴宜区药局路派出所', pawner: '张三', pawnerIdCard: '511111111111111111', pawnerPhone: '15222222222', pawnDate: '2025/1/20 10:00:00'},
{id: 2, placeName: '老王典当', area: '巴宜区药局路派出所', pawner: '张三', pawnerIdCard: '511111111111111111', pawnerPhone: '15222222222', pawnDate: '2025/1/20 10:00:00'},
{id: 3, placeName: '老王典当', area: '巴宜区药局路派出所', pawner: '张三', pawnerIdCard: '511111111111111111', pawnerPhone: '15222222222', pawnDate: '2025/1/20 10:00:00'},
{id: 4, placeName: '老王典当', area: '巴宜区药局路派出所', pawner: '张三', pawnerIdCard: '511111111111111111', pawnerPhone: '15222222222', pawnDate: '2025/1/20 10:00:00'},
{id: 5, placeName: '老王典当', area: '巴宜区药局路派出所', pawner: '张三', pawnerIdCard: '511111111111111111', pawnerPhone: '15222222222', pawnDate: '2025/1/20 10:00:00'},
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 120,
tableColumn: [
{ label: "场所名称", prop: "placeName" },
{ label: "所属辖区", prop: "area" },
{ label: "典当人姓名", prop: "pawner" },
{ label: "典当人身份证号", prop: "pawnerIdCard" },
{ label: "典当人联系电话", prop: "pawnerPhone" },
{ label: "典当日期", prop: "pawnDate" },
]
});
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>

View File

@ -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>

View File

@ -1,7 +1,16 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="典当业场所管理"/>
<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">
@ -33,11 +42,14 @@
:preview-src-list="[row.accidentPhoto]">
</el-image>
</template>
<!-- 附件 -->
<template #attachment="{ row }">
<el-button type="primary" link @click="viewAttachment(row)">查看</el-button>
</template>
<!-- 操作 -->
<template #controls="{ row }">
<el-button size="small" @click="addEdit('detail', row)">详情</el-button>
<el-button size="small">从业人员</el-button>
<el-button size="small">转辖区</el-button>
<el-link type="primary" link @click="addEdit('detail', row)">详情</el-link>
<el-link type="primary" link @click="deleteClue(row)">删除</el-link>
</template>
</MyTable>
<Pages
@ -60,7 +72,7 @@ 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 DetailForm from "./components/addEditForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance();
@ -68,29 +80,33 @@ const detailDiloag = ref();
const searchBox = ref(); //
const searchConfiger = ref([
{ label: "场所名称", prop: 'placeName', placeholder: "请输入场所名称", showType: "input" },
{ label: "单位电话", prop: 'unitPhone', placeholder: "请输入单位电话", showType: "input" },
{ label: "法人姓名", prop: 'legalPerson', placeholder: "请输入法人姓名", showType: "input" },
{ label: "法人证件号码", prop: 'legalIdCard', placeholder: "请输入法人证件号码", showType: "input" },
{ label: "法人联系电话", prop: 'legalPhone', placeholder: "请输入法人联系电话", showType: "input" },
{ label: "经营状况", prop: 'operationStatus', placeholder: "请选择经营状况", showType: "select", options: [{label: '在业', value: '在业'}] },
{ label: "所属辖区", prop: 'area', placeholder: "请选择所属辖区", showType: "cascader" },
{ label: "面积大小", prop: 'mj', placeholder: "请输入面积范围", showType: "defaultSlot" },
{ label: "线索名称", prop: 'clueName', placeholder: "请输入线索名称", showType: "input" },
{ label: "语义关键字", prop: 'semanticKeyword', placeholder: "请输入语义关键字", showType: "input" },
{ label: "线索类型", prop: 'clueType', placeholder: "请选择线索类型", showType: "select", options: [] },
{ label: "线索来源", prop: 'clueSource', placeholder: "请选择线索来源", showType: "select", options: [] },
{ label: "开始时间", prop: 'startTime', placeholder: "请选择开始时间", showType: "datetime" },
{ label: "结束时间", prop: 'endTime', placeholder: "请选择结束时间", showType: "datetime" },
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{id: 1, placeName: '老王典当', operationStatus: '在业', area: '巴宜区历保派出所', legalPerson: '张三四五六', legalIdCard: '511222222222222'},
{id: 2, placeName: '老王典当', operationStatus: '在业', area: '巴宜区历保派出所', legalPerson: '张三四五六', legalIdCard: '511222222222222'},
{id: 3, placeName: '老王典当', operationStatus: '在业', area: '巴宜区历保派出所', legalPerson: '张三四五六', legalIdCard: '511222222222222'},
{id: 4, placeName: '老王典当', operationStatus: '在业', area: '巴宜区历保派出所', legalPerson: '张三四五六', legalIdCard: '511222222222222'},
{id: 5, placeName: '老王典当', operationStatus: '在业', area: '巴宜区历保派出所', legalPerson: '张三四五六', legalIdCard: '511222222222222'},
{
clueNo:'1001',
clueName:'疑似人员聚集',
clueType:'人员聚集',
clueSource:'群众举报',
startTime:'2024-01-01 08:00:00',
endTime:'2024-01-01 18:00:00',
targetLocation:'某街道',
clueContent:'发现多名可疑人员在该区域频繁出入,疑似从事非法活动。',
attachment:'report.pdf'
}
],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
showSelectType: "checkbox",
loading: false
},
total: 0,
@ -98,13 +114,17 @@ const pageData = reactive({
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 280,
controlsWidth: 120,
tableColumn: [
{ label: "场所名称", prop: "placeName" },
{ label: "经营状态", prop: "operationStatus" },
{ label: "所属辖区", prop: "area" },
{ label: "法人姓名", prop: "legalPerson" },
{ label: "法人证件号码", prop: "legalIdCard" },
{ label: "线索编号", prop: "clueNo" },
{ label: "线索名称", prop: "clueName" },
{ label: "线索类型", prop: "clueType" },
{ label: "线索来源", prop: "clueSource" },
{ label: "开始时间", prop: "startTime" ,showOverflowTooltip: true},
{ label: "结束时间", prop: "endTime" ,showOverflowTooltip: true},
{ label: "指向地点", prop: "targetLocation" ,showOverflowTooltip: true},
{ label: "线索内容", prop: "clueContent",showOverflowTooltip: true },
{ label: "附件", prop: "attachment", slot: true },
]
});

View File

@ -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>

View File

@ -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: 线
};

View File

@ -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;
// typerow
};
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>

View File

@ -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>

View File

@ -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>

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;
// typerow
};
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>

View File

@ -1,35 +1,28 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">典当业场所管理详</span>
<span class="title">报语义分析{{ title }}</span>
<div>
<el-button type="primary" v-if="title != '详情'" size="small" :loading="loading" @click="submit">保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="cntinfo">
<el-form :model="listQuery" :label-width="230" label-position="left">
<el-form :model="listQuery" ref="elform" :label-width="120" label-position="right">
<div class="form-row">
<el-form-item label="业务流水号码">
<el-input v-model="listQuery.ywlsh" placeholder="01131213"/>
<el-form-item label="语义名称">
<el-input v-model="listQuery.yymc" placeholder="请输入语义名称"/>
</el-form-item>
<el-form-item label="登记人姓名">
<el-input v-model="listQuery.djrxm" placeholder="张三"/>
<el-form-item label="要素类型">
<el-input v-model="listQuery.ddwplb" placeholder="请输入要素类型"/>
</el-form-item>
<el-form-item label="要素名称">
<el-input v-model="listQuery.ysmc" placeholder="请输入要素名称"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="时间">
<el-input v-model="listQuery.sgfxsj" placeholder="2025/1/20 10:00:00"/>
</el-form-item>
</div>
<div class="form-row">
<el-form-item label="照片" >
<div class="image-group">
<div class="image-item" v-for="(item, index) in listQuery.plateImages" :key="index">
<el-image :src="item.img" fit="cover"></el-image>
</div>
</div>
<el-form-item label="要素描述">
<el-input v-model="listQuery.ysms" type="textarea" rows="3" placeholder="要素描述"/>
</el-form-item>
</div>
</el-form>
@ -39,7 +32,7 @@
<script setup>
import { ref, reactive } from 'vue';
const elform = ref();
const dialogForm = ref(false);
const listQuery = ref({
plateImages: [
@ -48,13 +41,36 @@ const listQuery = ref({
{img:require('@/assets/images/person.png')},
]
});
const title = ref('');
//
const init = (type, row) => {
dialogForm.value = true;
title.value = '新增'
if(row){
title.value = type == 'edit' ? '编辑' :'详情';
}
// typerow
};
//
const submit = ()=>{
elform.value.validate((valid) => {
if (!valid) return false;
// loading.value = true;
let params = { ...listQuery.value}
let url = title.value == '新增' ? '/mosty-lzcj/tbDwYy/insert' :'/mosty-lzcj/tbDwYy/update'
// qcckPost(params, url).then((res) => {
// proxy.$message({ type: "success", message: title.value+''});
// close()
// emit("updateDate",modelLx.value);
// }).catch(()=>{
// loading.value = false;
// });
});
}
const close = () => {
dialogForm.value = false;
};
@ -66,14 +82,6 @@ defineExpose({init})
.dialog {
padding: 20px;
:deep(.el-form-item__label) {
background-color: #F7FAFB;
padding: 0px 8px;
color: #000;
font-weight: 500;
border: 1px solid #E3E7ED;
}
.head_box {
display: flex;
justify-content: space-between;
@ -111,14 +119,6 @@ defineExpose({init})
}
}
::v-deep .el-input__inner{
height: 36px !important;
line-height: 36px !important;
border-radius: 0;
color: #777575;
}
}
.el-form-item--default{
margin-bottom: 0px;
}
</style>

View File

@ -0,0 +1,173 @@
<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>
<span style="vertical-align: middle">导出</span>
</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount"></Search>
</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 type="primary" @click="addEdit('edit', row)">编辑</el-link>
<el-link type="primary" @click="addEdit('edit', row)">编辑</el-link>
<el-link type="danger" @click="delDictItem([row.id])">删除</el-link>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 编辑详情 -->
<EditAddForm ref="detailDiloag" @updateDate="getList" />
</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 EditAddForm from "./components/editAddForm.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: 'yymc', placeholder: "请输入语义名称", showType: "input" },
{ label: "要素类型", prop: 'yslx', placeholder: "请选择要素类型", showType: "select" },
{ label: "要素名称", prop: 'ysmc', placeholder: "请输入要素名称", showType: "input" }
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [
{
id: 1,
xh: 1,
yymc: "XX公司",
yslx: "实体识别",
ysmc: "组织",
ysms: "林芝某公司",
bz: ""
},
{
id: 2,
xh: 2,
yymc: "林芝工布公园",
yslx: "实体识别",
ysmc: "地点",
ysms: "工布公园",
bz: ""
}
], //
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "checkBox",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //
controlsWidth: 160, //
tableColumn: [
{ label: "语义名称", prop: "yymc" },
{ label: "要素类型", prop: "yslx" },
{ label: "要素名称", prop: "ysmc" },
{ label: "要素描述", prop: "ysms" },
{ label: "备注", prop: "bz" }
]
});
onMounted(() => {
tabHeightFn();
});
//
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 = () =>{
// pageData.tableConfiger.loading = true;
// qcckGet(queryFrom.value).then((res)=>{
// pageData.tableData = res.data.list;
// pageData.total = res.data.total;
// pageData.keyCount++;
// pageData.tableConfiger.loading = false;
// })
}
//
const delDictItem = (ids) =>{
// proxy.$confirm("", "", {type: "warning"}).then(() => {
// qcckPost(ids,url).then(()=>{
// proxy.$message({ type: "success", message: "" });
// getList();
// })
// }).catch(() => {});
}
//
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>

View File

@ -1,7 +1,7 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="典当物品信息管理"/>
<PageTitle title="操作记录"/>
</div>
<!-- 搜索 -->
<div ref="searchBox">

View File

@ -0,0 +1,174 @@
<template>
<div style="height:100%;width:100%" :id="echartsId"></div>
</template>
<script setup>
import * as echarts from "echarts";
import { fa } from "element-plus/es/locale.mjs";
import { onMounted, ref, reactive, defineProps, onUnmounted, watch, nextTick } from "vue";
const props = defineProps({
echartsId:{
type:String,
default:'lineId'
},
data:{
type:Object,
default:{
list:[],
colors:[]
}
}
});
watch(()=>props.data,val=>{
nextTick(()=>{ haandleData(val) })
},{immediate:true,deep:true})
const haandleData = (data)=>{
let val = [],x_value=[]
let color = data.colors;
let topColor = data.topColor;
data.list.forEach(item=>{
val.push(item.val);
x_value.push(item.label);
})
chartFn(val,x_value,color,topColor)
}
function chartFn(val,x_value,color,topColor) {
var myChart = echarts.init(document.getElementById(props.echartsId));
const sideData1 = val//[100, 110, 120, 134, 190, 230];
const name = ''; //"";
var x_value = x_value;//['', '', '', '', '', '', '']
var option = {
tooltip: { trigger: 'axis' },
legend: {
show: false,
},
grid: {
top:"30px",
left:"5px",
right:"0px",
bottom:"10%",
containLabel: true
},
toolbox: {
show: true,
},
calculable: true,
xAxis: [
{
type: 'category',
splitLine: {
show: false
},
data: x_value,
axisLabel: {
show: true,
textStyle: {
color: "#333" //X
},
},
}
],
yAxis: [
{
name:'单位:元/吨',
nameTextStyle: { color: "#fff" },
type: 'value',
splitLine: { show: false },
axisLabel: {
show: true,
textStyle: {
color: "#333" //X
},
},
}
],
series: [
{
name: name,
tooltip: { show: false },
type: 'bar',
barWidth: 12,
itemStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
offset: 0,
color: color ? color[0] : '#28EEBF'// 0%
}, {
offset: 1,
color: color ? color[1] : '#0DBAC5', // 100%
}], false)
}
},
data: sideData1,
barGap: 0,
label: {
show: true,
position: 'top',
distance: 10,
textStyle: {
color: '#0EBBC5',
fontSize: 14,
fontWeight: 'bold'
},
formatter: '{c}'
}
},
{
name: name,
type: 'bar',
barWidth: 12,
itemStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
offset: 0,
color: color ? color[0] : '#28EEBF'// 0%
}, {
offset: 1,
color: color ? color[1] : '#0DBAC5', // 100%
}], false)
}
},
barGap: 0,
data: sideData1,
label: {
show: true,
position: 'top',
textStyle: {
color: 'white',
fontSize: 10
}
}
},
{
name: name,
tooltip: {
show: false
},
type: 'pictorialBar',
itemStyle: {
borderWidth: 1,
borderColor: '#fff',
color: topColor || '#1bd6c2' //
},
symbol: 'path://M 0,0 l 90,0 l -60,60 l -90,0 z',
symbolSize: ['22', '12'], //
symbolOffset: ['-0', '-6'], //
symbolRotate: -30,
symbolPosition: 'end',
barGap: 0,
data: sideData1,
z: 3,
}
]
};
option && myChart.setOption(option);
window.addEventListener('resize',function(){
myChart.resize();
})
}
</script>
<style lang="scss" scoped>
</style>

View File

@ -9,6 +9,10 @@ const props = defineProps({
type:String,
default:'lineId'
},
color:{
type:String,
default:'#fff'
},
data:{
type:Array,
default:[]
@ -20,13 +24,12 @@ watch(()=>props.data,val=>{
function chartFn() {
var myChart = echarts.init(document.getElementById(props.echartsId));
var option;
option = {
var option = {
grid: {
top: "8%",
right: "2%",
left: "10%",
bottom: "7%",
bottom: "12%",
containLabel:true
},
tooltip: {
@ -51,7 +54,7 @@ function chartFn() {
axisLabel: { color: "#fff" },
axisLabel: {
show: true,
color: "#fff",
color: props.color,
interval: 0, //
// rotate: 15, //
}
@ -67,7 +70,7 @@ function chartFn() {
},
axisTick: { show: false },
axisLine: { show: false },
axisLabel: { color: "#fff" },
axisLabel: { color: props.color },
},
series: [
{

View File

@ -0,0 +1,119 @@
<template>
<div style="height:100%;width:100%" :id="echartsId"></div>
</template>
<script setup>
import * as echarts from "echarts";
import "echarts-gl";
import { ref, watch ,defineProps,nextTick } from "vue";
const props = defineProps({
echartsId:{
type:String,
default:'lineId'
},
color:{
type:String,
default:'lineId'
},
data:{
type:Array,
default:[]
}
});
watch(()=>props.data,val=>{
nextTick(()=>{ handleDate(val) })
},{immediate:true,deep:true})
const handleDate = (val)=>{
let newArray = val.map(v=>{
let obj = {
value: v.value,
name: v.label,
}
if(v.color) obj.itemStyle = { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { offset: 0, color: v.color[0] }, { offset: 1, color: v.color[1] } ])}
return obj
})
initChart(newArray)
}
const initChart = (data) => {
var myChart = echarts.init(document.getElementById(props.echartsId));
const option = {
backgroundColor: "transparent",
tooltip: {
trigger: "item",
formatter: "{a} <br/>{b}: {c} ({d}%)",
backgroundColor: "rgba(0,0,0,0.7)",
borderColor: "#0C2E5A",
textStyle: {
color: "#fff"
}
},
legend: {
top: "middle",
right: "5%",
orient: "vertical",
itemGap: 20,
textStyle: {
color: props.color,
fontSize: 14
},
itemWidth: 15,
itemHeight: 15,
icon: "roundRect",
formatter: function (name) {
const data = option.series[0].data;
const target = data.find((item) => item.label === name);
if (target) {
return `${name} ${target.value} ${( (target.value / 50) * 100 ).toFixed(0)}%`;
}
return name;
}
},
series: [
{
name: "情报反馈统计",
type: "pie",
radius: ["40%", "75%"],
center: ["30%", "50%"],
startAngle: 90,
zlevel: 10,
itemStyle: {},
selectedMode: "single",
selectedOffset: 30,
animation: true,
animationType: "scale",
animationEasing: "elasticOut",
label: { show: false },
labelLine: { show: false },
data: data,
zlevel: 10,
emphasis: {
scale: true,
scaleSize: 10,
itemStyle: {
shadowBlur: 30,
shadowColor: "rgba(0,0,0,0.6)"
}
}
}
]
};
option && myChart.setOption(option);
//
window.addEventListener("resize", () => {
myChart.resize();
});
};
</script>
<style lang="scss" scoped>
.echartsBox {
width: 100%;
height: 100%;
}
</style>

View File

@ -41,18 +41,6 @@ module.exports = {
changeOrigin: true,
logLevel: "debug"
},
"/data/rec": {
target: "http://80.93.24.195:8181",
changeOrigin: true,
logLevel: "debug",
pathRewrite: {
"^/data/rec": "/"
}
},
"/restcloud": {
target: "http://www.api.sc:8080",
changeOrigin: true,
},
}
},
chainWebpack(config) {